Fortran Coder

标题: 固定格式(.for)怎么调用自由格式(.f90)的子程序 [打印本页]

作者: ahafigure    时间: 2020-10-14 16:01
标题: 固定格式(.for)怎么调用自由格式(.f90)的子程序
各位,我现在遇到一个问题,我的主程序是for格式的(不是我写的),但是现在需要增加一个功能,我是用自由格式的f90写的:
[Fortran] 纯文本查看 复制代码
  subroutine read_force_field()
          use flexible
          implicit none

          integer*4, parameter :: ff_torsion = 10000, max_atom_type = 100, max_ligand = 500  

          integer       :: num_link(max_ligand), link(max_ligand, 10)

          integer       :: i, j, k, ios, nflag, multiplicity, num, num_atom, num_bond, id2

          integer       :: id(4), tot_multiplicity( ff_torsion, ff_torsion ), atom_id(max_ligand)

          integer       :: ligand_id(max_ligand)

          real*8        :: force_constant, phase, periodicity

          real*8        :: x0, y0, z0

          real*8        :: tot_force_constant(ff_torsion, ff_torsion), tot_phase(ff_torsion, ff_torsion )

          real*8        :: tot_periodicity(ff_torsion, ff_torsion)

          real*8        :: coordinate(3, max_ligand), charge(max_ligand)

          character*100 :: line, file_force_field, flig

          character*10  :: atom_type(max_ligand), atom(4), typ, sybyl_type

          logical       :: qqr


然后报错内容就是:
kreadff.f90(11): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ( * ) , . % + - [ : . ** / // .LT. < .LE. <= .EQ. == .NE. ...
          integer       :: id(4), tot_multiplicity( ff_torsion, ff_torsion ), atom_id(max_ligand)
-------------------------------------------------------------------------------------------------^
kreadff.f90(41): error #6404: This name does not have a type, and must have an explicit type.   [TOT_PHASE]
          tot_phase          = -1.0
----------^
kreadff.f90(106): error #6410: This name has not been declared as an array or a function.   [TOT_PHASE]
                  tot_phase(i, j)            = phase
------------------^
kreadff.f90(126): error #6404: This name does not have a type, and must have an explicit type.   [NUM_ATOM]
          num_atom = 0
----------^
kreadff.f90(127): error #6404: This name does not have a type, and must have an explicit type.   [NUM_BOND]
          num_bond = 0
----------^
kreadff.f90(190): error #6404: This name does not have a type, and must have an explicit type.   [ATOM_ID]
          atom_id = 0
----------^
kreadff.f90(194): error #6404: This name does not have a type, and must have an explicit type.   [SYBYL_TYPE]
              sybyl_type = atom_type(i)
--------------^
kreadff.f90(194): error #6303: The assignment operation or the binary expression operation is invalid for the data types of the two operands.   [ATOM_TYPE]
              sybyl_type = atom_type(i)
---------------------------^
kreadff.f90(207): error #6404: This name does not have a type, and must have an explicit type.   [ID2]
                              id2 = 1
------------------------------^
kreadff.f90(217): error #6410: This name has not been declared as an array or a function.   [ATOM_ID]
                      atom_id(i) = id2
----------------------^
kreadff.f90(224): error #6410: This name has not been declared as an array or a function.   [ATOM_ID]
                  atom_id(i) = 5
------------------^
kreadff.f90(7): error #6279: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association   [MAX_LIGAND]
          integer       :: num_link(max_ligand), link(max_ligand, 10)
------------------------------------^
kreadff.f90(11): error #6279: A specification expression object must be a dummy argument, a COMMON block object, or an object accessible through host or use association   [FF_TORSI]
          integer       :: id(4), tot_multiplicity( ff_torsion, ff_torsion ), atom_id(max_ligand)
----------------------------------------------------------------^
kreadff.f90(7): error #6404: This name does not have a type, and must have an explicit type.   [MAX_LIGAND]
          integer       :: num_link(max_ligand), link(max_ligand, 10)
------------------------------------^
kreadff.f90(11): error #6404: This name does not have a type, and must have an explicit type.   [FF_TORSI]
          integer       :: id(4), tot_multiplicity( ff_torsion, ff_torsion ), atom_id(max_ligand)
----------------------------------------------------------------^
compilation aborted for CovaDock.for (code 1)


有没有大神教教怎么办,谢谢各位了!


作者: ahafigure    时间: 2020-10-14 16:34
[Fortran] 纯文本查看 复制代码
     subroutine read_force_field()
          use flexible
          implicit none

          integer*4, parameter :: ff_torsion = 10000, max_atom_type = 100, max_ligand = 500  

          integer       :: num_link(max_ligand), link(max_ligand, 10)

          integer       :: i, j, k, ios, nflag, multiplicity, num, num_atom, num_bond, id2

          integer       :: id(4), tot_multiplicity( ff_torsion, ff_torsion ), atom_id(max_ligand)

          integer       :: ligand_id(max_ligand)

          real*8        :: force_constant, phase, periodicity

          real*8        :: x0, y0, z0

          real*8        :: tot_force_constant(ff_torsion, ff_torsion), tot_phase(ff_torsion, ff_torsion )

          real*8        :: tot_periodicity(ff_torsion, ff_torsion)

          real*8        :: coordinate(3, max_ligand), charge(max_ligand)

          character*100 :: line, file_force_field, flig

          character*10  :: atom_type(max_ligand), atom(4), typ, sybyl_type

          logical       :: qqr

作者: li913    时间: 2020-10-14 17:09
模块flexible有问题

作者: fcode    时间: 2020-10-14 17:32
报错先看第一个错误提示,后面的先不管。
作者: ahafigure    时间: 2020-10-14 18:20
li913 发表于 2020-10-14 17:09
模块flexible有问题

[Fortran] 纯文本查看 复制代码
  41       module flexible
  42
  43         parameter(max_flex=50000,ntrace_max = 1000,ncycle_max=50)
  44
  45         integer ncycle,ntors,noh,nzma_atom
  46
  47         integer,allocatable :: cycle_atom(:,:),label(:)
  48         integer,allocatable :: path(:),torsion(:)
  49         real,allocatable :: coor_zm(:,:),coor_car(:,:)
  50         real,allocatable :: temp_car(:,:)
  51         real,allocatable :: loh(:,:),init_zm(:,:),dis_lig(:,:)
  52         integer trace(ntrace_max),cycle_size(ncycle_max)
  53         integer temp_cycle(ntrace_max)
  54
  55
  56
  57       end module flexible

作者: ahafigure    时间: 2020-10-14 18:21
li913 发表于 2020-10-14 17:09
模块flexible有问题

[Fortran] 纯文本查看 复制代码
 11       allocate( cycle_atom(ncycle_max,nlig) )
12       allocate( torsion(nlig*nlig) )
13       allocate( loh(nlig,3) )
14       allocate( path(nlig) )
15       allocate( label(nlig) )
16

33       allocate( coor_zm(max_flex, ntors) )
34       allocate( coor_car(max_flex, nlig) )
35       allocate( init_zm(nlig, 8) )
36       allocate( temp_car(nlig, 3) )
37       allocate( dis_lig(nlig, nlig) )


作者: ahafigure    时间: 2020-10-14 18:22
li913 发表于 2020-10-14 17:09
模块flexible有问题

flexible应该没问题,因为不添加这个子程序,我在其他的主程序里面跑是一点问题都没有的
作者: ahafigure    时间: 2020-10-14 18:24
fcode 发表于 2020-10-14 17:32
报错先看第一个错误提示,后面的先不管。

那这个第一个错误:
kreadff.f90(11): error #5082: Syntax error, found END-OF-STATEMENT when expecting one of: ( * ) , . % + - [ : . ** / // .LT. < .LE. <= .EQ. == .NE. ...
          integer       :: id(4), tot_multiplicity( ff_torsion, ff_torsion ), atom_id(max_ligand)
是什么意思呢
作者: ahafigure    时间: 2020-10-14 19:09
谢谢大家了,我打算把自由格式重写成固定格式了。
作者: 青衣巷    时间: 2020-10-14 22:21
固定格式应该用 *.for 或 *.f 作为扩展名,自由格式应该用 *.f90 作为扩展名。
同一个源代码文件,只能是一种格式。
固定格式和自由格式混合使用,应该使用多个源代码文件。而不能混写在一个源代码文件中(也不能自由格式include固定格式,或固定格式include自由格式)




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2