diff --git a/src/main.cpp b/src/main.cpp index f54a7856182f1ff8ace4135115c4e3aea7894931..15f267d921445da0a9455334075ba6808d248bb1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -154,6 +154,7 @@ int main(int argc, char *argv[]) Kokkos::View<double*> gammaj = unknowns.gammaj(); Kokkos::View<double*> cj = unknowns.cj(); Kokkos::View<double*> kj = unknowns.kj(); + Kokkos::View<double*> nuj = unknowns.nuj(); Kokkos::View<Rd*> uj = unknowns.uj(); BlockPerfectGas block_eos(rhoj, ej, pj, gammaj, cj); @@ -312,7 +313,7 @@ int main(int argc, char *argv[]) // DIFFUSION PURE - double dt = 0.4*finite_volumes_diffusion.diffusion_dt(rhoj,kj,cj); + double dt = 0.4*finite_volumes_diffusion.diffusion_dt(rhoj,kj,nuj,cj); if (t+dt > tmax) { dt = tmax-t; } diff --git a/src/scheme/FiniteVolumesDiffusion.hpp b/src/scheme/FiniteVolumesDiffusion.hpp index 49f29b277691b84a699a724893689a242792a136..7b0ffa5e5c1d548e73bf410484edc88dbfe30a54 100644 --- a/src/scheme/FiniteVolumesDiffusion.hpp +++ b/src/scheme/FiniteVolumesDiffusion.hpp @@ -311,6 +311,7 @@ public: KOKKOS_INLINE_FUNCTION double diffusion_dt(const Kokkos::View<const double*>& rhoj, const Kokkos::View<const double*>& kj, + const Kokkos::View<const double*>& nuj, const Kokkos::View<const double*>& cj) const { Kokkos::View<double*> dt_j("dt_j", m_mesh.numberOfCells()); @@ -336,15 +337,25 @@ public: } double sum = 0.; + double sum1 = 0.; for (int m = 0; m < cell_nb_nodes(j); ++m) { sum += kj(cell_nodes(j,m)); + sum1 += nuj(cell_nodes(j,m)); } - if (sum == 0.) { - dt_j[j] = std::numeric_limits<double>::max(); + if (sum < sum1) { + if (sum == 0.) { + dt_j[j] = std::numeric_limits<double>::max(); + } else { + dt_j[j]= 0.5*rhoj(j)*Vj(j)*(1./sum)*minVl; + } } else { - dt_j[j]= 0.5*rhoj(j)*Vj(j)*(1./sum)*minVl; + if (sum1 == 0.) { + dt_j[j] = std::numeric_limits<double>::max(); + } else { + dt_j[j]= 0.5*rhoj(j)*Vj(j)*(1./sum1)*minVl; + } } });