10#include <fei_macros.hpp>
12#include <test_utils/test_LinearSystem.hpp>
13#include <test_utils/test_VectorSpace.hpp>
14#include <test_utils/test_MatrixGraph.hpp>
15#include <snl_fei_Factory.hpp>
16#include <fei_Vector.hpp>
17#include <fei_Matrix.hpp>
18#include <snl_fei_LinearSystem_General.hpp>
20#include <test_utils/LibraryFactory.hpp>
22#ifdef HAVE_FEI_AZTECOO
23#include <fei_Aztec_LinSysCore.hpp>
27#define fei_file "test_LinearSystem.cpp"
28#include <fei_ErrMacros.hpp>
30test_LinearSystem::test_LinearSystem(MPI_Comm comm)
35test_LinearSystem::~test_LinearSystem()
39int test_LinearSystem::runtests()
50int test_LinearSystem::test1()
55int test_LinearSystem::test2()
57#ifdef HAVE_FEI_AZTECOO
58 fei::SharedPtr<testData> testdata(
new testData(localProc_, numProcs_));
59 std::vector<int>& fieldIDs = testdata->fieldIDs;
60 std::vector<int>& idTypes = testdata->idTypes;
61 std::vector<int>& ids = testdata->ids;
63 fei::SharedPtr<LinearSystemCore> az_lsc(
new fei_trilinos::Aztec_LinSysCore(comm_));
65 char* param =
new char[64];
66 sprintf(param,
"debugOutput .");
68 CHK_ERR( az_lsc->parameters(1, ¶m) );
71 fei::SharedPtr<fei::Factory> factory(
new snl_fei::Factory(comm_, az_lsc));
73 fei::SharedPtr<fei::VectorSpace> vectorSpacePtr =
74 test_VectorSpace::create_VectorSpace(comm_,
75 testdata.get(), localProc_, numProcs_,
76 false,
false,
"U_LS2", factory);
78 fei::SharedPtr<fei::MatrixGraph> matrixGraphPtr =
79 test_MatrixGraph::create_MatrixGraph(testdata.get(), localProc_, numProcs_,
80 false,
false,
"U_LS2", vectorSpacePtr,
83 std::vector<int> crIDTypes(2);
84 std::vector<int> crFieldIDs(2);
85 crIDTypes[0] = idTypes[0]; crIDTypes[1] = idTypes[0];
86 crFieldIDs[0] = fieldIDs[0]; crFieldIDs[1] = fieldIDs[0];
88 CHK_ERR( matrixGraphPtr->initLagrangeConstraint(0, idTypes[1],
94 CHK_ERR( matrixGraphPtr->initComplete() );
96 fei::SharedPtr<fei::Vector> vec_lsc = factory->createVector(vectorSpacePtr);
98 fei::SharedPtr<fei::Vector> vec_lsc2 = factory->createVector(vectorSpacePtr,
true);
100 fei::SharedPtr<fei::Matrix> mat_lsc = factory->createMatrix(matrixGraphPtr);
102 fei::SharedPtr<fei::LinearSystem> linsys = factory->createLinearSystem(matrixGraphPtr);
103 linsys->setMatrix(mat_lsc);
104 linsys->setSolutionVector(vec_lsc2);
105 linsys->setRHS(vec_lsc);
108 int numIndices = matrixGraphPtr->getConnectivityNumIndices(blockID);
110 std::vector<int> indicesArray(numIndices);
111 int* indicesPtr = &indicesArray[0];
113 int checkNumIndices = 0;
114 CHK_ERR( matrixGraphPtr->getConnectivityIndices(blockID, 0,
115 numIndices, indicesPtr,
118 std::vector<double> data(ids.size(), 1.0);
119 double* dptr = &data[0];
120 std::vector<double*> coefPtrs(ids.size());
121 std::vector<double> crdata(2);
125 for(
unsigned ii=0; ii<ids.size(); ++ii) coefPtrs[ii] = dptr;
127 CHK_ERR( mat_lsc->sumIn(numIndices, indicesPtr, numIndices, indicesPtr,
130 CHK_ERR( vec_lsc->sumInFieldData(fieldIDs[0], idTypes[0],
134 CHK_ERR( linsys->loadLagrangeConstraint(0, &crdata[0], 0.0) );
136 CHK_ERR( mat_lsc->gatherFromOverlap() );
138 CHK_ERR( az_lsc->matrixLoadComplete() );
140 CHK_ERR( linsys->loadComplete() );
142 std::vector<int> crindices;
143 linsys->getConstrainedEqns(crindices);
144 if (crindices.size() != 2) {
148 CHK_ERR( az_lsc->writeSystem(
"U_LS2") );
156int test_LinearSystem::test3()
158#ifdef HAVE_FEI_AZTECOO
159 fei::SharedPtr<testData> testdata(
new testData(localProc_, numProcs_));
160 std::vector<int>& fieldIDs = testdata->fieldIDs;
161 std::vector<int>& idTypes = testdata->idTypes;
162 std::vector<int>& ids = testdata->ids;
164 fei::SharedPtr<LinearSystemCore> az_lsc(
new fei_trilinos::Aztec_LinSysCore(comm_));
166 char* param =
new char[64];
167 sprintf(param,
"debugOutput .");
169 CHK_ERR( az_lsc->parameters(1, ¶m) );
171 fei::SharedPtr<fei::Factory> factory(
new snl_fei::Factory(comm_, az_lsc));
173 fei::SharedPtr<fei::VectorSpace> vectorSpacePtr =
174 test_VectorSpace::create_VectorSpace(comm_,
175 testdata.get(), localProc_, numProcs_,
176 false,
false,
"U_LS3", factory);
178 fei::SharedPtr<fei::MatrixGraph> matrixGraphPtr =
179 test_MatrixGraph::create_MatrixGraph(testdata.get(), localProc_, numProcs_,
180 false,
false,
"U_LS3", vectorSpacePtr,
183 std::vector<int> crIDTypes(2);
184 std::vector<int> crFieldIDs(2);
185 crIDTypes[0] = idTypes[0]; crIDTypes[1] = idTypes[0];
186 crFieldIDs[0] = fieldIDs[0]; crFieldIDs[1] = fieldIDs[0];
188 CHK_ERR( matrixGraphPtr->initPenaltyConstraint(0, idTypes[1],
194 CHK_ERR( matrixGraphPtr->initComplete() );
196 fei::SharedPtr<fei::Vector> vec_lsc = factory->createVector(vectorSpacePtr);
198 fei::SharedPtr<fei::Vector> vec_lsc2 = factory->createVector(vectorSpacePtr,
true);
200 fei::SharedPtr<fei::Matrix> mat_lsc = factory->createMatrix(matrixGraphPtr);
202 fei::SharedPtr<fei::LinearSystem> linsys = factory->createLinearSystem(matrixGraphPtr);
203 CHK_ERR( linsys->parameters(1, ¶m) );
206 linsys->setMatrix(mat_lsc);
207 linsys->setSolutionVector(vec_lsc2);
208 linsys->setRHS(vec_lsc);
211 int numIndices = matrixGraphPtr->getConnectivityNumIndices(blockID);
213 std::vector<int> indicesArray(numIndices);
214 int* indicesPtr = &indicesArray[0];
216 int checkNumIndices = 0;
217 CHK_ERR( matrixGraphPtr->getConnectivityIndices(blockID, 0,
218 numIndices, indicesPtr,
221 std::vector<double> data(ids.size(), 1.0);
222 double* dptr = &data[0];
223 std::vector<double*> coefPtrs(ids.size());
224 std::vector<double> crdata(2);
228 for(
unsigned ii=0; ii<ids.size(); ++ii) coefPtrs[ii] = dptr;
230 CHK_ERR( mat_lsc->sumIn(numIndices, indicesPtr, numIndices, indicesPtr,
233 CHK_ERR( vec_lsc->sumInFieldData(fieldIDs[0], idTypes[0],
237 CHK_ERR( linsys->loadPenaltyConstraint(0, &crdata[0], 100.0, 0.0) );
239 CHK_ERR( mat_lsc->gatherFromOverlap() );
241 CHK_ERR( az_lsc->matrixLoadComplete() );
243 CHK_ERR( linsys->loadComplete() );
245 CHK_ERR( az_lsc->writeSystem(
"U_LS3") );
253int test_LinearSystem::test4()
255#ifdef HAVE_FEI_AZTECOO
256 fei::SharedPtr<testData> testdata(
new testData(localProc_, numProcs_));
257 std::vector<int>& fieldIDs = testdata->fieldIDs;
258 std::vector<int>& idTypes = testdata->idTypes;
259 std::vector<int>& ids = testdata->ids;
261 fei::SharedPtr<LinearSystemCore> az_lsc(
new fei_trilinos::Aztec_LinSysCore(comm_));
263 char* param =
new char[64];
264 sprintf(param,
"debugOutput .");
266 CHK_ERR( az_lsc->parameters(1, ¶m) );
269 fei::SharedPtr<fei::Factory> factory(
new snl_fei::Factory(comm_, az_lsc));
271 fei::SharedPtr<fei::VectorSpace> vectorSpacePtr =
272 test_VectorSpace::create_VectorSpace(comm_,
273 testdata.get(), localProc_, numProcs_,
274 false,
false,
"U_LS4", factory);
276 fei::SharedPtr<fei::MatrixGraph> matrixGraphPtr =
277 test_MatrixGraph::create_MatrixGraph(testdata.get(), localProc_, numProcs_,
278 false,
false,
"U_LS4", vectorSpacePtr,
281 std::vector<int> crIDTypes(2);
282 std::vector<int> crFieldIDs(2);
283 crIDTypes[0] = idTypes[0]; crIDTypes[1] = idTypes[0];
284 crFieldIDs[0] = fieldIDs[0]; crFieldIDs[1] = fieldIDs[0];
286 CHK_ERR( matrixGraphPtr->initLagrangeConstraint(0, idTypes[1],
292 CHK_ERR( matrixGraphPtr->initComplete() );
294 fei::SharedPtr<fei::Vector> vec_lsc = factory->createVector(vectorSpacePtr);
296 fei::SharedPtr<fei::Vector> vec_lsc2 = factory->createVector(vectorSpacePtr,
true);
298 fei::SharedPtr<fei::Matrix> mat_lsc = factory->createMatrix(matrixGraphPtr);
300 fei::SharedPtr<fei::LinearSystem> linsys = factory->createLinearSystem(matrixGraphPtr);
301 linsys->setMatrix(mat_lsc);
302 linsys->setSolutionVector(vec_lsc2);
303 linsys->setRHS(vec_lsc);
306 int numIndices = matrixGraphPtr->getConnectivityNumIndices(blockID);
308 std::vector<int> indicesArray(numIndices);
309 int* indicesPtr = &indicesArray[0];
311 int checkNumIndices = 0;
312 CHK_ERR( matrixGraphPtr->getConnectivityIndices(blockID, 0,
313 numIndices, indicesPtr,
316 std::vector<double> data(ids.size(), 1.0);
317 double* dptr = &data[0];
318 std::vector<double*> coefPtrs(ids.size());
319 std::vector<double> crdata(2);
323 for(
unsigned ii=0; ii<ids.size(); ++ii) coefPtrs[ii] = dptr;
325 CHK_ERR( mat_lsc->sumIn(numIndices, indicesPtr, numIndices, indicesPtr,
328 CHK_ERR( vec_lsc->sumInFieldData(fieldIDs[0], idTypes[0],
329 ids.size(), &ids[0], &data[0]) );
331 CHK_ERR( linsys->loadLagrangeConstraint(0, &crdata[0], 0.0) );
333 CHK_ERR( mat_lsc->gatherFromOverlap() );
335 CHK_ERR( az_lsc->matrixLoadComplete() );
337 CHK_ERR( linsys->loadComplete() );
339 CHK_ERR( az_lsc->writeSystem(
"U_LS4") );
347int test_LinearSystem::test5()