- Timestamp:
- 2010-06-16T16:34:29+02:00 (14 years ago)
- Location:
- branches/DEV_R1821_Rivers/NEMO/OPA_SRC
- Files:
-
- 18 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/BDY/bdyvol.F90
r1739 r1938 86 86 z_cflxemp = 0.e0 87 87 zraur = 1.e0 / rau0 88 z_cflxemp = SUM ( emp(:,:) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur )88 z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur ) 89 89 IF( lk_mpp ) CALL mpp_sum( z_cflxemp ) ! sum over the global domain 90 90 -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DIA/diafwb.F90
r1581 r1938 30 30 LOGICAL, PUBLIC, PARAMETER :: lk_diafwb = .TRUE. !: fresh water budget flag 31 31 32 REAL(wp) :: a_ emp, &32 REAL(wp) :: a_fwf , & 33 33 & a_sshb, a_sshn, a_salb, a_saln 34 34 REAL(wp), DIMENSION(4) :: a_flxi, a_flxo, a_temi, a_temo, a_sali, a_salo … … 59 59 REAL(wp) :: ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 60 60 REAL(wp) :: zt, zs, zu 61 REAL(wp) :: zsm0, z empnew61 REAL(wp) :: zsm0, zfwfnew 62 62 !!---------------------------------------------------------------------- 63 63 … … 65 65 zsm0 = 34.72654 66 66 67 ! To compute emp mean value mean emp67 ! To compute fwf mean value mean fwf 68 68 69 69 IF( kt == nit000 ) THEN 70 70 71 a_ emp= 0.e071 a_fwf = 0.e0 72 72 a_sshb = 0.e0 ! valeur de ssh au debut de la simulation 73 73 a_salb = 0.e0 ! valeur de sal au debut de la simulation … … 87 87 ENDIF 88 88 89 a_ emp = SUM( e1t(:,:) * e2t(:,:) * emp (:,:) * tmask_i(:,:) )90 IF( lk_mpp ) CALL mpp_sum( a_ emp) ! sum over the global domain89 a_fwf = SUM( e1t(:,:) * e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) ) 90 IF( lk_mpp ) CALL mpp_sum( a_fwf ) ! sum over the global domain 91 91 92 92 IF( kt == nitend ) THEN … … 95 95 zarea = 0.e0 96 96 zvol = 0.e0 97 z empnew = 0.e097 zfwfnew = 0.e0 98 98 ! Mean sea level at nitend 99 99 a_sshn = SUM( e1t(:,:) * e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) … … 115 115 116 116 ! Conversion in m3 117 a_ emp = a_emp* rdttra(1) * 1.e-3117 a_fwf = a_fwf * rdttra(1) * 1.e-3 118 118 119 ! empcorrection to bring back the mean ssh to zero120 z empnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea119 ! fwf correction to bring back the mean ssh to zero 120 zfwfnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea 121 121 122 122 ENDIF … … 362 362 WRITE(inum,*) 363 363 WRITE(inum,*) 'Net freshwater budget ' 364 WRITE(inum,9010) ' emp = ',a_emp, ' m3 =', a_emp/(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv'364 WRITE(inum,9010) ' fwf = ',a_fwf, ' m3 =', a_fwf /(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv' 365 365 WRITE(inum,*) 366 366 WRITE(inum,9010) ' zarea =',zarea -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DIA/diawri.F90
r1792 r1938 346 346 !!$ & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 347 347 !!$#endif 348 CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux" , "Kg/m2/s", & ! emp348 CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux" , "Kg/m2/s", & ! (emp-rnf) 349 349 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 350 350 !!$ CALL histdef( nid_T, "sorunoff", "Runoffs" , "Kg/m2/s", & ! runoffs 351 351 !!$ & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 352 CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux" , "kg/m2/s", & ! emps353 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 354 CALL histdef( nid_T, "sosalflx", "Surface Salt Flux" , "Kg/m2/s", & ! emps* sn352 CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux" , "kg/m2/s", & ! (emps-rnf) 353 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 354 CALL histdef( nid_T, "sosalflx", "Surface Salt Flux" , "Kg/m2/s", & ! (emps-rnf) * sn 355 355 & jpi, jpj, nh_T, 1 , 1, 1 , -99 , 32, clop, zsto, zout ) 356 356 CALL histdef( nid_T, "sohefldo", "Net Downward Heat Flux" , "W/m2" , & ! qns + qsr … … 498 498 !!$ CALL histwrite( nid_T, "sowaflep", it, fmass(:,:) , ndim_hT, ndex_hT ) ! atmos=>ocean water flux 499 499 !!$#endif 500 CALL histwrite( nid_T, "sowaflup", it, emp, ndim_hT, ndex_hT ) ! upward water flux500 CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf ) , ndim_hT, ndex_hT ) ! upward water flux 501 501 !!$ CALL histwrite( nid_T, "sorunoff", it, runoff , ndim_hT, ndex_hT ) ! runoff 502 CALL histwrite( nid_T, "sowaflcd", it, emps, ndim_hT, ndex_hT ) ! c/d water flux503 zw2d(:,:) = emps(:,:) * sn(:,:,1) * tmask(:,:,1)502 CALL histwrite( nid_T, "sowaflcd", it, ( emps-rnf ) , ndim_hT, ndex_hT ) ! c/d water flux 503 zw2d(:,:) = ( emps(:,:) - rnf(:,:) ) * sn(:,:,1) * tmask(:,:,1) 504 504 CALL histwrite( nid_T, "sosalflx", it, zw2d , ndim_hT, ndex_hT ) ! c/d salt flux 505 505 CALL histwrite( nid_T, "sohefldo", it, qns + qsr , ndim_hT, ndex_hT ) ! total heat flux … … 700 700 CALL histwrite( id_i, "vomecrty", kt, vn , jpi*jpj*jpk, idex ) ! now j-velocity 701 701 CALL histwrite( id_i, "vovecrtz", kt, wn , jpi*jpj*jpk, idex ) ! now k-velocity 702 CALL histwrite( id_i, "sowaflup", kt, emp, jpi*jpj , idex ) ! freshwater budget702 CALL histwrite( id_i, "sowaflup", kt, (emp-rnf), jpi*jpj , idex ) ! freshwater budget 703 703 CALL histwrite( id_i, "sohefldo", kt, qsr + qns, jpi*jpj , idex ) ! total heat flux 704 704 CALL histwrite( id_i, "soshfldo", kt, qsr , jpi*jpj , idex ) ! solar heat flux -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DIA/diawri_dimg.h90
r1685 r1938 42 42 !! level 2: vtau(:,:) * vmask(:,:,1) meridional stress in N. m-2 43 43 !! level 3: qsr + qns total heat flux (W/m2) 44 !! level 4: emp (:,:)E-P flux (mm/day)44 !! level 4: ( emp (:,:)-rnf(:,:) ) E-P flux (mm/day) 45 45 !! level 5: tb (:,:,1)-sst model SST -forcing sst (degree C) ! deprecated 46 46 !! level 6: bsfb(:,:) streamfunction (m**3/s) … … 54 54 !! level 14: qct(:,:) equivalent flux due to treshold SST 55 55 !! level 15: fbt(:,:) feedback term . 56 !! level 16: emps(:,:)concentration/dilution water flux56 !! level 16: ( emps(:,:) - rnf(:,:) ) concentration/dilution water flux 57 57 !! level 17: fsalt(:,:) Ice=>ocean net freshwater 58 58 !! level 18: gps(:,:) the surface pressure (m). … … 167 167 fsel(:,:,2 ) = fsel(:,:,2 ) + vtau(:,:) * vmask(:,:,1) 168 168 fsel(:,:,3 ) = fsel(:,:,3 ) + qsr (:,:) + qns (:,:) 169 fsel(:,:,4 ) = fsel(:,:,4 ) + emp (:,:)169 fsel(:,:,4 ) = fsel(:,:,4 ) + ( emp(:,:)-rnf(:,:) ) 170 170 ! fsel(:,:,5 ) = fsel(:,:,5 ) + tb (:,:,1) !RB not used 171 171 fsel(:,:,6 ) = fsel(:,:,6 ) + sshn(:,:) … … 179 179 ! fsel(:,:,14) = fsel(:,:,14) + qct(:,:) 180 180 ! fsel(:,:,15) = fsel(:,:,15) + fbt(:,:) 181 fsel(:,:,16) = fsel(:,:,16) + emps(:,:)181 fsel(:,:,16) = fsel(:,:,16) + ( emps(:,:)-rnf(:,:) ) 182 182 #ifdef key_diaspr 183 183 fsel(:,:,18) = fsel(:,:,18) + gps(:,:)/g … … 242 242 fsel(:,:,2 ) = vtau(:,:) * vmask(:,:,1) 243 243 fsel(:,:,3 ) = (qsr (:,:) + qns (:,:)) * tmask(:,:,1) 244 fsel(:,:,4 ) = emp (:,:) * tmask(:,:,1)244 fsel(:,:,4 ) = ( emp(:,:)-rnf(:,:) ) * tmask(:,:,1) 245 245 ! fsel(:,:,5 ) = (tb (:,:,1) - sf_sst(1)%fnow(:,:) ) *tmask(:,:,1) !RB not used 246 246 … … 255 255 ! fsel(:,:,14) = qct(:,:) 256 256 ! fsel(:,:,15) = fbt(:,:) 257 fsel(:,:,16) = emps(:,:) * tmask(:,:,1)257 fsel(:,:,16) = ( emps(:,:)-rnf(:,:) ) * tmask(:,:,1) 258 258 #ifdef key_diaspr 259 259 fsel(:,:,18) = gps(:,:) /g -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DOM/closea.F90
r1601 r1938 180 180 INTEGER :: ji, jj, jc, jn ! dummy loop indices 181 181 REAL(wp) :: zze2 182 REAL(wp), DIMENSION (jpncs) :: zemp 182 REAL(wp), DIMENSION (jpncs) :: zfwf 183 184 REAL(wp), DIMENSION (jpi,jpj) :: fwf !: fresh water flux,for volume: emp-rnf 185 REAL(wp), DIMENSION (jpi,jpj) :: fwfs !: fresh water flux, for conc/dilution effect: emps-rnf 183 186 !!---------------------------------------------------------------------- 184 187 ! … … 216 219 ! !--------------------! 217 220 ! ! update emp, emps ! 218 z emp= 0.e0 !--------------------!221 zfwf = 0.e0 !--------------------! 219 222 DO jc = 1, jpncs 220 223 DO jj = ncsj1(jc), ncsj2(jc) 221 224 DO ji = ncsi1(jc), ncsi2(jc) 222 z emp(jc) = zemp(jc) + e1t(ji,jj) * e2t(ji,jj) * emp(ji,jj) * tmask_i(ji,jj)225 zfwf(jc) = zfwf(jc) + e1t(ji,jj) * e2t(ji,jj) * ( emp(ji,jj)-rnf(ji,jj) ) * tmask_i(ji,jj) 223 226 END DO 224 227 END DO 225 228 END DO 226 IF( lk_mpp ) CALL mpp_sum ( z emp(:) , jpncs ) ! mpp: sum over all the global domain229 IF( lk_mpp ) CALL mpp_sum ( zfwf(:) , jpncs ) ! mpp: sum over all the global domain 227 230 228 231 IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN ! Black Sea case for ORCA_R2 configuration 229 zze2 = ( z emp(3) + zemp(4) ) / 2.230 z emp(3) = zze2231 z emp(4) = zze2232 zze2 = ( zfwf(3) + zfwf(4) ) / 2. 233 zfwf(3) = zze2 234 zfwf(4) = zze2 232 235 ENDIF 233 236 … … 236 239 IF( ncstt(jc) == 0 ) THEN 237 240 ! water/evap excess is shared by all open ocean 238 emp (:,:) = emp (:,:) + z emp(jc) / surf(jpncs+1)239 emps(:,:) = emps(:,:) + z emp(jc) / surf(jpncs+1)241 emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 242 emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 240 243 ELSEIF( ncstt(jc) == 1 ) THEN 241 244 ! Excess water in open sea, at outflow location, excess evap shared 242 IF ( z emp(jc) <= 0.e0 ) THEN245 IF ( zfwf(jc) <= 0.e0 ) THEN 243 246 DO jn = 1, ncsnr(jc) 244 247 ji = mi0(ncsir(jc,jn)) … … 246 249 IF ( ji > 1 .AND. ji < jpi & 247 250 .AND. jj > 1 .AND. jj < jpj ) THEN 248 emp (ji,jj) = emp (ji,jj) + z emp(jc) / &251 emp (ji,jj) = emp (ji,jj) + zfwf(jc) / & 249 252 (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 250 emps(ji,jj) = emps(ji,jj) + z emp(jc) / &253 emps(ji,jj) = emps(ji,jj) + zfwf(jc) / & 251 254 (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 252 255 END IF 253 256 END DO 254 257 ELSE 255 emp (:,:) = emp (:,:) + z emp(jc) / surf(jpncs+1)256 emps(:,:) = emps(:,:) + z emp(jc) / surf(jpncs+1)258 emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 259 emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 257 260 ENDIF 258 261 ELSEIF( ncstt(jc) == 2 ) THEN … … 263 266 ji = mi0(ncsir(jc,jn)) 264 267 jj = mj0(ncsjr(jc,jn)) ! Location of outflow in open ocean 265 emp (ji,jj) = emp (ji,jj) + z emp(jc) &268 emp (ji,jj) = emp (ji,jj) + zfwf(jc) & 266 269 / (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj) ) 267 emps(ji,jj) = emps(ji,jj) + z emp(jc) &270 emps(ji,jj) = emps(ji,jj) + zfwf(jc) & 268 271 / (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj) ) 269 272 END DO … … 273 276 DO jj = ncsj1(jc), ncsj2(jc) 274 277 DO ji = ncsi1(jc), ncsi2(jc) 275 emp (ji,jj) = emp (ji,jj) - z emp(jc) / surf(jc)276 emps(ji,jj) = emps(ji,jj) - z emp(jc) / surf(jc)278 emp (ji,jj) = emp (ji,jj) - zfwf(jc) / surf(jc) 279 emps(ji,jj) = emps(ji,jj) - zfwf(jc) / surf(jc) 277 280 END DO 278 281 END DO … … 280 283 END DO 281 284 ! 282 CALL lbc_lnk( emp , 'T', 1. ) 283 CALL lbc_lnk( emps, 'T', 1. ) 285 fwf(:,:) = emp(:,:) - rnf(:,:) 286 fwfs(:,:) = emps(:,:) - rnf(:,:) 287 CALL lbc_lnk( fwf , 'T', 1. ) 288 CALL lbc_lnk( fwfs, 'T', 1. ) 284 289 ! 285 290 END SUBROUTINE sbc_clo -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DYN/dynspg_flt.F90
r1792 r1938 85 85 !! where (spgu,spgv) are given by: 86 86 !! spgu = vertical sum[ e3u (ub+ 2 rdt ua ) ] 87 !! - grav 2 rdt hu /e1u di[sshn + emp]87 !! - grav 2 rdt hu /e1u di[sshn + (emp-rnf)] 88 88 !! spgv = vertical sum[ e3v (vb+ 2 rdt va) ] 89 !! - grav 2 rdt hv /e2v dj[sshn + emp]89 !! - grav 2 rdt hv /e2v dj[sshn + (emp-rnf)] 90 90 !! and define the first guess from previous computation : 91 91 !! zbtd = btda -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DYN/dynspg_ts.F90
r1779 r1938 379 379 DO jj = 2, jpjm1 ! leap-frog on ssh_e 380 380 DO ji = fs_2, fs_jpim1 ! vector opt. 381 ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * emp(ji,jj) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1)381 ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * ( emp(ji,jj)-rnf(ji,jj) ) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1) 382 382 END DO 383 383 END DO -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DYN/sshwzv.F90
r1792 r1938 154 154 155 155 ! ! Sea surface elevation time stepping 156 ssha(:,:) = ( sshb(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) ) ) * tmask(:,:,1)156 ssha(:,:) = ( sshb(:,:) - z2dt * ( zraur * ( emp(:,:)-rnf(:,:) ) + zhdiv(:,:) ) ) * tmask(:,:,1) 157 157 158 158 #if defined key_obc -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/OBC/obcvol.F90
r1739 r1938 97 97 ! --------------------------------------------------------------------------- 98 98 99 zCflxemp = SUM ( emp(:,:)*obctmsk(:,:)* e1t(:,:) * e2t(:,:) / rau0 )99 zCflxemp = SUM ( ( emp(:,:)-rnf(:,:) )*obctmsk(:,:)* e1t(:,:) * e2t(:,:) / rau0 ) 100 100 101 101 IF( lk_mpp ) CALL mpp_sum( zCflxemp ) ! sum over the global domain -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbc_oce.F90
r1705 r1938 49 49 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emp !: freshwater budget: volume flux [Kg/m2/s] 50 50 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emps !: freshwater budget: concentration/dillution [Kg/m2/s] 51 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf !: river runoff [Kg/m2/s] 51 52 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: emp_tot !: total evaporation - (liquid + solid) precpitation over oce and ice 52 53 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: tprecip !: total precipitation [Kg/m2/s] -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbcfwb.F90
r1715 r1938 31 31 REAL(wp) :: a_fwb_b ! annual domain averaged freshwater budget 32 32 REAL(wp) :: a_fwb ! for 2 year before (_b) and before year. 33 REAL(wp) :: empold ! empold to be suppressed33 REAL(wp) :: fwfold ! fwfold to be suppressed 34 34 REAL(wp) :: area ! global mean ocean surface (interior domain) 35 35 … … 65 65 INTEGER :: inum ! temporary logical unit 66 66 INTEGER :: ikty, iyear ! 67 REAL(wp) :: z_ emp, z_emp_nsrf ! temporary scalars67 REAL(wp) :: z_fwf, z_fwf_nsrf ! temporary scalars 68 68 REAL(wp) :: zsurf_neg, zsurf_pos, zsurf_tospread 69 69 REAL(wp), DIMENSION(jpi,jpj) :: ztmsk_neg, ztmsk_pos, ztmsk_tospread … … 79 79 IF( kn_fwb == 1 ) WRITE(numout,*) ' instantaneously set to zero' 80 80 IF( kn_fwb == 2 ) WRITE(numout,*) ' adjusted from previous year budget' 81 IF( kn_fwb == 3 ) WRITE(numout,*) ' empset to zero and spread out over erp area'81 IF( kn_fwb == 3 ) WRITE(numout,*) ' fwf set to zero and spread out over erp area' 82 82 ! 83 83 IF( kn_fwb == 3 .AND. nn_sssr /= 2 ) & … … 101 101 102 102 ! 103 CASE ( 1 ) ! global mean empset to zero103 CASE ( 1 ) ! global mean fwf set to zero 104 104 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 105 z_ emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area106 IF( lk_mpp ) CALL mpp_sum( z_ emp ) ! sum over the global domain107 emp (:,:) = emp (:,:) - z_ emp108 emps(:,:) = emps(:,:) - z_ emp109 ENDIF 110 ! 111 CASE ( 2 ) ! empbudget adjusted from the previous year105 z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area 106 IF( lk_mpp ) CALL mpp_sum( z_fwf ) ! sum over the global domain 107 emp (:,:) = emp (:,:) - z_fwf 108 emps(:,:) = emps(:,:) - z_fwf 109 ENDIF 110 ! 111 CASE ( 2 ) ! fwf budget adjusted from the previous year 112 112 ! initialisation 113 113 IF( kt == nit000 ) THEN 114 ! Read the corrective factor on precipitations ( empold)114 ! Read the corrective factor on precipitations (fwfold) 115 115 CALL ctl_opn( inum, 'EMPave_old.dat', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 116 116 READ ( inum, "(24X,I8,2ES24.16)" ) iyear, a_fwb_b, a_fwb 117 117 CLOSE( inum ) 118 empold = a_fwb ! current year freshwater budget correction118 fwfold = a_fwb ! current year freshwater budget correction 119 119 ! ! estimate from the previous year budget 120 120 IF(lwp)WRITE(numout,*) 121 IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear , ' freshwater budget correction = ', empold121 IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear , ' freshwater budget correction = ', fwfold 122 122 IF(lwp)WRITE(numout,*)' year = ',iyear-1, ' freshwater budget read = ', a_fwb 123 123 IF(lwp)WRITE(numout,*)' year = ',iyear-2, ' freshwater budget read = ', a_fwb_b 124 124 ENDIF 125 125 ! 126 ! Update empold if new year start126 ! Update fwfold if new year start 127 127 ikty = 365 * 86400 / rdttra(1) !!bug use of 365 days leap year or 360d year !!!!!!! 128 128 IF( MOD( kt, ikty ) == 0 ) THEN … … 132 132 a_fwb = a_fwb * 1.e+3 / ( area * 86400. * 365. ) ! convert in Kg/m3/s = mm/s 133 133 !!gm ! !!bug 365d year 134 empold = a_fwb ! current year freshwater budget correction134 fwfold = a_fwb ! current year freshwater budget correction 135 135 ! ! estimate from the previous year budget 136 136 ENDIF … … 138 138 ! correct the freshwater fluxes 139 139 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 140 emp (:,:) = emp (:,:) + empold141 emps(:,:) = emps(:,:) + empold142 ENDIF 143 ! 144 ! save empold value in a file140 emp (:,:) = emp (:,:) + fwfold 141 emps(:,:) = emps(:,:) + fwfold 142 ENDIF 143 ! 144 ! save fwfold value in a file 145 145 IF( kt == nitend .AND. lwp ) THEN 146 146 CALL ctl_opn( inum, 'EMPave.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) … … 149 149 ENDIF 150 150 ! 151 CASE ( 3 ) ! global empset to zero and spread out over erp area151 CASE ( 3 ) ! global fwf set to zero and spread out over erp area 152 152 ! 153 153 IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN … … 161 161 zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:) ) 162 162 163 ! empglobal mean164 z_ emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area163 ! fwf global mean 164 z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area 165 165 ! 166 IF( lk_mpp ) CALL mpp_sum( z_ emp)166 IF( lk_mpp ) CALL mpp_sum( z_fwf ) 167 167 168 IF( z_ emp< 0.e0 ) THEN168 IF( z_fwf < 0.e0 ) THEN 169 169 ! to spread out over >0 erp area to increase evaporation damping process 170 170 zsurf_tospread = zsurf_pos … … 176 176 ENDIF 177 177 178 ! empglobal mean over <0 or >0 erp area179 z_ emp_nsrf = SUM( e1e2_i(:,:) * z_emp) / ( zsurf_tospread + rsmall )178 ! fwf global mean over <0 or >0 erp area 179 z_fwf_nsrf = SUM( e1e2_i(:,:) * z_fwf ) / ( zsurf_tospread + rsmall ) 180 180 ! weight to respect erp field 2D structure 181 181 z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( SUM( ztmsk_tospread(:,:) * erp(:,:) * e1e2_i(:,:) ) + rsmall ) 182 182 ! final correction term to apply 183 zerp_cor(:,:) = -1. * z_ emp_nsrf * zsurf_tospread * z_wgt(:,:)183 zerp_cor(:,:) = -1. * z_fwf_nsrf * zsurf_tospread * z_wgt(:,:) 184 184 185 185 CALL lbc_lnk( zerp_cor, 'T', 1. ) … … 190 190 191 191 IF( nprint == 1 .AND. lwp ) THEN 192 IF( z_ emp< 0.e0 ) THEN193 WRITE(numout,*)' z_ emp< 0'192 IF( z_fwf < 0.e0 ) THEN 193 WRITE(numout,*)' z_fwf < 0' 194 194 WRITE(numout,*)' SUM(erp+) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 195 195 ELSE 196 WRITE(numout,*)' z_ emp>= 0'196 WRITE(numout,*)' z_fwf >= 0' 197 197 WRITE(numout,*)' SUM(erp-) = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 198 198 ENDIF 199 WRITE(numout,*)' SUM(empG) = ', SUM( z_ emp*e1e2_i(:,:) )*1.e-3,' m3.s-1'200 WRITE(numout,*)' z_ emp = ', z_emp,' mm.s-1'201 WRITE(numout,*)' z_ emp_nsrf = ', z_emp_nsrf ,' mm.s-1'199 WRITE(numout,*)' SUM(empG) = ', SUM( z_fwf*e1e2_i(:,:) )*1.e-3,' m3.s-1' 200 WRITE(numout,*)' z_fwf = ', z_fwf ,' mm.s-1' 201 WRITE(numout,*)' z_fwf_nsrf = ', z_fwf_nsrf ,' mm.s-1' 202 202 WRITE(numout,*)' MIN(zerp_cor) = ', MINVAL(zerp_cor) 203 203 WRITE(numout,*)' MAX(zerp_cor) = ', MAXVAL(zerp_cor) -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbcmod.F90
r1792 r1938 185 185 INTEGER, INTENT(in) :: kt ! ocean time step 186 186 !!--------------------------------------------------------------------- 187 188 emp(:,:)=0.0 189 emps(:,:)=0.0 190 rnf(:,:)=0.0 187 191 188 192 CALL iom_setkt( kt + nn_fsbc - 1 ) ! in sbc, iom_put is called every nn_fsbc time step … … 237 241 ! 238 242 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 239 CALL iom_put( "emp " , emp ) ! upward water flux240 CALL iom_put( "emps " , emps ) ! c/d water flux241 CALL iom_put( "qns+qsr" , qns + qsr )! total heat flux (caution if ln_dm2dc=true, to be242 CALL iom_put( "qns" , qns )! solar heat flux moved after the call to iom_setkt)243 CALL iom_put( "qsr" , qsr )! solar heat flux moved after the call to iom_setkt)243 CALL iom_put( "emp-rnf" , (emp-rnf) ) ! upward water flux 244 CALL iom_put( "emps-rnf" , (emps-rnf) ) ! c/d water flux 245 CALL iom_put( "qns+qsr" , qns + qsr ) ! total heat flux (caution if ln_dm2dc=true, to be 246 CALL iom_put( "qns" , qns ) ! solar heat flux moved after the call to iom_setkt) 247 CALL iom_put( "qsr" , qsr ) ! solar heat flux moved after the call to iom_setkt) 244 248 IF( nn_ice > 0 ) CALL iom_put( "ice_cover", fr_i ) ! ice fraction 245 249 ENDIF … … 254 258 IF(ln_ctl) THEN ! print mean trends (used for debugging) 255 259 CALL prt_ctl(tab2d_1=fr_i , clinfo1=' fr_i - : ', mask1=tmask, ovlap=1 ) 256 CALL prt_ctl(tab2d_1= emp , clinfo1=' emp - : ', mask1=tmask, ovlap=1 )257 CALL prt_ctl(tab2d_1= emps , clinfo1=' emps - : ', mask1=tmask, ovlap=1 )260 CALL prt_ctl(tab2d_1=(emp-rnf) , clinfo1=' emp-rnf - : ', mask1=tmask, ovlap=1 ) 261 CALL prt_ctl(tab2d_1=(emps-rnf), clinfo1=' emps-rnf - : ', mask1=tmask, ovlap=1 ) 258 262 CALL prt_ctl(tab2d_1=qns , clinfo1=' qns - : ', mask1=tmask, ovlap=1 ) 259 263 CALL prt_ctl(tab2d_1=qsr , clinfo1=' qsr - : ', mask1=tmask, ovlap=1 ) -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbcrnf.F90
r1730 r1938 32 32 TYPE(FLD_N) , PUBLIC :: sn_rnf !: information about the runoff file to be read 33 33 TYPE(FLD_N) , PUBLIC :: sn_cnf !: information about the runoff mouth file to be read 34 TYPE(FLD_N) :: sn_sal_rnf !: information about the salinities of runoff file to be read 35 TYPE(FLD_N) :: sn_tmp_rnf !: information about the temperatures of runoff file to be read 36 TYPE(FLD_N) :: sn_dep_rnf !: information about the depth which river inflow affects 34 37 LOGICAL , PUBLIC :: ln_rnf_mouth = .false. !: specific treatment in mouths vicinity 35 38 REAL(wp) , PUBLIC :: rn_hrnf = 0.e0 !: runoffs, depth over which enhanced vertical mixing is used 36 39 REAL(wp) , PUBLIC :: rn_avt_rnf = 0.e0 !: runoffs, value of the additional vertical mixing coef. [m2/s] 40 LOGICAL , PUBLIC :: ln_rnf_att = .false. !: river runoffs attributes (temp, sal & depth) are specified in a file 37 41 REAL(wp) , PUBLIC :: rn_rfact = 1.e0 !: multiplicative factor for runoff 38 42 … … 42 46 43 47 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnf ! structure of input SST (file information, fields read) 48 49 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_sal_rnf !: structure of input salinity (file information, fields read) 50 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_tmp_rnf !: structure of input tmeperature (file information, fields read) 51 52 ! REAL, PUBLIC, DIMENSION(jpi,jpj) :: rnf !: mass flux of river runoff (in kg/m2/s) 53 REAL, PUBLIC, DIMENSION(jpi,jpj) :: rnf_dep !: depth of runoff in m 54 INTEGER, PUBLIC, DIMENSION(jpi,jpj) :: rnf_mod_dep !: depth of runoff in model levels 55 REAL, PUBLIC, DIMENSION(jpi,jpj) :: rnf_sal !: salinity of river runoff 56 REAL, PUBLIC, DIMENSION(jpi,jpj) :: rnf_tmp !: temperature of river runoff 57 58 INTEGER :: ji, jj ,jk ! dummy loop indices 59 INTEGER :: inum ! temporary logical unit 60 61 !! * Substitutions 62 # include "domzgr_substitute.h90" 44 63 45 64 !!---------------------------------------------------------------------- … … 77 96 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 78 97 ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 79 ENDIF 80 CALL sbc_rnf_init(sf_rnf) 98 99 ALLOCATE( sf_sal_rnf(1), STAT=ierror ) 100 IF( ierror > 0 ) THEN 101 CALL ctl_stop( 'sbc_sal_rnf: unable to allocate sf_sal_rnf structure' ) ; RETURN 102 ENDIF 103 ALLOCATE( sf_sal_rnf(1)%fnow(jpi,jpj) ) 104 ALLOCATE( sf_sal_rnf(1)%fdta(jpi,jpj,2) ) 105 106 ALLOCATE( sf_tmp_rnf(1), STAT=ierror ) 107 IF( ierror > 0 ) THEN 108 CALL ctl_stop( 'sbc_tmp_rnf: unable to allocate sf_tmp_rnf structure' ) ; RETURN 109 ENDIF 110 ALLOCATE( sf_tmp_rnf(1)%fnow(jpi,jpj) ) 111 ALLOCATE( sf_tmp_rnf(1)%fdta(jpi,jpj,2) ) 112 ENDIF 113 CALL sbc_rnf_init( sf_rnf, sf_tmp_rnf, sf_sal_rnf ) 81 114 ENDIF 82 115 … … 87 120 CALL fld_read( kt, nn_fsbc, sf_rnf ) ! Read Runoffs data and provides it 88 121 ! ! at the current time-step 122 IF ( ln_rnf_att ) THEN 123 CALL fld_read ( kt, nn_fsbc, sf_sal_rnf ) 124 CALL fld_read ( kt, nn_fsbc, sf_tmp_rnf ) 125 ENDIF 89 126 90 127 ! Runoff reduction only associated to the ORCA2_LIM configuration … … 101 138 102 139 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(:,:) ) 140 rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:) ) 141 IF ( ln_rnf_att ) THEN 142 rnf_sal(:,:) = ( sf_sal_rnf(1)%fnow(:,:) ) 143 rnf_tmp(:,:) = ( sf_tmp_rnf(1)%fnow(:,:) ) 144 ELSE 145 rnf_sal(:,:) = 0 146 rnf_tmp(:,:) = -999 147 ENDIF 105 148 CALL iom_put( "runoffs", sf_rnf(1)%fnow ) ! runoffs 106 149 ENDIF … … 111 154 112 155 113 SUBROUTINE sbc_rnf_init( sf_rnf )156 SUBROUTINE sbc_rnf_init( sf_rnf, sf_tmp_rnf, sf_sal_rnf ) 114 157 !!---------------------------------------------------------------------- 115 158 !! *** ROUTINE sbc_rnf_init *** … … 121 164 !! ** Action : - read parameters 122 165 !!---------------------------------------------------------------------- 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 166 TYPE(FLD), INTENT(inout), DIMENSION(:) :: sf_rnf, sf_tmp_rnf, sf_sal_rnf ! input data 167 CHARACTER(len=32) :: rn_dep_file ! runoff file name 168 !! 169 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, sn_sal_rnf, sn_tmp_rnf, sn_dep_rnf, & 170 & ln_rnf_mouth, ln_rnf_att, rn_hrnf, rn_avt_rnf, rn_rfact 127 171 !!---------------------------------------------------------------------- 128 172 … … 136 180 sn_cnf = FLD_N( 'runoffs', 0 , 'sorunoff' , .FALSE. , .true. , 'yearly' , '' , '' ) 137 181 182 sn_sal_rnf = FLD_N( 'runoffs', 24. , 'rosaline' , .TRUE. , .true. , 'yearly' , '' , '' ) 183 sn_tmp_rnf = FLD_N( 'runoffs', 24. , 'rotemper' , .TRUE. , .true. , 'yearly' , '' , '' ) 184 sn_dep_rnf = FLD_N( 'runoffs', 0. , 'rodepth' , .FALSE. , .true. , 'yearly' , '' , '' ) 138 185 ! 139 186 REWIND ( numnam ) ! Read Namelist namsbc_rnf … … 160 207 IF(lwp) WRITE(numout,*) 161 208 IF(lwp) WRITE(numout,*) ' runoffs directly provided in the precipitations' 209 IF ( ln_rnf_att ) CALL ctl_warn( 'runoffs already included in precipitations & so runoff attributes not included' ) 162 210 ! 163 211 ELSE ! runoffs read in a file : set sf_rnf structure … … 166 214 ! fill sf_rnf with sn_rnf and control print 167 215 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 168 ! 216 217 IF ( ln_rnf_att ) THEN 218 CALL fld_fill (sf_sal_rnf, (/ sn_sal_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' ) 219 CALL fld_fill (sf_tmp_rnf, (/ sn_tmp_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' ) 220 221 rn_dep_file = TRIM( cn_dir )//TRIM( sn_dep_rnf%clname ) 222 CALL iom_open ( rn_dep_file, inum ) ! open file 223 CALL iom_get ( inum, jpdom_data, sn_dep_rnf%clvar, rnf_dep ) ! read the river mouth array 224 CALL iom_close( inum ) ! close file 225 226 rnf_mod_dep(:,:)=0 227 DO jj=1,jpj 228 DO ji=1,jpi 229 IF ( rnf_dep(ji,jj) > 0.e0 ) THEN 230 jk=2 231 DO WHILE ( jk/=jpkm1 .AND. fsdept(ji,jj,jk) < rnf_dep(ji,jj) ); jk=jk+1; ENDDO 232 rnf_mod_dep(ji,jj)=jk 233 ELSE IF ( rnf_dep(ji,jj) .eq. -1 ) THEN 234 rnf_mod_dep(ji,jj)=1 235 ELSE IF ( rnf_dep(ji,jj) .eq. -999 ) THEN 236 rnf_mod_dep(ji,jj)=jpkm1 237 ELSE IF ( rnf_dep(ji,jj) /= 0 ) THEN 238 CALL ctl_stop( 'runoff depth not positive, and not -999 or -1, rnf value in file fort.999' ) 239 WRITE(999,*) 'ji, jj, rnf(ji,jj) :', ji, jj, rnf(ji,jj) 240 ENDIF 241 ENDDO 242 ENDDO 243 ELSE 244 rnf_mod_dep(:,:)=1 245 ENDIF 246 ! 169 247 ENDIF 170 248 … … 179 257 ! 180 258 ! ! Number of level over which Kz increase 259 IF ( ln_rnf_att ) & 260 & CALL ctl_warn( 'increased mixing turned on but effects may already be spread through depth by ln_rnf_att' ) 181 261 nkrnf = 0 182 262 IF( rn_hrnf > 0.e0 ) THEN -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/TRA/trasbc.F90
r1739 r1938 21 21 USE in_out_manager ! I/O manager 22 22 USE prtctl ! Print control 23 USE sbcrnf ! River runoff 24 USE sbcmod ! ln_rnf 23 25 24 26 IMPLICIT NONE … … 103 105 INTEGER, INTENT(in) :: kt ! ocean time-step index 104 106 !! 105 INTEGER :: ji, jj ! dummy loop indices 106 REAL(wp) :: zta, zsa, zsrau, zse3t ! temporary scalars 107 INTEGER :: ji, jj, jk ! dummy loop indices 108 REAL(wp) :: zta, zsa ! temporary scalars, adjustment to temperature and salinity 109 REAL(wp) :: azta, azsa ! temporary scalars, calculations of automatic change to temp & sal due to vvl (done elsewhere) 110 REAL(wp) :: zsrau, zse3t, zdep ! temporary scalars, 1/density, 1/height of box, 1/height of effected water column 111 REAL(wp) :: dheat, dsalt ! total change of temperature and salinity 112 REAL(wp) :: tot_sal1, tot_tmp1 107 113 !!---------------------------------------------------------------------- 108 114 … … 125 131 IF( .NOT.ln_traqsr ) qsr(:,:) = 0.e0 ! no solar radiation penetration 126 132 127 ! Concentration dillution effect on (t,s) 133 ! Concentration dillution effect on (t,s) due to evapouration, precipitation and qns, but not river runoff 128 134 DO jj = 2, jpj 129 135 DO ji = fs_2, fs_jpim1 ! vector opt. … … 132 138 #endif 133 139 IF( lk_vvl) THEN 134 zta = ro0cpr * qns(ji,jj) * zse3t & ! temperature : heat flux135 & - emp(ji,jj) * zsrau * tn(ji,jj,1) * zse3t ! & cooling/heating effet of EMP flux140 zta = ro0cpr * qns(ji,jj) * zse3t & ! temperature : heat flux 141 & - emp(ji,jj) * zsrau * tn(ji,jj,1) * zse3t ! & cooling/heating effet of EMP flux 136 142 zsa = 0.e0 ! No salinity concent./dilut. effect 137 143 ELSE 138 zta = ro0cpr * qns(ji,jj) * zse3t ! temperature : heat flux139 zsa = emps(ji,jj) * zsrau * sn(ji,jj,1) * zse3t ! salinity : concent./dilut. effect144 zta = ro0cpr * qns(ji,jj) * zse3t ! temperature : heat flux 145 zsa = emps(ji,jj) * zsrau * sn(ji,jj,1) * zse3t ! salinity : concent./dilut. effect 140 146 ENDIF 141 147 ta(ji,jj,1) = ta(ji,jj,1) + zta ! add the trend to the general tracer trend … … 143 149 END DO 144 150 END DO 151 152 IF ( ln_rnf ) THEN 153 ! Concentration / dilution effect on (t,s) due to river runoff 154 DO jj=1,jpj 155 DO ji=1,jpi 156 rnf_dep(ji,jj)=0 157 DO jk=1,rnf_mod_dep(ji,jj) ! recalculates rnf_dep to be the depth 158 rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk) ! in metres to the bottom of the relevant grid box 159 ENDDO 160 zdep = 1. / rnf_dep(ji,jj) 161 zse3t= 1. / fse3t(ji,jj,1) 162 IF ( rnf_tmp(ji,jj) == -999 ) rnf_tmp(ji,jj)=tn(ji,jj,1) ! if not specified set runoff temp to be sst 163 164 IF ( rnf(ji,jj) .gt. 0.0 ) THEN 165 166 IF( lk_vvl) THEN 167 !!!indirect flux, concentration or dilution effect 168 !!!force a dilution effect in all levels; 169 dheat=0.0 170 dsalt=0.0 171 DO jk=1, rnf_mod_dep(ji,jj) 172 zta = -tn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 173 zsa = -sn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 174 ta(ji,jj,jk)=ta(ji,jj,jk)+zta 175 sa(ji,jj,jk)=sa(ji,jj,jk)+zsa 176 dheat=dheat+zta*fse3t(ji,jj,jk) 177 dsalt=dsalt+zsa*fse3t(ji,jj,jk) 178 ENDDO 179 !!!negate this total change in heat and salt content from top level 180 zta=-dheat*zse3t 181 zsa=-dsalt*zse3t 182 ta(ji,jj,1)=ta(ji,jj,1)+zta 183 sa(ji,jj,1)=sa(ji,jj,1)+zsa 184 185 !!!direct flux 186 zta = rnf_tmp(ji,jj) * rnf(ji,jj) * zsrau * zdep 187 zsa = rnf_sal(ji,jj) * rnf(ji,jj) * zsrau * zdep 188 189 DO jk=1, rnf_mod_dep(ji,jj) 190 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 191 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 192 ENDDO 193 194 ELSE 195 DO jk=1, rnf_mod_dep(ji,jj) 196 zta = ( rnf_tmp(ji,jj)-tn(ji,jj,jk) ) * rnf(ji,jj) * zsrau * zdep 197 zsa = ( rnf_sal(ji,jj)-sn(ji,jj,jk) ) * rnf(ji,jj) * zsrau * zdep 198 ta(ji,jj,jk) = ta(ji,jj,jk) + zta 199 sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 200 ENDDO 201 ENDIF 202 203 ELSEIF (rnf(ji,jj) .lt. 0.) THEN !! for use in baltic when flow is out of domain, want no change in temp and sal 204 205 IF( lk_vvl) THEN 206 !calculate automatic adjustment to sal and temp due to dilution/concentraion effect 207 azta = -tn(ji,jj,1) * rnf(ji,jj) * zsrau * zse3t 208 azsa = -sn(ji,jj,1) * rnf(ji,jj) * zsrau * zse3t 209 !!!negate this change in sal and temp 210 ta(ji,jj,1)=ta(ji,jj,1)-azta 211 sa(ji,jj,1)=sa(ji,jj,1)-azsa 212 ENDIF 213 214 ENDIF 215 216 ENDDO 217 ENDDO 218 219 ENDIF 145 220 146 221 IF( l_trdtra ) THEN ! save the sbc trends for diagnostic -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/ZDF/zdfkpp.F90
r1695 r1938 453 453 zBosol(ji,jj) = grav * zthermal * qsr(ji,jj) 454 454 ! Non radiative surface buoyancy force 455 zBo (ji,jj) = grav * zthermal * qns(ji,jj) - grav * zhalin * emps(ji,jj)455 zBo (ji,jj) = grav * zthermal * qns(ji,jj) - grav * zhalin * ( emps(ji,jj)-rnf(ji,jj) ) 456 456 ! Surface Temperature flux for non-local term 457 457 wt0(ji,jj) = - ( qsr(ji,jj) + qns(ji,jj) )* ro0cpr * tmask(ji,jj,1) 458 458 ! Surface salinity flux for non-local term 459 ws0(ji,jj) = - ( emps(ji,jj) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1)459 ws0(ji,jj) = - ( ( emps(ji,jj)-rnf(ji,jj) ) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1) 460 460 ENDDO 461 461 ENDDO -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/cla.F90
r1146 r1938 163 163 DO ji = mi0(148), mi1(160) 164 164 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 165 zempred = zempred + emp(ji,jj) * zwei165 zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 166 166 END DO 167 167 END DO … … 365 365 DO ji = mi0(141),mi1(181) 366 366 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 367 zempmed = zempmed + emp(ji,jj) * zwei367 zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 368 368 END DO 369 369 END DO … … 374 374 DO jj = mj0(96),mj1(96) 375 375 DO ji = mi0(148),mi1(148) 376 zempmed = zempmed - emp(ji ,jj) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) &377 - emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)376 zempmed = zempmed - ( emp(ji ,jj)-rnf(ji ,jj) ) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) & 377 - ( emp(ji+1,jj)-rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj) 378 378 END DO 379 379 END DO … … 389 389 zu3_ms(:) = zu3_ms_i(:) 390 390 391 ! velocity profile at 139,101 South point + empon surface391 ! velocity profile at 139,101 South point + (emp-rnf) on surface 392 392 DO jk = 1, 14 393 393 DO jj = mj0(102), mj1(102) … … 399 399 400 400 ! profile at East Gibraltar 401 ! velocity profile at 141,102 + empon surface401 ! velocity profile at 141,102 + (emp-rnf) on surface 402 402 DO jk = 1, 14 403 403 DO jj = mj0(102), mj1(102) -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/cla_div.F90
r1146 r1938 124 124 DO ji = mi0(148), mi1(160) 125 125 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 126 zempred = zempred + emp(ji,jj) * zwei126 zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 127 127 END DO 128 128 END DO … … 234 234 DO ji = mi0(141),mi1(181) 235 235 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 236 zempmed = zempmed + emp(ji,jj) * zwei236 zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 237 237 END DO 238 238 END DO … … 242 242 DO jj = mj0(96), mj1(96) 243 243 DO ji = mi0(148),mi1(148) 244 zempmed = zempmed - emp(ji , jj) * tmask(ji , jj,1) * e1t(ji , jj) * e2t(ji , jj) &245 - emp(ji+1, jj) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj)244 zempmed = zempmed - ( emp(ji , jj) - rnf(ji ,jj) ) * tmask(ji , jj,1) * e1t(ji , jj) * e2t(ji , jj) & 245 - ( emp(ji+1, jj) - rnf(ji+1,jj) ) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj) 246 246 END DO 247 247 END DO -
branches/DEV_R1821_Rivers/NEMO/OPA_SRC/cla_dynspg.F90
r1556 r1938 79 79 ! EMP on Mediterranean Sea and Red Sea 80 80 ! ------------------------------------ 81 ! compute the empin Mediterranean Sea81 ! compute the (emp-rnf) in Mediterranean Sea 82 82 zempmed = 0.e0 83 83 zwei = 0.e0 … … 87 87 DO ji = mi0(ii0),mi1(ii1) 88 88 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 89 zempmed = zempmed + emp(ji,jj) * zwei89 zempmed = zempmed + ( emp(ji,jj)-rnf(ji,jj) ) * zwei 90 90 END DO 91 91 END DO … … 97 97 DO jj = mj0(ij0), mj1(ij1) 98 98 DO ji = mi0(ii0),mi1(ii1) 99 zempmed = zempmed - emp(ji ,jj) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) &100 & - emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)99 zempmed = zempmed - ( emp(ji ,jj) - rnf(ji ,jj) ) * tmask(ji ,jj,1) * e1t(ji ,jj) * e2t(ji ,jj) & 100 & - ( emp(ji+1,jj) - rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj) 101 101 END DO 102 102 END DO … … 104 104 zempmed = zempmed * 1.e-3 105 105 106 ! compute the empin Red Sea106 ! compute the (emp-rnf) in Red Sea 107 107 zempred = 0.e0 108 108 zwei = 0.e0 … … 112 112 DO ji = mi0(ii0),mi1(ii1) 113 113 zwei = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 114 zempred = zempred + emp(ji,jj) * zwei114 zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei 115 115 END DO 116 116 END DO
Note: See TracChangeset
for help on using the changeset viewer.