--- configure.ac.orig 2020-04-30 01:52:40.000000000 -0600
+++ configure.ac 2020-10-27 17:05:31.732729921 -0600
@@ -272,7 +272,7 @@ AC_ARG_ENABLE([cocoa],
[if test "$enableval" = "no"; then CONFIG_COCOA="no"; fi], [])
if test "$CONFIG_COCOA" = "yes"; then
- AC_CHECK_HEADER(CoCoA/io.H, [], [CONFIG_COCOA="no"])
+ AC_CHECK_HEADER(CoCoA/BigInt.H, [], [CONFIG_COCOA="no"])
fi
if test "$CONFIG_COCOA" = "yes"; then
save_LIBS="$LIBS"
--- configure.orig 2020-04-30 01:52:40.000000000 -0600
+++ configure 2020-10-27 17:06:22.817658796 -0600
@@ -16662,8 +16662,8 @@ fi
if test "$CONFIG_COCOA" = "yes"; then
- ac_fn_cxx_check_header_mongrel "$LINENO" "CoCoA/io.H" "ac_cv_header_CoCoA_io_H" "$ac_includes_default"
-if test "x$ac_cv_header_CoCoA_io_H" = xyes; then :
+ ac_fn_cxx_check_header_mongrel "$LINENO" "CoCoA/BigInt.H" "ac_cv_header_CoCoA_BigInt_H" "$ac_includes_default"
+if test "x$ac_cv_header_CoCoA_BigInt_H" = xyes; then :
else
CONFIG_COCOA="no"
--- src/TmpLESystemSolver.C.orig 2019-11-03 11:20:03.000000000 -0700
+++ src/TmpLESystemSolver.C 2020-11-12 16:15:52.906906533 -0700
@@ -29,6 +29,7 @@
#include "CoCoA/matrix.H"
#include "CoCoA/ring.H"
#include "CoCoA/error.H"
+#include "CoCoA/MachineInt.H"
// #include <vector> // Included by DenseMatrix.H
using std::vector;
@@ -50,7 +51,11 @@ namespace CoCoADortmund
for (size_t row = 0; row < NumRowsMSource; ++row)
for (size_t col = 0; col < NumColsMSource; ++col)
- SetEntry(MTarget, row, col, MSource(row, col));
+ {
+ const MachineInt rowInt(static_cast<unsigned long>(row));
+ const MachineInt colInt(static_cast<unsigned long>(col));
+ SetEntry(MTarget, row, col, MSource(rowInt, colInt));
+ }
}
// Solve the linear system M*x = b by using Gauss' algorithm
@@ -60,6 +65,7 @@ namespace CoCoADortmund
const size_t NumColsM = NumCols(M);
const size_t NumRowsb = NumRows(b);
const size_t NumColsb = NumCols(b);
+ const MachineInt zInt(0);
// Dimension check
if (NumRowsM != NumRowsb)
@@ -91,13 +97,17 @@ namespace CoCoADortmund
size_t row = 0;
for (size_t col = 0; col < NumColsM && row < NumRowsM; ++col)
{
+ const MachineInt rowInt(static_cast<unsigned long>(row));
+ const MachineInt colInt(static_cast<unsigned long>(col));
+
// Check if current column contains an element != 0
- if (IsZero(MCopy(row, col)))
+ if (IsZero(MCopy(rowInt, colInt)))
{
size_t i = row+1;
for ( ; i < NumRowsM; ++i)
{
- if (!IsZero(MCopy(i, col)))
+ const MachineInt iInt(static_cast<unsigned long>(i));
+ if (!IsZero(MCopy(iInt, colInt)))
{
// Switch MCopy and bCopy rows
MCopy->mySwapRows(i, row);
@@ -113,13 +123,14 @@ namespace CoCoADortmund
positions.push_back(make_pair(row, col));
// Found an element != 0 in current column; apply elemination
- c = MCopy(row, col);
+ c = MCopy(rowInt, colInt);
for (size_t i = row+1; i < NumRowsM; ++i)
{
// Transform MCopy and bCopy
- bCopy->myAddRowMul(i, row, -MCopy(i, col)/c);
- MCopy->myAddRowMul(i, row, -MCopy(i, col)/c);
+ const MachineInt iInt(static_cast<unsigned long>(i));
+ bCopy->myAddRowMul(i, row, -MCopy(iInt, colInt)/c);
+ MCopy->myAddRowMul(i, row, -MCopy(iInt, colInt)/c);
}
++row;
@@ -128,7 +139,8 @@ namespace CoCoADortmund
// row = rank(MCopy); check if a solution for the equation system exists
for (size_t i = row; i < NumRowsb; ++i)
{
- if (!IsZero(bCopy(i, 0)))
+ const MachineInt iInt(static_cast<unsigned long>(i));
+ if (!IsZero(bCopy(iInt, zInt)))
return false;
}
@@ -138,13 +150,16 @@ namespace CoCoADortmund
while (!positions.empty())
{
const size_t i = positions.back().first, j = positions.back().second;
+ const MachineInt iInt(static_cast<unsigned long>(i));
+ const MachineInt jInt(static_cast<unsigned long>(j));
- RingElem x(bCopy(i, 0));
+ RingElem x(bCopy(iInt, zInt));
for (size_t k = j + 1; k < NumColsM; ++k)
{
- x -= MCopy(i, k) * x0Tmp(k, 0);
+ const MachineInt kInt(static_cast<unsigned long>(k));
+ x -= MCopy(iInt, kInt) * x0Tmp(kInt, zInt);
}
- SetEntry(x0Tmp, j, 0, x/MCopy(i, j));
+ SetEntry(x0Tmp, j, 0, x/MCopy(iInt, jInt));
positions.pop_back();
}