From 837eca641068b4c5b9b6afe16aedec3ef698a3c0 Mon Sep 17 00:00:00 2001 From: Axelle <axelle.drouard@orange.fr> Date: Mon, 20 Jan 2025 18:04:22 +0100 Subject: [PATCH] Fix node symmetry BC --- src/scheme/EulerKineticSolverMultiD.cpp | 37 +++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/scheme/EulerKineticSolverMultiD.cpp b/src/scheme/EulerKineticSolverMultiD.cpp index 791cf9a06..af1c1eb63 100644 --- a/src/scheme/EulerKineticSolverMultiD.cpp +++ b/src/scheme/EulerKineticSolverMultiD.cpp @@ -842,6 +842,7 @@ class EulerKineticSolverMultiD const auto& node_local_numbers_in_their_cells = p_mesh->connectivity().nodeLocalNumbersInTheirCells(); const auto& node_to_cell_matrix = p_mesh->connectivity().nodeToCellMatrix(); const NodeValuePerCell<const TinyVector<Dimension>> njr = MeshDataManager::instance().getMeshData(m_mesh).njr(); + const NodeValuePerCell<const TinyVector<Dimension>> Cjr = MeshDataManager::instance().getMeshData(m_mesh).Cjr(); TinyVector<MeshType::Dimension> inv_S = zero; for (size_t d = 0; d < MeshType::Dimension; ++d) { @@ -867,12 +868,14 @@ class EulerKineticSolverMultiD const NodeId node_id = node_list[i_node]; const auto& node_to_cell = node_to_cell_matrix[node_id]; const auto& node_local_number_in_its_cell = node_local_numbers_in_their_cells.itemArray(node_id); - + double sum_Cjr = 0; for (size_t i_cell = 0; i_cell < node_to_cell.size(); ++i_cell) { const CellId cell_id = node_to_cell[i_cell]; const size_t i_node_cell = node_local_number_in_its_cell[i_cell]; - nr[node_id] += njr(cell_id, i_node_cell); + nr[node_id] += Cjr(cell_id, i_node_cell); + + sum_Cjr += sqrt(dot(Cjr(cell_id, i_node_cell), Cjr(cell_id, i_node_cell))); } nr[node_id] = 1. / sqrt(dot(nr[node_id], nr[node_id])) * nr[node_id]; auto nxn = tensorProduct(nr[node_id], nr[node_id]); @@ -953,11 +956,14 @@ class EulerKineticSolverMultiD const auto& node_to_cell = node_to_cell_matrix[node_id]; const auto& node_local_number_in_its_cell = node_local_numbers_in_their_cells.itemArray(node_id); + double sum_Cjr = 0; for (size_t i_cell = 0; i_cell < node_to_cell.size(); ++i_cell) { const CellId cell_id = node_to_cell[i_cell]; const size_t i_node_cell = node_local_number_in_its_cell[i_cell]; - nr[node_id] += njr(cell_id, i_node_cell); + nr[node_id] += Cjr(cell_id, i_node_cell); + + sum_Cjr += sqrt(dot(Cjr(cell_id, i_node_cell), Cjr(cell_id, i_node_cell))); } nr[node_id] = 1. / sqrt(dot(nr[node_id], nr[node_id])) * nr[node_id]; auto nxn = tensorProduct(nr[node_id], nr[node_id]); @@ -1054,6 +1060,7 @@ class EulerKineticSolverMultiD const auto& node_to_cell_matrix = p_mesh->connectivity().nodeToCellMatrix(); const auto& node_to_face_matrix = p_mesh->connectivity().nodeToFaceMatrix(); const NodeValuePerCell<const TinyVector<Dimension>> njr = MeshDataManager::instance().getMeshData(m_mesh).njr(); + const NodeValuePerCell<const TinyVector<Dimension>> Cjr = MeshDataManager::instance().getMeshData(m_mesh).Cjr(); TinyVector<MeshType::Dimension> inv_S = zero; for (size_t d = 0; d < MeshType::Dimension; ++d) { @@ -1180,11 +1187,14 @@ class EulerKineticSolverMultiD const auto& node_to_cell = node_to_cell_matrix[node_id]; const auto& node_local_number_in_its_cell = node_local_numbers_in_their_cells.itemArray(node_id); + double sum_Cjr = 0; for (size_t i_cell = 0; i_cell < node_to_cell.size(); ++i_cell) { const CellId cell_id = node_to_cell[i_cell]; const size_t i_node_cell = node_local_number_in_its_cell[i_cell]; - nr[node_id] += njr(cell_id, i_node_cell); + nr[node_id] += Cjr(cell_id, i_node_cell); + + sum_Cjr += sqrt(dot(Cjr(cell_id, i_node_cell), Cjr(cell_id, i_node_cell))); } nr[node_id] = 1. / sqrt(dot(nr[node_id], nr[node_id])) * nr[node_id]; auto nxn = tensorProduct(nr[node_id], nr[node_id]); @@ -1513,23 +1523,22 @@ class EulerKineticSolverMultiD const CellValue<const TinyVector<Dimension>> rho_u = compute_PFn<TinyVector<Dimension>>(Fn_rho_u); const CellValue<const double> rho_E = compute_PFn<double>(Fn_rho_E); - // NodeArray<double> Fr_rho = compute_Flux1_glace<double>(Fn_rho, is_boundary_node); - // NodeArray<TinyVector<Dimension>> Fr_rho_u = compute_Flux1_glace<TinyVector<Dimension>>(Fn_rho_u, - // is_boundary_node); NodeArray<double> Fr_rho_E = compute_Flux1_glace<double>(Fn_rho_E, - // is_boundary_node); + NodeArray<double> Fr_rho = compute_Flux1_glace<double>(Fn_rho, is_boundary_node); + NodeArray<TinyVector<Dimension>> Fr_rho_u = compute_Flux1_glace<TinyVector<Dimension>>(Fn_rho_u, is_boundary_node); + NodeArray<double> Fr_rho_E = compute_Flux1_glace<double>(Fn_rho_E, is_boundary_node); - NodeArray<double> Fr_rho = compute_Flux1_eucclhyd<double>(Fn_rho, is_boundary_node); - NodeArray<TinyVector<Dimension>> Fr_rho_u = - compute_Flux1_eucclhyd<TinyVector<Dimension>>(Fn_rho_u, is_boundary_node); - NodeArray<double> Fr_rho_E = compute_Flux1_eucclhyd<double>(Fn_rho_E, is_boundary_node); + // NodeArray<double> Fr_rho = compute_Flux1_eucclhyd<double>(Fn_rho, is_boundary_node); + // NodeArray<TinyVector<Dimension>> Fr_rho_u = + // compute_Flux1_eucclhyd<TinyVector<Dimension>>(Fn_rho_u, is_boundary_node); + // NodeArray<double> Fr_rho_E = compute_Flux1_eucclhyd<double>(Fn_rho_E, is_boundary_node); // FaceArray<double> Fl_rho = compute_Flux1_face<double>(Fn_rho); // FaceArray<TinyVector<Dimension>> Fl_rho_u = compute_Flux1_face<TinyVector<Dimension>>(Fn_rho_u); // FaceArray<double> Fl_rho_E = compute_Flux1_face<double>(Fn_rho_E); // apply_face_bc(Fl_rho, Fl_rho_u, Fl_rho_E, rho, rho_u, rho_E, Fn_rho, Fn_rho_u, Fn_rho_E, bc_list); - // apply_glace_bc(Fr_rho, Fr_rho_u, Fr_rho_E, rho, rho_u, rho_E, Fn_rho, Fn_rho_u, Fn_rho_E, bc_list); - apply_eucclhyd_bc(Fr_rho, Fr_rho_u, Fr_rho_E, rho, rho_u, rho_E, Fn_rho, Fn_rho_u, Fn_rho_E, bc_list); + apply_glace_bc(Fr_rho, Fr_rho_u, Fr_rho_E, rho, rho_u, rho_E, Fn_rho, Fn_rho_u, Fn_rho_E, bc_list); + // apply_eucclhyd_bc(Fr_rho, Fr_rho_u, Fr_rho_E, rho, rho_u, rho_E, Fn_rho, Fn_rho_u, Fn_rho_E, bc_list); synchronize(Fr_rho); synchronize(Fr_rho_u); -- GitLab