Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran编译错误764嵌套错误_Fortran_Gfortran_Fortran95 - Fatal编程技术网

Fortran编译错误764嵌套错误

Fortran编译错误764嵌套错误,fortran,gfortran,fortran95,Fortran,Gfortran,Fortran95,这段代码有一些问题。最直接的一点是,如果发生了这种情况,你就错过了一个终点。您看不到这一点,因为如前所述,您没有一致地缩进代码。你的编辑器应该会自动为你做这件事,并且会让你很容易发现它——我将你的代码剪切粘贴到emacs中,自动缩进子程序,问题就很清楚了。然而,endif应该放在哪里,因此在接下来的内容中,我不得不猜测它放在哪里,由于您没有提供完整的程序,很难测试我所做的,但是即使我犯了错误,我希望我所做的背后的想法是清楚的 无论如何,下一个问题是不要使用GOTO!很少有任何需要,它通常会导致混

这段代码有一些问题。最直接的一点是,如果发生了这种情况,你就错过了一个终点。您看不到这一点,因为如前所述,您没有一致地缩进代码。你的编辑器应该会自动为你做这件事,并且会让你很容易发现它——我将你的代码剪切粘贴到emacs中,自动缩进子程序,问题就很清楚了。然而,endif应该放在哪里,因此在接下来的内容中,我不得不猜测它放在哪里,由于您没有提供完整的程序,很难测试我所做的,但是即使我犯了错误,我希望我所做的背后的想法是清楚的

无论如何,下一个问题是不要使用GOTO!很少有任何需要,它通常会导致混乱,即所谓的意大利面代码。相反,学习你的控制结构并使用它们。一个do环路和几个出口将很好地整理这一切

接下来,所有常量都是单精度的。然而,所有的变量都是双精度的。因此,你的日常工作不会像你想要的那样精确。在双精度代码中,如果您看到1.0没有其他限定符,那么几乎总是有错误

那么如何解决这个问题呢。双精度是80年代的事,所以你可以学习各种类型,在stackoverflow上详细讨论过很多次,或者看看你的Fortran手册(你有吗?),然后使用它们。总之,把这些加在一起,再加上上面的警告(而且我只花了5分钟,实际上我会更进一步整理,但早餐在召唤)我会写下你的日常生活,比如

700 if (time>1500) then
!子程序10:计算所需的正毛细管压力
子例程Pcow_正1(sigma_正1、R、alpha、b、teta_正1、Pcow_正1、r1、时间)
隐式无
!伪参数声明
整数,参数::wp=所选的实际种类(12,70)
真实(wp)、意图(in)::西格玛
真实(wp)、意图(in)::R
真实(wp)、意图(in)::阿尔法
真实(wp)、意图(in)::b
真实(wp),意图(in)::teta_ow
真实(wp)、意图(out)::Pcow\U正
真实(wp)、意图(out)::r1
真实(wp):欧米伽系数
雷亚尔(wp):A_eff
真实版(wp)::beta版
真实(wp)::Pcow
雷亚尔(wp)::r2
真实(wp)::错误
真实(wp)::错误1
雷亚尔(wp):阿贝塔
整数,意图(输出)::时间
!计算Pcow_正值
时间=0
r1=R
做
如果(时间>1500),则
r1=(西格玛w)/(0.0005 wp)
Pcow_正值=0.0005_wp
出口
如果结束
阿贝塔=((b*(Sin(alpha)))/(r1))
如果(abeta>1.0_wp),则
r1=(b*(Sin(alpha)))
Pcow_正值=(σw)/(r1)
出口
其他的
如果结束
β=Asin(阿贝塔)
时间=时间+1
A系数=((R**2.0μwp)/(2.0μwp*Tan(α))-((r1)*(b)*(Sin(α+β)))/2.0μwp)和
+((((((r1)**2)(beta)/2.0(wp))
欧米伽系数=(((R)*(1.0μwp/(Tan(alpha)))-b)*(Cos(teta_-ow))+((r1*beta)))
Pcow=((西格玛-奥夫)*(欧米伽-奥夫))/(A-奥夫))
r2=(西格玛•欧)/(普科)
错误=Abs(r2-r1)
错误1=绝对值((σw/r2)-(σw/r1))
r1=r2

如果(错误缩进您的代码。您所有的
if
语句是否都有相应的
endif
s?您应该使用缩进来更好地查看代码的结构。很可能您缺少
end if
或类似的语句。非常感谢您……
!计算Pcow\u positive time=0 r1=R 700如果(时间>1500),则转到950否则结束如果
700 if (time>1500) then
    !subroutine No.10: to calculate positive capilary pressure required 

Subroutine Pcow_positive1(sigma_ow,R,alpha,b,teta_ow,Pcow_positive,r1,time)

  Implicit None

  !dummy argument declarations 

  Integer, Parameter :: wp = Selected_real_kind( 12, 70 )

  Real( wp ),Intent(in)::sigma_ow
  Real( wp ),Intent(in)::R
  Real( wp ),Intent(in)::alpha
  Real( wp ),Intent(in)::b
  Real( wp ),Intent(in)::teta_ow
  Real( wp ),Intent(out)::Pcow_positive
  Real( wp ),Intent(out)::r1
  Real( wp )::omega_eff
  Real( wp )::A_eff
  Real( wp )::beta
  Real( wp )::Pcow
  Real( wp )::r2
  Real( wp )::error
  Real( wp )::error1
  Real( wp )::abeta
  Integer,Intent(out)::time

  !calculate Pcow_positive

  time=0
  r1=R


  Do

     If (time>1500) Then


        r1=(sigma_ow)/(0.0005_wp)
        Pcow_positive = 0.0005_wp

        Exit

     End If

     abeta=((b*(Sin(alpha)))/(r1))
     If (abeta>1.0_wp) Then

        r1=(b*(Sin(alpha)))
        Pcow_positive=(sigma_ow)/(r1)
        Exit

     Else 

     End If
     beta=Asin(abeta)
     time=time+1
     A_eff=(((R**2.0_wp)/(2.0_wp*Tan(alpha))))-(((r1)*(b)*(Sin(alpha+beta)))/2.0_wp) & 
          +(((((r1)**2)*(beta))/2.0_wp))
     omega_eff=(((((R)*(1.0_wp/(Tan(alpha))))-b)*(Cos(teta_ow)))+((r1*beta)))
     Pcow=(((sigma_ow)*(omega_eff))/(A_eff))
     r2=(sigma_ow)/(Pcow)

     error=Abs(r2-r1)
     error1=Abs((sigma_ow/r2)-(sigma_ow/r1))
     r1=r2
     If (error<=0.01_wp .Or. error1<=0.01_wp) Then

        Pcow_positive=Pcow
        Exit

     End If

  End Do

End Subroutine Pcow_positive1