Back to home page

MITgcm

 
 

    


File indexing completed on 2025-11-07 06:08:21 UTC

view on githubraw file Latest commit b7411f1a on 2025-11-06 19:05:26 UTC
6d54cf9ca1 Ed H*0001 #include "BULK_FORCE_OPTIONS.h"
7753507405 Curt*0002 
                0003       SUBROUTINE BULKF_READPARMS( myThid )
ae4c29e0db Jean*0004 C     *==========================================================*
6a1d3c464b Jean*0005 C     | SUBROUTINE BULKF_READPARMS                               |
                0006 C     | o Routine to initialize BULKF variables and constants.   |
ae4c29e0db Jean*0007 C     *==========================================================*
6a1d3c464b Jean*0008 C     | Initialize BULKF    parameters, read in data.blk         |
ae4c29e0db Jean*0009 C     *==========================================================*
7753507405 Curt*0010       IMPLICIT NONE
                0011 
                0012 C     === Global variables ===
                0013 #include "SIZE.h"
                0014 #include "EEPARAMS.h"
                0015 #include "PARAMS.h"
6a1d3c464b Jean*0016 #include "BULKF_PARAMS.h"
7753507405 Curt*0017 #include "BULKF.h"
                0018 #ifdef CONSERV_BULKF
                0019 #include "BULKF_CONSERV.h"
                0020 #endif
                0021 
                0022 C     === Routine arguments ===
                0023       INTEGER myThid
                0024 
                0025 #ifdef ALLOW_BULK_FORCE
6a1d3c464b Jean*0026 C     === Local variables ===
ae4c29e0db Jean*0027 C     msgBuf     :: Informational/error message buffer
                0028 C     iUnit      :: Work variable for IO unit number
6a1d3c464b Jean*0029       CHARACTER*(MAX_LEN_MBUF) msgBuf
                0030       INTEGER iUnit
b7411f1a84 Jean*0031 C--   retired parameters:
                0032       _RL blk_taveFreq
7753507405 Curt*0033 
                0034 C--   Bulk Formula parameter
6a1d3c464b Jean*0035       NAMELIST /BULKF_CONST/
69f66dfb04 Jean*0036      &  rhoA, rhoFW,
                0037      &  cpAir, Lvap, Lfresh,
                0038      &  Tf0kel, Rgas, xkar, stefan,
                0039      &  zref, zwd, zth,
                0040      &  cDrag_1, cDrag_2, cDrag_3,
                0041      &  cStantonS, cStantonU, cDalton,
                0042      &  umin, humid_fac, saltQsFac, gamma_blk,
6a1d3c464b Jean*0043      &  atm_emissivity, ocean_emissivity,
                0044      &  snow_emissivity, ice_emissivity,
679d149d01 Jean*0045 #ifdef ALLOW_FORMULA_AIM
                0046      &  FWIND0, CHS, VGUST, DTHETA, dTstab, FSTAB,
                0047 #endif
                0048      &  ocean_albedo
6a1d3c464b Jean*0049 
7753507405 Curt*0050       NAMELIST /BULKF_PARM01/
69f66dfb04 Jean*0051      &         useFluxFormula_AIM, blk_nIter, calcWindStress,
679d149d01 Jean*0052      &         blk_taveFreq,
7753507405 Curt*0053      &         AirTempFile, AirHumidityFile, RainFile,
                0054      &         SolarFile, LongwaveFile, UWindFile,
                0055      &         VWindFile,  RunoffFile, WSpeedFile, QnetFile,
679d149d01 Jean*0056      &         EmPFile, CloudFile, airPotTempFile
7753507405 Curt*0057 
                0058 #ifdef CONSERV_BULKF
                0059 c-    conserving qnet, empmr
                0060       NAMELIST /BULKF_PARM02/
                0061      &         qnet_off, empmr_off, conservcycle
                0062 #endif
                0063 
ae4c29e0db Jean*0064 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0065 
                0066       IF ( .NOT.useBulkForce ) THEN
                0067 C-    pkg BULK_FORCE is not used
                0068         _BEGIN_MASTER(myThid)
                0069 C-    Track pkg activation status:
                0070 C     print a (weak) warning if data.blk is found
                0071          CALL PACKAGES_UNUSED_MSG(
                0072      I                'useBulkForce', 'BULKF_READPARMS', 'blk' )
                0073         _END_MASTER(myThid)
                0074         RETURN
                0075       ENDIF
7753507405 Curt*0076 
                0077       _BEGIN_MASTER(myThid)
                0078 
679d149d01 Jean*0079 C--   Default values
6a1d3c464b Jean*0080 C-    Physical constant :
69f66dfb04 Jean*0081 c     slp0   = atm_Po / 100.  ! reference sea-level atmospheric pressure [mb]
                0082       rhoA   = 1.3 _d 0
                0083       rhoFW  = rhoConstFresh
                0084       cpAir  = atm_Cp
                0085 c     cpwv   = 1.81 _d 3
6a1d3c464b Jean*0086       Lvap   = 2.5 _d 6
                0087       Lfresh = 3.34 _d 5
69f66dfb04 Jean*0088 c     Lvap_ice = 2.83 _d 6
6a1d3c464b Jean*0089       Tf0kel = celsius2K
69f66dfb04 Jean*0090       Rgas   = atm_Rd
                0091 c     Rvap   = 461. _d 0
6a1d3c464b Jean*0092       xkar   = 0.4  _d 0
69f66dfb04 Jean*0093       stefan = 5.67 _d -8
                0094       zref   = 10.0 _d 0
                0095       zwd    = zref
                0096       zth    = zref
                0097       cDrag_1 = 2.70   _d -3
                0098       cDrag_2 = 0.142  _d -3
                0099       cDrag_3 = 0.0764 _d -3
                0100       cStantonS = 18.0 _d -3
                0101       cStantonU = 32.7 _d -3
                0102       cDalton   = 34.6 _d -3
                0103       umin      =  1.0 _d 0
6a1d3c464b Jean*0104       humid_fac =  0.606 _d 0
69f66dfb04 Jean*0105       saltQsFac =  0.980 _d 0
6a1d3c464b Jean*0106       gamma_blk =  0.010 _d 0
                0107       atm_emissivity  = .90 _d 0
                0108       ocean_emissivity= .985 _d 0
                0109       snow_emissivity = .98 _d 0
                0110       ice_emissivity  = .98 _d 0
679d149d01 Jean*0111       ocean_albedo    = .10 _d 0
                0112 #ifdef ALLOW_FORMULA_AIM
                0113       FWIND0 = 0.6 _d 0
                0114       CHS = 0.8 _d -3
                0115       VGUST  = 5. _d 0
                0116       DTHETA = 3. _d 0
                0117       dTstab = 1. _d 0
                0118       FSTAB  = 0.67 _d 0
                0119 #endif
6a1d3c464b Jean*0120 
                0121 C-    bulk-forcing parameters:
679d149d01 Jean*0122       useFluxFormula_AIM = .FALSE.
69f66dfb04 Jean*0123       blk_nIter = 5
679d149d01 Jean*0124       calcWindStress = zonalWindFile .EQ. ' '
                0125      &           .AND. meridWindFile .EQ. ' '
6a1d3c464b Jean*0126 
                0127 C-    Input data files names :
7753507405 Curt*0128       AirTempFile=' '
                0129       AirHumidityFile=' '
                0130       RainFile=' '
                0131       SolarFile=' '
                0132       LongwaveFile=' '
                0133       UWindFile=' '
                0134       VWindFile=' '
                0135       WspeedFile=' '
                0136       RunoffFile=' '
                0137       QnetFile=' '
                0138       EmPFile=' '
                0139       CloudFile=' '
                0140       SnowFile=' '
679d149d01 Jean*0141       airPotTempFile=' '
7753507405 Curt*0142 
b7411f1a84 Jean*0143 C-    retired params default:
                0144       blk_taveFreq = UNSET_RL
                0145 
                0146       CALL OPEN_COPY_DATA_FILE(
                0147      I                          'data.blk', 'BULKF_READPARMS',
                0148      O                          iUnit,
                0149      I                          myThid )
                0150 
7753507405 Curt*0151 C--   Read parameters from open data file
69f66dfb04 Jean*0152       WRITE(msgBuf,'(A)')' BULKF_READPARMS: starts to read BULKF_CONST'
                0153       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0154      &                    SQUEEZE_RIGHT , myThid)
6a1d3c464b Jean*0155       READ(UNIT=iUnit,NML=BULKF_CONST)
69f66dfb04 Jean*0156       WRITE(msgBuf,'(A)') ' BULKF_READPARMS: read BULKF_CONST : OK'
6a1d3c464b Jean*0157       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
69f66dfb04 Jean*0158      &                    SQUEEZE_RIGHT , myThid)
7753507405 Curt*0159 
69f66dfb04 Jean*0160       WRITE(msgBuf,'(A)')' BULKF_READPARMS: starts to read BULKF_PARM01'
                0161       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0162      &                    SQUEEZE_RIGHT , myThid)
6a1d3c464b Jean*0163       READ(UNIT=iUnit,NML=BULKF_PARM01)
69f66dfb04 Jean*0164       WRITE(msgBuf,'(A)') ' BULKF_READPARMS: read BULKF_PARM01 : OK'
7753507405 Curt*0165       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
69f66dfb04 Jean*0166      &                    SQUEEZE_RIGHT , myThid)
7753507405 Curt*0167 
                0168 #ifdef CONSERV_BULKF
                0169 c -- default
                0170       qnet_off=0.d0
                0171       empmr_off=0.d0
69f66dfb04 Jean*0172       WRITE(msgBuf,'(A)')' BULKF_READPARMS: starts reading BULKF_PARM02'
                0173       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
                0174      &                    SQUEEZE_RIGHT , myThid)
7753507405 Curt*0175       READ(UNIT=iUnit,NML=BULKF_PARM02)
69f66dfb04 Jean*0176       WRITE(msgBuf,'(A)') ' BULKF_READPARMS: read BULKF_PARM02 : OK'
7753507405 Curt*0177       CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
69f66dfb04 Jean*0178      &                    SQUEEZE_RIGHT , myThid)
7753507405 Curt*0179 
                0180 #endif /* CONSERV_BULKF */
                0181 
                0182 C--   Close the open data file
7a77863887 Mart*0183 #ifdef SINGLE_DISK_IO
7753507405 Curt*0184       CLOSE(iUnit)
7a77863887 Mart*0185 #else
                0186       CLOSE(iUnit,STATUS='DELETE')
                0187 #endif /* SINGLE_DISK_IO */
6a1d3c464b Jean*0188 
b7411f1a84 Jean*0189 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0190 C--   Check for retired parameters:
                0191       IF ( blk_taveFreq .NE. UNSET_RL ) THEN
                0192         WRITE(msgBuf,'(2A)') 'BULKF_READPARMS: "blk_taveFreq"',
                0193      &    ' is no longer allowed in file "data.blk"'
                0194         CALL PRINT_ERROR( msgBuf, myThid )
                0195         WRITE(msgBuf,'(2A)') 'BULKF_READPARMS: ',
                0196      &    ' since "pkg/timeave" has been removed.'
                0197         CALL PRINT_ERROR( msgBuf, myThid )
                0198 c       errCount = errCount + 1
                0199         STOP 'ABNORMAL END: S/R BULKF_READPARMS'
                0200       ENDIF
                0201 
679d149d01 Jean*0202 C-  check that CPP option is "defined" when running-flag parameter is on:
                0203 #ifndef ALLOW_FORMULA_AIM
                0204       IF ( useFluxFormula_AIM ) THEN
                0205         WRITE(msgBuf,'(2A)') ' BULKF_READPARMS: ',
                0206      &   'useFluxFormula_AIM is TRUE and #undef ALLOW_FORMULA_AIM'
                0207         CALL PRINT_ERROR( msgBuf , myThid)
                0208         WRITE(msgBuf,'(2A)') ' BULKF_READPARMS: => recompile with',
                0209      &   ' #define ALLOW_FORMULA_AIM in BULK_FORCE_OPTIONS.h'
                0210         CALL PRINT_ERROR( msgBuf , myThid)
b7411f1a84 Jean*0211         STOP 'ABNORMAL END: S/R BULKF_READPARMS'
679d149d01 Jean*0212       ENDIF
                0213 #endif
                0214 
6a1d3c464b Jean*0215 C-    Define other constants (from previous ones):
69f66dfb04 Jean*0216 c     Qcoef  = 6.11 _d 0 * 0.622 _d 0 / p0
                0217 c     Sha    = Rgas / .286 _d 0
6a1d3c464b Jean*0218 
8d92b2862f Jean*0219       useQnetch = QnetFile .NE. ' '
                0220       useEmPch  = EmPFile  .NE. ' '
                0221 
6a1d3c464b Jean*0222 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0223       iUnit = standardMessageUnit
                0224 c     iUnit=88
                0225 c     OPEN(iUnit,file='bulkf_check_params',status='unknown')
69f66dfb04 Jean*0226 c     WRITE(iUnit,*) 'BlkF: slp0     =',slp0
                0227       WRITE(iUnit,*) 'BlkF: rhoA     =',rhoA
                0228       WRITE(iUnit,*) 'BlkF: rhoFW    =',rhoFW
                0229       WRITE(iUnit,*) 'BlkF: cpAir    =',cpAir
                0230 c     WRITE(iUnit,*) 'BlkF: cpwv     =',cpwv
6a1d3c464b Jean*0231       WRITE(iUnit,*) 'BlkF: Lvap     =',Lvap
                0232       WRITE(iUnit,*) 'BlkF: Lfresh   =',Lfresh
69f66dfb04 Jean*0233 c     WRITE(iUnit,*) 'BlkF: Lvap_ice =',Lvap_ice
                0234 c     WRITE(iUnit,*) 'BlkF: Sha      =',Sha
6a1d3c464b Jean*0235       WRITE(iUnit,*) 'BlkF: Tf0kel   =',Tf0kel
69f66dfb04 Jean*0236       WRITE(iUnit,*) 'BlkF: Rgas     =',Rgas
                0237 c     WRITE(iUnit,*) 'BlkF: Rvap     =',Rvap
6a1d3c464b Jean*0238       WRITE(iUnit,*) 'BlkF: xkar     =',xkar
69f66dfb04 Jean*0239       WRITE(iUnit,*) 'BlkF: stefan   =',stefan
                0240       WRITE(iUnit,*) 'BlkF: zref     =',zref
                0241       WRITE(iUnit,*) 'BlkF: zwd      =',zwd
                0242       WRITE(iUnit,*) 'BlkF: zth      =',zth
                0243       WRITE(iUnit,*) 'BlkF: cDrag_1  =',cDrag_1
                0244       WRITE(iUnit,*) 'BlkF: cDrag_2  =',cDrag_2
                0245       WRITE(iUnit,*) 'BlkF: cDrag_3  =',cDrag_3
                0246       WRITE(iUnit,*) 'BlkF: cStantonS=',cStantonS
                0247       WRITE(iUnit,*) 'BlkF: cStantonU=',cStantonU
                0248       WRITE(iUnit,*) 'BlkF: cDalton  =',cDalton
                0249       WRITE(iUnit,*) 'BlkF: umin     =',umin
6a1d3c464b Jean*0250       WRITE(iUnit,*) 'BlkF: humid_fac=',humid_fac
69f66dfb04 Jean*0251       WRITE(iUnit,*) 'BlkF: saltQsFac=',saltQsFac
6a1d3c464b Jean*0252       WRITE(iUnit,*) 'BlkF: gamma_blk=',gamma_blk
                0253       WRITE(iUnit,*) 'BlkF: atm_emissivity  =',atm_emissivity
                0254       WRITE(iUnit,*) 'BlkF: ocean_emissivity=',ocean_emissivity
                0255       WRITE(iUnit,*) 'BlkF: snow_emissivity =',snow_emissivity
                0256       WRITE(iUnit,*) 'BlkF: ice_emissivity  =',ice_emissivity
679d149d01 Jean*0257       WRITE(iUnit,*) 'BlkF: ocean_albedo    =',ocean_albedo
                0258 #ifdef ALLOW_FORMULA_AIM
                0259       WRITE(iUnit,*) 'BlkF: FWIND0   =', FWIND0
                0260       WRITE(iUnit,*) 'BlkF: CHS      =', CHS
                0261       WRITE(iUnit,*) 'BlkF: VGUST    =', VGUST
                0262       WRITE(iUnit,*) 'BlkF: DTHETA   =', DTHETA
                0263       WRITE(iUnit,*) 'BlkF: dTstab   =', dTstab
                0264       WRITE(iUnit,*) 'BlkF: FSTAB    =', FSTAB
                0265 #endif
                0266       WRITE(iUnit,*) 'BlkF: useFluxFormula_AIM=',useFluxFormula_AIM
8d92b2862f Jean*0267       WRITE(iUnit,*) 'BlkF: calcWindStress  =', calcWindStress
                0268       WRITE(iUnit,*) 'BlkF: useQnetch       =', useQnetch
                0269       WRITE(iUnit,*) 'BlkF: useEmPch        =', useEmPch
69f66dfb04 Jean*0270       WRITE(iUnit,*) 'BlkF: blk_nIter   =',blk_nIter
6a1d3c464b Jean*0271       IF (iUnit.EQ.88) CLOSE(iUnit)
                0272 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0273 
7753507405 Curt*0274       _END_MASTER(myThid)
                0275 
                0276 C--   Everyone else must wait for the parameters to be loaded
                0277       _BARRIER
                0278 
                0279 #endif /* ALLOW_BULK_FORCE */
                0280 
6a1d3c464b Jean*0281       RETURN
                0282       END