Fortran Coder

标题: 请问这种子程序的参数该怎么设计 [打印本页]

作者: shrine    时间: 2017-12-14 10:08
标题: 请问这种子程序的参数该怎么设计
本帖最后由 shrine 于 2017-12-14 10:30 编辑

主程序里动态分配了几个数组,要向子程序传递这几个数组,每次传的都不一样,这几个数组已经放到一个global-data的模块里,子程序可以直接use

[Fortran] 纯文本查看 复制代码
module global_data
implicit none
Integer , parameter :: QP = Selected_real_kind( 18 )
real(kind=QP),allocatable::h(:),u(:)
Integer , parameter :: ne=100
end module

program main
use global_data
implicit none
integer::NERR
ALLOCATE(h(ne),u(ne),STAT=NERR)
IF(NERR>0)THEN
WRITE(6,*)      'ERROR IN ALLOCATE'
         STOP
ENDIF

call tvdd(h)
call tvdd(u)
DEALLOCATE(h,u)
end

subroutine tvdd(t) !这个参数该怎么设置,现在这样写肯定不行,t无法声明,我想把h和u传进来,每次传一个,每次不一样
use global_data
implicit none
t=t+1
endsubroutine





作者: pasuka    时间: 2017-12-14 11:09
已经导入global_data模块的情况下,变量h和u对于函数tvdd就是透明公开的,lz为啥画蛇添足?
选择h和u直接select case呗
作者: shrine    时间: 2017-12-14 11:13
pasuka 发表于 2017-12-14 11:09
已经导入global_data模块的情况下,变量h和u对于函数tvdd就是透明公开的,lz为啥画蛇添足?
选择h和u直接se ...

没明白,能写成代码吗
作者: fcode    时间: 2017-12-14 12:09
[Fortran] 纯文本查看 复制代码
module global_data
  implicit none
  Integer , parameter :: QP = Selected_real_kind( 18 )
  real(kind=QP),allocatable::h(:),u(:)
  Integer , parameter :: ne=100
  
contains
  subroutine tvdd(t) !//把 tvdd 包含在module里,方便使用
    real(kind=QP) :: t(:)
    t=t+1
  endsubroutine
end module

program main
  use global_data
  implicit none
  integer::NERR
  ALLOCATE(h(ne),u(ne),STAT=NERR)
  IF(NERR>0)THEN
    WRITE(6,*)      'ERROR IN ALLOCATE'
    STOP
  ENDIF
  call tvdd(h)
  call tvdd(u)
  DEALLOCATE(h,u)
end

作者: shrine    时间: 2017-12-14 12:54
fcode 发表于 2017-12-14 12:09
[mw_shl_code=fortran,true]module global_data
  implicit none
  Integer , parameter :: QP = Selected_ ...

perfect!!
感谢版大




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