Changeset 8888


Ignore:
Timestamp:
2017-12-04T12:04:58+01:00 (3 years ago)
Author:
jchanut
Message:

Enhance4-freesurface. Minor corrections after testing, update namelists - #1959

Location:
branches/2017/dev_r8624_ENHANCE4_FREESURFACE
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/DOC/Namelists/namdyn_spg

    r6140 r8888  
    1212         rn_bt_cmax   =  0.8        ! =T : the Maximum Courant Number allowed 
    1313         nn_baro      = 30          ! =F : the number of sub-step in rn_rdt seconds 
     14      rn_bt_alpha   = 0.1        ! Temporal diffusion parameter (if ln_bt_av=F) 
    1415/ 
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/CONFIG/SHARED/namelist_ref

    r8842 r8888  
    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) 
     837      rn_bt_alpha   = 0.1        ! Temporal diffusion parameter (if ln_bt_av=F) 
    838838/ 
    839839!----------------------------------------------------------------------- 
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynnxt.F90

    r8805 r8888  
    132132            ! so that asselin contribution is removed at the same time  
    133133            DO jk = 1, jpkm1 
    134                un(:,:,jk) = ( un(:,:,jk) - un_adv(:,:) + un_b(:,:) )*umask(:,:,jk) 
    135                vn(:,:,jk) = ( vn(:,:,jk) - vn_adv(:,:) + vn_b(:,:) )*vmask(:,:,jk) 
     134               un(:,:,jk) = ( un(:,:,jk) - un_adv(:,:)*r1_hu_n(:,:) + un_b(:,:) )*umask(:,:,jk) 
     135               vn(:,:,jk) = ( vn(:,:,jk) - vn_adv(:,:)*r1_hv_n(:,:) + vn_b(:,:) )*vmask(:,:,jk) 
    136136            END DO   
    137137         ENDIF 
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r8842 r8888  
    7777 
    7878   !! Time filtered arrays at baroclinic time step: 
    79    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv , vn_adv     !: Advection vel. at "now" barocl. step 
     79   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_adv , vn_adv     !: Advection fluxes at "now" barocl. step 
    8080 
    8181   !! * Substitutions 
     
    128128      !!      -Update the filtered free surface at step "n+1"      : ssha 
    129129      !!      -Update filtered barotropic velocities at step "n+1" : ua_b, va_b 
    130       !!      -Compute barotropic advective velocities at step "n" : un_adv, vn_adv 
     130      !!      -Compute barotropic advective fluxes at step "n"    : un_adv, vn_adv 
    131131      !!      These are used to advect tracers and are compliant with discrete 
    132132      !!      continuity equation taken at the baroclinic time steps. This  
     
    10301030      ! 
    10311031      ! Set advection velocity correction: 
    1032       zwx(:,:) = un_adv(:,:) 
    1033       zwy(:,:) = vn_adv(:,:) 
    1034       IF  ( kt == nit000 .AND. neuler==0 ) un_bf(:,:) = 0._wp ; vn_bf(:,:) = 0._wp 
    1035       !      
    1036       IF( ( kt == nit000 .AND. neuler==0 ) .OR. .NOT.ln_bt_fw ) THEN      
    1037          un_adv(:,:) = zwx(:,:) * r1_hu_n(:,:) 
    1038          vn_adv(:,:) = zwy(:,:) * r1_hv_n(:,:) 
    1039       ELSE 
    1040          un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) - atfp * un_bf(:,:) ) * r1_hu_n(:,:) 
    1041          vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:) - atfp * vn_bf(:,:) ) * r1_hv_n(:,:) 
    1042          ! Update corrective fluxes for next time step: 
    1043          un_bf(:,:)  = atfp * un_bf(:,:) + (zwx(:,:) - ub2_b(:,:)) 
    1044          vn_bf(:,:)  = atfp * vn_bf(:,:) + (zwy(:,:) - vb2_b(:,:)) 
    1045       END IF 
    1046  
    1047       IF( ln_bt_fw ) THEN ! Save integrated transport for next computation 
     1032      IF (ln_bt_fw) THEN 
     1033         zwx(:,:) = un_adv(:,:) 
     1034         zwy(:,:) = vn_adv(:,:) 
     1035         IF( .NOT.( kt == nit000 .AND. neuler==0 ) ) THEN 
     1036            un_adv(:,:) = z1_2 * ( ub2_b(:,:) + zwx(:,:) - atfp * un_bf(:,:) ) 
     1037            vn_adv(:,:) = z1_2 * ( vb2_b(:,:) + zwy(:,:) - atfp * vn_bf(:,:) ) 
     1038            ! 
     1039            ! Update corrective fluxes for next time step: 
     1040            un_bf(:,:)  = atfp * un_bf(:,:) + (zwx(:,:) - ub2_b(:,:)) 
     1041            vn_bf(:,:)  = atfp * vn_bf(:,:) + (zwy(:,:) - vb2_b(:,:)) 
     1042         ELSE 
     1043            un_bf(:,:) = 0._wp 
     1044            vn_bf(:,:) = 0._wp  
     1045         END IF          
     1046         ! Save integrated transport for next computation 
    10481047         ub2_b(:,:) = zwx(:,:) 
    10491048         vb2_b(:,:) = zwy(:,:) 
     
    10811080      DO jk = 1, jpkm1 
    10821081         ! Correct velocities: 
    1083          un(:,:,jk) = ( un(:,:,jk) + un_adv(:,:) - un_b(:,:) ) * umask(:,:,jk) 
    1084          vn(:,:,jk) = ( vn(:,:,jk) + vn_adv(:,:) - vn_b(:,:) ) * vmask(:,:,jk) 
     1082         un(:,:,jk) = ( un(:,:,jk) + un_adv(:,:)*r1_hu_n(:,:) - un_b(:,:) ) * umask(:,:,jk) 
     1083         vn(:,:,jk) = ( vn(:,:,jk) + vn_adv(:,:)*r1_hv_n(:,:) - vn_b(:,:) ) * vmask(:,:,jk) 
    10851084         ! 
    10861085      END DO 
    10871086      ! 
    1088       CALL iom_put(  "ubar", un_adv(:,:)      )    ! barotropic i-current 
    1089       CALL iom_put(  "vbar", vn_adv(:,:)      )    ! barotropic i-current 
     1087      CALL iom_put(  "ubar", un_adv(:,:)*r1_hu_n(:,:) )    ! barotropic i-current 
     1088      CALL iom_put(  "vbar", vn_adv(:,:)*r1_hv_n(:,:) )    ! barotropic i-current 
    10901089      ! 
    10911090#if defined key_agrif 
     
    13201319#endif 
    13211320      ! 
    1322       IF(lwp) WRITE(numout,*)    '     Time filter choice, nn_bt_flt: ', nn_bt_flt 
    1323       SELECT CASE ( nn_bt_flt ) 
    1324          CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '           Dirac' 
    1325          CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = nn_baro' 
    1326          CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_baro'  
    1327          CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1,2' ) 
    1328       END SELECT 
     1321      IF(ln_bt_av) THEN 
     1322         IF(lwp) WRITE(numout,*)    '     Time filter choice, nn_bt_flt: ', nn_bt_flt 
     1323         SELECT CASE ( nn_bt_flt ) 
     1324            CASE( 0 )      ;   IF(lwp) WRITE(numout,*) '           Dirac' 
     1325            CASE( 1 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = nn_baro' 
     1326            CASE( 2 )      ;   IF(lwp) WRITE(numout,*) '           Boxcar: width = 2*nn_baro'  
     1327            CASE DEFAULT   ;   CALL ctl_stop( 'unrecognised value for nn_bt_flt: should 0,1,2' ) 
     1328         END SELECT 
     1329      ENDIF 
    13291330      ! 
    13301331      IF(lwp) WRITE(numout,*) ' ' 
     
    13391340      ENDIF 
    13401341 
    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' ) 
     1342      IF ( ln_bt_av.AND.(rn_bt_alpha /= 0._wp) ) THEN 
     1343         CALL ctl_warn( 'dynspg_ts: with temporal averaging, we assume rn_bt_alpha=0.')  
     1344         rn_bt_alpha=0._wp 
    13431345      ENDIF 
    13441346      ! 
  • branches/2017/dev_r8624_ENHANCE4_FREESURFACE/NEMOGCM/NEMO/OPA_SRC/oce.F90

    r8805 r8888  
    4545   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::                              hvr_e  !: inverse of v-depth 
    4646   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_b  , vb2_b           !: Half step fluxes (ln_bt_fw=T) 
    47    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_bf  , vn_bf           !: Asselin filter corrective fluxes (ln_bt_fw=T) 
     47   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   un_bf  , vn_bf           !: Asselin filtered half step fluxes (ln_bt_fw=T) 
    4848#if defined key_agrif 
    4949   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   ub2_i_b, vb2_i_b         !: Half step time integrated fluxes  
Note: See TracChangeset for help on using the changeset viewer.