小编mil*_*cic的帖子

使用函数调用非法使用派生类型

我有一个简单的函数,它返回一个基于时间字符串的时间对象:

FUNCTION getTime(timeStr)RESULT(time)
IMPLICIT NONE
CHARACTER(LEN=19),INTENT(IN) :: timeStr
TYPE timeType
 INTEGER :: yyyy,mo,dd,hh,mm,ss
ENDTYPE timeType
TYPE(timeType) :: time
READ(UNIT=timeStr( 1: 4),'(I4)')time%yyyy
READ(UNIT=timeStr( 6: 7),'(I2)')time%mo
READ(UNIT=timeStr( 9:10),'(I2)')time%dd
READ(UNIT=timeStr(12:13),'(I2)')time%hh
READ(UNIT=timeStr(15:16),'(I2)')time%mm
READ(UNIT=timeStr(18:19),'(I2)')time%ss
ENDFUNCTION getTime
Run Code Online (Sandbox Code Playgroud)

我从父例程中将其称为:

umwmTime1=getTime(umwmStartTimeStr)
umwmTime2=getTime(umwmStopTimeStr)
Run Code Online (Sandbox Code Playgroud)

其中umwmTime 1和2声明为:

TYPE timeType
  INTEGER :: yyyy,mo,dd,hh,mm,ss
ENDTYPE timeType
TYPE(timeType) :: umwmTime1,umwmTime2
Run Code Online (Sandbox Code Playgroud)

我得到的编译错误消息是:

PGF90-S-0099-Illegal use of derived type (ESMF_interface_UMWM.F90: 282)
PGF90-S-0099-Illegal use of derived type (ESMF_interface_UMWM.F90: 283)
  0 inform,   0 warnings,   2 severes, 0 fatal for umwm_component_run
Run Code Online (Sandbox Code Playgroud)

第282行和第283行是父例程中的函数调用.

但是,如果我使用子程序(而不是函数)将umwmTime1和umwmTime2作为INTENT(OUT)参数,我没有遇到任何问题.我的功能有什么问题?

fortran fortran90

1
推荐指数
1
解决办法
760
查看次数

循环变量文件名

我正在使用Fortran对大量数据集进行计算,这些数据集被分成许多文件.文件名是:

maltoLyo12per-reimage-set1.traj
maltoLyo12per-reimage-set2.traj
maltoLyo12per-reimage-set3.traj
Run Code Online (Sandbox Code Playgroud)

我编写的代码用于计算如下:

fileLoop: do j = 31, 34

 OPEN(unit=31,status='old',file=fileplace//'maltoLyo12per-reimage-set1.traj')
 OPEN(unit=32,status='old',file=fileplace//'maltoLyo12per-reimage-set2.traj')
 OPEN(unit=33,status='old',file=fileplace//'maltoLyo12per-reimage-set3.traj')
 OPEN(unit=34,status='old',file=fileplace//'maltoLyo12per-reimage-set4.traj')

 ... operation....

close (j)
end do fileLoop
Run Code Online (Sandbox Code Playgroud)

在运行期间,我希望代码一次打开每个文件,并在完成计算后关闭它们.但是上面的代码将立即打开所有文件,并在完成计算后逐个关闭它们.

所以我试着改变代码,如下所示:

fileLoop: do j = 31, 34

 OPEN(unit=j,status='old',file=fileplace//'maltoLyo12per-reimage-set1.traj')

close (j)
end do fileLoop
Run Code Online (Sandbox Code Playgroud)

但在这里我遇到了文件名的问题.每次循环运行时,文件名都不会因文件名中的短语"set1"而改变.我希望文件名中的数字更改为set1,set2,set3等,随后文件单元号为31,32,33,34等.

fortran fortran90

1
推荐指数
1
解决办法
1万
查看次数

使用插入符号进行取幂时的语法错误

当我做:

   REAL FUNCTION  f(x)          
      REAL, INTENT(IN) :: x
      f = exp(-x)
    END FUNCTION  f 
Run Code Online (Sandbox Code Playgroud)

它有效,但如果我这样做:

   REAL FUNCTION  f(x)          
      REAL, INTENT(IN) :: x
      f = exp(-x^2)
    END FUNCTION  f 
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

  Error: Syntax error in argument list at (1)
Run Code Online (Sandbox Code Playgroud)

但我需要的x^2功能不是x.该怎么办?

fortran

0
推荐指数
1
解决办法
213
查看次数

打印文件中包含字符串的行

如何在指定条件下打印文件中的一行,例如,如果一行中有 251212,我如何让我的程序只打印该特定行。感谢您的帮助,谢谢。

python file line display

0
推荐指数
1
解决办法
3万
查看次数

标签 统计

fortran ×3

fortran90 ×2

display ×1

file ×1

line ×1

python ×1