diff --git a/src/scheme/EulerKineticSolverMultiD.cpp b/src/scheme/EulerKineticSolverMultiD.cpp index f299da04d71838d25f34446caadb581e2e7f8ce3..20077749b71094bed6ebf343795b264fdd3e42c6 100644 --- a/src/scheme/EulerKineticSolverMultiD.cpp +++ b/src/scheme/EulerKineticSolverMultiD.cpp @@ -46,8 +46,8 @@ getLambdaVector2D(const std::shared_ptr<const MeshVariant>& mesh, for (size_t m = 1; m < 4 * M + 1; ++m) { size_t i_wave = (l - 1) * 4 * M + m - 1; double ll = l; - lambda_vector[i_wave] = TinyVector<2>{(ll / L) * lambda * std::cos((m * pi) / (2 * M) + 0.25 * pi), - (ll / L) * lambda * std::sin((m * pi) / (2 * M) + 0.25 * pi)}; + lambda_vector[i_wave] = TinyVector<2>{(ll / L) * lambda * std::cos((m * pi) / (2 * M)), // + 0.2 * pi), + (ll / L) * lambda * std::sin((m * pi) / (2 * M))}; // + 0.2 * pi)}; } } // lambda_vector[4 * L * M] = TinyVector<2>{0, 0}; //!!!!!!!!!!!!!!!!!!!! @@ -597,7 +597,7 @@ class EulerKineticSolverMultiD double li_nlr = sign * dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr[node_id][i_wave] += li_nlr * Fn[cell_id][i_wave]; sum += li_nlr; } @@ -647,7 +647,7 @@ class EulerKineticSolverMultiD double li_nl = sign * dot(m_lambda_vector[i_wave], n_face); - if (li_nl > 0) { + if (li_nl > 1e-14) { Fl[face_id][i_wave] += Fn[cell_id][i_wave]; } } @@ -697,24 +697,20 @@ class EulerKineticSolverMultiD const FaceId face_id = face_list[i_face]; for (size_t i_wave = 0; i_wave < nb_waves; ++i_wave) { - const auto& face_local_number_in_its_cell = face_local_numbers_in_their_cells.itemArray(face_id); - const auto& face_to_cell = face_to_cell_matrix[face_id]; + const auto& face_to_cell = face_to_cell_matrix[face_id]; for (size_t i_cell = 0; i_cell < face_to_cell.size(); ++i_cell) { - const CellId cell_id = face_to_cell[i_cell]; - const size_t i_face_cell = face_local_number_in_its_cell[i_cell]; + const CellId cell_id = face_to_cell[i_cell]; - TinyVector<Dimension> n_face = nl[face_id]; - const double sign = face_cell_is_reversed(cell_id, i_face_cell) ? -1 : 1; + double li_nl = dot(m_lambda_vector[i_wave], n); - double li_nl = sign * dot(m_lambda_vector[i_wave], n_face); - if (li_nl < 0) { + if (li_nl < -1e-14) { double rhoj_prime = rho[cell_id]; TinyVector<Dimension> rho_uj = rho_u[cell_id]; TinyVector<Dimension> rho_uj_prime = txt * rho_uj - nxn * rho_uj; double rho_Ej_prime = rho_E[cell_id]; - double rho_e = rho_E[cell_id] - 0.5 * (1. / rho[cell_id]) * dot(rho_u[cell_id], rho_u[cell_id]); + double rho_e = rho_Ej_prime - 0.5 * (1. / rhoj_prime) * dot(rho_uj, rho_uj); double p = (m_gamma - 1) * rho_e; TinyVector<Dimension> A_rho_prime = rho_uj_prime; @@ -762,7 +758,7 @@ class EulerKineticSolverMultiD auto txt = I - nxn; double li_nl = dot(m_lambda_vector[i_wave], n); - if (li_nl < 0) { + if (li_nl < -1e-14) { double rhoj_prime = rho[cell_id]; TinyVector<Dimension> rho_uj = rho_u[cell_id]; TinyVector<Dimension> rho_uj_prime = txt * rho_uj - nxn * rho_uj; @@ -813,7 +809,7 @@ class EulerKineticSolverMultiD auto n = sign * nl[face_id]; double li_nl = dot(m_lambda_vector[i_wave], n); - if (li_nl < 0) { + if (li_nl < -1e-14) { Fl_rho[face_id][i_wave] += Fn_rho[cell_id][i_wave]; Fl_rho_u[face_id][i_wave] += Fn_rho_u[cell_id][i_wave]; Fl_rho_E[face_id][i_wave] += Fn_rho_E[cell_id][i_wave]; @@ -891,7 +887,7 @@ class EulerKineticSolverMultiD double li_njr = dot(m_lambda_vector[i_wave], njr(cell_id, i_node_cell)); - if (li_njr > 0) { + if (li_njr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_njr; Fr_rho_u[node_id][i_wave] += li_njr * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_njr; @@ -902,7 +898,7 @@ class EulerKineticSolverMultiD TinyVector<Dimension> njr_prime = txt * njr(cell_id, i_node_cell) - nxn * njr(cell_id, i_node_cell); double li_njr_prime = dot(m_lambda_vector[i_wave], njr_prime); - if (li_njr_prime > 0) { + if (li_njr_prime > 1e-14) { double rhoj_prime = rho[cell_id]; TinyVector<Dimension> rho_uj_prime = txt * rho_u[cell_id] - nxn * rho_u[cell_id]; double rho_Ej_prime = rho_E[cell_id]; @@ -976,7 +972,7 @@ class EulerKineticSolverMultiD double li_njr = dot(m_lambda_vector[i_wave], njr(cell_id, i_node_cell)); - if (li_njr > 0) { + if (li_njr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_njr; Fr_rho_u[node_id][i_wave] += li_njr * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_njr; @@ -987,7 +983,7 @@ class EulerKineticSolverMultiD TinyVector<Dimension> njr_prime = txt * njr(cell_id, i_node_cell) - nxn * njr(cell_id, i_node_cell); double li_njr_prime = dot(m_lambda_vector[i_wave], njr_prime); - if (li_njr_prime > 0) { + if (li_njr_prime > 1e-14) { double rhoj_prime = rho[cell_id]; TinyVector<Dimension> rho_uj_prime = txt * rho_u[cell_id] - nxn * rho_u[cell_id]; double rho_Ej_prime = rho_E[cell_id]; @@ -1060,7 +1056,7 @@ class EulerKineticSolverMultiD double li_njr = dot(m_lambda_vector[i_wave], njr(cell_id, i_node_cell)); - if (li_njr > 0) { + if (li_njr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_njr; Fr_rho_u[node_id][i_wave] += li_njr * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_njr; @@ -1071,7 +1067,7 @@ class EulerKineticSolverMultiD TinyVector<Dimension> njr_prime = txt * njr(cell_id, i_node_cell) - nxn * njr(cell_id, i_node_cell); double li_njr_prime = dot(m_lambda_vector[i_wave], njr_prime); - if (li_njr_prime > 0) { + if (li_njr_prime > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_njr_prime; Fr_rho_u[node_id][i_wave] += li_njr_prime * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_njr_prime; @@ -1178,7 +1174,7 @@ class EulerKineticSolverMultiD double li_nlr = dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_nlr; Fr_rho_u[node_id][i_wave] += li_nlr * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_nlr; @@ -1189,7 +1185,7 @@ class EulerKineticSolverMultiD TinyVector<Dimension> nlr_prime = txt * n_face - nxn * n_face; double li_nlr_prime = dot(m_lambda_vector[i_wave], nlr_prime); - if (li_nlr_prime > 0) { + if (li_nlr_prime > 1e-14) { double rhoj_prime = rho[cell_id]; TinyVector<Dimension> rho_uj_prime = txt * rho_u[cell_id] - nxn * rho_u[cell_id]; double rho_Ej_prime = rho_E[cell_id]; @@ -1276,7 +1272,7 @@ class EulerKineticSolverMultiD double li_nlr = dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_nlr; Fr_rho_u[node_id][i_wave] += li_nlr * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_nlr; @@ -1287,7 +1283,7 @@ class EulerKineticSolverMultiD TinyVector<Dimension> nlr_prime = txt * n_face - nxn * n_face; double li_nlr_prime = dot(m_lambda_vector[i_wave], nlr_prime); - if (li_nlr_prime > 0) { + if (li_nlr_prime > 1e-14) { double rhoj_prime = rho[cell_id]; TinyVector<Dimension> rho_uj_prime = txt * rho_u[cell_id] - nxn * rho_u[cell_id]; double rho_Ej_prime = rho_E[cell_id]; @@ -1374,7 +1370,7 @@ class EulerKineticSolverMultiD double li_nlr = dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_nlr; Fr_rho_u[node_id][i_wave] += li_nlr * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_nlr; @@ -1385,7 +1381,7 @@ class EulerKineticSolverMultiD TinyVector<Dimension> nlr_prime = txt * n_face - nxn * n_face; double li_nlr_prime = dot(m_lambda_vector[i_wave], nlr_prime); - if (li_nlr_prime > 0) { + if (li_nlr_prime > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho[cell_id][i_wave] * li_nlr_prime; Fr_rho_u[node_id][i_wave] += li_nlr_prime * Fn_rho_u[cell_id][i_wave]; Fr_rho_E[node_id][i_wave] += Fn_rho_E[cell_id][i_wave] * li_nlr_prime; @@ -1583,20 +1579,18 @@ class EulerKineticSolverMultiD DiscreteFunctionP0Vector<TinyVector<Dimension>> Fnp1_rho_u(p_mesh, nb_waves); DiscreteFunctionP0Vector<double> Fnp1_rho_E(p_mesh, nb_waves); - // Compute first order F - - const CellValue<const double> rho = compute_PFn<double>(Fn_rho); - 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); + const CellValue<const double> rho = compute_PFn(Fn_rho); + const CellValue<const TinyVector<Dimension>> rho_u = compute_PFn(Fn_rho_u); + const CellValue<const double> rho_E = compute_PFn(Fn_rho_E); CellArray<double> deltaLFn_rho{p_mesh->connectivity(), nb_waves}; CellArray<TinyVector<Dimension>> deltaLFn_rho_u{p_mesh->connectivity(), nb_waves}; CellArray<double> deltaLFn_rho_E{p_mesh->connectivity(), nb_waves}; if (m_scheme == 1) { - 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); + FaceArray<double> Fl_rho = compute_Flux1_face(Fn_rho); + FaceArray<TinyVector<Dimension>> Fl_rho_u = compute_Flux1_face(Fn_rho_u); + FaceArray<double> Fl_rho_E = compute_Flux1_face(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); @@ -1604,9 +1598,9 @@ class EulerKineticSolverMultiD synchronize(Fl_rho_u); synchronize(Fl_rho_E); - deltaLFn_rho = compute_deltaLFn_face<double>(Fl_rho); - deltaLFn_rho_u = compute_deltaLFn_face<TinyVector<Dimension>>(Fl_rho_u); - deltaLFn_rho_E = compute_deltaLFn_face<double>(Fl_rho_E); + deltaLFn_rho = compute_deltaLFn_face(Fl_rho); + deltaLFn_rho_u = compute_deltaLFn_face(Fl_rho_u); + deltaLFn_rho_E = compute_deltaLFn_face(Fl_rho_E); } else if (m_scheme == 2) { NodeArray<double> Fr_rho = compute_Flux1_glace<double>(Fn_rho, is_boundary_node); @@ -1615,6 +1609,7 @@ class EulerKineticSolverMultiD NodeArray<double> Fr_rho_E = compute_Flux1_glace<double>(Fn_rho_E, is_boundary_node); 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); + synchronize(Fr_rho); synchronize(Fr_rho_u); synchronize(Fr_rho_E); diff --git a/src/scheme/EulerKineticSolverMultiDOrder2.cpp b/src/scheme/EulerKineticSolverMultiDOrder2.cpp index 1df0243085bd8ec08b0c007b7669662ef4a1d694..acefc2734a3475e14ca6a3269a6e9c22fe795a8f 100644 --- a/src/scheme/EulerKineticSolverMultiDOrder2.cpp +++ b/src/scheme/EulerKineticSolverMultiDOrder2.cpp @@ -432,7 +432,7 @@ class EulerKineticSolverMultiDOrder2 double li_nlr = sign * dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Flr[node_id][i_face][i_wave] += Fn[cell_id][i_wave] * li_nlr; sum += li_nlr; } @@ -483,7 +483,7 @@ class EulerKineticSolverMultiDOrder2 double li_nl = sign * dot(m_lambda_vector[i_wave], n_face); - if (li_nl > 0) { + if (li_nl > 1e-14) { if ((not is_wall_boundary_face[face_id])) { //} and (not is_tiny_vector_v<T>)) { Fl[face_id][i_wave] += DPk_Fn(cell_id, i_wave)(m_xl[face_id]); } else { @@ -589,7 +589,7 @@ class EulerKineticSolverMultiDOrder2 double li_nlr = sign * dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr[node_id][i_wave] += li_nlr * DPk_Fn(cell_id, i_wave)(m_xl[face_id]); sum += li_nlr; } @@ -669,38 +669,45 @@ class EulerKineticSolverMultiDOrder2 const double sign = face_cell_is_reversed(cell_id, i_face_cell) ? -1 : 1; double li_nl = sign * dot(m_lambda_vector[i_wave], n_face); - if (li_nl < 0) { - double rhol_prime = rhol; - TinyVector<Dimension> rho_ul_prime = txt * rho_ul - nxn * rho_ul; - double rho_El_prime = rho_El; - - double rho_el = rho_El - 0.5 * (1. / rhol) * dot(rho_ul, rho_ul); - double pl = (m_gamma - 1) * rho_el; - - TinyVector<Dimension> A_rho_prime = rho_ul_prime; - TinyMatrix<Dimension> A_rho_u_prime = - 1. / rhol_prime * tensorProduct(rho_ul_prime, rho_ul_prime) + pl * I; - TinyVector<Dimension> A_rho_E_prime = (rho_El_prime + pl) / rhol_prime * rho_ul_prime; - - double Fn_rho_prime = rhol_prime / nb_waves; - TinyVector<Dimension> Fn_rho_u_prime = 1. / nb_waves * rho_ul_prime; - double Fn_rho_E_prime = rho_El_prime / nb_waves; - - for (size_t d1 = 0; d1 < Dimension; ++d1) { - Fn_rho_prime += inv_S[d1] * m_lambda_vector[i_wave][d1] * A_rho_prime[d1]; - for (size_t d2 = 0; d2 < Dimension; ++d2) { - Fn_rho_u_prime[d1] += inv_S[d2] * m_lambda_vector[i_wave][d2] * A_rho_u_prime(d2, d1); - } - Fn_rho_E_prime += inv_S[d1] * m_lambda_vector[i_wave][d1] * A_rho_E_prime[d1]; + // if (li_nl < -1e-14) { + double rhol_prime = rhol; + TinyVector<Dimension> rho_ul_prime = txt * rho_ul - nxn * rho_ul; + double rho_El_prime = rho_El; + + double rho_el = rho_El - 0.5 * (1. / rhol) * dot(rho_ul, rho_ul); + double pl = (m_gamma - 1) * rho_el; + + TinyVector<Dimension> A_rho_prime = rho_ul_prime; + TinyMatrix<Dimension> A_rho_u_prime = + 1. / rhol_prime * tensorProduct(rho_ul_prime, rho_ul_prime) + pl * I; + TinyVector<Dimension> A_rho_E_prime = (rho_El_prime + pl) / rhol_prime * rho_ul_prime; + + double Fn_rho_prime = rhol_prime / nb_waves; + TinyVector<Dimension> Fn_rho_u_prime = 1. / nb_waves * rho_ul_prime; + double Fn_rho_E_prime = rho_El_prime / nb_waves; + + for (size_t d1 = 0; d1 < Dimension; ++d1) { + Fn_rho_prime += inv_S[d1] * m_lambda_vector[i_wave][d1] * A_rho_prime[d1]; + for (size_t d2 = 0; d2 < Dimension; ++d2) { + Fn_rho_u_prime[d1] += inv_S[d2] * m_lambda_vector[i_wave][d2] * A_rho_u_prime(d2, d1); } - + Fn_rho_E_prime += inv_S[d1] * m_lambda_vector[i_wave][d1] * A_rho_E_prime[d1]; + } + if (li_nl < -1e-14) { Fl_rho[face_id][i_wave] += Fn_rho_prime; Fl_rho_u[face_id][i_wave] += Fn_rho_u_prime; Fl_rho_E[face_id][i_wave] += Fn_rho_E_prime; } + // if (cell_id >= 500 and cell_id < 502) { + // std::cout << "rho'(" << cell_id << ") = " << rhol_prime << "\n"; + // std::cout << "rho_u'(" << cell_id << ") = " << rho_ul_prime << "\n"; + // std::cout << "rho_E'(" << cell_id << ") = " << rho_El_prime << "\n"; + // std::cout << "F_rho_u'(" << i_wave << ") = " << Fn_rho_u_prime << "\n"; + // } } } } + // std::cout << "\n"; } else if constexpr (std::is_same_v<BCType, WallBoundaryCondition>) { auto face_list = bc.faceList(); @@ -732,7 +739,7 @@ class EulerKineticSolverMultiDOrder2 auto txt = I - nxn; double li_nl = dot(m_lambda_vector[i_wave], n); - if (li_nl < 0) { + if (li_nl < -1e-14) { double rhol_prime = rhol; TinyVector<Dimension> rho_ul_prime = txt * rho_ul - nxn * rho_ul; double rho_El_prime = rho_El; @@ -782,7 +789,7 @@ class EulerKineticSolverMultiDOrder2 auto n = sign * nl[face_id]; double li_nl = dot(m_lambda_vector[i_wave], n); - if (li_nl < 0) { + if (li_nl < -1e-14) { Fl_rho[face_id][i_wave] += Fn_rho(cell_id, i_wave)(m_xl[face_id]); Fl_rho_u[face_id][i_wave] += Fn_rho_u(cell_id, i_wave)(m_xl[face_id]); Fl_rho_E[face_id][i_wave] += Fn_rho_E(cell_id, i_wave)(m_xl[face_id]); @@ -1172,7 +1179,7 @@ class EulerKineticSolverMultiDOrder2 double li_nlr = dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho(cell_id, i_wave)(m_xl[face_id]) * li_nlr; Fr_rho_u[node_id][i_wave] += li_nlr * Fn_rho_u(cell_id, i_wave)(m_xl[face_id]); Fr_rho_E[node_id][i_wave] += Fn_rho_E(cell_id, i_wave)(m_xl[face_id]) * li_nlr; @@ -1183,7 +1190,7 @@ class EulerKineticSolverMultiDOrder2 TinyVector<Dimension> nlr_prime = txt * n_face - nxn * n_face; double li_nlr_prime = dot(m_lambda_vector[i_wave], nlr_prime); - if (li_nlr_prime > 0) { + if (li_nlr_prime > 1e-14) { double rhol_prime = rhol; TinyVector<Dimension> rho_ul_prime = txt * rho_ul - nxn * rho_ul; double rho_El_prime = rho_El; @@ -1280,7 +1287,7 @@ class EulerKineticSolverMultiDOrder2 double li_nlr = dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho(cell_id, i_wave)(m_xl[face_id]) * li_nlr; Fr_rho_u[node_id][i_wave] += li_nlr * Fn_rho_u(cell_id, i_wave)(m_xl[face_id]); Fr_rho_E[node_id][i_wave] += Fn_rho_E(cell_id, i_wave)(m_xl[face_id]) * li_nlr; @@ -1291,7 +1298,7 @@ class EulerKineticSolverMultiDOrder2 TinyVector<Dimension> nlr_prime = txt * n_face - nxn * n_face; double li_nlr_prime = dot(m_lambda_vector[i_wave], nlr_prime); - if (li_nlr_prime > 0) { + if (li_nlr_prime > 1e-14) { double rhol_prime = rhol; TinyVector<Dimension> rho_ul_prime = txt * rho_ul - nxn * rho_ul; double rho_El_prime = rho_El; @@ -1378,7 +1385,7 @@ class EulerKineticSolverMultiDOrder2 double li_nlr = dot(m_lambda_vector[i_wave], n_face); - if (li_nlr > 0) { + if (li_nlr > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho(cell_id, i_wave)(m_xl[face_id]) * li_nlr; Fr_rho_u[node_id][i_wave] += li_nlr * Fn_rho_u(cell_id, i_wave)(m_xl[face_id]); Fr_rho_E[node_id][i_wave] += Fn_rho_E(cell_id, i_wave)(m_xl[face_id]) * li_nlr; @@ -1389,7 +1396,7 @@ class EulerKineticSolverMultiDOrder2 TinyVector<Dimension> nlr_prime = txt * n_face - nxn * n_face; double li_nlr_prime = dot(m_lambda_vector[i_wave], nlr_prime); - if (li_nlr_prime > 0) { + if (li_nlr_prime > 1e-14) { Fr_rho[node_id][i_wave] += Fn_rho(cell_id, i_wave)(m_xl[face_id]) * li_nlr_prime; Fr_rho_u[node_id][i_wave] += li_nlr_prime * Fn_rho_u(cell_id, i_wave)(m_xl[face_id]); Fr_rho_E[node_id][i_wave] += Fn_rho_E(cell_id, i_wave)(m_xl[face_id]) * li_nlr_prime; @@ -1735,7 +1742,7 @@ class EulerKineticSolverMultiDOrder2 symmetry_boundary_descriptor_list); PolynomialReconstructionDescriptor reconstruction_descriptor_vector(IntegrationMethodType::cell_center, 1, - boundary_descriptor_list); + symmetry_boundary_descriptor_list); auto reconstruction_scalar = PolynomialReconstruction{reconstruction_descriptor_scalar}.build(DiscreteFunctionP0Vector(p_mesh, Fn_rho), @@ -1751,31 +1758,34 @@ class EulerKineticSolverMultiDOrder2 auto DPk_Fn_rho_u = reconstruction_vector[0]->template get<DiscreteFunctionDPkVector<Dimension, const TinyVector<Dimension>>>(); - const auto& cell_to_face_matrix = m_mesh.connectivity().cellToFaceMatrix(); - const auto& face_cell_is_reversed = p_mesh->connectivity().cellFaceIsReversed(); - - for (CellId cell_id = 0; cell_id < m_mesh.numberOfCells(); ++cell_id) { - const auto cell_to_face = cell_to_face_matrix[cell_id]; - if ((cell_id >= 500) and (cell_id < 510)) { - size_t i_face = 2; // for (size_t i_face = 0; i_face < cell_to_face.size(); ++i_face) { - - FaceId face_id = cell_to_face[i_face]; - - const double sign = face_cell_is_reversed(cell_id, i_face) ? -1 : 1; - const TinyVector<Dimension> n = sign * nl[face_id]; - - // for (size_t i_wave = 0; i_wave < m_lambda_vector.size(); ++i_wave) { - size_t i_wave = 0; - std::cout << "n = " << n << ", x = " << m_xj[cell_id] << ", lambda_1 = " << m_lambda_vector[i_wave] << "\n"; - std::cout << "F^rho_" << i_wave << "(" << cell_id << "," << face_id - << ") = " << DPk_Fn_rho(cell_id, i_wave)(m_xl[face_id]) << "; F^rho_u_" << i_wave << "(" << cell_id - << "," << face_id << ") = " << DPk_Fn_rho_u(cell_id, i_wave)(m_xl[face_id]) << "; F^rho_E_" << i_wave - << "(" << cell_id << "," << face_id << ") = " << DPk_Fn_rho_E(cell_id, i_wave)(m_xl[face_id]) << "\n"; - // } - //} - } - } - exit(0); + // const auto& cell_to_face_matrix = m_mesh.connectivity().cellToFaceMatrix(); + // // const auto& face_cell_is_reversed = p_mesh->connectivity().cellFaceIsReversed(); + + // for (CellId cell_id = 0; cell_id < m_mesh.numberOfCells(); ++cell_id) { + // const auto cell_to_face = cell_to_face_matrix[cell_id]; + // if ((cell_id >= 500) and (cell_id < 510)) { + // size_t i_face = 2; // for (size_t i_face = 0; i_face < cell_to_face.size(); ++i_face) { + + // FaceId face_id = cell_to_face[i_face]; + + // // const double sign = face_cell_is_reversed(cell_id, i_face) ? -1 : 1; + // // const TinyVector<Dimension> n = sign * nl[face_id]; + + // // for (size_t i_wave = 0; i_wave < m_lambda_vector.size(); ++i_wave) { + // size_t i_wave = 0; + // // std::cout << "n = " << n << ", x = " << m_xj[cell_id] << ", lambda_1 = " << m_lambda_vector[i_wave] << + // "\n"; std::cout << "F^rho_" << i_wave << "(" << cell_id << "," << face_id + // << ") = " << DPk_Fn_rho(cell_id, i_wave)(m_xl[face_id]) << "; F^rho_u_" << i_wave << "(" << cell_id + // << "," << face_id << ") = " << DPk_Fn_rho_u(cell_id, i_wave)(m_xl[face_id]) << "; F^rho_E_" << + // i_wave + // << "(" << cell_id << "," << face_id << ") = " << DPk_Fn_rho_E(cell_id, i_wave)(m_xl[face_id]) << + // "\n"; + // // } + // //} + // } + // } + // std::cout << "\n"; + // // exit(0); DiscreteFunctionDPkVector<Dimension, double> Fn_rho_lim = copy(DPk_Fn_rho); DiscreteFunctionDPkVector<Dimension, double> Fn_rho_E_lim = copy(DPk_Fn_rho_E); @@ -1787,6 +1797,19 @@ class EulerKineticSolverMultiDOrder2 vector_limiter(Fn_rho_u, Fn_rho_u_lim); + // const auto& cell_to_face_matrix = m_mesh.connectivity().cellToFaceMatrix(); + // for (CellId cell_id = 500; cell_id < 502; ++cell_id) { + // std::cout << "rho(" << cell_id << ") = " << rho[cell_id] << "\n"; + // std::cout << "rho_u(" << cell_id << ") = " << rho_u[cell_id] << "\n"; + // std::cout << "rho_E(" << cell_id << ") = " << rho_E[cell_id] << "\n"; + // const auto cell_to_face = cell_to_face_matrix[cell_id]; + // FaceId face_id = cell_to_face[0]; + // for (size_t i_wave = 0; i_wave < nb_waves; ++i_wave) { + // std::cout << "F_rho_u(" << i_wave << ") = " << Fn_rho_u_lim(cell_id, i_wave)(m_xl[face_id]) << "\n"; + // } + // } + // std::cout << "\n"; + CellArray<double> deltaLFn_rho{p_mesh->connectivity(), nb_waves}; CellArray<TinyVector<Dimension>> deltaLFn_rho_u{p_mesh->connectivity(), nb_waves}; CellArray<double> deltaLFn_rho_E{p_mesh->connectivity(), nb_waves}; @@ -1866,7 +1889,6 @@ class EulerKineticSolverMultiDOrder2 DiscreteFunctionDPkVector<Dimension, double> Fnp1_rho_lim = copy(DPk_Fnp1_rho); DiscreteFunctionDPkVector<Dimension, double> Fnp1_rho_E_lim = copy(DPk_Fnp1_rho_E); - // const auto& cell_to_face_matrix = m_mesh.connectivity().cellToFaceMatrix(); // for (CellId cell_id = 0; cell_id < m_mesh.numberOfCells(); ++cell_id) { // const auto cell_to_face = cell_to_face_matrix[cell_id]; // if ((cell_id >= 500) and (cell_id < 510)) {