$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 /* Orestis Malaspinas contributed this code. 00026 */ 00027 00034 #ifndef MRT_LATTICES_HH 00035 #define MRT_LATTICES_HH 00036 00037 namespace plb { 00038 namespace descriptors { 00039 00040 // MRT D2Q9 //////////////////////////////////////////////////////////// 00041 00042 template<typename T> 00043 const T MRTD2Q9DescriptorBase<T>::M[BaseDescriptor::q][BaseDescriptor::q] = 00044 { 00045 { (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1 }, 00046 {-(T)4, (T)2, -(T)1, (T)2, -(T)1, (T)2, -(T)1, (T)2, -(T)1 }, 00047 { (T)4, (T)1, -(T)2, (T)1, -(T)2, (T)1, -(T)2, (T)1, -(T)2 }, 00048 { T(), -(T)1, -(T)1, -(T)1, T(), (T)1, (T)1, (T)1, T() }, 00049 { T(), -(T)1, (T)2, -(T)1, T(), (T)1, -(T)2, (T)1, T() }, 00050 { T(), (T)1, T(), -(T)1, -(T)1, -(T)1, T(), (T)1, (T)1 }, 00051 { T(), (T)1, T(), -(T)1, (T)2, -(T)1, T(), (T)1, -(T)2 }, 00052 { T(), T(), (T)1, T(), -(T)1, T(), (T)1, T(), -(T)1 }, 00053 { T(), -(T)1, T(), (T)1, T(), -(T)1, T(), (T)1, T() } 00054 }; 00055 00056 template<typename T> 00057 const T MRTD2Q9DescriptorBase<T>::invM[BaseDescriptor::q][BaseDescriptor::q] = 00058 { 00059 {(T)1/(T)9, -(T)1/(T)9, (T)1/(T)9, T(), T(), T(), T(), T(), T()}, 00060 {(T)1/(T)9, (T)1/(T)18, (T)1/(T)36, -(T)1/(T)6, -(T)1/(T)12, (T)1/(T)6, (T)1/(T)12, T(), -(T)1/(T)4}, 00061 {(T)1/(T)9, -(T)1/(T)36, -(T)1/(T)18, -(T)1/(T)6, (T)1/(T)6, T(), T(), (T)1/(T)4, T()}, 00062 {(T)1/(T)9, (T)1/(T)18, (T)1/(T)36, -(T)1/(T)6, -(T)1/(T)12, -(T)1/(T)6, -(T)1/(T)12, T(), (T)1/(T)4}, 00063 {(T)1/(T)9, -(T)1/(T)36, -(T)1/(T)18, T(), T(), -(T)1/(T)6, (T)1/(T)6, -(T)1/(T)4, T()}, 00064 {(T)1/(T)9, (T)1/(T)18, (T)1/(T)36, (T)1/(T)6, (T)1/(T)12, -(T)1/(T)6, -(T)1/(T)12, T(), -(T)1/(T)4}, 00065 {(T)1/(T)9, -(T)1/(T)36, -(T)1/(T)18, (T)1/(T)6, -(T)1/(T)6, T(), T(), (T)1/(T)4, T()}, 00066 {(T)1/(T)9, (T)1/(T)18, (T)1/(T)36, (T)1/(T)6, (T)1/(T)12, (T)1/(T)6, (T)1/(T)12, T(), (T)1/(T)4}, 00067 {(T)1/(T)9, -(T)1/(T)36, -(T)1/(T)18, T(), T(), (T)1/(T)6, -(T)1/(T)6, -(T)1/(T)4, T()} 00068 }; 00069 00070 template<typename T> 00071 const T MRTD2Q9DescriptorBase<T>::S[BaseDescriptor::q] = 00072 { T(), (T)1.63, (T)1.14, T(), (T)1.92, T(), (T)1.92, T(), T() }; 00073 // s7=s8 to have a shear viscosity nu 00074 // and the bulk viscosity depends on s1. 00075 // sq->s4 and s6 00076 // s_epsilon -> s2 00077 00078 template<typename T> 00079 const int MRTD2Q9DescriptorBase<T>::momentumIndexes[MRTD2Q9DescriptorBase<T>::jIndexes] = {3, 5}; 00080 00081 template<typename T> 00082 const int MRTD2Q9DescriptorBase<T>::shearViscIndexes[MRTD2Q9DescriptorBase<T>::shearIndexes] = {7, 8}; 00083 00084 template<typename T> 00085 const int MRTD2Q9DescriptorBase<T>::qViscIndexes[MRTD2Q9DescriptorBase<T>::qIndexes] = {4, 6}; 00086 00087 template<typename T> 00088 const char MRTD2Q9Descriptor<T>::name[] = "MRTD2Q9"; 00089 00090 // EXTERNAL FORCE MRT D2Q9 //////////////////////////////////////////////////////////// 00091 00092 template<typename T> 00093 const char ForcedMRTD2Q9Descriptor<T>::name[] = "ForcedMRTD2Q9"; 00094 00095 00096 // EXTERNAL VELOCITY MRT D2Q9 //////////////////////////////////////////////////////////// 00097 00098 template<typename T> 00099 const char ExternalVelocityMRTD2Q9Descriptor<T>::name[] = "ExternalVelocityMRTD2Q9"; 00100 00101 00102 // MRT D3Q19 //////////////////////////////////////////////////////////// 00103 00104 template<typename T> 00105 const T MRTD3Q19DescriptorBase<T>::M[BaseDescriptor::q][BaseDescriptor::q] = 00106 { 00107 /*0*/ {(T)1, 00108 (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, 00109 (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1}, 00110 /*1*/ {(T)-30, 00111 (T)-11, (T)-11, (T)-11, (T)8, (T)8, (T)8, (T)8, (T)8, (T)8, 00112 (T)-11, (T)-11, (T)-11, (T)8, (T)8, (T)8, (T)8, (T)8, (T)8}, 00113 /*2*/ {(T)12, 00114 (T)-4, (T)-4, (T)-4, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, 00115 (T)-4, (T)-4, (T)-4, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1}, 00116 /*3*/ {T(), 00117 (T)-1, T(), T(), (T)-1, (T)-1, (T)-1, (T)-1, T(), T(), 00118 (T)1, T(), T(), (T)1, (T)1, (T)1, (T)1, T(), T()}, 00119 /*4*/ {T(), 00120 (T)4, T(), T(), (T)-1, (T)-1, (T)-1, (T)-1, T(), T(), 00121 (T)-4, T(), T(), (T)1, (T)1, (T)1, (T)1, T(), T()}, 00122 /*5*/ {T(), 00123 T(), (T)-1, T(), (T)-1, (T)1, T(), T(), (T)-1, (T)-1, 00124 T(), (T)1, T(), (T)1, (T)-1, T(), T(), (T)1, (T)1}, 00125 /*6*/ {T(), 00126 T(), (T)4, T(), (T)-1, (T)1, T(), T(), (T)-1, (T)-1, 00127 T(), (T)-4, T(), (T)1, (T)-1, T(), T(), (T)1, (T)1}, 00128 /*7*/ {T(), 00129 T(), T(), (T)-1, T(), T(), (T)-1, (T)1, (T)-1, (T)1, 00130 T(), T(), (T)1, T(), T(), (T)1, (T)-1, (T)1, (T)-1}, 00131 /*8*/ {T(), 00132 T(), T(), (T)4, T(), T(), (T)-1, (T)1, (T)-1, (T)1, 00133 T(), T(), (T)-4, T(), T(), (T)1, (T)-1, (T)1, (T)-1}, 00134 /*9*/ {T(), 00135 (T)2, (T)-1, (T)-1, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2, 00136 (T)2, (T)-1, (T)-1, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2}, 00137 /*10*/ {T(), 00138 (T)-4, (T)2, (T)2, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2, 00139 (T)-4, (T)2, (T)2, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2}, 00140 /*11*/ {T(), 00141 T(), (T)1, (T)-1, (T)1, (T)1, (T)-1, (T)-1, T(), T(), 00142 T(), (T)1, (T)-1, (T)1, (T)1, (T)-1, (T)-1, T(), T()}, 00143 /*12*/ {T(), 00144 T(), (T)-2, (T)2, (T)1, (T)1, (T)-1, (T)-1, T(), T(), 00145 T(), (T)-2, (T)2, (T)1, (T)1, (T)-1, (T)-1, T(), T()}, 00146 /*13*/ {T(), 00147 T(), T(), T(), (T)1, (T)-1, T(), T(), T(), T(), 00148 T(), T(), T(), (T)1, (T)-1, T(), T(), T(), T()}, 00149 /*14*/ {T(), 00150 T(), T(), T(), T(), T(), T(), T(), (T)1, (T)-1, 00151 T(), T(), T(), T(), T(), T(), T(), (T)1, (T)-1}, 00152 /*15*/ {T(), 00153 T(), T(), T(), T(), T(), (T)1, (T)-1, T(), T(), 00154 T(), T(), T(), T(), T(), (T)1, (T)-1, T(), T()}, 00155 /*16*/ {T(), 00156 T(), T(), T(), (T)-1, (T)-1, (T)1, (T)1, T(), T(), 00157 T(), T(), T(), (T)1, (T)1, (T)-1, (T)-1, T(), T()}, 00158 /*17*/ {T(), 00159 T(), T(), T(), (T)1, (T)-1, T(), T(), (T)-1, (T)-1, 00160 T(), T(), T(), (T)-1, (T)1, T(), T(), (T)1, (T)1}, 00161 /*18*/ {T(), 00162 T(), T(), T(), T(), T(), (T)-1, (T)1, (T)1, (T)-1, 00163 T(), T(), T(), T(), T(), (T)1, (T)-1, (T)-1, (T)1} 00164 }; 00165 00166 template<typename T> 00167 const T MRTD3Q19DescriptorBase<T>::invM[BaseDescriptor::q][BaseDescriptor::q] = 00168 { 00169 /*0*/ {(T)1/(T)19, 00170 -(T)5/(T)399,(T)1/(T)21,T(),T(),T(),T(),T(),T(), 00171 T(),T(),T(),T(),T(),T(),T(),T(),T(),T()}, 00172 00173 /*1*/ {(T)1/(T)19, 00174 -(T)11/(T)2394,-(T)1/(T)63,-(T)1/(T)10,(T)1/(T)10,T(),T(),T(),T(),(T)1/(T)18, 00175 -(T)1/(T)18,T(),T(),T(),T(),T(),T(),T(),T()}, 00176 00177 /*2*/ {(T)1/(T)19, 00178 -(T)11/(T)2394,-(T)1/(T)63,T(),T(),-(T)1/(T)10,(T)1/(T)10,T(),T(),-(T)1/(T)36, 00179 (T)1/(T)36,(T)1/(T)12,-(T)1/(T)12,T(),T(),T(),T(),T(),T()}, 00180 00181 /*3*/ {(T)1/(T)19, 00182 -(T)11/(T)2394,-(T)1/(T)63,T(),T(),T(),T(),-(T)1/(T)10,(T)1/(T)10,-(T)1/(T)36, 00183 (T)1/(T)36,-(T)1/(T)12,(T)1/(T)12,T(),T(),T(),T(),T(),T()}, 00184 00185 /*4*/ {(T)1/(T)19, 00186 (T)4/(T)1197,(T)1/(T)252,-(T)1/(T)10,-(T)1/(T)40,-(T)1/(T)10,-(T)1/(T)40,T(),T(),(T)1/(T)36, 00187 (T)1/(T)72,(T)1/(T)12,(T)1/(T)24,(T)1/(T)4,T(),T(),-(T)1/(T)8,(T)1/(T)8,T()}, 00188 00189 /*5*/ {(T)1/(T)19, 00190 (T)4/(T)1197,(T)1/(T)252,-(T)1/(T)10,-(T)1/(T)40,(T)1/(T)10,(T)1/(T)40,T(),T(),(T)1/(T)36, 00191 (T)1/(T)72,(T)1/(T)12,(T)1/(T)24,-(T)1/(T)4,T(),T(),-(T)1/(T)8,-(T)1/(T)8,T()}, 00192 00193 /*6*/ {(T)1/(T)19, 00194 (T)4/(T)1197,(T)1/(T)252,-(T)1/(T)10,-(T)1/(T)40,T(),T(),-(T)1/(T)10,-(T)1/(T)40,(T)1/(T)36, 00195 (T)1/(T)72,-(T)1/(T)12,-(T)1/(T)24,T(),T(),(T)1/(T)4,(T)1/(T)8,T(),-(T)1/(T)8}, 00196 00197 /*7*/ {(T)1/(T)19, 00198 (T)4/(T)1197,(T)1/(T)252,-(T)1/(T)10,-(T)1/(T)40,T(),T(),(T)1/(T)10,(T)1/(T)40,(T)1/(T)36, 00199 (T)1/(T)72,-(T)1/(T)12,-(T)1/(T)24,T(),T(),-(T)1/(T)4,(T)1/(T)8,T(),(T)1/(T)8}, 00200 00201 /*8*/ {(T)1/(T)19, 00202 (T)4/(T)1197,(T)1/(T)252,T(),T(),-(T)1/(T)10,-(T)1/(T)40,-(T)1/(T)10,-(T)1/(T)40,-(T)1/(T)18, 00203 -(T)1/(T)36,T(),T(),T(),(T)1/(T)4,T(),T(),-(T)1/(T)8,(T)1/(T)8}, 00204 00205 /*9*/ {(T)1/(T)19, 00206 (T)4/(T)1197,(T)1/(T)252,T(),T(),-(T)1/(T)10,-(T)1/(T)40,(T)1/(T)10,(T)1/(T)40,-(T)1/(T)18, 00207 -(T)1/(T)36,T(),T(),T(),-(T)1/(T)4,T(),T(),-(T)1/(T)8,-(T)1/(T)8}, 00208 00209 /*10*/ {(T)1/(T)19, 00210 -(T)11/(T)2394,-(T)1/(T)63,(T)1/(T)10,-(T)1/(T)10,T(),T(),T(),T(),(T)1/(T)18, 00211 -(T)1/(T)18,T(),T(),T(),T(),T(),T(),T(),T()}, 00212 00213 /*11*/ {(T)1/(T)19, 00214 -(T)11/(T)2394,-(T)1/(T)63,T(),T(),(T)1/(T)10,-(T)1/(T)10,T(),T(),-(T)1/(T)36,(T)1/(T)36, 00215 (T)1/(T)12,-(T)1/(T)12,T(),T(),T(),T(),T(),T()}, 00216 00217 /*12*/ {(T)1/(T)19, 00218 -(T)11/(T)2394,-(T)1/(T)63,T(),T(),T(),T(),(T)1/(T)10,-(T)1/(T)10,-(T)1/(T)36, 00219 (T)1/(T)36,-(T)1/(T)12,(T)1/(T)12,T(),T(),T(),T(),T(),T()}, 00220 00221 /*13*/ {(T)1/(T)19, 00222 (T)4/(T)1197,(T)1/(T)252,(T)1/(T)10,(T)1/(T)40,(T)1/(T)10,(T)1/(T)40,T(),T(),(T)1/(T)36, 00223 (T)1/(T)72,(T)1/(T)12,(T)1/(T)24,(T)1/(T)4,T(),T(),(T)1/(T)8,-(T)1/(T)8,T()}, 00224 00225 /*14*/ {(T)1/(T)19, 00226 (T)4/(T)1197,(T)1/(T)252,(T)1/(T)10,(T)1/(T)40,-(T)1/(T)10,-(T)1/(T)40,T(),T(),(T)1/(T)36, 00227 (T)1/(T)72,(T)1/(T)12,(T)1/(T)24,-(T)1/(T)4,T(),T(),(T)1/(T)8,(T)1/(T)8,T()}, 00228 00229 /*15*/ {(T)1/(T)19, 00230 (T)4/(T)1197,(T)1/(T)252,(T)1/(T)10,(T)1/(T)40,T(),T(),(T)1/(T)10,(T)1/(T)40,(T)1/(T)36, 00231 (T)1/(T)72,-(T)1/(T)12,-(T)1/(T)24,T(),T(),(T)1/(T)4,-(T)1/(T)8,T(),(T)1/(T)8}, 00232 00233 /*16*/ {(T)1/(T)19, 00234 (T)4/(T)1197,(T)1/(T)252,(T)1/(T)10,(T)1/(T)40,T(),T(),-(T)1/(T)10,-(T)1/(T)40,(T)1/(T)36, 00235 (T)1/(T)72,-(T)1/(T)12,-(T)1/(T)24,T(),T(),-(T)1/(T)4,-(T)1/(T)8,T(),-(T)1/(T)8}, 00236 00237 /*17*/ {(T)1/(T)19, 00238 (T)4/(T)1197,(T)1/(T)252,T(),T(),(T)1/(T)10,(T)1/(T)40,(T)1/(T)10,(T)1/(T)40,-(T)1/(T)18, 00239 -(T)1/(T)36,T(),T(),T(),(T)1/(T)4,T(),T(),(T)1/(T)8,-(T)1/(T)8}, 00240 00241 /*18*/ {(T)1/(T)19, 00242 (T)4/(T)1197,(T)1/(T)252,T(),T(),(T)1/(T)10,(T)1/(T)40,-(T)1/(T)10,-(T)1/(T)40,-(T)1/(T)18, 00243 -(T)1/(T)36,T(),T(),T(),-(T)1/(T)4,T(),T(),(T)1/(T)8,(T)1/(T)8} 00244 }; 00245 00246 template<typename T> 00247 const T MRTD3Q19DescriptorBase<T>::S[BaseDescriptor::q] = 00248 { 00249 /*s0*/ T(), // rho (conserved) 00250 /*s1*/ (T)1.19, 00251 /*s2*/ (T)1.4, 00252 /*s3*/ T(), // rho*ux (conserved) 00253 /*s4*/ (T)1.2, // <=> q index 00254 /*s5*/ T(), // rho*uy (conserved) 00255 /*s6*/ (T)1.2, // = s4 <=> q index 00256 /*s7*/ T(), // rho*uz (conserved) 00257 /*s8*/ (T)1.2, // = s4 <=> q index 00258 /*s9*/ T(), //should be equal to s13, used to define nu 00259 /*s10*/ (T)1.4, 00260 /*s11*/ T(), // = s9, 00261 /*s12*/ (T)1.4, 00262 /*s13*/ T(), //should be equal to s9, used to define nu 00263 /*s14*/ T(), // = s13, 00264 /*s15*/ T(), // = s13, 00265 /*s16*/ (T)1.98, 00266 /*s17*/ (T)1.98, // = s16, 00267 /*s18*/ (T)1.98 // = s16, 00268 }; 00269 00270 template<typename T> 00271 const int MRTD3Q19DescriptorBase<T>::momentumIndexes[MRTD3Q19DescriptorBase<T>::jIndexes] = 00272 {3, 5, 7}; 00273 00274 template<typename T> 00275 const int MRTD3Q19DescriptorBase<T>::shearViscIndexes[MRTD3Q19DescriptorBase<T>::shearIndexes] = 00276 {9, 11, 13, 14, 15}; 00277 00278 template<typename T> 00279 const int MRTD3Q19DescriptorBase<T>::qViscIndexes[MRTD3Q19DescriptorBase<T>::qIndexes] = {4, 6, 8}; 00280 00281 template<typename T> 00282 const char MRTD3Q19Descriptor<T>::name[] = "MRTD3Q19"; 00283 00284 // EXTERNAL FORCE MRT D3Q19 //////////////////////////////////////////////////////////// 00285 00286 template<typename T> 00287 const char ForcedMRTD3Q19Descriptor<T>::name[] = "ForcedMRTD3Q19"; 00288 00289 // EXTERNAL VELOCITY MRT D3Q19 //////////////////////////////////////////////////////////// 00290 00291 template<typename T> 00292 const char ExternalVelocityMRTD3Q19Descriptor<T>::name[] = "ExternalVelocityMRTD3Q19"; 00293 00294 } // namespace descriptors 00295 00296 } // namespace plb 00297 00298 #endif
1.6.3
1.6.3