Fortran G错误、语法错误或字符无效

Fortran GIving the Errors Syntax Error or Invalid Character

提问人:Christian Farina 提问时间:3/9/2023 更新时间:3/9/2023 访问量:29

问:

我有一个很长的代码,可以进行一些数字积分,由于篇幅原因,我不会在这里全部发布。但是,对于不同的情况,要计算的表达式是不同的,它们都是单独定义的。执行此操作的代码如下:

        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 需要这样做。

关于如何解决问题的任何意见?

先谢谢你

语法错误 无效字符

评论


答: 暂无答案