88
99#include " flux_base.hpp"
1010
11+ #define VERBOSE_FLUX
12+
1113namespace samurai {
1214 /* *
1315 * Implementation of a Rusanov flux
@@ -56,6 +58,22 @@ namespace samurai {
5658 const auto m2_L = qL (Indices::ALPHA2_RHO2_INDEX);
5759 const auto m2E2_L = qL (Indices::ALPHA2_RHO2_E2_INDEX);
5860
61+ // Verify if it is admissible
62+ #ifdef VERBOSE_FLUX
63+ if (m1_L < static_cast <Number>(0.0 )) {
64+ throw std::runtime_error (std::string (" Negative mass phase 1 left state: " + std::to_string (m1_L)));
65+ }
66+ if (m2_L < static_cast <Number>(0.0 )) {
67+ throw std::runtime_error (std::string (" Negative mass phase 2 left state: " + std::to_string (m2_L)));
68+ }
69+ if (alpha1_L < static_cast <Number>(0.0 )) {
70+ throw std::runtime_error (std::string (" Negative volume fraction phase 1 left state: " + std::to_string (alpha1_L)));
71+ }
72+ else if (alpha1_L > static_cast <Number>(1.0 )) {
73+ throw std::runtime_error (std::string (" Exceeding volume fraction phase 1 left state: " + std::to_string (alpha1_L)));
74+ }
75+ #endif
76+
5977 // Phase 1
6078 const auto inv_m1_L = static_cast <Number>(1.0 )/m1_L; /* --- TODO: Add treatment for vanishing volume fraction ---*/
6179 const auto vel1_L_d = qL (Indices::ALPHA1_RHO1_U1_INDEX + curr_d)*inv_m1_L; /* --- TODO: Add treatment for vanishing volume fraction ---*/
@@ -68,6 +86,11 @@ namespace samurai {
6886 }
6987 const auto p1_L = this ->EOS_phase1 .pres_value_Rhoe (rho1_L, e1_L);
7088 const auto c1_L = this ->EOS_phase1 .c_value_RhoP (rho1_L, p1_L);
89+ #ifdef VERBOSE_FLUX
90+ if (std::isnan (c1_L)) {
91+ throw std::runtime_error (std::string (" NaN speed of sound phase 1 left state" ));
92+ }
93+ #endif
7194
7295 // Phase 2
7396 const auto inv_m2_L = static_cast <Number>(1.0 )/m2_L; /* --- TODO: Add treatment for vanishing volume fraction ---*/
@@ -81,6 +104,11 @@ namespace samurai {
81104 }
82105 const auto p2_L = this ->EOS_phase2 .pres_value_Rhoe (rho2_L, e2_L);
83106 const auto c2_L = this ->EOS_phase2 .c_value_RhoP (rho2_L, p2_L);
107+ #ifdef VERBOSE_FLUX
108+ if (std::isnan (c2_L)) {
109+ throw std::runtime_error (std::string (" NaN speed of sound phase 2 left state" ));
110+ }
111+ #endif
84112
85113 /* --- Right state ---*/
86114 // Pre-fetch variables that will be used several times so as to exploit possible vectorization
@@ -91,6 +119,22 @@ namespace samurai {
91119 const auto m2_R = qR (Indices::ALPHA2_RHO2_INDEX);
92120 const auto m2E2_R = qR (Indices::ALPHA2_RHO2_E2_INDEX);
93121
122+ // Verify if it is admissible
123+ #ifdef VERBOSE_FLUX
124+ if (m1_R < static_cast <Number>(0.0 )) {
125+ throw std::runtime_error (std::string (" Negative mass phase 1 right state: " + std::to_string (m1_R)));
126+ }
127+ if (m2_R < static_cast <Number>(0.0 )) {
128+ throw std::runtime_error (std::string (" Negative mass phase 2 right state: " + std::to_string (m2_R)));
129+ }
130+ if (alpha1_R < static_cast <Number>(0.0 )) {
131+ throw std::runtime_error (std::string (" Negative volume fraction phase 1 right state: " + std::to_string (alpha1_R)));
132+ }
133+ else if (alpha1_R > static_cast <Number>(1.0 )) {
134+ throw std::runtime_error (std::string (" Exceeding volume fraction phase 1 right state: " + std::to_string (alpha1_R)));
135+ }
136+ #endif
137+
94138 // Phase 1
95139 const auto inv_m1_R = static_cast <Number>(1.0 )/m1_R; /* --- TODO: Add treatment for vanishing volume fraction ---*/
96140 const auto vel1_R_d = qR (Indices::ALPHA1_RHO1_U1_INDEX + curr_d)*inv_m1_R; /* --- TODO: Add treatment for vanishing volume fraction ---*/
@@ -103,6 +147,11 @@ namespace samurai {
103147 }
104148 const auto p1_R = this ->EOS_phase1 .pres_value_Rhoe (rho1_R, e1_R);
105149 const auto c1_R = this ->EOS_phase1 .c_value_RhoP (rho1_R, p1_R);
150+ #ifdef VERBOSE_FLUX
151+ if (std::isnan (c1_R)) {
152+ throw std::runtime_error (std::string (" NaN speed of sound phase 1 right state" ));
153+ }
154+ #endif
106155
107156 // Phase 2
108157 const auto inv_m2_R = static_cast <Number>(1.0 )/m2_R; /* --- TODO: Add treatment for vanishing volume fraction ---*/
@@ -116,6 +165,11 @@ namespace samurai {
116165 }
117166 const auto p2_R = this ->EOS_phase2 .pres_value_Rhoe (rho2_R, e2_R);
118167 const auto c2_R = this ->EOS_phase2 .c_value_RhoP (rho2_R, p2_R);
168+ #ifdef VERBOSE_FLUX
169+ if (std::isnan (c2_R)) {
170+ throw std::runtime_error (std::string (" NaN speed of sound phase 2 right state" ));
171+ }
172+ #endif
119173
120174 /* --- Compute the flux ---*/
121175 const auto lambda = std::max (std::max (std::abs (vel1_L_d) + c1_L, std::abs (vel1_R_d) + c1_R),
0 commit comments