Changeset 5969


Ignore:
Timestamp:
2015-12-01T18:17:43+01:00 (5 years ago)
Author:
mathiot
Message:

ISF: modifications to compile and run SETTE tests

Location:
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/divhor.F90

    r5956 r5969  
    2020   USE oce             ! ocean dynamics and tracers 
    2121   USE dom_oce         ! ocean space and time domain 
    22    USE sbc_oce, ONLY : ln_rnf, nn_isf ! surface boundary condition: ocean 
     22   USE sbc_oce, ONLY : ln_rnf, ln_isf ! surface boundary condition: ocean 
    2323   USE sbcrnf          ! river runoff  
    2424   USE sbcisf          ! ice shelf 
     
    8989      END DO 
    9090      ! 
    91       IF( ln_rnf                     )   CALL sbc_rnf_div( hdivn )      !==  runoffs    ==!   (update hdivn field) 
     91      IF( ln_rnf )   CALL sbc_rnf_div( hdivn )      !==  runoffs    ==!   (update hdivn field) 
    9292      ! 
    93       IF( ln_divisf .AND. nn_isf > 0 )   CALL sbc_isf_div( hdivn )      !==  ice shelf  ==!   (update hdivn field) 
     93      IF( ln_isf )   CALL sbc_isf_div( hdivn )      !==  ice shelf  ==!   (update hdivn field) 
    9494      ! 
    95       CALL lbc_lnk( hdivn, 'T', 1. )                       !==  lateral boundary cond.  ==!   (no sign change) 
     95      CALL lbc_lnk( hdivn, 'T', 1. )                !==  lateral boundary cond.  ==!   (no sign change) 
    9696      ! 
    9797      IF( nn_timing == 1 )  CALL timing_stop('div_hor') 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90

    r5956 r5969  
    231231      IF(  ioptio > 1  .OR. ( ioptio == 0 .AND. .NOT. lk_c1d ) )   & 
    232232           &   CALL ctl_stop( ' Choose only one surface pressure gradient scheme' ) 
    233       IF( lk_dynspg_exp .AND. ln_isfcav )   & 
     233      IF( ln_dynspg_exp .AND. ln_isfcav )   & 
    234234           &   CALL ctl_stop( ' dynspg_exp not tested with ice shelf cavity ' ) 
    235235      ! 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r5956 r5969  
    231231                  END DO 
    232232               END DO 
    233             END DO 
    234233            CASE ( 1 )                                   ! new formulation  (masked averaging of e3t divided by the sum of mask) 
    235234               DO jj = 1, jpjm1 
     
    244243            END SELECT 
    245244            CALL lbc_lnk( zwz, 'F', 1._wp ) 
    246             zwz(:,:) = ff(:,:) * zwz(:,:) 
    247  
     245            ! 
    248246            ftne(1,:) = 0._wp ; ftnw(1,:) = 0._wp ; ftse(1,:) = 0._wp ; ftsw(1,:) = 0._wp 
    249247            DO jj = 2, jpj 
     
    572570            DO jj = 2, jpjm1                                    ! Sea Surface Height at u- & v-points 
    573571               DO ji = 2, fs_jpim1   ! Vector opt. 
    574                   zwx(ji,jj) = z1_2 * ssumask(ji,jj)  * r1_e12u(ji,jj)     & 
    575                      &              * ( e12t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
    576                      &              +   e12t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
    577                   zwy(ji,jj) = z1_2 * ssvmask(ji,jj)  * r1_e12v(ji,jj)     & 
    578                      &              * ( e12t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
    579                      &              +   e12t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
     572                  zwx(ji,jj) = z1_2 * ssumask(ji,jj)  * r1_e1e2u(ji,jj)     & 
     573                     &              * ( e1e2t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
     574                     &              +   e1e2t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
     575                  zwy(ji,jj) = z1_2 * ssvmask(ji,jj)  * r1_e1e2v(ji,jj)     & 
     576                     &              * ( e1e2t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
     577                     &              +   e1e2t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
    580578               END DO 
    581579            END DO 
     
    650648            DO jj = 2, jpjm1 
    651649               DO ji = 2, jpim1      ! NO Vector Opt. 
    652                   zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e12u(ji,jj)    & 
    653                      &              * ( e12t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
    654                      &              +   e12t(ji+1,jj  )  * ssha_e(ji+1,jj  ) ) 
    655                   zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e12v(ji,jj)    & 
    656                      &              * ( e12t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
    657                      &              +   e12t(ji  ,jj+1)  * ssha_e(ji  ,jj+1) ) 
     650                  zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e1e2u(ji,jj)    & 
     651                     &              * ( e1e2t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
     652                     &              +   e1e2t(ji+1,jj  )  * ssha_e(ji+1,jj  ) ) 
     653                  zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e1e2v(ji,jj)    & 
     654                     &              * ( e1e2t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
     655                     &              +   e1e2t(ji  ,jj+1)  * ssha_e(ji  ,jj+1) ) 
    658656               END DO 
    659657            END DO 
     
    689687            DO jj = 2, jpjm1                             
    690688               DO ji = 2, jpim1 
    691                   zx1 = z1_2 * ssumask(ji  ,jj) *  r1_e12u(ji  ,jj)    & 
     689                  zx1 = z1_2 * ssumask(ji  ,jj) *  r1_e1e2u(ji  ,jj)    & 
    692690                     &      * ( e1e2t(ji  ,jj  ) * zsshp2_e(ji  ,jj)    & 
    693691                     &      +   e1e2t(ji+1,jj  ) * zsshp2_e(ji+1,jj  ) ) 
    694                   zy1 = z1_2 * ssvmask(ji  ,jj) *  r1_e12v(ji  ,jj  )  & 
     692                  zy1 = z1_2 * ssvmask(ji  ,jj) *  r1_e1e2v(ji  ,jj  )  & 
    695693                     &       * ( e1e2t(ji ,jj  ) * zsshp2_e(ji  ,jj  )  & 
    696694                     &       +   e1e2t(ji ,jj+1) * zsshp2_e(ji  ,jj+1) ) 
     
    765763         ! 
    766764         ! Add top stresses: 
    767          zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * zun_e(:,:) * hur_e(:,:) 
    768          zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * zvn_e(:,:) * hvr_e(:,:) 
     765         zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * un_e(:,:) * hur_e(:,:) 
     766         zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * vn_e(:,:) * hvr_e(:,:) 
    769767         ! 
    770768         ! Surface pressure trend: 
     
    780778         ! 
    781779         ! Set next velocities: 
    782          IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN ! Vector form 
     780         IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN    ! Vector form 
    783781            DO jj = 2, jpjm1 
    784782               DO ji = fs_2, fs_jpim1   ! vector opt. 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynzad.F90

    r5956 r5969  
    8282      ENDIF 
    8383       
    84       !                             ! Vertical momentum advection at uw and vw-points 
    85       DO jk = 2, jpk                 
     84      DO jk = 2, jpkm1              ! Vertical momentum advection at level w and u- and v- vertical 
    8685         DO jj = 2, jpj                   ! vertical fluxes  
    8786            DO ji = fs_2, jpi             ! vector opt. 
     
    8988            END DO 
    9089         END DO 
    91          DO jj = 2, jpjm1                 ! interior vertical momentum advection at w-point 
    92             DO ji = fs_2, fs_jpim1 
     90         DO jj = 2, jpjm1                 ! vertical momentum advection at w-point 
     91            DO ji = fs_2, fs_jpim1        ! vector opt. 
    9392               zwuw(ji,jj,jk) = ( zww(ji+1,jj  ) + zww(ji,jj) ) * ( un(ji,jj,jk-1) - un(ji,jj,jk) ) 
    9493               zwvw(ji,jj,jk) = ( zww(ji  ,jj+1) + zww(ji,jj) ) * ( vn(ji,jj,jk-1) - vn(ji,jj,jk) ) 
     
    9695         END DO    
    9796      END DO 
    98       DO jj = 2, jpjm1                    ! First/last level advective fluxes 
    99          DO ji = fs_2, fs_jpim1           ! w is zero at k=1 and k=jpk 
    100             zwuw(ji,jj, 1 ) = 0._wp 
    101             zwvw(ji,jj, 1 ) = 0._wp 
    102             zwuw(ji,jj,jpk) = 0._wp 
    103             zwvw(ji,jj,jpk) = 0._wp 
    104          END DO 
    105       END DO 
     97      ! 
     98      ! Surface and bottom advective fluxes set to zero 
     99      IF ( ln_isfcav ) THEN 
     100         DO jj = 2, jpjm1 
     101            DO ji = fs_2, fs_jpim1           ! vector opt. 
     102               zwuw(ji,jj, 1:miku(ji,jj) ) = 0._wp 
     103               zwvw(ji,jj, 1:mikv(ji,jj) ) = 0._wp 
     104               zwuw(ji,jj,jpk) = 0._wp 
     105               zwvw(ji,jj,jpk) = 0._wp 
     106            END DO 
     107         END DO 
     108      ELSE 
     109         DO jj = 2, jpjm1         
     110            DO ji = fs_2, fs_jpim1           ! vector opt. 
     111               zwuw(ji,jj, 1 ) = 0._wp 
     112               zwvw(ji,jj, 1 ) = 0._wp 
     113               zwuw(ji,jj,jpk) = 0._wp 
     114               zwvw(ji,jj,jpk) = 0._wp 
     115            END DO   
     116         END DO 
     117      END IF 
    106118 
    107119      DO jk = 1, jpkm1              ! Vertical momentum advection at u- and v-points 
     
    194206         DO jj = 2, jpj                    
    195207            DO ji = fs_2, jpi             ! vector opt. 
    196 <<<<<<< .working 
    197                zww(ji,jj,jk) = 0.25_wp * e12t(ji,jj) * wn(ji,jj,jk) 
    198 ======= 
    199208               zww(ji,jj,jk) = 0.25_wp * e1e2t(ji,jj) * wn(ji,jj,jk) 
    200 >>>>>>> .merge-right.r5936 
    201209            END DO 
    202210         END DO 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/LDF/ldfslp.F90

    r5956 r5969  
    118118      REAL(wp) ::   zcj, zfj, zav, zbv, zaj, zbj   !   -      - 
    119119      REAL(wp) ::   zck, zfk,      zbw             !   -      - 
     120      REAL(wp) ::   zdepu, zdepv                   !   -      - 
    120121      REAL(wp), POINTER, DIMENSION(:,:  ) ::  zslpml_hmlpu, zslpml_hmlpv 
    121122      REAL(wp), POINTER, DIMENSION(:,:,:) ::  zwz, zww 
     
    177178      CALL ldf_slp_mxl( prd, pn2, zgru, zgrv, zdzr )        ! output: uslpml, vslpml, wslpiml, wslpjml 
    178179 
     180 
    179181      ! I.  slopes at u and v point      | uslp = d/di( prd ) / d/dz( prd ) 
    180182      ! ===========================      | vslp = d/dj( prd ) / d/dz( prd ) 
     
    183185         DO jj = 2, jpjm1 
    184186            DO ji = fs_2, fs_jpim1   ! vector opt. 
    185                zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji+1,jj  ), 5._wp)  & 
    186                   &                                  - 0.5 * ( risfdep(ji,jj) + risfdep(ji+1,jj ) ) 
    187                zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji  ,jj+1), 5._wp)  & 
    188                   &                                  - 0.5 * ( risfdep(ji,jj) + risfdep(ji  ,jj+1) ) 
     187               zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji+1,jj  ), 5._wp)       & 
     188                  &                                  - 0.5_wp * ( risfdep(ji,jj) + risfdep(ji+1,jj  ) ) ) 
     189               zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / ( MAX(hmlpt(ji,jj), hmlpt(ji  ,jj+1), 5._wp)       & 
     190                  &                                  - 0.5_wp * ( risfdep(ji,jj) + risfdep(ji  ,jj+1) ) ) 
    189191            END DO 
    190192         END DO 
     
    193195            DO ji = fs_2, fs_jpim1   ! vector opt. 
    194196               zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji+1,jj  ), 5._wp) 
    195                zslpml_hmlpu(ji,jj) = vslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji  ,jj+1), 5._wp) 
     197               zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji  ,jj+1), 5._wp) 
    196198            END DO 
    197199         END DO 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r5956 r5969  
    9191         IF( kn_fwb == 3 .AND. ln_isfcav    )   CALL ctl_stop( 'sbc_fwb: nn_fwb = 3 with ln_isfcav = .TRUE. not working, we stop ' ) 
    9292         ! 
    93          area = glob_sum( e12t(:,:) * tmask(:,:,1))           ! interior global domain surface 
     93         area = glob_sum( e1e2t(:,:) * tmask(:,:,1))           ! interior global domain surface 
    9494         ! isf cavities are excluded because it can feedback to the melting with generation of inhibition of plumes 
    9595         ! and in case of no melt, it can generate HSSW. 
     
    133133            a_fwb_b = a_fwb                           ! mean sea level taking into account the ice+snow 
    134134                                                      ! sum over the global domain 
    135             a_fwb   = glob_sum( e12t(:,:) * ( sshn(:,:) + snwice_mass(:,:) * r1_rau0 ) ) 
     135            a_fwb   = glob_sum( e1e2t(:,:) * ( sshn(:,:) + snwice_mass(:,:) * r1_rau0 ) ) 
    136136            a_fwb   = a_fwb * 1.e+3 / ( area * rday * 365. )     ! convert in Kg/m3/s = mm/s 
    137137!!gm        !                                                      !!bug 365d year  
     
    159159            ztmsk_neg(:,:) = tmask_i(:,:) - ztmsk_pos(:,:) 
    160160            ! 
    161             zsurf_neg = glob_sum( e12t(:,:)*ztmsk_neg(:,:) )  ! Area filled by <0 and >0 erp  
    162             zsurf_pos = glob_sum( e12t(:,:)*ztmsk_pos(:,:) ) 
     161            zsurf_neg = glob_sum( e1e2t(:,:)*ztmsk_neg(:,:) )  ! Area filled by <0 and >0 erp  
     162            zsurf_pos = glob_sum( e1e2t(:,:)*ztmsk_pos(:,:) ) 
    163163            !                                                  ! fwf global mean (excluding ocean to ice/snow exchanges)  
    164164            z_fwf     = glob_sum( e1e2t(:,:) * ( emp(:,:) - rnf(:,:) + fwfisf(:,:) - snwice_fmass(:,:) ) ) / area 
     
    172172            ENDIF 
    173173            ! 
    174             zsum_fwf   = glob_sum( e12t(:,:) * z_fwf )         ! fwf global mean over <0 or >0 erp area 
     174            zsum_fwf   = glob_sum( e1e2t(:,:) * z_fwf )         ! fwf global mean over <0 or >0 erp area 
    175175!!gm :  zsum_fwf   = z_fwf * area   ???  it is right?  I think so.... 
    176176            z_fwf_nsrf =  zsum_fwf / ( zsurf_tospread + rsmall ) 
    177177            !                                                  ! weight to respect erp field 2D structure  
    178             zsum_erp   = glob_sum( ztmsk_tospread(:,:) * erp(:,:) * e12t(:,:) ) 
     178            zsum_erp   = glob_sum( ztmsk_tospread(:,:) * erp(:,:) * e1e2t(:,:) ) 
    179179            z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( zsum_erp + rsmall ) 
    180180            !                                                  ! final correction term to apply 
     
    191191               IF( z_fwf < 0._wp ) THEN 
    192192                  WRITE(numout,*)'   z_fwf < 0' 
    193                   WRITE(numout,*)'   SUM(erp+)     = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e12t(:,:) )*1.e-9,' Sv' 
     193                  WRITE(numout,*)'   SUM(erp+)     = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2t(:,:) )*1.e-9,' Sv' 
    194194               ELSE 
    195195                  WRITE(numout,*)'   z_fwf >= 0' 
    196                   WRITE(numout,*)'   SUM(erp-)     = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e12t(:,:) )*1.e-9,' Sv' 
     196                  WRITE(numout,*)'   SUM(erp-)     = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2t(:,:) )*1.e-9,' Sv' 
    197197               ENDIF 
    198                WRITE(numout,*)'   SUM(empG)     = ', SUM( z_fwf*e12t(:,:) )*1.e-9,' Sv' 
     198               WRITE(numout,*)'   SUM(empG)     = ', SUM( z_fwf*e1e2t(:,:) )*1.e-9,' Sv' 
    199199               WRITE(numout,*)'   z_fwf         = ', z_fwf      ,' Kg/m2/s' 
    200200               WRITE(numout,*)'   z_fwf_nsrf    = ', z_fwf_nsrf ,' Kg/m2/s' 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r5956 r5969  
    388388               ! For those corresponding to zonal boundary     
    389389               qisf(ji,jj) = - rau0 * rcp * rn_gammat0 * risfLeff(ji,jj) * e1t(ji,jj) * zt_ave  & 
    390                            & * r1_e12t(ji,jj) * tmask(ji,jj,jk) 
     390                           & * r1_e1e2t(ji,jj) * tmask(ji,jj,jk) 
    391391              
    392392               fwfisf(ji,jj) = qisf(ji,jj) / rlfusisf          !fresh water flux kg/(m2s)                   
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r5956 r5969  
    234234            END DO 
    235235            IF( ln_isfcav ) THEN      ! first wet level beneath a cavity 
    236             ! PM: IF needed to avoid erasing surface value (jk=1) 
    237236               DO jj = 1, jpjm1 
    238237                  DO ji = 1, fs_jpim1   ! vector opt. 
     
    333332               DO jj = 1, jpjm1 
    334333                  DO ji = fs_2, fs_jpim1 
    335                      ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk)   & 
     334                     ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * wmask(ji,jj,jk)   & 
    336335                        &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
    337336                        &                            * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) 
     
    348347                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk)    & 
    349348                           &           + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj)   & 
    350                            &           * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * tmask(ji,jj,jk) / fse3w(ji,jj,jk) 
     349                           &           * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) * wmask(ji,jj,jk) / fse3w(ji,jj,jk) 
    351350                     END DO 
    352351                  END DO 
     
    356355                  DO jj = 1, jpjm1 
    357356                     DO ji = fs_2, fs_jpim1 
    358                         ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * tmask(ji,jj,jk)                      & 
     357                        ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / fse3w(ji,jj,jk) * wmask(ji,jj,jk)                      & 
    359358                           &                            * (  ah_wslp2(ji,jj,jk) * ( ptb (ji,jj,jk-1,jn) - ptb (ji,jj,jk,jn) )   & 
    360359                           &                               + akz     (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) )   ) 
Note: See TracChangeset for help on using the changeset viewer.