Back to home page

MITgcm

 
 

    


File indexing completed on 2018-06-09 05:10:00 UTC

view on githubraw file Latest commit 46918f1b on 2018-06-01 20:55:34 UTC
785a077159 Alis*0001 #include "PTRACERS_OPTIONS.h"
46918f1b26 Jean*0002 #include "GAD_OPTIONS.h"
785a077159 Alis*0003 
d2825c6d08 Ed H*0004 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
785a077159 Alis*0005 CBOP
d2825c6d08 Ed H*0006 C     !ROUTINE: PTRACERS_READPARMS
e6469f285f Jean*0007 
d2825c6d08 Ed H*0008 C     !INTERFACE:
785a077159 Alis*0009       SUBROUTINE PTRACERS_READPARMS( myThid )
e6469f285f Jean*0010 
d2825c6d08 Ed H*0011 C     !DESCRIPTION:
785a077159 Alis*0012 C     Initialize PTRACERS parameters, read in data.ptracers
                0013 
d2825c6d08 Ed H*0014 C     !USES:
785a077159 Alis*0015       IMPLICIT NONE
                0016 #include "SIZE.h"
                0017 #include "EEPARAMS.h"
4e66ab0b67 Oliv*0018 #ifdef ALLOW_LONGSTEP
                0019 #include "LONGSTEP_PARAMS.h"
                0020 #endif
636477d15b Jean*0021 #include "PTRACERS_SIZE.h"
0a278985fd Jean*0022 #include "PTRACERS_PARAMS.h"
981f32514d Dimi*0023 #include "PARAMS.h"
50653b81f1 Ed H*0024 #ifdef ALLOW_MNC
                0025 #include "MNC_PARAMS.h"
                0026 #endif
a30418b6b9 Ed H*0027 
d2825c6d08 Ed H*0028 C     !INPUT PARAMETERS:
785a077159 Alis*0029       INTEGER myThid
d2825c6d08 Ed H*0030 CEOP
785a077159 Alis*0031 
                0032 #ifdef ALLOW_PTRACERS
d2825c6d08 Ed H*0033 C     !LOCAL VARIABLES:
d75c5feb26 Jean*0034 C     k,iTracer  :: loop indices
d2825c6d08 Ed H*0035 C     iUnit      :: unit number for I/O
                0036 C     msgBuf     :: message buffer
d75c5feb26 Jean*0037       INTEGER k, iTracer
785a077159 Alis*0038       INTEGER iUnit
d2825c6d08 Ed H*0039       INTEGER ic
785a077159 Alis*0040       CHARACTER*(MAX_LEN_MBUF) msgBuf
d75c5feb26 Jean*0041       _RL PTRACERS_diffKr(PTRACERS_num)
282caa8385 Jean*0042       _RL tauTr1ClimRelax
785a077159 Alis*0043 
636477d15b Jean*0044 C     PTRACERS_taveFreq :: Frequency with which time-averaged PTRACERS
                0045 C                          are written to post-processing files.
282caa8385 Jean*0046 C     tauTr1ClimRelax :: old parameter (will be removed 1 day)
636477d15b Jean*0047       NAMELIST /PTRACERS_PARM01/
282caa8385 Jean*0048      &     tauTr1ClimRelax,
dc3a357327 Jean*0049      &     PTRACERS_numInUse,
                0050      &     PTRACERS_Iter0,
fc10d43a89 Jean*0051      &     PTRACERS_doAB_onGpTr,
dc3a357327 Jean*0052      &     PTRACERS_addSrelax2EmP,
                0053      &     PTRACERS_startStepFwd,
5d1aafd341 Jean*0054      &     PTRACERS_resetFreq,
                0055      &     PTRACERS_resetPhase,
d2825c6d08 Ed H*0056      &     PTRACERS_advScheme,
1883875e84 Jean*0057      &     PTRACERS_ImplVertAdv,
d2825c6d08 Ed H*0058      &     PTRACERS_diffKh,
                0059      &     PTRACERS_diffK4,
                0060      &     PTRACERS_diffKr,
d75c5feb26 Jean*0061      &     PTRACERS_diffKrNr,
dd33ff71a5 Mart*0062      &     PTRACERS_ref,
e6469f285f Jean*0063      &     PTRACERS_EvPrRn,
d2825c6d08 Ed H*0064      &     PTRACERS_useGMRedi,
82f84e4873 Jean*0065      &     PTRACERS_useDWNSLP,
d2825c6d08 Ed H*0066      &     PTRACERS_useKPP,
46918f1b26 Jean*0067      &     PTRACERS_linFSConserve,
                0068      &     PTRACERS_stayPositive,
d2825c6d08 Ed H*0069      &     PTRACERS_initialFile,
                0070      &     PTRACERS_names,
                0071      &     PTRACERS_long_names,
                0072      &     PTRACERS_units,
dc3a357327 Jean*0073      &     PTRACERS_useRecords,
                0074      &     PTRACERS_dumpFreq,
                0075      &     PTRACERS_taveFreq,
                0076      &     PTRACERS_monitorFreq,
e6469f285f Jean*0077      &     PTRACERS_timeave_mnc,
de55280acd Mart*0078      &     PTRACERS_snapshot_mnc,
                0079      &     PTRACERS_monitor_mnc,
e6469f285f Jean*0080      &     PTRACERS_pickup_write_mnc,
46918f1b26 Jean*0081      &     PTRACERS_pickup_read_mnc
d2825c6d08 Ed H*0082 
ae4c29e0db Jean*0083 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0084 
                0085       IF ( .NOT.usePTRACERS ) THEN
                0086 C-    pkg PTRACERS is not used
                0087         _BEGIN_MASTER(myThid)
                0088 C-    Track pkg activation status:
                0089 C     print a (weak) warning if data.ptracers is found
                0090          CALL PACKAGES_UNUSED_MSG( 'usePTRACERS', ' ', ' ' )
                0091         _END_MASTER(myThid)
                0092         RETURN
                0093       ENDIF
                0094 
6bc4100fab Jean*0095       _BEGIN_MASTER(myThid)
                0096 
01111eb599 Jean*0097 C     Set ptracer IO & diagnostics labels (2 characters long)
                0098       CALL PTRACERS_SET_IOLABEL(
                0099      O                           PTRACERS_ioLabel,
                0100      I                           PTRACERS_num, myThid )
                0101 
d2825c6d08 Ed H*0102 C     Set defaults values for parameters in PTRACERS.h
f932d407eb Mart*0103       PTRACERS_dumpFreq    = dumpFreq
0badf4857e Mart*0104       PTRACERS_taveFreq    = taveFreq
                0105       PTRACERS_monitorFreq = monitorFreq
727f3ba9e2 Jean*0106       PTRACERS_Iter0   = 0
785a077159 Alis*0107       PTRACERS_numInUse=-1
                0108       DO iTracer=1,PTRACERS_num
dc3a357327 Jean*0109         PTRACERS_startStepFwd(iTracer) = baseTime
5d1aafd341 Jean*0110         PTRACERS_resetFreq (iTracer) = 0.
                0111         PTRACERS_resetPhase(iTracer) = 0.
d2825c6d08 Ed H*0112         PTRACERS_advScheme(iTracer)=saltAdvScheme
1883875e84 Jean*0113         PTRACERS_ImplVertAdv(iTracer) = .FALSE.
d2825c6d08 Ed H*0114         PTRACERS_diffKh(iTracer)=diffKhS
                0115         PTRACERS_diffK4(iTracer)=diffK4S
d75c5feb26 Jean*0116         PTRACERS_diffKr(iTracer)=UNSET_RL
                0117         DO k=1,Nr
                0118           PTRACERS_diffKrNr(k,iTracer)=diffKrNrS(k)
dd33ff71a5 Mart*0119           PTRACERS_ref     (k,iTracer)=0. _d 0
d75c5feb26 Jean*0120         ENDDO
e6469f285f Jean*0121         PTRACERS_EvPrRn(iTracer)=UNSET_RL
d2825c6d08 Ed H*0122         PTRACERS_useGMRedi(iTracer)=useGMRedi
1db41719d4 Jean*0123         PTRACERS_useDWNSLP(iTracer)=useDOWN_SLOPE
a2b9d94edc Jean*0124         PTRACERS_useKPP(iTracer)   =useKPP
46918f1b26 Jean*0125         PTRACERS_linFSConserve(iTracer)= .FALSE.
                0126 #ifdef GAD_SMOLARKIEWICZ_HACK
                0127         PTRACERS_stayPositive(iTracer) = .TRUE.
                0128 #else
                0129         PTRACERS_stayPositive(iTracer) = .FALSE.
                0130 #endif
d2825c6d08 Ed H*0131         PTRACERS_initialFile(iTracer)=' '
                0132         DO ic = 1,MAX_LEN_FNAM
                0133           PTRACERS_names(iTracer)(ic:ic) = ' '
                0134           PTRACERS_long_names(iTracer)(ic:ic) = ' '
                0135           PTRACERS_units(iTracer)(ic:ic) = ' '
                0136         ENDDO
785a077159 Alis*0137       ENDDO
fc10d43a89 Jean*0138       PTRACERS_doAB_onGpTr      = doAB_onGtGs
c2ced55abd Jean*0139       PTRACERS_addSrelax2EmP    = .FALSE.
50653b81f1 Ed H*0140       PTRACERS_useRecords       = .FALSE.
                0141 #ifdef ALLOW_MNC
6bc4100fab Jean*0142       PTRACERS_timeave_mnc      = useMNC .AND. timeave_mnc
                0143       PTRACERS_snapshot_mnc     = useMNC .AND. snapshot_mnc
                0144       PTRACERS_monitor_mnc      = useMNC .AND. monitor_mnc
                0145       PTRACERS_pickup_write_mnc = useMNC .AND. pickup_write_mnc
                0146       PTRACERS_pickup_read_mnc  = useMNC .AND. pickup_read_mnc
50653b81f1 Ed H*0147 #else
                0148       PTRACERS_timeave_mnc      = .FALSE.
                0149       PTRACERS_snapshot_mnc     = .FALSE.
de55280acd Mart*0150       PTRACERS_monitor_mnc      = .FALSE.
50653b81f1 Ed H*0151       PTRACERS_pickup_write_mnc = .FALSE.
                0152       PTRACERS_pickup_read_mnc  = .FALSE.
                0153 #endif
282caa8385 Jean*0154       tauTr1ClimRelax = 0.
4e66ab0b67 Oliv*0155       DO k = 1,Nr
                0156 #ifdef ALLOW_LONGSTEP
                0157         PTRACERS_dTLev(k) = LS_nIter*dTtracerLev(k)
                0158 #else
                0159         PTRACERS_dTLev(k) = dTtracerLev(k)
                0160 #endif
                0161       ENDDO
785a077159 Alis*0162 
d2825c6d08 Ed H*0163 C     Open and read the data.ptracers file
785a077159 Alis*0164       WRITE(msgBuf,'(A)') ' PTRACERS_READPARMS: opening data.ptracers'
6bc4100fab Jean*0165       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0166      &                    SQUEEZE_RIGHT , myThid )
785a077159 Alis*0167       CALL OPEN_COPY_DATA_FILE(
                0168      I                   'data.ptracers', 'PTRACERS_READPARMS',
                0169      O                   iUnit,
                0170      I                   myThid )
                0171       READ(UNIT=iUnit,NML=PTRACERS_PARM01)
                0172       WRITE(msgBuf,'(A)')
                0173      &  ' PTRACERS_READPARMS: finished reading data.ptracers'
6bc4100fab Jean*0174       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0175      &                    SQUEEZE_RIGHT , myThid )
785a077159 Alis*0176 
d2825c6d08 Ed H*0177 C     Close the open data file
7a77863887 Mart*0178 #ifdef SINGLE_DISK_IO
785a077159 Alis*0179       CLOSE(iUnit)
7a77863887 Mart*0180 #else
                0181       CLOSE(iUnit,STATUS='DELETE')
                0182 #endif /* SINGLE_DISK_IO */
785a077159 Alis*0183 
dc3a357327 Jean*0184 C     Check for retired parameters:
282caa8385 Jean*0185 C     Tracer 1 climatology relaxation time scale (<- but the code is gone !)
dc3a357327 Jean*0186       IF ( tauTr1ClimRelax .NE. 0. ) THEN
                0187 #ifndef ALLOW_COST
                0188         WRITE(msgBuf,'(2A)')' PTRACERS_READPARMS: ',
                0189      &       'tauTr1ClimRelax has been removed (code is gone)'
                0190         CALL PRINT_ERROR( msgBuf, myThid )
                0191         STOP 'ABNORMAL END: S/R PTRACERS_READPARMS'
                0192 #else
282caa8385 Jean*0193        lambdaTr1ClimRelax = 1./tauTr1ClimRelax
dc3a357327 Jean*0194       ELSE
                0195        lambdaTr1ClimRelax = 0.
                0196 #endif
282caa8385 Jean*0197       ENDIF
                0198 
dc3a357327 Jean*0199 C--   Now set-up any remaining parameters that result from other params
                0200 
d2825c6d08 Ed H*0201 C     If PTRACERS_numInUse was not set in data.ptracers then we can
                0202 C     assume that all PTRACERS fields will be in use
785a077159 Alis*0203       IF (PTRACERS_numInUse.LT.0) THEN
d2825c6d08 Ed H*0204         PTRACERS_numInUse=PTRACERS_num
785a077159 Alis*0205       ENDIF
dc3a357327 Jean*0206 
d2825c6d08 Ed H*0207 C     Check we are not trying to use more tracers than allowed
785a077159 Alis*0208       IF (PTRACERS_numInUse.GT.PTRACERS_num) THEN
078adc59f0 Jean*0209         WRITE(msgBuf,'(A,I4,A,I4,A)')
                0210      &       ' PTRACERS_READPARMS: You requested',PTRACERS_numInUse,
                0211      &       ' tracers at run time when only',PTRACERS_num,
d2825c6d08 Ed H*0212      &       ' were specified at compile time. Naughty! '
6bc4100fab Jean*0213         CALL PRINT_ERROR( msgBuf, myThid )
785a077159 Alis*0214         STOP 'ABNORMAL END: S/R PTRACERS_READPARMS'
d2825c6d08 Ed H*0215       ENDIF
2ac3d7bd33 Jean*0216 
                0217 C     Set vertical diffusion array
                0218       DO iTracer=1,PTRACERS_numInUse
                0219         IF ( PTRACERS_diffKr(iTracer).NE.UNSET_RL ) THEN
                0220          DO k=1,Nr
                0221           PTRACERS_diffKrNr(k,iTracer)=PTRACERS_diffKr(iTracer)
                0222          ENDDO
                0223         ENDIF
                0224       ENDDO
                0225 
dc3a357327 Jean*0226 C     Set flag to check when each tracer starts
                0227       PTRACERS_startAllTrc = .TRUE.
                0228       DO iTracer=1,PTRACERS_numInUse
                0229         IF ( PTRACERS_startStepFwd(iTracer) .NE. baseTime )
                0230      &    PTRACERS_startAllTrc = .FALSE.
                0231       ENDDO
c6839165c8 Jean*0232 #ifdef ALLOW_AUTODIFF
dc3a357327 Jean*0233       IF ( .NOT.PTRACERS_startAllTrc ) THEN
                0234         WRITE(msgBuf,'(A)')
                0235      &   'PTRACERS_READPARMS: Compiling AD code does not allow'
                0236         CALL PRINT_ERROR( msgBuf, myThid )
                0237         WRITE(msgBuf,'(A)')
                0238      &   'to use different starting time (PTRACERS_startStepFwd)'
                0239         CALL PRINT_ERROR( msgBuf, myThid )
                0240         STOP 'ABNORMAL END: S/R PTRACERS_READPARMS'
                0241       ENDIF
c6839165c8 Jean*0242 #endif /* ALLOW_AUTODIFF */
2ac3d7bd33 Jean*0243 
0aacb0e819 Oliv*0244 C     Whether to compute linear surface correction
                0245 C     (this may also be enabled elsewhere)
                0246       PTRACERS_calcSurfCor = .FALSE.
                0247       DO iTracer=1,PTRACERS_num
                0248         IF (PTRACERS_linFSConserve(iTracer)) PTRACERS_calcSurfCor=.TRUE.
                0249       ENDDO
                0250 
d2825c6d08 Ed H*0251 #ifdef ALLOW_MNC
6bc4100fab Jean*0252       PTRACERS_timeave_mnc      = useMNC .AND. PTRACERS_timeave_mnc
                0253       PTRACERS_snapshot_mnc     = useMNC .AND. PTRACERS_snapshot_mnc
                0254       PTRACERS_monitor_mnc      = useMNC .AND. PTRACERS_monitor_mnc
                0255       PTRACERS_pickup_write_mnc = useMNC .AND. PTRACERS_pickup_write_mnc
                0256       PTRACERS_pickup_read_mnc  = useMNC .AND. PTRACERS_pickup_read_mnc
50653b81f1 Ed H*0257 
                0258       PTRACERS_timeave_mdsio      = (.NOT. PTRACERS_timeave_mnc)
                0259      &     .OR. outputTypesInclusive
                0260       PTRACERS_snapshot_mdsio     = (.NOT. PTRACERS_snapshot_mnc)
                0261      &     .OR. outputTypesInclusive
de55280acd Mart*0262       PTRACERS_monitor_stdio      = (.NOT. PTRACERS_monitor_mnc)
                0263      &     .OR. outputTypesInclusive
50653b81f1 Ed H*0264       PTRACERS_pickup_write_mdsio = (.NOT. PTRACERS_pickup_write_mnc)
                0265      &     .OR. outputTypesInclusive
                0266       PTRACERS_pickup_read_mdsio  = (.NOT. PTRACERS_pickup_read_mnc)
                0267      &     .OR. outputTypesInclusive
                0268 #else
                0269       PTRACERS_timeave_mnc        = .FALSE.
                0270       PTRACERS_snapshot_mnc       = .FALSE.
de55280acd Mart*0271       PTRACERS_monitor_mnc        = .FALSE.
50653b81f1 Ed H*0272       PTRACERS_pickup_write_mnc   = .FALSE.
                0273       PTRACERS_pickup_read_mnc    = .FALSE.
                0274       PTRACERS_timeave_mdsio      = .TRUE.
                0275       PTRACERS_snapshot_mdsio     = .TRUE.
de55280acd Mart*0276       PTRACERS_monitor_stdio      = .TRUE.
50653b81f1 Ed H*0277       PTRACERS_pickup_write_mdsio = .TRUE.
                0278       PTRACERS_pickup_read_mdsio  = .TRUE.
                0279 #endif
e6469f285f Jean*0280 
89ba77ec3c Jean*0281 C--   Print a summary of pTracer parameter values:
6bc4100fab Jean*0282 
                0283       _END_MASTER(myThid)
                0284 C     Everyone else must wait for the parameters to be loaded
                0285       _BARRIER
                0286 
785a077159 Alis*0287 #endif /* ALLOW_PTRACERS */
                0288 
                0289       RETURN
                0290       END