Changeset 2528 for trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
- Timestamp:
- 2010-12-27T18:33:53+01:00 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r1730 r2528 4 4 !! Ocean forcing: river runoff 5 5 !!===================================================================== 6 !! History : OPA ! 2000-11 (R. Hordoir, E. Durand) NetCDF FORMAT 7 !! NEMO 1.0 ! 2002-09 (G. Madec) F90: Free form and module 8 !! 3.0 ! 2006-07 (G. Madec) Surface module 9 !! 3.2 ! 2009-04 (B. Lemaire) Introduce iom_put 6 !! History : OPA ! 2000-11 (R. Hordoir, E. Durand) NetCDF FORMAT 7 !! NEMO 1.0 ! 2002-09 (G. Madec) F90: Free form and module 8 !! 3.0 ! 2006-07 (G. Madec) Surface module 9 !! 3.2 ! 2009-04 (B. Lemaire) Introduce iom_put 10 !! 3.3 ! 2010-10 (R. Furner, G. Madec) runoff distributed over ocean levels 10 11 !!---------------------------------------------------------------------- 11 12 … … 18 19 USE phycst ! physical constants 19 20 USE sbc_oce ! surface boundary condition variables 20 USE fldread ! ???21 USE fldread ! read input field at current time step 21 22 USE in_out_manager ! I/O manager 22 23 USE iom ! I/O module 24 USE restart ! restart 25 USE closea ! closed seas 23 26 24 27 IMPLICIT NONE 25 28 PRIVATE 26 29 27 PUBLIC sbc_rnf ! routine call in step module 28 29 ! !!* namsbc_rnf namelist * 30 PUBLIC sbc_rnf ! routine call in sbcmod module 31 PUBLIC sbc_rnf_div ! routine called in sshwzv module 32 33 ! !!* namsbc_rnf namelist * 30 34 CHARACTER(len=100), PUBLIC :: cn_dir = './' !: Root directory for location of ssr files 35 LOGICAL , PUBLIC :: ln_rnf_depth = .false. !: depth river runoffs attribute specified in a file 36 LOGICAL , PUBLIC :: ln_rnf_tem = .false. !: temperature river runoffs attribute specified in a file 37 LOGICAL , PUBLIC :: ln_rnf_sal = .false. !: salinity river runoffs attribute specified in a file 31 38 LOGICAL , PUBLIC :: ln_rnf_emp = .false. !: runoffs into a file to be read or already into precipitation 32 39 TYPE(FLD_N) , PUBLIC :: sn_rnf !: information about the runoff file to be read 33 40 TYPE(FLD_N) , PUBLIC :: sn_cnf !: information about the runoff mouth file to be read 41 TYPE(FLD_N) :: sn_s_rnf !: information about the salinities of runoff file to be read 42 TYPE(FLD_N) :: sn_t_rnf !: information about the temperatures of runoff file to be read 43 TYPE(FLD_N) :: sn_dep_rnf !: information about the depth which river inflow affects 34 44 LOGICAL , PUBLIC :: ln_rnf_mouth = .false. !: specific treatment in mouths vicinity 35 REAL(wp) , PUBLIC :: rn_hrnf = 0.e0 !: runoffs, depth over which enhanced vertical mixing is used 36 REAL(wp) , PUBLIC :: rn_avt_rnf = 0.e0 !: runoffs, value of the additional vertical mixing coef. [m2/s] 37 REAL(wp) , PUBLIC :: rn_rfact = 1.e0 !: multiplicative factor for runoff 38 39 INTEGER , PUBLIC :: nkrnf = 0 !: number of levels over which Kz is increased at river mouths 40 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnfmsk !: river mouth mask (hori.) 41 REAL(wp), PUBLIC, DIMENSION(jpk) :: rnfmsk_z !: river mouth mask (vert.) 42 43 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnf ! structure of input SST (file information, fields read) 44 45 REAL(wp) , PUBLIC :: rn_hrnf = 0._wp !: runoffs, depth over which enhanced vertical mixing is used 46 REAL(wp) , PUBLIC :: rn_avt_rnf = 0._wp !: runoffs, value of the additional vertical mixing coef. [m2/s] 47 REAL(wp) , PUBLIC :: rn_rfact = 1._wp !: multiplicative factor for runoff 48 49 INTEGER , PUBLIC :: nkrnf = 0 !: nb of levels over which Kz is increased at river mouths 50 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnfmsk !: river mouth mask (hori.) 51 REAL(wp), PUBLIC, DIMENSION(jpk) :: rnfmsk_z !: river mouth mask (vert.) 52 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: h_rnf !: depth of runoff in m 53 INTEGER, PUBLIC, DIMENSION(jpi,jpj) :: nk_rnf !: depth of runoff in model levels 54 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpts) :: rnf_tsc_b, rnf_tsc !: before and now T & S contents of runoffs [K.m/s & PSU.m/s] 55 56 REAL(wp) :: r1_rau0 ! = 1 / rau0 57 58 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnf ! structure: river runoff (file information, fields read) 59 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_s_rnf ! structure: river runoff salinity (file information, fields read) 60 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_t_rnf ! structure: river runoff temperature (file information, fields read) 61 62 !! * Substitutions 63 # include "domzgr_substitute.h90" 45 64 !!---------------------------------------------------------------------- 46 !! NEMO/OPA 3. 2 , LOCEAN-IPSL (2009)65 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 47 66 !! $Id$ 48 !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)67 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 68 !!---------------------------------------------------------------------- 50 51 69 CONTAINS 52 70 … … 66 84 !! 67 85 INTEGER :: ji, jj ! dummy loop indices 68 INTEGER :: ierror ! temporary integer69 86 !!---------------------------------------------------------------------- 70 87 ! 71 IF( kt == nit000 ) THEN 72 IF( .NOT. ln_rnf_emp ) THEN 73 ALLOCATE( sf_rnf(1), STAT=ierror ) 74 IF( ierror > 0 ) THEN 75 CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' ) ; RETURN 76 ENDIF 77 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 78 ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 79 ENDIF 80 CALL sbc_rnf_init(sf_rnf) 88 IF( kt == nit000 ) CALL sbc_rnf_init ! Read namelist and allocate structures 89 90 ! ! ---------------------------------------- ! 91 IF( kt /= nit000 ) THEN ! Swap of forcing fields ! 92 ! ! ---------------------------------------- ! 93 rnf_b (:,: ) = rnf (:,: ) ! Swap the ocean forcing fields except at nit000 94 rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) ! where before fields are set at the end of the routine 95 ! 81 96 ENDIF 82 97 … … 85 100 ! !-------------------! 86 101 ! 87 CALL fld_read( kt, nn_fsbc, sf_rnf ) ! Read Runoffs data and provides it 88 ! ! at the current time-step 89 102 CALL fld_read ( kt, nn_fsbc, sf_rnf ) ! Read Runoffs data and provide it at kt 103 IF( ln_rnf_tem ) CALL fld_read ( kt, nn_fsbc, sf_t_rnf ) ! idem for runoffs temperature if required 104 IF( ln_rnf_sal ) CALL fld_read ( kt, nn_fsbc, sf_s_rnf ) ! idem for runoffs salinity if required 105 ! 90 106 ! Runoff reduction only associated to the ORCA2_LIM configuration 91 107 ! when reading the NetCDF file runoff_1m_nomask.nc 92 108 IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 109 WHERE( 40._wp < gphit(:,:) .AND. gphit(:,:) < 65._wp ) 110 sf_rnf(1)%fnow(:,:,1) = 0.85 * sf_rnf(1)%fnow(:,:,1) 111 END WHERE 112 ENDIF 113 ! 114 IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN 115 rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:,1) ) 116 ! 117 r1_rau0 = 1._wp / rau0 118 ! ! set temperature & salinity content of runoffs 119 IF( ln_rnf_tem ) THEN ! use runoffs temperature data 120 rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 121 WHERE( sf_t_rnf(1)%fnow(:,:,1) == -999 ) ! if missing data value use SST as runoffs temperature 122 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rau0 123 END WHERE 124 ELSE ! use SST as runoffs temperature 125 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rau0 126 ENDIF 127 ! ! use runoffs salinity data 128 IF( ln_rnf_sal ) rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * r1_rau0 129 ! ! else use S=0 for runoffs (done one for all in the init) 130 ! 131 IF( ln_rnf_tem .OR. ln_rnf_sal ) THEN ! runoffs as outflow: use ocean SST and SSS 132 WHERE( rnf(:,:) < 0._wp ) ! example baltic model when flow is out of domain 133 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * r1_rau0 134 rnf_tsc(:,:,jp_sal) = sss_m(:,:) * rnf(:,:) * r1_rau0 135 END WHERE 136 ENDIF 137 ! 138 CALL iom_put( "runoffs", rnf ) ! output runoffs arrays 139 ENDIF 140 ! 141 ENDIF 142 ! 143 IF( kt == nit000 ) THEN ! set the forcing field at nit000 - 1 ! 144 ! ! ---------------------------------------- ! 145 IF( ln_rstart .AND. & !* Restart: read in restart file 146 & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 147 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields red in the restart file' 148 CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b ) ! before runoff 149 CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem) ) ! before heat content of runoff 150 CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal) ) ! before salinity content of runoff 151 ELSE !* no restart: set from nit000 values 152 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields set to nit000' 153 rnf_b (:,: ) = rnf (:,: ) 154 rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) 155 ENDIF 156 ENDIF 157 ! ! ---------------------------------------- ! 158 IF( lrst_oce ) THEN ! Write in the ocean restart file ! 159 ! ! ---------------------------------------- ! 160 IF(lwp) WRITE(numout,*) 161 IF(lwp) WRITE(numout,*) 'sbcrnf : runoff forcing fields written in ocean restart file ', & 162 & 'at it= ', kt,' date= ', ndastp 163 IF(lwp) WRITE(numout,*) '~~~~' 164 CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf ) 165 CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem) ) 166 CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal) ) 167 ENDIF 168 ! 169 END SUBROUTINE sbc_rnf 170 171 172 SUBROUTINE sbc_rnf_div( phdivn ) 173 !!---------------------------------------------------------------------- 174 !! *** ROUTINE sbc_rnf *** 175 !! 176 !! ** Purpose : update the horizontal divergence with the runoff inflow 177 !! 178 !! ** Method : 179 !! CAUTION : rnf is positive (inflow) decreasing the 180 !! divergence and expressed in m/s 181 !! 182 !! ** Action : phdivn decreased by the runoff inflow 183 !!---------------------------------------------------------------------- 184 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phdivn ! horizontal divergence 185 !! 186 INTEGER :: ji, jj, jk ! dummy loop indices 187 REAL(wp) :: r1_rau0 ! local scalar 188 REAL(wp) :: zfact ! local scalar 189 !!---------------------------------------------------------------------- 190 ! 191 zfact = 0.5_wp 192 ! 193 r1_rau0 = 1._wp / rau0 194 IF( ln_rnf_depth ) THEN !== runoff distributed over several levels ==! 195 IF( lk_vvl ) THEN ! variable volume case 196 DO jj = 1, jpj ! update the depth over which runoffs are distributed 197 DO ji = 1, jpi 198 h_rnf(ji,jj) = 0._wp 199 DO jk = 1, nk_rnf(ji,jj) ! recalculates h_rnf to be the depth in metres 200 h_rnf(ji,jj) = h_rnf(ji,jj) + fse3t(ji,jj,jk) ! to the bottom of the relevant grid box 201 END DO 202 ! ! apply the runoff input flow 203 DO jk = 1, nk_rnf(ji,jj) 204 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 205 END DO 206 END DO 207 END DO 208 ELSE ! constant volume case : just apply the runoff input flow 93 209 DO jj = 1, jpj 94 210 DO ji = 1, jpi 95 IF( gphit(ji,jj) > 40 .AND. gphit(ji,jj) < 65 ) sf_rnf(1)%fnow(ji,jj) = 0.85 * sf_rnf(1)%fnow(ji,jj) 211 DO jk = 1, nk_rnf(ji,jj) 212 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - ( rnf(ji,jj) + rnf_b(ji,jj) ) * zfact * r1_rau0 / h_rnf(ji,jj) 213 END DO 96 214 END DO 97 215 END DO 98 216 ENDIF 99 100 ! C a u t i o n : runoff is negative and in kg/m2/s 101 102 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 103 emp (:,:) = emp (:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 104 emps(:,:) = emps(:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 105 CALL iom_put( "runoffs", sf_rnf(1)%fnow ) ! runoffs 106 ENDIF 107 ! 108 ENDIF 109 ! 110 END SUBROUTINE sbc_rnf 111 112 113 SUBROUTINE sbc_rnf_init( sf_rnf ) 217 ELSE !== runoff put only at the surface ==! 218 IF( lk_vvl ) THEN ! variable volume case 219 h_rnf(:,:) = fse3t(:,:,1) ! recalculate h_rnf to be depth of top box 220 ENDIF 221 phdivn(:,:,1) = phdivn(:,:,1) - ( rnf(:,:) + rnf_b(:,:) ) * zfact * r1_rau0 / fse3t(:,:,1) 222 ENDIF 223 ! 224 END SUBROUTINE sbc_rnf_div 225 226 227 SUBROUTINE sbc_rnf_init 114 228 !!---------------------------------------------------------------------- 115 229 !! *** ROUTINE sbc_rnf_init *** … … 121 235 !! ** Action : - read parameters 122 236 !!---------------------------------------------------------------------- 123 TYPE(FLD), INTENT(inout), DIMENSION(:) :: sf_rnf ! input data 124 !! 125 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, ln_rnf_mouth, & 126 & rn_hrnf, rn_avt_rnf, rn_rfact 237 CHARACTER(len=32) :: rn_dep_file ! runoff file name 238 INTEGER :: ji, jj, jk ! dummy loop indices 239 INTEGER :: ierror, inum ! temporary integer 240 !! 241 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, ln_rnf_depth, ln_rnf_tem, ln_rnf_sal, & 242 & sn_rnf, sn_cnf , sn_s_rnf , sn_t_rnf , sn_dep_rnf, & 243 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf, rn_rfact 127 244 !!---------------------------------------------------------------------- 128 245 … … 136 253 sn_cnf = FLD_N( 'runoffs', 0 , 'sorunoff' , .FALSE. , .true. , 'yearly' , '' , '' ) 137 254 255 sn_s_rnf = FLD_N( 'runoffs', 24. , 'rosaline' , .TRUE. , .true. , 'yearly' , '' , '' ) 256 sn_t_rnf = FLD_N( 'runoffs', 24. , 'rotemper' , .TRUE. , .true. , 'yearly' , '' , '' ) 257 sn_dep_rnf = FLD_N( 'runoffs', 0. , 'rodepth' , .FALSE. , .true. , 'yearly' , '' , '' ) 138 258 ! 139 259 REWIND ( numnam ) ! Read Namelist namsbc_rnf … … 157 277 ! ! ================== 158 278 ! 159 IF( ln_rnf_emp ) THEN ! runoffs directly provided in the precipitations279 IF( ln_rnf_emp ) THEN !== runoffs directly provided in the precipitations ==! 160 280 IF(lwp) WRITE(numout,*) 161 281 IF(lwp) WRITE(numout,*) ' runoffs directly provided in the precipitations' 162 ! 163 ELSE ! runoffs read in a file : set sf_rnf structure 164 ! 165 ! sf_rnf already allocated in main routine 166 ! fill sf_rnf with sn_rnf and control print 282 IF( ln_rnf_depth .OR. ln_rnf_tem .OR. ln_rnf_sal ) THEN 283 CALL ctl_warn( 'runoffs already included in precipitations, so runoff (T,S, depth) attributes will not be used' ) 284 ln_rnf_depth = .FALSE. ; ln_rnf_tem = .FALSE. ; ln_rnf_sal = .FALSE. 285 ENDIF 286 ! 287 ELSE !== runoffs read in a file : set sf_rnf structure ==! 288 ! 289 ALLOCATE( sf_rnf(1), STAT=ierror ) ! Create sf_rnf structure (runoff inflow) 290 IF(lwp) WRITE(numout,*) 291 IF(lwp) WRITE(numout,*) ' runoffs inflow read in a file' 292 IF( ierror > 0 ) THEN 293 CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' ) ; RETURN 294 ENDIF 295 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj,1) ) 296 IF( sn_rnf%ln_tint ) ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,1,2) ) 297 ! ! fill sf_rnf with the namelist (sn_rnf) and control print 167 298 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 168 299 ! 169 ENDIF 170 300 IF( ln_rnf_tem ) THEN ! Create (if required) sf_t_rnf structure 301 IF(lwp) WRITE(numout,*) 302 IF(lwp) WRITE(numout,*) ' runoffs temperatures read in a file' 303 ALLOCATE( sf_t_rnf(1), STAT=ierror ) 304 IF( ierror > 0 ) THEN 305 CALL ctl_stop( 'sbc_rnf_init: unable to allocate sf_t_rnf structure' ) ; RETURN 306 ENDIF 307 ALLOCATE( sf_t_rnf(1)%fnow(jpi,jpj,1) ) 308 IF( sn_t_rnf%ln_tint ) ALLOCATE( sf_t_rnf(1)%fdta(jpi,jpj,1,2) ) 309 CALL fld_fill (sf_t_rnf, (/ sn_t_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' ) 310 ENDIF 311 ! 312 IF( ln_rnf_sal ) THEN ! Create (if required) sf_s_rnf and sf_t_rnf structures 313 IF(lwp) WRITE(numout,*) 314 IF(lwp) WRITE(numout,*) ' runoffs salinities read in a file' 315 ALLOCATE( sf_s_rnf(1), STAT=ierror ) 316 IF( ierror > 0 ) THEN 317 CALL ctl_stop( 'sbc_rnf_init: unable to allocate sf_s_rnf structure' ) ; RETURN 318 ENDIF 319 ALLOCATE( sf_s_rnf(1)%fnow(jpi,jpj,1) ) 320 IF( sn_s_rnf%ln_tint ) ALLOCATE( sf_s_rnf(1)%fdta(jpi,jpj,1,2) ) 321 CALL fld_fill (sf_s_rnf, (/ sn_s_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' ) 322 ENDIF 323 ! 324 IF( ln_rnf_depth ) THEN ! depth of runoffs set from a file 325 IF(lwp) WRITE(numout,*) 326 IF(lwp) WRITE(numout,*) ' runoffs depth read in a file' 327 rn_dep_file = TRIM( cn_dir )//TRIM( sn_dep_rnf%clname ) 328 CALL iom_open ( rn_dep_file, inum ) ! open file 329 CALL iom_get ( inum, jpdom_data, sn_dep_rnf%clvar, h_rnf ) ! read the river mouth array 330 CALL iom_close( inum ) ! close file 331 ! 332 nk_rnf(:,:) = 0 ! set the number of level over which river runoffs are applied 333 DO jj = 1, jpj 334 DO ji = 1, jpi 335 IF( h_rnf(ji,jj) > 0._wp ) THEN 336 jk = 2 337 DO WHILE ( jk /= mbkt(ji,jj) .AND. fsdept(ji,jj,jk) < h_rnf(ji,jj) ) ; jk = jk + 1 ; END DO 338 nk_rnf(ji,jj) = jk 339 ELSEIF( h_rnf(ji,jj) == -1 ) THEN ; nk_rnf(ji,jj) = 1 340 ELSEIF( h_rnf(ji,jj) == -999 ) THEN ; nk_rnf(ji,jj) = mbkt(ji,jj) 341 ELSEIF( h_rnf(ji,jj) /= 0 ) THEN 342 CALL ctl_stop( 'runoff depth not positive, and not -999 or -1, rnf value in file fort.999' ) 343 WRITE(999,*) 'ji, jj, rnf(ji,jj) :', ji, jj, rnf(ji,jj) 344 ENDIF 345 END DO 346 END DO 347 DO jj = 1, jpj ! set the associated depth 348 DO ji = 1, jpi 349 h_rnf(ji,jj) = 0._wp 350 DO jk = 1, nk_rnf(ji,jj) 351 h_rnf(ji,jj) = h_rnf(ji,jj) + fse3t(ji,jj,jk) 352 END DO 353 END DO 354 END DO 355 ELSE ! runoffs applied at the surface 356 nk_rnf(:,:) = 1 357 h_rnf (:,:) = fse3t(:,:,1) 358 ENDIF 359 ! 360 ENDIF 361 ! 362 rnf_tsc(:,:,:) = 0._wp ! runoffs temperature & salinty contents initilisation 363 ! 171 364 ! ! ======================== 172 365 ! ! River mouth vicinity … … 178 371 ! ! - mixed upstream-centered (ln_traadv_cen2=T) 179 372 ! 180 ! ! Number of level over which Kz increase 181 nkrnf = 0 182 IF( rn_hrnf > 0.e0 ) THEN 373 IF ( ln_rnf_depth ) CALL ctl_warn( 'sbc_rnf_init: increased mixing turned on but effects may already', & 374 & 'be spread through depth by ln_rnf_depth' ) 375 ! 376 nkrnf = 0 ! Number of level over which Kz increase 377 IF( rn_hrnf > 0._wp ) THEN 183 378 nkrnf = 2 184 379 DO WHILE( nkrnf /= jpkm1 .AND. gdepw_0(nkrnf+1) < rn_hrnf ) ; nkrnf = nkrnf + 1 ; END DO … … 198 393 IF(lwp) WRITE(numout,*) 199 394 IF(lwp) WRITE(numout,*) ' No specific treatment at river mouths' 200 rnfmsk (:,:) = 0. e0201 rnfmsk_z(:) = 0. e0395 rnfmsk (:,:) = 0._wp 396 rnfmsk_z(:) = 0._wp 202 397 nkrnf = 0 203 398 ENDIF … … 226 421 !! rnfmsk_z vertical structure 227 422 !!---------------------------------------------------------------------- 228 USE closea, ONLY : clo_rnf ! rnfmsk update routine229 423 ! 230 424 INTEGER :: inum ! temporary integers … … 248 442 IF( nclosea == 1 ) CALL clo_rnf( rnfmsk ) ! closed sea inflow set as ruver mouth 249 443 250 rnfmsk_z(:) = 0. e0! vertical structure444 rnfmsk_z(:) = 0._wp ! vertical structure 251 445 rnfmsk_z(1) = 1.0 252 446 rnfmsk_z(2) = 1.0 ! **********
Note: See TracChangeset
for help on using the changeset viewer.