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

zouHeBoundary2D.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 
00031 #ifndef ZOU_HE_BOUNDARY_2D_HH
00032 #define ZOU_HE_BOUNDARY_2D_HH
00033 
00034 #include "boundaryCondition/zouHeBoundary2D.h"
00035 #include "boundaryCondition/zouHeDynamics.h"
00036 #include "boundaryCondition/zouHeDynamics.hh"
00037 #include "boundaryCondition/regularizedBoundaryDynamics2D.h"
00038 #include "boundaryCondition/boundaryInstantiator2D.h"
00039 #include "boundaryCondition/wrappedLocalBoundaryProcessor2D.h"
00040 
00041 namespace plb {
00042 
00043 template<typename T, template<typename U> class Descriptor>
00044 class ZouHeBoundaryManager2D {
00045 public:
00046     template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>*
00047         getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics);
00048     template<int direction, int orientation> static BoxProcessingFunctional2D_L<T,Descriptor>*
00049         getVelocityBoundaryFunctional();
00050 
00051     template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>*
00052         getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics);
00053     template<int direction, int orientation> static BoxProcessingFunctional2D_L<T,Descriptor>*
00054         getPressureBoundaryFunctional();
00055 
00056     template<int xNormal, int yNormal> static BoundaryCompositeDynamics<T,Descriptor>*
00057         getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics);
00058     template<int xNormal, int yNormal> static BoxProcessingFunctional2D_L<T,Descriptor>*
00059         getExternalVelocityCornerFunctional();
00060 
00061     template<int xNormal, int yNormal> static BoundaryCompositeDynamics<T,Descriptor>*
00062         getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics);
00063     template<int xNormal, int yNormal> static BoxProcessingFunctional2D_L<T,Descriptor>*
00064         getInternalVelocityCornerFunctional();
00065 };
00066 
00067 template<typename T, template<typename U> class Descriptor>
00068 class WrappedZouHeBoundaryManager2D {
00069 public:
00070     template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>*
00071         getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics);
00072     template<int direction, int orientation> static BoxProcessingFunctional2D_L<T,Descriptor>*
00073         getVelocityBoundaryFunctional();
00074 
00075     template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>*
00076         getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics);
00077     template<int direction, int orientation> static BoxProcessingFunctional2D_L<T,Descriptor>*
00078         getPressureBoundaryFunctional();
00079 
00080     template<int xNormal, int yNormal> static BoundaryCompositeDynamics<T,Descriptor>*
00081         getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics);
00082     template<int xNormal, int yNormal> static BoxProcessingFunctional2D_L<T,Descriptor>*
00083         getExternalVelocityCornerFunctional();
00084 
00085     template<int xNormal, int yNormal> static BoundaryCompositeDynamics<T,Descriptor>*
00086         getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics);
00087     template<int xNormal, int yNormal> static BoxProcessingFunctional2D_L<T,Descriptor>*
00088         getInternalVelocityCornerFunctional();
00089 };
00090 
00092 
00093 template<typename T, template<typename U> class Descriptor>
00094 template<int direction, int orientation>
00095 BoundaryCompositeDynamics<T,Descriptor>* ZouHeBoundaryManager2D<T,Descriptor>::
00096     getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00097 {
00098     return new ZouHeVelocityDynamics<T,Descriptor, direction, orientation>(baseDynamics);
00099 }
00100 
00101 template<typename T, template<typename U> class Descriptor>
00102 template<int direction, int orientation>
00103 BoxProcessingFunctional2D_L<T,Descriptor>*
00104     ZouHeBoundaryManager2D<T,Descriptor>::
00105         getVelocityBoundaryFunctional()
00106 {
00107     return 0;
00108 }
00109 
00110 template<typename T, template<typename U> class Descriptor>
00111 template<int direction, int orientation>
00112 BoundaryCompositeDynamics<T,Descriptor>* ZouHeBoundaryManager2D<T,Descriptor>::
00113     getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00114 {
00115     return new ZouHePressureDynamics<T,Descriptor, direction, orientation>(baseDynamics);
00116 }
00117 
00118 template<typename T, template<typename U> class Descriptor>
00119 template<int direction, int orientation>
00120 BoxProcessingFunctional2D_L<T,Descriptor>*
00121     ZouHeBoundaryManager2D<T,Descriptor>::
00122         getPressureBoundaryFunctional()
00123 {
00124     return 0;
00125 }
00126 
00127 template<typename T, template<typename U> class Descriptor>
00128 template<int xNormal, int yNormal>
00129 BoundaryCompositeDynamics<T,Descriptor>* ZouHeBoundaryManager2D<T,Descriptor>::
00130     getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00131 {
00132     return new StoreVelocityDynamics<T,Descriptor>(baseDynamics);
00133 }
00134 
00135 template<typename T, template<typename U> class Descriptor>
00136 template<int xNormal, int yNormal>
00137 BoxProcessingFunctional2D_L<T,Descriptor>*
00138     ZouHeBoundaryManager2D<T,Descriptor>::
00139         getExternalVelocityCornerFunctional()
00140 {
00141     return new OuterVelocityCornerFunctional2D<T,Descriptor, xNormal,yNormal>();
00142 }
00143 
00144 template<typename T, template<typename U> class Descriptor>
00145 template<int xNormal, int yNormal>
00146 BoundaryCompositeDynamics<T,Descriptor>* ZouHeBoundaryManager2D<T,Descriptor>::
00147     getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00148 {
00149     return new RegularizedVelocityInnerCornerDynamics2D<T,Descriptor, xNormal, yNormal>(baseDynamics);
00150 }
00151 
00152 template<typename T, template<typename U> class Descriptor>
00153 template<int xNormal, int yNormal>
00154 BoxProcessingFunctional2D_L<T,Descriptor>*
00155     ZouHeBoundaryManager2D<T,Descriptor>::getInternalVelocityCornerFunctional()
00156 {
00157     return 0;
00158 }
00159 
00160 
00162 
00163 template<typename T, template<typename U> class Descriptor>
00164 template<int direction, int orientation>
00165 BoundaryCompositeDynamics<T,Descriptor>* WrappedZouHeBoundaryManager2D<T,Descriptor>::
00166     getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00167 {
00168     bool automaticPrepareCollision = false;
00169     return new ZouHeVelocityDynamics
00170                    <T,Descriptor, direction, orientation>(baseDynamics, automaticPrepareCollision);
00171 }
00172 
00173 template<typename T, template<typename U> class Descriptor>
00174 template<int direction, int orientation>
00175 BoxProcessingFunctional2D_L<T,Descriptor>*
00176     WrappedZouHeBoundaryManager2D<T,Descriptor>::
00177         getVelocityBoundaryFunctional()
00178 {
00179     return new WrappedLocalBoundaryFunctional2D<T,Descriptor>();
00180 }
00181 
00182 template<typename T, template<typename U> class Descriptor>
00183 template<int direction, int orientation>
00184 BoundaryCompositeDynamics<T,Descriptor>* WrappedZouHeBoundaryManager2D<T,Descriptor>::
00185     getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00186 {
00187     bool automaticPrepareCollision = false;
00188     return new ZouHePressureDynamics
00189                    <T,Descriptor, direction, orientation>(baseDynamics,automaticPrepareCollision);
00190 }
00191 
00192 template<typename T, template<typename U> class Descriptor>
00193 template<int direction, int orientation>
00194 BoxProcessingFunctional2D_L<T,Descriptor>*
00195     WrappedZouHeBoundaryManager2D<T,Descriptor>::
00196         getPressureBoundaryFunctional()
00197 {
00198     return new WrappedLocalBoundaryFunctional2D<T,Descriptor>();
00199 }
00200 
00201 template<typename T, template<typename U> class Descriptor>
00202 template<int xNormal, int yNormal>
00203 BoundaryCompositeDynamics<T,Descriptor>* WrappedZouHeBoundaryManager2D<T,Descriptor>::
00204     getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00205 {
00206     return new StoreVelocityDynamics<T,Descriptor>(baseDynamics);
00207 }
00208 
00209 template<typename T, template<typename U> class Descriptor>
00210 template<int xNormal, int yNormal>
00211 BoxProcessingFunctional2D_L<T,Descriptor>*
00212     WrappedZouHeBoundaryManager2D<T,Descriptor>::
00213         getExternalVelocityCornerFunctional()
00214 {
00215     return new OuterVelocityCornerFunctional2D<T,Descriptor, xNormal,yNormal>();
00216 }
00217 
00218 template<typename T, template<typename U> class Descriptor>
00219 template<int xNormal, int yNormal>
00220 BoundaryCompositeDynamics<T,Descriptor>* WrappedZouHeBoundaryManager2D<T,Descriptor>::
00221     getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00222 {
00223     bool automaticPrepareCollision = false;
00224     return new RegularizedVelocityInnerCornerDynamics2D
00225                    <T,Descriptor, xNormal, yNormal>(baseDynamics, automaticPrepareCollision);
00226 }
00227 
00228 template<typename T, template<typename U> class Descriptor>
00229 template<int xNormal, int yNormal>
00230 BoxProcessingFunctional2D_L<T,Descriptor>*
00231     WrappedZouHeBoundaryManager2D<T,Descriptor>::getInternalVelocityCornerFunctional()
00232 {
00233     return new WrappedLocalBoundaryFunctional2D<T,Descriptor>();
00234 }
00235 
00236 
00238 
00239 template<typename T, template<typename U> class Descriptor>
00240 OnLatticeBoundaryCondition2D<T,Descriptor>* createZouHeBoundaryCondition2D() {
00241     return new BoundaryConditionInstantiator2D <
00242                    T, Descriptor,
00243                    WrappedZouHeBoundaryManager2D<T,Descriptor> > ();
00244 }
00245 
00246 template<typename T, template<typename U> class Descriptor>
00247 OnLatticeBoundaryCondition2D<T,Descriptor>* createDynamicsBasedZouHeBoundaryCondition2D() {
00248     return new BoundaryConditionInstantiator2D <
00249                    T, Descriptor,
00250                    ZouHeBoundaryManager2D<T,Descriptor> > ();
00251 }
00252 
00253 }  // namespace plb
00254 
00255 #endif  // ZOU_HE_BOUNDARY_2D_HH