xk6891 发表于 2021-6-15 21:27:24

fortran项目中DCOPY和DSCAL函数

前人编写的科学计算程序包,用它做计算的时候感觉其中有些错误,遂一一查看源程序,想查找其中原因。读程序时,现有一不明白处,想请教:譬如“adjmu.F”中子程序SUBROUTINE CONVFRIE的第431和432行为:
431   CALL DCOPY(NSTATE,WE(1),1,WEINT(1),1)
432   CALL DSCAL(NSTATE,-1.D0,WEINT(1),1)
遂去找这两个被调用的子程序DCOPY和DSCAL,adjmu.F文件中无此子程序任何信息,而子程序SUBROUTINE CONVFRIE的头文件system.h,nlps.inc,fint.inc中也无信息。有些迷茫了,在这些相关的地方就没有这两个被调用的子程序,那这两个子程序在哪里呢,这个调用是如何做到的呢?
对于大型的Fortran项目,做出修补,从何处下手较为合适?

风平老涡 发表于 2021-6-15 22:17:38

DCOPY, DSCAL是Lahey Fortan专属子程序。


DCOPY
SUBROUTINE DCOPY (N, DX, INCX, DY, INCY)
Purpose

            Copy a vector.

GAMS Category

D1A5

Author(s)

         Lawson, C. L., (JPL)
         Hanson, R. J., (SNLA)
         Kincaid, D. R., (U. of Texas)
         Krogh, F. T., (JPL)

Description


                B L A SSubprogram
    Description of Parameters

   --Input--
      Nnumber of elements in input vector(s)
       DXdouble precision vector with N elements
   INCXstorage spacing between elements of DX
       DYdouble precision vector with N elements
   INCYstorage spacing between elements of DY

   --Output--
       DYcopy of vector DX (unchanged if N .LE. 0)

   Copy double precision DX to double precision DY.
   For I = 0 to N-1, copy DX(LX+I*INCX) to DY(LY+I*INCY),
   where LX = 1 if INCX .GE. 0, else LX = 1+(1-N)*INCX, and LY is
   defined in a similar way using INCY.


DSCAL
SUBROUTINE DSCAL (N, DA, DX, INCX)
Purpose

            Multiply a vector by a constant.

GAMS Category

D1A6

Author(s)

         Lawson, C. L., (JPL)
         Hanson, R. J., (SNLA)
         Kincaid, D. R., (U. of Texas)
         Krogh, F. T., (JPL)

Description


                B L A SSubprogram
    Description of Parameters

   --Input--
      Nnumber of elements in input vector(s)
       DAdouble precision scale factor
       DXdouble precision vector with N elements
   INCXstorage spacing between elements of DX

   --Output--
       DXdouble precision result (unchanged if N.LE.0)

   Replace double precision DX by double precision DA*DX.
   For I = 0 to N-1, replace DX(IX+I*INCX) withDA * DX(IX+I*INCX),
   where IX = 1 if INCX .GE. 0, else IX = 1+(1-N)*INCX.

xk6891 发表于 2021-6-16 09:12:29

风平老涡 发表于 2021-6-15 22:17
DCOPY, DSCAL是Lahey Fortan专属子程序。




谢谢大神指导。之前朝着这个方向想了想,百度没有丝毫线索,还是应该采用google
页: [1]
查看完整版本: fortran项目中DCOPY和DSCAL函数