- Timestamp:
- 2010-10-13T17:58:28+02:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r2239 r2257 31 31 CHARACTER(len=100), PUBLIC :: cn_dir = './' !: Root directory for location of ssr files 32 32 LOGICAL , PUBLIC :: ln_rnf_depth = .false. !: depth river runoffs attribute specified in a file 33 LOGICAL , PUBLIC :: ln_rnf_tem p= .false. !: temperature river runoffs attribute specified in a file33 LOGICAL , PUBLIC :: ln_rnf_tem = .false. !: temperature river runoffs attribute specified in a file 34 34 LOGICAL , PUBLIC :: ln_rnf_sal = .false. !: salinity river runoffs attribute specified in a file 35 35 LOGICAL , PUBLIC :: ln_rnf_emp = .false. !: runoffs into a file to be read or already into precipitation … … 56 56 INTEGER, PUBLIC, DIMENSION(jpi,jpj) :: nk_rnf !: depth of runoff in model levels 57 57 58 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,2) :: tsc_rnf !: temperature & salinity content of river runoffs [K.m/s & PSU.m/s] 58 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpts) :: rnf_tsc_b, rnf_tsc !: before and now 59 ! !: temp. & sal. content of river runoffs [K.m/s & PSU.m/s] 59 60 60 61 !! * Substitutions … … 88 89 IF( kt == nit000 ) CALL sbc_rnf_init ! Read namelist and allocate structures 89 90 91 ! ! ---------------------------------------- ! 92 IF( kt /= nit000 ) THEN ! Swap of forcing fields ! 93 ! ! ---------------------------------------- ! 94 rnf_b (:,: ) = rnf (:,: ) ! Swap the ocean forcing fields except at nit000 95 rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) ! where before fields are set at the end of the routine 96 ! 97 ENDIF 98 90 99 ! !-------------------! 91 100 IF( .NOT. ln_rnf_emp ) THEN ! Update runoff ! 92 101 ! !-------------------! 93 102 ! 94 CALL fld_read ( kt, nn_fsbc, sf_rnf )! Read Runoffs data and provide it at kt95 IF( ln_rnf_tem p) CALL fld_read ( kt, nn_fsbc, sf_t_rnf ) ! idem for runoffs temperature if required103 CALL fld_read ( kt, nn_fsbc, sf_rnf ) ! Read Runoffs data and provide it at kt 104 IF( ln_rnf_tem ) CALL fld_read ( kt, nn_fsbc, sf_t_rnf ) ! idem for runoffs temperature if required 96 105 IF( ln_rnf_sal ) CALL fld_read ( kt, nn_fsbc, sf_s_rnf ) ! idem for runoffs salinity if required 97 106 … … 107 116 108 117 ! C a u t i o n : runoff is negative and in kg/m2/s 109 110 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 118 IF( MOD( kt - 1, nn_fsbc ) == 0 ) THEN 111 119 rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:,1) ) 112 120 ! 113 121 z1_rau0 = 1.e0 / rau0 114 122 ! ! set temperature & salinity content of runoffs 115 IF( ln_rnf_tem p ) THEN! use runoffs temperature data116 tsc_rnf(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * z1_rau0123 IF( ln_rnf_tem ) THEN ! use runoffs temperature data 124 rnf_tsc(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * z1_rau0 117 125 WHERE( sf_t_rnf(1)%fnow(:,:,1) == -999 ) ! if missing data value use SST as runoffs temperature 118 tsc_rnf(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0126 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0 119 127 ENDWHERE 120 128 ELSE ! use SST as runoffs temperature 121 tsc_rnf(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0129 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0 122 130 ENDIF 123 131 ! ! use runoffs salinity data 124 IF( ln_rnf_sal ) tsc_rnf(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * z1_rau0132 IF( ln_rnf_sal ) rnf_tsc(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:,1) ) * rnf(:,:) * z1_rau0 125 133 ! ! else use S=0 for runoffs (done one for all in the init) 126 134 ! 127 IF( ln_rnf_tem p.OR. ln_rnf_sal ) THEN ! runoffs as outflow: use ocean SST and SSS135 IF( ln_rnf_tem .OR. ln_rnf_sal ) THEN ! runoffs as outflow: use ocean SST and SSS 128 136 WHERE( rnf(:,:) < 0.e0 ) ! example baltic model when flow is out of domain 129 tsc_rnf(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0130 tsc_rnf(:,:,jp_sal) = sss_m(:,:) * rnf(:,:) * z1_rau0137 rnf_tsc(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0 138 rnf_tsc(:,:,jp_sal) = sss_m(:,:) * rnf(:,:) * z1_rau0 131 139 ENDWHERE 132 140 ENDIF 133 141 ! 134 142 CALL iom_put( "runoffs", rnf ) ! output runoffs arrays 135 143 ENDIF 136 144 ! 137 145 ENDIF 146 ! 147 IF( kt == nit000 ) THEN ! set the forcing field at nit000 - 1 ! 148 ! ! ---------------------------------------- ! 149 IF( ln_rstart .AND. & !* Restart: read in restart file 150 & iom_varid( numror, 'rnf_b', ldstop = .FALSE. ) > 0 ) THEN 151 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields red in the restart file' 152 CALL iom_get( numror, jpdom_autoglo, 'rnf_b', rnf_b ) ! before runoff 153 CALL iom_get( numror, jpdom_autoglo, 'rnf_hc_b', rnf_tsc_b(:,:,jp_tem) ) ! before heat content of runoff 154 CALL iom_get( numror, jpdom_autoglo, 'rnf_sc_b', rnf_tsc_b(:,:,jp_sal) ) ! before salinity content of runoff 155 ELSE !* no restart: set from nit000 values 156 IF(lwp) WRITE(numout,*) ' nit000-1 runoff forcing fields set to nit000' 157 rnf_b (:,: ) = rnf (:,: ) 158 rnf_tsc_b(:,:,:) = rnf_tsc(:,:,:) 159 ENDIF 160 ENDIF 161 ! ! ---------------------------------------- ! 162 IF( lrst_oce ) THEN ! Write in the ocean restart file ! 163 ! ! ---------------------------------------- ! 164 IF(lwp) WRITE(numout,*) 165 IF(lwp) WRITE(numout,*) 'sbcrnf : runoff forcing fields written in ocean restart file ', & 166 & 'at it= ', kt,' date= ', ndastp 167 IF(lwp) WRITE(numout,*) '~~~~' 168 CALL iom_rstput( kt, nitrst, numrow, 'rnf_b' , rnf ) 169 CALL iom_rstput( kt, nitrst, numrow, 'rnf_hc_b', rnf_tsc(:,:,jp_tem) ) 170 CALL iom_rstput( kt, nitrst, numrow, 'rnf_sc_b', rnf_tsc(:,:,jp_sal) ) 171 ENDIF 172 138 173 ! 139 174 END SUBROUTINE sbc_rnf … … 202 237 INTEGER :: ierror, inum ! temporary integer 203 238 !! 204 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, ln_rnf_depth, ln_rnf_tem p, ln_rnf_sal, &205 & sn_rnf, sn_cnf , sn_s_rnf , sn_t_rnf 206 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf 239 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, ln_rnf_depth, ln_rnf_tem, ln_rnf_sal, & 240 & sn_rnf, sn_cnf , sn_s_rnf , sn_t_rnf , sn_dep_rnf, & 241 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf, rn_rfact 207 242 !!---------------------------------------------------------------------- 208 243 … … 243 278 IF(lwp) WRITE(numout,*) 244 279 IF(lwp) WRITE(numout,*) ' runoffs directly provided in the precipitations' 245 IF( ln_rnf_depth .OR. ln_rnf_tem p.OR. ln_rnf_sal ) THEN280 IF( ln_rnf_depth .OR. ln_rnf_tem .OR. ln_rnf_sal ) THEN 246 281 CALL ctl_warn( 'runoffs already included in precipitations, so runoff (T,S, depth) attributes will not be used' ) 247 ln_rnf_depth = .FALSE. ; ln_rnf_tem p= .FALSE. ; ln_rnf_sal = .FALSE.282 ln_rnf_depth = .FALSE. ; ln_rnf_tem = .FALSE. ; ln_rnf_sal = .FALSE. 248 283 ENDIF 249 284 ! … … 261 296 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 262 297 ! 263 IF( ln_rnf_tem p) THEN ! Create (if required) sf_t_rnf structure298 IF( ln_rnf_tem ) THEN ! Create (if required) sf_t_rnf structure 264 299 IF(lwp) WRITE(numout,*) 265 300 IF(lwp) WRITE(numout,*) ' runoffs temperatures read in a file' … … 294 329 CALL iom_close( inum ) ! close file 295 330 296 nk_rnf(:,:) =0 ! set the number of level over which river runoffs are applied297 DO jj =1,jpj298 DO ji =1,jpi331 nk_rnf(:,:) = 0 ! set the number of level over which river runoffs are applied 332 DO jj = 1, jpj 333 DO ji = 1, jpi 299 334 IF ( h_rnf(ji,jj) > 0.e0 ) THEN 300 jk =2301 DO WHILE ( jk /=(mbathy(ji,jj)-1) .AND. fsdept(ji,jj,jk) < h_rnf(ji,jj) ); jk=jk+1;ENDDO302 nk_rnf(ji,jj) =jk303 ELSE IF ( h_rnf(ji,jj) == -1 ) THEN ; nk_rnf(ji,jj) =1304 ELSE IF ( h_rnf(ji,jj) == -999 ) THEN ; nk_rnf(ji,jj) =mbathy(ji,jj)-1335 jk = 2 336 DO WHILE ( jk /= ( mbathy(ji,jj) - 1 ) .AND. fsdept(ji,jj,jk) < h_rnf(ji,jj) ) ; jk = jk + 1 ; ENDDO 337 nk_rnf(ji,jj) = jk 338 ELSE IF ( h_rnf(ji,jj) == -1 ) THEN ; nk_rnf(ji,jj) = 1 339 ELSE IF ( h_rnf(ji,jj) == -999 ) THEN ; nk_rnf(ji,jj) = mbathy(ji,jj) - 1 305 340 ELSE IF ( h_rnf(ji,jj) /= 0 ) THEN 306 341 CALL ctl_stop( 'runoff depth not positive, and not -999 or -1, rnf value in file fort.999' ) … … 309 344 ENDDO 310 345 ENDDO 311 DO jj =1,jpj ! set the associated depth312 DO ji =1,jpi313 h_rnf(ji,jj) =0.e0314 DO jk =1,nk_rnf(ji,jj)315 h_rnf(ji,jj) =h_rnf(ji,jj)+fse3t(ji,jj,jk)346 DO jj = 1, jpj ! set the associated depth 347 DO ji = 1, jpi 348 h_rnf(ji,jj) = 0.e0 349 DO jk = 1, nk_rnf(ji,jj) 350 h_rnf(ji,jj) = h_rnf(ji,jj)+fse3t(ji,jj,jk) 316 351 ENDDO 317 352 ENDDO 318 353 ENDDO 319 354 ELSE ! runoffs applied at the surface 320 nk_rnf(:,:) =1321 h_rnf(:,:) =fse3t(:,:,1)355 nk_rnf(:,:) = 1 356 h_rnf(:,:) = fse3t(:,:,1) 322 357 ENDIF 323 358 ! 324 359 ENDIF 325 360 326 tsc_rnf(:,:,:) = 0.e0 ! runoffs temperature & salinty contents initilisation361 rnf_tsc(:,:,:) = 0.e0 ! runoffs temperature & salinty contents initilisation 327 362 ! ! ======================== 328 363 ! ! River mouth vicinity
Note: See TracChangeset
for help on using the changeset viewer.