Changeset 2179
- Timestamp:
- 2010-10-07T14:18:49+02:00 (14 years ago)
- Location:
- branches/devukmo2010
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/devukmo2010/CONFIG/GYRE/EXP00/namelist
r2128 r2179 214 214 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 215 215 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 216 sn_s al_rnf= 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , ''217 sn_t mp_rnf= 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , ''216 sn_s_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 217 sn_t_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 218 218 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 219 219 … … 221 221 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 222 222 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 223 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input224 223 rn_hrnf = 0.e0 ! depth over which enhanced vertical mixing is used 225 224 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] 226 225 rn_rfact = 1.e0 ! multiplicative factor for runoff 226 ln_rnf_depth = .false. ! read in depth information for runoff 227 ln_rnf_temp = .false. ! read in temperature information for runoff 228 ln_rnf_sal = .false. ! read in salinity information for runoff 227 229 / 228 230 !----------------------------------------------------------------------- -
branches/devukmo2010/CONFIG/GYRE_LOBSTER/EXP00/namelist
r2128 r2179 214 214 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 215 215 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 216 sn_s al_rnf= 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , ''217 sn_t mp_rnf= 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , ''216 sn_s_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 217 sn_t_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 218 218 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 219 219 … … 221 221 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 222 222 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 223 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input224 223 rn_hrnf = 0.e0 ! depth over which enhanced vertical mixing is used 225 224 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] 226 225 rn_rfact = 1.e0 ! multiplicative factor for runoff 226 ln_rnf_depth = .false. ! read in depth information for runoff 227 ln_rnf_temp = .false. ! read in temperature information for runoff 228 ln_rnf_sal = .false. ! read in salinity information for runoff 227 229 / 228 230 !----------------------------------------------------------------------- -
branches/devukmo2010/CONFIG/ORCA2_LIM/EXP00/namelist
r2128 r2179 241 241 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 242 242 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 243 sn_s al_rnf= 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , ''244 sn_t mp_rnf= 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , ''243 sn_s_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 244 sn_t_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 245 245 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 246 246 … … 249 249 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 250 250 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 251 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input252 251 rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used 253 252 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] 254 253 rn_rfact = 1.e0 ! multiplicative factor for runoff 254 ln_rnf_depth = .false. ! read in depth information for runoff 255 ln_rnf_temp = .false. ! read in temperature information for runoff 256 ln_rnf_sal = .false. ! read in salinity information for runoff 255 257 / 256 258 !----------------------------------------------------------------------- -
branches/devukmo2010/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist
r2128 r2179 241 241 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 242 242 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 243 sn_s al_rnf= 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , ''244 sn_t mp_rnf= 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , ''243 sn_s_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 244 sn_t_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 245 245 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 246 246 … … 248 248 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 249 249 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 250 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input251 250 rn_hrnf = 15.e0 ! depth over which enhanced vertical mixing is used 252 251 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] 253 252 rn_rfact = 1.e0 ! multiplicative factor for runoff 253 ln_rnf_depth = .false. ! read in depth information for runoff 254 ln_rnf_temp = .false. ! read in temperature information for runoff 255 ln_rnf_sal = .false. ! read in salinity information for runoff 254 256 / 255 257 !----------------------------------------------------------------------- -
branches/devukmo2010/CONFIG/POMME/EXP00/namelist
r2128 r2179 240 240 sn_rnf = 'runoff_1m_nomask' , -1 , 'sorunoff' , .true. , .true. , 'yearly' , '' , '' 241 241 sn_cnf = 'runoff_1m_nomask' , 0 , 'socoefr' , .false. , .true. , 'yearly' , '' , '' 242 sn_s al_rnf= 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , ''243 sn_t mp_rnf= 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , ''242 sn_s_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 243 sn_t_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 244 244 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 245 245 … … 247 247 ln_rnf_emp = .false. ! runoffs included into precipitation field (T) or into a file (F) 248 248 ln_rnf_mouth = .false. ! specific treatment at rivers mouths 249 ln_rnf_att = .false. ! apply temperature, salinity and depth attributes to runoff input250 249 rn_hrnf = 0.e0 ! depth over which enhanced vertical mixing is used 251 250 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] 252 251 rn_rfact = 1.e0 ! multiplicative factor for runoff 252 ln_rnf_depth = .false. ! read in depth information for runoff 253 ln_rnf_temp = .false. ! read in temperature information for runoff 254 ln_rnf_sal = .false. ! read in salinity information for runoff 253 255 / 254 256 !----------------------------------------------------------------------- -
branches/devukmo2010/DOC/TexFiles/Chapters/Chap_SBC.tex
r1320 r2179 36 36 term to observed SST and/or SSS (\np{ln\_ssr}=true); the modification of fluxes 37 37 below ice-covered areas (using observed ice-cover or a sea-ice model) 38 (\np{nn\_ice}=0,1, 2 or 3); the addition of river runoffs as surface freshwater39 fluxes (\np{ln\_rnf}=true);the addition of a freshwater flux adjustment in38 (\np{nn\_ice}=0,1, 2 or 3); the addition of river runoffs (\np{ln\_rnf}=true); 39 the addition of a freshwater flux adjustment in 40 40 order to avoid a mean sea-level drift (\np{nn\_fwb}= 0, 1 or 2); and the 41 41 transformation of the solar radiation (if provided as daily mean) into a diurnal … … 574 574 575 575 It is convenient to introduce the river runoff in the model as a surface 576 fresh water flux. 577 576 fresh water flux. This is the defualt option within NEMO, and there is then 577 the option for the user to increase vertical mixing in the vicinity of the rivermouth. 578 578 579 579 %Griffies: River runoff generally enters the ocean at a nonzero depth rather than through the surface. Many global models, however, have traditionally inserted river runoff to the top model cell. Such can become problematic numerically and physically when the top grid cells are reÞned to levels common in coastal modelling. Hence, more applications are now considering the input of runoff throughout a nonzero depth. Likewise, sea ice can melt at depth, thus necessitating a mass transport to occur within the ocean between the liquid and solid water masses. … … 587 587 %ENDIF 588 588 589 However, this method is not very appropriate for coastal modelling. As such its now possible 590 to specify, in a netcdf input file, the temperature and salinity of the river, along with the 591 depth (in metres) which the river should be added to. This enables to river to be correctly 592 added through the water column, instead of as a surface flux, and also means the temperature 593 or salinity (for low salinity outflow) of the river impacts the surrounding ocean. 594 595 For temperature -999 is taken as missing data and the river temperature is taken to be the 596 surface temperatue at the river point. For the depth parameter a value of -1 means the 597 river is added to the surface box only, and a value of -999 means the river is added through 598 the entire water column. 599 600 Namelist options, ln_rnf_depth, ln_rnf_sal and ln_rnf_temp control whether the river attributes 601 (depth, salinity and temperature) are read in and used. If these are set as false the river is 602 added to the surface box only, assumed to be fresh (0psu), and/or taken as surface temperature 603 respectively. 604 605 It is also possible for runnoff to be specified as a negative value for modelling flow through 606 straits, ie, modelling the baltic flow in and out of the north sea. When the flow is out of the 607 domain there is no change in temperature and salinity, regardless of the namelist options used. 608 609 The runoff value and attributes are read in in sbcrnf. The mass/volume addition is added to the 610 divergence term in sbc_rnf_div. The dilution effect of the river is automatically applied through 611 the vertical tracer advection, and the direct flux of tracers into the domain is done in trasbc. 589 612 590 613 -
branches/devukmo2010/DOC/TexFiles/Namelist/namsbc_rnf
r1320 r2179 6 6 sn_rnf = 'runoff_1m_nomask.nc' , -12. , 'sorunoff', .true. , 1 , 0 , '' , '' 7 7 sn_cnf = 'runoff_1m_nomask.nc' , 0. , 'socoefr' , .false. , 1 , 0 , '' , '' 8 sn_s_rnf = 'runoffs' , 24 , 'rosaline' , .true. , .true. , 'yearly', '' , '' 9 sn_t_rnf = 'runoffs' , 24 , 'rotemper' , .true. , .true. , 'yearly', '' , '' 10 sn_dep_rnf = 'runoffs' , 0 , 'rodepth' , .false. , .true. , 'yearly', '' , '' 8 11 ! 9 12 cn_dir = './' ! directory in which the model is executed … … 12 15 rn_hrnf = 0.e0 ! depth over which enhanced vertical mixing is used 13 16 rn_avt_rnf = 1.e-3 ! value of the additional vertical mixing coef. [m2/s] 17 rn_rfact = 1.e0 ! multiplicative factor for runoff 18 ln_rnf_depth = .false. ! read in depth information for runoff 19 ln_rnf_temp = .false. ! read in temperature information for runoff 20 ln_rnf_sal = .false. ! read in salinity information for runoff 14 21 / -
branches/devukmo2010/NEMO/OPA_SRC/DYN/divcur.F90
r2128 r2179 15 15 USE obc_oce ! ocean lateral open boundary condition 16 16 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 17 USE sbcrnf, ONLY : rnf_dep, rnf_mod_dep ! River runoff 18 USE phycst, ONLY : rau0 ! physical constant 19 USE sbc_oce, ONLY : ln_rnf, rnf ! surface boundary condition: ocean 17 USE sbcrnf ! river runoff 18 USE sbc_oce, ONLY : ln_rnf ! surface boundary condition: ocean 20 19 21 20 IMPLICIT NONE … … 92 91 REAL(wp), DIMENSION( jpi ,1:jpj+2) :: zwu ! workspace 93 92 REAL(wp), DIMENSION(-1:jpi+2, jpj ) :: zwv ! workspace 94 REAL(wp) :: zraur, zdep ! temporary scalar95 93 !!---------------------------------------------------------------------- 96 94 … … 241 239 ! ! =============== 242 240 243 IF ( ln_rnf ) THEN 244 zraur = 1. / rau0 245 DO ji=1,jpi 246 DO jj=1,jpj 247 zdep = 1. / rnf_dep(ji,jj) 248 DO jk=1,rnf_mod_dep(ji,jj) 249 hdivn(ji,jj,jk) = hdivn(ji,jj,jk) - rnf(ji,jj)*zraur*zdep 250 ENDDO 251 ENDDO 252 ENDDO 253 ENDIF 241 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) ! runoffs (update hdivn field) 254 242 255 243 ! 4. Lateral boundary conditions on hdivn and rotn … … 309 297 !! * Local declarations 310 298 INTEGER :: ji, jj, jk ! dummy loop indices 311 REAL(wp) :: zraur, zdep ! temporary scalar312 299 !!---------------------------------------------------------------------- 313 300 … … 374 361 ! ! =============== 375 362 376 IF ( ln_rnf ) THEN 377 zraur = 1. / rau0 378 DO ji=1,jpi 379 DO jj=1,jpj 380 zdep = 1. / rnf_dep(ji,jj) 381 DO jk=1,rnf_mod_dep(ji,jj) 382 hdivn(ji,jj,jk) = hdivn(ji,jj,jk) - rnf(ji,jj)*zraur*zdep 383 ENDDO 384 ENDDO 385 ENDDO 386 ENDIF 363 IF( ln_rnf ) CALL sbc_rnf_div( hdivn ) ! runoffs (update hdivn field) 387 364 388 365 ! 4. Lateral boundary conditions on hdivn and rotn -
branches/devukmo2010/NEMO/OPA_SRC/DYN/sshwzv.F90
r2128 r2179 30 30 USE diaar5, ONLY : lk_diaar5 31 31 USE iom 32 USE sbcrnf, ONLY : rnf_dep, rnf_mod_dep! River runoff32 USE sbcrnf, ONLY : h_rnf, nk_rnf ! River runoff 33 33 #if defined key_asminc 34 34 USE asminc ! Assimilation increment … … 140 140 hur(:,:) = umask(:,:,1) / ( hu(:,:) + 1.e0 - umask(:,:,1) ) 141 141 hvr(:,:) = vmask(:,:,1) / ( hv(:,:) + 1.e0 - vmask(:,:,1) ) 142 !143 DO jj=1,jpj144 DO ji=1,jpi145 rnf_dep(ji,jj)=0146 DO jk=1,rnf_mod_dep(ji,jj) ! recalculates rnf_dep to be the depth147 rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk) ! in metres to the bottom of the relevant grid box148 ENDDO149 ENDDO150 ENDDO151 142 ! 152 143 ENDIF -
branches/devukmo2010/NEMO/OPA_SRC/SBC/sbcrnf.F90
r2128 r2179 25 25 PRIVATE 26 26 27 PUBLIC sbc_rnf ! routine call in step module 28 29 ! !!* namsbc_rnf namelist * 27 PUBLIC sbc_rnf ! routine call in sbcmod module 28 PUBLIC sbc_rnf_div ! routine called in sshwzv module 29 30 ! !!* namsbc_rnf namelist * 30 31 CHARACTER(len=100), PUBLIC :: cn_dir = './' !: Root directory for location of ssr files 32 LOGICAL , PUBLIC :: ln_rnf_depth = .false. !: depth river runoffs attribute specified in a file 33 LOGICAL , PUBLIC :: ln_rnf_temp = .false. !: temperature river runoffs attribute specified in a file 34 LOGICAL , PUBLIC :: ln_rnf_sal = .false. !: salinity river runoffs attribute specified in a file 31 35 LOGICAL , PUBLIC :: ln_rnf_emp = .false. !: runoffs into a file to be read or already into precipitation 32 36 TYPE(FLD_N) , PUBLIC :: sn_rnf !: information about the runoff file to be read 33 37 TYPE(FLD_N) , PUBLIC :: sn_cnf !: information about the runoff mouth file to be read 34 TYPE(FLD_N) :: sn_s al_rnf!: information about the salinities of runoff file to be read35 TYPE(FLD_N) :: sn_t mp_rnf!: information about the temperatures of runoff file to be read38 TYPE(FLD_N) :: sn_s_rnf !: information about the salinities of runoff file to be read 39 TYPE(FLD_N) :: sn_t_rnf !: information about the temperatures of runoff file to be read 36 40 TYPE(FLD_N) :: sn_dep_rnf !: information about the depth which river inflow affects 37 41 LOGICAL , PUBLIC :: ln_rnf_mouth = .false. !: specific treatment in mouths vicinity 38 42 REAL(wp) , PUBLIC :: rn_hrnf = 0.e0 !: runoffs, depth over which enhanced vertical mixing is used 39 43 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 file41 44 REAL(wp) , PUBLIC :: rn_rfact = 1.e0 !: multiplicative factor for runoff 42 45 43 INTEGER , PUBLIC :: nkrnf = 0 !: number of levels over which Kz is increased at river mouths44 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnfmsk !: river mouth mask (hori.)45 REAL(wp), PUBLIC, DIMENSION(jpk) :: rnfmsk_z !: river mouth mask (vert.)46 47 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnf 48 49 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_s al_rnf!: structure of input river runoff salinity (file information, fields read)50 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_t mp_rnf!: structure of input river runoff temperature (file information, fields read)46 INTEGER , PUBLIC :: nkrnf = 0 !: number of levels over which Kz is increased at river mouths 47 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnfmsk !: river mouth mask (hori.) 48 REAL(wp), PUBLIC, DIMENSION(jpk) :: rnfmsk_z !: river mouth mask (vert.) 49 50 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_rnf !: structure of input river runoff (file information, fields read) 51 52 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_s_rnf !: structure of input river runoff salinity (file information, fields read) 53 TYPE(FLD), ALLOCATABLE, DIMENSION(:) :: sf_t_rnf !: structure of input river runoff temperature (file information, fields read) 51 54 52 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_dep !: depth of runoff in m 53 INTEGER, PUBLIC, DIMENSION(jpi,jpj) :: rnf_mod_dep !: depth of runoff in model levels 54 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_sal !: salinity of river runoff 55 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_tmp !: temperature of river runoff 55 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: h_rnf !: depth of runoff in m 56 INTEGER, PUBLIC, DIMENSION(jpi,jpj) :: nk_rnf !: depth of runoff in model levels 57 58 REAL(wp), PUBLIC, DIMENSION(jpi,jpj,2) :: tsc_rnf !: temperature & salinity content of river runoffs [K.m/s & PSU.m/s] 59 60 INTEGER, PUBLIC :: jp_sal=1 61 INTEGER, PUBLIC :: jp_tem=2 62 63 ! REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_sal !: salinity of river runoff 64 ! REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: rnf_tmp !: temperature of river runoff 56 65 57 66 INTEGER :: ji, jj ,jk ! dummy loop indices … … 84 93 !! 85 94 INTEGER :: ji, jj ! dummy loop indices 95 REAL(wp) :: z1_rau0 ! local scalar 86 96 !!---------------------------------------------------------------------- 87 97 ! … … 94 104 ! !-------------------! 95 105 ! 96 CALL fld_read( kt, nn_fsbc, sf_rnf ) ! Read Runoffs data and provides it 97 ! ! at the current time-step 98 IF ( ln_rnf_att ) THEN 99 CALL fld_read ( kt, nn_fsbc, sf_sal_rnf ) 100 CALL fld_read ( kt, nn_fsbc, sf_tmp_rnf ) 101 ENDIF 106 CALL fld_read ( kt, nn_fsbc, sf_rnf ) ! Read Runoffs data and provide it at kt 107 IF( ln_rnf_temp ) CALL fld_read ( kt, nn_fsbc, sf_t_rnf ) ! idem for runoffs temperature if required 108 IF( ln_rnf_sal ) CALL fld_read ( kt, nn_fsbc, sf_s_rnf ) ! idem for runoffs salinity if required 102 109 103 110 ! Runoff reduction only associated to the ORCA2_LIM configuration … … 115 122 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 116 123 rnf(:,:) = rn_rfact * ( sf_rnf(1)%fnow(:,:) ) 117 IF ( ln_rnf_att ) THEN 118 rnf_sal(:,:) = ( sf_sal_rnf(1)%fnow(:,:) ) 119 rnf_tmp(:,:) = ( sf_tmp_rnf(1)%fnow(:,:) ) 120 ELSE 121 rnf_sal(:,:) = 0.0 122 rnf_tmp(:,:) = -999 124 ! 125 z1_rau0 = 1.e0 / rau0 126 ! ! set temperature & salinity content of runoffs 127 IF( ln_rnf_temp ) THEN ! use runoffs temperature data 128 tsc_rnf(:,:,jp_tem) = ( sf_t_rnf(1)%fnow(:,:) ) * rnf(:,:) * z1_rau0 129 WHERE( sf_t_rnf(1)%fnow(:,:) == -999 ) ! if missing data value use SST as runoffs temperature 130 tsc_rnf(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0 131 ENDWHERE 132 ELSE ! use SST as runoffs temperature 133 tsc_rnf(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0 123 134 ENDIF 124 CALL iom_put( "runoffs", rnf ) ! runoffs 135 ! ! use runoffs salinity data 136 IF( ln_rnf_sal ) tsc_rnf(:,:,jp_sal) = ( sf_s_rnf(1)%fnow(:,:) ) * rnf(:,:) * z1_rau0 137 ! ! else use S=0 for runoffs (done one for all in the init) 138 ! 139 IF( ln_rnf_temp .OR. ln_rnf_sal ) THEN ! runoffs as outflow: use ocean SST and SSS 140 WHERE( rnf(:,:) < 0.e0 ) ! example baltic model when flow is out of domain 141 tsc_rnf(:,:,jp_tem) = sst_m(:,:) * rnf(:,:) * z1_rau0 142 tsc_rnf(:,:,jp_sal) = sss_m(:,:) * rnf(:,:) * z1_rau0 143 ENDWHERE 144 ENDIF 145 146 CALL iom_put( "runoffs", rnf ) ! output runoffs arrays 125 147 ENDIF 126 148 ! … … 128 150 ! 129 151 END SUBROUTINE sbc_rnf 152 153 SUBROUTINE sbc_rnf_div( phdivn ) 154 !!---------------------------------------------------------------------- 155 !! *** ROUTINE sbc_rnf *** 156 !! 157 !! ** Purpose : update the horizontal divergence with the runoff inflow 158 !! 159 !! ** Method : 160 !! CAUTION : rnf is positive (inflow) decreasing the 161 !! divergence and expressed in m/s 162 !! 163 !! ** Action : phdivn decreased by the runoff inflow 164 !!---------------------------------------------------------------------- 165 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: phdivn ! horizontal divergence 166 !! 167 INTEGER :: ji, jj, jk ! dummy loop indices 168 REAL(wp) :: z1_rau0 ! local scalar 169 !!---------------------------------------------------------------------- 170 ! 171 z1_rau0 = 1.e0 / rau0 172 IF( ln_rnf_depth ) THEN !== runoff distributed over several levels ==! 173 IF( lk_vvl ) THEN ! variable volume case 174 DO jj = 1, jpj ! update the depth over which runoffs are distributed 175 DO ji = 1, jpi 176 h_rnf(ji,jj) = 0.e0 177 DO jk = 1, nk_rnf(ji,jj) ! recalculates h_rnf to be the depth in metres 178 h_rnf(ji,jj) = h_rnf(ji,jj) + fse3t(ji,jj,jk) ! to the bottom of the relevant grid box 179 END DO 180 ! ! apply the runoff input flow 181 DO jk = 1, nk_rnf(ji,jj) 182 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - rnf(ji,jj) * z1_rau0 / h_rnf(ji,jj) 183 END DO 184 END DO 185 END DO 186 ELSE ! constant volume case : just apply the runoff input flow 187 DO jj = 1, jpj 188 DO ji = 1, jpi 189 DO jk = 1, nk_rnf(ji,jj) 190 phdivn(ji,jj,jk) = phdivn(ji,jj,jk) - rnf(ji,jj) * z1_rau0 / h_rnf(ji,jj) 191 END DO 192 END DO 193 END DO 194 ENDIF 195 ELSE !== runoff put only at the surface ==! 196 phdivn(:,:,1) = phdivn(:,:,1) - rnf(:,:) * z1_rau0 / fse3t(:,:,1) 197 ENDIF 198 ! 199 END SUBROUTINE sbc_rnf_div 130 200 131 201 … … 143 213 INTEGER :: ierror ! temporary integer 144 214 !! 145 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, sn_sal_rnf, sn_tmp_rnf, sn_dep_rnf, & 146 & ln_rnf_mouth, ln_rnf_att, rn_hrnf, rn_avt_rnf, rn_rfact 215 NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, ln_rnf_depth, ln_rnf_temp, ln_rnf_sal, & 216 & sn_rnf, sn_cnf , sn_s_rnf , sn_t_rnf , sn_dep_rnf, & 217 & ln_rnf_mouth , rn_hrnf , rn_avt_rnf , rn_rfact 147 218 !!---------------------------------------------------------------------- 148 219 … … 156 227 sn_cnf = FLD_N( 'runoffs', 0 , 'sorunoff' , .FALSE. , .true. , 'yearly' , '' , '' ) 157 228 158 sn_s al_rnf = FLD_N( 'runoffs', 24. , 'rosaline' , .TRUE. , .true. , 'yearly' , '' , '' )159 sn_t mp_rnf = FLD_N( 'runoffs', 24. , 'rotemper' , .TRUE. , .true. , 'yearly' , '' , '' )229 sn_s_rnf = FLD_N( 'runoffs', 24. , 'rosaline' , .TRUE. , .true. , 'yearly' , '' , '' ) 230 sn_t_rnf = FLD_N( 'runoffs', 24. , 'rotemper' , .TRUE. , .true. , 'yearly' , '' , '' ) 160 231 sn_dep_rnf = FLD_N( 'runoffs', 0. , 'rodepth' , .FALSE. , .true. , 'yearly' , '' , '' ) 161 232 ! … … 180 251 ! ! ================== 181 252 ! 182 IF( ln_rnf_emp ) THEN ! runoffs directly provided in the precipitations253 IF( ln_rnf_emp ) THEN !== runoffs directly provided in the precipitations ==! 183 254 IF(lwp) WRITE(numout,*) 184 255 IF(lwp) WRITE(numout,*) ' runoffs directly provided in the precipitations' 185 IF ( ln_rnf_att ) THEN 186 CALL ctl_warn( 'runoffs already included in precipitations & so runoff attributes will not be used' ) 187 ln_rnf_att = .FALSE. 188 ENDIF 189 ! 190 ELSE ! runoffs read in a file : set sf_rnf structure 191 ! 192 ! Allocate sf_rnf structure and (if required) sf_sal_rnf and sf_tmp_rnf structures 193 ALLOCATE( sf_rnf(1), STAT=ierror ) 256 IF( ln_rnf_depth .OR. ln_rnf_temp .OR. ln_rnf_sal ) THEN 257 CALL ctl_warn( 'runoffs already included in precipitations, so runoff (T,S, depth) attributes will not be used' ) 258 ln_rnf_depth = .FALSE. ; ln_rnf_temp = .FALSE. ; ln_rnf_sal = .FALSE. 259 ENDIF 260 ! 261 ELSE !== runoffs read in a file : set sf_rnf structure ==! 262 ! 263 ALLOCATE( sf_rnf(1), STAT=ierror ) ! Create sf_rnf structure (runoff inflow) 264 IF(lwp) WRITE(numout,*) 265 IF(lwp) WRITE(numout,*) ' runoffs inflow read in a file' 194 266 IF( ierror > 0 ) THEN 195 267 CALL ctl_stop( 'sbc_rnf: unable to allocate sf_rnf structure' ) ; RETURN 196 268 ENDIF 197 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 198 ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 199 200 IF( ln_rnf_att ) THEN 201 ALLOCATE( sf_sal_rnf(1), STAT=ierror ) 269 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) ; ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 270 ! ! fill sf_rnf with the namelist (sn_rnf) and control print 271 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 272 ! 273 IF( ln_rnf_temp ) THEN ! Create (if required) sf_t_rnf structure 274 IF(lwp) WRITE(numout,*) 275 IF(lwp) WRITE(numout,*) ' runoffs temperatures read in a file' 276 ALLOCATE( sf_t_rnf(1), STAT=ierror ) 202 277 IF( ierror > 0 ) THEN 203 CALL ctl_stop( 'sbc_ sal_rnf: unable to allocate sf_sal_rnf structure' ) ; RETURN278 CALL ctl_stop( 'sbc_rnf_init: unable to allocate sf_t_rnf structure' ) ; RETURN 204 279 ENDIF 205 ALLOCATE( sf_sal_rnf(1)%fnow(jpi,jpj) ) 206 ALLOCATE( sf_sal_rnf(1)%fdta(jpi,jpj,2) ) 207 208 ALLOCATE( sf_tmp_rnf(1), STAT=ierror ) 280 ALLOCATE( sf_t_rnf(1)%fnow(jpi,jpj) ) ; ALLOCATE( sf_t_rnf(1)%fdta(jpi,jpj,2) ) 281 CALL fld_fill (sf_t_rnf, (/ sn_t_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' ) 282 ENDIF 283 ! 284 IF( ln_rnf_sal ) THEN ! Create (if required) sf_s_rnf and sf_t_rnf structures 285 IF(lwp) WRITE(numout,*) 286 IF(lwp) WRITE(numout,*) ' runoffs salinities read in a file' 287 ALLOCATE( sf_s_rnf(1), STAT=ierror ) 209 288 IF( ierror > 0 ) THEN 210 CALL ctl_stop( 'sbc_tmp_rnf: unable to allocate sf_tmp_rnf structure' ) ; RETURN289 CALL ctl_stop( 'sbc_rnf_init: unable to allocate sf_s_rnf structure' ) ; RETURN 211 290 ENDIF 212 ALLOCATE( sf_tmp_rnf(1)%fnow(jpi,jpj) ) 213 ALLOCATE( sf_tmp_rnf(1)%fdta(jpi,jpj,2) ) 214 ENDIF 215 ! fill sf_rnf with sn_rnf and control print 216 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 291 ALLOCATE( sf_s_rnf(1)%fnow(jpi,jpj) ) ; ALLOCATE( sf_s_rnf(1)%fdta(jpi,jpj,2) ) 292 CALL fld_fill (sf_s_rnf, (/ sn_s_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' ) 293 ENDIF 294 217 295 218 IF ( ln_rnf_att ) THEN 219 CALL fld_fill (sf_sal_rnf, (/ sn_sal_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' ) 220 CALL fld_fill (sf_tmp_rnf, (/ sn_tmp_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' ) 221 296 IF ( ln_rnf_depth ) THEN ! depth of runoffs set from a file 297 IF(lwp) WRITE(numout,*) 298 IF(lwp) WRITE(numout,*) ' runoffs depth read in a file' 222 299 rn_dep_file = TRIM( cn_dir )//TRIM( sn_dep_rnf%clname ) 223 300 CALL iom_open ( rn_dep_file, inum ) ! open file 224 CALL iom_get ( inum, jpdom_data, sn_dep_rnf%clvar, rnf_dep) ! read the river mouth array301 CALL iom_get ( inum, jpdom_data, sn_dep_rnf%clvar, h_rnf ) ! read the river mouth array 225 302 CALL iom_close( inum ) ! close file 226 303 227 rnf_mod_dep(:,:)=0304 nk_rnf(:,:)=0 ! set the number of level over which river runoffs are applied 228 305 DO jj=1,jpj 229 306 DO ji=1,jpi 230 IF ( rnf_dep(ji,jj) > 0.e0 ) THEN307 IF ( h_rnf(ji,jj) > 0.e0 ) THEN 231 308 jk=2 232 DO WHILE ( jk/=(mbathy(ji,jj)-1) .AND. fsdept(ji,jj,jk) < rnf_dep(ji,jj) ); jk=jk+1; ENDDO 233 rnf_mod_dep(ji,jj)=jk 234 ELSE IF ( rnf_dep(ji,jj) .eq. -1 ) THEN 235 rnf_mod_dep(ji,jj)=1 236 ELSE IF ( rnf_dep(ji,jj) .eq. -999 ) THEN 237 rnf_mod_dep(ji,jj)=mbathy(ji,jj)-1 238 ELSE IF ( rnf_dep(ji,jj) /= 0 ) THEN 309 DO WHILE ( jk/=(mbathy(ji,jj)-1) .AND. fsdept(ji,jj,jk) < h_rnf(ji,jj) ); jk=jk+1; ENDDO 310 nk_rnf(ji,jj)=jk 311 ELSE IF ( h_rnf(ji,jj) == -1 ) THEN ; nk_rnf(ji,jj)=1 312 ELSE IF ( h_rnf(ji,jj) == -999 ) THEN ; nk_rnf(ji,jj)=mbathy(ji,jj)-1 313 ELSE IF ( h_rnf(ji,jj) /= 0 ) THEN 239 314 CALL ctl_stop( 'runoff depth not positive, and not -999 or -1, rnf value in file fort.999' ) 240 315 WRITE(999,*) 'ji, jj, rnf(ji,jj) :', ji, jj, rnf(ji,jj) … … 242 317 ENDDO 243 318 ENDDO 244 ELSE 245 rnf_mod_dep(:,:)=1 319 DO jj=1,jpj ! set the associated depth 320 DO ji=1,jpi 321 h_rnf(ji,jj)=0.e0 322 DO jk=1,nk_rnf(ji,jj) 323 h_rnf(ji,jj)=h_rnf(ji,jj)+fse3t(ji,jj,jk) 324 ENDDO 325 ENDDO 326 ENDDO 327 ELSE ! runoffs applied at the surface 328 nk_rnf(:,:)=1 329 h_rnf(:,:)=fse3t(:,:,1) 246 330 ENDIF 247 331 ! 248 332 ENDIF 249 250 ! recalculate rnf_dep to be the depth in metres to the bottom of the relevant grid box 251 DO jj=1,jpj 252 DO ji=1,jpi 253 rnf_dep(ji,jj)=0 254 DO jk=1,rnf_mod_dep(ji,jj) 255 rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk) 256 ENDDO 257 ENDDO 258 ENDDO 333 334 tsc_rnf(:,:,:) = 0.e0 ! runoffs temperature & salinty contents initilisation 259 335 ! ! ======================== 260 336 ! ! River mouth vicinity … … 266 342 ! ! - mixed upstream-centered (ln_traadv_cen2=T) 267 343 ! 268 ! ! Number of level over which Kz increase269 IF ( ln_rnf_att ) &270 & CALL ctl_warn( 'increased mixing turned on but effects may already be spread through depth by ln_rnf_att' )271 nkrnf = 0 344 IF ( ln_rnf_depth ) CALL ctl_warn( 'sbc_rnf_init: increased mixing turned on but effects may already', & 345 & 'be spread through depth by ln_rnf_depth' ) 346 ! 347 nkrnf = 0 ! Number of level over which Kz increase 272 348 IF( rn_hrnf > 0.e0 ) THEN 273 349 nkrnf = 2 -
branches/devukmo2010/NEMO/OPA_SRC/TRA/trasbc.F90
r2128 r2179 21 21 USE in_out_manager ! I/O manager 22 22 USE prtctl ! Print control 23 USE lbclnk ! ocean lateral boundary conditions (or mpp link) 23 24 USE sbcrnf ! River runoff 24 25 USE sbcmod ! ln_rnf … … 106 107 !! 107 108 INTEGER :: ji, jj, jk ! dummy loop indices 108 REAL(wp) :: zta, zsa ! temporaryscalars, adjustment to temperature and salinity109 REAL(wp) :: zata, zasa ! temporaryscalars, calculations of automatic change to temp & sal due to vvl (done elsewhere)110 REAL(wp) :: zsrau, zse3t, zdep ! temporaryscalars, 1/density, 1/height of box, 1/height of effected water column109 REAL(wp) :: zta, zsa ! local scalars, adjustment to temperature and salinity 110 REAL(wp) :: zata, zasa ! local scalars, calculations of automatic change to temp & sal due to vvl (done elsewhere) 111 REAL(wp) :: zsrau, zse3t, zdep ! local scalars, 1/density, 1/height of box, 1/height of effected water column 111 112 REAL(wp) :: zdheat, zdsalt ! total change of temperature and salinity 112 113 !!---------------------------------------------------------------------- … … 151 152 END DO 152 153 153 IF ( ln_rnf ) THEN 154 ! !== Runoffs ==! 155 ! Effect on (t,s) due to river runoff (dilution effect automatically applied via vertical tracer advection) 156 IF( ln_rnf ) THEN 157 DO jj = 2, jpj 158 DO ji = fs_2, fs_jpim1 159 zdep = 1. / h_rnf(ji,jj) 160 IF ( rnf(ji,jj) .ne. 0.0 ) THEN 161 DO jk = 1, nk_rnf(ji,jj) 162 ta(ji,jj,jk) = ta(ji,jj,jk) + tsc_rnf(ji,jj,jp_tem) * zdep 163 IF( ln_rnf_sal ) sa(ji,jj,jk) = sa(ji,jj,jk) + tsc_rnf(ji,jj,jp_sal) * zdep 164 ENDDO 165 ENDIF 166 ENDDO 167 ENDDO 168 ENDIF 154 169 155 ! Effect on (t,s) due to river runoff (dilution effect automatically applied via vertical tracer advection) 156 DO jj=1,jpj 157 DO ji=1,jpi 158 zdep = 1. / rnf_dep(ji,jj) 159 zse3t= 1. / fse3t(ji,jj,1) 160 161 IF ( rnf(ji,jj) .gt. 0.0 ) THEN 162 ! ammend t and s due to direct tracer flux 163 IF ( rnf_tmp(ji,jj) == -999 ) rnf_tmp(ji,jj)=tn(ji,jj,1) ! if not specified set runoff temp to be sst 164 DO jk=1, rnf_mod_dep(ji,jj) 165 ta(ji,jj,jk) = ta(ji,jj,jk) + rnf_tmp(ji,jj) * rnf(ji,jj) * zsrau * zdep 166 sa(ji,jj,jk) = sa(ji,jj,jk) + rnf_sal(ji,jj) * rnf(ji,jj) * zsrau * zdep 167 ENDDO 168 ELSEIF (rnf(ji,jj) .lt. 0.) THEN !! for use in baltic when flow is out of domain, want no change in temp and sal 169 ! negate concentration/dilution effect from traadv, as the tracer leaves domain 170 DO jk=1, rnf_mod_dep(ji,jj) 171 ta(ji,jj,jk) = ta(ji,jj,jk) + tn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 172 sa(ji,jj,jk) = sa(ji,jj,jk) + sn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep 173 ENDDO 174 ENDIF 175 176 ENDDO 177 ENDDO 178 179 ENDIF 170 CALL lbc_lnk( ta, 'T', 1. ) ; CALL lbc_lnk( sa, 'T', 1. ) 180 171 181 172 IF( l_trdtra ) THEN ! save the sbc trends for diagnostic
Note: See TracChangeset
for help on using the changeset viewer.