C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_read_pickup.F,v 1.5 2017/03/24 23:38:56 jmc Exp $ C $Name: $ #include "GAD_OPTIONS.h" C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| CBOP C !ROUTINE: GAD_READ_PICKUP C !INTERFACE: SUBROUTINE GAD_READ_PICKUP( myIter, myThid ) C !DESCRIPTION: C Reads current state of 2nd.Order moments from a pickup file C !USES: IMPLICIT NONE #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "GAD.h" #include "GAD_SOM_VARS.h" #ifdef ALLOW_MNC #include "MNC_PARAMS.h" #endif C !INPUT PARAMETERS: C myIter :: time-step number C myThid :: thread number INTEGER myIter INTEGER myThid #ifdef GAD_ALLOW_TS_SOM_ADV C !LOCAL VARIABLES: C n :: 2nd.O. moment loop index C iRec :: record number C fn :: character buffer for creating filename C prec :: precision of pickup files INTEGER n, prec, iRec CHARACTER*(10) suff CHARACTER*(MAX_LEN_FNAM) fn, filNam CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER ioUnit LOGICAL useCurrentDir, fileExist CEOP C- Need to synchronize here before doing master-thread IO C note: not presently needed (synchronized through MDS_CHECK4FILE call) c _BARRIER ioUnit = errorMessageUnit #ifdef ALLOW_MNC IF ( useMNC .AND. pickup_read_mnc ) THEN c IF ( tempSOM_Advection ) THEN C Read variables from the pickup file c WRITE(fn,'(a)') 'pickup_som' c CALL MNC_FILE_CLOSE_ALL_MATCHING(fn, myThid) c CALL MNC_CW_SET_UDIM(fn, 1, myThid) c CALL MNC_CW_SET_CITER(fn, 3, 3, myIter, -1, myThid) c prefix = 'somT_' c DO n = 1,nSOM c CALL MNC_CW_RL_R('D',fn,0,0, som_name, c & som_T(1-OLx,1-OLy,1,1,1,n),myThid) c ENDDO c ENDIF ENDIF #endif /* ALLOW_MNC */ c IF ( pickup_read_mdsio .AND. tempSOM_Advection ) THEN IF ( tempSOM_Advection ) THEN C-- Pot. Temp. 2nd.Order moments IF (pickupSuff .EQ. ' ') THEN IF ( rwSuffixType.EQ.0 ) THEN WRITE(fn,'(A,I10.10)') 'pickup_somT.', myIter ELSE CALL RW_GET_SUFFIX( suff, startTime, myIter, myThid ) WRITE(fn,'(A,A)') 'pickup_somT.', suff ENDIF ELSE WRITE(fn,'(A,A10)') 'pickup_somT.', pickupSuff ENDIF C- First check if pickup file exist #ifdef ALLOW_MDSIO useCurrentDir = .FALSE. CALL MDS_CHECK4FILE( I fn, '.data', 'GAD_READ_PICKUP', O filNam, fileExist, I useCurrentDir, myThid ) #else STOP 'ABNORMAL END: S/R GAD_READ_PICKUP: Needs MDSIO pkg' #endif IF ( fileExist ) THEN C- Read 2nd Order moments as consecutive records prec = precFloat64 DO n=1,nSOM iRec = n CALL READ_REC_3D_RL( fn, prec, Nr, O som_T(1-OLx,1-OLy,1,1,1,n), I iRec, myIter, myThid ) ENDDO ELSE IF ( pickupStrictlyMatch ) THEN WRITE(msgBuf,'(4A)') 'GAD_READ_PICKUP: ', & 'try with " pickupStrictlyMatch=.FALSE.,"', & ' in file: "data", NameList: "PARM03"' CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) STOP 'ABNORMAL END: S/R GAD_READ_PICKUP' ELSE WRITE(msgBuf,'(2A)') 'WARNING >> GAD_READ_PICKUP: ', & 'approximated restart: reset SOM_T to zero' CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) ENDIF ENDIF ENDIF c IF ( pickup_read_mdsio .AND. saltSOM_Advection ) THEN IF ( saltSOM_Advection ) THEN C-- Salinity 2nd.Order moments IF (pickupSuff .EQ. ' ') THEN IF ( rwSuffixType.EQ.0 ) THEN WRITE(fn,'(A,I10.10)') 'pickup_somS.', myIter ELSE CALL RW_GET_SUFFIX( suff, startTime, myIter, myThid ) WRITE(fn,'(A,A)') 'pickup_somS.', suff ENDIF ELSE WRITE(fn,'(A,A10)') 'pickup_somS.', pickupSuff ENDIF C- First check if pickup file exist #ifdef ALLOW_MDSIO useCurrentDir = .FALSE. CALL MDS_CHECK4FILE( I fn, '.data', 'GAD_READ_PICKUP', O filNam, fileExist, I useCurrentDir, myThid ) #else STOP 'ABNORMAL END: S/R GAD_READ_PICKUP: Needs MDSIO pkg' #endif IF ( fileExist ) THEN C- Read 2nd Order moments as consecutive records prec = precFloat64 DO n=1,nSOM iRec = n CALL READ_REC_3D_RL( fn, prec, Nr, O som_S(1-OLx,1-OLy,1,1,1,n), I iRec, myIter, myThid ) ENDDO ELSE IF ( pickupStrictlyMatch ) THEN WRITE(msgBuf,'(4A)') 'GAD_READ_PICKUP: ', & 'try with " pickupStrictlyMatch=.FALSE.,"', & ' in file: "data", NameList: "PARM03"' CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) STOP 'ABNORMAL END: S/R GAD_READ_PICKUP' ELSE WRITE(msgBuf,'(2A)') 'WARNING >> GAD_READ_PICKUP: ', & 'approximated restart: reset SOM_S to zero' CALL PRINT_MESSAGE( msgBuf, ioUnit, SQUEEZE_RIGHT, myThid ) ENDIF ENDIF ENDIF #endif /* GAD_ALLOW_TS_SOM_ADV */ RETURN END