⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mrtlatticedescriptors.hh

📁 open lattice boltzmann project www.openlb.org
💻 HH
字号:
/*  This file is part of the OpenLB library * *  Copyright (C) 2006, 2007 Jonas Latt *  Address: Rue General Dufour 24,  1211 Geneva 4, Switzerland  *  E-mail: jonas.latt@gmail.com * *  This program is free software; you can redistribute it and/or *  modify it under the terms of the GNU General Public License *  as published by the Free Software Foundation; either version 2 *  of the License, or (at your option) any later version. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  You should have received a copy of the GNU General Public  *  License along with this program; if not, write to the Free  *  Software Foundation, Inc., 51 Franklin Street, Fifth Floor, *  Boston, MA  02110-1301, USA.*//** \file * Descriptor for all types of 2D and 3D lattices. In principle, thanks * to the fact that the OpenLB code is generic, it is sufficient to * write a new descriptor when a new type of lattice is to be used. *  -- generic code */#ifndef MRT_LATTICE_DESCRIPTORS_HH#define MRT_LATTICE_DESCRIPTORS_HHnamespace olb {namespace descriptors {    // MRT D2Q9 ////////////////////////////////////////////////////////////    template<typename T>    const T MRTD2Q9DescriptorBase<T>::M[MRTD2Q9DescriptorBase<T>::q_][MRTD2Q9DescriptorBase<T>::q_] =        {            {(T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1},            {-(T)4,(T)2,-(T)1, (T)2,-(T)1, (T)2,-(T)1, (T)2,-(T)1},            {(T)4, (T)1,-(T)2, (T)1,-(T)2, (T)1,-(T)2, (T)1,-(T)2},            {T(),-(T)1,-(T)1,-(T)1, T(), (T)1, (T)1, (T)1, T()},            {T(),-(T)1, (T)2,-(T)1, T(), (T)1,-(T)2, (T)1, T()},            {T(), (T)1, T(),-(T)1,-(T)1,-(T)1, T(), (T)1, (T)1},            {T(), (T)1, T(),-(T)1, (T)2,-(T)1, T(), (T)1,-(T)2},            {T(), T(), (T)1, T(),-(T)1, T(), (T)1, T(),-(T)1},            {T(),-(T)1, T(), (T)1, T(),-(T)1, T(), (T)1, T()}        };        template<typename T>    const T MRTD2Q9DescriptorBase<T>::invM[MRTD2Q9DescriptorBase<T>::q_][MRTD2Q9DescriptorBase<T>::q_] =        {            {(T)1/(T)9, -(T)1/(T)9, (T)1/(T)9, T(), T(), T(), T(), T(), T()},             {(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},             {(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()},              {(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},             {(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()},             {(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},             {(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()},             {(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},             {(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()}        };            template<typename T>    const T MRTD2Q9DescriptorBase<T>::S[MRTD2Q9DescriptorBase<T>::q_] =    { T(), (T)1.1, (T)1.1, T(), (T)1.1, T(), (T)1.1, T(), T() };    // s7=s8 to have a shear viscosity nu    // and the bulk viscosity depends on s2.             template<typename T>    const int MRTD2Q9DescriptorBase<T>::shearViscIndexes[MRTD2Q9DescriptorBase<T>::shearIndexes] = {7, 8};        // MRT D3Q19 ////////////////////////////////////////////////////////////    template<typename T>    const T MRTD3Q19DescriptorBase<T>::M[MRTD3Q19DescriptorBase<T>::q_][MRTD3Q19DescriptorBase<T>::q_] =        { /*0*/      {(T)1,              (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1,              (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1},/*1*/       {(T)-30,              (T)-11, (T)-11, (T)-11, (T)8, (T)8, (T)8, (T)8, (T)8, (T)8,              (T)-11, (T)-11, (T)-11, (T)8, (T)8, (T)8, (T)8, (T)8, (T)8},/*2*/       {(T)12,              (T)-4, (T)-4, (T)-4, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1,              (T)-4, (T)-4, (T)-4, (T)1, (T)1, (T)1, (T)1, (T)1, (T)1},/*3*/       {T(),              (T)-1, T(), T(), (T)-1, (T)-1, (T)-1, (T)-1, T(), T(),              (T)1, T(), T(), (T)1, (T)1, (T)1, (T)1, T(), T()},/*4*/       {T(),              (T)4, T(), T(), (T)-1, (T)-1, (T)-1, (T)-1, T(), T(),              (T)-4, T(), T(), (T)1, (T)1, (T)1, (T)1, T(), T()},/*5*/       {T(),              T(), (T)-1, T(), (T)-1, (T)1, T(), T(), (T)-1, (T)-1,              T(), (T)1, T(), (T)1, (T)-1, T(), T(), (T)1, (T)1},/*6*/       {T(),              T(), (T)4, T(), (T)-1, (T)1, T(), T(), (T)-1, (T)-1,              T(), (T)-4, T(), (T)1, (T)-1, T(), T(), (T)1, (T)1},/*7*/       {T(),              T(), T(), (T)-1, T(), T(), (T)-1, (T)1, (T)-1, (T)1,              T(), T(), (T)1, T(), T(), (T)1, (T)-1, (T)1, (T)-1},/*8*/       {T(),              T(), T(), (T)4, T(), T(), (T)-1, (T)1, (T)-1, (T)1,              T(), T(), (T)-4, T(), T(), (T)1, (T)-1, (T)1, (T)-1},/*9*/       {T(),              (T)2, (T)-1, (T)-1, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2,              (T)2, (T)-1, (T)-1, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2},/*10*/      {T(),              (T)-4, (T)2, (T)2, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2,              (T)-4, (T)2, (T)2, (T)1, (T)1, (T)1, (T)1, (T)-2, (T)-2},/*11*/      {T(),              T(), (T)1, (T)-1, (T)1, (T)1, (T)-1, (T)-1, T(), T(),              T(), (T)1, (T)-1, (T)1, (T)1, (T)-1, (T)-1, T(), T()},/*12*/      {T(),              T(), (T)-2, (T)2, (T)1, (T)1, (T)-1, (T)-1, T(), T(),              T(), (T)-2, (T)2, (T)1, (T)1, (T)-1, (T)-1, T(), T()},/*13*/      {T(),              T(), T(), T(), (T)1, (T)-1, T(), T(), T(), T(),              T(), T(), T(), (T)1, (T)-1, T(), T(), T(), T()},/*14*/      {T(),              T(), T(), T(), T(), T(), T(), T(), (T)1, (T)-1,              T(), T(), T(), T(), T(), T(), T(), (T)1, (T)-1},/*15*/      {T(),              T(), T(), T(), T(), T(), (T)1, (T)-1, T(), T(),              T(), T(), T(), T(), T(), (T)1, (T)-1, T(), T()},/*16*/      {T(),              T(), T(), T(), (T)-1, (T)-1, (T)1, (T)1, T(), T(),              T(), T(), T(), (T)1, (T)1, (T)-1, (T)-1, T(), T()},/*17*/      {T(),              T(), T(), T(), (T)1, (T)-1, T(), T(), (T)-1, (T)-1,              T(), T(), T(), (T)-1, (T)1, T(), T(), (T)1, (T)1},/*18*/      {T(),              T(), T(), T(), T(), T(), (T)-1, (T)1, (T)1, (T)-1,              T(), T(), T(), T(), T(), (T)1, (T)-1, (T)-1, (T)1}        };        template<typename T>    const T MRTD3Q19DescriptorBase<T>::invM[MRTD3Q19DescriptorBase<T>::q_][MRTD3Q19DescriptorBase<T>::q_] =        {/*0*/       {(T)1/(T)19,             -(T)5/(T)399,(T)1/(T)21,T(),T(),T(),T(),T(),T(),             T(),T(),T(),T(),T(),T(),T(),T(),T(),T()},             /*1*/       {(T)1/(T)19,             -(T)11/(T)2394,-(T)1/(T)63,-(T)1/(T)10,(T)1/(T)10,T(),T(),T(),T(),(T)1/(T)18,             -(T)1/(T)18,T(),T(),T(),T(),T(),T(),T(),T()},             /*2*/       {(T)1/(T)19,             -(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,(T)1/(T)12,-(T)1/(T)12,T(),T(),T(),T(),T(),T()},             /*3*/       {(T)1/(T)19,             -(T)11/(T)2394,-(T)1/(T)63,T(),T(),T(),T(),-(T)1/(T)10,(T)1/(T)10,-(T)1/(T)36,             (T)1/(T)36,-(T)1/(T)12,(T)1/(T)12,T(),T(),T(),T(),T(),T()},             /*4*/       {(T)1/(T)19,             (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,             (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()},             /*5*/       {(T)1/(T)19,             (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,             (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()},             /*6*/       {(T)1/(T)19,             (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,             (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},             /*7*/       {(T)1/(T)19,             (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,             (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},             /*8*/       {(T)1/(T)19,             (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,             -(T)1/(T)36,T(),T(),T(),(T)1/(T)4,T(),T(),-(T)1/(T)8,(T)1/(T)8},             /*9*/       {(T)1/(T)19,             (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,             -(T)1/(T)36,T(),T(),T(),-(T)1/(T)4,T(),T(),-(T)1/(T)8,-(T)1/(T)8},             /*10*/      {(T)1/(T)19,             -(T)11/(T)2394,-(T)1/(T)63,(T)1/(T)10,-(T)1/(T)10,T(),T(),T(),T(),(T)1/(T)18,             -(T)1/(T)18,T(),T(),T(),T(),T(),T(),T(),T()},             /*11*/      {(T)1/(T)19,             -(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,             (T)1/(T)12,-(T)1/(T)12,T(),T(),T(),T(),T(),T()},             /*12*/      {(T)1/(T)19,             -(T)11/(T)2394,-(T)1/(T)63,T(),T(),T(),T(),(T)1/(T)10,-(T)1/(T)10,-(T)1/(T)36,             (T)1/(T)36,-(T)1/(T)12,(T)1/(T)12,T(),T(),T(),T(),T(),T()},             /*13*/      {(T)1/(T)19,             (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,             (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()},             /*14*/      {(T)1/(T)19,             (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,             (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()},             /*15*/      {(T)1/(T)19,             (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,             (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},             /*16*/      {(T)1/(T)19,             (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,             (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},             /*17*/      {(T)1/(T)19,             (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,             -(T)1/(T)36,T(),T(),T(),(T)1/(T)4,T(),T(),(T)1/(T)8,-(T)1/(T)8},             /*18*/      {(T)1/(T)19,             (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,             -(T)1/(T)36,T(),T(),T(),-(T)1/(T)4,T(),T(),(T)1/(T)8,(T)1/(T)8}        };            template<typename T>    const T MRTD3Q19DescriptorBase<T>::S[MRTD3Q19DescriptorBase<T>::q_] =    {/*s0*/  T(), // rho (conserved)/*s1*/  (T)1.19, /*s2*/  (T)1.4, /*s3*/  T(), // rho*ux (conserved)/*s4*/  (T)1.2, /*s5*/  T(), // rho*uy (conserved)/*s6*/  (T)1.2, // = s4/*s7*/  T(), // rho*uz (conserved)/*s8*/  (T)1.2, // = s4/*s9*/  T(), //should be equal to s13, used to define nu/*s10*/ (T)1.4,/*s11*/ T(), // = s9,/*s12*/ (T)1.4, /*s13*/ T(), //should be equal to s9, used to define nu/*s14*/ T(), // = s13,/*s15*/ T(), // = s13,/*s16*/ (T)1.98,/*s17*/ (T)1.98, // = s16,/*s18*/ (T)1.98  // = s16,    };        template<typename T>    const int MRTD3Q19DescriptorBase<T>::shearViscIndexes[MRTD3Q19DescriptorBase<T>::shearIndexes] =         {9, 11, 13, 14, 15};}  // namespace descriptors}  // namespace olb#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -