$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 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
1.6.3
1.6.3