$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 #ifndef GRID_CONVERSION_3D_H 00026 #define GRID_CONVERSION_3D_H 00027 00028 #include "core/globalDefs.h" 00029 #include "atomicBlock/dataProcessingFunctional3D.h" 00030 #include "atomicBlock/dataProcessorWrapper3D.h" 00031 #include "multiBlock/multiDataProcessorWrapper3D.h" 00032 #include "particles/multiParticleField3D.h" 00033 #include "core/util.h" 00034 #include "core/dynamics.h" 00035 00036 namespace plb { 00037 00038 Box3D scaleBox(Box3D box, plint nLevel); 00039 00041 template<typename T> 00042 class ScalarCopyFineToCoarseZerothOrder3D : public BoxProcessingFunctional3D_SS<T,T> 00043 { 00044 public: 00045 ScalarCopyFineToCoarseZerothOrder3D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00046 ScalarCopyFineToCoarseZerothOrder3D(ScalarCopyFineToCoarseZerothOrder3D<T> const& rhs); 00047 ScalarCopyFineToCoarseZerothOrder3D<T>& operator= ( 00048 ScalarCopyFineToCoarseZerothOrder3D<T> const& rhs ); 00049 virtual void process( Box3D fineDomain, 00050 ScalarField3D<T>& fineField, ScalarField3D<T>& coarseField ); 00051 virtual ScalarCopyFineToCoarseZerothOrder3D<T>* clone() const; 00052 virtual BlockDomain::DomainT appliesTo() const { 00053 return BlockDomain::bulk; 00054 } 00055 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00056 modified[0] = modif::nothing; 00057 modified[1] = modif::staticVariables; 00058 } 00059 private: 00060 plint dimDx, dimDt; 00061 plint dxScale, dtScale; 00062 }; 00063 00065 template<typename T, int nDim> 00066 class TensorCopyFineToCoarseZerothOrder3D : public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 00067 { 00068 public: 00069 TensorCopyFineToCoarseZerothOrder3D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00070 TensorCopyFineToCoarseZerothOrder3D(TensorCopyFineToCoarseZerothOrder3D<T,nDim> const& rhs); 00071 TensorCopyFineToCoarseZerothOrder3D<T,nDim>& operator= ( 00072 TensorCopyFineToCoarseZerothOrder3D<T,nDim> const& rhs ); 00073 virtual void process( Box3D fineDomain, 00074 TensorField3D<T,nDim>& fineField, TensorField3D<T,nDim>& coarseField ); 00075 virtual TensorCopyFineToCoarseZerothOrder3D<T,nDim>* clone() const; 00076 virtual BlockDomain::DomainT appliesTo() const { 00077 return BlockDomain::bulk; 00078 } 00079 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00080 modified[0] = modif::nothing; 00081 modified[1] = modif::staticVariables; 00082 } 00083 private: 00084 plint dimDx, dimDt; 00085 plint dxScale, dtScale; 00086 }; 00087 00089 template<typename T, template<typename U> class Descriptor> 00090 class LatticeCopyFineToCoarseZerothOrder3D : public BoxProcessingFunctional3D_LL<T,Descriptor,T,Descriptor> 00091 { 00092 public: 00093 LatticeCopyFineToCoarseZerothOrder3D(plint dxScale_, plint dtScale_); 00094 LatticeCopyFineToCoarseZerothOrder3D(LatticeCopyFineToCoarseZerothOrder3D<T,Descriptor> const& rhs); 00095 LatticeCopyFineToCoarseZerothOrder3D<T,Descriptor>& operator= ( 00096 LatticeCopyFineToCoarseZerothOrder3D<T,Descriptor> const& rhs ); 00097 virtual void process( Box3D fineDomain, 00098 BlockLattice3D<T,Descriptor>& fineLattice, 00099 BlockLattice3D<T,Descriptor>& coarseLattice ); 00100 virtual LatticeCopyFineToCoarseZerothOrder3D<T,Descriptor>* clone() const; 00101 virtual BlockDomain::DomainT appliesTo() const { 00102 return BlockDomain::bulk; 00103 } 00104 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00105 modified[0] = modif::nothing; 00106 modified[1] = modif::staticVariables; 00107 } 00108 private: 00109 plint dxScale, dtScale; 00110 }; 00111 00113 template<typename T, template<typename U> class Descriptor> 00114 class CopyRescaleParticles3D : public BoxProcessingFunctional3D 00115 { 00116 public: 00117 CopyRescaleParticles3D(plint dxScale_, plint dtScale_); 00118 virtual void processGenericBlocks ( 00119 Box3D fineDomain, std::vector<AtomicBlock3D*> blocks ); 00120 virtual CopyRescaleParticles3D<T,Descriptor>* clone() const; 00121 virtual BlockDomain::DomainT appliesTo() const { 00122 return BlockDomain::bulk; 00123 } 00124 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00125 modified[0] = modif::nothing; 00126 modified[1] = modif::staticVariables; 00127 } 00128 private: 00129 plint dxScale, dtScale; 00130 }; 00131 00132 00134 template<typename T> 00135 class ScalarInterpolateCoarseToFine3D : public BoxProcessingFunctional3D_SS<T,T> 00136 { 00137 public: 00138 ScalarInterpolateCoarseToFine3D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00139 00140 ScalarInterpolateCoarseToFine3D( 00141 ScalarInterpolateCoarseToFine3D<T> const& rhs); 00142 ScalarInterpolateCoarseToFine3D<T>& operator= ( 00143 ScalarInterpolateCoarseToFine3D<T> const& rhs ); 00144 00145 virtual void process( Box3D coarseDomain, 00146 ScalarField3D<T>& coarseField, 00147 ScalarField3D<T>& fineField ); 00148 00149 virtual ScalarInterpolateCoarseToFine3D<T>* clone() const; 00150 00151 virtual BlockDomain::DomainT appliesTo() const { 00152 return BlockDomain::bulk; 00153 } 00154 00155 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00156 modified[0] = modif::nothing; 00157 modified[1] = modif::staticVariables; 00158 } 00159 private: 00160 plint dimDx, dimDt; 00161 plint dxScale, dtScale; 00162 }; 00163 00165 template<typename T, int nDim> 00166 class TensorInterpolateCoarseToFine3D : public BoxProcessingFunctional3D_TT<T,nDim,T,nDim> 00167 { 00168 public: 00169 TensorInterpolateCoarseToFine3D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00170 00171 TensorInterpolateCoarseToFine3D( 00172 TensorInterpolateCoarseToFine3D<T,nDim> const& rhs); 00173 TensorInterpolateCoarseToFine3D<T,nDim>& operator= ( 00174 TensorInterpolateCoarseToFine3D<T,nDim> const& rhs ); 00175 00176 virtual void process( Box3D coarseDomain, 00177 TensorField3D<T,nDim>& coarseField, 00178 TensorField3D<T,nDim>& fineField ); 00179 00180 virtual TensorInterpolateCoarseToFine3D<T,nDim>* clone() const; 00181 00182 virtual BlockDomain::DomainT appliesTo() const { 00183 return BlockDomain::bulk; 00184 } 00185 00186 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00187 modified[0] = modif::nothing; 00188 modified[1] = modif::staticVariables; 00189 } 00190 private: 00191 plint dimDx, dimDt; 00192 plint dxScale, dtScale; 00193 }; 00194 00195 00197 template<typename T, template<typename U> class Descriptor> 00198 class LatticeInterpolateCoarseToFine3D : public BoxProcessingFunctional3D_LL<T,Descriptor,T,Descriptor> 00199 { 00200 public: 00201 LatticeInterpolateCoarseToFine3D(plint dxScale_, plint dtScale_); 00202 00203 LatticeInterpolateCoarseToFine3D ( 00204 LatticeInterpolateCoarseToFine3D<T,Descriptor> const& rhs ); 00205 LatticeInterpolateCoarseToFine3D<T,Descriptor>& operator= ( 00206 LatticeInterpolateCoarseToFine3D<T,Descriptor> const& rhs ); 00207 00208 virtual void process( Box3D coarseDomain, 00209 BlockLattice3D<T,Descriptor>& coarseLattice, 00210 BlockLattice3D<T,Descriptor>& fineLattice ); 00211 00212 virtual LatticeInterpolateCoarseToFine3D<T,Descriptor>* clone() const; 00213 00214 virtual BlockDomain::DomainT appliesTo() const { 00215 return BlockDomain::bulk; 00216 } 00217 00218 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00219 modified[0] = modif::nothing; 00220 modified[1] = modif::staticVariables; 00221 } 00222 private: 00223 plint dxScale, dtScale; 00224 }; 00225 00226 00227 template <typename T> 00228 std::auto_ptr<MultiScalarField3D<T> > coarsen ( 00229 MultiScalarField3D<T>& fineField, 00230 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00231 00232 template <typename T> 00233 std::auto_ptr<MultiScalarField3D<T> > refine ( 00234 MultiScalarField3D<T>& coarseField, 00235 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00236 00237 00238 template <typename T, int nDim> 00239 std::auto_ptr<MultiTensorField3D<T,nDim> > coarsen ( 00240 MultiTensorField3D<T,nDim>& fineField, 00241 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00242 00243 template <typename T, int nDim> 00244 std::auto_ptr<MultiTensorField3D<T,nDim> > refine ( 00245 MultiTensorField3D<T,nDim>& coarseField, 00246 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00247 00248 00249 template<typename T, template<typename U> class Descriptor> 00250 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > coarsen ( 00251 MultiBlockLattice3D<T,Descriptor>& fineLattice, 00252 plint dxScale, plint dtScale, Dynamics<T,Descriptor>* backgroundDynamics ); 00253 00254 template<typename T, template<typename U> class Descriptor> 00255 std::auto_ptr<MultiBlockLattice3D<T,Descriptor> > refine ( 00256 MultiBlockLattice3D<T,Descriptor>& coarseLattice, 00257 plint dxScale, plint dtScale, Dynamics<T,Descriptor>* backgroundDynamics ); 00258 00259 00260 template<typename T, template<typename U> class Descriptor> 00261 std::auto_ptr<MultiParticleField3D<DenseParticleField3D<T,Descriptor> > > refine ( 00262 MultiParticleField3D<DenseParticleField3D<T,Descriptor> >& coarseField, 00263 plint dxScale, plint dtScale ); 00264 00265 template<typename T, template<typename U> class Descriptor> 00266 std::auto_ptr<MultiParticleField3D<DenseParticleField3D<T,Descriptor> > > coarsen ( 00267 MultiParticleField3D<DenseParticleField3D<T,Descriptor> >& fineField, 00268 plint dxScale, plint dtScale ); 00269 00270 } // namespace plb 00271 00272 #endif // GRID_CONVERSION_3D_H
1.6.3
1.6.3