C $Header: /home/ubuntu/mnt/e9_copy/MITgcm/eesupp/inc/EEPARAMS.h,v 1.36 2014/02/13 04:10:25 jmc Exp $ C $Name: $ CBOP C !ROUTINE: EEPARAMS.h C !INTERFACE: C include "EEPARAMS.h" C C !DESCRIPTION: C *==========================================================* C | EEPARAMS.h | C *==========================================================* C | Parameters for "execution environemnt". These are used | C | by both the particular numerical model and the execution | C | environment support routines. | C *==========================================================* CEOP C ======== EESIZE.h ======================================== C MAX_LEN_MBUF :: Default message buffer max. size C MAX_LEN_FNAM :: Default file name max. size C MAX_LEN_PREC :: Default rec len for reading "parameter" files INTEGER MAX_LEN_MBUF PARAMETER ( MAX_LEN_MBUF = 512 ) INTEGER MAX_LEN_FNAM PARAMETER ( MAX_LEN_FNAM = 512 ) INTEGER MAX_LEN_PREC PARAMETER ( MAX_LEN_PREC = 200 ) C MAX_NO_THREADS :: Maximum number of threads allowed. CC MAX_NO_PROCS :: Maximum number of processes allowed. CC MAX_NO_BARRIERS :: Maximum number of distinct thread "barriers" INTEGER MAX_NO_THREADS PARAMETER ( MAX_NO_THREADS = 4 ) c INTEGER MAX_NO_PROCS c PARAMETER ( MAX_NO_PROCS = 70000 ) c INTEGER MAX_NO_BARRIERS c PARAMETER ( MAX_NO_BARRIERS = 1 ) C Particularly weird and obscure voodoo numbers C lShare :: This wants to be the length in C [148]-byte words of the size of C the address "window" that is snooped C on an SMP bus. By separating elements in C the global sum buffer we can avoid generating C extraneous invalidate traffic between C processors. The length of this window is usually C a cache line i.e. small O(64 bytes). C The buffer arrays are usually short arrays C and are declared REAL ARRA(lShare[148],LBUFF). C Setting lShare[148] to 1 is like making these arrays C one dimensional. INTEGER cacheLineSize INTEGER lShare1 INTEGER lShare4 INTEGER lShare8 PARAMETER ( cacheLineSize = 256 ) PARAMETER ( lShare1 = cacheLineSize ) PARAMETER ( lShare4 = cacheLineSize/4 ) PARAMETER ( lShare8 = cacheLineSize/8 ) CC MAX_VGS :: Maximum buffer size for Global Vector Sum c INTEGER MAX_VGS c PARAMETER ( MAX_VGS = 8192 ) C ======== EESIZE.h ======================================== C Symbolic values C precXXXX :: precision used for I/O INTEGER precFloat32 PARAMETER ( precFloat32 = 32 ) INTEGER precFloat64 PARAMETER ( precFloat64 = 64 ) C Real-type constant for some frequently used simple number (0,1,2,1/2): _RS zeroRS, oneRS, twoRS, halfRS PARAMETER ( zeroRS = 0.0 _d 0 , oneRS = 1.0 _d 0 ) PARAMETER ( twoRS = 2.0 _d 0 , halfRS = 0.5 _d 0 ) _RL zeroRL, oneRL, twoRL, halfRL PARAMETER ( zeroRL = 0.0 _d 0 , oneRL = 1.0 _d 0 ) PARAMETER ( twoRL = 2.0 _d 0 , halfRL = 0.5 _d 0 ) C UNSET_xxx :: Used to indicate variables that have not been given a value Real*8 UNSET_FLOAT8 PARAMETER ( UNSET_FLOAT8 = 1.234567D5 ) Real*4 UNSET_FLOAT4 PARAMETER ( UNSET_FLOAT4 = 1.234567E5 ) _RL UNSET_RL PARAMETER ( UNSET_RL = 1.234567D5 ) _RS UNSET_RS PARAMETER ( UNSET_RS = 1.234567D5 ) INTEGER UNSET_I PARAMETER ( UNSET_I = 123456789 ) C debLevX :: used to decide when to print debug messages INTEGER debLevZero INTEGER debLevA, debLevB, debLevC, debLevD, debLevE PARAMETER ( debLevZero=0 ) PARAMETER ( debLevA=1 ) PARAMETER ( debLevB=2 ) PARAMETER ( debLevC=3 ) PARAMETER ( debLevD=4 ) PARAMETER ( debLevE=5 ) C SQUEEZE_RIGHT :: Flag indicating right blank space removal C from text field. C SQUEEZE_LEFT :: Flag indicating left blank space removal C from text field. C SQUEEZE_BOTH :: Flag indicating left and right blank C space removal from text field. C PRINT_MAP_XY :: Flag indicating to plot map as XY slices C PRINT_MAP_XZ :: Flag indicating to plot map as XZ slices C PRINT_MAP_YZ :: Flag indicating to plot map as YZ slices C commentCharacter :: Variable used in column 1 of parameter C files to indicate comments. C INDEX_I :: Variable used to select an index label C INDEX_J for formatted input parameters. C INDEX_K C INDEX_NONE CHARACTER*(*) SQUEEZE_RIGHT PARAMETER ( SQUEEZE_RIGHT = 'R' ) CHARACTER*(*) SQUEEZE_LEFT PARAMETER ( SQUEEZE_LEFT = 'L' ) CHARACTER*(*) SQUEEZE_BOTH PARAMETER ( SQUEEZE_BOTH = 'B' ) CHARACTER*(*) PRINT_MAP_XY PARAMETER ( PRINT_MAP_XY = 'XY' ) CHARACTER*(*) PRINT_MAP_XZ PARAMETER ( PRINT_MAP_XZ = 'XZ' ) CHARACTER*(*) PRINT_MAP_YZ PARAMETER ( PRINT_MAP_YZ = 'YZ' ) CHARACTER*(*) commentCharacter PARAMETER ( commentCharacter = '#' ) INTEGER INDEX_I INTEGER INDEX_J INTEGER INDEX_K INTEGER INDEX_NONE PARAMETER ( INDEX_I = 1, & INDEX_J = 2, & INDEX_K = 3, & INDEX_NONE = 4 ) C EXCH_IGNORE_CORNERS :: Flag to select ignoring or C EXCH_UPDATE_CORNERS updating of corners during an edge exchange. INTEGER EXCH_IGNORE_CORNERS INTEGER EXCH_UPDATE_CORNERS PARAMETER ( EXCH_IGNORE_CORNERS = 0, & EXCH_UPDATE_CORNERS = 1 ) C FORWARD_SIMULATION C REVERSE_SIMULATION C TANGENT_SIMULATION INTEGER FORWARD_SIMULATION INTEGER REVERSE_SIMULATION INTEGER TANGENT_SIMULATION PARAMETER ( FORWARD_SIMULATION = 0, & REVERSE_SIMULATION = 1, & TANGENT_SIMULATION = 2 ) C-- COMMON /EEPARAMS_L/ Execution environment public logical variables. C eeBootError :: Flags indicating error during multi-processing C eeEndError :: initialisation and termination. C fatalError :: Flag used to indicate that the model is ended with an error C debugMode :: controls printing of debug msg (sequence of S/R calls). C useSingleCpuIO :: When useSingleCpuIO is set, MDS_WRITE_FIELD outputs from C master MPI process only. -- NOTE: read from main parameter C file "data" and not set until call to INI_PARMS. C useSingleCpuInput :: When useSingleCpuInput is set, EXF_INTERP_READ C reads forcing files from master MPI process only. C -- NOTE: read from main parameter file "data" C and defaults to useSingleCpuInput = useSingleCpuIO C printMapIncludesZeros :: Flag that controls whether character constant C map code ignores exact zero values. C useCubedSphereExchange :: use Cubed-Sphere topology domain. C useCoupler :: use Coupler for a multi-components set-up. C useNEST_PARENT :: use Parent Nesting interface (pkg/nest_parent) C useNEST_CHILD :: use Child Nesting interface (pkg/nest_child) C useOASIS :: use OASIS-coupler for a multi-components set-up. COMMON /EEPARAMS_L/ c & eeBootError, fatalError, eeEndError, & eeBootError, eeEndError, fatalError, debugMode, & useSingleCpuIO, useSingleCpuInput, printMapIncludesZeros, & useCubedSphereExchange, useCoupler, & useNEST_PARENT, useNEST_CHILD, useOASIS, & useSETRLSTK, useSIGREG LOGICAL eeBootError LOGICAL eeEndError LOGICAL fatalError LOGICAL debugMode LOGICAL useSingleCpuIO LOGICAL useSingleCpuInput LOGICAL printMapIncludesZeros LOGICAL useCubedSphereExchange LOGICAL useCoupler LOGICAL useNEST_PARENT LOGICAL useNEST_CHILD LOGICAL useOASIS LOGICAL useSETRLSTK LOGICAL useSIGREG C-- COMMON /EPARAMS_I/ Execution environment public integer variables. C errorMessageUnit :: Fortran IO unit for error messages C standardMessageUnit :: Fortran IO unit for informational messages C maxLengthPrt1D :: maximum length for printing (to Std-Msg-Unit) 1-D array C scrUnit1 :: Scratch file 1 unit number C scrUnit2 :: Scratch file 2 unit number C eeDataUnit :: Unit # for reading "execution environment" parameter file C modelDataUnit :: Unit number for reading "model" parameter file. C numberOfProcs :: Number of processes computing in parallel C pidIO :: Id of process to use for I/O. C myBxLo, myBxHi :: Extents of domain in blocks in X and Y C myByLo, myByHi :: that each threads is responsble for. C myProcId :: My own "process" id. C myPx :: My X coord on the proc. grid. C myPy :: My Y coord on the proc. grid. C myXGlobalLo :: My bottom-left (south-west) x-index global domain. C The x-coordinate of this point in for example m or C degrees is *not* specified here. A model needs to C provide a mechanism for deducing that information C if it is needed. C myYGlobalLo :: My bottom-left (south-west) y-index in global domain. C The y-coordinate of this point in for example m or C degrees is *not* specified here. A model needs to C provide a mechanism for deducing that information C if it is needed. C nThreads :: No. of threads C nTx, nTy :: No. of threads in X and in Y C This assumes a simple cartesian gridding of the threads C which is not required elsewhere but that makes it easier C ioErrorCount :: IO Error Counter. Set to zero initially and increased C by one every time an IO error occurs. COMMON /EEPARAMS_I/ & errorMessageUnit, standardMessageUnit, maxLengthPrt1D, & scrUnit1, scrUnit2, eeDataUnit, modelDataUnit, & numberOfProcs, pidIO, myProcId, & myPx, myPy, myXGlobalLo, myYGlobalLo, nThreads, & myBxLo, myBxHi, myByLo, myByHi, & nTx, nTy, ioErrorCount INTEGER errorMessageUnit INTEGER standardMessageUnit INTEGER maxLengthPrt1D INTEGER scrUnit1 INTEGER scrUnit2 INTEGER eeDataUnit INTEGER modelDataUnit INTEGER ioErrorCount(MAX_NO_THREADS) INTEGER myBxLo(MAX_NO_THREADS) INTEGER myBxHi(MAX_NO_THREADS) INTEGER myByLo(MAX_NO_THREADS) INTEGER myByHi(MAX_NO_THREADS) INTEGER myProcId INTEGER myPx INTEGER myPy INTEGER myXGlobalLo INTEGER myYGlobalLo INTEGER nThreads INTEGER nTx INTEGER nTy INTEGER numberOfProcs INTEGER pidIO CEH3 ;;; Local Variables: *** CEH3 ;;; mode:fortran *** CEH3 ;;; End: ***