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 – NEMO

Changeset 6389


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
Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/CONFIG/AMM7_SURGE/EXP00/iodef.xml

    r6270 r6389  
    115115     <variable id="buffer_server_factor_size" type="integer">2</variable> 
    116116     <variable id="info_level"                type="integer">0</variable> 
    117      <variable id="using_server"              type="boolean">false</variable> 
     117     <variable id="using_server"              type="boolean">true</variable> 
    118118     <variable id="using_oasis"               type="boolean">false</variable> 
    119119     <variable id="oasis_codes_id"            type="string" >oceanx</variable> 
  • branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/CONFIG/AMM7_SURGE/EXP00/namelist_cfg

    r5811 r6389  
    7474&namsplit      !   time splitting parameters                            ("key_dynspg_ts") 
    7575!----------------------------------------------------------------------- 
    76    ln_bt_nn_auto =    .FALSE.          !  Set nn_baro automatically to be just below 
     76   ln_bt_nn_auto =    .true.           !  Set nn_baro automatically to be just below 
    7777                                       !  a user defined maximum courant number (rn_bt_cmax) 
    7878   nn_baro       =    30               !  Number of iterations of barotropic mode 
     
    9494   nn_fsbc     = 1         !  frequency of surface boundary condition computation 
    9595                           !     (also = the frequency of sea-ice model call) 
    96    ln_ana      = .true.    !  flux formulation       (T => fill namsbc_flx ) 
     96   ln_sbcsurge = .true.    !  flux formulation       (T => fill namsbc_flx ) 
    9797   ln_blk_core = .false.   !  CORE bulk formulation                     (T => fill namsbc_core) 
    9898   nn_ice      = 0         !  =0 no ice boundary condition   , 
     
    131131   ln_taudif   = .false.   !  HF tau contribution: use "mean of stress module - module of the mean stress" data 
    132132   rn_pfac     = 1.        !  multiplicative factor for precipitation (total & snow) 
    133    ln_charnock = .true.    ! logical flag for charnock wind stress in surge model(true) or not(false) 
    134133/ 
    135134!----------------------------------------------------------------------- 
    136135&namsbc_mfs   !   namsbc_mfs  MFS bulk formulae 
    137136!----------------------------------------------------------------------- 
     137/ 
     138!----------------------------------------------------------------------- 
     139&namsbc_surge  !   namsbc_surge   surge model fluxes 
     140!----------------------------------------------------------------------- 
     141!              !  file name                    ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! 
     142!              !                               !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! 
     143   sn_wndi     = 'windspd_u_amm7'              ,       3          , 'U10'     ,   .true.     , .false. , 'daily'  ,'' , '' 
     144   sn_wndj     = 'windspd_v_amm7'              ,       3          , 'V10'     ,   .true.     , .false. , 'daily'  ,'' , '' 
     145   cn_dir      = './fluxes/'          !  root directory for the location of the bulk files 
     146   rn_vfac     = 1.                   !  multiplicative factor for precipitation (total & snow) 
     147   rn_charn_const = 0.0275 
    138148/ 
    139149!----------------------------------------------------------------------- 
     
    251261   nn_bfr      =    2      !  type of bottom friction :   = 0 : free slip,  = 1 : linear friction 
    252262                           !                              = 2 : nonlinear friction 
    253    rn_bfri2    =    2.5e-3 !  bottom drag coefficient (non linear case) 
     263   rn_bfri2    =    2.4e-3 !  bottom drag coefficient (non linear case) 
    254264   rn_bfeb2    =    0.0e0  !  bottom turbulent kinetic energy background  (m2/s2) 
    255265   ln_loglayer =   .false. !  loglayer bottom friction (only effect when nn_bfr = 2) 
  • branches/UKMO/dev_r5518_Surge_Modelling/NEMOGCM/CONFIG/AMM7_SURGE/EXP00/namelist_ref

    r6269 r6389  
    298298 
    299299   cn_dir      = './'      !  root directory for the location of the flux files 
     300   ln_charnock = .true.    !  logical flag for charnock wind stress in surge model(true) or not(false) 
     301   rn_charn_const=0.0275   !  Charnock coefficient 
    300302/ 
    301303!----------------------------------------------------------------------- 
     
    338340                           !  in the calculation of the wind stress (0.=absolute winds or 1.=relative winds) 
    339341   ln_charnock = .false.   ! logical flag for charnock wind stress in surge model(true) or not(false) 
     342   rn_charn_const=0.0275   !  Charnock coefficient 
    340343/ 
    341344!----------------------------------------------------------------------- 
     
    353356 
    354357   cn_dir      = './ECMWF/'      !  root directory for the location of the bulk files 
     358/ 
     359!----------------------------------------------------------------------- 
     360&namsbc_surge  !   namsbc_surge   surge model fluxes 
     361!----------------------------------------------------------------------- 
     362!              !  file name                    ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! 
     363!              !                               !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! 
     364   sn_wndi     = 'windspd_u_amm7'              ,       3          , 'U10'     ,   .true.     , .false. , 'daily'  ,'' , '' 
     365   sn_wndj     = 'windspd_v_amm7'              ,       3          , 'V10'     ,   .true.     , .false. , 'daily'  ,'' , '' 
     366   cn_dir      = './fluxes/'      !  root directory for the location of the bulk files 
     367   rn_vfac     = 1.        !  multiplicative factor for precipitation (total & snow) 
     368   rn_charn_const = 0.0275 
    355369/ 
    356370!----------------------------------------------------------------------- 
  • 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.