LCOV - code coverage report
Current view: top level - src/Solver/Local/Riemann - Riemann.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 87.0 % 54 47
Test Date: 2026-03-09 13:26:47 Functions: 88.2 % 17 15

            Line data    Source code
       1              : #ifndef SOLVER_LOCAL_RIEMANN_H
       2              : #define SOLVER_LOCAL_RIEMANN_H
       3              : 
       4              : #include "Set/Base.H"
       5              : #include "Set/Set.H"
       6              : #include "Model/Gas/Gas.H"
       7              : #include <memory>
       8              : 
       9              : namespace Solver
      10              : {
      11              : namespace Local
      12              : {
      13              : namespace Riemann
      14              : {
      15              : struct State {
      16              :     Set::Scalar rho = NAN;
      17              :     Set::Scalar M_normal = NAN;
      18              :     Set::Scalar M_tangent = NAN;
      19              :     Set::Scalar E = NAN;
      20              :     // Construtor for convenience
      21              :     State() { rho = 0.0; M_normal = 0.0, M_tangent = 0.0; E = 0.0;}
      22    279746024 :     State(Set::Scalar a_rho, Set::Scalar a_M_normal, Set::Scalar a_M_tangent, Set::Scalar a_E)
      23    279746024 :         : rho(a_rho), M_normal(a_M_normal), M_tangent(a_M_tangent), E(a_E) {}
      24    158822400 :     State(Set::Patch<const Set::Scalar> density_mf, Set::Patch<const Set::Scalar> momentum_mf, Set::Patch<const Set::Scalar> energy_mf, int i, int j, int k, int direction)
      25    158822400 :     {
      26    158822400 :         rho = density_mf(i,j,k);
      27    158822400 :         if (direction == 0)
      28              :         {
      29     79411200 :             M_normal = momentum_mf(i,j,k,0);
      30     79411200 :             M_tangent = momentum_mf(i,j,k,1);
      31              :         }
      32     79411200 :         else if (direction == 1)
      33              :         {
      34     79411200 :             M_normal = momentum_mf(i,j,k,1);
      35     79411200 :             M_tangent = momentum_mf(i,j,k,0);
      36              :         }
      37              :         else
      38              :         {
      39            0 :             Util::Abort(INFO, "Not supported yet");
      40              :         }
      41    158822400 :         E = energy_mf(i,j,k);
      42    158822400 :     }
      43              : 
      44              : 
      45            0 :     friend std::ostream &operator<<(std::ostream &os, const State &state) 
      46              :     {
      47            0 :         os << "rho=" << state.rho << ", "; 
      48            0 :         os << "Mn=" << state.M_normal << ", ";
      49            0 :         os << "Mt=" << state.M_tangent << ", ";
      50            0 :         os << "E=" << state.E << ", ";
      51              :         // do stuf
      52            0 :         return os;
      53              :     }
      54              :     void operator += (const State &a)
      55              :     {
      56              :         rho += a.rho; M_normal += a.M_normal; M_tangent += a.M_tangent; E += a.E; 
      57              :     };
      58              :     void operator -= (const State &a)
      59              :     {
      60              :         rho -= a.rho; M_normal -= a.M_normal; M_tangent -= a.M_tangent; E -= a.E; 
      61              :     };
      62      8401992 :     void operator *= (const Set::Scalar alpha)
      63              :     {
      64      8401992 :         rho *= alpha; M_normal *= alpha; M_tangent *= alpha; E *= alpha; 
      65      8401992 :     };
      66              :     void operator /= (const Set::Scalar alpha)
      67              :     {
      68              :         rho /= alpha; M_normal /= alpha; M_tangent /= alpha; E /= alpha; 
      69              :     };
      70              :     friend State operator + (const State &a, const State &b)
      71              :     {
      72              :         return State(a.rho+b.rho, a.M_normal+b.M_normal, a.M_tangent+b.M_tangent, a.E+b.E);
      73              :     }
      74     95717648 :     friend State operator - (const State &a, const State &b)
      75              :     {
      76     95717648 :         return State(a.rho-b.rho, a.M_normal-b.M_normal, a.M_tangent-b.M_tangent, a.E-b.E);
      77              :     }
      78     87813192 :     friend State operator * (const Set::Scalar alpha, const State &b)
      79              :     {
      80     87813192 :         return State(b.rho*alpha, b.M_normal*alpha, b.M_tangent*alpha, b.E*alpha);
      81              :     }
      82              :     friend State operator * (const State &b, const Set::Scalar alpha)
      83              :     {
      84              :         return State(b.rho*alpha, b.M_normal*alpha, b.M_tangent*alpha, b.E*alpha);
      85              :     }
      86     79411200 :     friend State operator / (const State &b, const Set::Scalar alpha)
      87              :     {
      88     79411200 :         return State(b.rho/alpha, b.M_normal/alpha, b.M_tangent/alpha, b.E/alpha);
      89              :     }
      90              : };
      91              : 
      92              : struct Flux {
      93              :     Set::Scalar mass;
      94              :     Set::Scalar momentum_normal;
      95              :     Set::Scalar momentum_tangent;
      96              :     Set::Scalar energy;
      97     88985600 :     Flux() : mass(0.0), momentum_normal(0.0), momentum_tangent(0.0), energy(0.0) {}
      98    133857528 :     Flux(Set::Scalar a_mass, Set::Scalar a_momentum_normal, Set::Scalar a_momentum_tangent, Set::Scalar a_energy) :
      99    133857528 :         mass(a_mass), momentum_normal(a_momentum_normal),
     100    133857528 :         momentum_tangent(a_momentum_tangent), energy(a_energy) {}
     101              : 
     102     16306448 :     Flux(const State &in) :
     103     16306448 :         mass(in.rho),
     104     16306448 :         momentum_normal(in.M_normal),
     105     16306448 :         momentum_tangent(in.M_tangent),
     106     16306448 :         energy(in.E) {}
     107              : 
     108              :     friend std::ostream &operator<<(std::ostream &os, const Flux &flux) 
     109              :     {
     110              :         os << "mass=" << flux.mass << ", "; 
     111              :         os << "Mn=" << flux.momentum_normal << ", ";
     112              :         os << "Mt=" << flux.momentum_tangent << ", ";
     113              :         os << "E=" << flux.energy << ", ";
     114              :         // do stuff
     115              :         return os;
     116              :     }
     117              :     void operator += (const Flux &a)
     118              :     {
     119              :         mass += a.mass;
     120              :         momentum_normal += a.momentum_normal; momentum_tangent += a.momentum_tangent; 
     121              :         energy += a.energy;
     122              :     }
     123              :     void operator -= (const Flux &a)
     124              :     {
     125              :         mass -= a.mass;
     126              :         momentum_normal -= a.momentum_normal; momentum_tangent -= a.momentum_tangent; 
     127              :         energy -= a.energy;
     128              :     }
     129              :     void operator *= (const Set::Scalar alpha)
     130              :     {
     131              :         mass *= alpha;
     132              :         momentum_normal *= alpha;
     133              :         momentum_tangent *= alpha;
     134              :         energy *= alpha;
     135              :     }
     136              :     void operator /= (const Set::Scalar alpha)
     137              :     {
     138              :         mass /= alpha;
     139              :         momentum_normal /= alpha;
     140              :         momentum_tangent /= alpha;
     141              :         energy /= alpha;
     142              :     }
     143     16306448 :     friend Flux operator + (const Flux &a, const Flux &b)
     144              :     {
     145     16306448 :         return Flux(a.mass+b.mass, a.momentum_normal+b.momentum_normal,
     146     16306448 :                     a.momentum_tangent+b.momentum_tangent, a.energy+b.energy);
     147              :     }
     148      7904456 :     friend Flux operator - (const Flux &a, const Flux &b)
     149              :     {
     150      7904456 :         return Flux(a.mass-b.mass, a.momentum_normal-b.momentum_normal,
     151      7904456 :                     a.momentum_tangent-b.momentum_tangent, a.energy-b.energy);
     152              :     }
     153     52940800 :     friend Flux operator * (const Flux &a, const Set::Scalar beta)
     154              :     {
     155     52940800 :         return Flux(a.mass*beta, a.momentum_normal*beta,
     156     52940800 :                     a.momentum_tangent*beta, a.energy*beta);
     157              :     }
     158     23713368 :     friend Flux operator * (const Set::Scalar beta,const Flux &a)
     159              :     {
     160     23713368 :         return Flux(a.mass*beta, a.momentum_normal*beta,
     161     23713368 :                     a.momentum_tangent*beta, a.energy*beta);
     162              :     }
     163      7904456 :     friend Flux operator / (const Flux &a, const Set::Scalar beta)
     164              :     {
     165      7904456 :         return Flux(a.mass/beta, a.momentum_normal/beta,
     166      7904456 :                     a.momentum_tangent/beta, a.energy/beta);
     167              :     }
     168              : 
     169              : };
     170              : 
     171              : 
     172              : class Riemann 
     173              : {
     174              : public:
     175              :     virtual Flux Solve(State lo, State hi, Model::Gas::Gas& gas, Set::Patch<const Set::Scalar>& X, int i, int j, int k, int side, Set::Scalar small) = 0;
     176            8 :     virtual ~Riemann() = default;
     177              : };
     178              : 
     179              : 
     180              : }
     181              : }
     182              : }
     183              : 
     184              : 
     185              : 
     186              : 
     187              : #endif
        

Generated by: LCOV version 2.0-1