From f51819fa84b751b528258011940594050bff3f52 Mon Sep 17 00:00:00 2001 From: Fanny CHOPOT <fanny.chopot.ocre@cea.fr> Date: Fri, 18 May 2018 11:40:46 +0200 Subject: [PATCH] Modifs dans boucle programme principal et CL sur k --- src/main.cpp | 32 ++++++++++++++++------- src/mesh/Mesh.hpp | 8 +++--- src/scheme/FiniteVolumesEulerUnknowns.hpp | 20 +++++++------- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index e939a34cd..a3ab89c9a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -156,33 +156,45 @@ int main(int argc, char *argv[]) while((t<tmax) and (iteration<itermax)) { // ETAPE 1 DU SPLITTING - EULER - + double dt_euler = 0.4*acoustic_solver.acoustic_dt(Vj, cj); if (t+dt_euler > tmax) { dt_euler = tmax-t; } acoustic_solver.computeNextStep(t,dt_euler, unknowns); - + t += dt_euler; + // ETAPE 2 DU SPLITTING - DIFFUSION - + double dt_diff = finite_volumes_diffusion.diffusion_dt(rhoj, kj); - std::cout << dt_euler << ' ' << dt_diff << std::endl; + if (dt_euler <= dt_diff) { dt_diff = dt_euler; finite_volumes_diffusion.computeNextStep(t, dt_diff, unknowns); t += dt_euler; } else { double t_diff = t + dt_diff; - while (t + dt_euler > t_diff) { + while ((t + dt_euler > t_diff) and (t_diff < tmax)) { finite_volumes_diffusion.computeNextStep(t_diff, dt_diff, unknowns); dt_diff = 0.4*finite_volumes_diffusion.diffusion_dt(rhoj, kj); t_diff += dt_diff; - std::cout << t_diff << '\n'; } t = t_diff; } + + // DIFFUSION PURE + + /* + double dt = 0.4*finite_volumes_diffusion.diffusion_dt(rhoj,kj); + if (t+dt > tmax) { + dt = tmax-t; + } + finite_volumes_diffusion.computeNextStep(t, dt, unknowns); + t += dt; + */ + block_eos.updatePandCFromRhoE(); ++iteration; @@ -228,7 +240,7 @@ int main(int argc, char *argv[]) { // gnuplot output for density const Kokkos::View<const Rd*> xj = mesh_data.xj(); const Kokkos::View<const Rd*> uj = unknowns.uj(); - std::ofstream fout("resultat rho"); + std::ofstream fout("rho ns"); fout.precision(15); for (size_t j=0; j<mesh.numberOfCells(); ++j) { fout << xj[j][0] << ' ' << rhoj[j] << '\n'; @@ -238,8 +250,8 @@ int main(int argc, char *argv[]) { // gnuplot output for vitesse const Kokkos::View<const Rd*> xj = mesh_data.xj(); const Kokkos::View<const Rd*> uj = unknowns.uj(); - // double pi = 4.*std::atan(1.); - std::ofstream fout("resultat u"); + //double pi = 4.*std::atan(1.); + std::ofstream fout("u ns"); fout.precision(15); for (size_t j=0; j<mesh.numberOfCells(); ++j) { //fout << xj[j][0] << ' ' << uj[j][0] << ' ' << std::sin(pi*xj[j][0])*std::exp(-2.*pi*pi*0.2) <<'\n'; //cas k constant @@ -252,7 +264,7 @@ int main(int argc, char *argv[]) const Kokkos::View<const Rd*> xj = mesh_data.xj(); const Kokkos::View<const double*> Ej = unknowns.Ej(); //double pi = 4.*std::atan(1.); - std::ofstream fout("resultat E"); + std::ofstream fout("E ns"); fout.precision(15); for (size_t j=0; j<mesh.numberOfCells(); ++j) { //fout << xj[j][0] << ' ' << Ej[j] << ' ' << (-(std::cos(pi*xj[j][0])*std::cos(pi*xj[j][0]))+(std::sin(pi*xj[j][0])*std::sin(pi*xj[j][0])))*0.5*(std::exp(-4.*pi*pi*0.2)-1.) + 2. <<'\n'; // cas k constant diff --git a/src/mesh/Mesh.hpp b/src/mesh/Mesh.hpp index 39539dbae..68c35a131 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/FiniteVolumesEulerUnknowns.hpp b/src/scheme/FiniteVolumesEulerUnknowns.hpp index c19955de5..f74eebf7c 100644 --- a/src/scheme/FiniteVolumesEulerUnknowns.hpp +++ b/src/scheme/FiniteVolumesEulerUnknowns.hpp @@ -183,7 +183,7 @@ public: return m_kR; } - + // --- Acoustic Solver --- void initializeSod() @@ -218,7 +218,8 @@ public: block_eos.updateEandCFromRhoP(); Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ - m_Ej[j] = m_ej[j]+0.5*(m_uj[j],m_uj[j]); + //m_Ej[j] = m_ej[j]+0.5*(m_uj[j],m_uj[j]); + m_Ej[j] = 2.; }); const Kokkos::View<const double*> Vj = m_mesh_data.Vj(); @@ -231,20 +232,21 @@ public: }); Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ - m_kj[j] = 1; + m_kj[j] = 0.0002*0.5; }); // Conditions aux bords de Dirichlet sur u et k m_uL[0] = zero; m_uR[0] = zero; - m_kL[0] = 1.; - m_kR[0] = 1.; + m_kL[0] = 0.0002*0.5; + m_kR[0] = 0.0002*0.5; } + + /* - - /* DIFFUSION PURE + // DIFFUSION PURE void initializeSod() { @@ -301,8 +303,8 @@ public: m_kR[0] = 1.; } - - */ +*/ + FiniteVolumesEulerUnknowns(const MeshDataType& mesh_data) -- GitLab