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