63 Py_ssize_t dictSize = PyDict_Size(pyDict);
65 PyObject* keys = PyDict_Keys(pyDict);
68 for (label i = 0; i < dictSize; i++)
71 PyObject* keyI = PyList_GetItem(keys, i);
73 const char* keyUTF8 = PyUnicode_AsUTF8(keyI);
85 PyObject* value = PyDict_GetItem(pyDict, keyI);
86 const char* valueTypeTmp = Py_TYPE(value)->tp_name;
88 if (word(valueTypeTmp) ==
"list")
94 PyObject* value0 = PyList_GetItem(value, 0);
95 const char* valueTypeTmp0 = Py_TYPE(value0)->tp_name;
96 if (word(valueTypeTmp0) ==
"type")
100 value1 = PyList_GetItem(value, 1);
116 const char* valueType = Py_TYPE(value1)->tp_name;
117 bool overwrite =
true;
118 if (word(valueType) ==
"str")
120 const char* valSet = PyUnicode_AsUTF8(value1);
121 ofDict.add(keyUTF8, word(valSet), overwrite);
123 else if (word(valueType) ==
"int")
125 long valSet = PyLong_AsLong(value1);
126 ofDict.add(keyUTF8, label(valSet), overwrite);
128 else if (word(valueType) ==
"bool")
130 label valSet = PyObject_IsTrue(value1);
131 ofDict.add(keyUTF8, valSet, overwrite);
133 else if (word(valueType) ==
"float")
135 scalar valSet = PyFloat_AS_DOUBLE(value1);
136 ofDict.add(keyUTF8, valSet, overwrite);
138 else if (word(valueType) ==
"list")
141 Py_ssize_t listSize = PyList_Size(value1);
146 scalarList valSetScalar;
147 valSetScalar.setSize(label(listSize));
148 labelList valSetLabel;
149 valSetLabel.setSize(label(listSize));
150 List<word> valSetWord;
151 valSetWord.setSize(label(listSize));
153 List<List<scalar>> valSetScalarList;
154 valSetScalarList.setSize(label(listSize));
155 List<List<label>> valSetLabelList;
156 valSetLabelList.setSize(label(listSize));
158 label isListListScalar = 0;
159 label isListListLabel = 0;
163 PyObject* tmp = PyList_GetItem(value1, 0);
164 const char* tmpType = Py_TYPE(tmp)->tp_name;
165 word tmpTypeWord = word(tmpType);
167 for (label j = 0; j < listSize; j++)
169 PyObject* valueListJ = PyList_GetItem(value1, j);
170 if (tmpTypeWord ==
"str")
172 const char* valSet = PyUnicode_AsUTF8(valueListJ);
173 valSetWord[j] = word(valSet);
175 else if (tmpTypeWord ==
"int")
177 long valSet = PyLong_AsLong(valueListJ);
178 valSetLabel[j] = label(valSet);
180 else if (tmpTypeWord ==
"float")
182 scalar valSet = PyFloat_AS_DOUBLE(valueListJ);
183 valSetScalar[j] = valSet;
185 else if (tmpTypeWord ==
"bool")
187 label valSet = PyObject_IsTrue(valueListJ);
188 valSetLabel[j] = valSet;
190 else if (tmpTypeWord ==
"list")
196 Py_ssize_t listSize1 = PyList_Size(valueListJ);
197 PyObject* tmp1 = PyList_GetItem(valueListJ, 0);
198 const char* tmpType1 = Py_TYPE(tmp1)->tp_name;
199 word tmpTypeWord1 = word(tmpType1);
201 valSetLabelList[j].setSize(listSize1);
202 valSetScalarList[j].setSize(listSize1);
205 for (label
k = 0;
k < listSize1;
k++)
207 PyObject* valueListK = PyList_GetItem(valueListJ,
k);
208 if (tmpTypeWord1 ==
"int")
210 long valSet = PyLong_AsLong(valueListK);
211 valSetLabelList[j][
k] = label(valSet);
214 else if (tmpTypeWord1 ==
"float")
216 scalar valSet = PyFloat_AS_DOUBLE(valueListK);
217 valSetScalarList[j][
k] = valSet;
218 isListListScalar = 1;
222 FatalErrorIn(
"pyDict2OFDict") <<
"listList only supports double and int"
223 << abort(FatalError);
229 FatalErrorIn(
"pyDict2OFDict") <<
"Type: <" << tmpTypeWord <<
"> for " << keyUTF8
230 <<
" list is not supported! Options are:"
231 <<
" str, int, bool, float, and list!"
232 << abort(FatalError);
237 if (tmpTypeWord ==
"str")
239 ofDict.add(keyUTF8, valSetWord, overwrite);
241 else if (tmpTypeWord ==
"int")
243 ofDict.add(keyUTF8, valSetLabel, overwrite);
245 else if (tmpTypeWord ==
"float")
247 ofDict.add(keyUTF8, valSetScalar, overwrite);
249 else if (tmpTypeWord ==
"bool")
251 ofDict.add(keyUTF8, valSetLabel, overwrite);
257 ofDict.add(keyUTF8, valSetLabelList, overwrite);
260 if (isListListScalar)
262 ofDict.add(keyUTF8, valSetScalarList, overwrite);
265 else if (word(valueType) ==
"dict")
270 ofDict.add(keyUTF8, subDict, overwrite);
274 FatalErrorIn(
"pyDict2OFDict") <<
"Type: " << valueType <<
" for " << keyUTF8
275 <<
" is not supported! Options are: str, int, float, bool, list, and dict!"
276 << abort(FatalError);
303 std::ostringstream fileNameStream(
"");
304 fileNameStream << prefix <<
".bin";
305 word fileName = fileNameStream.str();
308 PetscViewerBinaryOpen(PETSC_COMM_WORLD, fileName.c_str(), FILE_MODE_READ, &viewer);
309 VecLoad(vecIn, viewer);
310 PetscViewerDestroy(&viewer);
335 std::ostringstream fileNameStream(
"");
336 fileNameStream << prefix <<
".bin";
337 word fileName = fileNameStream.str();
340 PetscViewerBinaryOpen(PETSC_COMM_WORLD, fileName.c_str(), FILE_MODE_WRITE, &viewer);
341 VecView(vecIn, viewer);
342 PetscViewerDestroy(&viewer);
365 std::ostringstream fileNameStream(
"");
366 fileNameStream << prefix <<
".dat";
367 word fileName = fileNameStream.str();
370 PetscViewerASCIIOpen(PETSC_COMM_WORLD, fileName.c_str(), &viewer);
371 PetscViewerPushFormat(viewer, PETSC_VIEWER_ASCII_MATLAB);
372 VecView(vecIn, viewer);
373 PetscViewerDestroy(&viewer);
399 std::ostringstream fileNameStream(
"");
400 fileNameStream << prefix <<
".bin";
401 word fileName = fileNameStream.str();
404 PetscViewerBinaryOpen(PETSC_COMM_WORLD, fileName.c_str(), FILE_MODE_READ, &viewer);
405 MatLoad(matIn, viewer);
406 PetscViewerDestroy(&viewer);
431 std::ostringstream fileNameStream(
"");
432 fileNameStream << prefix <<
".bin";
433 word fileName = fileNameStream.str();
436 PetscViewerBinaryOpen(PETSC_COMM_WORLD, fileName.c_str(), FILE_MODE_WRITE, &viewer);
437 MatView(matIn, viewer);
438 PetscViewerDestroy(&viewer);
463 std::ostringstream fileNameStream(
"");
464 fileNameStream << prefix <<
".dat";
465 word fileName = fileNameStream.str();
468 PetscViewerASCIIOpen(PETSC_COMM_WORLD, fileName.c_str(), &viewer);
469 MatView(matIn, viewer);
470 PetscViewerDestroy(&viewer);
478 const label printToScreen)
505 const scalar vGreat = 1e200;
506 label useUpperBound = 0, useLowerBound = 0;
508 dictionary varBoundsDict =
allOptions.subDict(
"primalVarBounds");
510 word lowerBoundName = var.name() +
"Min";
511 word upperBoundName = var.name() +
"Max";
513 scalar varMin = varBoundsDict.lookupOrDefault<scalar>(lowerBoundName, -vGreat);
514 scalar varMax = varBoundsDict.lookupOrDefault<scalar>(upperBoundName, vGreat);
518 if (var[cellI] <= varMin)
523 if (var[cellI] >= varMax)
530 forAll(var.boundaryField(), patchI)
532 forAll(var.boundaryField()[patchI], faceI)
534 if (var.boundaryFieldRef()[patchI][faceI] <= varMin)
536 var.boundaryFieldRef()[patchI][faceI] = varMin;
539 if (var.boundaryFieldRef()[patchI][faceI] >= varMax)
541 var.boundaryFieldRef()[patchI][faceI] = varMax;
551 Info <<
"Bounding " << var.name() <<
"<" << varMax << endl;
555 Info <<
"Bounding " << var.name() <<
">" << varMin << endl;
565 const label printToScreen)
592 const scalar vGreat = 1e200;
593 label useUpperBound = 0, useLowerBound = 0;
595 dictionary varBoundsDict =
allOptions.subDict(
"primalVarBounds");
597 word lowerBoundName = var.name() +
"Min";
598 word upperBoundName = var.name() +
"Max";
600 scalar varMin = varBoundsDict.lookupOrDefault<scalar>(lowerBoundName, -vGreat);
601 scalar varMax = varBoundsDict.lookupOrDefault<scalar>(upperBoundName, vGreat);
605 for (label i = 0; i < 3; i++)
607 if (var[cellI][i] <= varMin)
609 var[cellI][i] = varMin;
612 if (var[cellI][i] >= varMax)
614 var[cellI][i] = varMax;
620 forAll(var.boundaryField(), patchI)
622 forAll(var.boundaryField()[patchI], faceI)
624 for (label i = 0; i < 3; i++)
626 if (var.boundaryFieldRef()[patchI][faceI][i] <= varMin)
628 var.boundaryFieldRef()[patchI][faceI][i] = varMin;
631 if (var.boundaryFieldRef()[patchI][faceI][i] >= varMax)
633 var.boundaryFieldRef()[patchI][faceI][i] = varMax;
644 Info <<
"Bounding " << var.name() <<
"<" << varMax << endl;
648 Info <<
"Bounding " << var.name() <<
">" << varMin << endl;
703 globalIndex result(localIndexSize);
724 if (fabs(val - refVal) < tol)
735 const SolverPerformance<scalar>& solverP,
736 const label printToScreen,
738 scalar& primalMaxRes)
747 scalar initRes = solverP.initialResidual();
749 if (initRes > primalMaxRes)
751 primalMaxRes = initRes;
756 Info << varName <<
" initRes: " << solverP.initialResidual()
757 <<
" finalRes: " << solverP.finalResidual()
758 <<
" nIters: " << solverP.nIterations() << endl;
763 const SolverPerformance<vector>& solverP,
764 const label printToScreen,
766 scalar& primalMaxRes)
782 vector initRes = solverP.initialResidual();
783 scalarList initResList = {initRes[0], initRes[1], initRes[2]};
786 if (initResList[1] > primalMaxRes)
788 primalMaxRes = initResList[1];
793 for (label i = 0; i < 3; i++)
796 <<
" initRes: " << solverP.initialResidual()[i]
797 <<
" finalRes: " << solverP.finalResidual()[i]
798 <<
" nIters: " << solverP.nIterations()[i] << endl;
804 const primitiveMesh&
mesh,
813 label cellI =
mesh.findCell(point);
819 const word fieldName,
820 const word fieldType)
831 mesh.time().timeName(),
835 if (fieldType ==
"volScalarField")
837 if (headerFile.typeHeaderOk<volScalarField>(
true))
842 else if (fieldType ==
"volVectorField")
844 if (headerFile.typeHeaderOk<volVectorField>(
true))
851 FatalErrorIn(
"DAUtility::isFieldReadable")
852 <<
"fieldType not supported! Options are volScalarField or volVectorField"
853 << abort(FatalError);