OpenFOAM-twoPhaseEulerFoam修改

準(zhǔn)備工作

  1. 拷貝求解器源文件:cp -r $FOAM_APP/solvers/multiphase/twoPhaseEulerFoam $WM_PROJECT_USER_DIR/twoPhaseEulerFoam-1

  2. 拷貝算例:cp -r $FOAM_TUTORIALS/multiphase/twoPhaseEulerFoam/laminar/fluidisedBed $FOAM_RUN/fluidisedBed

  3. 生成算例網(wǎng)格:blockMesh -case $FOAM_RUN/fluidisedBed

  4. 修改求解器make文件$WM_PROJECT_USER_DIR/twoPhaseEulerFoam/Make/file:

EXE = ($FOAM_RUN)/twoPhaseEulerFoam
  1. 運(yùn)行$WM_PROJECT_USER_DIR/twoPhaseEulerFoam/Allwmake,編譯求解器碉输。

新建曳力模型

  1. 進(jìn)入目錄cd $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/interfacialModels/dragModels籽前,復(fù)制其中一個(gè)曳力模型文件夾并命名為EMMScp -r WenYu/ EMMS。然后進(jìn)入到EMMS文件夾下敷钾,把文件名和文件內(nèi)部涉及到模型名稱(chēng)的地方全部替換成EMMS枝哄。

  2. 打開(kāi)vim $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/interfacialModels/Make/files,向其中添加一行dragModels/EMMS/EMMS.C阻荒,并將生成目標(biāo)進(jìn)行修改:

//- 修改前
LIB = $(FOAM_LIBBIN)/libcompressibleEulerianInterfacialModels
//- 修改后
LIB = $(FOAM_USER_LIBBIN)/libcompressibleEulerianInterfacialModels_hemm
  1. 在目錄$WM_PROJECT_USER_DIR/twoPhaseEulerFoam/interfacialModels下運(yùn)行編譯生成鏈接庫(kù)挠锥,運(yùn)行wmake。生成的鏈接庫(kù)可以在目錄$FOAM_USER_LIBBIN下:
[mmhe@K226 interfacialModels]$ ll $FOAM_USER_LIBBIN
總用量 1.9M
drwxr-xr-x 2 mmhe ipe   61 10月  9 2019 .
drwxr-xr-x 3 mmhe ipe   24 9月  27 15:30 ..
-rwxr-xr-x 1 mmhe ipe 1.9M 10月  9 2019 libcompressibleEulerianInterfacialModels_hemm.so
  1. 修改vim $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/Make/options侨赡,在其中將默認(rèn)的鏈接庫(kù)位置換成剛才生成的鏈接庫(kù):
//- 修改前
-lcompressibleEulerianInterfacialModels
//- 修改后
-L$(FOAM_USER_LIBBIN) \
-lcompressibleEulerianInterfacialModels_hemm
  1. 運(yùn)行$WM_PROJECT_USER_DIR/twoPhaseEulerFoam/Allwmake蓖租,編譯求解器粱侣。修改了求解器的Make/options文件后,必須要重新編譯蓖宦,否則無(wú)法更新求解器齐婴。

曳力模型算例測(cè)試

  1. 修改vim $FOAM_RUN/fluidisedBed/constant/phaseProperties,將曳力模型設(shè)置成EMMS:
drag
(
    (particles in air)
    {
        type            EMMS;
        residualAlpha   1e-6;
        residualRe      1e-3;
        swarmCorrection
        {
            type        none;
        }
    }
);
  1. 修改計(jì)算時(shí)間vim $FOAM_RUN/fluidisedBed/system/controlDict球昨,使算例向前運(yùn)行一步即可:
startTime       0;
stopAt          endTime;
endTime         2e-4;
deltaT          2e-4;
  1. 運(yùn)行算例:$FOAM_RUN/twoPhaseEulerFoam -case $FOAM_RUN/fluidisedBed尔店,正常運(yùn)行:
Calculating face flux field phi.air
Selecting diameterModel for phase air: constant
Selecting turbulence model type laminar
Selecting default blending method: none
Selecting dragModel for (particles in air): EMMS
Selecting swarmCorrection for (particles in air): none
Selecting virtualMassModel for (particles in air): constantCoefficient
Selecting heatTransferModel for (particles in air): RanzMarshall
Calculating field DDtU1 and DDtU2

新建固相應(yīng)力模型

  1. 拷貝一個(gè)固相應(yīng)力模型:cp -r $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/phaseCompressibleTurbulenceModels/phasePressureModel $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/phaseCompressibleTurbulenceModels/EMMSStressModel

  2. 將所有模型關(guān)鍵字phasePressure替換為EMMSStress主慰。

  3. 修改vim $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/phaseCompressibleTurbulenceModels/phaseCompressibleTurbulenceModels.C嚣州,在最后加上EMMSStressModel模型的相關(guān)信息:

#include "EMMSStressModel.H"
#include "EMMSStressModel.H"
makeTurbulenceModel
(phaseModelPhaseCompressibleTurbulenceModel, RAS, EMMSStressModel);
  1. $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/phaseCompressibleTurbulenceModels/Make/files文件中添加一行EMMSStressModel/EMMSStressModel.C,并將目標(biāo)鏈接庫(kù)生成配置改為:
//- 修改前
LIB = $(FOAM_LIBBIN)/libphaseCompressibleTurbulenceModels
//- 修改后
LIB = $(FOAM_USER_LIBBIN)/libphaseCompressibleTurbulenceModels_hemm
  1. 在目錄$WM_PROJECT_USER_DIR/twoPhaseEulerFoam/phaseCompressibleTurbulenceModels下運(yùn)行wmake編譯鏈接庫(kù)共螺。

  2. 修改vim $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/Make/options该肴,在其中將默認(rèn)的鏈接庫(kù)位置換成剛才生成的鏈接庫(kù):

-lphaseCompressibleTurbulenceModels_hemm
  1. 運(yùn)行$WM_PROJECT_USER_DIR/twoPhaseEulerFoam/Allwmake,編譯求解器藐不,成功匀哄!

應(yīng)力模型算例測(cè)試

  1. 修改算例配置文件vim $FOAM_RUN/fluidisedBed/constant/turbulenceProperties.particles,將RAS模型設(shè)置成EMMSStress雏蛮,然后將phasePressure模型的輸入?yún)?shù)拷貝成EMMSStress模型的輸入?yún)?shù):
RAS
{
    RASModel EMMSStress;
    EMMSStressCoeffs
    {
        preAlphaExp     500;
        expMax          1000;
        alphaMax        0.62;
        g0              1000;
    }
}
  1. 運(yùn)行算例:$FOAM_RUN/twoPhaseEulerFoam -case $FOAM_RUN/fluidisedBed涎嚼,正常運(yùn)行:
Calculating face flux field phi.particles
Selecting diameterModel for phase particles: constant
Selecting turbulence model type RAS
Selecting RAS turbulence model EMMSStress
EMMSStressCoeffs
{
    preAlphaExp     500;
    expMax          1000;
    alphaMax        0.62;
    g0              1000;
}
Calculating face flux field phi.air
Selecting diameterModel for phase air: constant
Selecting turbulence model type laminar
Selecting default blending method: none
Selecting dragModel for (particles in air): EMMS
Selecting swarmCorrection for (particles in air): none
Selecting virtualMassModel for (particles in air): constantCoefficient
Selecting heatTransferModel for (particles in air): RanzMarshall
Calculating field DDtU1 and DDtU2

修改曳力模型

  1. 打開(kāi)文件vim $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/interfacialModels/dragModels/EMMS/EMMS.C,只需要修改其中的函數(shù)Foam::tmp<Foam::volScalarField> Foam::dragModels::EMMS::CdRe() const即可挑秉。
    CdRe()函數(shù)返回有效曳力系數(shù)與雷諾數(shù)的乘積C_d\times Re法梯,其中的變量CdsRe表示標(biāo)準(zhǔn)曳力系數(shù)與雷諾數(shù)的乘積C_{d0}\times Re
Foam::tmp<Foam::volScalarField> Foam::dragModels::EMMS::CdRe() const
{
    Info <<"EMMS曳力模型的CdRe函數(shù)O拧A⒀啤!"<<endl;
    volScalarField alpha2(max(scalar(1) - pair_.dispersed(), residualAlpha_));
    volScalarField Re(pair_.Re());
    volScalarField CdsRe
    (
        neg(Re - 1000)*24.0*(1.0 + 0.15*pow(Re, 0.687))
      + pos(Re - 1000)*0.44*max(Re, residualRe_)
    );
    //- 獲取EMMS模型輸入?yún)?shù)
    const phaseModel& dispersed = pair_.dispersed();//離散相
    const phaseModel& continuous = pair_.continuous();//連續(xù)相
    const volVectorField Up = dispersed.U();//顆粒速度
    const volVectorField Ug = continuous.U();//流體速度
    const volScalarField Ur = Up.component(vector::Z)-Ug.component(vector::Z);//相對(duì)速度
    const volScalarField epsl_g = pair_.continuous();//平均空隙率

    //- 非均勻結(jié)構(gòu)因子
    volScalarField Hd = Ur*epsl_g;//擬合關(guān)聯(lián)式
    Hd.dimensions().reset(dimensionSet(0,0,0,0,0));//設(shè)置單位為無(wú)量綱數(shù)
    

    return
        Hd
       *CdsRe
       *pow(alpha2, -2.65)
       *max(pair_.continuous(), residualAlpha_);
}
  1. 在目錄$WM_PROJECT_USER_DIR/twoPhaseEulerFoam/interfacialModels下運(yùn)行編譯生成鏈接庫(kù)姻灶,運(yùn)行wmake铛绰。

  2. 運(yùn)行算例,從輸出信息中可以確定已經(jīng)能夠執(zhí)行該函數(shù)产喉,但是因?yàn)椴皇諗慷崆敖K止捂掰。


修改應(yīng)力模型

devRhoReff()函數(shù):
\begin{equation} -\mathbf{\tau}=-\mu(\nabla\mathbf{U}+\nabla\mathbf{U}^T)-(\rho\lambda-\frac23\mu)(\nabla\cdot\mathbf{U})\mathbf{I} \end{equation}
divDevRhoReff()函數(shù):
\begin{equation} -\nabla\cdot\mathbf{\tau}=-\nabla\cdot(\mu\nabla\mathbf{U})-\nabla\cdot(\mu\nabla\mathbf{U}^T)-\nabla(\rho\lambda-\frac23\mu)(\nabla\cdot\mathbf{U}) \end{equation}
在phasePressure模型中,是不考慮固相應(yīng)力的曾沈,因此這兩個(gè)函數(shù)返回的都是0值尘颓。


第一步要改的是四個(gè)函數(shù)。首先是pPrime函數(shù):

  1. 修改vim $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/phaseCompressibleTurbulenceModels/EMMSStressModel/EMMSStressModel.H
//- 刪除私有變量-Kenetic Theory Model coefficients
/*
        // Kinetic Theory Model coefficients

            //- Maximum packing phase-fraction
            scalar alphaMax_;

            //- Pre-exponential factor
            scalar preAlphaExp_;

            //- Maximum limit of the exponential
            scalar expMax_;

            //- g0
            dimensionedScalar g0_;
*/
  1. 修改vim $WM_PROJECT_USER_DIR/twoPhaseEulerFoam/phaseCompressibleTurbulenceModels/EMMSStressModel/EMMSStressModel.C
//- 構(gòu)造函數(shù)-刪除沒(méi)有定義的變量初始化
//- read()函數(shù)-刪除文件數(shù)據(jù)讀取
//- pPrime()和pPrimef()函數(shù)-替換掉返回表達(dá)式為擬合關(guān)聯(lián)式
//- devRhoReff()函數(shù)-復(fù)制kineticTheoryModels中對(duì)應(yīng)的部分到此處
//- divDevRhoReff()函數(shù)-復(fù)制kineticTheoryModels中對(duì)應(yīng)的部分到此處
  1. 編譯鏈接庫(kù)晦譬,成功!運(yùn)行算例互广,報(bào)錯(cuò)敛腌!
PIMPLE: iteration 1
new cannot satisfy memory request.
This does not necessarily mean you have run out of virtual memory.
It could be due to a stack violation caused by e.g. bad use of pointers or an out of date shared library
  1. 經(jīng)過(guò)檢查卧土,是我定義Ur的時(shí)候觸動(dòng)的錯(cuò)誤。問(wèn)題解決像樊,應(yīng)該是我使用了返回的引用尤莺,因此導(dǎo)致了運(yùn)行時(shí)發(fā)生段錯(cuò)誤。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末生棍,一起剝皮案震驚了整個(gè)濱河市颤霎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涂滴,老刑警劉巖友酱,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異柔纵,居然都是意外死亡缔杉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)搁料,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)或详,“玉大人,你說(shuō)我怎么就攤上這事郭计“郧伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵昭伸,是天一觀的道長(zhǎng)梧乘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)勋乾,這世上最難降的妖魔是什么宋下? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮辑莫,結(jié)果婚禮上学歧,老公的妹妹穿的比我還像新娘。我一直安慰自己各吨,他們只是感情好枝笨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著揭蜒,像睡著了一般横浑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屉更,一...
    開(kāi)封第一講書(shū)人閱讀 51,370評(píng)論 1 302
  • 那天徙融,我揣著相機(jī)與錄音,去河邊找鬼瑰谜。 笑死欺冀,一個(gè)胖子當(dāng)著我的面吹牛树绩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隐轩,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饺饭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了职车?” 一聲冷哼從身側(cè)響起瘫俊,我...
    開(kāi)封第一講書(shū)人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悴灵,沒(méi)想到半個(gè)月后扛芽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡称勋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年胸哥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赡鲜。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡空厌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出银酬,到底是詐尸還是另有隱情嘲更,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布揩瞪,位于F島的核電站赋朦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏李破。R本人自食惡果不足惜宠哄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗤攻。 院中可真熱鬧毛嫉,春花似錦、人聲如沸妇菱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闯团。三九已至辛臊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間房交,已是汗流浹背彻舰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留候味,地道東北人刃唤。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓口猜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親透揣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354