func_derived_4.f90
来自「用于进行gcc测试」· F90 代码 · 共 106 行
F90
106 行
! { dg-do run }! PR fortran/30793! Check that pointer-returing functions! work derived types.!! Contributed by Salvatore Filippone.!module class_mesh type mesh real(kind(1.d0)), allocatable :: area(:) end type meshcontains subroutine create_mesh(msh) type(mesh), intent(out) :: msh allocate(msh%area(10)) return end subroutine create_meshend module class_meshmodule class_field use class_mesh implicit none private ! Default public :: create_field, field public :: msh_ type field private type(mesh), pointer :: msh => null() integer :: isize(2) end type field interface msh_ module procedure msh_ end interface interface create_field module procedure create_field end interfacecontains subroutine create_field(fld,msh) type(field), intent(out) :: fld type(mesh), intent(in), target :: msh fld%msh => msh fld%isize = 1 end subroutine create_field function msh_(fld) type(mesh), pointer :: msh_ type(field), intent(in) :: fld msh_ => fld%msh end function msh_end module class_fieldmodule class_scalar_field use class_field implicit none private public :: create_field, scalar_field public :: msh_ type scalar_field private type(field) :: base real(kind(1.d0)), allocatable :: x(:) real(kind(1.d0)), allocatable :: bx(:) real(kind(1.d0)), allocatable :: x_old(:) end type scalar_field interface create_field module procedure create_scalar_field end interface interface msh_ module procedure get_scalar_field_msh end interfacecontains subroutine create_scalar_field(fld,msh) use class_mesh type(scalar_field), intent(out) :: fld type(mesh), intent(in), target :: msh call create_field(fld%base,msh) allocate(fld%x(10),fld%bx(20)) end subroutine create_scalar_field function get_scalar_field_msh(fld) use class_mesh type(mesh), pointer :: get_scalar_field_msh type(scalar_field), intent(in), target :: fld get_scalar_field_msh => msh_(fld%base) end function get_scalar_field_mshend module class_scalar_fieldprogram test_pnt use class_mesh use class_scalar_field implicit none type(mesh) :: msh type(mesh), pointer :: mshp type(scalar_field) :: quality call create_mesh(msh) call create_field(quality,msh) mshp => msh_(quality)end program test_pnt! { dg-final { cleanup-modules "class_mesh class_field class_scalar_field" } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?