5msrProblem::msrProblem() {}
7msrProblem::msrProblem(
int argc,
char* argv[])
9#include "setRootCase.H"
10#include "createTime.H"
11#include "createMesh.H"
12 _simple = autoPtr<simpleControl>
19 simpleControl& simple =
_simple();
20#include "createFields.H"
21#include "createFields_Neutronics.H"
22#include "createFields_Thermal.H"
23#include "createConstants.H"
24#include "createFvOptions.H"
25 turbulence->validate();
46 Time& runTime = _runTime();
47 fvMesh& mesh = _mesh();
48 volScalarField& p = _p();
49 volVectorField& U = _U();
50 surfaceScalarField& phi = _phi();
52 simpleControl& simple =
_simple();
53 IOMRFZoneList& MRF = _MRF();
54 singlePhaseTransportModel& laminarTransport = _laminarTransport();
55 dimensionedScalar& IV1 = _IV1();
56 dimensionedScalar& Keff = _Keff();
57 volScalarField& flux = _flux();
58 volScalarField flux_old = _flux();
59 dimensionedScalar& betaTot = _betaTot();
60 volScalarField& SP = _SP();
61 dimensionedScalar& SP1_0 = _SP1_0();
62 dimensionedScalar& alfa_SP1 = _alfa_SP1();
63 volScalarField& D = _D();
64 dimensionedScalar& D1_0 = _D1_0();
65 dimensionedScalar& alfa_D1 = _alfa_D1();
66 volScalarField& NSF = _NSF();
67 dimensionedScalar& NSF1_0 = _NSF1_0();
68 dimensionedScalar& alfa_NSF1 = _alfa_NSF1();
69 volScalarField& A = _A();
70 dimensionedScalar& A1_0 = _A1_0();
71 dimensionedScalar& alfa_A1 = _alfa_A1();
72 volScalarField& prec1 = _prec1();
73 dimensionedScalar& Sc = _Sc();
74 dimensionedScalar& Sct = _Sct();
75 dimensionedScalar& lam1 = _lam1();
76 dimensionedScalar& beta1 = _beta1();
77 volScalarField& prec2 = _prec2();
78 dimensionedScalar& lam2 = _lam2();
79 dimensionedScalar& beta2 = _beta2();
80 volScalarField& prec3 = _prec3();
81 dimensionedScalar& lam3 = _lam3();
82 dimensionedScalar& beta3 = _beta3();
83 volScalarField& prec4 = _prec4();
84 dimensionedScalar& lam4 = _lam4();
85 dimensionedScalar& beta4 = _beta4();
86 volScalarField& prec5 = _prec5();
87 dimensionedScalar& lam5 = _lam5();
88 dimensionedScalar& beta5 = _beta5();
89 volScalarField& prec6 = _prec6();
90 dimensionedScalar& lam6 = _lam6();
91 dimensionedScalar& beta6 = _beta6();
92 volScalarField& prec7 = _prec7();
93 dimensionedScalar& lam7 = _lam7();
94 dimensionedScalar& beta7 = _beta7();
95 volScalarField& prec8 = _prec8();
96 dimensionedScalar& lam8 = _lam8();
97 dimensionedScalar& beta8 = _beta8();
98 volScalarField& T = _T();
99 dimensionedScalar& Pr = _Pr();
100 dimensionedScalar& Prt = _Prt();
101 volScalarField& dec1 = _dec1();
102 dimensionedScalar& decLam1 = _decLam1();
103 dimensionedScalar& decBeta1 = _decBeta1();
104 volScalarField& dec2 = _dec2();
105 dimensionedScalar& decLam2 = _decLam2();
106 dimensionedScalar& decBeta2 = _decBeta2();
107 volScalarField& dec3 = _dec3();
108 dimensionedScalar& decLam3 = _decLam3();
109 dimensionedScalar& decBeta3 = _decBeta3();
110 dimensionedScalar& decbetaTot = _decbetaTot();
111 dimensionedScalar& rhoRef = _rhoRef();
112 dimensionedScalar& CpRef = _CpRef();
113 volScalarField v = _v();
114 volScalarField TXS = _TXS();
115 dimensionedScalar& nu = _nu();
116 dimensionedScalar& betaTE = _betaTE();
117 dimensionedScalar& Tref = _Tref();
118 dimensionedScalar& TrefXS = _TrefXS();
119 volScalarField& logT = _logT();
120 volScalarField& alphat = _alphat();
121 volScalarField& difft = _difft();
122 volScalarField powerDens = ((1 - decbetaTot) * flux * SP +
123 (decLam1 * dec1 + decLam2 * dec2 + decLam3 * dec3)).ref();
124 powerDens.rename(
"powerDens");
125#include "NLmsrProblem.H"
131 for (label i = 0; i < mu_now.size(); i++)
145 "./ITHACAoutput/Offline");
153 label NU = para->ITHACAdict->lookupOrDefault<label>(
"NUout", 10);
154 label NP = para->ITHACAdict->lookupOrDefault<label>(
"NPout", 10);
155 label NF = para->ITHACAdict->lookupOrDefault<label>(
"NFluxout", 10);
156 label NPrec1 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout1", 10);
157 label NPrec2 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout2", 10);
158 label NPrec3 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout3", 10);
159 label NPrec4 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout4", 10);
160 label NPrec5 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout5", 10);
161 label NPrec6 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout6", 10);
162 label NPrec7 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout7", 10);
163 label NPrec8 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout8", 10);
164 label NT = para->ITHACAdict->lookupOrDefault<label>(
"NTout", 10);
165 label NDec1 = para->ITHACAdict->lookupOrDefault<label>(
"NDecout1", 10);
166 label NDec2 = para->ITHACAdict->lookupOrDefault<label>(
"NDecout2", 10);
167 label NDec3 = para->ITHACAdict->lookupOrDefault<label>(
"NDecout3", 10);
168 label NC = para->ITHACAdict->lookupOrDefault<label>(
"NCout", 10);
198 if (homboolT ==
true)
219 Info <<
"End\n" << endl;
225 label NU = para->ITHACAdict->lookupOrDefault<label>(
"NUout", 10);
226 label NP = para->ITHACAdict->lookupOrDefault<label>(
"NPout", 10);
227 label NF = para->ITHACAdict->lookupOrDefault<label>(
"NFluxout", 10);
228 label NPrec1 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout1", 10);
229 label NPrec2 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout2", 10);
230 label NPrec3 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout3", 10);
231 label NPrec4 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout4", 10);
232 label NPrec5 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout5", 10);
233 label NPrec6 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout6", 10);
234 label NPrec7 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout7", 10);
235 label NPrec8 = para->ITHACAdict->lookupOrDefault<label>(
"NPrecout8", 10);
236 label NT = para->ITHACAdict->lookupOrDefault<label>(
"NTout", 10);
237 label NDec1 = para->ITHACAdict->lookupOrDefault<label>(
"NDecout1", 10);
238 label NDec2 = para->ITHACAdict->lookupOrDefault<label>(
"NDecout2", 10);
239 label NDec3 = para->ITHACAdict->lookupOrDefault<label>(
"NDecout3", 10);
240 label NC = para->ITHACAdict->lookupOrDefault<label>(
"NCout", 10);
270 if (homboolT ==
true)
288 Info <<
"End\n" << endl;
295 Time& runTime = _runTime();
296 surfaceScalarField& phi = _phi();
297 fvMesh& mesh = _mesh();
298 volScalarField p = _p();
299 volVectorField U = _U();
300 IOMRFZoneList& MRF = _MRF();
302 volVectorField Ulift(
"Ulift" + name(k), U);
303 instantList Times = runTime.times();
304 runTime.setTime(Times[1], 1);
305 pisoControl potentialFlow(mesh,
"potentialFlow");
306 Info <<
"Solving a lifting Problem" << endl;
307 Vector<double> v1(0, 0, 0);
309 Vector<double> v0(0, 0, 0);
311 for (label j = 0; j < U.boundaryField().size(); j++)
317 else if (U.boundaryField()[BCind].type() ==
"fixedValue")
326 phi = linearInterpolate(Ulift) & mesh.Sf();
329 Info <<
"Constructing velocity potential field Phi\n" << endl;
337 IOobject::READ_IF_PRESENT,
341 dimensionedScalar(
"Phi", dimLength * dimVelocity, 0),
342 p.boundaryField().types()
344 label PhiRefCell = 0;
345 scalar PhiRefValue = 0;
349 potentialFlow.dict(),
353 mesh.setFluxRequired(Phi.name());
354 runTime.functionObjects().start();
355 MRF.makeRelative(phi);
356 adjustPhi(phi, Ulift, p);
358 while (potentialFlow.correctNonOrthogonal())
360 fvScalarMatrix PhiEqn
362 fvm::laplacian(dimensionedScalar(
"1", dimless, 1), Phi)
366 PhiEqn.setReference(PhiRefCell, PhiRefValue);
369 if (potentialFlow.finalNonOrthogonalIter())
371 phi -= PhiEqn.flux();
375 MRF.makeAbsolute(phi);
376 Info <<
"Continuity error = "
377 << mag(fvc::div(phi))().weightedAverage(mesh.V()).value()
379 Ulift = fvc::reconstruct(phi);
380 Ulift.correctBoundaryConditions();
381 Info <<
"Interpolated velocity error = "
382 << (sqrt(sum(sqr((fvc::interpolate(U) & mesh.Sf()) - phi)))
383 / sum(mesh.magSf())).value()
396 Eigen::VectorXi NPrec, label NT, Eigen::VectorXi NDec, label NC)
398 if (NPrec.size() != 8 || NDec.size() != 3)
401 "The model assumes 8 groups of precursors and 3 of decay heat, check NDrec and NDec dimensions..."
410 label NPrec1 = NPrecmodes(0);
411 label NPrec2 = NPrecmodes(1);
412 label NPrec3 = NPrecmodes(2);
413 label NPrec4 = NPrecmodes(3);
414 label NPrec5 = NPrecmodes(4);
415 label NPrec6 = NPrecmodes(5);
416 label NPrec7 = NPrecmodes(6);
417 label NPrec8 = NPrecmodes(7);
420 label NDec1 = NDecmodes(0);
421 label NDec2 = NDecmodes(1);
422 label NDec3 = NDecmodes(2);
424 Info <<
"\n Computing fluid-dynamics matrices\n" << endl;
429 D_matrix = laplacian_pressure(NPmodes);
434 Info <<
"\n End \n" << endl;
435 Info <<
"\n Computing neutronics matrices\n" << endl;
438 PF_matrix = prod_flux(NFluxmodes, NCmodes);
439 AF_matrix = abs_flux(NFluxmodes, NCmodes);
440 PS1_matrix = prec_source(NFluxmodes, NPrec1, 1);
441 PS2_matrix = prec_source(NFluxmodes, NPrec2, 2);
442 PS3_matrix = prec_source(NFluxmodes, NPrec3, 3);
443 PS4_matrix = prec_source(NFluxmodes, NPrec4, 4);
444 PS5_matrix = prec_source(NFluxmodes, NPrec5, 5);
445 PS6_matrix = prec_source(NFluxmodes, NPrec6, 6);
446 PS7_matrix = prec_source(NFluxmodes, NPrec7, 7);
447 PS8_matrix = prec_source(NFluxmodes, NPrec8, 8);
472 FS1_matrix = flux_source(NFluxmodes, NPrec1, NCmodes, 1);
473 FS2_matrix = flux_source(NFluxmodes, NPrec2, NCmodes, 2);
474 FS3_matrix = flux_source(NFluxmodes, NPrec3, NCmodes, 3);
475 FS4_matrix = flux_source(NFluxmodes, NPrec4, NCmodes, 4);
476 FS5_matrix = flux_source(NFluxmodes, NPrec5, NCmodes, 5);
477 FS6_matrix = flux_source(NFluxmodes, NPrec6, NCmodes, 6);
478 FS7_matrix = flux_source(NFluxmodes, NPrec7, NCmodes, 7);
479 FS8_matrix = flux_source(NFluxmodes, NPrec8, NCmodes, 8);
480 Info <<
"\n End \n" << endl;
481 Info <<
"\n Computing thermal matrices\n" << endl;
491 DFS1_matrix = dec_fluxsource(NFluxmodes, NDec1, NCmodes, 1);
492 DFS2_matrix = dec_fluxsource(NFluxmodes, NDec2, NCmodes, 2);
493 DFS3_matrix = dec_fluxsource(NFluxmodes, NDec3, NCmodes, 3);
497 TXS_matrix = temp_XSfluxsource(NTmodes, NFluxmodes, NCmodes);
498 THS1_matrix = temp_heatsource(NTmodes, NDec1, NCmodes, 1);
499 THS2_matrix = temp_heatsource(NTmodes, NDec2, NCmodes, 2);
500 THS3_matrix = temp_heatsource(NTmodes, NDec3, NCmodes, 3);
501 Info <<
"\n End \n" << endl;
512 PtrList<volVectorField> Together(0);
516 for (label k = 0; k <
liftfield.size(); k++)
524 for (label k = 0; k <
NUmodes; k++)
526 Together.append(
Umodes[k].clone());
531 for (label i = 0; i < Bsize; i++)
533 for (label j = 0; j < Bsize; j++)
535 B_matrix(i, j) = fvc::domainIntegrate(Together[i] & fvc::laplacian(
536 dimensionedScalar(
"1", dimless, 1), Together[j])).value();
542 "./ITHACAoutput/Matrices/fluid_dynamics/");
546Eigen::MatrixXd msrProblem::pressure_gradient_term(label NUmodes, label NPmodes)
549 label K2size = NPmodes;
550 Eigen::MatrixXd
K_matrix(K1size, K2size);
551 PtrList<volVectorField> Together(0);
555 for (label k = 0; k <
liftfield.size(); k++)
563 for (label k = 0; k <
NUmodes; k++)
565 Together.append(
Umodes[k].clone());
570 for (label i = 0; i < K1size; i++)
572 for (label j = 0; j < K2size; j++)
574 K_matrix(i, j) = fvc::domainIntegrate(Together[i] & fvc::grad(
581 "./ITHACAoutput/Matrices/fluid_dynamics/");
585List <Eigen::MatrixXd> msrProblem::convective_term(label NUmodes,
592 for (label j = 0; j < Csize; j++)
597 PtrList<volVectorField> Together(0);
601 for (label k = 0; k <
liftfield.size(); k++)
609 for (label k = 0; k <
NUmodes; k++)
611 Together.append(
Umodes[k].clone());
615 for (label i = 0; i < Csize; i++)
617 for (label j = 0; j < Csize; j++)
619 for (label k = 0; k < Csize; k++)
621 C_matrix[i](j, k) = fvc::domainIntegrate(Together[i] & fvc::div(
622 linearInterpolate(Together[j]) & Together[j].mesh().Sf(), Together[k])).value();
629 "./ITHACAoutput/Matrices/fluid_dynamics/");
633Eigen::MatrixXd msrProblem::mass_term(label NUmodes, label NPmodes)
636 Eigen::MatrixXd
M_matrix(Msize, Msize);
637 PtrList<volVectorField> Together(0);
641 for (label k = 0; k <
liftfield.size(); k++)
649 for (label k = 0; k <
NUmodes; k++)
651 Together.append(
Umodes[k].clone());
656 for (label i = 0; i < Msize; i++)
658 for (label j = 0; j < Msize; j++)
660 M_matrix(i, j) = fvc::domainIntegrate(Together[i] & Together[j]).value();
666 "./ITHACAoutput/Matrices/fluid_dynamics/");
674 label P1size = NPmodes;
676 Eigen::MatrixXd
P_matrix(P1size, P2size);
677 PtrList<volVectorField> Together(0);
681 for (label k = 0; k <
liftfield.size(); k++)
689 for (label k = 0; k <
NUmodes; k++)
691 Together.append(
Umodes[k].clone());
696 for (label i = 0; i < P1size; i++)
698 for (label j = 0; j < P2size; j++)
701 Together[j])).value();
707 "./ITHACAoutput/Matrices/fluid_dynamics/");
712List <Eigen::MatrixXd> msrProblem::div_momentum(label NUmodes, label NPmodes)
714 label G1size = NPmodes;
719 for (label j = 0; j < G1size; j++)
724 PtrList<volVectorField> Together(0);
728 for (label k = 0; k <
liftfield.size(); k++)
736 for (label k = 0; k <
NUmodes; k++)
738 Together.append(
Umodes[k].clone());
742 for (label i = 0; i < G1size; i++)
744 for (label j = 0; j < G2size; j++)
746 for (label k = 0; k < G2size; k++)
748 G_matrix[i](j, k) = fvc::domainIntegrate(fvc::grad(
Pmodes[i]) & (fvc::div(
749 fvc::interpolate(Together[j]) & Together[j].mesh().Sf(), Together[k]))).value();
756 "./ITHACAoutput/Matrices/fluid_dynamics/");
760Eigen::MatrixXd msrProblem::laplacian_pressure(label NPmodes)
762 label Dsize = NPmodes;
763 Eigen::MatrixXd
D_matrix(Dsize, Dsize);
766 for (label i = 0; i < Dsize; i++)
768 for (label j = 0; j < Dsize; j++)
770 D_matrix(i, j) = fvc::domainIntegrate(fvc::grad(
Pmodes[i]) & fvc::grad(
777 "./ITHACAoutput/Matrices/fluid_dynamics/");
781Eigen::MatrixXd msrProblem::pressure_BC1(label NUmodes, label NPmodes)
783 label P_BC1size = NPmodes;
785 Eigen::MatrixXd
BC1_matrix(P_BC1size, P_BC2size);
786 fvMesh& mesh = _mesh();
787 PtrList<volVectorField> Together(0);
791 for (label k = 0; k <
liftfield.size(); k++)
799 for (label k = 0; k <
NUmodes; k++)
801 Together.append(
Umodes[k].clone());
805 for (label i = 0; i < P_BC1size; i++)
807 for (label j = 0; j < P_BC2size; j++)
809 surfaceScalarField lpl((fvc::interpolate(fvc::laplacian(
810 Together[j])) & mesh.Sf()) * fvc::interpolate(
Pmodes[i]));
813 for (label k = 0; k < lpl.boundaryField().size(); k++)
815 s += gSum(lpl.boundaryField()[k]);
823 "./ITHACAoutput/Matrices/fluid_dynamics/");
828List <Eigen::MatrixXd> msrProblem::pressure_BC2(label NUmodes, label NPmodes)
830 label P2_BC1size = NPmodes;
833 fvMesh& mesh = _mesh();
836 for (label j = 0; j < P2_BC1size; j++)
841 PtrList<volVectorField> Together(0);
845 for (label k = 0; k <
liftfield.size(); k++)
853 for (label k = 0; k <
NUmodes; k++)
855 Together.append(
Umodes[k].clone());
859 for (label i = 0; i < P2_BC1size; i++)
861 for (label j = 0; j < P2_BC2size; j++)
863 for (label k = 0; k < P2_BC2size; k++)
865 surfaceScalarField div_m(fvc::interpolate(fvc::div(fvc::interpolate(
866 Together[j]) & mesh.Sf(),
867 Together[k])) & mesh.Sf() * fvc::interpolate(
Pmodes[i]));
870 for (label k = 0; k < div_m.boundaryField().size(); k++)
872 s += gSum(div_m.boundaryField()[k]);
882 "./ITHACAoutput/Matrices/fluid_dynamics/");
886Eigen::MatrixXd msrProblem::pressure_BC3(label NUmodes, label NPmodes)
888 label P3_BC1size = NPmodes;
890 Eigen::MatrixXd
BC3_matrix(P3_BC1size, P3_BC2size);
891 fvMesh& mesh = _mesh();
892 PtrList<volVectorField> Together(0);
896 for (label k = 0; k <
liftfield.size(); k++)
904 for (label k = 0; k <
NUmodes; k++)
906 Together.append(
Umodes[k].clone());
910 surfaceVectorField n(mesh.Sf() / mesh.magSf());
912 for (label i = 0; i < P3_BC1size; i++)
914 for (label j = 0; j < P3_BC2size; j++)
916 surfaceVectorField BC3 = fvc::interpolate(fvc::curl(Together[j])).ref();
917 surfaceVectorField BC4 = (n ^ fvc::interpolate(fvc::grad(
Pmodes[i]))).ref();
918 surfaceScalarField BC5 = ((BC3 & BC4) * mesh.magSf()).ref();
921 for (label k = 0; k < BC5.boundaryField().size(); k++)
923 s += gSum(BC5.boundaryField()[k]);
931 "./ITHACAoutput/Matrices/fluid_dynamics/");
941 label LFsize = NFluxmodes;
945 for (label j = 0; j < LFsize; j++)
952 for (label i = 0; i < LFsize; i++)
954 for (label j = 0; j < NCmodes; j++)
956 for (label k = 0; k < LFsize; k++)
966 "./ITHACAoutput/Matrices/neutronics/");
970Eigen::MatrixXd msrProblem::mass_flux(label NFluxmodes)
972 label MFsize = NFluxmodes;
977 for (label i = 0; i < MFsize; i++)
979 for (label j = 0; j < MFsize; j++)
987 "./ITHACAoutput/Matrices/neutronics/");
991List<Eigen::MatrixXd> msrProblem::prod_flux(label NFluxmodes, label NCmodes)
993 label PFsize = NFluxmodes;
997 for (label j = 0; j < PFsize; j++)
1004 for (label i = 0; i < PFsize; i++)
1006 for (label j = 0; j < NCmodes; j++)
1008 for (label k = 0; k < PFsize; k++)
1018 "./ITHACAoutput/Matrices/neutronics/");
1022List<Eigen::MatrixXd> msrProblem::abs_flux(label NFluxmodes, label NCmodes)
1024 label AFsize = NFluxmodes;
1028 for (label j = 0; j < AFsize; j++)
1035 for (label i = 0; i < AFsize; i++)
1037 for (label j = 0; j < NCmodes; j++)
1039 for (label k = 0; k < AFsize; k++)
1049 "./ITHACAoutput/Matrices/neutronics/");
1053Eigen::MatrixXd msrProblem::prec_source(label NFluxmodes, label NPrecmodes,
1057 PtrList<volScalarField> Precmodes =
choose_group(
"prec", p);
1058 label PS1size = NFluxmodes;
1059 label PS2size = NPrecmodes;
1060 Eigen::MatrixXd PS_matrix;
1061 PS_matrix.resize(PS1size, PS2size);
1064 for (label i = 0; i < PS1size; i++)
1066 for (label j = 0; j < PS2size; j++)
1068 PS_matrix(i, j) = fvc::domainIntegrate(
Fluxmodes[i] * Precmodes[j]).value();
1072 savegroupMatrix(
"PS", p,
"./ITHACAoutput/Matrices/neutronics/", PS_matrix);
1082 PtrList<volScalarField> Precmodes =
choose_group(
"prec", p);
1083 label ST1size = NPrecmodes;
1085 List<Eigen::MatrixXd> ST_matrix;
1086 ST_matrix.setSize(ST1size);
1088 for (label j = 0; j < ST1size; j++)
1090 ST_matrix[j].resize(ST2size, ST1size);
1091 ST_matrix[j].setZero();
1094 PtrList<volVectorField> Together(0);
1098 for (label k = 0; k <
liftfield.size(); k++)
1106 for (label k = 0; k <
NUmodes; k++)
1108 Together.append(
Umodes[k].clone());
1113 for (label i = 0; i < ST1size; i++)
1115 for (label j = 0; j < ST2size; j++)
1117 for (label k = 0; k < ST1size; k++)
1119 ST_matrix[i](j, k) = fvc::domainIntegrate(Precmodes[i] * fvc::div(
1120 fvc::interpolate(Together[j]) & Together[j].mesh().Sf(), Precmodes[k])).value();
1125 savegroupMatrix(
"ST", p,
"./ITHACAoutput/Matrices/neutronics/", ST_matrix);
1129Eigen::MatrixXd msrProblem::prec_mass(label NPrecmodes, label family)
1132 PtrList<volScalarField> Precmodes =
choose_group(
"prec", p);
1133 label MPsize = NPrecmodes;
1134 Eigen::MatrixXd MP_matrix;
1135 MP_matrix.resize(MPsize, MPsize);
1138 for (label i = 0; i < MPsize; i++)
1140 for (label j = 0; j < MPsize; j++)
1142 MP_matrix(i, j) = fvc::domainIntegrate(Precmodes[i] * Precmodes[j]).value();
1146 savegroupMatrix(
"MP", p,
"./ITHACAoutput/Matrices/neutronics/", MP_matrix);
1150Eigen::MatrixXd msrProblem::laplacian_prec(label NPrecmodes, label family)
1153 PtrList<volScalarField> Precmodes =
choose_group(
"prec", p);
1154 label LPsize = NPrecmodes;
1155 Eigen::MatrixXd LP_matrix;
1156 LP_matrix.resize(LPsize, LPsize);
1158 for (label i = 0; i < LPsize; i++)
1160 for (label j = 0; j < LPsize; j++)
1162 LP_matrix(i, j) = fvc::domainIntegrate(Precmodes[i] * fvc::laplacian(
1163 dimensionedScalar(
"1", dimless, 1), Precmodes[j])).value();
1167 savegroupMatrix(
"LP", p,
"./ITHACAoutput/Matrices/neutronics/", LP_matrix);
1171List<Eigen::MatrixXd> msrProblem::flux_source(label NFluxmodes,
1172 label NPrecmodes, label NCmodes, label family)
1175 PtrList<volScalarField> Precmodes =
choose_group(
"prec", p);
1176 label FSsize = NPrecmodes;
1177 List<Eigen::MatrixXd> FS_matrix;
1178 FS_matrix.setSize(FSsize);
1180 for (label j = 0; j < FSsize; j++)
1182 FS_matrix[j].resize(NCmodes, NFluxmodes);
1183 FS_matrix[j].setZero();
1187 for (label i = 0; i < FSsize; i++)
1189 for (label j = 0; j < NCmodes; j++)
1191 for (label k = 0; k < NFluxmodes; k++)
1193 FS_matrix[i](j, k) = fvc::domainIntegrate(Precmodes[i] *
NSFmodes[j] *
1199 savegroupMatrix(
"FS", p,
"./ITHACAoutput/Matrices/neutronics/", FS_matrix);
1213 PtrList<volScalarField> Decmodes =
choose_group(
"dec", g);
1214 label SD1size = NDecmodes;
1216 List<Eigen::MatrixXd> SD_matrix;
1217 SD_matrix.setSize(SD1size);
1219 for (label j = 0; j < SD1size; j++)
1221 SD_matrix[j].resize(SD2size, SD1size);
1222 SD_matrix[j].setZero();
1225 PtrList<volVectorField> Together(0);
1229 for (label k = 0; k <
liftfield.size(); k++)
1237 for (label k = 0; k <
NUmodes; k++)
1239 Together.append(
Umodes[k].clone());
1244 for (label i = 0; i < SD1size; i++)
1246 for (label j = 0; j < SD2size; j++)
1248 for (label k = 0; k < SD1size; k++)
1250 SD_matrix[i](j, k) = fvc::domainIntegrate(Decmodes[i] * fvc::div(
1251 fvc::interpolate(Together[j]) & Together[j].mesh().Sf(), Decmodes[k])).value();
1256 savegroupMatrix(
"SD", g,
"./ITHACAoutput/Matrices/thermal/", SD_matrix);
1260Eigen::MatrixXd msrProblem::dec_mass(label NDecmodes, label decgroup)
1263 PtrList<volScalarField> Decmodes =
choose_group(
"dec", g);
1264 label MDsize = NDecmodes;
1265 Eigen::MatrixXd MD_matrix;
1266 MD_matrix.resize(MDsize, MDsize);
1269 for (label i = 0; i < MDsize; i++)
1271 for (label j = 0; j < MDsize; j++)
1273 MD_matrix(i, j) = fvc::domainIntegrate(Decmodes[i] * Decmodes[j]).value();
1277 savegroupMatrix(
"MD", g,
"./ITHACAoutput/Matrices/thermal/", MD_matrix);
1282Eigen::MatrixXd msrProblem::laplacian_dec(label NDecmodes, label decgroup)
1285 PtrList<volScalarField> Decmodes =
choose_group(
"dec", g);
1286 label LDsize = NDecmodes;
1287 Eigen::MatrixXd LD_matrix;
1288 LD_matrix.resize(LDsize, LDsize);
1291 for (label i = 0; i < LDsize; i++)
1293 for (label j = 0; j < LDsize; j++)
1295 LD_matrix(i, j) = fvc::domainIntegrate(Decmodes[i] * fvc::laplacian(
1296 dimensionedScalar(
"1", dimless, 1), Decmodes[j])).value();
1300 savegroupMatrix(
"LD", g,
"./ITHACAoutput/Matrices/thermal/", LD_matrix);
1304List<Eigen::MatrixXd> msrProblem::dec_fluxsource(label NFluxmodes,
1305 label NDecmodes, label NCmodes, label decgroup)
1308 PtrList<volScalarField> Decmodes =
choose_group(
"dec", g);
1309 label DFSsize = NDecmodes;
1310 List<Eigen::MatrixXd> DFS_matrix;
1311 DFS_matrix.setSize(DFSsize);
1313 for (label j = 0; j < DFSsize; j++)
1315 DFS_matrix[j].resize(NCmodes, NFluxmodes);
1316 DFS_matrix[j].setZero();
1320 for (label i = 0; i < DFSsize; i++)
1322 for (label j = 0; j < NCmodes; j++)
1324 for (label k = 0; k < NFluxmodes; k++)
1326 DFS_matrix[i](j, k) = fvc::domainIntegrate(Decmodes[i] *
SPmodes[j] *
1332 savegroupMatrix(
"DFS", g,
"./ITHACAoutput/Matrices/thermal/", DFS_matrix);
1345 PtrList<volScalarField> TogetherT(0);
1349 for (label k = 0; k <
liftfieldT.size(); k++)
1357 for (label k = 0; k < NTmodes; k++)
1359 TogetherT.append(
Tmodes[k].clone());
1364 for (label i = 0; i < TMsize; i++)
1366 for (label j = 0; j < TMsize; j++)
1368 TM_matrix(i, j) = fvc::domainIntegrate(TogetherT[i] * TogetherT[j]).value();
1374 "./ITHACAoutput/Matrices/thermal/");
1378List<Eigen::MatrixXd> msrProblem::temp_stream(label NUmodes, label NTmodes)
1385 for (label j = 0; j < TS1size; j++)
1391 PtrList<volVectorField> Together(0);
1395 for (label k = 0; k <
liftfield.size(); k++)
1403 for (label k = 0; k <
NUmodes; k++)
1405 Together.append(
Umodes[k].clone());
1409 PtrList<volScalarField> TogetherT(0);
1413 for (label k = 0; k <
liftfieldT.size(); k++)
1421 for (label k = 0; k < NTmodes; k++)
1423 TogetherT.append(
Tmodes[k].clone());
1428 for (label i = 0; i < TS1size; i++)
1430 for (label j = 0; j < TS2size; j++)
1432 for (label k = 0; k < TS1size; k++)
1434 TS_matrix[i](j, k) = fvc::domainIntegrate(TogetherT[i] * fvc::div(
1435 fvc::interpolate(Together[j]) & Together[j].mesh().Sf(), TogetherT[k])).value();
1442 "./ITHACAoutput/Matrices/thermal/");
1447Eigen::MatrixXd msrProblem::laplacian_temp(label NTmodes)
1452 PtrList<volScalarField> TogetherT(0);
1456 for (label k = 0; k <
liftfieldT.size(); k++)
1464 for (label k = 0; k < NTmodes; k++)
1466 TogetherT.append(
Tmodes[k].clone());
1471 for (label i = 0; i < LTsize; i++)
1473 for (label j = 0; j < LTsize; j++)
1475 LT_matrix(i, j) = fvc::domainIntegrate(TogetherT[i] * fvc::laplacian(
1476 dimensionedScalar(
"1", dimless, 1), TogetherT[j])).value();
1482 "./ITHACAoutput/Matrices/thermal/");
1486List<Eigen::MatrixXd> msrProblem::temp_XSfluxsource(label NTmodes,
1487 label NFluxmodes, label NCmodes)
1493 for (label j = 0; j < TXSsize; j++)
1499 PtrList<volScalarField> TogetherT(0);
1503 for (label k = 0; k <
liftfieldT.size(); k++)
1511 for (label k = 0; k < NTmodes; k++)
1513 TogetherT.append(
Tmodes[k].clone());
1518 for (label i = 0; i < TXSsize; i++)
1520 for (label j = 0; j < NCmodes; j++)
1522 for (label k = 0; k < NFluxmodes; k++)
1531 "./ITHACAoutput/Matrices/thermal/");
1535List<Eigen::MatrixXd> msrProblem::temp_heatsource(label NTmodes,
1536 label NDecmodes, label NCmodes, label decgroup)
1539 PtrList<volScalarField> Decmodes =
choose_group(
"dec", g);
1541 List<Eigen::MatrixXd> THS_matrix;
1542 THS_matrix.setSize(THSsize);
1544 for (label j = 0; j < THSsize; j++)
1546 THS_matrix[j].resize(NCmodes, NDecmodes);
1547 THS_matrix[j].setZero();
1550 PtrList<volScalarField> TogetherT(0);
1554 for (label k = 0; k <
liftfieldT.size(); k++)
1562 for (label k = 0; k < NTmodes; k++)
1564 TogetherT.append(
Tmodes[k].clone());
1569 for (label i = 0; i < THSsize; i++)
1571 for (label j = 0; j < NCmodes; j++)
1573 for (label k = 0; k < NDecmodes; k++)
1575 THS_matrix[i](j, k) = fvc::domainIntegrate(TogetherT[i] *
vmodes[j] *
1576 Decmodes[k]).value();
1581 savegroupMatrix(
"THS", g,
"./ITHACAoutput/Matrices/thermal/", THS_matrix);
1587 if (field ==
"prec")
1648 nome.append(std::to_string(n));
1667 volVectorField& U = _U();
1668 volScalarField& p = _p();
1669 volScalarField& flux = _flux();
1670 volScalarField& prec1 = _prec1();
1671 volScalarField& prec2 = _prec2();
1672 volScalarField& prec3 = _prec3();
1673 volScalarField& prec4 = _prec4();
1674 volScalarField& prec5 = _prec5();
1675 volScalarField& prec6 = _prec6();
1676 volScalarField& prec7 = _prec7();
1677 volScalarField& prec8 = _prec8();
1678 volScalarField& T = _T();
1679 volScalarField& dec1 = _dec1();
1680 volScalarField& dec2 = _dec2();
1681 volScalarField& dec3 = _dec3();
1682 volScalarField& v = _v();
1683 volScalarField& D = _D();
1684 volScalarField& NSF = _NSF();
1685 volScalarField& A = _A();
1686 volScalarField& SP = _SP();
1687 volScalarField& TXS = _TXS();
1688 volScalarField powerDens = (flux * (1 - _decbetaTot()) * _SP() + _decLam1() *
1689 dec1 + _decLam2() * dec2 + _decLam3() * dec3).ref();
1690 powerDens.rename(
"powerDens");
1719 volVectorField& U = _U();
1720 volScalarField& p = _p();
1721 volScalarField& flux = _flux();
1722 volScalarField& prec1 = _prec1();
1723 volScalarField& prec2 = _prec2();
1724 volScalarField& prec3 = _prec3();
1725 volScalarField& prec4 = _prec4();
1726 volScalarField& prec5 = _prec5();
1727 volScalarField& prec6 = _prec6();
1728 volScalarField& prec7 = _prec7();
1729 volScalarField& prec8 = _prec8();
1730 volScalarField& T = _T();
1731 volScalarField& dec1 = _dec1();
1732 volScalarField& dec2 = _dec2();
1733 volScalarField& dec3 = _dec3();
1734 volScalarField& v = _v();
1735 volScalarField& D = _D();
1736 volScalarField& NSF = _NSF();
1737 volScalarField& A = _A();
1738 volScalarField& SP = _SP();
1739 volScalarField& TXS = _TXS();
1740 volScalarField powerDens = (flux * (1 - _decbetaTot()) * _SP() + _decLam1() *
1741 dec1 + _decLam2() * dec2 + _decLam3() * dec3).ref();
1742 powerDens.rename(
"powerDens");
1743 std::string folder = dir;
1747 for (label i = 0; i <
mu.cols(); i++)
1749 folder.append(std::to_string(i));
1778 Info <<
"Error" << endl;
1785 const volScalarField& nu = _laminarTransport().nu();
1786 volScalarField& ciao =
const_cast<volScalarField&
>(nu);
1789 for (label i = 0; i < ciao.boundaryFieldRef().size(); i++)
1800 "./ITHACAoutput/Matrices/");
1801 label Ncol = Ncoeff_v.cols();
1802 SAMPLES_v.resize(NCmodes);
1803 rbfsplines_v.resize(NCmodes);
1805 for (label i = 0; i < NCmodes; i++)
1807 Info <<
"Constructing v RadialBasisFunction for mode " << i + 1 <<
1809 SAMPLES_v[i] =
new SPLINTER::DataTable(1, 1);
1811 for (label j = 0; j < Ncol; j++)
1813 SAMPLES_v[i]->addSample(
mu_samples.row(j), Ncoeff_v(i, j));
1816 rbfsplines_v[i] =
new SPLINTER::RBFSpline(* SAMPLES_v[i],
1817 SPLINTER::RadialBasisFunctionType::GAUSSIAN);
1822 "./ITHACAoutput/Matrices/");
1823 SAMPLES_D.resize(NCmodes);
1824 rbfsplines_D.resize(NCmodes);
1826 for (label i = 0; i < NCmodes; i++)
1828 Info <<
"Constructing D RadialBasisFunction for mode " << i + 1 <<
1830 SAMPLES_D[i] =
new SPLINTER::DataTable(1, 1);
1832 for (label j = 0; j < Ncol; j++)
1834 SAMPLES_D[i]->addSample(
mu_samples.row(j), Ncoeff_D(i, j));
1837 rbfsplines_D[i] =
new SPLINTER::RBFSpline(* SAMPLES_D[i],
1838 SPLINTER::RadialBasisFunctionType::GAUSSIAN);
1844 "./ITHACAoutput/Matrices/");
1845 SAMPLES_NSF.resize(NCmodes);
1846 rbfsplines_NSF.resize(NCmodes);
1848 for (label i = 0; i < NCmodes; i++)
1850 Info <<
"Constructing NSF RadialBasisFunction for mode " << i + 1 <<
1852 SAMPLES_NSF[i] =
new SPLINTER::DataTable(1, 1);
1854 for (label j = 0; j < Ncol; j++)
1856 SAMPLES_NSF[i]->addSample(
mu_samples.row(j), Ncoeff_NSF(i, j));
1859 rbfsplines_NSF[i] =
new SPLINTER::RBFSpline(* SAMPLES_NSF[i],
1860 SPLINTER::RadialBasisFunctionType::GAUSSIAN);
1865 "./ITHACAoutput/Matrices/");
1866 SAMPLES_A.resize(NCmodes);
1867 rbfsplines_A.resize(NCmodes);
1869 for (label i = 0; i < NCmodes; i++)
1871 Info <<
"Constructing A RadialBasisFunction for mode " << i + 1 <<
1873 SAMPLES_A[i] =
new SPLINTER::DataTable(1, 1);
1875 for (label j = 0; j < Ncol; j++)
1877 SAMPLES_A[i]->addSample(
mu_samples.row(j), Ncoeff_A(i, j));
1880 rbfsplines_A[i] =
new SPLINTER::RBFSpline(* SAMPLES_A[i],
1881 SPLINTER::RadialBasisFunctionType::GAUSSIAN);
1887 "./ITHACAoutput/Matrices/");
1888 SAMPLES_SP.resize(NCmodes);
1889 rbfsplines_SP.resize(NCmodes);
1891 for (label i = 0; i < NCmodes; i++)
1893 Info <<
"Constructing SP RadialBasisFunction for mode " << i + 1 <<
1895 SAMPLES_SP[i] =
new SPLINTER::DataTable(1, 1);
1897 for (label j = 0; j < Ncol; j++)
1899 SAMPLES_SP[i]->addSample(
mu_samples.row(j), Ncoeff_SP(i, j));
1902 rbfsplines_SP[i] =
new SPLINTER::RBFSpline(* SAMPLES_SP[i],
1903 SPLINTER::RadialBasisFunctionType::GAUSSIAN);
1909 "./ITHACAoutput/Matrices/");
1910 SAMPLES_TXS.resize(NCmodes);
1911 rbfsplines_TXS.resize(NCmodes);
1913 for (label i = 0; i < NCmodes; i++)
1915 Info <<
"Constructing TXS RadialBasisFunction for mode " << i + 1 <<
1917 SAMPLES_TXS[i] =
new SPLINTER::DataTable(1, 1);
1919 for (label j = 0; j < Ncol; j++)
1921 SAMPLES_TXS[i]->addSample(
mu_samples.row(j), Ncoeff_TXS(i, j));
1924 rbfsplines_TXS[i] =
new SPLINTER::RBFSpline(* SAMPLES_TXS[i],
1925 SPLINTER::RadialBasisFunctionType::GAUSSIAN);
1932 for (label k = 0; k < inletIndexT.rows(); k++)
1934 Time& runTime = _runTime();
1935 fvMesh& mesh = _mesh();
1936 volScalarField& T = _T();
1937 volVectorField& U = _U();
1938 surfaceScalarField& phi = _phi();
1939 phi = linearInterpolate(U) & mesh.Sf();
1941 simpleControl simple(mesh);
1942 IOMRFZoneList& MRF = _MRF();
1943 singlePhaseTransportModel& laminarTransport = _laminarTransport();
1944 turbulence = autoPtr<incompressible::turbulenceModel>
1946 incompressible::turbulenceModel::New(U, phi, laminarTransport)
1948 dimensionedScalar& nu = _nu();
1949 dimensionedScalar& Pr = _Pr();
1950 dimensionedScalar& Prt = _Prt();
1951 volScalarField& alphat = _alphat();
1952 volScalarField& v = _v();
1953 dimensionedScalar& cp = _CpRef();
1954 dimensionedScalar& rho = _rhoRef();
1955 dimensionedScalar& sp = _SP1_0();
1956 dimensionedScalar& dbtot = _decbetaTot();
1957 label BCind = inletIndexT(k, 0);
1958 volScalarField Tlift(
"Tlift" + name(k), T);
1959 instantList Times = runTime.times();
1960 runTime.setTime(Times[1], 1);
1961 Info <<
"Solving a lifting Problem" << endl;
1964 alphat = turbulence->nut() / Prt;
1965 alphat.correctBoundaryConditions();
1966 volScalarField source
1974 IOobject::AUTO_WRITE
1977 dimensionedScalar(
"source", dimensionSet(0, -2, -1, 0, 0, 0, 0), 1)
1980 for (label j = 0; j < T.boundaryField().size(); j++)
1987 else if (T.boundaryField()[BCind].type() ==
"fixedValue")
1997 while (simple.correctNonOrthogonal())
2001 fvm::div(phi, Tlift) == fvm::laplacian(turbulence->nu() / Pr + alphat, Tlift)
2002 + sp * (1 - dbtot) / (cp * rho) * source
2005 Info <<
"ExecutionTime = " << runTime.elapsedCpuTime() <<
" s"
2006 <<
" ClockTime = " << runTime.elapsedClockTime() <<
" s"
2018 volScalarField& p = _p();
2019 volScalarField& p0 =
_p0();
2020 volVectorField& U = _U();
2021 volVectorField& U0 = _U0();
2022 surfaceScalarField& phi = _phi();
2023 surfaceScalarField& phi0 = _phi0();
2024 volScalarField& flux = _flux();
2025 volScalarField& flux0 = _flux0();
2026 volScalarField& prec1 = _prec1();
2027 volScalarField& prec10 = _prec10();
2028 volScalarField& prec2 = _prec2();
2029 volScalarField& prec20 = _prec20();
2030 volScalarField& prec3 = _prec3();
2031 volScalarField& prec30 = _prec30();
2032 volScalarField& prec4 = _prec4();
2033 volScalarField& prec40 = _prec40();
2034 volScalarField& prec5 = _prec5();
2035 volScalarField& prec50 = _prec50();
2036 volScalarField& prec6 = _prec6();
2037 volScalarField& prec60 = _prec60();
2038 volScalarField& prec7 = _prec7();
2039 volScalarField& prec70 = _prec70();
2040 volScalarField& prec8 = _prec8();
2041 volScalarField& prec80 = _prec80();
2042 volScalarField& T = _T();
2043 volScalarField& T0 = _T0();
2044 volScalarField& dec1 = _dec1();
2045 volScalarField& dec10 = _dec10();
2046 volScalarField& dec2 = _dec2();
2047 volScalarField& dec20 = _dec20();
2048 volScalarField& dec3 = _dec3();
2049 volScalarField& dec30 = _dec30();
2050 dimensionedScalar& Keff = _Keff();
2051 dimensionedScalar& K0 = _K0();
2052 volScalarField& v = _v();
2053 volScalarField& v0 = _v0();
2054 volScalarField& NSF = _NSF();
2055 volScalarField& NSF0 = _NSF0();
2056 volScalarField& A = _A();
2057 volScalarField& A0 = _A0();
2058 volScalarField& D = _D();
2059 volScalarField& D0 = _D0();
2060 volScalarField& SP = _SP();
2061 volScalarField& SP0 = _SP0();
2062 volScalarField& TXS = _TXS();
2063 volScalarField& TXS0 = _TXS0();
2064 fvMesh& mesh = _mesh();
2069 (incompressible::turbulenceModel::New(U, phi, _laminarTransport())).ptr()
2084 fvPatchField<scalar>::New(prec10.boundaryField()[
precinIndex].type(),
2087 fvPatchField<scalar>::New(prec20.boundaryField()[
precinIndex].type(),
2090 fvPatchField<scalar>::New(prec30.boundaryField()[
precinIndex].type(),
2093 fvPatchField<scalar>::New(prec40.boundaryField()[
precinIndex].type(),
2096 fvPatchField<scalar>::New(prec50.boundaryField()[
precinIndex].type(),
2099 fvPatchField<scalar>::New(prec60.boundaryField()[
precinIndex].type(),
2102 fvPatchField<scalar>::New(prec70.boundaryField()[
precinIndex].type(),
2105 fvPatchField<scalar>::New(prec80.boundaryField()[
precinIndex].type(),
static ITHACAparameters * getInstance()
Gets an instance of ITHACAparameters, to be used if the instance is already existing.
List< Eigen::MatrixXd > stream_term(label NUmodes, label NPrecmodes, label family)
precursor eq. methods:
Eigen::MatrixXd MP7_matrix
precursor mass term-7
Eigen::MatrixXd MD1_matrix
decay heat mass term-1
void homogenizeT()
Method to compute the homogenized temperature field, it also sets homboolT=true.
List< Eigen::MatrixXd > ST5_matrix
precursor stream term-5
PtrList< volScalarField > Prec6field
List of pointers used to form the prec6 snapshots matrix.
List< Eigen::MatrixXd > THS2_matrix
temperature decay heat source term-2
Eigen::MatrixXd LP3_matrix
precursor laplacian term-3
List< Eigen::MatrixXd > SD1_matrix
decay heat stream term-1
Eigen::MatrixXd BC1_matrix
PPE BC1.
PtrList< volScalarField > NSFmodes
List of pointers used to form the NSF snapshosts matrix.
PtrList< volScalarField > Prec5modes
List of pointers used to form the prec1 modes.
List< Eigen::MatrixXd > PF_matrix
production flux
PtrList< volScalarField > choose_group(string field, label ith)
method to choose one field among precs & decs field can be "prec" or "dec" only if field==prec then i...
void savegroupMatrix(string nome, label n, word folder, M matrice)
method to save matrices for precs and decs M can be an Eigen::MatrixXd or List<Eigen::MatrixXd> nome ...
PtrList< volScalarField > Prec4modes
List of pointers used to form the prec1 modes.
List< Eigen::MatrixXd > FS3_matrix
precursor flux source term-3
List< Eigen::MatrixXd > BC2_matrix
PPE BC2.
List< Eigen::MatrixXd > ST7_matrix
precursor stream term-7
PtrList< volScalarField > Prec8field
List of pointers used to form the prec8 snapshots matrix.
List< Eigen::MatrixXd > FS1_matrix
precursor flux source term-1
PtrList< volScalarField > Prec1modes
List of pointers used to form the prec1 modes.
List< Eigen::MatrixXd > TXS_matrix
temperature flux source term TXS
List< Eigen::MatrixXd > LF_matrix
laplacian_flux
PtrList< volScalarField > Pmodes
List of pointers used to form the pressure modes.
label NUmodes
Number of modes adopted during Galerkin projection.
Eigen::MatrixXd MP1_matrix
precursor mass term-1
List< Eigen::MatrixXd > ST8_matrix
precursor stream term-8
PtrList< volVectorField > Uomfield
List of pointers used to form the homogeneous velocity snapshots.
List< Eigen::MatrixXd > ST4_matrix
precursor stream term-4
PtrList< volScalarField > Prec7modes
List of pointers used to form the prec1 modes.
PtrList< volScalarField > vFields
List of pointers used to form the v snapshosts matrix.
Eigen::MatrixXd PS3_matrix
prec_source 3
PtrList< volScalarField > Tmodes
List of pointers used to form the temperature modes.
label precinIndex
indexes of inlet and outlet to adopt for precursors boundary conditions
Eigen::MatrixXd K_matrix
Gradient of pressure matrix.
List< Eigen::MatrixXd > G_matrix
Divergence of momentum PPE.
List< Eigen::MatrixXd > AF_matrix
absorption flux
Eigen::MatrixXd MP2_matrix
precursor mass term-2
List< Eigen::MatrixXd > FS2_matrix
precursor flux source term-2
Eigen::MatrixXd LP8_matrix
precursor laplacian term-8
Eigen::MatrixXd PS6_matrix
prec_source 6
PtrList< volScalarField > Prec8modes
List of pointers used to form the prec1 modes.
List< Eigen::MatrixXd > FS4_matrix
precursor flux source term-4
PtrList< volScalarField > Fluxfield
List of pointers used to form the flux snapshots matrix.
Eigen::MatrixXd BC3_matrix
PPE BC3.
Eigen::MatrixXd LP4_matrix
precursor laplacian term-4
Eigen::MatrixXd LP7_matrix
precursor laplacian term-7
Eigen::MatrixXd TM_matrix
temperature mass term
List< Eigen::MatrixXd > SD3_matrix
decay heat stream term-3
PtrList< volScalarField > Prec2modes
List of pointers used to form the prec1 modes.
Eigen::MatrixXd LP6_matrix
precursor laplacian term-6
List< Eigen::MatrixXd > TS_matrix
temperature stream term
Eigen::MatrixXd MF_matrix
mass flux
PtrList< volScalarField > Prec4field
List of pointers used to form the prec4 snapshots matrix.
Eigen::MatrixXd MP3_matrix
precursor mass term-3
PtrList< volScalarField > DFields
List of pointers used to form the D snapshosts matrix.
Eigen::MatrixXd D_matrix
Laplacian term PPE.
List< Eigen::MatrixXd > DFS2_matrix
decay heat flux source term-2
void change_viscosity(double mu)
method to change the viscosity in UEqn
List< Eigen::MatrixXd > laplacian_flux(label NFluxmodes, label NCmodes)
diffusion eq. methods:
PtrList< volScalarField > AFields
List of pointers used to form the A snapshosts matrix.
Eigen::MatrixXd PS7_matrix
prec_source 7
List< Eigen::MatrixXd > FS7_matrix
precursor flux source term-7
List< Eigen::MatrixXd > ST6_matrix
precursor stream term-6
void readMSRfields()
Method to read all the fieds of the MSR problem in the offline folder, it also reads mu_samples matri...
Eigen::MatrixXd LP1_matrix
precursor laplacian term-1
PtrList< volScalarField > Dec1modes
List of pointers used to form the dec1 modes.
List< Eigen::MatrixXd > THS1_matrix
temperature decay heat source term-1
PtrList< volScalarField > Dec3field
List of pointers used to form the dec3 snapshots matrix.
List< Eigen::MatrixXd > ST1_matrix
precursor stream term-1
void liftSolve()
Perform a lift solve for the velocity field.
Eigen::MatrixXd LT_matrix
temperature laplacian term
PtrList< volScalarField > Prec6modes
List of pointers used to form the prec1 modes.
void liftSolveT()
Perform a lift solve for the temperature.
List< Eigen::MatrixXd > FS6_matrix
precursor flux source term-6
Eigen::MatrixXd mass_temp(label NTmodes)
temperature eq. methods
PtrList< volScalarField > vmodes
List of pointers used to form the v modes.
Eigen::MatrixXd P_matrix
Div of velocity.
autoPtr< fv::options > _fvOptions
fvOptions
scalar tolerance
Tolerance for the residual of the stationary problems, there is the same tolerance for velocity and p...
PtrList< volScalarField > Dec1field
List of pointers used to form the dec1 snapshots matrix.
scalar maxIter
Number of maximum iterations to be done for the computation of the truth solution.
PtrList< volScalarField > TXSmodes
List of pointers used to form the SP snapshosts matrix.
Eigen::MatrixXd divergence_term(label NUmodes, label NPmodes)
continuity eq. methods:
Eigen::MatrixXd LD1_matrix
decay heat laplacian term-1
List< Eigen::MatrixXd > SD2_matrix
decay heat stream term-2
autoPtr< simpleControl > _simple
simpleControl
Eigen::MatrixXd MP5_matrix
precursor mass term-5
PtrList< volScalarField > PowerDensfield
List of pointers used to form the powerDens snapshots matrix.
PtrList< volScalarField > Prec3modes
List of pointers used to form the prec1 modes.
Eigen::MatrixXd LP2_matrix
precursor laplacian term-2
autoPtr< volScalarField > _p0
Initial fields (for restart purposes).
Eigen::MatrixXd diffusive_term(label NUmodes, label NPmodes)
sub-functions needed by projectPPE
bool homboolU
boolean variables to check if the homogenization of U and T is performed (true) or not (false)
Eigen::MatrixXd LD2_matrix
decay heat laplacian term-2
PtrList< volScalarField > Prec7field
List of pointers used to form the prec7 snapshots matrix.
Eigen::MatrixXd PS8_matrix
prec_source 8
Eigen::MatrixXd MP8_matrix
precursor mass term-8
Eigen::MatrixXd MD2_matrix
decay heat mass term-2
PtrList< volScalarField > liftfieldT
List of pointers used to form the list of lifting functions.
PtrList< volScalarField > Dec2modes
List of pointers used to form the dec2 modes.
void restart()
method to set all fields back to values in 0 folder
PtrList< volVectorField > liftfield
List of pointers used to form the list of lifting functions.
Eigen::MatrixXd PS4_matrix
prec_source 4
PtrList< volScalarField > Pfield
List of pointers used to form the pressure snapshots matrix.
Eigen::MatrixXd MP6_matrix
precursor mass term-6
PtrList< volScalarField > NSFFields
List of pointers used to form the NSF snapshosts matrix.
PtrList< volScalarField > Prec3field
List of pointers used to form the prec3 snapshots matrix.
PtrList< volVectorField > Umodes
List of pointers used to form the velocity modes.
PtrList< volScalarField > Dec3modes
List of pointers used to form the dec3 modes.
PtrList< volScalarField > Tfield
List of pointers used to form the temperature snapshots matrix.
Eigen::MatrixXd B_matrix
Diffusion term.
PtrList< volScalarField > Tomfield
List of pointers used to form the homogeneous velocity snapshots.
PtrList< volVectorField > Ufield
List of pointers used to form the velocity snapshots matrix.
PtrList< volScalarField > Prec1field
List of pointers used to form the prec1 snapshots matrix.
Eigen::MatrixXd M_matrix
Mass Matrix.
Eigen::MatrixXd MP4_matrix
precursor mass term-4
PtrList< volScalarField > SPmodes
List of pointers used to form the SP snapshosts matrix.
List< Eigen::MatrixXd > ST2_matrix
precursor stream term-2
List< Eigen::MatrixXd > FS8_matrix
precursor flux source term-8
PtrList< volScalarField > SPFields
List of pointers used to form the SP snapshosts matrix.
void msrcoeff(label &NC)
method to apply RBF interpolation procedure NC is the number of modes to adopt for construncting the ...
Eigen::MatrixXd PS1_matrix
prec_source 1
List< Eigen::MatrixXd > DFS1_matrix
decay heat flux source term-1
List< Eigen::MatrixXd > DFS3_matrix
decay heat flux source term-3
void homogenizeU()
Method to compute the homogenized velocity field, it also sets homboolU=true.
List< Eigen::MatrixXd > stream_dec(label NUmodes, label NDecmodes, label decgroup)
decay heat eq. methods:
List< Eigen::MatrixXd > FS5_matrix
precursor flux source term-5
void projectPPE(fileName folder, label NUmodes, label NPmodes, label NFluxmodes, Eigen::VectorXi Nprecmodes, label NTmodes, Eigen::VectorXi Ndecmodes, label NCmodes)
Project using the Poisson Equation for pressure.
List< Eigen::MatrixXd > THS3_matrix
temperature decay heat source term-3
PtrList< volScalarField > Dec2field
List of pointers used to form the dec2 snapshots matrix.
PtrList< volScalarField > Prec5field
List of pointers used to form the prec5 snapshots matrix.
Eigen::MatrixXd LD3_matrix
decay heat laplacian term-3
bool precInBool
boolean variable to decide if apply prec inlet BC
List< Eigen::MatrixXd > C_matrix
Non linear term.
PtrList< volScalarField > TXSFields
List of pointers used to form the SP snapshosts matrix.
Eigen::MatrixXd LP5_matrix
precursor laplacian term-5
void msrgetModesEVD()
Method to compute the modes for all the fields in the MSR problem, if hombool==false the velocity mod...
Eigen::MatrixXd MD3_matrix
decay heat mass term-3
PtrList< volScalarField > Amodes
List of pointers used to form the A snapshosts matrix.
Eigen::MatrixXd PS2_matrix
prec_source 2
PtrList< volScalarField > Fluxmodes
List of pointers used to form the flux modes.
PtrList< volScalarField > Prec2field
List of pointers used to form the prec2 snapshots matrix.
PtrList< volScalarField > Dmodes
List of pointers used to form the D modes.
void msrgetModesSVD()
Method to compute the modes for all the fields in the MSR problem, if hombool==false the velocity mod...
List< Eigen::MatrixXd > ST3_matrix
precursor stream term-3
Eigen::MatrixXd PS5_matrix
prec_source 5
void writeMu(List< scalar > mu_now)
Write out a list of scalar corresponding to the parameters used in the truthSolve.
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 assignBC(volVectorField &s, label BC_ind, Vector< double > &value)
Assign Boundary Condition to a volVectorField.
void assignIF(T &s, G &value)
Assign internal field condition.
void computeLift(T &Lfield, T &liftfield, T &omfield)
Homogenize the snapshot matrix, it works with PtrList of volVectorField and volScalarField.
bool offline
Boolean variable, it is 1 if the Offline phase has already been computed, else 0.
void computeLiftT(T &Lfield, T &liftfield, T &omfield)
Virtual function to compute the lifting function.
IOdictionary * ITHACAdict
dictionary to store input output infos
Eigen::MatrixXd mu
Row matrix of parameters.
Eigen::MatrixXi inletIndex
Matrix that contains informations about the inlet boundaries.
bool podex
Boolean variable, it is 1 if the POD has already been computed, else 0.
void truthSolve()
Perform a TruthSolve.
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 getModesSVD(PtrList< GeometricField< Type, PatchField, GeoMesh > > &snapshots, PtrList< GeometricField< Type, PatchField, GeoMesh > > &modes, word fieldName, bool podex, bool supex, bool sup, label nmodes, bool correctBC)
Gets the bases for a scalar field using SVD instead of the method of snapshots.
void exportMatrix(Eigen::Matrix< T, -1, dim > &matrix, word Name, word type, word folder)
Export the reduced matrices in numpy (type=python), matlab (type=matlab) and txt (type=eigen) format ...
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.
Eigen::VectorXd getCoeffs(GeometricField< Type, PatchField, GeoMesh > &snapshot, PtrList< GeometricField< Type, PatchField, GeoMesh > > &modes, label Nmodes, bool consider_volumes)
Projects a snapshot on a basis function and gets the coefficients of the projection.
bool check_pod()
Check if the POD data folder "./ITHACAoutput/POD" exists.
bool check_off()
Check if the offline data folder "./ITHACAoutput/Offline" exists.
bool check_folder(word folder)
Checks if a folder exists.