1 /*! 2 * \file include/TFEL/Math/T2toST2/T2toST2T2toT2ProductExpr.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_T2TOST2T2TOT2PRODUCTEXPR_HXX 15 #define LIB_TFEL_MATH_T2TOST2T2TOT2PRODUCTEXPR_HXX 16 17 #include"TFEL/Config/TFELConfig.hxx" 18 19 #include"TFEL/Math/General/EmptyRunTimeProperties.hxx" 20 #include"TFEL/Math/T2toST2/T2toST2Concept.hxx" 21 #include"TFEL/Math/T2toT2/T2toT2Concept.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 T2toST2T2toT2ProductExpr 33 {}; // end of struct T2toST2T2toT2ProductExpr 34 35 /*! 36 * Partial specialisation 37 */ 38 template<typename T2toST2ResultType> 39 struct TFEL_VISIBILITY_LOCAL Expr<T2toST2ResultType,T2toST2T2toT2ProductExpr<1u> > 40 : public T2toST2Concept<Expr<T2toST2ResultType,T2toST2T2toT2ProductExpr<1u> > >, 41 public fsarray<StensorDimeToSize<T2toST2Traits<T2toST2ResultType>::dime>::value* 42 TensorDimeToSize<T2toST2Traits<T2toST2ResultType>::dime>::value, 43 typename T2toST2Traits<T2toST2ResultType>::NumType> 44 { 45 //! a simple alias 46 typedef EmptyRunTimeProperties RunTimeProperties; 47 //! a simple alias 48 typedef typename T2toST2Traits<T2toST2ResultType>::NumType value_type; 49 //! a simple check 50 TFEL_STATIC_ASSERT((T2toST2Traits<T2toST2ResultType>::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 T2toST2Type, 56 typename T2toT2Type2> 57 TFEL_MATH_INLINE Exprtfel::math::Expr58 Expr(const T2toST2Type& a, 59 const T2toT2Type2& b) 60 { 61 //! a simple check 62 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toST2Type,tfel::math::T2toST2Concept>::cond)); 63 //! a simple check 64 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type2,T2toT2Concept>::cond)); 65 //! a simple check 66 TFEL_STATIC_ASSERT((T2toST2Traits<T2toST2Type>::dime==1u)); 67 //! a simple check 68 TFEL_STATIC_ASSERT((T2toT2Traits <T2toT2Type2>::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<T2toST2ResultType,T2toST2T2toT2ProductExpr> 99 100 /*! 101 * Partial specialisation 102 */ 103 template<typename T2toST2ResultType> 104 struct TFEL_VISIBILITY_LOCAL Expr<T2toST2ResultType,T2toST2T2toT2ProductExpr<2u> > 105 : public T2toST2Concept<Expr<T2toST2ResultType,T2toST2T2toT2ProductExpr<2u> > >, 106 public fsarray<StensorDimeToSize<T2toST2Traits<T2toST2ResultType>::dime>::value* 107 TensorDimeToSize<T2toST2Traits<T2toST2ResultType>::dime>::value, 108 typename T2toST2Traits<T2toST2ResultType>::NumType> 109 { 110 //! a simple alias 111 typedef EmptyRunTimeProperties RunTimeProperties; 112 //! a simple alias 113 typedef typename T2toST2Traits<T2toST2ResultType>::NumType value_type; 114 //! a simple check 115 TFEL_STATIC_ASSERT((T2toST2Traits<T2toST2ResultType>::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 T2toST2Type, 121 typename T2toT2Type2> 122 TFEL_MATH_INLINE Exprtfel::math::Expr123 Expr(const T2toST2Type& a, 124 const T2toT2Type2& b) 125 { 126 //! a simple check 127 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toST2Type,tfel::math::T2toST2Concept>::cond)); 128 //! a simple check 129 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type2,T2toT2Concept>::cond)); 130 //! a simple check 131 TFEL_STATIC_ASSERT((T2toST2Traits<T2toST2Type>::dime==2u)); 132 //! a simple check 133 TFEL_STATIC_ASSERT((T2toT2Traits <T2toT2Type2>::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(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); 139 this->v[5]=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); 140 this->v[6]=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); 141 this->v[7]=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); 142 this->v[8]=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); 143 this->v[9]=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); 144 this->v[10]=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); 145 this->v[11]=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); 146 this->v[12]=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); 147 this->v[13]=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); 148 this->v[14]=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); 149 this->v[15]=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); 150 this->v[16]=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); 151 this->v[17]=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); 152 this->v[18]=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); 153 this->v[19]=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); 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*5+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<T2toST2ResultType,T2toST2T2toT2ProductExpr> 175 176 /*! 177 * Partial specialisation 178 */ 179 template<typename T2toST2ResultType> 180 struct TFEL_VISIBILITY_LOCAL Expr<T2toST2ResultType,T2toST2T2toT2ProductExpr<3u> > 181 : public T2toST2Concept<Expr<T2toST2ResultType,T2toST2T2toT2ProductExpr<3u> > >, 182 public fsarray<StensorDimeToSize<T2toST2Traits<T2toST2ResultType>::dime>::value* 183 TensorDimeToSize<T2toST2Traits<T2toST2ResultType>::dime>::value, 184 typename T2toST2Traits<T2toST2ResultType>::NumType> 185 { 186 //! a simple alias 187 typedef EmptyRunTimeProperties RunTimeProperties; 188 //! a simple alias 189 typedef typename T2toST2Traits<T2toST2ResultType>::NumType value_type; 190 //! a simple check 191 TFEL_STATIC_ASSERT((T2toST2Traits<T2toST2ResultType>::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 T2toST2Type, 197 typename T2toT2Type2> 198 TFEL_MATH_INLINE Exprtfel::math::Expr199 Expr(const T2toST2Type& a, 200 const T2toT2Type2& b) 201 { 202 //! a simple check 203 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toST2Type,tfel::math::T2toST2Concept>::cond)); 204 //! a simple check 205 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type2,T2toT2Concept>::cond)); 206 //! a simple check 207 TFEL_STATIC_ASSERT((T2toST2Traits<T2toST2Type>::dime==3u)); 208 //! a simple check 209 TFEL_STATIC_ASSERT((T2toT2Traits <T2toT2Type2>::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(0,0)*b(0,6)+a(0,1)*b(1,6)+a(0,2)*b(2,6)+a(0,3)*b(3,6)+a(0,4)*b(4,6)+a(0,5)*b(5,6)+a(0,6)*b(6,6)+a(0,7)*b(7,6)+a(0,8)*b(8,6); 217 this->v[7]=a(0,0)*b(0,7)+a(0,1)*b(1,7)+a(0,2)*b(2,7)+a(0,3)*b(3,7)+a(0,4)*b(4,7)+a(0,5)*b(5,7)+a(0,6)*b(6,7)+a(0,7)*b(7,7)+a(0,8)*b(8,7); 218 this->v[8]=a(0,0)*b(0,8)+a(0,1)*b(1,8)+a(0,2)*b(2,8)+a(0,3)*b(3,8)+a(0,4)*b(4,8)+a(0,5)*b(5,8)+a(0,6)*b(6,8)+a(0,7)*b(7,8)+a(0,8)*b(8,8); 219 this->v[9]=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); 220 this->v[10]=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); 221 this->v[11]=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); 222 this->v[12]=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); 223 this->v[13]=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); 224 this->v[14]=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); 225 this->v[15]=a(1,0)*b(0,6)+a(1,1)*b(1,6)+a(1,2)*b(2,6)+a(1,3)*b(3,6)+a(1,4)*b(4,6)+a(1,5)*b(5,6)+a(1,6)*b(6,6)+a(1,7)*b(7,6)+a(1,8)*b(8,6); 226 this->v[16]=a(1,0)*b(0,7)+a(1,1)*b(1,7)+a(1,2)*b(2,7)+a(1,3)*b(3,7)+a(1,4)*b(4,7)+a(1,5)*b(5,7)+a(1,6)*b(6,7)+a(1,7)*b(7,7)+a(1,8)*b(8,7); 227 this->v[17]=a(1,0)*b(0,8)+a(1,1)*b(1,8)+a(1,2)*b(2,8)+a(1,3)*b(3,8)+a(1,4)*b(4,8)+a(1,5)*b(5,8)+a(1,6)*b(6,8)+a(1,7)*b(7,8)+a(1,8)*b(8,8); 228 this->v[18]=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); 229 this->v[19]=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); 230 this->v[20]=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); 231 this->v[21]=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); 232 this->v[22]=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); 233 this->v[23]=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); 234 this->v[24]=a(2,0)*b(0,6)+a(2,1)*b(1,6)+a(2,2)*b(2,6)+a(2,3)*b(3,6)+a(2,4)*b(4,6)+a(2,5)*b(5,6)+a(2,6)*b(6,6)+a(2,7)*b(7,6)+a(2,8)*b(8,6); 235 this->v[25]=a(2,0)*b(0,7)+a(2,1)*b(1,7)+a(2,2)*b(2,7)+a(2,3)*b(3,7)+a(2,4)*b(4,7)+a(2,5)*b(5,7)+a(2,6)*b(6,7)+a(2,7)*b(7,7)+a(2,8)*b(8,7); 236 this->v[26]=a(2,0)*b(0,8)+a(2,1)*b(1,8)+a(2,2)*b(2,8)+a(2,3)*b(3,8)+a(2,4)*b(4,8)+a(2,5)*b(5,8)+a(2,6)*b(6,8)+a(2,7)*b(7,8)+a(2,8)*b(8,8); 237 this->v[27]=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); 238 this->v[28]=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); 239 this->v[29]=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); 240 this->v[30]=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); 241 this->v[31]=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); 242 this->v[32]=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); 243 this->v[33]=a(3,0)*b(0,6)+a(3,1)*b(1,6)+a(3,2)*b(2,6)+a(3,3)*b(3,6)+a(3,4)*b(4,6)+a(3,5)*b(5,6)+a(3,6)*b(6,6)+a(3,7)*b(7,6)+a(3,8)*b(8,6); 244 this->v[34]=a(3,0)*b(0,7)+a(3,1)*b(1,7)+a(3,2)*b(2,7)+a(3,3)*b(3,7)+a(3,4)*b(4,7)+a(3,5)*b(5,7)+a(3,6)*b(6,7)+a(3,7)*b(7,7)+a(3,8)*b(8,7); 245 this->v[35]=a(3,0)*b(0,8)+a(3,1)*b(1,8)+a(3,2)*b(2,8)+a(3,3)*b(3,8)+a(3,4)*b(4,8)+a(3,5)*b(5,8)+a(3,6)*b(6,8)+a(3,7)*b(7,8)+a(3,8)*b(8,8); 246 this->v[36]=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); 247 this->v[37]=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); 248 this->v[38]=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); 249 this->v[39]=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); 250 this->v[40]=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); 251 this->v[41]=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); 252 this->v[42]=a(4,0)*b(0,6)+a(4,1)*b(1,6)+a(4,2)*b(2,6)+a(4,3)*b(3,6)+a(4,4)*b(4,6)+a(4,5)*b(5,6)+a(4,6)*b(6,6)+a(4,7)*b(7,6)+a(4,8)*b(8,6); 253 this->v[43]=a(4,0)*b(0,7)+a(4,1)*b(1,7)+a(4,2)*b(2,7)+a(4,3)*b(3,7)+a(4,4)*b(4,7)+a(4,5)*b(5,7)+a(4,6)*b(6,7)+a(4,7)*b(7,7)+a(4,8)*b(8,7); 254 this->v[44]=a(4,0)*b(0,8)+a(4,1)*b(1,8)+a(4,2)*b(2,8)+a(4,3)*b(3,8)+a(4,4)*b(4,8)+a(4,5)*b(5,8)+a(4,6)*b(6,8)+a(4,7)*b(7,8)+a(4,8)*b(8,8); 255 this->v[45]=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); 256 this->v[46]=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); 257 this->v[47]=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); 258 this->v[48]=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); 259 this->v[49]=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); 260 this->v[50]=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); 261 this->v[51]=a(5,0)*b(0,6)+a(5,1)*b(1,6)+a(5,2)*b(2,6)+a(5,3)*b(3,6)+a(5,4)*b(4,6)+a(5,5)*b(5,6)+a(5,6)*b(6,6)+a(5,7)*b(7,6)+a(5,8)*b(8,6); 262 this->v[52]=a(5,0)*b(0,7)+a(5,1)*b(1,7)+a(5,2)*b(2,7)+a(5,3)*b(3,7)+a(5,4)*b(4,7)+a(5,5)*b(5,7)+a(5,6)*b(6,7)+a(5,7)*b(7,7)+a(5,8)*b(8,7); 263 this->v[53]=a(5,0)*b(0,8)+a(5,1)*b(1,8)+a(5,2)*b(2,8)+a(5,3)*b(3,8)+a(5,4)*b(4,8)+a(5,5)*b(5,8)+a(5,6)*b(6,8)+a(5,7)*b(7,8)+a(5,8)*b(8,8); 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*9+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<T2toST2ResultType,T2toST2T2toT2ProductExpr> 285 286 } // end of namespace math 287 288 } // end of namespace tfel 289 290 #endif /* LIB_TFEL_MATH_T2TOST2T2TOT2PRODUCTEXPR_HXX */ 291