Back to home page

MITgcm

 
 

    


File indexing completed on 2021-03-12 06:11:03 UTC

view on githubraw file Latest commit fdf5fb6a on 2021-02-21 02:42:37 UTC
5ec3834826 Jean*0001 #include "PACKAGES_CONFIG.h"
                0002 #include "CPP_OPTIONS.h"
                0003 
e9e5c3cd18 Ed H*0004 CBOP
f4a7634227 Alis*0005 C     !ROUTINE: INI_MODEL_IO
ef1e764710 Ed H*0006 
e9e5c3cd18 Ed H*0007 C     !INTERFACE:
f4a7634227 Alis*0008       SUBROUTINE INI_MODEL_IO( myThid )
                0009 
9fafc42509 Jean*0010 C     !DESCRIPTION:
c74c95df5c Jean*0011 C     Initialisation and setting of I/O:
                0012 C     - Check size and initialise global I/O buffer
                0013 C     - Initialise flags for pickup and for mdsio/rw.
                0014 C     - Do MNC model-IO initialisation
                0015 C     - Do Monitor-IO initialisation
5ec3834826 Jean*0016 
ef1e764710 Ed H*0017 C     !USES:
5ec3834826 Jean*0018       IMPLICIT NONE
                0019 #include "SIZE.h"
5ba1ba83f0 Ed H*0020 #include "EEPARAMS.h"
45a443d2a4 Jean*0021 #include "EESUPPORT.h"
5ba1ba83f0 Ed H*0022 #include "PARAMS.h"
9fafc42509 Jean*0023 #include "RESTART.h"
ab69c6018d Jean*0024 #ifdef ALLOW_EXCH2
1cc6effca6 Jean*0025 # include "W2_EXCH2_SIZE.h"
ab69c6018d Jean*0026 # include "W2_EXCH2_TOPOLOGY.h"
d19b47d96d Jean*0027 # include "W2_EXCH2_PARAMS.h"
ab69c6018d Jean*0028 #endif /* ALLOW_EXCH2 */
d19b47d96d Jean*0029 #include "EEBUFF_SCPU.h"
5ec3834826 Jean*0030 
f4a7634227 Alis*0031 C     !INPUT/OUTPUT PARAMETERS:
3a4af95da6 Jean*0032 C     myThid :: my Thread Id number
5ec3834826 Jean*0033       INTEGER myThid
3a4af95da6 Jean*0034 
45a443d2a4 Jean*0035 C     !FUNCTIONS
                0036       INTEGER  ILNBLNK
                0037       EXTERNAL ILNBLNK
                0038 
3a4af95da6 Jean*0039 C     !LOCAL VARIABLES:
f84aaa453a Jean*0040 C     msgBuf :: Informational/error message buffer
3a4af95da6 Jean*0041       CHARACTER*(MAX_LEN_MBUF) msgBuf
45a443d2a4 Jean*0042       CHARACTER*(MAX_LEN_FNAM) namBuf
d19b47d96d Jean*0043       INTEGER i, iL, pIL
                0044       LOGICAL useGlobalBuff
ab69c6018d Jean*0045 #ifdef ALLOW_EXCH2
                0046       INTEGER xySize
                0047 #endif /* ALLOW_EXCH2 */
e9e5c3cd18 Ed H*0048 CEOP
5ec3834826 Jean*0049 
3a4af95da6 Jean*0050 C-    Safety check:
d917b7e38b Jean*0051       IF ( nPx*nPy.NE.1 .AND. globalFiles
                0052      &                  .AND. .NOT.useSingleCpuIO ) THEN
fb6a03c987 Jean*0053         _BEGIN_MASTER( myThid )
3a4af95da6 Jean*0054 c       WRITE(msgBuf,'(2A)')
                0055 c    &   'INI_MODEL_IO: globalFiles=TRUE is not safe',
                0056 c    &   ' in Multi-processors (MPI) run'
                0057 c       CALL PRINT_ERROR( msgBuf , myThid)
                0058 c       WRITE(msgBuf,'(2A)')
                0059 c    &   'INI_MODEL_IO: use instead "useSingleCpuIO=.TRUE."'
                0060 c       CALL PRINT_ERROR( msgBuf , myThid)
                0061 c       STOP 'ABNORMAL END: S/R INI_MODEL_IO'
                0062 C------
                0063 C   GlobalFiles option with Multi-processors execution (with MPI) is not
                0064 C   safe: dependending on the platform & compiler, it may produce:
9fafc42509 Jean*0065 C    - incomplete output files (wrong size)
3a4af95da6 Jean*0066 C    - wrong isolated values in some output files
                0067 C    - missing tiles (all zeros) in some output files.
9fafc42509 Jean*0068 C   A safe alternative is to set "useSingleCpuIO=.TRUE." in file "data",
3a4af95da6 Jean*0069 C     namelist PARAM01  (and to keep the default value of globalFiles=FALSE)
9fafc42509 Jean*0070 C   or if you are really sure that the globalFile works well on our platform
3a4af95da6 Jean*0071 C     & compiler, comment out the above "stop"
                0072 C-----
                0073         WRITE(msgBuf,'(2A)')
                0074      &   '** WARNING ** INI_MODEL_IO: globalFiles=TRUE is not safe',
                0075      &   ' in Multi-processors (MPI) run'
                0076         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
20b01888fd Jean*0077      &                      SQUEEZE_RIGHT, myThid )
3a4af95da6 Jean*0078         WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
                0079      &   ' use instead "useSingleCpuIO=.TRUE."'
                0080         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
20b01888fd Jean*0081      &                      SQUEEZE_RIGHT, myThid )
fb6a03c987 Jean*0082         _END_MASTER( myThid )
3a4af95da6 Jean*0083       ENDIF
                0084 
ab69c6018d Jean*0085 C-    Check size of IO buffers:
d19b47d96d Jean*0086       useGlobalBuff = useSingleCpuIO
                0087 #ifdef CG2D_SINGLECPU_SUM
                0088       useGlobalBuff = .TRUE.
                0089 #endif /* CG2D_SINGLECPU_SUM */
                0090 #ifdef ALLOW_EXCH2
10c5554546 Jean*0091       IF ( useGlobalBuff ) THEN
ab69c6018d Jean*0092         xySize = exch2_global_Nx*exch2_global_Ny
d19b47d96d Jean*0093 #ifndef CG2D_SINGLECPU_SUM
                0094         IF ( .NOT.W2_useE2ioLayOut ) xySize = Nx*Ny
                0095 #endif /* ndef CG2D_SINGLECPU_SUM */
ab69c6018d Jean*0096         IF ( xySize.GT.W2_ioBufferSize ) THEN
d19b47d96d Jean*0097           WRITE(msgBuf,'(A,2(I10,A))')
                0098      &       'W2_ioBufferSize=', W2_ioBufferSize,
                0099      &       ' <', xySize, ' = Size of Global 2-D map'
ab69c6018d Jean*0100           CALL PRINT_ERROR( msgBuf, myThid )
d19b47d96d Jean*0101           WRITE(msgBuf,'(2A)')
                0102      &       'INI_MODEL_IO: increase W2_ioBufferSize',
                0103      &       ' in "W2_EXCH2_SIZE.h" + recompile'
ab69c6018d Jean*0104           CALL PRINT_ERROR( msgBuf, myThid )
                0105           STOP 'ABNORMAL END: S/R INI_MODEL_IO (buffer size)'
                0106         ENDIF
                0107       ENDIF
10c5554546 Jean*0108 #endif /* ALLOW_EXCH2 */
3a4af95da6 Jean*0109 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0110 
fb6a03c987 Jean*0111 C-    Only Master-thread updates IO-parameter in Common blocks:
                0112       _BEGIN_MASTER( myThid )
                0113 
9fafc42509 Jean*0114 C-    Initialise AB starting level
                0115 C      notes: those could be modified when reading a pickup that does
c74c95df5c Jean*0116 C             not correspond to what is actually needed.
9fafc42509 Jean*0117       tempStartAB = nIter0
                0118       saltStartAB = nIter0
                0119       mom_StartAB = nIter0
                0120       nHydStartAB = nIter0
fdf5fb6af0 Jean*0121       qHydStartAB = nIter0
9fafc42509 Jean*0122       IF ( startFromPickupAB2 ) tempStartAB = MIN( nIter0 , 1 )
                0123       saltStartAB = tempStartAB
                0124       mom_StartAB = tempStartAB
cba4501825 Jean*0125       nHydStartAB = tempStartAB
fdf5fb6af0 Jean*0126       qHydStartAB = tempStartAB
cba4501825 Jean*0127       dPhiNHstatus= 0
9fafc42509 Jean*0128 
                0129 C-    Initialise Alternating pickup-suffix
                0130       nCheckLev         = 1
                0131       checkPtSuff(1)    = 'ckptA'
                0132       checkPtSuff(2)    = 'ckptB'
                0133 
137309e213 Jean*0134 C-    Flags specific to RW and MDSIO (and PLOT_FIELDS)
9fafc42509 Jean*0135 
435d596cb2 Jean*0136 C-    now we make local directories with myProcessStr appended.
45a443d2a4 Jean*0137       IF ( mdsioLocalDir .NE. ' ' ) THEN
4916e53cda Jean*0138         iL = ILNBLNK( mdsioLocalDir )
435d596cb2 Jean*0139 C     Local dir name should not be too long to fit MAX_LEN_FNAM
                0140 C     after adding file-name: set a limit to half MAX_LEN_FNAM
                0141         IF ( 2*IL.GT.MAX_LEN_FNAM ) THEN
                0142           WRITE(msgBuf,'(2A,I4,A)') 'INI_MODEL_IO: ',
                0143      &    'Too long (IL=',IL,') mdsioLocalDir:'
                0144           CALL PRINT_ERROR( msgBuf, myThid )
                0145           WRITE(errorMessageUnit,'(3A)')
                0146      &       'localDir: >',mdsioLocalDir(1:IL),'<'
                0147           STOP 'ABNORMAL END: S/R INI_MODEL_IO (mdsioLocalDir)'
                0148         ENDIF
b9dadda204 Mart*0149         i = ILNBLNK( myProcessStr )
b27db18f77 Jean*0150         WRITE(namBuf,'(4A)')
b9dadda204 Mart*0151      &         ' mkdir -p ', mdsioLocalDir(1:iL),myProcessStr(1:i),' '
4916e53cda Jean*0152         pIL = 1 + ILNBLNK( namBuf )
b27db18f77 Jean*0153 #ifdef HAVE_SYSTEM
4916e53cda Jean*0154         WRITE(standardMessageUnit,'(3A)')
                0155      &  '==> SYSTEM CALL (from INI_MODEL_IO): >',namBuf(1:pIL),'<'
                0156         CALL SYSTEM( namBuf(1:pIL) )
b27db18f77 Jean*0157 #else
                0158         WRITE(msgBuf,'(3A)') '** WARNING ** INI_MODEL_IO: ',
                0159      &   'SYSTEM call missing (HAVE_SYSTEM undef) for mdsioLocalDir'
                0160         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0161      &                      SQUEEZE_RIGHT, myThid )
                0162         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0163      &                      SQUEEZE_RIGHT, myThid )
                0164         WRITE(errorMessageUnit,'(4A)') '** WARNING ** INI_MODEL_IO: ',
                0165      &   'Skip command: >',namBuf(1:pIL),'<'
                0166 #endif
                0167         WRITE(msgBuf,'(A)') ' '
                0168         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0169      &                      SQUEEZE_RIGHT, myThid )
4916e53cda Jean*0170         namBuf(1:iL) = mdsioLocalDir(1:iL)
b9dadda204 Mart*0171         WRITE(mdsioLocalDir,'(3A)') namBuf(1:iL),myProcessStr(1:i),'/'
45a443d2a4 Jean*0172       ENDIF
                0173 
13724ad946 Jean*0174 C-    Initialise MFLDS variables in common block
                0175       CALL READ_MFLDS_INIT( myThid )
                0176 
f4a7634227 Alis*0177 C     Set globalFiles flag for READ_WRITE_FLD package
                0178       CALL SET_WRITE_GLOBAL_FLD( globalFiles )
                0179 C     Set globalFiles flag for READ_WRITE_REC package
                0180       CALL SET_WRITE_GLOBAL_REC( globalFiles )
20b01888fd Jean*0181 C     Set globalFiles flag for READ_WRITE_SEC package
                0182       IF ( useOBCS .AND. globalFiles ) THEN
                0183         WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
                0184      &   ' use tiled-files to write sections (for OBCS)'
                0185         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0186      &                      SQUEEZE_RIGHT, myThid )
                0187         CALL SET_WRITE_GLOBAL_SEC( .FALSE. )
                0188       ELSE
                0189         CALL SET_WRITE_GLOBAL_SEC( globalFiles )
                0190       ENDIF
f4a7634227 Alis*0191 
fb6a03c987 Jean*0192       _END_MASTER( myThid )
                0193 C-    Everyone else must wait for the IO-parameters to be set
                0194       _BARRIER
5ec3834826 Jean*0195 
d19b47d96d Jean*0196 C-    Global IO-buffers initialisation
                0197       IF ( useGlobalBuff ) THEN
ab69c6018d Jean*0198         _BEGIN_MASTER( myThid )
                0199         DO i=1,xyBuffer_size
                0200           xy_buffer_r8(i) = 0. _d 0
                0201           xy_buffer_r4(i) = 0.
                0202         ENDDO
                0203         _END_MASTER( myThid )
                0204       ENDIF
                0205 
3a4af95da6 Jean*0206 C-    MNC model-io initialisation
                0207 
                0208 #ifdef ALLOW_MNC
                0209       IF (useMNC) THEN
c74c95df5c Jean*0210 C-    Initialize look-up tables for MNC
                0211         CALL MNC_INIT( myThid )
                0212         CALL MNC_CW_INIT( sNx,sNy,OLx,OLy,nSx,nSy,nPx,nPy,
                0213      &                    Nr,myThid )
                0214 CEH3       IF ( mnc_echo_gvtypes ) THEN
                0215 CEH3       CALL MNC_CW_DUMP( myThid )
                0216 CEH3       ENDIF
3a4af95da6 Jean*0217 C       Write units/set precision/etc for I/O of variables/arrays
                0218 C       belonging to the core dynamical model
                0219         CALL INI_MNC_VARS( myThid )
2f58e54336 Gael*0220       ENDIF
                0221 #endif /* ALLOW_MNC */
                0222 
186531405c Patr*0223 #ifdef ALLOW_AUTODIFF
b27db18f77 Jean*0224       IF ( useAUTODIFF ) CALL AUTODIFF_INI_MODEL_IO( myThid )
3a4af95da6 Jean*0225 #endif
                0226 
70aa6530a3 Gael*0227 #ifdef ALLOW_PROFILES
69734456d8 Gael*0228       IF ( usePROFILES ) CALL PROFILES_INI_IO( myThid )
                0229 #endif
                0230 
                0231 #ifdef ALLOW_DIAGNOSTICS
                0232       IF ( useDiagnostics ) CALL DIAGNOSTICS_INI_IO( myThid )
70aa6530a3 Gael*0233 #endif
                0234 
c74c95df5c Jean*0235 #ifdef ALLOW_MONITOR
                0236 C--   Initialise MONITOR I/O streams so we can report config. info
                0237       CALL MON_INIT( myThid )
                0238 #endif
                0239 
5ec3834826 Jean*0240 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0241 
                0242       RETURN
                0243       END