$treeview $search $mathjax
Palabos  Version 1.1
$projectbrief
$projectbrief
$searchbox

multiGridDataAnalysisWrapper3D.h

Go to the documentation of this file.
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