$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 /* Main author: Orestis Malaspinas 00026 */ 00027 00031 #ifndef ADVECTION_DIFFUSION_BOUNDARY_CONDITION_2D_HH 00032 #define ADVECTION_DIFFUSION_BOUNDARY_CONDITION_2D_HH 00033 00034 #include "complexDynamics/advectionDiffusionBoundaries.h" 00035 #include "complexDynamics/advectionDiffusionBoundaries.hh" 00036 #include "complexDynamics/advectionDiffusionBoundaryCondition2D.h" 00037 #include "complexDynamics/advectionDiffusionBoundaryInstantiator2D.h" 00038 00039 namespace plb { 00040 00041 template<typename T, template<typename U> class Descriptor> 00042 void OnLatticeAdvectionDiffusionBoundaryCondition2D<T,Descriptor>:: 00043 setTemperatureConditionOnBlockBoundaries ( BlockLattice2D<T,Descriptor>& lattice ) 00044 { 00045 plint nx = lattice.getNx(); 00046 plint ny = lattice.getNy(); 00047 00048 addTemperatureBoundary0N(Box2D( 0, 0, 1,ny-2), lattice); 00049 addTemperatureBoundary0P(Box2D(nx-1,nx-1, 1,ny-2), lattice); 00050 addTemperatureBoundary1N(Box2D( 1,nx-2, 0, 0), lattice); 00051 addTemperatureBoundary1P(Box2D( 1,nx-2,ny-1,ny-1), lattice); 00052 00053 addTemperatureCornerNN( 0, 0, lattice); 00054 addTemperatureCornerNP( 0,ny-1, lattice); 00055 addTemperatureCornerPN(nx-1, 0, lattice); 00056 addTemperatureCornerPP(nx-1,ny-1, lattice); 00057 } 00058 00059 template<typename T, template<typename U> class Descriptor> 00060 void OnLatticeAdvectionDiffusionBoundaryCondition2D<T,Descriptor>:: 00061 setTemperatureConditionOnBlockBoundaries ( MultiBlockLattice2D<T,Descriptor>& lattice ) 00062 { 00063 plint nx = lattice.getNx(); 00064 plint ny = lattice.getNy(); 00065 00066 addTemperatureBoundary0N(Box2D( 0, 0, 1,ny-2), lattice); 00067 addTemperatureBoundary0P(Box2D(nx-1,nx-1, 1,ny-2), lattice); 00068 addTemperatureBoundary1N(Box2D( 1,nx-2, 0, 0), lattice); 00069 addTemperatureBoundary1P(Box2D( 1,nx-2,ny-1,ny-1), lattice); 00070 00071 addTemperatureCornerNN( 0, 0, lattice); 00072 addTemperatureCornerNP( 0,ny-1, lattice); 00073 addTemperatureCornerPN(nx-1, 0, lattice); 00074 addTemperatureCornerPP(nx-1,ny-1, lattice); 00075 } 00076 00077 00078 //================ Zou-He like advectionDiffusionBoundaryManager2D ==========// 00079 00080 template<typename T, template<typename U> class Descriptor> 00081 class AdvectionDiffusionBoundaryManager2D { 00082 public: 00083 template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>* 00084 getAdvectionDiffusionBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00085 template<int direction, int orientation> static DataProcessorGenerator2D* 00086 getAdvectionDiffusionBoundaryProcessor(Box2D domain); 00087 00088 template<int xNormal, int yNormal> static BoundaryCompositeDynamics<T,Descriptor>* 00089 getAdvectionDiffusionCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00090 template<int xNormal, int yNormal> static DataProcessorGenerator2D* 00091 getAdvectionDiffusionCornerProcessor(plint x, plint y); 00092 }; 00093 00094 //================ Regularized advectionDiffusionBoundaryManager2D ==========// 00095 00096 template<typename T, template<typename U> class Descriptor> 00097 class RegularizedAdvectionDiffusionBoundaryManager2D { 00098 public: 00099 template<int direction, int orientation> static BoundaryCompositeDynamics<T,Descriptor>* 00100 getAdvectionDiffusionBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics); 00101 template<int direction, int orientation> static DataProcessorGenerator2D* 00102 getAdvectionDiffusionBoundaryProcessor(Box2D domain); 00103 00104 template<int xNormal, int yNormal> static BoundaryCompositeDynamics<T,Descriptor>* 00105 getAdvectionDiffusionCornerDynamics(Dynamics<T,Descriptor>* baseDynamics); 00106 template<int xNormal, int yNormal> static DataProcessorGenerator2D* 00107 getAdvectionDiffusionCornerProcessor(plint x, plint y); 00108 }; 00109 00110 00112 00113 template<typename T, template<typename U> class Descriptor> 00114 template<int direction, int orientation> 00115 BoundaryCompositeDynamics<T,Descriptor>* AdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00116 getAdvectionDiffusionBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00117 { 00118 return new AdvectionDiffusionBoundaryDynamics<T,Descriptor,direction,orientation>(baseDynamics); 00119 } 00120 00121 template<typename T, template<typename U> class Descriptor> 00122 template<int direction, int orientation> 00123 DataProcessorGenerator2D* 00124 AdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00125 getAdvectionDiffusionBoundaryProcessor(Box2D domain) 00126 { 00127 return 0; 00128 } 00129 00130 00131 //================== Corners ================================ 00132 00133 template<typename T, template<typename U> class Descriptor> 00134 template<int xNormal, int yNormal> 00135 BoundaryCompositeDynamics<T,Descriptor>* AdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00136 getAdvectionDiffusionCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00137 { 00138 return new AdvectionDiffusionCornerDynamics2D<T,Descriptor,xNormal,yNormal>(baseDynamics); 00139 } 00140 00141 template<typename T, template<typename U> class Descriptor> 00142 template<int xNormal, int yNormal> 00143 DataProcessorGenerator2D* 00144 AdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00145 getAdvectionDiffusionCornerProcessor(plint x, plint y) 00146 { 00147 return 0; 00148 } 00149 00151 00152 template<typename T, template<typename U> class Descriptor> 00153 template<int direction, int orientation> 00154 BoundaryCompositeDynamics<T,Descriptor>* RegularizedAdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00155 getAdvectionDiffusionBoundaryDynamics(Dynamics<T,Descriptor>* baseDynamics) 00156 { 00157 return new RegularizedAdvectionDiffusionBoundaryDynamics<T,Descriptor,direction,orientation>(baseDynamics); 00158 } 00159 00160 template<typename T, template<typename U> class Descriptor> 00161 template<int direction, int orientation> 00162 DataProcessorGenerator2D* 00163 RegularizedAdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00164 getAdvectionDiffusionBoundaryProcessor(Box2D domain) 00165 { 00166 return 0; 00167 } 00168 00169 00170 //================== Corners ================================ 00171 00172 template<typename T, template<typename U> class Descriptor> 00173 template<int xNormal, int yNormal> 00174 BoundaryCompositeDynamics<T,Descriptor>* RegularizedAdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00175 getAdvectionDiffusionCornerDynamics(Dynamics<T,Descriptor>* baseDynamics) 00176 { 00177 return new AdvectionDiffusionCornerDynamics2D<T,Descriptor,xNormal,yNormal>(baseDynamics); 00178 } 00179 00180 template<typename T, template<typename U> class Descriptor> 00181 template<int xNormal, int yNormal> 00182 DataProcessorGenerator2D* 00183 RegularizedAdvectionDiffusionBoundaryManager2D<T,Descriptor>:: 00184 getAdvectionDiffusionCornerProcessor(plint x, plint y) 00185 { 00186 return 0; 00187 } 00188 00190 00191 template<typename T, template<typename U> class Descriptor> 00192 OnLatticeAdvectionDiffusionBoundaryCondition2D<T,Descriptor>* 00193 createLocalAdvectionDiffusionBoundaryCondition2D() 00194 { 00195 return new AdvectionDiffusionBoundaryConditionInstantiator2D<T, Descriptor, 00196 AdvectionDiffusionBoundaryManager2D<T,Descriptor> > (); 00197 } 00198 00199 template<typename T, template<typename U> class Descriptor> 00200 OnLatticeAdvectionDiffusionBoundaryCondition2D<T,Descriptor>* 00201 createLocalRegularizedAdvectionDiffusionBoundaryCondition2D() 00202 { 00203 return new AdvectionDiffusionBoundaryConditionInstantiator2D<T, Descriptor, 00204 RegularizedAdvectionDiffusionBoundaryManager2D<T,Descriptor> > (); 00205 } 00206 00207 } // namespace plb 00208 00209 #endif
1.6.3
1.6.3