$treeview $search $mathjax
|
Palabos
Version 1.1
$projectbrief
|
$projectbrief
|
$searchbox |
00001 /* This file is part of the Palabos library. 00002 * 00003 * Copyright (C) 2011 FlowKit Sarl 00004 * Avenue de Chailly 23 00005 * 1012 Lausanne, Switzerland 00006 * E-mail contact: contact@flowkit.com 00007 * 00008 * The most recent release of Palabos can be downloaded at 00009 * <http://www.palabos.org/> 00010 * 00011 * The library Palabos is free software: you can redistribute it and/or 00012 * modify it under the terms of the GNU Affero General Public License as 00013 * published by the Free Software Foundation, either version 3 of the 00014 * License, or (at your option) any later version. 00015 * 00016 * The library is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU Affero General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU Affero General Public License 00022 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00023 */ 00024 00025 /* Main author: Daniel Lagrava 00026 **/ 00027 00028 00029 #ifndef MULTI_GRID_DATA_ANALYSIS_WRAPPER_2D_H 00030 #define MULTI_GRID_DATA_ANALYSIS_WRAPPER_2D_H 00031 00032 #include "dataProcessors/dataAnalysisWrapper2D.h" 00033 00034 namespace plb { 00035 00036 00037 /* *************** Reductive functions ******************************* */ 00038 00039 template<typename T, template<typename U> class Descriptor> 00040 T computeAverageDensity(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00041 00042 template<typename T, template<typename U> class Descriptor> 00043 T computeAverageDensity(MultiGridLattice2D<T,Descriptor>& lattice); 00044 00045 00046 template<typename T, template<typename U> class Descriptor> 00047 T computeAverageRhoBar(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00048 00049 template<typename T, template<typename U> class Descriptor> 00050 T computeAverageRhoBar(MultiGridLattice2D<T,Descriptor>& lattice); 00051 00052 00053 template<typename T, template<typename U> class Descriptor> 00054 T computeAverageEnergy(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00055 00056 template<typename T, template<typename U> class Descriptor> 00057 T computeAverageEnergy(MultiGridLattice2D<T,Descriptor>& lattice); 00058 00059 00060 template<typename T, template<typename U> class Descriptor, class BoolMask> 00061 plint count(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain, BoolMask boolMask); 00062 00063 template<typename T, template<typename U> class Descriptor, class BoolMask> 00064 plint count(MultiGridLattice2D<T,Descriptor>& lattice, BoolMask boolMask); 00065 00066 00067 /* *************** Extract Sub-Lattice ******************************* */ 00068 00069 template<typename T, template<typename U> class Descriptor> 00070 void extractSubDomain( MultiGridLattice2D<T,Descriptor>& lattice, 00071 MultiGridLattice2D<T,Descriptor>& extractedLattice, 00072 Box2D domain); 00073 00074 template<typename T, template<typename U> class Descriptor> 00075 std::auto_ptr<MultiGridLattice2D<T,Descriptor> > extractSubDomain(MultiGridLattice2D<T,Descriptor>& lattice, Box2D 00076 domain); 00077 00078 00079 /* *************** Density ******************************************* */ 00080 00081 template<typename T, template<typename U> class Descriptor> 00082 void computeDensity(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& density, Box2D domain); 00083 00084 template<typename T, template<typename U> class Descriptor> 00085 std::auto_ptr<MultiGridScalarField2D<T> > computeDensity(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00086 00087 template<typename T, template<typename U> class Descriptor> 00088 std::auto_ptr<MultiGridScalarField2D<T> > computeDensity(MultiGridLattice2D<T,Descriptor>& lattice); 00089 00090 00091 /* *************** RhoBar ******************************************** */ 00092 00093 template<typename T, template<typename U> class Descriptor> 00094 void computeDensity(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& rhoBar, Box2D domain); 00095 00096 template<typename T, template<typename U> class Descriptor> 00097 std::auto_ptr<MultiGridScalarField2D<T> > computeDensity(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00098 00099 template<typename T, template<typename U> class Descriptor> 00100 std::auto_ptr<MultiGridScalarField2D<T> > computeDensity(MultiGridLattice2D<T,Descriptor>& lattice); 00101 00102 00103 /* *************** Kinetic Energy ************************************ */ 00104 00105 template<typename T, template<typename U> class Descriptor> 00106 void computeKineticEnergy(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& energy, Box2D domain); 00107 00108 template<typename T, template<typename U> class Descriptor> 00109 std::auto_ptr<MultiGridScalarField2D<T> > computeKineticEnergy(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00110 00111 template<typename T, template<typename U> class Descriptor> 00112 std::auto_ptr<MultiGridScalarField2D<T> > computeKineticEnergy(MultiGridLattice2D<T,Descriptor>& lattice); 00113 00114 00115 /* *************** Velocity Norm ************************************* */ 00116 00117 template<typename T, template<typename U> class Descriptor> 00118 void computeVelocityNorm(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& velocityNorm, Box2D 00119 domain); 00120 00121 template<typename T, template<typename U> class Descriptor> 00122 std::auto_ptr<MultiGridScalarField2D<T> > computeVelocityNorm(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00123 00124 template<typename T, template<typename U> class Descriptor> 00125 std::auto_ptr<MultiGridScalarField2D<T> > computeVelocityNorm(MultiGridLattice2D<T,Descriptor>& lattice); 00126 00127 00128 /* *************** Velocity Component ******************************** */ 00129 00130 template<typename T, template<typename U> class Descriptor> 00131 void computeVelocityComponent(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& velocityComponent, 00132 Box2D domain, plint iComponent); 00133 00134 template<typename T, template<typename U> class Descriptor> 00135 std::auto_ptr<MultiGridScalarField2D<T> > computeVelocityComponent(MultiGridLattice2D<T,Descriptor>& lattice, 00136 Box2D domain, plint iComponent); 00137 00138 template<typename T, template<typename U> class Descriptor> 00139 std::auto_ptr<MultiGridScalarField2D<T> > computeVelocityComponent(MultiGridLattice2D<T,Descriptor>& lattice, plint 00140 iComponent); 00141 00142 00143 /* *************** Velocity ****************************************** */ 00144 00145 template<typename T, template<typename U> class Descriptor> 00146 void computeVelocity(MultiGridLattice2D<T,Descriptor>& lattice, 00147 MultiGridTensorField2D<T,Descriptor<T>::d>& velocity, Box2D domain); 00148 00149 template<typename T, template<typename U> class Descriptor> 00150 std::auto_ptr<MultiGridTensorField2D<T,Descriptor<T>::d> > 00151 computeVelocity(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00152 00153 template<typename T, template<typename U> class Descriptor> 00154 std::auto_ptr<MultiGridTensorField2D<T,Descriptor<T>::d> > 00155 computeVelocity(MultiGridLattice2D<T,Descriptor>& lattice); 00156 00157 00158 /* *************** Deviatoric Stress ********************************* */ 00159 00160 template<typename T, template<typename U> class Descriptor> 00161 void computeDeviatoricStress(MultiGridLattice2D<T,Descriptor>& lattice, 00162 MultiGridTensorField2D<T,SymmetricTensor<T,Descriptor>::n>& PiNeq, Box2D domain); 00163 00164 template<typename T, template<typename U> class Descriptor> 00165 std::auto_ptr<MultiGridTensorField2D<T,SymmetricTensor<T,Descriptor>::n> > 00166 computeDeviatoricStress(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00167 00168 template<typename T, template<typename U> class Descriptor> 00169 std::auto_ptr<MultiGridTensorField2D<T,SymmetricTensor<T,Descriptor>::n> > 00170 computeDeviatoricStress(MultiGridLattice2D<T,Descriptor>& lattice); 00171 00172 00173 /* *************** Strain Rate from Stress *************************** */ 00174 00175 template<typename T, template<typename U> class Descriptor> 00176 void computeStrainRateFromStress(MultiGridLattice2D<T,Descriptor>& lattice, 00177 MultiGridTensorField2D<T,SymmetricTensor<T,Descriptor>::n>& S, Box2D domain); 00178 00179 template<typename T, template<typename U> class Descriptor> 00180 std::auto_ptr<MultiGridTensorField2D<T,SymmetricTensor<T,Descriptor>::n> > 00181 computeStrainRateFromStress(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00182 00183 template<typename T, template<typename U> class Descriptor> 00184 std::auto_ptr<MultiGridTensorField2D<T,SymmetricTensor<T,Descriptor>::n> > 00185 computeStrainRateFromStress(MultiGridLattice2D<T,Descriptor>& lattice); 00186 00187 /* *************** Temperature ******************************************* */ 00188 00189 template<typename T, template<typename U> class Descriptor> 00190 void computeTemperature(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& temperature, Box2D 00191 domain); 00192 00193 template<typename T, template<typename U> class Descriptor> 00194 std::auto_ptr<MultiGridScalarField2D<T> > computeTemperature(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00195 00196 template<typename T, template<typename U> class Descriptor> 00197 std::auto_ptr<MultiGridScalarField2D<T> > computeTemperature(MultiGridLattice2D<T,Descriptor>& lattice); 00198 00199 /* *************** SoundSpeed ******************************************* */ 00200 00201 template<typename T, template<typename U> class Descriptor> 00202 void computeSoundSpeed(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& soundSpeed, Box2D domain); 00203 00204 template<typename T, template<typename U> class Descriptor> 00205 std::auto_ptr<MultiGridScalarField2D<T> > computeSoundSpeed(MultiGridLattice2D<T,Descriptor>& lattice, Box2D domain); 00206 00207 template<typename T, template<typename U> class Descriptor> 00208 std::auto_ptr<MultiGridScalarField2D<T> > computeSoundSpeed(MultiGridLattice2D<T,Descriptor>& lattice); 00209 00210 00211 /* *************** Population **************************************** */ 00212 00213 template<typename T, template<typename U> class Descriptor> 00214 void computePopulation(MultiGridLattice2D<T,Descriptor>& lattice, MultiGridScalarField2D<T>& population, 00215 Box2D domain, plint iPop); 00216 00217 template<typename T, template<typename U> class Descriptor> 00218 std::auto_ptr<MultiGridScalarField2D<T> > computePopulation(MultiGridLattice2D<T,Descriptor>& lattice, 00219 Box2D domain, plint iPop); 00220 00221 template<typename T, template<typename U> class Descriptor> 00222 std::auto_ptr<MultiGridScalarField2D<T> > computePopulation(MultiGridLattice2D<T,Descriptor>& lattice, plint iPop); 00223 00224 template<typename T, template<typename U> class Descriptor> 00225 void computeAllPopulations(MultiGridLattice2D<T,Descriptor>& lattice, 00226 MultiGridTensorField2D<T,Descriptor<T>::q>& populations); 00227 00228 template<typename T, template<typename U> class Descriptor> 00229 std::auto_ptr<MultiGridTensorField2D<T,Descriptor<T>::q> > computeAllPopulations(MultiGridLattice2D<T,Descriptor>& 00230 lattice); 00231 00232 template<typename T, template<typename U> class Descriptor> 00233 std::auto_ptr<MultiGridTensorField2D<T,Descriptor<T>::q> > computeAllPopulations(MultiGridLattice2D<T,Descriptor>& 00234 lattice, 00235 Box2D domain); 00236 00237 template<typename T, template<typename U> class Descriptor> 00238 void copyPopulations( MultiGridLattice2D<T,Descriptor>& latticeFrom, 00239 MultiGridLattice2D<T,Descriptor>& latticeTo, 00240 Box2D domain); 00241 00242 00243 /* *************** Reductive functions ******************************* */ 00244 00245 template<typename T> 00246 T computeAverage(MultiGridScalarField2D<T>& scalarField, Box2D domain); 00247 00248 template<typename T> 00249 T computeAverage(MultiGridScalarField2D<T>& scalarField); 00250 00251 00252 template<typename T> 00253 T computeMin(MultiGridScalarField2D<T>& scalarField, Box2D domain); 00254 00255 template<typename T> 00256 T computeMin(MultiGridScalarField2D<T>& scalarField); 00257 00258 00259 template<typename T> 00260 T computeMax(MultiGridScalarField2D<T>& scalarField, Box2D domain); 00261 00262 template<typename T> 00263 T computeMax(MultiGridScalarField2D<T>& scalarField); 00264 00265 00266 template<typename T> 00267 T computeBoundedAverage(MultiGridScalarField2D<T>& scalarField, Box2D domain); 00268 00269 template<typename T> 00270 T computeBoundedAverage(MultiGridScalarField2D<T>& scalarField); 00271 00272 00273 template<typename T, class BoolMask> 00274 plint count(MultiGridScalarField2D<T>& field, Box2D domain, BoolMask boolMask); 00275 00276 template<typename T, class BoolMask> 00277 plint count(MultiGridScalarField2D<T>& field, BoolMask boolMask); 00278 00279 /* *************** Generic operations *************** */ 00280 00281 template<typename T, class Function> 00282 void apply(Function f, MultiGridScalarField2D<T>& field, Box2D domain) { 00283 applyProcessingFunctional ( 00284 new ApplyScalarFunctional2D<T,Function>(f), domain, field); 00285 } 00286 00287 template<typename T, class Function> 00288 void apply(Function f, MultiGridScalarField2D<T>& field) { 00289 apply(f, field, field.getBoundingBox()); 00290 } 00291 00292 00293 template<typename T, class Function> 00294 void evaluate(Function f, MultiGridScalarField2D<T>& field, MultiGridScalarField2D<T>& result, Box2D domain) { 00295 applyProcessingFunctional ( 00296 new EvaluateScalarFunctional2D<T,Function>(f), domain, field, result); 00297 } 00298 00299 template<typename T, class Function> 00300 std::auto_ptr<MultiGridScalarField2D<T> > evaluate(Function f, MultiGridScalarField2D<T>& field, Box2D domain) { 00301 MultiGridScalarField2D<T>* result = new MultiGridScalarField2D<T>(field, domain); 00302 evaluate(f, field, *result, domain); 00303 return std::auto_ptr<MultiGridScalarField2D<T> >(result); 00304 } 00305 00306 template<typename T, class Function> 00307 std::auto_ptr<MultiGridScalarField2D<T> > evaluate(Function f, MultiGridScalarField2D<T>& field) { 00308 return evaluate(f, field, field.getBoundingBox()); 00309 } 00310 00311 00312 /* *************** Extract Sub-ScalarField *************************** */ 00313 00314 template<typename T> 00315 void extractSubDomain( MultiGridScalarField2D<T>& field, 00316 MultiGridScalarField2D<T>& extractedField, 00317 Box2D domain); 00318 00319 template<typename T> 00320 std::auto_ptr<MultiGridScalarField2D<T> > extractSubDomain(MultiGridScalarField2D<T>& field, Box2D domain); 00321 00322 00323 /* *************** Copy and Convert ScalarField *************************** */ 00324 00325 template<typename T1, typename T2> 00326 void copyConvert( MultiGridScalarField2D<T1>& field, 00327 MultiGridScalarField2D<T2>& convertedField, 00328 Box2D domain); 00329 00330 template<typename T1, typename T2> 00331 std::auto_ptr<MultiGridScalarField2D<T2> > copyConvert(MultiGridScalarField2D<T1>& field, Box2D domain); 00332 00333 template<typename T1, typename T2> 00334 std::auto_ptr<MultiGridScalarField2D<T2> > copyConvert(MultiGridScalarField2D<T1>& field); 00335 00336 00337 /* *************** MultiScalarField - Scalar operations *************** */ 00338 00339 template<typename T> 00340 void add(T scalar, MultiGridScalarField2D<T>& field, MultiGridScalarField2D<T>& result, Box2D domain); 00341 00342 template<typename T> 00343 std::auto_ptr<MultiGridScalarField2D<T> > add(T scalar, MultiGridScalarField2D<T>& field, Box2D domain); 00344 00345 template<typename T> 00346 std::auto_ptr<MultiGridScalarField2D<T> > add(T scalar, MultiGridScalarField2D<T>& field); 00347 00348 00349 template<typename T> 00350 void add(MultiGridScalarField2D<T>& field, T scalar, MultiGridScalarField2D<T>& result, Box2D domain); 00351 00352 template<typename T> 00353 std::auto_ptr<MultiGridScalarField2D<T> > add(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00354 00355 template<typename T> 00356 std::auto_ptr<MultiGridScalarField2D<T> > add(MultiGridScalarField2D<T>& field, T scalar); 00357 00358 00359 template<typename T> 00360 void subtract(T scalar, MultiGridScalarField2D<T>& field, MultiGridScalarField2D<T>& result, Box2D domain); 00361 00362 template<typename T> 00363 std::auto_ptr<MultiGridScalarField2D<T> > subtract(T scalar, MultiGridScalarField2D<T>& field, Box2D domain); 00364 00365 template<typename T> 00366 std::auto_ptr<MultiGridScalarField2D<T> > subtract(T scalar, MultiGridScalarField2D<T>& field); 00367 00368 00369 template<typename T> 00370 void subtract(MultiGridScalarField2D<T>& field, T scalar, MultiGridScalarField2D<T>& result, Box2D domain); 00371 00372 template<typename T> 00373 std::auto_ptr<MultiGridScalarField2D<T> > subtract(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00374 00375 template<typename T> 00376 std::auto_ptr<MultiGridScalarField2D<T> > subtract(MultiGridScalarField2D<T>& field, T scalar); 00377 00378 00379 template<typename T> 00380 void multiply(T scalar, MultiGridScalarField2D<T>& field, MultiGridScalarField2D<T>& result, Box2D domain); 00381 00382 template<typename T> 00383 std::auto_ptr<MultiGridScalarField2D<T> > multiply(T scalar, MultiGridScalarField2D<T>& field, Box2D domain); 00384 00385 template<typename T> 00386 std::auto_ptr<MultiGridScalarField2D<T> > multiply(T scalar, MultiGridScalarField2D<T>& field); 00387 00388 00389 template<typename T> 00390 void multiply(MultiGridScalarField2D<T>& field, T scalar, MultiGridScalarField2D<T>& result, Box2D domain); 00391 00392 template<typename T> 00393 std::auto_ptr<MultiGridScalarField2D<T> > multiply(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00394 00395 template<typename T> 00396 std::auto_ptr<MultiGridScalarField2D<T> > multiply(MultiGridScalarField2D<T>& field, T scalar); 00397 00398 00399 template<typename T> 00400 void divide(T scalar, MultiGridScalarField2D<T>& field, MultiGridScalarField2D<T>& result, Box2D domain); 00401 00402 template<typename T> 00403 std::auto_ptr<MultiGridScalarField2D<T> > divide(T scalar, MultiGridScalarField2D<T>& field, Box2D domain); 00404 00405 template<typename T> 00406 std::auto_ptr<MultiGridScalarField2D<T> > divide(T scalar, MultiGridScalarField2D<T>& field); 00407 00408 00409 template<typename T> 00410 void divide(MultiGridScalarField2D<T>& field, T scalar, MultiGridScalarField2D<T>& result, Box2D domain); 00411 00412 template<typename T> 00413 std::auto_ptr<MultiGridScalarField2D<T> > divide(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00414 00415 template<typename T> 00416 std::auto_ptr<MultiGridScalarField2D<T> > divide(MultiGridScalarField2D<T>& field, T scalar); 00417 00418 00419 /* *************** MultiScalarField - Scalar inplace operations *************** */ 00420 00421 template<typename T> 00422 void addInPlace(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00423 00424 template<typename T> 00425 void addInPlace(MultiGridScalarField2D<T>& field, T scalar); 00426 00427 template<typename T> 00428 void subtractInPlace(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00429 00430 template<typename T> 00431 void subtractInPlace(MultiGridScalarField2D<T>& field, T scalar); 00432 00433 template<typename T> 00434 void multiplyInPlace(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00435 00436 template<typename T> 00437 void multiplyInPlace(MultiGridScalarField2D<T>& field, T scalar); 00438 00439 template<typename T> 00440 void divideInPlace(MultiGridScalarField2D<T>& field, T scalar, Box2D domain); 00441 00442 template<typename T> 00443 void divideInPlace(MultiGridScalarField2D<T>& field, T scalar); 00444 00445 00446 /* *************** MultiScalarField - MultiScalarField operations *************** */ 00447 00448 template<typename T> 00449 void add(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, MultiGridScalarField2D<T>& result, Box2D domain); 00450 00451 template<typename T> 00452 std::auto_ptr<MultiGridScalarField2D<T> > add(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D domain); 00453 00454 template<typename T> 00455 std::auto_ptr<MultiGridScalarField2D<T> > add(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00456 00457 00458 template<typename T> 00459 void subtract(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, MultiGridScalarField2D<T>& result, Box2D 00460 domain); 00461 00462 template<typename T> 00463 std::auto_ptr<MultiGridScalarField2D<T> > subtract(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D 00464 domain); 00465 00466 template<typename T> 00467 std::auto_ptr<MultiGridScalarField2D<T> > subtract(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00468 00469 00470 template<typename T> 00471 void multiply(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, MultiGridScalarField2D<T>& result, Box2D 00472 domain); 00473 00474 template<typename T> 00475 std::auto_ptr<MultiGridScalarField2D<T> > multiply(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D 00476 domain); 00477 00478 template<typename T> 00479 std::auto_ptr<MultiGridScalarField2D<T> > multiply(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00480 00481 00482 template<typename T> 00483 void divide(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, MultiGridScalarField2D<T>& result, Box2D 00484 domain); 00485 00486 template<typename T> 00487 std::auto_ptr<MultiGridScalarField2D<T> > divide(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D 00488 domain); 00489 00490 template<typename T> 00491 std::auto_ptr<MultiGridScalarField2D<T> > divide(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00492 00493 00494 /* *************** MultiScalarField - MultiScalarField inplace operations *************** */ 00495 00496 template<typename T> 00497 void addInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D domain); 00498 00499 template<typename T> 00500 void addInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00501 00502 00503 template<typename T> 00504 void subtractInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D domain); 00505 00506 template<typename T> 00507 void subtractInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00508 00509 00510 template<typename T> 00511 void multiplyInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D domain); 00512 00513 template<typename T> 00514 void multiplyInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00515 00516 00517 template<typename T> 00518 void divideInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B, Box2D domain); 00519 00520 template<typename T> 00521 void divideInPlace(MultiGridScalarField2D<T>& A, MultiGridScalarField2D<T>& B); 00522 00523 /* ******************************************************************* */ 00524 /* *************** Tensor-field ****** */ 00525 /* ******************************************************************* */ 00526 00527 /* *************** Reductive functions ******************************* */ 00528 00529 template<typename T, int nDim, class BoolMask> 00530 plint count(MultiGridTensorField2D<T,nDim>& field, Box2D domain, BoolMask boolMask); 00531 00532 template<typename T, int nDim, class BoolMask> 00533 plint count(MultiGridTensorField2D<T,nDim>& field, BoolMask boolMask); 00534 00535 00536 /* *************** Copy-convert a tensor-field *************** */ 00537 00538 template<typename T1, typename T2, int nDim> 00539 void copyConvert( MultiGridTensorField2D<T1,nDim>& field, 00540 MultiGridTensorField2D<T2,nDim>& convertedField, 00541 Box2D domain); 00542 00543 template<typename T1, typename T2, int nDim> 00544 std::auto_ptr<MultiGridTensorField2D<T2,nDim> > copyConvert(MultiGridTensorField2D<T1,nDim>& field, Box2D domain); 00545 00546 template<typename T1, typename T2, int nDim> 00547 std::auto_ptr<MultiGridTensorField2D<T2,nDim> > copyConvert(MultiGridTensorField2D<T1,nDim>& field); 00548 00549 00550 /* *************** Extract Sub-TensorField *************************** */ 00551 00552 template<typename T, int nDim> 00553 void extractSubDomain( MultiGridTensorField2D<T,nDim>& field, 00554 MultiGridTensorField2D<T,nDim>& extractedField, 00555 Box2D domain); 00556 00557 template<typename T, int nDim> 00558 std::auto_ptr<MultiGridTensorField2D<T,nDim> > extractSubDomain(MultiGridTensorField2D<T,nDim>& field, Box2D domain); 00559 00560 00561 /* *************** Component (scalar-field) out of a tensor-field ****** */ 00562 00563 template<typename T, int nDim> 00564 void extractComponent(MultiGridTensorField2D<T,nDim>& tensorField, MultiGridScalarField2D<T>& component, Box2D domain, 00565 int iComponent); 00566 00567 template<typename T, int nDim> 00568 std::auto_ptr<MultiGridScalarField2D<T> > extractComponent(MultiGridTensorField2D<T,nDim>& tensorField, Box2D domain, 00569 int iComponent); 00570 00571 template<typename T, int nDim> 00572 std::auto_ptr<MultiGridScalarField2D<T> > extractComponent(MultiGridTensorField2D<T,nDim>& tensorField, int iComponent); 00573 00574 00575 /* *************** Vector-norm of each cell in the field *************** */ 00576 00577 template<typename T, int nDim> 00578 void computeNorm(MultiGridTensorField2D<T,nDim>& tensorField, MultiGridScalarField2D<T>& norm, Box2D domain); 00579 00580 template<typename T, int nDim> 00581 std::auto_ptr<MultiGridScalarField2D<T> > computeNorm(MultiGridTensorField2D<T,nDim>& tensorField, Box2D domain); 00582 00583 template<typename T, int nDim> 00584 std::auto_ptr<MultiGridScalarField2D<T> > computeNorm(MultiGridTensorField2D<T,nDim>& tensorField); 00585 00586 00587 /* *************** Squared vector-norm of each cell in the field ******** */ 00588 00589 template<typename T, int nDim> 00590 void computeNormSqr(MultiGridTensorField2D<T,nDim>& tensorField, MultiGridScalarField2D<T>& normSqr, Box2D domain); 00591 00592 template<typename T, int nDim> 00593 std::auto_ptr<MultiGridScalarField2D<T> > computeNormSqr(MultiGridTensorField2D<T,nDim>& tensorField, Box2D domain); 00594 00595 template<typename T, int nDim> 00596 std::auto_ptr<MultiGridScalarField2D<T> > computeNormSqr(MultiGridTensorField2D<T,nDim>& tensorField); 00597 00598 00599 /* *************** Tensor-norm of each symmetric tensor of a field ***** */ 00600 00601 template<typename T> 00602 void computeSymmetricTensorNorm(MultiGridTensorField2D<T,3>& tensorField, MultiGridScalarField2D<T>& norm, Box2D 00603 domain); 00604 00605 template<typename T> 00606 std::auto_ptr<MultiGridScalarField2D<T> > computeSymmetricTensorNorm(MultiGridTensorField2D<T,3>& tensorField, Box2D 00607 domain); 00608 00609 template<typename T> 00610 std::auto_ptr<MultiGridScalarField2D<T> > computeSymmetricTensorNorm(MultiGridTensorField2D<T,3>& tensorField); 00611 00612 00613 /* *************** Squared Tensor-norm of each symmetric tensor of a field*/ 00614 00615 template<typename T> 00616 void computeSymmetricTensorNormSqr(MultiGridTensorField2D<T,3>& tensorField, MultiGridScalarField2D<T>& normSqr, Box2D 00617 domain); 00618 00619 template<typename T> 00620 std::auto_ptr<MultiGridScalarField2D<T> > computeSymmetricTensorNormSqr(MultiGridTensorField2D<T,3>& tensorField, Box2D 00621 domain); 00622 00623 template<typename T> 00624 std::auto_ptr<MultiGridScalarField2D<T> > computeSymmetricTensorNormSqr(MultiGridTensorField2D<T,3>& tensorField); 00625 00626 00627 /* *************** Trace of each symmetric tensor of a field ************ */ 00628 00629 template<typename T> 00630 void computeSymmetricTensorTrace(MultiGridTensorField2D<T,3>& tensorField, MultiGridScalarField2D<T>& trace, Box2D 00631 domain); 00632 00633 template<typename T> 00634 std::auto_ptr<MultiGridScalarField2D<T> > computeSymmetricTensorTrace(MultiGridTensorField2D<T,3>& tensorField, Box2D 00635 domain); 00636 00637 template<typename T> 00638 std::auto_ptr<MultiGridScalarField2D<T> > computeSymmetricTensorTrace(MultiGridTensorField2D<T,3>& tensorField); 00639 00640 00641 /* *************** Vorticity from Velocity field *********************** */ 00642 00643 template<typename T> 00644 void computeVorticity(MultiGridTensorField2D<T,2>& velocity, MultiGridScalarField2D<T>& vorticity, Box2D domain); 00645 00646 template<typename T> 00647 std::auto_ptr<MultiGridScalarField2D<T> > computeVorticity(MultiGridTensorField2D<T,2>& velocity, Box2D domain); 00648 00649 template<typename T> 00650 std::auto_ptr<MultiGridScalarField2D<T> > computeVorticity(MultiGridTensorField2D<T,2>& velocity); 00651 00652 00653 /* *************** Vorticity, witout boundary treatment, from Velocity field */ 00654 00655 template<typename T> 00656 void computeBulkVorticity(MultiGridTensorField2D<T,2>& velocity, MultiGridScalarField2D<T>& vorticity, Box2D domain); 00657 00658 template<typename T> 00659 std::auto_ptr<MultiGridScalarField2D<T> > computeBulkVorticity(MultiGridTensorField2D<T,2>& velocity, Box2D domain); 00660 00661 template<typename T> 00662 std::auto_ptr<MultiGridScalarField2D<T> > computeBulkVorticity(MultiGridTensorField2D<T,2>& velocity); 00663 00664 00665 /* *************** Strain rate from Velocity field ********************* */ 00666 00667 template<typename T> 00668 void computeStrainRate(MultiGridTensorField2D<T,2>& velocity, MultiGridTensorField2D<T,3>& S, Box2D domain); 00669 00670 template<typename T> 00671 std::auto_ptr<MultiGridTensorField2D<T,3> > computeStrainRate(MultiGridTensorField2D<T,2>& velocity, Box2D domain); 00672 00673 template<typename T> 00674 std::auto_ptr<MultiGridTensorField2D<T,3> > computeStrainRate(MultiGridTensorField2D<T,2>& velocity); 00675 00676 00677 /* *************** Str. rate, witout boundary treatment, from Velocity field */ 00678 00679 template<typename T> 00680 void computeBulkStrainRate(MultiGridTensorField2D<T,2>& velocity, MultiGridTensorField2D<T,3>& S, Box2D domain); 00681 00682 template<typename T> 00683 std::auto_ptr<MultiGridTensorField2D<T,3> > computeBulkStrainRate(MultiGridTensorField2D<T,2>& velocity, Box2D domain); 00684 00685 template<typename T> 00686 std::auto_ptr<MultiGridTensorField2D<T,3> > computeBulkStrainRate(MultiGridTensorField2D<T,2>& velocity); 00687 00688 00689 /* *************** MultiTensorField - MultiTensorField operations *************** */ 00690 00691 template<typename T, int nDim> 00692 void add(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, MultiGridTensorField2D<T,nDim>& result, 00693 Box2D domain); 00694 00695 template<typename T, int nDim> 00696 std::auto_ptr<MultiGridTensorField2D<T,nDim> > add(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, 00697 Box2D domain); 00698 00699 template<typename T, int nDim> 00700 std::auto_ptr<MultiGridTensorField2D<T,nDim> > add(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& 00701 B); 00702 00703 00704 template<typename T, int nDim> 00705 void subtract(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, MultiGridTensorField2D<T,nDim>& 00706 result, Box2D domain); 00707 00708 template<typename T, int nDim> 00709 std::auto_ptr<MultiGridTensorField2D<T,nDim> > subtract(MultiGridTensorField2D<T,nDim>& A, 00710 MultiGridTensorField2D<T,nDim>& B, Box2D domain); 00711 00712 template<typename T, int nDim> 00713 std::auto_ptr<MultiGridTensorField2D<T,nDim> > subtract(MultiGridTensorField2D<T,nDim>& A, 00714 MultiGridTensorField2D<T,nDim>& B); 00715 00716 00717 template<typename T, int nDim> 00718 void multiply(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, MultiGridTensorField2D<T,nDim>& 00719 result, Box2D domain); 00720 00721 template<typename T, int nDim> 00722 std::auto_ptr<MultiGridTensorField2D<T,nDim> > multiply(MultiGridTensorField2D<T,nDim>& A, 00723 MultiGridTensorField2D<T,nDim>& B, Box2D domain); 00724 00725 template<typename T, int nDim> 00726 std::auto_ptr<MultiGridTensorField2D<T,nDim> > multiply(MultiGridTensorField2D<T,nDim>& A, 00727 MultiGridTensorField2D<T,nDim>& B); 00728 00729 00730 template<typename T, int nDim> 00731 void divide(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, MultiGridTensorField2D<T,nDim>& 00732 result, Box2D domain); 00733 00734 template<typename T, int nDim> 00735 std::auto_ptr<MultiGridTensorField2D<T,nDim> > divide(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& 00736 B, Box2D domain); 00737 00738 template<typename T, int nDim> 00739 std::auto_ptr<MultiGridTensorField2D<T,nDim> > divide(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& 00740 B); 00741 00742 00743 /* *************** MultiTensorField - MultiTensorField inplace operations *************** */ 00744 00745 template<typename T, int nDim> 00746 void addInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, Box2D domain); 00747 00748 template<typename T, int nDim> 00749 void addInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B); 00750 00751 00752 template<typename T, int nDim> 00753 void subtractInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, Box2D domain); 00754 00755 template<typename T, int nDim> 00756 void subtractInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B); 00757 00758 00759 template<typename T, int nDim> 00760 void multiplyInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, Box2D domain); 00761 00762 template<typename T, int nDim> 00763 void multiplyInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B); 00764 00765 00766 template<typename T, int nDim> 00767 void multiplyInPlace(MultiGridTensorField2D<T,nDim>& A, T alpha, Box2D domain); 00768 00769 template<typename T, int nDim> 00770 void multiplyInPlace(MultiGridTensorField2D<T,nDim>& A, T alpha); 00771 00772 00773 template<typename T, int nDim> 00774 void divideInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B, Box2D domain); 00775 00776 template<typename T, int nDim> 00777 void divideInPlace(MultiGridTensorField2D<T,nDim>& A, MultiGridTensorField2D<T,nDim>& B); 00778 00779 } // namespace plb 00780 00781 #endif // MULTI_GRID_DATA_ANALYSIS_WRAPPER_2D_H 00782
1.6.3
1.6.3