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 7580 – NEMO

Changeset 7580


Ignore:
Timestamp:
2017-01-19T13:06:16+01:00 (7 years ago)
Author:
acc
Message:

Branch 2016/dev_merge_2016. Tidy wet_dry.F90 and remove redundant wad_istate routine (now done in WAD_TEST_CASES/MY_SRC/usrdef_istate.F90)

Location:
branches/2016/dev_merge_2016/NEMOGCM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/WAD_TEST_CASES/MY_SRC/usrdef_istate.F90

    r7527 r7580  
    8383            ! 
    8484            IF(lwp) WRITE(numout,*) 
    85             IF(lwp) WRITE(numout,*) 'istate_wad : Closed box with EW linear bottom slope' 
     85            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Closed box with EW linear bottom slope' 
    8686            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    8787            ! 
     
    9494            ! 
    9595            IF(lwp) WRITE(numout,*) 
    96             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel, mid-range initial ssh slope' 
     96            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic EW channel, mid-range initial ssh slope' 
    9797            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    9898            ! 
     
    105105            ! 
    106106            IF(lwp) WRITE(numout,*) 
    107             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel, extreme initial ssh slope'  
     107            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic EW channel, extreme initial ssh slope'  
    108108            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    109109            ! 
     
    118118            ! 
    119119            IF(lwp) WRITE(numout,*) 
    120             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic bowl, mid-range initial ssh slope'  
     120            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic bowl, mid-range initial ssh slope'  
    121121            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    122122            ! 
     
    135135            ! 
    136136            IF(lwp) WRITE(numout,*) 
    137             IF(lwp) WRITE(numout,*) 'istate_wad : Double slope with shelf' 
     137            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Double slope with shelf' 
    138138            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    139139            ! 
     
    148148            ! 
    149149            IF(lwp) WRITE(numout,*) 
    150             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel with gaussian ridge'  
     150            IF(lwp) WRITE(numout,*) 'usr_def_istate : WAD Parobolic EW channel with gaussian ridge'  
    151151            IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    152152            ! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/DYN/wet_dry.F90

    r7514 r7580  
    4545   PUBLIC   wad_lmt                   ! routine called by sshwzv.F90 
    4646   PUBLIC   wad_lmt_bt                ! routine called by dynspg_ts.F90 
    47    PUBLIC   wad_istate                ! routine called by istate.F90 and domvvl.F90 
    4847 
    4948   !! * Substitutions 
     
    109108      ! 
    110109      INTEGER  ::   ji, jj, jk, jk1     ! dummy loop indices 
    111       INTEGER  ::   zflag               ! local scalar 
     110      INTEGER  ::   jflag               ! local scalar 
    112111      REAL(wp) ::   zcoef, zdep1, zdep2 ! local scalars 
    113112      REAL(wp) ::   zzflxp, zzflxn      ! local scalars 
     
    132131        !IF(lwp) WRITE(numout,*) 'wad_lmt : wetting/drying limiters and velocity limiting' 
    133132        
    134         zflag  = 0 
     133        jflag  = 0 
    135134        zdepwd = 50._wp   !maximum depth on which that W/D could possibly happen 
    136135 
     
    185184           zflxu1(:,:) = zflxu(:,:) * zwdlmtu(:,:) 
    186185           zflxv1(:,:) = zflxv(:,:) * zwdlmtv(:,:) 
     186           jflag = 0     ! flag indicating if any further iterations are needed 
    187187           
    188188           DO jj = 2, jpj 
     
    203203           
    204204                 IF(zdep1 > zdep2) THEN 
    205                    zflag = 1 
     205                   jflag = 1 
    206206                   wdmask(ji, jj) = 0 
    207                    !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
    208                    zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
     207                   zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
     208                   !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
    209209                   zcoef = max(zcoef, 0._wp) 
    210210                   IF(jk1 > nn_wdit) zcoef = 0._wp 
     
    220220           CALL lbc_lnk( zwdlmtv, 'V', 1. ) 
    221221 
    222            IF(lk_mpp) CALL mpp_max(zflag)   !max over the global domain 
    223  
    224            IF(zflag == 0) EXIT 
    225            
    226            zflag = 0     ! flag indicating if any further iteration is needed? 
     222           IF(lk_mpp) CALL mpp_max(jflag)   !max over the global domain 
     223 
     224           IF(jflag == 0) EXIT 
     225           
    227226        END DO  ! jk1 loop 
    228227        
     
    240239        CALL lbc_lnk( vn_b, 'V', -1. ) 
    241240        
    242         IF(zflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt!!!' 
     241        IF(jflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt!!!' 
    243242        
    244243        !IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )          ! runoffs (update hdivn field) 
     
    270269      ! 
    271270      INTEGER  ::   ji, jj, jk, jk1     ! dummy loop indices 
    272       INTEGER  ::   zflag         ! local scalar 
     271      INTEGER  ::   jflag               ! local scalar 
    273272      REAL(wp) ::   z2dt 
    274273      REAL(wp) ::   zcoef, zdep1, zdep2 ! local scalars 
     
    292291        !IF(lwp) WRITE(numout,*) 'wad_lmt_bt : wetting/drying limiters and velocity limiting' 
    293292        
    294         zflag  = 0 
     293        jflag  = 0 
    295294        zdepwd = 50._wp   !maximum depth that ocean cells can have W/D processes 
    296295 
     
    299298        zflxp(:,:)   = 0._wp 
    300299        zflxn(:,:)   = 0._wp 
    301         !zflxu(:,:)   = 0._wp 
    302         !zflxv(:,:)   = 0._wp 
    303300 
    304301        zwdlmtu(:,:)  = 1._wp 
     
    319316 
    320317              zdep2 = ht_wd(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 
     318              IF(zdep2 .le. 0._wp) THEN  !add more safty, but not necessary 
     319                sshn_e(ji,jj) = rn_wdmin1 - ht_wd(ji,jj) 
     320              END IF 
    321321           ENDDO 
    322322        END DO 
     
    329329           zflxu1(:,:) = zflxu(:,:) * zwdlmtu(:,:) 
    330330           zflxv1(:,:) = zflxv(:,:) * zwdlmtv(:,:) 
     331           jflag = 0     ! flag indicating if any further iterations are needed 
    331332           
    332333           DO jj = 2, jpj 
     
    344345           
    345346                 zdep1 = (zzflxp + zzflxn) * z2dt / ztmp 
    346                  zdep2 = ht_wd(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 
    347                  zdep2 = zdep2 - z2dt * zssh_frc(ji,jj) 
     347                 zdep2 = ht_wd(ji,jj) + sshn_e(ji,jj) - rn_wdmin1 - z2dt * zssh_frc(ji,jj) 
    348348           
    349349                 IF(zdep1 > zdep2) THEN 
    350                    zflag = 1 
    351                    !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
    352                    zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
     350                   jflag = 1 
     351                   zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zflxp(ji,jj) * z2dt ) 
     352                   !zcoef = ( ( zdep2 - rn_wdmin2 ) * ztmp - zzflxn * z2dt ) / ( zzflxp * z2dt ) 
    353353                   zcoef = max(zcoef, 0._wp) 
    354354                   IF(jk1 > nn_wdit) zcoef = 0._wp 
     
    364364           CALL lbc_lnk( zwdlmtv, 'V', 1. ) 
    365365 
    366            IF(lk_mpp) CALL mpp_max(zflag)   !max over the global domain 
    367  
    368            IF(zflag == 0) EXIT 
    369            
    370            zflag = 0     ! flag indicating if any further iteration is needed? 
     366           IF(lk_mpp) CALL mpp_max(jflag)   !max over the global domain 
     367 
     368           IF(jflag == 0) EXIT 
     369           
    371370        END DO  ! jk1 loop 
    372371        
     
    377376        CALL lbc_lnk( zflxv, 'V', -1. ) 
    378377        
    379         IF(zflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt_bt!!!' 
     378        IF(jflag == 1 .AND. lwp) WRITE(numout,*) 'Need more iterations in wad_lmt_bt!!!' 
    380379        
    381380        !IF( ln_rnf      )   CALL sbc_rnf_div( hdivn )          ! runoffs (update hdivn field) 
     
    391390   END SUBROUTINE wad_lmt_bt 
    392391 
    393    SUBROUTINE wad_istate 
    394       !!---------------------------------------------------------------------- 
    395       !!                   ***  ROUTINE wad_istate  *** 
    396       !!  
    397       !! ** Purpose :   Initialization of the dynamics and tracers for WAD test 
    398       !!      configurations (channels or bowls with initial ssh gradients) 
    399       !! 
    400       !! ** Method  : - set temperature field 
    401       !!              - set salinity field 
    402       !!              - set ssh slope (needs to be repeated in domvvl_rst_init to 
    403       !!                               set vertical metrics ) 
    404       !!---------------------------------------------------------------------- 
    405       ! 
    406       INTEGER  ::   ji, jj            ! dummy loop indices 
    407       REAL(wp) ::   zi, zj 
    408       !!---------------------------------------------------------------------- 
    409       ! 
    410       ! Uniform T & S in all test cases 
    411       tsn(:,:,:,jp_tem) = 10._wp 
    412       tsb(:,:,:,jp_tem) = 10._wp 
    413       tsn(:,:,:,jp_sal) = 35._wp 
    414       tsb(:,:,:,jp_sal) = 35._wp 
    415       SELECT CASE ( nn_cfg )  
    416          !                                        ! ==================== 
    417          CASE ( 1 )                               ! WAD 1 configuration 
    418             !                                     ! ==================== 
    419             ! 
    420             IF(lwp) WRITE(numout,*) 
    421             IF(lwp) WRITE(numout,*) 'istate_wad : Closed box with EW linear bottom slope' 
    422             IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    423             ! 
    424             do ji = 1,jpi 
    425              sshn(ji,:) = ( -5.5_wp + 5.5_wp*FLOAT(mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    426             end do 
    427             !                                     ! ==================== 
    428          CASE ( 2 )                               ! WAD 2 configuration 
    429             !                                     ! ==================== 
    430             ! 
    431             IF(lwp) WRITE(numout,*) 
    432             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel, mid-range initial ssh slope' 
    433             IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    434             ! 
    435             do ji = 1,jpi 
    436              sshn(ji,:) = ( -5.5_wp + 3.9_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    437             end do 
    438             !                                     ! ==================== 
    439          CASE ( 3 )                               ! WAD 3 configuration 
    440             !                                     ! ==================== 
    441             ! 
    442             IF(lwp) WRITE(numout,*) 
    443             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel, extreme initial ssh slope'  
    444             IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    445             ! 
    446             do ji = 1,jpi 
    447              sshn(ji,:) = ( -7.5_wp + 6.9_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    448             end do 
    449  
    450             ! 
    451             !                                     ! ==================== 
    452          CASE ( 4 )                               ! WAD 4 configuration 
    453             !                                     ! ==================== 
    454             ! 
    455             IF(lwp) WRITE(numout,*) 
    456             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic bowl, mid-range initial ssh slope'  
    457             IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    458             ! 
    459             DO ji = 1, jpi 
    460                zi = MAX(1.0-FLOAT((mig(ji)-25)**2)/400.0, 0.0 ) 
    461                DO jj = 1, jpj 
    462                   zj = MAX(1.0-FLOAT((mjg(jj)-17)**2)/144.0, 0.0 ) 
    463                   sshn(ji,jj) = -8.5_wp + 8.5_wp*zi*zj 
    464                END DO 
    465             END DO 
    466  
    467             ! 
    468             !                                    ! =========================== 
    469          CASE ( 5 )                              ! WAD 5 configuration 
    470             !                                    ! ==================== 
    471             ! 
    472             IF(lwp) WRITE(numout,*) 
    473             IF(lwp) WRITE(numout,*) 'istate_wad : Double slope with shelf' 
    474             IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    475             ! 
    476             ! Needed rn_wdmin2 increased to 0.01 for this case? 
    477             do ji = 1,jpi 
    478              sshn(ji,:) = ( -5.5_wp + 9.0_wp*FLOAT(mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    479             end do 
    480  
    481             ! 
    482             !                                     ! =========================== 
    483          CASE ( 6 )                               ! WAD 6 configuration 
    484             !                                     ! ==================== 
    485             ! 
    486             IF(lwp) WRITE(numout,*) 
    487             IF(lwp) WRITE(numout,*) 'istate_wad : Parobolic EW channel with gaussian ridge'  
    488             IF(lwp) WRITE(numout,*) '~~~~~~~~~~' 
    489             ! 
    490             do ji = 1,jpi 
    491              !6a 
    492              !sshn(ji,:) = ( -5.5_wp + 9.0_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    493              !Some variations in initial slope that have been tested 
    494              !6b 
    495              !sshn(ji,:) = ( -5.5_wp + 6.5_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    496              !6c 
    497              !sshn(ji,:) = ( -5.5_wp + 7.5_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    498              !6d 
    499              !sshn(ji,:) = ( -4.5_wp + 8.0_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    500              !6e 
    501              sshn(ji,:) = ( -3.5_wp + 7.0_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    502              !6f 
    503              !sshn(ji,:) = ( 0.5_wp + 3.75_wp*FLOAT(jpiglo - mig(ji))/FLOAT(jpiglo-1))*tmask(ji,:,1) 
    504             end do 
    505             ! 
    506             do ji = mi0(jpiglo/2), mi0(jpiglo) 
    507              tsn(ji,:,:,jp_sal) = 30._wp 
    508              tsb(ji,:,:,jp_sal) = 30._wp 
    509             end do 
    510             ! 
    511             !                                    ! =========================== 
    512          CASE DEFAULT                            ! NONE existing configuration 
    513             !                                    ! =========================== 
    514             WRITE(ctmp1,*) 'WAD test with a ', nn_cfg,' option is not coded' 
    515             ! 
    516             CALL ctl_stop( ctmp1 ) 
    517             ! 
    518       END SELECT 
    519       ! 
    520       ! Apply minimum wetdepth criterion 
    521       ! 
    522       do jj = 1,jpj 
    523          do ji = 1,jpi 
    524             IF( ht_wd(ji,jj) + sshn(ji,jj) < rn_wdmin1 ) THEN 
    525                sshn(ji,jj) = tmask(ji,jj,1)*( rn_wdmin1 - ht_wd(ji,jj) ) 
    526             ENDIF 
    527          end do 
    528       end do 
    529       sshb = sshn 
    530       ssha = sshn 
    531       ! 
    532    END SUBROUTINE wad_istate 
    533  
    534392   !!============================================================================== 
    535393END MODULE wet_dry 
Note: See TracChangeset for help on using the changeset viewer.