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 12166 for NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN – NEMO

Ignore:
Timestamp:
2019-12-11T09:53:24+01:00 (4 years ago)
Author:
cetlod
Message:

dev_merge_option2 : merge in ENHANCE-02_ISF_nemo branch

Location:
NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/divhor.F90

    r10425 r12166  
    2020   USE oce             ! ocean dynamics and tracers 
    2121   USE dom_oce         ! ocean space and time domain 
    22    USE sbc_oce, ONLY : ln_rnf, ln_isf ! surface boundary condition: ocean 
    23    USE sbcrnf          ! river runoff  
    24    USE sbcisf          ! ice shelf 
    25    USE iscplhsb        ! ice sheet / ocean coupling 
    26    USE iscplini        ! ice sheet / ocean coupling 
     22   USE sbc_oce, ONLY : ln_rnf      ! river runoff 
     23   USE sbcrnf , ONLY : sbc_rnf_div ! river runoff  
     24   USE isf_oce, ONLY : ln_isf      ! ice shelf 
     25   USE isfhdiv, ONLY : isf_hdiv    ! ice shelf 
    2726#if defined key_asminc    
    2827   USE asminc          ! Assimilation increment 
     
    6463      INTEGER  ::   ji, jj, jk    ! dummy loop indices 
    6564      REAL(wp) ::   zraur, zdep   ! local scalars 
     65      REAL(wp), DIMENSION(jpi,jpj) :: ztmp 
    6666      !!---------------------------------------------------------------------- 
    6767      ! 
     
    8585         END DO   
    8686      END DO 
     87      ! 
    8788#if defined key_agrif 
    8889      IF( .NOT. Agrif_Root() ) THEN 
     
    9495#endif 
    9596      ! 
    96       IF( ln_rnf )   CALL sbc_rnf_div( hdivn )              !==  runoffs    ==!   (update hdivn field) 
     97      IF( ln_rnf )                      CALL sbc_rnf_div( hdivn )       !==  runoffs           ==!   (update hdivn field) 
    9798      ! 
    9899#if defined key_asminc  
     
    100101      !  
    101102#endif 
    102       IF( ln_isf )   CALL sbc_isf_div( hdivn )      !==  ice shelf  ==!   (update hdivn field) 
    103103      ! 
    104       IF( ln_iscpl .AND. ln_hsb )   CALL iscpl_div( hdivn ) !==  ice sheet  ==!   (update hdivn field) 
     104      IF( ln_isf )                      CALL isf_hdiv( kt, hdivn )      !==  ice shelf         ==!   (update hdivn field) 
    105105      ! 
    106106      CALL lbc_lnk( 'divhor', hdivn, 'T', 1. )   !   (no sign change) 
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynhpg.F90

    r11536 r12166  
    3131   !!---------------------------------------------------------------------- 
    3232   USE oce             ! ocean dynamics and tracers 
     33   USE isf_oce , ONLY : risfload  ! ice shelf  (risfload variable) 
     34   USE isfload , ONLY : isf_load  ! ice shelf  (isf_load routine ) 
    3335   USE sbc_oce         ! surface variable (only for the flag with ice shelf) 
    3436   USE dom_oce         ! ocean space and time domain 
     
    213215      ENDIF 
    214216      !                           
    215       IF ( .NOT. ln_isfcav ) THEN     !--- no ice shelf load 
    216          riceload(:,:) = 0._wp 
    217          ! 
    218       ELSE                            !--- set an ice shelf load 
    219          ! 
    220          IF(lwp) WRITE(numout,*) 
    221          IF(lwp) WRITE(numout,*) '   ice shelf case: set the ice-shelf load' 
    222          ALLOCATE( zts_top(jpi,jpj,jpts) , zrhd(jpi,jpj,jpk) , zrhdtop_isf(jpi,jpj) , ziceload(jpi,jpj) )  
    223          ! 
    224          znad = 1._wp                     !- To use density and not density anomaly 
    225          ! 
    226          !                                !- assume water displaced by the ice shelf is at T=-1.9 and S=34.4 (rude) 
    227          zts_top(:,:,jp_tem) = -1.9_wp   ;   zts_top(:,:,jp_sal) = 34.4_wp 
    228          ! 
    229          DO jk = 1, jpk                   !- compute density of the water displaced by the ice shelf  
    230             CALL eos( zts_top(:,:,:), gdept_n(:,:,jk), zrhd(:,:,jk) ) 
    231          END DO 
    232          ! 
    233          !                                !- compute rhd at the ice/oce interface (ice shelf side) 
    234          CALL eos( zts_top , risfdep, zrhdtop_isf ) 
    235          ! 
    236          !                                !- Surface value + ice shelf gradient 
    237          ziceload = 0._wp                       ! compute pressure due to ice shelf load  
    238          DO jj = 1, jpj                         ! (used to compute hpgi/j for all the level from 1 to miku/v) 
    239             DO ji = 1, jpi                      ! divided by 2 later 
    240                ikt = mikt(ji,jj) 
    241                ziceload(ji,jj) = ziceload(ji,jj) + (znad + zrhd(ji,jj,1) ) * e3w_n(ji,jj,1) * (1._wp - tmask(ji,jj,1)) 
    242                DO jk = 2, ikt-1 
    243                   ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk)) * e3w_n(ji,jj,jk) & 
    244                      &                              * (1._wp - tmask(ji,jj,jk)) 
    245                END DO 
    246                IF (ikt  >=  2) ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + zrhd(ji,jj,ikt-1)) & 
    247                   &                                              * ( risfdep(ji,jj) - gdept_n(ji,jj,ikt-1) ) 
    248             END DO 
    249          END DO 
    250          riceload(:,:) = ziceload(:,:)  ! need to be saved for diaar5 
    251          ! 
    252          DEALLOCATE( zts_top , zrhd , zrhdtop_isf , ziceload )  
    253       ENDIF 
    254       ! 
    255217   END SUBROUTINE dyn_hpg_init 
    256  
    257218 
    258219   SUBROUTINE hpg_zco( kt ) 
     
    572533      !!         ua = ua - 1/e1u * zhpi 
    573534      !!         va = va - 1/e2v * zhpj 
    574       !!      iceload is added and partial cell case are added to the top and bottom 
     535      !!      iceload is added 
    575536      !!       
    576537      !! ** Action : - Update (ua,va) with the now hydrastatic pressure trend 
     
    617578               &                                  - 0.5_wp * e3w_n(ji,jj,ikt)                                         & 
    618579               &                                    * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) )          & 
    619                &                                  + ( riceload(ji+1,jj) - riceload(ji,jj))                            )  
     580               &                                  + ( risfload(ji+1,jj) - risfload(ji,jj))                            )  
    620581            zhpj(ji,jj,1) = zcoef0 / e2v(ji,jj) * ( 0.5_wp * e3w_n(ji,jj+1,iktp1j)                                    & 
    621582               &                                    * ( 2._wp * znad + rhd(ji,jj+1,iktp1j) + zrhdtop_oce(ji,jj+1) )   & 
    622583               &                                  - 0.5_wp * e3w_n(ji,jj,ikt)                                         &  
    623584               &                                    * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) )          & 
    624                &                                  + ( riceload(ji,jj+1) - riceload(ji,jj))                            )  
     585               &                                  + ( risfload(ji,jj+1) - risfload(ji,jj))                            )  
    625586            ! s-coordinate pressure gradient correction (=0 if z coordinate) 
    626587            zuap = -zcoef0 * ( rhd    (ji+1,jj,1) + rhd    (ji,jj,1) + 2._wp * znad )   & 
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynnxt.F90

    r12026 r12166  
    2929   USE sbc_oce        ! Surface boundary condition: ocean fields 
    3030   USE sbcrnf         ! river runoffs 
    31    USE sbcisf         ! ice shelf 
    3231   USE phycst         ! physical constants 
    3332   USE dynadv         ! dynamics: vector invariant versus flux form 
     
    3534   USE domvvl         ! variable volume 
    3635   USE bdy_oce   , ONLY: ln_bdy 
     36   USE isf_oce   , ONLY: ln_isf     ! ice shelf 
    3737   USE bdydta         ! ocean open boundary conditions 
    3838   USE bdydyn         ! ocean open boundary conditions 
     
    4141   USE trddyn         ! trend manager: dynamics 
    4242   USE trdken         ! trend manager: kinetic energy 
     43   USE isfdynnxt , ONLY: isf_dynnxt ! ice shelf volume filter correction subroutine  
    4344   ! 
    4445   USE in_out_manager ! I/O manager 
     
    243244               ENDIF 
    244245            END IF 
    245  
    246             IF ( ln_isf ) THEN   ! if ice shelf melting 
    247                DO jk = 1, jpkm1 ! Deal with isf separetely, as can be through depth too 
    248                   DO jj = 1, jpj 
    249                      DO ji = 1, jpi 
    250                         IF( misfkt(ji,jj) <=jk .and. jk < misfkb(ji,jj)  ) THEN 
    251                            e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zcoef * ( fwfisf_b(ji,jj) - fwfisf(ji,jj) ) & 
    252                                 &          * ( e3t_n(ji,jj,jk) * r1_hisf_tbl(ji,jj) ) * tmask(ji,jj,jk) 
    253                         ELSEIF ( jk==misfkb(ji,jj) ) THEN 
    254                            e3t_b(ji,jj,jk) = e3t_b(ji,jj,jk) - zcoef * ( fwfisf_b(ji,jj) - fwfisf(ji,jj) ) & 
    255                                 &          * ( e3t_n(ji,jj,jk) * r1_hisf_tbl(ji,jj) ) * ralpha(ji,jj) * tmask(ji,jj,jk) 
    256                         ENDIF 
    257                      END DO 
    258                   END DO 
    259                END DO 
    260             END IF 
     246            ! 
     247            ! ice shelf melting (deal separatly as it can be in depth) 
     248            ! PM: we could probably define a generic subroutine to do the in depth correction 
     249            !     to manage rnf, isf and possibly in the futur icb, tide water glacier (...) 
     250            !     ...(kt, coef, ktop, kbot, hz, fwf_b, fwf) 
     251            IF ( ln_isf ) CALL isf_dynnxt( kt, atfp * rdt ) 
    261252            ! 
    262253            IF( ln_dynadv_vec ) THEN      ! Asselin filter applied on velocity 
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynspg_ts.F90

    r12072 r12166  
    3131   USE dom_oce         ! ocean space and time domain 
    3232   USE sbc_oce         ! surface boundary condition: ocean 
     33   USE isf_oce         ! ice shelf variable (fwfisf) 
    3334   USE zdf_oce         ! vertical physics: variables 
    3435   USE zdfdrg          ! vertical physics: top/bottom drag coef. 
    35    USE sbcisf          ! ice shelf variable (fwfisf) 
    3636   USE sbcapr          ! surface boundary condition: atmospheric pressure 
    3737   USE dynadv    , ONLY: ln_dynadv_vec 
     
    335335      !                                   ! ---------------------------------------------------  ! 
    336336      IF (ln_bt_fw) THEN                          ! FORWARD integration: use kt+1/2 fluxes (NOW+1/2) 
    337          zssh_frc(:,:) = r1_rau0 * ( emp(:,:)             - rnf(:,:)              + fwfisf(:,:)                  ) 
     337         zssh_frc(:,:) = r1_rau0 * ( emp(:,:) - rnf(:,:) + fwfisf_cav(:,:) + fwfisf_par(:,:) ) 
    338338      ELSE                                        ! CENTRED integration: use kt-1/2 + kt+1/2 fluxes (NOW) 
    339339         zztmp = r1_rau0 * r1_2 
    340          zssh_frc(:,:) = zztmp * (  emp(:,:) + emp_b(:,:) - rnf(:,:) - rnf_b(:,:) + fwfisf(:,:) + fwfisf_b(:,:)  ) 
     340         zssh_frc(:,:) = zztmp * (  emp(:,:)        + emp_b(:,:)                    & 
     341                &                 - rnf(:,:)        - rnf_b(:,:)                    & 
     342                &                 + fwfisf_cav(:,:) + fwfisf_cav_b(:,:)             & 
     343                &                 + fwfisf_par(:,:) + fwfisf_par_b(:,:)             ) 
    341344      ENDIF 
    342345      !                                   !=  Add Stokes drift divergence  =!   (if exist) 
     
    344347         zssh_frc(:,:) = zssh_frc(:,:) + div_sd(:,:) 
    345348      ENDIF 
     349      ! 
     350      !                                         ! ice sheet coupling 
     351      IF ( ln_isf .AND. ln_isfcpl ) THEN 
     352         ! 
     353         ! ice sheet coupling 
     354         IF( ln_rstart .AND. kt == nit000 ) THEN 
     355            zssh_frc(:,:) = zssh_frc(:,:) + risfcpl_ssh(:,:) 
     356         END IF 
     357         ! 
     358         ! conservation option 
     359         IF( ln_isfcpl_cons ) THEN 
     360            zssh_frc(:,:) = zssh_frc(:,:) + risfcpl_cons_ssh(:,:) 
     361         END IF 
     362         ! 
     363      END IF 
    346364      ! 
    347365#if defined key_asminc 
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/dynzdf.F90

    r11281 r12166  
    149149                  ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikv) + r_vvl * e3v_a(ji,jj,ikv) 
    150150                  ua(ji,jj,iku) = ua(ji,jj,iku) + r2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * ua_b(ji,jj) / ze3ua 
    151                   va(ji,jj,ikv) = va(ji,jj,ikv) + r2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) * va_b(ji,jj) / ze3va 
     151                  va(ji,jj,ikv) = va(ji,jj,ikv) + r2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) * va_b(ji,jj) / ze3va 
    152152               END DO 
    153153            END DO 
     
    428428                  ikv = mikv(ji,jj)       ! (first wet ocean u- and v-points) 
    429429                  ze3va =  ( 1._wp - r_vvl ) * e3v_n(ji,jj,ikv) + r_vvl * e3v_a(ji,jj,ikv)   ! after scale factor at T-point 
    430                   zwd(ji,jj,iku) = zwd(ji,jj,iku) - r2dt * 0.5*( rCdU_top(ji+1,jj)+rCdU_top(ji,jj) ) / ze3va 
     430                  zwd(ji,jj,ikv) = zwd(ji,jj,ikv) - r2dt * 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) / ze3va 
    431431               END DO 
    432432            END DO 
  • NEMO/branches/2019/dev_r12072_MERGE_OPTION2_2019/src/OCE/DYN/sshwzv.F90

    r11414 r12166  
    1818   !!---------------------------------------------------------------------- 
    1919   USE oce            ! ocean dynamics and tracers variables 
     20   USE isf_oce        ! ice shelf 
    2021   USE dom_oce        ! ocean space and time domain variables  
    2122   USE sbc_oce        ! surface boundary condition: ocean 
     
    255256         IF( .NOT.ln_linssh ) THEN                          ! before <-- with forcing removed 
    256257            zcoef = atfp * rdt * r1_rau0 
    257             sshb(:,:) = sshb(:,:) - zcoef * (     emp_b(:,:) - emp   (:,:)   & 
    258                &                             -    rnf_b(:,:) + rnf   (:,:)   & 
    259                &                             + fwfisf_b(:,:) - fwfisf(:,:)   ) * ssmask(:,:) 
     258            sshb(:,:) = sshb(:,:) - zcoef * (  emp_b(:,:)        - emp   (:,:)       & 
     259               &                             - rnf_b(:,:)        + rnf   (:,:)       & 
     260               &                             + fwfisf_cav_b(:,:) - fwfisf_cav(:,:)   & 
     261               &                             + fwfisf_par_b(:,:) - fwfisf_par(:,:)   ) * ssmask(:,:) 
     262 
     263            ! ice sheet coupling 
     264            IF ( ln_isf .AND. ln_isfcpl .AND. kt == nit000+1) sshb(:,:) = sshb(:,:) - atfp * rdt * ( risfcpl_ssh(:,:) - 0.0 ) * ssmask(:,:) 
     265 
    260266         ENDIF 
     267 
    261268         sshn(:,:) = ssha(:,:)                              ! now <-- after 
    262269      ENDIF 
Note: See TracChangeset for help on using the changeset viewer.