Changeset 1038 for XIOS/trunk/src/parse_expr/operator_expr.hpp
- Timestamp:
- 01/30/17 16:33:03 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/trunk/src/parse_expr/operator_expr.hpp
r1019 r1038 17 17 typedef double (*functionScalar)(double); 18 18 typedef double (*functionScalarScalar)(double, double); 19 typedef double (*functionScalarScalarScalar)(double, double,double); 19 20 typedef CArray<double,1> (*functionField)(const CArray<double,1>&); 20 21 typedef CArray<double,1> (*functionFieldField)(const CArray<double,1>&, const CArray<double,1>&); 21 22 typedef CArray<double,1> (*functionFieldScalar)(const CArray<double,1>&, double); 22 23 typedef CArray<double,1> (*functionScalarField)(double, const CArray<double,1>&); 23 24 typedef CArray<double,1> (*functionScalarScalarField)(double, double, const CArray<double,1>&); 25 typedef CArray<double,1> (*functionScalarFieldScalar)(double, const CArray<double,1>&, double); 26 typedef CArray<double,1> (*functionScalarFieldField)(double, const CArray<double,1>&, const CArray<double,1>&); 27 typedef CArray<double,1> (*functionFieldScalarScalar)(const CArray<double,1>&, double, double); 28 typedef CArray<double,1> (*functionFieldScalarField)(const CArray<double,1>&, double, const CArray<double,1>&); 29 typedef CArray<double,1> (*functionFieldFieldScalar)(const CArray<double,1>&, const CArray<double,1>&, double); 30 typedef CArray<double,1> (*functionFieldFieldField)(const CArray<double,1>&, const CArray<double,1>&, const CArray<double,1>&); 31 24 32 COperatorExpr(void) 25 33 { … … 44 52 opScalarScalar[string("ge")] = ge_ss; 45 53 opScalarScalar[string("ne")] = ne_ss; 46 54 opScalarScalarScalar[string("cond")] = cond_sss; 55 47 56 opField[string("neg")] = neg_f; 48 57 opField[string("cos")] = cos_f; … … 88 97 opScalarField[string("ge")] = ge_sf; 89 98 opScalarField[string("ne")] = ne_sf; 99 100 opScalarScalarField[string("cond")] = cond_ssf; 101 opScalarFieldScalar[string("cond")] = cond_sfs; 102 opScalarFieldField[string("cond")] = cond_sff; 103 opFieldScalarScalar[string("cond")] = cond_fss; 104 opFieldScalarField[string("cond")] = cond_fsf; 105 opFieldFieldScalar[string("cond")] = cond_ffs; 106 opFieldFieldField[string("cond")] = cond_fff; 107 108 90 109 } 91 110 … … 106 125 } 107 126 127 functionScalarScalarScalar getOpScalarScalarScalar(const string& id) 128 { 129 map<string,double (*)(double,double,double)>::iterator it; 130 it = opScalarScalarScalar.find(id); 131 if (it == opScalarScalarScalar.end()) ERROR("functionScalarScalarScalar getOpScalarScalarScalar(const string& id)", << "unknown operator : " << id) 132 return it->second; 133 } 134 108 135 functionField getOpField(const string& id) 109 136 { … … 138 165 } 139 166 167 functionScalarScalarField getOpScalarScalarField(const string& id) 168 { 169 map<string,functionScalarScalarField>::iterator it; 170 it = opScalarScalarField.find(id); 171 if (it == opScalarScalarField.end()) ERROR("functionScalarScalarField getOpScalarScalarField(const string& id)", << "unknown operator : " << id) 172 return it->second; 173 } 174 175 functionScalarFieldScalar getOpScalarFieldScalar(const string& id) 176 { 177 map<string,functionScalarFieldScalar>::iterator it; 178 it = opScalarFieldScalar.find(id); 179 if (it == opScalarFieldScalar.end()) ERROR("functionScalarFieldScalar getOpScalarScalarField(const string& id)", << "unknown operator : " << id) 180 return it->second; 181 } 182 183 functionScalarFieldField getOpScalarFieldField(const string& id) 184 { 185 map<string,functionScalarFieldField>::iterator it; 186 it = opScalarFieldField.find(id); 187 if (it == opScalarFieldField.end()) ERROR("functionScalarFieldField getOpScalarFieldField(const string& id)", << "unknown operator : " << id) 188 return it->second; 189 } 190 191 functionFieldScalarScalar getOpFieldScalarScalar(const string& id) 192 { 193 map<string,functionFieldScalarScalar>::iterator it; 194 it = opFieldScalarScalar.find(id); 195 if (it == opFieldScalarScalar.end()) ERROR("functionFieldScalarScalar getOpFieldScalarScalar(const string& id)", << "unknown operator : " << id) 196 return it->second; 197 } 198 199 functionFieldScalarField getOpFieldScalarField(const string& id) 200 { 201 map<string,functionFieldScalarField>::iterator it; 202 it = opFieldScalarField.find(id); 203 if (it == opFieldScalarField.end()) ERROR("functionFieldScalarField getOpFieldScalarField(const string& id)", << "unknown operator : " << id) 204 return it->second; 205 } 206 207 functionFieldFieldScalar getOpFieldFieldScalar(const string& id) 208 { 209 map<string,functionFieldFieldScalar>::iterator it; 210 it = opFieldFieldScalar.find(id); 211 if (it == opFieldFieldScalar.end()) ERROR("functionFieldFieldScalar getOpFieldFieldScalar(const string& id)", << "unknown operator : " << id) 212 return it->second; 213 } 214 215 functionFieldFieldField getOpFieldFieldField(const string& id) 216 { 217 map<string,functionFieldFieldField>::iterator it; 218 it = opFieldFieldField.find(id); 219 if (it == opFieldFieldField.end()) ERROR("functionFieldFieldField getOpFieldFieldField(const string& id)", << "unknown operator : " << id) 220 return it->second; 221 } 222 223 140 224 map<string,functionScalar> opScalar; 141 225 map<string,functionScalarScalar> opScalarScalar; 226 map<string,functionScalarScalarScalar> opScalarScalarScalar; 142 227 map<string,functionField> opField; 143 228 map<string,functionFieldField> opFieldField; 144 229 map<string,functionFieldScalar> opFieldScalar; 145 230 map<string,functionScalarField> opScalarField; 231 map<string,functionScalarScalarField> opScalarScalarField; 232 map<string,functionScalarFieldScalar> opScalarFieldScalar; 233 map<string,functionScalarFieldField> opScalarFieldField; 234 map<string,functionFieldScalarScalar> opFieldScalarScalar; 235 map<string,functionFieldScalarField> opFieldScalarField; 236 map<string,functionFieldFieldScalar> opFieldFieldScalar; 237 map<string,functionFieldFieldField> opFieldFieldField; 238 239 146 240 147 241 static inline double neg_s(double x) { return -x; } … … 209 303 static inline CArray<double,1> ge_sf(double x, const CArray<double,1>& y) { return Array<double,1>(x >= y); } 210 304 static inline CArray<double,1> ne_sf(double x, const CArray<double,1>& y) { return Array<double,1>(x != y); } 305 306 307 static inline double cond_sss(double x, double y, double z) { return (x==0) ? z : y ; } 308 309 static inline CArray<double,1> cond_ssf(double x, double y, const CArray<double,1>& z) 310 { 311 CArray<double,1> ret(z.numElements()) ; 312 if (x==0) ret=z ; 313 else ret=y ; 314 return ret ; 315 } 316 317 static inline CArray<double,1> cond_sfs(double x, const CArray<double,1>& y, double z) 318 { 319 CArray<double,1> ret(y.numElements()) ; 320 if (x==0) ret=z ; 321 else ret=y ; 322 return ret ; 323 } 324 325 static inline CArray<double,1> cond_sff(double x, const CArray<double,1>& y, const CArray<double,1>& z) 326 { 327 CArray<double,1> ret(y.numElements()) ; 328 if (x==0) ret=z ; 329 else ret=y ; 330 return ret ; 331 } 332 333 static inline CArray<double,1> cond_fss(const CArray<double,1>& x, double y, double z) 334 { 335 CArray<double,1> ret(x.numElements()) ; 336 Array<double,1>::const_iterator itx=x.begin(),itxe=x.end(); 337 Array<double,1>::iterator itret=ret.begin() ; 338 339 for(;itx!=itxe;++itx,++itret) *itret=( (*itx==0)?z:y) ; 340 return ret ; 341 } 342 343 static inline CArray<double,1> cond_fsf(const CArray<double,1>& x, double y, const CArray<double,1>& z) 344 { 345 CArray<double,1> ret(x.numElements()) ; 346 Array<double,1>::const_iterator itx=x.begin(), itxe=x.end(), itz=z.begin(); 347 Array<double,1>::iterator itret=ret.begin() ; 348 for(;itx!=itxe;++itx,++itz,++itret) *itret=( (*itx==0)?*itz:y) ; 349 return ret ; 350 } 351 352 static inline CArray<double,1> cond_ffs(const CArray<double,1>& x, const CArray<double,1>& y, double z) 353 { 354 CArray<double,1> ret(x.numElements()) ; 355 Array<double,1>::const_iterator itx=x.begin(), itxe=x.end(), ity=y.begin() ; 356 Array<double,1>::iterator itret=ret.begin() ; 357 for(;itx!=itxe;++itx,++ity,++itret) *itret=( (*itx==0)?z:*ity) ; 358 return ret ; 359 } 360 361 static inline CArray<double,1> cond_fff(const CArray<double,1>& x, const CArray<double,1>& y, const CArray<double,1>& z) 362 { 363 CArray<double,1> ret(x.numElements()) ; 364 Array<double,1>::const_iterator itx=x.begin(), itxe=x.end(), ity=y.begin(), itz=z.begin() ; 365 Array<double,1>::iterator itret=ret.begin() ; 366 for(;itx!=itxe;++itx,++ity,++itz,++itret) *itret=( (*itx==0)?*itz:*ity) ; 367 return ret ; 368 } 369 211 370 }; 212 371
Note: See TracChangeset
for help on using the changeset viewer.