- Timestamp:
- 2016-10-19T12:55:07+02:00 (7 years ago)
- Location:
- branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES
- Files:
-
- 27 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zbio.F90
r6140 r7041 9 9 !! 2.0 ! 2007-12 (C. Deltel, G. Madec) F90 10 10 !!---------------------------------------------------------------------- 11 #if defined key_pisces _reduced11 #if defined key_pisces 12 12 !!---------------------------------------------------------------------- 13 !! 'key_pisces _reduced' LOBSTER bio-model13 !! 'key_pisces' LOBSTER bio-model 14 14 !!---------------------------------------------------------------------- 15 15 !! p2z_bio : … … 86 86 !! source sink 87 87 !! 88 !! IF 'key_diabio' defined , the biogeochemical trends89 !! for passive tracers are saved for futher diagnostics.90 88 !!--------------------------------------------------------------------- 91 89 !! … … 109 107 IF( nn_timing == 1 ) CALL timing_start('p2z_bio') 110 108 ! 111 IF( l n_diatrc .OR. lk_iomput ) THEN109 IF( lk_iomput ) THEN 112 110 CALL wrk_alloc( jpi, jpj, 17, zw2d ) 113 111 CALL wrk_alloc( jpi, jpj, jpk, 3, zw3d ) … … 121 119 122 120 xksi(:,:) = 0.e0 ! zooplakton closure ( fbod) 123 IF( l n_diatrc .OR. lk_iomput ) THEN121 IF( lk_iomput ) THEN 124 122 zw2d (:,:,:) = 0.e0 125 123 zw3d(:,:,:,:) = 0.e0 … … 218 216 tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 219 217 220 221 IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 222 trbio(ji,jj,jk,jp_pcs0_trd ) = zno3phy 223 trbio(ji,jj,jk,jp_pcs0_trd + 1) = znh4phy 224 trbio(ji,jj,jk,jp_pcs0_trd + 2) = zphynh4 225 trbio(ji,jj,jk,jp_pcs0_trd + 3) = zphydom 226 trbio(ji,jj,jk,jp_pcs0_trd + 4) = zphyzoo 227 trbio(ji,jj,jk,jp_pcs0_trd + 5) = zphydet 228 trbio(ji,jj,jk,jp_pcs0_trd + 6) = zdetzoo 229 ! trend number 8 in p2zsed 230 trbio(ji,jj,jk,jp_pcs0_trd + 8) = zzoodet 231 trbio(ji,jj,jk,jp_pcs0_trd + 9) = zzoobod 232 trbio(ji,jj,jk,jp_pcs0_trd + 10) = zzoonh4 233 trbio(ji,jj,jk,jp_pcs0_trd + 11) = zzoodom 234 trbio(ji,jj,jk,jp_pcs0_trd + 12) = znh4no3 235 trbio(ji,jj,jk,jp_pcs0_trd + 13) = zdomnh4 236 trbio(ji,jj,jk,jp_pcs0_trd + 14) = zdetnh4 237 trbio(ji,jj,jk,jp_pcs0_trd + 15) = zdetdom 238 ! trend number 17 in p2zexp 239 ENDIF 240 IF( ln_diatrc .OR. lk_iomput ) THEN 218 IF( lk_iomput ) THEN 241 219 ! convert fluxes in per day 242 220 ze3t = e3t_n(ji,jj,jk) * 86400._wp … … 340 318 tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 341 319 ! 342 IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 343 trbio(ji,jj,jk,jp_pcs0_trd ) = zno3phy 344 trbio(ji,jj,jk,jp_pcs0_trd + 1) = znh4phy 345 trbio(ji,jj,jk,jp_pcs0_trd + 2) = zphynh4 346 trbio(ji,jj,jk,jp_pcs0_trd + 3) = zphydom 347 trbio(ji,jj,jk,jp_pcs0_trd + 4) = zphyzoo 348 trbio(ji,jj,jk,jp_pcs0_trd + 5) = zphydet 349 trbio(ji,jj,jk,jp_pcs0_trd + 6) = zdetzoo 350 ! trend number 8 in p2zsed 351 trbio(ji,jj,jk,jp_pcs0_trd + 8) = zzoodet 352 trbio(ji,jj,jk,jp_pcs0_trd + 9) = zzoobod 353 trbio(ji,jj,jk,jp_pcs0_trd + 10) = zzoonh4 354 trbio(ji,jj,jk,jp_pcs0_trd + 11) = zzoodom 355 trbio(ji,jj,jk,jp_pcs0_trd + 12) = znh4no3 356 trbio(ji,jj,jk,jp_pcs0_trd + 13) = zdomnh4 357 trbio(ji,jj,jk,jp_pcs0_trd + 14) = zdetnh4 358 trbio(ji,jj,jk,jp_pcs0_trd + 15) = zdetdom 359 ! trend number 17 in p2zexp 360 ENDIF 361 IF( ln_diatrc .OR. lk_iomput ) THEN 320 IF( lk_iomput ) THEN 362 321 ! convert fluxes in per day 363 322 ze3t = e3t_n(ji,jj,jk) * 86400._wp … … 389 348 END DO 390 349 391 IF( l n_diatrc .OR. lk_iomput ) THEN350 IF( lk_iomput ) THEN 392 351 DO jl = 1, 17 393 352 CALL lbc_lnk( zw2d(:,:,jl),'T', 1. ) … … 420 379 CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) ) 421 380 ! 422 ELSE423 IF( ln_diatrc ) THEN424 !425 trc2d(:,:,jp_pcs0_2d ) = zw2d(:,:,1)426 trc2d(:,:,jp_pcs0_2d + 1) = zw2d(:,:,2)427 trc2d(:,:,jp_pcs0_2d + 2) = zw2d(:,:,3)428 trc2d(:,:,jp_pcs0_2d + 3) = zw2d(:,:,4)429 trc2d(:,:,jp_pcs0_2d + 4) = zw2d(:,:,5)430 trc2d(:,:,jp_pcs0_2d + 5) = zw2d(:,:,6)431 trc2d(:,:,jp_pcs0_2d + 6) = zw2d(:,:,7)432 ! trend number 8 is in p2zsed.F433 trc2d(:,:,jp_pcs0_2d + 8) = zw2d(:,:,8)434 trc2d(:,:,jp_pcs0_2d + 9) = zw2d(:,:,9)435 trc2d(:,:,jp_pcs0_2d + 10) = zw2d(:,:,10)436 trc2d(:,:,jp_pcs0_2d + 11) = zw2d(:,:,11)437 trc2d(:,:,jp_pcs0_2d + 12) = zw2d(:,:,12)438 trc2d(:,:,jp_pcs0_2d + 13) = zw2d(:,:,13)439 trc2d(:,:,jp_pcs0_2d + 14) = zw2d(:,:,14)440 trc2d(:,:,jp_pcs0_2d + 15) = zw2d(:,:,15)441 trc2d(:,:,jp_pcs0_2d + 16) = zw2d(:,:,16)442 trc2d(:,:,jp_pcs0_2d + 17) = zw2d(:,:,17)443 ! trend number 19 is in p2zexp.F444 trc3d(:,:,:,jp_pcs0_3d ) = zw3d(:,:,:,1)445 trc3d(:,:,:,jp_pcs0_3d + 1) = zw3d(:,:,:,2)446 trc3d(:,:,:,jp_pcs0_3d + 2) = zw3d(:,:,:,3)447 ENDIF448 !449 ENDIF450 451 IF( ln_diabio .AND. .NOT. lk_iomput ) THEN452 DO jl = jp_pcs0_trd, jp_pcs1_trd453 CALL lbc_lnk( trbio(:,:,1,jl),'T', 1. )454 END DO455 ENDIF456 !457 IF( l_trdtrc ) THEN458 DO jl = jp_pcs0_trd, jp_pcs1_trd459 CALL trd_trc( trbio(:,:,:,jl), jl, kt ) ! handle the trend460 END DO461 381 ENDIF 462 382 … … 467 387 ENDIF 468 388 ! 469 IF( l n_diatrc .OR. lk_iomput ) THEN389 IF( lk_iomput ) THEN 470 390 CALL wrk_dealloc( jpi, jpj, 17, zw2d ) 471 391 CALL wrk_dealloc( jpi, jpj, jpk, 3, zw3d ) -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zexp.F90
r6140 r7041 10 10 !! 3.5 ! 2012-03 (C. Ethe) Merge PISCES-LOBSTER 11 11 !!---------------------------------------------------------------------- 12 #if defined key_pisces _reduced13 !!---------------------------------------------------------------------- 14 !! 'key_pisces _reduced' LOBSTER bio-model12 #if defined key_pisces 13 !!---------------------------------------------------------------------- 14 !! 'key_pisces' LOBSTER bio-model 15 15 !!---------------------------------------------------------------------- 16 16 !! p2z_exp : Compute loss of organic matter in the sediments … … 68 68 INTEGER :: ji, jj, jk, jl, ikt 69 69 REAL(wp) :: zgeolpoc, zfact, zwork, ze3t, zsedpocd, zmaskt 70 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrbio71 70 REAL(wp), POINTER, DIMENSION(:,:) :: zsedpoca 72 71 CHARACTER (len=25) :: charout … … 80 79 zsedpoca(:,:) = 0. 81 80 82 IF( l_trdtrc ) THEN83 CALL wrk_alloc( jpi, jpj, jpk, ztrbio ) ! temporary save of trends84 ztrbio(:,:,:) = tra(:,:,:,jpno3)85 ENDIF86 81 87 82 ! VERTICAL DISTRIBUTION OF NEWLY PRODUCED BIOGENIC … … 126 121 127 122 ! Oa & Ek: diagnostics depending on jpdia2d ! left as example 128 IF( lk_iomput ) THEN 129 CALL iom_put( "SEDPOC" , sedpocn ) 130 ELSE 131 IF( ln_diatrc ) trc2d(:,:,jp_pcs0_2d + 18) = sedpocn(:,:) 132 ENDIF 123 IF( lk_iomput ) CALL iom_put( "SEDPOC" , sedpocn ) 133 124 134 125 … … 160 151 ENDIF 161 152 ! 162 IF( l_trdtrc ) THEN163 ztrbio(:,:,:) = tra(:,:,:,jpno3) - ztrbio(:,:,:)164 jl = jp_pcs0_trd + 16165 CALL trd_trc( ztrbio, jl, kt ) ! handle the trend166 CALL wrk_dealloc( jpi, jpj, jpk, ztrbio ) ! temporary save of trends167 ENDIF168 !169 153 CALL wrk_dealloc( jpi, jpj, zsedpoca) ! temporary save of trends 170 154 -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zopt.F90
r6140 r7041 11 11 !! 3.2 ! 2009-04 (C. Ethe, G. Madec) minor optimisation + style 12 12 !!---------------------------------------------------------------------- 13 #if defined key_pisces _reduced14 !!---------------------------------------------------------------------- 15 !! 'key_pisces _reduced' LOBSTER bio-model13 #if defined key_pisces 14 !!---------------------------------------------------------------------- 15 !! 'key_pisces' LOBSTER bio-model 16 16 !!---------------------------------------------------------------------- 17 17 !! p2z_opt : Compute the light availability in the water column -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsed.F90
r6140 r7041 8 8 !! 2.0 ! 2007-12 (C. Deltel, G. Madec) F90 + simplifications 9 9 !!---------------------------------------------------------------------- 10 #if defined key_pisces _reduced10 #if defined key_pisces 11 11 !!---------------------------------------------------------------------- 12 !! 'key_pisces _reduced' LOBSTER bio-model12 !! 'key_pisces' LOBSTER bio-model 13 13 !!---------------------------------------------------------------------- 14 14 !! p2z_sed : Compute loss of organic matter in the sediments … … 66 66 CHARACTER (len=25) :: charout 67 67 REAL(wp), POINTER, DIMENSION(:,: ) :: zw2d 68 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwork, ztra , ztrbio68 REAL(wp), POINTER, DIMENSION(:,:,:) :: zwork, ztra 69 69 !!--------------------------------------------------------------------- 70 70 ! … … 79 79 ! Allocate temporary workspace 80 80 CALL wrk_alloc( jpi, jpj, jpk, zwork, ztra ) 81 IF( l_trdtrc ) THEN82 CALL wrk_alloc( jpi, jpj, jpk, ztrbio )83 ztrbio(:,:,:) = tra(:,:,:,jpdet)84 ENDIF85 81 86 82 ! sedimentation of detritus : upstream scheme … … 116 112 CALL wrk_dealloc( jpi, jpj, zw2d ) 117 113 ENDIF 118 ELSE119 IF( ln_diatrc ) THEN120 CALL wrk_alloc( jpi, jpj, zw2d )121 zw2d(:,:) = ztra(:,:,1) * e3t_n(:,:,1) * 86400._wp122 DO jk = 2, jpkm1123 zw2d(:,:) = zw2d(:,:) + ztra(:,:,jk) * e3t_n(:,:,jk) * 86400._wp124 END DO125 trc2d(:,:,jp_pcs0_2d + 7) = zw2d(:,:)126 CALL wrk_dealloc( jpi, jpj, zw2d )127 ENDIF128 114 ENDIF 129 115 ! 130 IF( ln_diabio .AND. .NOT. lk_iomput ) trbio(:,:,:,jp_pcs0_trd + 7) = ztra(:,:,:)131 116 CALL wrk_dealloc( jpi, jpj, jpk, zwork, ztra ) 132 117 ! 133 IF( l_trdtrc ) THEN134 ztrbio(:,:,:) = tra(:,:,:,jpdet) - ztrbio(:,:,:)135 jl = jp_pcs0_trd + 7136 CALL trd_trc( ztrbio, jl, kt ) ! handle the trend137 CALL wrk_dealloc( jpi, jpj, jpk, ztrbio )138 ENDIF139 118 140 119 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsms.F90
r5656 r7041 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) revised architecture 8 8 !!---------------------------------------------------------------------- 9 #if defined key_pisces _reduced9 #if defined key_pisces 10 10 !!---------------------------------------------------------------------- 11 !! 'key_pisces _reduced' LOBSTER bio-model11 !! 'key_pisces' LOBSTER bio-model 12 12 !!---------------------------------------------------------------------- 13 13 !! p2zsms : Time loop of passive tracers sms -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90
r6140 r7041 67 67 REAL(wp) :: zdenom1, zscave, zaggdfea, zaggdfeb, zcoag 68 68 REAL(wp) :: ztrc, zdust 69 #if ! defined key_kriest70 69 REAL(wp) :: zdenom, zdenom2 71 #endif72 70 REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig 73 71 REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP … … 76 74 REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2 77 75 REAL(wp) :: ztfe, zoxy 78 REAL(wp) :: zstep79 76 !!--------------------------------------------------------------------- 80 77 ! … … 212 209 DO jj = 1, jpj 213 210 DO ji = 1, jpi 214 zstep = xstep215 # if defined key_degrad216 zstep = zstep * facvol(ji,jj,jk)217 # endif218 211 ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water. 219 212 ! This parameterization assumes a simple second order kinetics (k[Particles][Fe]). … … 227 220 zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 228 221 ENDIF 229 #if defined key_kriest 230 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 231 #else 232 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 233 #endif 222 223 ztrc = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6 234 224 IF( ln_dust ) zdust = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 235 225 zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc 236 zscave = zfeequi * zlam1b * zstep226 zscave = zfeequi * zlam1b * xstep 237 227 238 228 ! Compute the different ratios for scavenging of iron … … 240 230 ! --------------------------------------------------------- 241 231 zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 242 #if ! defined key_kriest243 232 zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 244 #endif245 233 246 234 ! Increased scavenging for very high iron concentrations found near the coasts … … 252 240 zdep = MIN( 1., 1000. / gdept_n(ji,jj,jk) ) 253 241 zlam1b = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 254 zcoag = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer)242 zcoag = zfeequi * zlam1b * xstep + 1E-4 * ( 1. - zlamfac ) * zdep * xstep * trb(ji,jj,jk,jpfer) 255 243 256 244 ! Compute the coagulation of colloidal iron. This parameterization … … 260 248 zlam1a = ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk) & 261 249 & + ( 114. * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 262 zaggdfea = zlam1a * zstep * zfecoll 263 #if defined key_kriest 264 zaggdfeb = 0. 265 ! 266 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag 267 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 268 #else 250 zaggdfea = zlam1a * xstep * zfecoll 269 251 zlam1b = 3.53E3 * trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 270 zaggdfeb = zlam1b * zstep * zfecoll252 zaggdfeb = zlam1b * xstep * zfecoll 271 253 ! 272 254 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag 273 255 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 274 256 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 275 #endif276 257 END DO 277 258 END DO -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90
r6962 r7041 167 167 zkgwan = 0.251 * zws 168 168 zkgwan = zkgwan * xconv * ( 1.- fr_i(ji,jj) ) * tmask(ji,jj,1) 169 # if defined key_degrad170 zkgwan = zkgwan * facvol(ji,jj,1)171 #endif172 169 ! compute gas exchange for CO2 and O2 173 170 zkgco2(ji,jj) = zkgwan * SQRT( 660./ zsch_co2 ) … … 239 236 ! 240 237 CALL wrk_dealloc( jpi, jpj, zw2d ) 241 ELSE242 IF( ln_diatrc ) THEN243 trc2d(:,:,jp_pcs0_2d ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r244 trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1)245 trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1)246 trc2d(:,:,jp_pcs0_2d + 3) = ( zpco2atm(:,:) - zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1)247 ENDIF248 238 ENDIF 249 239 ! -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r6945 r7041 129 129 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 130 130 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 131 # if defined key_degrad132 zdispot = zdispot * facvol(ji,jj,jk)133 # endif134 131 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 135 132 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION … … 150 147 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3 * tmask(:,:,:) ) 151 148 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 152 ELSE153 IF( ln_diatrc ) THEN154 trc3d(:,:,:,jp_pcs0_3d ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:)155 trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:) * tmask(:,:,:)156 trc3d(:,:,:,jp_pcs0_3d + 2) = zco3sat(:,:,:) * tmask(:,:,:)157 ENDIF158 149 ENDIF 159 150 ! -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90
r5836 r7041 70 70 REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 71 71 REAL(wp) :: zgraze2 , zdenom, zdenom2 72 REAL(wp) :: zfact , z step, zfood, zfoodlim, zproport72 REAL(wp) :: zfact , zfood, zfoodlim, zproport 73 73 REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2 74 74 REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf 75 75 REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2, zgrasrat, zgrasratn 76 #if defined key_kriest77 REAL znumpoc78 #endif79 76 REAL(wp) :: zrespz2, ztortz2, zgrazd, zgrazz, zgrazpof 80 77 REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf … … 96 93 DO ji = 1, jpi 97 94 zcompam = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 98 # if defined key_degrad 99 zstep = xstep * facvol(ji,jj,jk) 100 # else 101 zstep = xstep 102 # endif 103 zfact = zstep * tgfunc2(ji,jj,jk) * zcompam 95 zfact = xstep * tgfunc2(ji,jj,jk) * zcompam 104 96 105 97 ! Respiration rates of both zooplankton … … 126 118 zdenom = zfoodlim / ( xkgraz2 + zfoodlim ) 127 119 zdenom2 = zdenom / ( zfood + rtrn ) 128 zgraze2 = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)120 zgraze2 = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) 129 121 130 122 zgrazd = zgraze2 * xprefc * zcompadi * zdenom2 … … 140 132 ! ---------------------------------- 141 133 ! ---------------------------------- 142 # if ! defined key_kriest 143 zgrazffeg = grazflux * zstep * wsbio4(ji,jj,jk) & 134 zgrazffeg = grazflux * xstep * wsbio4(ji,jj,jk) & 144 135 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 145 136 zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 146 # endif 147 zgrazffep = grazflux * zstep * wsbio3(ji,jj,jk) & 137 zgrazffep = grazflux * xstep * wsbio3(ji,jj,jk) & 148 138 & * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 149 139 zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 150 140 ! 151 # if ! defined key_kriest152 141 zgraztot = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 153 142 ! Compute the proportion of filter feeders … … 158 147 zratio = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 159 148 zratio2 = zratio * zratio 160 zfrac = zproport * grazflux * zstep * wsbio4(ji,jj,jk) &149 zfrac = zproport * grazflux * xstep * wsbio4(ji,jj,jk) & 161 150 & * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 162 151 & * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) … … 171 160 & + zgrazpoc + zgrazffep + zgrazffeg 172 161 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 173 # else174 zgraztot = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep175 ! Compute the proportion of filter feeders176 zproport = zgrazffep / ( zgraztot + rtrn )177 zgrazffep = zproport * zgrazffep178 zgrazfffp = zproport * zgrazfffp179 zgraztot = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep180 zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) + zgrazpoc + zgrazffep181 zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp182 # endif183 162 184 163 ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) … … 228 207 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 229 208 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 230 #if defined key_kriest 231 znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 232 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 233 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso & 234 & + zmortzgoc * xkr_dmeso - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn ) 235 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortzgoc - zgrazfffp - zgrazpof & 236 & + zgraztotf * unass2 237 #else 238 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 239 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 240 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 241 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg & 242 & + zgraztotf * unass2 - zfracfe 243 #endif 209 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 210 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 211 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 212 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg & 213 & + zgraztotf * unass2 - zfracfe 244 214 END DO 245 215 END DO -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90
r5836 r7041 71 71 REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 72 72 REAL(wp) :: zgraze , zdenom, zdenom2 73 REAL(wp) :: zfact , z step, zfood, zfoodlim73 REAL(wp) :: zfact , zfood, zfoodlim 74 74 REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf 75 75 REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz … … 89 89 DO ji = 1, jpi 90 90 zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 91 zstep = xstep 92 # if defined key_degrad 93 zstep = zstep * facvol(ji,jj,jk) 94 # endif 95 zfact = zstep * tgfunc2(ji,jj,jk) * zcompaz 91 zfact = xstep * tgfunc2(ji,jj,jk) * zcompaz 96 92 97 93 ! Respiration rates of both zooplankton … … 115 111 zdenom = zfoodlim / ( xkgraz + zfoodlim ) 116 112 zdenom2 = zdenom / ( zfood + rtrn ) 117 zgraze = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo)113 zgraze = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) 118 114 119 115 zgrazp = zgraze * xpref2p * zcompaph * zdenom2 … … 130 126 131 127 ! Grazing by microzooplankton 132 IF( l n_diatrc .AND. lk_iomput ) zgrazing(ji,jj,jk) = zgraztot128 IF( lk_iomput ) zgrazing(ji,jj,jk) = zgraztot 133 129 134 130 ! Various remineralization and excretion terms … … 154 150 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 155 151 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 156 #if defined key_kriest157 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_dmicro158 #endif159 152 ! Update the arrays TRA which contain the biological sources and sinks 160 153 ! -------------------------------------------------------------------- … … 180 173 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 181 174 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 182 #if defined key_kriest183 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro &184 - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )185 #endif186 175 END DO 187 176 END DO -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90
r5836 r7041 73 73 REAL(wp) :: zsizerat, zcompaph 74 74 REAL(wp) :: zfactfe, zfactch, zprcaca, zfracal 75 REAL(wp) :: ztortp , zrespp , zmortp , zstep75 REAL(wp) :: ztortp , zrespp , zmortp 76 76 CHARACTER (len=25) :: charout 77 77 !!--------------------------------------------------------------------- … … 84 84 DO ji = 1, jpi 85 85 zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 86 zstep = xstep87 # if defined key_degrad88 zstep = zstep * facvol(ji,jj,jk)89 # endif90 86 ! When highly limited by macronutrients, very small cells 91 87 ! dominate the community. As a consequence, aggregation … … 95 91 ! Squared mortality of Phyto similar to a sedimentation term during 96 92 ! blooms (Doney et al. 1996) 97 zrespp = wchl * 1.e6 * zstep * xdiss(ji,jj,jk) * zcompaph * zsizerat93 zrespp = wchl * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * zsizerat 98 94 99 95 ! Phytoplankton mortality. This mortality loss is slightly … … 119 115 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 120 116 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 121 #if defined key_kriest122 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp123 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp * xkr_dnano + zrespp * xkr_ddiat124 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe125 #else126 117 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfracal * zmortp 127 118 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ( 1. - zfracal ) * zmortp 128 119 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ( 1. - zfracal ) * zmortp * zfactfe 129 120 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zfracal * zmortp * zfactfe 130 #endif131 121 END DO 132 122 END DO … … 153 143 INTEGER :: ji, jj, jk 154 144 REAL(wp) :: zfactfe,zfactsi,zfactch, zcompadi 155 REAL(wp) :: zrespp2, ztortp2, zmortp2 , zstep145 REAL(wp) :: zrespp2, ztortp2, zmortp2 156 146 REAL(wp) :: zlim2, zlim1 157 147 CHARACTER (len=25) :: charout … … 176 166 ! sticky and coagulate to sink quickly out of the euphotic zone 177 167 ! ------------------------------------------------------------ 178 zstep = xstep179 # if defined key_degrad180 zstep = zstep * facvol(ji,jj,jk)181 # endif182 168 ! Phytoplankton respiration 183 169 ! ------------------------ 184 170 zlim2 = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 185 171 zlim1 = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 ) 186 zrespp2 = 1.e6 * zstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia)172 zrespp2 = 1.e6 * xstep * ( wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 187 173 188 174 ! Phytoplankton mortality. 189 175 ! ------------------------ 190 ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi176 ztortp2 = mprat2 * xstep * trb(ji,jj,jk,jpdia) / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi 191 177 192 178 zmortp2 = zrespp2 + ztortp2 … … 202 188 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zmortp2 * zfactsi 203 189 tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zmortp2 * zfactsi 204 #if defined key_kriest205 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp2206 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp2 * xkr_ddiat + zrespp2 * xkr_daggr207 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp2 * zfactfe208 #else209 190 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 + 0.5 * ztortp2 210 191 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + 0.5 * ztortp2 211 192 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 0.5 * ztortp2 * zfactfe 212 193 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe 213 #endif214 194 END DO 215 195 END DO -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90
r6962 r7041 215 215 IF( iom_use( "PAR" ) ) CALL iom_put( "PAR" , emoy(:,:,:) * tmask(:,:,:) ) ! Photosynthetically Available Radiation 216 216 ENDIF 217 ELSE218 IF( ln_diatrc ) THEN ! save output diagnostics219 trc2d(:,:, jp_pcs0_2d + 10) = heup(:,: ) * tmask(:,:,1)220 trc3d(:,:,:,jp_pcs0_3d + 3) = etot(:,:,:) * tmask(:,:,:)221 ENDIF222 217 ENDIF 223 218 ! -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90
r6945 r7041 110 110 ! Computation of the optimal production 111 111 prmax(:,:,:) = 0.6_wp * r1_rday * tgfunc(:,:,:) 112 IF( lk_degrad ) prmax(:,:,:) = prmax(:,:,:) * facvol(:,:,:)113 112 114 113 ! compute the day length depending on latitude and the day … … 482 481 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 483 482 ENDIF 484 ELSE485 IF( ln_diatrc ) THEN486 zfact = 1.e+3 * rfact2r487 trc3d(:,:,:,jp_pcs0_3d + 4) = zprorca (:,:,:) * zfact * tmask(:,:,:)488 trc3d(:,:,:,jp_pcs0_3d + 5) = zprorcad(:,:,:) * zfact * tmask(:,:,:)489 trc3d(:,:,:,jp_pcs0_3d + 6) = zpronew (:,:,:) * zfact * tmask(:,:,:)490 trc3d(:,:,:,jp_pcs0_3d + 7) = zpronewd(:,:,:) * zfact * tmask(:,:,:)491 trc3d(:,:,:,jp_pcs0_3d + 8) = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:)492 trc3d(:,:,:,jp_pcs0_3d + 9) = zprofed (:,:,:) * zfact * tmask(:,:,:)493 # if ! defined key_kriest494 trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zfact * tmask(:,:,:)495 # endif496 ENDIF497 483 ENDIF 498 484 -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90
r6945 r7041 72 72 REAL(wp) :: zbactfer, zorem, zorem2, zofer, zolimit 73 73 REAL(wp) :: zosil, ztem 74 #if ! defined key_kriest75 74 REAL(wp) :: zofer2 76 #endif 77 REAL(wp) :: zonitr, zstep, zfact 75 REAL(wp) :: zonitr, zfact 78 76 CHARACTER (len=25) :: charout 79 77 REAL(wp), POINTER, DIMENSION(:,: ) :: ztempbac … … 115 113 DO jj = 1, jpj 116 114 DO ji = 1, jpi 117 zstep = xstep118 # if defined key_degrad119 zstep = zstep * facvol(ji,jj,jk)120 # endif121 115 ! DOC ammonification. Depends on depth, phytoplankton biomass 122 116 ! and a limitation term which is supposed to be a parameterization 123 117 ! of the bacterial activity. 124 zremik = xremik * zstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)118 zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk) 125 119 zremik = MAX( zremik, 2.74e-4 * xstep ) 126 120 ! Ammonification in oxic waters with oxygen consumption … … 144 138 DO jj = 1, jpj 145 139 DO ji = 1, jpi 146 zstep = xstep147 # if defined key_degrad148 zstep = zstep * facvol(ji,jj,jk)149 # endif150 140 ! NH4 nitrification to NO3. Ceased for oxygen concentrations 151 141 ! below 2 umol/L. Inhibited at strong light 152 142 ! ---------------------------------------------------------- 153 zonitr =nitrif * zstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )154 denitnh4(ji,jj,jk) = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)143 zonitr =nitrif * xstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) ) 144 denitnh4(ji,jj,jk) = nitrif * xstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 155 145 ! Update of the tracers trends 156 146 ! ---------------------------- … … 180 170 & * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) ) & 181 171 & * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 182 #if defined key_kriest183 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.05184 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.05185 #else186 172 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.16 187 173 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.12 188 174 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.04 189 #endif190 175 END DO 191 176 END DO … … 201 186 DO jj = 1, jpj 202 187 DO ji = 1, jpi 203 zstep = xstep204 # if defined key_degrad205 zstep = zstep * facvol(ji,jj,jk)206 # endif207 188 ! POC disaggregation by turbulence and bacterial activity. 208 189 ! -------------------------------------------------------- 209 zremip = xremip * zstep * tgfunc(ji,jj,jk) * ( 1.- 0.55 * nitrfac(ji,jj,jk) )190 zremip = xremip * xstep * tgfunc(ji,jj,jk) * ( 1.- 0.55 * nitrfac(ji,jj,jk) ) 210 191 211 192 ! POC disaggregation rate is reduced in anoxic zone as shown by … … 216 197 zorem = zremip * trb(ji,jj,jk,jppoc) 217 198 zofer = zremip * trb(ji,jj,jk,jpsfe) 218 #if ! defined key_kriest219 199 zorem2 = zremip * trb(ji,jj,jk,jpgoc) 220 200 zofer2 = zremip * trb(ji,jj,jk,jpbfe) 221 #else222 zorem2 = zremip * trb(ji,jj,jk,jpnum)223 #endif224 201 225 202 ! Update the appropriate tracers trends … … 228 205 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 229 206 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 230 #if defined key_kriest231 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zorem232 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zorem2233 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer234 #else235 207 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem2 - zorem 236 208 tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 237 209 tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zofer2 - zofer 238 210 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 239 #endif240 211 241 212 END DO … … 252 223 DO jj = 1, jpj 253 224 DO ji = 1, jpi 254 zstep = xstep255 # if defined key_degrad256 zstep = zstep * facvol(ji,jj,jk)257 # endif258 225 ! Remineralization rate of BSi depedant on T and saturation 259 226 ! --------------------------------------------------------- … … 272 239 ztem = MAX( tsn(ji,jj,1,jp_tem), 0. ) 273 240 zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 274 zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil241 zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * xstep * znusil 275 242 zosil = zsiremin * trb(ji,jj,jk,jpgsi) 276 243 ! -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90
r6140 r7041 145 145 & CALL iom_put( "pdust" , dust(:,:) / ( wdust * rday ) * tmask(:,:,1) ) ! dust concentration at surface 146 146 ENDIF 147 ELSE148 IF( ln_diatrc ) &149 & trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * 1.e+3 * rfact2r * e3t_n(:,:,1) * tmask(:,:,1)150 147 ENDIF 151 148 CALL wrk_dealloc( jpi, jpj, zpdep, zsidep ) … … 196 193 ENDIF 197 194 198 ! OA: Warning, the following part is necessary, especially with Kriest 199 ! to avoid CFL problems above the sediments 195 ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 200 196 ! -------------------------------------------------------------------- 201 197 DO jj = 1, jpj … … 217 213 IF( tmask(ji,jj,1) == 1 ) THEN 218 214 ikt = mbkt(ji,jj) 219 # if defined key_kriest220 zflx = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) * 1E3 * 1E6 / 1E4221 # else222 215 zflx = ( trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) & 223 216 & + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E3 * 1E6 / 1E4 224 #endif225 217 zflx = LOG10( MAX( 1E-3, zflx ) ) 226 218 zo2 = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) … … 246 238 IF( tmask(ji,jj,1) == 1 ) THEN 247 239 ikt = mbkt(ji,jj) 248 # if defined key_kriest249 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj)250 zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)251 # else252 240 zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 253 241 zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 254 # endif255 242 ! For calcite, burial efficiency is made a function of saturation 256 243 zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) … … 278 265 zws4 = zwsbio4(ji,jj) * zdep 279 266 zwsc = zwscal (ji,jj) * zdep 280 # if defined key_kriest281 zsiloss = trb(ji,jj,ikt,jpgsi) * zws4282 # else283 267 zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 284 # endif285 268 zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 286 269 ! … … 305 288 zws3 = zwsbio3(ji,jj) * zdep 306 289 zrivno3 = 1. - zbureff(ji,jj) 307 # if ! defined key_kriest308 290 tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4 309 291 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 … … 311 293 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 312 294 zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 313 # else314 tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4315 tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3316 tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3317 zwstpoc = trb(ji,jj,ikt,jppoc) * zws3318 # endif319 295 320 296 #if ! defined key_sed … … 346 322 zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 347 323 IF( zlim <= 0.2 ) zlim = 0.01 348 #if defined key_degrad349 zfact = zlim * rfact2 * facvol(ji,jj,jk)350 #else351 324 zfact = zlim * rfact2 352 #endif 325 353 326 ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 354 327 ztrpo4 = trb (ji,jj,jk,jppo4) / ( concnnh4 + trb (ji,jj,jk,jppo4) ) … … 389 362 ENDIF 390 363 ENDIF 391 ELSE392 IF( ln_diatrc ) &393 & trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * e3t_n(:,:,1) * tmask(:,:,1)394 364 ENDIF 395 365 ! -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90
r6140 r7041 37 37 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 38 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 39 #if ! defined key_kriest40 39 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes 41 #endif42 40 43 41 INTEGER :: ik100 44 45 #if defined key_kriest46 REAL(wp) :: xkr_sfact !: Sinking factor47 REAL(wp) :: xkr_stick !: Stickiness48 REAL(wp) :: xkr_nnano !: Nbr of cell in nano size class49 REAL(wp) :: xkr_ndiat !: Nbr of cell in diatoms size class50 REAL(wp) :: xkr_nmicro !: Nbr of cell in microzoo size class51 REAL(wp) :: xkr_nmeso !: Nbr of cell in mesozoo size class52 REAL(wp) :: xkr_naggr !: Nbr of cell in aggregates size class53 54 REAL(wp) :: xkr_frac55 56 REAL(wp), PUBLIC :: xkr_dnano !: Size of particles in nano pool57 REAL(wp), PUBLIC :: xkr_ddiat !: Size of particles in diatoms pool58 REAL(wp), PUBLIC :: xkr_dmicro !: Size of particles in microzoo pool59 REAL(wp), PUBLIC :: xkr_dmeso !: Size of particles in mesozoo pool60 REAL(wp), PUBLIC :: xkr_daggr !: Size of particles in aggregates pool61 REAL(wp), PUBLIC :: xkr_wsbio_min !: min vertical particle speed62 REAL(wp), PUBLIC :: xkr_wsbio_max !: max vertical particle speed63 64 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm !: maximum number of particles in aggregates65 #endif66 42 67 43 !!---------------------------------------------------------------------- … … 72 48 CONTAINS 73 49 74 #if ! defined key_kriest75 50 !!---------------------------------------------------------------------- 76 51 !! 'standard sinking parameterisation' ??? … … 91 66 REAL(wp) :: zagg1, zagg2, zagg3, zagg4 92 67 REAL(wp) :: zagg , zaggfe, zaggdoc, zaggdoc2, zaggdoc3 93 REAL(wp) :: zfact, zwsmax, zmax , zstep68 REAL(wp) :: zfact, zwsmax, zmax 94 69 CHARACTER (len=25) :: charout 95 70 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d … … 191 166 DO ji = 1, jpi 192 167 ! 193 zstep = xstep 194 # if defined key_degrad 195 zstep = zstep * facvol(ji,jj,jk) 196 # endif 197 zfact = zstep * xdiss(ji,jj,jk) 168 zfact = xstep * xdiss(ji,jj,jk) 198 169 ! Part I : Coagulation dependent on turbulence 199 170 zagg1 = 25.9 * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) … … 203 174 204 175 ! Aggregation of small into large particles 205 zagg3 = 47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc)206 zagg4 = 3.3 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc)176 zagg3 = 47.1 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 177 zagg4 = 3.3 * xstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 207 178 208 179 zagg = zagg1 + zagg2 + zagg3 + zagg4 … … 214 185 ! 3rd term is differential settling of DOC-POC 215 186 zaggdoc = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact & 216 & + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc)187 & + 2.4 * xstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 217 188 ! transfer of DOC to GOC : 218 189 ! 1st term is shear aggregation 219 190 ! 2nd term is differential settling 220 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc)191 zaggdoc2 = ( 3.53E3 * zfact + 0.1 * xstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 221 192 ! tranfer of DOC to POC due to brownian motion 222 zaggdoc3 = ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * zstep * 0.3 * trb(ji,jj,jk,jpdoc)193 zaggdoc3 = ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) * xstep * 0.3 * trb(ji,jj,jk,jpdoc) 223 194 224 195 ! Update the trends … … 281 252 CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 282 253 ENDIF 283 ELSE284 IF( ln_diatrc ) THEN285 zfact = 1.e3 * rfact2r286 trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1)287 trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1)288 trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,ik100) * zfact * tmask(:,:,1)289 trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,ik100) * zfact * tmask(:,:,1)290 trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik100) * zfact * tmask(:,:,1)291 trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1)292 ENDIF293 254 ENDIF 294 255 ! … … 320 281 ! 321 282 END SUBROUTINE p4z_sink_init 322 323 #else324 !!----------------------------------------------------------------------325 !! 'Kriest sinking parameterisation' key_kriest ???326 !!----------------------------------------------------------------------327 328 SUBROUTINE p4z_sink ( kt, knt )329 !!---------------------------------------------------------------------330 !! *** ROUTINE p4z_sink ***331 !!332 !! ** Purpose : Compute vertical flux of particulate matter due to333 !! gravitational sinking - Kriest parameterization334 !!335 !! ** Method : - ???336 !!---------------------------------------------------------------------337 !338 INTEGER, INTENT(in) :: kt, knt339 !340 INTEGER :: ji, jj, jk, jit, niter1, niter2341 REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zfract, zaggsi, zaggsh342 REAL(wp) :: zagg , zaggdoc, zaggdoc1, znumdoc343 REAL(wp) :: znum , zeps, zfm, zgm, zsm344 REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5345 REAL(wp) :: zval1, zval2, zval3, zval4346 REAL(wp) :: zfact347 INTEGER :: ik1348 CHARACTER (len=25) :: charout349 REAL(wp), POINTER, DIMENSION(:,:,:) :: znum3d350 REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d351 REAL(wp), POINTER, DIMENSION(:,: ) :: zw2d352 !!---------------------------------------------------------------------353 !354 IF( nn_timing == 1 ) CALL timing_start('p4z_sink')355 !356 CALL wrk_alloc( jpi, jpj, jpk, znum3d )357 !358 ! Initialisation of variables used to compute Sinking Speed359 ! ---------------------------------------------------------360 361 znum3d(:,:,:) = 0.e0362 zval1 = 1. + xkr_zeta363 zval2 = 1. + xkr_zeta + xkr_eta364 zval3 = 1. + xkr_eta365 366 ! Computation of the vertical sinking speed : Kriest et Evans, 2000367 ! -----------------------------------------------------------------368 369 DO jk = 1, jpkm1370 DO jj = 1, jpj371 DO ji = 1, jpi372 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN373 znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp374 ! -------------- To avoid sinking speed over 50 m/day -------375 znum = MIN( xnumm(jk), znum )376 znum = MAX( 1.1 , znum )377 znum3d(ji,jj,jk) = znum378 !------------------------------------------------------------379 zeps = ( zval1 * znum - 1. )/ ( znum - 1. )380 zfm = xkr_frac**( 1. - zeps )381 zgm = xkr_frac**( zval1 - zeps )382 zdiv = MAX( 1.e-4, ABS( zeps - zval2 ) ) * SIGN( 1., ( zeps - zval2 ) )383 zdiv1 = zeps - zval3384 wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv &385 & - xkr_wsbio_max * zgm * xkr_eta / zdiv386 wsbio4(ji,jj,jk) = xkr_wsbio_min * ( zeps-1. ) / zdiv1 &387 & - xkr_wsbio_max * zfm * xkr_eta / zdiv1388 IF( znum == 1.1) wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk)389 ENDIF390 END DO391 END DO392 END DO393 394 wscal(:,:,:) = MAX( wsbio3(:,:,:), 30._wp )395 396 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS397 ! -----------------------------------------398 399 sinking (:,:,:) = 0.e0400 sinking2(:,:,:) = 0.e0401 sinkcal (:,:,:) = 0.e0402 sinkfer (:,:,:) = 0.e0403 sinksil (:,:,:) = 0.e0404 405 ! Compute the sedimentation term using p4zsink2 for all the sinking particles406 ! -----------------------------------------------------407 408 niter1 = niter1max409 niter2 = niter2max410 411 DO jit = 1, niter1412 CALL p4z_sink2( wsbio3, sinking , jppoc, niter1 )413 CALL p4z_sink2( wsbio3, sinkfer , jpsfe, niter1 )414 CALL p4z_sink2( wscal , sinksil , jpgsi, niter1 )415 CALL p4z_sink2( wscal , sinkcal , jpcal, niter1 )416 END DO417 418 DO jit = 1, niter2419 CALL p4z_sink2( wsbio4, sinking2, jpnum, niter2 )420 END DO421 422 ! Exchange between organic matter compartments due to coagulation/disaggregation423 ! ---------------------------------------------------424 425 zval1 = 1. + xkr_zeta426 zval2 = 1. + xkr_eta427 zval3 = 3. + xkr_eta428 zval4 = 4. + xkr_eta429 430 DO jk = 1,jpkm1431 DO jj = 1,jpj432 DO ji = 1,jpi433 IF( tmask(ji,jj,jk) /= 0.e0 ) THEN434 435 znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp436 !-------------- To avoid sinking speed over 50 m/day -------437 znum = min(xnumm(jk),znum)438 znum = MAX( 1.1,znum)439 !------------------------------------------------------------440 zeps = ( zval1 * znum - 1.) / ( znum - 1.)441 zdiv = MAX( 1.e-4, ABS( zeps - zval3) ) * SIGN( 1., zeps - zval3 )442 zdiv1 = MAX( 1.e-4, ABS( zeps - 4. ) ) * SIGN( 1., zeps - 4. )443 zdiv2 = zeps - 2.444 zdiv3 = zeps - 3.445 zdiv4 = zeps - zval2446 zdiv5 = 2.* zeps - zval4447 zfm = xkr_frac**( 1.- zeps )448 zsm = xkr_frac**xkr_eta449 450 ! Part I : Coagulation dependant on turbulence451 ! ----------------------------------------------452 453 zagg1 = 0.163 * trb(ji,jj,jk,jpnum)**2 &454 & * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3) &455 & * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min) &456 & * (zfm*xkr_mass_max**2-xkr_mass_min**2) &457 & * (zeps-1.)**2/(zdiv2*zdiv3))458 zagg2 = 2*0.163*trb(ji,jj,jk,jpnum)**2*zfm* &459 & ((xkr_mass_max**3+3.*(xkr_mass_max**2 &460 & *xkr_mass_min*(zeps-1.)/zdiv2 &461 & +xkr_mass_max*xkr_mass_min**2*(zeps-1.)/zdiv3) &462 & +xkr_mass_min**3*(zeps-1)/zdiv1) &463 & -zfm*xkr_mass_max**3*(1.+3.*((zeps-1.)/ &464 & (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1))465 466 zagg3 = 0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3467 468 ! Aggregation of small into large particles469 ! Part II : Differential settling470 ! ----------------------------------------------471 472 zagg4 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2* &473 & xkr_wsbio_min*(zeps-1.)**2 &474 & *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4) &475 & -(1.-zfm)/(zdiv*(zeps-1.)))- &476 & ((zfm*zfm*xkr_mass_max**2*zsm-xkr_mass_min**2) &477 & *xkr_eta)/(zdiv*zdiv3*zdiv5) )478 479 zagg5 = 2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2 &480 & *(zeps-1.)*zfm*xkr_wsbio_min &481 & *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2) &482 & /zdiv3-(xkr_mass_min**2-zfm*zsm*xkr_mass_max**2) &483 & /zdiv)484 485 !486 ! Fractionnation by swimming organisms487 ! ------------------------------------488 489 zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum) &490 & * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2 &491 & * 10000.*xstep492 493 ! Aggregation of DOC to small particles494 ! --------------------------------------495 496 zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) &497 & + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc)498 zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc) &499 & + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc)500 501 # if defined key_degrad502 zagg1 = zagg1 * facvol(ji,jj,jk)503 zagg2 = zagg2 * facvol(ji,jj,jk)504 zagg3 = zagg3 * facvol(ji,jj,jk)505 zagg4 = zagg4 * facvol(ji,jj,jk)506 zagg5 = zagg5 * facvol(ji,jj,jk)507 zaggdoc = zaggdoc * facvol(ji,jj,jk)508 zaggdoc1 = zaggdoc1 * facvol(ji,jj,jk)509 # endif510 zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * xdiss(ji,jj,jk) / 1000.511 zaggsi = ( zagg4 + zagg5 ) * xstep / 10.512 zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi )513 !514 znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn )515 tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1516 tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg517 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc1518 519 ENDIF520 END DO521 END DO522 END DO523 524 ! Total primary production per year525 t_oce_co2_exp = t_oce_co2_exp + glob_sum( ( sinking(:,:,ik100) * e1e2t(:,:) * tmask(:,:,1) )526 !527 IF( lk_iomput ) THEN528 IF( knt == nrdttrc ) THEN529 CALL wrk_alloc( jpi, jpj, zw2d )530 CALL wrk_alloc( jpi, jpj, jpk, zw3d )531 zfact = 1.e+3 * rfact2r ! conversion from mol/l/kt to mol/m3/s532 !533 IF( iom_use( "EPC100" ) ) THEN534 zw2d(:,:) = sinking(:,:,ik100) * zfact * tmask(:,:,1) ! Export of carbon at 100m535 CALL iom_put( "EPC100" , zw2d )536 ENDIF537 IF( iom_use( "EPN100" ) ) THEN538 zw2d(:,:) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) ! Export of number of aggregates ?539 CALL iom_put( "EPN100" , zw2d )540 ENDIF541 IF( iom_use( "EPCAL100" ) ) THEN542 zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m543 CALL iom_put( "EPCAL100" , zw2d )544 ENDIF545 IF( iom_use( "EPSI100" ) ) THEN546 zw2d(:,:) = sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m547 CALL iom_put( "EPSI100" , zw2d )548 ENDIF549 IF( iom_use( "EXPC" ) ) THEN550 zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column551 CALL iom_put( "EXPC" , zw3d )552 ENDIF553 IF( iom_use( "EXPN" ) ) THEN554 zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column555 CALL iom_put( "EXPN" , zw3d )556 ENDIF557 IF( iom_use( "EXPCAL" ) ) THEN558 zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite559 CALL iom_put( "EXPCAL" , zw3d )560 ENDIF561 IF( iom_use( "EXPSI" ) ) THEN562 zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica563 CALL iom_put( "EXPSI" , zw3d )564 ENDIF565 IF( iom_use( "XNUM" ) ) THEN566 zw3d(:,:,:) = znum3d(:,:,:) * tmask(:,:,:) ! Number of particles on aggregats567 CALL iom_put( "XNUM" , zw3d )568 ENDIF569 IF( iom_use( "WSC" ) ) THEN570 zw3d(:,:,:) = wsbio3(:,:,:) * tmask(:,:,:) ! Sinking speed of carbon particles571 CALL iom_put( "WSC" , zw3d )572 ENDIF573 IF( iom_use( "WSN" ) ) THEN574 zw3d(:,:,:) = wsbio4(:,:,:) * tmask(:,:,:) ! Sinking speed of particles number575 CALL iom_put( "WSN" , zw3d )576 ENDIF577 !578 CALL wrk_dealloc( jpi, jpj, zw2d )579 CALL wrk_dealloc( jpi, jpj, jpk, zw3d )580 ELSE581 IF( ln_diatrc ) THEN582 zfact = 1.e3 * rfact2r583 trc2d(:,: ,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1)584 trc2d(:,: ,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1)585 trc2d(:,: ,jp_pcs0_2d + 6) = sinkfer (:,:,ik100) * zfact * tmask(:,:,1)586 trc2d(:,: ,jp_pcs0_2d + 7) = sinksil (:,:,ik100) * zfact * tmask(:,:,1)587 trc2d(:,: ,jp_pcs0_2d + 8) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1)588 trc3d(:,:,:,jp_pcs0_3d + 11) = sinking (:,:,:) * zfact * tmask(:,:,:)589 trc3d(:,:,:,jp_pcs0_3d + 12) = sinking2(:,:,:) * zfact * tmask(:,:,:)590 trc3d(:,:,:,jp_pcs0_3d + 13) = sinksil (:,:,:) * zfact * tmask(:,:,:)591 trc3d(:,:,:,jp_pcs0_3d + 14) = sinkcal (:,:,:) * zfact * tmask(:,:,:)592 trc3d(:,:,:,jp_pcs0_3d + 15) = znum3d (:,:,:) * tmask(:,:,:)593 trc3d(:,:,:,jp_pcs0_3d + 16) = wsbio3 (:,:,:) * tmask(:,:,:)594 trc3d(:,:,:,jp_pcs0_3d + 17) = wsbio4 (:,:,:) * tmask(:,:,:)595 ENDIF596 ENDIF597 598 !599 IF(ln_ctl) THEN ! print mean trends (used for debugging)600 WRITE(charout, FMT="('sink')")601 CALL prt_ctl_trc_info(charout)602 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)603 ENDIF604 !605 CALL wrk_dealloc( jpi, jpj, jpk, znum3d )606 !607 IF( nn_timing == 1 ) CALL timing_stop('p4z_sink')608 !609 END SUBROUTINE p4z_sink610 611 612 SUBROUTINE p4z_sink_init613 !!----------------------------------------------------------------------614 !! *** ROUTINE p4z_sink_init ***615 !!616 !! ** Purpose : Initialization of sinking parameters617 !! Kriest parameterization only618 !!619 !! ** Method : Read the nampiskrs namelist and check the parameters620 !! called at the first timestep621 !!622 !! ** input : Namelist nampiskrs623 !!----------------------------------------------------------------------624 INTEGER :: jk, jn, kiter625 INTEGER :: ios ! Local integer output status for namelist read626 REAL(wp) :: znum, zdiv627 REAL(wp) :: zws, zwr, zwl,wmax, znummax628 REAL(wp) :: zmin, zmax, zl, zr, xacc629 !630 NAMELIST/nampiskrs/ xkr_sfact, xkr_stick , &631 & xkr_nnano, xkr_ndiat, xkr_nmicro, xkr_nmeso, xkr_naggr632 !!----------------------------------------------------------------------633 !634 IF( nn_timing == 1 ) CALL timing_start('p4z_sink_init')635 !636 637 REWIND( numnatp_ref ) ! Namelist nampiskrs in reference namelist : Pisces sinking Kriest638 READ ( numnatp_ref, nampiskrs, IOSTAT = ios, ERR = 901)639 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in reference namelist', lwp )640 641 REWIND( numnatp_cfg ) ! Namelist nampiskrs in configuration namelist : Pisces sinking Kriest642 READ ( numnatp_cfg, nampiskrs, IOSTAT = ios, ERR = 902 )643 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in configuration namelist', lwp )644 IF(lwm) WRITE ( numonp, nampiskrs )645 646 IF(lwp) THEN647 WRITE(numout,*)648 WRITE(numout,*) ' Namelist : nampiskrs'649 WRITE(numout,*) ' Sinking factor xkr_sfact = ', xkr_sfact650 WRITE(numout,*) ' Stickiness xkr_stick = ', xkr_stick651 WRITE(numout,*) ' Nbr of cell in nano size class xkr_nnano = ', xkr_nnano652 WRITE(numout,*) ' Nbr of cell in diatoms size class xkr_ndiat = ', xkr_ndiat653 WRITE(numout,*) ' Nbr of cell in microzoo size class xkr_nmicro = ', xkr_nmicro654 WRITE(numout,*) ' Nbr of cell in mesozoo size class xkr_nmeso = ', xkr_nmeso655 WRITE(numout,*) ' Nbr of cell in aggregates size class xkr_naggr = ', xkr_naggr656 ENDIF657 658 659 ! max and min vertical particle speed660 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta661 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta662 IF (lwp) WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max663 664 !665 ! effect of the sizes of the different living pools on particle numbers666 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337667 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718668 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147669 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877670 ! doc aggregates = 1um671 ! ----------------------------------------------------------672 673 xkr_dnano = 1. / ( xkr_massp * xkr_nnano )674 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat )675 xkr_dmicro = 1. / ( xkr_massp * xkr_nmicro )676 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso )677 xkr_daggr = 1. / ( xkr_massp * xkr_naggr )678 679 !!---------------------------------------------------------------------680 !! 'key_kriest' ???681 !!---------------------------------------------------------------------682 ! COMPUTATION OF THE VERTICAL PROFILE OF MAXIMUM SINKING SPEED683 ! Search of the maximum number of particles in aggregates for each k-level.684 ! Bissection Method685 !--------------------------------------------------------------------686 IF (lwp) THEN687 WRITE(numout,*)688 WRITE(numout,*)' kriest : Compute maximum number of particles in aggregates'689 ENDIF690 691 xacc = 0.001_wp692 kiter = 50693 zmin = 1.10_wp694 zmax = xkr_mass_max / xkr_mass_min695 xkr_frac = zmax696 697 DO jk = 1,jpk698 zl = zmin699 zr = zmax700 wmax = 0.5 * e3t_n(1,1,jk) * rday * float(niter1max) / rfact2701 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl702 znum = zl - 1.703 zwl = xkr_wsbio_min * xkr_zeta / zdiv &704 & - ( xkr_wsbio_max * xkr_eta * znum * &705 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &706 & - wmax707 708 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr709 znum = zr - 1.710 zwr = xkr_wsbio_min * xkr_zeta / zdiv &711 & - ( xkr_wsbio_max * xkr_eta * znum * &712 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &713 & - wmax714 iflag: DO jn = 1, kiter715 IF ( zwl == 0._wp ) THEN ; znummax = zl716 ELSEIF( zwr == 0._wp ) THEN ; znummax = zr717 ELSE718 znummax = ( zr + zl ) / 2.719 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax720 znum = znummax - 1.721 zws = xkr_wsbio_min * xkr_zeta / zdiv &722 & - ( xkr_wsbio_max * xkr_eta * znum * &723 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &724 & - wmax725 IF( zws * zwl < 0. ) THEN ; zr = znummax726 ELSE ; zl = znummax727 ENDIF728 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl729 znum = zl - 1.730 zwl = xkr_wsbio_min * xkr_zeta / zdiv &731 & - ( xkr_wsbio_max * xkr_eta * znum * &732 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &733 & - wmax734 735 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr736 znum = zr - 1.737 zwr = xkr_wsbio_min * xkr_zeta / zdiv &738 & - ( xkr_wsbio_max * xkr_eta * znum * &739 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) &740 & - wmax741 !742 IF ( ABS ( zws ) <= xacc ) EXIT iflag743 !744 ENDIF745 !746 END DO iflag747 748 xnumm(jk) = znummax749 IF (lwp) WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk)750 !751 END DO752 !753 ik100 = 10 ! last level where depth less than 100 m754 DO jk = jpkm1, 1, -1755 IF( gdept_1d(jk) > 100. ) iksed = jk - 1756 END DO757 IF (lwp) WRITE(numout,*)758 IF (lwp) WRITE(numout,*) ' Level corresponding to 100m depth ', ik100 + 1759 IF (lwp) WRITE(numout,*)760 !761 t_oce_co2_exp = 0._wp762 !763 IF( nn_timing == 1 ) CALL timing_stop('p4z_sink_init')764 !765 END SUBROUTINE p4z_sink_init766 767 #endif768 283 769 284 SUBROUTINE p4z_sink2( pwsink, psinkflx, jp_tra, kiter ) … … 804 319 END DO 805 320 zwsink2(:,:,1) = 0.e0 806 IF( lk_degrad ) THEN807 zwsink2(:,:,:) = zwsink2(:,:,:) * facvol(:,:,:)808 ENDIF809 321 810 322 … … 890 402 & sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk) , & 891 403 & sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk) , & 892 #if defined key_kriest893 & xnumm(jpk) , &894 #else895 404 & sinkfer2(jpi,jpj,jpk) , & 896 #endif897 405 & sinkfer(jpi,jpj,jpk) , STAT=p4z_sink_alloc ) 898 406 ! -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90
r6421 r7041 69 69 INTEGER :: ji, jj, jk, jnt, jn, jl 70 70 REAL(wp) :: ztra 71 #if defined key_kriest72 REAL(wp) :: zcoef1, zcoef273 #endif74 71 CHARACTER (len=25) :: charout 75 72 !!--------------------------------------------------------------------- … … 165 162 END DO 166 163 167 #if defined key_kriest168 !169 zcoef1 = 1.e0 / xkr_massp170 zcoef2 = 1.e0 / xkr_massp / 1.1171 DO jk = 1,jpkm1172 trb(:,:,jk,jpnum) = MAX( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk) )173 trb(:,:,jk,jpnum) = MIN( trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2 )174 END DO175 !176 #endif177 !178 164 ! 179 165 IF( l_trdtrc ) THEN … … 212 198 !! ** input : file 'namelist.trc.s' containing the following 213 199 !! namelist: natext, natbio, natsms 214 !! natkriest ("key_kriest")215 200 !!---------------------------------------------------------------------- 216 201 NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, niter1max, niter2max 217 #if defined key_kriest218 NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max219 #endif220 202 NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp 221 203 NAMELIST/nampismass/ ln_check_mass … … 242 224 WRITE(numout,*) ' Maximum number of iterations for GOC niter2max =', niter2max 243 225 ENDIF 244 245 #if defined key_kriest246 247 ! ! nampiskrp : kriest parameters248 ! ! -----------------------------249 REWIND( numnatp_ref ) ! Namelist nampiskrp in reference namelist : Pisces Kriest250 READ ( numnatp_ref, nampiskrp, IOSTAT = ios, ERR = 903)251 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in reference namelist', lwp )252 253 REWIND( numnatp_cfg ) ! Namelist nampiskrp in configuration namelist : Pisces Kriest254 READ ( numnatp_cfg, nampiskrp, IOSTAT = ios, ERR = 904 )255 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in configuration namelist', lwp )256 IF(lwm) WRITE ( numonp, nampiskrp )257 258 IF(lwp) THEN259 WRITE(numout,*)260 WRITE(numout,*) ' Namelist : nampiskrp'261 WRITE(numout,*) ' Sinking exponent xkr_eta = ', xkr_eta262 WRITE(numout,*) ' N content exponent xkr_zeta = ', xkr_zeta263 WRITE(numout,*) ' N content factor xkr_ncontent = ', xkr_ncontent264 WRITE(numout,*) ' Minimum mass for Aggregates xkr_mass_min = ', xkr_mass_min265 WRITE(numout,*) ' Maximum mass for Aggregates xkr_mass_max = ', xkr_mass_max266 WRITE(numout,*)267 ENDIF268 269 270 ! Computation of some variables271 xkr_massp = xkr_ncontent * 7.625 * xkr_mass_min**xkr_zeta272 273 #endif274 226 275 227 REWIND( numnatp_ref ) ! Namelist nampisdmp in reference namelist : Pisces damping … … 503 455 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 504 456 & + trn(:,:,:,jppoc) & 505 #if ! defined key_kriest506 457 & + trn(:,:,:,jpgoc) & 507 #endif508 458 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 509 459 ! … … 517 467 & + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) & 518 468 & + trn(:,:,:,jppoc) & 519 #if ! defined key_kriest520 469 & + trn(:,:,:,jpgoc) & 521 #endif522 470 & + trn(:,:,:,jpdoc) ) * cvol(:,:,:) ) 523 471 po4budget = po4budget / areatot … … 545 493 ferbudget = glob_sum( ( trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) & 546 494 & + trn(:,:,:,jpdfe) & 547 #if ! defined key_kriest548 495 & + trn(:,:,:,jpbfe) & 549 #endif550 496 & + trn(:,:,:,jpsfe) & 551 497 & + trn(:,:,:,jpzoo) * ferat3 & -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/par_sed.F90
r5215 r7041 24 24 #endif 25 25 26 #if defined key_kriest27 INTEGER, PARAMETER :: jpdta = 1128 #else29 26 INTEGER, PARAMETER :: jpdta = 12 30 #endif31 27 32 28 -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sed.F90
r5215 r7041 40 40 41 41 USE p4zsink , ONLY : sinking => sinking !: sinking flux for POC 42 #if ! defined key_kriest43 42 USE p4zsink , ONLY : sinking2 => sinking2 !: sinking flux for GOC 44 #endif45 43 USE p4zsink , ONLY : sinkcal => sinkcal !: sinking flux for calcite 46 44 USE p4zsink , ONLY : sinksil => sinksil !: sinking flux for opal ( dsi ) -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/seddta.F90
r5215 r7041 55 55 56 56 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zdta 57 #if ! defined key_kriest58 57 REAL(wp), DIMENSION(:) , ALLOCATABLE :: zdtap, zdtag 59 #endif60 58 61 59 … … 97 95 ENDIF 98 96 99 100 #if ! defined key_kriest101 97 ! Initialization of temporaries arrays 102 98 ALLOCATE( zdtap(jpoce) ) ; zdtap(:) = 0. 103 99 ALLOCATE( zdtag(jpoce) ) ; zdtag(:) = 0. 104 #endif105 106 100 107 101 IF( MOD( kt - 1, nfreq ) == 0 ) THEN … … 122 116 trc_data(ji,jj,5) = trn (ji,jj,ikt,jpoxy) 123 117 trc_data(ji,jj,6) = trn (ji,jj,ikt,jpsil) 124 # if ! defined key_kriest125 118 trc_data(ji,jj,7 ) = sinksil (ji,jj,ikt) 126 119 trc_data(ji,jj,8 ) = sinking (ji,jj,ikt) … … 129 122 trc_data(ji,jj,11) = tsn (ji,jj,ikt,jp_tem) 130 123 trc_data(ji,jj,12) = tsn (ji,jj,ikt,jp_sal) 131 # else132 trc_data(ji,jj,7 ) = sinksil (ji,jj,ikt)133 trc_data(ji,jj,8 ) = sinking (ji,jj,ikt)134 trc_data(ji,jj,9 ) = sinkcal (ji,jj,ikt)135 trc_data(ji,jj,10) = tsn (ji,jj,ikt,jp_tem)136 trc_data(ji,jj,11) = tsn (ji,jj,ikt,jp_sal)137 # endif138 124 ENDIF 139 125 ENDDO … … 147 133 CALL iom_get( numbio, jpdom_data, 'O2BOT' , trc_data(:,:,5 ) ) 148 134 CALL iom_get( numbio, jpdom_data, 'SIBOT' , trc_data(:,:,6 ) ) 149 # if ! defined key_kriest150 135 CALL iom_get( numbio, jpdom_data, 'OPALFLXBOT' , trc_data(:,:,7 ) ) 151 136 CALL iom_get( numbio, jpdom_data, 'POCFLXBOT' , trc_data(:,:,8 ) ) … … 154 139 CALL iom_get( numoce, jpdom_data, 'TBOT' , trc_data(:,:,11) ) 155 140 CALL iom_get( numoce, jpdom_data, 'SBOT' , trc_data(:,:,12) ) 156 # else157 CALL iom_get( numbio, jpdom_data, 'OPALFLXBOT' , trc_data(:,:,7 ) )158 CALL iom_get( numbio, jpdom_data, 'POCFLXBOT' , trc_data(:,:,8 ) )159 CALL iom_get( numbio, jpdom_data, 'CACO3FLXBOT', trc_data(:,:,9 ) )160 CALL iom_get( numoce, jpdom_data, 'TBOT' , trc_data(:,:,10) )161 CALL iom_get( numoce, jpdom_data, 'SBOT' , trc_data(:,:,11) )162 # endif163 141 #endif 164 142 … … 186 164 ! Solid components : 187 165 !----------------------- 188 #if ! defined key_kriest189 166 ! Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 190 167 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,7), iarroce(1:jpoce) ) … … 200 177 CALL pack_arr ( jpoce, temp(1:jpoce), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) ) 201 178 CALL pack_arr ( jpoce, salt(1:jpoce), trc_data(1:jpi,1:jpj,12), iarroce(1:jpoce) ) 202 #else203 ! Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1204 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,7), iarroce(1:jpoce) )205 rainrm_dta(1:jpoce,jsopal) = rainrm_dta(1:jpoce,jsopal) * 1e-4206 ! Sinking fluxes for POC in mol.m-2.s-1 ; conversion in mol.cm-2.s-1207 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jspoc), trc_data(1:jpi,1:jpj,8) , iarroce(1:jpoce) )208 rainrm_dta(1:jpoce,jspoc) = rainrm_dta(1:jpoce,jspoc) * 1e-4209 ! Sinking fluxes for Calcite in mol.m-2.s-1 ; conversion in mol.cm-2.s-1210 CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jscal), trc_data(1:jpi,1:jpj,9), iarroce(1:jpoce) )211 rainrm_dta(1:jpoce,jscal) = rainrm_dta(1:jpoce,jscal) * 1e-4212 ! vector temperature [°C] and salinity213 CALL pack_arr ( jpoce, temp(1:jpoce), trc_data(1:jpi,1:jpj,10), iarroce(1:jpoce) )214 CALL pack_arr ( jpoce, salt(1:jpoce), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) )215 216 #endif217 179 218 180 ! Clay rain rate in [mol/(cm**2.s)] … … 252 214 253 215 DEALLOCATE( zdta ) 254 #if ! defined key_kriest255 216 DEALLOCATE( zdtap ) ; DEALLOCATE( zdtag ) 256 #endif257 217 258 218 IF( kt == nitsedend ) THEN -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/par_pisces.F90
r5385 r7041 13 13 IMPLICIT NONE 14 14 15 #if defined key_pisces_reduced 15 INTEGER, PUBLIC :: jp_pisces !: number of passive tracers in PISCES 16 17 #if defined key_pisces 16 18 !!--------------------------------------------------------------------- 17 !! 'key_pisces _reduced' : LOBSTERbio-model19 !! 'key_pisces : PISCES bio-model 18 20 !!--------------------------------------------------------------------- 19 21 LOGICAL, PUBLIC, PARAMETER :: lk_pisces = .TRUE. !: PISCES flag 20 LOGICAL, PUBLIC, PARAMETER :: lk_p4z = .FALSE. !: p4z flag21 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 6 !: number of passive tracers22 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 19 !: additional 2d output23 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 3 !: additional 3d output24 INTEGER, PUBLIC, PARAMETER :: jp_pisces_trd = 17 !: number of sms trends for PISCES25 26 ! assign an index in trc arrays for each LOBSTER prognostic variables27 INTEGER, PUBLIC, PARAMETER :: jpdet = 1 !: detritus [mmoleN/m3]28 INTEGER, PUBLIC, PARAMETER :: jpzoo = 2 !: zooplancton concentration [mmoleN/m3]29 INTEGER, PUBLIC, PARAMETER :: jpphy = 3 !: phytoplancton concentration [mmoleN/m3]30 INTEGER, PUBLIC, PARAMETER :: jpno3 = 4 !: nitrate concentration [mmoleN/m3]31 INTEGER, PUBLIC, PARAMETER :: jpnh4 = 5 !: ammonium concentration [mmoleN/m3]32 INTEGER, PUBLIC, PARAMETER :: jpdom = 6 !: dissolved organic matter [mmoleN/m3]33 34 22 ! productive layer depth 35 INTEGER, PUBLIC, PARAMETER :: jpkb = 12 !: first vertical layers where biology is active 36 INTEGER, PUBLIC, PARAMETER :: jpkbm1 = jpkb - 1 !: first vertical layers where biology is active 37 38 #elif defined key_pisces && defined key_kriest 39 !!--------------------------------------------------------------------- 40 !! 'key_pisces' & 'key_kriest' PISCES bio-model + ??? 41 !!--------------------------------------------------------------------- 42 LOGICAL, PUBLIC, PARAMETER :: lk_pisces = .TRUE. !: PISCES flag 43 LOGICAL, PUBLIC, PARAMETER :: lk_p4z = .TRUE. !: p4z flag 44 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .TRUE. !: Kriest flag 45 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 23 !: number of passive tracers 46 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 13 !: additional 2d output 47 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 18 !: additional 3d output 48 INTEGER, PUBLIC, PARAMETER :: jp_pisces_trd = 1 !: number of sms trends for PISCES 49 50 ! assign an index in trc arrays for each LOBSTER prognostic variables 51 ! WARNING: be carefull about the order when reading the restart 52 ! !!gm this warning should be obsolet with IOM 53 INTEGER, PUBLIC, PARAMETER :: jpdic = 1 !: dissolved inoganic carbon concentration 54 INTEGER, PUBLIC, PARAMETER :: jptal = 2 !: total alkalinity 55 INTEGER, PUBLIC, PARAMETER :: jpoxy = 3 !: oxygen carbon concentration 56 INTEGER, PUBLIC, PARAMETER :: jpcal = 4 !: calcite concentration 57 INTEGER, PUBLIC, PARAMETER :: jppo4 = 5 !: phosphate concentration 58 INTEGER, PUBLIC, PARAMETER :: jppoc = 6 !: small particulate organic phosphate concentration 59 INTEGER, PUBLIC, PARAMETER :: jpsil = 7 !: silicate concentration 60 INTEGER, PUBLIC, PARAMETER :: jpphy = 8 !: phytoplancton concentration 61 INTEGER, PUBLIC, PARAMETER :: jpzoo = 9 !: zooplancton concentration 62 INTEGER, PUBLIC, PARAMETER :: jpdoc = 10 !: dissolved organic carbon concentration 63 INTEGER, PUBLIC, PARAMETER :: jpdia = 11 !: Diatoms Concentration 64 INTEGER, PUBLIC, PARAMETER :: jpmes = 12 !: Mesozooplankton Concentration 65 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: Diatoms Silicate Concentration 66 INTEGER, PUBLIC, PARAMETER :: jpfer = 14 !: Iron Concentration 67 INTEGER, PUBLIC, PARAMETER :: jpnum = 15 !: Big iron particles Concentration 68 INTEGER, PUBLIC, PARAMETER :: jpsfe = 16 !: number of particulate organic phosphate concentration 69 INTEGER, PUBLIC, PARAMETER :: jpdfe = 17 !: Diatoms iron Concentration 70 INTEGER, PUBLIC, PARAMETER :: jpgsi = 18 !: (big) Silicate Concentration 71 INTEGER, PUBLIC, PARAMETER :: jpnfe = 19 !: Nano iron Concentration 72 INTEGER, PUBLIC, PARAMETER :: jpnch = 20 !: Nano Chlorophyll Concentration 73 INTEGER, PUBLIC, PARAMETER :: jpdch = 21 !: Diatoms Chlorophyll Concentration 74 INTEGER, PUBLIC, PARAMETER :: jpno3 = 22 !: Nitrates Concentration 75 INTEGER, PUBLIC, PARAMETER :: jpnh4 = 23 !: Ammonium Concentration 76 77 #elif defined key_pisces 78 !!--------------------------------------------------------------------- 79 !! 'key_pisces' : standard PISCES bio-model 80 !!--------------------------------------------------------------------- 81 LOGICAL, PUBLIC, PARAMETER :: lk_pisces = .TRUE. !: PISCES flag 82 LOGICAL, PUBLIC, PARAMETER :: lk_p4z = .TRUE. !: p4z flag 83 LOGICAL, PUBLIC, PARAMETER :: lk_kriest = .FALSE. !: Kriest flag 84 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 24 !: number of PISCES passive tracers 85 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 13 !: additional 2d output 86 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 11 !: additional 3d output 87 INTEGER, PUBLIC, PARAMETER :: jp_pisces_trd = 1 !: number of sms trends for PISCES 88 89 ! assign an index in trc arrays for each LOBSTER prognostic variables 90 ! WARNING: be carefull about the order when reading the restart 91 ! !!gm this warning should be obsolet with IOM 92 INTEGER, PUBLIC, PARAMETER :: jpdic = 1 !: dissolved inoganic carbon concentration 93 INTEGER, PUBLIC, PARAMETER :: jptal = 2 !: total alkalinity 94 INTEGER, PUBLIC, PARAMETER :: jpoxy = 3 !: oxygen carbon concentration 95 INTEGER, PUBLIC, PARAMETER :: jpcal = 4 !: calcite concentration 96 INTEGER, PUBLIC, PARAMETER :: jppo4 = 5 !: phosphate concentration 97 INTEGER, PUBLIC, PARAMETER :: jppoc = 6 !: small particulate organic phosphate concentration 98 INTEGER, PUBLIC, PARAMETER :: jpsil = 7 !: silicate concentration 99 INTEGER, PUBLIC, PARAMETER :: jpphy = 8 !: phytoplancton concentration 100 INTEGER, PUBLIC, PARAMETER :: jpzoo = 9 !: zooplancton concentration 101 INTEGER, PUBLIC, PARAMETER :: jpdoc = 10 !: dissolved organic carbon concentration 102 INTEGER, PUBLIC, PARAMETER :: jpdia = 11 !: Diatoms Concentration 103 INTEGER, PUBLIC, PARAMETER :: jpmes = 12 !: Mesozooplankton Concentration 104 INTEGER, PUBLIC, PARAMETER :: jpdsi = 13 !: Diatoms Silicate Concentration 105 INTEGER, PUBLIC, PARAMETER :: jpfer = 14 !: Iron Concentration 106 INTEGER, PUBLIC, PARAMETER :: jpbfe = 15 !: Big iron particles Concentration 107 INTEGER, PUBLIC, PARAMETER :: jpgoc = 16 !: big particulate organic phosphate concentration 108 INTEGER, PUBLIC, PARAMETER :: jpsfe = 17 !: Small iron particles Concentration 109 INTEGER, PUBLIC, PARAMETER :: jpdfe = 18 !: Diatoms iron Concentration 110 INTEGER, PUBLIC, PARAMETER :: jpgsi = 19 !: (big) Silicate Concentration 111 INTEGER, PUBLIC, PARAMETER :: jpnfe = 20 !: Nano iron Concentration 112 INTEGER, PUBLIC, PARAMETER :: jpnch = 21 !: Nano Chlorophyll Concentration 113 INTEGER, PUBLIC, PARAMETER :: jpdch = 22 !: Diatoms Chlorophyll Concentration 114 INTEGER, PUBLIC, PARAMETER :: jpno3 = 23 !: Nitrates Concentration 115 INTEGER, PUBLIC, PARAMETER :: jpnh4 = 24 !: Ammonium Concentration 23 INTEGER, PUBLIC :: jpkb !: first vertical layers where biology is active 24 INTEGER, PUBLIC :: jpkbm1 !: first vertical layers where biology is active 116 25 117 26 #else 118 27 !!--------------------------------------------------------------------- 119 !! Default No CFC geochemical model120 !!---------------------------------------------------------------------121 28 LOGICAL, PUBLIC, PARAMETER :: lk_pisces = .FALSE. !: PISCES flag 122 LOGICAL, PUBLIC, PARAMETER :: lk_p4z = .FALSE. !: p4z flag123 INTEGER, PUBLIC, PARAMETER :: jp_pisces = 0 !: No CFC tracers124 INTEGER, PUBLIC, PARAMETER :: jp_pisces_2d = 0 !: No CFC additional 2d output arrays125 INTEGER, PUBLIC, PARAMETER :: jp_pisces_3d = 0 !: No CFC additional 3d output arrays126 INTEGER, PUBLIC, PARAMETER :: jp_pisces_trd = 0 !: number of sms trends for PISCES127 29 #endif 128 30 31 ! assign an index in trc arrays for each LOBSTER prognostic variables 32 INTEGER, PUBLIC :: jpdet !: detritus 33 INTEGER, PUBLIC :: jpdom !: dissolved organic matter 34 INTEGER, PUBLIC :: jpdic !: dissolved inoganic carbon concentration 35 INTEGER, PUBLIC :: jptal !: total alkalinity 36 INTEGER, PUBLIC :: jpoxy !: oxygen carbon concentration 37 INTEGER, PUBLIC :: jpcal !: calcite concentration 38 INTEGER, PUBLIC :: jppo4 !: phosphate concentration 39 INTEGER, PUBLIC :: jppoc !: small particulate organic phosphate concentration 40 INTEGER, PUBLIC :: jpsil !: silicate concentration 41 INTEGER, PUBLIC :: jpphy !: phytoplancton concentration 42 INTEGER, PUBLIC :: jpzoo !: zooplancton concentration 43 INTEGER, PUBLIC :: jpdoc !: dissolved organic carbon concentration 44 INTEGER, PUBLIC :: jpdia !: Diatoms Concentration 45 INTEGER, PUBLIC :: jpmes !: Mesozooplankton Concentration 46 INTEGER, PUBLIC :: jpdsi !: Diatoms Silicate Concentration 47 INTEGER, PUBLIC :: jpfer !: Iron Concentration 48 INTEGER, PUBLIC :: jpbfe !: Big iron particles Concentration 49 INTEGER, PUBLIC :: jpgoc !: big particulate organic phosphate concentration 50 INTEGER, PUBLIC :: jpsfe !: Small iron particles Concentration 51 INTEGER, PUBLIC :: jpdfe !: Diatoms iron Concentration 52 INTEGER, PUBLIC :: jpgsi !: (big) Silicate Concentration 53 INTEGER, PUBLIC :: jpnfe !: Nano iron Concentration 54 INTEGER, PUBLIC :: jpnch !: Nano Chlorophyll Concentration 55 INTEGER, PUBLIC :: jpdch !: Diatoms Chlorophyll Concentration 56 INTEGER, PUBLIC :: jpno3 !: Nitrates Concentration 57 INTEGER, PUBLIC :: jpnh4 !: Ammonium Concentration 58 !!--------------------------------------------------------------------- 59 !! Default No CFC geochemical model 129 60 ! Starting/ending PISCES do-loop indices (N.B. no PISCES : jpl_pcs < jpf_pcs the do-loop are never done) 130 INTEGER, PUBLIC, PARAMETER :: jp_pcs0 = 1 !: First index of PISCES tracers 131 INTEGER, PUBLIC, PARAMETER :: jp_pcs1 = jp_pisces !: Last index of PISCES tracers 132 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_2d = 1 !: First index of 2D diag 133 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_2d = jp_pisces_2d !: Last index of 2D diag 134 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_3d = 1 !: First index of 3D diag 135 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_3d = jp_pisces_3d !: Last index of 3d diag 136 INTEGER, PUBLIC, PARAMETER :: jp_pcs0_trd = 1 !: First index of bio diag 137 INTEGER, PUBLIC, PARAMETER :: jp_pcs1_trd = jp_pisces_trd !: Last index of bio diag 138 61 INTEGER, PUBLIC :: jp_pcs0 !: First index of PISCES tracers 62 INTEGER, PUBLIC :: jp_pcs1 !: Last index of PISCES tracers 139 63 140 64 !!====================================================================== -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r6291 r7041 7 7 !! 3.2 ! 2009-04 (C. Ethe & NEMO team) style 8 8 !!---------------------------------------------------------------------- 9 #if defined key_pisces || defined key_pisces_reduced9 #if defined key_pisces 10 10 !!---------------------------------------------------------------------- 11 11 !! 'key_pisces' PISCES model … … 29 29 ! !: PISCES : silicon dependant half saturation 30 30 31 #if defined key_pisces 31 !!* Model used 32 LOGICAL :: ln_p2z !: Flag to use LOBSTER model 33 LOGICAL :: ln_p4z !: Flag to use PISCES model 34 35 32 36 !!* Time variables 33 37 INTEGER :: nrdttrc !: ??? … … 108 112 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2 !: Temp. dependancy of mesozooplankton rates 109 113 110 #if defined key_kriest111 !!* Kriest parameter for aggregation112 REAL(wp) :: xkr_eta !: Sinking exponent113 REAL(wp) :: xkr_zeta !: N content exponent114 REAL(wp) :: xkr_ncontent !: N content factor115 REAL(wp) :: xkr_massp !:116 REAL(wp) :: xkr_mass_min, xkr_mass_max !: Minimum, Maximum mass for Aggregates117 #endif118 114 119 #endif120 115 !!---------------------------------------------------------------------- 121 116 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 136 131 ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj), xksi(jpi,jpj), STAT=ierr(1) ) 137 132 ! 138 #if defined key_pisces 139 !* Biological fluxes for primary production140 ALLOCATE( xksimax(jpi,jpj) , biron (jpi,jpj,jpk), &141 & xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk), &142 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), &143 & xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk), &144 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), &145 & xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk), &146 & xlimsi (jpi,jpj,jpk), concdfe (jpi,jpj,jpk), &147 & concnfe (jpi,jpj,jpk), STAT=ierr(2) )133 IF( ln_p4z ) THEN 134 !* Biological fluxes for primary production 135 ALLOCATE( xksimax(jpi,jpj) , biron (jpi,jpj,jpk), & 136 & xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk), & 137 & xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk), & 138 & xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk), & 139 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 140 & xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk), & 141 & xlimsi (jpi,jpj,jpk), concdfe (jpi,jpj,jpk), & 142 & concnfe (jpi,jpj,jpk), STAT=ierr(2) ) 148 143 ! 149 !* SMS for the organic matter150 ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac(jpi,jpj,jpk), &151 & xlimbac (jpi,jpj,jpk), xdiss (jpi,jpj,jpk), &152 & xlimbacl(jpi,jpj,jpk), prodcal(jpi,jpj,jpk), STAT=ierr(3) )144 !* SMS for the organic matter 145 ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac(jpi,jpj,jpk), & 146 & xlimbac (jpi,jpj,jpk), xdiss (jpi,jpj,jpk), & 147 & xlimbacl(jpi,jpj,jpk), prodcal(jpi,jpj,jpk), STAT=ierr(3) ) 153 148 154 !* Variable for chemistry of the CO2 cycle 155 ALLOCATE( akb3(jpi,jpj,jpk) , ak13 (jpi,jpj,jpk) , & 156 & ak23(jpi,jpj,jpk) , aksp (jpi,jpj,jpk) , & 157 & akw3(jpi,jpj,jpk) , borat (jpi,jpj,jpk) , & 158 & hi (jpi,jpj,jpk) , excess(jpi,jpj,jpk) , & 159 & aphscale(jpi,jpj,jpk), STAT=ierr(4) ) 149 !* Variable for chemistry of the CO2 cycle 150 ALLOCATE( akb3(jpi,jpj,jpk) , ak13 (jpi,jpj,jpk) , & 151 & ak23(jpi,jpj,jpk) , aksp (jpi,jpj,jpk) , & 152 & akw3(jpi,jpj,jpk) , borat (jpi,jpj,jpk) , & 153 & hi (jpi,jpj,jpk) , excess(jpi,jpj,jpk) , & 154 & aphscale(jpi,jpj,jpk), STAT=ierr(4) ) 155 ! 156 !* Temperature dependancy of SMS terms 157 ALLOCATE( tgfunc(jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk) , STAT=ierr(5) ) 160 158 ! 161 !* Temperature dependancy of SMS terms 162 ALLOCATE( tgfunc(jpi,jpj,jpk) , tgfunc2(jpi,jpj,jpk) , STAT=ierr(5) ) 163 ! 164 #endif 159 ENDIF 165 160 ! 166 161 sms_pisces_alloc = MAXVAL( ierr ) -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90
r5725 r7041 5 5 !!====================================================================== 6 6 !! History : 3.5 ! 2013 (M. Vancoppenolle, O. Aumont, G. Madec), original code 7 !! Comment ! probably not properly done when the second particle export 8 !! scheme (kriest) is used 9 !!---------------------------------------------------------------------- 10 #if defined key_pisces || defined key_pisces_reduced 7 !!---------------------------------------------------------------------- 8 #if defined key_pisces 11 9 !!---------------------------------------------------------------------- 12 10 !! 'key_pisces' PISCES bio-model … … 37 35 !!---------------------------------------------------------------------- 38 36 39 IF( l k_p4z ) THEN ; CALL p4z_ice_ini ! PISCES37 IF( ln_p4z ) THEN ; CALL p4z_ice_ini ! PISCES 40 38 ELSE ; CALL p2z_ice_ini ! LOBSTER 41 39 ENDIF … … 45 43 46 44 SUBROUTINE p4z_ice_ini 47 48 #if defined key_pisces49 45 !!---------------------------------------------------------------------- 50 46 !! *** ROUTINE p4z_ice_ini *** … … 75 71 76 72 !--- Dummy variables 77 REAL(wp), DIMENSION( jp_pisces,2):: zratio ! effective ice-ocean tracer cc ratio78 REAL(wp), DIMENSION( jp_pisces,4):: zpisc ! prescribes concentration73 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zratio ! effective ice-ocean tracer cc ratio 74 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zpisc ! prescribes concentration 79 75 ! ! 1:global, 2:Arctic, 3:Antarctic, 4:Baltic 80 76 … … 99 95 ! fluxes 100 96 97 ALLOCATE( zratio(jp_pisces,2), zpisc(jp_pisces,4) ) 98 101 99 !--- Global values 102 100 zpisc(jpdic,1) = 1.99e-3_wp … … 107 105 zpisc(jppo4,1) = 5.77e-7_wp / po4r 108 106 zpisc(jppoc,1) = 1.27e-6_wp 109 # if ! defined key_kriest110 107 zpisc(jpgoc,1) = 5.23e-8_wp 111 108 zpisc(jpbfe,1) = 9.84e-13_wp 112 # else113 zpisc(jpnum,1) = 0. ! could not get this value since did not use it114 # endif115 109 zpisc(jpsil,1) = 7.36e-6_wp 116 110 zpisc(jpdsi,1) = 1.07e-7_wp … … 137 131 zpisc(jppo4,2) = 4.09e-7_wp / po4r 138 132 zpisc(jppoc,2) = 4.05e-7_wp 139 # if ! defined key_kriest140 133 zpisc(jpgoc,2) = 2.84e-8_wp 141 134 zpisc(jpbfe,2) = 7.03e-13_wp 142 # else143 zpisc(jpnum,2) = 0.00e-00_wp144 # endif145 135 zpisc(jpsil,2) = 6.87e-6_wp 146 136 zpisc(jpdsi,2) = 1.73e-7_wp … … 167 157 zpisc(jppo4,3) = 1.88e-6_wp / po4r 168 158 zpisc(jppoc,3) = 1.13e-6_wp 169 # if ! defined key_kriest170 159 zpisc(jpgoc,3) = 2.89e-8_wp 171 160 zpisc(jpbfe,3) = 5.63e-13_wp 172 # else173 zpisc(jpnum,3) = 0.00e-00_wp174 # endif175 161 zpisc(jpsil,3) = 4.96e-5_wp 176 162 zpisc(jpdsi,3) = 5.63e-7_wp … … 197 183 zpisc(jppo4,4) = 2.85e-9_wp / po4r 198 184 zpisc(jppoc,4) = 4.84e-7_wp 199 # if ! defined key_kriest200 185 zpisc(jpgoc,4) = 1.05e-8_wp 201 186 zpisc(jpbfe,4) = 4.97e-13_wp 202 # else203 zpisc(jpnum,4) = 0. ! could not get this value204 # endif205 187 zpisc(jpsil,4) = 4.91e-5_wp 206 188 zpisc(jpdsi,4) = 3.25e-7_wp … … 279 261 ! 280 262 END DO ! jn 281 #endif 263 ! 264 DEALLOCATE( zratio, zpisc ) 265 ! 282 266 283 267 END SUBROUTINE p4z_ice_ini 284 268 285 269 SUBROUTINE p2z_ice_ini 286 #if defined key_pisces_reduced287 270 !!---------------------------------------------------------------------- 288 271 !! *** ROUTINE p2z_ice_ini *** … … 290 273 !! ** Purpose : Initialisation of the LOBSTER biochemical model 291 274 !!---------------------------------------------------------------------- 292 #endif293 275 END SUBROUTINE p2z_ice_ini 294 276 -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r6325 r7041 11 11 !! 3.5 ! 2012-05 (C. Ethe) Merge PISCES-LOBSTER 12 12 !!---------------------------------------------------------------------- 13 #if defined key_pisces || defined key_pisces_reduced13 #if defined key_pisces 14 14 !!---------------------------------------------------------------------- 15 15 !! 'key_pisces' PISCES bio-model … … 41 41 !!---------------------------------------------------------------------- 42 42 43 IF( l k_p4z ) THEN ; CALL p4z_ini ! PISCES43 IF( ln_p4z ) THEN ; CALL p4z_ini ! PISCES 44 44 ELSE ; CALL p2z_ini ! LOBSTER 45 45 ENDIF … … 53 53 !! ** Purpose : Initialisation of the PISCES biochemical model 54 54 !!---------------------------------------------------------------------- 55 #if defined key_pisces56 55 ! 57 56 USE p4zsms ! Main P4Z routine … … 79 78 REAL(wp), SAVE :: no3 = 30.9e-6_wp * 7.625_wp 80 79 ! 81 INTEGER :: ji, jj, jk, ierr80 INTEGER :: ji, jj, jk, jn, ierr 82 81 REAL(wp) :: zcaralk, zbicarb, zco3 83 82 REAL(wp) :: ztmas, ztmas1 83 CHARACTER(len = 20) :: cltra 84 84 85 !!---------------------------------------------------------------------- 85 86 … … 105 106 ! 106 107 108 ! assign an index in trc arrays for each prognostic variables 109 DO jn = 1, jptra 110 cltra = ctrcnm(jn) 111 IF( cltra == 'DIC' ) jpdic = jn !: dissolved inoganic carbon concentration 112 IF( cltra == 'Alkalini' ) jptal = jn !: total alkalinity 113 IF( cltra == 'O2' ) jpoxy = jn !: oxygen carbon concentration 114 IF( cltra == 'CaCO3' ) jpcal = jn !: calcite concentration 115 IF( cltra == 'PO4' ) jppo4 = jn !: phosphate concentration 116 IF( cltra == 'POC' ) jppoc = jn !: small particulate organic phosphate concentration 117 IF( cltra == 'Si' ) jpsil = jn !: silicate concentration 118 IF( cltra == 'PHY' ) jpphy = jn !: phytoplancton concentration 119 IF( cltra == 'ZOO' ) jpzoo = jn !: zooplancton concentration 120 IF( cltra == 'DOC' ) jpdoc = jn !: dissolved organic carbon concentration 121 IF( cltra == 'PHY2' ) jpdia = jn !: Diatoms Concentration 122 IF( cltra == 'ZOO2' ) jpmes = jn !: Mesozooplankton Concentration 123 IF( cltra == 'DSi' ) jpdsi = jn !: Diatoms Silicate Concentration 124 IF( cltra == 'Fer' ) jpfer = jn !: Iron Concentration 125 IF( cltra == 'BFe' ) jpbfe = jn !: Big iron particles Concentration 126 IF( cltra == 'GOC' ) jpgoc = jn !: Big particulate organic phosphate concentration 127 IF( cltra == 'SFe' ) jpsfe = jn !: Small iron particles Concentration 128 IF( cltra == 'DFe' ) jpdfe = jn !: Diatoms iron Concentration 129 IF( cltra == 'GSi' ) jpgsi = jn !: (big) Silicate Concentration 130 IF( cltra == 'NFe' ) jpnfe = jn !: Nano iron Concentration 131 IF( cltra == 'NCHL' ) jpnch = jn !: Nano Chlorophyll Concentration 132 IF( cltra == 'DCHL' ) jpdch = jn !: Diatoms Chlorophyll Concentration 133 IF( cltra == 'NO3' ) jpno3 = jn !: Nitrates Concentration 134 IF( cltra == 'NH4' ) jpnh4 = jn !: Ammonium Concentration 135 ENDDO 136 137 jp_pisces = 24 138 jp_pcs0 = MIN( jpdic, jptal, jpoxy, jpcal, jppo4, jppoc, jpsil, & 139 & jpphy, jpzoo, jpdoc, jpdia, jpmes, jpdsi, jpfer, & 140 & jpbfe, jpgoc, jpsfe, jpdfe, jpgsi, jpnfe, jpnch, & 141 & jpdch, jpno3, jpnh4 ) 142 143 jp_pcs1 = jp_pcs0 + jp_pisces - 1 144 145 146 IF( lwp ) THEN 147 WRITE(numout,*) '' 148 WRITE(numout,*) ' First index of PISCES model in the passive tracer array jp_pcs0 = ', jp_pcs0 149 WRITE(numout,*) ' Last index of PISCES model in the passive tracer array jp_pcs1 = ', jp_pcs1 150 WRITE(numout,*) 151 ENDIF 152 153 107 154 CALL p4z_sms_init ! Maint routine 108 155 ! ! Time-step … … 120 167 ! Initialization of tracer concentration in case of no restart 121 168 !-------------------------------------------------------------- 122 IF( .NOT. ln_rsttr ) THEN 123 169 IF( .NOT.ln_rsttr ) THEN 124 170 trn(:,:,:,jpdic) = sco2 125 171 trn(:,:,:,jpdoc) = bioma0 … … 129 175 trn(:,:,:,jppo4) = po4 / po4r 130 176 trn(:,:,:,jppoc) = bioma0 131 # if ! defined key_kriest132 177 trn(:,:,:,jpgoc) = bioma0 133 178 trn(:,:,:,jpbfe) = bioma0 * 5.e-6 134 # else135 trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp )136 # endif137 179 trn(:,:,:,jpsil) = silic1 138 180 trn(:,:,:,jpdsi) = bioma0 * 0.15 … … 176 218 IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done' 177 219 IF(lwp) WRITE(numout,*) 178 #endif179 220 ! 180 221 END SUBROUTINE p4z_ini … … 186 227 !! ** Purpose : Initialisation of the LOBSTER biochemical model 187 228 !!---------------------------------------------------------------------- 188 #if defined key_pisces_reduced189 229 ! 190 230 USE p2zopt … … 193 233 USE p2zsed 194 234 ! 195 INTEGER :: ji, jj, jk, ierr 235 INTEGER :: ji, jj, jk, jn, ierr 236 CHARACTER(len = 10) :: cltra 196 237 !!---------------------------------------------------------------------- 197 238 … … 205 246 IF( lk_mpp ) CALL mpp_sum( ierr ) 206 247 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'p2z_ini: unable to allocate LOBSTER arrays' ) 248 249 DO jn = 1, jptra 250 cltra = ctrcnm(jn) 251 IF( cltra == 'DET' ) jpdet = jn !: detritus [mmoleN/m3] 252 IF( cltra == 'ZOO' ) jpzoo = jn !: zooplancton concentration [mmoleN/m3] 253 IF( cltra == 'PHY' ) jpphy = jn !: phytoplancton concentration [mmoleN/m3] 254 IF( cltra == 'NO3' ) jpno3 = jn !: nitrate concentration [mmoleN/m3] 255 IF( cltra == 'NH4' ) jpnh4 = jn !: ammonium concentration [mmoleN/m3] 256 IF( cltra == 'DOM' ) jpdom = jn !: dissolved organic matter [mmoleN/m3] 257 ENDDO 258 259 260 jp_pcs0 = MIN( jpdet, jpzoo, jpphy, jpno3, jpnh4, jpdom ) 261 jp_pcs1 = jp_pcs0 + jp_pisces - 1 262 263 264 IF( lwp ) THEN 265 WRITE(numout,*) '' 266 WRITE(numout,*) ' First index of LOBSTER model in the passive tracer array jp_pcs0 = ', jp_pcs0 267 WRITE(numout,*) ' Last index of LOBSTER model in the passive tracer array jp_pcs1 = ', jp_pcs1 268 WRITE(numout,*) 269 ENDIF 270 271 272 jpkb = 10 ! last level where depth less than 200 m 273 DO jk = jpkm1, 1, -1 274 IF( gdept_1d(jk) > 200. ) jpkb = jk 275 END DO 276 IF (lwp) WRITE(numout,*) 277 IF (lwp) WRITE(numout,*) ' first vertical layers where biology is active (200m depth ) ', jpkb 278 IF (lwp) WRITE(numout,*) 279 jpkbm1 = jpkb - 1 280 ! 281 207 282 208 283 ! LOBSTER initialisation for GYRE : init NO3=f(density) by asklod AS Kremeur 2005-07 … … 214 289 trn(:,:,:,jpphy) = 0.1 * tmask(:,:,:) 215 290 trn(:,:,:,jpdom) = 1.0 * tmask(:,:,:) 216 WHERE( rhd(:,:,:) <= 24.5e-3 ) ; trn(:,:,:,jpno3 291 WHERE( rhd(:,:,:) <= 24.5e-3 ) ; trn(:,:,:,jpno3) = 2._wp * tmask(:,:,:) 217 292 ELSE WHERE ; trn(:,:,:,jpno3) = ( 15.55 * ( rhd(:,:,:) * 1000. ) - 380.11 ) * tmask(:,:,:) 218 293 END WHERE … … 227 302 IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done' 228 303 IF(lwp) WRITE(numout,*) 229 #endif230 304 ! 231 305 END SUBROUTINE p2z_ini -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcnam_pisces.F90
r4990 r7041 9 9 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) from trcnam.pisces.h90 10 10 !!---------------------------------------------------------------------- 11 #if defined key_pisces || defined key_pisces_reduced11 #if defined key_pisces 12 12 !!---------------------------------------------------------------------- 13 13 !! 'key_pisces' : PISCES bio-model … … 45 45 !! ** input : file 'namelist.trc.sms' containing the following 46 46 !! namelist: natext, natbio, natsms 47 !! natkriest ("key_kriest")48 47 !!---------------------------------------------------------------------- 49 48 !! 50 49 INTEGER :: jl, jn 51 INTEGER :: ios ! Local integer output status for namelist read 52 TYPE(DIAG), DIMENSION(jp_pisces_2d) :: pisdia2d 53 TYPE(DIAG), DIMENSION(jp_pisces_3d) :: pisdia3d 54 TYPE(DIAG), DIMENSION(jp_pisces_trd) :: pisdiabio 50 INTEGER :: ios, ioptio ! Local integer output status for namelist read 55 51 CHARACTER(LEN=20) :: clname 56 52 !! 57 NAMELIST/nampisdia/ pisdia3d, pisdia2d ! additional diagnostics 58 #if defined key_pisces_reduced 59 NAMELIST/nampisdbi/ pisdiabio 60 #endif 61 53 NAMELIST/nampismod/ln_p2z, ln_p4z 62 54 !!---------------------------------------------------------------------- 63 55 64 56 IF(lwp) WRITE(numout,*) 65 57 clname = 'namelist_pisces' 66 #if defined key_pisces 58 67 59 IF(lwp) WRITE(numout,*) ' trc_nam_pisces : read PISCES namelist' 68 #else69 IF(lwp) WRITE(numout,*) ' trc_nam_pisces : read LOBSTER namelist'70 #endif71 60 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 72 61 CALL ctl_opn( numnatp_ref, TRIM( clname )//'_ref', 'OLD' , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) … … 74 63 IF(lwm) CALL ctl_opn( numonp , 'output.namelist.pis' , 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 75 64 ! 76 IF( .NOT.lk_iomput .AND. ln_diatrc ) THEN77 !78 ! Namelist nampisdia79 ! -------------------80 REWIND( numnatp_ref ) ! Namelist nampisdia in reference namelist : Pisces diagnostics81 READ ( numnatp_ref, nampisdia, IOSTAT = ios, ERR = 901)82 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdia in reference namelist', lwp )83 65 84 REWIND( numnatp_cfg ) ! Namelist nampisdia in configuration namelist : Pisces diagnostics 85 READ ( numnatp_cfg, nampisdia, IOSTAT = ios, ERR = 902 ) 86 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdia in configuration namelist', lwp ) 87 IF(lwm) WRITE ( numonp, nampisdia ) 66 REWIND( numnatp_ref ) ! Namelist nampisbio in reference namelist : Pisces variables 67 READ ( numnatp_ref, nampismod, IOSTAT = ios, ERR = 901) 68 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in reference namelist', lwp ) 88 69 89 DO jl = 1, jp_pisces_2d 90 jn = jp_pcs0_2d + jl - 1 91 ctrc2d(jn) = pisdia2d(jl)%sname 92 ctrc2l(jn) = pisdia2d(jl)%lname 93 ctrc2u(jn) = pisdia2d(jl)%units 94 END DO 70 REWIND( numnatp_cfg ) ! Namelist nampisbio in configuration namelist : Pisces variables 71 READ ( numnatp_cfg, nampismod, IOSTAT = ios, ERR = 902 ) 72 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in configuration namelist', lwp ) 73 IF(lwm) WRITE ( numonp, nampismod ) 95 74 96 DO jl = 1, jp_pisces_3d 97 jn = jp_pcs0_3d + jl - 1 98 ctrc3d(jn) = pisdia3d(jl)%sname 99 ctrc3l(jn) = pisdia3d(jl)%lname 100 ctrc3u(jn) = pisdia3d(jl)%units 101 END DO 102 103 IF(lwp) THEN ! control print 104 WRITE(numout,*) 105 WRITE(numout,*) ' Namelist : natadd' 106 DO jl = 1, jp_pisces_3d 107 jn = jp_pcs0_3d + jl - 1 108 WRITE(numout,*) ' 3d diag nb : ', jn, ' short name : ', ctrc3d(jn), & 109 & ' long name : ', ctrc3l(jn), ' unit : ', ctrc3u(jn) 110 END DO 111 WRITE(numout,*) ' ' 112 113 DO jl = 1, jp_pisces_2d 114 jn = jp_pcs0_2d + jl - 1 115 WRITE(numout,*) ' 2d diag nb : ', jn, ' short name : ', ctrc2d(jn), & 116 & ' long name : ', ctrc2l(jn), ' unit : ', ctrc2u(jn) 117 END DO 118 WRITE(numout,*) ' ' 119 ENDIF 120 ! 75 IF(lwp) THEN ! control print 76 WRITE(numout,*) ' Namelist : nampismod' 77 WRITE(numout,*) ' PISCES model ln_p4z =', ln_p4z 78 WRITE(numout,*) ' LOBSTER model ln_p2z =', ln_p2z 121 79 ENDIF 122 123 #if defined key_pisces_reduced 124 125 IF( ( .NOT.lk_iomput .AND. ln_diabio ) .OR. lk_trdmxl_trc ) THEN 126 ! 127 ! Namelist nampisdbi 128 ! ------------------- 129 REWIND( numnatp_ref ) ! Namelist nampisdbi in reference namelist : Pisces add. diagnostics 130 READ ( numnatp_ref, nampisdbi, IOSTAT = ios, ERR = 903) 131 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdbi in reference namelist', lwp ) 132 133 REWIND( numnatp_cfg ) ! Namelist nampisdbi in configuration namelist : Pisces add. diagnostics 134 READ ( numnatp_cfg, nampisdbi, IOSTAT = ios, ERR = 904 ) 135 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdbi in configuration namelist', lwp ) 136 IF(lwm) WRITE ( numonp, nampisdbi ) 137 138 DO jl = 1, jp_pisces_trd 139 jn = jp_pcs0_trd + jl - 1 140 ctrbio(jl) = pisdiabio(jl)%sname 141 ctrbil(jl) = pisdiabio(jl)%lname 142 ctrbiu(jl) = pisdiabio(jl)%units 143 END DO 144 145 IF(lwp) THEN ! control print 146 WRITE(numout,*) 147 WRITE(numout,*) ' Namelist : nampisdbi' 148 DO jl = 1, jp_pisces_trd 149 jn = jp_pcs0_trd + jl - 1 150 WRITE(numout,*) ' biological trend No : ', jn, ' short name : ', ctrbio(jn), & 151 & ' long name : ', ctrbio(jn), ' unit : ', ctrbio(jn) 152 END DO 153 WRITE(numout,*) ' ' 154 END IF 155 ! 156 END IF 157 158 #endif 159 80 81 ioptio = 0 82 IF( ln_p2z ) ioptio = ioptio + 1 83 IF( ln_p4z ) ioptio = ioptio + 1 84 ! 85 IF( ioptio /= 1 ) CALL ctl_stop( 'Choose ONE PISCES model namelist nampismod' ) 86 ! 160 87 END SUBROUTINE trc_nam_pisces 161 88 -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90
r4147 r7041 7 7 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) F90 8 8 !!---------------------------------------------------------------------- 9 #if defined key_pisces || defined key_pisces_reduced9 #if defined key_pisces 10 10 !!---------------------------------------------------------------------- 11 11 !! 'key_pisces' PISCES bio-model … … 14 14 !!---------------------------------------------------------------------- 15 15 USE par_pisces 16 USE sms_pisces 16 17 USE p4zsms 17 18 USE p2zsms … … 48 49 !!--------------------------------------------------------------------- 49 50 ! 50 IF( l k_p4z ) THEN ; CALL p4z_sms( kt ) ! PISCES51 IF( ln_p4z ) THEN ; CALL p4z_sms( kt ) ! PISCES 51 52 ELSE ; CALL p2z_sms( kt ) ! LOBSTER 52 53 ENDIF -
branches/2016/dev_r7012_ROBUST5_CNRS/NEMOGCM/NEMO/TOP_SRC/PISCES/trcwri_pisces.F90
r6140 r7041 6 6 !! History : 1.0 ! 2009-05 (C. Ethe) Original code 7 7 !!---------------------------------------------------------------------- 8 #if defined key_top && defined key_ iomput && ( defined key_pisces || defined key_pisces_reduced )8 #if defined key_top && defined key_pisces && defined key_iomput 9 9 !!---------------------------------------------------------------------- 10 !! 'key_pisces or key_pisces_reduced'PISCES model10 !! 'key_pisces PISCES model 11 11 !!---------------------------------------------------------------------- 12 12 !! trc_wri_pisces : outputs of concentration fields … … 42 42 ! write the tracer concentrations in the file 43 43 ! --------------------------------------- 44 #if defined key_pisces_reduced 45 DO jn = jp_pcs0, jp_pcs146 cltra = TRIM( ctrcnm(jn) ) ! short title for tracer47 CALL iom_put( cltra, trn(:,:,:,jn) )48 END DO49 #else 50 DO jn = jp_pcs0, jp_pcs151 zfact = 1.0e+652 IF( jn == jpno3 .OR. jn == jpnh4 ) zfact = rno3 * 1.0e+653 IF( jn == jppo4 ) zfact = po4r * 1.0e+654 cltra = TRIM( ctrcnm(jn) ) ! short title for tracer55 IF( iom_use( cltra ) ) CALL iom_put( cltra, trn(:,:,:,jn) * zfact )56 END DO44 IF( ln_p2z ) THEN 45 DO jn = jp_pcs0, jp_pcs1 46 cltra = TRIM( ctrcnm(jn) ) ! short title for tracer 47 CALL iom_put( cltra, trn(:,:,:,jn) ) 48 END DO 49 ELSE 50 DO jn = jp_pcs0, jp_pcs1 51 zfact = 1.0e+6 52 IF( jn == jpno3 .OR. jn == jpnh4 ) zfact = rno3 * 1.0e+6 53 IF( jn == jppo4 ) zfact = po4r * 1.0e+6 54 cltra = TRIM( ctrcnm(jn) ) ! short title for tracer 55 IF( iom_use( cltra ) ) CALL iom_put( cltra, trn(:,:,:,jn) * zfact ) 56 END DO 57 57 58 IF( iom_use( "INTDIC" ) ) THEN ! DIC content in kg/m2 59 zdic(:,:) = 0. 60 DO jk = 1, jpkm1 61 zdic(:,:) = zdic(:,:) + trn(:,:,jk,jpdic) * e3t_n(:,:,jk) * tmask(:,:,jk) * 12. 62 ENDDO 63 CALL iom_put( 'INTDIC', zdic ) 64 ENDIF 65 ! 66 IF( iom_use( "O2MIN" ) .OR. iom_use ( "ZO2MIN" ) ) THEN ! Oxygen minimum concentration and depth 67 zo2min (:,:) = trn(:,:,1,jpoxy) * tmask(:,:,1) 68 zdepo2min(:,:) = gdepw_n(:,:,1) * tmask(:,:,1) 69 DO jk = 2, jpkm1 70 DO jj = 1, jpj 71 DO ji = 1, jpi 72 IF( tmask(ji,jj,jk) == 1 ) then 73 IF( trn(ji,jj,jk,jpoxy) < zo2min(ji,jj) ) then 74 zo2min (ji,jj) = trn(ji,jj,jk,jpoxy) 75 zdepo2min(ji,jj) = gdepw_n(ji,jj,jk) 58 IF( iom_use( "INTDIC" ) ) THEN ! DIC content in kg/m2 59 zdic(:,:) = 0. 60 DO jk = 1, jpkm1 61 zdic(:,:) = zdic(:,:) + trn(:,:,jk,jpdic) * e3t_n(:,:,jk) * tmask(:,:,jk) * 12. 62 ENDDO 63 CALL iom_put( 'INTDIC', zdic ) 64 ENDIF 65 ! 66 IF( iom_use( "O2MIN" ) .OR. iom_use ( "ZO2MIN" ) ) THEN ! Oxygen minimum concentration and depth 67 zo2min (:,:) = trn(:,:,1,jpoxy) * tmask(:,:,1) 68 zdepo2min(:,:) = gdepw_n(:,:,1) * tmask(:,:,1) 69 DO jk = 2, jpkm1 70 DO jj = 1, jpj 71 DO ji = 1, jpi 72 IF( tmask(ji,jj,jk) == 1 ) then 73 IF( trn(ji,jj,jk,jpoxy) < zo2min(ji,jj) ) then 74 zo2min (ji,jj) = trn(ji,jj,jk,jpoxy) 75 zdepo2min(ji,jj) = gdepw_n(ji,jj,jk) 76 ENDIF 76 77 ENDIF 77 END IF78 END DO 78 79 END DO 79 80 END DO 80 END DO 81 ! 82 CALL iom_put('O2MIN' , zo2min ) ! oxygen minimum concentration 83 CALL iom_put('ZO2MIN', zdepo2min ) ! depth of oxygen minimum concentration 84 ! 85 ENDIF 86 #endif 81 ! 82 CALL iom_put('O2MIN' , zo2min ) ! oxygen minimum concentration 83 CALL iom_put('ZO2MIN', zdepo2min ) ! depth of oxygen minimum concentration 84 ! 85 ENDIF 86 ENDIF 87 87 ! 88 88 END SUBROUTINE trc_wri_pisces
Note: See TracChangeset
for help on using the changeset viewer.