提问人:Christian Farina 提问时间:3/9/2023 更新时间:3/9/2023 访问量:29
Fortran G错误、语法错误或字符无效
Fortran GIving the Errors Syntax Error or Invalid Character
问:
我有一个很长的代码,可以进行一些数字积分,由于篇幅原因,我不会在这里全部发布。但是,对于不同的情况,要计算的表达式是不同的,它们都是单独定义的。执行此操作的代码如下:
BaseAmp = exp(-0.5d0*(k*k/betaB**2 + q*q/betaC**2 +
& xsq/beta**2 + ysq/alpha**2))*
& pi**3.5/(alpha*beta*betaB*betaC)**1.5/beta/
& sqrt(omega(sqrt(xsq)))
if (sw .eq. 0) then ! 1-- 0-+ S=1 L=1
amp = (-128.d0*x3)/(3.d0*sqrt(3.d0))
end if
if (sw .eq. 1) then ! 0++ 0-+ S=1 L=2
amp = (-64.d0*k*(-4.d0*E**(I*phk)*x3*Cos(thk) +
& ((1.d0 + E**(2*I*phk))*x1 -
& I*(-1.d0 + E**(2*I*phk))*x2)*Sin(thk)))/
& (9.d0*sqrt(5.d0)*betaB*E**(I*phk))
end if
if (sw .eq. 2) then ! 2++ 0-+ S=2 L=0
amp = (-64.d0*sqrt(2.d0)*k*(2.d0*E**(I*phk)*x3*Cos(thk) +
& ((1.d0 + E**(2*I*phk))*x1 -
& I*(-1.d0 + E**(2*I*phk))*x2)*Sin(thk)))/
& (9.d0*betaB*E**(I*phk))
end if
if (sw .eq. 3) then ! 2++ 0-+ S=2 L=1
amp = (-32.d0*k*((-1.d0 + E**(2*I*phk))*x1 -
& I*(1.d0 + E**(2*I*phk))*x2)*Sin(thk))/
& (3.d0*betaB*E**(I*phk))
end if
if (sw .eq. 4) then ! 2++ 0-+ S=2 L=2
amp = (-32.d0*sqrt(1.4d0)*k*(-4*E**(I*phk)*x3*Cos(thk) +
& ((1.d0 + E**(2*I*phk))*x1 -
& I*(-1.d0 + E**(2*I*phk))*x2)*Sin(thk)))/
& (9.d0*betaB*E**(I*phk))
end if
if (sw .eq. 5) then ! 3P1 0-+ S=1 L=1
amp = (32.d0*k*((-1.d0 + E**(2*I*phk))*x1 -
& I*(1.d0 + E**(2*I*phk))*x2)*Sin(thk))/
& (3.d0*sqrt(3.d0)*betaB*E**(I*phk))
end if
if (sw .eq. 6) then ! 3P1 0-+ S=1 L=2
amp = (32.d0*k*(-4*E**(I*phk)*x3*Cos(thk) +
& ((1.d0 + E**(2*I*phk))*x1 -
& I*(-1.d0 + E**(2*I*phk))*x2)*Sin(thk)))/
& (3.d0*sqrt(5.d0)*betaB*E**(I*phk))
end if
if (sw .eq. 7) then ! 1-- 1-- S=2 L=1
amp = (128*Sqrt(2.d0)*x3)/3.
end if
if (sw .eq. 8) then ! 1++ 0-+ S=1 L=1
amp = (16.d0*Sqrt(2.d0)*k*((-1.d0 + E**(2*I*phk))*x1 -
& I*(1 + E**(2*I*phk))*x2)*(3*alpha**2 - 2*y**2)*Sin(thk))/
& (9.d0*alpha**2*betaB*E**(I*phk))
end if
if (sw .eq. 9) then ! 1++ 0-+ S=1 L=2
amp = (16.d0*Sqrt(0.133)*k*(3*alpha**2 - 2*y**2)
& *(-4.d0*E**(I*phk)*x3*Cos(thk) + ((1 + E**(2*I*phk))*x1 -
& I*(-1.d0 + E**(2*I*phk))*x2)*Sin(thk)))/
& (3.*alpha**2*betaB*E**(I*phk))
end if
amp = amp * BaseAmp
return
end
直到现在,当我添加 sw 8 和 9 时,它工作正常,它们都给我带来了以下错误:
christian@christian-HP-Pavilion-x360-Convertible:~/refortrancode/uugDecayCode$ gfortran GaussLegendreNew.f 2-+DecayNew.f -o 2-+DecayNew
2-+DecayNew.f:665:72:
amp = (16.d0*Sqrt(2.d0)*k*((-1.d0 + E**(2*I*phk))*x1 -
1
Error: Syntax error in expression at (1)
2-+DecayNew.f:666:8:
& I*(1 + E**(2*I*phk))*x2)*(3*alpha**2 - 2*y**2)*Sin(thk))/
1
Error: Invalid character in name at (1)
2-+DecayNew.f:667:8:
& (9.d0*alpha**2*betaB*E**(I*phk))
1
Error: Invalid character in name at (1)
2-+DecayNew.f:670:57:
amp = (16.d0*Sqrt(0.133)*k*(3*alpha**2 - 2*y**2)
1
Error: Expected a right parenthesis in expression at (1)
2-+DecayNew.f:671:8:
& *(-4.d0*E**(I*phk)*x3*Cos(thk) + ((1 + E**(2*I*phk))*x1 -
1
Error: Invalid character in name at (1)
2-+DecayNew.f:672:8:
& I*(-1.d0 + E**(2*I*phk))*x2)*Sin(thk)))/
1
Error: Invalid character in name at (1)
2-+DecayNew.f:673:8:
& (3.*alpha**2*betaB*E**(I*phk))
1
Error: Invalid character in name at (1)
我真的不明白为什么。表达式的定义与所有其他表达式类似,并且声明了所有变量。此外,我所有的行都少于 72 个字符,因为我知道 Fortran 需要这样做。
关于如何解决问题的任何意见?
先谢谢你
答: 暂无答案
评论