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

boundaryCondition3D.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 
00027 #ifndef BOUNDARY_CONDITION_3D_H
00028 #define BOUNDARY_CONDITION_3D_H
00029 
00030 #include "core/globalDefs.h"
00031 #include "boundaryCondition/boundaryCondition.h"
00032 #include "boundaryCondition/finiteDifferenceBoundaryProcessor3D.h"
00033 #include "core/dynamics.h"
00034 
00035 namespace plb {
00036 
00037 template<typename T, template<typename U> class Descriptor> class BlockLattice3D;
00038 template<typename T, template<typename U> class Descriptor> class MultiBlockLattice3D;
00039 
00040 template<typename T, template<typename U> class Descriptor>
00041 class OnLatticeBoundaryCondition3D {
00042 public:
00043     virtual ~OnLatticeBoundaryCondition3D() { }
00044     virtual OnLatticeBoundaryCondition3D<T,Descriptor>* clone() const =0;
00045 
00046     // PART I: Atomic-block version.
00047     
00048     virtual void addVelocityBoundary0N (
00049               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00050               boundary::BcType bcType=boundary::dirichlet ) =0;
00051     virtual void addVelocityBoundary0P (
00052               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00053               boundary::BcType bcType=boundary::dirichlet ) =0;
00054     virtual void addVelocityBoundary1N (
00055               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00056               boundary::BcType bcType=boundary::dirichlet ) =0;
00057     virtual void addVelocityBoundary1P (
00058               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00059               boundary::BcType bcType=boundary::dirichlet ) =0;
00060     virtual void addVelocityBoundary2N (
00061               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00062               boundary::BcType bcType=boundary::dirichlet ) =0;
00063     virtual void addVelocityBoundary2P (
00064               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00065               boundary::BcType bcType=boundary::dirichlet ) =0;
00066 
00067     virtual void addPressureBoundary0N (
00068               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00069               boundary::BcType bcType=boundary::dirichlet ) =0;
00070     virtual void addPressureBoundary0P (
00071               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00072               boundary::BcType bcType=boundary::dirichlet ) =0;
00073     virtual void addPressureBoundary1N (
00074               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00075               boundary::BcType bcType=boundary::dirichlet ) =0;
00076     virtual void addPressureBoundary1P (
00077               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00078               boundary::BcType bcType=boundary::dirichlet ) =0;
00079     virtual void addPressureBoundary2N (
00080               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00081               boundary::BcType bcType=boundary::dirichlet ) =0;
00082     virtual void addPressureBoundary2P (
00083               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00084               boundary::BcType bcType=boundary::dirichlet ) =0;
00085 
00086     virtual void addExternalVelocityEdge0NN (
00087               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00088               boundary::BcType bcType=boundary::dirichlet ) =0;
00089     virtual void addExternalVelocityEdge0NP (
00090               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00091               boundary::BcType bcType=boundary::dirichlet ) =0;
00092     virtual void addExternalVelocityEdge0PN (
00093               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00094               boundary::BcType bcType=boundary::dirichlet ) =0;
00095     virtual void addExternalVelocityEdge0PP (
00096               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00097               boundary::BcType bcType=boundary::dirichlet ) =0;
00098     virtual void addExternalVelocityEdge1NN (
00099               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00100               boundary::BcType bcType=boundary::dirichlet ) =0;
00101     virtual void addExternalVelocityEdge1NP (
00102               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00103               boundary::BcType bcType=boundary::dirichlet ) =0;
00104     virtual void addExternalVelocityEdge1PN (
00105               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00106               boundary::BcType bcType=boundary::dirichlet ) =0;
00107     virtual void addExternalVelocityEdge1PP (
00108               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00109               boundary::BcType bcType=boundary::dirichlet ) =0;
00110     virtual void addExternalVelocityEdge2NN (
00111               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00112               boundary::BcType bcType=boundary::dirichlet ) =0;
00113     virtual void addExternalVelocityEdge2NP (
00114               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00115               boundary::BcType bcType=boundary::dirichlet ) =0;
00116     virtual void addExternalVelocityEdge2PN (
00117               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00118               boundary::BcType bcType=boundary::dirichlet ) =0;
00119     virtual void addExternalVelocityEdge2PP (
00120               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00121               boundary::BcType bcType=boundary::dirichlet ) =0;
00122 
00123     virtual void addInternalVelocityEdge0NN (
00124               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00125               boundary::BcType bcType=boundary::dirichlet ) =0;
00126     virtual void addInternalVelocityEdge0NP (
00127               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00128               boundary::BcType bcType=boundary::dirichlet ) =0;
00129     virtual void addInternalVelocityEdge0PN (
00130               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00131               boundary::BcType bcType=boundary::dirichlet ) =0;
00132     virtual void addInternalVelocityEdge0PP (
00133               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00134               boundary::BcType bcType=boundary::dirichlet ) =0;
00135     virtual void addInternalVelocityEdge1NN (
00136               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00137               boundary::BcType bcType=boundary::dirichlet ) =0;
00138     virtual void addInternalVelocityEdge1NP (
00139               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00140               boundary::BcType bcType=boundary::dirichlet ) =0;
00141     virtual void addInternalVelocityEdge1PN (
00142               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00143               boundary::BcType bcType=boundary::dirichlet ) =0;
00144     virtual void addInternalVelocityEdge1PP (
00145               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00146               boundary::BcType bcType=boundary::dirichlet ) =0;
00147     virtual void addInternalVelocityEdge2NN (
00148               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00149               boundary::BcType bcType=boundary::dirichlet ) =0;
00150     virtual void addInternalVelocityEdge2NP (
00151               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00152               boundary::BcType bcType=boundary::dirichlet ) =0;
00153     virtual void addInternalVelocityEdge2PN (
00154               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00155               boundary::BcType bcType=boundary::dirichlet ) =0;
00156     virtual void addInternalVelocityEdge2PP (
00157               Box3D domain, BlockLattice3D<T,Descriptor>& lattice,
00158               boundary::BcType bcType=boundary::dirichlet ) =0;
00159 
00160     virtual void addExternalVelocityCornerNNN (
00161               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00162               boundary::BcType bcType=boundary::dirichlet ) =0;
00163     virtual void addExternalVelocityCornerNNP (
00164               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00165               boundary::BcType bcType=boundary::dirichlet ) =0;
00166     virtual void addExternalVelocityCornerNPN (
00167               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00168               boundary::BcType bcType=boundary::dirichlet ) =0;
00169     virtual void addExternalVelocityCornerNPP (
00170               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00171               boundary::BcType bcType=boundary::dirichlet ) =0;
00172     virtual void addExternalVelocityCornerPNN (
00173               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00174               boundary::BcType bcType=boundary::dirichlet ) =0;
00175     virtual void addExternalVelocityCornerPNP (
00176               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00177               boundary::BcType bcType=boundary::dirichlet ) =0;
00178     virtual void addExternalVelocityCornerPPN (
00179               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00180               boundary::BcType bcType=boundary::dirichlet ) =0;
00181     virtual void addExternalVelocityCornerPPP (
00182               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00183               boundary::BcType bcType=boundary::dirichlet ) =0;
00184 
00185     virtual void addInternalVelocityCornerNNN (
00186               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00187               boundary::BcType bcType=boundary::dirichlet ) =0;
00188     virtual void addInternalVelocityCornerNNP (
00189               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00190               boundary::BcType bcType=boundary::dirichlet ) =0;
00191     virtual void addInternalVelocityCornerNPN (
00192               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00193               boundary::BcType bcType=boundary::dirichlet ) =0;
00194     virtual void addInternalVelocityCornerNPP (
00195               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00196               boundary::BcType bcType=boundary::dirichlet ) =0;
00197     virtual void addInternalVelocityCornerPNN (
00198               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00199               boundary::BcType bcType=boundary::dirichlet ) =0;
00200     virtual void addInternalVelocityCornerPNP (
00201               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00202               boundary::BcType bcType=boundary::dirichlet ) =0;
00203     virtual void addInternalVelocityCornerPPN (
00204               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00205               boundary::BcType bcType=boundary::dirichlet ) =0;
00206     virtual void addInternalVelocityCornerPPP (
00207               plint x, plint y, plint z, BlockLattice3D<T,Descriptor>& lattice,
00208               boundary::BcType bcType=boundary::dirichlet ) =0;
00209 
00211     void setVelocityConditionOnBlockBoundaries( BlockLattice3D<T,Descriptor>& lattice,
00212                                                 boundary::BcType bcType=boundary::dirichlet );
00213 
00216 
00220     void setVelocityConditionOnBlockBoundaries( BlockLattice3D<T,Descriptor>& lattice,
00221                                                 Box3D applicationDomain,
00222                                                 boundary::BcType bcType=boundary::dirichlet );
00223 
00226     void setVelocityConditionOnBlockBoundaries( BlockLattice3D<T,Descriptor>& lattice,
00227                                                 Box3D block, Box3D applicationDomain,
00228                                                 boundary::BcType bcType=boundary::dirichlet );
00229 
00230 
00232     void setPressureConditionOnBlockBoundaries( BlockLattice3D<T,Descriptor>& lattice,
00233                                                 boundary::BcType bcType=boundary::dirichlet );
00234 
00237 
00241     void setPressureConditionOnBlockBoundaries( BlockLattice3D<T,Descriptor>& lattice,
00242                                                 Box3D applicationDomain,
00243                                                 boundary::BcType bcType=boundary::dirichlet );
00244 
00247     void setPressureConditionOnBlockBoundaries( BlockLattice3D<T,Descriptor>& lattice,
00248                                                 Box3D block, Box3D applicationDomain,
00249                                                 boundary::BcType bcType=boundary::dirichlet );
00250 
00251     // PART II: Multi-block version.
00252     
00253     virtual void addVelocityBoundary0N (
00254               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00255               boundary::BcType bcType=boundary::dirichlet ) =0;
00256     virtual void addVelocityBoundary0P (
00257               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00258               boundary::BcType bcType=boundary::dirichlet ) =0;
00259     virtual void addVelocityBoundary1N (
00260               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00261               boundary::BcType bcType=boundary::dirichlet ) =0;
00262     virtual void addVelocityBoundary1P (
00263               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00264               boundary::BcType bcType=boundary::dirichlet ) =0;
00265     virtual void addVelocityBoundary2N (
00266               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00267               boundary::BcType bcType=boundary::dirichlet ) =0;
00268     virtual void addVelocityBoundary2P (
00269               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00270               boundary::BcType bcType=boundary::dirichlet ) =0;
00271 
00272     virtual void addPressureBoundary0N (
00273               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00274               boundary::BcType bcType=boundary::dirichlet ) =0;
00275     virtual void addPressureBoundary0P (
00276               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00277               boundary::BcType bcType=boundary::dirichlet ) =0;
00278     virtual void addPressureBoundary1N (
00279               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00280               boundary::BcType bcType=boundary::dirichlet ) =0;
00281     virtual void addPressureBoundary1P (
00282               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00283               boundary::BcType bcType=boundary::dirichlet ) =0;
00284     virtual void addPressureBoundary2N (
00285               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00286               boundary::BcType bcType=boundary::dirichlet ) =0;
00287     virtual void addPressureBoundary2P (
00288               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00289               boundary::BcType bcType=boundary::dirichlet ) =0;
00290 
00291     virtual void addExternalVelocityEdge0NN (
00292               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00293               boundary::BcType bcType=boundary::dirichlet ) =0;
00294     virtual void addExternalVelocityEdge0NP (
00295               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00296               boundary::BcType bcType=boundary::dirichlet ) =0;
00297     virtual void addExternalVelocityEdge0PN (
00298               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00299               boundary::BcType bcType=boundary::dirichlet ) =0;
00300     virtual void addExternalVelocityEdge0PP (
00301               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00302               boundary::BcType bcType=boundary::dirichlet ) =0;
00303     virtual void addExternalVelocityEdge1NN (
00304               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00305               boundary::BcType bcType=boundary::dirichlet ) =0;
00306     virtual void addExternalVelocityEdge1NP (
00307               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00308               boundary::BcType bcType=boundary::dirichlet ) =0;
00309     virtual void addExternalVelocityEdge1PN (
00310               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00311               boundary::BcType bcType=boundary::dirichlet ) =0;
00312     virtual void addExternalVelocityEdge1PP (
00313               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00314               boundary::BcType bcType=boundary::dirichlet ) =0;
00315     virtual void addExternalVelocityEdge2NN (
00316               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00317               boundary::BcType bcType=boundary::dirichlet ) =0;
00318     virtual void addExternalVelocityEdge2NP (
00319               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00320               boundary::BcType bcType=boundary::dirichlet ) =0;
00321     virtual void addExternalVelocityEdge2PN (
00322               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00323               boundary::BcType bcType=boundary::dirichlet ) =0;
00324     virtual void addExternalVelocityEdge2PP (
00325               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00326               boundary::BcType bcType=boundary::dirichlet ) =0;
00327 
00328     virtual void addInternalVelocityEdge0NN (
00329               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00330               boundary::BcType bcType=boundary::dirichlet ) =0;
00331     virtual void addInternalVelocityEdge0NP (
00332               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00333               boundary::BcType bcType=boundary::dirichlet ) =0;
00334     virtual void addInternalVelocityEdge0PN (
00335               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00336               boundary::BcType bcType=boundary::dirichlet ) =0;
00337     virtual void addInternalVelocityEdge0PP (
00338               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00339               boundary::BcType bcType=boundary::dirichlet ) =0;
00340     virtual void addInternalVelocityEdge1NN (
00341               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00342               boundary::BcType bcType=boundary::dirichlet ) =0;
00343     virtual void addInternalVelocityEdge1NP (
00344               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00345               boundary::BcType bcType=boundary::dirichlet ) =0;
00346     virtual void addInternalVelocityEdge1PN (
00347               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00348               boundary::BcType bcType=boundary::dirichlet ) =0;
00349     virtual void addInternalVelocityEdge1PP (
00350               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00351               boundary::BcType bcType=boundary::dirichlet ) =0;
00352     virtual void addInternalVelocityEdge2NN (
00353               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00354               boundary::BcType bcType=boundary::dirichlet ) =0;
00355     virtual void addInternalVelocityEdge2NP (
00356               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00357               boundary::BcType bcType=boundary::dirichlet ) =0;
00358     virtual void addInternalVelocityEdge2PN (
00359               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00360               boundary::BcType bcType=boundary::dirichlet ) =0;
00361     virtual void addInternalVelocityEdge2PP (
00362               Box3D domain, MultiBlockLattice3D<T,Descriptor>& lattice,
00363               boundary::BcType bcType=boundary::dirichlet ) =0;
00364 
00365     virtual void addExternalVelocityCornerNNN (
00366               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00367               boundary::BcType bcType=boundary::dirichlet ) =0;
00368     virtual void addExternalVelocityCornerNNP (
00369               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00370               boundary::BcType bcType=boundary::dirichlet ) =0;
00371     virtual void addExternalVelocityCornerNPN (
00372               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00373               boundary::BcType bcType=boundary::dirichlet ) =0;
00374     virtual void addExternalVelocityCornerNPP (
00375               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00376               boundary::BcType bcType=boundary::dirichlet ) =0;
00377     virtual void addExternalVelocityCornerPNN (
00378               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00379               boundary::BcType bcType=boundary::dirichlet ) =0;
00380     virtual void addExternalVelocityCornerPNP (
00381               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00382               boundary::BcType bcType=boundary::dirichlet ) =0;
00383     virtual void addExternalVelocityCornerPPN (
00384               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00385               boundary::BcType bcType=boundary::dirichlet ) =0;
00386     virtual void addExternalVelocityCornerPPP (
00387               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00388               boundary::BcType bcType=boundary::dirichlet ) =0;
00389 
00390     virtual void addInternalVelocityCornerNNN (
00391               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00392               boundary::BcType bcType=boundary::dirichlet ) =0;
00393     virtual void addInternalVelocityCornerNNP (
00394               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00395               boundary::BcType bcType=boundary::dirichlet ) =0;
00396     virtual void addInternalVelocityCornerNPN (
00397               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00398               boundary::BcType bcType=boundary::dirichlet ) =0;
00399     virtual void addInternalVelocityCornerNPP (
00400               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00401               boundary::BcType bcType=boundary::dirichlet ) =0;
00402     virtual void addInternalVelocityCornerPNN (
00403               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00404               boundary::BcType bcType=boundary::dirichlet ) =0;
00405     virtual void addInternalVelocityCornerPNP (
00406               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00407               boundary::BcType bcType=boundary::dirichlet ) =0;
00408     virtual void addInternalVelocityCornerPPN (
00409               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00410               boundary::BcType bcType=boundary::dirichlet ) =0;
00411     virtual void addInternalVelocityCornerPPP (
00412               plint x, plint y, plint z, MultiBlockLattice3D<T,Descriptor>& lattice,
00413               boundary::BcType bcType=boundary::dirichlet ) =0;
00414 
00416     void setVelocityConditionOnBlockBoundaries( MultiBlockLattice3D<T,Descriptor>& lattice,
00417                                                 boundary::BcType bcType=boundary::dirichlet );
00418 
00421 
00425     void setVelocityConditionOnBlockBoundaries( MultiBlockLattice3D<T,Descriptor>& lattice,
00426                                                 Box3D applicationDomain,
00427                                                 boundary::BcType bcType=boundary::dirichlet );
00428 
00431     void setVelocityConditionOnBlockBoundaries( MultiBlockLattice3D<T,Descriptor>& lattice,
00432                                                 Box3D block, Box3D applicationDomain,
00433                                                 boundary::BcType bcType=boundary::dirichlet );
00434 
00435 
00437     void setPressureConditionOnBlockBoundaries( MultiBlockLattice3D<T,Descriptor>& lattice,
00438                                                 boundary::BcType bcType=boundary::dirichlet );
00439 
00442 
00446     void setPressureConditionOnBlockBoundaries( MultiBlockLattice3D<T,Descriptor>& lattice,
00447                                                 Box3D applicationDomain,
00448                                                 boundary::BcType bcType=boundary::dirichlet );
00449 
00452     void setPressureConditionOnBlockBoundaries( MultiBlockLattice3D<T,Descriptor>& lattice,
00453                                                 Box3D block, Box3D applicationDomain,
00454                                                 boundary::BcType bcType=boundary::dirichlet );
00455 
00456 };
00457 
00458 
00460 
00462 template<typename T, template<typename U> class Descriptor>
00463 OnLatticeBoundaryCondition3D<T,Descriptor>* createLocalBoundaryCondition3D();
00464 
00466 template<typename T, template<typename U> class Descriptor>
00467 OnLatticeBoundaryCondition3D<T,Descriptor>* createDynamicsBasedLocalBoundaryCondition3D();
00468 
00470 template<typename T, template<typename U> class Descriptor>
00471 OnLatticeBoundaryCondition3D<T,Descriptor>* createEquilibriumBoundaryCondition3D();
00472 
00474 template<typename T, template<typename U> class Descriptor>
00475     OnLatticeBoundaryCondition3D<T,Descriptor>* createInterpBoundaryCondition3D();
00476 
00477 }  // namespace plb
00478 
00479 #endif  // BOUNDARY_CONDITION_3D_H