$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 00026 #ifndef DATA_PROCESSOR_WRAPPER_2D_HH 00027 #define DATA_PROCESSOR_WRAPPER_2D_HH 00028 00029 #include "atomicBlock/dataProcessorWrapper2D.h" 00030 #include "atomicBlock/blockLattice2D.h" 00031 #include "atomicBlock/dataField2D.h" 00032 #include "atomicBlock/dataProcessor2D.h" 00033 #include "atomicBlock/atomicBlockOperations2D.h" 00034 #include "core/plbDebug.h" 00035 00036 namespace plb { 00037 00038 /* *************** LatticeBoxProcessing2D ****************************************** */ 00039 00040 template<typename T, template<typename U> class Descriptor> 00041 void applyProcessingFunctional ( 00042 LatticeBoxProcessingFunctional2D<T,Descriptor>* functional, 00043 Box2D domain, 00044 std::vector<BlockLattice2D<T,Descriptor>*> lattices ) 00045 { 00046 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00047 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00048 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00049 } 00050 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), atomicBlocks ); 00051 } 00052 00053 template<typename T, template<typename U> class Descriptor> 00054 void integrateProcessingFunctional ( 00055 LatticeBoxProcessingFunctional2D<T,Descriptor>* functional, 00056 Box2D domain, 00057 std::vector<BlockLattice2D<T,Descriptor>*> lattices, plint level ) 00058 { 00059 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00060 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00061 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00062 } 00063 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00064 atomicBlocks, level ); 00065 } 00066 00067 00068 /* *************** ScalarFieldBoxProcessing2D ******************************* */ 00069 00070 template<typename T> 00071 void applyProcessingFunctional(ScalarFieldBoxProcessingFunctional2D<T>* functional, 00072 Box2D domain, 00073 std::vector<ScalarField2D<T>*> fields ) 00074 { 00075 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00076 for (pluint iField=0; iField<fields.size(); ++iField) { 00077 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00078 } 00079 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), atomicBlocks ); 00080 } 00081 00082 template<typename T> 00083 void integrateProcessingFunctional(ScalarFieldBoxProcessingFunctional2D<T>* functional, 00084 Box2D domain, 00085 std::vector<ScalarField2D<T>*> fields, plint level ) 00086 { 00087 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00088 for (pluint iField=0; iField<fields.size(); ++iField) { 00089 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00090 } 00091 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00092 atomicBlocks, level ); 00093 } 00094 00095 00096 /* *************** TensorFieldBoxProcessing2D ******************************* */ 00097 00098 template<typename T, int nDim> 00099 void applyProcessingFunctional ( 00100 TensorFieldBoxProcessingFunctional2D<T,nDim>* functional, 00101 Box2D domain, 00102 std::vector<TensorField2D<T,nDim>*> fields ) 00103 { 00104 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00105 for (pluint iField=0; iField<fields.size(); ++iField) { 00106 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00107 } 00108 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), atomicBlocks ); 00109 } 00110 00111 template<typename T, int nDim> 00112 void integrateProcessingFunctional ( 00113 TensorFieldBoxProcessingFunctional2D<T,nDim>* functional, 00114 Box2D domain, 00115 std::vector<TensorField2D<T,nDim>*> fields, plint level ) 00116 { 00117 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00118 for (pluint iField=0; iField<fields.size(); ++iField) { 00119 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00120 } 00121 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00122 atomicBlocks, level ); 00123 } 00124 00125 /* *************** NTensorFieldBoxProcessing2D ******************************* */ 00126 00127 template<typename T> 00128 void applyProcessingFunctional ( 00129 NTensorFieldBoxProcessingFunctional2D<T>* functional, 00130 Box2D domain, 00131 std::vector<NTensorField2D<T>*> fields ) 00132 { 00133 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00134 for (pluint iField=0; iField<fields.size(); ++iField) { 00135 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00136 } 00137 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), atomicBlocks ); 00138 } 00139 00140 template<typename T> 00141 void integrateProcessingFunctional ( 00142 NTensorFieldBoxProcessingFunctional2D<T>* functional, 00143 Box2D domain, 00144 std::vector<NTensorField2D<T>*> fields, plint level ) 00145 { 00146 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00147 for (pluint iField=0; iField<fields.size(); ++iField) { 00148 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00149 } 00150 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00151 atomicBlocks, level ); 00152 } 00153 00154 /* *************** BoxProcessing2D_L ******************************************* */ 00155 00156 template<typename T, template<typename U> class Descriptor> 00157 void applyProcessingFunctional(BoxProcessingFunctional2D_L<T,Descriptor>* functional, 00158 Box2D domain, BlockLattice2D<T,Descriptor>& lattice) 00159 { 00160 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), lattice ); 00161 } 00162 00163 template<typename T, template<typename U> class Descriptor> 00164 void integrateProcessingFunctional ( 00165 BoxProcessingFunctional2D_L<T,Descriptor>* functional, 00166 Box2D domain, BlockLattice2D<T,Descriptor>& lattice, plint level ) 00167 { 00168 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), lattice, level ); 00169 } 00170 00171 00172 /* *************** BoxProcessing2D_S ******************************************* */ 00173 00174 template<typename T> 00175 void applyProcessingFunctional(BoxProcessingFunctional2D_S<T>* functional, 00176 Box2D domain, ScalarField2D<T>& field) 00177 { 00178 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), field ); 00179 } 00180 00181 template<typename T> 00182 void integrateProcessingFunctional(BoxProcessingFunctional2D_S<T>* functional, 00183 Box2D domain, ScalarField2D<T>& field, plint level) 00184 { 00185 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), field, level ); 00186 } 00187 00188 00189 /* *************** BoxProcessing2D_T ******************************************* */ 00190 00191 template<typename T, int nDim> 00192 void applyProcessingFunctional(BoxProcessingFunctional2D_T<T,nDim>* functional, 00193 Box2D domain, TensorField2D<T,nDim>& field) 00194 { 00195 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), field ); 00196 } 00197 00198 template<typename T, int nDim> 00199 void integrateProcessingFunctional(BoxProcessingFunctional2D_T<T,nDim>* functional, 00200 Box2D domain, TensorField2D<T,nDim>& field, 00201 plint level) 00202 { 00203 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), field, level ); 00204 } 00205 00206 /* *************** BoxProcessing2D_N ******************************************* */ 00207 00208 template<typename T> 00209 void applyProcessingFunctional(BoxProcessingFunctional2D_N<T>* functional, 00210 Box2D domain, NTensorField2D<T>& field) 00211 { 00212 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), field ); 00213 } 00214 00215 template<typename T> 00216 void integrateProcessingFunctional(BoxProcessingFunctional2D_N<T>* functional, 00217 Box2D domain, NTensorField2D<T>& field, 00218 plint level) 00219 { 00220 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), field, level ); 00221 } 00222 00223 /* *************** BoxProcessing2D_LL******************************************* */ 00224 00225 template<typename T1, template<typename U1> class Descriptor1, 00226 typename T2, template<typename U2> class Descriptor2> 00227 void applyProcessingFunctional ( 00228 BoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 00229 Box2D domain, 00230 BlockLattice2D<T1,Descriptor1>& lattice1, 00231 BlockLattice2D<T2,Descriptor2>& lattice2 ) 00232 { 00233 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00234 lattice1, lattice2 ); 00235 } 00236 00237 template<typename T1, template<typename U1> class Descriptor1, 00238 typename T2, template<typename U2> class Descriptor2> 00239 void integrateProcessingFunctional ( 00240 BoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional, Box2D domain, 00241 BlockLattice2D<T1,Descriptor1>& lattice1, 00242 BlockLattice2D<T2,Descriptor2>& lattice2, plint level ) 00243 { 00244 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00245 lattice1, lattice2, level ); 00246 } 00247 00248 00249 /* *************** BoxProcessing2D_SS ****************************************** */ 00250 00251 template<typename T1, typename T2> 00252 void applyProcessingFunctional(BoxProcessingFunctional2D_SS<T1,T2>* functional, 00253 Box2D domain, 00254 ScalarField2D<T1>& field1, 00255 ScalarField2D<T2>& field2 ) 00256 { 00257 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00258 field1, field2 ); 00259 } 00260 00261 template<typename T1, typename T2> 00262 void integrateProcessingFunctional(BoxProcessingFunctional2D_SS<T1,T2>* functional, 00263 Box2D domain, 00264 ScalarField2D<T1>& field1, 00265 ScalarField2D<T2>& field2, plint level) 00266 { 00267 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00268 field1, field2, level ); 00269 } 00270 00271 00272 /* *************** BoxProcessing2D_TT ****************************************** */ 00273 00274 template<typename T1, int nDim1, typename T2, int nDim2> 00275 void applyProcessingFunctional ( 00276 BoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional, 00277 Box2D domain, 00278 TensorField2D<T1,nDim1>& field1, 00279 TensorField2D<T2,nDim2>& field2 ) 00280 { 00281 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00282 field1, field2 ); 00283 } 00284 00285 template<typename T1, int nDim1, typename T2, int nDim2> 00286 void integrateProcessingFunctional ( 00287 BoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional, 00288 Box2D domain, 00289 TensorField2D<T1,nDim1>& field1, 00290 TensorField2D<T2,nDim2>& field2, plint level) 00291 { 00292 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00293 field1, field2, level ); 00294 } 00295 00296 00297 /* *************** BoxProcessing2D_NN ****************************************** */ 00298 00299 template<typename T1, typename T2> 00300 void applyProcessingFunctional ( 00301 BoxProcessingFunctional2D_NN<T1,T2>* functional, 00302 Box2D domain, 00303 NTensorField2D<T1>& field1, 00304 NTensorField2D<T2>& field2 ) 00305 { 00306 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00307 field1, field2 ); 00308 } 00309 00310 template<typename T1, typename T2> 00311 void integrateProcessingFunctional ( 00312 BoxProcessingFunctional2D_NN<T1,T2>* functional, 00313 Box2D domain, 00314 NTensorField2D<T1>& field1, 00315 NTensorField2D<T2>& field2, plint level) 00316 { 00317 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00318 field1, field2, level ); 00319 } 00320 00321 00322 /* *************** BoxProcessing2D_ST ****************************************** */ 00323 00324 template<typename T1, typename T2, int nDim> 00325 void applyProcessingFunctional(BoxProcessingFunctional2D_ST<T1,T2,nDim>* functional, 00326 Box2D domain, 00327 ScalarField2D<T1>& field1, 00328 TensorField2D<T2,nDim>& field2 ) 00329 { 00330 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00331 field1, field2 ); 00332 } 00333 00334 template<typename T1, typename T2, int nDim> 00335 void integrateProcessingFunctional(BoxProcessingFunctional2D_ST<T1,T2,nDim>* functional, 00336 Box2D domain, 00337 ScalarField2D<T1>& field1, 00338 TensorField2D<T2,nDim>& field2, plint level) 00339 { 00340 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00341 field1, field2, level ); 00342 } 00343 00344 00345 /* *************** BoxProcessing2D_SN ****************************************** */ 00346 00347 template<typename T1, typename T2> 00348 void applyProcessingFunctional(BoxProcessingFunctional2D_SN<T1,T2>* functional, 00349 Box2D domain, 00350 ScalarField2D<T1>& field1, 00351 NTensorField2D<T2>& field2 ) 00352 { 00353 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00354 field1, field2 ); 00355 } 00356 00357 template<typename T1, typename T2> 00358 void integrateProcessingFunctional(BoxProcessingFunctional2D_SN<T1,T2>* functional, 00359 Box2D domain, 00360 ScalarField2D<T1>& field1, 00361 NTensorField2D<T2>& field2, plint level) 00362 { 00363 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00364 field1, field2, level ); 00365 } 00366 00367 00368 /* *************** BoxProcessing2D_LS ****************************************** */ 00369 00370 template<typename T1, template<typename U> class Descriptor, typename T2> 00371 void applyProcessingFunctional ( 00372 BoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional, 00373 Box2D domain, 00374 BlockLattice2D<T1,Descriptor>& lattice, 00375 ScalarField2D<T2>& field ) 00376 { 00377 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00378 lattice, field ); 00379 } 00380 00381 template<typename T1, template<typename U> class Descriptor, typename T2> 00382 void integrateProcessingFunctional ( 00383 BoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional, 00384 Box2D domain, 00385 BlockLattice2D<T1,Descriptor>& lattice, 00386 ScalarField2D<T2>& field, plint level ) 00387 { 00388 addInternalProcessor( BoxProcessorGenerator2D(functional, domain), 00389 lattice, field, level ); 00390 } 00391 00392 00393 /* *************** BoxProcessing2D_LT ****************************************** */ 00394 00395 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00396 void applyProcessingFunctional ( 00397 BoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional, 00398 Box2D domain, 00399 BlockLattice2D<T1,Descriptor>& lattice, 00400 TensorField2D<T2,nDim>& field ) 00401 { 00402 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00403 lattice, field ); 00404 } 00405 00406 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00407 void integrateProcessingFunctional ( 00408 BoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional, 00409 Box2D domain, 00410 BlockLattice2D<T1,Descriptor>& lattice, 00411 TensorField2D<T2,nDim>& field, plint level ) 00412 { 00413 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00414 lattice, field ); 00415 } 00416 00417 /* *************** BoxProcessing2D_LN ****************************************** */ 00418 00419 template<typename T1, template<typename U> class Descriptor, typename T2> 00420 void applyProcessingFunctional ( 00421 BoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional, 00422 Box2D domain, 00423 BlockLattice2D<T1,Descriptor>& lattice, 00424 NTensorField2D<T2>& field ) 00425 { 00426 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00427 lattice, field ); 00428 } 00429 00430 template<typename T1, template<typename U> class Descriptor, typename T2> 00431 void integrateProcessingFunctional ( 00432 BoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional, 00433 Box2D domain, 00434 BlockLattice2D<T1,Descriptor>& lattice, 00435 NTensorField2D<T2>& field, plint level ) 00436 { 00437 executeDataProcessor( BoxProcessorGenerator2D(functional, domain), 00438 lattice, field ); 00439 } 00440 00441 /* *************** LatticeDotProcessing2D ****************************************** */ 00442 00443 template<typename T, template<typename U> class Descriptor> 00444 void applyProcessingFunctional ( 00445 LatticeDotProcessingFunctional2D<T,Descriptor>* functional, 00446 DotList2D const& dotList, 00447 std::vector<BlockLattice2D<T,Descriptor>*> lattices ) 00448 { 00449 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00450 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00451 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00452 } 00453 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), atomicBlocks ); 00454 } 00455 00456 00457 template<typename T, template<typename U> class Descriptor> 00458 void integrateProcessingFunctional ( 00459 LatticeDotProcessingFunctional2D<T,Descriptor>* functional, 00460 DotList2D const& dotList, 00461 std::vector<BlockLattice2D<T,Descriptor>*> lattices, plint level ) 00462 { 00463 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00464 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00465 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00466 } 00467 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00468 atomicBlocks, level ); 00469 } 00470 00471 00472 /* *************** ScalarFieldDotProcessing2D ****************************************** */ 00473 00474 template<typename T> 00475 void applyProcessingFunctional(ScalarFieldDotProcessingFunctional2D<T>* functional, 00476 DotList2D const& dotList, 00477 std::vector<ScalarField2D<T>*> fields ) 00478 { 00479 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00480 for (pluint iField=0; iField<fields.size(); ++iField) { 00481 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00482 } 00483 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), atomicBlocks ); 00484 } 00485 00486 00487 template<typename T> 00488 void integrateProcessingFunctional(ScalarFieldDotProcessingFunctional2D<T>* functional, 00489 DotList2D const& dotList, 00490 std::vector<ScalarField2D<T>*> fields, plint level ) 00491 { 00492 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00493 for (pluint iField=0; iField<fields.size(); ++iField) { 00494 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00495 } 00496 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00497 atomicBlocks, level ); 00498 } 00499 00500 00501 /* *************** TensorFieldDotProcessing2D ****************************************** */ 00502 00503 template<typename T, int nDim> 00504 void applyProcessingFunctional ( 00505 TensorFieldDotProcessingFunctional2D<T,nDim>* functional, 00506 DotList2D const& dotList, 00507 std::vector<TensorField2D<T,nDim>*> fields ) 00508 { 00509 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00510 for (pluint iField=0; iField<fields.size(); ++iField) { 00511 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00512 } 00513 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), atomicBlocks ); 00514 } 00515 00516 template<typename T, int nDim> 00517 void integrateProcessingFunctional ( 00518 TensorFieldDotProcessingFunctional2D<T,nDim>* functional, 00519 DotList2D const& dotList, 00520 std::vector<TensorField2D<T,nDim>*> fields, plint level ) 00521 { 00522 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00523 for (pluint iField=0; iField<fields.size(); ++iField) { 00524 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00525 } 00526 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00527 atomicBlocks, level ); 00528 } 00529 00530 /* *************** NTensorFieldDotProcessing2D ****************************************** */ 00531 00532 template<typename T> 00533 void applyProcessingFunctional ( 00534 NTensorFieldDotProcessingFunctional2D<T>* functional, 00535 DotList2D const& dotList, 00536 std::vector<NTensorField2D<T>*> fields ) 00537 { 00538 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00539 for (pluint iField=0; iField<fields.size(); ++iField) { 00540 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00541 } 00542 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), atomicBlocks ); 00543 } 00544 00545 template<typename T> 00546 void integrateProcessingFunctional ( 00547 NTensorFieldDotProcessingFunctional2D<T>* functional, 00548 DotList2D const& dotList, 00549 std::vector<NTensorField2D<T>*> fields, plint level ) 00550 { 00551 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00552 for (pluint iField=0; iField<fields.size(); ++iField) { 00553 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00554 } 00555 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00556 atomicBlocks, level ); 00557 } 00558 00559 /* *************** DotProcessing2D_L ******************************************* */ 00560 00561 template<typename T, template<typename U> class Descriptor> 00562 void applyProcessingFunctional(DotProcessingFunctional2D_L<T,Descriptor>* functional, 00563 DotList2D const& dotList, 00564 BlockLattice2D<T,Descriptor>& lattice) 00565 { 00566 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), lattice ); 00567 } 00568 00569 template<typename T, template<typename U> class Descriptor> 00570 void integrateProcessingFunctional(DotProcessingFunctional2D_L<T,Descriptor>* functional, 00571 DotList2D const& dotList, 00572 BlockLattice2D<T,Descriptor>& lattice, plint level) 00573 { 00574 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), lattice, level ); 00575 } 00576 00577 00578 /* *************** DotProcessing2D_S ******************************************* */ 00579 00580 template<typename T> 00581 void applyProcessingFunctional(DotProcessingFunctional2D_S<T>* functional, 00582 DotList2D const& dotList, ScalarField2D<T>& field) 00583 { 00584 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), field ); 00585 } 00586 00587 template<typename T> 00588 void integrateProcessingFunctional(DotProcessingFunctional2D_S<T>* functional, 00589 DotList2D const& dotList, ScalarField2D<T>& field, 00590 plint level) 00591 { 00592 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), field, level ); 00593 } 00594 00595 00596 /* *************** DotProcessing2D_T ******************************************* */ 00597 00598 template<typename T, int nDim> 00599 void applyProcessingFunctional(DotProcessingFunctional2D_T<T,nDim>* functional, 00600 DotList2D const& dotList, 00601 TensorField2D<T,nDim>& field) 00602 { 00603 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), field ); 00604 } 00605 00606 template<typename T, int nDim> 00607 void integrateProcessingFunctional(DotProcessingFunctional2D_T<T,nDim>* functional, 00608 DotList2D const& dotList, 00609 TensorField2D<T,nDim>& field, plint level) 00610 { 00611 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), field, level ); 00612 } 00613 00614 /* *************** DotProcessing2D_N ******************************************* */ 00615 00616 template<typename T> 00617 void applyProcessingFunctional(DotProcessingFunctional2D_N<T>* functional, 00618 DotList2D const& dotList, 00619 NTensorField2D<T>& field) 00620 { 00621 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), field ); 00622 } 00623 00624 template<typename T> 00625 void integrateProcessingFunctional(DotProcessingFunctional2D_N<T>* functional, 00626 DotList2D const& dotList, 00627 NTensorField2D<T>& field, plint level) 00628 { 00629 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), field, level ); 00630 } 00631 00632 00633 /* *************** DotProcessing2D_LL******************************************* */ 00634 00635 template<typename T1, template<typename U1> class Descriptor1, 00636 typename T2, template<typename U2> class Descriptor2> 00637 void applyProcessingFunctional ( 00638 DotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 00639 DotList2D const& dotList, 00640 BlockLattice2D<T1,Descriptor1>& lattice1, 00641 BlockLattice2D<T2,Descriptor2>& lattice2 ) 00642 { 00643 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00644 lattice1, lattice2 ); 00645 } 00646 00647 template<typename T1, template<typename U1> class Descriptor1, 00648 typename T2, template<typename U2> class Descriptor2> 00649 void integrateProcessingFunctional ( 00650 DotProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 00651 DotList2D const& dotList, 00652 BlockLattice2D<T1,Descriptor1>& lattice1, 00653 BlockLattice2D<T2,Descriptor2>& lattice2, plint level ) 00654 { 00655 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00656 lattice1, lattice2, level ); 00657 } 00658 00659 00660 /* *************** DotProcessing2D_SS ****************************************** */ 00661 00662 template<typename T1, typename T2> 00663 void applyProcessingFunctional ( 00664 DotProcessingFunctional2D_SS<T1,T2>* functional, 00665 DotList2D const& dotList, 00666 ScalarField2D<T1>& field1, 00667 ScalarField2D<T2>& field2 ) 00668 { 00669 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00670 field1, field2 ); 00671 } 00672 00673 template<typename T1, typename T2> 00674 void integrateProcessingFunctional(DotProcessingFunctional2D_SS<T1,T2>* functional, 00675 DotList2D const& dotList, 00676 ScalarField2D<T1>& field1, 00677 ScalarField2D<T2>& field2, plint level) 00678 { 00679 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00680 field1, field2, level ); 00681 } 00682 00683 00684 /* *************** DotProcessing2D_TT ****************************************** */ 00685 00686 template<typename T1, int nDim1, typename T2, int nDim2> 00687 void applyProcessingFunctional ( 00688 DotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional, 00689 DotList2D const& dotList, 00690 TensorField2D<T1,nDim1>& field1, 00691 TensorField2D<T2,nDim2>& field2 ) 00692 { 00693 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00694 field1, field2 ); 00695 } 00696 00697 template<typename T1, int nDim1, typename T2, int nDim2> 00698 void integrateProcessingFunctional ( 00699 DotProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional, 00700 DotList2D const& dotList, 00701 TensorField2D<T1,nDim1>& field1, 00702 TensorField2D<T2,nDim2>& field2, plint level ) 00703 { 00704 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00705 field1, field2, level ); 00706 } 00707 00708 00709 /* *************** DotProcessing2D_NN ****************************************** */ 00710 00711 template<typename T1, typename T2> 00712 void applyProcessingFunctional ( 00713 DotProcessingFunctional2D_NN<T1,T2>* functional, 00714 DotList2D const& dotList, 00715 NTensorField2D<T1>& field1, 00716 NTensorField2D<T2>& field2 ) 00717 { 00718 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00719 field1, field2 ); 00720 } 00721 00722 template<typename T1, typename T2> 00723 void integrateProcessingFunctional ( 00724 DotProcessingFunctional2D_NN<T1,T2>* functional, 00725 DotList2D const& dotList, 00726 NTensorField2D<T1>& field1, 00727 NTensorField2D<T2>& field2, plint level ) 00728 { 00729 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00730 field1, field2, level ); 00731 } 00732 00733 00734 /* *************** DotProcessing2D_ST ****************************************** */ 00735 00736 template<typename T1, typename T2, int nDim> 00737 void applyProcessingFunctional(DotProcessingFunctional2D_ST<T1,T2,nDim>* functional, 00738 DotList2D const& dotList, 00739 ScalarField2D<T1>& field1, 00740 TensorField2D<T2,nDim>& field2 ) 00741 { 00742 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00743 field1, field2 ); 00744 } 00745 00746 template<typename T1, typename T2, int nDim> 00747 void integrateProcessingFunctional(DotProcessingFunctional2D_ST<T1,T2,nDim>* functional, 00748 DotList2D const& dotList, 00749 ScalarField2D<T1>& field1, 00750 TensorField2D<T2,nDim>& field2, plint level) 00751 { 00752 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00753 field1, field2, level ); 00754 } 00755 00756 /* *************** DotProcessing2D_SN ****************************************** */ 00757 00758 template<typename T1, typename T2> 00759 void applyProcessingFunctional(DotProcessingFunctional2D_SN<T1,T2>* functional, 00760 DotList2D const& dotList, 00761 ScalarField2D<T1>& field1, 00762 NTensorField2D<T2>& field2 ) 00763 { 00764 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00765 field1, field2 ); 00766 } 00767 00768 template<typename T1, typename T2> 00769 void integrateProcessingFunctional(DotProcessingFunctional2D_SN<T1,T2>* functional, 00770 DotList2D const& dotList, 00771 ScalarField2D<T1>& field1, 00772 NTensorField2D<T2>& field2, plint level) 00773 { 00774 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00775 field1, field2, level ); 00776 } 00777 00778 00779 /* *************** DotProcessing2D_LS ****************************************** */ 00780 00781 template<typename T1, template<typename U> class Descriptor, typename T2> 00782 void applyProcessingFunctional ( 00783 DotProcessingFunctional2D_LS<T1,Descriptor,T2>* functional, 00784 DotList2D const& dotList, 00785 BlockLattice2D<T1,Descriptor>& lattice, 00786 ScalarField2D<T2>& field ) 00787 { 00788 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00789 lattice, field ); 00790 } 00791 00792 template<typename T1, template<typename U> class Descriptor, typename T2> 00793 void integrateProcessingFunctional ( 00794 DotProcessingFunctional2D_LS<T1,Descriptor,T2>* functional, 00795 DotList2D const& dotList, 00796 BlockLattice2D<T1,Descriptor>& lattice, 00797 ScalarField2D<T2>& field, plint level ) 00798 { 00799 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00800 lattice, field, level ); 00801 } 00802 00803 00804 /* *************** DotProcessing2D_LT ****************************************** */ 00805 00806 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00807 void applyProcessingFunctional ( 00808 DotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional, 00809 DotList2D const& dotList, 00810 BlockLattice2D<T1,Descriptor>& lattice, 00811 TensorField2D<T2,nDim>& field ) 00812 { 00813 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00814 lattice, field ); 00815 } 00816 00817 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 00818 void integrateProcessingFunctional ( 00819 DotProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional, 00820 DotList2D const& dotList, 00821 BlockLattice2D<T1,Descriptor>& lattice, 00822 TensorField2D<T2,nDim>& field, plint level) 00823 { 00824 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00825 lattice, field, level ); 00826 } 00827 00828 /* *************** DotProcessing2D_LN ****************************************** */ 00829 00830 template<typename T1, template<typename U> class Descriptor, typename T2> 00831 void applyProcessingFunctional ( 00832 DotProcessingFunctional2D_LN<T1,Descriptor,T2>* functional, 00833 DotList2D const& dotList, 00834 BlockLattice2D<T1,Descriptor>& lattice, 00835 NTensorField2D<T2>& field ) 00836 { 00837 executeDataProcessor( DotProcessorGenerator2D(functional, dotList), 00838 lattice, field ); 00839 } 00840 00841 template<typename T1, template<typename U> class Descriptor, typename T2> 00842 void integrateProcessingFunctional ( 00843 DotProcessingFunctional2D_LN<T1,Descriptor,T2>* functional, 00844 DotList2D const& dotList, 00845 BlockLattice2D<T1,Descriptor>& lattice, 00846 NTensorField2D<T2>& field, plint level) 00847 { 00848 addInternalProcessor( DotProcessorGenerator2D(functional, dotList), 00849 lattice, field, level ); 00850 } 00851 00852 00853 /* *************** BoundedLatticeBoxProcessing2D **************************** */ 00854 00855 template<typename T, template<typename U> class Descriptor> 00856 void applyProcessingFunctional ( 00857 BoundedLatticeBoxProcessingFunctional2D<T,Descriptor>* functional, 00858 Box2D domain, 00859 std::vector<BlockLattice2D<T,Descriptor>*> lattices, 00860 plint boundaryWidth ) 00861 { 00862 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00863 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00864 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00865 } 00866 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00867 } 00868 00869 template<typename T, template<typename U> class Descriptor> 00870 void integrateProcessingFunctional ( 00871 BoundedLatticeBoxProcessingFunctional2D<T,Descriptor>* functional, 00872 Box2D domain, 00873 std::vector<BlockLattice2D<T,Descriptor>*> lattices, 00874 plint boundaryWidth, plint level ) 00875 { 00876 std::vector<AtomicBlock2D*> atomicBlocks(lattices.size()); 00877 for (pluint iLattice=0; iLattice<lattices.size(); ++iLattice) { 00878 atomicBlocks[iLattice] = dynamic_cast<AtomicBlock2D*>(lattices[iLattice]); 00879 } 00880 integrateProcessingFunctional(functional, domain, atomicBlocks, 00881 boundaryWidth, level); 00882 } 00883 00884 00885 /* *************** BoundedScalarFieldBoxProcessing2D ************************ */ 00886 00887 template<typename T> 00888 void applyProcessingFunctional ( 00889 BoundedScalarFieldBoxProcessingFunctional2D<T>* functional, 00890 Box2D domain, 00891 std::vector<ScalarField2D<T>*> fields, 00892 plint boundaryWidth ) 00893 { 00894 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00895 for (pluint iField=0; iField<fields.size(); ++iField) { 00896 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00897 } 00898 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00899 } 00900 00901 template<typename T> 00902 void integrateProcessingFunctional ( 00903 BoundedScalarFieldBoxProcessingFunctional2D<T>* functional, 00904 Box2D domain, 00905 std::vector<ScalarField2D<T>*> fields, 00906 plint boundaryWidth, plint level ) 00907 { 00908 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00909 for (pluint iField=0; iField<fields.size(); ++iField) { 00910 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00911 } 00912 integrateProcessingFunctional(functional, domain, atomicBlocks, 00913 boundaryWidth, level); 00914 } 00915 00916 00917 /* *************** BoundedTensorFieldBoxProcessing2D ************************ */ 00918 00919 template<typename T, int nDim> 00920 void applyProcessingFunctional ( 00921 BoundedTensorFieldBoxProcessingFunctional2D<T,nDim>* functional, 00922 Box2D domain, 00923 std::vector<TensorField2D<T,nDim>*> fields, plint boundaryWidth ) 00924 { 00925 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00926 for (pluint iField=0; iField<fields.size(); ++iField) { 00927 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00928 } 00929 applyProcessingFunctional(functional, domain, 00930 atomicBlocks, boundaryWidth); 00931 } 00932 00933 template<typename T, int nDim> 00934 void integrateProcessingFunctional ( 00935 BoundedTensorFieldBoxProcessingFunctional2D<T,nDim>* functional, 00936 Box2D domain, 00937 std::vector<TensorField2D<T,nDim>*> fields, 00938 plint boundaryWidth, plint level ) 00939 { 00940 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00941 for (pluint iField=0; iField<fields.size(); ++iField) { 00942 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00943 } 00944 integrateProcessingFunctional(functional, domain, 00945 atomicBlocks, boundaryWidth, level); 00946 } 00947 00948 /* *************** BoundedNTensorFieldBoxProcessing2D ************************ */ 00949 00950 template<typename T> 00951 void applyProcessingFunctional ( 00952 BoundedNTensorFieldBoxProcessingFunctional2D<T>* functional, 00953 Box2D domain, 00954 std::vector<NTensorField2D<T>*> fields, plint boundaryWidth ) 00955 { 00956 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00957 for (pluint iField=0; iField<fields.size(); ++iField) { 00958 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00959 } 00960 applyProcessingFunctional(functional, domain, 00961 atomicBlocks, boundaryWidth); 00962 } 00963 00964 template<typename T> 00965 void integrateProcessingFunctional ( 00966 BoundedNTensorFieldBoxProcessingFunctional2D<T>* functional, 00967 Box2D domain, 00968 std::vector<NTensorField2D<T>*> fields, 00969 plint boundaryWidth, plint level ) 00970 { 00971 std::vector<AtomicBlock2D*> atomicBlocks(fields.size()); 00972 for (pluint iField=0; iField<fields.size(); ++iField) { 00973 atomicBlocks[iField] = dynamic_cast<AtomicBlock2D*>(fields[iField]); 00974 } 00975 integrateProcessingFunctional(functional, domain, 00976 atomicBlocks, boundaryWidth, level); 00977 } 00978 00979 /* *************** BoundedBoxProcessing2D_L ********************************* */ 00980 00981 template<typename T, template<typename U> class Descriptor> 00982 void applyProcessingFunctional ( 00983 BoundedBoxProcessingFunctional2D_L<T,Descriptor>* functional, 00984 Box2D domain, BlockLattice2D<T,Descriptor>& lattice, plint boundaryWidth ) 00985 { 00986 std::vector<AtomicBlock2D*> atomicBlocks(1); 00987 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 00988 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 00989 } 00990 00991 template<typename T, template<typename U> class Descriptor> 00992 void integrateProcessingFunctional ( 00993 BoundedBoxProcessingFunctional2D_L<T,Descriptor>* functional, 00994 Box2D domain, BlockLattice2D<T,Descriptor>& lattice, 00995 plint boundaryWidth, plint level ) 00996 { 00997 std::vector<AtomicBlock2D*> atomicBlocks(1); 00998 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 00999 integrateProcessingFunctional(functional, domain, atomicBlocks, 01000 boundaryWidth, level); 01001 } 01002 01003 01004 /* *************** BoundedBoxProcessing2D_S ********************************* */ 01005 01006 template<typename T> 01007 void applyProcessingFunctional ( 01008 BoundedBoxProcessingFunctional2D_S<T>* functional, 01009 Box2D domain, ScalarField2D<T>& field, plint boundaryWidth ) 01010 { 01011 std::vector<AtomicBlock2D*> atomicBlocks(1); 01012 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 01013 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01014 } 01015 01016 template<typename T> 01017 void integrateProcessingFunctional ( 01018 BoundedBoxProcessingFunctional2D_S<T>* functional, 01019 Box2D domain, ScalarField2D<T>& field, 01020 plint boundaryWidth, plint level ) 01021 { 01022 std::vector<AtomicBlock2D*> atomicBlocks(1); 01023 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 01024 integrateProcessingFunctional(functional, domain, atomicBlocks, 01025 boundaryWidth, level); 01026 } 01027 01028 01029 /* *************** BoundedBoxProcessing2D_T ********************************* */ 01030 01031 template<typename T, int nDim> 01032 void applyProcessingFunctional ( 01033 BoundedBoxProcessingFunctional2D_T<T,nDim>* functional, 01034 Box2D domain, TensorField2D<T,nDim>& field, plint boundaryWidth ) 01035 { 01036 std::vector<AtomicBlock2D*> atomicBlocks(1); 01037 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 01038 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01039 } 01040 01041 template<typename T, int nDim> 01042 void integrateProcessingFunctional ( 01043 BoundedBoxProcessingFunctional2D_T<T,nDim>* functional, 01044 Box2D domain, TensorField2D<T,nDim>& field, 01045 plint boundaryWidth, plint level ) 01046 { 01047 std::vector<AtomicBlock2D*> atomicBlocks(1); 01048 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 01049 integrateProcessingFunctional(functional, domain, atomicBlocks, 01050 boundaryWidth, level); 01051 } 01052 01053 /* *************** BoundedBoxProcessing2D_N ********************************* */ 01054 01055 template<typename T> 01056 void applyProcessingFunctional ( 01057 BoundedBoxProcessingFunctional2D_N<T>* functional, 01058 Box2D domain, NTensorField2D<T>& field, plint boundaryWidth ) 01059 { 01060 std::vector<AtomicBlock2D*> atomicBlocks(1); 01061 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 01062 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01063 } 01064 01065 template<typename T> 01066 void integrateProcessingFunctional ( 01067 BoundedBoxProcessingFunctional2D_N<T>* functional, 01068 Box2D domain, NTensorField2D<T>& field, 01069 plint boundaryWidth, plint level ) 01070 { 01071 std::vector<AtomicBlock2D*> atomicBlocks(1); 01072 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field); 01073 integrateProcessingFunctional(functional, domain, atomicBlocks, 01074 boundaryWidth, level); 01075 } 01076 01077 /* *************** BoundedBoxProcessing2D_LL********************************* */ 01078 01079 template<typename T1, template<typename U1> class Descriptor1, 01080 typename T2, template<typename U2> class Descriptor2> 01081 void applyProcessingFunctional ( 01082 BoundedBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 01083 Box2D domain, 01084 BlockLattice2D<T1,Descriptor1>& lattice1, 01085 BlockLattice2D<T2,Descriptor2>& lattice2, 01086 plint boundaryWidth ) 01087 { 01088 std::vector<AtomicBlock2D*> atomicBlocks(2); 01089 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice1); 01090 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&lattice2); 01091 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01092 } 01093 01094 template<typename T1, template<typename U1> class Descriptor1, 01095 typename T2, template<typename U2> class Descriptor2> 01096 void integrateProcessingFunctional ( 01097 BoundedBoxProcessingFunctional2D_LL<T1,Descriptor1,T2,Descriptor2>* functional, 01098 Box2D domain, 01099 BlockLattice2D<T1,Descriptor1>& lattice1, 01100 BlockLattice2D<T2,Descriptor2>& lattice2, 01101 plint boundaryWidth, plint level ) 01102 { 01103 std::vector<AtomicBlock2D*> atomicBlocks(2); 01104 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice1); 01105 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&lattice2); 01106 integrateProcessingFunctional(functional, domain, atomicBlocks, 01107 boundaryWidth, level); 01108 } 01109 01110 01111 /* *************** BoundedBoxProcessing2D_SS ****************************************** */ 01112 01113 template<typename T1, typename T2> 01114 void applyProcessingFunctional ( 01115 BoundedBoxProcessingFunctional2D_SS<T1,T2>* functional, 01116 Box2D domain, 01117 ScalarField2D<T1>& field1, 01118 ScalarField2D<T2>& field2, 01119 plint boundaryWidth ) 01120 { 01121 std::vector<AtomicBlock2D*> atomicBlocks(2); 01122 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01123 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01124 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01125 } 01126 01127 template<typename T1, typename T2> 01128 void integrateProcessingFunctional ( 01129 BoundedBoxProcessingFunctional2D_SS<T1,T2>* functional, 01130 Box2D domain, 01131 ScalarField2D<T1>& field1, 01132 ScalarField2D<T2>& field2, 01133 plint boundaryWidth, plint level ) 01134 { 01135 std::vector<AtomicBlock2D*> atomicBlocks(2); 01136 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01137 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01138 integrateProcessingFunctional(functional, domain, atomicBlocks, 01139 boundaryWidth, level); 01140 } 01141 01142 /* *************** BoundedBoxProcessing2D_TT ********************************** */ 01143 01144 template<typename T1, int nDim1, typename T2, int nDim2> 01145 void applyProcessingFunctional ( 01146 BoundedBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional, 01147 Box2D domain, 01148 TensorField2D<T1,nDim1>& field1, 01149 TensorField2D<T2,nDim2>& field2, 01150 plint boundaryWidth ) 01151 { 01152 std::vector<AtomicBlock2D*> atomicBlocks(2); 01153 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01154 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01155 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01156 } 01157 01158 template<typename T1, int nDim1, typename T2, int nDim2> 01159 void integrateProcessingFunctional ( 01160 BoundedBoxProcessingFunctional2D_TT<T1,nDim1,T2,nDim2>* functional, 01161 Box2D domain, 01162 TensorField2D<T1,nDim1>& field1, 01163 TensorField2D<T2,nDim2>& field2, 01164 plint boundaryWidth, plint level ) 01165 { 01166 std::vector<AtomicBlock2D*> atomicBlocks(2); 01167 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01168 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01169 integrateProcessingFunctional(functional, domain, atomicBlocks, 01170 boundaryWidth, level); 01171 } 01172 01173 /* *************** BoundedBoxProcessing2D_NN ********************************** */ 01174 01175 template<typename T1, typename T2> 01176 void applyProcessingFunctional ( 01177 BoundedBoxProcessingFunctional2D_NN<T1,T2>* functional, 01178 Box2D domain, 01179 NTensorField2D<T1>& field1, 01180 NTensorField2D<T2>& field2, 01181 plint boundaryWidth ) 01182 { 01183 std::vector<AtomicBlock2D*> atomicBlocks(2); 01184 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01185 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01186 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01187 } 01188 01189 template<typename T1, typename T2> 01190 void integrateProcessingFunctional ( 01191 BoundedBoxProcessingFunctional2D_NN<T1,T2>* functional, 01192 Box2D domain, 01193 NTensorField2D<T1>& field1, 01194 NTensorField2D<T2>& field2, 01195 plint boundaryWidth, plint level ) 01196 { 01197 std::vector<AtomicBlock2D*> atomicBlocks(2); 01198 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01199 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01200 integrateProcessingFunctional(functional, domain, atomicBlocks, 01201 boundaryWidth, level); 01202 } 01203 01204 01205 /* *************** BoundedBoxProcessing2D_ST ******************************** */ 01206 01207 template<typename T1, typename T2, int nDim> 01208 void applyProcessingFunctional ( 01209 BoundedBoxProcessingFunctional2D_ST<T1,T2,nDim>* functional, 01210 Box2D domain, 01211 ScalarField2D<T1>& field1, 01212 TensorField2D<T2,nDim>& field2, 01213 plint boundaryWidth ) 01214 { 01215 std::vector<AtomicBlock2D*> atomicBlocks(2); 01216 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01217 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01218 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01219 } 01220 01221 template<typename T1, typename T2, int nDim> 01222 void integrateProcessingFunctional ( 01223 BoundedBoxProcessingFunctional2D_ST<T1,T2,nDim>* functional, 01224 Box2D domain, 01225 ScalarField2D<T1>& field1, 01226 TensorField2D<T2,nDim>& field2, 01227 plint boundaryWidth, plint level ) 01228 { 01229 std::vector<AtomicBlock2D*> atomicBlocks(2); 01230 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01231 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01232 integrateProcessingFunctional(functional, domain, atomicBlocks, 01233 boundaryWidth, level); 01234 } 01235 01236 /* *************** BoundedBoxProcessing2D_SN ******************************** */ 01237 01238 template<typename T1, typename T2> 01239 void applyProcessingFunctional ( 01240 BoundedBoxProcessingFunctional2D_SN<T1,T2>* functional, 01241 Box2D domain, 01242 ScalarField2D<T1>& field1, 01243 NTensorField2D<T2>& field2, 01244 plint boundaryWidth ) 01245 { 01246 std::vector<AtomicBlock2D*> atomicBlocks(2); 01247 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01248 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01249 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01250 } 01251 01252 template<typename T1, typename T2> 01253 void integrateProcessingFunctional ( 01254 BoundedBoxProcessingFunctional2D_SN<T1,T2>* functional, 01255 Box2D domain, 01256 ScalarField2D<T1>& field1, 01257 NTensorField2D<T2>& field2, 01258 plint boundaryWidth, plint level ) 01259 { 01260 std::vector<AtomicBlock2D*> atomicBlocks(2); 01261 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&field1); 01262 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field2); 01263 integrateProcessingFunctional(functional, domain, atomicBlocks, 01264 boundaryWidth, level); 01265 } 01266 01267 01268 /* *************** BoundedBoxProcessing2D_LS ******************************** */ 01269 01270 template<typename T1, template<typename U> class Descriptor, typename T2> 01271 void applyProcessingFunctional ( 01272 BoundedBoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional, 01273 Box2D domain, 01274 BlockLattice2D<T1,Descriptor>& lattice, 01275 ScalarField2D<T2>& field, 01276 plint boundaryWidth ) 01277 { 01278 std::vector<AtomicBlock2D*> atomicBlocks(2); 01279 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 01280 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 01281 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01282 } 01283 01284 template<typename T1, template<typename U> class Descriptor, typename T2> 01285 void integrateProcessingFunctional ( 01286 BoundedBoxProcessingFunctional2D_LS<T1,Descriptor,T2>* functional, 01287 Box2D domain, 01288 BlockLattice2D<T1,Descriptor>& lattice, 01289 ScalarField2D<T2>& field, 01290 plint boundaryWidth, plint level ) 01291 { 01292 std::vector<AtomicBlock2D*> atomicBlocks(2); 01293 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 01294 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 01295 integrateProcessingFunctional(functional, domain, atomicBlocks, 01296 boundaryWidth, level); 01297 } 01298 01299 01300 /* *************** BoundedBoxProcessing2D_LT ****************************************** */ 01301 01302 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01303 void applyProcessingFunctional ( 01304 BoundedBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional, 01305 Box2D domain, 01306 BlockLattice2D<T1,Descriptor>& lattice, 01307 TensorField2D<T2,nDim>& field, 01308 plint boundaryWidth ) 01309 { 01310 std::vector<AtomicBlock2D*> atomicBlocks(2); 01311 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 01312 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 01313 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01314 } 01315 01316 template<typename T1, template<typename U> class Descriptor, typename T2, int nDim> 01317 void integrateProcessingFunctional ( 01318 BoundedBoxProcessingFunctional2D_LT<T1,Descriptor,T2,nDim>* functional, 01319 Box2D domain, 01320 BlockLattice2D<T1,Descriptor>& lattice, 01321 TensorField2D<T2,nDim>& field, 01322 plint boundaryWidth, plint level ) 01323 { 01324 std::vector<AtomicBlock2D*> atomicBlocks(2); 01325 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 01326 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 01327 integrateProcessingFunctional(functional, domain, atomicBlocks, 01328 boundaryWidth, level); 01329 } 01330 01331 /* *************** BoundedBoxProcessing2D_LN ****************************************** */ 01332 01333 template<typename T1, template<typename U> class Descriptor, typename T2> 01334 void applyProcessingFunctional ( 01335 BoundedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional, 01336 Box2D domain, 01337 BlockLattice2D<T1,Descriptor>& lattice, 01338 NTensorField2D<T2>& field, 01339 plint boundaryWidth ) 01340 { 01341 std::vector<AtomicBlock2D*> atomicBlocks(2); 01342 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 01343 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 01344 applyProcessingFunctional(functional, domain, atomicBlocks, boundaryWidth); 01345 } 01346 01347 template<typename T1, template<typename U> class Descriptor, typename T2> 01348 void integrateProcessingFunctional ( 01349 BoundedBoxProcessingFunctional2D_LN<T1,Descriptor,T2>* functional, 01350 Box2D domain, 01351 BlockLattice2D<T1,Descriptor>& lattice, 01352 NTensorField2D<T2>& field, 01353 plint boundaryWidth, plint level ) 01354 { 01355 std::vector<AtomicBlock2D*> atomicBlocks(2); 01356 atomicBlocks[0] = dynamic_cast<AtomicBlock2D*>(&lattice); 01357 atomicBlocks[1] = dynamic_cast<AtomicBlock2D*>(&field); 01358 integrateProcessingFunctional(functional, domain, atomicBlocks, 01359 boundaryWidth, level); 01360 } 01361 01362 } // namespace plb 01363 01364 #endif // DATA_PROCESSOR_WRAPPER_2D_HH
1.6.3
1.6.3