1 /*! 2 * \file include/TFEL/Math/T2toT2/T2toT2T2toT2ProductExpr.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_T2TOT2T2TOT2PRODUCTEXPR_HXX 15 #define LIB_TFEL_MATH_T2TOT2T2TOT2PRODUCTEXPR_HXX 16 17 #include"TFEL/Config/TFELConfig.hxx" 18 19 #include"TFEL/Math/General/EmptyRunTimeProperties.hxx" 20 #include"TFEL/Math/T2toT2/T2toT2Concept.hxx" 21 22 namespace tfel 23 { 24 25 namespace math 26 { 27 28 //! Empty structure used for partial specialisation of the 29 //! Expr class 30 template<unsigned short N> 31 struct TFEL_VISIBILITY_LOCAL T2toT2T2toT2ProductExpr 32 {}; // end of struct T2toT2T2toT2ProductExpr 33 34 /*! 35 * Partial specialisation 36 */ 37 template<typename T2toT2ResultType> 38 struct TFEL_VISIBILITY_LOCAL Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr<1u> > 39 : public T2toT2Concept<Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr<1u> > >, 40 public fsarray<TensorDimeToSize<T2toT2Traits<T2toT2ResultType>::dime>::value* 41 TensorDimeToSize<T2toT2Traits<T2toT2ResultType>::dime>::value, 42 typename T2toT2Traits<T2toT2ResultType>::NumType> 43 { 44 //! a simple alias 45 typedef EmptyRunTimeProperties RunTimeProperties; 46 //! a simple alias 47 typedef typename T2toT2Traits<T2toT2ResultType>::NumType value_type; 48 //! a simple check 49 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2ResultType>::dime==1u)); 50 /*! 51 * \param[in] a : first term of the product 52 * \param[in] b : second term of the product 53 */ 54 template<typename T2toT2Type, 55 typename T2toT2Type2> 56 TFEL_MATH_INLINE Exprtfel::math::Expr57 Expr(const T2toT2Type& a, 58 const T2toT2Type2& b) 59 { 60 //! a simple check 61 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type,tfel::math::T2toT2Concept>::cond)); 62 //! a simple check 63 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type2,tfel::math::T2toT2Concept>::cond)); 64 //! a simple check 65 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2Type>::dime==1u)); 66 //! a simple check 67 TFEL_STATIC_ASSERT((T2toT2Traits <T2toT2Type2>::dime==1u)); 68 this->v[0]=a(0,0)*b(0,0)+a(0,1)*b(1,0)+a(0,2)*b(2,0); 69 this->v[1]=a(0,0)*b(0,1)+a(0,1)*b(1,1)+a(0,2)*b(2,1); 70 this->v[2]=a(0,0)*b(0,2)+a(0,1)*b(1,2)+a(0,2)*b(2,2); 71 this->v[3]=a(1,0)*b(0,0)+a(1,1)*b(1,0)+a(1,2)*b(2,0); 72 this->v[4]=a(1,0)*b(0,1)+a(1,1)*b(1,1)+a(1,2)*b(2,1); 73 this->v[5]=a(1,0)*b(0,2)+a(1,1)*b(1,2)+a(1,2)*b(2,2); 74 this->v[6]=a(2,0)*b(0,0)+a(2,1)*b(1,0)+a(2,2)*b(2,0); 75 this->v[7]=a(2,0)*b(0,1)+a(2,1)*b(1,1)+a(2,2)*b(2,1); 76 this->v[8]=a(2,0)*b(0,2)+a(2,1)*b(1,2)+a(2,2)*b(2,2); 77 } // end of Expr 78 /*! 79 * \brief access operator 80 * \param[in] i : line index 81 * \param[in] j : column index 82 */ 83 TFEL_MATH_INLINE const value_type& operator ()tfel::math::Expr84 operator()(const unsigned short i, 85 const unsigned short j) const 86 { 87 return this->v[i*3+j]; 88 } // end of operator() 89 /*! 90 * \return the runtime properties 91 */ 92 TFEL_MATH_INLINE RunTimeProperties getRunTimePropertiestfel::math::Expr93 getRunTimeProperties() const 94 { 95 return RunTimeProperties(); 96 } 97 }; // end of struct Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr> 98 99 /*! 100 * Partial specialisation 101 */ 102 template<typename T2toT2ResultType> 103 struct TFEL_VISIBILITY_LOCAL Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr<2u> > 104 : public T2toT2Concept<Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr<2u> > >, 105 public fsarray<TensorDimeToSize<T2toT2Traits<T2toT2ResultType>::dime>::value* 106 TensorDimeToSize<T2toT2Traits<T2toT2ResultType>::dime>::value, 107 typename T2toT2Traits<T2toT2ResultType>::NumType> 108 { 109 //! a simple alias 110 typedef EmptyRunTimeProperties RunTimeProperties; 111 //! a simple alias 112 typedef typename T2toT2Traits<T2toT2ResultType>::NumType value_type; 113 //! a simple check 114 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2ResultType>::dime==2u)); 115 /*! 116 * \param[in] a : first term of the product 117 * \param[in] b : second term of the product 118 */ 119 template<typename T2toT2Type, 120 typename T2toT2Type2> 121 TFEL_MATH_INLINE Exprtfel::math::Expr122 Expr(const T2toT2Type& a, 123 const T2toT2Type2& b) 124 { 125 //! a simple check 126 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type,tfel::math::T2toT2Concept>::cond)); 127 //! a simple check 128 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type2,tfel::math::T2toT2Concept>::cond)); 129 //! a simple check 130 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2Type>::dime==2u)); 131 //! a simple check 132 TFEL_STATIC_ASSERT((T2toT2Traits <T2toT2Type2>::dime==2u)); 133 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); 134 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); 135 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); 136 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); 137 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); 138 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); 139 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); 140 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); 141 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); 142 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); 143 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); 144 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); 145 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); 146 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); 147 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); 148 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); 149 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); 150 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); 151 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); 152 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); 153 this->v[20]=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); 154 this->v[21]=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); 155 this->v[22]=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); 156 this->v[23]=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); 157 this->v[24]=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); 158 } // end of Expr 159 /*! 160 * \brief access operator 161 * \param[in] i : line index 162 * \param[in] j : column index 163 */ 164 TFEL_MATH_INLINE const value_type& operator ()tfel::math::Expr165 operator()(const unsigned short i, 166 const unsigned short j) const 167 { 168 return this->v[i*5+j]; 169 } // end of operator() 170 /*! 171 * \return the runtime properties 172 */ 173 TFEL_MATH_INLINE RunTimeProperties getRunTimePropertiestfel::math::Expr174 getRunTimeProperties() const 175 { 176 return RunTimeProperties(); 177 } 178 }; // end of struct Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr> 179 180 /*! 181 * Partial specialisation 182 */ 183 template<typename T2toT2ResultType> 184 struct TFEL_VISIBILITY_LOCAL Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr<3u> > 185 : public T2toT2Concept<Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr<3u> > >, 186 public fsarray<TensorDimeToSize<T2toT2Traits<T2toT2ResultType>::dime>::value* 187 TensorDimeToSize<T2toT2Traits<T2toT2ResultType>::dime>::value, 188 typename T2toT2Traits<T2toT2ResultType>::NumType> 189 { 190 //! a simple alias 191 typedef EmptyRunTimeProperties RunTimeProperties; 192 //! a simple alias 193 typedef typename T2toT2Traits<T2toT2ResultType>::NumType value_type; 194 //! a simple check 195 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2ResultType>::dime==3u)); 196 /*! 197 * \param[in] a : first term of the product 198 * \param[in] b : second term of the product 199 */ 200 template<typename T2toT2Type, 201 typename T2toT2Type2> 202 TFEL_MATH_INLINE Exprtfel::math::Expr203 Expr(const T2toT2Type& a, 204 const T2toT2Type2& b) 205 { 206 //! a simple check 207 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type,tfel::math::T2toT2Concept>::cond)); 208 //! a simple check 209 TFEL_STATIC_ASSERT((tfel::meta::Implements<T2toT2Type2,tfel::math::T2toT2Concept>::cond)); 210 //! a simple check 211 TFEL_STATIC_ASSERT((T2toT2Traits<T2toT2Type>::dime==3u)); 212 //! a simple check 213 TFEL_STATIC_ASSERT((T2toT2Traits <T2toT2Type2>::dime==3u)); 214 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); 215 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); 216 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); 217 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); 218 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); 219 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); 220 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); 221 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); 222 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); 223 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); 224 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); 225 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); 226 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); 227 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); 228 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); 229 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); 230 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); 231 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); 232 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); 233 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); 234 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); 235 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); 236 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); 237 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); 238 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); 239 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); 240 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); 241 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); 242 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); 243 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); 244 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); 245 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); 246 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); 247 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); 248 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); 249 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); 250 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); 251 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); 252 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); 253 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); 254 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); 255 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); 256 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); 257 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); 258 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); 259 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); 260 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); 261 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); 262 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); 263 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); 264 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); 265 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); 266 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); 267 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); 268 this->v[54]=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); 269 this->v[55]=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); 270 this->v[56]=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); 271 this->v[57]=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); 272 this->v[58]=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); 273 this->v[59]=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); 274 this->v[60]=a(6,0)*b(0,6)+a(6,1)*b(1,6)+a(6,2)*b(2,6)+a(6,3)*b(3,6)+a(6,4)*b(4,6)+a(6,5)*b(5,6)+a(6,6)*b(6,6)+a(6,7)*b(7,6)+a(6,8)*b(8,6); 275 this->v[61]=a(6,0)*b(0,7)+a(6,1)*b(1,7)+a(6,2)*b(2,7)+a(6,3)*b(3,7)+a(6,4)*b(4,7)+a(6,5)*b(5,7)+a(6,6)*b(6,7)+a(6,7)*b(7,7)+a(6,8)*b(8,7); 276 this->v[62]=a(6,0)*b(0,8)+a(6,1)*b(1,8)+a(6,2)*b(2,8)+a(6,3)*b(3,8)+a(6,4)*b(4,8)+a(6,5)*b(5,8)+a(6,6)*b(6,8)+a(6,7)*b(7,8)+a(6,8)*b(8,8); 277 this->v[63]=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); 278 this->v[64]=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); 279 this->v[65]=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); 280 this->v[66]=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); 281 this->v[67]=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); 282 this->v[68]=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); 283 this->v[69]=a(7,0)*b(0,6)+a(7,1)*b(1,6)+a(7,2)*b(2,6)+a(7,3)*b(3,6)+a(7,4)*b(4,6)+a(7,5)*b(5,6)+a(7,6)*b(6,6)+a(7,7)*b(7,6)+a(7,8)*b(8,6); 284 this->v[70]=a(7,0)*b(0,7)+a(7,1)*b(1,7)+a(7,2)*b(2,7)+a(7,3)*b(3,7)+a(7,4)*b(4,7)+a(7,5)*b(5,7)+a(7,6)*b(6,7)+a(7,7)*b(7,7)+a(7,8)*b(8,7); 285 this->v[71]=a(7,0)*b(0,8)+a(7,1)*b(1,8)+a(7,2)*b(2,8)+a(7,3)*b(3,8)+a(7,4)*b(4,8)+a(7,5)*b(5,8)+a(7,6)*b(6,8)+a(7,7)*b(7,8)+a(7,8)*b(8,8); 286 this->v[72]=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); 287 this->v[73]=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); 288 this->v[74]=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); 289 this->v[75]=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); 290 this->v[76]=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); 291 this->v[77]=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); 292 this->v[78]=a(8,0)*b(0,6)+a(8,1)*b(1,6)+a(8,2)*b(2,6)+a(8,3)*b(3,6)+a(8,4)*b(4,6)+a(8,5)*b(5,6)+a(8,6)*b(6,6)+a(8,7)*b(7,6)+a(8,8)*b(8,6); 293 this->v[79]=a(8,0)*b(0,7)+a(8,1)*b(1,7)+a(8,2)*b(2,7)+a(8,3)*b(3,7)+a(8,4)*b(4,7)+a(8,5)*b(5,7)+a(8,6)*b(6,7)+a(8,7)*b(7,7)+a(8,8)*b(8,7); 294 this->v[80]=a(8,0)*b(0,8)+a(8,1)*b(1,8)+a(8,2)*b(2,8)+a(8,3)*b(3,8)+a(8,4)*b(4,8)+a(8,5)*b(5,8)+a(8,6)*b(6,8)+a(8,7)*b(7,8)+a(8,8)*b(8,8); 295 } // end of Expr 296 /*! 297 * \brief access operator 298 * \param[in] i : line index 299 * \param[in] j : column index 300 */ 301 TFEL_MATH_INLINE const value_type& operator ()tfel::math::Expr302 operator()(const unsigned short i, 303 const unsigned short j) const 304 { 305 return this->v[i*9+j]; 306 } // end of operator() 307 /*! 308 * \return the runtime properties 309 */ 310 TFEL_MATH_INLINE RunTimeProperties getRunTimePropertiestfel::math::Expr311 getRunTimeProperties() const 312 { 313 return RunTimeProperties(); 314 } 315 }; // end of struct Expr<T2toT2ResultType,T2toT2T2toT2ProductExpr> 316 317 } // end of namespace math 318 319 } // end of namespace tfel 320 321 #endif /* LIB_TFEL_MATH_T2TOT2T2TOT2PRODUCTEXPR_HXX */ 322