97 int NmodesUproj,
int NmodesPproj,
int NmodesEproj)
101 scalar residualNorm(1);
102 scalar residualJump(1);
103 Eigen::MatrixXd uResidualOld = Eigen::MatrixXd::Zero(1, NmodesUproj);
104 Eigen::MatrixXd eResidualOld = Eigen::MatrixXd::Zero(1, NmodesEproj);
105 Eigen::MatrixXd pResidualOld = Eigen::MatrixXd::Zero(1, NmodesPproj);
106 Eigen::VectorXd uResidual(Eigen::Map<Eigen::VectorXd>(uResidualOld.data(),
108 Eigen::VectorXd eResidual(Eigen::Map<Eigen::VectorXd>(eResidualOld.data(),
110 Eigen::VectorXd pResidual(Eigen::Map<Eigen::VectorXd>(pResidualOld.data(),
114 float residualJumpLim =
115 para->ITHACAdict->lookupOrDefault<
float>(
"residualJumpLim", 1e-5);
116 float normalizedResidualLim =
117 para->ITHACAdict->lookupOrDefault<
float>(
"normalizedResidualLim", 1e-5);
119 para->ITHACAdict->lookupOrDefault<
float>(
"maxIter", 2000);
125 volScalarField& P =
problem->pThermo->p();
126 volScalarField& E =
problem->pThermo->he();
135 Eigen::MatrixXd u = Eigen::MatrixXd::Zero(NmodesUproj, 1);
136 Eigen::MatrixXd e = Eigen::MatrixXd::Zero(NmodesEproj, 1);
137 Eigen::MatrixXd
p = Eigen::MatrixXd::Zero(NmodesPproj, 1);
139 while ((residualJump > residualJumpLim
140 || residualNorm > normalizedResidualLim) &&
csolve <
maxIter)
143 Info <<
"csolve:" <<
csolve << endl;
149 uResidualOld = uResidual;
150 eResidualOld = eResidual;
151 pResidualOld = pResidual;
153 List<Eigen::MatrixXd> RedLinSysU;
158 - fvc::div((
rho *
problem->turbulence->nuEff()) * dev2(
T(fvc::grad(
U))))
159 - fvm::laplacian(
rho *
problem->turbulence->nuEff(),
U)
166 "################################ line 165 ##############################" <<
169 RedLinSysU =
problem->Umodes.project(UEqnR, NmodesUproj);
171 "################################ line 169 ##############################" <<
175 "################################ line 171 ##############################" <<
177 RedLinSysU[1] = RedLinSysU[1] - projGradP;
181 "################################ line 174 ##############################" <<
183 problem->Umodes.reconstruct(
U, u,
"U");
185 "################################ line 175 ##############################" <<
195 + fvc::div(
phi, volScalarField(
"Ekp", 0.5 * magSqr(
U) + P /
rho))
196 - fvm::laplacian(
problem->turbulence->alphaEff(), E)
204 List<Eigen::MatrixXd> RedLinSysE =
problem->Emodes.project(EEqnR, NmodesEproj);
206 "################################ line 196 ##############################" <<
209 problem->Emodes.reconstruct(E, e,
"e");
211 "################################ line 198 ##############################" <<
224 surfaceScalarField phiHbyACalculated =
problem->getPhiHbyA(UEqnR,
U, P);
226 List<Eigen::MatrixXd> RedLinSysP;
228 while (
problem->_simple().correctNonOrthogonal())
231 volScalarField
rAU(1.0 /
233 volVectorField
HbyA(constrainHbyA(
rAU * UEqnR.H(),
U,
235 surfaceScalarField
phiHbyA(
"phiHbyA", fvc::interpolate(
rho)*fvc::flux(
HbyA));
236 surfaceScalarField
rhorAUf(
"rhorAUf", fvc::interpolate(
rho *
rAU));
246 problem->_pressureControl().refCell(),
247 problem->_pressureControl().refValue()
250 RedLinSysP =
problem->Pmodes.project(PEqnR, NmodesPproj);
252 problem->Pmodes.reconstruct(P,
p,
"p");
256 if (
problem->_simple().finalNonOrthogonalIter())
268 U.correctBoundaryConditions();
275 P += (
problem->_initialMass() - fvc::domainIntegrate(
psi * P))
276 / fvc::domainIntegrate(
psi);
281 P.correctBoundaryConditions();
286 std::cout <<
"Ures = " << (uResidual.cwiseAbs()).sum() /
287 (RedLinSysU[1].cwiseAbs()).sum() << std::endl;
288 std::cout <<
"Eres = " << (eResidual.cwiseAbs()).sum() /
289 (RedLinSysE[1].cwiseAbs()).sum() << std::endl;
290 std::cout <<
"Pres = " << (pResidual.cwiseAbs()).sum() /
291 (RedLinSysP[1].cwiseAbs()).sum() << std::endl;
295 residualNorm = max(max((uResidual.cwiseAbs()).sum() /
296 (RedLinSysU[1].cwiseAbs()).sum(),
297 (pResidual.cwiseAbs()).sum() / (RedLinSysP[1].cwiseAbs()).sum()),
298 (eResidual.cwiseAbs()).sum() / (RedLinSysE[1].cwiseAbs()).sum());
299 residualJump = max(max(((uResidual - uResidualOld).cwiseAbs()).sum() /
300 (RedLinSysU[1].cwiseAbs()).sum(),
301 ((pResidual - pResidualOld).cwiseAbs()).sum() /
302 (RedLinSysP[1].cwiseAbs()).sum()),
303 ((eResidual - eResidualOld).cwiseAbs()).sum() /
304 (RedLinSysE[1].cwiseAbs()).sum());
305 std::cout << residualNorm << std::endl;
306 std::cout << residualJump << std::endl;
307 problem->turbulence->correct();