C $Header: /u/gcmpack/MITgcm/pkg/cheapaml/cheapaml_readparms.F,v 1.17 2017/10/13 17:45:58 jmc Exp $ C $Name: $ #include "CHEAPAML_OPTIONS.h" SUBROUTINE CHEAPAML_READPARMS( myThid ) C *==========================================================* C | SUBROUTINE CHEAPAML_READPARMS | C | o Routine to initialize CHEAPAML variables and consts. | C *==========================================================* IMPLICIT NONE C === Global variables === #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "CHEAPAML.h" C === Routine arguments === INTEGER myThid C === Local variables === C msgBuf :: Informational/error message buffer C iUnit :: Work variable for IO unit number CHARACTER*(MAX_LEN_MBUF) msgBuf INTEGER iUnit C- retired parameters: C nRetired :: Count number of "retired" parameters found in namelist. INTEGER nRetired _RL cheapaml_taurelax, cheapaml_taurelaxocean C-- Bulk Formula parameter NAMELIST //CHEAPAML_CONST & cheapaml_ntim, cheapaml_mask_width, & cheapaml_h, cheapaml_kdiff, & cheap_tauRelax, cheap_tauRelaxOce, & cdrag_1,cdrag_2,cdrag_3, & rhoa, cpair, stefan, gasR, xkar, & dsolms,dsolmn,zu,zt,zq, & xphaseinit,gamma_blk,humid_fac,p0, & cheap_pr1, cheap_pr2, & cheapaml_taurelax, cheapaml_taurelaxocean NAMELIST //CHEAPAML_PARM01 & periodicExternalForcing_cheap, & externForcingPeriod_cheap, & externForcingCycle_cheap, & AirTempFile, & SolarFile, & UWindFile, & VWindFile, & TrFile, & QrFile, & AirQFile, & UStressFile, VStressFile, & WaveHFile,WavePFile, & TracerFile,TracerRfile, & cheapMaskFile,cheap_hFile, & cheap_clFile,cheap_dlwFile, & cheap_prFile NAMELIST //CHEAPAML_PARM02 & cheapamlXperiodic, & cheapamlYperiodic, & useFreshWaterFlux, & useFluxLimit, & FluxFormula,WaveModel, & useStressOption, & useCheapTracer , & useTimeVarBLH, & useClouds, & useDLongWave, & usePrecip, & useRelativeWind C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( .NOT.useCheapAML ) THEN C- pkg CHEAPAML is not used _BEGIN_MASTER(myThid) C- Track pkg activation status: C print a (weak) warning if data.cheapaml is found CALL PACKAGES_UNUSED_MSG( 'useCheapAML', ' ', ' ' ) _END_MASTER(myThid) RETURN ENDIF _BEGIN_MASTER(myThid) WRITE(msgBuf,'(A)') ' BULKF_READPARMS: opening data.cheapaml' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) CALL OPEN_COPY_DATA_FILE( I 'data.cheapaml', 'CHEAPAML_READPARMS', O iUnit, I myThid ) C-- Hard-coded values (not in any namelist): C coeff. used to compute saturation specific humidity (not in namelist) ssq0 = 3.797915 _d 0 ssq1 = 7.93252 _d -6 ssq2 = 2.166847 _d -3 C-- Default values C- Physical constant : cheapaml_ntim = 5 cheapaml_h=1000. _d 0 cheapaml_kdiff=1. _d 4 cheap_tauRelax = 8640. _d 0 cheap_tauRelaxOce = 0. _d 0 cheapaml_mask_width = 0 rhoa = 1.3 _d 0 cpair = 1004. _d 0 stefan = 5.67 _d -8 dsolms = 50. _d 0 dsolmn = 25. _d 0 C heights of variables zu=10. _d 0 zt=zu zq=zu xphaseinit = 0. _d 0 cdrag_1=0.0027 _d 0 cdrag_2=0.000142 _d 0 cdrag_3=0.0000764 _d 0 C gas constant gasR=287.04 _d 0 C atmospheric adiabatic lapse rate gamma_blk=0.0098 _d 0 C humidity factor for computing virtual potential temperature humid_fac=0.606 _d 0 C surface pressure in mb p0=1000. _d 0 C latent heat (J/kg) lath=2.5 _d 6 C von Karman constant xkar=0.4 _d 0 C periodic forcing periodicExternalForcing_cheap = periodicExternalForcing externForcingPeriod_cheap = externForcingPeriod externForcingCycle_cheap = externForcingCycle C precipitation time constant cheap_pr1 = 2*3600.0 _d 0 cheap_pr2 = 36*3600.0 _d 0 C- Retired parameters: initialised to unlikely value: nRetired = 0 cheapaml_taurelax = UNSET_RL cheapaml_taurelaxocean = UNSET_RL C- Input data files names : AirTempFile=' ' AirQFile=' ' SolarFile=' ' UWindFile=' ' VWindFile=' ' TrFile=' ' QrFile=' ' WaveHFile=' ' WavePFile=' ' TracerFile=' ' TracerRFile=' ' cheapMaskFile=' ' cheap_hFile =' ' cheap_prFile =' ' cheap_clFile =' ' cheap_dlwFile =' ' FluxFormula='COARE3' WaveModel='Smith' C- Assumes domain (with land) is periodic in both direction C (consitent with default EXCH setting) c cheapamlXperiodic = .TRUE. c cheapamlYperiodic = .TRUE. C note: for backward compatibility, switch to non periodic domain: cheapamlXperiodic = .FALSE. cheapamlYperiodic = .FALSE. C- e-p option turned off by default useFreshWaterFlux=.TRUE. C- turn off flux limiting advection by default useFluxLimit=.FALSE. C- turn off stress option by default useStressOption=.FALSE. C- turn off passive tracer option by default useCheapTracer=.FALSE. C- turn off time varying BL height option by default useTimeVarBLH=.FALSE. C- turn off clouds option by default useClouds=.FALSE. C- use imported downward longwave useDLongWave=.FALSE. C- use imported precip usePrecip=.FALSE. C- use relative wind useRelativeWind=.FALSE. C-- Read parameters from open data file READ(UNIT=iUnit,NML=CHEAPAML_CONST) WRITE(msgBuf,'(A)') ' CHEAPAML_READPARMS: read CHEAPAML_CONST' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) C-- Read parameters from open data file READ(UNIT=iUnit,NML=CHEAPAML_PARM01) WRITE(msgBuf,'(A)') ' CHEAPAML_READPARMS: read CHEAPAML_PARM01' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) C-- Read parameters from open data file READ(UNIT=iUnit,NML=CHEAPAML_PARM02) WRITE(msgBuf,'(A)') ' CHEAPAML_READPARMS: read CHEAPAML_PARM02' CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) C-- Close the open data file #ifdef SINGLE_DISK_IO CLOSE(iUnit) #else CLOSE(iUnit,STATUS='DELETE') #endif /* SINGLE_DISK_IO */ C compute derivative values C energy flux conversion factor xef=1. _d 0 /rhoa/cpair C inverse of layer thickness hm=1. _d 0/cheapaml_h C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| iUnit = standardMessageUnit WRITE(iUnit,*) 'Caml: ntim =',cheapaml_ntim WRITE(iUnit,*) 'Caml: mask_w =',cheapaml_mask_width WRITE(iUnit,*) 'Caml: h =',cheapaml_h WRITE(iUnit,*) 'Caml: kdiff =',cheapaml_kdiff WRITE(iUnit,*) 'Caml: tauRelax =', cheap_tauRelax, ' (s)' WRITE(iUnit,*) 'Caml: tRelaxOce=', cheap_tauRelaxOce,' (s)' WRITE(iUnit,*) 'Caml: rhoa =',rhoa WRITE(iUnit,*) 'Caml: cpair =',cpair WRITE(iUnit,*) 'Caml: stefan =',stefan WRITE(iUnit,*) 'Caml: cheapamlXperiodic =',cheapamlXperiodic WRITE(iUnit,*) 'Caml: cheapamlYperiodic =',cheapamlYperiodic WRITE(iUnit,*) 'Caml: useFreshWaterFlux =',useFreshWaterFlux WRITE(iUnit,*) 'Caml: useFluxLimit =',useFluxLimit WRITE(iUnit,*) 'Caml: useStressOption =',useStressOption WRITE(iUnit,*) 'Caml: useCheapTracer =',useCheapTracer WRITE(iUnit,*) 'Caml: useTimeVarBLH =',useTimeVarBLH WRITE(iUnit,*) 'Caml: useClouds =',useClouds WRITE(iUnit,*) 'Caml: useDlongwave =',useDLongWave WRITE(iUnit,*) 'Caml: usePrecip =',usePrecip C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| IF ( cheapaml_taurelax .NE. UNSET_RL ) THEN nRetired = nRetired + 1 WRITE(msgBuf,'(2A)') & 'S/R CHEAPAML_READPARMS: "cheapaml_taurelax" no longer' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)') & 'S/R CHEAPAML_READPARMS: allowed in file "data.cheapaml"' CALL PRINT_ERROR( msgBuf, myThid ) ENDIF IF ( cheapaml_taurelaxocean .NE. UNSET_RL ) THEN nRetired = nRetired + 1 WRITE(msgBuf,'(2A)') & 'S/R CHEAPAML_READPARMS: "cheapaml_taurelaxocean" no longer' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(2A)') & 'S/R CHEAPAML_READPARMS: allowed in file "data.cheapaml"' CALL PRINT_ERROR( msgBuf, myThid ) ENDIF IF ( nRetired .GT. 0 ) THEN WRITE(msgBuf,'(2A)') 'S/R CHEAPAML_READPARMS: ', & 'Error reading file "data.cheapaml":' CALL PRINT_ERROR( msgBuf, myThid ) WRITE(msgBuf,'(I4,A)') nRetired, & ' out-of-date parameters were found in the namelist(s)' CALL PRINT_ERROR( msgBuf, myThid ) c errCount = errCount + 1 CALL ALL_PROC_DIE( 0 ) STOP 'ABNORMAL END: S/R CHEAPAML_READPARMS' ENDIF _END_MASTER(myThid) C-- Everyone else must wait for the parameters to be loaded _BARRIER RETURN END