$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 /* Orestis Malaspinas contributed this code. 00026 */ 00027 00028 #ifndef ZOU_HE_BOUNDARY_3D_HH 00029 #define ZOU_HE_BOUNDARY_3D_HH 00030 00031 #include "boundaryCondition/zouHeBoundary3D.h" 00032 #include "boundaryCondition/zouHeDynamics.h" 00033 #include "boundaryCondition/zouHeDynamics.hh" 00034 #include "boundaryCondition/regularizedBoundaryDynamics3D.h" 00035 #include "boundaryCondition/boundaryInstantiator3D.h" 00036 #include "boundaryCondition/wrappedLocalBoundaryProcessor3D.h" 00037 00038 namespace plb { 00039 00040 template<typename T, template<typename U> class Descriptor> 00041 class ZouHeBoundaryManager3D { 00042 public: 00043 template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>* 00044 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00045 template<int direction, int orientation> static BoxProcessingFunctional3D_L<T,Descriptor>* 00046 getVelocityBoundaryFunctional(); 00047 00048 template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>* 00049 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00050 template<int direction, int orientation> static BoxProcessingFunctional3D_L<T,Descriptor>* 00051 getPressureBoundaryFunctional(); 00052 00053 template<int plane, int normal1, int normal2> static BoundaryCompositeDynamics<T,Descriptor>* 00054 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00055 template<int plane, int normal1, int normal2> static BoxProcessingFunctional3D_L<T,Descriptor>* 00056 getExternalVelocityEdgeFunctional(); 00057 00058 template<int plane, int normal1, int normal2> static BoundaryCompositeDynamics<T,Descriptor>* 00059 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00060 template<int plane, int normal1, int normal2> static BoxProcessingFunctional3D_L<T,Descriptor>* 00061 getInternalVelocityEdgeFunctional(); 00062 00063 template<int xNormal, int yNormal, int zNormal> static BoundaryCompositeDynamics<T,Descriptor>* 00064 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00065 template<int xNormal, int yNormal, int zNormal> static BoxProcessingFunctional3D_L<T,Descriptor>* 00066 getExternalVelocityCornerFunctional(); 00067 00068 template<int xNormal, int yNormal, int zNormal> static BoundaryCompositeDynamics<T,Descriptor>* 00069 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00070 template<int xNormal, int yNormal, int zNormal> static BoxProcessingFunctional3D_L<T,Descriptor>* 00071 getInternalVelocityCornerFunctional(); 00072 }; 00073 00074 template<typename T, template<typename U> class Descriptor> 00075 class WrappedZouHeBoundaryManager3D { 00076 public: 00077 template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>* 00078 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00079 template<int direction, int orientation> static BoxProcessingFunctional3D_L<T,Descriptor>* 00080 getVelocityBoundaryFunctional(); 00081 00082 template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>* 00083 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00084 template<int direction, int orientation> static BoxProcessingFunctional3D_L<T,Descriptor>* 00085 getPressureBoundaryFunctional(); 00086 00087 template<int plane, int normal1, int normal2> static BoundaryCompositeDynamics<T,Descriptor>* 00088 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00089 template<int plane, int normal1, int normal2> static BoxProcessingFunctional3D_L<T,Descriptor>* 00090 getExternalVelocityEdgeFunctional(); 00091 00092 template<int plane, int normal1, int normal2> static BoundaryCompositeDynamics<T,Descriptor>* 00093 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics); 00094 template<int plane, int normal1, int normal2> static BoxProcessingFunctional3D_L<T,Descriptor>* 00095 getInternalVelocityEdgeFunctional(); 00096 00097 template<int xNormal, int yNormal, int zNormal> static BoundaryCompositeDynamics<T,Descriptor>* 00098 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00099 template<int xNormal, int yNormal, int zNormal> static BoxProcessingFunctional3D_L<T,Descriptor>* 00100 getExternalVelocityCornerFunctional(); 00101 00102 template<int xNormal, int yNormal, int zNormal> static BoundaryCompositeDynamics<T,Descriptor>* 00103 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00104 template<int xNormal, int yNormal, int zNormal> static BoxProcessingFunctional3D_L<T,Descriptor>* 00105 getInternalVelocityCornerFunctional(); 00106 }; 00107 00108 00110 00111 template<typename T, template<typename U> class Descriptor> 00112 template<int direction, int orientation> 00113 BoundaryCompositeDynamics<T,Descriptor>* ZouHeBoundaryManager3D<T,Descriptor>:: 00114 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00115 { 00116 return new ZouHeVelocityDynamics<T,Descriptor, direction, orientation>(baseDynamics); 00117 } 00118 00119 template<typename T, template<typename U> class Descriptor> 00120 template<int direction, int orientation> 00121 BoxProcessingFunctional3D_L<T,Descriptor>* 00122 ZouHeBoundaryManager3D<T,Descriptor>:: 00123 getVelocityBoundaryFunctional() 00124 { 00125 return 0; 00126 } 00127 00128 template<typename T, template<typename U> class Descriptor> 00129 template<int direction, int orientation> 00130 BoundaryCompositeDynamics<T,Descriptor>* ZouHeBoundaryManager3D<T,Descriptor>:: 00131 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00132 { 00133 return new ZouHePressureDynamics<T,Descriptor, direction, orientation>(baseDynamics); 00134 } 00135 00136 template<typename T, template<typename U> class Descriptor> 00137 template<int direction, int orientation> 00138 BoxProcessingFunctional3D_L<T,Descriptor>* 00139 ZouHeBoundaryManager3D<T,Descriptor>:: 00140 getPressureBoundaryFunctional() 00141 { 00142 return 0; 00143 } 00144 00145 template<typename T, template<typename U> class Descriptor> 00146 template<int plane, int normal1, int normal2> 00147 BoundaryCompositeDynamics<T,Descriptor>* 00148 ZouHeBoundaryManager3D<T,Descriptor>:: 00149 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00150 { 00151 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00152 } 00153 00154 template<typename T, template<typename U> class Descriptor> 00155 template<int plane, int normal1, int normal2> 00156 BoxProcessingFunctional3D_L<T,Descriptor>* 00157 ZouHeBoundaryManager3D<T,Descriptor>:: 00158 getExternalVelocityEdgeFunctional() 00159 { 00160 return new OuterVelocityEdgeFunctional3D<T,Descriptor, plane,normal1,normal2>(); 00161 } 00162 00163 template<typename T, template<typename U> class Descriptor> 00164 template<int plane, int normal1, int normal2> 00165 BoundaryCompositeDynamics<T,Descriptor>* 00166 ZouHeBoundaryManager3D<T,Descriptor>:: 00167 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00168 { 00169 return new RegularizedVelocityInnerEdgeDynamics3D<T,Descriptor,plane,normal1,normal2>(baseDynamics); 00170 } 00171 00172 template<typename T, template<typename U> class Descriptor> 00173 template<int plane, int normal1, int normal2> 00174 BoxProcessingFunctional3D_L<T,Descriptor>* 00175 ZouHeBoundaryManager3D<T,Descriptor>:: 00176 getInternalVelocityEdgeFunctional() 00177 { 00178 return 0; 00179 } 00180 00181 template<typename T, template<typename U> class Descriptor> 00182 template<int xNormal, int yNormal, int zNormal> 00183 BoundaryCompositeDynamics<T,Descriptor>* 00184 ZouHeBoundaryManager3D<T,Descriptor>:: 00185 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00186 { 00187 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00188 } 00189 00190 template<typename T, template<typename U> class Descriptor> 00191 template<int xNormal, int yNormal, int zNormal> 00192 BoxProcessingFunctional3D_L<T,Descriptor>* 00193 ZouHeBoundaryManager3D<T,Descriptor>:: 00194 getExternalVelocityCornerFunctional() 00195 { 00196 return new OuterVelocityCornerFunctional3D<T,Descriptor, xNormal,yNormal,zNormal>(); 00197 } 00198 00199 template<typename T, template<typename U> class Descriptor> 00200 template<int xNormal, int yNormal, int zNormal> 00201 BoundaryCompositeDynamics<T,Descriptor>* 00202 ZouHeBoundaryManager3D<T,Descriptor>:: 00203 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00204 { 00205 return new RegularizedVelocityInnerCornerDynamics3D<T,Descriptor,xNormal,yNormal,zNormal>(baseDynamics); 00206 } 00207 00208 template<typename T, template<typename U> class Descriptor> 00209 template<int xNormal, int yNormal, int zNormal> 00210 BoxProcessingFunctional3D_L<T,Descriptor>* 00211 ZouHeBoundaryManager3D<T,Descriptor>:: 00212 getInternalVelocityCornerFunctional() 00213 { 00214 return 0; 00215 } 00216 00217 00219 00220 template<typename T, template<typename U> class Descriptor> 00221 template<int direction, int orientation> 00222 BoundaryCompositeDynamics<T,Descriptor>* WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00223 getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00224 { 00225 bool automaticPrepareCollision = false; 00226 return new ZouHeVelocityDynamics 00227 <T,Descriptor, direction, orientation>(baseDynamics, automaticPrepareCollision); 00228 } 00229 00230 template<typename T, template<typename U> class Descriptor> 00231 template<int direction, int orientation> 00232 BoxProcessingFunctional3D_L<T,Descriptor>* 00233 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00234 getVelocityBoundaryFunctional() 00235 { 00236 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00237 } 00238 00239 template<typename T, template<typename U> class Descriptor> 00240 template<int direction, int orientation> 00241 BoundaryCompositeDynamics<T,Descriptor>* WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00242 getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00243 { 00244 bool automaticPrepareCollision = false; 00245 return new ZouHePressureDynamics 00246 <T,Descriptor, direction, orientation>(baseDynamics, automaticPrepareCollision); 00247 } 00248 00249 template<typename T, template<typename U> class Descriptor> 00250 template<int direction, int orientation> 00251 BoxProcessingFunctional3D_L<T,Descriptor>* 00252 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00253 getPressureBoundaryFunctional() 00254 { 00255 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00256 } 00257 00258 template<typename T, template<typename U> class Descriptor> 00259 template<int plane, int normal1, int normal2> 00260 BoundaryCompositeDynamics<T,Descriptor>* 00261 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00262 getExternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00263 { 00264 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00265 } 00266 00267 template<typename T, template<typename U> class Descriptor> 00268 template<int plane, int normal1, int normal2> 00269 BoxProcessingFunctional3D_L<T,Descriptor>* 00270 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00271 getExternalVelocityEdgeFunctional() 00272 { 00273 return new OuterVelocityEdgeFunctional3D<T,Descriptor, plane,normal1,normal2>(); 00274 } 00275 00276 template<typename T, template<typename U> class Descriptor> 00277 template<int plane, int normal1, int normal2> 00278 BoundaryCompositeDynamics<T,Descriptor>* 00279 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00280 getInternalVelocityEdgeDynamics(Dynamics<T,Descriptor>* baseDynamics) 00281 { 00282 bool automaticPrepareCollision = false; 00283 return new RegularizedVelocityInnerEdgeDynamics3D 00284 <T,Descriptor,plane,normal1,normal2>(baseDynamics,automaticPrepareCollision); 00285 } 00286 00287 template<typename T, template<typename U> class Descriptor> 00288 template<int plane, int normal1, int normal2> 00289 BoxProcessingFunctional3D_L<T,Descriptor>* 00290 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00291 getInternalVelocityEdgeFunctional() 00292 { 00293 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00294 } 00295 00296 template<typename T, template<typename U> class Descriptor> 00297 template<int xNormal, int yNormal, int zNormal> 00298 BoundaryCompositeDynamics<T,Descriptor>* 00299 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00300 getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00301 { 00302 return new StoreVelocityDynamics<T,Descriptor>(baseDynamics); 00303 } 00304 00305 template<typename T, template<typename U> class Descriptor> 00306 template<int xNormal, int yNormal, int zNormal> 00307 BoxProcessingFunctional3D_L<T,Descriptor>* 00308 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00309 getExternalVelocityCornerFunctional() 00310 { 00311 return new OuterVelocityCornerFunctional3D<T,Descriptor, xNormal,yNormal,zNormal>(); 00312 } 00313 00314 template<typename T, template<typename U> class Descriptor> 00315 template<int xNormal, int yNormal, int zNormal> 00316 BoundaryCompositeDynamics<T,Descriptor>* 00317 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00318 getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00319 { 00320 bool automaticPrepareCollision = false; 00321 return new RegularizedVelocityInnerCornerDynamics3D<T,Descriptor,xNormal,yNormal,zNormal> 00322 (baseDynamics,automaticPrepareCollision); 00323 } 00324 00325 template<typename T, template<typename U> class Descriptor> 00326 template<int xNormal, int yNormal, int zNormal> 00327 BoxProcessingFunctional3D_L<T,Descriptor>* 00328 WrappedZouHeBoundaryManager3D<T,Descriptor>:: 00329 getInternalVelocityCornerFunctional() 00330 { 00331 return new WrappedLocalBoundaryFunctional3D<T,Descriptor>(); 00332 } 00333 00334 00336 00337 template<typename T, template<typename U> class Descriptor> 00338 OnLatticeBoundaryCondition3D<T,Descriptor>* createZouHeBoundaryCondition3D() { 00339 return new BoundaryConditionInstantiator3D < 00340 T, Descriptor, 00341 WrappedZouHeBoundaryManager3D<T,Descriptor> > (); 00342 } 00343 00344 template<typename T, template<typename U> class Descriptor> 00345 OnLatticeBoundaryCondition3D<T,Descriptor>* createDynamicsBasedZouHeBoundaryCondition3D() { 00346 return new BoundaryConditionInstantiator3D < 00347 T, Descriptor, 00348 ZouHeBoundaryManager3D<T,Descriptor> > (); 00349 } 00350 00351 } // namespace plb 00352 00353 #endif // ZOU_HE_BOUNDARY_3D_HH
1.6.3
1.6.3