diff --git a/src/language/modules/SchemeModule.cpp b/src/language/modules/SchemeModule.cpp index 3c8fe1fcd440dd8d7e06a95d144ffb86c9c8f83b..32f689003d3aea1efae189770fe3b704cd958329 100644 --- a/src/language/modules/SchemeModule.cpp +++ b/src/language/modules/SchemeModule.cpp @@ -512,13 +512,14 @@ SchemeModule::SchemeModule() const std::shared_ptr<const DiscreteFunctionVariant>& u, const std::shared_ptr<const DiscreteFunctionVariant>& E, const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, - const std::shared_ptr<const DiscreteFunctionVariant>& p, + const std::shared_ptr<const DiscreteFunctionVariant>& p, const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>> { - return rusanovEulerianCompositeSolver(rho, u, E, gamma, c, p, bc_descriptor_list, dt); + return rusanovEulerianCompositeSolver(rho, u, E, gamma, c, p, degree, + bc_descriptor_list, dt); } )); @@ -530,14 +531,14 @@ SchemeModule::SchemeModule() const std::shared_ptr<const DiscreteFunctionVariant>& u, const std::shared_ptr<const DiscreteFunctionVariant>& E, const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, - const std::shared_ptr<const DiscreteFunctionVariant>& p, + const std::shared_ptr<const DiscreteFunctionVariant>& p, const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>> { - return rusanovEulerianCompositeSolver(rho, u, E, gamma, c, p, bc_descriptor_list, dt, - true); + return rusanovEulerianCompositeSolver(rho, u, E, gamma, c, p, degree, + bc_descriptor_list, dt, true); } )); @@ -548,14 +549,14 @@ SchemeModule::SchemeModule() const std::shared_ptr<const DiscreteFunctionVariant>& u, const std::shared_ptr<const DiscreteFunctionVariant>& E, const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, - const std::shared_ptr<const DiscreteFunctionVariant>& p, + const std::shared_ptr<const DiscreteFunctionVariant>& p, const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>> { - return rusanovEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, bc_descriptor_list, - dt); + return rusanovEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, degree, + bc_descriptor_list, dt); } )); @@ -566,14 +567,14 @@ SchemeModule::SchemeModule() const std::shared_ptr<const DiscreteFunctionVariant>& u, const std::shared_ptr<const DiscreteFunctionVariant>& E, const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, - const std::shared_ptr<const DiscreteFunctionVariant>& p, + const std::shared_ptr<const DiscreteFunctionVariant>& p, const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>> { - return rusanovEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, bc_descriptor_list, dt, - true); + return rusanovEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, degree, + bc_descriptor_list, dt, true); })); this->_addBuiltinFunction("roe_viscosityform_eulerian_composite_solver_version2", std::function( @@ -581,13 +582,13 @@ SchemeModule::SchemeModule() const std::shared_ptr<const DiscreteFunctionVariant>& u, const std::shared_ptr<const DiscreteFunctionVariant>& E, const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, - const std::shared_ptr<const DiscreteFunctionVariant>& p, + const std::shared_ptr<const DiscreteFunctionVariant>& p, const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>> { - return roeViscousFormEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, + return roeViscousFormEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, degree, bc_descriptor_list, dt); } @@ -599,13 +600,13 @@ SchemeModule::SchemeModule() const std::shared_ptr<const DiscreteFunctionVariant>& u, const std::shared_ptr<const DiscreteFunctionVariant>& E, const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, - const std::shared_ptr<const DiscreteFunctionVariant>& p, + const std::shared_ptr<const DiscreteFunctionVariant>& p, const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt) -> std::tuple<std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>> { - return roeViscousFormEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, + return roeViscousFormEulerianCompositeSolver_v2(rho, u, E, gamma, c, p, degree, bc_descriptor_list, dt, true); } diff --git a/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.cpp b/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.cpp index cfe2edb3ff33fac4480fd3c199c259137d4ccaed..3490fa4f165d152da6e9f00dcd3313fb3e1147be 100644 --- a/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.cpp +++ b/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.cpp @@ -983,6 +983,7 @@ class RoeViscousFormEulerianCompositeSolver_v2 const double& gamma, const DiscreteFunctionP0<const double>& c_n, const DiscreteFunctionP0<const double>& p_n, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool checkLocalConservation) const @@ -2307,6 +2308,7 @@ roeViscousFormEulerianCompositeSolver_v2( const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c_v, const std::shared_ptr<const DiscreteFunctionVariant>& p_v, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool check) @@ -2335,7 +2337,7 @@ roeViscousFormEulerianCompositeSolver_v2( return RoeViscousFormEulerianCompositeSolver_v2<MeshType>{} .solve(p_mesh, rho_v->get<DiscreteFunctionP0<const double>>(), u_v->get<DiscreteFunctionP0<const Rd>>(), E_v->get<DiscreteFunctionP0<const double>>(), gamma, c_v->get<DiscreteFunctionP0<const double>>(), - p_v->get<DiscreteFunctionP0<const double>>(), bc_descriptor_list, dt, check); + p_v->get<DiscreteFunctionP0<const double>>(), degree, bc_descriptor_list, dt, check); } else { throw NormalError("RoeViscousFormEulerianCompositeSolver v2 is only defined on polygonal meshes"); } diff --git a/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.hpp b/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.hpp index a277ae26dbf02f65b8c0ae2dad8fe9258ae98310..359b8cc9da340b74770b2440b3acffe5993d75a6 100644 --- a/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.hpp +++ b/src/scheme/RoeViscousFormEulerianCompositeSolver_v2.hpp @@ -22,6 +22,7 @@ roeViscousFormEulerianCompositeSolver_v2( const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, const std::shared_ptr<const DiscreteFunctionVariant>& p, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool check = false); diff --git a/src/scheme/RusanovEulerianCompositeSolver.cpp b/src/scheme/RusanovEulerianCompositeSolver.cpp index dd0f654023b7894fa9104f9a00f1371ee7bec577..05ce4a9aa286387a3a34a811ee59deda5450558e 100644 --- a/src/scheme/RusanovEulerianCompositeSolver.cpp +++ b/src/scheme/RusanovEulerianCompositeSolver.cpp @@ -608,6 +608,7 @@ class RusanovEulerianCompositeSolver const double& gamma, const DiscreteFunctionP0<const double>& c_n, const DiscreteFunctionP0<const double>& p_n, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool checkLocalConservation) const @@ -1876,6 +1877,7 @@ rusanovEulerianCompositeSolver( const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c_v, const std::shared_ptr<const DiscreteFunctionVariant>& p_v, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool check) @@ -1907,7 +1909,7 @@ rusanovEulerianCompositeSolver( E_v->get<DiscreteFunctionP0<const double>>(), gamma, c_v->get<DiscreteFunctionP0<const double>>(), p_v->get<DiscreteFunctionP0<const double>>(), - bc_descriptor_list, dt, check); + degree, bc_descriptor_list, dt, check); } else { throw NormalError("RusanovEulerianCompositeSolver is only defined on polygonal meshes"); } diff --git a/src/scheme/RusanovEulerianCompositeSolver.hpp b/src/scheme/RusanovEulerianCompositeSolver.hpp index 593b6f763de6be7d78ebbb0c335c3fce8424aeca..9f1c131b3c80f1c0387678e053128214f6ba075a 100644 --- a/src/scheme/RusanovEulerianCompositeSolver.hpp +++ b/src/scheme/RusanovEulerianCompositeSolver.hpp @@ -22,6 +22,7 @@ rusanovEulerianCompositeSolver( const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, const std::shared_ptr<const DiscreteFunctionVariant>& p, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool check = false); diff --git a/src/scheme/RusanovEulerianCompositeSolver_v2.cpp b/src/scheme/RusanovEulerianCompositeSolver_v2.cpp index 5111335a2b5d2240cf39244c54f32e7f45e1779e..5e8bc7ffe72c3e3395f928e2fd1f7563dfcf825e 100644 --- a/src/scheme/RusanovEulerianCompositeSolver_v2.cpp +++ b/src/scheme/RusanovEulerianCompositeSolver_v2.cpp @@ -1123,6 +1123,7 @@ class RusanovEulerianCompositeSolver_v2 const double& gamma, const DiscreteFunctionP0<const double>& c_n, const DiscreteFunctionP0<const double>& p_n, + const size_t degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool checkLocalConservation) const @@ -1143,7 +1144,7 @@ class RusanovEulerianCompositeSolver_v2 symmetry_boundary_descriptor_list.push_back(bc_descriptor->boundaryDescriptor_shared()); } } - static const int degree = 1; + // static const int degree = 1; PolynomialReconstructionDescriptor reconstruction_descriptor(IntegrationMethodType::cell_center, // IntegrationMethodType::boundary, degree, symmetry_boundary_descriptor_list); @@ -1176,9 +1177,6 @@ class RusanovEulerianCompositeSolver_v2 // DiscreteFunctionDPk rho_u_bar = reconstructions[1]->template get<DiscreteFunctionDPk<Dimension, const Rd>>(); // DiscreteFunctionDPk rho_E_bar = reconstructions[2]->template get<DiscreteFunctionDPk<Dimension, const double>>(); - auto rho_bar_lim = rho_bar; - auto rho_u_bar_lim = u_bar; - auto rho_E_bar_lim = eps_bar; CellValue<double> Limitor_rho(p_mesh->connectivity()); CellValue<double> Limitor_u(p_mesh->connectivity()); @@ -1204,14 +1202,55 @@ class RusanovEulerianCompositeSolver_v2 }); // Appels des limiteurs cell by cell + // Pour rho (plus ou moins classique) computeLimitorVolumicScalarQuantityMinModDukowiczGradient(*p_mesh, valrho, grad_rho_cell, Limitor_rho); + // Pour les variables d'interet (physique) + // Pour eps ici G.P. (avec Leibniz et toute l artillerie) computeLimitorInternalNrjScalarQuantityMinModDukowiczGradient(*p_mesh, valrho, grad_rho_cell, valeps, grad_eps_cell, // valu, grad_u_cell, Limitor_eps); + // Pour u : relation deduite du principe d'induction parallel_for( p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { Limitor_u[j] = sqrt(Limitor_eps[j]); }); + // + // Creation des variables conservatives limitées + // + auto rho_bar_lim = copy(rho_bar); + auto rho_u_bar_lim = copy(u_bar); // a modifier .. du a la densite + auto rho_E_bar_lim = copy(eps_bar); // a modifier et a completer : densité et energie cinetique + + // Assemblage des ctes et ordres élevés + parallel_for( + p_mesh->numberOfCells(), + PUGS_LAMBDA(CellId j) { // rho_bar_lim[j] = rho[j] + Limitor_rho[j] * (rho_bar[j](x) - rho[j]); + // rho_u_bar_lim.coefficients(j)[0] = valrho[j] * valu[j]; // * valu[j]; + // rho_E_bar_lim.coefficients(j)[0] = valrho[j] * (valeps[j] + .5 * dot(valu[j], valu[j])); + + // rho_bar_lim.coefficients(j)[0] // cte inchangée + rho_u_bar_lim.coefficients(j)[0] *= valrho[j]; // du coup (rho u) + rho_E_bar_lim.coefficients(j)[0] *= valrho[j]; // du coup (rho*epsilon) + rho_E_bar_lim.coefficients(j)[0] += valrho[j] * .5 * dot(valu[j], valu[j]); + // Rdxd grad_rhou_lim= + // valrho[j]*Limitor_u[j]*grad_u_cell[j]+Limitor_rho[j]*tensorProduct(valu[j],grad_rho_cell[j]); + // + Rdxd gradU_lim_transpose = Limitor_u[j] * transpose(grad_u_cell[j]); + const Rd gradUtu_lim = gradU_lim_transpose * valu[j]; + + for (size_t dim = 0; dim < Dimension; ++dim) { + rho_bar_lim.coefficients(j)[1 + dim] *= Limitor_rho[j]; + rho_u_bar_lim.coefficients(j)[1 + dim] *= Limitor_u[j] * valrho[j]; // c'est la partie gradu limite + rho_u_bar_lim.coefficients(j)[1 + dim] += Limitor_rho[j] * grad_rho_cell[j][dim] * valu[j]; + + rho_E_bar_lim.coefficients(j)[1 + dim] *= Limitor_eps[j] * valrho[j]; + rho_E_bar_lim.coefficients(j)[1 + dim] += gradUtu_lim[dim] * valrho[j]; + + rho_E_bar_lim.coefficients(j)[1 + dim] += + (valeps[j] + .5 * dot(valu[j], valu[j])) * Limitor_rho[j] * grad_rho_cell[j][dim]; + } + }); + // auto c = copy(c_n); // auto p = copy(p_n); @@ -1237,18 +1276,64 @@ class RusanovEulerianCompositeSolver_v2 // // Remplir ici les reconstructions d'ordre élevé + // + const auto& cell_to_node_matrix = p_mesh->connectivity().cellToNodeMatrix(); + const auto& cell_to_edge_matrix = p_mesh->connectivity().cellToEdgeMatrix(); + const auto& cell_to_face_matrix = p_mesh->connectivity().cellToFaceMatrix(); + + const auto xr = p_mesh->xr(); + auto xl = MeshDataManager::instance().getMeshData(*p_mesh).xl(); + auto xe = MeshDataManager::instance().getMeshData(*p_mesh).xe(); + NodeValuePerCell<Rp> StateAtNode{p_mesh->connectivity()}; StateAtNode.fill(zero); parallel_for( - p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { StateAtNode[j].fill(State[j]); }); + p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { + // StateAtNode[j].fill(State[j]); + const auto& cell_to_node = cell_to_node_matrix[j]; + + for (size_t l = 0; l < cell_to_node.size(); ++l) { + const NodeId& node = cell_to_node[l]; + + StateAtNode[j][l][0] = rho_bar_lim[j](xr[node]); + for (size_t dim = 0; dim < Dimension; ++dim) + StateAtNode[j][l][1 + dim] = rho_u_bar_lim[j](xr[node])[dim]; + StateAtNode[j][l][1 + Dimension] = rho_E_bar_lim[j](xr[node]); + } + }); + EdgeValuePerCell<Rp> StateAtEdge{p_mesh->connectivity()}; StateAtEdge.fill(zero); parallel_for( - p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { StateAtEdge[j].fill(State[j]); }); + p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { + // eStateAtEdge[j].fill(State[j]); + const auto& cell_to_edge = cell_to_edge_matrix[j]; + + for (size_t l = 0; l < cell_to_edge.size(); ++l) { + const EdgeId& edge = cell_to_edge[l]; + + StateAtEdge[j][l][0] = rho_bar_lim[j](xe[edge]); + for (size_t dim = 0; dim < Dimension; ++dim) + StateAtEdge[j][l][1 + dim] = rho_u_bar_lim[j](xe[edge])[dim]; + StateAtEdge[j][l][1 + Dimension] = rho_E_bar_lim[j](xe[edge]); + } + }); FaceValuePerCell<Rp> StateAtFace{p_mesh->connectivity()}; StateAtFace.fill(zero); parallel_for( - p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { StateAtFace[j].fill(State[j]); }); + p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { + // StateAtFace[j].fill(State[j]); + const auto& cell_to_face = cell_to_face_matrix[j]; + + for (size_t l = 0; l < cell_to_face.size(); ++l) { + const FaceId& face = cell_to_face[l]; + + StateAtFace[j][l][0] = rho_bar_lim[j](xl[face]); + for (size_t dim = 0; dim < Dimension; ++dim) + StateAtFace[j][l][1 + dim] = rho_u_bar_lim[j](xl[face])[dim]; + StateAtFace[j][l][1 + Dimension] = rho_E_bar_lim[j](xl[face]); + } + }); // Conditions aux limites des etats conservatifs @@ -1310,31 +1395,30 @@ class RusanovEulerianCompositeSolver_v2 NodeValuePerCell<Rdxd> Flux_qtmvtAtCellNode{p_mesh->connectivity()}; // = rhoUtensUPlusPid; // rhoUtensU + Pid; EdgeValuePerCell<Rdxd> Flux_qtmvtAtCellEdge{p_mesh->connectivity()}; // = rhoUtensUPlusPid; // rhoUtensU + Pid; FaceValuePerCell<Rdxd> Flux_qtmvtAtCellFace{p_mesh->connectivity()}; // = rhoUtensUPlusPid; // rhoUtensU + Pid; - /* - parallel_for( - p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { - const auto& cell_to_node = cell_to_node_matrix[j]; - - for (size_t l = 0; l < cell_to_node.size(); ++l) { - for (size_t dim = 0; dim < Dimension; ++dim) - Flux_qtmvtAtCellNode[j][l][dim] = StateAtNode[j][l][0] * StateAtNode[j][l][dim]; - } - - const auto& cell_to_face = cell_to_face_matrix[j]; - - for (size_t l = 0; l < cell_to_face.size(); ++l) { - for (size_t dim = 0; dim < Dimension; ++dim) - Flux_qtmvtAtCellFace[j][l][dim] = StateAtFace[j][l][0] * StateAtFace[j][l][dim]; - } - - const auto& cell_to_edge = cell_to_edge_matrix[j]; - - for (size_t l = 0; l < cell_to_edge.size(); ++l) { - for (size_t dim = 0; dim < Dimension; ++dim) - Flux_qtmvtAtCellEdge[j][l][dim] = StateAtEdge[j][l][0] * StateAtEdge[j][l][dim]; - } - }); - */ + /* + parallel_for( + p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { + const auto& cell_to_node = cell_to_node_matrix[j]; + for (size_t l = 0; l < cell_to_node.size(); ++l) { + for (size_t dim = 0; dim < Dimension; ++dim) + Flux_qtmvtAtCellNode[j][l][dim] = StateAtNode[j][l][0] * StateAtNode[j][l][dim]; + } + + const auto& cell_to_face = cell_to_face_matrix[j]; + + for (size_t l = 0; l < cell_to_face.size(); ++l) { + for (size_t dim = 0; dim < Dimension; ++dim) + Flux_qtmvtAtCellFace[j][l][dim] = StateAtFace[j][l][0] * StateAtFace[j][l][dim]; + } + + const auto& cell_to_edge = cell_to_edge_matrix[j]; + + for (size_t l = 0; l < cell_to_edge.size(); ++l) { + for (size_t dim = 0; dim < Dimension; ++dim) + Flux_qtmvtAtCellEdge[j][l][dim] = StateAtEdge[j][l][0] * StateAtEdge[j][l][dim]; + } + }); + */ // parallel_for( // p_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { // Flux_qtmvtAtCellNode[j] = Flux_qtmvtAtCellEdge[j] = Flux_qtmvtAtCellFace[j] = Flux_qtmvt[j]; @@ -1344,10 +1428,6 @@ class RusanovEulerianCompositeSolver_v2 EdgeValuePerCell<Rd> Flux_totnrjAtCellEdge{p_mesh->connectivity()}; FaceValuePerCell<Rd> Flux_totnrjAtCellFace{p_mesh->connectivity()}; - const auto& cell_to_node_matrix = p_mesh->connectivity().cellToNodeMatrix(); - const auto& cell_to_edge_matrix = p_mesh->connectivity().cellToEdgeMatrix(); - const auto& cell_to_face_matrix = p_mesh->connectivity().cellToFaceMatrix(); - Flux_rhoAtCellEdge.fill(zero); Flux_totnrjAtCellEdge.fill(zero); Flux_qtmvtAtCellEdge.fill(zero); @@ -2382,6 +2462,7 @@ rusanovEulerianCompositeSolver_v2( const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c_v, const std::shared_ptr<const DiscreteFunctionVariant>& p_v, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool check) @@ -2410,7 +2491,7 @@ rusanovEulerianCompositeSolver_v2( return RusanovEulerianCompositeSolver_v2<MeshType>{} .solve(p_mesh, rho_v->get<DiscreteFunctionP0<const double>>(), u_v->get<DiscreteFunctionP0<const Rd>>(), E_v->get<DiscreteFunctionP0<const double>>(), gamma, c_v->get<DiscreteFunctionP0<const double>>(), - p_v->get<DiscreteFunctionP0<const double>>(), bc_descriptor_list, dt, check); + p_v->get<DiscreteFunctionP0<const double>>(), degree, bc_descriptor_list, dt, check); } else { throw NormalError("RusanovEulerianCompositeSolver v2 is only defined on polygonal meshes"); } diff --git a/src/scheme/RusanovEulerianCompositeSolver_v2.hpp b/src/scheme/RusanovEulerianCompositeSolver_v2.hpp index 749c09a181bfb1a71c8cf4817b5dcecbd0d11867..4b5864abec0792dd829b539bcc72dbed00b4126d 100644 --- a/src/scheme/RusanovEulerianCompositeSolver_v2.hpp +++ b/src/scheme/RusanovEulerianCompositeSolver_v2.hpp @@ -22,6 +22,7 @@ rusanovEulerianCompositeSolver_v2( const double& gamma, const std::shared_ptr<const DiscreteFunctionVariant>& c, const std::shared_ptr<const DiscreteFunctionVariant>& p, + const size_t& degree, const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt, const bool check = false);