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 15451 for NEMO/releases – NEMO

Changeset 15451 for NEMO/releases


Ignore:
Timestamp:
2021-10-27T16:46:28+02:00 (3 years ago)
Author:
clem
Message:

4.0-HEAD only: change vertical scale factors for embedded sea ice as proposed in ticket #2487.

Location:
NEMO/releases/r4.0/r4.0-HEAD/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/releases/r4.0/r4.0-HEAD/src/ICE/iceistate.F90

    r15405 r15451  
    9696      REAL(wp) ::   ztmelts 
    9797      INTEGER , DIMENSION(4)           ::   itest 
    98       REAL(wp), DIMENSION(jpi,jpj)     ::   z2d 
    9998      REAL(wp), DIMENSION(jpi,jpj)     ::   zswitch    ! ice indicator 
    10099      REAL(wp), DIMENSION(jpi,jpj)     ::   zht_i_ini, zat_i_ini, ztm_s_ini            !data from namelist or nc file 
     
    413412         IF( .NOT.ln_linssh ) THEN 
    414413            ! 
    415             WHERE( ht_0(:,:) > 0 )   ;   z2d(:,:) = 1._wp + sshn(:,:)*tmask(:,:,1) / ht_0(:,:) 
    416             ELSEWHERE                ;   z2d(:,:) = 1._wp   ;   END WHERE 
    417             ! 
    418             DO jk = 1,jpkm1                     ! adjust initial vertical scale factors                 
    419                e3t_n(:,:,jk) = e3t_0(:,:,jk) * ( z2d(:,:) * tmask(:,:,jk) - ( tmask(:,:,jk) - 1.0_wp ) ) 
    420                e3t_b(:,:,jk) = e3t_n(:,:,jk) 
    421                e3t_a(:,:,jk) = e3t_n(:,:,jk) 
     414            DO jk = 1, jpkm1            ! adjust initial vertical scale factors                 
     415               DO jj = 1, jpj 
     416                  DO ji = 1, jpi 
     417                     IF( snwice_mass(ji,jj) /= 0._wp ) THEN 
     418                        e3t_n(ji,jj,jk) = e3t_0(ji,jj,jk) * ( 1._wp + sshn(ji,jj) * tmask(ji,jj,jk) / ht_0(ji,jj) ) 
     419                        e3t_b(ji,jj,jk) = e3t_n(ji,jj,jk) 
     420                        e3t_a(ji,jj,jk) = e3t_n(ji,jj,jk) 
     421                     ENDIF 
     422                  END DO 
     423               END DO 
    422424            END DO 
    423425            ! 
    424             ! Reconstruction of all vertical scale factors at now and before time-steps 
    425             ! ========================================================================= 
    426             ! Horizontal scale factor interpolations 
    427             ! -------------------------------------- 
    428             CALL dom_vvl_interpol( e3t_b(:,:,:), e3u_b(:,:,:), 'U' ) 
    429             CALL dom_vvl_interpol( e3t_b(:,:,:), e3v_b(:,:,:), 'V' ) 
    430             CALL dom_vvl_interpol( e3t_n(:,:,:), e3u_n(:,:,:), 'U' ) 
    431             CALL dom_vvl_interpol( e3t_n(:,:,:), e3v_n(:,:,:), 'V' ) 
    432             CALL dom_vvl_interpol( e3u_n(:,:,:), e3f_n(:,:,:), 'F' ) 
    433             ! Vertical scale factor interpolations 
    434             ! ------------------------------------ 
    435             CALL dom_vvl_interpol( e3t_n(:,:,:), e3w_n (:,:,:), 'W'  ) 
    436             CALL dom_vvl_interpol( e3u_n(:,:,:), e3uw_n(:,:,:), 'UW' ) 
    437             CALL dom_vvl_interpol( e3v_n(:,:,:), e3vw_n(:,:,:), 'VW' ) 
    438             CALL dom_vvl_interpol( e3u_b(:,:,:), e3uw_b(:,:,:), 'UW' ) 
    439             CALL dom_vvl_interpol( e3v_b(:,:,:), e3vw_b(:,:,:), 'VW' ) 
    440             ! t- and w- points depth 
    441             ! ---------------------- 
    442             !!gm not sure of that.... 
    443             gdept_n(:,:,1) = 0.5_wp * e3w_n(:,:,1) 
    444             gdepw_n(:,:,1) = 0.0_wp 
    445             gde3w_n(:,:,1) = gdept_n(:,:,1) - sshn(:,:) 
    446             DO jk = 2, jpk 
    447                gdept_n(:,:,jk) = gdept_n(:,:,jk-1) + e3w_n(:,:,jk  ) 
    448                gdepw_n(:,:,jk) = gdepw_n(:,:,jk-1) + e3t_n(:,:,jk-1) 
    449                gde3w_n(:,:,jk) = gdept_n(:,:,jk  ) - sshn (:,:) 
    450             END DO 
     426            CALL dom_vvl_zgr            ! interpolation of all scale factors  
     427            ! 
    451428         ENDIF 
     429         ! 
    452430      ENDIF 
    453431 
  • NEMO/releases/r4.0/r4.0-HEAD/src/OCE/DOM/domvvl.F90

    r11536 r15451  
    1212   !!---------------------------------------------------------------------- 
    1313   !!   dom_vvl_init     : define initial vertical scale factors, depths and column thickness 
     14   !!   dom_vvl_zgr      : most part of dom_vvl_init 
    1415   !!   dom_vvl_sf_nxt   : Compute next vertical scale factors 
    1516   !!   dom_vvl_sf_swp   : Swap vertical scale factors and update the vertical grid 
     
    3637 
    3738   PUBLIC  dom_vvl_init       ! called by domain.F90 
     39   PUBLIC  dom_vvl_zgr        ! called by iceistate.F90 
    3840   PUBLIC  dom_vvl_sf_nxt     ! called by step.F90 
    3941   PUBLIC  dom_vvl_sf_swp     ! called by step.F90 
     
    115117      !! Reference  : Leclair, M., and G. Madec, 2011, Ocean Modelling. 
    116118      !!---------------------------------------------------------------------- 
     119      ! 
     120      IF(lwp) WRITE(numout,*) 
     121      IF(lwp) WRITE(numout,*) 'dom_vvl_init : Variable volume activated' 
     122      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
     123      ! 
     124      CALL dom_vvl_ctl     ! choose vertical coordinate (z_star, z_tilde or layer) 
     125      ! 
     126      !                    ! Allocate module arrays 
     127      IF( dom_vvl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dom_vvl_init : unable to allocate arrays' ) 
     128      ! 
     129      !                    ! Read or initialize e3t_(b/n), tilde_e3t_(b/n) and hdiv_lf 
     130      CALL dom_vvl_rst( nit000, 'READ' ) 
     131      e3t_a(:,:,jpk) = e3t_0(:,:,jpk)  ! last level always inside the sea floor set one for all 
     132      ! 
     133      CALL dom_vvl_zgr 
     134      ! 
     135      IF(lwxios) THEN 
     136! define variables in restart file when writing with XIOS 
     137         CALL iom_set_rstw_var_active('e3t_b') 
     138         CALL iom_set_rstw_var_active('e3t_n') 
     139         !                                           ! ----------------------- ! 
     140         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
     141            !                                        ! ----------------------- ! 
     142            CALL iom_set_rstw_var_active('tilde_e3t_b') 
     143            CALL iom_set_rstw_var_active('tilde_e3t_n') 
     144         END IF 
     145         !                                           ! -------------!     
     146         IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
     147            !                                        ! ------------ ! 
     148            CALL iom_set_rstw_var_active('hdiv_lf') 
     149         ENDIF 
     150         ! 
     151      ENDIF 
     152      ! 
     153   END SUBROUTINE dom_vvl_init 
     154 
     155   SUBROUTINE dom_vvl_zgr 
     156      !!---------------------------------------------------------------------- 
     157      !!                ***  ROUTINE dom_vvl_zgr  *** 
     158      !! 
     159      !! ** Purpose :  Interpolation of all scale factors, 
     160      !!               depths and water column heights 
     161      !! 
     162      !! ** Method  :  - interpolate scale factors 
     163      !! 
     164      !! ** Action  : - e3t_(n/b) and tilde_e3t_(n/b) 
     165      !!              - Regrid: e3(u/v)_n 
     166      !!                        e3(u/v)_b 
     167      !!                        e3w_n 
     168      !!                        e3(u/v)w_b 
     169      !!                        e3(u/v)w_n 
     170      !!                        gdept_n, gdepw_n and gde3w_n 
     171      !!              - h(t/u/v)_0 
     172      !!              - frq_rst_e3t and frq_rst_hdv 
     173      !! 
     174      !! Reference  : Leclair, M., and G. Madec, 2011, Ocean Modelling. 
     175      !!---------------------------------------------------------------------- 
    117176      INTEGER ::   ji, jj, jk 
    118177      INTEGER ::   ii0, ii1, ij0, ij1 
    119178      REAL(wp)::   zcoef 
    120179      !!---------------------------------------------------------------------- 
    121       ! 
    122       IF(lwp) WRITE(numout,*) 
    123       IF(lwp) WRITE(numout,*) 'dom_vvl_init : Variable volume activated' 
    124       IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 
    125       ! 
    126       CALL dom_vvl_ctl     ! choose vertical coordinate (z_star, z_tilde or layer) 
    127       ! 
    128       !                    ! Allocate module arrays 
    129       IF( dom_vvl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dom_vvl_init : unable to allocate arrays' ) 
    130       ! 
    131       !                    ! Read or initialize e3t_(b/n), tilde_e3t_(b/n) and hdiv_lf 
    132       CALL dom_vvl_rst( nit000, 'READ' ) 
    133       e3t_a(:,:,jpk) = e3t_0(:,:,jpk)  ! last level always inside the sea floor set one for all 
    134       ! 
    135180      !                    !== Set of all other vertical scale factors  ==!  (now and before) 
    136181      !                                ! Horizontal interpolation of e3t 
     
    160205      gdepw_b(:,:,1) = 0.0_wp 
    161206      DO jk = 2, jpk                               ! vertical sum 
    162          DO jj = 1,jpj 
    163             DO ji = 1,jpi 
     207         DO jj = 1, jpj 
     208            DO ji = 1, jpi 
    164209               !    zcoef = tmask - wmask    ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
    165210               !                             ! 1 everywhere from mbkt to mikt + 1 or 1 (if no isf) 
     
    245290      ENDIF 
    246291      ! 
    247       IF(lwxios) THEN 
    248 ! define variables in restart file when writing with XIOS 
    249          CALL iom_set_rstw_var_active('e3t_b') 
    250          CALL iom_set_rstw_var_active('e3t_n') 
    251          !                                           ! ----------------------- ! 
    252          IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN  ! z_tilde and layer cases ! 
    253             !                                        ! ----------------------- ! 
    254             CALL iom_set_rstw_var_active('tilde_e3t_b') 
    255             CALL iom_set_rstw_var_active('tilde_e3t_n') 
    256          END IF 
    257          !                                           ! -------------!     
    258          IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    259             !                                        ! ------------ ! 
    260             CALL iom_set_rstw_var_active('hdiv_lf') 
    261          ENDIF 
    262          ! 
    263       ENDIF 
    264       ! 
    265    END SUBROUTINE dom_vvl_init 
    266  
    267  
     292   END SUBROUTINE dom_vvl_zgr 
     293    
    268294   SUBROUTINE dom_vvl_sf_nxt( kt, kcall )  
    269295      !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.