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 6603 for branches/2016/dev_r6393_NOC_WAD – NEMO

Ignore:
Timestamp:
2016-05-23T15:54:28+02:00 (8 years ago)
Author:
hliu
Message:

wet/dry for dynspg_ts.F90

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r6152 r6603  
    157157      REAL(wp), POINTER, DIMENSION(:,:) :: zcpx, zcpy                 ! Wetting/Dying gravity filter coef. 
    158158      REAL(wp), POINTER, DIMENSION(:,:) :: wduflt1, wdvflt1           ! Wetting/Dying velocity filter coef. 
     159      REAL(wp), POINTER, DIMENSION(:,:) :: sshai                      ! Wetting/Dying velocity filter coef. 
    159160      !!---------------------------------------------------------------------- 
    160161      ! 
     
    168169      CALL wrk_alloc( jpi,jpj,   zsshu_a, zsshv_a                  ) 
    169170      CALL wrk_alloc( jpi,jpj,   zhf ) 
    170       IF( ln_wd ) CALL wrk_alloc( jpi, jpj, zcpx, zcpy, wduflt1, wdvflt1 ) 
     171      IF( ln_wd ) CALL wrk_alloc( jpi, jpj, zcpx, zcpy, wduflt1, wdvflt1,sshai ) 
    171172      ! 
    172173      zmdi=1.e+20                               !  missing data indicator for masking 
     
    596597      ! 
    597598      ! Initialize sums: 
     599      IF(ln_wd) sshai(:,:) = ssha(:,:) 
    598600      ua_b  (:,:) = 0._wp       ! After barotropic velocities (or transport if flux form)           
    599601      va_b  (:,:) = 0._wp 
     
    687689         ENDIF 
    688690#endif 
    689          IF( ln_wd ) CALL wad_lmt_bt(zwx, zwy, sshn_e, zssh_frc, rdtbt) 
     691         !IF( ln_wd ) CALL wad_lmt_bt(zwx, zwy, sshn_e, zssh_frc, rdtbt) 
    690692         ! 
    691693         ! Sum over sub-time-steps to compute advective velocities 
     
    701703            END DO 
    702704         END DO 
    703          ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
    704          IF( ln_wd ) ssha_e(:,:) = MAX(ssha_e(:,:), rn_wdmin1 - bathy(:,:))  
     705 
     706         IF(ln_wd) THEN 
     707           ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) ) * wdmask(:,:)  
     708           &                + (1._wd - wdmask(:,:)) * (sshai(:,:) - sshn_e(:,:))) * ssmask(:,:) 
     709         ELSE 
     710           ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
     711         END IF 
     712          
    705713         CALL lbc_lnk( ssha_e, 'T',  1._wp ) 
    706714 
     
    888896                 zu_spg = - grav * ( zsshp2_e(ji+1,jj) - zsshp2_e(ji,jj) ) * r1_e1u(ji,jj) 
    889897                 zv_spg = - grav * ( zsshp2_e(ji,jj+1) - zsshp2_e(ji,jj) ) * r1_e2v(ji,jj) 
    890                  zwx(ji,jj) = zu_spg * zcpx(ji,jj)  
    891                  zwy(ji,jj) = zv_spg * zcpy(ji,jj) 
     898                 zwx(ji,jj) = zu_spg * zcpx(ji,jj) * wdmask(ji,jj) * wdmask(ji+1, jj)  
     899                 zwy(ji,jj) = zv_spg * zcpy(ji,jj) * wdmask(ji,jj) * wdmask(ji, jj+1) 
    892900              END DO 
    893901           END DO 
     
    10001008         !                                   ! Sum sea level 
    10011009         ssha(:,:) = ssha(:,:) + za1 * ssha_e(:,:) 
     1010         IF(ln_wd) ssha(:,:) = sshai(:,:) 
    10021011         !                                                 ! ==================== ! 
    10031012      END DO                                               !        end loop      ! 
     
    10241033      ! 
    10251034      ! Update barotropic trend: 
    1026       IF( ln_dynadv_vec .OR. ln_linssh ) THEN 
    1027          DO jk=1,jpkm1 
    1028             ua(:,:,jk) = ua(:,:,jk) + ( ua_b(:,:) - ub_b(:,:) ) * z1_2dt_b 
    1029             va(:,:,jk) = va(:,:,jk) + ( va_b(:,:) - vb_b(:,:) ) * z1_2dt_b 
    1030          END DO 
     1035      IF(ln_wd) THEN 
     1036        IF( ln_dynadv_vec .OR. ln_linssh ) THEN 
     1037           DO jk=1,jpkm1 
     1038              ua(:,:,jk) = ua(:,:,jk) + ( ua_b(:,:) - ub_b(:,:) ) * z1_2dt_b * wdmask(:,:) 
     1039              va(:,:,jk) = va(:,:,jk) + ( va_b(:,:) - vb_b(:,:) ) * z1_2dt_b * wdmask(:,:) 
     1040           END DO 
     1041        ELSE 
     1042           ! At this stage, ssha has been corrected: compute new depths at velocity points 
     1043           DO jj = 1, jpjm1 
     1044              DO ji = 1, jpim1      ! NO Vector Opt. 
     1045                 zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e1e2u(ji,jj) & 
     1046                    &              * ( e1e2t(ji  ,jj) * ssha(ji  ,jj)    & 
     1047                    &              +   e1e2t(ji+1,jj) * ssha(ji+1,jj) ) 
     1048                 zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e1e2v(ji,jj) & 
     1049                    &              * ( e1e2t(ji,jj  ) * ssha(ji,jj  )    & 
     1050                    &              +   e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 
     1051              END DO 
     1052           END DO 
     1053           CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
     1054           ! 
     1055           DO jk=1,jpkm1 
     1056              ua(:,:,jk) = ua(:,:,jk) + r1_hu_n(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b * wdmask(:,:) 
     1057              va(:,:,jk) = va(:,:,jk) + r1_hv_n(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * z1_2dt_b * wdmask(:,:) 
     1058           END DO 
     1059           ! Save barotropic velocities not transport: 
     1060           ua_b(:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 
     1061           va_b(:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 
     1062        ENDIF 
    10311063      ELSE 
    1032          ! At this stage, ssha has been corrected: compute new depths at velocity points 
    1033          DO jj = 1, jpjm1 
    1034             DO ji = 1, jpim1      ! NO Vector Opt. 
    1035                zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e1e2u(ji,jj) & 
    1036                   &              * ( e1e2t(ji  ,jj) * ssha(ji  ,jj)    & 
    1037                   &              +   e1e2t(ji+1,jj) * ssha(ji+1,jj) ) 
    1038                zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e1e2v(ji,jj) & 
    1039                   &              * ( e1e2t(ji,jj  ) * ssha(ji,jj  )    & 
    1040                   &              +   e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 
    1041             END DO 
    1042          END DO 
    1043          CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
    1044          ! 
    1045          DO jk=1,jpkm1 
    1046             ua(:,:,jk) = ua(:,:,jk) + r1_hu_n(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b 
    1047             va(:,:,jk) = va(:,:,jk) + r1_hv_n(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * z1_2dt_b 
    1048          END DO 
    1049          ! Save barotropic velocities not transport: 
    1050          ua_b(:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 
    1051          va_b(:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 
    1052       ENDIF 
     1064        IF( ln_dynadv_vec .OR. ln_linssh ) THEN 
     1065           DO jk=1,jpkm1 
     1066              ua(:,:,jk) = ua(:,:,jk) + ( ua_b(:,:) - ub_b(:,:) ) * z1_2dt_b 
     1067              va(:,:,jk) = va(:,:,jk) + ( va_b(:,:) - vb_b(:,:) ) * z1_2dt_b 
     1068           END DO 
     1069        ELSE 
     1070           ! At this stage, ssha has been corrected: compute new depths at velocity points 
     1071           DO jj = 1, jpjm1 
     1072              DO ji = 1, jpim1      ! NO Vector Opt. 
     1073                 zsshu_a(ji,jj) = z1_2 * umask(ji,jj,1)  * r1_e1e2u(ji,jj) & 
     1074                    &              * ( e1e2t(ji  ,jj) * ssha(ji  ,jj)    & 
     1075                    &              +   e1e2t(ji+1,jj) * ssha(ji+1,jj) ) 
     1076                 zsshv_a(ji,jj) = z1_2 * vmask(ji,jj,1)  * r1_e1e2v(ji,jj) & 
     1077                    &              * ( e1e2t(ji,jj  ) * ssha(ji,jj  )    & 
     1078                    &              +   e1e2t(ji,jj+1) * ssha(ji,jj+1) ) 
     1079              END DO 
     1080           END DO 
     1081           CALL lbc_lnk_multi( zsshu_a, 'U', 1._wp, zsshv_a, 'V', 1._wp ) ! Boundary conditions 
     1082           ! 
     1083           DO jk=1,jpkm1 
     1084              ua(:,:,jk) = ua(:,:,jk) + r1_hu_n(:,:) * ( ua_b(:,:) - ub_b(:,:) * hu_b(:,:) ) * z1_2dt_b 
     1085              va(:,:,jk) = va(:,:,jk) + r1_hv_n(:,:) * ( va_b(:,:) - vb_b(:,:) * hv_b(:,:) ) * z1_2dt_b 
     1086           END DO 
     1087           ! Save barotropic velocities not transport: 
     1088           ua_b(:,:) =  ua_b(:,:) / ( hu_0(:,:) + zsshu_a(:,:) + 1._wp - ssumask(:,:) ) 
     1089           va_b(:,:) =  va_b(:,:) / ( hv_0(:,:) + zsshv_a(:,:) + 1._wp - ssvmask(:,:) ) 
     1090        ENDIF 
     1091 
     1092      END IF 
    10531093      ! 
    10541094      DO jk = 1, jpkm1 
Note: See TracChangeset for help on using the changeset viewer.