!*********************************************************************** !* GNU Lesser General Public License !* !* This file is part of the GFDL Flexible Modeling System (FMS). !* !* FMS is free software: you can redistribute it and/or modify it under !* the terms of the GNU Lesser General Public License as published by !* the Free Software Foundation, either version 3 of the License, or (at !* your option) any later version. !* !* FMS is distributed in the hope that it will be useful, but WITHOUT !* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or !* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License !* for more details. !* !* You should have received a copy of the GNU Lesser General Public !* License along with FMS. If not, see . !*********************************************************************** module mpp_parameter_mod #include implicit none private ! Include variable "version" to be written to log file. #include public version !--- public paramters which is used by mpp_mod and its components. !--- All othere modules should import these parameters from mpp_mod. public :: MAXPES, MPP_VERBOSE, MPP_DEBUG, ALL_PES, ANY_PE, NULL_PE, NOTE, WARNING, FATAL public :: MPP_WAIT, MPP_READY, MAX_CLOCKS, MAX_EVENT_TYPES, MAX_EVENTS, MPP_CLOCK_SYNC public :: MPP_CLOCK_DETAILED, CLOCK_COMPONENT, CLOCK_SUBCOMPONENT, CLOCK_MODULE_DRIVER public :: CLOCK_MODULE, CLOCK_ROUTINE, CLOCK_LOOP, CLOCK_INFRA, MAX_BINS public :: EVENT_ALLREDUCE, EVENT_BROADCAST, EVENT_RECV, EVENT_SEND, EVENT_WAIT public :: EVENT_ALLTOALL, EVENT_TYPE_CREATE, EVENT_TYPE_FREE public :: DEFAULT_TAG public :: COMM_TAG_1, COMM_TAG_2, COMM_TAG_3, COMM_TAG_4 public :: COMM_TAG_5, COMM_TAG_6, COMM_TAG_7, COMM_TAG_8 public :: COMM_TAG_9, COMM_TAG_10, COMM_TAG_11, COMM_TAG_12 public :: COMM_TAG_13, COMM_TAG_14, COMM_TAG_15, COMM_TAG_16 public :: COMM_TAG_17, COMM_TAG_18, COMM_TAG_19, COMM_TAG_20 public :: MPP_FILL_INT, MPP_FILL_FLOAT, MPP_FILL_DOUBLE !--- public paramters which is used by mpp_domains_mod and its components. !--- All othere modules should import these parameters from mpp_domains_mod. public :: GLOBAL_DATA_DOMAIN, CYCLIC_GLOBAL_DOMAIN, BGRID_NE, BGRID_SW, CGRID_NE, CGRID_SW public :: DGRID_NE, DGRID_SW, FOLD_WEST_EDGE, FOLD_EAST_EDGE, FOLD_SOUTH_EDGE, FOLD_NORTH_EDGE public :: WUPDATE, EUPDATE, SUPDATE, NUPDATE, XUPDATE, YUPDATE, BITWISE_EXACT_SUM, NON_BITWISE_EXACT_SUM public :: MPP_DOMAIN_TIME, WEST, EAST, SOUTH, NORTH, SCALAR_BIT, SCALAR_PAIR, BITWISE_EFP_SUM public :: NORTH_EAST, SOUTH_EAST, SOUTH_WEST, NORTH_WEST public :: AGRID, GLOBAL, CYCLIC, DOMAIN_ID_BASE, CENTER, CORNER public :: MAX_DOMAIN_FIELDS, MAX_TILES public :: ZERO, NINETY, MINUS_NINETY, ONE_HUNDRED_EIGHTY public :: NONBLOCK_UPDATE_TAG, EDGEUPDATE, EDGEONLY, NONSYMEDGEUPDATE, NONSYMEDGE !--- public paramters which is used by mpp_domains_mod and its components. !--- All othere modules should import these parameters from mpp_io_mod. public :: MPP_WRONLY, MPP_RDONLY, MPP_APPEND, MPP_OVERWR, MPP_ASCII, MPP_IEEE32 public :: MPP_NATIVE, MPP_NETCDF, MPP_SEQUENTIAL, MPP_DIRECT, MPP_SINGLE, MPP_MULTI public :: MPP_DELETE, MPP_COLLECT, NULLUNIT, NULLTIME public :: MAX_FILE_SIZE, ROOT_GLOBAL, GLOBAL_ROOT_ONLY !--- The following paramters are used by mpp_mod and its components. integer, parameter :: MAXPES=2048 !used for dimensioning stuff that might be indexed by pe integer, parameter :: MPP_VERBOSE=1, MPP_DEBUG=2 integer, parameter :: ALL_PES=-1, ANY_PE=-2, NULL_PE=-3 integer, parameter :: NOTE=0, WARNING=1, FATAL=2 integer, parameter :: MAX_CLOCKS=400, MAX_EVENT_TYPES=5, MAX_EVENTS=40000 integer, parameter :: EVENT_ALLREDUCE=1, EVENT_BROADCAST=2, EVENT_RECV=3, EVENT_SEND=4, EVENT_WAIT=5 integer, parameter :: EVENT_ALLTOALL=6 integer, parameter :: EVENT_TYPE_CREATE=7, EVENT_TYPE_FREE=8 integer, parameter :: MPP_CLOCK_SYNC=1, MPP_CLOCK_DETAILED=2 integer :: DEFAULT_TAG = 1 !--- implimented to centralize _FILL_ values for land_model.F90 into mpp_mod !------- instead of multiple includes of netcdf.inc and manual assignments integer(INT_KIND) , parameter :: MPP_FILL_INT = -2147483647 !NF_FILL_INT real(DOUBLE_KIND) , parameter :: MPP_FILL_DOUBLE = 9.9692099683868690e+36 !NF_FILL_DOUBLE real(FLOAT_KIND) , parameter :: MPP_FILL_FLOAT = 9.9692099683868690e+36 !NF_FILL_DOUBLE !--- predefined clock granularities, but you can use any integer !--- using CLOCK_LOOP and above may distort coarser-grain measurements integer, parameter :: CLOCK_COMPONENT=1 !component level, e.g model, exchange integer, parameter :: CLOCK_SUBCOMPONENT=11 !top level within a model component, e.g dynamics, physics integer, parameter :: CLOCK_MODULE_DRIVER=21 !module driver level, e.g adriver that calls multiple !related physics routines integer, parameter :: CLOCK_MODULE=31 !module level, e.g main subroutine of a physics module integer, parameter :: CLOCK_ROUTINE=41 !level of individual subroutine or function integer, parameter :: CLOCK_LOOP=51 !loops or blocks within a routine integer, parameter :: CLOCK_INFRA=61 !infrastructure level, e.g halo update integer, parameter :: MAX_BINS=20 integer(LONG_KIND), parameter :: MPP_WAIT=-1, MPP_READY=-2 !--- The following paramters are used by mpp_domains_mod and its components. integer, parameter :: GLOBAL=0, CYCLIC=1 integer, parameter :: WEST=2, EAST=3, SOUTH=4, NORTH=5, SCALAR_BIT=6, CENTER=7, CORNER=8 integer, parameter :: SOUTH_WEST=7, SOUTH_EAST=8, NORTH_WEST=9, NORTH_EAST=10 integer, parameter :: EDGEONLY = 11 integer, parameter :: NONSYMEDGE = 12 integer, parameter :: SEND=1, RECV=2 integer, parameter :: GLOBAL_DATA_DOMAIN=2**GLOBAL, CYCLIC_GLOBAL_DOMAIN=2**CYCLIC integer, parameter :: AGRID=0, BGRID=1, CGRID=2, DGRID=3 integer, parameter :: BGRID_NE=BGRID+2**NORTH+2**EAST integer, parameter :: BGRID_SW=BGRID+2**SOUTH+2**WEST integer, parameter :: CGRID_NE=CGRID+2**NORTH+2**EAST integer, parameter :: CGRID_SW=CGRID+2**SOUTH+2**WEST integer, parameter :: DGRID_NE=DGRID+2**NORTH+2**EAST integer, parameter :: DGRID_SW=DGRID+2**SOUTH+2**WEST integer, parameter :: FOLD_WEST_EDGE = 2**WEST, FOLD_EAST_EDGE = 2**EAST integer, parameter :: FOLD_SOUTH_EDGE=2**SOUTH, FOLD_NORTH_EDGE=2**NORTH integer, parameter :: WUPDATE=2**WEST, EUPDATE=2**EAST, SUPDATE=2**SOUTH, NUPDATE=2**NORTH integer, parameter :: XUPDATE=WUPDATE+EUPDATE, YUPDATE=SUPDATE+NUPDATE, SCALAR_PAIR=2**SCALAR_BIT integer, parameter :: EDGEUPDATE=2**EDGEONLY, NONSYMEDGEUPDATE=2**NONSYMEDGE integer, parameter :: ZERO=0, NINETY=90, MINUS_NINETY=-90, ONE_HUNDRED_EIGHTY=180 integer, parameter :: NONBLOCK_UPDATE_TAG = 2 ! DOMAIN_ID_BASE acts as a counter increment for domains as they are defined. It's used in ! combination with the flag parameter defined above to create a unique identifier for ! each Domain+flags combination. Therefore, the value of any flag must not exceed DOMAIN_ID_BASE. ! integer(LONG_KIND), parameter :: DOMAIN_ID_BASE=INT( 2**(4*LONG_KIND),KIND=LONG_KIND ) integer(LONG_KIND), parameter :: DOMAIN_ID_BASE=Z'0000000100000000' ! Workaround for 64bit init problem integer, parameter :: NON_BITWISE_EXACT_SUM=0 integer, parameter :: BITWISE_EXACT_SUM=1 integer, parameter :: BITWISE_EFP_SUM=2 integer, parameter :: MPP_DOMAIN_TIME=MPP_DEBUG+1 integer, parameter :: MAX_DOMAIN_FIELDS=100 integer, parameter :: MAX_TILES=10 !--- The following paramters are used by mpp_io_mod and its components. integer, parameter :: MPP_WRONLY=100, MPP_RDONLY=101, MPP_APPEND=102, MPP_OVERWR=103 !action on open integer, parameter :: MPP_ASCII=200, MPP_IEEE32=201, MPP_NATIVE=202, MPP_NETCDF=203 !format integer, parameter :: MPP_SEQUENTIAL=300, MPP_DIRECT=301 !access integer, parameter :: MPP_SINGLE=400, MPP_MULTI=401 !threading, fileset integer, parameter :: MPP_DELETE=501, MPP_COLLECT=502 !action on close integer, parameter :: NULLUNIT=-1 !returned by PEs not participating in !IO after a collective call with threading !equal to MPP_SINGLE !--- unique tag used in FMS integer, parameter :: COMM_TAG_1 = 1, COMM_TAG_2 = 2, COMM_TAG_3 = 3, COMM_TAG_4 = 4 integer, parameter :: COMM_TAG_5 = 5, COMM_TAG_6 = 6, COMM_TAG_7 = 7, COMM_TAG_8 = 8 integer, parameter :: COMM_TAG_9 = 9, COMM_TAG_10 = 10, COMM_TAG_11 = 11, COMM_TAG_12 = 12 integer, parameter :: COMM_TAG_13 = 13, COMM_TAG_14 = 14, COMM_TAG_15 = 15, COMM_TAG_16 = 16 integer, parameter :: COMM_TAG_17 = 17, COMM_TAG_18 = 18, COMM_TAG_19 = 19, COMM_TAG_20 = 20 integer, parameter :: ROOT_GLOBAL = 9 integer, parameter :: GLOBAL_ROOT_ONLY = 2**ROOT_GLOBAL real(DOUBLE_KIND), parameter :: NULLTIME=-1. #ifdef LARGE_FILE integer(LONG_KIND), parameter :: MAX_FILE_SIZE = 4294967295 #else integer(LONG_KIND), parameter :: MAX_FILE_SIZE = 2147483647 #endif !##################################################################### end module mpp_parameter_mod