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