我遇到了变量被覆盖的问题,因为我不知道是什么原因。我在下面发布了一段代码,以便您可以看到事情是如何声明的。变量应变、Qi、Qf、Qd、tel 和 Gc 被传递到子程序并用于计算 ssgrad、strn0、strss0。
我的问题是 tel 和 Gc 被传递到子程序 OK 但由于某种原因在这段代码中更改了值。
使用打印语句,我发现问题首先出现在第二个 do 循环中。当我将 strss0 设置为 0 时,Gc 和 tel 的值从都等于 1 变为看似随机的数字:tel=11.52822 Gc=-8.789086 (仅为示例而显示)
每次我运行代码时,它们都会设置为相同的值。
只是让你知道,这个子程序与商业有限元包接口。
非常感谢您对此的任何帮助
subroutine initcalcs(strain,Qi,Qf,Qd,tel,Gc,ssgrad,strn0,strss0)
implicit none
integer :: i,j
real*8:: nstrn0,nstrs0,strn0,strnf,varsq,normvar,lmbda0,lmbdaf,
# ssgrad,t0,tt,tel,nstrnf,nstrsf,Gc
real*8, dimension(3) :: strain,stran0,stranf,strss0,strssf,var
real*8, dimension(3,3) :: Qd,Qi,Qf
lmbda0=1.0d0
nstrn0=0.0d0
do i=1,3
stran0(i)=0.0d0
stran0(i)=strain(i)*lmbda0
nstrn0=nstrn0+stran0(i)**2
end do
nstrn0=dsqrt(nstrn0)
do i=1,3
strss0(i)=0.0d0
end do