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代码中,避免每个子例程中出现长接口块的正确方法是什么?_Fortran - Fatal编程技术网

在FORTRAN代码中,避免每个子例程中出现长接口块的正确方法是什么?

在FORTRAN代码中,避免每个子例程中出现长接口块的正确方法是什么?,fortran,Fortran,我需要在使用solvmatrx的每个子例程上编写此接口块: INTERFACE SUBROUTINE solvmatrx( x0, ABRS_, nstp, ad00, alu00, b, lnt00, lnd00, nd, ns00, & mstEp, eps, lop1, lu0sw, rto, irtc, LPV, LPM, NV, LEPSSW, OMG, &

我需要在使用solvmatrx的每个子例程上编写此接口块:

      INTERFACE
      SUBROUTINE solvmatrx( x0, ABRS_, nstp, ad00, alu00, b, lnt00, lnd00, nd, ns00, &
                      mstEp, eps, lop1, lu0sw, rto, irtc,  LPV, LPM, NV, LEPSSW, OMG, &
                      GAMMA_, LCOLOR_, PARALLEL)
          integer*4 nd, ns00, nv, ndb, ndx, irtc, nstp, mstep, lepssw, lop1, lu0sw
          integer*4 lnd00(ND), lnt00(NS00), lpv(ND), lpm(ND), LCOLOR_
          real*8    x0(ND),b(ND),ad00(ND),alu00(NS00),ABRS_,eps,rto,omg,GAMMA_
          LOGICAL, INTENT(IN), optional :: PARALLEL
      END SUBROUTINE solvmatrx
  END INTERFACE

我如何避免这种情况呢?

也许显而易见的事情应该明确地写出来

在Fortran 90中很少需要接口块。十次中有九次使用接口块意味着你做错了什么。您应该使用模块

  • solvmatrix
    本身应该在一个模块中

  • MODULE INTERFACES
    
      INTERFACE
        SUBROUTINE solvmatrx( x0, ABRS_, nstp, ad00, alu00, b, lnt00, lnd00, nd, ns00, &
                      mstEp, eps, lop1, lu0sw, rto, irtc,  LPV, LPM, NV, LEPSSW, OMG, &
                      GAMMA_, LCOLOR_, PARALLEL)
          integer*4 nd, ns00, nv, ndb, ndx, irtc, nstp, mstep, lepssw, lop1, lu0sw
          integer*4 lnd00(ND), lnt00(NS00), lpv(ND), lpm(ND), LCOLOR_
          real*8    x0(ND),b(ND),ad00(ND),alu00(NS00),ABRS_,eps,rto,omg,GAMMA_
          LOGICAL, INTENT(IN), optional :: PARALLEL
        END SUBROUTINE solvmatrx
      END INTERFACE
    
    END MODULE
    
  • 如果不是,因为它在某种遗留外部库中,那么接口块应该在模块中

    MODULE INTERFACES
    
      INTERFACE
        SUBROUTINE solvmatrx( x0, ABRS_, nstp, ad00, alu00, b, lnt00, lnd00, nd, ns00, &
                      mstEp, eps, lop1, lu0sw, rto, irtc,  LPV, LPM, NV, LEPSSW, OMG, &
                      GAMMA_, LCOLOR_, PARALLEL)
          integer*4 nd, ns00, nv, ndb, ndx, irtc, nstp, mstep, lepssw, lop1, lu0sw
          integer*4 lnd00(ND), lnt00(NS00), lpv(ND), lpm(ND), LCOLOR_
          real*8    x0(ND),b(ND),ad00(ND),alu00(NS00),ABRS_,eps,rto,omg,GAMMA_
          LOGICAL, INTENT(IN), optional :: PARALLEL
        END SUBROUTINE solvmatrx
      END INTERFACE
    
    END MODULE
    
  • 然后在每个子程序中,或者在包含所有子程序的模块中,更好

     USE INTERFACES
    

    也许显而易见的事情应该明确地写出来

    在Fortran 90中很少需要接口块。十次中有九次使用接口块意味着你做错了什么。您应该使用模块

  • solvmatrix
    本身应该在一个模块中

  • MODULE INTERFACES
    
      INTERFACE
        SUBROUTINE solvmatrx( x0, ABRS_, nstp, ad00, alu00, b, lnt00, lnd00, nd, ns00, &
                      mstEp, eps, lop1, lu0sw, rto, irtc,  LPV, LPM, NV, LEPSSW, OMG, &
                      GAMMA_, LCOLOR_, PARALLEL)
          integer*4 nd, ns00, nv, ndb, ndx, irtc, nstp, mstep, lepssw, lop1, lu0sw
          integer*4 lnd00(ND), lnt00(NS00), lpv(ND), lpm(ND), LCOLOR_
          real*8    x0(ND),b(ND),ad00(ND),alu00(NS00),ABRS_,eps,rto,omg,GAMMA_
          LOGICAL, INTENT(IN), optional :: PARALLEL
        END SUBROUTINE solvmatrx
      END INTERFACE
    
    END MODULE
    
  • 如果不是,因为它在某种遗留外部库中,那么接口块应该在模块中

    MODULE INTERFACES
    
      INTERFACE
        SUBROUTINE solvmatrx( x0, ABRS_, nstp, ad00, alu00, b, lnt00, lnd00, nd, ns00, &
                      mstEp, eps, lop1, lu0sw, rto, irtc,  LPV, LPM, NV, LEPSSW, OMG, &
                      GAMMA_, LCOLOR_, PARALLEL)
          integer*4 nd, ns00, nv, ndb, ndx, irtc, nstp, mstep, lepssw, lop1, lu0sw
          integer*4 lnd00(ND), lnt00(NS00), lpv(ND), lpm(ND), LCOLOR_
          real*8    x0(ND),b(ND),ad00(ND),alu00(NS00),ABRS_,eps,rto,omg,GAMMA_
          LOGICAL, INTENT(IN), optional :: PARALLEL
        END SUBROUTINE solvmatrx
      END INTERFACE
    
    END MODULE
    
  • 然后在每个子程序中,或者在包含所有子程序的模块中,更好

     USE INTERFACES
    

    除了显而易见的选择,比如把它放在模块mymod中,这样你就可以简单地使用mymod?许多观察家正确地希望你引用标准的Fortran语法,比如integer(int32)、real(real64)或Fortran 90替代品来代替旧的IBM360非标准内容。除了显而易见的选择,比如把它放在一个模块mymod中,这样你就可以简单地使用mymod了?许多观察家正确地希望你引用标准的Fortran语法,比如integer(int32)、real(real64)或Fortran 90,来代替旧的IBM360非标准的东西。