|
编译环境:IVF Compiler XE 14.0.1.139 [Intel(R) 64]
系统:Win 10
Visual 版本 Visual_Studio_Ultimate_2012
问题描述:
程序共包括五个子程序
<Call fn0(fn,ak) !积分点
Call Get_mass_matirx(n, fn, ak,gama,lamda_all,B0,M_sum) !质量矩阵
Call Assem_Stiff_Sub(n, fn, ak, gama,lamda_all,B0,DK_sum) !刚度矩阵
Call Stiff_Pen_Sub(n,fn,ak,gama,lamda_all,B0,K_pen) !修正矩阵
Call Stiff_Larg_Sub(n,fn,ak,gama,lamda_all,B0,K_Larg)> !修正矩阵
其中修正矩阵下,又分别调用子程序,以子程序Assem_Stiff_Sub为例,其又调用了子程序Stiff_Chev_ds_RBC
Subroutine Assem_Stiff_Sub(n,fn,ak,gama,lamda_all,B0,DK_sum)
******
程序内容省略
*****
Do k = 1, n
Do j = 1, n
Do i = 1, n
call Stiff_Chev_ds_RBC(fn(i),fn(j),fn(k),gama,lamda_all,B0,KUU_R,KUV_R,KUW_R,KVV_R,KVW_R,KWW_R)
**********(该部分是对传入和返回值的计算,太多略去)
End Do
End Do
End Do
(该段下文取名为A程序段)
******
程序内容省略
*****End Subroutine Assem_Stiff_Sub
遇到的问题是,编译正常,当主程序中发生参数改动时,调试、生成均变得非常慢。
经过摸索,发现通过把 调用子程序的A程序段注释掉,然后调试或者启动(debug)就很快显示linking, 说明能正常计算了。
然后取消生成,再把A程序段注释取消,此后再调试或者运行就很快能linking,能正常计算。
在程序中只调用了内置函数,transpose和matmul,其余函数都是自己编程实现,没有再调用其他函数库。
尝试了很多设置,未能彻底解决此问题,只能用我上述那种笨办法,每改变一次参数,重复前述操作。
所以在此向各位前请教,望不吝指教。谢谢。
|
|