$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 00028 #ifndef BOUNDARY_CONDITION_3D_HH 00029 #define BOUNDARY_CONDITION_3D_HH 00030 00031 #include "boundaryCondition/boundaryCondition3D.h" 00032 #include "boundaryCondition/regularizedBoundaryDynamics3D.h" 00033 #include "boundaryCondition/equilibriumBoundaryDynamics.h" 00034 #include "boundaryCondition/boundaryInstantiator3D.h" 00035 #include "boundaryCondition/wrappedLocalBoundaryProcessor3D.h" 00036 #include "boundaryCondition/wrappedLocalBoundaryProcessor3D.h" 00037 #include "core/blockSurface3D.h" 00038 #include "core/plbDebug.h" 00039 00040 namespace plb { 00041 00042 // PART I: Atomic-block version. 00043 00044 template<typename T, template<typename U> class Descriptor> 00045 void OnLatticeBoundaryCondition3D<T,Descriptor>::setVelocityConditionOnBlockBoundaries ( 00046 BlockLattice3D<T,Descriptor>& lattice, 00047 boundary::BcType bcType ) 00048 { 00049 setVelocityConditionOnBlockBoundaries ( 00050 lattice, lattice.getBoundingBox(), bcType ); 00051 } 00052 00053 template<typename T, template<typename U> class Descriptor> 00054 void OnLatticeBoundaryCondition3D<T,Descriptor>::setVelocityConditionOnBlockBoundaries ( 00055 BlockLattice3D<T,Descriptor>& lattice, 00056 Box3D applicationDomain, 00057 boundary::BcType bcType ) 00058 { 00059 setVelocityConditionOnBlockBoundaries ( 00060 lattice, lattice.getBoundingBox(), applicationDomain, bcType ); 00061 } 00062 00063 00064 template<typename T, template<typename U> class Descriptor> 00065 void OnLatticeBoundaryCondition3D<T,Descriptor>::setVelocityConditionOnBlockBoundaries ( 00066 BlockLattice3D<T,Descriptor>& lattice, 00067 Box3D block, Box3D applicationDomain, 00068 boundary::BcType bcType ) 00069 { 00070 plint boundaryWidth = 1; 00071 BlockSurface3D surf(block, boundaryWidth); 00072 Box3D intersection; 00073 if (intersect(surf.surface0N(), applicationDomain, intersection)) { 00074 addVelocityBoundary0N(intersection, lattice, bcType); 00075 } 00076 if (intersect(surf.surface0P(), applicationDomain, intersection)) { 00077 addVelocityBoundary0P(intersection, lattice, bcType); 00078 } 00079 if (intersect(surf.surface1N(), applicationDomain, intersection)) { 00080 addVelocityBoundary1N(intersection, lattice, bcType); 00081 } 00082 if (intersect(surf.surface1P(), applicationDomain, intersection)) { 00083 addVelocityBoundary1P(intersection, lattice, bcType); 00084 } 00085 if (intersect(surf.surface2N(), applicationDomain, intersection)) { 00086 addVelocityBoundary2N(intersection, lattice, bcType); 00087 } 00088 if (intersect(surf.surface2P(), applicationDomain, intersection)) { 00089 addVelocityBoundary2P(intersection, lattice, bcType); 00090 } 00091 00092 if (intersect(surf.edge0NN(), applicationDomain, intersection)) { 00093 addExternalVelocityEdge0NN(intersection, lattice, bcType); 00094 } 00095 if (intersect(surf.edge0NP(), applicationDomain, intersection)) { 00096 addExternalVelocityEdge0NP(intersection, lattice, bcType); 00097 } 00098 if (intersect(surf.edge0PN(), applicationDomain, intersection)) { 00099 addExternalVelocityEdge0PN(intersection, lattice, bcType); 00100 } 00101 if (intersect(surf.edge0PP(), applicationDomain, intersection)) { 00102 addExternalVelocityEdge0PP(intersection, lattice, bcType); 00103 } 00104 00105 if (intersect(surf.edge1NN(), applicationDomain, intersection)) { 00106 addExternalVelocityEdge1NN(intersection, lattice, bcType); 00107 } 00108 if (intersect(surf.edge1NP(), applicationDomain, intersection)) { 00109 addExternalVelocityEdge1NP(intersection, lattice, bcType); 00110 } 00111 if (intersect(surf.edge1PN(), applicationDomain, intersection)) { 00112 addExternalVelocityEdge1PN(intersection, lattice, bcType); 00113 } 00114 if (intersect(surf.edge1PP(), applicationDomain, intersection)) { 00115 addExternalVelocityEdge1PP(intersection, lattice, bcType); 00116 } 00117 00118 if (intersect(surf.edge2NN(), applicationDomain, intersection)) { 00119 addExternalVelocityEdge2NN(intersection, lattice, bcType); 00120 } 00121 if (intersect(surf.edge2NP(), applicationDomain, intersection)) { 00122 addExternalVelocityEdge2NP(intersection, lattice, bcType); 00123 } 00124 if (intersect(surf.edge2PN(), applicationDomain, intersection)) { 00125 addExternalVelocityEdge2PN(intersection, lattice, bcType); 00126 } 00127 if (intersect(surf.edge2PP(), applicationDomain, intersection)) { 00128 addExternalVelocityEdge2PP(intersection, lattice, bcType); 00129 } 00130 00131 if (intersect(surf.cornerNNN(), applicationDomain, intersection)) { 00132 addExternalVelocityCornerNNN ( 00133 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00134 } 00135 if (intersect(surf.cornerNNP(), applicationDomain, intersection)) { 00136 addExternalVelocityCornerNNP ( 00137 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00138 } 00139 if (intersect(surf.cornerNPN(), applicationDomain, intersection)) { 00140 addExternalVelocityCornerNPN ( 00141 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00142 } 00143 if (intersect(surf.cornerNPP(), applicationDomain, intersection)) { 00144 addExternalVelocityCornerNPP ( 00145 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00146 } 00147 if (intersect(surf.cornerPNN(), applicationDomain, intersection)) { 00148 addExternalVelocityCornerPNN ( 00149 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00150 } 00151 if (intersect(surf.cornerPNP(), applicationDomain, intersection)) { 00152 addExternalVelocityCornerPNP ( 00153 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00154 } 00155 if (intersect(surf.cornerPPN(), applicationDomain, intersection)) { 00156 addExternalVelocityCornerPPN ( 00157 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00158 } 00159 if (intersect(surf.cornerPPP(), applicationDomain, intersection)) { 00160 addExternalVelocityCornerPPP ( 00161 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00162 } 00163 } 00164 00165 template<typename T, template<typename U> class Descriptor> 00166 void OnLatticeBoundaryCondition3D<T,Descriptor>::setPressureConditionOnBlockBoundaries ( 00167 BlockLattice3D<T,Descriptor>& lattice, 00168 boundary::BcType bcType ) 00169 { 00170 setPressureConditionOnBlockBoundaries ( 00171 lattice, lattice.getBoundingBox(), bcType ); 00172 } 00173 00174 template<typename T, template<typename U> class Descriptor> 00175 void OnLatticeBoundaryCondition3D<T,Descriptor>::setPressureConditionOnBlockBoundaries ( 00176 BlockLattice3D<T,Descriptor>& lattice, 00177 Box3D applicationDomain, 00178 boundary::BcType bcType ) 00179 { 00180 setPressureConditionOnBlockBoundaries ( 00181 lattice, lattice.getBoundingBox(), applicationDomain, bcType ); 00182 } 00183 00184 00185 template<typename T, template<typename U> class Descriptor> 00186 void OnLatticeBoundaryCondition3D<T,Descriptor>::setPressureConditionOnBlockBoundaries ( 00187 BlockLattice3D<T,Descriptor>& lattice, 00188 Box3D block, Box3D applicationDomain, 00189 boundary::BcType bcType ) 00190 { 00191 plint boundaryWidth = 1; 00192 BlockSurface3D surf(block, boundaryWidth); 00193 Box3D intersection; 00194 if (intersect(surf.surface0N(), applicationDomain, intersection)) { 00195 addPressureBoundary0N(intersection, lattice, bcType); 00196 } 00197 if (intersect(surf.surface0P(), applicationDomain, intersection)) { 00198 addPressureBoundary0P(intersection, lattice, bcType); 00199 } 00200 if (intersect(surf.surface1N(), applicationDomain, intersection)) { 00201 addPressureBoundary1N(intersection, lattice, bcType); 00202 } 00203 if (intersect(surf.surface1P(), applicationDomain, intersection)) { 00204 addPressureBoundary1P(intersection, lattice, bcType); 00205 } 00206 if (intersect(surf.surface2N(), applicationDomain, intersection)) { 00207 addPressureBoundary2N(intersection, lattice, bcType); 00208 } 00209 if (intersect(surf.surface2P(), applicationDomain, intersection)) { 00210 addPressureBoundary2P(intersection, lattice, bcType); 00211 } 00212 00213 if (intersect(surf.edge0NN(), applicationDomain, intersection)) { 00214 PLB_ASSERT( false ); 00215 } 00216 if (intersect(surf.edge0NP(), applicationDomain, intersection)) { 00217 PLB_ASSERT( false ); 00218 } 00219 if (intersect(surf.edge0PN(), applicationDomain, intersection)) { 00220 PLB_ASSERT( false ); 00221 } 00222 if (intersect(surf.edge0PP(), applicationDomain, intersection)) { 00223 PLB_ASSERT( false ); 00224 } 00225 00226 if (intersect(surf.edge1NN(), applicationDomain, intersection)) { 00227 PLB_ASSERT( false ); 00228 } 00229 if (intersect(surf.edge1NP(), applicationDomain, intersection)) { 00230 PLB_ASSERT( false ); 00231 } 00232 if (intersect(surf.edge1PN(), applicationDomain, intersection)) { 00233 PLB_ASSERT( false ); 00234 } 00235 if (intersect(surf.edge1PP(), applicationDomain, intersection)) { 00236 PLB_ASSERT( false ); 00237 } 00238 00239 if (intersect(surf.edge2NN(), applicationDomain, intersection)) { 00240 PLB_ASSERT( false ); 00241 } 00242 if (intersect(surf.edge2NP(), applicationDomain, intersection)) { 00243 PLB_ASSERT( false ); 00244 } 00245 if (intersect(surf.edge2PN(), applicationDomain, intersection)) { 00246 PLB_ASSERT( false ); 00247 } 00248 if (intersect(surf.edge2PP(), applicationDomain, intersection)) { 00249 PLB_ASSERT( false ); 00250 } 00251 00252 if (intersect(surf.cornerNNN(), applicationDomain, intersection)) { 00253 PLB_ASSERT( false ); 00254 } 00255 if (intersect(surf.cornerNNP(), applicationDomain, intersection)) { 00256 PLB_ASSERT( false ); 00257 } 00258 if (intersect(surf.cornerNPN(), applicationDomain, intersection)) { 00259 PLB_ASSERT( false ); 00260 } 00261 if (intersect(surf.cornerNPP(), applicationDomain, intersection)) { 00262 PLB_ASSERT( false ); 00263 } 00264 if (intersect(surf.cornerPNN(), applicationDomain, intersection)) { 00265 PLB_ASSERT( false ); 00266 } 00267 if (intersect(surf.cornerPNP(), applicationDomain, intersection)) { 00268 PLB_ASSERT( false ); 00269 } 00270 if (intersect(surf.cornerPPN(), applicationDomain, intersection)) { 00271 PLB_ASSERT( false ); 00272 } 00273 if (intersect(surf.cornerPPP(), applicationDomain, intersection)) { 00274 PLB_ASSERT( false ); 00275 } 00276 } 00277 00278 // PART I: Multi-block version. 00279 00280 template<typename T, template<typename U> class Descriptor> 00281 void OnLatticeBoundaryCondition3D<T,Descriptor>::setVelocityConditionOnBlockBoundaries ( 00282 MultiBlockLattice3D<T,Descriptor>& lattice, 00283 boundary::BcType bcType ) 00284 { 00285 setVelocityConditionOnBlockBoundaries ( 00286 lattice, lattice.getBoundingBox(), bcType ); 00287 } 00288 00289 template<typename T, template<typename U> class Descriptor> 00290 void OnLatticeBoundaryCondition3D<T,Descriptor>::setVelocityConditionOnBlockBoundaries ( 00291 MultiBlockLattice3D<T,Descriptor>& lattice, 00292 Box3D applicationDomain, 00293 boundary::BcType bcType ) 00294 { 00295 setVelocityConditionOnBlockBoundaries ( 00296 lattice, lattice.getBoundingBox(), applicationDomain, bcType ); 00297 } 00298 00299 00300 template<typename T, template<typename U> class Descriptor> 00301 void OnLatticeBoundaryCondition3D<T,Descriptor>::setVelocityConditionOnBlockBoundaries ( 00302 MultiBlockLattice3D<T,Descriptor>& lattice, 00303 Box3D block, Box3D applicationDomain, 00304 boundary::BcType bcType ) 00305 { 00306 plint boundaryWidth = 1; 00307 BlockSurface3D surf(block, boundaryWidth); 00308 Box3D intersection; 00309 if (intersect(surf.surface0N(), applicationDomain, intersection)) { 00310 addVelocityBoundary0N(intersection, lattice, bcType); 00311 } 00312 if (intersect(surf.surface0P(), applicationDomain, intersection)) { 00313 addVelocityBoundary0P(intersection, lattice, bcType); 00314 } 00315 if (intersect(surf.surface1N(), applicationDomain, intersection)) { 00316 addVelocityBoundary1N(intersection, lattice, bcType); 00317 } 00318 if (intersect(surf.surface1P(), applicationDomain, intersection)) { 00319 addVelocityBoundary1P(intersection, lattice, bcType); 00320 } 00321 if (intersect(surf.surface2N(), applicationDomain, intersection)) { 00322 addVelocityBoundary2N(intersection, lattice, bcType); 00323 } 00324 if (intersect(surf.surface2P(), applicationDomain, intersection)) { 00325 addVelocityBoundary2P(intersection, lattice, bcType); 00326 } 00327 00328 if (intersect(surf.edge0NN(), applicationDomain, intersection)) { 00329 addExternalVelocityEdge0NN(intersection, lattice, bcType); 00330 } 00331 if (intersect(surf.edge0NP(), applicationDomain, intersection)) { 00332 addExternalVelocityEdge0NP(intersection, lattice, bcType); 00333 } 00334 if (intersect(surf.edge0PN(), applicationDomain, intersection)) { 00335 addExternalVelocityEdge0PN(intersection, lattice, bcType); 00336 } 00337 if (intersect(surf.edge0PP(), applicationDomain, intersection)) { 00338 addExternalVelocityEdge0PP(intersection, lattice, bcType); 00339 } 00340 00341 if (intersect(surf.edge1NN(), applicationDomain, intersection)) { 00342 addExternalVelocityEdge1NN(intersection, lattice, bcType); 00343 } 00344 if (intersect(surf.edge1NP(), applicationDomain, intersection)) { 00345 addExternalVelocityEdge1NP(intersection, lattice, bcType); 00346 } 00347 if (intersect(surf.edge1PN(), applicationDomain, intersection)) { 00348 addExternalVelocityEdge1PN(intersection, lattice, bcType); 00349 } 00350 if (intersect(surf.edge1PP(), applicationDomain, intersection)) { 00351 addExternalVelocityEdge1PP(intersection, lattice, bcType); 00352 } 00353 00354 if (intersect(surf.edge2NN(), applicationDomain, intersection)) { 00355 addExternalVelocityEdge2NN(intersection, lattice, bcType); 00356 } 00357 if (intersect(surf.edge2NP(), applicationDomain, intersection)) { 00358 addExternalVelocityEdge2NP(intersection, lattice, bcType); 00359 } 00360 if (intersect(surf.edge2PN(), applicationDomain, intersection)) { 00361 addExternalVelocityEdge2PN(intersection, lattice, bcType); 00362 } 00363 if (intersect(surf.edge2PP(), applicationDomain, intersection)) { 00364 addExternalVelocityEdge2PP(intersection, lattice, bcType); 00365 } 00366 00367 if (intersect(surf.cornerNNN(), applicationDomain, intersection)) { 00368 addExternalVelocityCornerNNN ( 00369 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00370 } 00371 if (intersect(surf.cornerNNP(), applicationDomain, intersection)) { 00372 addExternalVelocityCornerNNP ( 00373 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00374 } 00375 if (intersect(surf.cornerNPN(), applicationDomain, intersection)) { 00376 addExternalVelocityCornerNPN ( 00377 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00378 } 00379 if (intersect(surf.cornerNPP(), applicationDomain, intersection)) { 00380 addExternalVelocityCornerNPP ( 00381 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00382 } 00383 if (intersect(surf.cornerPNN(), applicationDomain, intersection)) { 00384 addExternalVelocityCornerPNN ( 00385 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00386 } 00387 if (intersect(surf.cornerPNP(), applicationDomain, intersection)) { 00388 addExternalVelocityCornerPNP ( 00389 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00390 } 00391 if (intersect(surf.cornerPPN(), applicationDomain, intersection)) { 00392 addExternalVelocityCornerPPN ( 00393 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00394 } 00395 if (intersect(surf.cornerPPP(), applicationDomain, intersection)) { 00396 addExternalVelocityCornerPPP ( 00397 intersection.x0, intersection.y0, intersection.z0, lattice, bcType); 00398 } 00399 } 00400 00401 template<typename T, template<typename U> class Descriptor> 00402 void OnLatticeBoundaryCondition3D<T,Descriptor>::setPressureConditionOnBlockBoundaries ( 00403 MultiBlockLattice3D<T,Descriptor>& lattice, 00404 boundary::BcType bcType ) 00405 { 00406 setPressureConditionOnBlockBoundaries ( 00407 lattice, lattice.getBoundingBox(), bcType ); 00408 } 00409 00410 template<typename T, template<typename U> class Descriptor> 00411 void OnLatticeBoundaryCondition3D<T,Descriptor>::setPressureConditionOnBlockBoundaries ( 00412 MultiBlockLattice3D<T,Descriptor>& lattice, 00413 Box3D applicationDomain, 00414 boundary::BcType bcType ) 00415 { 00416 setPressureConditionOnBlockBoundaries ( 00417 lattice, lattice.getBoundingBox(), applicationDomain, bcType ); 00418 } 00419 00420 00421 template<typename T, template<typename U> class Descriptor> 00422 void OnLatticeBoundaryCondition3D<T,Descriptor>::setPressureConditionOnBlockBoundaries ( 00423 MultiBlockLattice3D<T,Descriptor>& lattice, 00424 Box3D block, Box3D applicationDomain, 00425 boundary::BcType bcType ) 00426 { 00427 plint boundaryWidth = 1; 00428 BlockSurface3D surf(block, boundaryWidth); 00429 Box3D intersection; 00430 if (intersect(surf.surface0N(), applicationDomain, intersection)) { 00431 addPressureBoundary0N(intersection, lattice, bcType); 00432 } 00433 if (intersect(surf.surface0P(), applicationDomain, intersection)) { 00434 addPressureBoundary0P(intersection, lattice, bcType); 00435 } 00436 if (intersect(surf.surface1N(), applicationDomain, intersection)) { 00437 addPressureBoundary1N(intersection, lattice, bcType); 00438 } 00439 if (intersect(surf.surface1P(), applicationDomain, intersection)) { 00440 addPressureBoundary1P(intersection, lattice, bcType); 00441 } 00442 if (intersect(surf.surface2N(), applicationDomain, intersection)) { 00443 addPressureBoundary2N(intersection, lattice, bcType); 00444 } 00445 if (intersect(surf.surface2P(), applicationDomain, intersection)) { 00446 addPressureBoundary2P(intersection, lattice, bcType); 00447 } 00448 00449 /* 00450 if (intersect(surf.edge0NN(), applicationDomain, intersection)) { 00451 PLB_ASSERT( false ); 00452 } 00453 if (intersect(surf.edge0NP(), applicationDomain, intersection)) { 00454 PLB_ASSERT( false ); 00455 } 00456 if (intersect(surf.edge0PN(), applicationDomain, intersection)) { 00457 PLB_ASSERT( false ); 00458 } 00459 if (intersect(surf.edge0PP(), applicationDomain, intersection)) { 00460 PLB_ASSERT( false ); 00461 } 00462 00463 if (intersect(surf.edge1NN(), applicationDomain, intersection)) { 00464 PLB_ASSERT( false ); 00465 } 00466 if (intersect(surf.edge1NP(), applicationDomain, intersection)) { 00467 PLB_ASSERT( false ); 00468 } 00469 if (intersect(surf.edge1PN(), applicationDomain, intersection)) { 00470 PLB_ASSERT( false ); 00471 } 00472 if (intersect(surf.edge1PP(), applicationDomain, intersection)) { 00473 PLB_ASSERT( false ); 00474 } 00475 00476 if (intersect(surf.edge2NN(), applicationDomain, intersection)) { 00477 PLB_ASSERT( false ); 00478 } 00479 if (intersect(surf.edge2NP(), applicationDomain, intersection)) { 00480 PLB_ASSERT( false ); 00481 } 00482 if (intersect(surf.edge2PN(), applicationDomain, intersection)) { 00483 PLB_ASSERT( false ); 00484 } 00485 if (intersect(surf.edge2PP(), applicationDomain, intersection)) { 00486 PLB_ASSERT( false ); 00487 } 00488 00489 if (intersect(surf.cornerNNN(), applicationDomain, intersection)) { 00490 PLB_ASSERT( false ); 00491 } 00492 if (intersect(surf.cornerNNP(), applicationDomain, intersection)) { 00493 PLB_ASSERT( false ); 00494 } 00495 if (intersect(surf.cornerNPN(), applicationDomain, intersection)) { 00496 PLB_ASSERT( false ); 00497 } 00498 if (intersect(surf.cornerNPP(), applicationDomain, intersection)) { 00499 PLB_ASSERT( false ); 00500 } 00501 if (intersect(surf.cornerPNN(), applicationDomain, intersection)) { 00502 PLB_ASSERT( false ); 00503 } 00504 if (intersect(surf.cornerPNP(), applicationDomain, intersection)) { 00505 PLB_ASSERT( false ); 00506 } 00507 if (intersect(surf.cornerPPN(), applicationDomain, intersection)) { 00508 PLB_ASSERT( false ); 00509 } 00510 if (intersect(surf.cornerPPP(), applicationDomain, intersection)) { 00511 PLB_ASSERT( false ); 00512 } 00513 */ 00514 } 00515 00516 template<typename T, template<typename U> class Descriptor> 00517 class RegularizedBoundaryManager3D { 00518 public: 00519 template<int direction, int orientation> 00520 static BoundaryCompositeDynamics<T,Descriptor>* 00521 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00522 00523 template<int direction, int orientation> 00524 static BoxProcessingFunctional3D_L<T,Descriptor>* 00525 getVelocityBoundaryFunctional(); 00526 00527 template<int direction, int orientation> 00528 static BoundaryCompositeDynamics<T,Descriptor>* 00529 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00530 00531 template<int direction, int orientation> 00532 static BoxProcessingFunctional3D_L<T,Descriptor>* 00533 getPressureBoundaryFunctional(); 00534 00535 template<int plane, int normal1, int normal2> 00536 static BoundaryCompositeDynamics<T,Descriptor>* 00537 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00538 00539 template<int plane, int normal1, int normal2> 00540 static BoxProcessingFunctional3D_L<T,Descriptor>* 00541 getExternalVelocityEdgeFunctional(); 00542 00543 template<int plane, int normal1, int normal2> 00544 static BoundaryCompositeDynamics<T,Descriptor>* 00545 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00546 template<int plane, int normal1, int normal2> 00547 static BoxProcessingFunctional3D_L<T,Descriptor>* 00548 getInternalVelocityEdgeFunctional(); 00549 00550 template<int xNormal, int yNormal, int zNormal> 00551 static BoundaryCompositeDynamics<T,Descriptor>* 00552 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00553 template<int xNormal, int yNormal, int zNormal> 00554 static BoxProcessingFunctional3D_L<T,Descriptor>* 00555 getExternalVelocityCornerFunctional(); 00556 00557 template<int xNormal, int yNormal, int zNormal> 00558 static BoundaryCompositeDynamics<T,Descriptor>* 00559 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00560 template<int xNormal, int yNormal, int zNormal> 00561 static BoxProcessingFunctional3D_L<T,Descriptor>* 00562 getInternalVelocityCornerFunctional(); 00563 }; 00564 00565 template<typename T, template<typename U> class Descriptor> 00566 class WrappedRegularizedBoundaryManager3D { 00567 public: 00568 template<int direction, int orientation> 00569 static BoundaryCompositeDynamics<T,Descriptor>* 00570 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00571 00572 template<int direction, int orientation> 00573 static BoxProcessingFunctional3D_L<T,Descriptor>* 00574 getVelocityBoundaryFunctional(); 00575 00576 template<int direction, int orientation> 00577 static BoundaryCompositeDynamics<T,Descriptor>* 00578 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00579 00580 template<int direction, int orientation> 00581 static BoxProcessingFunctional3D_L<T,Descriptor>* 00582 getPressureBoundaryFunctional(); 00583 00584 template<int plane, int normal1, int normal2> 00585 static BoundaryCompositeDynamics<T,Descriptor>* 00586 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00587 00588 template<int plane, int normal1, int normal2> 00589 static BoxProcessingFunctional3D_L<T,Descriptor>* 00590 getExternalVelocityEdgeFunctional(); 00591 00592 template<int plane, int normal1, int normal2> 00593 static BoundaryCompositeDynamics<T,Descriptor>* 00594 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00595 template<int plane, int normal1, int normal2> 00596 static BoxProcessingFunctional3D_L<T,Descriptor>* 00597 getInternalVelocityEdgeFunctional(); 00598 00599 template<int xNormal, int yNormal, int zNormal> 00600 static BoundaryCompositeDynamics<T,Descriptor>* 00601 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00602 template<int xNormal, int yNormal, int zNormal> 00603 static BoxProcessingFunctional3D_L<T,Descriptor>* 00604 getExternalVelocityCornerFunctional(); 00605 00606 template<int xNormal, int yNormal, int zNormal> 00607 static BoundaryCompositeDynamics<T,Descriptor>* 00608 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00609 template<int xNormal, int yNormal, int zNormal> 00610 static BoxProcessingFunctional3D_L<T,Descriptor>* 00611 getInternalVelocityCornerFunctional(); 00612 }; 00613 00614 template<typename T, template<typename U> class Descriptor> 00615 class EquilibriumBoundaryManager3D { 00616 public: 00617 template<int direction, int orientation> 00618 static BoundaryCompositeDynamics<T,Descriptor>* 00619 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00620 00621 template<int direction, int orientation> 00622 static BoxProcessingFunctional3D_L<T,Descriptor>* 00623 getVelocityBoundaryFunctional(); 00624 00625 template<int direction, int orientation> 00626 static BoundaryCompositeDynamics<T,Descriptor>* 00627 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00628 00629 template<int direction, int orientation> 00630 static BoxProcessingFunctional3D_L<T,Descriptor>* 00631 getPressureBoundaryFunctional(); 00632 00633 template<int plane, int normal1, int normal2> 00634 static BoundaryCompositeDynamics<T,Descriptor>* 00635 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00636 00637 template<int plane, int normal1, int normal2> 00638 static BoxProcessingFunctional3D_L<T,Descriptor>* 00639 getExternalVelocityEdgeFunctional(); 00640 00641 template<int plane, int normal1, int normal2> 00642 static BoundaryCompositeDynamics<T,Descriptor>* 00643 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00644 template<int plane, int normal1, int normal2> 00645 static BoxProcessingFunctional3D_L<T,Descriptor>* 00646 getInternalVelocityEdgeFunctional(); 00647 00648 template<int xNormal, int yNormal, int zNormal> 00649 static BoundaryCompositeDynamics<T,Descriptor>* 00650 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00651 template<int xNormal, int yNormal, int zNormal> 00652 static BoxProcessingFunctional3D_L<T,Descriptor>* 00653 getExternalVelocityCornerFunctional(); 00654 00655 template<int xNormal, int yNormal, int zNormal> 00656 static BoundaryCompositeDynamics<T,Descriptor>* 00657 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00658 template<int xNormal, int yNormal, int zNormal> 00659 static BoxProcessingFunctional3D_L<T,Descriptor>* 00660 getInternalVelocityCornerFunctional(); 00661 }; 00662 00663 template<typename T, template<typename U> class Descriptor> 00664 class InterpolationBoundaryManager3D { 00665 public: 00666 template<int direction, int orientation> 00667 static BoundaryCompositeDynamics<T,Descriptor>* 00668 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00669 template<int direction, int orientation> 00670 static BoxProcessingFunctional3D_L<T,Descriptor>* 00671 getVelocityBoundaryFunctional(); 00672 00673 template<int direction, int orientation> 00674 static BoundaryCompositeDynamics<T,Descriptor>* 00675 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00676 template<int direction, int orientation> 00677 static BoxProcessingFunctional3D_L<T,Descriptor>* 00678 getPressureBoundaryFunctional(); 00679 00680 template<int plane, int normal1, int normal2> 00681 static BoundaryCompositeDynamics<T,Descriptor>* 00682 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00683 template<int plane, int normal1, int normal2> 00684 static BoxProcessingFunctional3D_L<T,Descriptor>* 00685 getExternalVelocityEdgeFunctional(); 00686 00687 template<int plane, int normal1, int normal2> 00688 static BoundaryCompositeDynamics<T,Descriptor>* 00689 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00690 template<int plane, int normal1, int normal2> 00691 static BoxProcessingFunctional3D_L<T,Descriptor>* 00692 getInternalVelocityEdgeFunctional(); 00693 00694 template<int xNormal, int yNormal, int zNormal> 00695 static BoundaryCompositeDynamics<T,Descriptor>* 00696 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00697 template<int xNormal, int yNormal, int zNormal> 00698 static BoxProcessingFunctional3D_L<T,Descriptor>* 00699 getExternalVelocityCornerFunctional(); 00700 00701 template<int xNormal, int yNormal, int zNormal> 00702 static BoundaryCompositeDynamics<T,Descriptor>* 00703 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00704 template<int xNormal, int yNormal, int zNormal> 00705 static BoxProcessingFunctional3D_L<T,Descriptor>* 00706 getInternalVelocityCornerFunctional(); 00707 }; 00708 00709 00711 00712 template<typename T, template<typename U> class Descriptor> 00713 template<int direction, int orientation> 00714 BoundaryCompositeDynamics<T,Descriptor>* RegularizedBoundaryManager3D<T,Descriptor>:: 00715 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00716 { 00717 return new RegularizedVelocityBoundaryDynamics 00718 <T,Descriptor,direction,orientation>(baseDynamics); 00719 } 00720 00721 template<typename T, template<typename U> class Descriptor> 00722 template<int direction, int orientation> 00723 BoxProcessingFunctional3D_L<T,Descriptor>* 00724 RegularizedBoundaryManager3D<T,Descriptor>:: 00725 getVelocityBoundaryFunctional() 00726 { 00727 return 0; 00728 } 00729 00730 template<typename T, template<typename U> class Descriptor> 00731 template<int direction, int orientation> 00732 BoundaryCompositeDynamics<T,Descriptor>* RegularizedBoundaryManager3D<T,Descriptor>:: 00733 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00734 { 00735 return new RegularizedDensityBoundaryDynamics 00736 <T,Descriptor,direction,orientation>(baseDynamics); 00737 } 00738 00739 template<typename T, template<typename U> class Descriptor> 00740 template<int direction, int orientation> 00741 BoxProcessingFunctional3D_L<T,Descriptor>* 00742 RegularizedBoundaryManager3D<T,Descriptor>:: 00743 getPressureBoundaryFunctional() 00744 { 00745 return 0; 00746 } 00747 00748 template<typename T, template<typename U> class Descriptor> 00749 template<int plane, int normal1, int normal2> 00750 BoundaryCompositeDynamics<T,Descriptor>* 00751 RegularizedBoundaryManager3D<T,Descriptor>:: 00752 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00753 { 00754 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00755 } 00756 00757 template<typename T, template<typename U> class Descriptor> 00758 template<int plane, int normal1, int normal2> 00759 BoxProcessingFunctional3D_L<T,Descriptor>* 00760 RegularizedBoundaryManager3D<T,Descriptor>:: 00761 getExternalVelocityEdgeFunctional() 00762 { 00763 return new OuterVelocityEdgeFunctional3D<T,Descriptor, plane,normal1,normal2>(); 00764 } 00765 00766 template<typename T, template<typename U> class Descriptor> 00767 template<int plane, int normal1, int normal2> 00768 BoundaryCompositeDynamics<T,Descriptor>* 00769 RegularizedBoundaryManager3D<T,Descriptor>:: 00770 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00771 { 00772 return new RegularizedVelocityInnerEdgeDynamics3D<T,Descriptor,plane,normal1,normal2>(baseDynamics); 00773 } 00774 00775 template<typename T, template<typename U> class Descriptor> 00776 template<int plane, int normal1, int normal2> 00777 BoxProcessingFunctional3D_L<T,Descriptor>* 00778 RegularizedBoundaryManager3D<T,Descriptor>:: 00779 getInternalVelocityEdgeFunctional() 00780 { 00781 return 0; 00782 } 00783 00784 template<typename T, template<typename U> class Descriptor> 00785 template<int xNormal, int yNormal, int zNormal> 00786 BoundaryCompositeDynamics<T,Descriptor>* 00787 RegularizedBoundaryManager3D<T,Descriptor>:: 00788 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00789 { 00790 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00791 } 00792 00793 template<typename T, template<typename U> class Descriptor> 00794 template<int xNormal, int yNormal, int zNormal> 00795 BoxProcessingFunctional3D_L<T,Descriptor>* 00796 RegularizedBoundaryManager3D<T,Descriptor>:: 00797 getExternalVelocityCornerFunctional() 00798 { 00799 return new OuterVelocityCornerFunctional3D<T,Descriptor, xNormal,yNormal,zNormal>(); 00800 } 00801 00802 template<typename T, template<typename U> class Descriptor> 00803 template<int xNormal, int yNormal, int zNormal> 00804 BoundaryCompositeDynamics<T,Descriptor>* 00805 RegularizedBoundaryManager3D<T,Descriptor>:: 00806 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00807 { 00808 return new RegularizedVelocityInnerCornerDynamics3D<T,Descriptor,xNormal,yNormal,zNormal>(baseDynamics); 00809 } 00810 00811 template<typename T, template<typename U> class Descriptor> 00812 template<int xNormal, int yNormal, int zNormal> 00813 BoxProcessingFunctional3D_L<T,Descriptor>* 00814 RegularizedBoundaryManager3D<T,Descriptor>:: 00815 getInternalVelocityCornerFunctional() 00816 { 00817 return 0; 00818 } 00819 00820 00822 00823 template<typename T, template<typename U> class Descriptor> 00824 template<int direction, int orientation> 00825 BoundaryCompositeDynamics<T,Descriptor>* WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00826 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00827 { 00828 bool automaticPrepareCollision = false; 00829 return new RegularizedVelocityBoundaryDynamics 00830 <T,Descriptor,direction,orientation>(baseDynamics, automaticPrepareCollision); 00831 } 00832 00833 template<typename T, template<typename U> class Descriptor> 00834 template<int direction, int orientation> 00835 BoxProcessingFunctional3D_L<T,Descriptor>* 00836 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00837 getVelocityBoundaryFunctional() 00838 { 00839 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00840 } 00841 00842 template<typename T, template<typename U> class Descriptor> 00843 template<int direction, int orientation> 00844 BoundaryCompositeDynamics<T,Descriptor>* WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00845 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00846 { 00847 bool automaticPrepareCollision = false; 00848 return new RegularizedDensityBoundaryDynamics 00849 <T,Descriptor,direction,orientation>(baseDynamics, automaticPrepareCollision); 00850 } 00851 00852 template<typename T, template<typename U> class Descriptor> 00853 template<int direction, int orientation> 00854 BoxProcessingFunctional3D_L<T,Descriptor>* 00855 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00856 getPressureBoundaryFunctional() 00857 { 00858 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00859 } 00860 00861 template<typename T, template<typename U> class Descriptor> 00862 template<int plane, int normal1, int normal2> 00863 BoundaryCompositeDynamics<T,Descriptor>* 00864 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00865 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00866 { 00867 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00868 } 00869 00870 template<typename T, template<typename U> class Descriptor> 00871 template<int plane, int normal1, int normal2> 00872 BoxProcessingFunctional3D_L<T,Descriptor>* 00873 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00874 getExternalVelocityEdgeFunctional() 00875 { 00876 return new OuterVelocityEdgeFunctional3D<T,Descriptor, plane,normal1,normal2>(); 00877 } 00878 00879 template<typename T, template<typename U> class Descriptor> 00880 template<int plane, int normal1, int normal2> 00881 BoundaryCompositeDynamics<T,Descriptor>* 00882 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00883 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00884 { 00885 bool automaticPrepareCollision = false; 00886 return new RegularizedVelocityInnerEdgeDynamics3D<T,Descriptor,plane,normal1,normal2> 00887 (baseDynamics, automaticPrepareCollision); 00888 } 00889 00890 template<typename T, template<typename U> class Descriptor> 00891 template<int plane, int normal1, int normal2> 00892 BoxProcessingFunctional3D_L<T,Descriptor>* 00893 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00894 getInternalVelocityEdgeFunctional() 00895 { 00896 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00897 } 00898 00899 template<typename T, template<typename U> class Descriptor> 00900 template<int xNormal, int yNormal, int zNormal> 00901 BoundaryCompositeDynamics<T,Descriptor>* 00902 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00903 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00904 { 00905 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00906 } 00907 00908 template<typename T, template<typename U> class Descriptor> 00909 template<int xNormal, int yNormal, int zNormal> 00910 BoxProcessingFunctional3D_L<T,Descriptor>* 00911 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00912 getExternalVelocityCornerFunctional() 00913 { 00914 return new OuterVelocityCornerFunctional3D<T,Descriptor, xNormal,yNormal,zNormal> (); 00915 } 00916 00917 template<typename T, template<typename U> class Descriptor> 00918 template<int xNormal, int yNormal, int zNormal> 00919 BoundaryCompositeDynamics<T,Descriptor>* 00920 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00921 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00922 { 00923 bool automaticPrepareCollision = false; 00924 return new RegularizedVelocityInnerCornerDynamics3D<T,Descriptor,xNormal,yNormal,zNormal> 00925 (baseDynamics,automaticPrepareCollision); 00926 } 00927 00928 template<typename T, template<typename U> class Descriptor> 00929 template<int xNormal, int yNormal, int zNormal> 00930 BoxProcessingFunctional3D_L<T,Descriptor>* 00931 WrappedRegularizedBoundaryManager3D<T,Descriptor>:: 00932 getInternalVelocityCornerFunctional() 00933 { 00934 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00935 } 00936 00937 00939 00940 template<typename T, template<typename U> class Descriptor> 00941 template<int direction, int orientation> 00942 BoundaryCompositeDynamics<T,Descriptor>* EquilibriumBoundaryManager3D<T,Descriptor>:: 00943 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00944 { 00945 return new RegularizedVelocityBoundaryDynamics 00946 <T,Descriptor,direction,orientation>(baseDynamics); 00947 } 00948 00949 template<typename T, template<typename U> class Descriptor> 00950 template<int direction, int orientation> 00951 BoxProcessingFunctional3D_L<T,Descriptor>* 00952 EquilibriumBoundaryManager3D<T,Descriptor>:: 00953 getVelocityBoundaryFunctional() 00954 { 00955 return 0; 00956 } 00957 00958 template<typename T, template<typename U> class Descriptor> 00959 template<int direction, int orientation> 00960 BoundaryCompositeDynamics<T,Descriptor>* EquilibriumBoundaryManager3D<T,Descriptor>:: 00961 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00962 { 00963 return new RegularizedDensityBoundaryDynamics 00964 <T,Descriptor,direction,orientation>(baseDynamics); 00965 } 00966 00967 template<typename T, template<typename U> class Descriptor> 00968 template<int direction, int orientation> 00969 BoxProcessingFunctional3D_L<T,Descriptor>* 00970 EquilibriumBoundaryManager3D<T,Descriptor>:: 00971 getPressureBoundaryFunctional() 00972 { 00973 return 0; 00974 } 00975 00976 template<typename T, template<typename U> class Descriptor> 00977 template<int plane, int normal1, int normal2> 00978 BoundaryCompositeDynamics<T,Descriptor>* 00979 EquilibriumBoundaryManager3D<T,Descriptor>:: 00980 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00981 { 00982 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00983 } 00984 00985 template<typename T, template<typename U> class Descriptor> 00986 template<int plane, int normal1, int normal2> 00987 BoxProcessingFunctional3D_L<T,Descriptor>* 00988 EquilibriumBoundaryManager3D<T,Descriptor>:: 00989 getExternalVelocityEdgeFunctional() 00990 { 00991 return new OuterVelocityEdgeFunctional3D<T,Descriptor, plane,normal1,normal2>(); 00992 } 00993 00994 template<typename T, template<typename U> class Descriptor> 00995 template<int plane, int normal1, int normal2> 00996 BoundaryCompositeDynamics<T,Descriptor>* 00997 EquilibriumBoundaryManager3D<T,Descriptor>:: 00998 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00999 { 01000 return new RegularizedVelocityInnerEdgeDynamics3D<T,Descriptor,plane,normal1,normal2>(baseDynamics); 01001 } 01002 01003 template<typename T, template<typename U> class Descriptor> 01004 template<int plane, int normal1, int normal2> 01005 BoxProcessingFunctional3D_L<T,Descriptor>* 01006 EquilibriumBoundaryManager3D<T,Descriptor>:: 01007 getInternalVelocityEdgeFunctional() 01008 { 01009 return 0; 01010 } 01011 01012 template<typename T, template<typename U> class Descriptor> 01013 template<int xNormal, int yNormal, int zNormal> 01014 BoundaryCompositeDynamics<T,Descriptor>* 01015 EquilibriumBoundaryManager3D<T,Descriptor>:: 01016 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 01017 { 01018 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 01019 } 01020 01021 template<typename T, template<typename U> class Descriptor> 01022 template<int xNormal, int yNormal, int zNormal> 01023 BoxProcessingFunctional3D_L<T,Descriptor>* 01024 EquilibriumBoundaryManager3D<T,Descriptor>:: 01025 getExternalVelocityCornerFunctional() 01026 { 01027 return new OuterVelocityCornerFunctional3D<T,Descriptor, xNormal,yNormal,zNormal>(); 01028 } 01029 01030 template<typename T, template<typename U> class Descriptor> 01031 template<int xNormal, int yNormal, int zNormal> 01032 BoundaryCompositeDynamics<T,Descriptor>* 01033 EquilibriumBoundaryManager3D<T,Descriptor>:: 01034 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 01035 { 01036 return new RegularizedVelocityInnerCornerDynamics3D<T,Descriptor,xNormal,yNormal,zNormal>(baseDynamics); 01037 } 01038 01039 template<typename T, template<typename U> class Descriptor> 01040 template<int xNormal, int yNormal, int zNormal> 01041 BoxProcessingFunctional3D_L<T,Descriptor>* 01042 EquilibriumBoundaryManager3D<T,Descriptor>:: 01043 getInternalVelocityCornerFunctional() 01044 { 01045 return 0; 01046 } 01047 01048 01050 01051 template<typename T, template<typename U> class Descriptor> 01052 template<int direction, int orientation> 01053 BoundaryCompositeDynamics<T,Descriptor>* InterpolationBoundaryManager3D<T,Descriptor>:: 01054 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 01055 { 01056 return new VelocityDirichletBoundaryDynamics 01057 <T,Descriptor,direction,orientation>(baseDynamics); 01058 } 01059 01060 template<typename T, template<typename U> class Descriptor> 01061 template<int direction, int orientation> 01062 BoxProcessingFunctional3D_L<T,Descriptor>* 01063 InterpolationBoundaryManager3D<T,Descriptor>:: 01064 getVelocityBoundaryFunctional() 01065 { 01066 return new PlaneFdBoundaryFunctional3D<T,Descriptor, direction,orientation>(); 01067 } 01068 01069 template<typename T, template<typename U> class Descriptor> 01070 template<int direction, int orientation> 01071 BoundaryCompositeDynamics<T,Descriptor>* InterpolationBoundaryManager3D<T,Descriptor>:: 01072 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 01073 { 01074 return new DensityDirichletBoundaryDynamics 01075 <T,Descriptor,direction,orientation>(baseDynamics); 01076 } 01077 01078 template<typename T, template<typename U> class Descriptor> 01079 template<int direction, int orientation> 01080 BoxProcessingFunctional3D_L<T,Descriptor>* 01081 InterpolationBoundaryManager3D<T,Descriptor>:: 01082 getPressureBoundaryFunctional() 01083 { 01084 return new PlaneFdBoundaryFunctional3D<T,Descriptor, direction,orientation>(); 01085 } 01086 01087 template<typename T, template<typename U> class Descriptor> 01088 template<int plane, int normal1, int normal2> 01089 BoundaryCompositeDynamics<T,Descriptor>* 01090 InterpolationBoundaryManager3D<T,Descriptor>:: 01091 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 01092 { 01093 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 01094 } 01095 01096 template<typename T, template<typename U> class Descriptor> 01097 template<int plane, int normal1, int normal2> 01098 BoxProcessingFunctional3D_L<T,Descriptor>* 01099 InterpolationBoundaryManager3D<T,Descriptor>:: 01100 getExternalVelocityEdgeFunctional() 01101 { 01102 return new OuterVelocityEdgeFunctional3D<T,Descriptor, plane,normal1,normal2>(); 01103 } 01104 01105 template<typename T, template<typename U> class Descriptor> 01106 template<int plane, int normal1, int normal2> 01107 BoundaryCompositeDynamics<T,Descriptor>* 01108 InterpolationBoundaryManager3D<T,Descriptor>:: 01109 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 01110 { 01111 return new RegularizedVelocityInnerEdgeDynamics3D<T,Descriptor,plane,normal1,normal2>(baseDynamics); 01112 } 01113 01114 template<typename T, template<typename U> class Descriptor> 01115 template<int plane, int normal1, int normal2> 01116 BoxProcessingFunctional3D_L<T,Descriptor>* 01117 InterpolationBoundaryManager3D<T,Descriptor>:: 01118 getInternalVelocityEdgeFunctional() 01119 { 01120 return 0; 01121 } 01122 01123 template<typename T, template<typename U> class Descriptor> 01124 template<int xNormal, int yNormal, int zNormal> 01125 BoundaryCompositeDynamics<T,Descriptor>* 01126 InterpolationBoundaryManager3D<T,Descriptor>:: 01127 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 01128 { 01129 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 01130 } 01131 01132 template<typename T, template<typename U> class Descriptor> 01133 template<int xNormal, int yNormal, int zNormal> 01134 BoxProcessingFunctional3D_L<T,Descriptor>* 01135 InterpolationBoundaryManager3D<T,Descriptor>:: 01136 getExternalVelocityCornerFunctional() 01137 { 01138 return new OuterVelocityCornerFunctional3D<T,Descriptor, xNormal,yNormal,zNormal>(); 01139 } 01140 01141 template<typename T, template<typename U> class Descriptor> 01142 template<int xNormal, int yNormal, int zNormal> 01143 BoundaryCompositeDynamics<T,Descriptor>* 01144 InterpolationBoundaryManager3D<T,Descriptor>:: 01145 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 01146 { 01147 return new RegularizedVelocityInnerCornerDynamics3D<T,Descriptor,xNormal,yNormal,zNormal>(baseDynamics); 01148 } 01149 01150 template<typename T, template<typename U> class Descriptor> 01151 template<int xNormal, int yNormal, int zNormal> 01152 BoxProcessingFunctional3D_L<T,Descriptor>* 01153 InterpolationBoundaryManager3D<T,Descriptor>:: 01154 getInternalVelocityCornerFunctional() 01155 { 01156 return 0; 01157 } 01158 01159 01161 01162 template<typename T, template<typename U> class Descriptor> 01163 OnLatticeBoundaryCondition3D<T,Descriptor>* createLocalBoundaryCondition3D() { 01164 return new BoundaryConditionInstantiator3D < 01165 T, Descriptor, 01166 WrappedRegularizedBoundaryManager3D<T,Descriptor> > (); 01167 } 01168 01169 template<typename T, template<typename U> class Descriptor> 01170 OnLatticeBoundaryCondition3D<T,Descriptor>* createDynamicsBasedLocalBoundaryCondition3D() { 01171 return new BoundaryConditionInstantiator3D < 01172 T, Descriptor, 01173 RegularizedBoundaryManager3D<T,Descriptor> > (); 01174 } 01175 01176 template<typename T, template<typename U> class Descriptor> 01177 OnLatticeBoundaryCondition3D<T,Descriptor>* createEquilibriumBoundaryCondition3D() { 01178 return new BoundaryConditionInstantiator3D < 01179 T, Descriptor, 01180 EquilibriumBoundaryManager3D<T,Descriptor> > (); 01181 } 01182 01183 template<typename T, template<typename U> class Descriptor> 01184 OnLatticeBoundaryCondition3D<T,Descriptor>* createInterpBoundaryCondition3D() { 01185 return new BoundaryConditionInstantiator3D < 01186 T, Descriptor, 01187 InterpolationBoundaryManager3D<T,Descriptor> > (); 01188 } 01189 01190 } // namespace plb 01191 01192 #endif // BOUNDARY_CONDITION_3D_HH
1.6.3
1.6.3