24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 635  |  回复: 1

_yixiao

铁虫 (小有名气)

[交流] 【求助】传热计算的OpenMP并行计算 已有1人参与

请大家帮帮忙
在温度场的计算过程中,时间步长上的迭代过程是相互关联,相互影响的。一次迭代需要使用上一次迭代的运算结果,故迭代之间不宜实现并行化。而在一次迭代内部,温度场的计算仅需要前一次时刻的计算结果,各个计算过程之间没有影响,可以进行并行计算。但我进行以下的并行计算后结果同串行相差很大,且计算时间反而增加,不知道问题出在哪里。
以下即是我的并行程序,用到的OpenMP指令是section指令:
(其中,程序中的h_w_f,Water_Tem_in,Mould_dt,Mould_dy等为全局变量,AA、BB、C_mould,float Density_mould等为局部变量,q1,Q2,q3,Q4为调用函数。)
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://muchong.com/bbs/viewthread.php?tid=2410411
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

信仰我所必须相信的
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

frankliu

禁虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
mze04532(金币+2):鼓励一下,欢迎交流~ 2010-09-28 19:38:41
本帖内容被屏蔽

2楼2010-09-28 13:45:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 _yixiao 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 华南理工0703化学,总分336求调剂 +10 手机用户 2026-04-03 11/550 2026-04-06 22:20 by michael2011
[考研] 一志愿哈工大,初试329,求环境科学与工程调剂! +6 余未辛 2026-04-06 6/300 2026-04-06 20:51 by lbsjt
[考研] 一志愿武汉理工大学-085601材料工程(专硕)-总分353求调剂 +3 2626262626li 2026-04-02 3/150 2026-04-06 09:08 by 无际的草原
[考研] 求调剂 +5 chenxrlkx 2026-04-05 7/350 2026-04-06 07:54 by houyaoxu
[考研] 一志愿211,化学学硕,310分,本科重点双非,求调剂 +13 努力奋斗112 2026-04-04 13/650 2026-04-06 07:13 by jj987
[考研] 一志愿哈尔滨工业大学085600英一数二337分求调剂 +12 lyz0427 2026-04-03 12/600 2026-04-06 06:37 by houyaoxu
[考研] 材料专硕322分 +10 哈哈哈吼吼吼哈 2026-04-04 10/500 2026-04-05 21:22 by 学员8dgXkO
[考研] 296求调剂 +3 汪!?! 2026-04-05 4/200 2026-04-05 20:13 by 啵啵啵0119
[考研] 326求调剂 +3 顾若浮生 2026-04-05 3/150 2026-04-05 18:32 by 蓝云思雨
[考研] +5 化工专硕323分 2026-04-04 5/250 2026-04-05 08:02 by 544594351
[考研] 26考研调剂0710 0860 +9 补补不补 2026-04-03 14/700 2026-04-04 23:32 by 果冻大王
[考研] 材料调剂 +12 一样YWY 2026-04-02 13/650 2026-04-04 20:49 by 蓝云思雨
[考研] 土木304求调剂 +4 兔突突突, 2026-03-31 4/200 2026-04-04 13:34 by 1753564080
[考研] 294求调剂 +6 Grey_Ey 2026-04-03 6/300 2026-04-03 20:46 by 欣喜777
[考研] 一志愿南昌大学324求调剂 +13 hanamiko 2026-04-01 13/650 2026-04-03 18:30 by ls刘帅
[考研] 工科341分调剂 +3 洛多罗 2026-04-03 3/150 2026-04-03 14:20 by 1753564080
[考研] 274求调剂 +10 薛定谔的虎。 2026-04-01 10/500 2026-04-03 10:13 by tianyyysss
[考研] 08开头看过来!!! +4 wwwwffffff 2026-03-31 6/300 2026-04-02 11:42 by 均值回归
[考研] 化学工程专硕324分,一志愿中国矿业大学求调剂 +7 耿耿1314 2026-04-01 7/350 2026-04-02 07:40 by 尚水阁主
[考研] 求调剂 +4 DADA怪 2026-03-31 4/200 2026-04-01 14:30 by ZXlzxl0425
信息提示
请填处理意见