diff --git a/src/language/modules/SchemeModule.cpp b/src/language/modules/SchemeModule.cpp index 8e917c929d5216c31411775985720637efe4d526..b82b21a07684be2f4a3bc7470019c547cae8950e 100644 --- a/src/language/modules/SchemeModule.cpp +++ b/src/language/modules/SchemeModule.cpp @@ -630,44 +630,41 @@ SchemeModule::SchemeModule() )); - this->_addBuiltinFunction("implicit_2_states_euler_o2_rhombus_modified", - std::function( + this->_addBuiltinFunction( + "implicit_2_states_euler_o2_rhombus_modified", + std::function( - [](const std::shared_ptr<const DiscreteFunctionVariant>& rho, - const std::shared_ptr<const DiscreteFunctionVariant>& u, - const std::shared_ptr<const DiscreteFunctionVariant>& E, - const std::shared_ptr<const DiscreteFunctionVariant>& c, - const std::shared_ptr<const DiscreteFunctionVariant>& p, - const std::shared_ptr<const DiscreteFunctionVariant>& pi, - const std::shared_ptr<const DiscreteFunctionVariant>& gamma, - const std::shared_ptr<const DiscreteFunctionVariant>& Cv, - const std::shared_ptr<const DiscreteFunctionVariant>& entropy, - const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& - bc_descriptor_list, - const double& dt) - -> std::tuple<std::shared_ptr<const MeshVariant>, - std::shared_ptr<const DiscreteFunctionVariant>, - std::shared_ptr<const DiscreteFunctionVariant>, - std::shared_ptr<const DiscreteFunctionVariant>, double> { - return ImplicitAcousticO2SolverHandlerModified{ImplicitAcousticO2SolverHandlerModified:: - SolverType::Glace2States, - rho, - c, - u, - p, - pi, - gamma, - Cv, - entropy, - bc_descriptor_list, - std::vector<std::shared_ptr< - const IZoneDescriptor>>{}, - dt} - .solver() - .apply(dt, rho, u, E, c, p, pi, gamma, Cv, entropy); - } + [](const std::shared_ptr<const DiscreteFunctionVariant>& rho, + const std::shared_ptr<const DiscreteFunctionVariant>& u, + const std::shared_ptr<const DiscreteFunctionVariant>& E, + const std::shared_ptr<const DiscreteFunctionVariant>& c, + const std::shared_ptr<const DiscreteFunctionVariant>& p, + const std::shared_ptr<const DiscreteFunctionVariant>& pi, + const std::shared_ptr<const DiscreteFunctionVariant>& gamma, + const std::shared_ptr<const DiscreteFunctionVariant>& Cv, + const std::shared_ptr<const DiscreteFunctionVariant>& entropy, + const std::vector<std::shared_ptr<const IBoundaryConditionDescriptor>>& bc_descriptor_list, const double& dt) + -> std::tuple<std::shared_ptr<const MeshVariant>, std::shared_ptr<const DiscreteFunctionVariant>, + std::shared_ptr<const DiscreteFunctionVariant>, std::shared_ptr<const DiscreteFunctionVariant>, + double> { + return ImplicitAcousticO2SolverHandlerRhombusModified{ImplicitAcousticO2SolverHandlerRhombusModified:: + SolverType::Glace2States, + rho, + c, + u, + p, + pi, + gamma, + Cv, + entropy, + bc_descriptor_list, + std::vector<std::shared_ptr<const IZoneDescriptor>>{}, + dt} + .solver() + .apply(dt, rho, u, E, c, p, pi, gamma, Cv, entropy); + } - )); + )); this->_addBuiltinFunction( "implicit_2_states_euler_o2", diff --git a/src/scheme/ImplicitAcousticO2SolverRhombus.cpp b/src/scheme/ImplicitAcousticO2SolverRhombus.cpp index 99e4e867f52fdd4d54f70350ff7d5c7a075cd724..21669540e3c6b654c17427d1ac315c8999b383fa 100644 --- a/src/scheme/ImplicitAcousticO2SolverRhombus.cpp +++ b/src/scheme/ImplicitAcousticO2SolverRhombus.cpp @@ -1769,9 +1769,6 @@ class ImplicitAcousticO2SolverHandlerRhombus::ImplicitAcousticO2Solver final double m = min(new_Vj); if (m < 0) { throw NormalError("Negative volume"); - parallel_for( - mesh->numberOfNodes(), - PUGS_LAMBDA(const NodeId node_id) { new_xr[node_id] = 0.5 * (new_xr[node_id] + mesh->xr()[node_id]); }); is_positive = false; } } while (not is_positive); diff --git a/src/scheme/ImplicitAcousticO2SolverRhombusModified.cpp b/src/scheme/ImplicitAcousticO2SolverRhombusModified.cpp index a3df8d3f22680d0da7420b3af513a7e3d8b8c7df..11aa27270a12bca2e6642068d84b10ad7c332da4 100644 --- a/src/scheme/ImplicitAcousticO2SolverRhombusModified.cpp +++ b/src/scheme/ImplicitAcousticO2SolverRhombusModified.cpp @@ -1702,243 +1702,250 @@ class ImplicitAcousticO2SolverHandlerRhombusModified::ImplicitAcousticO2Solver f }); return computed_g_1_exp_S_Cv_inv_g; }(); - bool CFL = false; + double dt_f = dt; + double max_tau_error; + int number_iter = 0; do { - bool test = true; - double max_tau_error; - int number_iter = 0; - do { - number_iter++; + number_iter++; - NodeValue<const Rd> ur_n = this->_getUr(); - NodeValuePerCell<const Rd> Fjr_n = this->_getFjr(ur_n); + NodeValue<const Rd> ur_n = this->_getUr(); + NodeValuePerCell<const Rd> Fjr_n = this->_getFjr(ur_n); - this->_computeGradJU_AU(u, p, pi, dt); + const auto& cell_to_node_matrix_n = m_mesh.connectivity().cellToNodeMatrix(); - NodeValue<const Rd> ur = this->_getUr(); - NodeValuePerCell<const Rd> Fjr = this->_getFjr(ur); - // time n+1 + for (CellId j = 0; j < mesh->numberOfCells(); ++j) { + double new_tau_fluxes_n = 0; + const auto& cell_nodes = cell_to_node_matrix_n[j]; + for (size_t R = 0; R < cell_nodes.size(); ++R) { + const NodeId r = cell_nodes[R]; + new_tau_fluxes_n += dot(m_Djr(j, R), ur_n[r]); + } + if (-new_tau_fluxes_n > 0) { + dt_f = std::min(m_tau[j] * m_Mj[j] / -new_tau_fluxes_n, dt_f); + std ::cout << "la c'est " << j << '\n'; + } + } + std::cout << "dt = " << dt << "dt_f = " << dt_f << '\n'; + this->_computeGradJU_AU(u, p, pi, dt_f); - const auto& cell_to_node_matrix = m_mesh.connectivity().cellToNodeMatrix(); + NodeValue<const Rd> ur = this->_getUr(); + NodeValuePerCell<const Rd> Fjr = this->_getFjr(ur); + // time n+1 - NodeValue<Rd> new_xr = copy(mesh->xr()); - parallel_for( - mesh->numberOfNodes(), PUGS_LAMBDA(NodeId r) { new_xr[r] += 0.5 * dt * (ur[r] + ur_n[r]); }); + const auto& cell_to_node_matrix = m_mesh.connectivity().cellToNodeMatrix(); - new_mesh = std::make_shared<MeshType>(mesh->shared_connectivity(), new_xr); + NodeValue<Rd> new_xr = copy(mesh->xr()); + parallel_for( + mesh->numberOfNodes(), PUGS_LAMBDA(NodeId r) { new_xr[r] += 0.5 * dt_f * (ur[r] + ur_n[r]); }); - CellValue<const double> Vj = MeshDataManager::instance().getMeshData(*mesh).Vj(); + new_mesh = std::make_shared<MeshType>(mesh->shared_connectivity(), new_xr); - new_rho = copy(rho.cellValues()); - new_u = copy(u.cellValues()); - new_E = copy(E.cellValues()); + CellValue<const double> Vj = MeshDataManager::instance().getMeshData(*mesh).Vj(); - parallel_for( - mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { - const auto& cell_nodes = cell_to_node_matrix[j]; + new_rho = copy(rho.cellValues()); + new_u = copy(u.cellValues()); + new_E = copy(E.cellValues()); - Rd momentum_fluxes = zero; - double energy_fluxes = 0; - for (size_t R = 0; R < cell_nodes.size(); ++R) { - const NodeId r = cell_nodes[R]; - momentum_fluxes += Fjr(j, R) + Fjr_n(j, R); - energy_fluxes += dot(Fjr(j, R), ur[r]) + dot(Fjr_n(j, R), ur_n[r]); - } - const double dt_over_Mj = dt / m_Mj[j]; - new_u[j] -= 0.5 * dt_over_Mj * momentum_fluxes; - new_E[j] -= 0.5 * dt_over_Mj * energy_fluxes; - }); + parallel_for( + mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { + const auto& cell_nodes = cell_to_node_matrix[j]; - // update Djr - const NodeValuePerCell<const Rd> new_Cjr = MeshDataManager::instance().getMeshData(*new_mesh).Cjr(); + Rd momentum_fluxes = zero; + double energy_fluxes = 0; + for (size_t R = 0; R < cell_nodes.size(); ++R) { + const NodeId r = cell_nodes[R]; + momentum_fluxes += Fjr(j, R) + Fjr_n(j, R); + energy_fluxes += dot(Fjr(j, R), ur[r]) + dot(Fjr_n(j, R), ur_n[r]); + } + const double dt_over_Mj = dt_f / m_Mj[j]; + new_u[j] -= 0.5 * dt_over_Mj * momentum_fluxes; + new_E[j] -= 0.5 * dt_over_Mj * energy_fluxes; + }); - CellValue<double> new_Vj{m_mesh.connectivity()}; + // update Djr + const NodeValuePerCell<const Rd> new_Cjr = MeshDataManager::instance().getMeshData(*new_mesh).Cjr(); - bool is_positive = true; - do { - is_positive = true; - parallel_for( - mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { - new_Vj[j] = 0; - auto cell_nodes = cell_to_node_matrix[j]; + CellValue<double> new_Vj{m_mesh.connectivity()}; - for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { - const NodeId node_id = cell_nodes[i_node]; - new_Vj[j] += dot(new_Cjr[j][i_node], new_xr[node_id]); - } - new_Vj[j] *= 1. / Dimension; - }); + bool is_positive = true; + do { + is_positive = true; + parallel_for( + mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { + new_Vj[j] = 0; + auto cell_nodes = cell_to_node_matrix[j]; - double m = min(new_Vj); - if (m < 0) { - // std::cout << "negative volume" << '/n'; - // throw NormalError("Negative volume"); - } - } while (not is_positive); + for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { + const NodeId node_id = cell_nodes[i_node]; + new_Vj[j] += dot(new_Cjr[j][i_node], new_xr[node_id]); + } + new_Vj[j] *= 1. / Dimension; + }); - parallel_for( - mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { new_rho[j] *= Vj[j] / new_Vj[j]; }); + double m = min(new_Vj); + if (m < 0) { + std::cout << "la plus petite maille est" << m << '\n'; + throw NormalError("Negative volume"); + } + } while (not is_positive); - CellValue<double> new_tau(m_mesh.connectivity()); + parallel_for( + mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { new_rho[j] *= Vj[j] / new_Vj[j]; }); - for (CellId j = 0; j < mesh->numberOfCells(); ++j) { - double new_tau_fluxes = 0; - const auto& cell_nodes = cell_to_node_matrix[j]; - for (size_t R = 0; R < cell_nodes.size(); ++R) { - const NodeId r = cell_nodes[R]; - new_tau_fluxes += dot(m_Djr(j, R), ur[r]) + dot(m_Djr(j, R), ur_n[r]); - } - new_tau[j] = m_tau[j] + 0.5 * (dt / m_Mj[j]) * new_tau_fluxes; - // std::cout << "new_tau(" << j << ")=" << new_tau[j] << '\n'; + CellValue<double> new_tau(m_mesh.connectivity()); + + for (CellId j = 0; j < mesh->numberOfCells(); ++j) { + double new_tau_fluxes = 0; + const auto& cell_nodes = cell_to_node_matrix[j]; + for (size_t R = 0; R < cell_nodes.size(); ++R) { + const NodeId r = cell_nodes[R]; + new_tau_fluxes += dot(m_Djr(j, R), ur[r]) + dot(m_Djr(j, R), ur_n[r]); } + new_tau[j] = m_tau[j] + 0.5 * (dt_f / m_Mj[j]) * new_tau_fluxes; + // std::cout << "new_tau(" << j << ")=" << new_tau[j] << '\n'; + } - // double sum_tau_rho = 0; - max_tau_error = 0; + // double sum_tau_rho = 0; + max_tau_error = 0; - for (CellId j = 0; j < mesh->numberOfCells(); ++j) { - // const auto& cell_nodes = cell_to_node_matrix[j]; - // V_j^n+1/tau_j^n+1 - M_j - // sum_tau_rho += std::abs(new_tau[j] - 1. / new_rho[j]); - if (m_is_implicit_cell[j]) { - max_tau_error = std::max(max_tau_error, std::abs(1 - new_tau[j] * new_rho[j])); - } + for (CellId j = 0; j < mesh->numberOfCells(); ++j) { + // const auto& cell_nodes = cell_to_node_matrix[j]; + // V_j^n+1/tau_j^n+1 - M_j + // sum_tau_rho += std::abs(new_tau[j] - 1. / new_rho[j]); + if (m_is_implicit_cell[j]) { + max_tau_error = std::max(max_tau_error, std::abs(1 - new_tau[j] * new_rho[j])); } - // std::cout << "sum_tau_rho =" << sum_tau_rho << '\n'; - // std::cout << "max_tau_error=" << max_tau_error << '\n'; + } + // std::cout << "sum_tau_rho =" << sum_tau_rho << '\n'; + // std::cout << "max_tau_error=" << max_tau_error << '\n'; - if constexpr (Dimension == 2) { - NodeValuePerCell<Rd> Djr{m_mesh.connectivity()}; + if constexpr (Dimension == 2) { + NodeValuePerCell<Rd> Djr{m_mesh.connectivity()}; - parallel_for( - mesh->numberOfCells(), PUGS_LAMBDA(CellId cell_id) { - const auto& cell_nodes = cell_to_node_matrix[cell_id]; - if (m_is_implicit_cell[cell_id]) { - for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { - Djr(cell_id, i_node) = 0.5 * (Cjr_n(cell_id, i_node) + new_Cjr(cell_id, i_node)); - } - } else { - for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { - Djr(cell_id, i_node) = Cjr_n(cell_id, i_node); - } + parallel_for( + mesh->numberOfCells(), PUGS_LAMBDA(CellId cell_id) { + const auto& cell_nodes = cell_to_node_matrix[cell_id]; + if (m_is_implicit_cell[cell_id]) { + for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { + Djr(cell_id, i_node) = 0.5 * (Cjr_n(cell_id, i_node) + new_Cjr(cell_id, i_node)); + } + } else { + for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { + Djr(cell_id, i_node) = Cjr_n(cell_id, i_node); } - }); + } + }); - m_Djr = Djr; - } else if constexpr (Dimension == 3) { - NodeValuePerFace<Rd> Nlr_delta(m_mesh.connectivity()); - const auto& face_to_node_matrix = m_mesh.connectivity().faceToNodeMatrix(); + m_Djr = Djr; + } else if constexpr (Dimension == 3) { + NodeValuePerFace<Rd> Nlr_delta(m_mesh.connectivity()); + const auto& face_to_node_matrix = m_mesh.connectivity().faceToNodeMatrix(); - const auto& xr_n = m_mesh.xr(); - const auto& xr_np1 = new_xr; + const auto& xr_n = m_mesh.xr(); + const auto& xr_np1 = new_xr; - parallel_for( - m_mesh.numberOfFaces(), PUGS_LAMBDA(FaceId l) { - const auto& face_nodes = face_to_node_matrix[l]; - const size_t nb_nodes = face_nodes.size(); - std::vector<Rd> dxr_n(nb_nodes); - std::vector<Rd> dxr_np1(nb_nodes); - for (size_t r = 0; r < nb_nodes; ++r) { - dxr_n[r] = xr_n[face_nodes[(r + 1) % nb_nodes]] - xr_n[face_nodes[(r + nb_nodes - 1) % nb_nodes]]; - dxr_np1[r] = xr_np1[face_nodes[(r + 1) % nb_nodes]] - xr_np1[face_nodes[(r + nb_nodes - 1) % nb_nodes]]; - } - const double inv_12_nb_nodes = 1. / (12. * nb_nodes); - for (size_t r = 0; r < nb_nodes; ++r) { - Rd Nr = zero; - for (size_t s = 0; s < nb_nodes; ++s) { - Nr -= crossProduct((1. / 6) * (2 * (dxr_np1[r] - dxr_n[r]) - (dxr_np1[s] - dxr_n[s])), - xr_np1[face_nodes[s]] - xr_n[face_nodes[s]]); - } - Nr *= inv_12_nb_nodes; - Nlr_delta(l, r) = Nr; + parallel_for( + m_mesh.numberOfFaces(), PUGS_LAMBDA(FaceId l) { + const auto& face_nodes = face_to_node_matrix[l]; + const size_t nb_nodes = face_nodes.size(); + std::vector<Rd> dxr_n(nb_nodes); + std::vector<Rd> dxr_np1(nb_nodes); + for (size_t r = 0; r < nb_nodes; ++r) { + dxr_n[r] = xr_n[face_nodes[(r + 1) % nb_nodes]] - xr_n[face_nodes[(r + nb_nodes - 1) % nb_nodes]]; + dxr_np1[r] = xr_np1[face_nodes[(r + 1) % nb_nodes]] - xr_np1[face_nodes[(r + nb_nodes - 1) % nb_nodes]]; + } + const double inv_12_nb_nodes = 1. / (12. * nb_nodes); + for (size_t r = 0; r < nb_nodes; ++r) { + Rd Nr = zero; + for (size_t s = 0; s < nb_nodes; ++s) { + Nr -= crossProduct((1. / 6) * (2 * (dxr_np1[r] - dxr_n[r]) - (dxr_np1[s] - dxr_n[s])), + xr_np1[face_nodes[s]] - xr_n[face_nodes[s]]); } - }); + Nr *= inv_12_nb_nodes; + Nlr_delta(l, r) = Nr; + } + }); - const auto& cell_to_face_matrix = m_mesh.connectivity().cellToFaceMatrix(); - const auto& cell_face_is_reversed = m_mesh.connectivity().cellFaceIsReversed(); + const auto& cell_to_face_matrix = m_mesh.connectivity().cellToFaceMatrix(); + const auto& cell_face_is_reversed = m_mesh.connectivity().cellFaceIsReversed(); - NodeValuePerCell<Rd> Djr{m_mesh.connectivity()}; - Djr.fill(zero); + NodeValuePerCell<Rd> Djr{m_mesh.connectivity()}; + Djr.fill(zero); - parallel_for( - m_mesh.numberOfCells(), PUGS_LAMBDA(CellId j) { - const auto& cell_nodes = cell_to_node_matrix[j]; + parallel_for( + m_mesh.numberOfCells(), PUGS_LAMBDA(CellId j) { + const auto& cell_nodes = cell_to_node_matrix[j]; - const auto& cell_faces = cell_to_face_matrix[j]; - const auto& face_is_reversed = cell_face_is_reversed.itemArray(j); + const auto& cell_faces = cell_to_face_matrix[j]; + const auto& face_is_reversed = cell_face_is_reversed.itemArray(j); - for (size_t L = 0; L < cell_faces.size(); ++L) { - const FaceId& l = cell_faces[L]; - const auto& face_nodes = face_to_node_matrix[l]; + for (size_t L = 0; L < cell_faces.size(); ++L) { + const FaceId& l = cell_faces[L]; + const auto& face_nodes = face_to_node_matrix[l]; - auto local_node_number_in_cell = [&](NodeId node_number) { - for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { - if (node_number == cell_nodes[i_node]) { - return i_node; - } + auto local_node_number_in_cell = [&](NodeId node_number) { + for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { + if (node_number == cell_nodes[i_node]) { + return i_node; } - return std::numeric_limits<size_t>::max(); - }; + } + return std::numeric_limits<size_t>::max(); + }; - if (face_is_reversed[L]) { - for (size_t rl = 0; rl < face_nodes.size(); ++rl) { - const size_t R = local_node_number_in_cell(face_nodes[rl]); - Djr(j, R) -= Nlr_delta(l, rl); - } - } else { - for (size_t rl = 0; rl < face_nodes.size(); ++rl) { - const size_t R = local_node_number_in_cell(face_nodes[rl]); - Djr(j, R) += Nlr_delta(l, rl); - } + if (face_is_reversed[L]) { + for (size_t rl = 0; rl < face_nodes.size(); ++rl) { + const size_t R = local_node_number_in_cell(face_nodes[rl]); + Djr(j, R) -= Nlr_delta(l, rl); + } + } else { + for (size_t rl = 0; rl < face_nodes.size(); ++rl) { + const size_t R = local_node_number_in_cell(face_nodes[rl]); + Djr(j, R) += Nlr_delta(l, rl); } } - }); + } + }); - parallel_for( - Djr.numberOfValues(), PUGS_LAMBDA(const size_t i) { Djr[i] += 0.5 * (Cjr_n[i] + new_Cjr[i]); }); + parallel_for( + Djr.numberOfValues(), PUGS_LAMBDA(const size_t i) { Djr[i] += 0.5 * (Cjr_n[i] + new_Cjr[i]); }); - parallel_for( - m_mesh.numberOfCells(), PUGS_LAMBDA(const CellId cell_id) { - if (not m_is_implicit_cell[cell_id]) { - const auto& cell_nodes = cell_to_node_matrix[cell_id]; - for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { - Djr(cell_id, i_node) = Cjr_n(cell_id, i_node); - } + parallel_for( + m_mesh.numberOfCells(), PUGS_LAMBDA(const CellId cell_id) { + if (not m_is_implicit_cell[cell_id]) { + const auto& cell_nodes = cell_to_node_matrix[cell_id]; + for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { + Djr(cell_id, i_node) = Cjr_n(cell_id, i_node); } - }); + } + }); - m_Djr = Djr; + m_Djr = Djr; - double max_err = 0; + double max_err = 0; - for (CellId cell_id = 0; cell_id < m_mesh.numberOfCells(); ++cell_id) { - if (m_is_implicit_cell[cell_id]) { - double delta_V = new_Vj[cell_id] - Vj[cell_id]; - const auto& node_list = cell_to_node_matrix[cell_id]; - for (size_t i_node = 0; i_node < node_list.size(); ++i_node) { - const NodeId node_id = node_list[i_node]; - delta_V -= dt * dot(ur[node_id], Djr[cell_id][i_node]); - } - max_err = std::max(max_err, std::abs(delta_V)); + for (CellId cell_id = 0; cell_id < m_mesh.numberOfCells(); ++cell_id) { + if (m_is_implicit_cell[cell_id]) { + double delta_V = new_Vj[cell_id] - Vj[cell_id]; + const auto& node_list = cell_to_node_matrix[cell_id]; + for (size_t i_node = 0; i_node < node_list.size(); ++i_node) { + const NodeId node_id = node_list[i_node]; + delta_V -= dt_f * dot(ur[node_id], Djr[cell_id][i_node]); } + max_err = std::max(max_err, std::abs(delta_V)); } - - std::cout << rang::fgB::yellow << "Max volume err = " << max_err << rang::fg::reset << '\n'; } - if constexpr (Dimension > 1) { - std::cout << rang::fgB::magenta << "number_iter_Djr=" << number_iter << " max_tau_error=" << max_tau_error - << rang::fg::reset << '\n'; - } + std::cout << rang::fgB::yellow << "Max volume err = " << max_err << rang::fg::reset << '\n'; + } - // std::cout << "new rho=" << new_rho << '\n'; - } while ((Dimension > 1) and (max_tau_error > 1e-4) and (number_iter < 100)); - if (test) { - CFL = true; - } else { - dt_f = 0.5 * dt_f; + if constexpr (Dimension > 1) { + std::cout << rang::fgB::magenta << "number_iter_Djr=" << number_iter << " max_tau_error=" << max_tau_error + << rang::fg::reset << '\n'; } - } while (CFL == false); + + // std::cout << "new rho=" << new_rho << '\n'; + } while ((Dimension > 1) and (max_tau_error > 1e-4) and (number_iter < 100)); // std::cout << "prochaine boucle" << '\n'; implicit_t.pause(); // std::cout << "getA=" << get_A_t << "(" << count_getA << ")" diff --git a/src/scheme/ImplicitAcousticO2SolverRhombusModified.hpp b/src/scheme/ImplicitAcousticO2SolverRhombusModified.hpp index 2edf4f8b78546fef972a64b8f795d6cade4c28a1..818a33d383ceb989cef5dc7567ede8a70b37b83f 100644 --- a/src/scheme/ImplicitAcousticO2SolverRhombusModified.hpp +++ b/src/scheme/ImplicitAcousticO2SolverRhombusModified.hpp @@ -1,5 +1,5 @@ -#ifndef IMPLICIT_ACOUSTIC_O2_SOLVER_MODIFIED_HPP -#define IMPLICIT_ACOUSTIC_O2_SOLVER_MODIFIED_HPP +#ifndef IMPLICIT_ACOUSTIC_O2_SOLVER_RHOMBUS_MODIFIED_HPP +#define IMPLICIT_ACOUSTIC_O2_SOLVER_RHOMBUS_MODIFIED_HPP #include <mesh/MeshTraits.hpp>