New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 6389 for branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO – NEMO

Ignore:
Timestamp:
2016-03-15T11:31:28+01:00 (8 years ago)
Author:
rfurner
Message:

Added surge flux formulation, and amended bottom friction coefficient

Location:
branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r5407 r6389  
    3535   LOGICAL , PUBLIC ::   ln_blk_core    !: CORE bulk formulation 
    3636   LOGICAL , PUBLIC ::   ln_blk_mfs     !: MFS  bulk formulation 
     37   LOGICAL , PUBLIC ::   ln_sbcsurge    !: Surge model formulation 
    3738#if defined key_oasis3 
    3839   LOGICAL , PUBLIC ::   lk_oasis = .TRUE.  !: OASIS used 
     
    8081   INTEGER , PUBLIC, PARAMETER ::   jp_mfs     = 6        !: MFS  bulk                     formulation 
    8182   INTEGER , PUBLIC, PARAMETER ::   jp_none    = 7        !: for OPA when doing coupling via SAS module 
     83   INTEGER , PUBLIC, PARAMETER ::   jp_sbcsurge= 8        !: for OPA when doing coupling via SAS module 
    8284   INTEGER , PUBLIC, PARAMETER ::   jp_esopa   = -1       !: esopa test, ALL formulations 
    8385    
  • branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r5954 r6389  
    9191   REAL(wp) ::   rn_zqt      ! z(q,t) : height of humidity and temperature measurements 
    9292   REAL(wp) ::   rn_zu       ! z(u)   : height of wind measurements 
    93    LOGICAL  ::   ln_charnock ! logical flag for charnock wind stress in surge model(true) or not(false) 
    9493 
    9594   !! * Substitutions 
     
    152151         &                  sn_wndi, sn_wndj, sn_humi  , sn_qsr ,           & 
    153152         &                  sn_qlw , sn_tair, sn_prec  , sn_snow,           & 
    154          &                  sn_tdif, rn_zqt , rn_zu, ln_charnock  
     153         &                  sn_tdif, rn_zqt , rn_zu 
    155154      !!--------------------------------------------------------------------- 
    156155      ! 
     
    248247      INTEGER  ::   ji, jj               ! dummy loop indices 
    249248      REAL(wp) ::   zcoef_qsatw, zztmp   ! local variable 
    250       REAL(wp) ::   z_z0, z_Cd1          ! local variable 
    251       REAL(wp) ::   i                    ! local variable 
    252       REAL(wp) ::   charn_const=0.0275    ! local variable 
    253249      REAL(wp), DIMENSION(:,:), POINTER ::   zwnd_i, zwnd_j    ! wind speed components at T-point 
    254250      REAL(wp), DIMENSION(:,:), POINTER ::   zqsatw            ! specific humidity at pst 
     
    307303      ! ocean albedo assumed to be constant + modify now Qsr to include the diurnal cycle                    ! Short Wave 
    308304      zztmp = 1. - albo 
    309 #if defined key_surge 
    310       qsr(:,:)=0._wp 
    311       zqlw(:,:) = 0._wp 
    312 #else 
    313305      IF( ln_dm2dc ) THEN   ;   qsr(:,:) = zztmp * sbc_dcy( sf(jp_qsr)%fnow(:,:,1) ) * tmask(:,:,1) 
    314306      ELSE                  ;   qsr(:,:) = zztmp *          sf(jp_qsr)%fnow(:,:,1)   * tmask(:,:,1) 
     
    316308 
    317309      zqlw(:,:) = (  sf(jp_qlw)%fnow(:,:,1) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:)  ) * tmask(:,:,1)   ! Long  Wave 
    318 #endif 
    319310      ! ----------------------------------------------------------------------------- ! 
    320311      !     II    Turbulent FLUXES                                                    ! 
    321312      ! ----------------------------------------------------------------------------- ! 
    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 
    340         zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) )  
    341  
    342         ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 
    343         CALL turb_core_2z( rn_zqt, rn_zu, zst, sf(jp_tair)%fnow, zqsatw, sf(jp_humi)%fnow, wndm,   & 
    344            &               Cd, Ch, Ce, zt_zu, zq_zu ) 
    345  
    346       ENDIF 
     313 
     314      ! ... specific humidity at SST and IST 
     315      zqsatw(:,:) = zcoef_qsatw * EXP( -5107.4 / zst(:,:) )  
     316 
     317      ! ... NCAR Bulk formulae, computation of Cd, Ch, Ce at T-point : 
     318      CALL turb_core_2z( rn_zqt, rn_zu, zst, sf(jp_tair)%fnow, zqsatw, sf(jp_humi)%fnow, wndm,   & 
     319         &               Cd, Ch, Ce, zt_zu, zq_zu ) 
    347320 
    348321      ! ... tau module, i and j component 
     
    379352      !  Turbulent fluxes over ocean 
    380353      ! ----------------------------- 
    381 #if ! defined key_surge 
    382354      IF( ABS( rn_zu - rn_zqt) < 0.01_wp ) THEN 
    383355         !! q_air and t_air are (or "are almost") given at 10m (wind reference height) 
     
    391363      ENDIF 
    392364      zqla (:,:) = Lv * zevap(:,:)                                                              ! Latent Heat 
    393 #endif 
    394365 
    395366      IF(ln_ctl) THEN 
     
    408379      ! ----------------------------------------------------------------------------- ! 
    409380      ! 
    410 #if defined key_surge 
    411       emp (:,:) = 0._wp 
    412       qns(:,:)  = 0._wp 
    413 #else 
    414381      emp (:,:) = (  zevap(:,:)                                          &   ! mass flux (evap. - precip.) 
    415382         &         - sf(jp_prec)%fnow(:,:,1) * rn_pfac  ) * tmask(:,:,1) 
     
    422389         &     + sf(jp_snow)%fnow(:,:,1) * rn_pfac                                &   ! add solid  precip heat content at min(Tair,Tsnow) 
    423390         &     * ( MIN( sf(jp_tair)%fnow(:,:,1), rt0_snow ) - rt0 ) * cpic * tmask(:,:,1) 
    424 #endif 
    425391      ! 
    426392#if defined key_lim3 
  • branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r5954 r6389  
    3434   USE sbcblk_core      ! surface boundary condition: bulk formulation : CORE 
    3535   USE sbcblk_mfs       ! surface boundary condition: bulk formulation : MFS 
     36   USE sbcsurge         ! surface boundary condition: charnock forumaltion for surge model 
    3637   USE sbcice_if        ! surface boundary condition: ice-if sea-ice model 
    3738   USE sbcice_lim       ! surface boundary condition: LIM 3.0 sea-ice model 
     
    8687      INTEGER ::   icpt   ! local integer 
    8788      !! 
    88       NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx, ln_blk_clio, ln_blk_core, ln_mixcpl,   & 
     89      NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx, ln_blk_clio, ln_blk_core, ln_sbcsurge, ln_mixcpl,   & 
    8990         &             ln_blk_mfs, ln_apr_dyn, nn_ice, nn_ice_embd, ln_dm2dc   , ln_rnf   ,   & 
    9091         &             ln_ssr    , nn_isf    , nn_fwb, ln_cdgw    , ln_wave    , ln_sdw   ,   & 
     
    130131         WRITE(numout,*) '              CORE bulk  formulation                     ln_blk_core = ', ln_blk_core 
    131132         WRITE(numout,*) '              MFS  bulk  formulation                     ln_blk_mfs  = ', ln_blk_mfs 
     133         WRITE(numout,*) '              surge      formulation                     ln_sbcsurge = ', ln_sbcsurge 
    132134         WRITE(numout,*) '              ocean-atmosphere coupled formulation       ln_cpl      = ', ln_cpl 
    133135         WRITE(numout,*) '              forced-coupled mixed formulation           ln_mixcpl   = ', ln_mixcpl 
     
    174176      IF( ln_mixcpl .AND. nn_components /= jp_iam_nemo )    & 
    175177         &      CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) is not yet working with sas-opa coupling via oasis' ) 
     178      IF ( lk_surge .and. .not. ( ln_sbcsurge .or. ln_ana ) ) & 
     179         &   CALL ctl_stop( ' surge model only compatible with analytical fluxes or surge formulae' )      
    176180 
    177181      !                              ! allocate sbc arrays 
     
    237241      IF( ln_blk_core     ) THEN   ;   nsbc = jp_core    ; icpt = icpt + 1   ;   ENDIF       ! CORE bulk            formulation 
    238242      IF( ln_blk_mfs      ) THEN   ;   nsbc = jp_mfs     ; icpt = icpt + 1   ;   ENDIF       ! MFS  bulk            formulation 
     243      IF( ln_sbcsurge     ) THEN   ;   nsbc = jp_sbcsurge; icpt = icpt + 1   ;   ENDIF       ! MFS  bulk            formulation 
    239244      IF( ll_purecpl      ) THEN   ;   nsbc = jp_purecpl ; icpt = icpt + 1   ;   ENDIF       ! Pure Coupled         formulation 
    240245      IF( cp_cfg == 'gyre') THEN   ;   nsbc = jp_gyre                        ;   ENDIF       ! GYRE analytical      formulation 
     
    250255         nstop = nstop + 1 
    251256      ENDIF 
    252       IF ( lk_surge .and. .not. ( ln_blk_core .or. ln_ana ) ) & 
    253          &   CALL ctl_stop( ' surge model only compatible with analytical fluxes or core formulae' )      
    254257      IF(lwp) THEN 
    255258         WRITE(numout,*) 
     
    262265         IF( nsbc == jp_purecpl )   WRITE(numout,*) '              pure coupled formulation' 
    263266         IF( nsbc == jp_mfs     )   WRITE(numout,*) '              MFS Bulk formulation' 
     267         IF( nsbc == jp_sbcsurge)   WRITE(numout,*) '              Surge formulation' 
    264268         IF( nsbc == jp_none    )   WRITE(numout,*) '              OPA coupled to SAS via oasis' 
    265269         IF( ln_mixcpl          )   WRITE(numout,*) '              + forced-coupled mixed formulation' 
     
    372376                                                                        ! 
    373377      CASE( jp_mfs   )   ;   CALL sbc_blk_mfs ( kt )                    ! bulk formulation : MFS for the ocean 
     378      CASE( jp_sbcsurge );   CALL sbc_surge   ( kt )                    ! surge formulation 
    374379      CASE( jp_none  )  
    375380         IF( nn_components == jp_iam_opa ) & 
Note: See TracChangeset for help on using the changeset viewer.