Changeset 8842


Ignore:
Timestamp:
2017-11-29T10:42:39+01:00 (3 years ago)
Author:
jchanut
Message:

Enhance4-freesurface. step 3: diffusive barotropic time stepping - #1959

Location:
branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/CONFIG/SHARED/namelist_ref

    r8599 r8842  
    835835         rn_bt_cmax   =  0.8        ! =T : the Maximum Courant Number allowed 
    836836         nn_baro      = 30          ! =F : the number of sub-step in rn_rdt seconds 
     837      rn_bt_alpha   = 0.         ! Temporal diffusion parameter (if ln_bt_av=F) 
    837838/ 
    838839!----------------------------------------------------------------------- 
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DOM/dom_oce.F90

    r7914 r8842  
    5353   INTEGER,  PUBLIC :: nn_baro          !: Number of barotropic iterations during one baroclinic step (rdt) 
    5454   REAL(wp), PUBLIC :: rn_bt_cmax       !: Maximum allowed courant number (used if ln_bt_auto=T) 
     55   REAL(wp), PUBLIC :: rn_bt_alpha      !: Time stepping diffusion parameter 
    5556 
    5657 
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90

    r7753 r8842  
    183183      NAMELIST/namdyn_spg/ ln_dynspg_exp       , ln_dynspg_ts,   & 
    184184      &                    ln_bt_fw, ln_bt_av  , ln_bt_auto  ,   & 
    185       &                    nn_baro , rn_bt_cmax, nn_bt_flt 
     185      &                    nn_baro , rn_bt_cmax, nn_bt_flt, rn_bt_alpha 
    186186      !!---------------------------------------------------------------------- 
    187187      ! 
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r8805 r8842  
    1616   !!             3.7  ! 2015-11  (J. Chanut) free surface simplification 
    1717   !!              -   ! 2016-12  (G. Madec, E. Clementi) update for Stoke-Drift divergence 
     18   !!              -   ! 2017-11  (J. Chanut) add optional temporal diffusion  
    1819   !!--------------------------------------------------------------------- 
    1920 
     
    150151      REAL(wp) ::   zhura, zhvra          !   -      - 
    151152      REAL(wp) ::   za0, za1, za2, za3    !   -      - 
     153      REAL(wp) ::   zepsilon, zgamma            !   -      - 
    152154      ! 
    153155      REAL(wp), POINTER, DIMENSION(:,:) :: zsshp2_e 
     
    758760           za3= 0._wp               
    759761         ELSE                               ! AB3-AM4 Coefficients; bet=0.281105 ; eps=0.013 ; gam=0.0880  
    760            za0=0.614_wp                     ! za0 = 1/2 +   gam + 2*eps     
    761            za1=0.285_wp                     ! za1 = 1/2 - 2*gam - 3*eps  
    762            za2=0.088_wp                     ! za2 = gam 
    763            za3=0.013_wp                     ! za3 = eps 
     762            IF (rn_bt_alpha==0._wp) THEN 
     763               za0=0.614_wp                 ! za0 = 1/2 +   gam + 2*eps 
     764               za1=0.285_wp                 ! za1 = 1/2 - 2*gam - 3*eps 
     765               za2=0.088_wp                 ! za2 = gam 
     766               za3=0.013_wp                 ! za3 = eps 
     767            ELSE 
     768               zepsilon = 0.00976186_wp - 0.13451357_wp * rn_bt_alpha 
     769               zgamma = 0.08344500_wp - 0.51358400_wp * rn_bt_alpha 
     770               za0 = 0.5_wp + zgamma + 2._wp * rn_bt_alpha + 2._wp * zepsilon 
     771               za1 = 1._wp - za0 - zgamma - zepsilon 
     772               za2 = zgamma 
     773               za3 = zepsilon 
     774            ENDIF 
    764775         ENDIF 
    765776         ! 
     
    10211032      zwx(:,:) = un_adv(:,:) 
    10221033      zwy(:,:) = vn_adv(:,:) 
     1034      IF  ( kt == nit000 .AND. neuler==0 ) un_bf(:,:) = 0._wp ; vn_bf(:,:) = 0._wp 
     1035      !      
    10231036      IF( ( kt == nit000 .AND. neuler==0 ) .OR. .NOT.ln_bt_fw ) THEN      
    10241037         un_adv(:,:) = zwx(:,:) * r1_hu_n(:,:) 
    10251038         vn_adv(:,:) = zwy(:,:) * r1_hv_n(:,:) 
    1026          ! 
    1027          un_bf(:,:) = 0._wp 
    1028          vn_bf(:,:) = 0._wp  
    10291039      ELSE 
    10301040         un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) - atfp * un_bf(:,:) ) * r1_hu_n(:,:) 
     
    13231333      IF(lwp) WRITE(numout,*) '     Maximum Courant number is   :', zcmax 
    13241334      ! 
     1335      IF(lwp) WRITE(numout,*)    '     Time diffusion parameter rn_bt_alpha: ', rn_bt_alpha 
     1336 
     1337      IF (rn_bt_alpha < 0._wp ) THEN 
     1338         CALL ctl_stop( 'dynspg_ts ERROR: rn_bt_alpha < 0, it must be >= 0.' ) 
     1339      ENDIF 
     1340 
     1341      IF ( ln_bt_av.AND.(rn_bt_alpha > 0._wp) ) THEN 
     1342         CALL ctl_stop( 'dynspg_ts ERROR: if rn_bt_alpha > 0, remove temporal averaging' ) 
     1343      ENDIF 
     1344      ! 
    13251345      IF( .NOT.ln_bt_av .AND. .NOT.ln_bt_fw ) THEN 
    13261346         CALL ctl_stop( 'dynspg_ts ERROR: No time averaging => only forward integration is possible' ) 
Note: See TracChangeset for help on using the changeset viewer.