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 14125 for NEMO/trunk/src/OCE – NEMO

Changeset 14125 for NEMO/trunk/src/OCE


Ignore:
Timestamp:
2020-12-07T20:46:03+01:00 (3 years ago)
Author:
jchanut
Message:

#2222, restore correct ssh initialization from parent grid + suppress useless ice initializations (Clement)

Location:
NEMO/trunk/src/OCE/DOM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/DOM/domain.F90

    r14090 r14125  
    3434#endif 
    3535   USE sshwzv  , ONLY : ssh_init_rst   ! set initial ssh 
     36#if defined key_agrif 
     37   USE agrif_oce_interp, ONLY : Agrif_istate_ssh ! ssh interpolated from parent 
     38#endif 
    3639   USE sbc_oce        ! surface boundary condition: ocean 
    3740   USE trc_oce        ! shared ocean & passive tracers variab 
     
    178181      !                                 != ssh initialization 
    179182      IF( .NOT.l_offline .AND. .NOT.l_SAS ) THEN 
    180          CALL ssh_init_rst( Kbb, Kmm, Kaa ) 
     183#if defined key_agrif 
     184         IF ( .NOT.Agrif_root().AND.(ln_init_chfrpar) ) THEN 
     185            ! Interpolate initial ssh from parent: 
     186            CALL Agrif_istate_ssh( Kbb, Kmm ) 
     187         ELSE 
     188#endif 
     189            CALL ssh_init_rst( Kbb, Kmm, Kaa ) 
     190#if defined key_agrif 
     191         ENDIF 
     192#endif 
    181193      ELSE 
    182194         ssh(:,:,:) = 0._wp 
  • NEMO/trunk/src/OCE/DOM/domvvl.F90

    r14086 r14125  
    22   !!====================================================================== 
    33   !!                       ***  MODULE domvvl   *** 
    4    !! Ocean :  
     4   !! Ocean : 
    55   !!====================================================================== 
    66   !! History :  2.0  !  2006-06  (B. Levier, L. Marie)  original code 
     
    2626   USE timing          ! Timing 
    2727 
    28 #if defined key_agrif 
    29    USE agrif_oce       ! initial state interpolation 
    30    USE agrif_oce_interp  
    31 #endif 
    32  
    3328   IMPLICIT NONE 
    3429   PRIVATE 
     
    6358   !!   Default key      Old management of time varying vertical coordinate 
    6459   !!---------------------------------------------------------------------- 
    65     
     60 
    6661   !!---------------------------------------------------------------------- 
    6762   !!   dom_vvl_init     : define initial vertical scale factors, depths and column thickness 
     
    7873   PUBLIC  dom_vvl_sf_update  ! called by step.F90 
    7974   PUBLIC  dom_vvl_interpol   ! called by dynnxt.F90 
    80     
     75 
    8176   !! * Substitutions 
    8277#  include "do_loop_substitute.h90" 
     
    114109      !!---------------------------------------------------------------------- 
    115110      !!                ***  ROUTINE dom_vvl_init  *** 
    116       !!                    
     111      !! 
    117112      !! ** Purpose :  Initialization of all scale factors, depths 
    118113      !!               and water column heights 
     
    123118      !! ** Action  : - e3t_(n/b) and tilde_e3t_(n/b) 
    124119      !!              - Regrid: e3[u/v](:,:,:,Kmm) 
    125       !!                        e3[u/v](:,:,:,Kmm)        
    126       !!                        e3w(:,:,:,Kmm)            
     120      !!                        e3[u/v](:,:,:,Kmm) 
     121      !!                        e3w(:,:,:,Kmm) 
    127122      !!                        e3[u/v]w_b 
    128       !!                        e3[u/v]w_n       
     123      !!                        e3[u/v]w_n 
    129124      !!                        gdept(:,:,:,Kmm), gdepw(:,:,:,Kmm) and gde3w 
    130125      !!              - h(t/u/v)_0 
     
    156151      !!---------------------------------------------------------------------- 
    157152      !!                ***  ROUTINE dom_vvl_init  *** 
    158       !!                    
    159       !! ** Purpose :  Interpolation of all scale factors,  
     153      !! 
     154      !! ** Purpose :  Interpolation of all scale factors, 
    160155      !!               depths and water column heights 
    161156      !! 
     
    164159      !! ** Action  : - e3t_(n/b) and tilde_e3t_(n/b) 
    165160      !!              - 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       
     161      !!                        e3(u/v)_b 
     162      !!                        e3w_n 
     163      !!                        e3(u/v)w_b 
     164      !!                        e3(u/v)w_n 
    170165      !!                        gdept_n, gdepw_n and gde3w_n 
    171166      !!              - h(t/u/v)_0 
     
    185180      CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3u(:,:,:,Kbb), 'U' )    ! from T to U 
    186181      CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3u(:,:,:,Kmm), 'U' ) 
    187       CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3v(:,:,:,Kbb), 'V' )    ! from T to V  
     182      CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3v(:,:,:,Kbb), 'V' )    ! from T to V 
    188183      CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3v(:,:,:,Kmm), 'V' ) 
    189184      CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F' )    ! from U to F 
    190       !                                ! Vertical interpolation of e3t,u,v  
     185      !                                ! Vertical interpolation of e3t,u,v 
    191186      CALL dom_vvl_interpol( e3t(:,:,:,Kmm), e3w (:,:,:,Kmm), 'W'  )  ! from T to W 
    192187      CALL dom_vvl_interpol( e3t(:,:,:,Kbb), e3w (:,:,:,Kbb), 'W'  ) 
     
    210205         !    zcoef = tmask - wmask    ! 0 everywhere tmask = wmask, ie everywhere expect at jk = mikt 
    211206         !                             ! 1 everywhere from mbkt to mikt + 1 or 1 (if no isf) 
    212          !                             ! 0.5 where jk = mikt      
     207         !                             ! 0.5 where jk = mikt 
    213208!!gm ???????   BUG ?  gdept(:,:,:,Kmm) as well as gde3w  does not include the thickness of ISF ?? 
    214209         zcoef = ( tmask(ji,jj,jk) - wmask(ji,jj,jk) ) 
    215210         gdepw(ji,jj,jk,Kmm) = gdepw(ji,jj,jk-1,Kmm) + e3t(ji,jj,jk-1,Kmm) 
    216211         gdept(ji,jj,jk,Kmm) =      zcoef  * ( gdepw(ji,jj,jk  ,Kmm) + 0.5 * e3w(ji,jj,jk,Kmm))  & 
    217             &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm))  
     212            &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm)) 
    218213         gde3w(ji,jj,jk) = gdept(ji,jj,jk,Kmm) - ssh(ji,jj,Kmm) 
    219214         gdepw(ji,jj,jk,Kbb) = gdepw(ji,jj,jk-1,Kbb) + e3t(ji,jj,jk-1,Kbb) 
    220215         gdept(ji,jj,jk,Kbb) =      zcoef  * ( gdepw(ji,jj,jk  ,Kbb) + 0.5 * e3w(ji,jj,jk,Kbb))  & 
    221             &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kbb) +       e3w(ji,jj,jk,Kbb))  
     216            &                + (1-zcoef) * ( gdept(ji,jj,jk-1,Kbb) +       e3w(ji,jj,jk,Kbb)) 
    222217      END_3D 
    223218      ! 
     
    278273            IF( cn_cfg == "orca" .OR. cn_cfg == "ORCA" ) THEN 
    279274               IF( nn_cfg == 3 ) THEN   ! ORCA2: Suppress ztilde in the Foxe Basin for ORCA2 
    280                   ii0 = 103 + nn_hls - 1   ;   ii1 = 111 + nn_hls - 1       
     275                  ii0 = 103 + nn_hls - 1   ;   ii1 = 111 + nn_hls - 1 
    281276                  ij0 = 128 + nn_hls       ;   ij1 = 135 + nn_hls 
    282277                  frq_rst_e3t( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ) =  0.0_wp 
     
    290285 
    291286 
    292    SUBROUTINE dom_vvl_sf_nxt( kt, Kbb, Kmm, Kaa, kcall )  
     287   SUBROUTINE dom_vvl_sf_nxt( kt, Kbb, Kmm, Kaa, kcall ) 
    293288      !!---------------------------------------------------------------------- 
    294289      !!                ***  ROUTINE dom_vvl_sf_nxt  *** 
    295       !!                    
     290      !! 
    296291      !! ** Purpose :  - compute the after scale factors used in tra_zdf, dynnxt, 
    297292      !!                 tranxt and dynspg routines 
    298293      !! 
    299294      !! ** Method  :  - z_star case:  Repartition of ssh INCREMENT proportionnaly to the level thickness. 
    300       !!               - z_tilde_case: after scale factor increment =  
     295      !!               - z_tilde_case: after scale factor increment = 
    301296      !!                                    high frequency part of horizontal divergence 
    302297      !!                                  + retsoring towards the background grid 
     
    306301      !! 
    307302      !! ** Action  :  - hdiv_lf    : restoring towards full baroclinic divergence in z_tilde case 
    308       !!               - tilde_e3t_a: after increment of vertical scale factor  
     303      !!               - tilde_e3t_a: after increment of vertical scale factor 
    309304      !!                              in z_tilde case 
    310305      !!               - e3(t/u/v)_a 
     
    410405            un_td(ji,jj,jk) = rn_ahe3 * umask(ji,jj,jk) * e2_e1u(ji,jj)           & 
    411406               &            * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji+1,jj  ,jk) ) 
    412             vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * e1_e2v(ji,jj)           &  
     407            vn_td(ji,jj,jk) = rn_ahe3 * vmask(ji,jj,jk) * e1_e2v(ji,jj)           & 
    413408               &            * ( tilde_e3t_b(ji,jj,jk) - tilde_e3t_b(ji  ,jj+1,jk) ) 
    414409            zwu(ji,jj) = zwu(ji,jj) + un_td(ji,jj,jk) 
     
    455450               WRITE(numout, *) 'at i, j, k=', ijk_max 
    456451               WRITE(numout, *) 'MIN( tilde_e3t_a(:,:,:) / e3t_0(:,:,:) ) =', z_tmin 
    457                WRITE(numout, *) 'at i, j, k=', ijk_min             
     452               WRITE(numout, *) 'at i, j, k=', ijk_min 
    458453               CALL ctl_stop( 'STOP', 'MAX( ABS( tilde_e3t_a(:,:,: ) ) / e3t_0(:,:,:) ) too high') 
    459454            ENDIF 
     
    571566      !!---------------------------------------------------------------------- 
    572567      !!                ***  ROUTINE dom_vvl_sf_update  *** 
    573       !!                    
    574       !! ** Purpose :  for z tilde case: compute time filter and swap of scale factors  
     568      !! 
     569      !! ** Purpose :  for z tilde case: compute time filter and swap of scale factors 
    575570      !!               compute all depths and related variables for next time step 
    576571      !!               write outputs and restart file 
     
    582577      !! ** Action  :  - tilde_e3t_(b/n) ready for next time step 
    583578      !!               - Recompute: 
    584       !!                    e3(u/v)_b        
    585       !!                    e3w(:,:,:,Kmm)            
    586       !!                    e3(u/v)w_b       
    587       !!                    e3(u/v)w_n       
     579      !!                    e3(u/v)_b 
     580      !!                    e3w(:,:,:,Kmm) 
     581      !!                    e3(u/v)w_b 
     582      !!                    e3(u/v)w_n 
    588583      !!                    gdept(:,:,:,Kmm), gdepw(:,:,:,Kmm)  and gde3w 
    589584      !!                    h(u/v) and h(u/v)r 
     
    616611            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) 
    617612         ELSE 
    618             tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) &  
     613            tilde_e3t_b(:,:,:) = tilde_e3t_n(:,:,:) & 
    619614            &         + rn_atfp * ( tilde_e3t_b(:,:,:) - 2.0_wp * tilde_e3t_n(:,:,:) + tilde_e3t_a(:,:,:) ) 
    620615         ENDIF 
     
    628623      ! - ML - e3u(:,:,:,Kbb) and e3v(:,:,:,Kbb) are already computed in dynnxt 
    629624      ! - JC - hu(:,:,:,Kbb), hv(:,:,:,:,Kbb), hur_b, hvr_b also 
    630        
     625 
    631626      CALL dom_vvl_interpol( e3u(:,:,:,Kmm), e3f(:,:,:), 'F'  ) 
    632        
     627 
    633628      ! Vertical scale factor interpolations 
    634629      CALL dom_vvl_interpol( e3t(:,:,:,Kmm),  e3w(:,:,:,Kmm), 'W'  ) 
     
    649644         gdepw(ji,jj,jk,Kmm) = gdepw(ji,jj,jk-1,Kmm) + e3t(ji,jj,jk-1,Kmm) 
    650645         gdept(ji,jj,jk,Kmm) =    zcoef  * ( gdepw(ji,jj,jk  ,Kmm) + 0.5 * e3w(ji,jj,jk,Kmm) )  & 
    651              &             + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm) )  
     646             &             + (1-zcoef) * ( gdept(ji,jj,jk-1,Kmm) +       e3w(ji,jj,jk,Kmm) ) 
    652647         gde3w(ji,jj,jk) = gdept(ji,jj,jk,Kmm) - ssh(ji,jj,Kmm) 
    653648      END_3D 
     
    768763      !!--------------------------------------------------------------------- 
    769764      !!                   ***  ROUTINE dom_vvl_rst  *** 
    770       !!                      
     765      !! 
    771766      !! ** Purpose :   Read or write VVL file in restart file 
    772767      !! 
     
    800795         IF( ln_rstart ) THEN                   !==  Read the restart file  ==! 
    801796            ! 
    802 #if defined key_agrif 
    803             IF ( (.NOT.Agrif_root()).AND.(ln_init_chfrpar) ) THEN 
    804                ! skip reading restart if initialized from parent: 
    805                id3 = -1 ; id4 = -1 ; id5 = -1 
    806             ELSE 
    807 #endif 
    808797            CALL rst_read_open                                          !*  open the restart file if necessary 
    809798            !                                         ! --------- ! 
     
    815804            id5 = iom_varid( numror, 'hdiv_lf'    , ldstop = .FALSE. ) 
    816805            ! 
    817 #if defined key_agrif 
    818             ENDIF 
    819 #endif 
    820806            !                                                           !*  scale factors 
    821807            IF(lwp) WRITE(numout,*)    '          Kmm scale factor read in the restart file' 
    822808            CALL iom_get( numror, jpdom_auto, 'e3t_n', e3t(:,:,:,Kmm) ) 
    823             WHERE ( tmask(:,:,:) == 0.0_wp )  
     809            WHERE ( tmask(:,:,:) == 0.0_wp ) 
    824810               e3t(:,:,:,Kmm) = e3t_0(:,:,:) 
    825811            END WHERE 
     
    830816               IF(lwp) WRITE(numout,*) '          Kbb scale factor read in the restart file' 
    831817               CALL iom_get( numror, jpdom_auto, 'e3t_b', e3t(:,:,:,Kbb) ) 
    832                WHERE ( tmask(:,:,:) == 0.0_wp )  
     818               WHERE ( tmask(:,:,:) == 0.0_wp ) 
    833819                  e3t(:,:,:,Kbb) = e3t_0(:,:,:) 
    834820               END WHERE 
     
    854840                     CALL iom_get( numror, jpdom_auto, 'tilde_e3t_b', tilde_e3t_b(:,:,:) ) 
    855841                  ENDIF 
    856                ELSE  
    857                  tilde_e3t_b(:,:,:) = 0.0_wp 
    858                  tilde_e3t_n(:,:,:) = 0.0_wp 
     842               ELSE 
     843                  tilde_e3t_b(:,:,:) = 0.0_wp 
     844                  tilde_e3t_n(:,:,:) = 0.0_wp 
    859845               ENDIF 
    860846               !                                      ! ------------ ! 
     
    864850                     CALL iom_get( numror, jpdom_auto, 'hdiv_lf', hdiv_lf(:,:,:) ) 
    865851                  ELSE                ! array is missing 
    866                      hdiv_lf(:,:,:) = 0.0_wp  
     852                     hdiv_lf(:,:,:) = 0.0_wp 
    867853                  ENDIF 
    868854               ENDIF 
     
    885871      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN       !  Create restart file  ! 
    886872         !                                       !=======================! 
    887 #if defined key_agrif 
    888          IF ( .NOT.Agrif_root().AND.(ln_init_chfrpar) ) THEN 
    889             ! Interpolate initial ssh from parent: 
    890             CALL Agrif_istate_ssh( Kbb, Kmm ) 
    891             ! 
    892             DO jk = 1, jpk 
    893                e3t(:,:,jk,Kmm) =  e3t_0(:,:,jk) * ( ht_0(:,:) + ssh(:,:,Kmm)  ) & 
    894                  &                              / ( ht_0(:,:) + 1._wp - ssmask(:,:) ) * tmask(:,:,jk)   & 
    895                  &              + e3t_0(:,:,jk) * ( 1._wp - tmask(:,:,jk) ) 
    896             END DO 
    897             e3t(:,:,:,Kbb) = e3t(:,:,:,Kmm) 
    898          ENDIF 
    899 #endif 
    900873         ! 
    901874         IF(lwp) WRITE(numout,*) '---- dom_vvl_rst ----' 
     
    911884            CALL iom_rstput( kt, nitrst, numrow, 'tilde_e3t_n', tilde_e3t_n(:,:,:)) 
    912885         END IF 
    913          !                                           ! -------------!     
     886         !                                           ! -------------! 
    914887         IF( ln_vvl_ztilde ) THEN                    ! z_tilde case ! 
    915888            !                                        ! ------------ ! 
     
    925898      !!--------------------------------------------------------------------- 
    926899      !!                  ***  ROUTINE dom_vvl_ctl  *** 
    927       !!                 
     900      !! 
    928901      !! ** Purpose :   Control the consistency between namelist options 
    929902      !!                for vertical coordinate 
     
    934907         &              ln_vvl_zstar_at_eqtor      , rn_ahe3     , rn_rst_e3t            , & 
    935908         &              rn_lf_cutoff               , rn_zdef_max , ln_vvl_dbg                ! not yet implemented: ln_vvl_kepe 
    936       !!----------------------------------------------------------------------  
     909      !!---------------------------------------------------------------------- 
    937910      ! 
    938911      READ  ( numnam_ref, nam_vvl, IOSTAT = ios, ERR = 901) 
Note: See TracChangeset for help on using the changeset viewer.