- Timestamp:
- 2013-11-14T12:04:31+01:00 (11 years ago)
- Location:
- branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r3780 r4193 129 129 zoxy = trn(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 130 130 ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 131 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj, 1,jp_tem) + 273.15 ) &131 zkox = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 ) & 132 132 & - 0.04406 * SQRT( tsn(ji,jj,jk,jp_sal) ) - 0.002847 * tsn(ji,jj,jk,jp_sal) 133 133 zkox = ( 10.** zkox ) * spd … … 263 263 zdep = MIN( 1., 1000. / fsdept(ji,jj,jk) ) 264 264 zlam1b = xlam1 * MAX( 0.e0, ( trn(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 265 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * zfecoll265 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trn(ji,jj,jk,jpfer) 266 266 267 267 ! Compute the coagulation of colloidal iron. This parameterization … … 278 278 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 279 279 #else 280 zlam1b = 3.53E3 * trn(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) + 1E-4 * ( 1. - zlamfac ) * zdep280 zlam1b = 3.53E3 * trn(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 281 281 zaggdfeb = zlam1b * zstep * zfecoll 282 282 ! -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r3481 r4193 109 109 ! then the first atmospheric CO2 record read is at years(1) 110 110 zyr_dec = REAL( nyear + nn_offset, wp ) + REAL( nday_year, wp ) / REAL( nyear_len(1), wp ) 111 jm = 2112 DO WHILE( jm <= nmaxrec .AND. years(jm -1) < zyr_dec .AND. years(jm) >=zyr_dec ) ; jm = jm + 1 ; END DO111 jm = 1 112 DO WHILE( jm <= nmaxrec .AND. years(jm) < zyr_dec ) ; jm = jm + 1 ; END DO 113 113 iind = jm ; iindm1 = jm - 1 114 114 zdco2dt = ( atcco2h(iind) - atcco2h(iindm1) ) / ( years(iind) - years(iindm1) + rtrn ) … … 196 196 END DO 197 197 198 t_oce_co2_flx = t_oce_co2_flx + glob_sum( oce_co2(:,:) ) 199 t_atm_co2_flx = glob_sum( satmco2(:,:) * patm(:,:) * e1e2t(:,:) )! Total atmospheric pCO2198 t_oce_co2_flx = t_oce_co2_flx + glob_sum( oce_co2(:,:) ) ! Cumulative Total Flux of Carbon 199 t_atm_co2_flx = glob_sum( satmco2(:,:) * e1e2t(:,:) ) ! Total atmospheric pCO2 200 200 201 201 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r3856 r4193 140 140 ! ---------------------------------- 141 141 # if ! defined key_kriest 142 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 143 ! & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 144 & * 2. * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 142 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpmes) 145 143 zgrazfffg = zgrazffeg * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) 146 144 # endif 147 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 148 ! & * tgfunc2(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 149 & * 2. * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 145 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) * trn(ji,jj,jk,jppoc) * trn(ji,jj,jk,jpmes) 150 146 zgrazfffp = zgrazffep * trn(ji,jj,jk,jpsfe) / (trn(ji,jj,jk,jppoc) + rtrn) 151 147 ! … … 154 150 ! Compute the proportion of filter feeders 155 151 zproport = (zgrazffep + zgrazffeg)/(rtrn + zgraztot) 152 ! Compute fractionation of aggregates. It is assumed that diatoms based aggregates are more prone to fractionation 153 ! since they are more porous (marine snow instead of fecal pellets) 156 154 zratio = trn(ji,jj,jk,jpgsi) / ( trn(ji,jj,jk,jpgoc) + rtrn ) 157 155 zratio2 = zratio * zratio 158 ! zfrac = zproport * 0.15 * zstep * & 159 ! ( 0.2 + 0.8 * zratio2 / ( 1.5**2 + zratio2 ) ) & 160 ! *trn(ji,jj,jk,jpmes)/3E-7 *trn(ji,jj,jk,jpgoc) 161 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) & 162 & * ( 0.1 + 3.9 * zratio2 / ( 1.**2 + zratio2 ) ) & 163 & * 2. * trn(ji,jj,jk,jpmes) * trn(ji,jj,jk,jpgoc) 156 zfrac = zproport * zgrazffeg * ( 0.1 + 3.9 * zratio2 / ( 1.**2 + zratio2 ) ) 164 157 165 158 zfracfe = zfrac * trn(ji,jj,jk,jpbfe) / (trn(ji,jj,jk,jpgoc) + rtrn) … … 193 186 zepshert = epsher2 * MIN( 1., zncratio ) 194 187 zepsherv = zepshert * MIN( 1., zgrasrat / ferat3 ) 195 zgrarem2 = zgraztot * ( 1. - zepsherv - unass2 ) + zrespz2 &196 & + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv + rtrn) * ztortz2197 zgrafer2 = zgraztot * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv ) &198 & + ferat3 * ( zrespz2 + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv + rtrn) * ztortz2 )188 zgrarem2 = zgraztot * ( 1. - zepsherv - unass2 ) + zrespz2 & 189 & + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv ) * ztortz2 190 zgrafer2 = zgraztot * MAX( 0. , ( 1. - unass2 ) * zgrasrat - ferat3 * zepsherv ) & 191 & + ferat3 * ( zrespz2 + ( 1. - zepsherv - unass2 ) /( 1. - zepsherv ) * ztortz2 ) 199 192 zgrapoc2 = zgraztot * unass2 200 193 … … 208 201 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 209 202 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 210 #if defined key_kriest 211 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc2 212 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc2 * xkr_dmeso 213 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass2 214 #else 215 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zgrapoc2 - zfrac 216 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zfrac 217 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zgraztotf * unass2 - zfracfe 218 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zfracfe 219 220 #endif 203 221 204 zmortz2 = ztortz2 + zrespz2 222 zmortzgoc = unass2 / ( 1. - zepsherv + rtrn) * ztortz2205 zmortzgoc = unass2 / ( 1. - zepsherv ) * ztortz2 223 206 tra(ji,jj,jk,jpmes) = tra(ji,jj,jk,jpmes) - zmortz2 + zepsherv * zgraztot 224 207 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) - zgrazd … … 242 225 #if defined key_kriest 243 226 znumpoc = trn(ji,jj,jk,jpnum) / ( trn(ji,jj,jk,jppoc) + rtrn ) 244 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep 245 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc &246 & + zmortzgoc * xkr_dmeso - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn )247 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz2 - zgrazfffp - zgrazpof 227 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 228 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso & 229 & + zmortzgoc * xkr_dmeso - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn ) 230 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz2 - zgrazfffp - zgrazpof + zgraztotf * unass2 248 231 #else 249 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep 250 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg 251 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp 252 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg 232 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 233 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 234 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 235 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg + zgraztotf * unass2 - zfracfe 253 236 #endif 254 255 237 END DO 256 238 END DO -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r3686 r4193 201 201 zconctemp2 = trn(ji,jj,jk,jpdia) - zconctemp 202 202 ! 203 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( enano(ji,jj,jk) ) )203 zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap * EXP( -0.21 * enano(ji,jj,jk) ) ) 204 204 zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trn(ji,jj,jk,jpdia) + rtrn ) 205 205 -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r3751 r4193 69 69 REAL(wp) :: zwflux, zfminus, zfplus 70 70 REAL(wp) :: zlim, zfact, zfactcal 71 REAL(wp) :: zo2, zno3, zflx, zpdenit, z1pdenit 71 REAL(wp) :: zo2, zno3, zflx, zpdenit, z1pdenit, zdenitt, zolimit 72 72 REAL(wp) :: zsiloss, zcaloss, zwsbio3, zwsbio4, zwscal, zdep, zwstpoc 73 73 REAL(wp) :: ztrfer, ztrpo4, zwdust … … 82 82 IF( nn_timing == 1 ) CALL timing_start('p4z_sed') 83 83 ! 84 IF( kt == nit 000 .AND. jnt == 1 ) THEN84 IF( kt == nittrc000 .AND. jnt == 1 ) THEN 85 85 ryyss = nyear_len(1) * rday ! number of seconds per year and per month 86 86 rmtss = ryyss / raamo … … 105 105 DO ji = 1, jpi 106 106 zdep = rfact2 / fse3t(ji,jj,1) 107 ! zwflux = ( emps(ji,jj) - emp(ji,jj) ) & 108 ! & * tsn(ji,jj,1,jp_sal) / ( tsn(ji,jj,1,jp_sal) - 6.0 ) / 1000. 109 zwflux = 0. 110 zfminus = MIN( 0., -zwflux ) * trn(ji,jj,1,jpfer) * zdep 111 zfplus = MAX( 0., -zwflux ) * 10E-9 * zdep 107 zwflux = fmmflx(ji,jj) / 1000._wp 108 zfminus = MIN( 0._wp, -zwflux ) * trn(ji,jj,1,jpfer) * zdep 109 zfplus = MAX( 0._wp, -zwflux ) * icefeinput * zdep 112 110 zironice(ji,jj) = zfplus + zfminus 113 111 END DO … … 135 133 ENDIF 136 134 zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 28.1 * rmtss ) 137 zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 31. * rmtss ) 135 zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * rfact2 / fse3t(:,:,1) / ( 31. * rmtss ) / po4r 138 136 ! ! Iron solubilization of particles in the water column 139 137 zwdust = 0.005 / ( wdust * 55.85 * 30.42 ) / ( 45. * rday ) … … 246 244 #endif 247 245 248 ! THEN this loss is scaled at each bottom grid cell for 249 ! equilibrating the total budget of silica in the ocean. 250 ! Thus, the amount of silica lost in the sediments equal 251 ! the supply at the surface (dust+rivers) 246 ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 247 ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 252 248 ! ------------------------------------------------------ 253 249 #if ! defined key_sed … … 302 298 303 299 #if ! defined key_sed 304 zpdenit = MIN( ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 300 ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 301 ! in the sediments and just above the sediments. Not very clever, but simpliest option. 302 zpdenit = MIN( 0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 305 303 z1pdenit = zwstpoc * zrivno3 - zpdenit 306 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit 307 trn(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit 308 trn(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit 309 trn(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * zpdenit 310 trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * ( 1. + rdenit ) * zpdenit 311 trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit 304 zolimit = MIN( ( trn(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 305 zdenitt = MIN( 0.5 * ( trn(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 306 trn(ji,jj,ikt,jpdoc) = trn(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 307 trn(ji,jj,ikt,jppo4) = trn(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 308 trn(ji,jj,ikt,jpnh4) = trn(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 309 trn(ji,jj,ikt,jpno3) = trn(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 310 trn(ji,jj,ikt,jpoxy) = trn(ji,jj,ikt,jpoxy) - zolimit * o2ut 311 trn(ji,jj,ikt,jptal) = trn(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 312 trn(ji,jj,ikt,jpdic) = trn(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 312 313 zwork4(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt) 313 314 #endif -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r3829 r4193 156 156 DO ji = 1, jpi 157 157 IF( tmask(ji,jj,jk) == 1 ) THEN 158 zwsmax = 0. 8* fse3t(ji,jj,jk) / xstep158 zwsmax = 0.5 * fse3t(ji,jj,jk) / xstep 159 159 wsbio3(ji,jj,jk) = MIN( wsbio3(ji,jj,jk), zwsmax * FLOAT( iiter1 ) ) 160 160 wsbio4(ji,jj,jk) = MIN( wsbio4(ji,jj,jk), zwsmax * FLOAT( iiter2 ) ) … … 217 217 zaggdoc = ( ( 0.369 * 0.3 * trn(ji,jj,jk,jpdoc) + 102.4 * trn(ji,jj,jk,jppoc) ) * zfact & 218 218 & + 2.4 * zstep * trn(ji,jj,jk,jppoc) ) * 0.3 * trn(ji,jj,jk,jpdoc) 219 ! zaggdoc = ( 0.83 * trn(ji,jj,jk,jpdoc) + 271. * trn(ji,jj,jk,jppoc) ) * zfact * trn(ji,jj,jk,jpdoc)220 219 ! transfer of DOC to GOC : 221 220 ! 1st term is shear aggregation 222 221 ! 2nd term is differential settling 223 222 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trn(ji,jj,jk,jpgoc) * 0.3 * trn(ji,jj,jk,jpdoc) 224 ! zaggdoc2 = 1.07e4 * zfact * trn(ji,jj,jk,jpgoc) * trn(ji,jj,jk,jpdoc)225 223 ! tranfer of DOC to POC due to brownian motion 226 ! zaggdoc3 = 0.02 * ( 16706. * trn(ji,jj,jk,jppoc) + 231. * trn(ji,jj,jk,jpdoc) ) * zstep * trn(ji,jj,jk,jpdoc)227 224 zaggdoc3 = ( 5095. * trn(ji,jj,jk,jppoc) + 114. * 0.3 * trn(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trn(ji,jj,jk,jpdoc) 228 225 -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r3780 r4193 76 76 ENDIF 77 77 ! 78 IF( ln_rsttr .AND. kt == nittrc000 ) CALL p4z_rst( nittrc000, 'READ' ) !* read or initialize all required fields 79 IF( ln_rsttr .AND. ln_pisclo ) CALL p4z_clo ! damping on closed seas 78 IF( kt == nittrc000 ) THEN 79 ! 80 CALL p4z_che ! initialize the chemical constants 81 ! 82 IF( .NOT. ln_rsttr ) THEN ; CALL p4z_ph_ini ! set PH at kt=nit000 83 ELSE ; CALL p4z_rst( nittrc000, 'READ' ) !* read or initialize all required fields 84 ENDIF 85 ! 86 ENDIF 87 80 88 IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 ) CALL p4z_dmp( kt ) ! Relaxation of some tracers 81 89 ! … … 164 172 NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max 165 173 #endif 166 NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp , ln_pisclo174 NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp 167 175 NAMELIST/nampismass/ ln_check_mass 168 176 !!---------------------------------------------------------------------- … … 215 223 ln_pisdmp = .true. 216 224 nn_pisdmp = 1 217 ln_pisclo = .false.218 225 219 226 REWIND( numnatp ) … … 225 232 WRITE(numout,*) ' Relaxation of tracer to glodap mean value ln_pisdmp =', ln_pisdmp 226 233 WRITE(numout,*) ' Frequency of Relaxation nn_pisdmp =', nn_pisdmp 227 WRITE(numout,*) ' Restoring of tracer to initial value on closed seas ln_pisclo =', ln_pisclo228 234 WRITE(numout,*) ' ' 229 235 ENDIF … … 241 247 END SUBROUTINE p4z_sms_init 242 248 249 SUBROUTINE p4z_ph_ini 250 !!--------------------------------------------------------------------- 251 !! *** ROUTINE p4z_ini_ph *** 252 !! 253 !! ** Purpose : Initialization of chemical variables of the carbon cycle 254 !!--------------------------------------------------------------------- 255 INTEGER :: ji, jj, jk 256 REAL(wp) :: zcaralk, zbicarb, zco3 257 REAL(wp) :: ztmas, ztmas1 258 !!--------------------------------------------------------------------- 259 260 ! Set PH from total alkalinity, borat (???), akb3 (???) and ak23 (???) 261 ! -------------------------------------------------------- 262 DO jk = 1, jpk 263 DO jj = 1, jpj 264 DO ji = 1, jpi 265 ztmas = tmask(ji,jj,jk) 266 ztmas1 = 1. - tmask(ji,jj,jk) 267 zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 268 zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 269 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 270 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 271 END DO 272 END DO 273 END DO 274 ! 275 END SUBROUTINE p4z_ph_ini 276 243 277 SUBROUTINE p4z_rst( kt, cdrw ) 244 278 !!--------------------------------------------------------------------- … … 269 303 ELSE 270 304 ! hi(:,:,:) = 1.e-9 271 ! Set PH from total alkalinity, borat (???), akb3 (???) and ak23 (???) 272 ! -------------------------------------------------------- 273 DO jk = 1, jpk 274 DO jj = 1, jpj 275 DO ji = 1, jpi 276 ztmas = tmask(ji,jj,jk) 277 ztmas1 = 1. - tmask(ji,jj,jk) 278 zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 279 zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 280 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 281 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 282 END DO 283 END DO 284 END DO 305 CALL p4z_ph_ini 285 306 ENDIF 286 307 CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) … … 395 416 #endif 396 417 & + trn(:,:,:,jpsfe) & 397 & + trn(:,:,:,jpzoo) 418 & + trn(:,:,:,jpzoo) * ferat3 & 398 419 & + trn(:,:,:,jpmes) * ferat3 ) * cvol(:,:,:) ) 399 420 … … 421 442 END SUBROUTINE p4z_chk_mass 422 443 423 SUBROUTINE p4z_clo424 !!---------------------------------------------------------------------425 !! *** ROUTINE p4z_clo ***426 !!427 !! ** Purpose : Closed sea domain initialization428 !!429 !! ** Method : if a closed sea is located only in a model grid point430 !! we restore to initial data431 !!432 !! ** Action : ictsi1(), ictsj1() : south-west closed sea limits (i,j)433 !! ictsi2(), ictsj2() : north-east Closed sea limits (i,j)434 !!----------------------------------------------------------------------435 INTEGER, PARAMETER :: npicts = 4 ! number of closed sea436 INTEGER, DIMENSION(npicts) :: ictsi1, ictsj1 ! south-west closed sea limits (i,j)437 INTEGER, DIMENSION(npicts) :: ictsi2, ictsj2 ! north-east closed sea limits (i,j)438 INTEGER :: ji, jj, jk, jn, jl, jc ! dummy loop indices439 INTEGER :: ierr ! local integer440 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrcdta ! 4D workspace441 !!----------------------------------------------------------------------442 443 IF(lwp) WRITE(numout,*)444 IF(lwp) WRITE(numout,*)' p4z_clo : closed seas '445 IF(lwp) WRITE(numout,*)'~~~~~~~'446 447 ! initial values448 ictsi1(:) = 1 ; ictsi2(:) = 1449 ictsj1(:) = 1 ; ictsj2(:) = 1450 451 ! set the closed seas (in data domain indices)452 ! -------------------453 454 IF( cp_cfg == "orca" ) THEN455 !456 SELECT CASE ( jp_cfg )457 ! ! =======================458 CASE ( 2 ) ! ORCA_R2 configuration459 ! ! =======================460 ! ! Caspian Sea461 ictsi1(1) = 11 ; ictsj1(1) = 103462 ictsi2(1) = 17 ; ictsj2(1) = 112463 ! ! Great North American Lakes464 ictsi1(2) = 97 ; ictsj1(2) = 107465 ictsi2(2) = 103 ; ictsj2(2) = 111466 ! ! Black Sea 1 : west part of the Black Sea467 ictsi1(3) = 174 ; ictsj1(3) = 107468 ictsi2(3) = 181 ; ictsj2(3) = 112469 ! ! Black Sea 2 : est part of the Black Sea470 ictsi1(4) = 2 ; ictsj1(4) = 107471 ictsi2(4) = 6 ; ictsj2(4) = 112472 ! ! =======================473 CASE ( 4 ) ! ORCA_R4 configuration474 ! ! =======================475 ! ! Caspian Sea476 ictsi1(1) = 4 ; ictsj1(1) = 53477 ictsi2(1) = 4 ; ictsj2(1) = 56478 ! ! Great North American Lakes479 ictsi1(2) = 49 ; ictsj1(2) = 55480 ictsi2(2) = 51 ; ictsj2(2) = 56481 ! ! Black Sea482 ictsi1(3) = 88 ; ictsj1(3) = 55483 ictsi2(3) = 91 ; ictsj2(3) = 56484 ! ! Baltic Sea485 ictsi1(4) = 75 ; ictsj1(4) = 59486 ictsi2(4) = 76 ; ictsj2(4) = 61487 ! ! =======================488 ! ! =======================489 CASE ( 025 ) ! ORCA_R025 configuration490 ! ! =======================491 ! Caspian + Aral sea492 ictsi1(1) = 1330 ; ictsj1(1) = 645493 ictsi2(1) = 1400 ; ictsj2(1) = 795494 ! ! Azov Sea495 ictsi1(2) = 1284 ; ictsj1(2) = 722496 ictsi2(2) = 1304 ; ictsj2(2) = 747497 !498 END SELECT499 !500 ENDIF501 502 ! convert the position in local domain indices503 ! --------------------------------------------504 DO jc = 1, npicts505 ictsi1(jc) = mi0( ictsi1(jc) )506 ictsj1(jc) = mj0( ictsj1(jc) )507 508 ictsi2(jc) = mi1( ictsi2(jc) )509 ictsj2(jc) = mj1( ictsj2(jc) )510 END DO511 512 ! Restore close seas values to initial data513 IF( ln_trcdta .AND. nb_trcdta > 0 ) THEN ! Initialisation of tracer from a file that may also be used for damping514 !515 CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) ! Memory allocation516 !517 CALL trc_dta( nittrc000, ztrcdta ) ! read tracer data at nittrc000518 !519 DO jn = 1, jptra520 IF( ln_trc_ini(jn) ) THEN ! update passive tracers arrays with input data read from file521 jl = n_trc_index(jn)522 DO jc = 1, npicts523 DO jk = 1, jpkm1524 DO jj = ictsj1(jc), ictsj2(jc)525 DO ji = ictsi1(jc), ictsi2(jc)526 trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * tmask(ji,jj,jk)527 trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn)528 ENDDO529 ENDDO530 ENDDO531 ENDDO532 ENDIF533 ENDDO534 CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta )535 ENDIF536 !537 END SUBROUTINE p4z_clo538 444 #else 539 445 !!====================================================================== -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r3780 r4193 56 56 LOGICAL :: ln_pisdmp !: restoring or not of nutrients to a mean value 57 57 INTEGER :: nn_pisdmp !: frequency of relaxation or not of nutrients to a mean value 58 LOGICAL :: ln_pisclo !: Restoring or not of nutrients to initial value on closed seas59 58 60 59 !!* Mass conservation -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r3757 r4193 122 122 rdenita = 3._wp / 5._wp 123 123 o2ut = 131._wp / 122._wp 124 125 CALL p4z_che ! initialize the chemical constants126 124 127 125 ! Initialization of tracer concentration in case of no restart … … 162 160 xksi(:,:) = 2.e-6 163 161 xksimax(:,:) = xksi(:,:) 164 165 ! Initialization of chemical variables of the carbon cycle 166 ! -------------------------------------------------------- 167 DO jk = 1, jpk 168 DO jj = 1, jpj 169 DO ji = 1, jpi 170 ztmas = tmask(ji,jj,jk) 171 ztmas1 = 1. - tmask(ji,jj,jk) 172 zcaralk = trn(ji,jj,jk,jptal) - borat(ji,jj,jk) / ( 1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) ) ) 173 zco3 = ( zcaralk - trn(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 174 zbicarb = ( 2. * trn(ji,jj,jk,jpdic) - zcaralk ) 175 hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 176 END DO 177 END DO 178 END DO 179 ! 162 ! 180 163 END IF 181 164 -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90
r3294 r4193 11 11 !! 3.3 ! 2010-06 (C. Ethe, G. Madec) merge TRA-TRC 12 12 !!---------------------------------------------------------------------- 13 #if defined key_top && defined key_trcdmp 14 !!---------------------------------------------------------------------- 15 !! key_trcdmp internal damping 13 #if defined key_top 16 14 !!---------------------------------------------------------------------- 17 15 !! trc_dmp : update the tracer trend with the internal damping … … 25 23 USE prtctl_trc ! Print control for debbuging 26 24 USE trdtra 25 USE trdmod_oce 27 26 28 27 IMPLICIT NONE … … 30 29 31 30 PUBLIC trc_dmp ! routine called by step.F90 31 PUBLIC trc_dmp_clo ! routine called by step.F90 32 32 PUBLIC trc_dmp_alloc ! routine called by nemogcm.F90 33 33 34 LOGICAL , PUBLIC, PARAMETER :: lk_trcdmp = .TRUE. !: internal damping flag35 36 34 ! !!* Namelist namtrc_dmp : passive tracer newtonian damping * 37 INTEGER :: nn_hdmp_tr = -1 ! = 0/-1/'latitude' for damping over passive tracer38 INTEGER :: nn_zdmp_tr = 0 ! = 0/1/2 flag for damping in the mixed layer39 REAL(wp) :: rn_surf_tr = 50. ! surface time scale for internal damping [days]40 REAL(wp) :: rn_bot_tr = 360. ! bottom time scale for internal damping [days]41 REAL(wp) :: rn_dep_tr = 800. ! depth of transition between rn_surf and rn_bot [meters]42 INTEGER :: nn_file_tr = 2 ! = 1 create a damping.coeff NetCDF file43 44 35 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: restotr ! restoring coeff. on tracers (s-1) 36 37 INTEGER, PARAMETER :: npncts = 5 ! number of closed sea 38 INTEGER, DIMENSION(npncts) :: nctsi1, nctsj1 ! south-west closed sea limits (i,j) 39 INTEGER, DIMENSION(npncts) :: nctsi2, nctsj2 ! north-east closed sea limits (i,j) 45 40 46 41 !! * Substitutions … … 86 81 INTEGER, INTENT( in ) :: kt ! ocean time-step index 87 82 !! 88 INTEGER :: ji, jj, jk, jn ! dummy loop indices83 INTEGER :: ji, jj, jk, jn, jl ! dummy loop indices 89 84 REAL(wp) :: ztra ! temporary scalars 90 85 CHARACTER (len=22) :: charout 91 86 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrtrd 87 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrcdta ! 4D workspace 92 88 !!---------------------------------------------------------------------- 93 89 ! … … 99 95 100 96 IF( l_trdtrc ) CALL wrk_alloc( jpi, jpj, jpk, ztrtrd ) ! temporary save of trends 101 102 ! 1. Newtonian damping trends on tracer fields 103 ! -------------------------------------------- 104 ! Initialize the input fields for newtonian damping 105 CALL trc_dta( kt ) 106 ! ! =========== 107 DO jn = 1, jptra ! tracer loop 108 ! ! =========== 109 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 110 111 IF( lutini(jn) ) THEN 97 ! 98 IF( nb_trcdta > 0 ) THEN ! Initialisation of tracer from a file that may also be used for damping 99 ! 100 CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) ! Memory allocation 101 CALL trc_dta( kt, ztrcdta ) ! read tracer data at nit000 102 ! ! =========== 103 DO jn = 1, jptra ! tracer loop 104 ! ! =========== 105 IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn) ! save trends 112 106 ! 113 SELECT CASE ( nn_zdmp_trc ) 114 ! 115 CASE( 0 ) !== newtonian damping throughout the water column ==! 116 DO jk = 1, jpkm1 117 DO jj = 2, jpjm1 118 DO ji = fs_2, fs_jpim1 ! vector opt. 119 ztra = restotr(ji,jj,jk) * ( trdta(ji,jj,jk,jn) - trb(ji,jj,jk,jn) ) 120 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 107 IF( ln_trc_ini(jn) ) THEN ! update passive tracers arrays with input data read from file 108 109 jl = n_trc_index(jn) 110 111 SELECT CASE ( nn_zdmp_tr ) 112 ! 113 CASE( 0 ) !== newtonian damping throughout the water column ==! 114 DO jk = 1, jpkm1 115 DO jj = 2, jpjm1 116 DO ji = fs_2, fs_jpim1 ! vector opt. 117 ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) - trb(ji,jj,jk,jn) ) 118 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 119 END DO 121 120 END DO 122 121 END DO 123 END DO124 !125 CASE ( 1 ) !== no damping in the turbocline (avt > 5 cm2/s) ==!126 DO jk = 1, jpkm1127 DO jj = 2, jpjm1128 DO ji = fs_2, fs_jpim1 ! vector opt.129 IF( avt(ji,jj,jk) <= 5.e-4 ) THEN130 ztra = restotr(ji,jj,jk) * ( trdta(ji,jj,jk,jn) - trb(ji,jj,jk,jn) )131 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra132 END IF122 ! 123 CASE ( 1 ) !== no damping in the turbocline (avt > 5 cm2/s) ==! 124 DO jk = 1, jpkm1 125 DO jj = 2, jpjm1 126 DO ji = fs_2, fs_jpim1 ! vector opt. 127 IF( avt(ji,jj,jk) <= 5.e-4 ) THEN 128 ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) - trb(ji,jj,jk,jn) ) 129 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 130 ENDIF 131 END DO 133 132 END DO 134 133 END DO 135 END DO136 !137 CASE ( 2 ) !== no damping in the mixed layer ==!138 DO jk = 1, jpkm1139 DO jj = 2, jpjm1140 DO ji = fs_2, fs_jpim1 ! vector opt.141 IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN142 ztra = restotr(ji,jj,jk,jn) * ( trdta(ji,jj,jk,jn) - trb(ji,jj,jk,jn) )143 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra144 END IF134 ! 135 CASE ( 2 ) !== no damping in the mixed layer ==! 136 DO jk = 1, jpkm1 137 DO jj = 2, jpjm1 138 DO ji = fs_2, fs_jpim1 ! vector opt. 139 IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 140 ztra = restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk,jl) - trb(ji,jj,jk,jn) ) 141 tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + ztra 142 END IF 143 END DO 145 144 END DO 146 145 END DO 147 END DO 148 ! 149 END SELECT 150 ! 151 ENDIF 152 ! 153 IF( l_trdtrc ) THEN 154 ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 155 CALL trd_tra( kt, 'TRC', jn, jptra_trd_dmp, ztrtrd ) 156 END IF 157 ! ! =========== 158 END DO ! tracer loop 159 ! ! =========== 146 ! 147 END SELECT 148 ! 149 ENDIF 150 ! 151 IF( l_trdtrc ) THEN 152 ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 153 CALL trd_tra( kt, 'TRC', jn, jptra_trd_dmp, ztrtrd ) 154 END IF 155 ! ! =========== 156 END DO ! tracer loop 157 ! ! =========== 158 CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 159 ENDIF 160 ! 160 161 IF( l_trdtrc ) CALL wrk_dealloc( jpi, jpj, jpk, ztrtrd ) 161 162 ! ! print mean trends (used for debugging) … … 168 169 ! 169 170 END SUBROUTINE trc_dmp 171 172 SUBROUTINE trc_dmp_clo( kt ) 173 !!--------------------------------------------------------------------- 174 !! *** ROUTINE trc_dmp_clo *** 175 !! 176 !! ** Purpose : Closed sea domain initialization 177 !! 178 !! ** Method : if a closed sea is located only in a model grid point 179 !! we restore to initial data 180 !! 181 !! ** Action : nctsi1(), nctsj1() : south-west closed sea limits (i,j) 182 !! nctsi2(), nctsj2() : north-east Closed sea limits (i,j) 183 !!---------------------------------------------------------------------- 184 INTEGER, INTENT( in ) :: kt ! ocean time-step index 185 ! 186 INTEGER :: ji, jj, jk, jn, jl, jc ! dummy loop indicesa 187 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrcdta ! 4D workspace 188 189 !!---------------------------------------------------------------------- 190 191 IF( kt == nit000 ) THEN 192 ! initial values 193 nctsi1(:) = 1 ; nctsi2(:) = 1 194 nctsj1(:) = 1 ; nctsj2(:) = 1 195 196 ! set the closed seas (in data domain indices) 197 ! ------------------- 198 199 IF( cp_cfg == "orca" ) THEN 200 ! 201 SELECT CASE ( jp_cfg ) 202 ! ! ======================= 203 CASE ( 2 ) ! ORCA_R2 configuration 204 ! ! ======================= 205 ! ! Caspian Sea 206 nctsi1(1) = 11 ; nctsj1(1) = 103 207 nctsi2(1) = 17 ; nctsj2(1) = 112 208 ! ! Great North American Lakes 209 nctsi1(2) = 97 ; nctsj1(2) = 107 210 nctsi2(2) = 103 ; nctsj2(2) = 111 211 ! ! Black Sea 1 : west part of the Black Sea 212 nctsi1(3) = 174 ; nctsj1(3) = 107 213 nctsi2(3) = 181 ; nctsj2(3) = 112 214 ! ! Black Sea 2 : est part of the Black Sea 215 nctsi1(4) = 2 ; nctsj1(4) = 107 216 nctsi2(4) = 6 ; nctsj2(4) = 112 217 ! ! Baltic Sea 218 nctsi1(5) = 145 ; nctsj1(5) = 116 219 nctsi2(5) = 150 ; nctsj2(5) = 126 220 ! ! ======================= 221 CASE ( 4 ) ! ORCA_R4 configuration 222 ! ! ======================= 223 ! ! Caspian Sea 224 nctsi1(1) = 4 ; nctsj1(1) = 53 225 nctsi2(1) = 4 ; nctsj2(1) = 56 226 ! ! Great North American Lakes 227 nctsi1(2) = 49 ; nctsj1(2) = 55 228 nctsi2(2) = 51 ; nctsj2(2) = 56 229 ! ! Black Sea 230 nctsi1(3) = 88 ; nctsj1(3) = 55 231 nctsi2(3) = 91 ; nctsj2(3) = 56 232 ! ! Baltic Sea 233 nctsi1(4) = 75 ; nctsj1(4) = 59 234 nctsi2(4) = 76 ; nctsj2(4) = 61 235 ! ! ======================= 236 CASE ( 025 ) ! ORCA_R025 configuration 237 ! ! ======================= 238 ! Caspian + Aral sea 239 nctsi1(1) = 1330 ; nctsj1(1) = 645 240 nctsi2(1) = 1400 ; nctsj2(1) = 795 241 ! ! Azov Sea 242 nctsi1(2) = 1284 ; nctsj1(2) = 722 243 nctsi2(2) = 1304 ; nctsj2(2) = 747 244 ! 245 END SELECT 246 ! 247 ENDIF 248 ! 249 250 ! convert the position in local domain indices 251 ! -------------------------------------------- 252 DO jc = 1, npncts 253 nctsi1(jc) = mi0( nctsi1(jc) ) 254 nctsj1(jc) = mj0( nctsj1(jc) ) 255 256 nctsi2(jc) = mi1( nctsi2(jc) ) 257 nctsj2(jc) = mj1( nctsj2(jc) ) 258 END DO 259 ! 260 ENDIF 261 262 ! Restore close seas values to initial data 263 IF( ln_trcdta .AND. nb_trcdta > 0 ) THEN ! Initialisation of tracer from a file that may also be used for damping 264 ! 265 IF(lwp) WRITE(numout,*) 266 IF(lwp) WRITE(numout,*) ' trc_dmp_clo : Restoring of nutrients on close seas at time-step kt = ', kt 267 IF(lwp) WRITE(numout,*) 268 ! 269 CALL wrk_alloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) ! Memory allocation 270 ! 271 CALL trc_dta( kt , ztrcdta ) ! read tracer data at nittrc000 272 ! 273 DO jn = 1, jptra 274 IF( ln_trc_ini(jn) ) THEN ! update passive tracers arrays with input data read from file 275 jl = n_trc_index(jn) 276 DO jc = 1, npncts 277 DO jk = 1, jpkm1 278 DO jj = nctsj1(jc), nctsj2(jc) 279 DO ji = nctsi1(jc), nctsi2(jc) 280 trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk,jl) * tmask(ji,jj,jk) 281 trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 282 ENDDO 283 ENDDO 284 ENDDO 285 ENDDO 286 ENDIF 287 ENDDO 288 CALL wrk_dealloc( jpi, jpj, jpk, nb_trcdta, ztrcdta ) 289 ENDIF 290 ! 291 END SUBROUTINE trc_dmp_clo 170 292 171 293 … … 199 321 END SELECT 200 322 201 IF( .NOT. lk_dtatrc ) & 202 & CALL ctl_stop( 'no passive tracer data define key_dtatrc' ) 203 204 IF( .NOT. lk_tradmp ) & 323 IF( .NOT. ln_tradmp ) & 205 324 & CALL ctl_stop( 'passive trace damping need key_tradmp to compute damping coef.' ) 206 325 ! … … 214 333 ! 215 334 END SUBROUTINE trc_dmp_init 335 216 336 #else 217 337 !!---------------------------------------------------------------------- 218 !! Default key NO internal damping 219 !!---------------------------------------------------------------------- 220 LOGICAL , PUBLIC, PARAMETER :: lk_trcdmp = .FALSE. !: internal damping flag 338 !! Dummy module : No passive tracer 339 !!---------------------------------------------------------------------- 221 340 CONTAINS 222 341 SUBROUTINE trc_dmp( kt ) ! Empty routine … … 225 344 END SUBROUTINE trc_dmp 226 345 #endif 346 347 227 348 !!====================================================================== 228 349 END MODULE trcdmp -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/TRP/trcnam_trp.F90
r3718 r4193 13 13 !! trc_nam_trp : read the passive tracer namelist for transport 14 14 !!---------------------------------------------------------------------- 15 USE trc ! ocean passive tracers variables 15 USE oce_trc ! shared ocean passive tracers variables 16 USE trc ! passive tracers variables 16 17 USE in_out_manager ! ocean dynamics and active tracers variables 17 18 … … 48 49 INTEGER , PUBLIC :: nn_trczdf_exp = 3 !: number of sub-time step (explicit time stepping) 49 50 50 51 #if defined key_trcdmp52 51 ! !!: ** newtonian damping namelist (nam_trcdmp) ** 53 52 INTEGER , PUBLIC :: nn_hdmp_tr = -1 ! = 0/-1/'latitude' for damping over passive tracer … … 57 56 REAL(wp), PUBLIC :: rn_dep_tr = 800. ! depth of transition between rn_surf and rn_bot [meters] 58 57 INTEGER , PUBLIC :: nn_file_tr = 2 ! = 1 create a damping.coeff NetCDF file 59 #endif60 58 61 59 !!---------------------------------------------------------------------- … … 82 80 NAMELIST/namtrc_zdf/ ln_trczdf_exp , nn_trczdf_exp 83 81 NAMELIST/namtrc_rad/ ln_trcrad 84 #if defined key_trcdmp 85 NAMELIST/namtrc_dmp/ ln_trcdmp, nn_hdmp_tr, nn_zdmp_tr, rn_surf_tr, & 82 NAMELIST/namtrc_dmp/ nn_hdmp_tr, nn_zdmp_tr, rn_surf_tr, & 86 83 & rn_bot_tr , rn_dep_tr , nn_file_tr 87 #endif88 84 !!---------------------------------------------------------------------- 89 85 … … 148 144 149 145 150 # if defined key_trcdmp151 146 REWIND ( numnat ) ! Read Namelist namtra_dmp : temperature and salinity damping term 152 147 READ ( numnat, namtrc_dmp ) 153 IF( lzoom ) nn_zdmp_tr c= 0 ! restoring to climatology at closed north or south boundaries148 IF( lzoom ) nn_zdmp_tr = 0 ! restoring to climatology at closed north or south boundaries 154 149 155 150 IF(lwp) THEN ! Namelist print … … 158 153 WRITE(numout,*) '~~~~~~~' 159 154 WRITE(numout,*) ' Namelist namtrc_dmp : set damping parameter' 160 WRITE(numout,*) ' add a damping term or not ln_trcdmp = ', ln_trcdmp161 155 WRITE(numout,*) ' tracer damping option nn_hdmp_tr = ', nn_hdmp_tr 162 156 WRITE(numout,*) ' mixed layer damping option nn_zdmp_tr = ', nn_zdmp_tr, '(zoom: forced to 0)' … … 166 160 WRITE(numout,*) ' create a damping.coeff file nn_file_tr = ', nn_file_tr 167 161 ENDIF 168 #endif169 162 ! 170 163 END SUBROUTINE trc_nam_trp -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/TRP/trctrp.F90
r3680 r4193 66 66 CALL trc_sbc( kstp ) ! surface boundary condition 67 67 IF( lk_trabbl ) CALL trc_bbl( kstp ) ! advective (and/or diffusive) bottom boundary layer scheme 68 IF( lk_trcdmp ) CALL trc_dmp( kstp ) ! internal damping trends 68 IF( ln_trcdmp ) CALL trc_dmp( kstp ) ! internal damping trends 69 IF( ln_trcdmp_clo ) CALL trc_dmp_clo( kstp ) ! internal damping trends on closed seas only 69 70 CALL trc_adv( kstp ) ! horizontal & vertical advection 70 71 CALL trc_ldf( kstp ) ! lateral mixing -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90
r3680 r4193 99 99 USE sbc_oce , ONLY : emp => emp !: freshwater budget: volume flux [Kg/m2/s] 100 100 USE sbc_oce , ONLY : emp_b => emp_b !: freshwater budget: volume flux [Kg/m2/s] 101 USE sbc_oce , ONLY : sfx => sfx !: downward salt flux [PSU/m2/s]101 USE sbc_oce , ONLY : fmmflx => fmmflx !: freshwater budget: volume flux [Kg/m2/s] 102 102 USE sbc_oce , ONLY : rnf => rnf !: river runoff [Kg/m2/s] 103 103 USE sbc_oce , ONLY : ln_dm2dc => ln_dm2dc !: Daily mean to Diurnal Cycle short wave (qsr) -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/trc.F90
r3770 r4193 26 26 INTEGER, PUBLIC :: numrtr !: logical unit for trc restart (read ) 27 27 INTEGER, PUBLIC :: numrtw !: logical unit for trc restart ( write ) 28 LOGICAL, PUBLIC :: ln_top_euler !: boolean term for euler integration in the first timestep29 28 30 29 !! passive tracers fields (before,now,after) … … 53 52 CHARACTER(len = 80) , PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 54 53 REAL(wp) , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: rdttrc !: vertical profile of passive tracer time step 54 LOGICAL , PUBLIC :: ln_top_euler !: boolean term for euler integration 55 55 LOGICAL , PUBLIC :: ln_trcdta !: Read inputs data from files 56 56 LOGICAL , PUBLIC :: ln_trcdmp !: internal damping flag 57 LOGICAL , PUBLIC :: ln_trcdmp_clo !: internal damping flag on closed seas 57 58 INTEGER , PUBLIC :: nittrc000 !: first time step of passive tracers model 58 59 … … 140 141 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr_i_tm !: average ice fraction [m/s] 141 142 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_tm !: freshwater budget: volume flux [Kg/m2/s] 142 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sfx_tm !: downward salt flux [PSU/m2/s]143 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fmmflx_tm !: freshwater budget: freezing/melting [Kg/m2/s] 143 144 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_b_hold !: hold emp from the beginning of each sub-stepping[m] 144 145 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qsr_tm !: solar radiation average [m] … … 180 181 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: hdivb_temp, rotb_temp 181 182 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: hmld_temp, qsr_temp, fr_i_temp,wndm_temp 182 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_temp, sfx_temp, emp_b_temp183 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_temp, fmmflx_temp, emp_b_temp 183 184 ! 184 185 #if defined key_trabbl -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/trcdta.F90
r3827 r4193 254 254 ENDDO 255 255 ENDIF 256 !257 IF( .NOT.ln_trcdmp ) THEN!== deallocate data structure ==!256 257 IF( .NOT.ln_trcdmp .AND. .NOT.ln_trcdmp_clo ) THEN !== deallocate data structure ==! 258 258 ! (data used only for initialisation) 259 259 IF(lwp) WRITE(numout,*) 'trc_dta: deallocate data arrays as they are only use to initialize the run' -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/trcnam.F90
r3749 r4193 59 59 !! 60 60 NAMELIST/namtrc/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, & 61 & cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta, ln_trcdmp,&62 & ln_t op_euler61 & cn_trcrst_in, cn_trcrst_out, sn_tracer, ln_trcdta, & 62 & ln_trcdmp, ln_trcdmp_clo, ln_top_euler 63 63 #if defined key_trdmld_trc || defined key_trdtrc 64 64 NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & … … 92 92 sn_tracer(jn)%llsave = .TRUE. 93 93 END DO 94 ln_trcdta = .FALSE. 95 ln_trcdmp = .FALSE. 94 ln_trcdta = .FALSE. 95 ln_trcdmp = .FALSE. 96 ln_trcdmp_clo = .FALSE. 96 97 97 98 … … 121 122 WRITE(numout,*) ' Read inputs data from file (y/n) ln_trcdta = ', ln_trcdta 122 123 WRITE(numout,*) ' Damping of passive tracer (y/n) ln_trcdmp = ', ln_trcdmp 124 WRITE(numout,*) ' Restoring of tracer on closed seas ln_trcdmp_clo = ', ln_trcdmp_clo 123 125 WRITE(numout,*) ' Use euler integration for TRC (y/n) ln_top_euler = ', ln_top_euler 124 126 WRITE(numout,*) ' ' … … 181 183 182 184 183 IF( ln_trcdmp .AND. .NOT.ln_trcdta ) THEN 184 CALL ctl_warn( 'trc_nam: passive tracer damping requires data from files we set ln_trcdta to TRUE' ) 185 ln_trcdta = .TRUE. 186 ENDIF 187 ! 188 IF( ln_rsttr .AND. .NOT.ln_trcdmp .AND. ln_trcdta ) THEN 189 CALL ctl_warn( 'trc_nam: passive tracer restart and data intialisation, ', & 190 & 'we keep the restart values and set ln_trcdta to FALSE' ) 191 ln_trcdta = .FALSE. 192 ENDIF 185 IF( ln_rsttr ) ln_trcdta = .FALSE. ! restart : no need of clim data 186 ! 187 IF( ln_trcdmp .OR. ln_trcdmp_clo ) ln_trcdta = .TRUE. ! damping : need to have clim data 193 188 ! 194 189 IF( .NOT.ln_trcdta ) THEN … … 199 194 IF( ln_rsttr ) THEN 200 195 WRITE(numout,*) 201 WRITE(numout,*) ' read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 202 WRITE(numout,*) 203 ELSE 204 IF( .NOT.ln_trcdta ) THEN 205 WRITE(numout,*) 206 WRITE(numout,*) ' All the passive tracers are initialised with constant values ' 207 WRITE(numout,*) 208 ENDIF 196 WRITE(numout,*) ' Read a restart file for passive tracer : ', TRIM( cn_trcrst_in ) 197 WRITE(numout,*) 198 ENDIF 199 IF( ln_trcdta .AND. .NOT.ln_rsttr ) THEN 200 WRITE(numout,*) 201 WRITE(numout,*) ' Some of the passive tracers are initialised from climatologies ' 202 WRITE(numout,*) 203 ENDIF 204 IF( .NOT.ln_trcdta ) THEN 205 WRITE(numout,*) 206 WRITE(numout,*) ' All the passive tracers are initialised with constant values ' 207 WRITE(numout,*) 209 208 ENDIF 210 209 ENDIF -
branches/2013/dev_r3867_MERCATOR1_DYN/NEMOGCM/NEMO/TOP_SRC/trcsub.F90
r3680 r4193 124 124 fr_i_tm (:,:) = fr_i_tm (:,:) + fr_i (:,:) 125 125 emp_tm (:,:) = emp_tm (:,:) + emp (:,:) 126 sfx_tm (:,:) = sfx_tm (:,:) + sfx(:,:)126 fmmflx_tm(:,:) = fmmflx_tm(:,:) + fmmflx(:,:) 127 127 qsr_tm (:,:) = qsr_tm (:,:) + qsr (:,:) 128 128 wndm_tm (:,:) = wndm_tm (:,:) + wndm (:,:) … … 212 212 emp_temp (:,:) = emp (:,:) 213 213 emp_b_temp (:,:) = emp_b (:,:) 214 sfx_temp (:,:) = sfx(:,:)214 fmmflx_temp(:,:) = fmmflx(:,:) 215 215 qsr_temp (:,:) = qsr (:,:) 216 216 wndm_temp (:,:) = wndm (:,:) … … 316 316 fr_i_tm (:,:) = fr_i_tm (:,:) + fr_i (:,:) 317 317 emp_tm (:,:) = emp_tm (:,:) + emp (:,:) 318 sfx_tm (:,:) = sfx_tm (:,:) + sfx(:,:)318 fmmflx_tm(:,:) = fmmflx_tm (:,:) + fmmflx(:,:) 319 319 qsr_tm (:,:) = qsr_tm (:,:) + qsr (:,:) 320 320 wndm_tm (:,:) = wndm_tm (:,:) + wndm (:,:) … … 335 335 qsr (:,:) = qsr_tm (:,:) * r1_ndttrc 336 336 emp (:,:) = emp_tm (:,:) * r1_ndttrc 337 sfx (:,:) = sfx_tm(:,:) * r1_ndttrc337 fmmflx(:,:) = fmmflx_tm (:,:) * r1_ndttrc 338 338 fr_i (:,:) = fr_i_tm (:,:) * r1_ndttrc 339 339 # if defined key_trabbl … … 351 351 qsr (:,:) = qsr_tm (:,:) * r1_ndttrcp1 352 352 emp (:,:) = emp_tm (:,:) * r1_ndttrcp1 353 sfx (:,:) = sfx_tm(:,:) * r1_ndttrcp1353 fmmflx(:,:) = fmmflx_tm (:,:) * r1_ndttrcp1 354 354 fr_i (:,:) = fr_i_tm (:,:) * r1_ndttrcp1 355 355 # if defined key_trabbl … … 501 501 CALL lbc_lnk( emp (:,:) , 'T', 1. ) 502 502 CALL lbc_lnk( emp_b (:,:) , 'T', 1. ) 503 CALL lbc_lnk( sfx(:,:) , 'T', 1. )503 CALL lbc_lnk( fmmflx(:,:) , 'T', 1. ) 504 504 CALL lbc_lnk( qsr (:,:) , 'T', 1. ) 505 505 CALL lbc_lnk( wndm (:,:) , 'T', 1. ) … … 601 601 fr_i_tm(:,:) = 0._wp 602 602 emp_tm (:,:) = 0._wp 603 sfx_tm(:,:) = 0._wp603 fmmflx_tm(:,:) = 0._wp 604 604 qsr_tm (:,:) = 0._wp 605 605 wndm_tm(:,:) = 0._wp … … 708 708 fr_i (:,:) = fr_i_temp (:,:) 709 709 emp (:,:) = emp_temp (:,:) 710 sfx (:,:) = sfx_temp(:,:)710 fmmflx(:,:) = fmmflx_temp(:,:) 711 711 emp_b (:,:) = emp_b_temp (:,:) 712 712 qsr (:,:) = qsr_temp (:,:) … … 827 827 fr_i_tm (:,:) = fr_i (:,:) 828 828 emp_tm (:,:) = emp (:,:) 829 sfx_tm (:,:) = sfx(:,:)829 fmmflx_tm (:,:) = fmmflx(:,:) 830 830 qsr_tm (:,:) = qsr (:,:) 831 831 wndm_tm (:,:) = wndm (:,:) … … 1056 1056 & rnf_temp(jpi,jpj) , h_rnf_temp(jpi,jpj) , & 1057 1057 & tsn_temp(jpi,jpj,jpk,2) , emp_b_temp(jpi,jpj), & 1058 & emp_temp(jpi,jpj) , sfx_temp(jpi,jpj) ,&1058 & emp_temp(jpi,jpj) , fmmflx_temp(jpi,jpj), & 1059 1059 & hmld_temp(jpi,jpj) , qsr_temp(jpi,jpj) , & 1060 1060 & fr_i_temp(jpi,jpj) , fr_i_tm(jpi,jpj) , & … … 1104 1104 & sshv_n_tm(jpi,jpj) , sshv_b_hold(jpi,jpj), & 1105 1105 & tsn_tm(jpi,jpj,jpk,2) , & 1106 & emp_tm(jpi,jpj) , sfx_tm(jpi,jpj) ,&1106 & emp_tm(jpi,jpj) , fmmflx_tm(jpi,jpj) , & 1107 1107 & emp_b_hold(jpi,jpj) , & 1108 1108 & hmld_tm(jpi,jpj) , qsr_tm(jpi,jpj) , &
Note: See TracChangeset
for help on using the changeset viewer.