Back to OASIS3-MCT home

Global structures in oasis3-mct/lib/psmile/src :

====================================
mod_oasis_grid.F90 :
definition of the global structure prism_grid
====================================

  public :: prism_grid_type
  integer(kind=ip_intwp_p),parameter :: mgrid = 100

  type prism_grid_type
     character(len=ic_med)  :: gridname   !< grid name
     integer(kind=ip_i4_p)  :: partid     !< partition ID
    ! Warning: nx et ny are the global dimensions of the grid while lon and lat are local arrays
     integer(kind=ip_i4_p)  :: nx         !< global nx size
     integer(kind=ip_i4_p)  :: ny         !< global ny size
     integer(kind=ip_i4_p)  :: nc         !< number of corners per gridcell
     logical                :: grid_set   !< flag to track user calls for grid
     logical                :: corner_set !< flag to track user calls for corner
     logical                :: angle_set  !< flag to track user calls for angle
     logical                :: area_set   !< flag to track user calls for area
     logical                :: mask_set   !< flag to track user calls for mask
     logical                :: written    !< flag to indicate grid has been written
     logical                :: terminated !< flag to indicate user grid calls complete
     real(kind=ip_realwp_p),allocatable :: lon(:,:)     !< user specified longitudes
     real(kind=ip_realwp_p),allocatable :: lat(:,:)     !< user specified latitudes
     real(kind=ip_realwp_p),allocatable :: clon(:,:,:)  !< user specified corner longitudes
     real(kind=ip_realwp_p),allocatable :: clat(:,:,:)  !< user specified corner latitudes
     real(kind=ip_realwp_p),allocatable :: angle(:,:)   !< user specified angle
     real(kind=ip_realwp_p),allocatable :: area(:,:)    !< user specified area
     integer(kind=ip_i4_p) ,allocatable :: mask(:,:)    !< user specified mask
  end type prism_grid_type

  integer(kind=ip_intwp_p),public,save :: prism_ngrid = 0  !< counter for grids
  type(prism_grid_type),public,save :: prism_grid(mgrid)   !< array of grid datatypes

====================================
mod_oasis_part.F90 :
definition of the global structure prism_part
====================================


   integer(kind=ip_intwp_p),parameter :: mpart = 100

   !> Partition (decomposition) data for variables
   type prism_part_type
      character(len=ic_lvar2):: partname !< partition name
      type(mct_gsmap)        :: gsmap    !< gsmap on mpi_comm_local
      integer(kind=ip_i4_p)  :: gsize    !< global size of grid
      integer(kind=ip_i4_p)  :: nx       !< global nx size
      integer(kind=ip_i4_p)  :: ny       !< global ny size
      character(len=ic_lvar) :: gridname !< grid name
      integer(kind=ip_i4_p)  :: mpicom   !< mpicom for partition tasks only
      integer(kind=ip_i4_p)  :: npes     !< tasks count associated with partition
      integer(kind=ip_i4_p)  :: rank     !< rank of each task
      type(mct_gsmap)        :: pgsmap   !< same gsmap but on partition mpicom
      !--- temporary storage from def_part inputs ---
      integer(kind=ip_i4_p)  :: ig_size  !< def_part setting
      integer(kind=ip_i4_p),pointer  :: kparal(:)  !< def_part setting
   end type prism_part_type

   integer(kind=ip_intwp_p),public :: prism_npart = 0  !< number of partitions defined
   type(prism_part_type)   ,public :: prism_part(mpart)  !< list of defined partitions

mct_gsmap => GlobalSegMap in m_GlobalSegMap.F90


====================================
mod_oasis_var.F90 :
definition of the global structure prism_var
====================================

  !> Model variable data for model coupling
  type prism_var_type
     character(len=ic_lvar):: name  !< variable name
     integer(kind=ip_i4_p) :: part  !< variable partition
     integer(kind=ip_i4_p) :: ndim  !< rank of variable
     integer(kind=ip_i4_p) :: num   !< size of variable
     integer(kind=ip_i4_p) :: ops   !< input or output
     integer(kind=ip_i4_p) :: type  !< type kind of variable
     integer(kind=ip_i4_p) :: size  !< total size of field
     integer(kind=ip_i4_p) :: ncpl  !< number of namcouple couplers
     integer(kind=ip_i4_p) :: cpl(mvarcpl)  !< list of namcouple couplers
  end type prism_var_type

  integer(kind=ip_intwp_p),public :: prism_nvar = 0    !< number of variables defined
  TYPE(prism_var_type),POINTER,public :: prism_var(:)  !< list of defined variables

====================================
mod_oasis_coupler.F90 :
definition of the global structure prism_coupler
====================================

  !> Router information for rearranging data on tasks
  type prism_router_type
     !--- fixed at initialization ---
     type(mct_router)      :: router     !< router
  end type prism_router_type

  !> Mapper data for interpolating data between grids
  type prism_mapper_type
     !--- fixed at initialization ---
     type(mct_sMatP),pointer :: sMatP(:)  !< stores mapping data such as weights
     integer(kind=ip_i4_p) :: nwgts       !< number of weights in weights file
     character(len=ic_long):: file        !< file to read/write
     character(len=ic_med) :: loc         !< location setting, src or dst model
     character(len=ic_med) :: opt         !< optimization setting, bfb, sum, or opt
     character(len=ic_med) :: optval      !< mct map setting, src or dst, derived from opt
     logical               :: init        !< flag indicating initialization complete
     integer(kind=ip_i4_p) :: spart       !< src partition
     integer(kind=ip_i4_p) :: dpart       !< dst partition
     logical               :: AVred       !< flag indicating AV_ms, AV_md data has been read
     type(mct_aVect)       :: AV_ms       !< stores data for CONSERV for src such as mask and area
     type(mct_aVect)       :: AV_md       !< stores data for CONSERV for dst such as mask and area
  end type prism_mapper_type

  integer(kind=ip_i4_p),public,parameter :: prism_coupler_avsmax=5  !< maximum number of higher order terms in mapping

  !> Coupler data for managing all aspects of coupling in OASIS
  type prism_coupler_type
     !--- fixed at initialization ---
     type(mct_aVect)       :: aVect1   !< primary aVect
     type(mct_aVect)       :: aVect1m  !< extra aVect needed for mapping
     type(mct_aVect)       :: aVect2   !< higher order mapping data
     type(mct_aVect)       :: aVect3   !< higher order mapping data
     type(mct_aVect)       :: aVect4   !< higher order mapping data
     type(mct_aVect)       :: aVect5   !< higher order mapping data
     logical               :: aVon(prism_coupler_avsmax)  !< flags indicating whether aVects 2-5 are active
     character(len=ic_xl)  :: rstfile  !< restart file
     character(len=ic_xl)  :: inpfile  !< input file if data is read
     character(len=ic_xl)  :: fldlist  !< field list
     integer(kind=ip_i4_p) :: nflds    !< number of fields
     integer(kind=ip_i4_p),pointer :: varid(:)    !< varid for each field
     logical               :: valid    !< is this coupler valid
     integer(kind=ip_i4_p) :: namID    !< namcouple ID
     integer(kind=ip_i4_p) :: partID   !< local variable partition ID
     integer(kind=ip_i4_p) :: rpartID  !< router partition ID
     integer(kind=ip_i4_p) :: routerID !< router ID
     integer(kind=ip_i4_p) :: mapperID !< mapper ID
     character(len=ic_med) :: maploc   !< map location setting, src or dst
     integer(kind=ip_i4_p) :: ops      !< namcouple operation (ip_exported,...)
     integer(kind=ip_i4_p) :: comp     !< other model compid to couple
     integer(kind=ip_i4_p) :: tag      !< communcation tag
     integer(kind=ip_i4_p) :: seq      !< sequence number
     integer(kind=ip_i4_p) :: dt       !< coupling period (secs)
     integer(kind=ip_i4_p) :: lag      !< put lag positive is put sooner (secs)
     integer(kind=ip_i4_p) :: maxtime  !< max time for the coupler
     integer(kind=ip_i4_p) :: trans    !< transformation (ip_average,...)
     integer(kind=ip_i4_p) :: conserv  !< conserve operation (ip_cnone,ip_cglobal,...)
     character(len=ic_med) :: consopt  !< conserve option (bfb, opt)
     integer(kind=ip_i4_p) :: getput   !< get/put flag
     logical               :: sndrcv   !< send recv flag
     logical               :: output   !< output flag
     logical               :: input    !< input flag
     logical               :: snddiag  !< diagnose src fields as part of coupling
     logical               :: rcvdiag  !< diagnose rcv fields as part of coupling
     real(kind=ip_double_p):: sndmult  !< send field multiplier term
     real(kind=ip_double_p):: sndadd   !< send field addition term
     real(kind=ip_double_p):: rcvmult  !< receive field multiplier term
     real(kind=ip_double_p):: rcvadd   !< receive field addition term
     !--- time varying info ---
     integer(kind=ip_i4_p) :: ltime    !< time at last coupling
     integer(kind=ip_i4_p),pointer :: avcnt(:)  !< counter for averaging
     integer(kind=ip_i4_p),pointer :: status(:) !< status of variables in coupler
  end type prism_coupler_type

  integer(kind=ip_i4_p)           :: prism_mrouter   !< max routers
  integer(kind=ip_i4_p)           :: prism_nrouter = 0  !< router counter
  type(prism_router_type) ,public, pointer:: prism_router(:)  !< prism_router array

  integer(kind=ip_i4_p)           :: prism_mmapper   !< max mappers
  integer(kind=ip_i4_p)           :: prism_nmapper = 0  !< mapper counter
  type(prism_mapper_type) ,public, pointer :: prism_mapper(:)  !< prism_mapper array

  integer(kind=ip_i4_p)   ,public :: prism_mcoupler  !< max couplers
  type(prism_coupler_type),public, pointer :: prism_coupler_put(:)  !< prism_coupler put array
  type(prism_coupler_type),public, pointer :: prism_coupler_get(:)  !< prism_coupler get array



mct_aVect => AttrVect in mct/m_AttrVect.F90
mct_router => Router in mct/m_Router.F90
mct_sMatP => SparseMatrixPlus
in mct/m_SparseMatrixPlus.F90