Я столкнулся с некоторыми проблемами, пытаясь преобразовать код, ранее скомпилированный с compaq visual fortran 6.6, в gfortran.
Вот конкретная проблема, с которой я столкнулся в gfortran:
Существует переменная с именем «et», которая принимает значение 3E + 10. Затем программа вызывает подпрограмму. «et» не появляется в подпрограмме, но после возврата в основную программу она теперь имеет значение 0.
При компиляции с compaq visual fortran у меня не было этой проблемы.
Код, над которым я работаю, - это огромная научная программа, поэтому ниже я приведу лишь небольшую ее часть:
c
c calculate load/unload modulus
c
500 t=(s1-s3)/2.
aa=1.00
if(iconeps.ne.1)bb=1.00
if(smean.lt.ap1) smean=ap1
if(xn.gt.0.000001) aa=(smean/atmp)**xn
if(iconeps.eq.1)go to 220
if(xm.gt.0.000001) bb=(smean/atmp)**xm
220 if(t.ge.0.99*sm1) go to 600
et=xku*aa*atmp+tt*tm1
if(iconeps.ne.1)bt=xkb*atmp*bb
go to 900
600 et=(xkl*aa*atmp+tt*tm1)*(1.0-rf*sr)**2
if(iconeps.ne.1)bt=xkb*atmp*bb
900 continue
btmax=17.0*et
btmin=0.33*et
if(iconeps.ne.1)then
tbt=(alf1+alf3*dtt)*dtt*(1.+vide)*tm2
btf=bt+tbt
bt=btf
endif
if(bt.lt.btmin) bt=btmin
if(bt.gt.btmax) bt=btmax
if(iconeps.eq.1)go to 1100
1000 continue
1050 if(mt.eq.mtyp4c)goto 1100
s=0.0
t=0.0
call shap4n(s,t,f,pfs,pft) ! Modification by NHV
call thick4n(s,t,xe,ye,thick)
call bmat4n(xe,ye,f,pfs,pft,b,detj,thick)
c calculate incremental strains
do 1300 i=1,4
temp=0.0
do 1200 j=1,8
1200 temp=temp+b(i,j)*disp(j)
1300 depi(i)=temp
epsv=0.0
do 1400 i=1,2
1400 epsv=epsv+depi(i)
epsv=epsv+depi(4)
ev=vide-(1.+vide)*epsv
if(ev.lt.0.0)ev=vide*.01
1100 continue
call perm(permws,xkw,coef,rw,tvisc,ev,vide,tt,pp)
: «et» сохраняет правильное значение до тех пор, пока не будет вызвана подпрограмма «perm». Сразу после этой подпрограммы она принимает значение ноль.
«et» не входит ни в один общий блок
Этот фрагмент кода является частью подпрограммы, вызываемой несколькими различными подпрограммами. Еще более странным является то, что когда он вызывается в других частях кода, у меня нет этой проблемы («et» сохраняет свое значение)
Так что, если кто-то когда-либо сталкивался с такой проблемой или имеет какое-либо представление о ней, я буду очень благодарен