下面的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)