diff --git a/dart/models/agard445.geo b/dart/models/agard445.geo index d26866470a8cb6b02b872b5cb6494022d109d0ff..e79d31e0078b5d7ef0a159f25cf5df53d07f785b 100644 --- a/dart/models/agard445.geo +++ b/dart/models/agard445.geo @@ -1,6 +1,5 @@ /* AGARD 445 wing */ // Initially generated by unsRgridWingGen.m -// For gmsh 4, use line 220 instead of line 221 (Bezier <- BSpline) // Parameters // domain and mesh @@ -344,7 +343,7 @@ MeshAlgorithm Surface{71,72,75,76} = 5; /// 3D: Mesh.Algorithm3D = 2; -Mesh.OptimizeNetgen = 1; +Mesh.Optimize = 1; Mesh.Smoothing = 10; Mesh.SmoothNormals = 1; diff --git a/dart/models/oneraM6.geo b/dart/models/oneraM6.geo index 25b777bf212557af77618346ac2a17f4690748bd..a631c7974bbec1c898ac38466e76081e100a4823 100644 --- a/dart/models/oneraM6.geo +++ b/dart/models/oneraM6.geo @@ -1,6 +1,5 @@ /* Onera M6 wing */ // Initially generated by unsRgridWingGen.m -// For gmsh 4, use line 425 instead of line 426 (Bezier <- BSpline) // Parameters // domain and mesh @@ -549,7 +548,7 @@ MeshAlgorithm Surface{71,72,75,76} = 5; /// 3D: Mesh.Algorithm3D = 2; -Mesh.OptimizeNetgen = 1; +Mesh.Optimize = 1; Mesh.Smoothing = 10; Mesh.SmoothNormals = 1; diff --git a/dart/models/rae_25.geo b/dart/models/rae_25.geo index 1deee3cd4c47b1440c640a1be8d462993215b809..71fcf416e86d646a730af51de5ce23f16f8a8fce 100644 --- a/dart/models/rae_25.geo +++ b/dart/models/rae_25.geo @@ -381,7 +381,7 @@ Volume(2) = {2}; MeshAlgorithm Surface{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} = 5; // 3D Mesh.Algorithm3D = 2; -Mesh.OptimizeNetgen = 1; +Mesh.Optimize = 1; Mesh.Smoothing = 10; Mesh.SmoothNormals = 1; diff --git a/dart/models/rae_3.geo b/dart/models/rae_3.geo index 2c76facfc85fe7c42ea4173652badb3f87d5b6d7..512b44fb1f3d934cbe98e8cdac121e449a234396 100644 --- a/dart/models/rae_3.geo +++ b/dart/models/rae_3.geo @@ -396,7 +396,6 @@ MeshAlgorithm Surface{1,2,3,4,5,6,11,21,31,41,42,43,44,51} = 5; /// 3D: Mesh.Algorithm3D = 2; -//Mesh.OptimizeNetgen = 1; Mesh.Optimize = 1; Mesh.Smoothing = 10; Mesh.SmoothNormals = 1; diff --git a/dart/src/wFluid.cpp b/dart/src/wFluid.cpp index a209f4bb15b8b27bbbd7425d09cd0bc1fdcbf83c..f150924066906b4ce7b7501444429cf87f066654 100644 --- a/dart/src/wFluid.cpp +++ b/dart/src/wFluid.cpp @@ -60,9 +60,9 @@ void Fluid::initFun(double mInf, int dim, double alpha, double beta) } else { - rho = new F0ElRhoClamp(mInf); - mach = new F0ElMachClamp(mInf); - cP = new F0ElCpClamp(mInf); + rho = new F0ElRhoClamp(mInf, 3.0); + mach = new F0ElMachClamp(mInf, 3.0); + cP = new F0ElCpClamp(mInf, 3.0); } phiInf = new F0PsPhiInf(dim, alpha, beta); } diff --git a/dart/src/wNewton.cpp b/dart/src/wNewton.cpp index 1d53b14ba43af71ade78170de7c4fd284822956f..91ac0a2d6e5a1d24f5f27426a6996bb7915c048f 100644 --- a/dart/src/wNewton.cpp +++ b/dart/src/wNewton.cpp @@ -150,19 +150,19 @@ STATUS Newton::run() { case 0: { - mCOv = 0.92; + mCOv = 0.925; muCv = 2.; break; } case 1: { - mCOv = 0.935; + mCOv = 0.95; muCv = 1.5; break; } default: { - mCOv = 0.95; + mCOv = 0.975; muCv = 1.; break; } @@ -309,7 +309,9 @@ void Newton::buildJac(Eigen::SparseMatrix<double, Eigen::RowMajor> &J) } } // Assembly (supersonic) - double mach = fluid->mach->eval(*e, phi, 0); + double machC = fluid->mach->eval(*e, phi, 0); + double machU = fluid->mach->eval(*eU, phi, 0); + double mach = (machC < machU) ? machU : machC; if (mach > mCOv) { for (size_t ii = 0; ii < e->nodes.size(); ++ii) diff --git a/dart/src/wPotentialResidual.cpp b/dart/src/wPotentialResidual.cpp index c1efe42e65112ed2e8346647ddea80fb7b022936..0a684f19f14c2375262d86cf44cfe53dada0c658 100644 --- a/dart/src/wPotentialResidual.cpp +++ b/dart/src/wPotentialResidual.cpp @@ -64,7 +64,9 @@ Eigen::VectorXd PotentialResidual::build(Element const &e, Element const &eU, st b += fluid.rho->eval(e, phi, k) * (e.getJinv(k) * cache.getDsf(k)).transpose() * e.computeGradient(phi, k) * gauss.getW(k) * e.getDetJ(k); // Supersonic contribution - double mach = fluid.mach->eval(e, phi, 0); + double machC = fluid.mach->eval(e, phi, 0); + double machU = fluid.mach->eval(eU, phi, 0); + double mach = (machC < machU) ? machU : machC; if (mach > mCO) { double mu = muC * (1 - (mCO * mCO) / (mach * mach)); // switching function @@ -110,7 +112,9 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientFlo // Supersonic contribution Eigen::MatrixXd A2; - double mach = fluid.mach->eval(e, phi, 0); + double machC = fluid.mach->eval(e, phi, 0); + double machU = fluid.mach->eval(eU, phi, 0); + double mach = (machC < machU) ? machU : machC; if (mach > mCO) { // switching function and gradient @@ -133,11 +137,15 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientFlo Eigen::MatrixXd const &dSf = e.getJinv(k) * cache.getDsf(k); Eigen::VectorXd dPhi = e.computeGradient(phi, k); - // mu*drhoU*grad_phi*grad_psi + // mu * drhoU * grad_phi * grad_psi A2 += mu * dRhoU * dSf.transpose() * dPhi * dPhiU.transpose() * dSfU * wdj; - // mu*rhoU*grad_phi*grad_psi + dmu*(rhoU-rho)*grad_phi*grad_psi + // mu * rhoU * grad_phi * grad_psi A1 += mu * rhoU * dSf.transpose() * dSf * wdj; - A1 += dmu * (rhoU - fluid.rho->eval(e, phi, k)) * fluid.mach->evalGrad(e, phi, k) * dSf.transpose() * dPhi * dPhi.transpose() * dSf * wdj; + // dmu * (rhoU-rho) * grad_phi * grad_psi OR dmuU * (rhoU-rho) * grad_phi * grad_psi + if (machC >= machU) + A1 += dmu * (rhoU - fluid.rho->eval(e, phi, k)) * fluid.mach->evalGrad(e, phi, k) * dSf.transpose() * dPhi * dPhi.transpose() * dSf * wdj; + else + A2 += dmu * (rhoU - fluid.rho->eval(e, phi, k)) * fluid.mach->evalGrad(eU, phi, k) * dSf.transpose() * dPhi * dPhiU.transpose() * dSfU * wdj; } } return std::make_tuple(A1, A2); @@ -181,7 +189,7 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes for (int m = 0; m < nDim; ++m) { size_t idx = i * nDim + m; - A1.col(idx) += w * dRho * dPhi.transpose() * (-iJ * dJ[idx] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ; // drho * grad_phi*grad_psi * detj + A1.col(idx) += w * dRho * dPhi.transpose() * (-iJ * dJ[idx] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ; // drho * grad_phi * grad_psi * detj A1.col(idx) += w * rho * (iJ * dSf).transpose() * (-iJ * dJ[idx] * dPhi) * detJ; // rho * dgrad_phi * grad_psi * detj A1.col(idx) += w * rho * (-iJ * dJ[idx] * iJ * dSf).transpose() * dPhi * detJ; // rho * grad_phi * dgrad_psi * detj A1.col(idx) += w * rho * (iJ * dSf).transpose() * dPhi * dDetJ[idx]; // rho * grad_phi * grad_psi * ddetj @@ -190,7 +198,9 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes } // Supersonic contribution Eigen::MatrixXd A2; - double mach = fluid.mach->eval(e, phi, 0); + double machC = fluid.mach->eval(e, phi, 0); + double machU = fluid.mach->eval(eU, phi, 0); + double mach = (machC < machU) ? machU : machC; if (mach > mCO) { // switching function and gradient @@ -211,7 +221,6 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes // Density, Mach and Gradients Eigen::VectorXd dPhi = e.computeGradient(phi, k); double rho = fluid.rho->eval(e, phi, k); - double dM = fluid.mach->evalGrad(e, phi, k); Eigen::MatrixXd const &dSf = cache.getDsf(k); Eigen::MatrixXd const &iJ = e.getJinv(k); // Jacobian gradients @@ -225,10 +234,9 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes for (size_t i = 0; i < e.nodes.size(); ++i) { size_t idx = i * nDim + m; - A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * (-iJ * dJ[idx] * dPhi) * detJ; // mu * rhoU * dgrad_phi * grad_psi * detj - A1.col(idx) += w * mu * rhoU * (-iJ * dJ[idx] * iJ * dSf).transpose() * dPhi * detJ; // mu * rhoU * grad_phi * dgrad_psi * detj - A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * dPhi * dDetJ[idx]; // mu * rhoU * grad_phi * grad_psi * ddetj - A1.col(idx) += w * (-rho + rhoU) * dmu * dM * dPhi.transpose() * (-iJ * dJ[idx] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ; // (rhoU-rho) * dmu * grad_phi * grad_psi * detj + A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * (-iJ * dJ[idx] * dPhi) * detJ; // mu * rhoU * dgrad_phi * grad_psi * detj + A1.col(idx) += w * mu * rhoU * (-iJ * dJ[idx] * iJ * dSf).transpose() * dPhi * detJ; // mu * rhoU * grad_phi * dgrad_psi * detj + A1.col(idx) += w * mu * rhoU * (iJ * dSf).transpose() * dPhi * dDetJ[idx]; // mu * rhoU * grad_phi * grad_psi * ddetj } for (size_t i = 0; i < eU.nodes.size(); ++i) { @@ -236,6 +244,21 @@ std::tuple<Eigen::MatrixXd, Eigen::MatrixXd> PotentialResidual::buildGradientMes A2.col(idx) += w * mu * dRhoU * dPhiU.transpose() * (-iJU * dJU[idx] * dPhiU) * (iJ * dSf).transpose() * dPhi * detJ; // mu * drhoU * grad_phi * grad_psi * detj } } + // Gradient of swithcing function, (rhoU-rho) * dmu * grad_phi * grad_psi * detj OR (rhoU-rho) * dmuU * grad_phi * grad_psi * detj + if (machC >= machU) + { + double dM = fluid.mach->evalGrad(e, phi, k); + for (int m = 0; m < nDim; ++m) + for (size_t i = 0; i < e.nodes.size(); ++i) + A1.col(i * nDim + m) += w * (-rho + rhoU) * dmu * dM * dPhi.transpose() * (-iJ * dJ[i * nDim + m] * dPhi) * (iJ * dSf).transpose() * dPhi * detJ; + } + else + { + double dM = fluid.mach->evalGrad(eU, phi, k); + for (int m = 0; m < nDim; ++m) + for (size_t i = 0; i < eU.nodes.size(); ++i) + A2.col(i * nDim + m) += w * (-rho + rhoU) * dmu * dM * dPhiU.transpose() * (-iJU * dJU[i * nDim + m] * dPhiU) * (iJ * dSf).transpose() * dPhi * detJ; + } } } return std::make_tuple(A1, A2); diff --git a/dart/tests/adjoint.py b/dart/tests/adjoint.py index df03af2e7fec29ae787f34edacad6ee37b71cc28..0834f241870e465993754a7d35a3e07e5efe0ac7 100644 --- a/dart/tests/adjoint.py +++ b/dart/tests/adjoint.py @@ -116,15 +116,15 @@ def main(): tests.add(CTest('dCd_dAoA', adjoint.dCdAoa, 0.0, 1e-3)) tests.add(CTest('dCl_dMsh', dClX, 36.9, 1e-2)) tests.add(CTest('dCd_dMsh', dCdX, 0.482, 1e-2)) - tests.add(CTest('dCl_dAoA (msh)', dClAoA, 6.9, 1e-2)) - tests.add(CTest('dCd_dAoA (msh)', dCdAoA, 0.0, 1e-3)) + tests.add(CTest('dCl_dAoA (msh)', dClAoA, adjoint.dClAoa, 1e-2)) + tests.add(CTest('dCd_dAoA (msh)', dCdAoA, adjoint.dCdAoa, 1e-3)) elif M_inf == 0.7 and alpha == 2*np.pi/180: - tests.add(CTest('dCl_dAoA', adjoint.dClAoa, 11.8, 1e-2)) # FD 11.835 (step = 1e-5) - tests.add(CTest('dCd_dAoA', adjoint.dCdAoa, 0.127, 1e-2)) # 0.12692 (step = 1e-5) - tests.add(CTest('dCl_dMsh', dClX, 61.2, 1e-2)) - tests.add(CTest('dCd_dMsh', dCdX, 0.830, 1e-2)) - tests.add(CTest('dCl_dAoA (msh)', dClAoA, 11.8, 1e-2)) - tests.add(CTest('dCd_dAoA (msh)', dCdAoA, 0.127, 1e-2)) + tests.add(CTest('dCl_dAoA', adjoint.dClAoa, 12.0, 1e-2)) + tests.add(CTest('dCd_dAoA', adjoint.dCdAoa, 0.142, 1e-2)) + tests.add(CTest('dCl_dMsh', dClX, 61.8, 1e-2)) + tests.add(CTest('dCd_dMsh', dCdX, 0.815, 1e-2)) + tests.add(CTest('dCl_dAoA (msh)', dClAoA, adjoint.dClAoa, 1e-2)) + tests.add(CTest('dCd_dAoA (msh)', dCdAoA, adjoint.dCdAoa, 1e-2)) else: raise Exception('Test not defined for this flow') tests.run() diff --git a/dart/tests/lift.py b/dart/tests/lift.py index e7655142a438dfd60831ac818acf5ebd0c70b287..aeeaea9bdf93be7e4367697baeb63f7ae7a0feec 100644 --- a/dart/tests/lift.py +++ b/dart/tests/lift.py @@ -96,7 +96,7 @@ def main(): elif M_inf == 0.7 and alpha == 2*math.pi/180: tests.add(CTest('iteration count', solver.nIt, 12, 3, forceabs=True)) tests.add(CTest('min(Cp)', min(Cp[:,3]), -1.28, 5e-2)) - tests.add(CTest('Cl', solver.Cl, 0.388, 5e-2)) + tests.add(CTest('Cl', solver.Cl, 0.391, 5e-2)) tests.add(CTest('Cd', solver.Cd, 0.0013, 5e-4, forceabs=True)) tests.add(CTest('Cm', solver.Cm, 0.0, 1e-2)) else: diff --git a/dart/tests/nonlift.py b/dart/tests/nonlift.py index 2f39482ab0a1f26ea8c1daf17d43dc87d1b9596c..4a70f23a98d06a97888968f3a4fe57525f90de21 100644 --- a/dart/tests/nonlift.py +++ b/dart/tests/nonlift.py @@ -24,7 +24,6 @@ # CAUTION # This test is provided to ensure that the solver works properly. # Mesh refinement may have to be performed to obtain physical results. -# The residual might not fully converge if this test is used with gmsh4 import dart.utils as floU import dart.default as floD @@ -48,7 +47,7 @@ def main(): # mesh the geometry print(ccolors.ANSI_BLUE + 'PyMeshing...' + ccolors.ANSI_RESET) tms['msh'].start() - pars = {'xLgt' : 5, 'yLgt' : 5, 'msF' : 1.01, 'msTe' : 0.01, 'msLe' : 0.01} + pars = {'xLgt' : 5, 'yLgt' : 5, 'msF' : 1.0, 'msTe' : 0.0075, 'msLe' : 0.0075} msh, gmshWriter = floD.mesh(dim, 'models/n0012.geo', pars, ['field', 'airfoil', 'downstream']) tms['msh'].stop() @@ -91,9 +90,9 @@ def main(): elif M_inf == 0.7: tests.add(CTest('min(Cp)', min(Cp[:,3]), -0.63, 5e-2)) elif M_inf == 0.8: - tests.add(CTest('iteration count', solver.nIt, 15, 3, forceabs=True)) + tests.add(CTest('iteration count', solver.nIt, 13, 3, forceabs=True)) tests.add(CTest('min(Cp)', min(Cp[:,3]), -0.89, 5e-2)) - tests.add(CTest('Cd', solver.Cd, 0.0049, 5e-4, forceabs=True)) + tests.add(CTest('Cd', solver.Cd, 0.0058, 5e-4, forceabs=True)) else: raise Exception('Test not defined for this flow') tests.add(CTest('Cl', solver.Cl, 0., 1e-2)) diff --git a/dart/tests/rae_25.py b/dart/tests/rae_25.py index 95ab324502dc9d1614f0822c89e69e3e4e92001a..0993c48a28f77853719df27290ad51c360920f75 100644 --- a/dart/tests/rae_25.py +++ b/dart/tests/rae_25.py @@ -117,16 +117,16 @@ def main(): raise Exception(ccolors.ANSI_RED + 'Solver failed to converge!' + ccolors.ANSI_RESET) tests = CTests() tests.add(CTest('iteration count', solver.nIt, 6, 1, forceabs=True)) - tests.add(CTest('CL', solver.Cl, 0.60, 5e-2)) # 2D, 0.62 - tests.add(CTest('CD', solver.Cd, 0.0015, 1e-2)) # 2D 0.0009 (3D refined 0.0006) + tests.add(CTest('CL', solver.Cl, 0.59, 5e-2)) + tests.add(CTest('CD', solver.Cd, 0.0017, 1e-2)) tests.add(CTest('CS', solver.Cs, 0.0000, 1e-3, forceabs=True)) - tests.add(CTest('CM', solver.Cm, -0.113, 5e-2)) # 2D -0.117 - tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 12.7, 5e-2)) # 2D 12.7, FD 12.73 (1e-6) - tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.055, 1e-2, forceabs=True)) # 2D 0.051, FD 0.0557 (1e-6) - tests.add(CTest('dCl_dMsh', dClX, 22.0, 5e-2)) - tests.add(CTest('dCd_dMsh', dCdX, 1.0, 1e-1)) - tests.add(CTest('dCl/dAoA (msh)', dClAoA, 12.9, 5e-2)) # 2D 12.9 - tests.add(CTest('dCd/dAoA (msh)', dCdAoA, 0.055, 1e-2, forceabs=True)) # 2D 0.051 + tests.add(CTest('CM', solver.Cm, -0.111, 5e-2)) + tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 12.9, 5e-2)) + tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.045, 1e-2, forceabs=True)) + tests.add(CTest('dCl_dMsh', dClX, 22.1, 5e-2)) + tests.add(CTest('dCd_dMsh', dCdX, 1.1, 1e-1)) + tests.add(CTest('dCl/dAoA (msh)', dClAoA, adjoint.dClAoa, 5e-2)) + tests.add(CTest('dCd/dAoA (msh)', dCdAoA, adjoint.dCdAoa, 1e-2, forceabs=True)) tests.run() # eof diff --git a/dart/tests/rae_3.py b/dart/tests/rae_3.py index 72097ac0e1d1cd7fae6b3d8b3020db89edbaa5fa..92ed961285372711e3c852c3097c454d3ae49ad3 100644 --- a/dart/tests/rae_3.py +++ b/dart/tests/rae_3.py @@ -146,12 +146,12 @@ def main(): tests.add(CTest('CD', solver.Cd, 0.008, 1e-2)) tests.add(CTest('CS', solver.Cs, -0.020, 5e-2)) tests.add(CTest('CM', solver.Cm, -0.080, 5e-2)) - tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 3.0, 5e-2)) # FD 3.0144 (1e-6) - tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.2, 5e-2)) # FD 0.2007 (1e-6) - tests.add(CTest('dCl_dMsh', dClX, 2.3, 5e-2)) + tests.add(CTest('dCl/dAoA', adjoint.dClAoa, 3.0, 5e-2)) + tests.add(CTest('dCd/dAoA', adjoint.dCdAoa, 0.2, 5e-2)) + tests.add(CTest('dCl_dMsh', dClX, 2.2, 5e-2)) tests.add(CTest('dCd_dMsh', dCdX, 0.2, 5e-2)) - tests.add(CTest('dCl/dAoA (msh)', dClAoA, 3.0, 5e-2)) - tests.add(CTest('dCd/dAoA (msh)', dCdAoA, 0.2, 5e-2)) + tests.add(CTest('dCl/dAoA (msh)', dClAoA, adjoint.dClAoa, 5e-2)) + tests.add(CTest('dCd/dAoA (msh)', dCdAoA, adjoint.dCdAoa, 5e-2)) tests.run() # eof diff --git a/dart/validation/agard.py b/dart/validation/agard.py index dc18dcb7da37bdbb618c3cf05c12763a1338a6f5..f1085d78f2caf4f9e11770ccb48ecc3e9a9c20b8 100644 --- a/dart/validation/agard.py +++ b/dart/validation/agard.py @@ -56,7 +56,7 @@ def main(): rlems = 0.0028 # root leading edge mesh size rtems = 0.0056 # root trailing edge mesh size tlems = 0.0018 # tip leading mesh size - ttems = 0.0045 # tip trailing mesh size + ttems = 0.0036 # tip trailing mesh size fms = 1.0 # farfield mesh size # mesh the wing @@ -97,8 +97,8 @@ def main(): # check results print(ccolors.ANSI_BLUE + 'PyTesting...' + ccolors.ANSI_RESET) tests = CTests() - tests.add(CTest('CL', solver.Cl, 0.062, 1e-1)) - tests.add(CTest('CD', solver.Cd, 0.0006, 1e-1)) + tests.add(CTest('CL', solver.Cl, 0.061, 1e-1)) + tests.add(CTest('CD', solver.Cd, 0.0007, 1e-1)) tests.add(CTest('CS', solver.Cs, 0.0017, 1e-1)) tests.add(CTest('CM', solver.Cm, -0.064, 1e-1)) tests.run() diff --git a/dart/validation/onera.py b/dart/validation/onera.py index 85f4e671a9b9e8164e463fdefa2fe6e7a69f5d5a..2b13015741a302acbcdfea6f692e38c66b751ef6 100644 --- a/dart/validation/onera.py +++ b/dart/validation/onera.py @@ -51,7 +51,7 @@ def main(): wdt = 3.0 # channel width S_ref = 0.7528 # reference area c_ref = 0.64 # reference chord (MAC) - fms = 0.5 # farfield mesh size + fms = 0.6 # farfield mesh size rlems = 0.004 # root leading edge mesh size rtems = 0.008 # root trailing edge mesh size tlems = 0.002 # tip leading mesh size @@ -97,8 +97,8 @@ def main(): tests = CTests() tests.add(CTest('CL', solver.Cl, 0.29, 1e-1)) tests.add(CTest('CD', solver.Cd, 0.011, 1e-1)) - tests.add(CTest('CS', solver.Cs, 0.014, 1e-1)) - tests.add(CTest('CM', solver.Cm, -0.212, 1e-1)) + tests.add(CTest('CS', solver.Cs, 0.016, 1e-1)) + tests.add(CTest('CM', solver.Cm, -0.218, 1e-1)) tests.run() # eof diff --git a/ext/amfe b/ext/amfe index e6eafbe78604a7a27c7ee21f098f4c1e3704b0dc..fab1af115a6197d8d31f9746d33436fd99ce5851 160000 --- a/ext/amfe +++ b/ext/amfe @@ -1 +1 @@ -Subproject commit e6eafbe78604a7a27c7ee21f098f4c1e3704b0dc +Subproject commit fab1af115a6197d8d31f9746d33436fd99ce5851