Changeset 5910


Ignore:
Timestamp:
2015-11-23T16:06:56+01:00 (5 years ago)
Author:
mathiot
Message:

ISF: add compatibility with time splitting

Location:
branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN
Files:
2 edited

Legend:

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

    r5120 r5910  
    250250      IF( ( ioptio > 1 .AND. .NOT. lk_esopa ) .OR. ( ioptio == 0 .AND. .NOT. lk_c1d ) )   & 
    251251           &   CALL ctl_stop( ' Choose only one surface pressure gradient scheme with a key cpp' ) 
    252       IF( ( lk_dynspg_ts .OR. lk_dynspg_exp ) .AND. ln_isfcav )   & 
    253            &   CALL ctl_stop( ' dynspg_ts and dynspg_exp not tested with ice shelf cavity ' ) 
     252      IF( lk_dynspg_exp .AND. ln_isfcav )   & 
     253           &   CALL ctl_stop( ' dynspg_exp not tested with ice shelf cavity ' ) 
    254254      ! 
    255255      IF( lk_esopa     )   nspg = -1 
  • branches/2015/dev_r5151_UKMO_ISF/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r5624 r5910  
    144144      INTEGER  ::   ji, jj, jk, jn        ! dummy loop indices 
    145145      INTEGER  ::   ikbu, ikbv, noffset      ! local integers 
     146      INTEGER  ::   iktu, iktv               ! local integers 
    146147      REAL(wp) ::   zraur, z1_2dt_b, z2dt_bf    ! local scalars 
    147148      REAL(wp) ::   zx1, zy1, zx2, zy2         !   -      - 
     
    242243            DO jj = 1, jpjm1 
    243244               DO ji = 1, jpim1 
    244                   zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                     & 
    245                         &          ht(ji  ,jj  ) + ht(ji+1,jj  )   )                   & 
    246                         &      / ( MAX( 1.0_wp, tmask(ji  ,jj+1, 1) + tmask(ji+1,jj+1, 1) +    & 
    247                         &                       tmask(ji  ,jj  , 1) + tmask(ji+1,jj  , 1) ) ) 
     245                  zwz(ji,jj) =   ( ht(ji  ,jj+1) + ht(ji+1,jj+1) +                         & 
     246                        &          ht(ji  ,jj  ) + ht(ji+1,jj  )   )                       & 
     247                        &      / ( MAX( 1.0_wp, ssmask(ji  ,jj+1) + ssmask(ji+1,jj+1) +    & 
     248                        &                       ssmask(ji  ,jj  ) + ssmask(ji+1,jj  ) )    ) 
    248249                  IF( zwz(ji,jj) /= 0._wp )   zwz(ji,jj) = 1._wp / zwz(ji,jj) 
    249250               END DO 
     
    389390      DO jj = 2, jpjm1                          ! Remove coriolis term (and possibly spg) from barotropic trend 
    390391         DO ji = fs_2, fs_jpim1 
    391              zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * umask(ji,jj,1) 
    392              zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * vmask(ji,jj,1) 
     392             zu_frc(ji,jj) = zu_frc(ji,jj) - zu_trd(ji,jj) * ssumask(ji,jj) 
     393             zv_frc(ji,jj) = zv_frc(ji,jj) - zv_trd(ji,jj) * ssvmask(ji,jj) 
    393394          END DO 
    394395      END DO  
     
    418419      zu_frc(:,:) = zu_frc(:,:) + hur(:,:) * bfrua(:,:) * zwx(:,:) 
    419420      zv_frc(:,:) = zv_frc(:,:) + hvr(:,:) * bfrva(:,:) * zwy(:,:) 
     421      !        
     422      !                                         ! Add top stress contribution from baroclinic velocities:       
     423      IF (ln_bt_fw) THEN 
     424         DO jj = 2, jpjm1 
     425            DO ji = fs_2, fs_jpim1   ! vector opt. 
     426               iktu = miku(ji,jj) 
     427               iktv = mikv(ji,jj) 
     428               zwx(ji,jj) = un(ji,jj,iktu) - un_b(ji,jj) ! NOW top baroclinic velocities 
     429               zwy(ji,jj) = vn(ji,jj,iktv) - vn_b(ji,jj) 
     430            END DO 
     431         END DO 
     432      ELSE 
     433         DO jj = 2, jpjm1 
     434            DO ji = fs_2, fs_jpim1   ! vector opt. 
     435               iktu = miku(ji,jj) 
     436               iktv = mikv(ji,jj) 
     437               zwx(ji,jj) = ub(ji,jj,iktu) - ub_b(ji,jj) ! BEFORE top baroclinic velocities 
     438               zwy(ji,jj) = vb(ji,jj,iktv) - vb_b(ji,jj) 
     439            END DO 
     440         END DO 
     441      ENDIF 
     442      ! 
     443      ! Note that the "unclipped" top friction parameter is used even with explicit drag 
     444      zu_frc(:,:) = zu_frc(:,:) + hur(:,:) * tfrua(:,:) * zwx(:,:) 
     445      zv_frc(:,:) = zv_frc(:,:) + hvr(:,:) * tfrva(:,:) * zwy(:,:) 
    420446      !        
    421447      IF (ln_bt_fw) THEN                        ! Add wind forcing 
     
    549575            DO jj = 2, jpjm1                                    ! Sea Surface Height at u- & v-points 
    550576               DO ji = 2, fs_jpim1   ! Vector opt. 
    551                   zwx(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj)     & 
     577                  zwx(ji,jj) = z1_2 * ssumask(ji,jj)  * r1_e12u(ji,jj)     & 
    552578                     &              * ( e12t(ji  ,jj) * zsshp2_e(ji  ,jj)  & 
    553579                     &              +   e12t(ji+1,jj) * zsshp2_e(ji+1,jj) ) 
    554                   zwy(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj)     & 
     580                  zwy(ji,jj) = z1_2 * ssvmask(ji,jj)  * r1_e12v(ji,jj)     & 
    555581                     &              * ( e12t(ji,jj  ) * zsshp2_e(ji,jj  )  & 
    556582                     &              +   e12t(ji,jj+1) * zsshp2_e(ji,jj+1) ) 
     
    612638            END DO 
    613639         END DO 
    614          ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * tmask(:,:,1) 
     640         ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
    615641         CALL lbc_lnk( ssha_e, 'T',  1._wp ) 
    616642 
     
    627653            DO jj = 2, jpjm1 
    628654               DO ji = 2, jpim1      ! NO Vector Opt. 
    629                   zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e12u(ji,jj)  & 
    630                      &              * ( e12t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
    631                      &              +   e12t(ji+1,jj  ) * ssha_e(ji+1,jj  ) ) 
    632                   zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e12v(ji,jj)  & 
    633                      &              * ( e12t(ji  ,jj  ) * ssha_e(ji  ,jj  ) & 
    634                      &              +   e12t(ji  ,jj+1) * ssha_e(ji  ,jj+1) ) 
     655                  zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e12u(ji,jj)    & 
     656                     &              * ( e12t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
     657                     &              +   e12t(ji+1,jj  )  * ssha_e(ji+1,jj  ) ) 
     658                  zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e12v(ji,jj)    & 
     659                     &              * ( e12t(ji  ,jj  )  * ssha_e(ji  ,jj  ) & 
     660                     &              +   e12t(ji  ,jj+1)  * ssha_e(ji  ,jj+1) ) 
    635661               END DO 
    636662            END DO 
     
    666692            DO jj = 2, jpjm1                             
    667693               DO ji = 2, jpim1 
    668                   zx1 = z1_2 * umask(ji  ,jj,1) *  r1_e12u(ji  ,jj)    & 
     694                  zx1 = z1_2 * ssumask(ji  ,jj) *  r1_e12u(ji  ,jj)    & 
    669695                     &      * ( e12t(ji  ,jj  ) * zsshp2_e(ji  ,jj)    & 
    670696                     &      +   e12t(ji+1,jj  ) * zsshp2_e(ji+1,jj  ) ) 
    671                   zy1 = z1_2 * vmask(ji  ,jj,1) *  r1_e12v(ji  ,jj  )  & 
     697                  zy1 = z1_2 * ssvmask(ji  ,jj) *  r1_e12v(ji  ,jj  )  & 
    672698                     &       * ( e12t(ji ,jj  ) * zsshp2_e(ji  ,jj  )  & 
    673699                     &       +   e12t(ji ,jj+1) * zsshp2_e(ji  ,jj+1) ) 
     
    741767         zv_trd(:,:) = zv_trd(:,:) + bfrva(:,:) * zvn_e(:,:) * hvr_e(:,:) 
    742768         ! 
     769         ! Add top stresses: 
     770         zu_trd(:,:) = zu_trd(:,:) + tfrua(:,:) * zun_e(:,:) * hur_e(:,:) 
     771         zv_trd(:,:) = zv_trd(:,:) + tfrva(:,:) * zvn_e(:,:) * hvr_e(:,:) 
     772         ! 
    743773         ! Surface pressure trend: 
    744774         DO jj = 2, jpjm1 
     
    753783         ! 
    754784         ! Set next velocities: 
    755          IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN    ! Vector form 
     785         IF( ln_dynadv_vec .OR. (.NOT. lk_vvl) ) THEN ! Vector form 
    756786            DO jj = 2, jpjm1 
    757787               DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    760790                            &                                 + zu_trd(ji,jj)   & 
    761791                            &                                 + zu_frc(ji,jj) ) &  
    762                             &   ) * umask(ji,jj,1) 
     792                            &   ) * ssumask(ji,jj) 
    763793 
    764794                  va_e(ji,jj) = (                                zvn_e(ji,jj)   & 
     
    766796                            &                                 + zv_trd(ji,jj)   & 
    767797                            &                                 + zv_frc(ji,jj) ) & 
    768                             &   ) * vmask(ji,jj,1) 
    769                END DO 
    770             END DO 
    771  
    772          ELSE                 ! Flux form 
     798                            &   ) * ssvmask(ji,jj) 
     799               END DO 
     800            END DO 
     801 
     802         ELSE                                         ! Flux form 
    773803            DO jj = 2, jpjm1 
    774804               DO ji = fs_2, fs_jpim1   ! vector opt. 
    775805 
    776                   zhura = umask(ji,jj,1)/(hu_0(ji,jj) + zsshu_a(ji,jj) + 1._wp - umask(ji,jj,1)) 
    777                   zhvra = vmask(ji,jj,1)/(hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - vmask(ji,jj,1)) 
     806                  zhura = ssumask(ji,jj)/(hu_0(ji,jj) + zsshu_a(ji,jj) + 1._wp - ssumask(ji,jj)) 
     807                  zhvra = ssvmask(ji,jj)/(hv_0(ji,jj) + zsshv_a(ji,jj) + 1._wp - ssvmask(ji,jj)) 
    778808 
    779809                  ua_e(ji,jj) = (                hu_e(ji,jj)  *  zun_e(ji,jj)   &  
     
    796826            hu_e (:,:) = hu_0(:,:) + zsshu_a(:,:) 
    797827            hv_e (:,:) = hv_0(:,:) + zsshv_a(:,:) 
    798             hur_e(:,:) = umask(:,:,1) / ( hu_e(:,:) + 1._wp - umask(:,:,1) ) 
    799             hvr_e(:,:) = vmask(:,:,1) / ( hv_e(:,:) + 1._wp - vmask(:,:,1) ) 
     828            hur_e(:,:) = ssumask(:,:) / ( hu_e(:,:) + 1._wp - ssumask(:,:) ) 
     829            hvr_e(:,:) = ssvmask(:,:) / ( hv_e(:,:) + 1._wp - ssvmask(:,:) ) 
    800830            ! 
    801831         ENDIF 
     
    832862            ua_b  (:,:) = ua_b  (:,:) + za1 * ua_e  (:,:)  
    833863            va_b  (:,:) = va_b  (:,:) + za1 * va_e  (:,:)  
    834          ELSE                                ! Sum transports 
     864         ELSE                                              ! Sum transports 
    835865            ua_b  (:,:) = ua_b  (:,:) + za1 * ua_e  (:,:) * hu_e (:,:) 
    836866            va_b  (:,:) = va_b  (:,:) + za1 * va_e  (:,:) * hv_e (:,:) 
     
    850880         DO jj = 1, jpjm1 
    851881            DO ji = 1, jpim1      ! NO Vector Opt. 
    852                zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1) * r1_e12u(ji,jj) & 
    853                   &              * ( e12t(ji  ,jj) * ssha(ji  ,jj)    & 
     882               zsshu_a(ji,jj) = z1_2 * ssumask(ji,jj) * r1_e12u(ji,jj) & 
     883                  &              * ( e12t(ji  ,jj) * ssha(ji  ,jj)     & 
    854884                  &              +   e12t(ji+1,jj) * ssha(ji+1,jj) ) 
    855                zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1) * r1_e12v(ji,jj) & 
    856                   &              * ( e12t(ji,jj  ) * ssha(ji,jj  )    & 
     885               zsshv_a(ji,jj) = z1_2 * ssvmask(ji,jj) * r1_e12v(ji,jj) & 
     886                  &              * ( e12t(ji,jj  ) * ssha(ji,jj  )     & 
    857887                  &              +   e12t(ji,jj+1) * ssha(ji,jj+1) ) 
    858888            END DO 
     
    887917         END DO 
    888918         ! Save barotropic velocities not transport: 
    889          ua_b  (:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - umask(:,:,1) ) 
    890          va_b  (:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - vmask(:,:,1) ) 
     919         ua_b  (:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 
     920         va_b  (:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 
    891921      ENDIF 
    892922      ! 
Note: See TracChangeset for help on using the changeset viewer.