【Fortran】Fortran可选参数optional和接口interface的示例程序

代码

module mod_tools
  implicit none

  integer,parameter :: its = 1
  integer,parameter :: ite = 4
  integer,parameter :: jts = 1
  integer,parameter :: jte = 3
  integer,parameter :: kms = 1
  integer,parameter :: kme = 2


  interface test_optional
    module procedure test_optional_integer_1d
    module procedure test_optional_integer_2d
    module procedure test_optional_integer_3d

    module procedure test_optional_real_1d
    module procedure test_optional_real_2d
    module procedure test_optional_real_3d
  end interface ! test_optional

  contains

  subroutine test_optional_real_1d(var1,var2)
! ---------------------------------------
! var2是可选参数;
! optional属性表示这个参数是可选的;
! 用present来判断是否传入可选参数;
! ---------------------------------------
    implicit none
    real,dimension(its:ite),intent(in) :: var1
    real,dimension(its:ite),optional,intent(in) :: var2

    print*,"var1=",var1

    if(present(var2)) then
      print*,"var2=",var2
    end if

    print*," "

  end subroutine test_optional_real_1d


  subroutine test_optional_real_2d(var1,var2)
    implicit none
    real,dimension(its:ite,jts:jte),intent(in) :: var1
    real,dimension(its:ite,jts:jte),optional,intent(in) :: var2

    print*,"var1=",var1

    if(present(var2)) then
      print*,"var2=",var2
    end if

    print*," "

  end subroutine test_optional_real_2d


  subroutine test_optional_real_3d(var1,var2)
    implicit none
    real,dimension(its:ite,jts:jte,kms:kme),intent(in) :: var1
    real,dimension(its:ite,jts:jte,kms:kme),optional,intent(in) :: var2

    print*,"var1=",var1

    if(present(var2)) then
      print*,"var2=",var2
    end if

    print*," "
    
  end subroutine test_optional_real_3d


  subroutine test_optional_integer_1d(var1,var2)
    implicit none
    integer,dimension(its:ite),intent(in) :: var1
    integer,dimension(its:ite),optional,intent(in) :: var2

    print*,"var1=",var1

    if(present(var2)) then
      print*,"var2=",var2
    end if

    print*," "

  end subroutine test_optional_integer_1d


  subroutine test_optional_integer_2d(var1,var2)
    implicit none
    integer,dimension(its:ite,jts:jte),intent(in) :: var1
    integer,dimension(its:ite,jts:jte),optional,intent(in) :: var2

    print*,"var1=",var1

    if(present(var2)) then
      print*,"var2=",var2
    end if

    print*," "

  end subroutine test_optional_integer_2d


  subroutine test_optional_integer_3d(var1,var2)
    implicit none
    integer,dimension(its:ite,jts:jte,kms:kme),intent(in) :: var1
    integer,dimension(its:ite,jts:jte,kms:kme),optional,intent(in) :: var2

    print*,"var1=",var1

    if(present(var2)) then
      print*,"var2=",var2
    end if

    print*," "
    
  end subroutine test_optional_integer_3d

END module mod_tools



program Main
  use mod_tools
  implicit none
  integer,dimension(its:ite)                 :: int_1d_1,int_1d_2
  integer,dimension(its:ite,jts:jte)         :: int_2d_1,int_2d_2
  integer,dimension(its:ite,jts:jte,kms:kme) :: int_3d_1,int_3d_2
  real   ,dimension(its:ite)                 :: real_1d_1,real_1d_2
  real   ,dimension(its:ite,jts:jte)         :: real_2d_1,real_2d_2
  real   ,dimension(its:ite,jts:jte,kms:kme) :: real_3d_1,real_3d_2

  int_1d_1 = 1
  int_1d_2 = 2

  int_2d_1 = 3
  int_2d_2 = 4

  int_3d_1 = 5
  int_3d_2 = 6

  real_1d_1 = 1.5
  real_1d_2 = 2.5

  real_2d_1 = 3.5
  real_2d_2 = 4.5

  real_3d_1 = 5.5
  real_3d_2 = 6.5


  call test_optional(int_1d_1,int_1d_2)
  call test_optional(int_2d_1,int_2d_2)
  call test_optional(int_3d_1,int_3d_2)
  call test_optional(real_1d_1,real_1d_2)
  call test_optional(real_2d_1,real_2d_2)
  call test_optional(real_3d_1,real_3d_2)


end program Main

结果

var1=           1           1           1           1
 var2=           2           2           2           2

 var1=           3           3           3           3           3           3           3           3           3           3           3           3
 var2=           4           4           4           4           4           4           4           4           4           4           4           4

 var1=           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5           5
 var2=           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6           6

 var1=   1.50000000       1.50000000       1.50000000       1.50000000
 var2=   2.50000000       2.50000000       2.50000000       2.50000000

 var1=   3.50000000       3.50000000       3.50000000       3.50000000       3.50000000       3.50000000       3.50000000       3.50000000       3.50000000       3.50000000       3.50000000       3.50000000
 var2=   4.50000000       4.50000000       4.50000000       4.50000000       4.50000000       4.50000000       4.50000000       4.50000000       4.50000000       4.50000000       4.50000000       4.50000000

 var1=   5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000       5.50000000
 var2=   6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000       6.50000000

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值