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

multiGridDataAnalysisWrapper2D.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_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