主题:下面这段程序怎么写可以更有效率
下面的Txx,b_Txx,Txz,b_Txz等和mu,lambda,ker_mu,ker_lambda, ker_alpha,ker_beta都是(100,300)大小的数组,由于这段子例程被反复调用,对整个程序的时间影响很大,所以想尽可能的优化这段程序。
本来我是用do循环做的,现在直接改成这样子,发现效率并没有提高多少,还能不能进步一提高
我在机器上跑,这段程序大约需要1秒的时间
SUBROUTINE ker_cal
IMPLICIT NONE
REAL, DIMENSION(100, 300) :: temp_x, temp_y
temp_x = Txx + Tzz
temp_y = b_Txx + b_Tzz
ker_lambda = - stept * temp_x * temp_y
temp_x = 0.
temp_x = 2*(Txx*b_Txx + Tzz*b_Tzz + 2*Txz*b_Txz)
ker_mu = - stept * temp_x
ker_alpha = ker_alpha + &
2. * SQRT(rho * (lambda + &
2. * mu)) * ker_lambda
ker_beta = ker_beta + &
2.* SQRT(rho * mu) * &
(ker_mu - 2. * ker_lambda)
本来我是用do循环做的,现在直接改成这样子,发现效率并没有提高多少,还能不能进步一提高
我在机器上跑,这段程序大约需要1秒的时间
SUBROUTINE ker_cal
IMPLICIT NONE
REAL, DIMENSION(100, 300) :: temp_x, temp_y
temp_x = Txx + Tzz
temp_y = b_Txx + b_Tzz
ker_lambda = - stept * temp_x * temp_y
temp_x = 0.
temp_x = 2*(Txx*b_Txx + Tzz*b_Tzz + 2*Txz*b_Txz)
ker_mu = - stept * temp_x
ker_alpha = ker_alpha + &
2. * SQRT(rho * (lambda + &
2. * mu)) * ker_lambda
ker_beta = ker_beta + &
2.* SQRT(rho * mu) * &
(ker_mu - 2. * ker_lambda)