AbstractGridFactory Derived Type

type, public, abstract :: AbstractGridFactory


Inherits

type~~abstractgridfactory~~InheritsGraph type~abstractgridfactory AbstractGridFactory ESMF_Grid ESMF_Grid type~abstractgridfactory->ESMF_Grid grid

Inherited by

type~~abstractgridfactory~~InheritedByGraph type~abstractgridfactory AbstractGridFactory type~cubedspheregridfactory CubedSphereGridFactory type~cubedspheregridfactory->type~abstractgridfactory type~externalgridfactory ExternalGridFactory type~externalgridfactory->type~abstractgridfactory type~latlongridfactory LatLonGridFactory type~latlongridfactory->type~abstractgridfactory type~mockgridfactory MockGridFactory type~mockgridfactory->type~abstractgridfactory type~pair~14 pair type~pair~14->type~abstractgridfactory value type~pair~15 pair type~pair~15->type~abstractgridfactory value type~swathgridfactory SwathGridFactory type~swathgridfactory->type~abstractgridfactory type~tripolargridfactory TripolarGridFactory type~tripolargridfactory->type~abstractgridfactory type~xygridfactory XYGridFactory type~xygridfactory->type~abstractgridfactory type~test_latloncorners Test_LatLonCorners type~test_latloncorners->type~latlongridfactory factory type~test_latlongridfactory Test_LatLonGridFactory type~test_latlongridfactory->type~latlongridfactory factory type~tvector~14 tVector type~tvector~14->type~pair~14 elements type~tvector~15 tVector type~tvector~15->type~pair~15 elements type~set2~15 set2 type~set2~15->type~tvector~14 items type~set2~16 set2 type~set2~16->type~tvector~15 items type~integer64gridfactorymap Integer64GridFactoryMap type~integer64gridfactorymap->type~set2~15 tree type~s_iterator~15 s_iterator type~s_iterator~15->type~set2~15 reference type~s_iterator~16 s_iterator type~s_iterator~16->type~set2~16 reference type~stringgridfactorymap StringGridFactoryMap type~stringgridfactorymap->type~set2~16 tree

Type-Bound Procedures

procedure(append_metadata), public, deferred :: append_metadata

  • subroutine append_metadata(this, metadata) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(FileMetadata), intent(inout) :: metadata

procedure(append_variable_metadata), public, deferred :: append_variable_metadata

  • subroutine append_variable_metadata(this, var) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(Variable), intent(inout) :: var

generic, public :: cartesian_to_spherical => cartesian_to_spherical_2d_real32

  • private subroutine cartesian_to_spherical_2d_real32(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL32), intent(out) :: u(:,:)
    real(kind=REAL32), intent(out) :: v(:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: cartesian_to_spherical => cartesian_to_spherical_2d_real64

  • private subroutine cartesian_to_spherical_2d_real64(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL64), intent(out) :: u(:,:)
    real(kind=REAL64), intent(out) :: v(:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: cartesian_to_spherical => cartesian_to_spherical_3d_real32

  • private subroutine cartesian_to_spherical_3d_real32(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL32), intent(out) :: u(:,:,:)
    real(kind=REAL32), intent(out) :: v(:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: cartesian_to_spherical => cartesian_to_spherical_3d_real64

  • private subroutine cartesian_to_spherical_3d_real64(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL64), intent(out) :: u(:,:,:)
    real(kind=REAL64), intent(out) :: v(:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: cartesian_to_spherical_2d_real32

  • private subroutine cartesian_to_spherical_2d_real32(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL32), intent(out) :: u(:,:)
    real(kind=REAL32), intent(out) :: v(:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: cartesian_to_spherical_2d_real64

  • private subroutine cartesian_to_spherical_2d_real64(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL64), intent(out) :: u(:,:)
    real(kind=REAL64), intent(out) :: v(:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: cartesian_to_spherical_3d_real32

  • private subroutine cartesian_to_spherical_3d_real32(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL32), intent(out) :: u(:,:,:)
    real(kind=REAL32), intent(out) :: v(:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: cartesian_to_spherical_3d_real64

  • private subroutine cartesian_to_spherical_3d_real64(this, xyz, u, v, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: xyz(:,:,:,:)
    real(kind=REAL64), intent(out) :: u(:,:,:)
    real(kind=REAL64), intent(out) :: v(:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: clone

procedure(decomps_are_equal), public, deferred :: decomps_are_equal

  • function decomps_are_equal(this, a) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(in) :: this
    class(AbstractGridFactory), intent(in) :: a

    Return Value logical

procedure, public :: destroy

  • private subroutine destroy(this, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    integer, intent(out), optional :: rc

procedure(equals), public, deferred :: equals

procedure(generate_file_bounds), public, deferred :: generate_file_bounds

  • subroutine generate_file_bounds(this, grid, local_start, global_start, global_count, metaData, rc) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_Grid), intent(inout) :: grid
    integer, intent(out), allocatable :: local_start(:)
    integer, intent(out), allocatable :: global_start(:)
    integer, intent(out), allocatable :: global_count(:)
    type(FileMetadata), intent(in), optional :: metaData
    integer, intent(out), optional :: rc

procedure(generate_file_corner_bounds), public, deferred :: generate_file_corner_bounds

  • subroutine generate_file_corner_bounds(this, grid, local_start, global_start, global_count, rc) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_Grid), intent(inout) :: grid
    integer, intent(out), allocatable :: local_start(:)
    integer, intent(out), allocatable :: global_start(:)
    integer, intent(out), allocatable :: global_count(:)
    integer, intent(out), optional :: rc

procedure(generate_file_reference2D), public, deferred :: generate_file_reference2D

  • function generate_file_reference2D(this, fpointer) result(ref) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    real, intent(in), pointer :: fpointer(:,:)

    Return Value type(ArrayReference)

procedure(generate_file_reference3D), public, deferred :: generate_file_reference3D

  • function generate_file_reference3D(this, fpointer, metaData) result(ref) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    real, intent(in), pointer :: fpointer(:,:,:)
    type(FileMetadata), intent(in), optional :: metaData

    Return Value type(ArrayReference)

procedure(generate_grid_name), public, deferred :: generate_grid_name

  • function generate_grid_name(this) result(name) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(in) :: this

    Return Value character(len=:), allocatable

procedure, public :: get_basis

  • private function get_basis(this, basis, unusable, rc) result(basis_vectors)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

    Return Value real(kind=REAL64), pointer, (:,:,:,:)

procedure(get_file_format_vars), public, deferred :: get_file_format_vars

  • function get_file_format_vars(this) result(vars) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this

    Return Value character(len=:), allocatable

procedure, public :: get_grid

  • private function get_grid(this, unusable, rc) result(grid)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), target :: this
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

    Return Value type(ESMF_Grid), pointer

procedure(get_grid_vars), public, deferred :: get_grid_vars

  • function get_grid_vars(this) result(vars) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this

    Return Value character(len=:), allocatable

procedure, public :: get_obs_time

  • private subroutine get_obs_time(this, grid, obs_time, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_Grid), intent(in) :: grid
    real(kind=ESMF_KIND_R4), intent(out) :: obs_time(:,:)
    integer, intent(out), optional :: rc

procedure, public :: get_xy_mask

  • private subroutine get_xy_mask(this, interval, xy_mask, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_Time), intent(in) :: interval(2)
    integer, intent(out), allocatable :: xy_mask(:,:)
    integer, intent(out), optional :: rc

procedure, public :: get_xy_subset

  • private subroutine get_xy_subset(this, interval, xy_subset, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(in) :: this
    type(ESMF_Time), intent(in) :: interval(2)
    integer, intent(out) :: xy_subset(2,2)
    integer, intent(out), optional :: rc

procedure(halo), public, deferred :: halo

  • subroutine halo(this, array, unusable, halo_width, rc) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    real(kind=REAL32), intent(inout) :: array(:,:)
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(in), optional :: halo_width
    integer, intent(out), optional :: rc

generic, public :: initialize => initialize_from_config

  • private subroutine initialize_from_config(this, config, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_Config), intent(inout) :: config
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: initialize => initialize_from_file_metadata

  • private subroutine initialize_from_file_metadata(this, file_metadata, unusable, force_file_coordinates, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(XYGridFactory), intent(inout) :: this
    type(FileMetadata), intent(in), target :: file_metadata
    class(KeywordEnforcer), intent(in), optional :: unusable
    logical, intent(in), optional :: force_file_coordinates
    integer, intent(out), optional :: rc

generic, public :: initialize => initialize_from_config_with_prefix

  • private subroutine initialize_from_config_with_prefix(this, config, prefix, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(XYGridFactory), intent(inout) :: this
    type(ESMF_Config), intent(inout) :: config
    character(len=*), intent(in) :: prefix
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: initialize => initialize_from_esmf_distGrid

  • private subroutine initialize_from_esmf_distGrid(this, dist_grid, lon_array, lat_array, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(XYGridFactory), intent(inout) :: this
    type(ESMF_DistGrid), intent(in) :: dist_grid
    type(ESMF_LocalArray), intent(in) :: lon_array
    type(ESMF_LocalArray), intent(in) :: lat_array
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: initialize_from_config

  • private subroutine initialize_from_config(this, config, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_Config), intent(inout) :: config
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure(initialize_from_config_with_prefix), public, deferred :: initialize_from_config_with_prefix

  • subroutine initialize_from_config_with_prefix(this, config, prefix, unusable, rc) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_Config), intent(inout) :: config
    character(len=*), intent(in) :: prefix
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure(initialize_from_esmf_distGrid), public, deferred :: initialize_from_esmf_distGrid

  • subroutine initialize_from_esmf_distGrid(this, dist_grid, lon_array, lat_array, unusable, rc) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(ESMF_DistGrid), intent(in) :: dist_grid
    type(ESMF_LocalArray), intent(in) :: lon_array
    type(ESMF_LocalArray), intent(in) :: lat_array
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure(initialize_from_file_metadata), public, deferred :: initialize_from_file_metadata

  • subroutine initialize_from_file_metadata(this, file_metadata, unusable, force_file_coordinates, rc) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    type(FileMetadata), intent(in), target :: file_metadata
    class(KeywordEnforcer), intent(in), optional :: unusable
    logical, intent(in), optional :: force_file_coordinates
    integer, intent(out), optional :: rc

procedure, public, nopass :: make_arbitrary_decomposition

  • private subroutine make_arbitrary_decomposition(nx, ny, unusable, reduceFactor, rc)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(out) :: nx
    integer, intent(out) :: ny
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(in), optional :: reduceFactor
    integer, intent(out), optional :: rc

procedure, public :: make_grid

  • private function make_grid(this, unusable, rc) result(grid)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout) :: this
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

    Return Value type(ESMF_Grid)

procedure(make_new_grid), public, deferred :: make_new_grid

$ procedure (make_field), deferred :: make_esmf_field

  • function make_new_grid(this, unusable, rc) result(grid) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(in) :: this
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

    Return Value type(ESMF_Grid)

generic, public :: operator(==) => equals

  • private function equals(a, b)

    Arguments

    Type IntentOptional Attributes Name
    class(XYGridFactory), intent(in) :: a
    class(AbstractGridFactory), intent(in) :: b

    Return Value logical

procedure(physical_params_are_equal), public, deferred :: physical_params_are_equal

  • function physical_params_are_equal(this, a) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(in) :: this
    class(AbstractGridFactory), intent(in) :: a

    Return Value logical

generic, public :: spherical_to_cartesian => spherical_to_cartesian_2d_real32

  • private subroutine spherical_to_cartesian_2d_real32(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: u(:,:)
    real(kind=REAL32), intent(in) :: v(:,:)
    real(kind=REAL32), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: spherical_to_cartesian => spherical_to_cartesian_2d_real64

  • private subroutine spherical_to_cartesian_2d_real64(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: u(:,:)
    real(kind=REAL64), intent(in) :: v(:,:)
    real(kind=REAL64), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: spherical_to_cartesian => spherical_to_cartesian_3d_real32

  • private subroutine spherical_to_cartesian_3d_real32(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: u(:,:,:)
    real(kind=REAL32), intent(in) :: v(:,:,:)
    real(kind=REAL32), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

generic, public :: spherical_to_cartesian => spherical_to_cartesian_3d_real64

  • private subroutine spherical_to_cartesian_3d_real64(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: u(:,:,:)
    real(kind=REAL64), intent(in) :: v(:,:,:)
    real(kind=REAL64), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: spherical_to_cartesian_2d_real32

  • private subroutine spherical_to_cartesian_2d_real32(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: u(:,:)
    real(kind=REAL32), intent(in) :: v(:,:)
    real(kind=REAL32), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: spherical_to_cartesian_2d_real64

  • private subroutine spherical_to_cartesian_2d_real64(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: u(:,:)
    real(kind=REAL64), intent(in) :: v(:,:)
    real(kind=REAL64), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: spherical_to_cartesian_3d_real32

  • private subroutine spherical_to_cartesian_3d_real32(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL32), intent(in) :: u(:,:,:)
    real(kind=REAL32), intent(in) :: v(:,:,:)
    real(kind=REAL32), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: spherical_to_cartesian_3d_real64

  • private subroutine spherical_to_cartesian_3d_real64(this, u, v, xyz, basis, unusable, rc)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(inout), target :: this
    real(kind=REAL64), intent(in) :: u(:,:,:)
    real(kind=REAL64), intent(in) :: v(:,:,:)
    real(kind=REAL64), intent(out) :: xyz(:,:,:,:)
    character(len=*), intent(in) :: basis
    class(KeywordEnforcer), intent(in), optional :: unusable
    integer, intent(out), optional :: rc

procedure, public :: to_string

  • private function to_string(this) result(string)

    Arguments

    Type IntentOptional Attributes Name
    class(AbstractGridFactory), intent(in) :: this

    Return Value character(len=:), allocatable

Source Code

   type, abstract :: AbstractGridFactory
      private
      type (ESMF_Grid), allocatable :: grid
      real(kind=REAL64), allocatable :: NS_basis(:,:,:,:)
      real(kind=REAL64), allocatable :: grid_basis(:,:,:,:)
      real(kind=REAL64), allocatable :: xyz_basis(:,:,:,:)

   contains

      procedure, nopass :: make_arbitrary_decomposition
      procedure :: make_grid
      procedure :: get_grid
      procedure (make_new_grid), deferred :: make_new_grid
!!$      procedure (make_field), deferred :: make_esmf_field

      procedure :: clone
      procedure (equals), deferred:: equals
      generic :: operator(==) => equals

      procedure :: initialize_from_config
      procedure (initialize_from_file_metadata), deferred :: initialize_from_file_metadata
      procedure (initialize_from_config_with_prefix), deferred :: initialize_from_config_with_prefix
      procedure (initialize_from_esmf_distGrid), deferred :: initialize_from_esmf_distGrid

      generic :: initialize => initialize_from_config
      generic :: initialize => initialize_from_file_metadata
      generic :: initialize => initialize_from_config_with_prefix
      generic :: initialize => initialize_from_esmf_distGrid

      ! from MAPL_stubs
      procedure(halo), deferred :: halo

      procedure (generate_grid_name), deferred :: generate_grid_name
      procedure :: to_string

      procedure :: get_basis

      generic :: spherical_to_cartesian => spherical_to_cartesian_2d_real32
      generic :: spherical_to_cartesian => spherical_to_cartesian_2d_real64
      generic :: spherical_to_cartesian => spherical_to_cartesian_3d_real32
      generic :: spherical_to_cartesian => spherical_to_cartesian_3d_real64
      
      generic :: cartesian_to_spherical => cartesian_to_spherical_2d_real32
      generic :: cartesian_to_spherical => cartesian_to_spherical_2d_real64
      generic :: cartesian_to_spherical => cartesian_to_spherical_3d_real32
      generic :: cartesian_to_spherical => cartesian_to_spherical_3d_real64
      

      procedure :: spherical_to_cartesian_2d_real32
      procedure :: spherical_to_cartesian_2d_real64
      procedure :: spherical_to_cartesian_3d_real32
      procedure :: spherical_to_cartesian_3d_real64
      
      procedure :: cartesian_to_spherical_2d_real32
      procedure :: cartesian_to_spherical_2d_real64
      procedure :: cartesian_to_spherical_3d_real32
      procedure :: cartesian_to_spherical_3d_real64

      procedure(append_metadata), deferred :: append_metadata
      procedure(get_grid_vars), deferred :: get_grid_vars
      procedure(append_variable_metadata), deferred :: append_variable_metadata
      procedure(generate_file_bounds), deferred :: generate_file_bounds
      procedure(generate_file_corner_bounds), deferred :: generate_file_corner_bounds
      procedure(generate_file_reference2D), deferred :: generate_file_reference2D
      procedure(generate_file_reference3D), deferred :: generate_file_reference3D
      procedure(get_file_format_vars), deferred :: get_file_format_vars
      procedure(decomps_are_equal), deferred :: decomps_are_equal
      procedure(physical_params_are_equal), deferred :: physical_params_are_equal

      procedure :: get_xy_subset
      procedure :: get_xy_mask
      procedure :: destroy
      procedure :: get_obs_time
   end type AbstractGridFactory