Changeset 6986


Ignore:
Timestamp:
2016-10-04T17:46:55+02:00 (4 years ago)
Author:
acc
Message:

Branch dev_r6393_NOC_WAD. Introduced some WAD test cases, tidied and corrected WAD code

Location:
branches/2016/dev_r6393_NOC_WAD/NEMOGCM
Files:
18 added
9 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/CONFIG/cfg.txt

    r6140 r6986  
    1111ORCA2_OFF_PISCES OPA_SRC OFF_SRC TOP_SRC 
    1212GYRE OPA_SRC 
     13WAD_TEST_CASES OPA_SRC 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DOM/domain.F90

    r6140 r6986  
    105105      IF( ln_linssh ) THEN          ! Fix in time : set to the reference one for all 
    106106         !       before        !          now          !       after         ! 
    107          ;  gdept_b = gdept_0  ;   gdept_n = gdept_0   !        ---          ! depth of grid-points 
    108          ;  gdepw_b = gdepw_0  ;   gdepw_n = gdepw_0   !        ---          ! 
    109          ;                     ;   gde3w_n = gde3w_0   !        ---          ! 
     107            gdept_b = gdept_0  ;   gdept_n = gdept_0   !        ---          ! depth of grid-points 
     108            gdepw_b = gdepw_0  ;   gdepw_n = gdepw_0   !        ---          ! 
     109                                   gde3w_n = gde3w_0   !        ---          ! 
    110110         !                                                                   
    111          ;    e3t_b =   e3t_0  ;     e3t_n =   e3t_0   ;   e3t_a =  e3t_0    ! scale factors 
    112          ;    e3u_b =   e3u_0  ;     e3u_n =   e3u_0   ;   e3u_a =  e3u_0    ! 
    113          ;    e3v_b =   e3v_0  ;     e3v_n =   e3v_0   ;   e3v_a =  e3v_0    ! 
    114          ;                     ;     e3f_n =   e3f_0   !        ---          ! 
    115          ;    e3w_b =   e3w_0  ;     e3w_n =   e3w_0   !        ---          ! 
    116          ;   e3uw_b =  e3uw_0  ;    e3uw_n =  e3uw_0   !        ---          ! 
    117          ;   e3vw_b =  e3vw_0  ;    e3vw_n =  e3vw_0   !        ---          ! 
     111              e3t_b =   e3t_0  ;     e3t_n =   e3t_0   ;   e3t_a =  e3t_0    ! scale factors 
     112              e3u_b =   e3u_0  ;     e3u_n =   e3u_0   ;   e3u_a =  e3u_0    ! 
     113              e3v_b =   e3v_0  ;     e3v_n =   e3v_0   ;   e3v_a =  e3v_0    ! 
     114                                     e3f_n =   e3f_0   !        ---          ! 
     115              e3w_b =   e3w_0  ;     e3w_n =   e3w_0   !        ---          ! 
     116             e3uw_b =  e3uw_0  ;    e3uw_n =  e3uw_0   !        ---          ! 
     117             e3vw_b =  e3vw_0  ;    e3vw_n =  e3vw_0   !        ---          ! 
    118118         ! 
    119119         CALL wrk_alloc( jpi,jpj,   z1_hu_0, z1_hv_0 ) 
     
    123123         ! 
    124124         !        before       !          now          !       after         ! 
    125          ;                     ;      ht_n =    ht_0   !                     ! water column thickness 
    126          ;     hu_b =    hu_0  ;      hu_n =    hu_0   ;    hu_a =    hu_0   !  
    127          ;     hv_b =    hv_0  ;      hv_n =    hv_0   ;    hv_a =    hv_0   ! 
    128          ;  r1_hu_b = z1_hu_0  ;   r1_hu_n = z1_hu_0   ; r1_hu_a = z1_hu_0   ! inverse of water column thickness 
    129          ;  r1_hv_b = z1_hv_0  ;   r1_hv_n = z1_hv_0   ; r1_hv_a = z1_hv_0   ! 
     125                                      ht_n =    ht_0   !                     ! water column thickness 
     126               hu_b =    hu_0  ;      hu_n =    hu_0   ;    hu_a =    hu_0   !  
     127               hv_b =    hv_0  ;      hv_n =    hv_0   ;    hv_a =    hv_0   ! 
     128            r1_hu_b = z1_hu_0  ;   r1_hu_n = z1_hu_0   ; r1_hu_a = z1_hu_0   ! inverse of water column thickness 
     129            r1_hv_b = z1_hv_0  ;   r1_hv_n = z1_hv_0   ; r1_hv_a = z1_hv_0   ! 
    130130         ! 
    131131         CALL wrk_dealloc( jpi,jpj,   z1_hu_0, z1_hv_0 ) 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DOM/domvvl.F90

    r6351 r6986  
    874874            ! 
    875875         ELSE                                   !* Initialize at "rest" 
    876             e3t_b(:,:,:) = e3t_0(:,:,:) 
    877             e3t_n(:,:,:) = e3t_0(:,:,:) 
    878             sshn(:,:) = 0.0_wp 
    879  
    880             IF( ln_wd ) THEN 
     876            ! 
     877            IF( ln_wd .AND. ( cp_cfg == 'wad' ) ) THEN 
     878               ! 
     879               CALL wad_istate                  ! WAD test configuration : start from  
     880                                                ! uniform T-S fields and initial ssh slope 
     881               ! needs to be called here and in istate which is called later. 
     882               ! Adjust vertical metrics 
     883               DO jk = 1, jpk 
     884                  e3t_n(:,:,jk) =  e3t_0(:,:,jk) * ( ht_0(:,:) + sshn(:,:) ) & 
     885                    &                            / ( ht_0(:,:) + 1._wp - ssmask(:,:) ) * tmask(:,:,jk)   & 
     886                    &            + e3t_0(:,:,jk)                               * (1._wp -tmask(:,:,jk)) 
     887               END DO 
     888               e3t_b(:,:,:) = e3t_n(:,:,:) 
     889               ! 
     890            ELSEIF( ln_wd ) THEN 
     891               ! 
    881892              DO jj = 1, jpj 
    882893                DO ji = 1, jpi 
    883894                  IF( e3t_0(ji,jj,1) <= 0.5_wp * rn_wdmin1 ) THEN 
    884                      e3t_b(ji,jj,:) = 0.5_wp * rn_wdmin1  
    885                      e3t_n(ji,jj,:) = 0.5_wp * rn_wdmin1  
    886                      e3t_a(ji,jj,:) = 0.5_wp * rn_wdmin1  
     895                     e3t_b(ji,jj,:) = 0.5_wp * rn_wdmin1 
     896                     e3t_n(ji,jj,:) = 0.5_wp * rn_wdmin1 
     897                     e3t_a(ji,jj,:) = 0.5_wp * rn_wdmin1 
    887898                     sshb(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
    888899                     sshn(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     
    891902                ENDDO 
    892903              ENDDO 
     904               ! 
     905            ELSE 
     906               ! 
     907               e3t_b(:,:,:) = e3t_0(:,:,:) 
     908               e3t_n(:,:,:) = e3t_0(:,:,:) 
     909               sshn(:,:) = 0.0_wp 
     910               ! 
    893911            END IF 
    894912 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DOM/domzgr.F90

    r6152 r6986  
    416416               IF(lwp) WRITE(numout,*) '         Depth = rn_bathy read in namelist' 
    417417               zdta(:,:) = rn_bathy 
     418! 
     419               IF( cp_cfg == 'wad' ) THEN 
     420                  SELECT CASE ( jp_cfg ) 
     421                     !                                        ! ==================== 
     422                     CASE ( 1 )                               ! WAD 1 configuration 
     423                        !                                     ! ==================== 
     424                        ! 
     425                        IF(lwp) WRITE(numout,*) 
     426                        IF(lwp) WRITE(numout,*) 'zgr_bat : Closed box with EW linear bottom slope' 
     427                        IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     428                        ! 
     429                        zdta = 1.5_wp 
     430                        DO ji = 10, jpidta 
     431                          zi = MIN(FLOAT(ji - 10)/FLOAT(jpidta - 10), 1.0 ) 
     432                          zdta(ji,:) = MAX(rn_bathy*zi, 1.5)  
     433                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     434                        END DO 
     435                        !!DO ji = 1, jpidta  
     436                        !!  zi = 1.0-EXP(-0.045*(ji-25.0)**2) 
     437                        !!  zdta(ji,:) = MAX(rn_bathy*zi, 1.5) 
     438                        !!  IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     439                        !!END DO 
     440                        zdta(1:2,:) = -2._wp 
     441                        zdta(jpidta-1:jpidta,:) = -2._wp 
     442                        zdta(:,1) = -2._wp 
     443                        zdta(:,jpjdta) = -2._wp 
     444                        zdta(:,1:3) = -2._wp 
     445                        zdta(:,jpjdta-2:jpjdta) = -2._wp 
     446                        !                                     ! ==================== 
     447                     CASE ( 2, 3 )                            ! WAD 2 or 3  configuration 
     448                        !                                     ! ==================== 
     449                        ! 
     450                        IF(lwp) WRITE(numout,*) 
     451                        IF(lwp) WRITE(numout,*) 'zgr_bat : Parobolic EW channel' 
     452                        IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     453                        ! 
     454                        DO ji = 1, jpidta 
     455                          zi = MAX(1.0-FLOAT((ji-25)**2)/484.0, 0.0 ) 
     456                          zi = MAX(1.0-FLOAT((ji-25)**2)/484.0, -2.0 ) 
     457                          zdta(ji,:) = MAX(rn_bathy*zi, -20.0) 
     458                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     459                        END DO 
     460                        zdta(1:2,:) = -2._wp 
     461                        zdta(jpidta-1:jpidta,:) = -2._wp 
     462                        zdta(:,1) = -2._wp 
     463                        zdta(:,jpjdta) = -2._wp 
     464                        zdta(:,1:3) = -2._wp 
     465                        zdta(:,jpjdta-2:jpjdta) = -2._wp 
     466                        !                                     ! ==================== 
     467                     CASE ( 4 )                               ! WAD 4 configuration 
     468                        !                                     ! ==================== 
     469                        ! 
     470                        IF(lwp) WRITE(numout,*) 
     471                        IF(lwp) WRITE(numout,*) 'zgr_bat : Parobolic bowl' 
     472                        IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     473                        ! 
     474                        DO ji = 1, jpidta 
     475                          zi = MAX(1.0-FLOAT((ji-25)**2)/484.0, 0.0 ) 
     476                        DO jj = 1, jpjdta 
     477                          zj = MAX(1.0-FLOAT((jj-17)**2)/196.0, 0.0 ) 
     478                          zdta(ji,jj) = MAX(rn_bathy*zi*zj, 0.0) 
     479                        END DO 
     480                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     481                        END DO 
     482                        zdta(1:2,:) = -2._wp 
     483                        zdta(jpidta-1:jpidta,:) = -2._wp 
     484                        zdta(:,1) = -2._wp 
     485                        zdta(:,jpjdta) = -2._wp 
     486                        zdta(:,1:3) = -2._wp 
     487                        zdta(:,jpjdta-2:jpjdta) = -2._wp 
     488                        !                                    ! =========================== 
     489                     CASE ( 5 )                              ! WAD 5 configuration 
     490                        !                                    ! ==================== 
     491                        ! 
     492                        IF(lwp) WRITE(numout,*) 
     493                        IF(lwp) WRITE(numout,*) 'zgr_bat : Double slope with shelf' 
     494                        IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     495                        ! 
     496                        DO ji = 1, jpidta 
     497                          zi = MIN(FLOAT(ji)/FLOAT(jpidta - 5), 1.0 ) 
     498                          zdta(ji,:) = MAX(rn_bathy*zi, 0.5) 
     499                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     500                        END DO 
     501                        DO ji = jpidta,46,-1 
     502                          zdta(ji,:) = 10.0 
     503                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     504                        END DO 
     505                        DO ji = 46,20,-1 
     506                          zi = 7.5/25. 
     507                          zdta(ji,:) = MAX(10. - zi*(47.-ji),2.5) 
     508                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     509                        END DO 
     510                        DO ji = 19,15,-1 
     511                          zdta(ji,:) = 2.5 
     512                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     513                        END DO 
     514                        DO ji = 15,4,-1 
     515                          zi = 2.0/11.0 
     516                          zdta(ji,:) = MAX(2.5 - zi*(16-ji), 0.5) 
     517                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     518                        END DO 
     519                        DO ji = 4,1,-1 
     520                          zdta(ji,:) = 0.5 
     521                          IF(lwp)write(numout,*) 'ZDTA ',ji,zi,zdta(ji,1) 
     522                        END DO 
     523                        !                                    ! =========================== 
     524                     CASE DEFAULT 
     525                        !                                    ! =========================== 
     526                        WRITE(ctmp1,*) 'WAD test with a ', jp_cfg,' option is not coded' 
     527                        ! 
     528                        CALL ctl_stop( ctmp1 ) 
     529                        ! 
     530                  END SELECT 
     531               END IF 
     532               ! 
    418533               IF( ln_sco ) THEN                                   ! s-coordinate (zsc       ): idta()=jpk 
    419534                  idta(:,:) = jpkm1 
     
    21852300      CALL lbc_lnk( e3vw_0, 'V', 1._wp ) 
    21862301      ! 
    2187       IF( .NOT.ln_wd ) THEN 
    2188         WHERE( e3t_0 (:,:,:) == 0._wp )   e3t_0 (:,:,:) = 1._wp 
    2189         WHERE( e3u_0 (:,:,:) == 0._wp )   e3u_0 (:,:,:) = 1._wp 
    2190         WHERE( e3v_0 (:,:,:) == 0._wp )   e3v_0 (:,:,:) = 1._wp 
    2191         WHERE( e3f_0 (:,:,:) == 0._wp )   e3f_0 (:,:,:) = 1._wp 
    2192         WHERE( e3w_0 (:,:,:) == 0._wp )   e3w_0 (:,:,:) = 1._wp 
    2193         WHERE( e3uw_0(:,:,:) == 0._wp )   e3uw_0(:,:,:) = 1._wp 
    2194         WHERE( e3vw_0(:,:,:) == 0._wp )   e3vw_0(:,:,:) = 1._wp 
    2195       END IF 
     2302      WHERE( e3t_0 (:,:,:) == 0._wp )   e3t_0 (:,:,:) = 1._wp 
     2303      WHERE( e3u_0 (:,:,:) == 0._wp )   e3u_0 (:,:,:) = 1._wp 
     2304      WHERE( e3v_0 (:,:,:) == 0._wp )   e3v_0 (:,:,:) = 1._wp 
     2305      WHERE( e3f_0 (:,:,:) == 0._wp )   e3f_0 (:,:,:) = 1._wp 
     2306      WHERE( e3w_0 (:,:,:) == 0._wp )   e3w_0 (:,:,:) = 1._wp 
     2307      WHERE( e3uw_0(:,:,:) == 0._wp )   e3uw_0(:,:,:) = 1._wp 
     2308      WHERE( e3vw_0(:,:,:) == 0._wp )   e3vw_0(:,:,:) = 1._wp 
    21962309 
    21972310#if defined key_agrif 
     
    22952408               DO jk = 1, mbathy(ji,jj) 
    22962409                 ! check coordinate is monotonically increasing 
    2297                  IF (e3w_n(ji,jj,jk) <= 0._wp .OR. e3t_n(ji,jj,jk) <= 0._wp ) THEN 
     2410                 IF (e3w_0(ji,jj,jk) <= 0._wp .OR. e3t_0(ji,jj,jk) <= 0._wp ) THEN 
    22982411                    WRITE(ctmp1,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    22992412                    WRITE(numout,*) 'ERROR zgr_sco :   e3w   or e3t   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2300                     WRITE(numout,*) 'e3w',e3w_n(ji,jj,:) 
    2301                     WRITE(numout,*) 'e3t',e3t_n(ji,jj,:) 
     2413                    WRITE(numout,*) 'e3w',e3w_0(ji,jj,:) 
     2414                    WRITE(numout,*) 'e3t',e3t_0(ji,jj,:) 
    23022415                    CALL ctl_stop( ctmp1 ) 
    23032416                 ENDIF 
    23042417                 ! and check it has never gone negative 
    2305                  IF( gdepw_n(ji,jj,jk) < 0._wp .OR. gdept_n(ji,jj,jk) < 0._wp ) THEN 
     2418                 IF( gdepw_0(ji,jj,jk) < 0._wp .OR. gdept_0(ji,jj,jk) < 0._wp ) THEN 
    23062419                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw or gdept =< 0  at point (i,j,k)= ', ji, jj, jk 
    23072420                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw   or gdept   =< 0  at point (i,j,k)= ', ji, jj, jk 
    2308                     WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
    2309                     WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
     2421                    WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 
     2422                    WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 
    23102423                    CALL ctl_stop( ctmp1 ) 
    23112424                 ENDIF 
    23122425                 ! and check it never exceeds the total depth 
    2313                  IF( gdepw_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2426                 IF( gdepw_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    23142427                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    23152428                    WRITE(numout,*) 'ERROR zgr_sco :   gdepw > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2316                     WRITE(numout,*) 'gdepw',gdepw_n(ji,jj,:) 
     2429                    WRITE(numout,*) 'gdepw',gdepw_0(ji,jj,:) 
    23172430                    CALL ctl_stop( ctmp1 ) 
    23182431                 ENDIF 
     
    23212434               DO jk = 1, mbathy(ji,jj)-1 
    23222435                 ! and check it never exceeds the total depth 
    2323                 IF( gdept_n(ji,jj,jk) > hbatt(ji,jj) ) THEN 
     2436                IF( gdept_0(ji,jj,jk) > hbatt(ji,jj) ) THEN 
    23242437                    WRITE(ctmp1,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    23252438                    WRITE(numout,*) 'ERROR zgr_sco :   gdept > hbatt  at point (i,j,k)= ', ji, jj, jk 
    2326                     WRITE(numout,*) 'gdept',gdept_n(ji,jj,:) 
     2439                    WRITE(numout,*) 'gdept',gdept_0(ji,jj,:) 
    23272440                    CALL ctl_stop( ctmp1 ) 
    23282441                 ENDIF 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DOM/istate.F90

    r6140 r6986  
    3636   USE domvvl          ! varying vertical mesh 
    3737   USE iscplrst        ! ice sheet coupling 
     38   USE wet_dry         ! wetting and drying (needed for wad_istate) 
    3839   ! 
    3940   USE in_out_manager  ! I/O manager 
     
    105106         ELSEIF( cp_cfg == 'gyre' ) THEN          
    106107            CALL istate_gyre                     ! GYRE  configuration : start from pre-defined T-S fields 
     108         ELSEIF( cp_cfg == 'wad' ) THEN          
     109            CALL wad_istate                      ! WAD test configuration : start from pre-defined T-S fields and initial ssh slope 
    107110         ELSE                                    ! Initial T-S, U-V fields read in files 
    108111            IF ( ln_tsd_init ) THEN              ! read 3D T and S data at nit000 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90

    r6140 r6986  
    205205      ENDIF 
    206206      !                          ! Control of surface pressure gradient scheme options 
    207       ;                              nspg =  np_NO    ;   ioptio = 0 
     207                                     nspg =  np_NO    ;   ioptio = 0 
    208208      IF( ln_dynspg_exp ) THEN   ;   nspg =  np_EXP   ;   ioptio = ioptio + 1   ;   ENDIF 
    209209      IF( ln_dynspg_ts  ) THEN   ;   nspg =  np_TS    ;   ioptio = ioptio + 1   ;   ENDIF 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r6678 r6986  
    705705 
    706706         IF(ln_wd) THEN 
    707            ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) ) * wdmask(:,:)  
    708            &                + (1._wd - wdmask(:,:)) * (sshai(:,:) - sshn_e(:,:))) * ssmask(:,:) 
     707           ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) ) * wdmask(:,:)    & 
     708           &             + ( 1._wp - wdmask(:,:) ) * ( sshai(:,:) - sshn_e(:,:) ) ) * ssmask(:,:) 
    709709         ELSE 
    710710           ssha_e(:,:) = (  sshn_e(:,:) - rdtbt * ( zssh_frc(:,:) + zhdiv(:,:) )  ) * ssmask(:,:) 
     
    10081008         !                                   ! Sum sea level 
    10091009         ssha(:,:) = ssha(:,:) + za1 * ssha_e(:,:) 
    1010          IF(ln_wd) ssha(:,:) = ssha(:,:) * (1 - wdmask(:,:)) + sshai(:,:) * wdmask(:,:) 
     1010         IF(ln_wd) ssha(:,:) = ssha(:,:) * wdmask(:,:) + (1._wp - wdmask(:,:)) * sshai(:,:) 
    10111011         !                                                 ! ==================== ! 
    10121012      END DO                                               !        end loop      ! 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r6604 r6986  
    8888      ENDIF 
    8989      ! 
    90  
     90      z2dt = 2._wp * rdt                          ! set time step size (Euler/Leapfrog) 
     91      IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
     92      zcoef = 0.5_wp * r1_rau0 
     93 
     94      !                                           !------------------------------! 
     95      !                                           !   After Sea Surface Height   ! 
     96      !                                           !------------------------------! 
    9197      IF(ln_wd) THEN 
    92         zcoef = 0.5_wp * r1_rau0 
    93         CALL wad_lmt(sshb, zcoef * (emp_b(:,:) + emp(:,:)), z2dt) 
    94       END IF 
    95  
    96       CALL div_hor( kt )                              ! Horizontal divergence 
    97       ! 
    98       z2dt = 2._wp * rdt                              ! set time step size (Euler/Leapfrog) 
    99       IF( neuler == 0 .AND. kt == nit000 )   z2dt = rdt 
    100  
    101       !                                           !------------------------------! 
    102       !                                           !   After Sea Surface Height   ! 
    103       !                                           !------------------------------! 
     98         CALL wad_lmt(sshb, zcoef * (emp_b(:,:) + emp(:,:)), z2dt) 
     99      ENDIF 
     100 
     101      CALL div_hor( kt )                               ! Horizontal divergence 
     102      ! 
    104103      zhdiv(:,:) = 0._wp 
    105104      DO jk = 1, jpkm1                                 ! Horizontal divergence of barotropic transports 
  • branches/2016/dev_r6393_NOC_WAD/NEMOGCM/NEMO/OPA_SRC/DYN/wet_dry.F90

    r6678 r6986  
    4646   PUBLIC   wad_lmt                   ! routine called by sshwzv.F90 
    4747   PUBLIC   wad_lmt_bt                ! routine called by dynspg_ts.F90 
     48   PUBLIC   wad_istate                ! routine called by istate.F90 and domvvl.F90 
    4849 
    4950   !! * Substitutions 
     
    132133        
    133134        zflag  = 0 
    134         zdepwd = 150._wp   !maximum depth on which that W/D could possibly happen 
     135        zdepwd = 50._wp   !maximum depth on which that W/D could possibly happen 
    135136 
    136137        
     
    156157        zflxv(:,:) = zflxv(:,:) * e1v(:,:) 
    157158        
     159        wdmask(:,:) = 1 
    158160        DO jj = 2, jpjm1 
    159161           DO ji = 2, jpim1  
     
    168170 
    169171              zdep2 = bathy(ji,jj) + sshb1(ji,jj) - rn_wdmin1 
    170               IF(zdep2 < 0._wp) THEN  !add more safty, but not necessary 
     172              IF(zdep2 .le. 0._wp) THEN  !add more safty, but not necessary 
    171173                !zdep2 = 0._wp 
    172174                sshb1(ji,jj) = rn_wdmin1 - bathy(ji,jj) 
     175                wdmask(ji,jj) = 0._wp 
    173176              END IF 
    174177           ENDDO 
     
    186189              DO ji = 2, jpim1  
    187190         
    188                  wdmask(ji,jj) = 0 
    189191                 IF(tmask(ji, jj, 1) < 0.5_wp) CYCLE  
    190192                 IF(bathy(ji,jj) > zdepwd) CYCLE 
     
    201203           
    202204                 IF(zdep1 > zdep2) THEN 
    203                    IF(jk1 .eq. 1) wdmask(ji,jj) = 1 
    204205                   zflag = 1 
     206                   wdmask(ji, jj) = 0 
    205207                   zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
    206208                   zcoef = max(zcoef, 0._wp) 
     
    231233        CALL lbc_lnk( un, 'U', -1. ) 
    232234        CALL lbc_lnk( vn, 'V', -1. ) 
     235      ! 
     236        un_b(:,:) = un_b(:,:) * zwdlmtu(:, :) 
     237        vn_b(:,:) = vn_b(:,:) * zwdlmtv(:, :) 
     238        CALL lbc_lnk( un_b, 'U', -1. ) 
     239        CALL lbc_lnk( vn_b, 'V', -1. ) 
    233240        
    234241        IF(zflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt!!!' 
     
    390397      IF( nn_timing == 1 )  CALL timing_stop('wad_lmt') 
    391398   END SUBROUTINE wad_lmt_bt 
     399 
     400   SUBROUTINE wad_istate 
     401      !!---------------------------------------------------------------------- 
     402      !!                   ***  ROUTINE wad_istate  *** 
     403      !!  
     404      !! ** Purpose :   Initialization of the dynamics and tracers for WAD test 
     405      !!      configurations (channels or bowls with initial ssh gradients) 
     406      !! 
     407      !! ** Method  : - set temperature field 
     408      !!              - set salinity field 
     409      !!              - set ssh slope (needs to be repeated in domvvl_rst_init to 
     410      !!                               set vertical metrics ) 
     411      !!---------------------------------------------------------------------- 
     412      ! 
     413      INTEGER  ::   ji, jj            ! dummy loop indices 
     414      !!---------------------------------------------------------------------- 
     415      ! 
     416      ! Uniform T & S in all test cases 
     417      tsn(:,:,:,jp_tem) = 10._wp 
     418      tsb(:,:,:,jp_tem) = 10._wp 
     419      tsn(:,:,:,jp_sal) = 35._wp 
     420      tsb(:,:,:,jp_sal) = 35._wp 
     421      SELECT CASE ( jp_cfg )  
     422         !                                        ! ==================== 
     423         CASE ( 1 )                               ! WAD 1 configuration 
     424            !                                     ! ==================== 
     425            ! 
     426            IF(lwp) WRITE(numout,*) 
     427            IF(lwp) WRITE(numout,*) 'istate_wad : Closed box with EW linear bottom slope' 
     428            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     429            ! 
     430            do ji = 1,jpi 
     431             sshn(ji,:) = ( -5.5_wp + 5.5_wp*FLOAT(mig(ji))/FLOAT(jpidta-1))*tmask(ji,:,1) 
     432            end do 
     433            !                                     ! ==================== 
     434         CASE ( 2 )                               ! WAD 2 configuration 
     435            !                                     ! ==================== 
     436            ! 
     437            IF(lwp) WRITE(numout,*) 
     438            IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel, mid-range initial ssh slope' 
     439            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     440            ! 
     441            do ji = 1,jpi 
     442             sshn(ji,:) = ( -5.5_wp + 3.9_wp*FLOAT(jpidta - mig(ji))/FLOAT(jpidta-1))*tmask(ji,:,1) 
     443            end do 
     444            !                                     ! ==================== 
     445         CASE ( 3 )                               ! WAD 3 configuration 
     446            !                                     ! ==================== 
     447            ! 
     448            IF(lwp) WRITE(numout,*) 
     449            IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel, extreme initial ssh slope'  
     450            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     451            ! 
     452            do ji = 1,jpi 
     453             sshn(ji,:) = ( -7.5_wp + 6.9_wp*FLOAT(jpidta - mig(ji))/FLOAT(jpidta-1))*tmask(ji,:,1) 
     454            end do 
     455 
     456            ! 
     457            !                                     ! ==================== 
     458         CASE ( 4 )                               ! WAD 4 configuration 
     459            !                                     ! ==================== 
     460            ! 
     461            IF(lwp) WRITE(numout,*) 
     462            IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic bowl, mid-range initial ssh slope'  
     463            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
     464            ! 
     465            do ji = 1,jpi 
     466             sshn(ji,:) = ( -5.5_wp + 3.9_wp*FLOAT(jpidta - mig(ji))/FLOAT(jpidta-1))*tmask(ji,:,1) 
     467             ! very small displacement test: 
     468             !sshn(ji,:) = ( -0.05_wp + 0.05_wp*FLOAT(jpidta - mig(ji))/FLOAT(jpidta-1))*tmask(ji,:,1) 
     469            end do 
     470 
     471            ! 
     472            !                                    ! =========================== 
     473         CASE DEFAULT                            ! NONE existing configuration 
     474            !                                    ! =========================== 
     475            WRITE(ctmp1,*) 'WAD test with a ', jp_cfg,' option is not coded' 
     476            ! 
     477            CALL ctl_stop( ctmp1 ) 
     478            ! 
     479      END SELECT 
     480      ! 
     481      ! Apply minimum wetdepth criterion 
     482      ! 
     483      do jj = 1,jpj 
     484         do ji = 1,jpi 
     485            IF( bathy(ji,jj) + sshn(ji,jj) < 0.4_wp) THEN 
     486               sshn(ji,jj) = tmask(ji,jj,1)*(0.4_wp - bathy(ji,jj)) 
     487            ENDIF 
     488         end do 
     489      end do 
     490      sshb = sshn 
     491      ssha = sshn 
     492      ! 
     493   END SUBROUTINE wad_istate 
     494 
     495   !!===================================================================== 
    392496END MODULE wet_dry 
Note: See TracChangeset for help on using the changeset viewer.