40#define _USE_MATH_DEFINES
75 List<scalar> mu_now(9);
78 for (label
i = 0;
i <
mu.rows();
i++)
80 for (label j = 0; j <
mu.cols() ; j++)
96 volScalarField
yPos =
T.mesh().C().component(vector::Y).ref();
97 volScalarField
xPos =
T.mesh().C().component(vector::X).ref();
109 volScalarField nu1(
nu);
110 volScalarField nu2(
nu);
111 volScalarField nu3(
nu);
112 volScalarField nu4(
nu);
113 volScalarField nu5(
nu);
114 volScalarField nu6(
nu);
115 volScalarField nu7(
nu);
116 volScalarField nu8(
nu);
117 volScalarField nu9(
nu);
118 Eigen::MatrixXd Box1(2, 3);
119 Box1 << 0, 0, 0, 0.3, 0.3, 0.1;
120 Eigen::MatrixXd Box2(2, 3);
121 Box2 << 0.3, 0, 0, 0.6, 0.3, 0.1;
122 Eigen::MatrixXd Box3(2, 3);
123 Box3 << 0.6, 0, 0, 0.91, 0.3, 0.1;
124 Eigen::MatrixXd Box4(2, 3);
125 Box4 << 0, 0.3, 0, 0.3, 0.6, 0.1;
126 Eigen::MatrixXd Box5(2, 3);
127 Box5 << 0.3, 0.3, 0, 0.6, 0.6, 0.1;
128 Eigen::MatrixXd Box6(2, 3);
129 Box6 << 0.6, 0.3, 0, 0.91, 0.6, 0.1;
130 Eigen::MatrixXd Box7(2, 3);
131 Box7 << 0, 0.6, 0, 0.3, 0.91, 0.1;
132 Eigen::MatrixXd Box8(2, 3);
133 Box8 << 0.3, 0.61, 0, 0.6, 0.91, 0.1;
134 Eigen::MatrixXd Box9(2, 3);
135 Box9 << 0.6, 0.6, 0, 0.9, 0.91, 0.1;
168 word folder =
"./ITHACAoutput/test/";
170 List<scalar> mu_now(9);
171 volScalarField&
T =
_T();
173 for (label j = 0; j <
mu.cols() ; j++)
187int main(
int argc,
char* argv[])
194 int NmodesTout = para->
ITHACAdict->lookupOrDefault<
int>(
"NmodesTout", 15);
195 int NmodesTproj = para->
ITHACAdict->lookupOrDefault<
int>(
"NmodesTproj", 10);
196 double tolleranceSVD =
197 para->
ITHACAdict->lookupOrDefault<
double>(
"tolleranceSVD", 1);
205 example.
mu_range.col(0) = Eigen::MatrixXd::Ones(9, 1) * 0.001;
206 example.
mu_range.col(1) = Eigen::MatrixXd::Ones(9, 1) * 0.1;
210 example.
theta.resize(9);
227 for (
int fieldI = 1; fieldI < example.
Tfield.size(); fieldI++)
234 word folder =
"./ITHACAoutput/testReconstruction";
236 volScalarField Tfull(example.
solveFull(0.05));
237 PtrList<volScalarField> TfullList;
238 TfullList.append(Tfull.clone());
239 PtrList<volScalarField> Tproj;
246 volScalarField relativeErrorField(Tproj[0]);
248 for (label
i = 0;
i < relativeErrorField.internalField().size();
i++)
250 if (std::abs(Tfull.ref()[
i]) < EPS)
252 relativeErrorField.ref()[
i] = (std::abs(Tfull.ref()[
i] - Tproj[0].ref()[
i])) /
257 relativeErrorField.ref()[
i] = (std::abs(Tfull.ref()[
i] - Tproj[0].ref()[
i])) /
264 "relativeErrorField_POD");
266 relativeErrorField) << endl;
270 volScalarField Tipod = Tproj[0];
273 for (label
i = 0;
i < relativeErrorField.internalField().size();
i++)
275 if (std::abs(Tfull.ref()[
i]) < EPS)
277 relativeErrorField.ref()[
i] = (std::abs(Tfull.ref()[
i] - Tipod.ref()[
i])) / EPS;
281 relativeErrorField.ref()[
i] = (std::abs(Tfull.ref()[
i] - Tipod.ref()[
i])) /
288 "relativeErrorField_IPOD");
289 Info <<
"\n\nRelative error L2 norm incrementalPOD = " <<
int main(int argc, char *argv[])
forAll(example_CG.gList, solutionI)
Header file of the ITHACAPOD class.
Header file of the ITHACAutilities namespace.
Header file of the reducedLaplacian class.
Class for the definition of some general parameters, the parameters must be defined from the file ITH...
IOdictionary * ITHACAdict
Dictionary for input objects from file.
static ITHACAparameters * getInstance()
Gets an instance of ITHACAparameters, to be used if the instance is already existing.
void projectSnapshots(PtrList< GeometricField< Type, PatchField, GeoMesh > > snapshots, PtrList< GeometricField< Type, PatchField, GeoMesh > > &projSnapshots, label numberOfModes=0, word innerProduct="L2")
Function to project a list of fields into the modes manifold.
Implementation of a incremental POD algorithm according to Oxberry et al.
void addSnapshot(GeometricField< Type, PatchField, GeoMesh > &snapshot)
Add a snapshot to the POD space.
void writeModes()
Write to modes to file.
void projectSnapshots(PtrList< GeometricField< Type, PatchField, GeoMesh > > snapshots, PtrList< GeometricField< Type, PatchField, GeoMesh > > &projSnapshots, label numberOfModes=0)
Project a list of snapshots onto the reduced space.
Class to implement a full order laplacian parametrized problem.
PtrList< volScalarField > nu_list
Nu (diffusivity)
List< scalar > theta
Theta (coefficients of the affine expansion)
PtrList< fvScalarMatrix > operator_list
List of operators.
autoPtr< volScalarField > _T
Temperature field.
autoPtr< volScalarField > _nu
Diffusivity.
autoPtr< fvMesh > _mesh
Mesh.
volScalarModes Tmodes
List of POD modes.
autoPtr< volScalarField > _S
Source Term.
PtrList< volScalarField > Tfield
List of snapshots for the solution.
autoPtr< Time > _runTime
Time.
label Pnumber
Number of parameters.
Eigen::MatrixXd mu_samples
Matrix of parameters to be used for PODI, where each row corresponds to a sample point....
label counter
Counter used for the output of the full order solutions.
void assignIF(T &s, G &value)
Assign internal field condition.
label Tnumber
Dimension of the training set (used only when gerating parameters without input)
bool offline
Boolean variable, it is 1 if the Offline phase has already been computed, else 0.
void genRandPar()
Generate Random Numbers.
Eigen::MatrixXd mu
Row matrix of parameters.
Eigen::MatrixXd mu_range
Range of the parameter spaces.
void setParameters()
Set Parameters Problems.
bool podex
Boolean variable, it is 1 if the POD has already been computed, else 0.
void truthSolve()
Perform a TruthSolve.
Class where the tutorial number 20 is implemented.
tutorialIPOD(int argc, char *argv[])
void compute_nu()
Compute the diffusivity in each subdomain.
volScalarField & S
Source term field.
volScalarField & nu
Diffusivity field.
void SetSource()
Define the source term function.
volScalarField & T
[tutorialIPOD] Temperature field
volScalarField solveFull(double _mu)
Performs a full order solution for a uniform value of mu.
void assemble_operator()
Construct the operator_list where each term of the affine decomposition is stored.
void offlineSolve(word folder="./ITHACAoutput/Offline/")
It perform an offline Solve.
Header file of the incrementalPOD class.
Header file of the laplacianProblem class.
void getModes(PtrList< GeometricField< Type, PatchField, GeoMesh > > &snapshots, PtrList< GeometricField< Type, PatchField, GeoMesh > > &modes, word fieldName, bool podex, bool supex, bool sup, label nmodes, bool correctBC)
Computes the bases or reads them for a field.
void exportSolution(GeometricField< Type, PatchField, GeoMesh > &s, fileName subfolder, fileName folder, word fieldName)
Export a field to file in a certain folder and subfolder.
List< Eigen::MatrixXd > readMatrix(word folder, word mat_name)
Read a three dimensional matrix from a txt file in Eigen format.
void read_fields(PtrList< GeometricField< Type, PatchField, GeoMesh > > &Lfield, word Name, fileName casename, int first_snap, int n_snap)
Function to read a list of fields from the name of the field and casename.
double L2Norm(GeometricField< scalar, fvPatchField, volMesh > &field)
void setBoxToValue(GeometricField< Type, fvPatchField, volMesh > &field, Eigen::MatrixXd Box, Type value)
Set value of a volScalarField to a constant inside a given box.