Loading...
Searching...
No Matches
StoredParameters.H
1
2#ifndef POD_PARAMETERS_H
3#define POD_PARAMETERS_H
4
5#include <FieldField.H>
6
7#include "FieldTemplates.H"
8#include "PODConfiguration.H"
9#include "SnapshotConfiguration.H"
10#include "MeshConfiguration.H"
11#include "SolverConfiguration.H"
12#include "HyperreductionConfiguration.H"
13#include "ROMExecutionConfig.H"
14#include "SimulationFlags.H"
15
16
17#include "fvMesh.H"
18
19#include "ITHACAparameters.H"
20
21#pragma GCC diagnostic push
22#pragma GCC diagnostic ignored "-Wold-style-cast"
23#include <Eigen/Eigen>
24#pragma GCC diagnostic pop
25
26
28{
29public:
30 virtual ~Parameters() { }
31};
32// only one derivate
36class StoredParameters : public Parameters
37{
38public:
39 StoredParameters(int argc, char* argv[]);
40
43 {
44 return ithacaLibraryParameters;
45 }
46
47 const Foam::HashTable<Foam::label, Foam::word>& get_nModes() const
48 {
49 return PODConfiguration_->nModes();
50 }
51
52 const Foam::HashTable<Foam::word, Foam::word>& get_hilbertSpacePOD() const
53 {
54 return PODConfiguration_->hilbertSpacePOD(); // Contains both the field name and Hilbert space
55 }
56
57 Foam::word get_pathHilbertSpace_fromHS(Foam::word hilbertSp);
58 const double& get_weightH1() const
59 {
60 return PODConfiguration_->weightH1();
61 }
62 const double& get_weightPOD() const
63 {
64 return PODConfiguration_->weightBC();
65 }
66 const Foam::word& get_patchBC() const
67 {
68 return PODConfiguration_->patchBC();
69 }
70 const Foam::fileName& get_casenameData() const
71 {
72 return snapshotConfiguration_->get_casenameData();
73 }
74
75 const Foam::label& get_startTime() const
76 {
77 return snapshotConfiguration_->get_startTime();
78 }
79 const Foam::label& get_endTime() const
80 {
81 return snapshotConfiguration_->get_endTime();
82 }
83 const Foam::label& get_nSnapshots() const
84 {
85 return snapshotConfiguration_->get_nSnapshots();
86 }
87
88 const Foam::label& get_endTimeSimulation() const
89 {
90 return snapshotConfiguration_->get_endTimeSimulation();
91 }
92 const Foam::label& get_nSnapshotsSimulation() const
93 {
94 return snapshotConfiguration_->get_nSnapshotsSimulation();
95 }
96
97 const Foam::label& get_nBlocks() const
98 {
99 return solverConfiguration_->get_nBlocks();
100 }
101
102 bool get_centeredOrNot() const
103 {
104 return solverConfiguration_->get_centeredOrNot();
105 }
106 int get_precision() const
107 {
108 return solverConfiguration_->get_precision();
109 }
110 const std::_Ios_Fmtflags& get_outytpe() const
111 {
112 return solverConfiguration_->get_outytpe();
113 }
114
115 const Foam::word& get_eigensolver() const
116 {
117 return solverConfiguration_->get_eigensolver();
118 }
119
120 Foam::fvMesh& get_mesh() const
121 {
122 return meshConfig_->get_mesh();
123 }
124
125 const Foam::label& get_nCells() const
126 {
127 return meshConfig_->get_nCells();
128 }
129
130 const Foam::volVectorField& get_template_field_U() const
131 {
132 return fieldTemplates_->get_U();
133 }
134 const Foam::volScalarField& get_template_field_p() const
135 {
136 return fieldTemplates_->get_p();
137 }
138 const Foam::volScalarField& get_template_field_nut() const
139 {
140 return fieldTemplates_->get_nut();
141 }
142 const Foam::volScalarField& get_template_field_omega() const
143 {
144 return fieldTemplates_->get_omega();
145 }
146 const Foam::volScalarField& get_template_field_k() const
147 {
148 return fieldTemplates_->get_k();
149 }
150 const Foam::volVectorField& get_template_field_fullStressFunction() const
151 {
152 return fieldTemplates_->get_fullStressFunction();
153 }
154 void set_template_field_fullStressFunction(volVectorField& templateSmag)
155 {
156 fieldTemplates_->set_fullStressFunction(templateSmag);
157 }
158
159
160 const double& get_saveTime() const
161 {
162 return snapshotConfiguration_->get_writeInterval();
163 }
164
165 const word& get_HRMethod() const
166 {
167 return HyperreductionConfiguration_->HRMethod();
168 }
169 const Foam::word& get_DEIMInterpolatedField() const
170 {
171 return HyperreductionConfiguration_->HRInterpolatedField();
172 }
173 const word& get_HRSnapshotsField() const
174 {
175 return HyperreductionConfiguration_->HRSnapshotsField();
176 }
177 const word& get_ECPAlgo() const
178 {
179 return HyperreductionConfiguration_->ECPAlgo();
180 }
181 Eigen::VectorXd get_deltaWeight() const
182 {
183 return HyperreductionConfiguration_->deltaWeight();
184 }
185
186 void set_centeredOrNot(const bool b)
187 {
188 solverConfiguration_->set_centeredOrNot(b);
189 }
190
192 void set_eigenValues_U(const Eigen::VectorXd& input_eigenValues_U)
193 {
194 PODConfiguration_->set_eigenValues_U(input_eigenValues_U);
195 }
196 void set_lambda(const Eigen::VectorXd& input_lambda)
197 {
198 PODConfiguration_->set_lambda(input_lambda);
199 }
201 void set_nModes(const Foam::word& field_name, const Foam::label& n)
202 {
203 PODConfiguration_->insert_nModes(field_name, n);
204 }
205 void set_resolvedVaryingEnergy(const Foam::word& field_name, const double& n)
206 {
207 PODConfiguration_->set_resolvedVaryingEnergy(field_name, n);
208 }
209 void set_varyingEnergy(const Foam::word& field_name, const double& n)
210 {
211 PODConfiguration_->set_varyingEnergy(field_name, n);
212 }
213 void set_meanEnergy(const Foam::word& field_name, const double& n)
214 {
215 PODConfiguration_->insert_meanEnergy(field_name, n);
216 }
217 void set_hilbertSpacePOD(const Foam::word& field_name,
218 const Foam::word& hilbertSp)
219 {
220 PODConfiguration_->insert_hilbertSpacePOD(field_name, hilbertSp);
221 }
222 void set_weightH1(const double& c)
223 {
224 PODConfiguration_->set_weightH1(c);
225 }
226
227 const wordList& get_fieldlist() const { return PODConfiguration_->fieldlist(); }
228 const HashTable<double, word>& get_resolvedVaryingEnergy() const { return PODConfiguration_->resolvedVaryingEnergy(); }
229 const HashTable<double, word>& get_varyingEnergy() const { return PODConfiguration_->varyingEnergy(); }
230 const HashTable<double, word>& get_meanEnergy() const { return PODConfiguration_->meanEnergy(); }
231 Foam::word get_pathHilbertSpace(Foam::word fieldName);
232
233 const List<word>& get_field_name() const { return PODConfiguration_->field_name(); }
234 const List<word>& get_field_type() const { return PODConfiguration_->field_type(); }
235
236 // getting current F_0 force vector and F_mask
237 const Foam::Vector<double>& get_F_0() const;
238 void compute_F_mask();
239
240 const PressureResolutionKind& get_pressureResolutionKind() { return ROMExecutionConfig_->pressureResolutionKind(); }
241
242 const word& get_ROMTemporalScheme() const { return ROMExecutionConfig_->ROMTemporalScheme(); }
243
244 const double& get_initialTime() const { return snapshotConfiguration_->get_initialTime(); }
245 const double& get_initialTimeSimulation() const
246 {
247 return snapshotConfiguration_->get_finalTime();
248 }
249 const double& get_finalTime() const
250 {
251 return snapshotConfiguration_->get_finalTime();
252 }
253 const double& get_finalTimeSimulation() const
254 {
255 return snapshotConfiguration_->get_finalTimeSimulation();
256 }
257
258 bool get_interpFieldCenteredOrNot() const { return HyperreductionConfiguration_->interpFieldCentered(); }
259
260 bool get_exportPython() const { return SimulationFlags_->exportPython(); }
261 bool get_exportMatlab() const { return SimulationFlags_->exportMatlab(); }
262 bool get_exportTxt() const { return SimulationFlags_->exportTxt(); }
263
264 const word& get_useSOTA() const { return ROMExecutionConfig_->useSOTA(); }
265
266 const dimensionedScalar& get_nu() const { return ROMExecutionConfig_->nu(); }
267
268 const Eigen::VectorXd& get_eigenValues_U() const { return PODConfiguration_->eigenValues_U(); }
269 const Eigen::VectorXd& get_eigenValues_p() const { return PODConfiguration_->eigenValues_p(); }
270 const Eigen::VectorXd& get_lambda() const { return PODConfiguration_->lambda(); }
271
272 const label& get_nSimu() const { return snapshotConfiguration_->get_nSimu(); }
273 bool get_forcingOrNot() const { return SimulationFlags_->forcing(); }
274 bool get_symDiff() const { return SimulationFlags_->symDiff(); }
275
277 bool get_onLineReconstruct() const { return SimulationFlags_->onLineReconstruct(); }
278
280 bool get_useDDES() const { return SimulationFlags_->useDDES(); }
281
283 bool get_useDNS() const { return SimulationFlags_->useDNS(); }
284
286 bool get_useDEIM() const { return SimulationFlags_->useDEIM(); }
287 const float& get_Ck() const { return HyperreductionConfiguration_->Ck(); }
288 const float& get_Ce() const { return HyperreductionConfiguration_->Ce(); }
289 const label& get_nMagicPoints() const { return HyperreductionConfiguration_->nMagicPoints(); }
290 const word& get_folder_DEIM() const { return HyperreductionConfiguration_->folderDEIM(); }
291
292 const PtrList<volVectorField>& get_tracerGradOfModesOnMagicNeighborhoods() const { return HyperreductionConfiguration_->tracerGradOnMagicNeighborhoods(); }
293 const PtrList<volVectorField>& get_tracerGradOfModesOnMagicPoints() const { return HyperreductionConfiguration_->tracerGradOnMagicPoints(); }
294 const PtrList<volTensorField>& get_deformationTensorOfModesOnMagicNeighborhoods() const { return HyperreductionConfiguration_->deformationTensorOnMagicNeighborhoods(); }
295 const PtrList<volTensorField>& get_deformationTensorOfModesOnMagicPoints() const { return HyperreductionConfiguration_->deformationTensorOnMagicPoints(); }
296 const List<label>& get_magicPoints() const { return HyperreductionConfiguration_->magicPoints(); }
297 const List<label>& get_localMagicPoints() const { return HyperreductionConfiguration_->localMagicPoints(); }
298 const Eigen::MatrixXd& get_projected_K_DEIM() const { return HyperreductionConfiguration_->projectedK_DEIM(); }
299 const Eigen::MatrixXd& get_projected_MK_DEIM() const { return HyperreductionConfiguration_->projectedMK_DEIM(); }
300 const volScalarField& get_delta() const { return meshConfig_->get_delta(); }
301 const volScalarField& get_magicDelta() const { return HyperreductionConfiguration_->get_magicDelta(); }
302 const fvMesh& get_submesh() const { return HyperreductionConfiguration_->get_submesh(); }
303 const volScalarField& get_volume() const { return meshConfig_->get_volume(); }
304 const double& get_totalVolume() const { return meshConfig_->get_totalVolume(); }
305 const volVectorField& get_meanU() const { return *ROMExecutionConfig_->meanU(); }
306 const volVectorField& get_meanVectorDEIM() const { return *HyperreductionConfiguration_->meanVectorDEIM(); }
307 const volScalarField& get_meanScalarDEIM() const { return *HyperreductionConfiguration_->meanScalarDEIM(); }
308 void get_meanDEIM(volVectorField& meanVectorDEIM_out) { meanVectorDEIM_out = get_meanVectorDEIM(); }
309 void get_meanDEIM(volScalarField& meanVectorDEIM_out) { meanVectorDEIM_out = get_meanScalarDEIM(); }
310 const volVectorField& get_meanVectorDEIMMagic() const { return *HyperreductionConfiguration_->meanVectorDEIMMagic(); }
311 const volScalarField& get_meanScalarDEIMMagic() const { return *HyperreductionConfiguration_->meanScalarDEIMMagic(); }
312
313 const Eigen::Tensor<double, 3>& get_xi_onMagicPts() const { return HyperreductionConfiguration_->xiOnMagicPts(); }
314 const Eigen::Tensor<double, 3>& get_M_xi_onMagicPts() const { return HyperreductionConfiguration_->M_xiOnMagicPts(); }
315
317 const Eigen::MatrixXd& get_K_DEIM() const { return HyperreductionConfiguration_->K_DEIM(); }
318 void set_K_DEIM(Eigen::MatrixXd& K) { HyperreductionConfiguration_->setK_DEIM(K); }
319
322 void set_nSnapshots(const label& input_nSnapshots) { snapshotConfiguration_->set_nSnapshots(input_nSnapshots); }
323 void set_nSnapshotsSimulation(const label& input_nSnapshotsSimulation) { snapshotConfiguration_->set_nSnapshotsSimulation(input_nSnapshotsSimulation); }
324 void set_eigenValues_p(const Eigen::VectorXd& input_eigenValues_p) { PODConfiguration_->set_eigenValues_p(input_eigenValues_p); }
325 void set_saveTime(const double& input_saveTime) { snapshotConfiguration_->set_writeInterval(input_saveTime); }
326 void set_xi_onMagicPts(const Eigen::Tensor<double, 3> xi) { HyperreductionConfiguration_->setXiOnMagicPts(xi); }
327 void set_M_xi_onMagicPts(const Eigen::Tensor<double, 3> M_xi) { HyperreductionConfiguration_->setM_XiOnMagicPts(M_xi); }
328 void set_useSOTA(word& input_useSOTA) { ROMExecutionConfig_->setUseSOTA(input_useSOTA); }
329
331 void set_useDDES(const bool& a) { SimulationFlags_->set_useDDES(a); }
332
334 void set_useDNS(const bool& c) { SimulationFlags_->set_useDNS(c); }
335
337 void set_DEIMInterpolatedField(Foam::word name) { HyperreductionConfiguration_->setHRInterpolatedField(name); }
338 void set_nMagicPoints(const label& n) { HyperreductionConfiguration_->setNMagicPoints(n); }
339 void set_Ck(const float& c) { HyperreductionConfiguration_->setCk(c); }
340 void set_Ce(const float& c) { HyperreductionConfiguration_->setCe(c); }
341 void set_useDEIM(const bool& b) { SimulationFlags_->set_useDEIM(b); }
342
343 void set_magicPoints(const List<label>& nn) { HyperreductionConfiguration_->setMagicPoints(nn); }
344 void set_localMagicPoints(const List<label>& nn) { HyperreductionConfiguration_->setLocalMagicPoints(nn); }
345 void set_projected_K_DEIM(const Eigen::MatrixXd& K_input) { HyperreductionConfiguration_->setProjectedK_DEIM(K_input); }
346 void set_deformationTensorOfModesOnMagicNeighborhoods(PtrList<volVectorField>& defT)
347 {
348 HyperreductionConfiguration_->setTracerGradOnMagicNeighborhoods(defT, get_nModes()["U"] + 1);
349 }
350
351 void set_deformationTensorOfModesOnMagicPoints(PtrList<volVectorField>& defT)
352 {
353 HyperreductionConfiguration_->setTracerGradOnMagicPoints(defT, get_nModes()["U"] + 1);
354 }
355
356 void set_deformationTensorOfModesOnMagicNeighborhoods(PtrList<volTensorField>& defT)
357 {
358 HyperreductionConfiguration_->setDeformationTensorOnMagicNeighborhoods(defT, get_nModes()["U"] + 1);
359 }
360
361 void set_deformationTensorOfModesOnMagicPoints(PtrList<volTensorField>& defT)
362 {
363 HyperreductionConfiguration_->setDeformationTensorOnMagicPoints(defT, get_nModes()["U"] + 1);
364 }
365
366 void set_projected_MK_DEIM(const Eigen::MatrixXd& proj_MK_input) { HyperreductionConfiguration_->setProjectedMK_DEIM(proj_MK_input); }
367 void set_magicDelta(const volScalarField& mD) { HyperreductionConfiguration_->set_magicDelta(mD); }
368 void set_submesh(fvMesh& s) { HyperreductionConfiguration_->set_submesh(s); }
369
370
371 void set_meanU(const volVectorField& mm) { ROMExecutionConfig_->setMeanU(mm); }
372 void set_meanDEIM(const volVectorField& mm) { HyperreductionConfiguration_->setMeanVectorDEIM(mm); }
373 void set_meanDEIM(const volScalarField& mm) { HyperreductionConfiguration_->setMeanScalarDEIM(mm); }
374 void set_meanDEIMMagic(const volVectorField& mm)
375 {
376 HyperreductionConfiguration_->setMeanVectorDEIMMagic(mm);
377 }
378 void set_meanDEIMMagic(const volScalarField& mm)
379 {
380 HyperreductionConfiguration_->setMeanScalarDEIMMagic(mm);
381 }
382 void set_deltaWeight(Eigen::VectorXd dw) { HyperreductionConfiguration_->setDeltaWeight(dw); }
383
384private:
385 // configuration components
386 std::unique_ptr<MeshConfiguration> meshConfig_;
387 std::unique_ptr<FieldTemplates> fieldTemplates_;
388 std::unique_ptr<SnapshotConfiguration> snapshotConfiguration_;
389 std::unique_ptr<SolverConfiguration> solverConfiguration_;
390 std::unique_ptr<HyperreductionConfiguration> HyperreductionConfiguration_;
391 std::unique_ptr<ROMExecutionConfig> ROMExecutionConfig_;
392 std::unique_ptr<SimulationFlags> SimulationFlags_;
393 std::unique_ptr<PODConfiguration> PODConfiguration_;
394
395 void initializeFieldConfiguration();
396
397protected:
398 // OPENFOAM runtime
399 autoPtr<argList> _args;
400 autoPtr<Time> runTime0;
401 Foam::Time* runTimeData;
402
403
404 // ITHACA integration
405 ITHACAparameters* ithacaLibraryParameters;
406 IOdictionary* ITHACAdict;
407};
408
409
410#endif
Class for the definition of some general parameters, the parameters must be defined from the file ITH...
void set_DEIMInterpolatedField(Foam::word name)
Setters of POD and DEIM parameters.
void set_nSnapshots(const label &input_nSnapshots)
Setters to the members of m_parameters that cannot initialize at the beginning of the program For ins...
bool get_useDNS() const
DNS getter.
void set_nModes(const Foam::word &field_name, const Foam::label &n)
Setters of POD and DEIM parameters.
ITHACAparameters * get_ITHACAparameters() const
Getter to access all m_parameters members in the other classes.
const Eigen::MatrixXd & get_K_DEIM() const
Getter and setter of DEIM matrix K.
void set_useDDES(const bool &a)
set DDES
bool get_useDEIM() const
Getters of DEIM parameters.
bool get_useDDES() const
DDES getter.
void set_useDNS(const bool &c)
set DNS
bool get_onLineReconstruct() const
on line velocity Reconstruction getter
void set_eigenValues_U(const Eigen::VectorXd &input_eigenValues_U)
Setters to the members of StoredParameters that cannot initialize at the beginning of the program.