$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 00039 #ifndef REDUCTIVE_DATA_PROCESSOR_WRAPPER_2D_H 00040 #define REDUCTIVE_DATA_PROCESSOR_WRAPPER_2D_H 00041 00042 #include "atomicBlock/reductiveDataProcessingFunctional2D.h" 00043 00044 namespace plb { 00045 00046 /* *************** Generic wrappers, boxed functionals ********************** */ 00047 00050 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D& functional, 00051 Box2D domain, 00052 std::vector<AtomicBlock2D*> atomicBlocks); 00053 00057 template<typename T, template<typename U> class Descriptor> 00058 void applyProcessingFunctional ( 00059 ReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>& functional, 00060 Box2D domain, 00061 std::vector<BlockLattice2D<T,Descriptor>*> lattices ); 00062 00066 template<typename T> 00067 void applyProcessingFunctional ( 00068 ReductiveScalarFieldBoxProcessingFunctional2D<T>& functional, 00069 Box2D domain, 00070 std::vector<ScalarField2D<T>*> fields ); 00071 00075 template<typename T, int nDim> 00076 void applyProcessingFunctional ( 00077 ReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>& functional, 00078 Box2D domain, 00079 std::vector<TensorField2D<T,nDim>*> fields ); 00080 00084 template<typename T> 00085 void applyProcessingFunctional ( 00086 ReductiveNTensorFieldBoxProcessingFunctional2D<T>& functional, 00087 Box2D domain, 00088 std::vector<NTensorField2D<T>*> fields ); 00089 00090 /* *************** Typed wrappers with a single argument, boxed functionals * */ 00091 00092 template<typename T, template<typename U> class Descriptor> 00093 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_L<T,Descriptor>& functional, 00094 Box2D domain, BlockLattice2D<T,Descriptor>& lattice); 00095 00096 template<typename T> 00097 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_S<T>& functional, 00098 Box2D domain, ScalarField2D<T>& field); 00099 00100 template<typename T, int nDim> 00101 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_T<T,nDim>& functional, 00102 Box2D domain, TensorField2D<T,nDim>& field); 00103 00104 template<typename T> 00105 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_N<T>& functional, 00106 Box2D domain, NTensorField2D<T>& field); 00107 00108 /* *************** Typed wrappers with two arguments ************************ */ 00109 00110 template<typename T1, template<typename U1> class Descriptor1, 00111 typename T2, template<typename U2> class Descriptor2> 00112 void applyProcessingFunctional ( 00113 ReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00114 Box2D domain, 00115 BlockLattice2D<T1,Descriptor1>& lattice1, 00116 BlockLattice2D<T2,Descriptor2>& lattice2 ); 00117 00118 template<typename T1, typename T2> 00119 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_SS<T1,T2>& functional, 00120 Box2D domain, 00121 ScalarField2D<T1>& field1, 00122 ScalarField2D<T2>& field2); 00123 00124 template<typename T1, int nDim1, typename T2, int nDim2> 00125 void applyProcessingFunctional ( 00126 ReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00127 Box2D domain, 00128 TensorField2D<T1,nDim1>& field1, 00129 TensorField2D<T2,nDim2>& field2 ); 00130 00131 template<typename T1, typename T2, int nDim> 00132 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00133 Box2D domain, 00134 ScalarField2D<T1>& field1, 00135 TensorField2D<T2,nDim>& field2); 00136 00137 template<typename T1, typename T2> 00138 void applyProcessingFunctional ( 00139 ReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00140 Box2D domain, 00141 NTensorField2D<T1>& field1, 00142 NTensorField2D<T2>& field2 ); 00143 00144 template<typename T1, typename T2> 00145 void applyProcessingFunctional(ReductiveBoxProcessingFunctional2D_SN<T1,T2>& functional, 00146 Box2D domain, 00147 ScalarField2D<T1>& field1, 00148 NTensorField2D<T2>& field2); 00149 00150 template<typename T1, template<typename U> class Descriptor, typename T2> 00151 void applyProcessingFunctional ( 00152 ReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00153 Box2D domain, 00154 BlockLattice2D<T1,Descriptor>& lattice, 00155 ScalarField2D<T2>& field ); 00156 00157 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00158 void applyProcessingFunctional ( 00159 ReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00160 Box2D domain, 00161 BlockLattice2D<T1,Descriptor>& lattice, 00162 TensorField2D<T2,nDim>& field ); 00163 00164 template<typename T1, template<typename U> class Descriptor, typename T2> 00165 void applyProcessingFunctional ( 00166 ReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00167 Box2D domain, 00168 BlockLattice2D<T1,Descriptor>& lattice, 00169 NTensorField2D<T2>& field ); 00170 00171 00172 /* *************** Generic wrappers, dotted functionals ********************* */ 00173 00174 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D& functional, 00175 DotList2D const& dotList, 00176 std::vector<AtomicBlock2D*> atomicBlocks); 00177 00178 template<typename T, template<typename U> class Descriptor> 00179 void applyProcessingFunctional ( 00180 ReductiveLatticeDotProcessingFunctional2D<T,Descriptor>& functional, 00181 DotList2D const& dotList, 00182 std::vector<BlockLattice2D<T,Descriptor>*> lattices ); 00183 00184 template<typename T> 00185 void applyProcessingFunctional ( 00186 ReductiveScalarFieldDotProcessingFunctional2D<T>& functional, 00187 DotList2D const& dotList, 00188 std::vector<ScalarField2D<T>*> fields ); 00189 00190 template<typename T, int nDim> 00191 void applyProcessingFunctional ( 00192 ReductiveTensorFieldDotProcessingFunctional2D<T,nDim>& functional, 00193 DotList2D const& dotList, 00194 std::vector<TensorField2D<T,nDim>*> fields ); 00195 00196 template<typename T> 00197 void applyProcessingFunctional ( 00198 ReductiveNTensorFieldDotProcessingFunctional2D<T>& functional, 00199 DotList2D const& dotList, 00200 std::vector<NTensorField2D<T>*> fields ); 00201 00202 00203 /* *************** Typed wrappers with a single argument, dotted functionals* */ 00204 00205 template<typename T, template<typename U> class Descriptor> 00206 void applyProcessingFunctional ( 00207 ReductiveDotProcessingFunctional2D_L<T,Descriptor>& functional, 00208 DotList2D const& dotList, 00209 BlockLattice2D<T,Descriptor>& lattice ); 00210 00211 template<typename T> 00212 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_S<T>& functional, 00213 DotList2D const& dotList, 00214 ScalarField2D<T>& field); 00215 00216 template<typename T, int nDim> 00217 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_T<T,nDim>& functional, 00218 DotList2D const& dotList, 00219 TensorField2D<T,nDim>& field); 00220 00221 template<typename T> 00222 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_N<T>& functional, 00223 DotList2D const& dotList, 00224 NTensorField2D<T>& field); 00225 00226 /* *************** Typed wrappers with two arguments, dotted functionals* *****/ 00227 00229 template<typename T1, template<typename U1> class Descriptor1, 00230 typename T2, template<typename U2> class Descriptor2> 00231 void applyProcessingFunctional ( 00232 ReductiveDotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00233 DotList2D const& dotList, 00234 BlockLattice2D<T1,Descriptor1>& lattice1, 00235 BlockLattice2D<T2,Descriptor2>& lattice2 ); 00236 00237 template<typename T1, typename T2> 00238 void applyProcessingFunctional(ReductiveDotProcessingFunctional2D_SS<T1,T2>& functional, 00239 DotList2D const& dotList, 00240 ScalarField2D<T1>& field1, 00241 ScalarField2D<T2>& field2); 00242 00244 template<typename T1, int nDim1, typename T2, int nDim2> 00245 void applyProcessingFunctional ( 00246 ReductiveDotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00247 DotList2D const& dotList, 00248 TensorField2D<T1,nDim1>& field1, 00249 TensorField2D<T2,nDim2>& field2 ); 00250 00252 template<typename T1, typename T2> 00253 void applyProcessingFunctional ( 00254 ReductiveDotProcessingFunctional2D_NN<T1,T2>& functional, 00255 DotList2D const& dotList, 00256 NTensorField2D<T1>& field1, 00257 NTensorField2D<T2>& field2 ); 00258 00259 template<typename T1, typename T2, int nDim> 00260 void applyProcessingFunctional ( 00261 ReductiveDotProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00262 DotList2D const& dotList, 00263 ScalarField2D<T1>& field1, 00264 TensorField2D<T2,nDim>& field2 ); 00265 00266 template<typename T1, typename T2> 00267 void applyProcessingFunctional ( 00268 ReductiveDotProcessingFunctional2D_SN<T1,T2>& functional, 00269 DotList2D const& dotList, 00270 ScalarField2D<T1>& field1, 00271 NTensorField2D<T2>& field2 ); 00272 00273 template<typename T1, template<typename U> class Descriptor, typename T2> 00274 void applyProcessingFunctional ( 00275 ReductiveDotProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00276 DotList2D const& dotList, 00277 BlockLattice2D<T1,Descriptor>& lattice, 00278 ScalarField2D<T2>& field ); 00279 00280 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00281 void applyProcessingFunctional ( 00282 ReductiveDotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00283 DotList2D const& dotList, 00284 BlockLattice2D<T1,Descriptor>& lattice, 00285 TensorField2D<T2,nDim>& field ); 00286 00287 template<typename T1, template<typename U> class Descriptor, typename T2> 00288 void applyProcessingFunctional ( 00289 ReductiveDotProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00290 DotList2D const& dotList, 00291 BlockLattice2D<T1,Descriptor>& lattice, 00292 NTensorField2D<T2>& field ); 00293 00294 /* *************** Generic wrappers, bounded and boxed functionals ********** */ 00295 00296 void applyProcessingFunctional(BoundedReductiveBoxProcessingFunctional2D& functional, 00297 Box2D domain, std::vector<AtomicBlock2D*> atomicBlocks, 00298 plint boundaryWidth ); 00299 00300 template<typename T, template<typename U> class Descriptor> 00301 void applyProcessingFunctional ( 00302 BoundedReductiveLatticeBoxProcessingFunctional2D<T,Descriptor>& functional, 00303 Box2D domain, 00304 std::vector<BlockLattice2D<T,Descriptor>*> lattices, 00305 plint boundaryWidth = Descriptor<T>::boundaryWidth ); 00306 00307 template<typename T> 00308 void applyProcessingFunctional ( 00309 BoundedReductiveScalarFieldBoxProcessingFunctional2D<T>& functional, 00310 Box2D domain, std::vector<ScalarField2D<T>*> fields, 00311 plint boundaryWidth ); 00312 00313 template<typename T, int nDim> 00314 void applyProcessingFunctional ( 00315 BoundedReductiveTensorFieldBoxProcessingFunctional2D<T,nDim>& functional, 00316 Box2D domain, std::vector<TensorField2D<T,nDim>*> fields, 00317 plint boundaryWidth ); 00318 00319 template<typename T> 00320 void applyProcessingFunctional ( 00321 BoundedReductiveNTensorFieldBoxProcessingFunctional2D<T>& functional, 00322 Box2D domain, std::vector<NTensorField2D<T>*> fields, 00323 plint boundaryWidth ); 00324 00325 00326 /* ** Typed wrappers with a single argument, bounded and boxed functionals * */ 00327 00328 template<typename T, template<typename U> class Descriptor> 00329 void applyProcessingFunctional ( 00330 BoundedReductiveBoxProcessingFunctional2D_L<T,Descriptor>& functional, 00331 Box2D domain, 00332 BlockLattice2D<T,Descriptor>& lattice, 00333 plint boundaryWidth = Descriptor<T>::boundaryWidth ); 00334 00335 template<typename T> 00336 void applyProcessingFunctional(BoundedReductiveBoxProcessingFunctional2D_S<T>& functional, 00337 Box2D domain, ScalarField2D<T>& field, 00338 plint boundaryWidth); 00339 00340 00341 /* ** Typed wrappers with two arguments, bounded and boxed functionals *** */ 00342 00343 template<typename T1, template<typename U1> class Descriptor1, 00344 typename T2, template<typename U2> class Descriptor2> 00345 void applyProcessingFunctional ( 00346 BoundedReductiveBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>& functional, 00347 Box2D domain, 00348 BlockLattice2D<T1,Descriptor1>& lattice1, 00349 BlockLattice2D<T2,Descriptor2>& lattice2, 00350 plint boundaryWidth = Descriptor1<T1>::boundaryWidth ); 00351 00352 template<typename T1, typename T2> 00353 void applyProcessingFunctional ( 00354 BoundedReductiveBoxProcessingFunctional2D_SS<T1,T2>& functional, 00355 Box2D domain, 00356 ScalarField2D<T1>& field1, 00357 ScalarField2D<T2>& field2, 00358 plint boundaryWidth ); 00359 00360 template<typename T1, int nDim1, typename T2, int nDim2> 00361 void applyProcessingFunctional ( 00362 BoundedReductiveBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>& functional, 00363 Box2D domain, 00364 TensorField2D<T1,nDim1>& field1, 00365 TensorField2D<T2,nDim2>& field2, 00366 plint boundaryWidth ); 00367 00368 template<typename T1, typename T2, int nDim> 00369 void applyProcessingFunctional ( 00370 BoundedReductiveBoxProcessingFunctional2D_ST<T1,T2,nDim>& functional, 00371 Box2D domain, 00372 ScalarField2D<T1>& field1, 00373 TensorField2D<T2,nDim>& field2, 00374 plint boundaryWidth ); 00375 00376 template<typename T1, int nDim1, typename T2> 00377 void applyProcessingFunctional ( 00378 BoundedReductiveBoxProcessingFunctional2D_NN<T1,T2>& functional, 00379 Box2D domain, 00380 NTensorField2D<T1>& field1, 00381 NTensorField2D<T2>& field2, 00382 plint boundaryWidth ); 00383 00384 template<typename T1, typename T2> 00385 void applyProcessingFunctional ( 00386 BoundedReductiveBoxProcessingFunctional2D_SN<T1,T2>& functional, 00387 Box2D domain, 00388 ScalarField2D<T1>& field1, 00389 NTensorField2D<T2>& field2, 00390 plint boundaryWidth ); 00391 00392 template<typename T1, template<typename U> class Descriptor, typename T2> 00393 void applyProcessingFunctional ( 00394 BoundedReductiveBoxProcessingFunctional2D_LS<T1,Descriptor,T2>& functional, 00395 Box2D domain, 00396 BlockLattice2D<T1,Descriptor>& lattice, 00397 ScalarField2D<T2>& field, 00398 plint boundaryWidth = Descriptor<T1>::boundaryWidth ); 00399 00400 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00401 void applyProcessingFunctional ( 00402 BoundedReductiveBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>& functional, 00403 Box2D domain, 00404 BlockLattice2D<T1,Descriptor>& lattice, 00405 TensorField2D<T2,nDim>& field, 00406 plint boundaryWidth = Descriptor<T1>::boundaryWidth ); 00407 00408 template<typename T1, template<typename U> class Descriptor, typename T2> 00409 void applyProcessingFunctional ( 00410 BoundedReductiveBoxProcessingFunctional2D_LN<T1,Descriptor,T2>& functional, 00411 Box2D domain, 00412 BlockLattice2D<T1,Descriptor>& lattice, 00413 NTensorField2D<T2>& field, 00414 plint boundaryWidth = Descriptor<T1>::boundaryWidth ); 00415 00416 } // namespace plb 00417 00418 #endif // REDUCTIVE_DATA_PROCESSOR_WRAPPER_2D_H
1.6.3
1.6.3