Changeset 6717 for branches/2016/dev_r6409_SIMPLIF_2_usrdef/NEMOGCM/NEMO/OPA_SRC/USR/usrdef_closea.F90
- Timestamp:
- 2016-06-17T12:00:46+02:00 (8 years ago)
- Location:
- branches/2016/dev_r6409_SIMPLIF_2_usrdef/NEMOGCM/NEMO/OPA_SRC/USR
- Files:
-
- 1 added
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_r6409_SIMPLIF_2_usrdef/NEMOGCM/NEMO/OPA_SRC/USR/usrdef_closea.F90
r6594 r6717 1 MODULE closea1 MODULE usrdef_closea 2 2 !!====================================================================== 3 !! *** MODULEclosea ***4 !! Closed Seas: specific treatments associated with closed seas3 !! *** MODULE usrdef_closea *** 4 !! User define : specific treatments associated with closed seas 5 5 !!====================================================================== 6 !! History : 8.2 ! 00-05 (O. Marti) Original code 7 !! 8.5 ! 02-06 (E. Durand, G. Madec) F90 8 !! 9.0 ! 06-07 (G. Madec) add clo_rnf, clo_ups, clo_bat 9 !! NEMO 3.4 ! 03-12 (P.G. Fogli) sbc_clo bug fix & mpp reproducibility 6 !! History : 8.2 ! 2000-05 (O. Marti) Original code 7 !! NEMO 1.0 ! 2002-06 (E. Durand, G. Madec) F90 8 !! 3.0 ! 2006-07 (G. Madec) add clo_rnf, clo_ups, clo_bat 9 !! 3.4 ! 2014-12 (P.G. Fogli) sbc_clo bug fix & mpp reproducibility 10 !! 4.0 ! 2016-06 (G. Madec) move to usrdef_closea, remove clo_ups 10 11 !!---------------------------------------------------------------------- 11 12 … … 14 15 !! sbc_clo : Special handling of closed seas 15 16 !! clo_rnf : set close sea outflows as river mouths (see sbcrnf) 16 !! clo_ups : set mixed centered/upstream scheme in closed sea (see traadv_cen2)17 17 !! clo_bat : set to zero a field over closed sea (see domzrg) 18 18 !!---------------------------------------------------------------------- … … 20 20 USE dom_oce ! ocean space and time domain 21 21 USE phycst ! physical constants 22 USE sbc_oce ! ocean surface boundary conditions 23 ! 22 24 USE in_out_manager ! I/O manager 23 USE sbc_oce ! ocean surface boundary conditions24 25 USE lib_fortran, ONLY: glob_sum, DDPDD 25 26 USE lbclnk ! lateral boundary condition - MPP exchanges … … 33 34 PUBLIC sbc_clo ! routine called by step module 34 35 PUBLIC clo_rnf ! routine called by sbcrnf module 35 PUBLIC clo_ups ! routine called in traadv_cen2(_jki) module36 36 PUBLIC clo_bat ! routine called in domzgr module 37 37 … … 48 48 # include "vectopt_loop_substitute.h90" 49 49 !!---------------------------------------------------------------------- 50 !! NEMO/OPA 3.3 , NEMO Consortium (2010)50 !! NEMO/OPA 4.0 , NEMO Consortium (2016) 51 51 !! $Id$ 52 52 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 54 54 CONTAINS 55 55 56 SUBROUTINE dom_clo 56 SUBROUTINE dom_clo( cd_cfg, kcfg ) 57 57 !!--------------------------------------------------------------------- 58 58 !! *** ROUTINE dom_clo *** … … 71 71 !! =2 put at location runoff 72 72 !!---------------------------------------------------------------------- 73 CHARACTER(len=1) , INTENT(in ) :: cd_cfg ! configuration name 74 INTEGER , INTENT(in ) :: kcfg ! configuration identifier 75 ! 73 76 INTEGER :: jc ! dummy loop indices 74 77 INTEGER :: isrow ! local index … … 86 89 ! ------------------- 87 90 ! 88 IF( c p_cfg == "orca" ) THEN89 ! 90 SELECT CASE ( jp_cfg )91 IF( cd_cfg == "orca" ) THEN !== ORCA configuration ==! 92 ! 93 SELECT CASE ( kcfg ) 91 94 ! ! ======================= 92 CASE ( 1 ) ! ORCA_R1 configuration95 CASE ( 1 ) ! ORCA_R1 configuration 93 96 ! ! ======================= 97 IF(lwp) WRITE(numout,*)' ORCA_R1 closed seas : only the Caspian Sea' 94 98 ! This dirty section will be suppressed by simplification process: 95 99 ! all this will come back in input files … … 98 102 isrow = 332 - jpjglo 99 103 ! 100 ncsnr(1) = 1 ; ncstt(1) = 0 ! Caspian Sea 104 ncsnr(1) = 1 ; ncstt(1) = 0 ! Caspian Sea (spread over the globe) 101 105 ncsi1(1) = 332 ; ncsj1(1) = 243 - isrow 102 106 ncsi2(1) = 344 ; ncsj2(1) = 275 - isrow … … 106 110 CASE ( 2 ) ! ORCA_R2 configuration 107 111 ! ! ======================= 112 IF(lwp) WRITE(numout,*)' ORCA_R2 closed seas and lakes : ' 108 113 ! ! Caspian Sea 114 IF(lwp) WRITE(numout,*)' Caspian Sea ' 109 115 ncsnr(1) = 1 ; ncstt(1) = 0 ! spread over the globe 110 116 ncsi1(1) = 11 ; ncsj1(1) = 103 … … 112 118 ncsir(1,1) = 1 ; ncsjr(1,1) = 1 113 119 ! ! Great North American Lakes 120 IF(lwp) WRITE(numout,*)' Great North American Lakes ' 114 121 ncsnr(2) = 1 ; ncstt(2) = 2 ! put at St Laurent mouth 115 122 ncsi1(2) = 97 ; ncsj1(2) = 107 … … 117 124 ncsir(2,1) = 110 ; ncsjr(2,1) = 111 118 125 ! ! Black Sea (crossed by the cyclic boundary condition) 126 IF(lwp) WRITE(numout,*)' Black Sea ' 119 127 ncsnr(3:4) = 4 ; ncstt(3:4) = 2 ! put in Med Sea (north of Aegean Sea) 120 128 ncsir(3:4,1) = 171; ncsjr(3:4,1) = 106 ! … … 126 134 ncsi1(4) = 2 ; ncsj1(4) = 107 ! 2 : east part of the Black Sea 127 135 ncsi2(4) = 6 ; ncsj2(4) = 112 ! (ie east of the cyclic b.c.) 128 129 130 131 ! ! ======================= 132 CASE ( 4 ) ! ORCA_R4 configuration 133 ! ! ======================= 136 ! 137 ! ! ========================= 138 CASE ( 025 ) ! ORCA_R025 configuration 139 ! ! ========================= 140 IF(lwp) WRITE(numout,*)' ORCA_R025 closed seas : ' 134 141 ! ! Caspian Sea 135 ncsnr(1) = 1 ; ncstt(1) = 0 136 ncsi1(1) = 4 ; ncsj1(1) = 53 137 ncsi2(1) = 4 ; ncsj2(1) = 56 138 ncsir(1,1) = 1 ; ncsjr(1,1) = 1 139 ! ! Great North American Lakes 140 ncsnr(2) = 1 ; ncstt(2) = 2 141 ncsi1(2) = 49 ; ncsj1(2) = 55 142 ncsi2(2) = 51 ; ncsj2(2) = 56 143 ncsir(2,1) = 57 ; ncsjr(2,1) = 55 144 ! ! Black Sea 145 ncsnr(3) = 4 ; ncstt(3) = 2 146 ncsi1(3) = 88 ; ncsj1(3) = 55 147 ncsi2(3) = 91 ; ncsj2(3) = 56 148 ncsir(3,1) = 86 ; ncsjr(3,1) = 53 149 ncsir(3,2) = 87 ; ncsjr(3,2) = 53 150 ncsir(3,3) = 86 ; ncsjr(3,3) = 52 151 ncsir(3,4) = 87 ; ncsjr(3,4) = 52 152 ! ! Baltic Sea 153 ncsnr(4) = 1 ; ncstt(4) = 2 154 ncsi1(4) = 75 ; ncsj1(4) = 59 155 ncsi2(4) = 76 ; ncsj2(4) = 61 156 ncsir(4,1) = 84 ; ncsjr(4,1) = 59 157 ! ! ======================= 158 CASE ( 025 ) ! ORCA_R025 configuration 159 ! ! ======================= 142 IF(lwp) WRITE(numout,*)' Caspian Sea ' 160 143 ncsnr(1) = 1 ; ncstt(1) = 0 ! Caspian + Aral sea 161 144 ncsi1(1) = 1330 ; ncsj1(1) = 645 … … 163 146 ncsir(1,1) = 1 ; ncsjr(1,1) = 1 164 147 ! 148 IF(lwp) WRITE(numout,*)' Azov Sea ' 165 149 ncsnr(2) = 1 ; ncstt(2) = 0 ! Azov Sea 166 150 ncsi1(2) = 1284 ; ncsj1(2) = 722 … … 169 153 ! 170 154 END SELECT 155 ! 156 ELSE !== No closed sea in the configuration ==! 157 ! 158 IF(lwp) WRITE(numout,*)' No closed seas or lakes in the configuration ' 171 159 ! 172 160 ENDIF … … 177 165 ncsi1(jc) = mi0( ncsi1(jc) ) 178 166 ncsj1(jc) = mj0( ncsj1(jc) ) 179 167 ! 180 168 ncsi2(jc) = mi1( ncsi2(jc) ) 181 169 ncsj2(jc) = mj1( ncsj2(jc) ) … … 215 203 IF(lwp) WRITE(numout,*)'~~~~~~~' 216 204 217 surf(:) = 0. e0_wp205 surf(:) = 0._wp 218 206 ! 219 207 surf(jpncs+1) = glob_sum( e1e2t(:,:) ) ! surface of the global ocean … … 398 386 ! 399 387 END SUBROUTINE clo_rnf 400 401 402 SUBROUTINE clo_ups( p_upsmsk )403 !!---------------------------------------------------------------------404 !! *** ROUTINE sbc_rnf ***405 !!406 !! ** Purpose : allow the treatment of closed sea outflow grid-points407 !! to be the same as river mouth grid-points408 !!409 !! ** Method : set to 0.5 the upstream mask (upsmsk, see traadv_cen2410 !! module) over the closed seas.411 !!412 !! ** Action : update (p_)upsmsk (set 0.5 over closed seas)413 !!----------------------------------------------------------------------414 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: p_upsmsk ! upstream mask (upsmsk array)415 !416 INTEGER :: jc, ji, jj ! dummy loop indices417 !!----------------------------------------------------------------------418 !419 DO jc = 1, jpncs420 DO jj = ncsj1(jc), ncsj2(jc)421 DO ji = ncsi1(jc), ncsi2(jc)422 p_upsmsk(ji,jj) = 0.5_wp ! mixed upstream/centered scheme over closed seas423 END DO424 END DO425 END DO426 !427 END SUBROUTINE clo_ups428 388 429 389 430 SUBROUTINE clo_bat( pbat, kbat )390 SUBROUTINE clo_bat( k_top, k_bot ) 431 391 !!--------------------------------------------------------------------- 432 392 !! *** ROUTINE clo_bat *** … … 434 394 !! ** Purpose : suppress closed sea from the domain 435 395 !! 436 !! ** Method : set to 0 the meter and level bathymetry (given in 437 !! arguments) over the closed seas. 396 !! ** Method : set first and last ocean level to 0 over the closed seas. 438 397 !! 439 398 !! ** Action : set pbat=0 and kbat=0 over closed seas 440 399 !!---------------------------------------------------------------------- 441 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pbat ! bathymetry in meters (bathy array) 442 INTEGER , DIMENSION(jpi,jpj), INTENT(inout) :: kbat ! bathymetry in levels (mbathy array) 400 INTEGER, DIMENSION(:,:), INTENT(inout) :: k_top, k_bot ! ocean first and last level indices 443 401 ! 444 402 INTEGER :: jc, ji, jj ! dummy loop indices … … 448 406 DO jj = ncsj1(jc), ncsj2(jc) 449 407 DO ji = ncsi1(jc), ncsi2(jc) 450 pbat(ji,jj) = 0._wp451 k bat(ji,jj) = 0408 k_top(ji,jj) = 0 409 k_bot(ji,jj) = 0 452 410 END DO 453 411 END DO … … 457 415 458 416 !!====================================================================== 459 END MODULE closea460 417 END MODULE usrdef_closea 418
Note: See TracChangeset
for help on using the changeset viewer.