22class HyperreductionConfiguration
25 HyperreductionConfiguration():
26 m_nMagicPoints(0), m_Ck(0.0), m_Ce(0.0),
27 m_interpFieldCentered(
false),
28 m_meanVectorDEIM(
nullptr), m_meanScalarDEIM(
nullptr),
29 m_meanVectorDEIMMagic(
nullptr), m_meanScalarDEIMMagic(
nullptr) { };
32 const Foam::word& HRMethod()
const {
return m_HRMethod; }
33 const Foam::word& ECPAlgo()
const {
return m_ECPAlgo; }
35 void setHRMethod(
const Foam::word& method) { m_HRMethod = method; }
36 void setECPAlgo(
const Foam::word& algo) { m_ECPAlgo = algo; }
39 const Foam::word& HRSnapshotsField()
const {
return m_HRSnapshotsField; }
40 const Foam::word& HRInterpolatedField()
const {
return m_HRInterpolatedField; }
41 const bool& interpFieldCentered()
const {
return m_interpFieldCentered; }
43 void setHRInterpolatedField(
const Foam::word& field) { m_HRInterpolatedField = field; }
44 void setHRSnapshotsField(
const Foam::word& field) { m_HRSnapshotsField = field; }
45 void set_interpFieldCentered(
const bool& b) { m_interpFieldCentered = b; }
48 const Foam::label& nMagicPoints()
const {
return m_nMagicPoints; }
49 const Foam::List<Foam::label>& magicPoints()
const {
return m_magicPoints; }
50 const Foam::List<Foam::label>& localMagicPoints()
const {
return m_localMagicPoints; }
51 const Foam::fvMesh& get_submesh()
const {
return *m_submesh; }
53 void setNMagicPoints(Foam::label n) { m_nMagicPoints = n; }
54 void setMagicPoints(
const Foam::List<Foam::label>& points) { m_magicPoints = points; }
55 void setLocalMagicPoints(
const Foam::List<Foam::label>& points) { m_localMagicPoints = points; }
56 void set_submesh(Foam::fvMesh& s) { m_submesh = &s; }
59 const float& Ck()
const {
return m_Ck; }
60 const float& Ce()
const {
return m_Ce; }
61 void setCk(
float ck) { m_Ck = ck; }
62 void setCe(
float ce) { m_Ce = ce; }
65 const Foam::word& folderDEIM()
const {
return m_folderDEIM; }
66 void setFolderDEIM(
const Foam::word& folder) { m_folderDEIM = folder; }
69 const Foam::PtrList<Foam::volTensorField>& deformationTensorOnMagicNeighborhoods()
const
71 return m_deformationTensorOnMagicNeighborhoods;
73 const Foam::PtrList<Foam::volTensorField>& deformationTensorOnMagicPoints()
const
75 return m_deformationTensorOnMagicPoints;
77 const Foam::PtrList<Foam::volVectorField>& tracerGradOnMagicNeighborhoods()
const
79 return m_tracerGradOnMagicNeighborhoods;
81 const Foam::PtrList<Foam::volVectorField>& tracerGradOnMagicPoints()
const
83 return m_tracerGradOnMagicPoints;
86 void setDeformationTensorOnMagicNeighborhoods(Foam::PtrList<Foam::volTensorField>& defT, Foam::label nModes);
87 void setDeformationTensorOnMagicPoints(Foam::PtrList<Foam::volTensorField>& defT, Foam::label nModes);
88 void setTracerGradOnMagicNeighborhoods(Foam::PtrList<Foam::volVectorField>& defT, Foam::label nModes);
89 void setTracerGradOnMagicPoints(Foam::PtrList<Foam::volVectorField>& defT, Foam::label nModes);
92 const Eigen::MatrixXd& K_DEIM()
const {
return m_K_DEIM; }
93 const Eigen::MatrixXd& projectedK_DEIM()
const {
return m_projectedK_DEIM; }
94 const Eigen::MatrixXd& projectedMK_DEIM()
const {
return m_projectedMK_DEIM; }
96 void setK_DEIM(
const Eigen::MatrixXd& K) { m_K_DEIM = K; }
97 void setProjectedK_DEIM(
const Eigen::MatrixXd& K) { m_projectedK_DEIM = K; }
98 void setProjectedMK_DEIM(
const Eigen::MatrixXd& MK) { m_projectedMK_DEIM = MK; }
101 const Eigen::Tensor<double, 3>& xiOnMagicPts()
const {
return m_xiOnMagicPts; }
102 const Eigen::Tensor<double, 3>& M_xiOnMagicPts()
const {
return m_M_xiOnMagicPts; }
104 void setXiOnMagicPts(
const Eigen::Tensor<double, 3>& xi) { m_xiOnMagicPts = xi; }
105 void setM_XiOnMagicPts(
const Eigen::Tensor<double, 3>& M_xi) { m_M_xiOnMagicPts = M_xi; }
108 const Foam::volVectorField* meanVectorDEIM()
const {
return m_meanVectorDEIM; }
109 const Foam::volScalarField* meanScalarDEIM()
const {
return m_meanScalarDEIM; }
110 const Foam::volVectorField* meanVectorDEIMMagic()
const {
return m_meanVectorDEIMMagic; }
111 const Foam::volScalarField* meanScalarDEIMMagic()
const {
return m_meanScalarDEIMMagic; }
113 void setMeanVectorDEIM(
const Foam::volVectorField& mean);
114 void setMeanScalarDEIM(
const Foam::volScalarField& mean);
115 void setMeanVectorDEIMMagic(
const Foam::volVectorField& mean);
116 void setMeanScalarDEIMMagic(
const Foam::volScalarField& mean);
119 const Eigen::VectorXd deltaWeight()
const {
return m_deltaWeight; }
120 const Foam::volScalarField& get_magicDelta()
const {
return *m_magicDelta; }
122 void setDeltaWeight(
const Eigen::VectorXd& dw);
123 void set_magicDelta(
const Foam::volScalarField& mD);
126 void initializeHyperreduction(std::unique_ptr<PODConfiguration>& PODConfig);
127 void initializeReducedField(
const Foam::word origField, std::unique_ptr<PODConfiguration>& PODConfig);
128 void addReducedFieldToPOD(
const Foam::word& nameToReplace,
const Foam::word& modifiedFieldName,
129 std::unique_ptr<PODConfiguration>& PODConfig);
130 Foam::word createReducedFieldName(
const Foam::word& fieldName, std::unique_ptr<PODConfiguration>& PODConfig);
134 Foam::word m_HRMethod;
135 Foam::word m_ECPAlgo;
137 Foam::word m_HRInterpolatedField;
138 Foam::word m_HRSnapshotsField;
139 bool m_interpFieldCentered;
141 Foam::label m_nMagicPoints;
142 Foam::List<Foam::label> m_magicPoints;
143 Foam::List<Foam::label> m_localMagicPoints;
144 Foam::fvMesh* m_submesh;
149 Foam::word m_folderDEIM;
152 Foam::PtrList<Foam::volTensorField> m_deformationTensorOnMagicPoints;
153 Foam::PtrList<Foam::volTensorField> m_deformationTensorOnMagicNeighborhoods;
154 Foam::PtrList<Foam::volVectorField> m_tracerGradOnMagicPoints;
155 Foam::PtrList<Foam::volVectorField> m_tracerGradOnMagicNeighborhoods;
158 Eigen::MatrixXd m_K_DEIM;
159 Eigen::MatrixXd m_projectedK_DEIM;
160 Eigen::MatrixXd m_projectedMK_DEIM;
163 Eigen::Tensor<double, 3> m_xiOnMagicPts;
164 Eigen::Tensor<double, 3> m_M_xiOnMagicPts;
167 Foam::volVectorField* m_meanVectorDEIM;
168 Foam::volScalarField* m_meanScalarDEIM;
169 Foam::volVectorField* m_meanVectorDEIMMagic;
170 Foam::volScalarField* m_meanScalarDEIMMagic;
172 Eigen::VectorXd m_deltaWeight;
173 Foam::volScalarField* m_magicDelta;