LCOV - code coverage report
Current view: top level - src/Set - Matrix4_Diagonal.H (source / functions) Coverage Total Hit
Test: coverage_merged.info Lines: 87.1 % 70 61
Test Date: 2026-02-24 04:46:08 Functions: 56.2 % 16 9

            Line data    Source code
       1              : #ifndef SET_MATRIX4_DIAGONAL_H
       2              : #define SET_MATRIX4_DIAGONAL_H
       3              : 
       4              : #include "AMReX_Config.H"
       5              : #include "Util/Util.H"
       6              : #include "Base.H"
       7              : 
       8              : #include "Set.H"
       9              : #include "Set/Matrix3.H"
      10              : #include "Set/Matrix4.H"
      11              : 
      12              : namespace Set
      13              : {
      14              : template<>
      15              : class Matrix4<AMREX_SPACEDIM, Sym::Diagonal>
      16              : {
      17              :     std::array<std::array<Set::Scalar,AMREX_SPACEDIM>,AMREX_SPACEDIM> A = {{
      18              :             AMREX_D_DECL(
      19              :                 {AMREX_D_DECL(NAN,NAN,NAN)},
      20              :                 {AMREX_D_DECL(NAN,NAN,NAN)},
      21              :                 {AMREX_D_DECL(NAN,NAN,NAN)}
      22              :                 )}};
      23              :         
      24              :     
      25              : public:
      26            0 :     Set::Matrix getA() const
      27              :     {
      28            0 :         Set::Matrix ret;
      29            0 :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
      30            0 :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
      31            0 :                 ret(i,j)=A[i][j];
      32            0 :         return ret;
      33              :     }
      34              : 
      35       110811 :     AMREX_GPU_HOST_DEVICE Matrix4() = default;
      36              :     //AMREX_GPU_HOST_DEVICE Matrix4(Set::Matrix a_A): A(a_A) {};
      37              :     AMREX_FORCE_INLINE
      38              :         Scalar operator () (const int i, const int j, const int k, const int l) const
      39              :     {
      40         1940 :         if (i == k && j == l) return A[i][j];
      41         1680 :         else return 0.0;
      42              :     }
      43           44 :     void Randomize()
      44              :     {
      45          154 :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
      46          396 :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
      47          286 :                 A[i][j] = Util::Random();
      48           44 :     }
      49            2 :     static Matrix4<AMREX_SPACEDIM,Sym::Diagonal> Random()
      50              :     {
      51            2 :         Matrix4<AMREX_SPACEDIM,Sym::Diagonal> ret;
      52            2 :         ret.Randomize();
      53            2 :         return ret;
      54              :     }
      55            0 :     void Print(std::ostream& os)
      56              :     {
      57            0 :         os << "A = \n" << getA();
      58            0 :     }
      59        27649 :     static Matrix4<AMREX_SPACEDIM, Sym::Diagonal> Zero()
      60              :     {
      61        27649 :         Matrix4<AMREX_SPACEDIM, Sym::Diagonal> zero;
      62        82958 :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
      63       165960 :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
      64       110651 :                 zero.A[i][j] = 0.0;
      65        27649 :         return zero;
      66              :     }
      67            9 :     static Matrix4<AMREX_SPACEDIM, Sym::Diagonal> Ones()
      68              :     {
      69            9 :         Matrix4<AMREX_SPACEDIM, Sym::Diagonal> ones;
      70           27 :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
      71           54 :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
      72           36 :                 ones.A[i][j] = 1.0;
      73            9 :         return ones;
      74              :     }
      75              :     friend Set::Matrix operator * (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Set::Matrix& b);
      76              :     friend Set::Vector operator * (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Set::Matrix3& b);
      77              :     friend bool operator == (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& b);
      78              :     friend Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator + (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& b);
      79              :     friend Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator - (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& b);
      80              :     friend Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator * (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Set::Scalar& b);
      81              :     friend Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator * (const Set::Scalar& b, const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a);
      82              :     friend Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator / (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Set::Scalar& b);
      83              : 
      84              : 
      85              :     //AMREX_GPU_HOST_DEVICE void operator =  (Matrix4<AMREX_SPACEDIM,Sym::Isotropic> &a) {lambda =  a.lambda; mu =  a.mu;}
      86        27593 :     AMREX_GPU_HOST_DEVICE void operator += (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a) { 
      87        82779 :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
      88       165558 :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
      89       110372 :                 A[i][j] += a.A[i][j]; 
      90        27593 :     }
      91              :     AMREX_GPU_HOST_DEVICE void operator -= (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a) { 
      92              :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
      93              :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
      94              :                 A[i][j] -= a.A[i][j]; 
      95              :     }
      96              :     AMREX_GPU_HOST_DEVICE void operator *= (const Set::Scalar& alpha) {
      97              :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
      98              :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
      99              :                 A[i][j] *= alpha; 
     100              :     }
     101              :     AMREX_GPU_HOST_DEVICE void operator /= (const Set::Scalar& alpha) { 
     102              :         for (int i = 0 ; i < AMREX_SPACEDIM; i++)
     103              :             for (int j = 0 ; j < AMREX_SPACEDIM; j++)
     104              :                 A[i][j] /= alpha; 
     105              :     }
     106              : 
     107              :     Set::Scalar Norm()
     108              :     {
     109              :         return getA().lpNorm<2>();
     110              :     }
     111              :     bool contains_nan() const
     112              :     {
     113              :         if (std::isnan(getA().lpNorm<2>())) return true;
     114              :         return false;
     115              :     }
     116              : 
     117              : };
     118              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     119              : Set::Matrix operator * (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Set::Matrix& b)
     120              : {
     121      7682148 :     Set::Matrix ret;
     122              : 
     123     23048254 :     for (int i = 0; i < AMREX_SPACEDIM; i++)
     124              :     {
     125     46103748 :         for (int j = 0; j < AMREX_SPACEDIM; j++)
     126              :         {
     127     30737642 :             ret(i, j) = a.A[i][j] * b(i, j);
     128              :         }
     129              :     }
     130              : 
     131      7682148 :     return ret;
     132              : }
     133              : 
     134              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     135              : Set::Vector operator * (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a, const Set::Matrix3& b)
     136              : {
     137      2519210 :     Set::Vector ret = Set::Vector::Zero();
     138              : 
     139      7557630 :     for (int i = 0; i < AMREX_SPACEDIM; i++)
     140     15115260 :         for (int j = 0; j < AMREX_SPACEDIM; j++)
     141     20153680 :             ret(i) += a.A[i][j] * b(i, j, j);
     142              : 
     143      2519210 :     return ret;
     144              : }
     145              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     146              : bool operator == (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a,
     147              :     const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& b)
     148              : {
     149           10 :     return a.A == b.A;
     150              : }
     151              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     152              : Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator + (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a,
     153              :     const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& b)
     154              : {
     155        23424 :     Matrix4<AMREX_SPACEDIM, Sym::Diagonal> ret = a;
     156        70272 :     for (int i = 0; i < AMREX_SPACEDIM; i++)
     157       140544 :         for (int j = 0; j < AMREX_SPACEDIM; j++)
     158        93696 :             ret.A[i][j] += b.A[i][j];
     159        23424 :     return ret;
     160              : }
     161              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     162              : Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator - (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a,
     163              :     const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& b)
     164              : {
     165      4936104 :     Matrix4<AMREX_SPACEDIM, Sym::Diagonal> ret = a;
     166     14808312 :     for (int i = 0; i < AMREX_SPACEDIM; i++)
     167     29616624 :         for (int j = 0; j < AMREX_SPACEDIM; j++)
     168     19744416 :             ret.A[i][j] -= b.A[i][j];
     169      4936104 :     return ret;
     170              : }
     171              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     172              : Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator * (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a,
     173              :     const Set::Scalar& b)
     174              : {
     175      4980030 :     Matrix4<AMREX_SPACEDIM, Sym::Diagonal> ret = a;
     176     14940092 :     for (int i = 0; i < AMREX_SPACEDIM; i++)
     177     29880192 :         for (int j = 0; j < AMREX_SPACEDIM; j++)
     178     19920130 :             ret.A[i][j] *= b;
     179      4980030 :     return ret;
     180              : }
     181              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     182              : Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator * ( const Set::Scalar& b,
     183              :                                                     const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a)
     184              : {
     185            9 :     return a*b;
     186              : }
     187              : 
     188              : AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE
     189              : Matrix4<AMREX_SPACEDIM, Sym::Diagonal> operator / (const Matrix4<AMREX_SPACEDIM, Sym::Diagonal>& a,
     190              :     const Set::Scalar& b)
     191              : {
     192      4938792 :     Matrix4<AMREX_SPACEDIM, Sym::Diagonal> ret = a;
     193     14816376 :     for (int i = 0; i < AMREX_SPACEDIM; i++)
     194     29632752 :         for (int j = 0; j < AMREX_SPACEDIM; j++)
     195     19755168 :             ret.A[i][j] /= b;
     196      4938792 :     return ret;
     197              : }
     198              : 
     199              : 
     200              : }
     201              : #endif
        

Generated by: LCOV version 2.0-1