$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 /* 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
1.6.3
1.6.3