Frobby 0.9.5
lattice.cpp
Go to the documentation of this file.
1/* Frobby: Software for monomial ideal computations.
2 Copyright (C) 2007 Bjarke Hammersholt Roune (www.broune.com)
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see http://www.gnu.org/licenses/.
16*/
17#include "stdinc.h"
18#include "lattice.h"
19
20#include "BigIdeal.h"
21
23 unsigned int add,
24 unsigned int addTo,
25 const mpz_class& mult) {
26 if (mult == 0)
27 return;
28
29 for (unsigned int i = 0; i < basis[0].size(); ++i)
30 basis[addTo][i] += basis[add][i] * mult;
31}
32
34 ASSERT(!basis.empty());
35 unsigned int rowCount = basis.getGeneratorCount();
36 unsigned int columnCount = basis[0].size();
37
38 for (unsigned int col = columnCount - 1; col >= 1; --col) {
39 for (unsigned int i = 0; i < rowCount; ++i) {
40 mpz_class sign;
41 if (basis[i][col] == 1)
42 sign = 1;
43 else if (basis[i][col] == -1)
44 sign = -1;
45 else
46 continue;
47
48 for (unsigned int j = 0; j < rowCount; ++j) {
49 if (j == i)
50 continue;
51 addMultiple(basis, i, j, -1 * sign * basis[j][col]);
52 }
53
54 break;
55 }
56 }
57}
bool empty() const
Definition: BigIdeal.cpp:192
size_t getGeneratorCount() const
Definition: BigIdeal.h:144
void makeZeroesInLatticeBasis(BigIdeal &basis)
Definition: lattice.cpp:33
void addMultiple(BigIdeal &basis, unsigned int add, unsigned int addTo, const mpz_class &mult)
Definition: lattice.cpp:22
#define ASSERT(X)
Definition: stdinc.h:86