Changeset 5114


Ignore:
Timestamp:
2015-03-02T20:34:59+01:00 (6 years ago)
Author:
mathiot
Message:

restore e3t/w definition as before merge in domzgr + zpshde if ln_isfcav = false

Location:
branches/2015/dev_r5094_UKMO_ISFCLEAN/NEMOGCM/NEMO/OPA_SRC
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5094_UKMO_ISFCLEAN/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r5111 r5114  
    298298      ENDIF 
    299299 
    300 !      IF ( ln_isfcav ) THEN 
     300      IF ( ln_isfcav ) THEN 
    301301! need to be like this to compute the pressure gradient with ISF. If not, level beneath the ISF are not aligned (sum(e3t) /= depth) 
    302302! define e3t_0 and e3w_0 as the differences between gdept and gdepw respectively 
     
    310310         END DO 
    311311         e3w_1d(1  ) = 2._wp * (gdept_1d(1) - gdepw_1d(1))  
    312 !      END IF 
     312      END IF 
    313313 
    314314!!gm BUG in s-coordinate this does not work! 
     
    11461146         END DO 
    11471147      END DO 
    1148       !IF ( ln_isfcav ) THEN 
     1148      IF ( ln_isfcav ) THEN 
    11491149      ! (ISF) define e3uw (adapted for 2 cells in the water column) 
     1150      ! Need to test if the modification of only mikt and mbkt levels is enough 
    11501151         DO jk = 2,jpk                           
    11511152            DO jj = 1, jpjm1  
     
    11581159            END DO  
    11591160         END DO 
    1160       !END IF 
    1161       !End (ISF) 
     1161      END IF 
    11621162       
    11631163      CALL lbc_lnk( e3u_0 , 'U', 1._wp )   ;   CALL lbc_lnk( e3uw_0, 'U', 1._wp )   ! lateral boundary conditions 
     
    12581258   SUBROUTINE zgr_isf 
    12591259      !!---------------------------------------------------------------------- 
    1260       !!                    ***  ROUTINE zgr_bat_ctl  *** 
     1260      !!                    ***  ROUTINE zgr_isf  *** 
    12611261      !!    
    12621262      !! ** Purpose :   check the bathymetry in levels 
  • branches/2015/dev_r5094_UKMO_ISFCLEAN/NEMOGCM/NEMO/OPA_SRC/DYN/dynhpg.F90

    r5111 r5114  
    168168                           & the pressure jacobian formulation hpg_prj') 
    169169 
    170       IF( ln_hpg_isf .AND. .NOT. ln_isfcav )   & 
    171            &   CALL ctl_stop( ' hpg_isf not available is ln_isfcav = false ' ) 
     170      IF(       ln_hpg_isf .AND. .NOT. ln_isfcav )   & 
     171         &   CALL ctl_stop( ' hpg_isf not available if ln_isfcav = false ' ) 
     172      IF( .NOT. ln_hpg_isf .AND.       ln_isfcav )   & 
     173         &   CALL ctl_stop( 'Only hpg_isf has been corrected to work with ice shelf cavity.' ) 
    172174      ! 
    173175      !                               ! Set nhpg from ln_hpg_... flags 
     
    188190      IF( ln_hpg_isf )   ioptio = ioptio + 1 
    189191      IF( ioptio /= 1 )   CALL ctl_stop( 'NO or several hydrostatic pressure gradient options used' ) 
    190       IF( ( .NOT. ln_hpg_isf ) .AND. ln_isfcav )   & 
    191           &  CALL ctl_stop( 'Only hpg_isf has been corrected to work with ice shelf cavity.' ) 
    192192      !  
    193193      ! initialisation of ice load 
  • branches/2015/dev_r5094_UKMO_ISFCLEAN/NEMOGCM/NEMO/OPA_SRC/TRA/zpshde.F90

    r5111 r5114  
    112112               iku = mbku(ji,jj)   ;   ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
    113113               ikv = mbkv(ji,jj)   ;   ikvm1 = MAX( ikv - 1 , 1 )    ! if level first is a p-step, ik.m1=1 
    114                ! (ISF) case partial step top and bottom in adjacent cell in vertical 
    115                ! cannot used e3w because if 2 cell water column, we have ps at top and bottom 
    116                ! in this case e3w(i,j) - e3w(i,j+1) is not the distance between Tj~ and Tj 
    117                ! the only common depth between cells (i,j) and (i,j+1) is gdepw_0 
    118                ze3wu  = (gdept_0(ji+1,jj,iku) - gdepw_0(ji+1,jj,iku)) - (gdept_0(ji,jj,iku) - gdepw_0(ji,jj,iku)) 
    119                ze3wv  = (gdept_0(ji,jj+1,ikv) - gdepw_0(ji,jj+1,ikv)) - (gdept_0(ji,jj,ikv) - gdepw_0(ji,jj,ikv)) 
     114               ze3wu = fse3w(ji+1,jj  ,iku) - fse3w(ji,jj,iku) 
     115               ze3wv = fse3w(ji  ,jj+1,ikv) - fse3w(ji,jj,ikv) 
    120116               ! 
    121117               ! i- direction 
     
    125121                  zti (ji,jj,jn) = pta(ji+1,jj,iku,jn) + zmaxu * ( pta(ji+1,jj,ikum1,jn) - pta(ji+1,jj,iku,jn) ) 
    126122                  ! gradient of  tracers 
    127                   pgtu(ji,jj,jn) = umask(ji,jj,iku) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
     123                  pgtu(ji,jj,jn) = umask(ji,jj,1) * ( zti(ji,jj,jn) - pta(ji,jj,iku,jn) ) 
    128124               ELSE                           ! case 2 
    129125                  zmaxu = -ze3wu / fse3w(ji,jj,iku) 
     
    131127                  zti (ji,jj,jn) = pta(ji,jj,iku,jn) + zmaxu * ( pta(ji,jj,ikum1,jn) - pta(ji,jj,iku,jn) ) 
    132128                  ! gradient of tracers 
    133                   pgtu(ji,jj,jn) = umask(ji,jj,iku) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
     129                  pgtu(ji,jj,jn) = umask(ji,jj,1) * ( pta(ji+1,jj,iku,jn) - zti(ji,jj,jn) ) 
    134130               ENDIF 
    135131               ! 
     
    140136                  ztj (ji,jj,jn) = pta(ji,jj+1,ikv,jn) + zmaxv * ( pta(ji,jj+1,ikvm1,jn) - pta(ji,jj+1,ikv,jn) ) 
    141137                  ! gradient of tracers 
    142                   pgtv(ji,jj,jn) = vmask(ji,jj,ikv) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
     138                  pgtv(ji,jj,jn) = vmask(ji,jj,1) * ( ztj(ji,jj,jn) - pta(ji,jj,ikv,jn) ) 
    143139               ELSE                           ! case 2 
    144140                  zmaxv =  -ze3wv / fse3w(ji,jj,ikv) 
     
    146142                  ztj (ji,jj,jn) = pta(ji,jj,ikv,jn) + zmaxv * ( pta(ji,jj,ikvm1,jn) - pta(ji,jj,ikv,jn) ) 
    147143                  ! gradient of tracers 
    148                   pgtv(ji,jj,jn) = vmask(ji,jj,ikv) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
     144                  pgtv(ji,jj,jn) = vmask(ji,jj,1) * ( pta(ji,jj+1,ikv,jn) - ztj(ji,jj,jn) ) 
    149145               ENDIF 
    150146            END DO 
     
    161157               iku = mbku(ji,jj) 
    162158               ikv = mbkv(ji,jj) 
    163                ze3wu  = (gdept_0(ji+1,jj,iku) - gdepw_0(ji+1,jj,iku)) - (gdept_0(ji,jj,iku) - gdepw_0(ji,jj,iku)) 
    164                ze3wv  = (gdept_0(ji,jj+1,ikv) - gdepw_0(ji,jj+1,ikv)) - (gdept_0(ji,jj,ikv) - gdepw_0(ji,jj,ikv)) 
    165  
    166                IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = fsdept(ji+1,jj,iku) - ze3wu     ! i-direction: case 1 
    167                ELSE                        ;   zhi(ji,jj) = fsdept(ji  ,jj,iku) + ze3wu    ! -     -      case 2 
    168                ENDIF 
    169                IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = fsdept(ji,jj+1,ikv) - ze3wv    ! j-direction: case 1 
    170                ELSE                        ;   zhj(ji,jj) = fsdept(ji,jj  ,ikv) + ze3wv    ! -     -      case 2 
     159               ze3wu  = fse3w(ji+1,jj  ,iku) - fse3w(ji,jj,iku) 
     160               ze3wv  = fse3w(ji  ,jj+1,ikv) - fse3w(ji,jj,ikv) 
     161               IF( ze3wu >= 0._wp ) THEN   ;   zhi(ji,jj) = fsdept(ji  ,jj,iku)     ! i-direction: case 1 
     162               ELSE                        ;   zhi(ji,jj) = fsdept(ji+1,jj,iku)     ! -     -      case 2 
     163               ENDIF 
     164               IF( ze3wv >= 0._wp ) THEN   ;   zhj(ji,jj) = fsdept(ji,jj  ,ikv)     ! j-direction: case 1 
     165               ELSE                        ;   zhj(ji,jj) = fsdept(ji,jj+1,ikv)     ! -     -      case 2 
    171166               ENDIF 
    172167            END DO 
     
    181176         DO jj = 1, jpjm1 
    182177            DO ji = 1, jpim1 
    183                iku = mbku(ji,jj) ; ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
    184                ikv = mbkv(ji,jj) ; ikvm1 = MAX( ikv - 1 , 1 )    ! last and before last ocean level at u- & v-points 
    185                ze3wu  = (gdept_0(ji+1,jj,iku) - gdepw_0(ji+1,jj,iku)) - (gdept_0(ji,jj,iku) - gdepw_0(ji,jj,iku)) 
    186                ze3wv  = (gdept_0(ji,jj+1,ikv) - gdepw_0(ji,jj+1,ikv)) - (gdept_0(ji,jj,ikv) - gdepw_0(ji,jj,ikv)) 
    187                IF( ze3wu >= 0._wp ) THEN ; pgru(ji,jj) = umask(ji,jj,iku) * ( zri(ji  ,jj) - prd(ji,jj,iku) )   ! i: 1 
    188                ELSE                      ; pgru(ji,jj) = umask(ji,jj,iku) * ( prd(ji+1,jj,iku) - zri(ji,jj) )   ! i: 2 
    189                ENDIF 
    190                IF( ze3wv >= 0._wp ) THEN ; pgrv(ji,jj) = vmask(ji,jj,ikv) * ( zrj(ji,jj  ) - prd(ji,jj,ikv) )   ! j: 1 
    191                ELSE                      ; pgrv(ji,jj) = vmask(ji,jj,ikv) * ( prd(ji,jj+1,ikv) - zrj(ji,jj) )   ! j: 2 
     178               iku = mbku(ji,jj) 
     179               ikv = mbkv(ji,jj) 
     180               ze3wu  = fse3w(ji+1,jj  ,iku) - fse3w(ji,jj,iku) 
     181               ze3wv  = fse3w(ji  ,jj+1,ikv) - fse3w(ji,jj,ikv) 
     182               IF( ze3wu >= 0._wp ) THEN   ;   pgru(ji,jj) = umask(ji,jj,1) * ( zri(ji  ,jj    ) - prd(ji,jj,iku) )   ! i: 1 
     183               ELSE                        ;   pgru(ji,jj) = umask(ji,jj,1) * ( prd(ji+1,jj,iku) - zri(ji,jj    ) )   ! i: 2 
     184               ENDIF 
     185               IF( ze3wv >= 0._wp ) THEN   ;   pgrv(ji,jj) = vmask(ji,jj,1) * ( zrj(ji,jj      ) - prd(ji,jj,ikv) )   ! j: 1 
     186               ELSE                        ;   pgrv(ji,jj) = vmask(ji,jj,1) * ( prd(ji,jj+1,ikv) - zrj(ji,jj    ) )   ! j: 2 
    192187               ENDIF 
    193188            END DO 
Note: See TracChangeset for help on using the changeset viewer.