$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_2D_H 00026 #define GRID_CONVERSION_2D_H 00027 00028 #include "core/globalDefs.h" 00029 #include "atomicBlock/dataProcessingFunctional2D.h" 00030 #include "atomicBlock/dataProcessorWrapper2D.h" 00031 #include "multiBlock/multiDataProcessorWrapper2D.h" 00032 #include "core/util.h" 00033 #include "core/dynamics.h" 00034 00035 namespace plb { 00036 00037 Box2D scaleBox(Box2D box, plint nLevel); 00038 00040 template<typename T> 00041 class ScalarCopyFineToCoarseZerothOrder2D : public BoxProcessingFunctional2D_SS<T,T> 00042 { 00043 public: 00044 ScalarCopyFineToCoarseZerothOrder2D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00045 ScalarCopyFineToCoarseZerothOrder2D(ScalarCopyFineToCoarseZerothOrder2D<T> const& rhs); 00046 ScalarCopyFineToCoarseZerothOrder2D<T>& operator= ( 00047 ScalarCopyFineToCoarseZerothOrder2D<T> const& rhs ); 00048 virtual void process( Box2D fineDomain, 00049 ScalarField2D<T>& fineField, ScalarField2D<T>& coarseField ); 00050 virtual ScalarCopyFineToCoarseZerothOrder2D<T>* clone() const; 00051 virtual BlockDomain::DomainT appliesTo() const { 00052 return BlockDomain::bulk; 00053 } 00054 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00055 modified[0] = modif::nothing; 00056 modified[1] = modif::staticVariables; 00057 } 00058 private: 00059 plint dimDx, dimDt; 00060 plint dxScale, dtScale; 00061 }; 00062 00064 template<typename T, int nDim> 00065 class TensorCopyFineToCoarseZerothOrder2D : public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 00066 { 00067 public: 00068 TensorCopyFineToCoarseZerothOrder2D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00069 TensorCopyFineToCoarseZerothOrder2D(TensorCopyFineToCoarseZerothOrder2D<T,nDim> const& rhs); 00070 TensorCopyFineToCoarseZerothOrder2D<T,nDim>& operator= ( 00071 TensorCopyFineToCoarseZerothOrder2D<T,nDim> const& rhs ); 00072 virtual void process( Box2D fineDomain, 00073 TensorField2D<T,nDim>& fineField, TensorField2D<T,nDim>& coarseField ); 00074 virtual TensorCopyFineToCoarseZerothOrder2D<T,nDim>* clone() const; 00075 virtual BlockDomain::DomainT appliesTo() const { 00076 return BlockDomain::bulk; 00077 } 00078 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00079 modified[0] = modif::nothing; 00080 modified[1] = modif::staticVariables; 00081 } 00082 private: 00083 plint dimDx, dimDt; 00084 plint dxScale, dtScale; 00085 }; 00086 00088 template<typename T, template<typename U> class Descriptor> 00089 class LatticeCopyFineToCoarseZerothOrder2D : public BoxProcessingFunctional2D_LL<T,Descriptor,T,Descriptor> 00090 { 00091 public: 00092 LatticeCopyFineToCoarseZerothOrder2D(plint dxScale_, plint dtScale_); 00093 LatticeCopyFineToCoarseZerothOrder2D(LatticeCopyFineToCoarseZerothOrder2D<T,Descriptor> const& rhs); 00094 LatticeCopyFineToCoarseZerothOrder2D<T,Descriptor>& operator= ( 00095 LatticeCopyFineToCoarseZerothOrder2D<T,Descriptor> const& rhs ); 00096 virtual void process( Box2D fineDomain, 00097 BlockLattice2D<T,Descriptor>& fineLattice, 00098 BlockLattice2D<T,Descriptor>& coarseLattice ); 00099 virtual LatticeCopyFineToCoarseZerothOrder2D<T,Descriptor>* clone() const; 00100 virtual BlockDomain::DomainT appliesTo() const { 00101 return BlockDomain::bulk; 00102 } 00103 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00104 modified[0] = modif::nothing; 00105 modified[1] = modif::staticVariables; 00106 } 00107 private: 00108 plint dxScale, dtScale; 00109 }; 00110 00112 template<typename T> 00113 class ScalarInterpolateCoarseToFine2D : public BoxProcessingFunctional2D_SS<T,T> 00114 { 00115 public: 00116 ScalarInterpolateCoarseToFine2D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00117 00118 ScalarInterpolateCoarseToFine2D( 00119 ScalarInterpolateCoarseToFine2D<T> const& rhs); 00120 ScalarInterpolateCoarseToFine2D<T>& operator= ( 00121 ScalarInterpolateCoarseToFine2D<T> const& rhs ); 00122 00123 virtual void process( Box2D coarseDomain, 00124 ScalarField2D<T>& coarseField, 00125 ScalarField2D<T>& fineField ); 00126 00127 virtual ScalarInterpolateCoarseToFine2D<T>* clone() const; 00128 00129 virtual BlockDomain::DomainT appliesTo() const { 00130 return BlockDomain::bulk; 00131 } 00132 00133 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00134 modified[0] = modif::nothing; 00135 modified[1] = modif::staticVariables; 00136 } 00137 private: 00138 plint dimDx, dimDt; 00139 plint dxScale, dtScale; 00140 }; 00141 00143 template<typename T, int nDim> 00144 class TensorInterpolateCoarseToFine2D : public BoxProcessingFunctional2D_TT<T,nDim,T,nDim> 00145 { 00146 public: 00147 TensorInterpolateCoarseToFine2D(plint dimDx_, plint dimDt_, plint dxScale_, plint dtScale_); 00148 00149 TensorInterpolateCoarseToFine2D( 00150 TensorInterpolateCoarseToFine2D<T,nDim> const& rhs); 00151 TensorInterpolateCoarseToFine2D<T,nDim>& operator= ( 00152 TensorInterpolateCoarseToFine2D<T,nDim> const& rhs ); 00153 00154 virtual void process( Box2D coarseDomain, 00155 TensorField2D<T,nDim>& coarseField, 00156 TensorField2D<T,nDim>& fineField ); 00157 00158 virtual TensorInterpolateCoarseToFine2D<T,nDim>* clone() const; 00159 00160 virtual BlockDomain::DomainT appliesTo() const { 00161 return BlockDomain::bulk; 00162 } 00163 00164 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00165 modified[0] = modif::nothing; 00166 modified[1] = modif::staticVariables; 00167 } 00168 private: 00169 plint dimDx, dimDt; 00170 plint dxScale, dtScale; 00171 }; 00172 00173 00175 template<typename T, template<typename U> class Descriptor> 00176 class LatticeInterpolateCoarseToFine2D : public BoxProcessingFunctional2D_LL<T,Descriptor,T,Descriptor> 00177 { 00178 public: 00179 LatticeInterpolateCoarseToFine2D(plint dxScale_, plint dtScale_); 00180 00181 LatticeInterpolateCoarseToFine2D ( 00182 LatticeInterpolateCoarseToFine2D<T,Descriptor> const& rhs ); 00183 LatticeInterpolateCoarseToFine2D<T,Descriptor>& operator= ( 00184 LatticeInterpolateCoarseToFine2D<T,Descriptor> const& rhs ); 00185 00186 virtual void process( Box2D coarseDomain, 00187 BlockLattice2D<T,Descriptor>& coarseLattice, 00188 BlockLattice2D<T,Descriptor>& fineLattice ); 00189 00190 virtual LatticeInterpolateCoarseToFine2D<T,Descriptor>* clone() const; 00191 00192 virtual BlockDomain::DomainT appliesTo() const { 00193 return BlockDomain::bulk; 00194 } 00195 00196 virtual void getTypeOfModification(std::vector<modif::ModifT>& modified) const { 00197 modified[0] = modif::nothing; 00198 modified[1] = modif::staticVariables; 00199 } 00200 private: 00201 plint dxScale, dtScale; 00202 }; 00203 00204 00205 template <typename T> 00206 std::auto_ptr<MultiScalarField2D<T> > coarsen ( 00207 MultiScalarField2D<T>& fineField, 00208 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00209 00210 template <typename T> 00211 std::auto_ptr<MultiScalarField2D<T> > refine ( 00212 MultiScalarField2D<T>& coarseField, 00213 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00214 00215 template <typename T, int nDim> 00216 std::auto_ptr<MultiTensorField2D<T,nDim> > coarsen ( 00217 MultiTensorField2D<T,nDim>& fineField, 00218 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00219 00220 template <typename T, int nDim> 00221 std::auto_ptr<MultiTensorField2D<T,nDim> > refine ( 00222 MultiTensorField2D<T,nDim>& coarseField, 00223 plint dimDx, plint dimDt, plint dxScale, plint dtScale ); 00224 00225 template<typename T, template<typename U> class Descriptor> 00226 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > coarsen ( 00227 MultiBlockLattice2D<T,Descriptor>& fineLattice, 00228 plint dxScale, plint dtScale, Dynamics<T,Descriptor>* backgroundDynamics ); 00229 00230 template<typename T, template<typename U> class Descriptor> 00231 std::auto_ptr<MultiBlockLattice2D<T,Descriptor> > refine ( 00232 MultiBlockLattice2D<T,Descriptor>& coarseLattice, 00233 plint dxScale, plint dtScale, Dynamics<T,Descriptor>* backgroundDynamics ); 00234 00235 } // namespace plb 00236 00237 #endif // GRID_CONVERSION_2D_H
1.6.3
1.6.3