Line |
Branch |
Exec |
Source |
1 |
|
|
// ______ ______ _ _ _____ ______ |
2 |
|
|
// | ____| ____| | (_)/ ____| | ____| |
3 |
|
|
// | |__ | |__ | | _| (___ ___| |__ |
4 |
|
|
// | __| | __| | | | |\___ \ / __| __| |
5 |
|
|
// | | | |____| |____| |____) | (__| |____ |
6 |
|
|
// |_| |______|______|_|_____/ \___|______| |
7 |
|
|
// Finite Elements for Life Sciences and Engineering |
8 |
|
|
// |
9 |
|
|
// License: LGL2.1 License |
10 |
|
|
// FELiScE default license: LICENSE in root folder |
11 |
|
|
// |
12 |
|
|
// Main authors: J. Foulon & J-F. Gerbeau & V. Martin |
13 |
|
|
// |
14 |
|
|
|
15 |
|
|
#ifndef _FELISCE_PARAM_HPP |
16 |
|
|
#define _FELISCE_PARAM_HPP |
17 |
|
|
|
18 |
|
|
// System includes |
19 |
|
|
#include <cstdlib> |
20 |
|
|
#include <map> |
21 |
|
|
#include <unordered_map> |
22 |
|
|
|
23 |
|
|
// External includes |
24 |
|
|
|
25 |
|
|
// Project includes |
26 |
|
|
#include "Core/getPotCustomized.hpp" |
27 |
|
|
#include "Core/shared_pointers.hpp" |
28 |
|
|
#include "Geometry/geometricMeshRegion.hpp" |
29 |
|
|
#include "Core/felisce.hpp" |
30 |
|
|
#include "Core/felisce_error.hpp" |
31 |
|
|
#include "Core/singleton.hpp" |
32 |
|
|
#include "Core/chrono.hpp" |
33 |
|
|
#include "Core/util_string.hpp" |
34 |
|
|
#include "Core/commandLineOption.hpp" |
35 |
|
|
#include "Hyperelasticity/enumHyperelasticity.hpp" |
36 |
|
|
#include "Hyperelasticity/pressureData.hpp" |
37 |
|
|
#include "HyperelasticityLaws/HyperElasticLaw.hpp" |
38 |
|
|
|
39 |
|
|
// TODO: Refactor all this in order to use variables instead of member variables, otherwise this object is very heavy |
40 |
|
|
|
41 |
|
|
namespace felisce |
42 |
|
|
{ |
43 |
|
|
typedef std::unordered_map<std::string,ElementFieldDynamicValue*> ElementFieldDynamicValueMapType; |
44 |
|
|
|
45 |
|
|
/** |
46 |
|
|
* @class UniqueFelisceParam |
47 |
|
|
* @brief Auxiliary class for reading the felisce data in the data file and on the command line option. |
48 |
|
|
*/ |
49 |
|
|
class UniqueFelisceParam |
50 |
|
|
{ |
51 |
|
|
private: |
52 |
|
|
std::unordered_map<std::string, std::vector<std::string> > m_help; |
53 |
|
|
|
54 |
|
|
//Disable default copy-constructor and copy-assignement. |
55 |
|
|
//If copy-constructor is needed, proper copy of ElementFieldDynamicValueMap has |
56 |
|
|
//to be written. |
57 |
|
|
UniqueFelisceParam(const UniqueFelisceParam &); |
58 |
|
|
UniqueFelisceParam(UniqueFelisceParam &); |
59 |
|
|
UniqueFelisceParam& operator=(const UniqueFelisceParam&); |
60 |
|
|
UniqueFelisceParam& operator=(UniqueFelisceParam&); |
61 |
|
|
|
62 |
|
|
std::size_t mInstanceIndex = 0; |
63 |
|
|
|
64 |
|
|
public: |
65 |
|
|
|
66 |
|
|
/// Pointer definition of UniqueFelisceParam |
67 |
|
|
FELISCE_CLASS_POINTER_DEFINITION(UniqueFelisceParam); |
68 |
|
|
|
69 |
|
|
UniqueFelisceParam(const std::size_t instanceIndex = 0); |
70 |
|
|
|
71 |
|
|
virtual ~UniqueFelisceParam(); |
72 |
|
|
|
73 |
|
|
const std::size_t& getInstanceIndex() { return mInstanceIndex; }; |
74 |
|
|
|
75 |
|
|
CommandLineOption initialize(const int argc, const char** argv); |
76 |
|
|
|
77 |
|
|
void initialize(CommandLineOption & opt); |
78 |
|
|
|
79 |
|
|
/*! |
80 |
|
|
\brief Read the felisce data in the data file and on the command line option. |
81 |
|
|
*/ |
82 |
|
|
void parseInputFile(int argc,char **argv,std::string filename); |
83 |
|
|
|
84 |
|
|
/*! |
85 |
|
|
\brief Read the felisce data in the data file and on the command line option. |
86 |
|
|
With data only dependent on the application. |
87 |
|
|
*/ |
88 |
|
465 |
virtual void userParseInputFile(GetPotCustomized& /*gpc*/){}; |
89 |
|
|
|
90 |
|
|
/*! |
91 |
|
|
* In verbose mode, display the read values . |
92 |
|
|
*/ |
93 |
|
|
void print(int verbose = 0, std::ostream& outstr = std::cout) const; |
94 |
|
|
|
95 |
|
|
/*! |
96 |
|
|
* Display help about available Felisce data, like a manpage. |
97 |
|
|
*/ |
98 |
|
|
void printHelp(); |
99 |
|
|
|
100 |
|
|
/* |
101 |
|
|
* Get an *elementFieldDynamicValue from ElementFieldDynamicValueMap, |
102 |
|
|
* returns NULL the std::unordered_map does not contain it. |
103 |
|
|
*/ |
104 |
|
|
ElementFieldDynamicValue *elementFieldDynamicValue(const char* name); |
105 |
|
|
|
106 |
|
|
/* |
107 |
|
|
* \brief Expand environment variables $HOME, $FELISCE_DATA_DIR, $FELISCE_INRIA_DATA_DIR and $FELISCE_RESULT_DIR in a std::string. |
108 |
|
|
* |
109 |
|
|
* \param[in] inputPath The input std::string, that may contains $HOME or $FELISCE_DATA_DIR or $FELISCE_INRIA_DATA_DIR or FELISCE_RESULT_DIR |
110 |
|
|
* \param[in] datafile data file where inputPath come from, for debug message purpose |
111 |
|
|
* \param[in] section data file section where inputPath come from, for debug message purpose |
112 |
|
|
* \param[in] inputPathName data file variable where inputPath come from, for debug message purpose |
113 |
|
|
* \param[out] pathExpanded inputPathName where environment variables have been expanded |
114 |
|
|
* |
115 |
|
|
* FEL_ERROR is called in case of errors, with various corresponding error |
116 |
|
|
* messages. |
117 |
|
|
*/ |
118 |
|
|
std::string expandEnvironmentVariables(const std::string inputPath, |
119 |
|
|
const std::string datafile, const std::string section, const std::string inputPathName); |
120 |
|
|
|
121 |
|
|
public: |
122 |
|
|
|
123 |
|
|
int tmpLinSolverVerbose; |
124 |
|
|
|
125 |
|
|
//Debug |
126 |
|
|
int m_verbose,m_refVerbose; |
127 |
|
|
|
128 |
|
|
// Chrono |
129 |
|
|
Chrono timer; |
130 |
|
|
bool chronoToScreen; |
131 |
|
|
bool chronoToFile; |
132 |
|
|
|
133 |
|
|
// Data |
134 |
|
|
std::string inputDirectory; |
135 |
|
|
std::string inputDirRaw; |
136 |
|
|
std::string inputFile; |
137 |
|
|
std::string podBasisFile; |
138 |
|
|
felInt timeMaxCaseFile; |
139 |
|
|
bool readDisplFromFile; |
140 |
|
|
bool readPreStressedDisplFromFile; |
141 |
|
|
|
142 |
|
|
// Transient |
143 |
|
|
double timeStep; |
144 |
|
|
double timeMax; |
145 |
|
|
double time; |
146 |
|
|
double timeStepCharact; |
147 |
|
|
int iteration; |
148 |
|
|
int timeIterationMax; |
149 |
|
|
int frequencyWriteSolution; |
150 |
|
|
int periodNbSteps; |
151 |
|
|
std::vector<int> intervalWriteSolution; |
152 |
|
|
std::string integrationTimeMethod; |
153 |
|
|
bool writeSolutionMeshes; |
154 |
|
|
|
155 |
|
|
// Variable |
156 |
|
|
std::vector<std::string> nameVariable; |
157 |
|
|
bool non_p1_mesh = false; |
158 |
|
|
std::vector<int> typeOfFiniteElement; |
159 |
|
|
std::vector<int> degreeOfExactness; |
160 |
|
|
std::vector<bool> decomposePlaneTransverse; |
161 |
|
|
std::vector<int> planeDegreeOfExactness; |
162 |
|
|
std::vector<int> transverseDegreeOfExactness; |
163 |
|
|
std::vector<PhysicalVariable> physicalVariable; |
164 |
|
|
|
165 |
|
|
// Mesh |
166 |
|
|
std::string meshDir; |
167 |
|
|
std::string meshDirRaw; |
168 |
|
|
std::vector<std::string> inputMesh; |
169 |
|
|
std::vector<std::string> outputMesh; |
170 |
|
|
felInt outputFileFormat; |
171 |
|
|
std::vector<int> idMesh; |
172 |
|
|
std::string resultDirRaw; |
173 |
|
|
std::string resultDir; |
174 |
|
|
std::string resultDirStressesRaw; |
175 |
|
|
std::string resultDirStresses; |
176 |
|
|
std::vector<std::string> prefixName; |
177 |
|
|
std::string CVGraphInterface; |
178 |
|
|
std::unordered_map<std::string , std::map<int, std::string> > felName2MapintRef2DescLine; |
179 |
|
|
bool duplicateSupportDof; |
180 |
|
|
bool effective2dGEOmesh; |
181 |
|
|
bool flipNormal; |
182 |
|
|
bool readNodesReferences; |
183 |
|
|
// List of surfaces (or segments) that are part of the domain and not boundary of tetrahedra (or surfaces) |
184 |
|
|
std::vector<felInt> notBoundarySurfaceLabels; |
185 |
|
|
bool reinterpolation; |
186 |
|
|
bool extendToLowerDimensions; |
187 |
|
|
std::string choiceDirectionTangent; |
188 |
|
|
bool whenExtrudePreserveOriginalCoordinates; |
189 |
|
|
bool checkVolumeOrientation; |
190 |
|
|
bool checkNormalOrientation; |
191 |
|
|
int numCoor = 0; // Number of coordinates (2D/3D) |
192 |
|
|
|
193 |
|
|
// Geometry |
194 |
|
|
struct S_Geo { |
195 |
|
|
double tolrescaling = 1.; |
196 |
|
|
} Geo; |
197 |
|
|
|
198 |
|
|
// Physics |
199 |
|
|
int unit; |
200 |
|
|
double spaceUnit; // This number multiplies all the coordinates of the mesh. Example: if the mesh is in millimeters, spaceUnit = 0.1 convert it in centimeters |
201 |
|
|
std::string model; |
202 |
|
|
int testCase; |
203 |
|
|
double u_max_inlet; |
204 |
|
|
double max_flow_scaling; |
205 |
|
|
double T_sis; |
206 |
|
|
double T; |
207 |
|
|
double symmetry; |
208 |
|
|
std::vector<int> dimension; |
209 |
|
|
|
210 |
|
|
// ROM |
211 |
|
|
std::string ROMmethod; |
212 |
|
|
bool solveEigenProblem; |
213 |
|
|
bool optimizePotential; |
214 |
|
|
double chiSchrodinger; |
215 |
|
|
bool useROM; |
216 |
|
|
felInt dimRomBasis; |
217 |
|
|
felInt dimCollocationPts; |
218 |
|
|
felInt numApproxMode; |
219 |
|
|
felInt nCutOff; |
220 |
|
|
std::string collocationPtsFile; |
221 |
|
|
bool useImprovedRec; |
222 |
|
|
felInt dimOrthComp; |
223 |
|
|
int orderALP; |
224 |
|
|
bool readBasisFromFile; |
225 |
|
|
bool writeBasisEvolution; |
226 |
|
|
bool hasSource; |
227 |
|
|
int numberOfSource; |
228 |
|
|
felInt numberOfSnapshot; |
229 |
|
|
felInt samplingFrequency; |
230 |
|
|
|
231 |
|
|
// POD |
232 |
|
|
bool verbose_ensight; |
233 |
|
|
int nbTestCase; |
234 |
|
|
int snap_centered; |
235 |
|
|
int L2Mass; |
236 |
|
|
std::string output_dir; |
237 |
|
|
std::string output_file; |
238 |
|
|
std::string case_dir; |
239 |
|
|
std::string case_file_name; |
240 |
|
|
std::string snap_interval; |
241 |
|
|
std::string variable_name; |
242 |
|
|
std::string podFolder; |
243 |
|
|
double timeStepSnap; |
244 |
|
|
|
245 |
|
|
// Optimal reconstruction |
246 |
|
|
double targetHR; |
247 |
|
|
double timeWindowSize; |
248 |
|
|
std::string image_modality; |
249 |
|
|
double sistolicTime; |
250 |
|
|
std::string patients_data_dir; |
251 |
|
|
double HRwindowSize; |
252 |
|
|
int nbMeasures; |
253 |
|
|
int nbModes; |
254 |
|
|
std::string targetTime; |
255 |
|
|
bool useField2Measures; |
256 |
|
|
bool doSnapshotsSVD; |
257 |
|
|
bool calculateRieszRepresenters; |
258 |
|
|
std::string measuresFile; |
259 |
|
|
std::string targetSim; |
260 |
|
|
std::string rrFolder; |
261 |
|
|
std::string fieldFolder; |
262 |
|
|
std::string hashTableMesh; |
263 |
|
|
std::string modelReductionTechnique; |
264 |
|
|
|
265 |
|
|
// Pressure estimation |
266 |
|
|
int inletBoundaryLabel; |
267 |
|
|
int wallBoundaryLabel; |
268 |
|
|
std::vector<int> outletBoundaryLabels; |
269 |
|
|
std::vector<std::string> testFunctionsPath; |
270 |
|
|
std::vector<std::string> uStarPath; |
271 |
|
|
|
272 |
|
|
// PostProcCFD |
273 |
|
|
std::string caseDirCFD; |
274 |
|
|
std::string caseFileNameCFD; |
275 |
|
|
|
276 |
|
|
// Fluid |
277 |
|
|
int orderBdfNS; |
278 |
|
|
int orderBdfFS; |
279 |
|
|
bool quasistatic; |
280 |
|
|
double density; |
281 |
|
|
double viscosity; |
282 |
|
|
double NS_alpha; // like a capacitance in Rp,C,Rd lumpedModelBC model |
283 |
|
|
double NS_beta; // like inverse of distal resistance in Rp,C,Rd lumpedModelBC model |
284 |
|
|
double NS_gamma; // like proximal resistance in Rp,C,Rd lumpedModelBC model |
285 |
|
|
int NSmodifFlag; // flag: 0 = no modified NS model |
286 |
|
|
int NS_modifLabel; // currentLabel where we apply modified NS terms |
287 |
|
|
int inletLabel; // label of an inlet of interest |
288 |
|
|
int outletLabel; // label of an outlet of interest |
289 |
|
|
double referenceValue1; // any reference value (general purpose) |
290 |
|
|
double referenceValue2; // any reference value (general purpose) |
291 |
|
|
double referenceValue3; // any reference value (general purpose) |
292 |
|
|
double referenceValue4; // any reference value (general purpose) |
293 |
|
|
int characteristicMethod; // to switch from semi-implicit resolution to method of characteristics |
294 |
|
|
int addedBoundaryFlag; // flag: 0 = no stabilization |
295 |
|
|
std::vector<int> stabilizationLabel; // label where we use stabilization |
296 |
|
|
double stabilizationCoef; // coef for tune stabilization |
297 |
|
|
int explicitAdvection; |
298 |
|
|
int CVGraphInterfaceVariationalBC; |
299 |
|
|
double NitscheStabilizParam; //Nitsche's stabilization parameter |
300 |
|
|
double NitschePenaltyParam; //Nitsche's penalty parameter |
301 |
|
|
double ContactTolerance; //Tolerance value for the contact with a simple straight wall handled by the structure |
302 |
|
|
bool useSymmetricStress; |
303 |
|
|
int NSequationFlag; // Flag to choose implementation method of advective term |
304 |
|
|
double stabSUPG; // SUPG stabilization parameter |
305 |
|
|
double stabdiv; // stab parameter div div |
306 |
|
|
int typeSUPG; // type of SUPG stabilization |
307 |
|
|
int NSStabType; // type of stabilization for advection and finite element for NS equation |
308 |
|
|
double stabFOVel; // velocity jump coefficient for face-oriented stabilization |
309 |
|
|
double stabFOPre; // pressure jump coefficient for face-oriented stabilization |
310 |
|
|
int orderPressureExtrapolation; // order of the pressure extrapolation for NSFracStep solvers |
311 |
|
|
int incrementalFS; |
312 |
|
|
double coefRotScheme; // coef for the rotational incremental NSFracStep solvers |
313 |
|
|
int useALEformulation; // 0: no ALE 1: standard ALE, 2: stabilized ALE |
314 |
|
|
bool bcInRefConfiguration; // = true means BC are applied on the reference ALE configuration |
315 |
|
|
bool useElasticExtension; |
316 |
|
|
bool initALEDispByFile; |
317 |
|
|
bool updateMeshByVelocity; |
318 |
|
|
double theta; // theta parameter (0 \geq theta \geq 1) in the theta-method (time marching) |
319 |
|
|
bool nonLinearFluid; //bool non linear solver |
320 |
|
|
int timeScheme; |
321 |
|
|
double gammaNM; |
322 |
|
|
double betaNM; |
323 |
|
|
|
324 |
|
|
// Poroelasticity |
325 |
|
|
double biotCoefficient; |
326 |
|
|
double biotModulus; |
327 |
|
|
double isoPermeab; |
328 |
|
|
double anisoPermeab; |
329 |
|
|
int validationTest; |
330 |
|
|
bool scalePressureEq; |
331 |
|
|
|
332 |
|
|
// FSI |
333 |
|
|
bool fsiCoupling; |
334 |
|
|
std::string typeOfInterface; |
335 |
|
|
int fsiRNscheme; |
336 |
|
|
double gammaRN; // Robin parameter for iterative RN coupling with solid |
337 |
|
|
bool useLumpedMassRN; |
338 |
|
|
bool useMassLumping; |
339 |
|
|
std::vector<int> fsiInterfaceLabel; |
340 |
|
|
double domainDecompositionToll; |
341 |
|
|
int domainDecompositionMaxIt; |
342 |
|
|
bool hasOldMaster; |
343 |
|
|
|
344 |
|
|
// ZeroMQ |
345 |
|
|
std::string socketTransport; // communication transport protocol (tcp, ipc, inproc,...) |
346 |
|
|
std::string socketAddress; // transport-specific address (interface) to connect to (ex: 127.0.0.1 for localhost) |
347 |
|
|
std::string socketPort; // for tcp transport, specifies the port on the interface |
348 |
|
|
|
349 |
|
|
//immersed data for the structure penalisation |
350 |
|
|
bool hasImmersedData; |
351 |
|
|
std::string meshDirImmersedStruct; |
352 |
|
|
std::string meshFileImmersedStruct; |
353 |
|
|
double penaltyCoeffImmersedStruct; |
354 |
|
|
int allowProjectionImmersedStruct; |
355 |
|
|
double valueSourceImmersedStruct; |
356 |
|
|
int useMassMatrix; // specify the content of the fourth block of the fluid matrix for the implicit immersed problems. 1: Penalisation coefficient * Mass matrix of the structure. 0: Penalisation coefficient. |
357 |
|
|
bool hasDivDivStab; // modification of the SUPG and div div stabilization to improve mass convervation across the valve (cf. Kamensky et al., CMAME, 284, 1005-1053) |
358 |
|
|
double localDivDivPenalty; |
359 |
|
|
bool divDivStabPostProcess; // boolean to print the results relative to the intersection of the structure mesh with the fluid mesh in files "intersection.****.scl" |
360 |
|
|
bool intersectedSubElementsPostProcess; // boolean to print the results relative to the edges of the fluid mesh intersected by the structure mesh in files "intersectedEdges.****.scl" |
361 |
|
|
bool useFDlagrangeMult; |
362 |
|
|
bool massConstraint; |
363 |
|
|
std::vector<felInt> japanLabels; |
364 |
|
|
bool BHstab; |
365 |
|
|
bool BPstab; |
366 |
|
|
double stabCoeffLag; |
367 |
|
|
bool useFicItf; |
368 |
|
|
bool flipItfNormal; |
369 |
|
|
bool useAverageNormal; |
370 |
|
|
|
371 |
|
|
// M1G library interface |
372 |
|
|
struct S_M1G { |
373 |
|
|
bool enable; |
374 |
|
|
int verbose; |
375 |
|
|
std::vector<int> labelPhys; |
376 |
|
|
std::vector<int> labelFict; |
377 |
|
|
std::vector<felInt> triLst; |
378 |
|
|
std::vector<felInt> verLst; |
379 |
|
|
std::string outdir; |
380 |
|
|
bool writeM1Gmeshes; |
381 |
|
|
} M1G; |
382 |
|
|
|
383 |
|
|
//fkpp |
384 |
|
|
std::vector<double> sourcePos; |
385 |
|
|
|
386 |
|
|
// Nitsche-XFEM formulation |
387 |
|
|
bool useDynamicStructure; |
388 |
|
|
bool useGhostPenalty; |
389 |
|
|
double coefGhostPenalty; |
390 |
|
|
bool useProjectionForNitscheXFEM; |
391 |
|
|
bool useInterfaceFlowStab; |
392 |
|
|
felInt couplingSchemeStoppingCriteria; |
393 |
|
|
bool useODESolve; |
394 |
|
|
bool usePenaltyFreeNitscheMethod; |
395 |
|
|
felInt contactDarcy; |
396 |
|
|
double epsDarcy; |
397 |
|
|
double kDarcy; |
398 |
|
|
bool writeXFEMmeshes; |
399 |
|
|
bool confIntersection; |
400 |
|
|
std::vector<int> structures; // Structure label (mesh file) |
401 |
|
|
std::vector<int> numficxstr; // Number of fictitious structure per structure |
402 |
|
|
std::vector<int> fictitious; // Fictitious structure label (mesh file)(one or more for evry structure) |
403 |
|
|
std::vector<int> meanLabel; |
404 |
|
|
|
405 |
|
|
// Solid |
406 |
|
|
double densitySolid; |
407 |
|
|
double young; |
408 |
|
|
double poisson; |
409 |
|
|
double coeffReaction; //coeff for diaphragm and chest reaction - lung model, mechanically induced respiration |
410 |
|
|
double lambda_lame; |
411 |
|
|
double mu_lame; |
412 |
|
|
double thickness; |
413 |
|
|
double alpha_rayleigh; |
414 |
|
|
double beta_rayleigh; |
415 |
|
|
bool hasRayleighDamping; |
416 |
|
|
int planeStressStrain; |
417 |
|
|
int volumicOrSurfacicForce; |
418 |
|
|
struct CiarletGeymonatType { |
419 |
|
|
double kappa1; |
420 |
|
|
double kappa2; |
421 |
|
|
} CiarletGeymonat; |
422 |
|
|
struct OgdenType { |
423 |
|
|
double C1; |
424 |
|
|
double C2; |
425 |
|
|
double a; |
426 |
|
|
} Ogden; |
427 |
|
|
int nbSubRegions; |
428 |
|
|
int flagJacobi; |
429 |
|
|
|
430 |
|
|
double hyperelastic_bulk; // for penalization term in hyperelasticity constitutive law. |
431 |
|
|
double volumic_mass; |
432 |
|
|
bool hasSolidMidpoint; |
433 |
|
|
double solidRadius; |
434 |
|
|
std::string typeOfElasticityModel; |
435 |
|
|
std::string typeOfShellModel; |
436 |
|
|
std::vector<int> contactLabelPair; |
437 |
|
|
std::vector<int> rayOrientation; |
438 |
|
|
double contactGap; |
439 |
|
|
bool evalEnergy; |
440 |
|
|
bool velocityConstrained; |
441 |
|
|
|
442 |
|
|
// Beam |
443 |
|
|
struct Beam { |
444 |
|
|
int sub_integration; |
445 |
|
|
bool timoshenko; |
446 |
|
|
double diameter; |
447 |
|
|
double inner_diameter; |
448 |
|
|
double depth; |
449 |
|
|
double cross_area; |
450 |
|
|
double effective_area_y; |
451 |
|
|
double effective_area_z; |
452 |
|
|
double moment_of_intertia_y; |
453 |
|
|
double moment_of_intertia_z; |
454 |
|
|
double torsional_inertia; |
455 |
|
|
} beam; |
456 |
|
|
|
457 |
|
|
//elec |
458 |
|
|
bool hasCoupledAtriaVent; |
459 |
|
|
int orderBdfEdp; |
460 |
|
|
int orderBdfIonic; |
461 |
|
|
//elec - model |
462 |
|
|
std::string typeOfIonicModel; |
463 |
|
|
|
464 |
|
|
std::string CellsType; |
465 |
|
|
|
466 |
|
|
bool spontaneous; |
467 |
|
|
bool hasHeteroTauClose; |
468 |
|
|
bool hasHeteroCourtPar; |
469 |
|
|
bool hasHeteroCondAtria; |
470 |
|
|
bool hasAppliedExteriorCurrent; |
471 |
|
|
//elec - Schaf solver |
472 |
|
|
bool printIonicVar; |
473 |
|
|
double tauOpen; |
474 |
|
|
double tauClose; |
475 |
|
|
double tauCloseEndo; |
476 |
|
|
double tauCloseCell; |
477 |
|
|
double tauCloseEpi; |
478 |
|
|
double tauCloseRV; |
479 |
|
|
double tauIn; |
480 |
|
|
double tauOut; |
481 |
|
|
double kTanhMSR; |
482 |
|
|
double vMin; |
483 |
|
|
double vMax; |
484 |
|
|
double vGate; |
485 |
|
|
//elec - FhN solver |
486 |
|
|
double epsilon; |
487 |
|
|
double beta; |
488 |
|
|
double gammaEl; |
489 |
|
|
double f0; |
490 |
|
|
double alpha; |
491 |
|
|
//elec - MV solver parameters for inverse problem |
492 |
|
|
double tau_so_1_epi; |
493 |
|
|
double tau_so_1_endo; |
494 |
|
|
double tau_so_1_mcel; |
495 |
|
|
double tau_so_1_rv; |
496 |
|
|
//elec - MV conductance parameters |
497 |
|
|
double gfi_rv; |
498 |
|
|
double gfi_endo; |
499 |
|
|
double gfi_mid; |
500 |
|
|
double gfi_epi; |
501 |
|
|
double gso_rv; |
502 |
|
|
double gso_endo; |
503 |
|
|
double gso_mid; |
504 |
|
|
double gso_epi; |
505 |
|
|
double gsi_rv; |
506 |
|
|
double gsi_endo; |
507 |
|
|
double gsi_mid; |
508 |
|
|
double gsi_epi; |
509 |
|
|
//elec - Courtemanche solver parameters for inverse problem |
510 |
|
|
double g_Na_PM; |
511 |
|
|
double g_Na_CT; |
512 |
|
|
double g_Na_BB; |
513 |
|
|
//elec - Luenberger filter |
514 |
|
|
bool stateFilter; |
515 |
|
|
bool schroFilter; |
516 |
|
|
bool electrodeControl; |
517 |
|
|
double aFilter; |
518 |
|
|
double gain; |
519 |
|
|
std::string observDir; |
520 |
|
|
std::string observFileName; |
521 |
|
|
//elec - parameters |
522 |
|
|
double Am; |
523 |
|
|
double Cm; |
524 |
|
|
bool monodomain; |
525 |
|
|
double extraTransvTensor; |
526 |
|
|
double intraTransvTensor; |
527 |
|
|
double extraFiberTensor; |
528 |
|
|
double intraFiberTensor; |
529 |
|
|
double extraTransvTensorAtria; |
530 |
|
|
double intraTransvTensorAtria; |
531 |
|
|
double extraFiberTensorAtria; |
532 |
|
|
double intraFiberTensorAtria; |
533 |
|
|
double extraTransvTensorVent; |
534 |
|
|
double intraTransvTensorVent; |
535 |
|
|
double extraFiberTensorVent; |
536 |
|
|
double intraFiberTensorVent; |
537 |
|
|
double sigmaThorax; |
538 |
|
|
double sigmaLung; |
539 |
|
|
double sigmaBone; |
540 |
|
|
//elec - applied current |
541 |
|
|
std::string typeOfAppliedCurrent; |
542 |
|
|
std::string typeOfAppliedCurrentExt; |
543 |
|
|
|
544 |
|
|
//MEA |
545 |
|
|
int NbElectrodes; |
546 |
|
|
std::vector<int> ElecStim; |
547 |
|
|
std::vector<double> pulseValues; |
548 |
|
|
std::vector<double> pulseValuesDuration; |
549 |
|
|
std::vector<std::string> pulseType; |
550 |
|
|
std::vector<double> timePeriodMEA; |
551 |
|
|
std::vector<double> timePeriodMEAtrain; |
552 |
|
|
std::vector<double> trainDuration; |
553 |
|
|
std::vector<double> tMaxStim; |
554 |
|
|
std::vector<double> Ri; |
555 |
|
|
std::vector<double> Rel; |
556 |
|
|
std::vector<double> Cel; |
557 |
|
|
std::vector<double> Diam; |
558 |
|
|
|
559 |
|
|
double timePeriod; |
560 |
|
|
double timePeriodVentricle; |
561 |
|
|
double timePeriodAtria; |
562 |
|
|
int beatNumber; |
563 |
|
|
double beatDecreasing; |
564 |
|
|
std::vector<double> delayStim; |
565 |
|
|
std::vector<double> delayStimVentricles; |
566 |
|
|
double stimTime; |
567 |
|
|
double stimTimeLV; |
568 |
|
|
double stimTimeRV; |
569 |
|
|
double Iapp_x_coord; |
570 |
|
|
double Iapp_y_coord; |
571 |
|
|
double Iapp_z_coord; |
572 |
|
|
//elec - pathologies |
573 |
|
|
//elec - infarct |
574 |
|
|
bool hasInfarct; |
575 |
|
|
double x_infarct; |
576 |
|
|
double y_infarct; |
577 |
|
|
double z_infarct; |
578 |
|
|
double radius_infarct; |
579 |
|
|
//elec - ventricles BBB |
580 |
|
|
bool hasVentriclesBundleBrunchBlock; |
581 |
|
|
std::string sideOfBBB; |
582 |
|
|
bool BBBwithDelay; |
583 |
|
|
bool BBBwithAngleBlock; |
584 |
|
|
double BBBDelayStim; |
585 |
|
|
double angleIappBBB; |
586 |
|
|
//elec - Bachmann Bundle Block |
587 |
|
|
bool hasPartialBachmannBundleBlock; |
588 |
|
|
double valueBBBlock; |
589 |
|
|
//elec - Wenckebach atrioventricular Block |
590 |
|
|
bool hasWenckebachBlock; |
591 |
|
|
//elec - Kent Bundle |
592 |
|
|
bool hasKentBundle; |
593 |
|
|
//elec - Torsades de pointe |
594 |
|
|
bool torsade; |
595 |
|
|
double torsadeTimeBegin; |
596 |
|
|
double torsadeTimeEnd; |
597 |
|
|
double tauCloseTorsade; |
598 |
|
|
double tauCloseEndoTorsade; |
599 |
|
|
double tauCloseCellTorsade; |
600 |
|
|
double tauCloseEpiTorsade; |
601 |
|
|
double tauCloseRVTorsade; |
602 |
|
|
//elec - ECGwriter |
603 |
|
|
bool writeECG; |
604 |
|
|
bool writeElectrodesMeas; |
605 |
|
|
bool writeElectrodesMean; |
606 |
|
|
bool writeMatrixECG; |
607 |
|
|
std::string ECGelectrodeFile; |
608 |
|
|
std::string ECGmatchFile; |
609 |
|
|
std::string ECGThoraxmatchFile; |
610 |
|
|
std::string ECGmatrixFile; |
611 |
|
|
std::string ECGfileName; |
612 |
|
|
bool ECGtabHeader; |
613 |
|
|
bool ECGcreateFigure; |
614 |
|
|
//elec - dataAssimilation |
615 |
|
|
bool dataAssimilation; |
616 |
|
|
double minLSPotTM; |
617 |
|
|
double maxLSPotTM; |
618 |
|
|
double insidePar; |
619 |
|
|
double outsidePar; |
620 |
|
|
|
621 |
|
|
//fsi 1D, possibly other parameters for 2D/3D: |
622 |
|
|
std::vector<double> betaNormalized; |
623 |
|
|
std::vector<double> sectionAtRest; |
624 |
|
|
|
625 |
|
|
//initial condition |
626 |
|
|
bool hasInitialCondition; // has or not initial conditions. |
627 |
|
|
bool restartSolution; // use previous solution as initial solution. |
628 |
|
|
std::string restartSolutionDirRaw; // directory where the initial solution is backed up. |
629 |
|
|
std::string restartSolutionDir; // directory where the initial solution is backed up. |
630 |
|
|
int restartSolutionIter; // iteration of the backup solution used by the restart. |
631 |
|
|
std::vector <std::string> nameVariableInitCond; // variable associate to the IC (to be saved if doing backup). |
632 |
|
|
std::vector<std::string> componentInitCond; // components associate to the IC. |
633 |
|
|
std::vector<double> valueInitCond; // value associate to the IC. |
634 |
|
|
int frequencyBackup; // frequancy of backup (if == 0 , not doing backup copies). |
635 |
|
|
|
636 |
|
|
// Boundary condition |
637 |
|
|
int essentialBoundaryConditionsMethod; // 2:penalization or 0:pseudo-elimination. |
638 |
|
|
std::vector<std::string> type; // Dirichlet, Neumann, NeumannNormal, Robin, RobinNormal, EmbedFSI. |
639 |
|
|
std::vector<std::string> typeValue; // Constant, Vector, FunctionT, FunctionS, FunctionTS or EnsightFile |
640 |
|
|
std::vector<int> numLabel; // number of labels concerned by this boundary condition. |
641 |
|
|
std::vector<int> label; // label (number) in the mesh file. |
642 |
|
|
std::vector<std::string> labelName; // name in the mesh file. |
643 |
|
|
std::vector<std::string> variable; // variable to apply BC. |
644 |
|
|
std::vector<std::string> component; // components associate to the BC. |
645 |
|
|
std::vector<double> value; // value associate to the BC. |
646 |
|
|
std::vector<double> userParameter; // container for all others parameters. |
647 |
|
|
std::vector<double> alphaRobin; // coeff before variable of Robin BC: betaRobin * grad u dot n + alphaRobin * u = g. |
648 |
|
|
std::vector<double> betaRobin; // coeff before normal derivative of Robin BC: betaRobin * grad u dot n + alphaRobin * u = g. |
649 |
|
|
std::vector<double> alphaRobinNormal; // coeff before variable of RobinNormal BC |
650 |
|
|
double penValueForEmbedFSI; //penalization value for imposing EmbedFSI bc. |
651 |
|
|
std::string bcCondDir; // directory of input boundary values files (ensight files). |
652 |
|
|
bool useEssDerivedBoundaryCondition;//true if you want to use essential BC DERIVED, even without having any dirichlet BC, added for embedFSI, to impose 0 displacement at the surface boarders |
653 |
|
|
std::string modeLung; |
654 |
|
|
//TEST_RECUP_DONNEE |
655 |
|
|
std::string bc_potExtraCell; |
656 |
|
|
|
657 |
|
|
|
658 |
|
|
//BCdata x SimplifiedFSI model and boundary condition. |
659 |
|
|
//common properties |
660 |
|
|
bool switchSimplFSIOff; |
661 |
|
|
double tssParam; |
662 |
|
|
bool tssConsistent; |
663 |
|
|
|
664 |
|
|
bool nonLinearKoiterModel; |
665 |
|
|
bool zeroDisplacementAtBoarders; |
666 |
|
|
double densityStructure; |
667 |
|
|
double viscosityStructure; |
668 |
|
|
//properties of the shell |
669 |
|
|
double youngShell; |
670 |
|
|
double poissonShell; |
671 |
|
|
double widthShell; |
672 |
|
|
//properties of the fibers |
673 |
|
|
double widthFiber; |
674 |
|
|
double preStressFibers; |
675 |
|
|
double youngFibers; |
676 |
|
|
std::vector<double> fiberDensity; // Density of fibers by label (coefficient multiplying (preStressFibers+extraTension) and youngFibers). The list is ordered as the labels defining the EmbedFSI type of BC. |
677 |
|
|
double fiberDispersionParameter; |
678 |
|
|
double outsidePressure; |
679 |
|
|
//properties for 2D testing |
680 |
|
|
double radius; |
681 |
|
|
|
682 |
|
|
//other |
683 |
|
|
int idCase; |
684 |
|
|
std::string nameTest; |
685 |
|
|
double incomingPressure; |
686 |
|
|
double propCardiacCycle; |
687 |
|
|
|
688 |
|
|
//NSHeat |
689 |
|
|
double coeffOfThermalExpansion; |
690 |
|
|
double thermalDiffusion; |
691 |
|
|
double initialTemperature; |
692 |
|
|
double referenceTemperature; |
693 |
|
|
std::vector<double> gravity; |
694 |
|
|
std::vector<felInt> stevinoLabels; |
695 |
|
|
double flowRate; |
696 |
|
|
|
697 |
|
|
// data for retinal autoregulation parameters |
698 |
|
|
bool autoregulated; |
699 |
|
|
double maxT; |
700 |
|
|
double q; |
701 |
|
|
double up; |
702 |
|
|
double down; |
703 |
|
|
double nominalPressure; |
704 |
|
|
bool useRegulationInWindkessel; |
705 |
|
|
std::vector<double> lumpedModelBC_regParam; |
706 |
|
|
double windkesselProp; |
707 |
|
|
int idControlFreeCase; |
708 |
|
|
bool exportPrincipalDirectionsAndCurvature; |
709 |
|
|
bool exportDofPartition; |
710 |
|
|
|
711 |
|
|
//IOPcoupling |
712 |
|
|
std::vector<int> labelIOPMesh; |
713 |
|
|
std::vector<int> labelNSMesh; |
714 |
|
|
double porousParam; |
715 |
|
|
bool computeSteklov; |
716 |
|
|
double relaxationParam; |
717 |
|
|
bool exportSteklovData; |
718 |
|
|
int optionForSteklov; |
719 |
|
|
std::string steklovDataDir; |
720 |
|
|
std::string steklovDataDirRaw; |
721 |
|
|
std::string steklovMatrixName; |
722 |
|
|
int accelerationMethod; |
723 |
|
|
double omegaAcceleration; |
724 |
|
|
bool lumpedTest; |
725 |
|
|
bool notConnectedCylinders; |
726 |
|
|
|
727 |
|
|
bool useRoSteklov; |
728 |
|
|
int nbOfLaplacianEigenFunction; |
729 |
|
|
double percentageOfExtraEig; |
730 |
|
|
int lowRank; |
731 |
|
|
bool tryAcceleration; |
732 |
|
|
double projOnlineRatio; |
733 |
|
|
bool onlyConstResp; |
734 |
|
|
|
735 |
|
|
// export configuration |
736 |
|
|
bool exportP1Normal; |
737 |
|
|
std::vector<int> labelExportP1Normal; |
738 |
|
|
bool exportAll; |
739 |
|
|
bool exportLaplacianEigenValues; |
740 |
|
|
bool exportLaplacianEigenVectors; |
741 |
|
|
bool exportSteklovEigenValues; |
742 |
|
|
bool exportSteklovEigenVectors; |
743 |
|
|
bool exportFTOfSteklovEigenVectors; |
744 |
|
|
bool exportInputOfSteklov; |
745 |
|
|
bool exportOutputOfSteklov; |
746 |
|
|
bool exportOnlyLastInput; |
747 |
|
|
bool exportOnlyLastOutput; |
748 |
|
|
bool exportMassMatrix; |
749 |
|
|
bool exportLaplacianMatrix; |
750 |
|
|
bool exportSteklovMatrix; |
751 |
|
|
bool exportReducedEigenMatrix; |
752 |
|
|
bool exportOffLineVolumeSolution; |
753 |
|
|
bool exportFiltrationVelocity; |
754 |
|
|
|
755 |
|
|
|
756 |
|
|
std::string bcCondDirRaw; // directory of input boundary values files (ensight files). |
757 |
|
|
|
758 |
|
|
|
759 |
|
|
//move mesh |
760 |
|
|
bool hasMoveMesh; |
761 |
|
|
bool hasMoveFibers; |
762 |
|
|
std::string MoveMeshMatchFile; |
763 |
|
|
double scaleCoeff; |
764 |
|
|
|
765 |
|
|
// bc - lumpedModelBC BC (fluid) |
766 |
|
|
std::vector<int> lumpedModelBCType; |
767 |
|
|
std::vector<int> lumpedModelBCAlgo; |
768 |
|
|
std::vector<int> lumpedModelBCLabel; |
769 |
|
|
std::vector<double> lumpedModelBC_Rprox; |
770 |
|
|
std::vector<double> lumpedModelBC_Rdist; |
771 |
|
|
std::vector<double> lumpedModelBC_C; |
772 |
|
|
std::vector<double> lumpedModelBC_Pvenous; |
773 |
|
|
std::vector<double> lumpedModelBC_Pdist_init; |
774 |
|
|
std::vector<std::string> lumpedModelBCName; |
775 |
|
|
|
776 |
|
|
// linear/non linear compliance (C=C(V)) |
777 |
|
|
int lumpedModelBC_C_type; |
778 |
|
|
int powerNonLinearCompliance; |
779 |
|
|
double lumpedModelBC_volumeMax; |
780 |
|
|
double lumpedModelBC_volumeMin; |
781 |
|
|
// volume at rest |
782 |
|
|
double lumpedModelBC_volume0; |
783 |
|
|
double lumpedModelBC_referenceVolume0; |
784 |
|
|
|
785 |
|
|
// bc - fluid bc (user parameters) |
786 |
|
|
double inflowPressureMaxQuiteInspi; |
787 |
|
|
double inflowPressureMaxSpiroInspi; |
788 |
|
|
double inflowPressureMaxSpiroExpi; |
789 |
|
|
int inflowLabel; |
790 |
|
|
|
791 |
|
|
// bc - to impose the tangential components of the velocity std::vector equal to 0 |
792 |
|
|
std::vector<int> compTangBClabel; |
793 |
|
|
|
794 |
|
|
//CardiacCycle input condition |
795 |
|
|
int CardiacCycleLabel; |
796 |
|
|
bool CardiacCycle; |
797 |
|
|
double duration_ejection; |
798 |
|
|
double duration_isovol_relax; |
799 |
|
|
double duration_filling; |
800 |
|
|
double duration_isovol_contract; |
801 |
|
|
|
802 |
|
|
double cardiacOutput; // volume of blood ejected per minute (typicaly in liter) |
803 |
|
|
double heartRate; // number of heart beat per minute |
804 |
|
|
|
805 |
|
|
//FusionDof |
806 |
|
|
bool FusionDof; |
807 |
|
|
std::vector<std::string> FusionVariable; //variable whose dofs have to be fusioned |
808 |
|
|
std::vector<int> FusionNumLabel; // total number of labels to be fusioned |
809 |
|
|
std::vector<int> FusionLabel; // label (number) in the mesh file. |
810 |
|
|
double FusionTolerance; |
811 |
|
|
std::vector<bool> AllToOne; // All dofs fusioned in a single one |
812 |
|
|
bool AllInLabelToOne; // All dofs of a label fusioned in a single one |
813 |
|
|
|
814 |
|
|
//EmbeddedInterface |
815 |
|
|
bool EmbeddedInterface; |
816 |
|
|
std::vector<std::string> EmbeddedVariable; //variable whose dofs have to be matched |
817 |
|
|
std::vector<int> EmbeddedNumInterface; // total number of labels to be matched |
818 |
|
|
std::vector<int> EmbeddedLabelPairs; // label (number) in the mesh file. |
819 |
|
|
double EmbeddedMatchTolerance; |
820 |
|
|
|
821 |
|
|
//Crack |
822 |
|
|
bool hasCrack; |
823 |
|
|
std::vector<std::string> CrackVariable; // variable used in crack term |
824 |
|
|
std::vector<int> CrackNum; // total number of labels indicating crack |
825 |
|
|
std::vector<int> CrackLabelPairs; // label (number) in the mesh file. |
826 |
|
|
std::vector<int> CrackElemID; // label (number) in the mesh file. |
827 |
|
|
double CrackConstant; // working crack "spring" constant |
828 |
|
|
double CrackConstantBefore; // crack "spring" constant before cracking |
829 |
|
|
double CrackConstantAfter; // crack "spring" constant after cracking |
830 |
|
|
double CrackTolerance; // tolerance between points for crack |
831 |
|
|
double CrackStressTolerance; // tolerance for stress before switching to "CrackConstant" |
832 |
|
|
|
833 |
|
|
//Penalization valves |
834 |
|
|
bool PenalizationMethod; |
835 |
|
|
double Gamma_penalization; |
836 |
|
|
std::vector<int> closed_penalization; |
837 |
|
|
|
838 |
|
|
//RISModels |
839 |
|
|
bool RISModels; |
840 |
|
|
int initiallyOpenedValveIndex; // index of which valve is initially open |
841 |
|
|
int crashIfStatusNotAdmissible; // variable to prevent the simulation to stop if a status is not admissible |
842 |
|
|
std::vector<int> closed_surf; |
843 |
|
|
std::vector<int> open_surf; |
844 |
|
|
std::vector<int> fake_surf; |
845 |
|
|
int nbTimeSteps_refractory_time; // number of time steps used for defining the refractory time |
846 |
|
|
int nbTimeSteps_linear_transition; // number of time steps used for defining the linear evolution in the value of the resistances |
847 |
|
|
std::vector<int> nbTimeSteps_linear_transition_twoValves; // number of time steps used for defining the linear evolution in the value of the resistances of the proximal and distal valves |
848 |
|
|
double R_active_surf; // resistance of closed valve |
849 |
|
|
double R_inactive_surf; // resistance of open valve |
850 |
|
|
double R_activeClosed_TwoValves_Intermediate; // resistance of closed valve just after the closing - only used for two valves |
851 |
|
|
double R_activeClosed_TwoValves_Final; // final resistance of closed valve after several iterations after the closing - only used for two valves |
852 |
|
|
double R_FirstValve_ClosingSpeed; // rate of speed for the evolution of the resistance of the closed surface of the first valve from R_Intermediate to R_Final - only used for two valves |
853 |
|
|
double R_SecondValve_ClosingSpeed; // rate of speed for the evolution of the resistance of the closed surface of the second valve from R_Intermediate to R_Final - only used for two valves |
854 |
|
|
double flow_ref_oneValve; // flow reference for one valve |
855 |
|
|
std::vector<double> flow_ref_twoValves; // flow reference for two valves |
856 |
|
|
int preventValvesFromOpeningTooFast; // specify if a closed valve should be prevented from opening if another valve has recently closed |
857 |
|
|
int nbIterationsPreventValvesFromOpeningTooFast; // number of iterations during a closed valve cannot open whereas another valve has recently closed |
858 |
|
|
int verboseRIS; // verbose for the RIS model |
859 |
|
|
|
860 |
|
|
//Pressure correction for full closed cavity where only displacements are imposed on its boundaries |
861 |
|
|
bool useElectroMechanicalPressure; // introducing electromechanical pressure |
862 |
|
|
bool usePressureCorrection; // introducing pressure correction |
863 |
|
|
bool correctionExternalPressure; // introducing external pressure correction |
864 |
|
|
bool correctionALEPressure; // introducing ALE pressure correction |
865 |
|
|
int typeOfPressureCorrection; // type of pressure correction. 0 for enabling the pressure correction anytime, 1 only when all the valves are closed. |
866 |
|
|
std::vector<int> labelsToCorrectPressure; // vector of labels where the pressure correction is applied |
867 |
|
|
std::vector<int> signPressureCorrection; // vector of coefficients (-1 or 1) for the correction of the pressure |
868 |
|
|
std::vector<int> labelsToComputeMeanPressure; // vector of labels where the mean pressure is computed and used for the pressure correction |
869 |
|
|
std::vector<int> labelsToComputeFluxThrough; // vector of labels where the flux through is computed and used for the ALE pressure correction |
870 |
|
|
std::vector<int> exteriorNormalOfLabelsToComputeFluxThrough; // vector of orientation of the exterior normals of the labels where the flux through is computed and used for the ALE pressure correction |
871 |
|
|
std::vector<int> forbiddenLabelsForCorrection; // vector of labels where the resistive term called in computeElementArrayBoundaryCondition will not be applied in order to avoid duplications |
872 |
|
|
int verbosePressureCorrection; // verbose for the pressure correction |
873 |
|
|
|
874 |
|
|
//Stiffening |
875 |
|
|
bool stiffening; |
876 |
|
|
std::vector<int> stiffeningLabels; |
877 |
|
|
int skipStiffeningFirstIteration; |
878 |
|
|
double initStiff; |
879 |
|
|
double finalStiff; |
880 |
|
|
|
881 |
|
|
//Regurgitation |
882 |
|
|
bool regurgitation; |
883 |
|
|
int regurgitationType; |
884 |
|
|
std::vector<double> regurgitationPosition; |
885 |
|
|
std::vector<int> regurgitationLabels; |
886 |
|
|
double regurgitationRadius; |
887 |
|
|
|
888 |
|
|
//ShellModels |
889 |
|
|
|
890 |
|
|
// PETSc |
891 |
|
|
int linearSolverVerbose; |
892 |
|
|
std::vector<std::string> solver; |
893 |
|
|
std::vector<int> gmresRestart; |
894 |
|
|
std::vector<std::string> preconditioner; |
895 |
|
|
std::vector<std::string> setPreconditionerOption; |
896 |
|
|
std::vector<double> relativeTolerance; |
897 |
|
|
std::vector<double> absoluteTolerance; |
898 |
|
|
std::vector<double> solutionTolerance; |
899 |
|
|
std::vector<double> divergenceTolerance; |
900 |
|
|
std::vector<int> maxIteration; |
901 |
|
|
std::vector<int> maxIterationSNES; |
902 |
|
|
std::vector<int> maxFunctionEvaluatedSNES; |
903 |
|
|
std::vector<bool> initSolverWithPreviousSolution; |
904 |
|
|
|
905 |
|
|
//verdandi |
906 |
|
|
//The background error variance value. |
907 |
|
|
double stateErrorVarianceValue; |
908 |
|
|
double Kparameter; |
909 |
|
|
double RHSparameter; |
910 |
|
|
|
911 |
|
|
//cvgraph |
912 |
|
|
std::string compartmentName; |
913 |
|
|
std::vector<int> interfaceLabels; |
914 |
|
|
std::vector<int> correspondingInterfaceLabels; |
915 |
|
|
bool withCVG; |
916 |
|
|
std::string dataFileCVG; |
917 |
|
|
//interpolator parameters (Still in cvgraph section) |
918 |
|
|
double interpolatorThreshold; |
919 |
|
|
int maxDepth; |
920 |
|
|
int idVarToExchange; |
921 |
|
|
|
922 |
|
|
//ElementField |
923 |
|
|
ElementFieldDynamicValueMapType elementFieldDynamicValueMap; |
924 |
|
|
|
925 |
|
|
// Hyperelastic variables |
926 |
|
|
struct hyperElasticLawVariables { |
927 |
|
|
std::vector<std::string> type; /// Dirichlet, Neumann, NeumannNormal, Robin, RobinNormal, EmbedFSI. |
928 |
|
|
std::vector<int> numLabel; /// Number of labels concerned by this boundary condition. |
929 |
|
|
std::vector<int> label; /// Label (number) in the mesh file. |
930 |
|
|
Private::Hyperelasticity::PressureData::Pointer pressureData; /// The pressure data considered |
931 |
|
|
HyperElasticityLawManager::Pointer hyperElasticLaws; /// Pointer to the hyperelastic law manager considered |
932 |
|
|
HyperelasticityNS::TimeScheme timeSchemeHyperelasticity; /// The time scheme considered |
933 |
|
|
} hyperElasticLaw; |
934 |
|
|
}; |
935 |
|
|
|
936 |
|
|
/** |
937 |
|
|
* @class FelisceParam |
938 |
|
|
* @brief Read the felisce data in the data file and on the command line option. |
939 |
|
|
*/ |
940 |
|
|
class FelisceParam |
941 |
|
|
: public Singleton<UniqueFelisceParam> |
942 |
|
|
{ |
943 |
|
|
friend class Singleton<UniqueFelisceParam>; |
944 |
|
|
|
945 |
|
|
protected: |
946 |
|
|
FelisceParam(); |
947 |
|
|
virtual ~FelisceParam(); |
948 |
|
|
|
949 |
|
|
public: |
950 |
|
|
|
951 |
|
|
/* |
952 |
|
|
Folling data are read in configuration file and on the command line. |
953 |
|
|
They are grouped by configuration file sections. |
954 |
|
|
*/ |
955 |
|
|
|
956 |
|
30281 |
static const int& verbose(const std::size_t instanceIndex = 0) { |
957 |
|
30281 |
return FelisceParam::instance(instanceIndex).m_verbose; |
958 |
|
|
} |
959 |
|
|
|
960 |
|
|
static const bool& chronoToFile(const std::size_t instanceIndex = 0) { |
961 |
|
|
return FelisceParam::instance(instanceIndex).chronoToFile; |
962 |
|
|
} |
963 |
|
|
|
964 |
|
4 |
static void linearSolverVerboseOFF(const std::size_t instanceIndex = 0) { |
965 |
|
4 |
FelisceParam::instance(instanceIndex).tmpLinSolverVerbose = FelisceParam::instance(instanceIndex).linearSolverVerbose; |
966 |
|
4 |
FelisceParam::instance(instanceIndex).linearSolverVerbose = 0; |
967 |
|
4 |
} |
968 |
|
|
|
969 |
|
4 |
static void linearSolverVerboseON(const std::size_t instanceIndex = 0) { |
970 |
|
|
/// Use it ONLY after the OFF version! |
971 |
|
4 |
FelisceParam::instance(instanceIndex).linearSolverVerbose = FelisceParam::instance(instanceIndex).tmpLinSolverVerbose; |
972 |
|
4 |
} |
973 |
|
|
|
974 |
|
15 |
static void alterVerbosity(int newValue, const std::size_t instanceIndex = 0) { |
975 |
|
15 |
FelisceParam::instance(instanceIndex).m_refVerbose=FelisceParam::instance(instanceIndex).m_verbose; |
976 |
|
15 |
FelisceParam::instance(instanceIndex).m_verbose=newValue; |
977 |
|
15 |
} |
978 |
|
|
static void restoreVerbosity(const std::size_t instanceIndex = 0) { |
979 |
|
|
/// Use it ONLY after alterVerbosity |
980 |
|
|
FelisceParam::instance(instanceIndex).m_verbose=FelisceParam::instance(instanceIndex).m_refVerbose; |
981 |
|
|
} |
982 |
|
|
}; |
983 |
|
|
|
984 |
|
|
} |
985 |
|
|
|
986 |
|
|
#endif |
987 |
|
|
|