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

zouHeBoundary3D.hh

Go to the documentation of this file.
00001 /* This file is part of the Palabos library.
00002  *
00003  * Copyright (C) 2011 FlowKit Sarl
00004  * Avenue de Chailly 23
00005  * 1012 Lausanne, Switzerland
00006  * E-mail contact: contact@flowkit.com
00007  *
00008  * The most recent release of Palabos can be downloaded at 
00009  * <http://www.palabos.org/>
00010  *
00011  * The library Palabos is free software: you can redistribute it and/or
00012  * modify it under the terms of the GNU Affero General Public License as
00013  * published by the Free Software Foundation, either version 3 of the
00014  * License, or (at your option) any later version.
00015  *
00016  * The library is distributed in the hope that it will be useful,
00017  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00018  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019  * GNU Affero General Public License for more details.
00020  *
00021  * You should have received a copy of the GNU Affero General Public License
00022  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00023 */
00024 
00025 /* 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