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 6069 for branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90 – NEMO

Ignore:
Timestamp:
2015-12-16T16:44:35+01:00 (8 years ago)
Author:
timgraham
Message:

Merge of dev_MetOffice_merge_2015 into branch (only NEMO directory for now).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_merge_2015/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r6060 r6069  
    4545   USE wrk_nemo        ! Memory Allocation 
    4646   USE timing          ! Timing 
     47   USE iom 
    4748 
    4849   IMPLICIT NONE 
     
    129130      INTEGER ::   ioptio = 0      ! temporary integer 
    130131      INTEGER ::   ios             ! Local integer output status for namelist read 
     132      !! 
     133      INTEGER  ::   ji, jj, jk, ikt    ! dummy loop indices      ISF 
     134      REAL(wp) ::   znad 
     135      REAL(wp), POINTER, DIMENSION(:,:,:)   ::  ztstop, zrhd ! hypothesys on isf density 
     136      REAL(wp), POINTER, DIMENSION(:,:)     ::  zrhdtop_isf  ! density at bottom of ISF 
     137      REAL(wp), POINTER, DIMENSION(:,:)     ::  ziceload     ! density at bottom of ISF 
    131138      !! 
    132139      NAMELIST/namdyn_hpg/ ln_hpg_zco, ln_hpg_zps, ln_hpg_sco,     & 
     
    189196      IF( ioptio /= 1 )   CALL ctl_stop( 'NO or several hydrostatic pressure gradient options used' ) 
    190197      !  
    191       ! initialisation of ice load 
    192       riceload(:,:)=0.0 
     198      ! initialisation of ice shelf load 
     199      IF ( .NOT. ln_isfcav ) riceload(:,:)=0.0 
     200      IF (       ln_isfcav ) THEN 
     201         CALL wrk_alloc( jpi,jpj, 2,  ztstop)  
     202         CALL wrk_alloc( jpi,jpj,jpk, zrhd  ) 
     203         CALL wrk_alloc( jpi,jpj,     zrhdtop_isf, ziceload)  
     204         ! 
     205         IF(lwp) WRITE(numout,*) 
     206         IF(lwp) WRITE(numout,*) 'dyn:hpg_isf : hydrostatic pressure gradient trend for ice shelf' 
     207         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~'   
     208 
     209         ! To use density and not density anomaly 
     210         znad=1._wp 
     211          
     212         ! assume water displaced by the ice shelf is at T=-1.9 and S=34.4 (rude) 
     213         ztstop(:,:,1)=-1.9_wp ; ztstop(:,:,2)=34.4_wp 
     214 
     215         ! compute density of the water displaced by the ice shelf  
     216         DO jk = 1, jpk 
     217            CALL eos(ztstop(:,:,:),fsdept_n(:,:,jk),zrhd(:,:,jk)) 
     218         END DO 
     219       
     220         ! compute rhd at the ice/oce interface (ice shelf side) 
     221         CALL eos(ztstop,risfdep,zrhdtop_isf) 
     222 
     223         ! Surface value + ice shelf gradient 
     224         ! compute pressure due to ice shelf load (used to compute hpgi/j for all the level from 1 to miku/v) 
     225         ! divided by 2 later 
     226         ziceload = 0._wp 
     227         DO jj = 1, jpj 
     228            DO ji = 1, jpi 
     229               ikt=mikt(ji,jj) 
     230               ziceload(ji,jj) = ziceload(ji,jj) + (znad + zrhd(ji,jj,1) ) * fse3w(ji,jj,1) * (1._wp - tmask(ji,jj,1)) 
     231               DO jk=2,ikt-1 
     232                  ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + zrhd(ji,jj,jk-1) + zrhd(ji,jj,jk)) * fse3w(ji,jj,jk) & 
     233                     &                              * (1._wp - tmask(ji,jj,jk)) 
     234               END DO 
     235               IF (ikt  >=  2) ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + zrhd(ji,jj,ikt-1)) & 
     236                                  &                              * ( risfdep(ji,jj) - gdept_1d(ikt-1) ) 
     237            END DO 
     238         END DO 
     239         riceload(:,:)=ziceload(:,:)  ! need to be saved for diaar5 
     240 
     241         CALL wrk_dealloc( jpi,jpj, 2,  ztstop)  
     242         CALL wrk_dealloc( jpi,jpj,jpk, zrhd  ) 
     243         CALL wrk_dealloc( jpi,jpj,     zrhdtop_isf, ziceload)  
     244      END IF 
    193245      ! 
    194246   END SUBROUTINE dyn_hpg_init 
     
    444496   SUBROUTINE hpg_isf( kt ) 
    445497      !!--------------------------------------------------------------------- 
    446       !!                  ***  ROUTINE hpg_sco  *** 
     498      !!                  ***  ROUTINE hpg_isf  *** 
    447499      !! 
    448500      !! ** Method  :   s-coordinate case. Jacobian scheme. 
     
    463515      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
    464516      !! 
    465       INTEGER  ::   ji, jj, jk, iku, ikv, ikt, iktp1i, iktp1j                 ! dummy loop indices 
    466       REAL(wp) ::   zcoef0, zuap, zvap, znad, ze3wu, ze3wv, zuapint, zvapint, zhpjint, zhpiint, zdzwt, zdzwtjp1, zdzwtip1             ! temporary scalars 
    467       REAL(wp), POINTER, DIMENSION(:,:,:)   ::  zhpi, zhpj, zrhd 
     517      INTEGER  ::   ji, jj, jk, ikt, iktp1i, iktp1j   ! dummy loop indices 
     518      REAL(wp) ::   zcoef0, zuap, zvap, znad          ! temporary scalars 
     519      REAL(wp), POINTER, DIMENSION(:,:,:)   ::  zhpi, zhpj 
    468520      REAL(wp), POINTER, DIMENSION(:,:,:)   ::  ztstop 
    469       REAL(wp), POINTER, DIMENSION(:,:)     ::  ze3w, zp, zrhdtop_isf, zrhdtop_oce, ziceload, zdept, zpshpi, zpshpj 
    470       !!---------------------------------------------------------------------- 
    471       ! 
    472       CALL wrk_alloc( jpi,jpj,  2,   ztstop )  
    473       CALL wrk_alloc( jpi,jpj,jpk,   zhpi, zhpj, zrhd) 
    474       CALL wrk_alloc( jpi,jpj,       ze3w, zp, zrhdtop_isf, zrhdtop_oce, ziceload, zdept, zpshpi, zpshpj )  
    475       ! 
    476       IF( kt == nit000 ) THEN 
    477          IF(lwp) WRITE(numout,*) 
    478          IF(lwp) WRITE(numout,*) 'dyn:hpg_isf : hydrostatic pressure gradient trend for ice shelf' 
    479          IF(lwp) WRITE(numout,*) '~~~~~~~~~~~   s-coordinate case, OPA original scheme used' 
    480       ENDIF 
    481       ! 
     521      REAL(wp), POINTER, DIMENSION(:,:)     ::  zrhdtop_oce 
     522      !!---------------------------------------------------------------------- 
     523      ! 
     524      CALL wrk_alloc( jpi,jpj,  2, ztstop)  
     525      CALL wrk_alloc( jpi,jpj,jpk, zhpi, zhpj) 
     526      CALL wrk_alloc( jpi,jpj,     zrhdtop_oce ) 
     527      ! 
     528      ! Local constant initialization 
    482529      zcoef0 = - grav * 0.5_wp 
    483       IF( ln_linssh ) THEN   ;   znad = 0._wp      ! Fixed    volume: density anomaly 
    484       ELSE                   ;   znad = 1._wp      ! Variable volume: density 
    485       ENDIF 
    486       zhpi(:,:,:) = 0._wp 
    487       zhpj(:,:,:) = 0._wp 
     530   
     531      ! To use density and not density anomaly 
     532      znad=1._wp 
     533 
     534      ! iniitialised to 0. zhpi zhpi  
     535      zhpi(:,:,:)=0._wp ; zhpj(:,:,:)=0._wp 
     536 
     537      ! compute rhd at the ice/oce interface (ocean side) 
     538      ! usefull to reduce residual current in the test case ISOMIP with no melting 
     539      DO ji=1,jpi 
     540        DO jj=1,jpj 
     541          ikt=mikt(ji,jj) 
     542          ztstop(ji,jj,1)=tsn(ji,jj,ikt,1) 
     543          ztstop(ji,jj,2)=tsn(ji,jj,ikt,2) 
     544        END DO 
     545      END DO 
     546      CALL eos( ztstop, risfdep, zrhdtop_oce ) 
    488547 
    489548!==================================================================================      
    490 !=====Compute iceload and contribution of the half first wet layer =================  
    491 !=================================================================================== 
    492  
    493       ! assume water displaced by the ice shelf is at T=-1.9 and S=34.4 (rude) 
    494       ztstop(:,:,jp_tem) = -1.9_wp 
    495       ztstop(:,:,jp_sal) = 34.4_wp 
    496  
    497 !!gm I have the feeling that a much simplier and faster computation can be performed... 
    498 !!gm     ====>>>>   We have to discuss ! 
    499  
    500 !!gm below, faster to compute the ISF density in zrhd and remplace rhd value where tmask=0 
    501 !!gm        furthermore, this calculation does not depends on time :  do it at the first time-step only.... 
    502  
    503       ! compute density of the water displaced by the ice shelf  
    504       zrhd(:,:,:) = rhd(:,:,:)     ! save rhd 
    505       DO jk = 1, jpk 
    506          zdept(:,:) = gdept_1d(jk) 
    507          CALL eos( ztstop(:,:,:), zdept(:,:), rhd(:,:,jk) ) 
    508       END DO 
    509       WHERE( tmask(:,:,:) == 1._wp ) 
    510         rhd(:,:,:) = zrhd(:,:,:) ! replace wet cell by the saved rhd 
    511       END WHERE 
    512        
    513       ! compute rhd at the ice/oce interface (ice shelf side) 
    514       CALL eos( ztstop, risfdep, zrhdtop_isf ) 
    515  
    516       ! compute rhd at the ice/oce interface (ocean side) 
    517       DO ji = 1, jpi 
    518         DO jj = 1, jpj 
    519           ikt = mikt(ji,jj) 
    520           ztstop(ji,jj,jp_tem) = tsn(ji,jj,ikt,jp_tem) 
    521           ztstop(ji,jj,jp_sal) = tsn(ji,jj,ikt,jp_sal) 
    522         END DO 
    523       END DO 
    524       CALL eos( ztstop, risfdep, zrhdtop_oce ) 
    525       ! 
    526       ! Surface value + ice shelf gradient 
    527       ! compute pressure due to ice shelf load (used to compute hpgi/j for all the level from 1 to miku/v) 
    528       ziceload = 0._wp 
    529       DO jj = 1, jpj 
    530          DO ji = 1, jpi   ! vector opt. 
    531             ikt = mikt(ji,jj) 
    532             ziceload(ji,jj) = ziceload(ji,jj) + (znad + rhd(ji,jj,1) ) * e3w_n(ji,jj,1) * (1._wp - tmask(ji,jj,1)) 
    533             DO jk = 2, ikt-1 
    534                ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + rhd(ji,jj,jk-1) + rhd(ji,jj,jk)) * e3w_n(ji,jj,jk) & 
    535                   &                              * (1._wp - tmask(ji,jj,jk)) 
    536             END DO 
    537             IF( ikt >= 2 )   ziceload(ji,jj) = ziceload(ji,jj) + (2._wp * znad + zrhdtop_isf(ji,jj) + rhd(ji,jj,ikt-1)) & 
    538                &                                               * ( risfdep(ji,jj) - gdept_1d(ikt-1) ) 
    539          END DO 
    540       END DO 
    541       riceload(:,:) = 0._wp   ;   riceload(:,:) = ziceload(:,:)   ! need to be saved for diaar5 
    542       ! compute zp from z=0 to first T wet point (correction due to zps not yet applied) 
     549!===== Compute surface value =====================================================  
     550!================================================================================== 
    543551      DO jj = 2, jpjm1 
    544552         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    548556            ! hydrostatic pressure gradient along s-surfaces and ice shelf pressure 
    549557            ! we assume ISF is in isostatic equilibrium 
    550             zhpi(ji,jj,1) = zcoef0 * (                                    & 
    551                &            0.5_wp * e3w_n(ji+1,jj,iktp1i) * ( 2._wp * znad + rhd(ji+1,jj,iktp1i) + zrhdtop_oce(ji+1,jj) )   & 
    552                &          - 0.5_wp * e3w_n(ji  ,jj,ikt   ) * ( 2._wp * znad + rhd(ji  ,jj,ikt   ) + zrhdtop_oce(ji  ,jj) )   & 
    553                &          + ( ziceload(ji+1,jj) - ziceload(ji,jj) )       ) * r1_e1u(ji,jj) 
    554             zhpj(ji,jj,1) = zcoef0 * (                                    & 
    555                &            0.5_wp * e3w_n(ji,jj+1,iktp1j) * ( 2._wp * znad + rhd(ji,jj+1,iktp1j) + zrhdtop_oce(ji,jj+1) )   & 
    556                &          - 0.5_wp * e3w_n(ji,jj  ,ikt   ) * ( 2._wp * znad + rhd(ji,jj  ,ikt   ) + zrhdtop_oce(ji,jj  ) )   & 
    557                &          + ( ziceload(ji,jj+1) - ziceload(ji,jj) )       ) * r1_e2v(ji,jj) 
     558            zhpi(ji,jj,1) = zcoef0 / e1u(ji,jj) * ( 0.5_wp * e3w_n(ji+1,jj,iktp1i)                                    & 
     559               &                                    * ( 2._wp * znad + rhd(ji+1,jj,iktp1i) + zrhdtop_oce(ji+1,jj) )   & 
     560               &                                  - 0.5_wp * e3w_n(ji,jj,ikt)                                         & 
     561               &                                    * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) )          & 
     562               &                                  + ( riceload(ji+1,jj) - riceload(ji,jj))                            )  
     563            zhpj(ji,jj,1) = zcoef0 / e2v(ji,jj) * ( 0.5_wp * e3w_n(ji,jj+1,iktp1j)                                    & 
     564               &                                    * ( 2._wp * znad + rhd(ji,jj+1,iktp1j) + zrhdtop_oce(ji,jj+1) )   & 
     565               &                                  - 0.5_wp * e3w_n(ji,jj,ikt)                                         &  
     566               &                                    * ( 2._wp * znad + rhd(ji,jj,ikt) + zrhdtop_oce(ji,jj) )          & 
     567               &                                  + ( riceload(ji,jj+1) - riceload(ji,jj))                            )  
    558568            ! s-coordinate pressure gradient correction (=0 if z coordinate) 
    559569            zuap = -zcoef0 * ( rhd    (ji+1,jj,1) + rhd    (ji,jj,1) + 2._wp * znad )   & 
     
    567577      END DO 
    568578!==================================================================================      
    569 !===== Compute partial cell contribution for the top cell =========================  
    570 !================================================================================== 
    571       DO jj = 2, jpjm1 
    572          DO ji = fs_2, fs_jpim1   ! vector opt. 
    573             iku = miku(ji,jj) 
    574             zpshpi(ji,jj) = 0._wp 
    575             zpshpj(ji,jj) = 0._wp 
    576             ze3wu  = (gdepw_0(ji+1,jj,iku+1) - gdept_0(ji+1,jj,iku)) - (gdepw_0(ji,jj,iku+1) - gdept_0(ji,jj,iku)) 
    577             ! u direction 
    578             IF( iku > 1 ) THEN 
    579                ! case iku 
    580                zhpi(ji,jj,iku) = zcoef0 * r1_e1u(ji,jj) * ze3wu                             & 
    581                   &                     * ( rhd(ji+1,jj,iku) + rhd(ji,jj,iku)               & 
    582                   &                        + SIGN(1._wp,ze3wu) * grui(ji,jj) + 2._wp * znad ) 
    583                ! corrective term ( = 0 if z coordinate ) 
    584                zuap = -zcoef0 * ( arui(ji,jj) + 2._wp * znad ) * gzui(ji,jj) * r1_e1u(ji,jj) 
    585                ! zhpi will be added in interior loop 
    586                ua(ji,jj,iku) = ua(ji,jj,iku) + zuap 
    587                ! in case of 2 cell water column, need to save the pressure gradient to compute the bottom pressure   
    588                IF( mbku(ji,jj) == iku + 1 )   zpshpi(ji,jj) = zhpi(ji,jj,iku) 
    589  
    590                ! case iku + 1 (remove the zphi term added in the interior loop and compute the one corrected for zps) 
    591                zhpiint = zcoef0 * r1_e1u(ji,jj)                                                              &     
    592                   &    * (  e3w_n(ji+1,jj  ,iku+1) * (  (rhd(ji+1,jj,iku+1) + znad)                          & 
    593                   &                                   + (rhd(ji+1,jj,iku  ) + znad) ) * tmask(ji+1,jj,iku)   & 
    594                   &       - e3w_n(ji  ,jj  ,iku+1) * (  (rhd(ji  ,jj,iku+1) + znad)                          & 
    595                   &                                   + (rhd(ji  ,jj,iku  ) + znad) ) * tmask(ji  ,jj,iku)   ) 
    596                zhpi(ji,jj,iku+1) = zcoef0 * r1_e1u(ji,jj) * ge3rui(ji,jj) - zhpiint  
    597             END IF 
    598                 
    599             ! v direction 
    600             ikv = mikv(ji,jj) 
    601             ze3wv  = (gdepw_0(ji,jj+1,ikv+1) - gdept_0(ji,jj+1,ikv)) - (gdepw_0(ji,jj,ikv+1) - gdept_0(ji,jj,ikv)) 
    602             IF( ikv > 1 ) THEN 
    603                ! case ikv 
    604                zhpj(ji,jj,ikv) =  zcoef0 * r1_e2v(ji,jj) * ze3wv                             & 
    605                   &                      * ( rhd(ji,jj+1,ikv) + rhd(ji,jj,ikv)               & 
    606                   &                         + SIGN(1._wp,ze3wv) * grvi(ji,jj) + 2._wp * znad ) 
    607                ! corrective term ( = 0 if z coordinate ) 
    608                zvap = -zcoef0 * ( arvi(ji,jj) + 2._wp * znad ) * gzvi(ji,jj) * r1_e2v(ji,jj) 
    609                ! zhpi will be added in interior loop 
    610                va(ji,jj,ikv) = va(ji,jj,ikv) + zvap 
    611                ! in case of 2 cell water column, need to save the pressure gradient to compute the bottom pressure   
    612                IF( mbkv(ji,jj) == ikv + 1 )   zpshpj(ji,jj) = zhpj(ji,jj,ikv)  
    613                 
    614                ! case ikv + 1 (remove the zphj term added in the interior loop and compute the one corrected for zps) 
    615                zhpjint =  zcoef0 * r1_e2v(ji,jj)                                                            & 
    616                   &    * (  e3w_n(ji  ,jj+1,ikv+1) * (  (rhd(ji,jj+1,ikv+1) + znad)                         & 
    617                   &                                   + (rhd(ji,jj+1,ikv  ) + znad) ) * tmask(ji,jj+1,ikv)  & 
    618                   &       - e3w_n(ji  ,jj  ,ikv+1) * (  (rhd(ji,jj  ,ikv+1) + znad)                         & 
    619                   &                                   + (rhd(ji,jj  ,ikv  ) + znad) ) * tmask(ji,jj  ,ikv)  ) 
    620                zhpj(ji,jj,ikv+1) =  zcoef0 * r1_e2v(ji,jj) * ge3rvi(ji,jj) - zhpjint 
    621             ENDIF 
    622          END DO 
    623       END DO 
    624  
    625 !==================================================================================      
    626579!===== Compute interior value =====================================================  
    627580!================================================================================== 
    628  
    629       DO jj = 2, jpjm1 
    630          DO ji = fs_2, fs_jpim1   ! vector opt. 
    631             DO jk = 2, jpkm1 
     581      ! interior value (2=<jk=<jpkm1) 
     582      DO jk = 2, jpkm1 
     583         DO jj = 2, jpjm1 
     584            DO ji = fs_2, fs_jpim1   ! vector opt. 
    632585               ! hydrostatic pressure gradient along s-surfaces 
    633                ! zhpi is masked for the first wet cell  (contribution already done in the upper bloc) 
    634                zhpi(ji,jj,jk) = zhpi(ji,jj,jk) + zhpi(ji,jj,jk-1)                                                     & 
    635                   &           + zcoef0 * r1_e1u(ji,jj)                                                                & 
    636                   &                    * ( e3w_n(ji+1,jj,jk) * ( (rhd(ji+1,jj,jk  ) + znad)                           & 
    637                   &                                            + (rhd(ji+1,jj,jk-1) + znad) ) * tmask(ji+1,jj,jk-1)   & 
    638                   &                      - e3w_n(ji  ,jj,jk) * ( (rhd(ji  ,jj,jk  ) + znad)                           & 
    639                   &                                            + (rhd(ji  ,jj,jk-1) + znad) ) * tmask(ji  ,jj,jk-1)   )  
     586               zhpi(ji,jj,jk) = zhpi(ji,jj,jk-1) + zcoef0 / e1u(ji,jj)   & 
     587                  &           * (  e3w_n(ji+1,jj,jk) * ( rhd(ji+1,jj,jk) + rhd(ji+1,jj,jk-1) + 2*znad ) * wmask(ji+1,jj,jk)   & 
     588                  &              - e3w_n(ji  ,jj,jk) * ( rhd(ji  ,jj,jk) + rhd(ji  ,jj,jk-1) + 2*znad ) * wmask(ji  ,jj,jk)   ) 
     589               zhpj(ji,jj,jk) = zhpj(ji,jj,jk-1) + zcoef0 / e2v(ji,jj)   & 
     590                  &           * (  e3w_n(ji,jj+1,jk) * ( rhd(ji,jj+1,jk) + rhd(ji,jj+1,jk-1) + 2*znad ) * wmask(ji,jj+1,jk)   & 
     591                  &              - e3w_n(ji,jj  ,jk) * ( rhd(ji,jj,  jk) + rhd(ji,jj  ,jk-1) + 2*znad ) * wmask(ji,jj  ,jk)   ) 
    640592               ! s-coordinate pressure gradient correction 
    641                ! corrective term, we mask this term for the first wet level beneath the ice shelf (contribution done in the upper bloc)  
    642                zuap = - zcoef0 * ( rhd    (ji+1,jj  ,jk) + rhd    (ji,jj,jk) + 2._wp * znad )                    & 
    643                   &            * ( gde3w_n(ji+1,jj  ,jk) - gde3w_n(ji,jj,jk) ) * r1_e1u(ji,jj) * umask(ji,jj,jk-1) 
    644                ua(ji,jj,jk) = ua(ji,jj,jk) + ( zhpi(ji,jj,jk) + zuap) * umask(ji,jj,jk) 
    645  
    646                ! hydrostatic pressure gradient along s-surfaces 
    647                ! zhpi is masked for the first wet cell  (contribution already done in the upper bloc) 
    648                zhpj(ji,jj,jk) = zhpj(ji,jj,jk) + zhpj(ji,jj,jk-1)                                                     & 
    649                   &           + zcoef0 * r1_e2v(ji,jj)                                                                & 
    650                   &                    * ( e3w_n(ji  ,jj+1,jk) * ( (rhd(ji,jj+1,jk  ) + znad)                           & 
    651                   &                                              + (rhd(ji,jj+1,jk-1) + znad) ) * tmask(ji,jj+1,jk-1)   & 
    652                   &                      - e3w_n(ji  ,jj  ,jk) * ( (rhd(ji,jj  ,jk  ) + znad)                           & 
    653                   &                                              + (rhd(ji,jj  ,jk-1) + znad) ) * tmask(ji,jj  ,jk-1)   ) 
    654                ! s-coordinate pressure gradient correction 
    655                ! corrective term, we mask this term for the first wet level beneath the ice shelf (contribution done in the upper bloc) 
    656                zvap = - zcoef0 * ( rhd    (ji  ,jj+1,jk) + rhd    (ji,jj,jk) + 2._wp * znad )                    & 
    657                   &            * ( gde3w_n(ji  ,jj+1,jk) - gde3w_n(ji,jj,jk) ) * r1_e2v(ji,jj) * vmask(ji,jj,jk-1) 
     593               zuap = -zcoef0 * ( rhd   (ji+1,jj  ,jk) + rhd   (ji,jj,jk) + 2._wp * znad )   & 
     594                  &           * ( gde3w_n(ji+1,jj  ,jk) - gde3w_n(ji,jj,jk) ) / e1u(ji,jj) 
     595               zvap = -zcoef0 * ( rhd   (ji  ,jj+1,jk) + rhd   (ji,jj,jk) + 2._wp * znad )   & 
     596                  &           * ( gde3w_n(ji  ,jj+1,jk) - gde3w_n(ji,jj,jk) ) / e2v(ji,jj) 
    658597               ! add to the general momentum trend 
    659                va(ji,jj,jk) = va(ji,jj,jk) + ( zhpj(ji,jj,jk) + zvap ) * vmask(ji,jj,jk) 
     598               ua(ji,jj,jk) = ua(ji,jj,jk) + (zhpi(ji,jj,jk) + zuap) * umask(ji,jj,jk) 
     599               va(ji,jj,jk) = va(ji,jj,jk) + (zhpj(ji,jj,jk) + zvap) * vmask(ji,jj,jk) 
    660600            END DO 
    661601         END DO 
    662602      END DO 
    663  
    664 !==================================================================================      
    665 !===== Compute bottom cell contribution (partial cell) ============================  
    666 !================================================================================== 
    667  
    668       DO jj = 2, jpjm1 
    669          DO ji = 2, jpim1 
    670             iku = mbku(ji,jj) 
    671             ikv = mbkv(ji,jj) 
    672  
    673             IF (iku .GT. 1) THEN 
    674                ! remove old value (interior case) 
    675                zuap            = -zcoef0 * ( rhd    (ji+1,jj  ,iku) + rhd    (ji,jj,iku) + 2._wp * znad )   & 
    676                      &                   * ( gde3w_n(ji+1,jj  ,iku) - gde3w_n(ji,jj,iku) ) * r1_e1u(ji,jj) 
    677                ua(ji,jj,iku)   = ua(ji,jj,iku) - zhpi(ji,jj,iku) - zuap 
    678                ! put new value 
    679                ! -zpshpi to avoid double contribution of the partial step in the top layer  
    680                zuap            = -zcoef0 * ( aru(ji,jj) + 2._wp * znad ) * gzu(ji,jj)  * r1_e1u(ji,jj) 
    681                zhpi(ji,jj,iku) =  zhpi(ji,jj,iku-1) + zcoef0 * r1_e1u(ji,jj) * ge3ru(ji,jj) - zpshpi(ji,jj)  
    682                ua(ji,jj,iku)   =  ua(ji,jj,iku) + zhpi(ji,jj,iku) + zuap 
    683             END IF 
    684             ! v direction 
    685             IF (ikv .GT. 1) THEN 
    686                ! remove old value (interior case) 
    687                zvap            = -zcoef0 * ( rhd    (ji  ,jj+1,ikv) + rhd    (ji,jj,ikv) + 2._wp * znad )   & 
    688                      &                   * ( gde3w_n(ji  ,jj+1,ikv) - gde3w_n(ji,jj,ikv) ) * r1_e2v(ji,jj) 
    689                va(ji,jj,ikv)   = va(ji,jj,ikv) - zhpj(ji,jj,ikv) - zvap 
    690                ! put new value 
    691                ! -zpshpj to avoid double contribution of the partial step in the top layer  
    692                zvap            = -zcoef0 * ( arv(ji,jj) + 2._wp * znad ) * gzv(ji,jj) * r1_e2v(ji,jj) 
    693                zhpj(ji,jj,ikv) =  zhpj(ji,jj,ikv-1) + zcoef0 * r1_e2v(ji,jj) * ge3rv(ji,jj) - zpshpj(ji,jj)    
    694                va(ji,jj,ikv)   =  va(ji,jj,ikv) + zhpj(ji,jj,ikv) + zvap 
    695             END IF 
    696          END DO 
    697       END DO 
    698       
    699       ! set back to original density value into the ice shelf cell (maybe useless because it is masked) 
    700       rhd = zrhd 
    701       ! 
    702       CALL wrk_dealloc( jpi,jpj,2, ztstop) 
    703       CALL wrk_dealloc( jpi,jpj,jpk, zhpi, zhpj, zrhd) 
    704       CALL wrk_dealloc( jpi,jpj, ze3w, zp, zrhdtop_isf, zrhdtop_oce, ziceload, zdept, zpshpi, zpshpj) 
     603     ! 
     604      CALL wrk_dealloc( jpi,jpj,2  , ztstop) 
     605      CALL wrk_dealloc( jpi,jpj,jpk, zhpi, zhpj) 
     606      CALL wrk_dealloc( jpi,jpj    , zrhdtop_oce ) 
    705607      ! 
    706608   END SUBROUTINE hpg_isf 
Note: See TracChangeset for help on using the changeset viewer.