diff --git a/src/mesh/Mesh.hpp b/src/mesh/Mesh.hpp index a5ce53cca535cdffc3cab73058b848de2c8ca9ec..2a9bb022d4a9b5f67262a68653980480f821563c 100644 --- a/src/mesh/Mesh.hpp +++ b/src/mesh/Mesh.hpp @@ -50,7 +50,7 @@ public: // pas constant - /* + Mesh(const Connectivity& connectivity) : m_connectivity(connectivity), m_xr("xr", connectivity.numberOfNodes()) @@ -60,11 +60,11 @@ public: m_xr[r][0] = r*delta_x; }); } -*/ + // pas non constant - + /* Mesh(const Connectivity& connectivity) : m_connectivity(connectivity), m_xr("xr", connectivity.numberOfNodes()) @@ -85,7 +85,7 @@ public: } }); } - + */ ~Mesh() { diff --git a/src/scheme/FiniteVolumesDiffusion.hpp b/src/scheme/FiniteVolumesDiffusion.hpp index 04558707e8ee74b1d813f511a459cb56ecac5db1..6e22152562978ae0f00ca052a409d278d88a1eae 100644 --- a/src/scheme/FiniteVolumesDiffusion.hpp +++ b/src/scheme/FiniteVolumesDiffusion.hpp @@ -76,8 +76,12 @@ private: // Calcule un Fl Kokkos::View<Rdd*> computeFl(const Kokkos::View<const Rd**>& Cjr, - const Kokkos::View<const Rd*>& uj, - const Kokkos::View<const double*>& kj) { + const Kokkos::View<const Rd*>& uj, + const Kokkos::View<const double*>& kj, + const Kokkos::View<const Rd*>& uL, + const Kokkos::View<const Rd*>& uR, + const Kokkos::View<const double*>& kL, + const Kokkos::View<const double*>& kR) { const Kokkos::View<const unsigned int**>& face_cells = m_connectivity.faceCells(); @@ -101,6 +105,20 @@ private: m_Fl(l) = ((sum2/face_nb_cells(l))/Vl(l))*sum; + + // Conditions aux bords + + int cell_here = face_cells(0,0); + int local_face_number_in_cell = face_cell_local_face(0,0); + //m_Fl(0) = -(kL(0) + kj(cell_here))*0.5*(tensorProduct(uj(cell_here), Cjr(cell_here, local_face_number_in_cell)) - tensorProduct(uL(0), Cjr(cell_here, local_face_number_in_cell))); + m_Fl(0) = -(kL(0) + kj(0))*0.5*(tensorProduct(uj(0), Cjr(0, 0))); + + cell_here = face_cells(m_mesh.numberOfFaces()-1,0); + local_face_number_in_cell = face_cell_local_face(m_mesh.numberOfFaces()-1,0); + //m_Fl(m_mesh.numberOfFaces()-1) = -(kR(0) + kj(cell_here))*0.5*(tensorProduct(uj(cell_here), Cjr(cell_here, local_face_number_in_cell)) - tensorProduct(uR(0), Cjr(cell_here, local_face_number_in_cell))); + m_Fl(m_mesh.numberOfFaces()-1) = -(kR(0) + kj(m_mesh.numberOfCells()-1))*0.5*(tensorProduct(uj(m_mesh.numberOfCells()-1), Cjr(m_mesh.numberOfCells()-1,1))); + + }); return m_Fl ; @@ -161,9 +179,13 @@ private: KOKKOS_INLINE_FUNCTION void computeExplicitFluxes(const Kokkos::View<const Rd*>& uj, const Kokkos::View<const Rd**>& Cjr, - const Kokkos::View<const double*>& kj) { + const Kokkos::View<const double*>& kj, + const Kokkos::View<const Rd*>& uL, + const Kokkos::View<const Rd*>& uR, + const Kokkos::View<const double*>& kL, + const Kokkos::View<const double*>& kR) { Kokkos::View<Rdd*> Fl = m_Fl ; - Fl = computeFl (Cjr, uj, kj); + Fl = computeFl (Cjr, uj, kj, uL, uR, kL, kR); Kokkos::View<Rd*> Gl = m_Gl ; Gl = computeGl (uj, Fl ); } @@ -247,12 +269,20 @@ public: const Kokkos::View<const double*> kj = unknowns.kj(); + Kokkos::View<Rd*> uL = unknowns.uL(); + Kokkos::View<Rd*> uR = unknowns.uR(); + Kokkos::View<double*> kL = unknowns.kL(); + Kokkos::View<double*> kR = unknowns.kR(); + const Kokkos::View<const Rd*> xj = m_mesh_data.xj(); const Kokkos::View<const double*> Vj = m_mesh_data.Vj(); const Kokkos::View<const Rd**> Cjr = m_mesh_data.Cjr(); + + + // Calcule les flux - computeExplicitFluxes(uj, Cjr, kj); + computeExplicitFluxes(uj, Cjr, kj, uL, uR, kL, kR); const Kokkos::View<const Rdd*> Fl = m_Fl ; const Kokkos::View<const Rd *> Gl = m_Gl ; diff --git a/src/scheme/FiniteVolumesEulerUnknowns.hpp b/src/scheme/FiniteVolumesEulerUnknowns.hpp index c00df47701bd190d8145f9b1e587127acd2a0b90..5ea0d339006a53e47a316bd04faa7bebf7dea5e6 100644 --- a/src/scheme/FiniteVolumesEulerUnknowns.hpp +++ b/src/scheme/FiniteVolumesEulerUnknowns.hpp @@ -27,6 +27,10 @@ private: Kokkos::View<double*> m_inv_mj; Kokkos::View<double*> m_kj; Kokkos::View<Rd*> m_Sj; + Kokkos::View<Rd*> m_uL; + Kokkos::View<Rd*> m_uR; + Kokkos::View<double*> m_kL; + Kokkos::View<double*> m_kR; public: Kokkos::View<double*> rhoj() @@ -134,11 +138,53 @@ public: return m_Sj; } - const Kokkos::View<const double*> Sj() const + const Kokkos::View<const Rd*> Sj() const { return m_Sj; } + Kokkos::View<Rd*> uL() + { + return m_uL; + } + + const Kokkos::View<const Rd*> uL() const + { + return m_uL; + } + + Kokkos::View<Rd*> uR() + { + return m_uR; + } + + const Kokkos::View<const Rd*> uR() const + { + return m_uR; + } + + Kokkos::View<double*> kL() + { + return m_kL; + } + + const Kokkos::View<const double*> kL() const + { + return m_kL; + } + + Kokkos::View<double*> kR() + { + return m_kR; + } + + const Kokkos::View<const double*> kR() const + { + return m_kR; + } + + + // --- Acoustic Solver --- // void initializeSod() @@ -211,7 +257,6 @@ void initializeSod() Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ m_gammaj[j] = 2.; - }); BlockPerfectGas block_eos(m_rhoj, m_ej, m_pj, m_gammaj, m_cj); @@ -238,7 +283,15 @@ void initializeSod() Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ m_Sj[j] = std::sin(pi*xj[j][0])*(pi*pi*xj[j][0]-1.) - std::cos(xj[j][0]*pi)*pi; - }); + }); + + // Conditions aux bords de Dirichlet sur u et k + + m_uL[0] = zero; + m_uR[0] = zero; + m_kL[0] = 2.; + m_kR[0] = 2.; + } @@ -255,7 +308,12 @@ void initializeSod() m_mj("mj",m_mesh.numberOfCells()), m_inv_mj("inv_mj",m_mesh.numberOfCells()), m_kj("kj",m_mesh.numberOfCells()), - m_Sj("Sj",m_mesh.numberOfCells()) + m_Sj("Sj",m_mesh.numberOfCells()), + m_uL("uL", 1), + m_uR("uR", 1), + m_kL("kL", 1), + m_kR("kR", 1) + { ; }