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

advectionDiffusionBoundaryCondition2D.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 /* 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