From b522d128744cb7aaf215b13965b61c3464e6e4d3 Mon Sep 17 00:00:00 2001
From: Fanny CHOPOT <fanny.chopot.ocre@cea.fr>
Date: Fri, 18 May 2018 14:21:08 +0200
Subject: [PATCH] modifs dans la boucle temps, moins d'oscillations

---
 src/main.cpp                              | 20 +++++++++++++-------
 src/mesh/Mesh.hpp                         |  1 -
 src/scheme/FiniteVolumesDiffusion.hpp     | 23 ++++++++++++++++++++++-
 src/scheme/FiniteVolumesEulerUnknowns.hpp |  6 +++---
 4 files changed, 38 insertions(+), 12 deletions(-)

diff --git a/src/main.cpp b/src/main.cpp
index a3ab89c9a..e5f4b0b7f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -172,10 +172,10 @@ int main(int argc, char *argv[])
       if (dt_euler <= dt_diff) {
 	dt_diff = dt_euler;
 	finite_volumes_diffusion.computeNextStep(t, dt_diff, unknowns);
-	t += dt_euler;
+	t += dt_diff;
       } else {
-	double t_diff = t + dt_diff;
-	while ((t + dt_euler > t_diff) and (t_diff < tmax)) {
+	double t_diff = t;
+	while (t + dt_euler > t_diff) {
 	  finite_volumes_diffusion.computeNextStep(t_diff, dt_diff, unknowns);
 	  dt_diff = 0.4*finite_volumes_diffusion.diffusion_dt(rhoj, kj);
 	  t_diff += dt_diff;
@@ -230,8 +230,14 @@ int main(int argc, char *argv[])
     double cons = 0.;
     cons = finite_volumes_diffusion.conservatif(unknowns);
 
-    std::cout << "* " << rang::style::underline << "Resultat conservativite" << rang::style::reset
+    std::cout << "* " << rang::style::underline << "Resultat conservativite E" << rang::style::reset
 	      << ":  " << rang::fgB::green << cons << rang::fg::reset << " \n";
+
+    double cons1 = 0.;
+    cons1 = finite_volumes_diffusion.conservatif_mvt(unknowns);
+
+    std::cout << "* " << rang::style::underline << "Resultat conservativite rho u" << rang::style::reset
+	      << ":  " << rang::fgB::green << cons1 << rang::fg::reset << " \n";
     
 
     //method_cost_map["AcousticSolverWithMesh"] = timer.seconds();
@@ -240,7 +246,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("rho ns");
+     std::ofstream fout("rho nounif");
      fout.precision(15);
      for (size_t j=0; j<mesh.numberOfCells(); ++j) {
        fout << xj[j][0] << ' ' << rhoj[j] << '\n';
@@ -251,7 +257,7 @@ int main(int argc, char *argv[])
      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("u ns");
+     std::ofstream fout("u nounif");
      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
@@ -264,7 +270,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("E ns");
+     std::ofstream fout("E nounif");
      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 68c35a131..41e7b5b7f 100644
--- a/src/mesh/Mesh.hpp
+++ b/src/mesh/Mesh.hpp
@@ -86,7 +86,6 @@ public:
       });
   }
   
-
   ~Mesh()
   {
     ;
diff --git a/src/scheme/FiniteVolumesDiffusion.hpp b/src/scheme/FiniteVolumesDiffusion.hpp
index 833e1e50d..db4daf818 100644
--- a/src/scheme/FiniteVolumesDiffusion.hpp
+++ b/src/scheme/FiniteVolumesDiffusion.hpp
@@ -414,7 +414,28 @@ public:
     return sum;
    
   }
-      
+     
+
+  // Verifie la conservativite de quantite de mvt
+
+  double conservatif_mvt(UnknownsType& unknowns) {
+   
+    Kokkos::View<double*> rhoj = unknowns.rhoj();
+    Kokkos::View<Rd*> uj = unknowns.uj();
+
+    const Kokkos::View<const double*> Vj = m_mesh_data.Vj();
+
+    const Kokkos::View<const Rd*> xj = m_mesh_data.xj();
+
+    double sum = 0.;
+
+    for (size_t j=0; j<m_mesh.numberOfCells(); ++j) {
+      sum += Vj[j]*rhoj[j]*uj[j][0];
+    }
+
+    return sum;
+   
+  }
   
 };
 
diff --git a/src/scheme/FiniteVolumesEulerUnknowns.hpp b/src/scheme/FiniteVolumesEulerUnknowns.hpp
index f74eebf7c..fe4b0a30d 100644
--- a/src/scheme/FiniteVolumesEulerUnknowns.hpp
+++ b/src/scheme/FiniteVolumesEulerUnknowns.hpp
@@ -232,15 +232,15 @@ public:
       });
 
     Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){
-  	m_kj[j] = 0.0002*0.5; 
+  	m_kj[j] = 1.; 
       });
 
      // Conditions aux bords de Dirichlet sur u et k
     
     m_uL[0] = zero;
     m_uR[0] = zero;
-    m_kL[0] = 0.0002*0.5;
-    m_kR[0] = 0.0002*0.5;
+    m_kL[0] = 1.;
+    m_kR[0] = 1.;
   }
 
   
-- 
GitLab