| 2 | 1/1 | 返回列表 |
| 查看: 624 | 回復(fù): 1 | |||
_yixiao鐵蟲 (小有名氣)
|
[交流]
【求助】傳熱計(jì)算的OpenMP并行計(jì)算 已有1人參與
|
|
請(qǐng)大家?guī)蛶兔?br />
在溫度場(chǎng)的計(jì)算過程中,時(shí)間步長(zhǎng)上的迭代過程是相互關(guān)聯(lián),相互影響的。一次迭代需要使用上一次迭代的運(yùn)算結(jié)果,故迭代之間不宜實(shí)現(xiàn)并行化。而在一次迭代內(nèi)部,溫度場(chǎng)的計(jì)算僅需要前一次時(shí)刻的計(jì)算結(jié)果,各個(gè)計(jì)算過程之間沒有影響,可以進(jìn)行并行計(jì)算。但我進(jìn)行以下的并行計(jì)算后結(jié)果同串行相差很大,且計(jì)算時(shí)間反而增加,不知道問題出在哪里。 以下即是我的并行程序,用到的OpenMP指令是section指令: (其中,程序中的h_w_f,Water_Tem_in,Mould_dt,Mould_dy等為全局變量,AA、BB、C_mould,float Density_mould等為局部變量,q1,Q2,q3,Q4為調(diào)用函數(shù)。) for(k=0;k<100;k++) { for(i=0;i<=xx;i++) { for(j=0;j<=yy;j++) { thermal_1[j]=thermal_0[j]; } } #pragma omp parallel sections { #pragma omp section { for(i=0;i<=xx;i++) { for(j=0;j<=yA;j++) { if (i==xK && j==0)//K { thermal_0[j] = float(2*AA*thermal_1[i+1][j]+2*BB*thermal_1[j+1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_w_f*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dy*C_mould*Density_mould)); } else if (i==xJ && j==0)//J { thermal_0[j] = float(2*AA*thermal_1[i-1][j]+2*BB*thermal_1[j+1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_w_f*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dy*C_mould*Density_mould)); } //////////[side] else if ((i>=xK && i<=xJ) && j==0)//KJ { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j+1]) +thermal_1[j]*(1-2*AA-2*BB) +2*h_w_f*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dy*C_mould*Density_mould)); } else if (i==xJ && (j>=0 && j<=yA))//JP { thermal_0[j] = float(2*AA*(thermal_1[i-1][j])+BB*(thermal_1[j-1]+thermal_1[j+1]) +thermal_1[j]*(1-2*AA-2*BB)); } else if ((i>=xK && i<=xJ) && j==yA)//PL { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j-1]) +thermal_1[j]*(1-2*AA-2*BB)+2*Q4(i-xK)*Mould_dt/(Mould_dy*C_mould*Density_mould)); } else if (i==xK && (j>=0 && j<=yA))//LK { thermal_0[j] = float(2*AA*(thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB)); } else if ((i>=xK && i<=xJ) && (j<=yA) )// fix { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1.0-2*AA-2*BB)); } } } } pragma omp section { for(i=0;i<=xx;i++) { for(j=yB;j<=yy;j++) { if (i==xJ && j==yy)//E { thermal_0[j] = float(2*AA*thermal_1[i-1][j]+2*BB*thermal_1[j-1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_w_l*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dy*C_mould*Density_mould)); } else if (i==xK && j==yy)//D { thermal_0[j] = float(2*AA*thermal_1[i+1][j]+2*BB*thermal_1[j-1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_w_l*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dy*C_mould*Density_mould)); } ////side else if ((i>=xK && i<=xJ) && j==yB)//MN { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j+1]) +thermal_1[j]*(1-2*AA-2*BB)+2*Q2(i-xK)*Mould_dt/(Mould_dy*C_mould*Density_mould)); } else if (i==xJ && (j>=yB && j<=yy))//NE { thermal_0[j] = float(2*AA*(thermal_1[i-1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB)); } else if ((i>=xK && i<=xJ) && j==yy)//ED { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j-1])+thermal_1[j]*(1-2*AA-2*BB) +2*h_w_l*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dy*C_mould*Density_mould)); } else if (i==xK && (j>=yB && j<=yy))//DM { thermal_0[j] = float(2*AA*(thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB)); } else if((i>=xK && i<=xJ) && (j>=yB))// loose { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1.0-2*AA-2*BB)); } } } } #pragma omp section { for(i=0;i<=xK;i++) { for(j=yA;j<=yB;j++) { if (i==0 && j==yA)//A { thermal_0[j] = float(2*AA*thermal_1[i+1][j]+2*BB*thermal_1[j+1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_n_l*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if (i==0 && j==yB)//B { thermal_0[j] = float(2*AA*thermal_1[i+1][j]+2*BB*thermal_1[j-1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_n_l*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if (i==xK && j==yA)//L { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB) +Q4(i-xK)*Mould_dt/(Mould_dy*C_mould*Density_mould)+q1(j)*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if (i==xK && j==yB)//M { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB) +Q2(i-xK)*Mould_dt/(Mould_dy*C_mould*Density_mould)+q1(j)*Mould_dt/(Mould_dx*C_mould*Density_mould)); } ///side else if ((i>=0 && i<=xK) && j==yA)//AL { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB)); } else if (i==xK && (j>=yA && j<=yB))//LM { thermal_0[j] = float(2*AA*(thermal_1[i-1][j])+BB*(thermal_1[j-1]+thermal_1[j+1]) +thermal_1[j]*(1-2*AA-2*BB)+2*q1(j)*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if ((i>=0 && i<=xK) && j==yB)//MB { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j-1])+thermal_1[j]*(1-2*AA-2*BB)); } else if (i==0 && (j>=yA && j<=yB))//BA { thermal_0[j] = float(2*AA*(thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB) +2*h_n_l*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if (i<=xK && (j>=yA && j<=yB))// left { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1.0-2*AA-2*BB)); } } } } #pragma omp section { for(i=xJ;i<=xx;i++) { for(j=yA;j<=yB;j++) { if (i==xJ && j==yA)//P { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB) +Q4(i-xK)*Mould_dt/(Mould_dy*C_mould*Density_mould)+q3(j)*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if (i==xx && j==yA)//H { thermal_0[j] = float(2*AA*thermal_1[i-1][j]+2*BB*thermal_1[j+1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_n_r*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if (i==xJ && j==yB)//N { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB) +Q2(i-xK)*Mould_dt/(Mould_dy*C_mould*Density_mould)+q3(j)*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if (i==xx && j==yB)//G { thermal_0[j] = float(2*AA*thermal_1[i-1][j]+2*BB*thermal_1[j-1]+thermal_1[j]*(1-2*AA-2*BB) +2*h_n_r*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dx*C_mould*Density_mould)); } ////side else if ((i>=xJ && i<=xx) && j==yA)//PH { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j+1])+thermal_1[j]*(1-2*AA-2*BB)); } else if (i==xx && (j>=yA && j<=yB))//HG { thermal_0[j] = float(2*AA*(thermal_1[i-1][j])+BB*(thermal_1[j-1]+thermal_1[j+1]) +thermal_1[j]*(1-2*AA-2*BB)+2*h_n_r*(Water_Tem_in - thermal_1[j])*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if ((i>=xJ && i<=xx) && j==yB)//GN { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+2*BB*(thermal_1[j-1])+thermal_1[j]*(1-2*AA-2*BB)); } else if (i==xJ && (j>=yA && j<=yB))//NP { thermal_0[j] = float(2*AA*(thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1]) +thermal_1[j]*(1-2*AA-2*BB)+2*q3(j)*Mould_dt/(Mould_dx*C_mould*Density_mould)); } else if ( i>=xJ && (j>=yA && j<=yB))// right { thermal_0[j] = float(AA*(thermal_1[i-1][j]+thermal_1[i+1][j])+BB*(thermal_1[j-1]+thermal_1[j+1])+thermal_1[j]*(1.0-2*AA-2*BB)); } } } } } } 本文來自: 小木蟲論壇 http://www.gaoyang168.com/bbs/viewthread.php?tid=2410411 |

|
本帖內(nèi)容被屏蔽 |
| 2 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 求調(diào)劑院校信息 +4 | CX 330 2026-03-21 | 4/200 |
|
|---|---|---|---|---|
|
[考研] 269專碩求調(diào)劑 +5 | 金恩貝 2026-03-21 | 5/250 |
|
|
[考研] 317求調(diào)劑 +9 | 申子申申 2026-03-19 | 15/750 |
|
|
[考研] 二本跨考鄭大材料306英一數(shù)二 +3 | z1z2z3879 2026-03-17 | 3/150 |
|
|
[考研] 求調(diào)劑 +3 | Ma_xt 2026-03-17 | 3/150 |
|
|
[考研] 085700資源與環(huán)境308求調(diào)劑 +12 | 墨墨漠 2026-03-18 | 13/650 |
|
|
[考研] 華東師范大學(xué)-071000生物學(xué)-293分-求調(diào)劑 +3 | 研究生何瑤明 2026-03-18 | 3/150 |
|
|
[考研] 材料專業(yè)求調(diào)劑 +6 | hanamiko 2026-03-18 | 6/300 |
|
|
[考研] 材料專碩英一數(shù)二306 +7 | z1z2z3879 2026-03-18 | 7/350 |
|
|
[考研] 北科281學(xué)碩材料求調(diào)劑 +5 | tcxiaoxx 2026-03-20 | 5/250 |
|
|
[考研] 289求調(diào)劑 +6 | 懷瑾握瑜l 2026-03-20 | 6/300 |
|
|
[考研] 求調(diào)劑 +3 | eation27 2026-03-20 | 3/150 |
|
|
[考研] 廣西大學(xué)家禽遺傳育種課題組2026年碩士招生(接收計(jì)算機(jī)專業(yè)調(diào)劑) +3 | 123阿標(biāo) 2026-03-17 | 3/150 |
|
|
[論文投稿]
申請(qǐng)回稿延期一個(gè)月,編輯同意了。但系統(tǒng)上的時(shí)間沒變,給編輯又寫郵件了,沒回復(fù)
10+3
|
wangf9518 2026-03-17 | 4/200 |
|
|
[考研] 一志愿中國(guó)海洋大學(xué),生物學(xué),301分,求調(diào)劑 +5 | 1孫悟空 2026-03-17 | 6/300 |
|
|
[考研] 0703化學(xué)調(diào)劑 +4 | 18889395102 2026-03-18 | 4/200 |
|
|
[考研] 344求調(diào)劑 +6 | knight344 2026-03-16 | 7/350 |
|
|
[考研] 301求調(diào)劑 +4 | A_JiXing 2026-03-16 | 4/200 |
|
|
[考研] 283求調(diào)劑 +3 | 聽風(fēng)就是雨; 2026-03-16 | 3/150 |
|
|
[考研] 304求調(diào)劑 +5 | 素年祭語(yǔ) 2026-03-15 | 5/250 |
|