Back to home page

MITgcm

 
 

    


File indexing completed on 2024-11-26 06:10:21 UTC

view on githubraw file Latest commit 27ce1202 on 2024-11-25 17:10:12 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:
27ce1202c5 Jean*0051 #ifdef FAST_BYTESWAP
                0052       _BEGIN_MASTER( myThid )
                0053        WRITE(msgBuf,'(2A)') 'INI_MODEL_IO: ',
                0054      &   'Option FAST_BYTESWAP (from CPP_EEOPTIONS.h) has been removed'
                0055       CALL PRINT_ERROR( msgBuf, myThid )
                0056       STOP 'ABNORMAL END: S/R INI_MODEL_IO (FAST_BYTESWAP)'
                0057       _END_MASTER( myThid )
                0058 #endif /* FAST_BYTESWAP */
d917b7e38b Jean*0059       IF ( nPx*nPy.NE.1 .AND. globalFiles
                0060      &                  .AND. .NOT.useSingleCpuIO ) THEN
fb6a03c987 Jean*0061         _BEGIN_MASTER( myThid )
3a4af95da6 Jean*0062 c       WRITE(msgBuf,'(2A)')
                0063 c    &   'INI_MODEL_IO: globalFiles=TRUE is not safe',
                0064 c    &   ' in Multi-processors (MPI) run'
                0065 c       CALL PRINT_ERROR( msgBuf , myThid)
                0066 c       WRITE(msgBuf,'(2A)')
                0067 c    &   'INI_MODEL_IO: use instead "useSingleCpuIO=.TRUE."'
                0068 c       CALL PRINT_ERROR( msgBuf , myThid)
                0069 c       STOP 'ABNORMAL END: S/R INI_MODEL_IO'
                0070 C------
                0071 C   GlobalFiles option with Multi-processors execution (with MPI) is not
                0072 C   safe: dependending on the platform & compiler, it may produce:
9fafc42509 Jean*0073 C    - incomplete output files (wrong size)
3a4af95da6 Jean*0074 C    - wrong isolated values in some output files
                0075 C    - missing tiles (all zeros) in some output files.
9fafc42509 Jean*0076 C   A safe alternative is to set "useSingleCpuIO=.TRUE." in file "data",
3a4af95da6 Jean*0077 C     namelist PARAM01  (and to keep the default value of globalFiles=FALSE)
9fafc42509 Jean*0078 C   or if you are really sure that the globalFile works well on our platform
3a4af95da6 Jean*0079 C     & compiler, comment out the above "stop"
                0080 C-----
                0081         WRITE(msgBuf,'(2A)')
                0082      &   '** WARNING ** INI_MODEL_IO: globalFiles=TRUE is not safe',
                0083      &   ' in Multi-processors (MPI) run'
                0084         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
20b01888fd Jean*0085      &                      SQUEEZE_RIGHT, myThid )
3a4af95da6 Jean*0086         WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
                0087      &   ' use instead "useSingleCpuIO=.TRUE."'
                0088         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
20b01888fd Jean*0089      &                      SQUEEZE_RIGHT, myThid )
fb6a03c987 Jean*0090         _END_MASTER( myThid )
3a4af95da6 Jean*0091       ENDIF
                0092 
ab69c6018d Jean*0093 C-    Check size of IO buffers:
d19b47d96d Jean*0094       useGlobalBuff = useSingleCpuIO
                0095 #ifdef CG2D_SINGLECPU_SUM
                0096       useGlobalBuff = .TRUE.
                0097 #endif /* CG2D_SINGLECPU_SUM */
                0098 #ifdef ALLOW_EXCH2
10c5554546 Jean*0099       IF ( useGlobalBuff ) THEN
ab69c6018d Jean*0100         xySize = exch2_global_Nx*exch2_global_Ny
d19b47d96d Jean*0101 #ifndef CG2D_SINGLECPU_SUM
                0102         IF ( .NOT.W2_useE2ioLayOut ) xySize = Nx*Ny
                0103 #endif /* ndef CG2D_SINGLECPU_SUM */
ab69c6018d Jean*0104         IF ( xySize.GT.W2_ioBufferSize ) THEN
d19b47d96d Jean*0105           WRITE(msgBuf,'(A,2(I10,A))')
                0106      &       'W2_ioBufferSize=', W2_ioBufferSize,
                0107      &       ' <', xySize, ' = Size of Global 2-D map'
ab69c6018d Jean*0108           CALL PRINT_ERROR( msgBuf, myThid )
d19b47d96d Jean*0109           WRITE(msgBuf,'(2A)')
                0110      &       'INI_MODEL_IO: increase W2_ioBufferSize',
                0111      &       ' in "W2_EXCH2_SIZE.h" + recompile'
ab69c6018d Jean*0112           CALL PRINT_ERROR( msgBuf, myThid )
                0113           STOP 'ABNORMAL END: S/R INI_MODEL_IO (buffer size)'
                0114         ENDIF
                0115       ENDIF
10c5554546 Jean*0116 #endif /* ALLOW_EXCH2 */
3a4af95da6 Jean*0117 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0118 
fb6a03c987 Jean*0119 C-    Only Master-thread updates IO-parameter in Common blocks:
                0120       _BEGIN_MASTER( myThid )
                0121 
9fafc42509 Jean*0122 C-    Initialise AB starting level
                0123 C      notes: those could be modified when reading a pickup that does
c74c95df5c Jean*0124 C             not correspond to what is actually needed.
9fafc42509 Jean*0125       tempStartAB = nIter0
                0126       saltStartAB = nIter0
                0127       mom_StartAB = nIter0
                0128       nHydStartAB = nIter0
fdf5fb6af0 Jean*0129       qHydStartAB = nIter0
9fafc42509 Jean*0130       IF ( startFromPickupAB2 ) tempStartAB = MIN( nIter0 , 1 )
                0131       saltStartAB = tempStartAB
                0132       mom_StartAB = tempStartAB
cba4501825 Jean*0133       nHydStartAB = tempStartAB
fdf5fb6af0 Jean*0134       qHydStartAB = tempStartAB
cba4501825 Jean*0135       dPhiNHstatus= 0
9fafc42509 Jean*0136 
                0137 C-    Initialise Alternating pickup-suffix
                0138       nCheckLev         = 1
                0139       checkPtSuff(1)    = 'ckptA'
                0140       checkPtSuff(2)    = 'ckptB'
                0141 
137309e213 Jean*0142 C-    Flags specific to RW and MDSIO (and PLOT_FIELDS)
9fafc42509 Jean*0143 
435d596cb2 Jean*0144 C-    now we make local directories with myProcessStr appended.
45a443d2a4 Jean*0145       IF ( mdsioLocalDir .NE. ' ' ) THEN
4916e53cda Jean*0146         iL = ILNBLNK( mdsioLocalDir )
435d596cb2 Jean*0147 C     Local dir name should not be too long to fit MAX_LEN_FNAM
                0148 C     after adding file-name: set a limit to half MAX_LEN_FNAM
                0149         IF ( 2*IL.GT.MAX_LEN_FNAM ) THEN
                0150           WRITE(msgBuf,'(2A,I4,A)') 'INI_MODEL_IO: ',
                0151      &    'Too long (IL=',IL,') mdsioLocalDir:'
                0152           CALL PRINT_ERROR( msgBuf, myThid )
                0153           WRITE(errorMessageUnit,'(3A)')
                0154      &       'localDir: >',mdsioLocalDir(1:IL),'<'
                0155           STOP 'ABNORMAL END: S/R INI_MODEL_IO (mdsioLocalDir)'
                0156         ENDIF
b9dadda204 Mart*0157         i = ILNBLNK( myProcessStr )
b27db18f77 Jean*0158         WRITE(namBuf,'(4A)')
b9dadda204 Mart*0159      &         ' mkdir -p ', mdsioLocalDir(1:iL),myProcessStr(1:i),' '
4916e53cda Jean*0160         pIL = 1 + ILNBLNK( namBuf )
b27db18f77 Jean*0161 #ifdef HAVE_SYSTEM
4916e53cda Jean*0162         WRITE(standardMessageUnit,'(3A)')
                0163      &  '==> SYSTEM CALL (from INI_MODEL_IO): >',namBuf(1:pIL),'<'
                0164         CALL SYSTEM( namBuf(1:pIL) )
b27db18f77 Jean*0165 #else
                0166         WRITE(msgBuf,'(3A)') '** WARNING ** INI_MODEL_IO: ',
                0167      &   'SYSTEM call missing (HAVE_SYSTEM undef) for mdsioLocalDir'
                0168         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0169      &                      SQUEEZE_RIGHT, myThid )
                0170         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0171      &                      SQUEEZE_RIGHT, myThid )
                0172         WRITE(errorMessageUnit,'(4A)') '** WARNING ** INI_MODEL_IO: ',
                0173      &   'Skip command: >',namBuf(1:pIL),'<'
                0174 #endif
                0175         WRITE(msgBuf,'(A)') ' '
                0176         CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0177      &                      SQUEEZE_RIGHT, myThid )
4916e53cda Jean*0178         namBuf(1:iL) = mdsioLocalDir(1:iL)
b9dadda204 Mart*0179         WRITE(mdsioLocalDir,'(3A)') namBuf(1:iL),myProcessStr(1:i),'/'
45a443d2a4 Jean*0180       ENDIF
                0181 
13724ad946 Jean*0182 C-    Initialise MFLDS variables in common block
                0183       CALL READ_MFLDS_INIT( myThid )
                0184 
f4a7634227 Alis*0185 C     Set globalFiles flag for READ_WRITE_FLD package
                0186       CALL SET_WRITE_GLOBAL_FLD( globalFiles )
                0187 C     Set globalFiles flag for READ_WRITE_REC package
                0188       CALL SET_WRITE_GLOBAL_REC( globalFiles )
20b01888fd Jean*0189 C     Set globalFiles flag for READ_WRITE_SEC package
                0190       IF ( useOBCS .AND. globalFiles ) THEN
                0191         WRITE(msgBuf,'(2A)') '** WARNING ** INI_MODEL_IO:',
                0192      &   ' use tiled-files to write sections (for OBCS)'
                0193         CALL PRINT_MESSAGE( msgBuf, errorMessageUnit,
                0194      &                      SQUEEZE_RIGHT, myThid )
                0195         CALL SET_WRITE_GLOBAL_SEC( .FALSE. )
                0196       ELSE
                0197         CALL SET_WRITE_GLOBAL_SEC( globalFiles )
                0198       ENDIF
f4a7634227 Alis*0199 
fb6a03c987 Jean*0200       _END_MASTER( myThid )
                0201 C-    Everyone else must wait for the IO-parameters to be set
                0202       _BARRIER
5ec3834826 Jean*0203 
d19b47d96d Jean*0204 C-    Global IO-buffers initialisation
                0205       IF ( useGlobalBuff ) THEN
ab69c6018d Jean*0206         _BEGIN_MASTER( myThid )
                0207         DO i=1,xyBuffer_size
                0208           xy_buffer_r8(i) = 0. _d 0
                0209           xy_buffer_r4(i) = 0.
                0210         ENDDO
                0211         _END_MASTER( myThid )
                0212       ENDIF
                0213 
3a4af95da6 Jean*0214 C-    MNC model-io initialisation
                0215 
                0216 #ifdef ALLOW_MNC
                0217       IF (useMNC) THEN
c74c95df5c Jean*0218 C-    Initialize look-up tables for MNC
                0219         CALL MNC_INIT( myThid )
                0220         CALL MNC_CW_INIT( sNx,sNy,OLx,OLy,nSx,nSy,nPx,nPy,
                0221      &                    Nr,myThid )
                0222 CEH3       IF ( mnc_echo_gvtypes ) THEN
                0223 CEH3       CALL MNC_CW_DUMP( myThid )
                0224 CEH3       ENDIF
3a4af95da6 Jean*0225 C       Write units/set precision/etc for I/O of variables/arrays
                0226 C       belonging to the core dynamical model
                0227         CALL INI_MNC_VARS( myThid )
2f58e54336 Gael*0228       ENDIF
                0229 #endif /* ALLOW_MNC */
                0230 
186531405c Patr*0231 #ifdef ALLOW_AUTODIFF
b27db18f77 Jean*0232       IF ( useAUTODIFF ) CALL AUTODIFF_INI_MODEL_IO( myThid )
3a4af95da6 Jean*0233 #endif
                0234 
70aa6530a3 Gael*0235 #ifdef ALLOW_PROFILES
69734456d8 Gael*0236       IF ( usePROFILES ) CALL PROFILES_INI_IO( myThid )
                0237 #endif
                0238 
                0239 #ifdef ALLOW_DIAGNOSTICS
                0240       IF ( useDiagnostics ) CALL DIAGNOSTICS_INI_IO( myThid )
70aa6530a3 Gael*0241 #endif
                0242 
c74c95df5c Jean*0243 #ifdef ALLOW_MONITOR
                0244 C--   Initialise MONITOR I/O streams so we can report config. info
                0245       CALL MON_INIT( myThid )
                0246 #endif
                0247 
5ec3834826 Jean*0248 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0249 
                0250       RETURN
                0251       END