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项目,做出修补,从何处下手较为合适?
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.
风平老涡 发表于 2021-6-15 22:17
DCOPY, DSCAL是Lahey Fortan专属子程序。
谢谢大神指导。之前朝着这个方向想了想,百度没有丝毫线索,还是应该采用google
页:
[1]