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

multiGridParameterManager.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: Daniel Lagrava
00026  **/
00027 
00028 #ifndef MULTI_GRID_PARAMETER_MANAGER_HH
00029 #define MULTI_GRID_PARAMETER_MANAGER_HH
00030 
00031 #include "multiGrid/multiGridParameterManager.h"
00032 
00033 namespace plb {
00034 
00036 template <typename T>
00037 RefinementParameters<T>::RefinementParameters( plint levelNumber_, plint referenceLevel_, 
00038                                                IncomprFlowParam<T> parameters_ )
00039     :levelNumber(levelNumber_),referenceLevel(referenceLevel_),originalParameters(parameters_)
00040 {}
00041 
00042 template <typename T>
00043 RefinementParameters<T>::RefinementParameters(RefinementParameters<T> const& rhs)
00044     :levelNumber(rhs.levelNumber),referenceLevel(rhs.referenceLevel),originalParameters(rhs.parameters_)
00045 {}
00046 
00047 template <typename T>
00048 IncomprFlowParam<T> const& RefinementParameters<T>::getParameters(plint lvl) const{
00049     PLB_PRECONDITION(lvl >= 0 && lvl < (plint)parameters.size());
00050     return parameters[lvl];
00051 }
00052 template <typename T>
00053 plint RefinementParameters<T>::getReferenceLevel(){
00054     return referenceLevel;
00055 }
00056 
00057 template <typename T>
00058 plint RefinementParameters<T>::getNumLevels(){
00059     return levelNumber;
00060 }
00061 
00062 template <typename T>
00063 IncomprFlowParam<T> const& RefinementParameters<T>::operator[](plint lvl) const{
00064     return getParameters(lvl);
00065 }
00066 
00067 template <typename T>
00068 void RefinementParameters<T>::putParameter(IncomprFlowParam<T> &newParam){
00069     parameters.push_back(newParam);
00070 }
00071 
00072 template <typename T>
00073 IncomprFlowParam<T>& RefinementParameters<T>::getOriginalParameters(){
00074     return originalParameters;
00075 }
00076 
00077 
00078 template <typename T>
00079 ConvectiveRefinementParameters<T>::ConvectiveRefinementParameters( plint levels, plint reference, 
00080                                                                    IncomprFlowParam<T> params )
00081         : RefinementParameters<T>(levels,reference,params)
00082 {
00083     createParameters();
00084 }
00085 
00086 template <typename T>
00087 void ConvectiveRefinementParameters<T>::createParameters(){
00088     IncomprFlowParam<T> referenceParameters = RefinementParameters<T>::getOriginalParameters();
00089     if (RefinementParameters<T>::getReferenceLevel() == 0){
00090         plint resolutionAtThisLevel = referenceParameters.getResolution();
00091         for (int iLvl = 0; iLvl < RefinementParameters<T>::getNumLevels(); ++iLvl){
00092             // everything is the same but the resolution
00093             IncomprFlowParam<T> thisLevelParameters(
00094                 referenceParameters.getLatticeU(),
00095                 referenceParameters.getRe(),
00096                 resolutionAtThisLevel,
00097                 referenceParameters.getLx(),
00098                 referenceParameters.getLy(),
00099                 referenceParameters.getLz()
00100             );
00101             putParameter(thisLevelParameters);
00102             resolutionAtThisLevel = 2*resolutionAtThisLevel;
00103         
00104         }
00105     }
00106     else {
00107     //TODO implement creation of parameters if the referenceLevel != 0
00108     PLB_ASSERT(false);
00109     }      
00110 }
00111 
00112 
00113 template <typename T>
00114 DiffusiveRefinementParameters<T>::DiffusiveRefinementParameters( plint levels, plint reference, 
00115                                                                  IncomprFlowParam<T> params ) 
00116         : RefinementParameters<T>(levels, reference)
00117 {
00118     createParameters();
00119 }  
00120 
00121 template <typename T>
00122 void DiffusiveRefinementParameters<T>::createParameters(){
00123     IncomprFlowParam<T> referenceParameters = RefinementParameters<T>::getOriginalParameters();
00124     if (RefinementParameters<T>::getReferenceLevel() == 0){
00125     plint resolutionAtThisLevel = referenceParameters.getResolution();
00126     plint uMaxRef = referenceParameters.getLatticeU();
00127     plint Nref = referenceParameters.getResolution();
00128     for (int iLvl = 0; iLvl < RefinementParameters<T>::getNumLevels(); ++iLvl){
00129         T uMax = uMaxRef*(T)resolutionAtThisLevel/(T)Nref;
00130         
00131         IncomprFlowParam<T> thisLevelParameters(
00132             uMax,
00133             referenceParameters.getRe(),
00134             resolutionAtThisLevel,
00135             referenceParameters.getLx(),
00136             referenceParameters.getLy(),
00137             referenceParameters.getLz()
00138         );
00139         
00140         putParameter(thisLevelParameters);
00141         resolutionAtThisLevel = 2*resolutionAtThisLevel;
00142     }
00143     }
00144     else {
00145     //TODO implement creation of parameters if the referenceLevel != 0 
00146     PLB_ASSERT(false);
00147     }      
00148 }
00149 
00150 } //namespace plb
00151 
00152 #endif  // MULTI_GRID_PARAMETER_MANAGER_H
00153