1 /*! 2 * \file include/TFEL/Math/ST2toT2/T2toT2ST2toT2ProductExpr.hxx 3 * \brief 4 * \author Thomas Helfer 5 * \date 16 juin 2014 6 * \copyright Copyright (C) 2006-2018 CEA/DEN, EDF R&D. All rights 7 * reserved. 8 * This project is publicly released under either the GNU GPL Licence 9 * or the CECILL-A licence. A copy of thoses licences are delivered 10 * with the sources of TFEL. CEA or EDF may also distribute this 11 * project under specific licensing conditions. 12 */ 13 14 #ifndef LIB_TFEL_MATH_T2TOT2ST2TOT2PRODUCTEXPR_HXX 15 #define LIB_TFEL_MATH_T2TOT2ST2TOT2PRODUCTEXPR_HXX 16 17 #include"TFEL/Config/TFELConfig.hxx" 18 19 #include"TFEL/Math/General/EmptyRunTimeProperties.hxx" 20 #include"TFEL/Math/T2toT2/T2toT2Concept.hxx" 21 #include"TFEL/Math/ST2toT2/ST2toT2Concept.hxx" 22 23 namespace tfel 24 { 25 26 namespace math 27 { 28 29 //! Empty structure used for partial specialisation of the 30 //! Expr class 31 template<unsigned short N> 32 struct TFEL_VISIBILITY_LOCAL T2toT2ST2toT2ProductExpr 33 {}; // end of struct T2toT2ST2toT2ProductExpr 34 35 /*! 36 * Partial specialisation 37 */ 38 template<typename ST2toT2ResultType> 39 struct TFEL_VISIBILITY_LOCAL Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr<1u> > 40 : public ST2toT2Concept<Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr<1u> > >, 41 public fsarray<TensorDimeToSize<ST2toT2Traits<ST2toT2ResultType>::dime>::value* 42 StensorDimeToSize<ST2toT2Traits<ST2toT2ResultType>::dime>::value, 43 typename ST2toT2Traits<ST2toT2ResultType>::NumType> 44 { 45 //! a simple alias 46 typedef EmptyRunTimeProperties RunTimeProperties; 47 //! a simple alias 48 typedef typename ST2toT2Traits<ST2toT2ResultType>::NumType value_type; 49 //! a simple check 50 TFEL_STATIC_ASSERT((ST2toT2Traits<ST2toT2ResultType>::dime==1u)); 51 /*! 52 * \param[in] a : first term of the product 53 * \param[in] b : second term of the product 54 */ 55 template<typename T2toT2Type, 56 typename ST2toT2Type2> 57 TFEL_MATH_INLINE Exprtfel::math::Expr58 Expr(const T2toT2Type& a, 59 const ST2toT2Type2& b) 60 { 61 //! a simple check 62 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type,T2toT2Concept>::cond)); 63 //! a simple check 64 TFEL_STATIC_ASSERT((tfel::meta::Implements<ST2toT2Type2,tfel::math::ST2toT2Concept>::cond)); 65 //! a simple check 66 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2Type>::dime==1u)); 67 //! a simple check 68 TFEL_STATIC_ASSERT((ST2toT2Traits <ST2toT2Type2>::dime==1u)); 69 this->v[0]=a(0,0)*b(0,0)+a(0,1)*b(1,0)+a(0,2)*b(2,0); 70 this->v[1]=a(0,0)*b(0,1)+a(0,1)*b(1,1)+a(0,2)*b(2,1); 71 this->v[2]=a(0,0)*b(0,2)+a(0,1)*b(1,2)+a(0,2)*b(2,2); 72 this->v[3]=a(1,0)*b(0,0)+a(1,1)*b(1,0)+a(1,2)*b(2,0); 73 this->v[4]=a(1,0)*b(0,1)+a(1,1)*b(1,1)+a(1,2)*b(2,1); 74 this->v[5]=a(1,0)*b(0,2)+a(1,1)*b(1,2)+a(1,2)*b(2,2); 75 this->v[6]=a(2,0)*b(0,0)+a(2,1)*b(1,0)+a(2,2)*b(2,0); 76 this->v[7]=a(2,0)*b(0,1)+a(2,1)*b(1,1)+a(2,2)*b(2,1); 77 this->v[8]=a(2,0)*b(0,2)+a(2,1)*b(1,2)+a(2,2)*b(2,2); 78 } // end of Expr 79 /*! 80 * \brief access operator 81 * \param[in] i : line index 82 * \param[in] j : column index 83 */ 84 TFEL_MATH_INLINE const value_type& operator ()tfel::math::Expr85 operator()(const unsigned short i, 86 const unsigned short j) const 87 { 88 return this->v[i*3+j]; 89 } // end of operator() 90 /*! 91 * \return the runtime properties 92 */ 93 TFEL_MATH_INLINE RunTimeProperties getRunTimePropertiestfel::math::Expr94 getRunTimeProperties() const 95 { 96 return RunTimeProperties(); 97 } 98 }; // end of struct Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr> 99 100 /*! 101 * Partial specialisation 102 */ 103 template<typename ST2toT2ResultType> 104 struct TFEL_VISIBILITY_LOCAL Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr<2u> > 105 : public ST2toT2Concept<Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr<2u> > >, 106 public fsarray<TensorDimeToSize<ST2toT2Traits<ST2toT2ResultType>::dime>::value* 107 StensorDimeToSize<ST2toT2Traits<ST2toT2ResultType>::dime>::value, 108 typename ST2toT2Traits<ST2toT2ResultType>::NumType> 109 { 110 //! a simple alias 111 typedef EmptyRunTimeProperties RunTimeProperties; 112 //! a simple alias 113 typedef typename ST2toT2Traits<ST2toT2ResultType>::NumType value_type; 114 //! a simple check 115 TFEL_STATIC_ASSERT((ST2toT2Traits<ST2toT2ResultType>::dime==2u)); 116 /*! 117 * \param[in] a : first term of the product 118 * \param[in] b : second term of the product 119 */ 120 template<typename T2toT2Type, 121 typename ST2toT2Type2> 122 TFEL_MATH_INLINE Exprtfel::math::Expr123 Expr(const T2toT2Type& a, 124 const ST2toT2Type2& b) 125 { 126 //! a simple check 127 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type,T2toT2Concept>::cond)); 128 //! a simple check 129 TFEL_STATIC_ASSERT((tfel::meta::Implements<ST2toT2Type2,tfel::math::ST2toT2Concept>::cond)); 130 //! a simple check 131 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2Type>::dime==2u)); 132 //! a simple check 133 TFEL_STATIC_ASSERT((ST2toT2Traits <ST2toT2Type2>::dime==2u)); 134 this->v[0]=a(0,0)*b(0,0)+a(0,1)*b(1,0)+a(0,2)*b(2,0)+a(0,3)*b(3,0)+a(0,4)*b(4,0); 135 this->v[1]=a(0,0)*b(0,1)+a(0,1)*b(1,1)+a(0,2)*b(2,1)+a(0,3)*b(3,1)+a(0,4)*b(4,1); 136 this->v[2]=a(0,0)*b(0,2)+a(0,1)*b(1,2)+a(0,2)*b(2,2)+a(0,3)*b(3,2)+a(0,4)*b(4,2); 137 this->v[3]=a(0,0)*b(0,3)+a(0,1)*b(1,3)+a(0,2)*b(2,3)+a(0,3)*b(3,3)+a(0,4)*b(4,3); 138 this->v[4]=a(1,0)*b(0,0)+a(1,1)*b(1,0)+a(1,2)*b(2,0)+a(1,3)*b(3,0)+a(1,4)*b(4,0); 139 this->v[5]=a(1,0)*b(0,1)+a(1,1)*b(1,1)+a(1,2)*b(2,1)+a(1,3)*b(3,1)+a(1,4)*b(4,1); 140 this->v[6]=a(1,0)*b(0,2)+a(1,1)*b(1,2)+a(1,2)*b(2,2)+a(1,3)*b(3,2)+a(1,4)*b(4,2); 141 this->v[7]=a(1,0)*b(0,3)+a(1,1)*b(1,3)+a(1,2)*b(2,3)+a(1,3)*b(3,3)+a(1,4)*b(4,3); 142 this->v[8]=a(2,0)*b(0,0)+a(2,1)*b(1,0)+a(2,2)*b(2,0)+a(2,3)*b(3,0)+a(2,4)*b(4,0); 143 this->v[9]=a(2,0)*b(0,1)+a(2,1)*b(1,1)+a(2,2)*b(2,1)+a(2,3)*b(3,1)+a(2,4)*b(4,1); 144 this->v[10]=a(2,0)*b(0,2)+a(2,1)*b(1,2)+a(2,2)*b(2,2)+a(2,3)*b(3,2)+a(2,4)*b(4,2); 145 this->v[11]=a(2,0)*b(0,3)+a(2,1)*b(1,3)+a(2,2)*b(2,3)+a(2,3)*b(3,3)+a(2,4)*b(4,3); 146 this->v[12]=a(3,0)*b(0,0)+a(3,1)*b(1,0)+a(3,2)*b(2,0)+a(3,3)*b(3,0)+a(3,4)*b(4,0); 147 this->v[13]=a(3,0)*b(0,1)+a(3,1)*b(1,1)+a(3,2)*b(2,1)+a(3,3)*b(3,1)+a(3,4)*b(4,1); 148 this->v[14]=a(3,0)*b(0,2)+a(3,1)*b(1,2)+a(3,2)*b(2,2)+a(3,3)*b(3,2)+a(3,4)*b(4,2); 149 this->v[15]=a(3,0)*b(0,3)+a(3,1)*b(1,3)+a(3,2)*b(2,3)+a(3,3)*b(3,3)+a(3,4)*b(4,3); 150 this->v[16]=a(4,0)*b(0,0)+a(4,1)*b(1,0)+a(4,2)*b(2,0)+a(4,3)*b(3,0)+a(4,4)*b(4,0); 151 this->v[17]=a(4,0)*b(0,1)+a(4,1)*b(1,1)+a(4,2)*b(2,1)+a(4,3)*b(3,1)+a(4,4)*b(4,1); 152 this->v[18]=a(4,0)*b(0,2)+a(4,1)*b(1,2)+a(4,2)*b(2,2)+a(4,3)*b(3,2)+a(4,4)*b(4,2); 153 this->v[19]=a(4,0)*b(0,3)+a(4,1)*b(1,3)+a(4,2)*b(2,3)+a(4,3)*b(3,3)+a(4,4)*b(4,3); 154 } // end of Expr 155 /*! 156 * \brief access operator 157 * \param[in] i : line index 158 * \param[in] j : column index 159 */ 160 TFEL_MATH_INLINE const value_type& operator ()tfel::math::Expr161 operator()(const unsigned short i, 162 const unsigned short j) const 163 { 164 return this->v[i*4+j]; 165 } // end of operator() 166 /*! 167 * \return the runtime properties 168 */ 169 TFEL_MATH_INLINE RunTimeProperties getRunTimePropertiestfel::math::Expr170 getRunTimeProperties() const 171 { 172 return RunTimeProperties(); 173 } 174 }; // end of struct Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr> 175 176 /*! 177 * Partial specialisation 178 */ 179 template<typename ST2toT2ResultType> 180 struct TFEL_VISIBILITY_LOCAL Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr<3u> > 181 : public ST2toT2Concept<Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr<3u> > >, 182 public fsarray<TensorDimeToSize<ST2toT2Traits<ST2toT2ResultType>::dime>::value* 183 StensorDimeToSize<ST2toT2Traits<ST2toT2ResultType>::dime>::value, 184 typename ST2toT2Traits<ST2toT2ResultType>::NumType> 185 { 186 //! a simple alias 187 typedef EmptyRunTimeProperties RunTimeProperties; 188 //! a simple alias 189 typedef typename ST2toT2Traits<ST2toT2ResultType>::NumType value_type; 190 //! a simple check 191 TFEL_STATIC_ASSERT((ST2toT2Traits<ST2toT2ResultType>::dime==3u)); 192 /*! 193 * \param[in] a : first term of the product 194 * \param[in] b : second term of the product 195 */ 196 template<typename T2toT2Type, 197 typename ST2toT2Type2> 198 TFEL_MATH_INLINE Exprtfel::math::Expr199 Expr(const T2toT2Type& a, 200 const ST2toT2Type2& b) 201 { 202 //! a simple check 203 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type,T2toT2Concept>::cond)); 204 //! a simple check 205 TFEL_STATIC_ASSERT((tfel::meta::Implements<ST2toT2Type2,tfel::math::ST2toT2Concept>::cond)); 206 //! a simple check 207 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2Type>::dime==3u)); 208 //! a simple check 209 TFEL_STATIC_ASSERT((ST2toT2Traits <ST2toT2Type2>::dime==3u)); 210 this->v[0]=a(0,0)*b(0,0)+a(0,1)*b(1,0)+a(0,2)*b(2,0)+a(0,3)*b(3,0)+a(0,4)*b(4,0)+a(0,5)*b(5,0)+a(0,6)*b(6,0)+a(0,7)*b(7,0)+a(0,8)*b(8,0); 211 this->v[1]=a(0,0)*b(0,1)+a(0,1)*b(1,1)+a(0,2)*b(2,1)+a(0,3)*b(3,1)+a(0,4)*b(4,1)+a(0,5)*b(5,1)+a(0,6)*b(6,1)+a(0,7)*b(7,1)+a(0,8)*b(8,1); 212 this->v[2]=a(0,0)*b(0,2)+a(0,1)*b(1,2)+a(0,2)*b(2,2)+a(0,3)*b(3,2)+a(0,4)*b(4,2)+a(0,5)*b(5,2)+a(0,6)*b(6,2)+a(0,7)*b(7,2)+a(0,8)*b(8,2); 213 this->v[3]=a(0,0)*b(0,3)+a(0,1)*b(1,3)+a(0,2)*b(2,3)+a(0,3)*b(3,3)+a(0,4)*b(4,3)+a(0,5)*b(5,3)+a(0,6)*b(6,3)+a(0,7)*b(7,3)+a(0,8)*b(8,3); 214 this->v[4]=a(0,0)*b(0,4)+a(0,1)*b(1,4)+a(0,2)*b(2,4)+a(0,3)*b(3,4)+a(0,4)*b(4,4)+a(0,5)*b(5,4)+a(0,6)*b(6,4)+a(0,7)*b(7,4)+a(0,8)*b(8,4); 215 this->v[5]=a(0,0)*b(0,5)+a(0,1)*b(1,5)+a(0,2)*b(2,5)+a(0,3)*b(3,5)+a(0,4)*b(4,5)+a(0,5)*b(5,5)+a(0,6)*b(6,5)+a(0,7)*b(7,5)+a(0,8)*b(8,5); 216 this->v[6]=a(1,0)*b(0,0)+a(1,1)*b(1,0)+a(1,2)*b(2,0)+a(1,3)*b(3,0)+a(1,4)*b(4,0)+a(1,5)*b(5,0)+a(1,6)*b(6,0)+a(1,7)*b(7,0)+a(1,8)*b(8,0); 217 this->v[7]=a(1,0)*b(0,1)+a(1,1)*b(1,1)+a(1,2)*b(2,1)+a(1,3)*b(3,1)+a(1,4)*b(4,1)+a(1,5)*b(5,1)+a(1,6)*b(6,1)+a(1,7)*b(7,1)+a(1,8)*b(8,1); 218 this->v[8]=a(1,0)*b(0,2)+a(1,1)*b(1,2)+a(1,2)*b(2,2)+a(1,3)*b(3,2)+a(1,4)*b(4,2)+a(1,5)*b(5,2)+a(1,6)*b(6,2)+a(1,7)*b(7,2)+a(1,8)*b(8,2); 219 this->v[9]=a(1,0)*b(0,3)+a(1,1)*b(1,3)+a(1,2)*b(2,3)+a(1,3)*b(3,3)+a(1,4)*b(4,3)+a(1,5)*b(5,3)+a(1,6)*b(6,3)+a(1,7)*b(7,3)+a(1,8)*b(8,3); 220 this->v[10]=a(1,0)*b(0,4)+a(1,1)*b(1,4)+a(1,2)*b(2,4)+a(1,3)*b(3,4)+a(1,4)*b(4,4)+a(1,5)*b(5,4)+a(1,6)*b(6,4)+a(1,7)*b(7,4)+a(1,8)*b(8,4); 221 this->v[11]=a(1,0)*b(0,5)+a(1,1)*b(1,5)+a(1,2)*b(2,5)+a(1,3)*b(3,5)+a(1,4)*b(4,5)+a(1,5)*b(5,5)+a(1,6)*b(6,5)+a(1,7)*b(7,5)+a(1,8)*b(8,5); 222 this->v[12]=a(2,0)*b(0,0)+a(2,1)*b(1,0)+a(2,2)*b(2,0)+a(2,3)*b(3,0)+a(2,4)*b(4,0)+a(2,5)*b(5,0)+a(2,6)*b(6,0)+a(2,7)*b(7,0)+a(2,8)*b(8,0); 223 this->v[13]=a(2,0)*b(0,1)+a(2,1)*b(1,1)+a(2,2)*b(2,1)+a(2,3)*b(3,1)+a(2,4)*b(4,1)+a(2,5)*b(5,1)+a(2,6)*b(6,1)+a(2,7)*b(7,1)+a(2,8)*b(8,1); 224 this->v[14]=a(2,0)*b(0,2)+a(2,1)*b(1,2)+a(2,2)*b(2,2)+a(2,3)*b(3,2)+a(2,4)*b(4,2)+a(2,5)*b(5,2)+a(2,6)*b(6,2)+a(2,7)*b(7,2)+a(2,8)*b(8,2); 225 this->v[15]=a(2,0)*b(0,3)+a(2,1)*b(1,3)+a(2,2)*b(2,3)+a(2,3)*b(3,3)+a(2,4)*b(4,3)+a(2,5)*b(5,3)+a(2,6)*b(6,3)+a(2,7)*b(7,3)+a(2,8)*b(8,3); 226 this->v[16]=a(2,0)*b(0,4)+a(2,1)*b(1,4)+a(2,2)*b(2,4)+a(2,3)*b(3,4)+a(2,4)*b(4,4)+a(2,5)*b(5,4)+a(2,6)*b(6,4)+a(2,7)*b(7,4)+a(2,8)*b(8,4); 227 this->v[17]=a(2,0)*b(0,5)+a(2,1)*b(1,5)+a(2,2)*b(2,5)+a(2,3)*b(3,5)+a(2,4)*b(4,5)+a(2,5)*b(5,5)+a(2,6)*b(6,5)+a(2,7)*b(7,5)+a(2,8)*b(8,5); 228 this->v[18]=a(3,0)*b(0,0)+a(3,1)*b(1,0)+a(3,2)*b(2,0)+a(3,3)*b(3,0)+a(3,4)*b(4,0)+a(3,5)*b(5,0)+a(3,6)*b(6,0)+a(3,7)*b(7,0)+a(3,8)*b(8,0); 229 this->v[19]=a(3,0)*b(0,1)+a(3,1)*b(1,1)+a(3,2)*b(2,1)+a(3,3)*b(3,1)+a(3,4)*b(4,1)+a(3,5)*b(5,1)+a(3,6)*b(6,1)+a(3,7)*b(7,1)+a(3,8)*b(8,1); 230 this->v[20]=a(3,0)*b(0,2)+a(3,1)*b(1,2)+a(3,2)*b(2,2)+a(3,3)*b(3,2)+a(3,4)*b(4,2)+a(3,5)*b(5,2)+a(3,6)*b(6,2)+a(3,7)*b(7,2)+a(3,8)*b(8,2); 231 this->v[21]=a(3,0)*b(0,3)+a(3,1)*b(1,3)+a(3,2)*b(2,3)+a(3,3)*b(3,3)+a(3,4)*b(4,3)+a(3,5)*b(5,3)+a(3,6)*b(6,3)+a(3,7)*b(7,3)+a(3,8)*b(8,3); 232 this->v[22]=a(3,0)*b(0,4)+a(3,1)*b(1,4)+a(3,2)*b(2,4)+a(3,3)*b(3,4)+a(3,4)*b(4,4)+a(3,5)*b(5,4)+a(3,6)*b(6,4)+a(3,7)*b(7,4)+a(3,8)*b(8,4); 233 this->v[23]=a(3,0)*b(0,5)+a(3,1)*b(1,5)+a(3,2)*b(2,5)+a(3,3)*b(3,5)+a(3,4)*b(4,5)+a(3,5)*b(5,5)+a(3,6)*b(6,5)+a(3,7)*b(7,5)+a(3,8)*b(8,5); 234 this->v[24]=a(4,0)*b(0,0)+a(4,1)*b(1,0)+a(4,2)*b(2,0)+a(4,3)*b(3,0)+a(4,4)*b(4,0)+a(4,5)*b(5,0)+a(4,6)*b(6,0)+a(4,7)*b(7,0)+a(4,8)*b(8,0); 235 this->v[25]=a(4,0)*b(0,1)+a(4,1)*b(1,1)+a(4,2)*b(2,1)+a(4,3)*b(3,1)+a(4,4)*b(4,1)+a(4,5)*b(5,1)+a(4,6)*b(6,1)+a(4,7)*b(7,1)+a(4,8)*b(8,1); 236 this->v[26]=a(4,0)*b(0,2)+a(4,1)*b(1,2)+a(4,2)*b(2,2)+a(4,3)*b(3,2)+a(4,4)*b(4,2)+a(4,5)*b(5,2)+a(4,6)*b(6,2)+a(4,7)*b(7,2)+a(4,8)*b(8,2); 237 this->v[27]=a(4,0)*b(0,3)+a(4,1)*b(1,3)+a(4,2)*b(2,3)+a(4,3)*b(3,3)+a(4,4)*b(4,3)+a(4,5)*b(5,3)+a(4,6)*b(6,3)+a(4,7)*b(7,3)+a(4,8)*b(8,3); 238 this->v[28]=a(4,0)*b(0,4)+a(4,1)*b(1,4)+a(4,2)*b(2,4)+a(4,3)*b(3,4)+a(4,4)*b(4,4)+a(4,5)*b(5,4)+a(4,6)*b(6,4)+a(4,7)*b(7,4)+a(4,8)*b(8,4); 239 this->v[29]=a(4,0)*b(0,5)+a(4,1)*b(1,5)+a(4,2)*b(2,5)+a(4,3)*b(3,5)+a(4,4)*b(4,5)+a(4,5)*b(5,5)+a(4,6)*b(6,5)+a(4,7)*b(7,5)+a(4,8)*b(8,5); 240 this->v[30]=a(5,0)*b(0,0)+a(5,1)*b(1,0)+a(5,2)*b(2,0)+a(5,3)*b(3,0)+a(5,4)*b(4,0)+a(5,5)*b(5,0)+a(5,6)*b(6,0)+a(5,7)*b(7,0)+a(5,8)*b(8,0); 241 this->v[31]=a(5,0)*b(0,1)+a(5,1)*b(1,1)+a(5,2)*b(2,1)+a(5,3)*b(3,1)+a(5,4)*b(4,1)+a(5,5)*b(5,1)+a(5,6)*b(6,1)+a(5,7)*b(7,1)+a(5,8)*b(8,1); 242 this->v[32]=a(5,0)*b(0,2)+a(5,1)*b(1,2)+a(5,2)*b(2,2)+a(5,3)*b(3,2)+a(5,4)*b(4,2)+a(5,5)*b(5,2)+a(5,6)*b(6,2)+a(5,7)*b(7,2)+a(5,8)*b(8,2); 243 this->v[33]=a(5,0)*b(0,3)+a(5,1)*b(1,3)+a(5,2)*b(2,3)+a(5,3)*b(3,3)+a(5,4)*b(4,3)+a(5,5)*b(5,3)+a(5,6)*b(6,3)+a(5,7)*b(7,3)+a(5,8)*b(8,3); 244 this->v[34]=a(5,0)*b(0,4)+a(5,1)*b(1,4)+a(5,2)*b(2,4)+a(5,3)*b(3,4)+a(5,4)*b(4,4)+a(5,5)*b(5,4)+a(5,6)*b(6,4)+a(5,7)*b(7,4)+a(5,8)*b(8,4); 245 this->v[35]=a(5,0)*b(0,5)+a(5,1)*b(1,5)+a(5,2)*b(2,5)+a(5,3)*b(3,5)+a(5,4)*b(4,5)+a(5,5)*b(5,5)+a(5,6)*b(6,5)+a(5,7)*b(7,5)+a(5,8)*b(8,5); 246 this->v[36]=a(6,0)*b(0,0)+a(6,1)*b(1,0)+a(6,2)*b(2,0)+a(6,3)*b(3,0)+a(6,4)*b(4,0)+a(6,5)*b(5,0)+a(6,6)*b(6,0)+a(6,7)*b(7,0)+a(6,8)*b(8,0); 247 this->v[37]=a(6,0)*b(0,1)+a(6,1)*b(1,1)+a(6,2)*b(2,1)+a(6,3)*b(3,1)+a(6,4)*b(4,1)+a(6,5)*b(5,1)+a(6,6)*b(6,1)+a(6,7)*b(7,1)+a(6,8)*b(8,1); 248 this->v[38]=a(6,0)*b(0,2)+a(6,1)*b(1,2)+a(6,2)*b(2,2)+a(6,3)*b(3,2)+a(6,4)*b(4,2)+a(6,5)*b(5,2)+a(6,6)*b(6,2)+a(6,7)*b(7,2)+a(6,8)*b(8,2); 249 this->v[39]=a(6,0)*b(0,3)+a(6,1)*b(1,3)+a(6,2)*b(2,3)+a(6,3)*b(3,3)+a(6,4)*b(4,3)+a(6,5)*b(5,3)+a(6,6)*b(6,3)+a(6,7)*b(7,3)+a(6,8)*b(8,3); 250 this->v[40]=a(6,0)*b(0,4)+a(6,1)*b(1,4)+a(6,2)*b(2,4)+a(6,3)*b(3,4)+a(6,4)*b(4,4)+a(6,5)*b(5,4)+a(6,6)*b(6,4)+a(6,7)*b(7,4)+a(6,8)*b(8,4); 251 this->v[41]=a(6,0)*b(0,5)+a(6,1)*b(1,5)+a(6,2)*b(2,5)+a(6,3)*b(3,5)+a(6,4)*b(4,5)+a(6,5)*b(5,5)+a(6,6)*b(6,5)+a(6,7)*b(7,5)+a(6,8)*b(8,5); 252 this->v[42]=a(7,0)*b(0,0)+a(7,1)*b(1,0)+a(7,2)*b(2,0)+a(7,3)*b(3,0)+a(7,4)*b(4,0)+a(7,5)*b(5,0)+a(7,6)*b(6,0)+a(7,7)*b(7,0)+a(7,8)*b(8,0); 253 this->v[43]=a(7,0)*b(0,1)+a(7,1)*b(1,1)+a(7,2)*b(2,1)+a(7,3)*b(3,1)+a(7,4)*b(4,1)+a(7,5)*b(5,1)+a(7,6)*b(6,1)+a(7,7)*b(7,1)+a(7,8)*b(8,1); 254 this->v[44]=a(7,0)*b(0,2)+a(7,1)*b(1,2)+a(7,2)*b(2,2)+a(7,3)*b(3,2)+a(7,4)*b(4,2)+a(7,5)*b(5,2)+a(7,6)*b(6,2)+a(7,7)*b(7,2)+a(7,8)*b(8,2); 255 this->v[45]=a(7,0)*b(0,3)+a(7,1)*b(1,3)+a(7,2)*b(2,3)+a(7,3)*b(3,3)+a(7,4)*b(4,3)+a(7,5)*b(5,3)+a(7,6)*b(6,3)+a(7,7)*b(7,3)+a(7,8)*b(8,3); 256 this->v[46]=a(7,0)*b(0,4)+a(7,1)*b(1,4)+a(7,2)*b(2,4)+a(7,3)*b(3,4)+a(7,4)*b(4,4)+a(7,5)*b(5,4)+a(7,6)*b(6,4)+a(7,7)*b(7,4)+a(7,8)*b(8,4); 257 this->v[47]=a(7,0)*b(0,5)+a(7,1)*b(1,5)+a(7,2)*b(2,5)+a(7,3)*b(3,5)+a(7,4)*b(4,5)+a(7,5)*b(5,5)+a(7,6)*b(6,5)+a(7,7)*b(7,5)+a(7,8)*b(8,5); 258 this->v[48]=a(8,0)*b(0,0)+a(8,1)*b(1,0)+a(8,2)*b(2,0)+a(8,3)*b(3,0)+a(8,4)*b(4,0)+a(8,5)*b(5,0)+a(8,6)*b(6,0)+a(8,7)*b(7,0)+a(8,8)*b(8,0); 259 this->v[49]=a(8,0)*b(0,1)+a(8,1)*b(1,1)+a(8,2)*b(2,1)+a(8,3)*b(3,1)+a(8,4)*b(4,1)+a(8,5)*b(5,1)+a(8,6)*b(6,1)+a(8,7)*b(7,1)+a(8,8)*b(8,1); 260 this->v[50]=a(8,0)*b(0,2)+a(8,1)*b(1,2)+a(8,2)*b(2,2)+a(8,3)*b(3,2)+a(8,4)*b(4,2)+a(8,5)*b(5,2)+a(8,6)*b(6,2)+a(8,7)*b(7,2)+a(8,8)*b(8,2); 261 this->v[51]=a(8,0)*b(0,3)+a(8,1)*b(1,3)+a(8,2)*b(2,3)+a(8,3)*b(3,3)+a(8,4)*b(4,3)+a(8,5)*b(5,3)+a(8,6)*b(6,3)+a(8,7)*b(7,3)+a(8,8)*b(8,3); 262 this->v[52]=a(8,0)*b(0,4)+a(8,1)*b(1,4)+a(8,2)*b(2,4)+a(8,3)*b(3,4)+a(8,4)*b(4,4)+a(8,5)*b(5,4)+a(8,6)*b(6,4)+a(8,7)*b(7,4)+a(8,8)*b(8,4); 263 this->v[53]=a(8,0)*b(0,5)+a(8,1)*b(1,5)+a(8,2)*b(2,5)+a(8,3)*b(3,5)+a(8,4)*b(4,5)+a(8,5)*b(5,5)+a(8,6)*b(6,5)+a(8,7)*b(7,5)+a(8,8)*b(8,5); 264 } // end of Expr 265 /*! 266 * \brief access operator 267 * \param[in] i : line index 268 * \param[in] j : column index 269 */ 270 TFEL_MATH_INLINE const value_type& operator ()tfel::math::Expr271 operator()(const unsigned short i, 272 const unsigned short j) const 273 { 274 return this->v[i*6+j]; 275 } // end of operator() 276 /*! 277 * \return the runtime properties 278 */ 279 TFEL_MATH_INLINE RunTimeProperties getRunTimePropertiestfel::math::Expr280 getRunTimeProperties() const 281 { 282 return RunTimeProperties(); 283 } 284 }; // end of struct Expr<ST2toT2ResultType,T2toT2ST2toT2ProductExpr> 285 286 } // end of namespace math 287 288 } // end of namespace tfel 289 290 #endif /* LIB_TFEL_MATH_T2TOT2ST2TOT2PRODUCTEXPR_HXX */ 291