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

inamuroBoundary2D.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 INAMURO_BOUNDARY_2D_HH
00032 #define INAMURO_BOUNDARY_2D_HH
00033 
00034 #include "boundaryCondition/inamuroBoundary2D.h"
00035 #include "boundaryCondition/inamuroAnalyticalDynamics.h"
00036 #include "boundaryCondition/inamuroAnalyticalDynamics.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 InamuroBoundaryManager2D {
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 WrappedInamuroBoundaryManager2D {
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 
00091 
00093 
00094 template<typename T, template<typename U> class Descriptor>
00095 template<int direction, int orientation>
00096 BoundaryCompositeDynamics<T,Descriptor>* InamuroBoundaryManager2D<T,Descriptor>::
00097     getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00098 {
00099     return new InamuroAnalyticalVelocityDynamics<T,Descriptor, direction, orientation>(baseDynamics);
00100 }
00101 
00102 template<typename T, template<typename U> class Descriptor>
00103 template<int direction, int orientation>
00104 BoxProcessingFunctional2D_L<T,Descriptor>*
00105     InamuroBoundaryManager2D<T,Descriptor>::
00106         getVelocityBoundaryFunctional()
00107 {
00108     return 0;
00109 }
00110 
00111  
00112 template<typename T, template<typename U> class Descriptor>
00113 template<int direction, int orientation>
00114 BoundaryCompositeDynamics<T,Descriptor>* InamuroBoundaryManager2D<T,Descriptor>::
00115     getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00116 {
00117     return new InamuroAnalyticalPressureDynamics<T,Descriptor, direction, orientation>(baseDynamics);
00118 }
00119 
00120 template<typename T, template<typename U> class Descriptor>
00121 template<int direction, int orientation>
00122 BoxProcessingFunctional2D_L<T,Descriptor>*
00123     InamuroBoundaryManager2D<T,Descriptor>::
00124         getPressureBoundaryFunctional()
00125 {
00126     return 0;
00127 }
00128 
00129 template<typename T, template<typename U> class Descriptor>
00130 template<int xNormal, int yNormal>
00131 BoundaryCompositeDynamics<T,Descriptor>* InamuroBoundaryManager2D<T,Descriptor>::
00132     getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00133 {
00134     return new StoreVelocityDynamics<T,Descriptor>(baseDynamics);
00135 }
00136 
00137 template<typename T, template<typename U> class Descriptor>
00138 template<int xNormal, int yNormal>
00139 BoxProcessingFunctional2D_L<T,Descriptor>*
00140     InamuroBoundaryManager2D<T,Descriptor>::
00141         getExternalVelocityCornerFunctional()
00142 {
00143     return new OuterVelocityCornerFunctional2D<T,Descriptor, xNormal,yNormal>();
00144 }
00145 
00146 template<typename T, template<typename U> class Descriptor>
00147 template<int xNormal, int yNormal>
00148 BoundaryCompositeDynamics<T,Descriptor>* InamuroBoundaryManager2D<T,Descriptor>::
00149     getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00150 {
00151     return new RegularizedVelocityInnerCornerDynamics2D<T,Descriptor, xNormal, yNormal>(baseDynamics);
00152 }
00153 
00154 template<typename T, template<typename U> class Descriptor>
00155 template<int xNormal, int yNormal>
00156 BoxProcessingFunctional2D_L<T,Descriptor>*
00157     InamuroBoundaryManager2D<T,Descriptor>::getInternalVelocityCornerFunctional()
00158 {
00159     return 0;
00160 }
00161 
00162 
00164 
00165 template<typename T, template<typename U> class Descriptor>
00166 template<int direction, int orientation>
00167 BoundaryCompositeDynamics<T,Descriptor>* WrappedInamuroBoundaryManager2D<T,Descriptor>::
00168     getVelocityBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00169 {
00170     bool automaticPrepareCollision = false;
00171     return new InamuroAnalyticalVelocityDynamics
00172                    <T,Descriptor, direction, orientation>(baseDynamics, automaticPrepareCollision);
00173 }
00174 
00175 template<typename T, template<typename U> class Descriptor>
00176 template<int direction, int orientation>
00177 BoxProcessingFunctional2D_L<T,Descriptor>*
00178     WrappedInamuroBoundaryManager2D<T,Descriptor>::
00179         getVelocityBoundaryFunctional()
00180 {
00181     return new WrappedLocalBoundaryFunctional2D<T,Descriptor>();
00182 }
00183 
00184  
00185 template<typename T, template<typename U> class Descriptor>
00186 template<int direction, int orientation>
00187 BoundaryCompositeDynamics<T,Descriptor>* WrappedInamuroBoundaryManager2D<T,Descriptor>::
00188     getPressureBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics)
00189 {
00190     bool automaticPrepareCollision = false;
00191     return new InamuroAnalyticalPressureDynamics
00192                    <T,Descriptor, direction, orientation>(baseDynamics,automaticPrepareCollision);
00193 }
00194 
00195 template<typename T, template<typename U> class Descriptor>
00196 template<int direction, int orientation>
00197 BoxProcessingFunctional2D_L<T,Descriptor>*
00198     WrappedInamuroBoundaryManager2D<T,Descriptor>::
00199         getPressureBoundaryFunctional()
00200 {
00201     return new WrappedLocalBoundaryFunctional2D<T,Descriptor>();
00202 }
00203 
00204 template<typename T, template<typename U> class Descriptor>
00205 template<int xNormal, int yNormal>
00206 BoundaryCompositeDynamics<T,Descriptor>* WrappedInamuroBoundaryManager2D<T,Descriptor>::
00207     getExternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00208 {
00209     return new StoreVelocityDynamics<T,Descriptor>(baseDynamics);
00210 }
00211 
00212 template<typename T, template<typename U> class Descriptor>
00213 template<int xNormal, int yNormal>
00214 BoxProcessingFunctional2D_L<T,Descriptor>*
00215     WrappedInamuroBoundaryManager2D<T,Descriptor>::
00216         getExternalVelocityCornerFunctional()
00217 {
00218     return new OuterVelocityCornerFunctional2D<T,Descriptor, xNormal,yNormal>();
00219 }
00220 
00221 template<typename T, template<typename U> class Descriptor>
00222 template<int xNormal, int yNormal>
00223 BoundaryCompositeDynamics<T,Descriptor>* WrappedInamuroBoundaryManager2D<T,Descriptor>::
00224     getInternalVelocityCornerDynamics(Dynamics<T,Descriptor>* baseDynamics)
00225 {
00226     bool automaticPrepareCollision = false;
00227     return new RegularizedVelocityInnerCornerDynamics2D
00228                    <T,Descriptor, xNormal, yNormal>(baseDynamics,automaticPrepareCollision);
00229 }
00230 
00231 template<typename T, template<typename U> class Descriptor>
00232 template<int xNormal, int yNormal>
00233 BoxProcessingFunctional2D_L<T,Descriptor>*
00234     WrappedInamuroBoundaryManager2D<T,Descriptor>::getInternalVelocityCornerFunctional()
00235 {
00236     return new WrappedLocalBoundaryFunctional2D<T,Descriptor>();
00237 }
00238 
00239 
00241 
00242 template<typename T, template<typename U> class Descriptor>
00243 OnLatticeBoundaryCondition2D<T,Descriptor>* createInamuroBoundaryCondition2D() {
00244     return new BoundaryConditionInstantiator2D <
00245                    T, Descriptor,
00246                    WrappedInamuroBoundaryManager2D<T,Descriptor> > ();
00247 }
00248 
00249 template<typename T, template<typename U> class Descriptor>
00250 OnLatticeBoundaryCondition2D<T,Descriptor>* createDynamicsBasedInamuroBoundaryCondition2D() {
00251     return new BoundaryConditionInstantiator2D <
00252                    T, Descriptor,
00253                    InamuroBoundaryManager2D<T,Descriptor> > ();
00254 }
00255 
00256 }  // namespace plb
00257 
00258 #endif  // INAMURO_BOUNDARY_2D_HH