Ignore:
Timestamp:
2015-05-15T16:05:39+02:00 (6 years ago)
Author:
rfurner
Message:

added Charnock coefficient for wind forcing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/2014_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r4708 r5275  
    8383   REAL(wp) ::   rn_zqt      ! z(q,t) : height of humidity and temperature measurements 
    8484   REAL(wp) ::   rn_zu       ! z(u)   : height of wind measurements 
     85   LOGICAL  ::   ln_charnock ! logical flag for charnock wind stress in surge model(true) or not(false) 
    8586 
    8687   !! * Substitutions 
     
    139140         &                  sn_wndi, sn_wndj, sn_humi  , sn_qsr ,           & 
    140141         &                  sn_qlw , sn_tair, sn_prec  , sn_snow,           & 
    141          &                  sn_tdif, rn_zqt , ln_bulk2z, rn_zu 
     142         &                  sn_tdif, rn_zqt , ln_bulk2z, rn_zu, ln_charnock  
    142143      !!--------------------------------------------------------------------- 
    143144 
     
    239240      INTEGER  ::   ji, jj               ! dummy loop indices 
    240241      REAL(wp) ::   zcoef_qsatw, zztmp   ! local variable 
     242      REAL(wp) ::   z_z0, z_Cd1          ! local variable 
     243      REAL(wp) ::   i                    ! local variable 
     244      REAL(wp) ::   charn_const=0.0275    ! local variable 
    241245      REAL(wp), DIMENSION(:,:), POINTER ::   zwnd_i, zwnd_j    ! wind speed components at T-point 
    242246      REAL(wp), DIMENSION(:,:), POINTER ::   zqsatw            ! specific humidity at pst 
     
    300304      !      I   Radiative FLUXES                                                     ! 
    301305      ! ----------------------------------------------------------------------------- ! 
    302      
     306       
    303307      ! ocean albedo assumed to be constant + modify now Qsr to include the diurnal cycle                    ! Short Wave 
    304308      zztmp = 1. - albo 
     
    316320      !     II    Turbulent FLUXES                                                    ! 
    317321      ! ----------------------------------------------------------------------------- ! 
    318  
    319       ! ... specific humidity at SST and IST 
     322      IF (ln_charnock) THEN 
     323          Cd(:,:)=0.0001_wp 
     324          DO jj = 1,jpj 
     325             DO ji = 1,jpi 
     326                z_Cd1=0._wp 
     327                i=1 
     328                !Iterate 
     329                DO WHILE((abs(Cd(ji,jj)-z_Cd1))>1E-6) 
     330                z_Cd1=Cd(ji,jj) 
     331                z_z0=charn_const*z_Cd1*wndm(ji,jj)**2/grav 
     332                Cd(ji,jj)=(0.41_wp/log(10._wp/z_z0))**2 
     333                i=i+1 
     334                ENDDO 
     335             ENDDO 
     336          ENDDO 
     337      ELSE 
     338 
     339        ! ... specific humidity at SST and IST 
    320340!CDIR NOVERRCHK 
    321341!CDIR COLLAPSE 
    322       zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) )  
    323  
    324       ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 
    325       IF( ln_2m ) THEN 
    326          !! If air temp. and spec. hum. are given at different height (2m) than wind (10m) : 
    327          CALL TURB_CORE_2Z(2.,10., zst   , sf(jp_tair)%fnow,         & 
    328             &                      zqsatw, sf(jp_humi)%fnow, wndm,   & 
    329             &                      Cd    , Ch              , Ce  ,   & 
    330             &                      zt_zu , zq_zu                   ) 
    331       ELSE IF( ln_bulk2z ) THEN 
    332          !! If the height of the air temp./spec. hum. and wind are to be specified by hand : 
    333          IF( rn_zqt == rn_zu ) THEN 
    334             !! If air temp. and spec. hum. are at the same height as wind : 
    335             CALL TURB_CORE_1Z( rn_zu, zst   , sf(jp_tair)%fnow(:,:,1),       & 
    336                &                      zqsatw, sf(jp_humi)%fnow(:,:,1), wndm, & 
    337                &                      Cd    , Ch                     , Ce  ) 
    338          ELSE 
    339             !! If air temp. and spec. hum. are at a different height to wind : 
    340             CALL TURB_CORE_2Z(rn_zqt, rn_zu , zst   , sf(jp_tair)%fnow,         & 
    341                &                              zqsatw, sf(jp_humi)%fnow, wndm,   & 
    342                &                              Cd    , Ch              , Ce  ,   & 
    343                &                              zt_zu , zq_zu                 ) 
    344          ENDIF 
    345       ELSE 
    346          !! If air temp. and spec. hum. are given at same height than wind (10m) : 
     342        zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) )  
     343 
     344        ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 
     345        IF( ln_2m ) THEN 
     346           !! If air temp. and spec. hum. are given at different height (2m) than wind (10m) : 
     347           CALL TURB_CORE_2Z(2.,10., zst   , sf(jp_tair)%fnow,         & 
     348              &                      zqsatw, sf(jp_humi)%fnow, wndm,   & 
     349              &                      Cd    , Ch              , Ce  ,   & 
     350              &                      zt_zu , zq_zu                   ) 
     351        ELSE IF( ln_bulk2z ) THEN 
     352           !! If the height of the air temp./spec. hum. and wind are to be specified by hand : 
     353           IF( rn_zqt == rn_zu ) THEN 
     354              !! If air temp. and spec. hum. are at the same height as wind : 
     355              CALL TURB_CORE_1Z( rn_zu, zst   , sf(jp_tair)%fnow(:,:,1),       & 
     356                 &                      zqsatw, sf(jp_humi)%fnow(:,:,1), wndm, & 
     357                 &                      Cd    , Ch                     , Ce  ) 
     358           ELSE 
     359              !! If air temp. and spec. hum. are at a different height to wind : 
     360              CALL TURB_CORE_2Z(rn_zqt, rn_zu , zst   , sf(jp_tair)%fnow,         & 
     361                 &                              zqsatw, sf(jp_humi)%fnow, wndm,   & 
     362                 &                              Cd    , Ch              , Ce  ,   & 
     363                 &                              zt_zu , zq_zu                 ) 
     364           ENDIF 
     365        ELSE 
     366           !! If air temp. and spec. hum. are given at same height than wind (10m) : 
    347367!gm bug?  at the compiling phase, add a copy in temporary arrays...  ==> check perf 
    348 !         CALL TURB_CORE_1Z( 10., zst   (:,:), sf(jp_tair)%fnow(:,:),              & 
    349 !            &                    zqsatw(:,:), sf(jp_humi)%fnow(:,:), wndm(:,:),   & 
    350 !            &                    Cd    (:,:),             Ch  (:,:), Ce  (:,:)  ) 
     368!           CALL TURB_CORE_1Z( 10., zst   (:,:), sf(jp_tair)%fnow(:,:),              & 
     369!              &                    zqsatw(:,:), sf(jp_humi)%fnow(:,:), wndm(:,:),   & 
     370!              &                    Cd    (:,:),             Ch  (:,:), Ce  (:,:)  ) 
    351371!gm bug 
    352372! ARPDBG - this won't compile with gfortran. Fix but check performance 
    353373! as per comment above. 
    354          CALL TURB_CORE_1Z( 10., zst   , sf(jp_tair)%fnow(:,:,1),       & 
    355             &                    zqsatw, sf(jp_humi)%fnow(:,:,1), wndm, & 
    356             &                    Cd    , Ch              , Ce    ) 
     374           CALL TURB_CORE_1Z( 10., zst   , sf(jp_tair)%fnow(:,:,1),       & 
     375              &                    zqsatw, sf(jp_humi)%fnow(:,:,1), wndm, & 
     376              &                    Cd    , Ch              , Ce    ) 
     377        ENDIF 
     378 
    357379      ENDIF 
    358380 
Note: See TracChangeset for help on using the changeset viewer.