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

advectionDiffusionBoundaryCondition3D.h

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 
00030 #ifndef ADVECTION_DIFFUSION_BOUNDARY_CONDITION_3D_H
00031 #define ADVECTION_DIFFUSION_BOUNDARY_CONDITION_3D_H
00032 
00033 #include "core/globalDefs.h"
00034 #include "core/dynamics.h"
00035 #include "atomicBlock/blockLattice3D.h"
00036 #include "multiBlock/multiBlockLattice3D.h"
00037 #include "complexDynamics/advectionDiffusionDynamics.h"
00038 
00039 #include <vector>
00040 #include <list>
00041 
00042 namespace plb {
00043 
00044 template<typename T, template<typename U> class Descriptor>
00045 class OnLatticeAdvectionDiffusionBoundaryCondition3D {
00046 public:
00047     virtual ~OnLatticeAdvectionDiffusionBoundaryCondition3D() { }
00048 
00049     // 3D boundary condition for temperature:
00050     virtual void addTemperatureBoundary0N (
00051             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00052             boundary::BcType bcType=boundary::dirichlet ) =0;
00053     virtual void addTemperatureBoundary0P (
00054             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00055             boundary::BcType bcType=boundary::dirichlet ) =0;
00056     virtual void addTemperatureBoundary1N (
00057             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00058             boundary::BcType bcType=boundary::dirichlet ) =0;
00059     virtual void addTemperatureBoundary1P (
00060             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00061             boundary::BcType bcType=boundary::dirichlet ) =0;
00062     virtual void addTemperatureBoundary2N (
00063             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00064             boundary::BcType bcType=boundary::dirichlet ) =0;
00065     virtual void addTemperatureBoundary2P (
00066             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00067             boundary::BcType bcType=boundary::dirichlet ) =0;
00068 
00069     virtual void addTemperatureEdge0NN (
00070             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00071             boundary::BcType bcType=boundary::dirichlet ) =0;
00072     virtual void addTemperatureEdge0NP (
00073             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00074             boundary::BcType bcType=boundary::dirichlet ) =0;
00075     virtual void addTemperatureEdge0PN (
00076             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00077             boundary::BcType bcType=boundary::dirichlet ) =0;
00078     virtual void addTemperatureEdge0PP (
00079             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00080             boundary::BcType bcType=boundary::dirichlet ) =0;
00081     virtual void addTemperatureEdge1NN (
00082             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00083             boundary::BcType bcType=boundary::dirichlet ) =0;
00084     virtual void addTemperatureEdge1NP (
00085             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00086             boundary::BcType bcType=boundary::dirichlet ) =0;
00087     virtual void addTemperatureEdge1PN (
00088             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00089             boundary::BcType bcType=boundary::dirichlet ) =0;
00090     virtual void addTemperatureEdge1PP (
00091             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00092             boundary::BcType bcType=boundary::dirichlet ) =0;
00093     virtual void addTemperatureEdge2NN (
00094             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00095             boundary::BcType bcType=boundary::dirichlet ) =0;
00096     virtual void addTemperatureEdge2NP (
00097             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00098             boundary::BcType bcType=boundary::dirichlet ) =0;
00099     virtual void addTemperatureEdge2PN (
00100             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00101             boundary::BcType bcType=boundary::dirichlet ) =0;
00102     virtual void addTemperatureEdge2PP (
00103             Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00104             boundary::BcType bcType=boundary::dirichlet ) =0;
00105 
00106     virtual void addTemperatureCornerNNN (
00107             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00108             boundary::BcType bcType=boundary::dirichlet ) =0;
00109     virtual void addTemperatureCornerNNP (
00110             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00111             boundary::BcType bcType=boundary::dirichlet ) =0;
00112     virtual void addTemperatureCornerNPN (
00113             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00114             boundary::BcType bcType=boundary::dirichlet ) =0;
00115     virtual void addTemperatureCornerNPP (
00116             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00117             boundary::BcType bcType=boundary::dirichlet ) =0;
00118     virtual void addTemperatureCornerPNN (
00119             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00120             boundary::BcType bcType=boundary::dirichlet ) =0;
00121     virtual void addTemperatureCornerPNP (
00122             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00123             boundary::BcType bcType=boundary::dirichlet ) =0;
00124     virtual void addTemperatureCornerPPN (
00125             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00126             boundary::BcType bcType=boundary::dirichlet ) =0;
00127     virtual void addTemperatureCornerPPP (
00128             plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00129             boundary::BcType bcType=boundary::dirichlet ) =0;
00130 
00131     void setTemperatureConditionOnBlockBoundaries(BlockLattice3D<T,Descriptor>& lattice,
00132             boundary::BcType bcType=boundary::dirichlet);
00133 
00134     // 3D boundary condition for temperature:
00135     virtual void addTemperatureBoundary0N (
00136             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00137             boundary::BcType bcType=boundary::dirichlet ) =0;
00138     virtual void addTemperatureBoundary0P (
00139             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00140             boundary::BcType bcType=boundary::dirichlet ) =0;
00141     virtual void addTemperatureBoundary1N (
00142             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00143             boundary::BcType bcType=boundary::dirichlet ) =0;
00144     virtual void addTemperatureBoundary1P (
00145             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00146             boundary::BcType bcType=boundary::dirichlet ) =0;
00147     virtual void addTemperatureBoundary2N (
00148             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00149             boundary::BcType bcType=boundary::dirichlet ) =0;
00150     virtual void addTemperatureBoundary2P (
00151             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00152             boundary::BcType bcType=boundary::dirichlet ) =0;
00153 
00154     virtual void addTemperatureEdge0NN (
00155             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00156             boundary::BcType bcType=boundary::dirichlet ) =0;
00157     virtual void addTemperatureEdge0NP (
00158             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00159             boundary::BcType bcType=boundary::dirichlet ) =0;
00160     virtual void addTemperatureEdge0PN (
00161             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00162             boundary::BcType bcType=boundary::dirichlet ) =0;
00163     virtual void addTemperatureEdge0PP (
00164             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00165             boundary::BcType bcType=boundary::dirichlet ) =0;
00166     virtual void addTemperatureEdge1NN (
00167             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00168             boundary::BcType bcType=boundary::dirichlet ) =0;
00169     virtual void addTemperatureEdge1NP (
00170             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00171             boundary::BcType bcType=boundary::dirichlet ) =0;
00172     virtual void addTemperatureEdge1PN (
00173             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00174             boundary::BcType bcType=boundary::dirichlet ) =0;
00175     virtual void addTemperatureEdge1PP (
00176             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00177             boundary::BcType bcType=boundary::dirichlet ) =0;
00178     virtual void addTemperatureEdge2NN (
00179             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00180             boundary::BcType bcType=boundary::dirichlet ) =0;
00181     virtual void addTemperatureEdge2NP (
00182             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00183             boundary::BcType bcType=boundary::dirichlet ) =0;
00184     virtual void addTemperatureEdge2PN (
00185             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00186             boundary::BcType bcType=boundary::dirichlet ) =0;
00187     virtual void addTemperatureEdge2PP (
00188             Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00189             boundary::BcType bcType=boundary::dirichlet ) =0;
00190 
00191     virtual void addTemperatureCornerNNN (
00192             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00193             boundary::BcType bcType=boundary::dirichlet ) =0;
00194     virtual void addTemperatureCornerNNP (
00195             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00196             boundary::BcType bcType=boundary::dirichlet ) =0;
00197     virtual void addTemperatureCornerNPN (
00198             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00199             boundary::BcType bcType=boundary::dirichlet ) =0;
00200     virtual void addTemperatureCornerNPP (
00201             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00202             boundary::BcType bcType=boundary::dirichlet ) =0;
00203     virtual void addTemperatureCornerPNN (
00204             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00205             boundary::BcType bcType=boundary::dirichlet ) =0;
00206     virtual void addTemperatureCornerPNP (
00207             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00208             boundary::BcType bcType=boundary::dirichlet ) =0;
00209     virtual void addTemperatureCornerPPN (
00210             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00211             boundary::BcType bcType=boundary::dirichlet ) =0;
00212     virtual void addTemperatureCornerPPP (
00213             plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00214             boundary::BcType bcType=boundary::dirichlet ) =0;
00215 
00216     void setTemperatureConditionOnBlockBoundaries(MultiBlockLattice3D<T,Descriptor>& lattice,
00217             boundary::BcType bcType=boundary::dirichlet);
00218 
00219 };
00220 
00221 
00223 
00224 template<typename T, template<typename U> class Descriptor>
00225 OnLatticeAdvectionDiffusionBoundaryCondition3D<T,Descriptor>*
00226     createLocalAdvectionDiffusionBoundaryCondition3D();
00227     
00228 }  // namespace plb
00229 
00230 #endif