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