diff --git a/src/main.cpp b/src/main.cpp index d4e0015ffb173771f5e34360709afe3f84412cd6..c86067c92979b7ec72491ff1ec08cc3ca2bb1847 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -284,7 +284,7 @@ int main(int argc, char *argv[]) // NAVIER-STOKES AVEC SPLITTING /* // Etape 1 du splitting - Euler - double dt_euler = 0.9*acoustic_solver.acoustic_dt(Vj, cj) + double dt_euler = 0.9*acoustic_solver.acoustic_dt(Vj, cj); if (t+dt_euler > tmax) { dt_euler = tmax-t; } @@ -319,14 +319,14 @@ int main(int argc, char *argv[]) */ // NAVIER-STOKES SANS SPLITTING - + double dt = 0.9*finite_volumes_diffusion.diffusion_dt(rhoj, kj,nuj, cj, nuL, nuR, kL,kR); if (t+dt > tmax) { dt = tmax-t; } no_splitting.computeNextStep(t,dt, unknowns); t += dt; - + block_eos.updatePandCFromRhoE(); diff --git a/src/mesh/Mesh.hpp b/src/mesh/Mesh.hpp index 4313b3f73e4d2ef0a37feb0312c041f67c859fd9..007c679443e626e49b3aac3c4b5fa9d9af4a61a0 100644 --- a/src/mesh/Mesh.hpp +++ b/src/mesh/Mesh.hpp @@ -75,7 +75,7 @@ public: // pas constant - + /* Mesh(const Connectivity& connectivity) : m_connectivity(connectivity), m_xr("xr", connectivity.numberOfNodes()), @@ -91,7 +91,7 @@ public: m_xr[r][0] = a + r*delta_x; }); } - + */ // pas non constant /* @@ -123,9 +123,9 @@ public: } */ - + // pas aleatoire - /* + Mesh(const Connectivity& connectivity) : m_connectivity(connectivity), m_xr("xr", connectivity.numberOfNodes()), @@ -141,24 +141,27 @@ public: m_xr[connectivity.numberOfNodes()-1][0] = b; std::random_device rd; std::mt19937 mt(rd()); - std::uniform_real_distribution<double> dist(-h/2.1,h/2.1); + std::uniform_real_distribution<double> dist(-h/2.1,h/2.1); - // creation fichier pour tracer h en fonction de x - std::ofstream fout("alea"); - for (int r=1; r<connectivity.numberOfNodes()-1; ++r){ const double delta_xr = dist(mt); m_xr[r][0] = r*h + delta_xr; - fout << m_xr[r][0] << ' ' << m_xr[r][0]-m_xr[r-1][0] << '\n'; - //std::cout << m_xr[r][0] << std::endl; - } - - fout.close(); - - std::exit(0); + } + + // creation fichier pour tracer h en fonction de x + //std::ofstream fout("alea"); + //for (int r=1; r<connectivity.numberOfNodes()-1; ++r){ + //const double delta_xr = dist(mt); + //m_xr[r][0] = r*h + delta_xr; + //fout << m_xr[r][0] << ' ' << m_xr[r][0]-m_xr[r-1][0] << '\n'; + //std::cout << m_xr[r][0] << std::endl; + //} + //fout.close(); + //std::exit(0); + } - */ + ~Mesh() { diff --git a/src/scheme/FiniteVolumesEulerUnknowns.hpp b/src/scheme/FiniteVolumesEulerUnknowns.hpp index 3cbf6e542e560e3d9041e3b28b52d934b416ae0d..04a1d1afc13f62c77abb3348c49dadbad442431f 100644 --- a/src/scheme/FiniteVolumesEulerUnknowns.hpp +++ b/src/scheme/FiniteVolumesEulerUnknowns.hpp @@ -353,7 +353,7 @@ public: Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ // Differents k (xi) //m_kj[j] = xj[j][0]; - m_kj[j] = 0.5; + m_kj[j] = 0.005; // TAC @@ -401,15 +401,15 @@ public: }); Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ - m_PTj(j) = 0; + m_PTj(j) = m_pj(j); }); // Conditions aux bords de Dirichlet sur u et k m_uL[0] = zero; m_uR[0] = zero; - m_kL[0] = 0.5; - m_kR[0] = 0.5; + m_kL[0] = 0.005; + m_kR[0] = 0.005; Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ diff --git a/src/scheme/NoSplitting.hpp b/src/scheme/NoSplitting.hpp index 59ed0203d57d7abcd9a3506491b375c44ea8760e..b971ef440318acca9377d9d3a95a763e2a531fd6 100644 --- a/src/scheme/NoSplitting.hpp +++ b/src/scheme/NoSplitting.hpp @@ -314,9 +314,12 @@ public: Kokkos::View<double*> PTj = unknowns.PTj(); Kokkos::View<double*> kL = unknowns.kL(); Kokkos::View<double*> kR = unknowns.kR(); + Kokkos::View<Rd*> uL = unknowns.uL(); + Kokkos::View<Rd*> uR = unknowns.uR(); const Kokkos::View<const Rd*> xj = m_mesh_data.xj(); const Kokkos::View<const double*> Vj = m_mesh_data.Vj(); + const Kokkos::View<const double*> Vl = m_mesh_data.Vl(); const Kokkos::View<const Rd**> Cjr = m_mesh_data.Cjr(); Kokkos::View<Rd*> xr = m_mesh.xr(); @@ -324,23 +327,6 @@ public: const Kokkos::View<const unsigned short*> cell_nb_nodes = m_connectivity.cellNbNodes(); - - Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) { - double sum = 0; - for (int m=0; m<cell_nb_nodes(j); ++m) { - //sum += uj[cell_nodes(j,m)][0]; - sum += (uj(cell_nodes(j,m)), Cjr(cell_nodes(j,m), m)); - } - - if (j == 0) { - PTj(j) = pj(j) - kL(0)*sum/Vj(j); - } else if (j == m_mesh.numberOfCells()-1) { - PTj(j) = pj(j) - kR(0)*sum/Vj(j); - } else { - PTj(j) = pj(j) - kj(j)*sum/Vj(j); - } - - }); // Calcule les flux computeExplicitFluxes(xr, xj, kj, rhoj, uj, PTj, cj, Vj, Cjr, t); @@ -363,7 +349,9 @@ public: // ajout second membre pour kidder (k cst) Ej[j] -= (dt*inv_mj[j])*Vj(j)*((kj(j)*t*t)/(((50./9.)-t*t)*((50./9.)-t*t))); - + // ajout second membre pour kidder (k = x) + //uj[j][0] += (dt*inv_mj[j])*Vj(j)*(t/((50./9.)-t*t)); + //Ej[j] -= (dt*inv_mj[j])*Vj(j)*((2.*xj[j][0]*t*t)/(((50./9.)-t*t)*((50./9.)-t*t))); }); // Calcul de e par la formule e = E-0.5 u^2 @@ -386,11 +374,33 @@ public: rhoj[j] = mj[j]/Vj[j]; }); + // Calcul de PT + Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) { + double sum = 0; + double sum1 = 0; + for (int m=0; m<cell_nb_nodes(j); ++m) { + sum += (uj(cell_nodes(j,m)), Cjr(cell_nodes(j,m), m)); + sum1 += Vj(cell_nodes(j,m)); + } + + if (j == 0) { + //PTj(j) = pj(j) - kj(j)*(uj[j][0]-uL[0][0])/Vl(0); + PTj(j) = pj(j) + kj(j)*(t/((50./9.)-t*t)); + } else if (j == m_mesh.numberOfCells()-1) { + PTj(j) = pj(j) + kj(j)*(t/((50./9.)-t*t)); + //PTj(j) = pj(j) - kj(j)*(uR[0][0]-uj[j][0])/Vl(m_mesh.numberOfFaces()-1); + } else { + //PTj(j) = pj(j) - kj(j)*sum/Vl(j); + PTj(j) = pj(j) - kj(j)*2.*sum/sum1; + } + + }); + // Mise a jour de k /* Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) { kj(j) = xj[j][0]; - + }); */ }