Changeset 8074 for branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM
- Timestamp:
- 2017-05-25T18:43:39+02:00 (7 years ago)
- Location:
- branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/sms_medusa.F90
r7894 r8074 49 49 REAL(wp) :: xthetam !: maximum Chl to C ratio for non-diatoms 50 50 REAL(wp) :: xthetamd !: maximum Chl to C ratio for diatoms 51 REAL(wp) :: xq10 !: specific Q10 value (jphy==2)51 REAL(wp) :: jq10 !: specific Q10 value (jphy==2) 52 52 !! 53 53 !! Diatom silicon parameters … … 239 239 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: za_dms_din !: 2D avg DIN (after) 240 240 !! 241 !! 2D fields needing to be knows at first tstp for coupling with atm - UKE SM(Jpalm,14-06-2016)241 !! 2D fields needing to be knows at first tstp for coupling with atm - UKEMS(Jpalm,14-06-2016) 242 242 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zb_co2_flx !: 2D avg fx co2 (before) 243 243 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zn_co2_flx !: 2D avg fx co2 (now) … … 272 272 !! AXY (19/07/12): add this to permit river fluxes to be added below top box 273 273 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: friver_dep !: where river fluxes added 274 275 #if defined key_roam 276 !!---------------------------------------------------------------------- 277 !! Atmospheric pCO2 data (1859 to 2100 inclusive) 278 !!---------------------------------------------------------------------- 279 !! 280 REAL(wp), DIMENSION(242) :: hist_pco2 !: pCO2 281 282 # if defined key_rcp26 283 !! UKMO, run AJKKH + KAAEC, RCP 2.6, pCO2 time evolution 284 DATA hist_pco2 / 286.0230, 286.1730, 286.3230, 286.4480, 286.5730, & 285 & 286.7230, 286.8480, 286.9480, 287.0480, 287.1730, & 286 & 287.3230, 287.4730, 287.6480, 287.8480, 288.0730, & 287 & 288.3480, 288.6480, 288.9730, 289.3470, 289.7470, & 288 & 290.1730, 290.6470, 291.1470, 291.6220, 292.0720, & 289 & 292.5220, 292.9220, 293.2470, 293.5220, 293.7470, & 290 & 293.9470, 294.1220, 294.2720, 294.4220, 294.5470, & 291 & 294.6470, 294.7470, 294.8470, 294.9710, 295.1710, & 292 & 295.4460, 295.7470, 296.0720, 296.4210, 296.7710, & 293 & 297.1460, 297.5710, 298.0210, 298.4460, 298.8460, & 294 & 299.2460, 299.6450, 300.0210, 300.3710, 300.7200, & 295 & 301.0450, 301.3460, 301.6710, 302.0200, 302.3450, & 296 & 302.6450, 302.9700, 303.3450, 303.7200, 304.0700, & 297 & 304.4700, 304.9200, 305.3440, 305.7700, 306.2450, & 298 & 306.7190, 307.1700, 307.6440, 308.1190, 308.5440, & 299 & 308.9440, 309.3440, 309.6940, 309.9440, 310.1190, & 300 & 310.2440, 310.3190, 310.3190, 310.2440, 310.1440, & 301 & 310.0690, 310.0440, 310.0690, 310.1440, 310.2690, & 302 & 310.4440, 310.6940, 311.0430, 311.4440, 311.8690, & 303 & 312.3680, 312.9430, 313.5430, 314.1680, 314.7900, & 304 & 315.4430, 316.2150, 317.0170, 317.7370, 318.3400, & 305 & 318.8680, 319.5900, 320.5890, 321.5470, 322.5770, & 306 & 323.8440, 324.9260, 325.7960, 327.0810, 328.6180, & 307 & 329.6830, 330.5250, 331.6880, 333.2120, 334.7870, & 308 & 336.4640, 338.2990, 339.6660, 340.7310, 342.1360, & 309 & 343.7200, 345.2200, 346.7350, 348.5820, 350.6740, & 310 & 352.4230, 353.7910, 354.9530, 355.8210, 356.7130, & 311 & 358.0630, 359.7720, 361.3970, 363.0900, 365.2560, & 312 & 367.2810, 368.7980, 370.4000, 372.4550, 374.6920, & 313 & 376.7440, 378.7440, 380.7580, 382.7080, 384.7300, & 314 & 386.9310, 389.2150, 391.4910, 393.7710, 396.0460, & 315 & 398.3240, 400.6080, 402.8950, 405.1780, 407.4550, & 316 & 409.7260, 411.9930, 414.2500, 416.4410, 418.5280, & 317 & 420.5250, 422.4390, 424.2720, 426.0200, 427.6750, & 318 & 429.2360, 430.7050, 432.0850, 433.3580, 434.5140, & 319 & 435.5740, 436.5490, 437.4420, 438.2550, 438.9810, & 320 & 439.6110, 440.1430, 440.5770, 440.9450, 441.2660, & 321 & 441.5410, 441.7840, 442.0050, 442.2040, 442.3780, & 322 & 442.5210, 442.6200, 442.6720, 442.6810, 442.6540, & 323 & 442.5830, 442.4670, 442.3270, 442.1680, 441.9960, & 324 & 441.8060, 441.5930, 441.3440, 441.0540, 440.7230, & 325 & 440.3510, 439.9300, 439.4650, 438.9730, 438.4630, & 326 & 437.9400, 437.4020, 436.8400, 436.2640, 435.6850, & 327 & 435.1030, 434.5160, 433.9170, 433.3060, 432.7010, & 328 & 432.1110, 431.5380, 430.9810, 430.4320, 429.8860, & 329 & 429.3370, 428.7810, 428.2220, 427.6490, 427.0660, & 330 & 426.4890, 425.9270, 425.3840, 424.8610, 424.3540, & 331 & 423.8540, 423.3540, 422.8530, 422.3510, 421.8410, & 332 & 421.3250, 420.8190 / 333 # else 334 !! UKMO, run AJKKH + KAAEF, RCP 8.5, pCO2 time evolution 335 DATA hist_pco2 / 286.0230, 286.1730, 286.3230, 286.4480, 286.5730, & 336 & 286.7230, 286.8480, 286.9480, 287.0480, 287.1730, & 337 & 287.3230, 287.4730, 287.6480, 287.8480, 288.0730, & 338 & 288.3480, 288.6480, 288.9730, 289.3470, 289.7470, & 339 & 290.1730, 290.6470, 291.1470, 291.6220, 292.0720, & 340 & 292.5220, 292.9220, 293.2470, 293.5220, 293.7470, & 341 & 293.9470, 294.1220, 294.2720, 294.4220, 294.5470, & 342 & 294.6470, 294.7470, 294.8470, 294.9710, 295.1710, & 343 & 295.4460, 295.7470, 296.0720, 296.4210, 296.7710, & 344 & 297.1460, 297.5710, 298.0210, 298.4460, 298.8460, & 345 & 299.2460, 299.6450, 300.0210, 300.3710, 300.7200, & 346 & 301.0450, 301.3460, 301.6710, 302.0200, 302.3450, & 347 & 302.6450, 302.9700, 303.3450, 303.7200, 304.0700, & 348 & 304.4700, 304.9200, 305.3440, 305.7700, 306.2450, & 349 & 306.7190, 307.1700, 307.6440, 308.1190, 308.5440, & 350 & 308.9440, 309.3440, 309.6940, 309.9440, 310.1190, & 351 & 310.2440, 310.3190, 310.3190, 310.2440, 310.1440, & 352 & 310.0690, 310.0440, 310.0690, 310.1440, 310.2690, & 353 & 310.4440, 310.6940, 311.0430, 311.4440, 311.8690, & 354 & 312.3680, 312.9430, 313.5430, 314.1680, 314.7900, & 355 & 315.4430, 316.2150, 317.0170, 317.7370, 318.3400, & 356 & 318.8680, 319.5900, 320.5890, 321.5470, 322.5770, & 357 & 323.8440, 324.9260, 325.7960, 327.0810, 328.6180, & 358 & 329.6830, 330.5250, 331.6880, 333.2120, 334.7870, & 359 & 336.4640, 338.2990, 339.6660, 340.7310, 342.1360, & 360 & 343.7200, 345.2200, 346.7350, 348.5820, 350.6740, & 361 & 352.4230, 353.7910, 354.9530, 355.8210, 356.7130, & 362 & 358.0630, 359.7720, 361.3970, 363.0900, 365.2560, & 363 & 367.2810, 368.7980, 370.4000, 372.4550, 374.6920, & 364 & 376.7440, 378.7440, 380.7580, 382.7080, 384.7300, & 365 & 386.9420, 389.2540, 391.5670, 393.9370, 396.3920, & 366 & 398.9320, 401.5550, 404.2550, 407.0220, 409.8530, & 367 & 412.7470, 415.7050, 418.7210, 421.7880, 424.9180, & 368 & 428.1200, 431.3970, 434.7470, 438.1650, 441.6410, & 369 & 445.1700, 448.7530, 452.3920, 456.0950, 459.8810, & 370 & 463.7680, 467.7660, 471.8750, 476.0960, 480.4210, & 371 & 484.8390, 489.3470, 493.9430, 498.6400, 503.4380, & 372 & 508.3410, 513.3630, 518.5160, 523.8050, 529.2290, & 373 & 534.7780, 540.4450, 546.2230, 552.1120, 558.1110, & 374 & 564.2110, 570.4130, 576.7390, 583.1990, 589.7980, & 375 & 596.5390, 603.4110, 610.4060, 617.4940, 624.6500, & 376 & 631.8800, 639.1750, 646.5360, 653.9800, 661.5230, & 377 & 669.1840, 676.9570, 684.8290, 692.7790, 700.7690, & 378 & 708.8050, 716.8870, 725.0020, 733.1770, 741.3900, & 379 & 749.6700, 758.0480, 766.5050, 775.0350, 783.6110, & 380 & 792.2200, 800.8740, 809.5680, 818.2760, 827.0090, & 381 & 835.8020, 844.6550, 853.5730, 862.5690, 871.6190, & 382 & 880.7020, 889.8240, 898.9590, 908.1270, 917.3080, & 383 & 926.4960, 935.7040 / 384 # endif 385 #endif 274 386 275 387 !!---------------------------------------------------------------------- … … 369 481 & za_dms_din(jpi,jpj) , STAT=ierr(4) ) 370 482 !* 2D fields needing to be knows at first tstp for coupling with atm - 371 !UKE SM(Jpalm,14-06-2016)483 !UKEMSi (Jpalm,14-06-2016) 372 484 ALLOCATE( zb_co2_flx(jpi,jpj) , zn_co2_flx(jpi,jpj) , & 373 485 & za_co2_flx(jpi,jpj) , & -
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcavg_medusa.F90
r7894 r8074 51 51 !! This functionality was originally added to support the 52 52 !! calculation of surface DMS concentrations - and was done so 53 !! within the trcbio_medus a.F90 routine - but was moved to53 !! within the trcbio_meduse.F90 routine - but was moved to 54 54 !! this separate module so that its calculations could be used 55 55 !! to inform MEDUSA's submarine irradiance field -
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcbio_medusa.F90
r7894 r8074 20 20 !! - ! 2015-10 (J. Palm) Update for diag outputs through iom_use 21 21 !! - ! 2016-11 (A. Yool) Updated diags for CMIP6 22 !! - ! 2017-03 (A. Yool) Updated DMS for DIN limitation23 !! - ! 2017-04 (A. Yool) Simplify code to remove unused options, etc.24 !! - remove ln_diatrc, etc. code25 !! - remove PML carbonate chemistry code26 !! - remove defunct iron scavenging code27 !! - remove defunct debug diagnostic code28 22 !!---------------------------------------------------------------------- 29 23 !! … … 32 26 !! Updates for the ROAM project include: 33 27 !! - addition of DIC, alkalinity, detrital carbon and oxygen tracers 34 !! - addition of air-sea fluxes of CO2 and oxygen (updated with MOCSY)28 !! - addition of air-sea fluxes of CO2 and oxygen 35 29 !! - periodic (monthly) calculation of full 3D carbonate chemistry 36 30 !! - detrital C:N ratio now free to evolve dynamically … … 43 37 !! - switch for ballast vs. Martin vs. Henson fast detritus remin. 44 38 !! - per GMD referee remarks, xfdfrac3 introduced for grazed PDS 39 !!---------------------------------------------------------------------- 40 #endif 45 41 !! 42 #if defined key_mocsy 43 !!---------------------------------------------------------------------- 46 44 !! Updates with the addition of MOCSY include: 47 45 !! - option to use PML or MOCSY carbonate chemistry (the latter is … … 77 75 # if defined key_roam 78 76 USE gastransfer 77 # if defined key_mocsy 79 78 USE mocsy_wrapper 79 # else 80 USE trcco2_medusa 80 81 # endif 81 82 USE trcoxy_medusa … … 110 111 CONTAINS 111 112 112 SUBROUTINE trc_bio_medusa( kt ) 113 !!--------------------------------------------------------------------- 114 !! *** ROUTINE trc_bio *** 115 !! 116 !! ** Purpose : compute the now trend due to biogeochemical processes 117 !! and add it to the general trend of passive tracers equations 118 !! 119 !! ** Method : each now biological flux is calculated in function of now 120 !! concentrations of tracers. 121 !! depending on the tracer, these fluxes are sources or sinks. 122 !! the total of the sources and sinks for each tracer 123 !! is added to the general trend. 124 !! 125 !! tra = tra + zf...tra - zftra... 126 !! | | 127 !! | | 128 !! source sink 129 !!--------------------------------------------------------------------- 130 !! 131 !! 132 !!---------------------------------------------------------------------- 133 !! Variable conventions 134 !!---------------------------------------------------------------------- 135 !! 136 !! names: z*** - state variable 137 !! f*** - function (or temporary variable used in part of a function) 138 !! x*** - parameter 139 !! b*** - right-hand part (sources and sinks) 140 !! i*** - integer variable (usually used in yes/no flags) 141 !! 142 !! time (integer timestep) 143 INTEGER, INTENT( in ) :: kt 144 !! 145 !! spatial array indices 146 INTEGER :: ji,jj,jk,jn 147 !! 148 !! AXY (27/07/10): add in indices for depth horizons (for sinking flux 149 !! and seafloor iron inputs) 150 !! INTEGER :: i0100, i0200, i0500, i1000, i1100 151 !! 152 !! model state variables 153 REAL(wp) :: zchn,zchd,zphn,zphd,zpds,zzmi 154 REAL(wp) :: zzme,zdet,zdtc,zdin,zsil,zfer 113 SUBROUTINE trc_bio_medusa( kt ) 114 !!--------------------------------------------------------------------- 115 !! *** ROUTINE trc_bio *** 116 !! 117 !! ** Purpose : compute the now trend due to biogeochemical processes 118 !! and add it to the general trend of passive tracers equations 119 !! 120 !! ** Method : each now biological flux is calculated in function of now 121 !! concentrations of tracers. 122 !! depending on the tracer, these fluxes are sources or sinks. 123 !! the total of the sources and sinks for each tracer 124 !! is added to the general trend. 125 !! 126 !! tra = tra + zf...tra - zftra... 127 !! | | 128 !! | | 129 !! source sink 130 !! 131 !! IF 'key_trc_diabio' defined , the biogeochemical trends 132 !! for passive tracers are saved for futher diagnostics. 133 !!--------------------------------------------------------------------- 134 !! 135 !! 136 !!---------------------------------------------------------------------- 137 !! Variable conventions 138 !!---------------------------------------------------------------------- 139 !! 140 !! names: z*** - state variable 141 !! f*** - function (or temporary variable used in part of a function) 142 !! x*** - parameter 143 !! b*** - right-hand part (sources and sinks) 144 !! i*** - integer variable (usually used in yes/no flags) 145 !! 146 !! time (integer timestep) 147 INTEGER, INTENT( in ) :: kt 148 !! 149 !! spatial array indices 150 INTEGER :: ji,jj,jk,jn 151 !! 152 !! AXY (27/07/10): add in indices for depth horizons (for sinking flux 153 !! and seafloor iron inputs) 154 !! INTEGER :: i0100, i0200, i0500, i1000, i1100 155 !! 156 !! model state variables 157 REAL(wp) :: zchn,zchd,zphn,zphd,zpds,zzmi 158 REAL(wp) :: zzme,zdet,zdtc,zdin,zsil,zfer 159 REAL(wp) :: zage 155 160 # if defined key_roam 156 REAL(wp) :: zdic, zalk, zoxy 157 REAL(wp) :: ztmp, zsal 158 REAL(wp) :: zpho 159 # endif 160 !! 161 !! integrated source and sink terms 162 REAL(wp) :: b0 163 !! AXY (23/08/13): changed from individual variables for each flux to 164 !! an array that holds all fluxes 165 REAL(wp), DIMENSION(jp_medusa) :: btra 166 !! 167 !! primary production and chl related quantities 168 REAL(wp) :: fthetan,faln,fchn1,fchn,fjln,fprn,frn 169 REAL(wp) :: fthetad,fald,fchd1,fchd,fjld,fprd,frd 170 !! AXY (23/11/16): add in light-only limitation term (normalised 0-1 range) 171 REAL(wp) :: fjlim_pn, fjlim_pd 172 !! AXY (03/02/11): add in Liebig terms 173 REAL(wp) :: fpnlim, fpdlim 174 !! AXY (16/07/09): add in Eppley curve functionality 175 REAL(wp) :: loc_T,fun_T,xvpnT,xvpdT 176 INTEGER :: ieppley 177 !! AXY (16/05/11): per Katya's prompting, add in new T-dependence 178 !! for phytoplankton growth only (i.e. no change 179 !! for remineralisation) 180 REAL(wp) :: fun_Q10 181 !! AXY (01/03/10): add in mixed layer PP diagnostics 182 REAL(wp), DIMENSION(jpi,jpj) :: fprn_ml,fprd_ml 183 !! 184 !! nutrient limiting factors 185 REAL(wp) :: fnln,ffln !! N and Fe 186 REAL(wp) :: fnld,ffld,fsld,fsld2 !! N, Fe and Si 187 !! 188 !! silicon cycle 189 REAL(wp) :: fsin,fnsi,fsin1,fnsi1,fnsi2,fprds,fsdiss 190 !! 191 !! iron cycle; includes parameters for Parekh et al. (2005) iron scheme 192 REAL(wp) :: ffetop,ffebot,ffescav 193 REAL(wp) :: xLgF, xFeT, xFeF, xFeL !! state variables for iron-ligand system 194 REAL(wp), DIMENSION(jpi,jpj) :: xFree !! state variables for iron-ligand system 195 REAL(wp) :: xb_coef_tmp, xb2M4ac !! iron-ligand parameters 196 REAL(wp) :: xmaxFeF,fdeltaFe !! max Fe' parameters 197 !! 198 !! local parameters for Moore et al. (2004) alternative scavenging scheme 199 REAL(wp) :: fbase_scav,fscal_sink,fscal_part,fscal_scav 200 !! 201 !! local parameters for Moore et al. (2008) alternative scavenging scheme 202 REAL(wp) :: fscal_csink,fscal_sisink,fscal_casink 203 !! 204 !! local parameters for Galbraith et al. (2010) alternative scavenging scheme 205 REAL(wp) :: xCscav1, xCscav2, xk_org, xORGscav !! organic portion of scavenging 206 REAL(wp) :: xk_inorg, xINORGscav !! inorganic portion of scavenging 207 !! 208 !! microzooplankton grazing 209 REAL(wp) :: fmi1,fmi,fgmipn,fgmid,fgmidc 210 REAL(wp) :: finmi,ficmi,fstarmi,fmith,fmigrow,fmiexcr,fmiresp 211 !! 212 !! mesozooplankton grazing 213 REAL(wp) :: fme1,fme,fgmepn,fgmepd,fgmepds,fgmezmi,fgmed,fgmedc 214 REAL(wp) :: finme,ficme,fstarme,fmeth,fmegrow,fmeexcr,fmeresp 215 !! 216 !! mortality/Remineralisation (defunct parameter "fz" removed) 217 REAL(wp) :: fdpn,fdpd,fdpds,fdzmi,fdzme,fdd 161 REAL(wp) :: zdic, zalk, zoxy 162 REAL(wp) :: ztmp, zsal 163 # endif 164 # if defined key_mocsy 165 REAL(wp) :: zpho 166 # endif 167 !! 168 !! integrated source and sink terms 169 REAL(wp) :: b0 170 !! AXY (23/08/13): changed from individual variables for each flux to 171 !! an array that holds all fluxes 172 REAL(wp), DIMENSION(jp_medusa) :: btra 173 !! 174 !! primary production and chl related quantities 175 REAL(wp) :: fthetan,faln,fchn1,fchn,fjln,fprn,frn 176 REAL(wp) :: fthetad,fald,fchd1,fchd,fjld,fprd,frd 177 !! AXY (23/11/16): add in light-only limitation term (normalised 0-1 range) 178 REAL(wp) :: fjlim_pn, fjlim_pd 179 !! AXY (03/02/11): add in Liebig terms 180 REAL(wp) :: fpnlim, fpdlim 181 !! AXY (16/07/09): add in Eppley curve functionality 182 REAL(wp) :: loc_T,fun_T,xvpnT,xvpdT 183 INTEGER :: ieppley 184 !! AXY (16/05/11): per Katya's prompting, add in new T-dependence 185 !! for phytoplankton growth only (i.e. no change 186 !! for remineralisation) 187 REAL(wp) :: fun_Q10 188 !! AXY (01/03/10): add in mixed layer PP diagnostics 189 REAL(wp), DIMENSION(jpi,jpj) :: fprn_ml,fprd_ml 190 !! 191 !! nutrient limiting factors 192 REAL(wp) :: fnln,ffln !! N and Fe 193 REAL(wp) :: fnld,ffld,fsld,fsld2 !! N, Fe and Si 194 !! 195 !! silicon cycle 196 REAL(wp) :: fsin,fnsi,fsin1,fnsi1,fnsi2,fprds,fsdiss 197 !! 198 !! iron cycle; includes parameters for Parekh et al. (2005) iron scheme 199 REAL(wp) :: ffetop,ffebot,ffescav 200 REAL(wp) :: xLgF, xFeT, xFeF, xFeL !! state variables for iron-ligand system 201 REAL(wp), DIMENSION(jpi,jpj) :: xFree !! state variables for iron-ligand system 202 REAL(wp) :: xb_coef_tmp, xb2M4ac !! iron-ligand parameters 203 REAL(wp) :: xmaxFeF,fdeltaFe !! max Fe' parameters 204 !! 205 !! local parameters for Moore et al. (2004) alternative scavenging scheme 206 REAL(wp) :: fbase_scav,fscal_sink,fscal_part,fscal_scav 207 !! 208 !! local parameters for Moore et al. (2008) alternative scavenging scheme 209 REAL(wp) :: fscal_csink,fscal_sisink,fscal_casink 210 !! 211 !! local parameters for Galbraith et al. (2010) alternative scavenging scheme 212 REAL(wp) :: xCscav1, xCscav2, xk_org, xORGscav !! organic portion of scavenging 213 REAL(wp) :: xk_inorg, xINORGscav !! inorganic portion of scavenging 214 !! 215 !! microzooplankton grazing 216 REAL(wp) :: fmi1,fmi,fgmipn,fgmid,fgmidc 217 REAL(wp) :: finmi,ficmi,fstarmi,fmith,fmigrow,fmiexcr,fmiresp 218 !! 219 !! mesozooplankton grazing 220 REAL(wp) :: fme1,fme,fgmepn,fgmepd,fgmepds,fgmezmi,fgmed,fgmedc 221 REAL(wp) :: finme,ficme,fstarme,fmeth,fmegrow,fmeexcr,fmeresp 222 !! 223 !! mortality/Remineralisation (defunct parameter "fz" removed) 224 REAL(wp) :: fdpn,fdpd,fdpds,fdzmi,fdzme,fdd 218 225 # if defined key_roam 219 REAL(wp) :: fddc220 # endif 221 REAL(wp) :: fdpn2,fdpd2,fdpds2,fdzmi2,fdzme2222 REAL(wp) :: fslown, fslowc223 REAL(wp), DIMENSION(jpi,jpj) :: fslownflux, fslowcflux224 REAL(wp) :: fregen,fregensi225 REAL(wp), DIMENSION(jpi,jpj) :: fregenfast,fregenfastsi226 REAL(wp) :: fddc 227 # endif 228 REAL(wp) :: fdpn2,fdpd2,fdpds2,fdzmi2,fdzme2 229 REAL(wp) :: fslown, fslowc 230 REAL(wp), DIMENSION(jpi,jpj) :: fslownflux, fslowcflux 231 REAL(wp) :: fregen,fregensi 232 REAL(wp), DIMENSION(jpi,jpj) :: fregenfast,fregenfastsi 226 233 # if defined key_roam 227 REAL(wp) :: fregenc228 REAL(wp), DIMENSION(jpi,jpj) :: fregenfastc229 # endif 230 !!231 !! particle flux232 REAL(WP) :: fthk,fdep,fdep1,fdep2,flat,fcaco3233 REAL(WP) :: ftempn,ftempsi,ftempfe,ftempc,ftempca234 REAL(wp) :: freminn,freminsi,freminfe,freminc,freminca235 REAL(wp), DIMENSION(jpi,jpj) :: ffastn,ffastsi,ffastfe,ffastc,ffastca236 REAL(wp) :: fleftn,fleftsi,fleftfe,fleftc,fleftca237 REAL(wp) :: fheren,fheresi,fherefe,fherec,fhereca238 REAL(wp) :: fprotf239 REAL(wp), DIMENSION(jpi,jpj) :: fsedn,fsedsi,fsedfe,fsedc,fsedca240 REAL(wp), DIMENSION(jpi,jpj) :: fccd241 REAL(wp) :: fccd_dep242 !! AXY (28/11/16): fix mbathy bug243 INTEGER :: jmbathy244 !!245 !! AXY (06/07/11): alternative fast detritus schemes246 REAL(wp) :: fb_val, fl_sst247 !!248 !! AXY (08/07/11): fate of fast detritus reaching the seafloor249 REAL(wp) :: ffast2slown,ffast2slowfe,ffast2slowc250 !!251 !! conservation law252 REAL(wp) :: fnit0,fsil0,ffer0234 REAL(wp) :: fregenc 235 REAL(wp), DIMENSION(jpi,jpj) :: fregenfastc 236 # endif 237 !! 238 !! particle flux 239 REAL(WP) :: fthk,fdep,fdep1,fdep2,flat,fcaco3 240 REAL(WP) :: ftempn,ftempsi,ftempfe,ftempc,ftempca 241 REAL(wp) :: freminn,freminsi,freminfe,freminc,freminca 242 REAL(wp), DIMENSION(jpi,jpj) :: ffastn,ffastsi,ffastfe,ffastc,ffastca 243 REAL(wp) :: fleftn,fleftsi,fleftfe,fleftc,fleftca 244 REAL(wp) :: fheren,fheresi,fherefe,fherec,fhereca 245 REAL(wp) :: fprotf 246 REAL(wp), DIMENSION(jpi,jpj) :: fsedn,fsedsi,fsedfe,fsedc,fsedca 247 REAL(wp), DIMENSION(jpi,jpj) :: fccd 248 REAL(wp) :: fccd_dep 249 !! AXY (28/11/16): fix mbathy bug 250 INTEGER :: jmbathy 251 !! 252 !! AXY (06/07/11): alternative fast detritus schemes 253 REAL(wp) :: fb_val, fl_sst 254 !! 255 !! AXY (08/07/11): fate of fast detritus reaching the seafloor 256 REAL(wp) :: ffast2slown,ffast2slowfe,ffast2slowc 257 !! 258 !! conservation law 259 REAL(wp) :: fnit0,fsil0,ffer0 253 260 # if defined key_roam 254 REAL(wp) :: fcar0,falk0,foxy0261 REAL(wp) :: fcar0,falk0,foxy0 255 262 # endif 256 !!257 !! temporary variables258 REAL(wp) :: fq0,fq1,fq2,fq3,fq4,fq5,fq6,fq7,fq8,fq9259 !!260 !! water column nutrient and flux integrals261 REAL(wp), DIMENSION(jpi,jpj) :: ftot_n,ftot_si,ftot_fe262 REAL(wp), DIMENSION(jpi,jpj) :: fflx_n,fflx_si,fflx_fe263 REAL(wp), DIMENSION(jpi,jpj) :: fifd_n,fifd_si,fifd_fe264 REAL(wp), DIMENSION(jpi,jpj) :: fofd_n,fofd_si,fofd_fe263 !! 264 !! temporary variables 265 REAL(wp) :: fq0,fq1,fq2,fq3,fq4,fq5,fq6,fq7,fq8,fq9 266 !! 267 !! water column nutrient and flux integrals 268 REAL(wp), DIMENSION(jpi,jpj) :: ftot_n,ftot_si,ftot_fe 269 REAL(wp), DIMENSION(jpi,jpj) :: fflx_n,fflx_si,fflx_fe 270 REAL(wp), DIMENSION(jpi,jpj) :: fifd_n,fifd_si,fifd_fe 271 REAL(wp), DIMENSION(jpi,jpj) :: fofd_n,fofd_si,fofd_fe 265 272 # if defined key_roam 266 REAL(wp), DIMENSION(jpi,jpj) :: ftot_c,ftot_a,ftot_o2267 REAL(wp), DIMENSION(jpi,jpj) :: fflx_c,fflx_a,fflx_o2268 REAL(wp), DIMENSION(jpi,jpj) :: fifd_c,fifd_a,fifd_o2269 REAL(wp), DIMENSION(jpi,jpj) :: fofd_c,fofd_a,fofd_o2270 # endif 271 !!272 !! zooplankton grazing integrals273 REAL(wp), DIMENSION(jpi,jpj) :: fzmi_i,fzmi_o,fzme_i,fzme_o274 !!275 !! limitation term temporary variables276 REAL(wp), DIMENSION(jpi,jpj) :: ftot_pn,ftot_pd277 REAL(wp), DIMENSION(jpi,jpj) :: ftot_zmi,ftot_zme,ftot_det,ftot_dtc278 !! use ballast scheme (1) or simple exponential scheme (0; a conservation test)279 INTEGER :: iball280 !! use biological fluxes (1) or not (0)281 INTEGER :: ibio_switch282 !!283 !! diagnose fluxes (should only be used in 1D runs)284 INTEGER :: idf, idfval285 !!286 !! nitrogen and silicon production and consumption287 REAL(wp) :: fn_prod, fn_cons, fs_prod, fs_cons288 REAL(wp), DIMENSION(jpi,jpj) :: fnit_prod, fnit_cons, fsil_prod, fsil_cons273 REAL(wp), DIMENSION(jpi,jpj) :: ftot_c,ftot_a,ftot_o2 274 REAL(wp), DIMENSION(jpi,jpj) :: fflx_c,fflx_a,fflx_o2 275 REAL(wp), DIMENSION(jpi,jpj) :: fifd_c,fifd_a,fifd_o2 276 REAL(wp), DIMENSION(jpi,jpj) :: fofd_c,fofd_a,fofd_o2 277 # endif 278 !! 279 !! zooplankton grazing integrals 280 REAL(wp), DIMENSION(jpi,jpj) :: fzmi_i,fzmi_o,fzme_i,fzme_o 281 !! 282 !! limitation term temporary variables 283 REAL(wp), DIMENSION(jpi,jpj) :: ftot_pn,ftot_pd 284 REAL(wp), DIMENSION(jpi,jpj) :: ftot_zmi,ftot_zme,ftot_det,ftot_dtc 285 !! use ballast scheme (1) or simple exponential scheme (0; a conservation test) 286 INTEGER :: iball 287 !! use biological fluxes (1) or not (0) 288 INTEGER :: ibio_switch 289 !! 290 !! diagnose fluxes (should only be used in 1D runs) 291 INTEGER :: idf, idfval 292 !! 293 !! nitrogen and silicon production and consumption 294 REAL(wp) :: fn_prod, fn_cons, fs_prod, fs_cons 295 REAL(wp), DIMENSION(jpi,jpj) :: fnit_prod, fnit_cons, fsil_prod, fsil_cons 289 296 # if defined key_roam 290 !! 291 !! flags to help with calculating the position of the CCD 292 INTEGER, DIMENSION(jpi,jpj) :: i2_omcal,i2_omarg 293 !! 294 !! ROAM air-sea flux and diagnostic parameters 295 REAL(wp) :: f_wind 296 !! AXY (24/11/16): add xCO2 variable for atmosphere (what we actually have) 297 REAL(wp) :: f_xco2a 298 REAL(wp) :: f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_co2flux 299 REAL(wp) :: f_TDIC, f_TALK, f_dcf, f_henry 300 REAL(wp) :: f_uwind, f_vwind, f_pp0 301 REAL(wp) :: f_kw660, f_o2flux, f_o2sat, f_o2sat3 302 REAL(wp), DIMENSION(jpi,jpj) :: f_omcal, f_omarg 303 !! 304 !! AXY (23/06/15): additional diagnostics for MOCSY and oxygen 305 REAL(wp) :: f_fco2w, f_BetaD, f_rhosw, f_opres, f_insitut, f_pco2atm, f_fco2atm 306 REAL(wp) :: f_schmidtco2, f_kwco2, f_K0, f_co2starair, f_dpco2, f_kwo2 307 !! jpalm 14-07-2016: convert CO2flux diag from mmol/m2/d to kg/m2/s 308 REAL, PARAMETER :: weight_CO2_mol = 44.0095 !! g / mol 309 REAL, PARAMETER :: secs_in_day = 86400.0 !! s / d 310 REAL, PARAMETER :: CO2flux_conv = (1.e-6 * weight_CO2_mol) / secs_in_day 311 !! 312 INTEGER :: iters 313 REAL(wp) :: f_year 314 INTEGER :: i_year 315 INTEGER :: iyr1, iyr2 316 !! 317 !! carbon, alkalinity production and consumption 318 REAL(wp) :: fc_prod, fc_cons, fa_prod, fa_cons 319 REAL(wp), DIMENSION(jpi,jpj) :: fcomm_resp 320 REAL(wp), DIMENSION(jpi,jpj) :: fcar_prod, fcar_cons 321 !! 322 !! oxygen production and consumption (and non-consumption) 323 REAL(wp) :: fo2_prod, fo2_cons, fo2_ncons, fo2_ccons 324 REAL(wp), DIMENSION(jpi,jpj) :: foxy_prod, foxy_cons, foxy_anox 325 !! Jpalm (11-08-2014) 326 !! add DMS in MEDUSA for UKESM1 model 327 REAL(wp) :: dms_surf 328 !! AXY (13/03/15): add in other DMS calculations 329 REAL(wp) :: dms_andr, dms_simo, dms_aran, dms_hall, dms_nlim, dms_wtkn 330 # endif 331 !! 332 !! benthic fluxes 333 INTEGER :: ibenthic 334 REAL(wp), DIMENSION(jpi,jpj) :: f_sbenin_n, f_sbenin_fe, f_sbenin_c 335 REAL(wp), DIMENSION(jpi,jpj) :: f_fbenin_n, f_fbenin_fe, f_fbenin_si, f_fbenin_c, f_fbenin_ca 336 REAL(wp), DIMENSION(jpi,jpj) :: f_benout_n, f_benout_fe, f_benout_si, f_benout_c, f_benout_ca 337 REAL(wp) :: zfact 338 !! 339 !! benthic fluxes of CaCO3 that shouldn't happen because of lysocline 340 REAL(wp), DIMENSION(jpi,jpj) :: f_benout_lyso_ca 341 !! 342 !! riverine fluxes 343 REAL(wp), DIMENSION(jpi,jpj) :: f_runoff, f_riv_n, f_riv_si, f_riv_c, f_riv_alk 344 !! AXY (19/07/12): variables for local riverine fluxes to handle inputs below surface 345 REAL(wp) :: f_riv_loc_n, f_riv_loc_si, f_riv_loc_c, f_riv_loc_alk 346 !! 347 !! horizontal grid location 348 REAL(wp) :: flatx, flonx 349 !! 350 !! Jpalm -- 11-10-2015 -- adapt diag to iom_use 351 !! 2D var for diagnostics. 352 REAL(wp), POINTER, DIMENSION(:,: ) :: fprn2d, fdpn2d, fprd2d, fdpd2d, fprds2d, fsdiss2d, fgmipn2d 353 REAL(wp), POINTER, DIMENSION(:,: ) :: fgmid2d, fdzmi2d, fgmepn2d, fgmepd2d, fgmezmi2d, fgmed2d 354 REAL(wp), POINTER, DIMENSION(:,: ) :: fdzme2d, fslown2d, fdd2d, ffetop2d, ffebot2d, ffescav2d 355 REAL(wp), POINTER, DIMENSION(:,: ) :: fjln2d, fnln2d, ffln2d, fjld2d, fnld2d, ffld2d, fsld2d2 356 REAL(wp), POINTER, DIMENSION(:,: ) :: fsld2d, fregen2d, fregensi2d, ftempn2d, ftempsi2d, ftempfe2d 357 REAL(wp), POINTER, DIMENSION(:,: ) :: ftempc2d, ftempca2d, freminn2d, freminsi2d, freminfe2d 358 REAL(wp), POINTER, DIMENSION(:,: ) :: freminc2d, freminca2d 359 REAL(wp), POINTER, DIMENSION(:,: ) :: zw2d 297 !! 298 !! flags to help with calculating the position of the CCD 299 INTEGER, DIMENSION(jpi,jpj) :: i2_omcal,i2_omarg 300 !! 301 !! ROAM air-sea flux and diagnostic parameters 302 REAL(wp) :: f_wind 303 !! AXY (24/11/16): add xCO2 variable for atmosphere (what we actually have) 304 REAL(wp) :: f_xco2a 305 REAL(wp) :: f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_co2flux 306 REAL(wp) :: f_TDIC, f_TALK, f_dcf, f_henry 307 REAL(wp) :: f_uwind, f_vwind, f_pp0 308 REAL(wp) :: f_kw660, f_o2flux, f_o2sat, f_o2sat3 309 REAL(wp), DIMENSION(jpi,jpj) :: f_omcal, f_omarg 310 !! 311 !! AXY (23/06/15): additional diagnostics for MOCSY and oxygen 312 REAL(wp) :: f_fco2w, f_BetaD, f_rhosw, f_opres, f_insitut, f_pco2atm, f_fco2atm 313 REAL(wp) :: f_schmidtco2, f_kwco2, f_K0, f_co2starair, f_dpco2, f_kwo2 314 !! jpalm 14-07-2016: convert CO2flux diag from mmol/m2/d to kg/m2/s 315 REAL, PARAMETER :: weight_CO2_mol = 44.0095 !! g / mol 316 REAL, PARAMETER :: secs_in_day = 86400.0 !! s / d 317 REAL, PARAMETER :: CO2flux_conv = (1.e-6 * weight_CO2_mol) / secs_in_day 318 319 !! 320 INTEGER :: iters 321 REAL(wp) :: f_year 322 INTEGER :: i_year 323 INTEGER :: iyr1, iyr2 324 !! 325 !! carbon, alkalinity production and consumption 326 REAL(wp) :: fc_prod, fc_cons, fa_prod, fa_cons 327 REAL(wp), DIMENSION(jpi,jpj) :: fcomm_resp 328 REAL(wp), DIMENSION(jpi,jpj) :: fcar_prod, fcar_cons 329 !! 330 !! oxygen production and consumption (and non-consumption) 331 REAL(wp) :: fo2_prod, fo2_cons, fo2_ncons, fo2_ccons 332 REAL(wp), DIMENSION(jpi,jpj) :: foxy_prod, foxy_cons, foxy_anox 333 !! Jpalm (11-08-2014) 334 !! add DMS in MEDUSA for UKESM1 model 335 REAL(wp) :: dms_surf 336 !! AXY (13/03/15): add in other DMS calculations 337 REAL(wp) :: dms_andr, dms_simo, dms_aran, dms_hall 338 339 # endif 340 !! 341 !! benthic fluxes 342 INTEGER :: ibenthic 343 REAL(wp), DIMENSION(jpi,jpj) :: f_sbenin_n, f_sbenin_fe, f_sbenin_c 344 REAL(wp), DIMENSION(jpi,jpj) :: f_fbenin_n, f_fbenin_fe, f_fbenin_si, f_fbenin_c, f_fbenin_ca 345 REAL(wp), DIMENSION(jpi,jpj) :: f_benout_n, f_benout_fe, f_benout_si, f_benout_c, f_benout_ca 346 REAL(wp) :: zfact 347 !! 348 !! benthic fluxes of CaCO3 that shouldn't happen because of lysocline 349 REAL(wp), DIMENSION(jpi,jpj) :: f_benout_lyso_ca 350 !! 351 !! riverine fluxes 352 REAL(wp), DIMENSION(jpi,jpj) :: f_runoff, f_riv_n, f_riv_si, f_riv_c, f_riv_alk 353 !! AXY (19/07/12): variables for local riverine fluxes to handle inputs below surface 354 REAL(wp) :: f_riv_loc_n, f_riv_loc_si, f_riv_loc_c, f_riv_loc_alk 355 !! 356 !! Jpalm -- 11-10-2015 -- adapt diag to iom_use 357 !! 2D var for diagnostics. 358 REAL(wp), POINTER, DIMENSION(:,: ) :: fprn2d, fdpn2d, fprd2d, fdpd2d, fprds2d, fsdiss2d, fgmipn2d 359 REAL(wp), POINTER, DIMENSION(:,: ) :: fgmid2d, fdzmi2d, fgmepn2d, fgmepd2d, fgmezmi2d, fgmed2d 360 REAL(wp), POINTER, DIMENSION(:,: ) :: fdzme2d, fslown2d, fdd2d, ffetop2d, ffebot2d, ffescav2d 361 REAL(wp), POINTER, DIMENSION(:,: ) :: fjln2d, fnln2d, ffln2d, fjld2d, fnld2d, ffld2d, fsld2d2 362 REAL(wp), POINTER, DIMENSION(:,: ) :: fsld2d, fregen2d, fregensi2d, ftempn2d, ftempsi2d, ftempfe2d 363 REAL(wp), POINTER, DIMENSION(:,: ) :: ftempc2d, ftempca2d, freminn2d, freminsi2d, freminfe2d 364 REAL(wp), POINTER, DIMENSION(:,: ) :: freminc2d, freminca2d 365 REAL(wp), POINTER, DIMENSION(:,: ) :: zw2d 360 366 # if defined key_roam 361 REAL(wp), POINTER, DIMENSION(:,: ) :: ffastca2d, rivn2d, rivsi2d, rivc2d, rivalk2d, fslowc2d362 REAL(wp), POINTER, DIMENSION(:,: ) :: fdpn22d, fdpd22d, fdzmi22d, fdzme22d, zimesn2d, zimesd2d363 REAL(wp), POINTER, DIMENSION(:,: ) :: zimesc2d, zimesdc2d, ziexcr2d, ziresp2d, zigrow2d, zemesn2d364 REAL(wp), POINTER, DIMENSION(:,: ) :: zemesd2d, zemesc2d, zemesdc2d, zeexcr2d, zeresp2d, zegrow2d365 REAL(wp), POINTER, DIMENSION(:,: ) :: mdetc2d, gmidc2d, gmedc2d, f_pco2a2d, f_pco2w2d, f_co2flux2d366 REAL(wp), POINTER, DIMENSION(:,: ) :: f_TDIC2d, f_TALK2d, f_kw6602d, f_pp02d, f_o2flux2d, f_o2sat2d367 REAL(wp), POINTER, DIMENSION(:,: ) :: dms_andr2d, dms_simo2d, dms_aran2d, dms_hall2d, dms_surf2d368 REAL(wp), POINTER, DIMENSION(:,: ) :: iben_n2d, iben_fe2d, iben_c2d, iben_si2d, iben_ca2d, oben_n2d369 REAL(wp), POINTER, DIMENSION(:,: ) :: oben_fe2d, oben_c2d, oben_si2d, oben_ca2d, sfr_ocal2d370 REAL(wp), POINTER, DIMENSION(:,: ) :: sfr_oarg2d, lyso_ca2d371 !! AXY (23/11/16): extra MOCSY diagnostics372 REAL(wp), POINTER, DIMENSION(:,: ) :: f_xco2a_2d, f_fco2w_2d, f_fco2a_2d373 REAL(wp), POINTER, DIMENSION(:,: ) :: f_ocnrhosw_2d, f_ocnschco2_2d, f_ocnkwco2_2d374 REAL(wp), POINTER, DIMENSION(:,: ) :: f_ocnk0_2d, f_co2starair_2d, f_ocndpco2_2d375 # endif 376 !!377 !! 3D var for diagnostics.378 REAL(wp), POINTER, DIMENSION(:,:,:) :: tpp3d, detflux3d, remin3dn379 !!367 REAL(wp), POINTER, DIMENSION(:,: ) :: ffastca2d, rivn2d, rivsi2d, rivc2d, rivalk2d, fslowc2d 368 REAL(wp), POINTER, DIMENSION(:,: ) :: fdpn22d, fdpd22d, fdzmi22d, fdzme22d, zimesn2d, zimesd2d 369 REAL(wp), POINTER, DIMENSION(:,: ) :: zimesc2d, zimesdc2d, ziexcr2d, ziresp2d, zigrow2d, zemesn2d 370 REAL(wp), POINTER, DIMENSION(:,: ) :: zemesd2d, zemesc2d, zemesdc2d, zeexcr2d, zeresp2d, zegrow2d 371 REAL(wp), POINTER, DIMENSION(:,: ) :: mdetc2d, gmidc2d, gmedc2d, f_pco2a2d, f_pco2w2d, f_co2flux2d 372 REAL(wp), POINTER, DIMENSION(:,: ) :: f_TDIC2d, f_TALK2d, f_kw6602d, f_pp02d, f_o2flux2d, f_o2sat2d 373 REAL(wp), POINTER, DIMENSION(:,: ) :: dms_andr2d, dms_simo2d, dms_aran2d, dms_hall2d, dms_surf2d 374 REAL(wp), POINTER, DIMENSION(:,: ) :: iben_n2d, iben_fe2d, iben_c2d, iben_si2d, iben_ca2d, oben_n2d 375 REAL(wp), POINTER, DIMENSION(:,: ) :: oben_fe2d, oben_c2d, oben_si2d, oben_ca2d, sfr_ocal2d 376 REAL(wp), POINTER, DIMENSION(:,: ) :: sfr_oarg2d, lyso_ca2d 377 !! AXY (23/11/16): extra MOCSY diagnostics 378 REAL(wp), POINTER, DIMENSION(:,: ) :: f_xco2a_2d, f_fco2w_2d, f_fco2a_2d 379 REAL(wp), POINTER, DIMENSION(:,: ) :: f_ocnrhosw_2d, f_ocnschco2_2d, f_ocnkwco2_2d 380 REAL(wp), POINTER, DIMENSION(:,: ) :: f_ocnk0_2d, f_co2starair_2d, f_ocndpco2_2d 381 # endif 382 !! 383 !! 3D var for diagnostics. 384 REAL(wp), POINTER, DIMENSION(:,:,:) :: tpp3d, detflux3d, remin3dn 385 !! 380 386 # if defined key_roam 381 !! AXY (04/11/16)382 !! 2D var for new CMIP6 diagnostics (behind a key_roam ifdef for simplicity)383 REAL(wp), POINTER, DIMENSION(:,: ) :: fgco2, intdissic, intdissin, intdissisi, inttalk, o2min, zo2min384 REAL(wp), POINTER, DIMENSION(:,: ) :: fbddtalk, fbddtdic, fbddtdife, fbddtdin, fbddtdisi385 !!386 !! 3D var for new CMIP6 diagnostics387 REAL(wp), POINTER, DIMENSION(:,:,:) :: tppd3388 REAL(wp), POINTER, DIMENSION(:,:,:) :: bddtalk3, bddtdic3, bddtdife3, bddtdin3, bddtdisi3389 REAL(wp), POINTER, DIMENSION(:,:,:) :: fd_nit3, fd_sil3, fd_car3, fd_cal3390 REAL(wp), POINTER, DIMENSION(:,:,:) :: co33, co3satarag3, co3satcalc3, dcalc3391 REAL(wp), POINTER, DIMENSION(:,:,:) :: expc3, expn3392 REAL(wp), POINTER, DIMENSION(:,:,:) :: fediss3, fescav3393 REAL(wp), POINTER, DIMENSION(:,:,:) :: migrazp3, migrazd3, megrazp3, megrazd3, megrazz3394 REAL(wp), POINTER, DIMENSION(:,:,:) :: o2sat3, pbsi3, pcal3, remoc3395 REAL(wp), POINTER, DIMENSION(:,:,:) :: pnlimj3, pnlimn3, pnlimfe3, pdlimj3, pdlimn3, pdlimfe3, pdlimsi3396 # endif 397 !!---------------------------------------------------------------------387 !! AXY (04/11/16) 388 !! 2D var for new CMIP6 diagnostics (behind a key_roam ifdef for simplicity) 389 REAL(wp), POINTER, DIMENSION(:,: ) :: fgco2, intdissic, intdissin, intdissisi, inttalk, o2min, zo2min 390 REAL(wp), POINTER, DIMENSION(:,: ) :: fbddtalk, fbddtdic, fbddtdife, fbddtdin, fbddtdisi 391 !! 392 !! 3D var for new CMIP6 diagnostics 393 REAL(wp), POINTER, DIMENSION(:,:,:) :: tppd3 394 REAL(wp), POINTER, DIMENSION(:,:,:) :: bddtalk3, bddtdic3, bddtdife3, bddtdin3, bddtdisi3 395 REAL(wp), POINTER, DIMENSION(:,:,:) :: fd_nit3, fd_sil3, fd_car3, fd_cal3 396 REAL(wp), POINTER, DIMENSION(:,:,:) :: co33, co3satarag3, co3satcalc3, dcalc3 397 REAL(wp), POINTER, DIMENSION(:,:,:) :: expc3, expn3 398 REAL(wp), POINTER, DIMENSION(:,:,:) :: fediss3, fescav3 399 REAL(wp), POINTER, DIMENSION(:,:,:) :: migrazp3, migrazd3, megrazp3, megrazd3, megrazz3 400 REAL(wp), POINTER, DIMENSION(:,:,:) :: o2sat3, pbsi3, pcal3, remoc3 401 REAL(wp), POINTER, DIMENSION(:,:,:) :: pnlimj3, pnlimn3, pnlimfe3, pdlimj3, pdlimn3, pdlimfe3, pdlimsi3 402 # endif 403 !!--------------------------------------------------------------------- 398 404 399 405 # if defined key_debug_medusa 400 IF ( lwp) write (numout,*) 'trc_bio_medusa: variables defined'401 CALL flush(numout)406 IF (lwp) write (numout,*) 'trc_bio_medusa: variables defined' 407 CALL flush(numout) 402 408 # endif 403 409 404 !! AXY (20/11/14): alter this to report on first MEDUSA call 405 !! IF( kt == nit000 ) THEN 406 IF( kt == nittrc000 ) THEN 407 IF(lwp) WRITE(numout,*) 408 IF(lwp) WRITE(numout,*) ' trc_bio: MEDUSA bio-model' 409 IF(lwp) WRITE(numout,*) ' ~~~~~~~' 410 IF(lwp) WRITE(numout,*) ' kt =',kt 411 ENDIF 412 413 !! AXY (13/01/12): is benthic model properly interactive? 0 = no, 1 = yes 414 ibenthic = 1 415 416 !!---------------------------------------------------------------------- 417 !! b0 is present for debugging purposes; using b0 = 0 sets the tendency 418 !! terms of all biological equations to 0. 419 !!---------------------------------------------------------------------- 420 !! 421 !! AXY (03/09/14): probably not the smartest move ever, but it'll fit 422 !! the bill for now; another item on the things-to-sort- 423 !! out-in-the-future list ... 410 !! AXY (20/11/14): alter this to report on first MEDUSA call 411 !! IF( kt == nit000 ) THEN 412 IF( kt == nittrc000 ) THEN 413 IF(lwp) WRITE(numout,*) 414 IF(lwp) WRITE(numout,*) ' trc_bio: MEDUSA bio-model' 415 IF(lwp) WRITE(numout,*) ' ~~~~~~~' 416 IF(lwp) WRITE(numout,*) ' kt =',kt 417 ENDIF 418 419 !! AXY (13/01/12): is benthic model properly interactive? 0 = no, 1 = yes 420 ibenthic = 1 421 422 !! not sure what this is for; it's not used anywhere; commenting out 423 !! fbodn(:,:) = 0.e0 424 425 !! 426 IF( ln_diatrc ) THEN 427 !! blank 2D diagnostic array 428 trc2d(:,:,:) = 0.e0 429 !! 430 !! blank 3D diagnostic array 431 trc3d(:,:,:,:) = 0.e0 432 ENDIF 433 434 !!---------------------------------------------------------------------- 435 !! b0 is present for debugging purposes; using b0 = 0 sets the tendency 436 !! terms of all biological equations to 0. 437 !!---------------------------------------------------------------------- 438 !! 439 !! AXY (03/09/14): probably not the smartest move ever, but it'll fit 440 !! the bill for now; another item on the things-to-sort- 441 !! out-in-the-future list ... 424 442 # if defined key_kill_medusa 425 b0 = 0.443 b0 = 0. 426 444 # else 427 b0 = 1.428 # endif 429 !!----------------------------------------------------------------------430 !! fast detritus ballast scheme (0 = no; 1 = yes)431 !! alternative to ballast scheme is same scheme but with no ballast432 !! protection (not dissimilar to Martin et al., 1987)433 !!----------------------------------------------------------------------434 !!435 iball = 1436 437 !!----------------------------------------------------------------------438 !! full flux diagnostics (0 = no; 1 = yes); appear in ocean.output439 !! these should *only* be used in 1D since they give comprehensive440 !! output for ecological functions in the model; primarily used in441 !! debugging442 !!----------------------------------------------------------------------443 !!444 idf = 0445 !!446 !! timer mechanism447 if (kt/120*120.eq.kt) then448 idfval = 1449 else450 idfval = 0451 endif452 453 !!----------------------------------------------------------------------454 !! blank fast-sinking detritus 2D fields455 !!----------------------------------------------------------------------456 !!457 ffastn(:,:) = 0.0 !! organic nitrogen458 ffastsi(:,:) = 0.0 !! biogenic silicon459 ffastfe(:,:) = 0.0 !! organic iron460 ffastc(:,:) = 0.0 !! organic carbon461 ffastca(:,:) = 0.0 !! biogenic calcium carbonate462 !!463 fsedn(:,:) = 0.0 !! Seafloor flux of N464 fsedsi(:,:) = 0.0 !! Seafloor flux of Si465 fsedfe(:,:) = 0.0 !! Seafloor flux of Fe466 fsedc(:,:) = 0.0 !! Seafloor flux of C467 fsedca(:,:) = 0.0 !! Seafloor flux of CaCO3468 !!469 fregenfast(:,:) = 0.0 !! integrated N regeneration (fast detritus)470 fregenfastsi(:,:) = 0.0 !! integrated Si regeneration (fast detritus)445 b0 = 1. 446 # endif 447 !!---------------------------------------------------------------------- 448 !! fast detritus ballast scheme (0 = no; 1 = yes) 449 !! alternative to ballast scheme is same scheme but with no ballast 450 !! protection (not dissimilar to Martin et al., 1987) 451 !!---------------------------------------------------------------------- 452 !! 453 iball = 1 454 455 !!---------------------------------------------------------------------- 456 !! full flux diagnostics (0 = no; 1 = yes); appear in ocean.output 457 !! these should *only* be used in 1D since they give comprehensive 458 !! output for ecological functions in the model; primarily used in 459 !! debugging 460 !!---------------------------------------------------------------------- 461 !! 462 idf = 0 463 !! 464 !! timer mechanism 465 if (kt/120*120.eq.kt) then 466 idfval = 1 467 else 468 idfval = 0 469 endif 470 471 !!---------------------------------------------------------------------- 472 !! blank fast-sinking detritus 2D fields 473 !!---------------------------------------------------------------------- 474 !! 475 ffastn(:,:) = 0.0 !! organic nitrogen 476 ffastsi(:,:) = 0.0 !! biogenic silicon 477 ffastfe(:,:) = 0.0 !! organic iron 478 ffastc(:,:) = 0.0 !! organic carbon 479 ffastca(:,:) = 0.0 !! biogenic calcium carbonate 480 !! 481 fsedn(:,:) = 0.0 !! Seafloor flux of N 482 fsedsi(:,:) = 0.0 !! Seafloor flux of Si 483 fsedfe(:,:) = 0.0 !! Seafloor flux of Fe 484 fsedc(:,:) = 0.0 !! Seafloor flux of C 485 fsedca(:,:) = 0.0 !! Seafloor flux of CaCO3 486 !! 487 fregenfast(:,:) = 0.0 !! integrated N regeneration (fast detritus) 488 fregenfastsi(:,:) = 0.0 !! integrated Si regeneration (fast detritus) 471 489 # if defined key_roam 472 fregenfastc(:,:) = 0.0 !! integrated C regeneration (fast detritus)473 # endif 474 !!475 fccd(:,:) = 0.0 !! last depth level before CCD476 477 !!----------------------------------------------------------------------478 !! blank nutrient/flux inventories479 !!----------------------------------------------------------------------480 !!481 fflx_n(:,:) = 0.0 !! nitrogen flux total482 fflx_si(:,:) = 0.0 !! silicon flux total483 fflx_fe(:,:) = 0.0 !! iron flux total484 fifd_n(:,:) = 0.0 !! nitrogen fast detritus production485 fifd_si(:,:) = 0.0 !! silicon fast detritus production486 fifd_fe(:,:) = 0.0 !! iron fast detritus production487 fofd_n(:,:) = 0.0 !! nitrogen fast detritus remineralisation488 fofd_si(:,:) = 0.0 !! silicon fast detritus remineralisation489 fofd_fe(:,:) = 0.0 !! iron fast detritus remineralisation490 fregenfastc(:,:) = 0.0 !! integrated C regeneration (fast detritus) 491 # endif 492 !! 493 fccd(:,:) = 0.0 !! last depth level before CCD 494 495 !!---------------------------------------------------------------------- 496 !! blank nutrient/flux inventories 497 !!---------------------------------------------------------------------- 498 !! 499 fflx_n(:,:) = 0.0 !! nitrogen flux total 500 fflx_si(:,:) = 0.0 !! silicon flux total 501 fflx_fe(:,:) = 0.0 !! iron flux total 502 fifd_n(:,:) = 0.0 !! nitrogen fast detritus production 503 fifd_si(:,:) = 0.0 !! silicon fast detritus production 504 fifd_fe(:,:) = 0.0 !! iron fast detritus production 505 fofd_n(:,:) = 0.0 !! nitrogen fast detritus remineralisation 506 fofd_si(:,:) = 0.0 !! silicon fast detritus remineralisation 507 fofd_fe(:,:) = 0.0 !! iron fast detritus remineralisation 490 508 # if defined key_roam 491 fflx_c(:,:) = 0.0 !! carbon flux total 492 fflx_a(:,:) = 0.0 !! alkalinity flux total 493 fflx_o2(:,:) = 0.0 !! oxygen flux total 494 ftot_c(:,:) = 0.0 !! carbon inventory 495 ftot_a(:,:) = 0.0 !! alkalinity inventory 496 ftot_o2(:,:) = 0.0 !! oxygen inventory 497 fifd_c(:,:) = 0.0 !! carbon fast detritus production 498 fifd_a(:,:) = 0.0 !! alkalinity fast detritus production 499 fifd_o2(:,:) = 0.0 !! oxygen fast detritus production 500 fofd_c(:,:) = 0.0 !! carbon fast detritus remineralisation 501 fofd_a(:,:) = 0.0 !! alkalinity fast detritus remineralisation 502 fofd_o2(:,:) = 0.0 !! oxygen fast detritus remineralisation 503 !! 504 fnit_prod(:,:) = 0.0 !! (organic) nitrogen production 505 fnit_cons(:,:) = 0.0 !! (organic) nitrogen consumption 506 fsil_prod(:,:) = 0.0 !! (inorganic) silicon production 507 fsil_cons(:,:) = 0.0 !! (inorganic) silicon consumption 508 fcar_prod(:,:) = 0.0 !! (organic) carbon production 509 fcar_cons(:,:) = 0.0 !! (organic) carbon consumption 510 !! 511 foxy_prod(:,:) = 0.0 !! oxygen production 512 foxy_cons(:,:) = 0.0 !! oxygen consumption 513 foxy_anox(:,:) = 0.0 !! unrealised oxygen consumption 514 !! 515 # endif 516 ftot_n(:,:) = 0.0 !! N inventory 517 ftot_si(:,:) = 0.0 !! Si inventory 518 ftot_fe(:,:) = 0.0 !! Fe inventory 519 ftot_pn(:,:) = 0.0 !! integrated non-diatom phytoplankton 520 ftot_pd(:,:) = 0.0 !! integrated diatom phytoplankton 521 ftot_zmi(:,:) = 0.0 !! integrated microzooplankton 522 ftot_zme(:,:) = 0.0 !! integrated mesozooplankton 523 ftot_det(:,:) = 0.0 !! integrated slow detritus, nitrogen 524 ftot_dtc(:,:) = 0.0 !! integrated slow detritus, carbon 525 !! 526 fzmi_i(:,:) = 0.0 !! material grazed by microzooplankton 527 fzmi_o(:,:) = 0.0 !! ... sum of fate of this material 528 fzme_i(:,:) = 0.0 !! material grazed by mesozooplankton 529 fzme_o(:,:) = 0.0 !! ... sum of fate of this material 530 !! 531 f_sbenin_n(:,:) = 0.0 !! slow detritus N -> benthic pool 532 f_sbenin_fe(:,:) = 0.0 !! slow detritus Fe -> benthic pool 533 f_sbenin_c(:,:) = 0.0 !! slow detritus C -> benthic pool 534 f_fbenin_n(:,:) = 0.0 !! fast detritus N -> benthic pool 535 f_fbenin_fe(:,:) = 0.0 !! fast detritus Fe -> benthic pool 536 f_fbenin_si(:,:) = 0.0 !! fast detritus Si -> benthic pool 537 f_fbenin_c(:,:) = 0.0 !! fast detritus C -> benthic pool 538 f_fbenin_ca(:,:) = 0.0 !! fast detritus Ca -> benthic pool 539 !! 540 f_benout_n(:,:) = 0.0 !! benthic N pool -> dissolved 541 f_benout_fe(:,:) = 0.0 !! benthic Fe pool -> dissolved 542 f_benout_si(:,:) = 0.0 !! benthic Si pool -> dissolved 543 f_benout_c(:,:) = 0.0 !! benthic C pool -> dissolved 544 f_benout_ca(:,:) = 0.0 !! benthic Ca pool -> dissolved 545 !! 546 f_benout_lyso_ca(:,:) = 0.0 !! benthic Ca pool -> dissolved (when it shouldn't!) 547 !! 548 f_runoff(:,:) = 0.0 !! riverine runoff 549 f_riv_n(:,:) = 0.0 !! riverine N input 550 f_riv_si(:,:) = 0.0 !! riverine Si input 551 f_riv_c(:,:) = 0.0 !! riverine C input 552 f_riv_alk(:,:) = 0.0 !! riverine alk input 553 !! 554 !! Jpalm -- 06-03-2017 -- Forgotten var to init 555 f_omarg(:,:) = 0.0 !! 556 f_omcal(:,:) = 0.0 557 xFree(:,:) = 0.0 !! state variables for iron-ligand system 558 fcomm_resp(:,:) = 0.0 559 fprn_ml(:,:) = 0.0 !! mixed layer PP diagnostics 560 fprd_ml(:,:) = 0.0 !! mixed layer PP diagnostics 561 562 !!---------------------------------------------------------------------- 563 !! allocate and initiate 2D diag 564 !!---------------------------------------------------------------------- 565 !! 566 IF ( lk_iomput .AND. .NOT. ln_diatrc ) THEN 567 !! Juju :: add kt condition !! 568 if ( kt == nittrc000 ) CALL trc_nam_iom_medusa !! initialise iom_use test 509 fflx_c(:,:) = 0.0 !! carbon flux total 510 fflx_a(:,:) = 0.0 !! alkalinity flux total 511 fflx_o2(:,:) = 0.0 !! oxygen flux total 512 ftot_c(:,:) = 0.0 !! carbon inventory 513 ftot_a(:,:) = 0.0 !! alkalinity inventory 514 ftot_o2(:,:) = 0.0 !! oxygen inventory 515 fifd_c(:,:) = 0.0 !! carbon fast detritus production 516 fifd_a(:,:) = 0.0 !! alkalinity fast detritus production 517 fifd_o2(:,:) = 0.0 !! oxygen fast detritus production 518 fofd_c(:,:) = 0.0 !! carbon fast detritus remineralisation 519 fofd_a(:,:) = 0.0 !! alkalinity fast detritus remineralisation 520 fofd_o2(:,:) = 0.0 !! oxygen fast detritus remineralisation 521 !! 522 fnit_prod(:,:) = 0.0 !! (organic) nitrogen production 523 fnit_cons(:,:) = 0.0 !! (organic) nitrogen consumption 524 fsil_prod(:,:) = 0.0 !! (inorganic) silicon production 525 fsil_cons(:,:) = 0.0 !! (inorganic) silicon consumption 526 fcar_prod(:,:) = 0.0 !! (organic) carbon production 527 fcar_cons(:,:) = 0.0 !! (organic) carbon consumption 528 !! 529 foxy_prod(:,:) = 0.0 !! oxygen production 530 foxy_cons(:,:) = 0.0 !! oxygen consumption 531 foxy_anox(:,:) = 0.0 !! unrealised oxygen consumption 532 !! 533 # endif 534 ftot_n(:,:) = 0.0 !! N inventory 535 ftot_si(:,:) = 0.0 !! Si inventory 536 ftot_fe(:,:) = 0.0 !! Fe inventory 537 ftot_pn(:,:) = 0.0 !! integrated non-diatom phytoplankton 538 ftot_pd(:,:) = 0.0 !! integrated diatom phytoplankton 539 ftot_zmi(:,:) = 0.0 !! integrated microzooplankton 540 ftot_zme(:,:) = 0.0 !! integrated mesozooplankton 541 ftot_det(:,:) = 0.0 !! integrated slow detritus, nitrogen 542 ftot_dtc(:,:) = 0.0 !! integrated slow detritus, carbon 543 !! 544 fzmi_i(:,:) = 0.0 !! material grazed by microzooplankton 545 fzmi_o(:,:) = 0.0 !! ... sum of fate of this material 546 fzme_i(:,:) = 0.0 !! material grazed by mesozooplankton 547 fzme_o(:,:) = 0.0 !! ... sum of fate of this material 548 !! 549 f_sbenin_n(:,:) = 0.0 !! slow detritus N -> benthic pool 550 f_sbenin_fe(:,:) = 0.0 !! slow detritus Fe -> benthic pool 551 f_sbenin_c(:,:) = 0.0 !! slow detritus C -> benthic pool 552 f_fbenin_n(:,:) = 0.0 !! fast detritus N -> benthic pool 553 f_fbenin_fe(:,:) = 0.0 !! fast detritus Fe -> benthic pool 554 f_fbenin_si(:,:) = 0.0 !! fast detritus Si -> benthic pool 555 f_fbenin_c(:,:) = 0.0 !! fast detritus C -> benthic pool 556 f_fbenin_ca(:,:) = 0.0 !! fast detritus Ca -> benthic pool 557 !! 558 f_benout_n(:,:) = 0.0 !! benthic N pool -> dissolved 559 f_benout_fe(:,:) = 0.0 !! benthic Fe pool -> dissolved 560 f_benout_si(:,:) = 0.0 !! benthic Si pool -> dissolved 561 f_benout_c(:,:) = 0.0 !! benthic C pool -> dissolved 562 f_benout_ca(:,:) = 0.0 !! benthic Ca pool -> dissolved 563 !! 564 f_benout_lyso_ca(:,:) = 0.0 !! benthic Ca pool -> dissolved (when it shouldn't!) 565 !! 566 f_runoff(:,:) = 0.0 !! riverine runoff 567 f_riv_n(:,:) = 0.0 !! riverine N input 568 f_riv_si(:,:) = 0.0 !! riverine Si input 569 f_riv_c(:,:) = 0.0 !! riverine C input 570 f_riv_alk(:,:) = 0.0 !! riverine alk input 571 !! 572 !! Jpalm -- 06-03-2017 -- Forgotten var to init 573 f_omarg(:,:) = 0.0 !! 574 f_omcal(:,:) = 0.0 575 xFree(:,:) = 0.0 !! state variables for iron-ligand system 576 fcomm_resp(:,:) = 0.0 577 fprn_ml(:,:) = 0.0 !! mixed layer PP diagnostics 578 fprd_ml(:,:) = 0.0 !! mixed layer PP diagnostics 579 580 !! 581 !! allocate and initiate 2D diag 582 !! ----------------------------- 583 !! Juju :: add kt condition !! 584 IF ( lk_iomput .AND. .NOT. ln_diatrc ) THEN 585 !! 586 if ( kt == nittrc000 ) CALL trc_nam_iom_medusa !! initialise iom_use test 587 !! 588 CALL wrk_alloc( jpi, jpj, zw2d ) 589 zw2d(:,:) = 0.0 !! 590 IF ( med_diag%PRN%dgsave ) THEN 591 CALL wrk_alloc( jpi, jpj, fprn2d ) 592 fprn2d(:,:) = 0.0 !! 593 ENDIF 594 IF ( med_diag%MPN%dgsave ) THEN 595 CALL wrk_alloc( jpi, jpj, fdpn2d ) 596 fdpn2d(:,:) = 0.0 !! 597 ENDIF 598 IF ( med_diag%PRD%dgsave ) THEN 599 CALL wrk_alloc( jpi, jpj, fprd2d ) 600 fprd2d(:,:) = 0.0 !! 601 ENDIF 602 IF( med_diag%MPD%dgsave ) THEN 603 CALL wrk_alloc( jpi, jpj, fdpd2d ) 604 fdpd2d(:,:) = 0.0 !! 605 ENDIF 606 IF( med_diag%OPAL%dgsave ) THEN 607 CALL wrk_alloc( jpi, jpj, fprds2d ) 608 fprds2d(:,:) = 0.0 !! 609 ENDIF 610 IF( med_diag%OPALDISS%dgsave ) THEN 611 CALL wrk_alloc( jpi, jpj, fsdiss2d ) 612 fsdiss2d(:,:) = 0.0 !! 613 ENDIF 614 IF( med_diag%GMIPn%dgsave ) THEN 615 CALL wrk_alloc( jpi, jpj, fgmipn2d ) 616 fgmipn2d(:,:) = 0.0 !! 617 ENDIF 618 IF( med_diag%GMID%dgsave ) THEN 619 CALL wrk_alloc( jpi, jpj, fgmid2d ) 620 fgmid2d(:,:) = 0.0 !! 621 ENDIF 622 IF( med_diag%MZMI%dgsave ) THEN 623 CALL wrk_alloc( jpi, jpj, fdzmi2d ) 624 fdzmi2d(:,:) = 0.0 !! 625 ENDIF 626 IF( med_diag%GMEPN%dgsave ) THEN 627 CALL wrk_alloc( jpi, jpj, fgmepn2d ) 628 fgmepn2d(:,:) = 0.0 !! 629 ENDIF 630 IF( med_diag%GMEPD%dgsave ) THEN 631 CALL wrk_alloc( jpi, jpj, fgmepd2d ) 632 fgmepd2d(:,:) = 0.0 !! 633 ENDIF 634 IF( med_diag%GMEZMI%dgsave ) THEN 635 CALL wrk_alloc( jpi, jpj, fgmezmi2d ) 636 fgmezmi2d(:,:) = 0.0 !! 637 ENDIF 638 IF( med_diag%GMED%dgsave ) THEN 639 CALL wrk_alloc( jpi, jpj, fgmed2d ) 640 fgmed2d(:,:) = 0.0 !! 641 ENDIF 642 IF( med_diag%MZME%dgsave ) THEN 643 CALL wrk_alloc( jpi, jpj, fdzme2d ) 644 fdzme2d(:,:) = 0.0 !! 645 ENDIF 646 IF( med_diag%DETN%dgsave ) THEN 647 CALL wrk_alloc( jpi, jpj, fslown2d ) 648 fslown2d(:,:) = 0.0 !! 649 ENDIF 650 IF( med_diag%MDET%dgsave ) THEN 651 CALL wrk_alloc( jpi, jpj, fdd2d ) 652 fdd2d(:,:) = 0.0 !! 653 ENDIF 654 IF( med_diag%AEOLIAN%dgsave ) THEN 655 CALL wrk_alloc( jpi, jpj, ffetop2d ) 656 ffetop2d(:,:) = 0.0 !! 657 ENDIF 658 IF( med_diag%BENTHIC%dgsave ) THEN 659 CALL wrk_alloc( jpi, jpj, ffebot2d ) 660 ffebot2d(:,:) = 0.0 !! 661 ENDIF 662 IF( med_diag%SCAVENGE%dgsave ) THEN 663 CALL wrk_alloc( jpi, jpj, ffescav2d ) 664 ffescav2d(:,:) = 0.0 !! 665 ENDIF 666 IF( med_diag%PN_JLIM%dgsave ) THEN 667 CALL wrk_alloc( jpi, jpj, fjln2d ) 668 fjln2d(:,:) = 0.0 !! 669 ENDIF 670 IF( med_diag%PN_NLIM%dgsave ) THEN 671 CALL wrk_alloc( jpi, jpj, fnln2d ) 672 fnln2d(:,:) = 0.0 !! 673 ENDIF 674 IF( med_diag%PN_FELIM%dgsave ) THEN 675 CALL wrk_alloc( jpi, jpj, ffln2d ) 676 ffln2d(:,:) = 0.0 !! 677 ENDIF 678 IF( med_diag%PD_JLIM%dgsave ) THEN 679 CALL wrk_alloc( jpi, jpj, fjld2d ) 680 fjld2d(:,:) = 0.0 !! 681 ENDIF 682 IF( med_diag%PD_NLIM%dgsave ) THEN 683 CALL wrk_alloc( jpi, jpj, fnld2d ) 684 fnld2d(:,:) = 0.0 !! 685 ENDIF 686 IF( med_diag%PD_FELIM%dgsave ) THEN 687 CALL wrk_alloc( jpi, jpj, ffld2d ) 688 ffld2d(:,:) = 0.0 !! 689 ENDIF 690 IF( med_diag%PD_SILIM%dgsave ) THEN 691 CALL wrk_alloc( jpi, jpj, fsld2d2 ) 692 fsld2d2(:,:) = 0.0 !! 693 ENDIF 694 IF( med_diag%PDSILIM2%dgsave ) THEN 695 CALL wrk_alloc( jpi, jpj, fsld2d ) 696 fsld2d(:,:) = 0.0 !! 697 ENDIF 698 !! 699 !! skip SDT_XXXX diagnostics here 700 !! 701 IF( med_diag%TOTREG_N%dgsave ) THEN 702 CALL wrk_alloc( jpi, jpj, fregen2d ) 703 fregen2d(:,:) = 0.0 !! 704 ENDIF 705 IF( med_diag%TOTRG_SI%dgsave ) THEN 706 CALL wrk_alloc( jpi, jpj, fregensi2d ) 707 fregensi2d(:,:) = 0.0 !! 708 ENDIF 709 !! 710 !! skip REG_XXXX diagnostics here 711 !! 712 IF( med_diag%FASTN%dgsave ) THEN 713 CALL wrk_alloc( jpi, jpj, ftempn2d ) 714 ftempn2d(:,:) = 0.0 !! 715 ENDIF 716 IF( med_diag%FASTSI%dgsave ) THEN 717 CALL wrk_alloc( jpi, jpj, ftempsi2d ) 718 ftempsi2d(:,:) = 0.0 !! 719 ENDIF 720 IF( med_diag%FASTFE%dgsave ) THEN 721 CALL wrk_alloc( jpi, jpj, ftempfe2d ) 722 ftempfe2d(:,:) = 0.0 !! 723 ENDIF 724 IF( med_diag%FASTC%dgsave ) THEN 725 CALL wrk_alloc( jpi, jpj, ftempc2d ) 726 ftempc2d(:,:) = 0.0 !! 727 ENDIF 728 IF( med_diag%FASTCA%dgsave ) THEN 729 CALL wrk_alloc( jpi, jpj, ftempca2d ) 730 ftempca2d(:,:) = 0.0 !! 731 ENDIF 732 !! 733 !! skip FDT_XXXX, RG_XXXXF, FDS_XXXX, RGS_XXXXF diagnostics here 734 !! 735 IF( med_diag%REMINN%dgsave ) THEN 736 CALL wrk_alloc( jpi, jpj, freminn2d ) 737 freminn2d(:,:) = 0.0 !! 738 ENDIF 739 IF( med_diag%REMINSI%dgsave ) THEN 740 CALL wrk_alloc( jpi, jpj, freminsi2d ) 741 freminsi2d(:,:) = 0.0 !! 742 ENDIF 743 IF( med_diag%REMINFE%dgsave ) THEN 744 CALL wrk_alloc( jpi, jpj, freminfe2d ) 745 freminfe2d(:,:) = 0.0 !! 746 ENDIF 747 IF( med_diag%REMINC%dgsave ) THEN 748 CALL wrk_alloc( jpi, jpj, freminc2d ) 749 freminc2d(:,:) = 0.0 !! 750 ENDIF 751 IF( med_diag%REMINCA%dgsave ) THEN 752 CALL wrk_alloc( jpi, jpj, freminca2d ) 753 freminca2d(:,:) = 0.0 !! 754 ENDIF 755 # if defined key_roam 756 !! 757 !! skip SEAFLRXX, MED_XXXX, INTFLX_XX, INT_XX, ML_XXX, OCAL_XXX, FE_XXXX, MED_XZE, WIND diagnostics here 758 !! 759 IF( med_diag%RR_0100%dgsave ) THEN 760 CALL wrk_alloc( jpi, jpj, ffastca2d ) 761 ffastca2d(:,:) = 0.0 !! 762 ENDIF 763 764 IF( med_diag%ATM_PCO2%dgsave ) THEN 765 CALL wrk_alloc( jpi, jpj, f_pco2a2d ) 766 f_pco2a2d(:,:) = 0.0 !! 767 ENDIF 768 !! 769 !! skip OCN_PH diagnostic here 770 !! 771 IF( med_diag%OCN_PCO2%dgsave ) THEN 772 CALL wrk_alloc( jpi, jpj, f_pco2w2d ) 773 f_pco2w2d(:,:) = 0.0 !! 774 ENDIF 775 !! 776 !! skip OCNH2CO3, OCN_HCO3, OCN_CO3 diagnostics here 777 !! 778 IF( med_diag%CO2FLUX%dgsave ) THEN 779 CALL wrk_alloc( jpi, jpj, f_co2flux2d ) 780 f_co2flux2d(:,:) = 0.0 !! 781 ENDIF 782 !! 783 !! skip OM_XXX diagnostics here 784 !! 785 IF( med_diag%TCO2%dgsave ) THEN 786 CALL wrk_alloc( jpi, jpj, f_TDIC2d ) 787 f_TDIC2d(:,:) = 0.0 !! 788 ENDIF 789 IF( med_diag%TALK%dgsave ) THEN 790 CALL wrk_alloc( jpi, jpj, f_TALK2d ) 791 f_TALK2d(:,:) = 0.0 !! 792 ENDIF 793 IF( med_diag%KW660%dgsave ) THEN 794 CALL wrk_alloc( jpi, jpj, f_kw6602d ) 795 f_kw6602d(:,:) = 0.0 !! 796 ENDIF 797 IF( med_diag%ATM_PP0%dgsave ) THEN 798 CALL wrk_alloc( jpi, jpj, f_pp02d ) 799 f_pp02d(:,:) = 0.0 !! 800 ENDIF 801 IF( med_diag%O2FLUX%dgsave ) THEN 802 CALL wrk_alloc( jpi, jpj, f_o2flux2d ) 803 f_o2flux2d(:,:) = 0.0 !! 804 ENDIF 805 IF( med_diag%O2SAT%dgsave ) THEN 806 CALL wrk_alloc( jpi, jpj, f_o2sat2d ) 807 f_o2sat2d(:,:) = 0.0 !! 808 ENDIF 809 !! 810 !! skip XXX_CCD diagnostics here 811 !! 812 IF( med_diag%SFR_OCAL%dgsave ) THEN 813 CALL wrk_alloc( jpi, jpj, sfr_ocal2d ) 814 sfr_ocal2d(:,:) = 0.0 !! 815 ENDIF 816 IF( med_diag%SFR_OARG%dgsave ) THEN 817 CALL wrk_alloc( jpi, jpj, sfr_oarg2d ) 818 sfr_oarg2d(:,:) = 0.0 !! 819 ENDIF 820 !! 821 !! skip XX_PROD, XX_CONS, O2_ANOX, RR_XXXX diagnostics here 822 !! 823 IF( med_diag%IBEN_N%dgsave ) THEN 824 CALL wrk_alloc( jpi, jpj, iben_n2d ) 825 iben_n2d(:,:) = 0.0 !! 826 ENDIF 827 IF( med_diag%IBEN_FE%dgsave ) THEN 828 CALL wrk_alloc( jpi, jpj, iben_fe2d ) 829 iben_fe2d(:,:) = 0.0 !! 830 ENDIF 831 IF( med_diag%IBEN_C%dgsave ) THEN 832 CALL wrk_alloc( jpi, jpj, iben_c2d ) 833 iben_c2d(:,:) = 0.0 !! 834 ENDIF 835 IF( med_diag%IBEN_SI%dgsave ) THEN 836 CALL wrk_alloc( jpi, jpj, iben_si2d ) 837 iben_si2d(:,:) = 0.0 !! 838 ENDIF 839 IF( med_diag%IBEN_CA%dgsave ) THEN 840 CALL wrk_alloc( jpi, jpj, iben_ca2d ) 841 iben_ca2d(:,:) = 0.0 !! 842 ENDIF 843 IF( med_diag%OBEN_N%dgsave ) THEN 844 CALL wrk_alloc( jpi, jpj, oben_n2d ) 845 oben_n2d(:,:) = 0.0 !! 846 ENDIF 847 IF( med_diag%OBEN_FE%dgsave ) THEN 848 CALL wrk_alloc( jpi, jpj, oben_fe2d ) 849 oben_fe2d(:,:) = 0.0 !! 850 ENDIF 851 IF( med_diag%OBEN_C%dgsave ) THEN 852 CALL wrk_alloc( jpi, jpj, oben_c2d ) 853 oben_c2d(:,:) = 0.0 !! 854 ENDIF 855 IF( med_diag%OBEN_SI%dgsave ) THEN 856 CALL wrk_alloc( jpi, jpj, oben_si2d ) 857 oben_si2d(:,:) = 0.0 !! 858 ENDIF 859 IF( med_diag%OBEN_CA%dgsave ) THEN 860 CALL wrk_alloc( jpi, jpj, oben_ca2d ) 861 oben_ca2d(:,:) = 0.0 !! 862 ENDIF 863 !! 864 !! skip BEN_XX diagnostics here 865 !! 866 IF( med_diag%RIV_N%dgsave ) THEN 867 CALL wrk_alloc( jpi, jpj, rivn2d ) 868 rivn2d(:,:) = 0.0 !! 869 ENDIF 870 IF( med_diag%RIV_SI%dgsave ) THEN 871 CALL wrk_alloc( jpi, jpj, rivsi2d ) 872 rivsi2d(:,:) = 0.0 !! 873 ENDIF 874 IF( med_diag%RIV_C%dgsave ) THEN 875 CALL wrk_alloc( jpi, jpj, rivc2d ) 876 rivc2d(:,:) = 0.0 !! 877 ENDIF 878 IF( med_diag%RIV_ALK%dgsave ) THEN 879 CALL wrk_alloc( jpi, jpj, rivalk2d ) 880 rivalk2d(:,:) = 0.0 !! 881 ENDIF 882 IF( med_diag%DETC%dgsave ) THEN 883 CALL wrk_alloc( jpi, jpj, fslowc2d ) 884 fslowc2d(:,:) = 0.0 !! 885 ENDIF 886 !! 887 !! skip SDC_XXXX, INVTXXX diagnostics here 888 !! 889 IF( med_diag%LYSO_CA%dgsave ) THEN 890 CALL wrk_alloc( jpi, jpj, lyso_ca2d ) 891 lyso_ca2d(:,:) = 0.0 !! 892 ENDIF 893 !! 894 !! skip COM_RESP diagnostic here 895 !! 896 IF( med_diag%PN_LLOSS%dgsave ) THEN 897 CALL wrk_alloc( jpi, jpj, fdpn22d ) 898 fdpn22d(:,:) = 0.0 !! 899 ENDIF 900 IF( med_diag%PD_LLOSS%dgsave ) THEN 901 CALL wrk_alloc( jpi, jpj, fdpd22d ) 902 fdpd22d(:,:) = 0.0 !! 903 ENDIF 904 IF( med_diag%ZI_LLOSS%dgsave ) THEN 905 CALL wrk_alloc( jpi, jpj, fdzmi22d ) 906 fdzmi22d(:,:) = 0.0 !! 907 ENDIF 908 IF( med_diag%ZE_LLOSS%dgsave ) THEN 909 CALL wrk_alloc( jpi, jpj, fdzme22d ) 910 fdzme22d(:,:) = 0.0 !! 911 ENDIF 912 IF( med_diag%ZI_MES_N%dgsave ) THEN 913 CALL wrk_alloc( jpi, jpj, zimesn2d ) 914 zimesn2d(:,:) = 0.0 !! 915 ENDIF 916 IF( med_diag%ZI_MES_D%dgsave ) THEN 917 CALL wrk_alloc( jpi, jpj, zimesd2d ) 918 zimesd2d(:,:) = 0.0 !! 919 ENDIF 920 IF( med_diag%ZI_MES_C%dgsave ) THEN 921 CALL wrk_alloc( jpi, jpj, zimesc2d ) 922 zimesc2d(:,:) = 0.0 !! 923 ENDIF 924 IF( med_diag%ZI_MESDC%dgsave ) THEN 925 CALL wrk_alloc( jpi, jpj, zimesdc2d ) 926 zimesdc2d(:,:) = 0.0 !! 927 ENDIF 928 IF( med_diag%ZI_EXCR%dgsave ) THEN 929 CALL wrk_alloc( jpi, jpj, ziexcr2d ) 930 ziexcr2d(:,:) = 0.0 !! 931 ENDIF 932 IF( med_diag%ZI_RESP%dgsave ) THEN 933 CALL wrk_alloc( jpi, jpj, ziresp2d ) 934 ziresp2d(:,:) = 0.0 !! 935 ENDIF 936 IF( med_diag%ZI_GROW%dgsave ) THEN 937 CALL wrk_alloc( jpi, jpj, zigrow2d ) 938 zigrow2d(:,:) = 0.0 !! 939 ENDIF 940 IF( med_diag%ZE_MES_N%dgsave ) THEN 941 CALL wrk_alloc( jpi, jpj, zemesn2d ) 942 zemesn2d(:,:) = 0.0 !! 943 ENDIF 944 IF( med_diag%ZE_MES_D%dgsave ) THEN 945 CALL wrk_alloc( jpi, jpj, zemesd2d ) 946 zemesd2d(:,:) = 0.0 !! 947 ENDIF 948 IF( med_diag%ZE_MES_C%dgsave ) THEN 949 CALL wrk_alloc( jpi, jpj, zemesc2d ) 950 zemesc2d(:,:) = 0.0 !! 951 ENDIF 952 IF( med_diag%ZE_MESDC%dgsave ) THEN 953 CALL wrk_alloc( jpi, jpj, zemesdc2d ) 954 zemesdc2d(:,:) = 0.0 !! 955 ENDIF 956 IF( med_diag%ZE_EXCR%dgsave ) THEN 957 CALL wrk_alloc( jpi, jpj, zeexcr2d ) 958 zeexcr2d(:,:) = 0.0 !! 959 ENDIF 960 IF( med_diag%ZE_RESP%dgsave ) THEN 961 CALL wrk_alloc( jpi, jpj, zeresp2d ) 962 zeresp2d(:,:) = 0.0 !! 963 ENDIF 964 IF( med_diag%ZE_GROW%dgsave ) THEN 965 CALL wrk_alloc( jpi, jpj, zegrow2d ) 966 zegrow2d(:,:) = 0.0 !! 967 ENDIF 968 IF( med_diag%MDETC%dgsave ) THEN 969 CALL wrk_alloc( jpi, jpj, mdetc2d ) 970 mdetc2d(:,:) = 0.0 !! 971 ENDIF 972 IF( med_diag%GMIDC%dgsave ) THEN 973 CALL wrk_alloc( jpi, jpj, gmidc2d ) 974 gmidc2d(:,:) = 0.0 !! 975 ENDIF 976 IF( med_diag%GMEDC%dgsave ) THEN 977 CALL wrk_alloc( jpi, jpj, gmedc2d ) 978 gmedc2d(:,:) = 0.0 !! 979 ENDIF 980 !! 981 !! skip INT_XXX diagnostics here 982 !! 983 IF (jdms .eq. 1) THEN 984 IF( med_diag%DMS_SURF%dgsave ) THEN 985 CALL wrk_alloc( jpi, jpj, dms_surf2d ) 986 dms_surf2d(:,:) = 0.0 !! 987 ENDIF 988 IF( med_diag%DMS_ANDR%dgsave ) THEN 989 CALL wrk_alloc( jpi, jpj, dms_andr2d ) 990 dms_andr2d(:,:) = 0.0 !! 991 ENDIF 992 IF( med_diag%DMS_SIMO%dgsave ) THEN 993 CALL wrk_alloc( jpi, jpj, dms_simo2d ) 994 dms_simo2d(:,:) = 0.0 !! 995 ENDIF 996 IF( med_diag%DMS_ARAN%dgsave ) THEN 997 CALL wrk_alloc( jpi, jpj, dms_aran2d ) 998 dms_aran2d(:,:) = 0.0 !! 999 ENDIF 1000 IF( med_diag%DMS_HALL%dgsave ) THEN 1001 CALL wrk_alloc( jpi, jpj, dms_hall2d ) 1002 dms_hall2d(:,:) = 0.0 !! 1003 ENDIF 1004 ENDIF 1005 !! 1006 !! AXY (24/11/16): extra MOCSY diagnostics, 2D 1007 IF( med_diag%ATM_XCO2%dgsave ) THEN 1008 CALL wrk_alloc( jpi, jpj, f_xco2a_2d ) 1009 f_xco2a_2d(:,:) = 0.0 !! 1010 ENDIF 1011 IF( med_diag%OCN_FCO2%dgsave ) THEN 1012 CALL wrk_alloc( jpi, jpj, f_fco2w_2d ) 1013 f_fco2w_2d(:,:) = 0.0 !! 1014 ENDIF 1015 IF( med_diag%ATM_FCO2%dgsave ) THEN 1016 CALL wrk_alloc( jpi, jpj, f_fco2a_2d ) 1017 f_fco2a_2d(:,:) = 0.0 !! 1018 ENDIF 1019 IF( med_diag%OCN_RHOSW%dgsave ) THEN 1020 CALL wrk_alloc( jpi, jpj, f_ocnrhosw_2d ) 1021 f_ocnrhosw_2d(:,:) = 0.0 !! 1022 ENDIF 1023 IF( med_diag%OCN_SCHCO2%dgsave ) THEN 1024 CALL wrk_alloc( jpi, jpj, f_ocnschco2_2d ) 1025 f_ocnschco2_2d(:,:) = 0.0 !! 1026 ENDIF 1027 IF( med_diag%OCN_KWCO2%dgsave ) THEN 1028 CALL wrk_alloc( jpi, jpj, f_ocnkwco2_2d ) 1029 f_ocnkwco2_2d(:,:) = 0.0 !! 1030 ENDIF 1031 IF( med_diag%OCN_K0%dgsave ) THEN 1032 CALL wrk_alloc( jpi, jpj, f_ocnk0_2d ) 1033 f_ocnk0_2d(:,:) = 0.0 !! 1034 ENDIF 1035 IF( med_diag%CO2STARAIR%dgsave ) THEN 1036 CALL wrk_alloc( jpi, jpj, f_co2starair_2d ) 1037 f_co2starair_2d(:,:) = 0.0 !! 1038 ENDIF 1039 IF( med_diag%OCN_DPCO2%dgsave ) THEN 1040 CALL wrk_alloc( jpi, jpj, f_ocndpco2_2d ) 1041 f_ocndpco2_2d(:,:) = 0.0 !! 1042 ENDIF 1043 # endif 1044 IF( med_diag%TPP3%dgsave ) THEN 1045 CALL wrk_alloc( jpi, jpj, jpk, tpp3d ) 1046 tpp3d(:,:,:) = 0.0 !! 1047 ENDIF 1048 IF( med_diag%DETFLUX3%dgsave ) THEN 1049 CALL wrk_alloc( jpi, jpj, jpk, detflux3d ) 1050 detflux3d(:,:,:) = 0.0 !! 1051 ENDIF 1052 IF( med_diag%REMIN3N%dgsave ) THEN 1053 CALL wrk_alloc( jpi, jpj, jpk, remin3dn ) 1054 remin3dn(:,:,:) = 0.0 !! 1055 ENDIF 1056 !! 1057 !! AXY (10/11/16): CMIP6 diagnostics, 2D 1058 !! JPALM -- 17-11-16 -- put fgco2 alloc out of diag request 1059 !! needed for coupling/passed through restart 1060 !! IF( med_diag%FGCO2%dgsave ) THEN 1061 CALL wrk_alloc( jpi, jpj, fgco2 ) 1062 fgco2(:,:) = 0.0 !! 1063 !! ENDIF 1064 IF( med_diag%INTDISSIC%dgsave ) THEN 1065 CALL wrk_alloc( jpi, jpj, intdissic ) 1066 intdissic(:,:) = 0.0 !! 1067 ENDIF 1068 IF( med_diag%INTDISSIN%dgsave ) THEN 1069 CALL wrk_alloc( jpi, jpj, intdissin ) 1070 intdissin(:,:) = 0.0 !! 1071 ENDIF 1072 IF( med_diag%INTDISSISI%dgsave ) THEN 1073 CALL wrk_alloc( jpi, jpj, intdissisi ) 1074 intdissisi(:,:) = 0.0 !! 1075 ENDIF 1076 IF( med_diag%INTTALK%dgsave ) THEN 1077 CALL wrk_alloc( jpi, jpj, inttalk ) 1078 inttalk(:,:) = 0.0 !! 1079 ENDIF 1080 IF( med_diag%O2min%dgsave ) THEN 1081 CALL wrk_alloc( jpi, jpj, o2min ) 1082 o2min(:,:) = 1.e3 !! set to high value as we're looking for min(o2) 1083 ENDIF 1084 IF( med_diag%ZO2min%dgsave ) THEN 1085 CALL wrk_alloc( jpi, jpj, zo2min ) 1086 zo2min(:,:) = 0.0 !! 1087 ENDIF 1088 IF( med_diag%FBDDTALK%dgsave ) THEN 1089 CALL wrk_alloc( jpi, jpj, fbddtalk ) 1090 fbddtalk(:,:) = 0.0 !! 1091 ENDIF 1092 IF( med_diag%FBDDTDIC%dgsave ) THEN 1093 CALL wrk_alloc( jpi, jpj, fbddtdic ) 1094 fbddtdic(:,:) = 0.0 !! 1095 ENDIF 1096 IF( med_diag%FBDDTDIFE%dgsave ) THEN 1097 CALL wrk_alloc( jpi, jpj, fbddtdife ) 1098 fbddtdife(:,:) = 0.0 !! 1099 ENDIF 1100 IF( med_diag%FBDDTDIN%dgsave ) THEN 1101 CALL wrk_alloc( jpi, jpj, fbddtdin ) 1102 fbddtdin(:,:) = 0.0 !! 1103 ENDIF 1104 IF( med_diag%FBDDTDISI%dgsave ) THEN 1105 CALL wrk_alloc( jpi, jpj, fbddtdisi ) 1106 fbddtdisi(:,:) = 0.0 !! 1107 ENDIF 1108 !! 1109 !! AXY (10/11/16): CMIP6 diagnostics, 3D 1110 IF( med_diag%TPPD3%dgsave ) THEN 1111 CALL wrk_alloc( jpi, jpj, jpk, tppd3 ) 1112 tppd3(:,:,:) = 0.0 !! 1113 ENDIF 1114 IF( med_diag%BDDTALK3%dgsave ) THEN 1115 CALL wrk_alloc( jpi, jpj, jpk, bddtalk3 ) 1116 bddtalk3(:,:,:) = 0.0 !! 1117 ENDIF 1118 IF( med_diag%BDDTDIC3%dgsave ) THEN 1119 CALL wrk_alloc( jpi, jpj, jpk, bddtdic3 ) 1120 bddtdic3(:,:,:) = 0.0 !! 1121 ENDIF 1122 IF( med_diag%BDDTDIFE3%dgsave ) THEN 1123 CALL wrk_alloc( jpi, jpj, jpk, bddtdife3 ) 1124 bddtdife3(:,:,:) = 0.0 !! 1125 ENDIF 1126 IF( med_diag%BDDTDIN3%dgsave ) THEN 1127 CALL wrk_alloc( jpi, jpj, jpk, bddtdin3 ) 1128 bddtdin3(:,:,:) = 0.0 !! 1129 ENDIF 1130 IF( med_diag%BDDTDISI3%dgsave ) THEN 1131 CALL wrk_alloc( jpi, jpj, jpk, bddtdisi3 ) 1132 bddtdisi3(:,:,:) = 0.0 !! 1133 ENDIF 1134 IF( med_diag%FD_NIT3%dgsave ) THEN 1135 CALL wrk_alloc( jpi, jpj, jpk, fd_nit3 ) 1136 fd_nit3(:,:,:) = 0.0 !! 1137 ENDIF 1138 IF( med_diag%FD_SIL3%dgsave ) THEN 1139 CALL wrk_alloc( jpi, jpj, jpk, fd_sil3 ) 1140 fd_sil3(:,:,:) = 0.0 !! 1141 ENDIF 1142 IF( med_diag%FD_CAR3%dgsave ) THEN 1143 CALL wrk_alloc( jpi, jpj, jpk, fd_car3 ) 1144 fd_car3(:,:,:) = 0.0 !! 1145 ENDIF 1146 IF( med_diag%FD_CAL3%dgsave ) THEN 1147 CALL wrk_alloc( jpi, jpj, jpk, fd_cal3 ) 1148 fd_cal3(:,:,:) = 0.0 !! 1149 ENDIF 1150 IF( med_diag%DCALC3%dgsave ) THEN 1151 CALL wrk_alloc( jpi, jpj, jpk, dcalc3 ) 1152 dcalc3(:,:,: ) = 0.0 !! 1153 ENDIF 1154 IF( med_diag%EXPC3%dgsave ) THEN 1155 CALL wrk_alloc( jpi, jpj, jpk, expc3 ) 1156 expc3(:,:,: ) = 0.0 !! 1157 ENDIF 1158 IF( med_diag%EXPN3%dgsave ) THEN 1159 CALL wrk_alloc( jpi, jpj, jpk, expn3 ) 1160 expn3(:,:,: ) = 0.0 !! 1161 ENDIF 1162 IF( med_diag%FEDISS3%dgsave ) THEN 1163 CALL wrk_alloc( jpi, jpj, jpk, fediss3 ) 1164 fediss3(:,:,: ) = 0.0 !! 1165 ENDIF 1166 IF( med_diag%FESCAV3%dgsave ) THEN 1167 CALL wrk_alloc( jpi, jpj, jpk, fescav3 ) 1168 fescav3(:,:,: ) = 0.0 !! 1169 ENDIF 1170 IF( med_diag%MIGRAZP3%dgsave ) THEN 1171 CALL wrk_alloc( jpi, jpj, jpk, migrazp3 ) 1172 migrazp3(:,:,: ) = 0.0 !! 1173 ENDIF 1174 IF( med_diag%MIGRAZD3%dgsave ) THEN 1175 CALL wrk_alloc( jpi, jpj, jpk, migrazd3 ) 1176 migrazd3(:,:,: ) = 0.0 !! 1177 ENDIF 1178 IF( med_diag%MEGRAZP3%dgsave ) THEN 1179 CALL wrk_alloc( jpi, jpj, jpk, megrazp3 ) 1180 megrazp3(:,:,: ) = 0.0 !! 1181 ENDIF 1182 IF( med_diag%MEGRAZD3%dgsave ) THEN 1183 CALL wrk_alloc( jpi, jpj, jpk, megrazd3 ) 1184 megrazd3(:,:,: ) = 0.0 !! 1185 ENDIF 1186 IF( med_diag%MEGRAZZ3%dgsave ) THEN 1187 CALL wrk_alloc( jpi, jpj, jpk, megrazz3 ) 1188 megrazz3(:,:,: ) = 0.0 !! 1189 ENDIF 1190 IF( med_diag%O2SAT3%dgsave ) THEN 1191 CALL wrk_alloc( jpi, jpj, jpk, o2sat3 ) 1192 o2sat3(:,:,: ) = 0.0 !! 1193 ENDIF 1194 IF( med_diag%PBSI3%dgsave ) THEN 1195 CALL wrk_alloc( jpi, jpj, jpk, pbsi3 ) 1196 pbsi3(:,:,: ) = 0.0 !! 1197 ENDIF 1198 IF( med_diag%PCAL3%dgsave ) THEN 1199 CALL wrk_alloc( jpi, jpj, jpk, pcal3 ) 1200 pcal3(:,:,: ) = 0.0 !! 1201 ENDIF 1202 IF( med_diag%REMOC3%dgsave ) THEN 1203 CALL wrk_alloc( jpi, jpj, jpk, remoc3 ) 1204 remoc3(:,:,: ) = 0.0 !! 1205 ENDIF 1206 IF( med_diag%PNLIMJ3%dgsave ) THEN 1207 CALL wrk_alloc( jpi, jpj, jpk, pnlimj3 ) 1208 pnlimj3(:,:,: ) = 0.0 !! 1209 ENDIF 1210 IF( med_diag%PNLIMN3%dgsave ) THEN 1211 CALL wrk_alloc( jpi, jpj, jpk, pnlimn3 ) 1212 pnlimn3(:,:,: ) = 0.0 !! 1213 ENDIF 1214 IF( med_diag%PNLIMFE3%dgsave ) THEN 1215 CALL wrk_alloc( jpi, jpj, jpk, pnlimfe3 ) 1216 pnlimfe3(:,:,: ) = 0.0 !! 1217 ENDIF 1218 IF( med_diag%PDLIMJ3%dgsave ) THEN 1219 CALL wrk_alloc( jpi, jpj, jpk, pdlimj3 ) 1220 pdlimj3(:,:,: ) = 0.0 !! 1221 ENDIF 1222 IF( med_diag%PDLIMN3%dgsave ) THEN 1223 CALL wrk_alloc( jpi, jpj, jpk, pdlimn3 ) 1224 pdlimn3(:,:,: ) = 0.0 !! 1225 ENDIF 1226 IF( med_diag%PDLIMFE3%dgsave ) THEN 1227 CALL wrk_alloc( jpi, jpj, jpk, pdlimfe3 ) 1228 pdlimfe3(:,:,: ) = 0.0 !! 1229 ENDIF 1230 IF( med_diag%PDLIMSI3%dgsave ) THEN 1231 CALL wrk_alloc( jpi, jpj, jpk, pdlimsi3 ) 1232 pdlimsi3(:,:,: ) = 0.0 !! 1233 ENDIF 1234 1235 ENDIF 1236 !! lk_iomput 569 1237 !! 570 CALL wrk_alloc( jpi, jpj, zw2d )571 zw2d(:,:) = 0.0 !!572 IF ( med_diag%PRN%dgsave ) THEN573 CALL wrk_alloc( jpi, jpj, fprn2d )574 fprn2d(:,:) = 0.0 !!575 ENDIF576 IF ( med_diag%MPN%dgsave ) THEN577 CALL wrk_alloc( jpi, jpj, fdpn2d )578 fdpn2d(:,:) = 0.0 !!579 ENDIF580 IF ( med_diag%PRD%dgsave ) THEN581 CALL wrk_alloc( jpi, jpj, fprd2d )582 fprd2d(:,:) = 0.0 !!583 ENDIF584 IF( med_diag%MPD%dgsave ) THEN585 CALL wrk_alloc( jpi, jpj, fdpd2d )586 fdpd2d(:,:) = 0.0 !!587 ENDIF588 IF( med_diag%OPAL%dgsave ) THEN589 CALL wrk_alloc( jpi, jpj, fprds2d )590 fprds2d(:,:) = 0.0 !!591 ENDIF592 IF( med_diag%OPALDISS%dgsave ) THEN593 CALL wrk_alloc( jpi, jpj, fsdiss2d )594 fsdiss2d(:,:) = 0.0 !!595 ENDIF596 IF( med_diag%GMIPn%dgsave ) THEN597 CALL wrk_alloc( jpi, jpj, fgmipn2d )598 fgmipn2d(:,:) = 0.0 !!599 ENDIF600 IF( med_diag%GMID%dgsave ) THEN601 CALL wrk_alloc( jpi, jpj, fgmid2d )602 fgmid2d(:,:) = 0.0 !!603 ENDIF604 IF( med_diag%MZMI%dgsave ) THEN605 CALL wrk_alloc( jpi, jpj, fdzmi2d )606 fdzmi2d(:,:) = 0.0 !!607 ENDIF608 IF( med_diag%GMEPN%dgsave ) THEN609 CALL wrk_alloc( jpi, jpj, fgmepn2d )610 fgmepn2d(:,:) = 0.0 !!611 ENDIF612 IF( med_diag%GMEPD%dgsave ) THEN613 CALL wrk_alloc( jpi, jpj, fgmepd2d )614 fgmepd2d(:,:) = 0.0 !!615 ENDIF616 IF( med_diag%GMEZMI%dgsave ) THEN617 CALL wrk_alloc( jpi, jpj, fgmezmi2d )618 fgmezmi2d(:,:) = 0.0 !!619 ENDIF620 IF( med_diag%GMED%dgsave ) THEN621 CALL wrk_alloc( jpi, jpj, fgmed2d )622 fgmed2d(:,:) = 0.0 !!623 ENDIF624 IF( med_diag%MZME%dgsave ) THEN625 CALL wrk_alloc( jpi, jpj, fdzme2d )626 fdzme2d(:,:) = 0.0 !!627 ENDIF628 IF( med_diag%DETN%dgsave ) THEN629 CALL wrk_alloc( jpi, jpj, fslown2d )630 fslown2d(:,:) = 0.0 !!631 ENDIF632 IF( med_diag%MDET%dgsave ) THEN633 CALL wrk_alloc( jpi, jpj, fdd2d )634 fdd2d(:,:) = 0.0 !!635 ENDIF636 IF( med_diag%AEOLIAN%dgsave ) THEN637 CALL wrk_alloc( jpi, jpj, ffetop2d )638 ffetop2d(:,:) = 0.0 !!639 ENDIF640 IF( med_diag%BENTHIC%dgsave ) THEN641 CALL wrk_alloc( jpi, jpj, ffebot2d )642 ffebot2d(:,:) = 0.0 !!643 ENDIF644 IF( med_diag%SCAVENGE%dgsave ) THEN645 CALL wrk_alloc( jpi, jpj, ffescav2d )646 ffescav2d(:,:) = 0.0 !!647 ENDIF648 IF( med_diag%PN_JLIM%dgsave ) THEN649 CALL wrk_alloc( jpi, jpj, fjln2d )650 fjln2d(:,:) = 0.0 !!651 ENDIF652 IF( med_diag%PN_NLIM%dgsave ) THEN653 CALL wrk_alloc( jpi, jpj, fnln2d )654 fnln2d(:,:) = 0.0 !!655 ENDIF656 IF( med_diag%PN_FELIM%dgsave ) THEN657 CALL wrk_alloc( jpi, jpj, ffln2d )658 ffln2d(:,:) = 0.0 !!659 ENDIF660 IF( med_diag%PD_JLIM%dgsave ) THEN661 CALL wrk_alloc( jpi, jpj, fjld2d )662 fjld2d(:,:) = 0.0 !!663 ENDIF664 IF( med_diag%PD_NLIM%dgsave ) THEN665 CALL wrk_alloc( jpi, jpj, fnld2d )666 fnld2d(:,:) = 0.0 !!667 ENDIF668 IF( med_diag%PD_FELIM%dgsave ) THEN669 CALL wrk_alloc( jpi, jpj, ffld2d )670 ffld2d(:,:) = 0.0 !!671 ENDIF672 IF( med_diag%PD_SILIM%dgsave ) THEN673 CALL wrk_alloc( jpi, jpj, fsld2d2 )674 fsld2d2(:,:) = 0.0 !!675 ENDIF676 IF( med_diag%PDSILIM2%dgsave ) THEN677 CALL wrk_alloc( jpi, jpj, fsld2d )678 fsld2d(:,:) = 0.0 !!679 ENDIF680 !!681 !! skip SDT_XXXX diagnostics here682 !!683 IF( med_diag%TOTREG_N%dgsave ) THEN684 CALL wrk_alloc( jpi, jpj, fregen2d )685 fregen2d(:,:) = 0.0 !!686 ENDIF687 IF( med_diag%TOTRG_SI%dgsave ) THEN688 CALL wrk_alloc( jpi, jpj, fregensi2d )689 fregensi2d(:,:) = 0.0 !!690 ENDIF691 !!692 !! skip REG_XXXX diagnostics here693 !!694 IF( med_diag%FASTN%dgsave ) THEN695 CALL wrk_alloc( jpi, jpj, ftempn2d )696 ftempn2d(:,:) = 0.0 !!697 ENDIF698 IF( med_diag%FASTSI%dgsave ) THEN699 CALL wrk_alloc( jpi, jpj, ftempsi2d )700 ftempsi2d(:,:) = 0.0 !!701 ENDIF702 IF( med_diag%FASTFE%dgsave ) THEN703 CALL wrk_alloc( jpi, jpj, ftempfe2d )704 ftempfe2d(:,:) = 0.0 !!705 ENDIF706 IF( med_diag%FASTC%dgsave ) THEN707 CALL wrk_alloc( jpi, jpj, ftempc2d )708 ftempc2d(:,:) = 0.0 !!709 ENDIF710 IF( med_diag%FASTCA%dgsave ) THEN711 CALL wrk_alloc( jpi, jpj, ftempca2d )712 ftempca2d(:,:) = 0.0 !!713 ENDIF714 !!715 !! skip FDT_XXXX, RG_XXXXF, FDS_XXXX, RGS_XXXXF diagnostics here716 !!717 IF( med_diag%REMINN%dgsave ) THEN718 CALL wrk_alloc( jpi, jpj, freminn2d )719 freminn2d(:,:) = 0.0 !!720 ENDIF721 IF( med_diag%REMINSI%dgsave ) THEN722 CALL wrk_alloc( jpi, jpj, freminsi2d )723 freminsi2d(:,:) = 0.0 !!724 ENDIF725 IF( med_diag%REMINFE%dgsave ) THEN726 CALL wrk_alloc( jpi, jpj, freminfe2d )727 freminfe2d(:,:) = 0.0 !!728 ENDIF729 IF( med_diag%REMINC%dgsave ) THEN730 CALL wrk_alloc( jpi, jpj, freminc2d )731 freminc2d(:,:) = 0.0 !!732 ENDIF733 IF( med_diag%REMINCA%dgsave ) THEN734 CALL wrk_alloc( jpi, jpj, freminca2d )735 freminca2d(:,:) = 0.0 !!736 ENDIF737 # if defined key_roam738 !!739 !! skip SEAFLRXX, MED_XXXX, INTFLX_XX, INT_XX, ML_XXX, OCAL_XXX, FE_XXXX, MED_XZE, WIND diagnostics here740 !!741 IF( med_diag%RR_0100%dgsave ) THEN742 CALL wrk_alloc( jpi, jpj, ffastca2d )743 ffastca2d(:,:) = 0.0 !!744 ENDIF745 746 IF( med_diag%ATM_PCO2%dgsave ) THEN747 CALL wrk_alloc( jpi, jpj, f_pco2a2d )748 f_pco2a2d(:,:) = 0.0 !!749 ENDIF750 !!751 !! skip OCN_PH diagnostic here752 !!753 IF( med_diag%OCN_PCO2%dgsave ) THEN754 CALL wrk_alloc( jpi, jpj, f_pco2w2d )755 f_pco2w2d(:,:) = 0.0 !!756 ENDIF757 !!758 !! skip OCNH2CO3, OCN_HCO3, OCN_CO3 diagnostics here759 !!760 IF( med_diag%CO2FLUX%dgsave ) THEN761 CALL wrk_alloc( jpi, jpj, f_co2flux2d )762 f_co2flux2d(:,:) = 0.0 !!763 ENDIF764 !!765 !! skip OM_XXX diagnostics here766 !!767 IF( med_diag%TCO2%dgsave ) THEN768 CALL wrk_alloc( jpi, jpj, f_TDIC2d )769 f_TDIC2d(:,:) = 0.0 !!770 ENDIF771 IF( med_diag%TALK%dgsave ) THEN772 CALL wrk_alloc( jpi, jpj, f_TALK2d )773 f_TALK2d(:,:) = 0.0 !!774 ENDIF775 IF( med_diag%KW660%dgsave ) THEN776 CALL wrk_alloc( jpi, jpj, f_kw6602d )777 f_kw6602d(:,:) = 0.0 !!778 ENDIF779 IF( med_diag%ATM_PP0%dgsave ) THEN780 CALL wrk_alloc( jpi, jpj, f_pp02d )781 f_pp02d(:,:) = 0.0 !!782 ENDIF783 IF( med_diag%O2FLUX%dgsave ) THEN784 CALL wrk_alloc( jpi, jpj, f_o2flux2d )785 f_o2flux2d(:,:) = 0.0 !!786 ENDIF787 IF( med_diag%O2SAT%dgsave ) THEN788 CALL wrk_alloc( jpi, jpj, f_o2sat2d )789 f_o2sat2d(:,:) = 0.0 !!790 ENDIF791 !!792 !! skip XXX_CCD diagnostics here793 !!794 IF( med_diag%SFR_OCAL%dgsave ) THEN795 CALL wrk_alloc( jpi, jpj, sfr_ocal2d )796 sfr_ocal2d(:,:) = 0.0 !!797 ENDIF798 IF( med_diag%SFR_OARG%dgsave ) THEN799 CALL wrk_alloc( jpi, jpj, sfr_oarg2d )800 sfr_oarg2d(:,:) = 0.0 !!801 ENDIF802 !!803 !! skip XX_PROD, XX_CONS, O2_ANOX, RR_XXXX diagnostics here804 !!805 IF( med_diag%IBEN_N%dgsave ) THEN806 CALL wrk_alloc( jpi, jpj, iben_n2d )807 iben_n2d(:,:) = 0.0 !!808 ENDIF809 IF( med_diag%IBEN_FE%dgsave ) THEN810 CALL wrk_alloc( jpi, jpj, iben_fe2d )811 iben_fe2d(:,:) = 0.0 !!812 ENDIF813 IF( med_diag%IBEN_C%dgsave ) THEN814 CALL wrk_alloc( jpi, jpj, iben_c2d )815 iben_c2d(:,:) = 0.0 !!816 ENDIF817 IF( med_diag%IBEN_SI%dgsave ) THEN818 CALL wrk_alloc( jpi, jpj, iben_si2d )819 iben_si2d(:,:) = 0.0 !!820 ENDIF821 IF( med_diag%IBEN_CA%dgsave ) THEN822 CALL wrk_alloc( jpi, jpj, iben_ca2d )823 iben_ca2d(:,:) = 0.0 !!824 ENDIF825 IF( med_diag%OBEN_N%dgsave ) THEN826 CALL wrk_alloc( jpi, jpj, oben_n2d )827 oben_n2d(:,:) = 0.0 !!828 ENDIF829 IF( med_diag%OBEN_FE%dgsave ) THEN830 CALL wrk_alloc( jpi, jpj, oben_fe2d )831 oben_fe2d(:,:) = 0.0 !!832 ENDIF833 IF( med_diag%OBEN_C%dgsave ) THEN834 CALL wrk_alloc( jpi, jpj, oben_c2d )835 oben_c2d(:,:) = 0.0 !!836 ENDIF837 IF( med_diag%OBEN_SI%dgsave ) THEN838 CALL wrk_alloc( jpi, jpj, oben_si2d )839 oben_si2d(:,:) = 0.0 !!840 ENDIF841 IF( med_diag%OBEN_CA%dgsave ) THEN842 CALL wrk_alloc( jpi, jpj, oben_ca2d )843 oben_ca2d(:,:) = 0.0 !!844 ENDIF845 !!846 !! skip BEN_XX diagnostics here847 !!848 IF( med_diag%RIV_N%dgsave ) THEN849 CALL wrk_alloc( jpi, jpj, rivn2d )850 rivn2d(:,:) = 0.0 !!851 ENDIF852 IF( med_diag%RIV_SI%dgsave ) THEN853 CALL wrk_alloc( jpi, jpj, rivsi2d )854 rivsi2d(:,:) = 0.0 !!855 ENDIF856 IF( med_diag%RIV_C%dgsave ) THEN857 CALL wrk_alloc( jpi, jpj, rivc2d )858 rivc2d(:,:) = 0.0 !!859 ENDIF860 IF( med_diag%RIV_ALK%dgsave ) THEN861 CALL wrk_alloc( jpi, jpj, rivalk2d )862 rivalk2d(:,:) = 0.0 !!863 ENDIF864 IF( med_diag%DETC%dgsave ) THEN865 CALL wrk_alloc( jpi, jpj, fslowc2d )866 fslowc2d(:,:) = 0.0 !!867 ENDIF868 !!869 !! skip SDC_XXXX, INVTXXX diagnostics here870 !!871 IF( med_diag%LYSO_CA%dgsave ) THEN872 CALL wrk_alloc( jpi, jpj, lyso_ca2d )873 lyso_ca2d(:,:) = 0.0 !!874 ENDIF875 !!876 !! skip COM_RESP diagnostic here877 !!878 IF( med_diag%PN_LLOSS%dgsave ) THEN879 CALL wrk_alloc( jpi, jpj, fdpn22d )880 fdpn22d(:,:) = 0.0 !!881 ENDIF882 IF( med_diag%PD_LLOSS%dgsave ) THEN883 CALL wrk_alloc( jpi, jpj, fdpd22d )884 fdpd22d(:,:) = 0.0 !!885 ENDIF886 IF( med_diag%ZI_LLOSS%dgsave ) THEN887 CALL wrk_alloc( jpi, jpj, fdzmi22d )888 fdzmi22d(:,:) = 0.0 !!889 ENDIF890 IF( med_diag%ZE_LLOSS%dgsave ) THEN891 CALL wrk_alloc( jpi, jpj, fdzme22d )892 fdzme22d(:,:) = 0.0 !!893 ENDIF894 IF( med_diag%ZI_MES_N%dgsave ) THEN895 CALL wrk_alloc( jpi, jpj, zimesn2d )896 zimesn2d(:,:) = 0.0 !!897 ENDIF898 IF( med_diag%ZI_MES_D%dgsave ) THEN899 CALL wrk_alloc( jpi, jpj, zimesd2d )900 zimesd2d(:,:) = 0.0 !!901 ENDIF902 IF( med_diag%ZI_MES_C%dgsave ) THEN903 CALL wrk_alloc( jpi, jpj, zimesc2d )904 zimesc2d(:,:) = 0.0 !!905 ENDIF906 IF( med_diag%ZI_MESDC%dgsave ) THEN907 CALL wrk_alloc( jpi, jpj, zimesdc2d )908 zimesdc2d(:,:) = 0.0 !!909 ENDIF910 IF( med_diag%ZI_EXCR%dgsave ) THEN911 CALL wrk_alloc( jpi, jpj, ziexcr2d )912 ziexcr2d(:,:) = 0.0 !!913 ENDIF914 IF( med_diag%ZI_RESP%dgsave ) THEN915 CALL wrk_alloc( jpi, jpj, ziresp2d )916 ziresp2d(:,:) = 0.0 !!917 ENDIF918 IF( med_diag%ZI_GROW%dgsave ) THEN919 CALL wrk_alloc( jpi, jpj, zigrow2d )920 zigrow2d(:,:) = 0.0 !!921 ENDIF922 IF( med_diag%ZE_MES_N%dgsave ) THEN923 CALL wrk_alloc( jpi, jpj, zemesn2d )924 zemesn2d(:,:) = 0.0 !!925 ENDIF926 IF( med_diag%ZE_MES_D%dgsave ) THEN927 CALL wrk_alloc( jpi, jpj, zemesd2d )928 zemesd2d(:,:) = 0.0 !!929 ENDIF930 IF( med_diag%ZE_MES_C%dgsave ) THEN931 CALL wrk_alloc( jpi, jpj, zemesc2d )932 zemesc2d(:,:) = 0.0 !!933 ENDIF934 IF( med_diag%ZE_MESDC%dgsave ) THEN935 CALL wrk_alloc( jpi, jpj, zemesdc2d )936 zemesdc2d(:,:) = 0.0 !!937 ENDIF938 IF( med_diag%ZE_EXCR%dgsave ) THEN939 CALL wrk_alloc( jpi, jpj, zeexcr2d )940 zeexcr2d(:,:) = 0.0 !!941 ENDIF942 IF( med_diag%ZE_RESP%dgsave ) THEN943 CALL wrk_alloc( jpi, jpj, zeresp2d )944 zeresp2d(:,:) = 0.0 !!945 ENDIF946 IF( med_diag%ZE_GROW%dgsave ) THEN947 CALL wrk_alloc( jpi, jpj, zegrow2d )948 zegrow2d(:,:) = 0.0 !!949 ENDIF950 IF( med_diag%MDETC%dgsave ) THEN951 CALL wrk_alloc( jpi, jpj, mdetc2d )952 mdetc2d(:,:) = 0.0 !!953 ENDIF954 IF( med_diag%GMIDC%dgsave ) THEN955 CALL wrk_alloc( jpi, jpj, gmidc2d )956 gmidc2d(:,:) = 0.0 !!957 ENDIF958 IF( med_diag%GMEDC%dgsave ) THEN959 CALL wrk_alloc( jpi, jpj, gmedc2d )960 gmedc2d(:,:) = 0.0 !!961 ENDIF962 !!963 !! skip INT_XXX diagnostics here964 !!965 IF (jdms .eq. 1) THEN966 IF( med_diag%DMS_SURF%dgsave ) THEN967 CALL wrk_alloc( jpi, jpj, dms_surf2d )968 dms_surf2d(:,:) = 0.0 !!969 ENDIF970 IF( med_diag%DMS_ANDR%dgsave ) THEN971 CALL wrk_alloc( jpi, jpj, dms_andr2d )972 dms_andr2d(:,:) = 0.0 !!973 ENDIF974 IF( med_diag%DMS_SIMO%dgsave ) THEN975 CALL wrk_alloc( jpi, jpj, dms_simo2d )976 dms_simo2d(:,:) = 0.0 !!977 ENDIF978 IF( med_diag%DMS_ARAN%dgsave ) THEN979 CALL wrk_alloc( jpi, jpj, dms_aran2d )980 dms_aran2d(:,:) = 0.0 !!981 ENDIF982 IF( med_diag%DMS_HALL%dgsave ) THEN983 CALL wrk_alloc( jpi, jpj, dms_hall2d )984 dms_hall2d(:,:) = 0.0 !!985 ENDIF986 ENDIF987 !!988 !! AXY (24/11/16): extra MOCSY diagnostics, 2D989 IF( med_diag%ATM_XCO2%dgsave ) THEN990 CALL wrk_alloc( jpi, jpj, f_xco2a_2d )991 f_xco2a_2d(:,:) = 0.0 !!992 ENDIF993 IF( med_diag%OCN_FCO2%dgsave ) THEN994 CALL wrk_alloc( jpi, jpj, f_fco2w_2d )995 f_fco2w_2d(:,:) = 0.0 !!996 ENDIF997 IF( med_diag%ATM_FCO2%dgsave ) THEN998 CALL wrk_alloc( jpi, jpj, f_fco2a_2d )999 f_fco2a_2d(:,:) = 0.0 !!1000 ENDIF1001 IF( med_diag%OCN_RHOSW%dgsave ) THEN1002 CALL wrk_alloc( jpi, jpj, f_ocnrhosw_2d )1003 f_ocnrhosw_2d(:,:) = 0.0 !!1004 ENDIF1005 IF( med_diag%OCN_SCHCO2%dgsave ) THEN1006 CALL wrk_alloc( jpi, jpj, f_ocnschco2_2d )1007 f_ocnschco2_2d(:,:) = 0.0 !!1008 ENDIF1009 IF( med_diag%OCN_KWCO2%dgsave ) THEN1010 CALL wrk_alloc( jpi, jpj, f_ocnkwco2_2d )1011 f_ocnkwco2_2d(:,:) = 0.0 !!1012 ENDIF1013 IF( med_diag%OCN_K0%dgsave ) THEN1014 CALL wrk_alloc( jpi, jpj, f_ocnk0_2d )1015 f_ocnk0_2d(:,:) = 0.0 !!1016 ENDIF1017 IF( med_diag%CO2STARAIR%dgsave ) THEN1018 CALL wrk_alloc( jpi, jpj, f_co2starair_2d )1019 f_co2starair_2d(:,:) = 0.0 !!1020 ENDIF1021 IF( med_diag%OCN_DPCO2%dgsave ) THEN1022 CALL wrk_alloc( jpi, jpj, f_ocndpco2_2d )1023 f_ocndpco2_2d(:,:) = 0.0 !!1024 ENDIF1025 # endif1026 IF( med_diag%TPP3%dgsave ) THEN1027 CALL wrk_alloc( jpi, jpj, jpk, tpp3d )1028 tpp3d(:,:,:) = 0.0 !!1029 ENDIF1030 IF( med_diag%DETFLUX3%dgsave ) THEN1031 CALL wrk_alloc( jpi, jpj, jpk, detflux3d )1032 detflux3d(:,:,:) = 0.0 !!1033 ENDIF1034 IF( med_diag%REMIN3N%dgsave ) THEN1035 CALL wrk_alloc( jpi, jpj, jpk, remin3dn )1036 remin3dn(:,:,:) = 0.0 !!1037 ENDIF1038 !!1039 !! AXY (10/11/16): CMIP6 diagnostics, 2D1040 !! JPALM -- 17-11-16 -- put fgco2 alloc out of diag request1041 !! needed for coupling/passed through restart1042 !! IF( med_diag%FGCO2%dgsave ) THEN1043 CALL wrk_alloc( jpi, jpj, fgco2 )1044 fgco2(:,:) = 0.0 !!1045 !! ENDIF1046 IF( med_diag%INTDISSIC%dgsave ) THEN1047 CALL wrk_alloc( jpi, jpj, intdissic )1048 intdissic(:,:) = 0.0 !!1049 ENDIF1050 IF( med_diag%INTDISSIN%dgsave ) THEN1051 CALL wrk_alloc( jpi, jpj, intdissin )1052 intdissin(:,:) = 0.0 !!1053 ENDIF1054 IF( med_diag%INTDISSISI%dgsave ) THEN1055 CALL wrk_alloc( jpi, jpj, intdissisi )1056 intdissisi(:,:) = 0.0 !!1057 ENDIF1058 IF( med_diag%INTTALK%dgsave ) THEN1059 CALL wrk_alloc( jpi, jpj, inttalk )1060 inttalk(:,:) = 0.0 !!1061 ENDIF1062 IF( med_diag%O2min%dgsave ) THEN1063 CALL wrk_alloc( jpi, jpj, o2min )1064 o2min(:,:) = 1.e3 !! set to high value as we're looking for min(o2)1065 ENDIF1066 IF( med_diag%ZO2min%dgsave ) THEN1067 CALL wrk_alloc( jpi, jpj, zo2min )1068 zo2min(:,:) = 0.0 !!1069 ENDIF1070 IF( med_diag%FBDDTALK%dgsave ) THEN1071 CALL wrk_alloc( jpi, jpj, fbddtalk )1072 fbddtalk(:,:) = 0.0 !!1073 ENDIF1074 IF( med_diag%FBDDTDIC%dgsave ) THEN1075 CALL wrk_alloc( jpi, jpj, fbddtdic )1076 fbddtdic(:,:) = 0.0 !!1077 ENDIF1078 IF( med_diag%FBDDTDIFE%dgsave ) THEN1079 CALL wrk_alloc( jpi, jpj, fbddtdife )1080 fbddtdife(:,:) = 0.0 !!1081 ENDIF1082 IF( med_diag%FBDDTDIN%dgsave ) THEN1083 CALL wrk_alloc( jpi, jpj, fbddtdin )1084 fbddtdin(:,:) = 0.0 !!1085 ENDIF1086 IF( med_diag%FBDDTDISI%dgsave ) THEN1087 CALL wrk_alloc( jpi, jpj, fbddtdisi )1088 fbddtdisi(:,:) = 0.0 !!1089 ENDIF1090 !!1091 !! AXY (10/11/16): CMIP6 diagnostics, 3D1092 IF( med_diag%TPPD3%dgsave ) THEN1093 CALL wrk_alloc( jpi, jpj, jpk, tppd3 )1094 tppd3(:,:,:) = 0.0 !!1095 ENDIF1096 IF( med_diag%BDDTALK3%dgsave ) THEN1097 CALL wrk_alloc( jpi, jpj, jpk, bddtalk3 )1098 bddtalk3(:,:,:) = 0.0 !!1099 ENDIF1100 IF( med_diag%BDDTDIC3%dgsave ) THEN1101 CALL wrk_alloc( jpi, jpj, jpk, bddtdic3 )1102 bddtdic3(:,:,:) = 0.0 !!1103 ENDIF1104 IF( med_diag%BDDTDIFE3%dgsave ) THEN1105 CALL wrk_alloc( jpi, jpj, jpk, bddtdife3 )1106 bddtdife3(:,:,:) = 0.0 !!1107 ENDIF1108 IF( med_diag%BDDTDIN3%dgsave ) THEN1109 CALL wrk_alloc( jpi, jpj, jpk, bddtdin3 )1110 bddtdin3(:,:,:) = 0.0 !!1111 ENDIF1112 IF( med_diag%BDDTDISI3%dgsave ) THEN1113 CALL wrk_alloc( jpi, jpj, jpk, bddtdisi3 )1114 bddtdisi3(:,:,:) = 0.0 !!1115 ENDIF1116 IF( med_diag%FD_NIT3%dgsave ) THEN1117 CALL wrk_alloc( jpi, jpj, jpk, fd_nit3 )1118 fd_nit3(:,:,:) = 0.0 !!1119 ENDIF1120 IF( med_diag%FD_SIL3%dgsave ) THEN1121 CALL wrk_alloc( jpi, jpj, jpk, fd_sil3 )1122 fd_sil3(:,:,:) = 0.0 !!1123 ENDIF1124 IF( med_diag%FD_CAR3%dgsave ) THEN1125 CALL wrk_alloc( jpi, jpj, jpk, fd_car3 )1126 fd_car3(:,:,:) = 0.0 !!1127 ENDIF1128 IF( med_diag%FD_CAL3%dgsave ) THEN1129 CALL wrk_alloc( jpi, jpj, jpk, fd_cal3 )1130 fd_cal3(:,:,:) = 0.0 !!1131 ENDIF1132 IF( med_diag%DCALC3%dgsave ) THEN1133 CALL wrk_alloc( jpi, jpj, jpk, dcalc3 )1134 dcalc3(:,:,: ) = 0.0 !!1135 ENDIF1136 IF( med_diag%EXPC3%dgsave ) THEN1137 CALL wrk_alloc( jpi, jpj, jpk, expc3 )1138 expc3(:,:,: ) = 0.0 !!1139 ENDIF1140 IF( med_diag%EXPN3%dgsave ) THEN1141 CALL wrk_alloc( jpi, jpj, jpk, expn3 )1142 expn3(:,:,: ) = 0.0 !!1143 ENDIF1144 IF( med_diag%FEDISS3%dgsave ) THEN1145 CALL wrk_alloc( jpi, jpj, jpk, fediss3 )1146 fediss3(:,:,: ) = 0.0 !!1147 ENDIF1148 IF( med_diag%FESCAV3%dgsave ) THEN1149 CALL wrk_alloc( jpi, jpj, jpk, fescav3 )1150 fescav3(:,:,: ) = 0.0 !!1151 ENDIF1152 IF( med_diag%MIGRAZP3%dgsave ) THEN1153 CALL wrk_alloc( jpi, jpj, jpk, migrazp3 )1154 migrazp3(:,:,: ) = 0.0 !!1155 ENDIF1156 IF( med_diag%MIGRAZD3%dgsave ) THEN1157 CALL wrk_alloc( jpi, jpj, jpk, migrazd3 )1158 migrazd3(:,:,: ) = 0.0 !!1159 ENDIF1160 IF( med_diag%MEGRAZP3%dgsave ) THEN1161 CALL wrk_alloc( jpi, jpj, jpk, megrazp3 )1162 megrazp3(:,:,: ) = 0.0 !!1163 ENDIF1164 IF( med_diag%MEGRAZD3%dgsave ) THEN1165 CALL wrk_alloc( jpi, jpj, jpk, megrazd3 )1166 megrazd3(:,:,: ) = 0.0 !!1167 ENDIF1168 IF( med_diag%MEGRAZZ3%dgsave ) THEN1169 CALL wrk_alloc( jpi, jpj, jpk, megrazz3 )1170 megrazz3(:,:,: ) = 0.0 !!1171 ENDIF1172 IF( med_diag%O2SAT3%dgsave ) THEN1173 CALL wrk_alloc( jpi, jpj, jpk, o2sat3 )1174 o2sat3(:,:,: ) = 0.0 !!1175 ENDIF1176 IF( med_diag%PBSI3%dgsave ) THEN1177 CALL wrk_alloc( jpi, jpj, jpk, pbsi3 )1178 pbsi3(:,:,: ) = 0.0 !!1179 ENDIF1180 IF( med_diag%PCAL3%dgsave ) THEN1181 CALL wrk_alloc( jpi, jpj, jpk, pcal3 )1182 pcal3(:,:,: ) = 0.0 !!1183 ENDIF1184 IF( med_diag%REMOC3%dgsave ) THEN1185 CALL wrk_alloc( jpi, jpj, jpk, remoc3 )1186 remoc3(:,:,: ) = 0.0 !!1187 ENDIF1188 IF( med_diag%PNLIMJ3%dgsave ) THEN1189 CALL wrk_alloc( jpi, jpj, jpk, pnlimj3 )1190 pnlimj3(:,:,: ) = 0.0 !!1191 ENDIF1192 IF( med_diag%PNLIMN3%dgsave ) THEN1193 CALL wrk_alloc( jpi, jpj, jpk, pnlimn3 )1194 pnlimn3(:,:,: ) = 0.0 !!1195 ENDIF1196 IF( med_diag%PNLIMFE3%dgsave ) THEN1197 CALL wrk_alloc( jpi, jpj, jpk, pnlimfe3 )1198 pnlimfe3(:,:,: ) = 0.0 !!1199 ENDIF1200 IF( med_diag%PDLIMJ3%dgsave ) THEN1201 CALL wrk_alloc( jpi, jpj, jpk, pdlimj3 )1202 pdlimj3(:,:,: ) = 0.0 !!1203 ENDIF1204 IF( med_diag%PDLIMN3%dgsave ) THEN1205 CALL wrk_alloc( jpi, jpj, jpk, pdlimn3 )1206 pdlimn3(:,:,: ) = 0.0 !!1207 ENDIF1208 IF( med_diag%PDLIMFE3%dgsave ) THEN1209 CALL wrk_alloc( jpi, jpj, jpk, pdlimfe3 )1210 pdlimfe3(:,:,: ) = 0.0 !!1211 ENDIF1212 IF( med_diag%PDLIMSI3%dgsave ) THEN1213 CALL wrk_alloc( jpi, jpj, jpk, pdlimsi3 )1214 pdlimsi3(:,:,: ) = 0.0 !!1215 ENDIF1216 ENDIF !! lk_iomput1217 !!1218 1238 # if defined key_axy_nancheck 1219 DO jn = 1,jptra 1220 fq2 = SUM(trn(:,:,:,jn)) 1221 if ( ieee_is_nan( fq2 ) ) then 1222 !! there's a NaN here 1223 if (lwp) write(numout,*) 'NAN detected in field', jn, 'at time', kt, 'at position:' 1224 DO jk = 1,jpk 1225 DO jj = 1,jpj 1226 DO ji = 1,jpi 1227 if ( ieee_is_nan( trn(ji,jj,jk,jn) ) ) then 1228 if (lwp) write (numout,'(a,1pe12.2,4i6)') 'NAN-CHECK', & 1229 & tmask(ji,jj,jk), ji, jj, jk, jn 1230 endif 1239 DO jn = 1,jptra 1240 !! fq0 = MINVAL(trn(:,:,:,jn)) 1241 !! fq1 = MAXVAL(trn(:,:,:,jn)) 1242 fq2 = SUM(trn(:,:,:,jn)) 1243 !! if (lwp) write (numout,'(a,2i6,3(1x,1pe15.5))') 'NAN-CHECK', & 1244 !! & kt, jn, fq0, fq1, fq2 1245 !! AXY (30/01/14): much to our surprise, the next line doesn't work on HECTOR 1246 !! and has been replaced here with a specialist routine 1247 !! if (fq2 /= fq2 ) then 1248 if ( ieee_is_nan( fq2 ) ) then 1249 !! there's a NaN here 1250 if (lwp) write(numout,*) 'NAN detected in field', jn, 'at time', kt, 'at position:' 1251 DO jk = 1,jpk 1252 DO jj = 1,jpj 1253 DO ji = 1,jpi 1254 !! AXY (30/01/14): "isnan" problem on HECTOR 1255 !! if (trn(ji,jj,jk,jn) /= trn(ji,jj,jk,jn)) then 1256 if ( ieee_is_nan( trn(ji,jj,jk,jn) ) ) then 1257 if (lwp) write (numout,'(a,1pe12.2,4i6)') 'NAN-CHECK', & 1258 & tmask(ji,jj,jk), ji, jj, jk, jn 1259 endif 1260 enddo 1231 1261 enddo 1232 1262 enddo 1233 enddo 1234 CALL ctl_stop( 'trcbio_medusa, NAN in incoming tracer field' ) 1235 endif 1236 ENDDO 1237 CALL flush(numout) 1263 CALL ctl_stop( 'trcbio_medusa, NAN in incoming tracer field' ) 1264 endif 1265 ENDDO 1266 CALL flush(numout) 1238 1267 # endif 1239 1268 1240 1269 # if defined key_debug_medusa 1241 IF ( lwp) write (numout,*) 'trc_bio_medusa: variables initialised and checked'1242 CALL flush(numout)1270 IF (lwp) write (numout,*) 'trc_bio_medusa: variables initialised and checked' 1271 CALL flush(numout) 1243 1272 # endif 1244 1273 1245 1274 # if defined key_roam 1246 !!---------------------------------------------------------------------- 1247 !! calculate atmospheric pCO2 1248 !!---------------------------------------------------------------------- 1249 !! 1275 !!---------------------------------------------------------------------- 1276 !! calculate atmospheric pCO2 1277 !!---------------------------------------------------------------------- 1278 !! 1279 !! what's atmospheric pCO2 doing? (data start in 1859) 1280 iyr1 = nyear - 1859 + 1 1281 iyr2 = iyr1 + 1 1282 if (iyr1 .le. 1) then 1283 !! before 1860 1284 f_xco2a = hist_pco2(1) 1285 elseif (iyr2 .ge. 242) then 1286 !! after 2099 1287 f_xco2a = hist_pco2(242) 1288 else 1289 !! just right 1290 fq0 = hist_pco2(iyr1) 1291 fq1 = hist_pco2(iyr2) 1292 fq2 = real(nsec_day) / (60.0 * 60.0 * 24.0) 1293 !! AXY (14/06/12): tweaked to make more sense (and be correct) 1294 # if defined key_bs_axy_yrlen 1295 fq3 = (real(nday_year) - 1.0 + fq2) / 360.0 !! bugfix: for 360d year with HadGEM2-ES forcing 1296 # else 1297 fq3 = (real(nday_year) - 1.0 + fq2) / 365.0 !! original use of 365 days (not accounting for leap year or 360d year) 1298 # endif 1299 fq4 = (fq0 * (1.0 - fq3)) + (fq1 * fq3) 1300 f_xco2a = fq4 1301 endif 1250 1302 # if defined key_axy_pi_co2 1251 f_xco2a = 284.725 !! OCMIP pre-industrial pCO2 1252 # else 1253 f_xco2a = 284.725 !! OCMIP pre-industrial pCO2 1303 f_xco2a = 284.725 !! OCMIP pre-industrial pCO2 1254 1304 # endif 1255 IF(lwp) WRITE(numout,*) ' MEDUSA atm pCO2 =', f_xco2a 1305 !! IF(lwp) WRITE(numout,*) ' MEDUSA nyear =', nyear 1306 !! IF(lwp) WRITE(numout,*) ' MEDUSA nsec_day =', real(nsec_day) 1307 !! IF(lwp) WRITE(numout,*) ' MEDUSA nday_year =', real(nday_year) 1308 !! AXY (29/01/14): remove surplus diagnostics 1309 !! IF(lwp) WRITE(numout,*) ' MEDUSA fq0 =', fq0 1310 !! IF(lwp) WRITE(numout,*) ' MEDUSA fq1 =', fq1 1311 !! IF(lwp) WRITE(numout,*) ' MEDUSA fq2 =', fq2 1312 !! IF(lwp) WRITE(numout,*) ' MEDUSA fq3 =', fq3 1313 IF(lwp) WRITE(numout,*) ' MEDUSA atm pCO2 =', f_xco2a 1256 1314 # endif 1257 1315 1258 1316 # if defined key_debug_medusa 1259 IF ( lwp) write (numout,*) 'trc_bio_medusa: ready for carbonate chemistry'1260 IF ( lwp) write (numout,*) 'trc_bio_medusa: kt = ', kt1261 IF ( lwp) write (numout,*) 'trc_bio_medusa: nittrc000 = ', nittrc0001262 CALL flush(numout)1317 IF (lwp) write (numout,*) 'trc_bio_medusa: ready for carbonate chemistry' 1318 IF (lwp) write (numout,*) 'trc_bio_medusa: kt = ', kt 1319 IF (lwp) write (numout,*) 'trc_bio_medusa: nittrc000 = ', nittrc000 1320 CALL flush(numout) 1263 1321 # endif 1264 1322 1265 !!======================================================================1266 !! AXY (07/04/17): possible subroutine block; ocean interior carbonate chemistry1267 !!======================================================================1268 1323 # if defined key_roam 1269 !! AXY (20/11/14): alter to call on first MEDUSA timestep and then every 1270 !! month (this is hardwired as 960 timesteps but should 1271 !! be calculated and done properly 1272 !! IF( kt == nit000 .or. mod(kt,1920) == 0 ) THEN 1273 !! IF( kt == nittrc000 .or. mod(kt,960) == 0 ) THEN 1274 !!============================= 1275 !! Jpalm -- 07-10-2016 -- need to change carb-chem frequency call : 1276 !! we don't want to call on the first time-step of all run submission, 1277 !! but only on the very first time-step, and then every month 1278 !! So we call on nittrc000 if not restarted run, 1279 !! else if one month after last call. 1280 !! assume one month is 30d --> 3600*24*30 : 2592000s 1281 !! try to call carb-chem at 1st month's tm-stp : x * 30d + 1*rdt(i.e: mod = rdt) 1282 !! ++ need to pass carb-chem output var through restarts 1283 IF ( ( kt == nittrc000 .AND. .NOT.ln_rsttr ) .OR. mod(kt*rdt,2592000.) == rdt ) THEN 1284 !!---------------------------------------------------------------------- 1285 !! Calculate the carbonate chemistry for the whole ocean on the first 1286 !! simulation timestep and every month subsequently; the resulting 3D 1287 !! field of omega calcite is used to determine the depth of the CCD 1288 !!---------------------------------------------------------------------- 1289 !! 1290 IF(lwp) WRITE(numout,*) ' MEDUSA calculating all carbonate chemistry at kt =', kt 1291 CALL flush(numout) 1292 !! blank flags 1293 i2_omcal(:,:) = 0 1294 i2_omarg(:,:) = 0 1295 !! loop over 3D space 1296 DO jk = 1,jpk 1297 DO jj = 2,jpjm1 1298 DO ji = 2,jpim1 1299 !! OPEN wet point IF..THEN loop 1300 if (tmask(ji,jj,jk).eq.1) then 1301 IF ( lk_oasis ) THEN 1302 f_xco2a = PCO2a_in_cpl(ji,jj) !! use 2D atm xCO2 from atm coupling 1303 ENDIF 1304 !! AXY (06/04/17): where am I? 1305 flatx = gphit(ji,jj) 1306 !! do carbonate chemistry 1307 !! 1308 fdep2 = fsdept(ji,jj,jk) !! set up level midpoint 1309 !! AXY (28/11/16): seafloor depth; previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 1310 jmbathy = mbathy(ji,jj) 1311 !! 1312 !! set up required state variables 1313 zdic = max(0.,trn(ji,jj,jk,jpdic)) !! dissolved inorganic carbon 1314 zalk = max(0.,trn(ji,jj,jk,jpalk)) !! alkalinity 1315 ztmp = tsn(ji,jj,jk,jp_tem) !! temperature 1316 zsal = tsn(ji,jj,jk,jp_sal) !! salinity 1317 zsil = max(0.,trn(ji,jj,jk,jpsil)) !! silicic acid 1318 zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 1319 !! 1320 !! AXY (28/02/14): check input fields 1321 if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 1322 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 3D, ', & 1323 tsb(ji,jj,jk,jp_tem), tsn(ji,jj,jk,jp_tem), ' at (', & 1324 ji, ',', jj, ',', jk, ') at time', kt 1325 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 3D, ', & 1326 tsn(ji,jj,jk,jp_tem), ' -> ', tsb(ji,jj,jk,jp_tem) 1327 ztmp = tsb(ji,jj,jk,jp_tem) !! temperature 1328 endif 1329 if (zsal .lt. 0.0 .or. zsal .gt. 45.0 ) then 1330 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 3D, ', & 1331 tsb(ji,jj,jk,jp_sal), tsn(ji,jj,jk,jp_sal), ' at (', & 1332 ji, ',', jj, ',', jk, ') at time', kt 1333 endif 1334 !! 1335 !! blank input variables not used at this stage (they relate to air-sea flux) 1336 f_kw660 = 1.0 1337 f_pp0 = 1.0 1338 !! 1339 !! calculate carbonate chemistry at grid cell midpoint 1340 !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 1341 !! chemistry package 1342 CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho, & ! inputs 1343 f_pp0, fdep2, flatx, f_kw660, f_xco2a, 1, & ! inputs 1344 f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj), & ! outputs 1345 f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut, & ! outputs 1346 f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0, & ! outputs 1347 f_co2starair, f_co2flux, f_dpco2 ) ! outputs 1348 !! 1349 f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 1350 f_TALK = (zalk / f_rhosw) * 1000. ! meq / m3 -> ueq / kg 1351 f_dcf = f_rhosw 1352 !! 1353 !! store 3D outputs 1354 f3_pH(ji,jj,jk) = f_ph 1355 f3_h2co3(ji,jj,jk) = f_h2co3 1356 f3_hco3(ji,jj,jk) = f_hco3 1357 f3_co3(ji,jj,jk) = f_co3 1358 f3_omcal(ji,jj,jk) = f_omcal(ji,jj) 1359 f3_omarg(ji,jj,jk) = f_omarg(ji,jj) 1360 !! 1361 !! CCD calculation: calcite 1362 if (i2_omcal(ji,jj) .eq. 0 .and. f_omcal(ji,jj) .lt. 1.0) then 1363 if (jk .eq. 1) then 1364 f2_ccd_cal(ji,jj) = fdep2 1365 else 1366 fq0 = f3_omcal(ji,jj,jk-1) - f_omcal(ji,jj) 1367 fq1 = f3_omcal(ji,jj,jk-1) - 1.0 1368 fq2 = fq1 / (fq0 + tiny(fq0)) 1369 fq3 = fdep2 - fsdept(ji,jj,jk-1) 1370 fq4 = fq2 * fq3 1371 f2_ccd_cal(ji,jj) = fsdept(ji,jj,jk-1) + fq4 1372 endif 1373 i2_omcal(ji,jj) = 1 1374 endif 1375 if ( i2_omcal(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 1376 !! reached seafloor and still no dissolution; set to seafloor (W-point) 1377 f2_ccd_cal(ji,jj) = fsdepw(ji,jj,jk+1) 1378 i2_omcal(ji,jj) = 1 1379 endif 1380 !! 1381 !! CCD calculation: aragonite 1382 if (i2_omarg(ji,jj) .eq. 0 .and. f_omarg(ji,jj) .lt. 1.0) then 1383 if (jk .eq. 1) then 1384 f2_ccd_arg(ji,jj) = fdep2 1385 else 1386 fq0 = f3_omarg(ji,jj,jk-1) - f_omarg(ji,jj) 1387 fq1 = f3_omarg(ji,jj,jk-1) - 1.0 1388 fq2 = fq1 / (fq0 + tiny(fq0)) 1389 fq3 = fdep2 - fsdept(ji,jj,jk-1) 1390 fq4 = fq2 * fq3 1391 f2_ccd_arg(ji,jj) = fsdept(ji,jj,jk-1) + fq4 1392 endif 1393 i2_omarg(ji,jj) = 1 1394 endif 1395 if ( i2_omarg(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 1396 !! reached seafloor and still no dissolution; set to seafloor (W-point) 1397 f2_ccd_arg(ji,jj) = fsdepw(ji,jj,jk+1) 1398 i2_omarg(ji,jj) = 1 1399 endif 1400 endif 1401 ENDDO 1402 ENDDO 1403 ENDDO 1404 ENDIF 1405 # endif 1406 1407 # if defined key_debug_medusa 1408 IF ( lwp ) write (numout,*) 'trc_bio_medusa: ready for full domain calculations' 1409 CALL flush(numout) 1410 # endif 1411 1412 !!---------------------------------------------------------------------- 1413 !! MEDUSA has unified equation through the water column 1414 !! (Diff. from LOBSTER which has two sets: bio- and non-bio layers) 1415 !! Statement below in LOBSTER is different: DO jk = 1, jpkbm1 1416 !!---------------------------------------------------------------------- 1417 !! 1418 !! NOTE: the ordering of the loops below differs from that of some other 1419 !! models; looping over the vertical dimension is the outermost loop and 1420 !! this complicates some calculations (e.g. storage of vertical fluxes 1421 !! that can otherwise be done via a singular variable require 2D fields 1422 !! here); however, these issues are relatively easily resolved, but the 1423 !! loops CANNOT be reordered without potentially causing code efficiency 1424 !! problems (e.g. array indexing means that reordering the loops would 1425 !! require skipping between widely-spaced memory location; potentially 1426 !! outside those immediately cached) 1427 !! 1428 !! OPEN vertical loop 1429 DO jk = 1,jpk 1430 !! OPEN horizontal loops 1431 DO jj = 2,jpjm1 1432 DO ji = 2,jpim1 1433 !! OPEN wet point IF..THEN loop 1434 if (tmask(ji,jj,jk).eq.1) then 1435 !!====================================================================== 1436 !! SETUP LOCAL GRID CELL 1437 !!====================================================================== 1438 !! 1439 !!--------------------------------------------------------------------- 1440 !! Some notes on grid vertical structure 1441 !! - fsdepw(ji,jj,jk) is the depth of the upper surface of level jk 1442 !! - fsde3w(ji,jj,jk) is *approximately* the midpoint of level jk 1443 !! - fse3t(ji,jj,jk) is the thickness of level jk 1444 !!--------------------------------------------------------------------- 1445 !! 1446 !! AXY (11/12/08): set up level thickness 1447 fthk = fse3t(ji,jj,jk) 1448 !! AXY (25/02/10): set up level depth (top of level) 1449 fdep = fsdepw(ji,jj,jk) 1450 !! AXY (01/03/10): set up level depth (bottom of level) 1451 fdep1 = fdep + fthk 1452 !! AXY (17/05/13): where am I? 1453 flatx = gphit(ji,jj) 1454 flonx = glamt(ji,jj) 1455 !! AXY (28/11/16): local seafloor depth 1456 !! previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 1457 jmbathy = mbathy(ji,jj) 1458 !! 1459 !! set up model tracers 1460 !! negative values of state variables are not allowed to 1461 !! contribute to the calculated fluxes 1462 zchn = max(0.,trn(ji,jj,jk,jpchn)) !! non-diatom chlorophyll 1463 zchd = max(0.,trn(ji,jj,jk,jpchd)) !! diatom chlorophyll 1464 zphn = max(0.,trn(ji,jj,jk,jpphn)) !! non-diatoms 1465 zphd = max(0.,trn(ji,jj,jk,jpphd)) !! diatoms 1466 zpds = max(0.,trn(ji,jj,jk,jppds)) !! diatom silicon 1467 !! AXY (28/01/10): probably need to take account of chl/biomass connection 1468 if (zchn.eq.0.) zphn = 0. 1469 if (zchd.eq.0.) zphd = 0. 1470 if (zphn.eq.0.) zchn = 0. 1471 if (zphd.eq.0.) zchd = 0. 1472 !! AXY (23/01/14): duh - why did I forget diatom silicon? 1473 if (zpds.eq.0.) zphd = 0. 1474 if (zphd.eq.0.) zpds = 0. 1475 zzmi = max(0.,trn(ji,jj,jk,jpzmi)) !! microzooplankton 1476 zzme = max(0.,trn(ji,jj,jk,jpzme)) !! mesozooplankton 1477 zdet = max(0.,trn(ji,jj,jk,jpdet)) !! detrital nitrogen 1478 zdin = max(0.,trn(ji,jj,jk,jpdin)) !! dissolved inorganic nitrogen 1479 zsil = max(0.,trn(ji,jj,jk,jpsil)) !! dissolved silicic acid 1480 zfer = max(0.,trn(ji,jj,jk,jpfer)) !! dissolved "iron" 1481 # if defined key_roam 1482 zdtc = max(0.,trn(ji,jj,jk,jpdtc)) !! detrital carbon 1483 zdic = max(0.,trn(ji,jj,jk,jpdic)) !! dissolved inorganic carbon 1484 zalk = max(0.,trn(ji,jj,jk,jpalk)) !! alkalinity 1485 zoxy = max(0.,trn(ji,jj,jk,jpoxy)) !! oxygen 1486 # if defined key_axy_carbchem 1487 zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 1324 !! AXY (20/11/14): alter to call on first MEDUSA timestep and then every 1325 !! month (this is hardwired as 960 timesteps but should 1326 !! be calculated and done properly 1327 !! IF( kt == nit000 .or. mod(kt,1920) == 0 ) THEN 1328 !! IF( kt == nittrc000 .or. mod(kt,960) == 0 ) THEN 1329 !!============================= 1330 !! Jpalm -- 07-10-2016 -- need to change carb-chem frequency call : 1331 !! we don't want to call on the first time-step of all run submission, 1332 !! but only on the very first time-step, and then every month 1333 !! So we call on nittrc000 if not restarted run, 1334 !! else if one month after last call. 1335 !! assume one month is 30d --> 3600*24*30 : 2592000s 1336 !! try to call carb-chem at 1st month's tm-stp : x * 30d + 1*rdt(i.e: mod = rdt) 1337 !! ++ need to pass carb-chem output var through restarts 1338 If ( ( kt == nittrc000 .AND. .NOT.ln_rsttr ) .OR. mod(kt*rdt,2592000.) == rdt ) THEN 1339 !!---------------------------------------------------------------------- 1340 !! Calculate the carbonate chemistry for the whole ocean on the first 1341 !! simulation timestep and every month subsequently; the resulting 3D 1342 !! field of omega calcite is used to determine the depth of the CCD 1343 !!---------------------------------------------------------------------- 1344 !! 1345 IF(lwp) WRITE(numout,*) ' MEDUSA calculating all carbonate chemistry at kt =', kt 1346 CALL flush(numout) 1347 !! blank flags 1348 i2_omcal(:,:) = 0 1349 i2_omarg(:,:) = 0 1350 !! loop over 3D space 1351 DO jk = 1,jpk 1352 DO jj = 2,jpjm1 1353 DO ji = 2,jpim1 1354 !! OPEN wet point IF..THEN loop 1355 if (tmask(ji,jj,jk).eq.1) then 1356 IF (lk_oasis) THEN 1357 f_xco2a = PCO2a_in_cpl(ji,jj) !! use 2D atm xCO2 from atm coupling 1358 ENDIF 1359 !! do carbonate chemistry 1360 !! 1361 fdep2 = fsdept(ji,jj,jk) !! set up level midpoint 1362 !! AXY (28/11/16): local seafloor depth 1363 !! previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 1364 jmbathy = mbathy(ji,jj) 1365 !! 1366 !! set up required state variables 1367 zdic = max(0.,trn(ji,jj,jk,jpdic)) !! dissolved inorganic carbon 1368 zalk = max(0.,trn(ji,jj,jk,jpalk)) !! alkalinity 1369 ztmp = tsn(ji,jj,jk,jp_tem) !! temperature 1370 zsal = tsn(ji,jj,jk,jp_sal) !! salinity 1371 # if defined key_mocsy 1372 zsil = max(0.,trn(ji,jj,jk,jpsil)) !! silicic acid 1373 zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 1488 1374 # endif 1489 !! 1490 !! also need physical parameters for gas exchange calculations 1491 ztmp = tsn(ji,jj,jk,jp_tem) 1492 zsal = tsn(ji,jj,jk,jp_sal) 1493 !! 1494 !! AXY (28/02/14): check input fields 1495 if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 1496 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 2D, ', & 1375 !! 1376 !! AXY (28/02/14): check input fields 1377 if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 1378 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 3D, ', & 1497 1379 tsb(ji,jj,jk,jp_tem), tsn(ji,jj,jk,jp_tem), ' at (', & 1498 1380 ji, ',', jj, ',', jk, ') at time', kt 1499 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 2D, ', &1500 1501 ztmp = tsb(ji,jj,jk,jp_tem)!! temperature1502 endif1503 1504 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 2D, ', &1381 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 3D, ', & 1382 tsn(ji,jj,jk,jp_tem), ' -> ', tsb(ji,jj,jk,jp_tem) 1383 ztmp = tsb(ji,jj,jk,jp_tem) !! temperature 1384 endif 1385 if (zsal .lt. 0.0 .or. zsal .gt. 45.0 ) then 1386 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 3D, ', & 1505 1387 tsb(ji,jj,jk,jp_sal), tsn(ji,jj,jk,jp_sal), ' at (', & 1506 1388 ji, ',', jj, ',', jk, ') at time', kt 1507 endif 1389 endif 1390 !! 1391 !! blank input variables not used at this stage (they relate to air-sea flux) 1392 f_kw660 = 1.0 1393 f_pp0 = 1.0 1394 !! 1395 !! calculate carbonate chemistry at grid cell midpoint 1396 # if defined key_mocsy 1397 !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 1398 !! chemistry package 1399 CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho, & ! inputs 1400 f_pp0, fdep2, gphit(ji,jj), f_kw660, f_xco2a, 1, & ! inputs 1401 f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj), & ! outputs 1402 f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut, & ! outputs 1403 f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0, & ! outputs 1404 f_co2starair, f_co2flux, f_dpco2 ) ! outputs 1405 !! 1406 f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 1407 f_TALK = (zalk / f_rhosw) * 1000. ! meq / m3 -> ueq / kg 1408 f_dcf = f_rhosw 1409 # else 1410 !! AXY (22/06/15): use old PML carbonate chemistry package (the 1411 !! MEDUSA-2 default) 1412 CALL trc_co2_medusa( ztmp, zsal, zdic, zalk, fdep2, f_kw660, & ! inputs 1413 f_xco2a, f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_omcal(ji,jj), & ! outputs 1414 f_omarg(ji,jj), f_co2flux, f_TDIC, f_TALK, f_dcf, f_henry, iters) ! outputs 1415 !! 1416 !! AXY (28/02/14): check output fields 1417 if (iters .eq. 25) then 1418 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: 3D ITERS WARNING, ', & 1419 iters, ' AT (', ji, ', ', jj, ', ', jk, ') AT ', kt 1420 endif 1421 # endif 1422 !! 1423 !! store 3D outputs 1424 f3_pH(ji,jj,jk) = f_ph 1425 f3_h2co3(ji,jj,jk) = f_h2co3 1426 f3_hco3(ji,jj,jk) = f_hco3 1427 f3_co3(ji,jj,jk) = f_co3 1428 f3_omcal(ji,jj,jk) = f_omcal(ji,jj) 1429 f3_omarg(ji,jj,jk) = f_omarg(ji,jj) 1430 !! 1431 !! CCD calculation: calcite 1432 if (i2_omcal(ji,jj) .eq. 0 .and. f_omcal(ji,jj) .lt. 1.0) then 1433 if (jk .eq. 1) then 1434 f2_ccd_cal(ji,jj) = fdep2 1435 else 1436 fq0 = f3_omcal(ji,jj,jk-1) - f_omcal(ji,jj) 1437 fq1 = f3_omcal(ji,jj,jk-1) - 1.0 1438 fq2 = fq1 / (fq0 + tiny(fq0)) 1439 fq3 = fdep2 - fsdept(ji,jj,jk-1) 1440 fq4 = fq2 * fq3 1441 f2_ccd_cal(ji,jj) = fsdept(ji,jj,jk-1) + fq4 1442 endif 1443 i2_omcal(ji,jj) = 1 1444 endif 1445 if ( i2_omcal(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 1446 !! reached seafloor and still no dissolution; set to seafloor (W-point) 1447 f2_ccd_cal(ji,jj) = fsdepw(ji,jj,jk+1) 1448 i2_omcal(ji,jj) = 1 1449 endif 1450 !! 1451 !! CCD calculation: aragonite 1452 if (i2_omarg(ji,jj) .eq. 0 .and. f_omarg(ji,jj) .lt. 1.0) then 1453 if (jk .eq. 1) then 1454 f2_ccd_arg(ji,jj) = fdep2 1455 else 1456 fq0 = f3_omarg(ji,jj,jk-1) - f_omarg(ji,jj) 1457 fq1 = f3_omarg(ji,jj,jk-1) - 1.0 1458 fq2 = fq1 / (fq0 + tiny(fq0)) 1459 fq3 = fdep2 - fsdept(ji,jj,jk-1) 1460 fq4 = fq2 * fq3 1461 f2_ccd_arg(ji,jj) = fsdept(ji,jj,jk-1) + fq4 1462 endif 1463 i2_omarg(ji,jj) = 1 1464 endif 1465 if ( i2_omarg(ji,jj) .eq. 0 .and. jk .eq. jmbathy ) then 1466 !! reached seafloor and still no dissolution; set to seafloor (W-point) 1467 f2_ccd_arg(ji,jj) = fsdepw(ji,jj,jk+1) 1468 i2_omarg(ji,jj) = 1 1469 endif 1470 endif 1471 ENDDO 1472 ENDDO 1473 ENDDO 1474 ENDIF 1475 # endif 1476 1477 # if defined key_debug_medusa 1478 IF (lwp) write (numout,*) 'trc_bio_medusa: ready for full domain calculations' 1479 CALL flush(numout) 1480 # endif 1481 1482 !!---------------------------------------------------------------------- 1483 !! MEDUSA has unified equation through the water column 1484 !! (Diff. from LOBSTER which has two sets: bio- and non-bio layers) 1485 !! Statement below in LOBSTER is different: DO jk = 1, jpkbm1 1486 !!---------------------------------------------------------------------- 1487 !! 1488 !! NOTE: the ordering of the loops below differs from that of some other 1489 !! models; looping over the vertical dimension is the outermost loop and 1490 !! this complicates some calculations (e.g. storage of vertical fluxes 1491 !! that can otherwise be done via a singular variable require 2D fields 1492 !! here); however, these issues are relatively easily resolved, but the 1493 !! loops CANNOT be reordered without potentially causing code efficiency 1494 !! problems (e.g. array indexing means that reordering the loops would 1495 !! require skipping between widely-spaced memory location; potentially 1496 !! outside those immediately cached) 1497 !! 1498 !! OPEN vertical loop 1499 DO jk = 1,jpk 1500 !! OPEN horizontal loops 1501 DO jj = 2,jpjm1 1502 DO ji = 2,jpim1 1503 !! OPEN wet point IF..THEN loop 1504 if (tmask(ji,jj,jk).eq.1) then 1505 !!====================================================================== 1506 !! SETUP LOCAL GRID CELL 1507 !!====================================================================== 1508 !! 1509 !!--------------------------------------------------------------------- 1510 !! Some notes on grid vertical structure 1511 !! - fsdepw(ji,jj,jk) is the depth of the upper surface of level jk 1512 !! - fsde3w(ji,jj,jk) is *approximately* the midpoint of level jk 1513 !! - fse3t(ji,jj,jk) is the thickness of level jk 1514 !!--------------------------------------------------------------------- 1515 !! 1516 !! AXY (11/12/08): set up level thickness 1517 fthk = fse3t(ji,jj,jk) 1518 !! AXY (25/02/10): set up level depth (top of level) 1519 fdep = fsdepw(ji,jj,jk) 1520 !! AXY (01/03/10): set up level depth (bottom of level) 1521 fdep1 = fdep + fthk 1522 !! AXY (28/11/16): local seafloor depth 1523 !! previously mbathy(ji,jj) - 1, now mbathy(ji,jj) 1524 jmbathy = mbathy(ji,jj) 1525 !! 1526 !! set up model tracers 1527 !! negative values of state variables are not allowed to 1528 !! contribute to the calculated fluxes 1529 zchn = max(0.,trn(ji,jj,jk,jpchn)) !! non-diatom chlorophyll 1530 zchd = max(0.,trn(ji,jj,jk,jpchd)) !! diatom chlorophyll 1531 zphn = max(0.,trn(ji,jj,jk,jpphn)) !! non-diatoms 1532 zphd = max(0.,trn(ji,jj,jk,jpphd)) !! diatoms 1533 zpds = max(0.,trn(ji,jj,jk,jppds)) !! diatom silicon 1534 !! AXY (28/01/10): probably need to take account of chl/biomass connection 1535 if (zchn.eq.0.) zphn = 0. 1536 if (zchd.eq.0.) zphd = 0. 1537 if (zphn.eq.0.) zchn = 0. 1538 if (zphd.eq.0.) zchd = 0. 1539 !! AXY (23/01/14): duh - why did I forget diatom silicon? 1540 if (zpds.eq.0.) zphd = 0. 1541 if (zphd.eq.0.) zpds = 0. 1542 zzmi = max(0.,trn(ji,jj,jk,jpzmi)) !! microzooplankton 1543 zzme = max(0.,trn(ji,jj,jk,jpzme)) !! mesozooplankton 1544 zdet = max(0.,trn(ji,jj,jk,jpdet)) !! detrital nitrogen 1545 zdin = max(0.,trn(ji,jj,jk,jpdin)) !! dissolved inorganic nitrogen 1546 zsil = max(0.,trn(ji,jj,jk,jpsil)) !! dissolved silicic acid 1547 zfer = max(0.,trn(ji,jj,jk,jpfer)) !! dissolved "iron" 1548 # if defined key_roam 1549 zdtc = max(0.,trn(ji,jj,jk,jpdtc)) !! detrital carbon 1550 zdic = max(0.,trn(ji,jj,jk,jpdic)) !! dissolved inorganic carbon 1551 zalk = max(0.,trn(ji,jj,jk,jpalk)) !! alkalinity 1552 zoxy = max(0.,trn(ji,jj,jk,jpoxy)) !! oxygen 1553 # if defined key_axy_carbchem && defined key_mocsy 1554 zpho = max(0.,trn(ji,jj,jk,jpdin)) / 16.0 !! phosphate via DIN and Redfield 1555 # endif 1556 !! 1557 !! also need physical parameters for gas exchange calculations 1558 ztmp = tsn(ji,jj,jk,jp_tem) 1559 zsal = tsn(ji,jj,jk,jp_sal) 1560 !! 1561 !! AXY (28/02/14): check input fields 1562 if (ztmp .lt. -3.0 .or. ztmp .gt. 40.0 ) then 1563 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T WARNING 2D, ', & 1564 tsb(ji,jj,jk,jp_tem), tsn(ji,jj,jk,jp_tem), ' at (', & 1565 ji, ',', jj, ',', jk, ') at time', kt 1566 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: T SWITCHING 2D, ', & 1567 tsn(ji,jj,jk,jp_tem), ' -> ', tsb(ji,jj,jk,jp_tem) 1568 ztmp = tsb(ji,jj,jk,jp_tem) !! temperature 1569 endif 1570 if (zsal .lt. 0.0 .or. zsal .gt. 45.0 ) then 1571 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: S WARNING 2D, ', & 1572 tsb(ji,jj,jk,jp_sal), tsn(ji,jj,jk,jp_sal), ' at (', & 1573 ji, ',', jj, ',', jk, ') at time', kt 1574 endif 1508 1575 # else 1509 1576 zdtc = zdet * xthetad !! implicit detrital carbon 1510 1577 # endif 1511 1578 # if defined key_debug_medusa 1512 1513 1514 1515 IF ( lwp) write (numout,*) '------------------------------'1516 IF ( lwp) write (numout,*) 'NEGATIVE DIN ERROR =', trn(ji,jj,jk,jpdin)1517 IF ( lwp) write (numout,*) 'NEGATIVE DIN ERROR @', ji, jj, jk, kt1518 1519 1520 IF ( lwp) write (numout,*) '------------------------------'1521 IF ( lwp) write (numout,*) 'NEGATIVE SIL ERROR =', trn(ji,jj,jk,jpsil)1522 IF ( lwp) write (numout,*) 'NEGATIVE SIL ERROR @', ji, jj, jk, kt1523 1579 if (idf.eq.1) then 1580 !! AXY (15/01/10) 1581 if (trn(ji,jj,jk,jpdin).lt.0.) then 1582 IF (lwp) write (numout,*) '------------------------------' 1583 IF (lwp) write (numout,*) 'NEGATIVE DIN ERROR =', trn(ji,jj,jk,jpdin) 1584 IF (lwp) write (numout,*) 'NEGATIVE DIN ERROR @', ji, jj, jk, kt 1585 endif 1586 if (trn(ji,jj,jk,jpsil).lt.0.) then 1587 IF (lwp) write (numout,*) '------------------------------' 1588 IF (lwp) write (numout,*) 'NEGATIVE SIL ERROR =', trn(ji,jj,jk,jpsil) 1589 IF (lwp) write (numout,*) 'NEGATIVE SIL ERROR @', ji, jj, jk, kt 1590 endif 1524 1591 # if defined key_roam 1525 1526 IF ( lwp) write (numout,*) '------------------------------'1527 IF ( lwp) write (numout,*) 'NEGATIVE DIC ERROR =', trn(ji,jj,jk,jpdic)1528 IF ( lwp) write (numout,*) 'NEGATIVE DIC ERROR @', ji, jj, jk, kt1529 1530 1531 IF ( lwp) write (numout,*) '------------------------------'1532 IF ( lwp) write (numout,*) 'NEGATIVE ALK ERROR =', trn(ji,jj,jk,jpalk)1533 IF ( lwp) write (numout,*) 'NEGATIVE ALK ERROR @', ji, jj, jk, kt1534 1535 1536 IF ( lwp) write (numout,*) '------------------------------'1537 IF ( lwp) write (numout,*) 'NEGATIVE OXY ERROR =', trn(ji,jj,jk,jpoxy)1538 IF ( lwp) write (numout,*) 'NEGATIVE OXY ERROR @', ji, jj, jk, kt1539 1592 if (trn(ji,jj,jk,jpdic).lt.0.) then 1593 IF (lwp) write (numout,*) '------------------------------' 1594 IF (lwp) write (numout,*) 'NEGATIVE DIC ERROR =', trn(ji,jj,jk,jpdic) 1595 IF (lwp) write (numout,*) 'NEGATIVE DIC ERROR @', ji, jj, jk, kt 1596 endif 1597 if (trn(ji,jj,jk,jpalk).lt.0.) then 1598 IF (lwp) write (numout,*) '------------------------------' 1599 IF (lwp) write (numout,*) 'NEGATIVE ALK ERROR =', trn(ji,jj,jk,jpalk) 1600 IF (lwp) write (numout,*) 'NEGATIVE ALK ERROR @', ji, jj, jk, kt 1601 endif 1602 if (trn(ji,jj,jk,jpoxy).lt.0.) then 1603 IF (lwp) write (numout,*) '------------------------------' 1604 IF (lwp) write (numout,*) 'NEGATIVE OXY ERROR =', trn(ji,jj,jk,jpoxy) 1605 IF (lwp) write (numout,*) 'NEGATIVE OXY ERROR @', ji, jj, jk, kt 1606 endif 1540 1607 # endif 1541 endif 1542 # endif 1543 !! sum tracers for inventory checks 1544 IF( lk_iomput ) THEN 1545 IF ( med_diag%INVTN%dgsave ) THEN 1546 ftot_n(ji,jj) = ftot_n(ji,jj) + & 1547 (fthk * ( zphn + zphd + zzmi + zzme + zdet + zdin ) ) 1548 ENDIF 1549 IF ( med_diag%INVTSI%dgsave ) THEN 1550 ftot_si(ji,jj) = ftot_si(ji,jj) + & 1551 (fthk * ( zpds + zsil ) ) 1552 ENDIF 1553 IF ( med_diag%INVTFE%dgsave ) THEN 1554 ftot_fe(ji,jj) = ftot_fe(ji,jj) + & 1555 (fthk * ( xrfn * ( zphn + zphd + zzmi + zzme + zdet ) + zfer ) ) 1556 ENDIF 1608 endif 1609 # endif 1610 # if defined key_debug_medusa 1611 !! report state variable values 1612 if (idf.eq.1.AND.idfval.eq.1) then 1613 IF (lwp) write (numout,*) '------------------------------' 1614 IF (lwp) write (numout,*) 'fthk(',jk,') = ', fthk 1615 IF (lwp) write (numout,*) 'zphn(',jk,') = ', zphn 1616 IF (lwp) write (numout,*) 'zphd(',jk,') = ', zphd 1617 IF (lwp) write (numout,*) 'zpds(',jk,') = ', zpds 1618 IF (lwp) write (numout,*) 'zzmi(',jk,') = ', zzmi 1619 IF (lwp) write (numout,*) 'zzme(',jk,') = ', zzme 1620 IF (lwp) write (numout,*) 'zdet(',jk,') = ', zdet 1621 IF (lwp) write (numout,*) 'zdin(',jk,') = ', zdin 1622 IF (lwp) write (numout,*) 'zsil(',jk,') = ', zsil 1623 IF (lwp) write (numout,*) 'zfer(',jk,') = ', zfer 1624 # if defined key_roam 1625 IF (lwp) write (numout,*) 'zdtc(',jk,') = ', zdtc 1626 IF (lwp) write (numout,*) 'zdic(',jk,') = ', zdic 1627 IF (lwp) write (numout,*) 'zalk(',jk,') = ', zalk 1628 IF (lwp) write (numout,*) 'zoxy(',jk,') = ', zoxy 1629 # endif 1630 endif 1631 # endif 1632 1633 # if defined key_debug_medusa 1634 if (idf.eq.1.AND.idfval.eq.1.AND.jk.eq.1) then 1635 IF (lwp) write (numout,*) '------------------------------' 1636 IF (lwp) write (numout,*) 'dust = ', dust(ji,jj) 1637 endif 1638 # endif 1639 1640 !! sum tracers for inventory checks 1641 IF( lk_iomput ) THEN 1642 IF ( med_diag%INVTN%dgsave ) THEN 1643 ftot_n(ji,jj) = ftot_n(ji,jj) + & 1644 (fthk * ( zphn + zphd + zzmi + zzme + zdet + zdin ) ) 1645 ENDIF 1646 IF ( med_diag%INVTSI%dgsave ) THEN 1647 ftot_si(ji,jj) = ftot_si(ji,jj) + & 1648 (fthk * ( zpds + zsil ) ) 1649 ENDIF 1650 IF ( med_diag%INVTFE%dgsave ) THEN 1651 ftot_fe(ji,jj) = ftot_fe(ji,jj) + & 1652 (fthk * ( xrfn * ( zphn + zphd + zzmi + zzme + zdet ) + zfer ) ) 1653 ENDIF 1557 1654 # if defined key_roam 1558 IF ( med_diag%INVTC%dgsave ) THEN 1559 ftot_c(ji,jj) = ftot_c(ji,jj) + & 1560 (fthk * ( (xthetapn * zphn) + (xthetapd * zphd) + & 1561 (xthetazmi * zzmi) + (xthetazme * zzme) + zdtc + & 1562 zdic ) ) 1563 ENDIF 1564 IF ( med_diag%INVTALK%dgsave ) THEN 1565 ftot_a(ji,jj) = ftot_a(ji,jj) + (fthk * ( zalk ) ) 1566 ENDIF 1567 IF ( med_diag%INVTO2%dgsave ) THEN 1568 ftot_o2(ji,jj) = ftot_o2(ji,jj) + (fthk * ( zoxy ) ) 1569 ENDIF 1570 !! 1571 !! AXY (10/11/16): CMIP6 diagnostics 1572 IF ( med_diag%INTDISSIC%dgsave ) THEN 1573 intdissic(ji,jj) = intdissic(ji,jj) + (fthk * zdic) 1574 ENDIF 1575 IF ( med_diag%INTDISSIN%dgsave ) THEN 1576 intdissin(ji,jj) = intdissin(ji,jj) + (fthk * zdin) 1577 ENDIF 1578 IF ( med_diag%INTDISSISI%dgsave ) THEN 1579 intdissisi(ji,jj) = intdissisi(ji,jj) + (fthk * zsil) 1580 ENDIF 1581 IF ( med_diag%INTTALK%dgsave ) THEN 1582 inttalk(ji,jj) = inttalk(ji,jj) + (fthk * zalk) 1583 ENDIF 1584 IF ( med_diag%O2min%dgsave ) THEN 1585 if ( zoxy < o2min(ji,jj) ) then 1586 o2min(ji,jj) = zoxy 1587 IF ( med_diag%ZO2min%dgsave ) THEN 1588 zo2min(ji,jj) = (fdep + fdep1) / 2. !! layer midpoint 1589 ENDIF 1590 endif 1591 ENDIF 1592 # endif 1593 ENDIF 1594 1595 CALL flush(numout) 1596 1597 !!====================================================================== 1598 !! LOCAL GRID CELL CALCULATIONS 1599 !!====================================================================== 1600 !! 1601 !!====================================================================== 1602 !! AXY (07/04/17): possible subroutine block; air-sea gas exchange 1603 !!====================================================================== 1655 IF ( med_diag%INVTC%dgsave ) THEN 1656 ftot_c(ji,jj) = ftot_c(ji,jj) + & 1657 (fthk * ( (xthetapn * zphn) + (xthetapd * zphd) + & 1658 (xthetazmi * zzmi) + (xthetazme * zzme) + zdtc + & 1659 zdic ) ) 1660 ENDIF 1661 IF ( med_diag%INVTALK%dgsave ) THEN 1662 ftot_a(ji,jj) = ftot_a(ji,jj) + (fthk * ( zalk ) ) 1663 ENDIF 1664 IF ( med_diag%INVTO2%dgsave ) THEN 1665 ftot_o2(ji,jj) = ftot_o2(ji,jj) + (fthk * ( zoxy ) ) 1666 ENDIF 1667 !! 1668 !! AXY (10/11/16): CMIP6 diagnostics 1669 IF ( med_diag%INTDISSIC%dgsave ) THEN 1670 intdissic(ji,jj) = intdissic(ji,jj) + (fthk * zdic) 1671 ENDIF 1672 IF ( med_diag%INTDISSIN%dgsave ) THEN 1673 intdissin(ji,jj) = intdissin(ji,jj) + (fthk * zdin) 1674 ENDIF 1675 IF ( med_diag%INTDISSISI%dgsave ) THEN 1676 intdissisi(ji,jj) = intdissisi(ji,jj) + (fthk * zsil) 1677 ENDIF 1678 IF ( med_diag%INTTALK%dgsave ) THEN 1679 inttalk(ji,jj) = inttalk(ji,jj) + (fthk * zalk) 1680 ENDIF 1681 IF ( med_diag%O2min%dgsave ) THEN 1682 if ( zoxy < o2min(ji,jj) ) then 1683 o2min(ji,jj) = zoxy 1684 IF ( med_diag%ZO2min%dgsave ) THEN 1685 zo2min(ji,jj) = (fdep + fdep1) / 2. !! layer midpoint 1686 ENDIF 1687 endif 1688 ENDIF 1689 # endif 1690 ENDIF 1691 1692 CALL flush(numout) 1693 1694 !!====================================================================== 1695 !! LOCAL GRID CELL CALCULATIONS 1696 !!====================================================================== 1697 !! 1604 1698 # if defined key_roam 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 IF ( lk_oasis) THEN1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1699 if ( jk .eq. 1 ) then 1700 !!---------------------------------------------------------------------- 1701 !! Air-sea gas exchange 1702 !!---------------------------------------------------------------------- 1703 !! 1704 !! AXY (17/07/14): zwind_i and zwind_j do not exist in this 1705 !! version of NEMO because it does not include 1706 !! the SBC changes that our local version has 1707 !! for accessing the HadGEM2 forcing; they 1708 !! could be added, but an alternative approach 1709 !! is to make use of wndm from oce_trc.F90 1710 !! which is wind speed at 10m (which is what 1711 !! is required here; this may need to be 1712 !! revisited when MEDUSA properly interacts 1713 !! with UKESM1 physics 1714 !! 1715 f_wind = wndm(ji,jj) 1716 IF (lk_oasis) THEN 1717 f_xco2a = PCO2a_in_cpl(ji,jj) !! use 2D atm xCO2 from atm coupling 1718 ENDIF 1719 !! 1720 !! AXY (23/06/15): as part of an effort to update the carbonate chemistry 1721 !! in MEDUSA, the gas transfer velocity used in the carbon 1722 !! and oxygen cycles has been harmonised and is calculated 1723 !! by the same function here; this harmonisation includes 1724 !! changes to the PML carbonate chemistry scheme so that 1725 !! it too makes use of the same gas transfer velocity; the 1726 !! preferred parameterisation of this is Wanninkhof (2014), 1727 !! option 7 1728 !! 1635 1729 # if defined key_debug_medusa 1636 IF ( lwp) write (numout,*) 'trc_bio_medusa: entering gas_transfer'1637 CALL flush(numout)1730 IF (lwp) write (numout,*) 'trc_bio_medusa: entering gas_transfer' 1731 CALL flush(numout) 1638 1732 # endif 1639 1640 f_kw660 ) ! outputs1733 CALL gas_transfer( f_wind, 1, 7, & ! inputs 1734 f_kw660 ) ! outputs 1641 1735 # if defined key_debug_medusa 1642 IF ( lwp) write (numout,*) 'trc_bio_medusa: exiting gas_transfer'1643 CALL flush(numout)1736 IF (lwp) write (numout,*) 'trc_bio_medusa: exiting gas_transfer' 1737 CALL flush(numout) 1644 1738 # endif 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1739 !! 1740 !! air pressure (atm); ultimately this will use air pressure at the base 1741 !! of the UKESM1 atmosphere 1742 !! 1743 f_pp0 = 1.0 1744 !! 1745 !! IF(lwp) WRITE(numout,*) ' MEDUSA ztmp =', ztmp 1746 !! IF(lwp) WRITE(numout,*) ' MEDUSA zwind_i =', zwind_i(ji,jj) 1747 !! IF(lwp) WRITE(numout,*) ' MEDUSA zwind_j =', zwind_j(ji,jj) 1748 !! IF(lwp) WRITE(numout,*) ' MEDUSA f_wind =', f_wind 1749 !! IF(lwp) WRITE(numout,*) ' MEDUSA fr_i =', fr_i(ji,jj) 1750 !! 1657 1751 # if defined key_axy_carbchem 1658 !! 1659 !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 1660 !! chemistry package; note that depth is set to 1661 !! zero in this call 1662 CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho, & ! inputs 1663 f_pp0, 0.0, flatx, f_kw660, f_xco2a, 1, & ! inputs 1664 f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj), & ! outputs 1665 f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut, & ! outputs 1666 f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0, & ! outputs 1667 f_co2starair, f_co2flux, f_dpco2 ) ! outputs 1668 !! 1669 f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 1670 f_TALK = (zalk / f_rhosw) * 1000. ! meq / m3 -> ueq / kg 1671 f_dcf = f_rhosw 1752 # if defined key_mocsy 1753 !! 1754 !! AXY (22/06/15): use Orr & Epitalon (2015) MOCSY-2 carbonate 1755 !! chemistry package; note that depth is set to 1756 !! zero in this call 1757 CALL mocsy_interface( ztmp, zsal, zalk, zdic, zsil, zpho, & ! inputs 1758 f_pp0, 0.0, gphit(ji,jj), f_kw660, f_xco2a, 1, & ! inputs 1759 f_ph, f_pco2w, f_fco2w, f_h2co3, f_hco3, f_co3, f_omarg(ji,jj), & ! outputs 1760 f_omcal(ji,jj), f_BetaD, f_rhosw, f_opres, f_insitut, & ! outputs 1761 f_pco2atm, f_fco2atm, f_schmidtco2, f_kwco2, f_K0, & ! outputs 1762 f_co2starair, f_co2flux, f_dpco2 ) ! outputs 1763 !! 1764 f_TDIC = (zdic / f_rhosw) * 1000. ! mmol / m3 -> umol / kg 1765 f_TALK = (zalk / f_rhosw) * 1000. ! meq / m3 -> ueq / kg 1766 f_dcf = f_rhosw 1767 # else 1768 iters = 0 1769 !! 1770 !! carbon dioxide (CO2); Jerry Blackford code (ostensibly OCMIP-2, but not) 1771 CALL trc_co2_medusa( ztmp, zsal, zdic, zalk, 0.0, f_kw660, f_xco2a, & ! inputs 1772 f_ph, f_pco2w, f_h2co3, f_hco3, f_co3, f_omcal(ji,jj), & ! outputs 1773 f_omarg(ji,jj), f_co2flux, f_TDIC, f_TALK, f_dcf, f_henry, iters ) ! outputs 1774 !! 1775 !! AXY (09/01/14): removed iteration and NaN checks; these have 1776 !! been moved to trc_co2_medusa together with a 1777 !! fudge that amends erroneous values (this is 1778 !! intended to be a temporary fudge!); the 1779 !! output warnings are retained here so that 1780 !! failure position can be determined 1781 if (iters .eq. 25) then 1782 IF(lwp) WRITE(numout,*) ' trc_bio_medusa: ITERS WARNING, ', & 1783 iters, ' AT (', ji, ', ', jj, ', ', jk, ') AT ', kt 1784 endif 1785 # endif 1672 1786 # else 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1787 !! AXY (18/04/13): switch off carbonate chemistry calculations; provide 1788 !! quasi-sensible alternatives 1789 f_ph = 8.1 1790 f_pco2w = f_xco2a 1791 f_h2co3 = 0.005 * zdic 1792 f_hco3 = 0.865 * zdic 1793 f_co3 = 0.130 * zdic 1794 f_omcal(ji,jj) = 4. 1795 f_omarg(ji,jj) = 2. 1796 f_co2flux = 0. 1797 f_TDIC = zdic 1798 f_TALK = zalk 1799 f_dcf = 1.026 1800 f_henry = 1. 1801 !! AXY (23/06/15): add in some extra MOCSY diagnostics 1802 f_fco2w = f_xco2a 1803 f_BetaD = 1. 1804 f_rhosw = 1.026 1805 f_opres = 0. 1806 f_insitut = ztmp 1807 f_pco2atm = f_xco2a 1808 f_fco2atm = f_xco2a 1809 f_schmidtco2 = 660. 1810 f_kwco2 = 0. 1811 f_K0 = 0. 1812 f_co2starair = f_xco2a 1813 f_dpco2 = 0. 1700 1814 # endif 1701 !! 1702 !! mmol/m2/s -> mmol/m3/d; correct for sea-ice; divide through by layer thickness 1703 f_co2flux = (1. - fr_i(ji,jj)) * f_co2flux * 86400. / fthk 1704 !! 1705 !! oxygen (O2); OCMIP-2 code 1706 !! AXY (23/06/15): amend input list for oxygen to account for common gas 1707 !! transfer velocity 1708 !! CALL trc_oxy_medusa( ztmp, zsal, f_uwind, f_vwind, f_pp0, zoxy / 1000., fthk, & ! inputs 1709 !! f_kw660, f_o2flux, f_o2sat ) ! outputs 1710 CALL trc_oxy_medusa( ztmp, zsal, f_kw660, f_pp0, zoxy, & ! inputs 1711 f_kwo2, f_o2flux, f_o2sat ) ! outputs 1712 !! 1713 !! mmol/m2/s -> mol/m3/d; correct for sea-ice; divide through by layer thickness 1714 f_o2flux = (1. - fr_i(ji,jj)) * f_o2flux * 86400. / fthk 1715 !! 1716 !! Jpalm (08-2014) 1717 !! DMS surface concentration calculation; initialy added using MET-OFFICE subroutine 1718 !! air-sea flux calculated in atmospheric chemistry from atm and ocn concentrations 1719 !! 1720 !! AXY (13/03/15): this is amended to calculate all of the DMS 1721 !! estimates examined during UKESM1 (see comments 1722 !! in trcdms_medusa.F90) 1723 !! 1724 !! AXY (28/03/17): amended to pass DIN limitation instead of DIN concentration; 1725 !! accounts for differences in nutrient half-saturations; changes 1726 !! also made in trc_dms_medusa 1727 !! 1728 IF (jdms .eq. 1) THEN 1729 !! 1730 !! calculate weighted half-saturation for DIN uptake 1731 dms_wtkn = ((zphn * xnln) + (zphd * xnld)) / (zphn + zphd) 1732 !! 1733 !! feed in correct inputs 1734 if (jdms_input .eq. 0) then 1735 !! use instantaneous inputs 1736 dms_nlim = zdin / (zdin + dms_wtkn) 1737 !! 1738 CALL trc_dms_medusa( zchn, zchd, hmld(ji,jj), qsr(ji,jj), dms_nlim, & ! inputs 1739 dms_andr, dms_simo, dms_aran, dms_hall ) ! outputs 1740 else 1741 !! use diel-average inputs 1742 dms_nlim = zn_dms_din(ji,jj) / (zn_dms_din(ji,jj) + dms_wtkn) 1743 !! 1744 CALL trc_dms_medusa( zn_dms_chn(ji,jj), zn_dms_chd(ji,jj), & ! inputs 1745 zn_dms_mld(ji,jj), zn_dms_qsr(ji,jj), dms_nlim, & ! inputs 1746 dms_andr, dms_simo, dms_aran, dms_hall ) ! outputs 1747 endif 1748 !! 1749 !! assign correct output to variable passed to atmosphere 1750 if (jdms_model .eq. 1) then 1751 dms_surf = dms_andr 1752 elseif (jdms_model .eq. 2) then 1753 dms_surf = dms_simo 1754 elseif (jdms_model .eq. 3) then 1755 dms_surf = dms_aran 1756 elseif (jdms_model .eq. 4) then 1757 dms_surf = dms_hall 1758 endif 1759 !! 1760 !! 2D diag through iom_use 1761 IF( lk_iomput ) THEN 1762 IF( med_diag%DMS_SURF%dgsave ) THEN 1763 dms_surf2d(ji,jj) = dms_surf 1764 ENDIF 1765 IF( med_diag%DMS_ANDR%dgsave ) THEN 1766 dms_andr2d(ji,jj) = dms_andr 1767 ENDIF 1768 IF( med_diag%DMS_SIMO%dgsave ) THEN 1769 dms_simo2d(ji,jj) = dms_simo 1770 ENDIF 1771 IF( med_diag%DMS_ARAN%dgsave ) THEN 1772 dms_aran2d(ji,jj) = dms_aran 1773 ENDIF 1774 IF( med_diag%DMS_HALL%dgsave ) THEN 1775 dms_hall2d(ji,jj) = dms_hall 1776 ENDIF 1815 !! 1816 !! mmol/m2/s -> mmol/m3/d; correct for sea-ice; divide through by layer thickness 1817 f_co2flux = (1. - fr_i(ji,jj)) * f_co2flux * 86400. / fthk 1818 !! 1819 !! oxygen (O2); OCMIP-2 code 1820 !! AXY (23/06/15): amend input list for oxygen to account for common gas 1821 !! transfer velocity 1822 !! CALL trc_oxy_medusa( ztmp, zsal, f_uwind, f_vwind, f_pp0, zoxy / 1000., fthk, & ! inputs 1823 !! f_kw660, f_o2flux, f_o2sat ) ! outputs 1824 CALL trc_oxy_medusa( ztmp, zsal, f_kw660, f_pp0, zoxy, & ! inputs 1825 f_kwo2, f_o2flux, f_o2sat ) ! outputs 1826 !! 1827 !! mmol/m2/s -> mol/m3/d; correct for sea-ice; divide through by layer thickness 1828 f_o2flux = (1. - fr_i(ji,jj)) * f_o2flux * 86400. / fthk 1829 !! 1830 !! Jpalm (08-2014) 1831 !! DMS surface concentration calculation 1832 !! initialy added for UKESM1 model. 1833 !! using MET-OFFICE subroutine. 1834 !! DMS module only needs Chl concentration and MLD 1835 !! to get an aproximate value of DMS concentration. 1836 !! air-sea fluxes are calculated by atmospheric chemitry model 1837 !! from atm and oc-surface concentrations. 1838 !! 1839 !! AXY (13/03/15): this is amended to calculate all of the DMS 1840 !! estimates examined during UKESM1 (see comments 1841 !! in trcdms_medusa.F90) 1842 !! 1843 IF (jdms .eq. 1) THEN 1844 !! 1845 !! feed in correct inputs 1846 if (jdms_input .eq. 0) then 1847 !! use instantaneous inputs 1848 CALL trc_dms_medusa( zchn, zchd, hmld(ji,jj), qsr(ji,jj), zdin, & ! inputs 1849 dms_andr, dms_simo, dms_aran, dms_hall ) ! outputs 1850 else 1851 !! use diel-average inputs 1852 CALL trc_dms_medusa( zn_dms_chn(ji,jj), zn_dms_chd(ji,jj), & ! inputs 1853 zn_dms_mld(ji,jj), zn_dms_qsr(ji,jj), zn_dms_din(ji,jj), & ! inputs 1854 dms_andr, dms_simo, dms_aran, dms_hall ) ! outputs 1855 endif 1856 !! 1857 !! assign correct output to variable passed to atmosphere 1858 if (jdms_model .eq. 1) then 1859 dms_surf = dms_andr 1860 elseif (jdms_model .eq. 2) then 1861 dms_surf = dms_simo 1862 elseif (jdms_model .eq. 3) then 1863 dms_surf = dms_aran 1864 elseif (jdms_model .eq. 4) then 1865 dms_surf = dms_hall 1866 endif 1867 !! 1868 !! 2D diag through iom_use 1869 IF( lk_iomput ) THEN 1870 IF( med_diag%DMS_SURF%dgsave ) THEN 1871 dms_surf2d(ji,jj) = dms_surf 1872 ENDIF 1873 IF( med_diag%DMS_ANDR%dgsave ) THEN 1874 dms_andr2d(ji,jj) = dms_andr 1875 ENDIF 1876 IF( med_diag%DMS_SIMO%dgsave ) THEN 1877 dms_simo2d(ji,jj) = dms_simo 1878 ENDIF 1879 IF( med_diag%DMS_ARAN%dgsave ) THEN 1880 dms_aran2d(ji,jj) = dms_aran 1881 ENDIF 1882 IF( med_diag%DMS_HALL%dgsave ) THEN 1883 dms_hall2d(ji,jj) = dms_hall 1884 ENDIF 1777 1885 # if defined key_debug_medusa 1778 IF ( lwp) write (numout,*) 'trc_bio_medusa: finish calculating dms'1779 1886 IF (lwp) write (numout,*) 'trc_bio_medusa: finish calculating dms' 1887 CALL flush(numout) 1780 1888 # endif 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 !! convert from mol/m2/day to kg/m2/s1792 fgco2(ji,jj) = f_co2flux * fthk * CO2flux_conv !! mmol-C/m3/d -> kg-CO2/m2/s1793 1794 1889 ENDIF 1890 !! End iom 1891 ENDIF 1892 !! End DMS Loop 1893 !! 1894 !! store 2D outputs 1895 !! 1896 !! JPALM -- 17-11-16 -- put fgco2 out of diag request 1897 !! is needed for coupling; pass through restart 1898 !! IF( med_diag%FGCO2%dgsave ) THEN 1899 !! convert from mol/m2/day to kg/m2/s 1900 fgco2(ji,jj) = f_co2flux * fthk * CO2flux_conv !! mmol-C/m3/d -> kg-CO2/m2/s 1901 !! ENDIF 1902 IF ( lk_iomput ) THEN 1795 1903 IF( med_diag%ATM_PCO2%dgsave ) THEN 1796 1904 f_pco2a2d(ji,jj) = f_pco2atm … … 1848 1956 f_ocndpco2_2d(ji,jj) = f_dpco2 1849 1957 ENDIF 1850 ENDIF 1851 !! 1852 endif 1853 !! End jk = 1 loop within ROAM key 1854 1855 !! AXY (11/11/16): CMIP6 oxygen saturation 3D diagnostic 1856 IF ( med_diag%O2SAT3%dgsave ) THEN 1857 call oxy_sato( ztmp, zsal, f_o2sat3 ) 1858 o2sat3(ji, jj, jk) = f_o2sat3 1859 ENDIF 1860 1861 # endif 1862 1863 !!====================================================================== 1864 !! AXY (07/04/17): possible subroutine block; riverine inputs (or delete; it's unused presently) 1865 !!====================================================================== 1866 if ( jk .eq. 1 ) then 1867 !!---------------------------------------------------------------------- 1868 !! River inputs 1869 !!---------------------------------------------------------------------- 1870 !! 1871 !! runoff comes in as kg / m2 / s 1872 !! used and written out as m3 / m2 / d (= m / d) 1873 !! where 1000 kg / m2 / d = 1 m3 / m2 / d = 1 m / d 1874 !! 1875 !! AXY (17/07/14): the compiler doesn't like this line for some reason; 1876 !! as MEDUSA doesn't even use runoff for riverine inputs, 1877 !! a temporary solution is to switch off runoff entirely 1878 !! here; again, this change is one of several that will 1879 !! need revisiting once MEDUSA has bedded down in UKESM1; 1880 !! particularly so if the land scheme provides information 1881 !! concerning nutrient fluxes 1882 !! 1883 !! f_runoff(ji,jj) = sf_rnf(1)%fnow(ji,jj,1) / 1000. * 60. * 60. * 24. 1884 f_runoff(ji,jj) = 0.0 1885 !! 1886 !! nutrients are added via rivers to the model in one of two ways: 1887 !! 1. via river concentration; i.e. the average nutrient concentration 1888 !! of a river water is described by a spatial file, and this is 1889 !! multiplied by runoff to give a nutrient flux 1890 !! 2. via direct river flux; i.e. the average nutrient flux due to 1891 !! rivers is described by a spatial file, and this is simply applied 1892 !! as a direct nutrient flux (i.e. it does not relate or respond to 1893 !! model runoff) 1894 !! nutrient fields are derived from the GlobalNEWS 2 database; carbon and 1895 !! alkalinity are derived from continent-scale DIC estimates (Huang et al., 1896 !! 2012) and some Arctic river alkalinity estimates (Katya?) 1897 !! 1898 !! as of 19/07/12, riverine nutrients can now be spread vertically across 1899 !! several grid cells rather than just poured into the surface box; this 1900 !! block of code is still executed, however, to set up the total amounts 1901 !! of nutrient entering via rivers 1902 !! 1903 !! nitrogen 1904 if (jriver_n .eq. 1) then 1905 !! river concentration specified; use runoff to calculate input 1906 f_riv_n(ji,jj) = f_runoff(ji,jj) * riv_n(ji,jj) 1907 elseif (jriver_n .eq. 2) then 1908 !! river flux specified; independent of runoff 1909 f_riv_n(ji,jj) = riv_n(ji,jj) 1910 endif 1911 !! 1912 !! silicon 1913 if (jriver_si .eq. 1) then 1914 !! river concentration specified; use runoff to calculate input 1915 f_riv_si(ji,jj) = f_runoff(ji,jj) * riv_si(ji,jj) 1916 elseif (jriver_si .eq. 2) then 1917 !! river flux specified; independent of runoff 1918 f_riv_si(ji,jj) = riv_si(ji,jj) 1919 endif 1920 !! 1921 !! carbon 1922 if (jriver_c .eq. 1) then 1923 !! river concentration specified; use runoff to calculate input 1924 f_riv_c(ji,jj) = f_runoff(ji,jj) * riv_c(ji,jj) 1925 elseif (jriver_c .eq. 2) then 1926 !! river flux specified; independent of runoff 1927 f_riv_c(ji,jj) = riv_c(ji,jj) 1928 endif 1929 !! 1930 !! alkalinity 1931 if (jriver_alk .eq. 1) then 1932 !! river concentration specified; use runoff to calculate input 1933 f_riv_alk(ji,jj) = f_runoff(ji,jj) * riv_alk(ji,jj) 1934 elseif (jriver_alk .eq. 2) then 1935 !! river flux specified; independent of runoff 1936 f_riv_alk(ji,jj) = riv_alk(ji,jj) 1937 endif 1938 1939 endif 1940 1941 !!====================================================================== 1942 !! AXY (07/04/17): possible subroutine block; phytoplankton growth 1943 !!====================================================================== 1944 1945 !!---------------------------------------------------------------------- 1946 !! Chlorophyll calculations 1947 !!---------------------------------------------------------------------- 1948 !! 1949 !! non-diatoms 1950 if (zphn.GT.rsmall) then 1951 fthetan = max(tiny(zchn), (zchn * xxi) / (zphn + tiny(zphn))) 1952 faln = xaln * fthetan 1953 else 1954 fthetan = 0. 1955 faln = 0. 1956 endif 1957 !! 1958 !! diatoms 1959 if (zphd.GT.rsmall) then 1960 fthetad = max(tiny(zchd), (zchd * xxi) / (zphd + tiny(zphd))) 1961 fald = xald * fthetad 1962 else 1963 fthetad = 0. 1964 fald = 0. 1965 endif 1966 1967 !!---------------------------------------------------------------------- 1968 !! Phytoplankton light limitation 1969 !!---------------------------------------------------------------------- 1970 !! 1971 !! It is assumed xpar is the depth-averaged (vertical layer) PAR 1972 !! Light limitation (check self-shading) in W/m2 1973 !! 1974 !! Note that there is no temperature dependence in phytoplankton 1975 !! growth rate or any other function. 1976 !! In calculation of Chl/Phy ratio tiny(phyto) is introduced to avoid 1977 !! NaNs in case of Phy==0. 1978 !! 1979 !! fthetad and fthetan are Chl:C ratio (gChl/gC) in diat and non-diat: 1980 !! for 1:1 Chl:P ratio (mgChl/mmolN) theta=0.012 1981 !! 1982 !! AXY (16/07/09) 1983 !! temperature for new Eppley style phytoplankton growth 1984 loc_T = tsn(ji,jj,jk,jp_tem) 1985 fun_T = 1.066**(1.0 * loc_T) 1986 !! AXY (16/05/11): add in new Q10 (1.5, not 2.0) for 1987 !phytoplankton 1988 !! growth; remin. unaffected 1989 fun_Q10 = xq10**((loc_T - 0.0) / 10.0) 1990 if (jphy.eq.1) then 1991 xvpnT = xvpn * fun_T 1992 xvpdT = xvpd * fun_T 1993 elseif (jphy.eq.2) then 1994 xvpnT = xvpn * fun_Q10 1995 xvpdT = xvpd * fun_Q10 1996 else 1997 xvpnT = xvpn 1998 xvpdT = xvpd 1999 endif 2000 !! 2001 !! non-diatoms 2002 fchn1 = (xvpnT * xvpnT) + (faln * faln * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 2003 if (fchn1.GT.rsmall) then 2004 fchn = xvpnT / (sqrt(fchn1) + tiny(fchn1)) 2005 else 2006 fchn = 0. 2007 endif 2008 fjln = fchn * faln * xpar(ji,jj,jk) !! non-diatom J term 2009 fjlim_pn = fjln / xvpnT 2010 !! 2011 !! diatoms 2012 fchd1 = (xvpdT * xvpdT) + (fald * fald * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 2013 if (fchd1.GT.rsmall) then 2014 fchd = xvpdT / (sqrt(fchd1) + tiny(fchd1)) 2015 else 2016 fchd = 0. 2017 endif 2018 fjld = fchd * fald * xpar(ji,jj,jk) !! diatom J term 2019 fjlim_pd = fjld / xvpdT 2020 2021 !!---------------------------------------------------------------------- 2022 !! Phytoplankton nutrient limitation 2023 !!---------------------------------------------------------------------- 2024 !! 2025 !! non-diatoms (N, Fe) 2026 fnln = zdin / (zdin + xnln) !! non-diatom Qn term 2027 ffln = zfer / (zfer + xfln) !! non-diatom Qf term 2028 !! 2029 !! diatoms (N, Si, Fe) 2030 fnld = zdin / (zdin + xnld) !! diatom Qn term 2031 fsld = zsil / (zsil + xsld) !! diatom Qs term 2032 ffld = zfer / (zfer + xfld) !! diatom Qf term 2033 2034 !!---------------------------------------------------------------------- 2035 !! Primary production (non-diatoms) 2036 !! (note: still needs multiplying by phytoplankton concentration) 2037 !!---------------------------------------------------------------------- 2038 !! 2039 if (jliebig .eq. 0) then 2040 !! multiplicative nutrient limitation 2041 fpnlim = fnln * ffln 2042 elseif (jliebig .eq. 1) then 2043 !! Liebig Law (= most limiting) nutrient limitation 2044 fpnlim = min(fnln, ffln) 2045 endif 2046 fprn = fjln * fpnlim 2047 2048 !!---------------------------------------------------------------------- 2049 !! Primary production (diatoms) 2050 !! (note: still needs multiplying by phytoplankton concentration) 2051 !! 2052 !! production here is split between nitrogen production and that of 2053 !! silicon; depending upon the "intracellular" ratio of Si:N, model 2054 !! diatoms will uptake nitrogen/silicon differentially; this borrows 2055 !! from the diatom model of Mongin et al. (2006) 2056 !!---------------------------------------------------------------------- 2057 !! 2058 if (jliebig .eq. 0) then 2059 !! multiplicative nutrient limitation 2060 fpdlim = fnld * ffld 2061 elseif (jliebig .eq. 1) then 2062 !! Liebig Law (= most limiting) nutrient limitation 2063 fpdlim = min(fnld, ffld) 2064 endif 2065 !! 2066 if (zphd.GT.rsmall .AND. zpds.GT.rsmall) then 2067 !! "intracellular" elemental ratios 2068 ! fsin = zpds / (zphd + tiny(zphd)) 2069 ! fnsi = zphd / (zpds + tiny(zpds)) 2070 fsin = 0.0 2071 IF( zphd .GT. rsmall) fsin = zpds / zphd 2072 fnsi = 0.0 2073 IF( zpds .GT. rsmall) fnsi = zphd / zpds 2074 !! AXY (23/02/10): these next variables derive from Mongin et al. (2003) 2075 fsin1 = 3.0 * xsin0 !! = 0.6 2076 fnsi1 = 1.0 / fsin1 !! = 1.667 2077 fnsi2 = 1.0 / xsin0 !! = 5.0 2078 !! 2079 !! conditionalities based on ratios 2080 !! nitrogen (and iron and carbon) 2081 if (fsin.le.xsin0) then 2082 fprd = 0.0 2083 fsld2 = 0.0 2084 elseif (fsin.lt.fsin1) then 2085 fprd = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) * (fjld * fpdlim) 2086 fsld2 = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) 2087 elseif (fsin.ge.fsin1) then 2088 fprd = (fjld * fpdlim) 2089 fsld2 = 1.0 2090 endif 2091 !! 2092 !! silicon 2093 if (fsin.lt.fnsi1) then 2094 fprds = (fjld * fsld) 2095 elseif (fsin.lt.fnsi2) then 2096 fprds = xuif * ((fnsi - xnsi0) / (fnsi + tiny(fnsi))) * (fjld * fsld) 2097 else 2098 fprds = 0.0 2099 endif 2100 else 2101 fsin = 0.0 2102 fnsi = 0.0 2103 fprd = 0.0 2104 fsld2 = 0.0 2105 fprds = 0.0 2106 endif 2107 2108 !!---------------------------------------------------------------------- 2109 !! Mixed layer primary production 2110 !! this block calculates the amount of primary production that occurs 2111 !! within the upper mixed layer; this allows the separate diagnosis 2112 !! of "sub-surface" primary production; it does assume that short- 2113 !! term variability in mixed layer depth doesn't mess with things 2114 !! though 2115 !!---------------------------------------------------------------------- 2116 !! 2117 if (fdep1.le.hmld(ji,jj)) then 2118 !! this level is entirely in the mixed layer 2119 fq0 = 1.0 2120 elseif (fdep.ge.hmld(ji,jj)) then 2121 !! this level is entirely below the mixed layer 2122 fq0 = 0.0 2123 else 2124 !! this level straddles the mixed layer 2125 fq0 = (hmld(ji,jj) - fdep) / fthk 2126 endif 2127 !! 2128 fprn_ml(ji,jj) = fprn_ml(ji,jj) + (fprn * zphn * fthk * fq0) 2129 fprd_ml(ji,jj) = fprd_ml(ji,jj) + (fprd * zphd * fthk * fq0) 2130 2131 !!---------------------------------------------------------------------- 2132 !! Vertical Integral -- 2133 !!---------------------------------------------------------------------- 2134 ftot_pn(ji,jj) = ftot_pn(ji,jj) + (zphn * fthk) !! vertical integral non-diatom phytoplankton 2135 ftot_pd(ji,jj) = ftot_pd(ji,jj) + (zphd * fthk) !! vertical integral diatom phytoplankton 2136 ftot_zmi(ji,jj) = ftot_zmi(ji,jj) + (zzmi * fthk) !! vertical integral microzooplankton 2137 ftot_zme(ji,jj) = ftot_zme(ji,jj) + (zzme * fthk) !! vertical integral mesozooplankton 2138 ftot_det(ji,jj) = ftot_det(ji,jj) + (zdet * fthk) !! vertical integral slow detritus, nitrogen 2139 ftot_dtc(ji,jj) = ftot_dtc(ji,jj) + (zdtc * fthk) !! vertical integral slow detritus, carbon 2140 2141 !!---------------------------------------------------------------------- 2142 !! More chlorophyll calculations 2143 !!---------------------------------------------------------------------- 2144 !! 2145 !! frn = (xthetam / fthetan) * (fprn / (fthetan * xpar(ji,jj,jk))) 2146 !! frd = (xthetam / fthetad) * (fprd / (fthetad * xpar(ji,jj,jk))) 2147 frn = (xthetam * fchn * fnln * ffln ) / (fthetan + tiny(fthetan)) 2148 !! AXY (12/05/09): there's potentially a problem here; fsld, silicic acid 2149 !! limitation, is used in the following line to regulate chlorophyll 2150 !! growth in a manner that is inconsistent with its use in the regulation 2151 !! of biomass growth; the Mongin term term used in growth is more complex 2152 !! than the simple multiplicative function used below 2153 !! frd = (xthetam * fchd * fnld * ffld * fsld) / (fthetad + tiny(fthetad)) 2154 !! AXY (12/05/09): this replacement line uses the new variable, fsld2, to 2155 !! regulate chlorophyll growth 2156 frd = (xthetamd * fchd * fnld * ffld * fsld2) / (fthetad + tiny(fthetad)) 2157 2158 !!====================================================================== 2159 !! AXY (07/04/17): possible subroutine block; zooplankton grazing 2160 !!====================================================================== 2161 2162 !!---------------------------------------------------------------------- 2163 !! Zooplankton Grazing 2164 !! this code supplements the base grazing model with one that 2165 !! considers the C:N ratio of grazed food and balances this against 2166 !! the requirements of zooplankton growth; this model is derived 2167 !! from that of Anderson & Pondaven (2003) 2168 !! 2169 !! the current version of the code assumes a fixed C:N ratio for 2170 !! detritus (in contrast to Anderson & Pondaven, 2003), though the 2171 !! full equations are retained for future extension 2172 !!---------------------------------------------------------------------- 2173 !! 2174 !!---------------------------------------------------------------------- 2175 !! Microzooplankton first 2176 !!---------------------------------------------------------------------- 2177 !! 2178 fmi1 = (xkmi * xkmi) + (xpmipn * zphn * zphn) + (xpmid * zdet * zdet) 2179 fmi = xgmi * zzmi / fmi1 2180 fgmipn = fmi * xpmipn * zphn * zphn !! grazing on non-diatoms 2181 fgmid = fmi * xpmid * zdet * zdet !! grazing on detrital nitrogen 1958 ENDIF 1959 !! 1960 endif 1961 !! End jk = 1 loop within ROAM key 1962 1963 !! AXY (11/11/16): CMIP6 oxygen saturation 3D diagnostic 1964 IF ( med_diag%O2SAT3%dgsave ) THEN 1965 call oxy_sato( ztmp, zsal, f_o2sat3 ) 1966 o2sat3(ji, jj, jk) = f_o2sat3 1967 ENDIF 1968 1969 # endif 1970 1971 if ( jk .eq. 1 ) then 1972 !!---------------------------------------------------------------------- 1973 !! River inputs 1974 !!---------------------------------------------------------------------- 1975 !! 1976 !! runoff comes in as kg / m2 / s 1977 !! used and written out as m3 / m2 / d (= m / d) 1978 !! where 1000 kg / m2 / d = 1 m3 / m2 / d = 1 m / d 1979 !! 1980 !! AXY (17/07/14): the compiler doesn't like this line for some reason; 1981 !! as MEDUSA doesn't even use runoff for riverine inputs, 1982 !! a temporary solution is to switch off runoff entirely 1983 !! here; again, this change is one of several that will 1984 !! need revisiting once MEDUSA has bedded down in UKESM1; 1985 !! particularly so if the land scheme provides information 1986 !! concerning nutrient fluxes 1987 !! 1988 !! f_runoff(ji,jj) = sf_rnf(1)%fnow(ji,jj,1) / 1000. * 60. * 60. * 24. 1989 f_runoff(ji,jj) = 0.0 1990 !! 1991 !! nutrients are added via rivers to the model in one of two ways: 1992 !! 1. via river concentration; i.e. the average nutrient concentration 1993 !! of a river water is described by a spatial file, and this is 1994 !! multiplied by runoff to give a nutrient flux 1995 !! 2. via direct river flux; i.e. the average nutrient flux due to 1996 !! rivers is described by a spatial file, and this is simply applied 1997 !! as a direct nutrient flux (i.e. it does not relate or respond to 1998 !! model runoff) 1999 !! nutrient fields are derived from the GlobalNEWS 2 database; carbon and 2000 !! alkalinity are derived from continent-scale DIC estimates (Huang et al., 2001 !! 2012) and some Arctic river alkalinity estimates (Katya?) 2002 !! 2003 !! as of 19/07/12, riverine nutrients can now be spread vertically across 2004 !! several grid cells rather than just poured into the surface box; this 2005 !! block of code is still executed, however, to set up the total amounts 2006 !! of nutrient entering via rivers 2007 !! 2008 !! nitrogen 2009 if (jriver_n .eq. 1) then 2010 !! river concentration specified; use runoff to calculate input 2011 f_riv_n(ji,jj) = f_runoff(ji,jj) * riv_n(ji,jj) 2012 elseif (jriver_n .eq. 2) then 2013 !! river flux specified; independent of runoff 2014 f_riv_n(ji,jj) = riv_n(ji,jj) 2015 endif 2016 !! 2017 !! silicon 2018 if (jriver_si .eq. 1) then 2019 !! river concentration specified; use runoff to calculate input 2020 f_riv_si(ji,jj) = f_runoff(ji,jj) * riv_si(ji,jj) 2021 elseif (jriver_si .eq. 2) then 2022 !! river flux specified; independent of runoff 2023 f_riv_si(ji,jj) = riv_si(ji,jj) 2024 endif 2025 !! 2026 !! carbon 2027 if (jriver_c .eq. 1) then 2028 !! river concentration specified; use runoff to calculate input 2029 f_riv_c(ji,jj) = f_runoff(ji,jj) * riv_c(ji,jj) 2030 elseif (jriver_c .eq. 2) then 2031 !! river flux specified; independent of runoff 2032 f_riv_c(ji,jj) = riv_c(ji,jj) 2033 endif 2034 !! 2035 !! alkalinity 2036 if (jriver_alk .eq. 1) then 2037 !! river concentration specified; use runoff to calculate input 2038 f_riv_alk(ji,jj) = f_runoff(ji,jj) * riv_alk(ji,jj) 2039 elseif (jriver_alk .eq. 2) then 2040 !! river flux specified; independent of runoff 2041 f_riv_alk(ji,jj) = riv_alk(ji,jj) 2042 endif 2043 2044 endif 2045 2046 !!---------------------------------------------------------------------- 2047 !! Chlorophyll calculations 2048 !!---------------------------------------------------------------------- 2049 !! 2050 !! non-diatoms 2051 if (zphn.GT.rsmall) then 2052 fthetan = max(tiny(zchn), (zchn * xxi) / (zphn + tiny(zphn))) 2053 faln = xaln * fthetan 2054 else 2055 fthetan = 0. 2056 faln = 0. 2057 endif 2058 !! 2059 !! diatoms 2060 if (zphd.GT.rsmall) then 2061 fthetad = max(tiny(zchd), (zchd * xxi) / (zphd + tiny(zphd))) 2062 fald = xald * fthetad 2063 else 2064 fthetad = 0. 2065 fald = 0. 2066 endif 2067 2068 # if defined key_debug_medusa 2069 !! report biological calculations 2070 if (idf.eq.1.AND.idfval.eq.1) then 2071 IF (lwp) write (numout,*) '------------------------------' 2072 IF (lwp) write (numout,*) 'faln(',jk,') = ', faln 2073 IF (lwp) write (numout,*) 'fald(',jk,') = ', fald 2074 endif 2075 # endif 2076 2077 !!---------------------------------------------------------------------- 2078 !! Phytoplankton light limitation 2079 !!---------------------------------------------------------------------- 2080 !! 2081 !! It is assumed xpar is the depth-averaged (vertical layer) PAR 2082 !! Light limitation (check self-shading) in W/m2 2083 !! 2084 !! Note that there is no temperature dependence in phytoplankton 2085 !! growth rate or any other function. 2086 !! In calculation of Chl/Phy ratio tiny(phyto) is introduced to avoid 2087 !! NaNs in case of Phy==0. 2088 !! 2089 !! fthetad and fthetan are Chl:C ratio (gChl/gC) in diat and non-diat: 2090 !! for 1:1 Chl:P ratio (mgChl/mmolN) theta=0.012 2091 !! 2092 !! AXY (16/07/09) 2093 !! temperature for new Eppley style phytoplankton growth 2094 loc_T = tsn(ji,jj,jk,jp_tem) 2095 fun_T = 1.066**(1.0 * loc_T) 2096 !! AXY (16/05/11): add in new Q10 (1.5, not 2.0) for 2097 !phytoplankton 2098 !! growth; remin. unaffected 2099 fun_Q10 = jq10**((loc_T - 0.0) / 10.0) 2100 if (jphy.eq.1) then 2101 xvpnT = xvpn * fun_T 2102 xvpdT = xvpd * fun_T 2103 elseif (jphy.eq.2) then 2104 xvpnT = xvpn * fun_Q10 2105 xvpdT = xvpd * fun_Q10 2106 else 2107 xvpnT = xvpn 2108 xvpdT = xvpd 2109 endif 2110 !! 2111 !! non-diatoms 2112 fchn1 = (xvpnT * xvpnT) + (faln * faln * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 2113 if (fchn1.GT.rsmall) then 2114 fchn = xvpnT / (sqrt(fchn1) + tiny(fchn1)) 2115 else 2116 fchn = 0. 2117 endif 2118 fjln = fchn * faln * xpar(ji,jj,jk) !! non-diatom J term 2119 fjlim_pn = fjln / xvpnT 2120 !! 2121 !! diatoms 2122 fchd1 = (xvpdT * xvpdT) + (fald * fald * xpar(ji,jj,jk) * xpar(ji,jj,jk)) 2123 if (fchd1.GT.rsmall) then 2124 fchd = xvpdT / (sqrt(fchd1) + tiny(fchd1)) 2125 else 2126 fchd = 0. 2127 endif 2128 fjld = fchd * fald * xpar(ji,jj,jk) !! diatom J term 2129 fjlim_pd = fjld / xvpdT 2130 2131 # if defined key_debug_medusa 2132 !! report phytoplankton light limitation 2133 if (idf.eq.1.AND.idfval.eq.1) then 2134 IF (lwp) write (numout,*) '------------------------------' 2135 IF (lwp) write (numout,*) 'fchn(',jk,') = ', fchn 2136 IF (lwp) write (numout,*) 'fchd(',jk,') = ', fchd 2137 IF (lwp) write (numout,*) 'fjln(',jk,') = ', fjln 2138 IF (lwp) write (numout,*) 'fjld(',jk,') = ', fjld 2139 endif 2140 # endif 2141 2142 !!---------------------------------------------------------------------- 2143 !! Phytoplankton nutrient limitation 2144 !!---------------------------------------------------------------------- 2145 !! 2146 !! non-diatoms (N, Fe) 2147 fnln = zdin / (zdin + xnln) !! non-diatom Qn term 2148 ffln = zfer / (zfer + xfln) !! non-diatom Qf term 2149 !! 2150 !! diatoms (N, Si, Fe) 2151 fnld = zdin / (zdin + xnld) !! diatom Qn term 2152 fsld = zsil / (zsil + xsld) !! diatom Qs term 2153 ffld = zfer / (zfer + xfld) !! diatom Qf term 2154 2155 # if defined key_debug_medusa 2156 !! report phytoplankton nutrient limitation 2157 if (idf.eq.1.AND.idfval.eq.1) then 2158 IF (lwp) write (numout,*) '------------------------------' 2159 IF (lwp) write (numout,*) 'fnln(',jk,') = ', fnln 2160 IF (lwp) write (numout,*) 'fnld(',jk,') = ', fnld 2161 IF (lwp) write (numout,*) 'ffln(',jk,') = ', ffln 2162 IF (lwp) write (numout,*) 'ffld(',jk,') = ', ffld 2163 IF (lwp) write (numout,*) 'fsld(',jk,') = ', fsld 2164 endif 2165 # endif 2166 2167 !!---------------------------------------------------------------------- 2168 !! Primary production (non-diatoms) 2169 !! (note: still needs multiplying by phytoplankton concentration) 2170 !!---------------------------------------------------------------------- 2171 !! 2172 if (jliebig .eq. 0) then 2173 !! multiplicative nutrient limitation 2174 fpnlim = fnln * ffln 2175 elseif (jliebig .eq. 1) then 2176 !! Liebig Law (= most limiting) nutrient limitation 2177 fpnlim = min(fnln, ffln) 2178 endif 2179 fprn = fjln * fpnlim 2180 2181 !!---------------------------------------------------------------------- 2182 !! Primary production (diatoms) 2183 !! (note: still needs multiplying by phytoplankton concentration) 2184 !! 2185 !! production here is split between nitrogen production and that of 2186 !! silicon; depending upon the "intracellular" ratio of Si:N, model 2187 !! diatoms will uptake nitrogen/silicon differentially; this borrows 2188 !! from the diatom model of Mongin et al. (2006) 2189 !!---------------------------------------------------------------------- 2190 !! 2191 if (jliebig .eq. 0) then 2192 !! multiplicative nutrient limitation 2193 fpdlim = fnld * ffld 2194 elseif (jliebig .eq. 1) then 2195 !! Liebig Law (= most limiting) nutrient limitation 2196 fpdlim = min(fnld, ffld) 2197 endif 2198 !! 2199 if (zphd.GT.rsmall .AND. zpds.GT.rsmall) then 2200 !! "intracellular" elemental ratios 2201 ! fsin = zpds / (zphd + tiny(zphd)) 2202 ! fnsi = zphd / (zpds + tiny(zpds)) 2203 fsin = 0.0 2204 IF( zphd .GT. rsmall) fsin = zpds / zphd 2205 fnsi = 0.0 2206 IF( zpds .GT. rsmall) fnsi = zphd / zpds 2207 !! AXY (23/02/10): these next variables derive from Mongin et al. (2003) 2208 fsin1 = 3.0 * xsin0 !! = 0.6 2209 fnsi1 = 1.0 / fsin1 !! = 1.667 2210 fnsi2 = 1.0 / xsin0 !! = 5.0 2211 !! 2212 !! conditionalities based on ratios 2213 !! nitrogen (and iron and carbon) 2214 if (fsin.le.xsin0) then 2215 fprd = 0.0 2216 fsld2 = 0.0 2217 elseif (fsin.lt.fsin1) then 2218 fprd = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) * (fjld * fpdlim) 2219 fsld2 = xuif * ((fsin - xsin0) / (fsin + tiny(fsin))) 2220 elseif (fsin.ge.fsin1) then 2221 fprd = (fjld * fpdlim) 2222 fsld2 = 1.0 2223 endif 2224 !! 2225 !! silicon 2226 if (fsin.lt.fnsi1) then 2227 fprds = (fjld * fsld) 2228 elseif (fsin.lt.fnsi2) then 2229 fprds = xuif * ((fnsi - xnsi0) / (fnsi + tiny(fnsi))) * (fjld * fsld) 2230 else 2231 fprds = 0.0 2232 endif 2233 else 2234 fsin = 0.0 2235 fnsi = 0.0 2236 fprd = 0.0 2237 fsld2 = 0.0 2238 fprds = 0.0 2239 endif 2240 2241 # if defined key_debug_medusa 2242 !! report phytoplankton growth (including diatom silicon submodel) 2243 if (idf.eq.1.AND.idfval.eq.1) then 2244 IF (lwp) write (numout,*) '------------------------------' 2245 IF (lwp) write (numout,*) 'fsin(',jk,') = ', fsin 2246 IF (lwp) write (numout,*) 'fnsi(',jk,') = ', fnsi 2247 IF (lwp) write (numout,*) 'fsld2(',jk,') = ', fsld2 2248 IF (lwp) write (numout,*) 'fprn(',jk,') = ', fprn 2249 IF (lwp) write (numout,*) 'fprd(',jk,') = ', fprd 2250 IF (lwp) write (numout,*) 'fprds(',jk,') = ', fprds 2251 endif 2252 # endif 2253 2254 !!---------------------------------------------------------------------- 2255 !! Mixed layer primary production 2256 !! this block calculates the amount of primary production that occurs 2257 !! within the upper mixed layer; this allows the separate diagnosis 2258 !! of "sub-surface" primary production; it does assume that short- 2259 !! term variability in mixed layer depth doesn't mess with things 2260 !! though 2261 !!---------------------------------------------------------------------- 2262 !! 2263 if (fdep1.le.hmld(ji,jj)) then 2264 !! this level is entirely in the mixed layer 2265 fq0 = 1.0 2266 elseif (fdep.ge.hmld(ji,jj)) then 2267 !! this level is entirely below the mixed layer 2268 fq0 = 0.0 2269 else 2270 !! this level straddles the mixed layer 2271 fq0 = (hmld(ji,jj) - fdep) / fthk 2272 endif 2273 !! 2274 fprn_ml(ji,jj) = fprn_ml(ji,jj) + (fprn * zphn * fthk * fq0) 2275 fprd_ml(ji,jj) = fprd_ml(ji,jj) + (fprd * zphd * fthk * fq0) 2276 2277 !!---------------------------------------------------------------------- 2278 !! Vertical Integral -- 2279 !!---------------------------------------------------------------------- 2280 ftot_pn(ji,jj) = ftot_pn(ji,jj) + (zphn * fthk) !! vertical integral non-diatom phytoplankton 2281 ftot_pd(ji,jj) = ftot_pd(ji,jj) + (zphd * fthk) !! vertical integral diatom phytoplankton 2282 ftot_zmi(ji,jj) = ftot_zmi(ji,jj) + (zzmi * fthk) !! vertical integral microzooplankton 2283 ftot_zme(ji,jj) = ftot_zme(ji,jj) + (zzme * fthk) !! vertical integral mesozooplankton 2284 ftot_det(ji,jj) = ftot_det(ji,jj) + (zdet * fthk) !! vertical integral slow detritus, nitrogen 2285 ftot_dtc(ji,jj) = ftot_dtc(ji,jj) + (zdtc * fthk) !! vertical integral slow detritus, carbon 2286 2287 !!---------------------------------------------------------------------- 2288 !! More chlorophyll calculations 2289 !!---------------------------------------------------------------------- 2290 !! 2291 !! frn = (xthetam / fthetan) * (fprn / (fthetan * xpar(ji,jj,jk))) 2292 !! frd = (xthetam / fthetad) * (fprd / (fthetad * xpar(ji,jj,jk))) 2293 frn = (xthetam * fchn * fnln * ffln ) / (fthetan + tiny(fthetan)) 2294 !! AXY (12/05/09): there's potentially a problem here; fsld, silicic acid 2295 !! limitation, is used in the following line to regulate chlorophyll 2296 !! growth in a manner that is inconsistent with its use in the regulation 2297 !! of biomass growth; the Mongin term term used in growth is more complex 2298 !! than the simple multiplicative function used below 2299 !! frd = (xthetam * fchd * fnld * ffld * fsld) / (fthetad + tiny(fthetad)) 2300 !! AXY (12/05/09): this replacement line uses the new variable, fsld2, to 2301 !! regulate chlorophyll growth 2302 frd = (xthetamd * fchd * fnld * ffld * fsld2) / (fthetad + tiny(fthetad)) 2303 2304 # if defined key_debug_medusa 2305 !! report chlorophyll calculations 2306 if (idf.eq.1.AND.idfval.eq.1) then 2307 IF (lwp) write (numout,*) '------------------------------' 2308 IF (lwp) write (numout,*) 'fthetan(',jk,') = ', fthetan 2309 IF (lwp) write (numout,*) 'fthetad(',jk,') = ', fthetad 2310 IF (lwp) write (numout,*) 'frn(',jk,') = ', frn 2311 IF (lwp) write (numout,*) 'frd(',jk,') = ', frd 2312 endif 2313 # endif 2314 2315 !!---------------------------------------------------------------------- 2316 !! Zooplankton Grazing 2317 !! this code supplements the base grazing model with one that 2318 !! considers the C:N ratio of grazed food and balances this against 2319 !! the requirements of zooplankton growth; this model is derived 2320 !! from that of Anderson & Pondaven (2003) 2321 !! 2322 !! the current version of the code assumes a fixed C:N ratio for 2323 !! detritus (in contrast to Anderson & Pondaven, 2003), though the 2324 !! full equations are retained for future extension 2325 !!---------------------------------------------------------------------- 2326 !! 2327 !!---------------------------------------------------------------------- 2328 !! Microzooplankton first 2329 !!---------------------------------------------------------------------- 2330 !! 2331 fmi1 = (xkmi * xkmi) + (xpmipn * zphn * zphn) + (xpmid * zdet * zdet) 2332 fmi = xgmi * zzmi / fmi1 2333 fgmipn = fmi * xpmipn * zphn * zphn !! grazing on non-diatoms 2334 fgmid = fmi * xpmid * zdet * zdet !! grazing on detrital nitrogen 2182 2335 # if defined key_roam 2183 2184 2336 fgmidc = rsmall !acc 2337 IF ( zdet .GT. rsmall ) fgmidc = (zdtc / (zdet + tiny(zdet))) * fgmid !! grazing on detrital carbon 2185 2338 # else 2186 2187 2188 # endif 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2339 !! AXY (26/11/08): implicit detrital carbon change 2340 fgmidc = xthetad * fgmid !! grazing on detrital carbon 2341 # endif 2342 !! 2343 !! which translates to these incoming N and C fluxes 2344 finmi = (1.0 - xphi) * (fgmipn + fgmid) 2345 ficmi = (1.0 - xphi) * ((xthetapn * fgmipn) + fgmidc) 2346 !! 2347 !! the ideal food C:N ratio for microzooplankton 2348 !! xbetan = 0.77; xthetaz = 5.625; xbetac = 0.64; xkc = 0.80 2349 fstarmi = (xbetan * xthetazmi) / (xbetac * xkc) 2350 !! 2351 !! process these to determine proportioning of grazed N and C 2352 !! (since there is no explicit consideration of respiration, 2353 !! only growth and excretion are calculated here) 2354 fmith = (ficmi / (finmi + tiny(finmi))) 2355 if (fmith.ge.fstarmi) then 2356 fmigrow = xbetan * finmi 2357 fmiexcr = 0.0 2358 else 2359 fmigrow = (xbetac * xkc * ficmi) / xthetazmi 2360 fmiexcr = ficmi * ((xbetan / (fmith + tiny(fmith))) - ((xbetac * xkc) / xthetazmi)) 2361 endif 2209 2362 # if defined key_roam 2210 fmiresp = (xbetac * ficmi) - (xthetazmi * fmigrow) 2211 # endif 2212 2213 !!---------------------------------------------------------------------- 2214 !! Mesozooplankton second 2215 !!---------------------------------------------------------------------- 2216 !! 2217 fme1 = (xkme * xkme) + (xpmepn * zphn * zphn) + (xpmepd * zphd * zphd) + & 2218 (xpmezmi * zzmi * zzmi) + (xpmed * zdet * zdet) 2219 fme = xgme * zzme / fme1 2220 fgmepn = fme * xpmepn * zphn * zphn !! grazing on non-diatoms 2221 fgmepd = fme * xpmepd * zphd * zphd !! grazing on diatoms 2222 fgmepds = fsin * fgmepd !! grazing on diatom silicon 2223 fgmezmi = fme * xpmezmi * zzmi * zzmi !! grazing on microzooplankton 2224 fgmed = fme * xpmed * zdet * zdet !! grazing on detrital nitrogen 2363 fmiresp = (xbetac * ficmi) - (xthetazmi * fmigrow) 2364 # endif 2365 2366 # if defined key_debug_medusa 2367 !! report microzooplankton grazing 2368 if (idf.eq.1.AND.idfval.eq.1) then 2369 IF (lwp) write (numout,*) '------------------------------' 2370 IF (lwp) write (numout,*) 'fmi1(',jk,') = ', fmi1 2371 IF (lwp) write (numout,*) 'fmi(',jk,') = ', fmi 2372 IF (lwp) write (numout,*) 'fgmipn(',jk,') = ', fgmipn 2373 IF (lwp) write (numout,*) 'fgmid(',jk,') = ', fgmid 2374 IF (lwp) write (numout,*) 'fgmidc(',jk,') = ', fgmidc 2375 IF (lwp) write (numout,*) 'finmi(',jk,') = ', finmi 2376 IF (lwp) write (numout,*) 'ficmi(',jk,') = ', ficmi 2377 IF (lwp) write (numout,*) 'fstarmi(',jk,') = ', fstarmi 2378 IF (lwp) write (numout,*) 'fmith(',jk,') = ', fmith 2379 IF (lwp) write (numout,*) 'fmigrow(',jk,') = ', fmigrow 2380 IF (lwp) write (numout,*) 'fmiexcr(',jk,') = ', fmiexcr 2381 # if defined key_roam 2382 IF (lwp) write (numout,*) 'fmiresp(',jk,') = ', fmiresp 2383 # endif 2384 endif 2385 # endif 2386 2387 !!---------------------------------------------------------------------- 2388 !! Mesozooplankton second 2389 !!---------------------------------------------------------------------- 2390 !! 2391 fme1 = (xkme * xkme) + (xpmepn * zphn * zphn) + (xpmepd * zphd * zphd) + & 2392 (xpmezmi * zzmi * zzmi) + (xpmed * zdet * zdet) 2393 fme = xgme * zzme / fme1 2394 fgmepn = fme * xpmepn * zphn * zphn !! grazing on non-diatoms 2395 fgmepd = fme * xpmepd * zphd * zphd !! grazing on diatoms 2396 fgmepds = fsin * fgmepd !! grazing on diatom silicon 2397 fgmezmi = fme * xpmezmi * zzmi * zzmi !! grazing on microzooplankton 2398 fgmed = fme * xpmed * zdet * zdet !! grazing on detrital nitrogen 2225 2399 # if defined key_roam 2226 2227 2400 fgmedc = rsmall !acc 2401 IF ( zdet .GT. rsmall ) fgmedc = (zdtc / (zdet + tiny(zdet))) * fgmed !! grazing on detrital carbon 2228 2402 # else 2229 2230 2231 # endif 2232 2233 2234 2235 2236 (xthetazmi * fgmezmi) + fgmedc)2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2403 !! AXY (26/11/08): implicit detrital carbon change 2404 fgmedc = xthetad * fgmed !! grazing on detrital carbon 2405 # endif 2406 !! 2407 !! which translates to these incoming N and C fluxes 2408 finme = (1.0 - xphi) * (fgmepn + fgmepd + fgmezmi + fgmed) 2409 ficme = (1.0 - xphi) * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & 2410 (xthetazmi * fgmezmi) + fgmedc) 2411 !! 2412 !! the ideal food C:N ratio for mesozooplankton 2413 !! xbetan = 0.77; xthetaz = 5.625; xbetac = 0.64; xkc = 0.80 2414 fstarme = (xbetan * xthetazme) / (xbetac * xkc) 2415 !! 2416 !! process these to determine proportioning of grazed N and C 2417 !! (since there is no explicit consideration of respiration, 2418 !! only growth and excretion are calculated here) 2419 fmeth = (ficme / (finme + tiny(finme))) 2420 if (fmeth.ge.fstarme) then 2421 fmegrow = xbetan * finme 2422 fmeexcr = 0.0 2423 else 2424 fmegrow = (xbetac * xkc * ficme) / xthetazme 2425 fmeexcr = ficme * ((xbetan / (fmeth + tiny(fmeth))) - ((xbetac * xkc) / xthetazme)) 2426 endif 2253 2427 # if defined key_roam 2254 fmeresp = (xbetac * ficme) - (xthetazme * fmegrow) 2255 # endif 2256 2257 fzmi_i(ji,jj) = fzmi_i(ji,jj) + fthk * ( & 2258 fgmipn + fgmid ) 2259 fzmi_o(ji,jj) = fzmi_o(ji,jj) + fthk * ( & 2260 fmigrow + (xphi * (fgmipn + fgmid)) + fmiexcr + ((1.0 - xbetan) * finmi) ) 2261 fzme_i(ji,jj) = fzme_i(ji,jj) + fthk * ( & 2262 fgmepn + fgmepd + fgmezmi + fgmed ) 2263 fzme_o(ji,jj) = fzme_o(ji,jj) + fthk * ( & 2264 fmegrow + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) + fmeexcr + ((1.0 - xbetan) * finme) ) 2265 2266 !!====================================================================== 2267 !! AXY (07/04/17): possible subroutine block; miscellaneous plankton losses 2268 !!====================================================================== 2269 2270 !!---------------------------------------------------------------------- 2271 !! Plankton metabolic losses 2272 !! Linear loss processes assumed to be metabolic in origin 2273 !!---------------------------------------------------------------------- 2274 !! 2275 fdpn2 = xmetapn * zphn 2276 fdpd2 = xmetapd * zphd 2277 fdpds2 = xmetapd * zpds 2278 fdzmi2 = xmetazmi * zzmi 2279 fdzme2 = xmetazme * zzme 2280 2281 !!---------------------------------------------------------------------- 2282 !! Plankton mortality losses 2283 !! EKP (26/02/09): phytoplankton hyperbolic mortality term introduced 2284 !! to improve performance in gyres 2285 !!---------------------------------------------------------------------- 2286 !! 2287 !! non-diatom phytoplankton 2288 if (jmpn.eq.1) fdpn = xmpn * zphn !! linear 2289 if (jmpn.eq.2) fdpn = xmpn * zphn * zphn !! quadratic 2290 if (jmpn.eq.3) fdpn = xmpn * zphn * & !! hyperbolic 2291 (zphn / (xkphn + zphn)) 2292 if (jmpn.eq.4) fdpn = xmpn * zphn * & !! sigmoid 2293 ((zphn * zphn) / (xkphn + (zphn * zphn))) 2294 !! 2295 !! diatom phytoplankton 2296 if (jmpd.eq.1) fdpd = xmpd * zphd !! linear 2297 if (jmpd.eq.2) fdpd = xmpd * zphd * zphd !! quadratic 2298 if (jmpd.eq.3) fdpd = xmpd * zphd * & !! hyperbolic 2299 (zphd / (xkphd + zphd)) 2300 if (jmpd.eq.4) fdpd = xmpd * zphd * & !! sigmoid 2301 ((zphd * zphd) / (xkphd + (zphd * zphd))) 2302 fdpds = fdpd * fsin 2303 !! 2304 !! microzooplankton 2305 if (jmzmi.eq.1) fdzmi = xmzmi * zzmi !! linear 2306 if (jmzmi.eq.2) fdzmi = xmzmi * zzmi * zzmi !! quadratic 2307 if (jmzmi.eq.3) fdzmi = xmzmi * zzmi * & !! hyperbolic 2308 (zzmi / (xkzmi + zzmi)) 2309 if (jmzmi.eq.4) fdzmi = xmzmi * zzmi * & !! sigmoid 2310 ((zzmi * zzmi) / (xkzmi + (zzmi * zzmi))) 2311 !! 2312 !! mesozooplankton 2313 if (jmzme.eq.1) fdzme = xmzme * zzme !! linear 2314 if (jmzme.eq.2) fdzme = xmzme * zzme * zzme !! quadratic 2315 if (jmzme.eq.3) fdzme = xmzme * zzme * & !! hyperbolic 2316 (zzme / (xkzme + zzme)) 2317 if (jmzme.eq.4) fdzme = xmzme * zzme * & !! sigmoid 2318 ((zzme * zzme) / (xkzme + (zzme * zzme))) 2319 2320 !!====================================================================== 2321 !! AXY (07/04/17): possible subroutine block; detritus processes (fuse with later?) 2322 !!====================================================================== 2323 2324 !!---------------------------------------------------------------------- 2325 !! Detritus remineralisation 2326 !! Constant or temperature-dependent 2327 !!---------------------------------------------------------------------- 2328 !! 2329 if (jmd.eq.1) then 2330 !! temperature-dependent 2331 fdd = xmd * fun_T * zdet 2428 fmeresp = (xbetac * ficme) - (xthetazme * fmegrow) 2429 # endif 2430 2431 # if defined key_debug_medusa 2432 !! report mesozooplankton grazing 2433 if (idf.eq.1.AND.idfval.eq.1) then 2434 IF (lwp) write (numout,*) '------------------------------' 2435 IF (lwp) write (numout,*) 'fme1(',jk,') = ', fme1 2436 IF (lwp) write (numout,*) 'fme(',jk,') = ', fme 2437 IF (lwp) write (numout,*) 'fgmepn(',jk,') = ', fgmepn 2438 IF (lwp) write (numout,*) 'fgmepd(',jk,') = ', fgmepd 2439 IF (lwp) write (numout,*) 'fgmepds(',jk,') = ', fgmepds 2440 IF (lwp) write (numout,*) 'fgmezmi(',jk,') = ', fgmezmi 2441 IF (lwp) write (numout,*) 'fgmed(',jk,') = ', fgmed 2442 IF (lwp) write (numout,*) 'fgmedc(',jk,') = ', fgmedc 2443 IF (lwp) write (numout,*) 'finme(',jk,') = ', finme 2444 IF (lwp) write (numout,*) 'ficme(',jk,') = ', ficme 2445 IF (lwp) write (numout,*) 'fstarme(',jk,') = ', fstarme 2446 IF (lwp) write (numout,*) 'fmeth(',jk,') = ', fmeth 2447 IF (lwp) write (numout,*) 'fmegrow(',jk,') = ', fmegrow 2448 IF (lwp) write (numout,*) 'fmeexcr(',jk,') = ', fmeexcr 2449 # if defined key_roam 2450 IF (lwp) write (numout,*) 'fmeresp(',jk,') = ', fmeresp 2451 # endif 2452 endif 2453 # endif 2454 2455 fzmi_i(ji,jj) = fzmi_i(ji,jj) + fthk * ( & 2456 fgmipn + fgmid ) 2457 fzmi_o(ji,jj) = fzmi_o(ji,jj) + fthk * ( & 2458 fmigrow + (xphi * (fgmipn + fgmid)) + fmiexcr + ((1.0 - xbetan) * finmi) ) 2459 fzme_i(ji,jj) = fzme_i(ji,jj) + fthk * ( & 2460 fgmepn + fgmepd + fgmezmi + fgmed ) 2461 fzme_o(ji,jj) = fzme_o(ji,jj) + fthk * ( & 2462 fmegrow + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) + fmeexcr + ((1.0 - xbetan) * finme) ) 2463 2464 !!---------------------------------------------------------------------- 2465 !! Plankton metabolic losses 2466 !! Linear loss processes assumed to be metabolic in origin 2467 !!---------------------------------------------------------------------- 2468 !! 2469 fdpn2 = xmetapn * zphn 2470 fdpd2 = xmetapd * zphd 2471 fdpds2 = xmetapd * zpds 2472 fdzmi2 = xmetazmi * zzmi 2473 fdzme2 = xmetazme * zzme 2474 2475 !!---------------------------------------------------------------------- 2476 !! Plankton mortality losses 2477 !! EKP (26/02/09): phytoplankton hyperbolic mortality term introduced 2478 !! to improve performance in gyres 2479 !!---------------------------------------------------------------------- 2480 !! 2481 !! non-diatom phytoplankton 2482 if (jmpn.eq.1) fdpn = xmpn * zphn !! linear 2483 if (jmpn.eq.2) fdpn = xmpn * zphn * zphn !! quadratic 2484 if (jmpn.eq.3) fdpn = xmpn * zphn * & !! hyperbolic 2485 (zphn / (xkphn + zphn)) 2486 if (jmpn.eq.4) fdpn = xmpn * zphn * & !! sigmoid 2487 ((zphn * zphn) / (xkphn + (zphn * zphn))) 2488 !! 2489 !! diatom phytoplankton 2490 if (jmpd.eq.1) fdpd = xmpd * zphd !! linear 2491 if (jmpd.eq.2) fdpd = xmpd * zphd * zphd !! quadratic 2492 if (jmpd.eq.3) fdpd = xmpd * zphd * & !! hyperbolic 2493 (zphd / (xkphd + zphd)) 2494 if (jmpd.eq.4) fdpd = xmpd * zphd * & !! sigmoid 2495 ((zphd * zphd) / (xkphd + (zphd * zphd))) 2496 fdpds = fdpd * fsin 2497 !! 2498 !! microzooplankton 2499 if (jmzmi.eq.1) fdzmi = xmzmi * zzmi !! linear 2500 if (jmzmi.eq.2) fdzmi = xmzmi * zzmi * zzmi !! quadratic 2501 if (jmzmi.eq.3) fdzmi = xmzmi * zzmi * & !! hyperbolic 2502 (zzmi / (xkzmi + zzmi)) 2503 if (jmzmi.eq.4) fdzmi = xmzmi * zzmi * & !! sigmoid 2504 ((zzmi * zzmi) / (xkzmi + (zzmi * zzmi))) 2505 !! 2506 !! mesozooplankton 2507 if (jmzme.eq.1) fdzme = xmzme * zzme !! linear 2508 if (jmzme.eq.2) fdzme = xmzme * zzme * zzme !! quadratic 2509 if (jmzme.eq.3) fdzme = xmzme * zzme * & !! hyperbolic 2510 (zzme / (xkzme + zzme)) 2511 if (jmzme.eq.4) fdzme = xmzme * zzme * & !! sigmoid 2512 ((zzme * zzme) / (xkzme + (zzme * zzme))) 2513 2514 !!---------------------------------------------------------------------- 2515 !! Detritus remineralisation 2516 !! Constant or temperature-dependent 2517 !!---------------------------------------------------------------------- 2518 !! 2519 if (jmd.eq.1) then 2520 !! temperature-dependent 2521 fdd = xmd * fun_T * zdet 2332 2522 # if defined key_roam 2333 2334 # endif 2335 2336 2337 2338 2523 fddc = xmdc * fun_T * zdtc 2524 # endif 2525 elseif (jmd.eq.2) then 2526 !! AXY (16/05/13): add in Q10-based parameterisation (def in nmlst) 2527 !! temperature-dependent 2528 fdd = xmd * fun_Q10 * zdet 2339 2529 #if defined key_roam 2340 2530 fddc = xmdc * fun_Q10 * zdtc 2341 2531 #endif 2342 2343 2344 2532 else 2533 !! temperature-independent 2534 fdd = xmd * zdet 2345 2535 # if defined key_roam 2346 2347 # endif 2348 2349 2350 2351 2352 2536 fddc = xmdc * zdtc 2537 # endif 2538 endif 2539 !! 2540 !! AXY (22/07/09): accelerate detrital remineralisation in the bottom box 2541 if ((jk.eq.jmbathy) .and. jsfd.eq.1) then 2542 fdd = 1.0 * zdet 2353 2543 # if defined key_roam 2354 fddc = 1.0 * zdtc 2355 # endif 2356 endif 2357 2358 !!---------------------------------------------------------------------- 2359 !! Detritus addition to benthos 2360 !! If activated, slow detritus in the bottom box will enter the 2361 !! benthic pool 2362 !!---------------------------------------------------------------------- 2363 !! 2364 if ((jk.eq.jmbathy) .and. jorgben.eq.1) then 2365 !! this is the BOTTOM OCEAN BOX -> into the benthic pool! 2366 !! 2367 f_sbenin_n(ji,jj) = (zdet * vsed * 86400.) 2368 f_sbenin_fe(ji,jj) = (zdet * vsed * 86400. * xrfn) 2544 fddc = 1.0 * zdtc 2545 # endif 2546 endif 2547 2548 # if defined key_debug_medusa 2549 !! report plankton mortality and remineralisation 2550 if (idf.eq.1.AND.idfval.eq.1) then 2551 IF (lwp) write (numout,*) '------------------------------' 2552 IF (lwp) write (numout,*) 'fdpn2(',jk,') = ', fdpn2 2553 IF (lwp) write (numout,*) 'fdpd2(',jk,') = ', fdpd2 2554 IF (lwp) write (numout,*) 'fdpds2(',jk,')= ', fdpds2 2555 IF (lwp) write (numout,*) 'fdzmi2(',jk,')= ', fdzmi2 2556 IF (lwp) write (numout,*) 'fdzme2(',jk,')= ', fdzme2 2557 IF (lwp) write (numout,*) 'fdpn(',jk,') = ', fdpn 2558 IF (lwp) write (numout,*) 'fdpd(',jk,') = ', fdpd 2559 IF (lwp) write (numout,*) 'fdpds(',jk,') = ', fdpds 2560 IF (lwp) write (numout,*) 'fdzmi(',jk,') = ', fdzmi 2561 IF (lwp) write (numout,*) 'fdzme(',jk,') = ', fdzme 2562 IF (lwp) write (numout,*) 'fdd(',jk,') = ', fdd 2563 # if defined key_roam 2564 IF (lwp) write (numout,*) 'fddc(',jk,') = ', fddc 2565 # endif 2566 endif 2567 # endif 2568 2569 !!---------------------------------------------------------------------- 2570 !! Detritus addition to benthos 2571 !! If activated, slow detritus in the bottom box will enter the 2572 !! benthic pool 2573 !!---------------------------------------------------------------------- 2574 !! 2575 if ((jk.eq.jmbathy) .and. jorgben.eq.1) then 2576 !! this is the BOTTOM OCEAN BOX -> into the benthic pool! 2577 !! 2578 f_sbenin_n(ji,jj) = (zdet * vsed * 86400.) 2579 f_sbenin_fe(ji,jj) = (zdet * vsed * 86400. * xrfn) 2369 2580 # if defined key_roam 2370 2581 f_sbenin_c(ji,jj) = (zdtc * vsed * 86400.) 2371 2582 # else 2372 f_sbenin_c(ji,jj) = (zdet * vsed * 86400. * xthetad) 2373 # endif 2374 endif 2375 2376 !!====================================================================== 2377 !! AXY (07/04/17): possible subroutine block; iron chemistry and scavenging 2378 !!====================================================================== 2379 2380 !!---------------------------------------------------------------------- 2381 !! Iron chemistry and fractionation 2382 !! following the Parekh et al. (2004) scheme adopted by the Met. 2383 !! Office, Medusa models total iron but considers "free" and 2384 !! ligand-bound forms for the purposes of scavenging (only "free" 2385 !! iron can be scavenged 2386 !!---------------------------------------------------------------------- 2387 !! 2388 !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 2389 xFeT = zfer * 1.e3 2390 !! 2391 !! calculate fractionation (based on Diat-HadOCC; in turn based on Parekh et al., 2004) 2392 xb_coef_tmp = xk_FeL * (xLgT - xFeT) - 1.0 2393 xb2M4ac = max(((xb_coef_tmp * xb_coef_tmp) + (4.0 * xk_FeL * xLgT)), 0.0) 2394 !! 2395 !! "free" ligand concentration 2396 xLgF = 0.5 * (xb_coef_tmp + (xb2M4ac**0.5)) / xk_FeL 2397 !! 2398 !! ligand-bound iron concentration 2399 xFeL = xLgT - xLgF 2400 !! 2401 !! "free" iron concentration (and convert to mmol Fe / m3) 2402 xFeF = (xFeT - xFeL) * 1.e-3 2403 xFree(ji,jj)= xFeF / (zfer + tiny(zfer)) 2404 !! 2405 !! scavenging of iron 2406 !! AXY (05/04/17): formerly several schemes, now the only appropriate 2407 !! one, with all other options returning no scavenging (trc_nam_medusa 2408 !! reports on this) 2409 !! 2410 if (jiron.eq.1) then 2411 !!---------------------------------------------------------------------- 2412 !! Scheme 1: Dutkiewicz et al. (2005) 2413 !! This scheme includes a single scavenging term based solely on a 2414 !! fixed rate and the availablility of "free" iron 2415 !!---------------------------------------------------------------------- 2416 !! 2417 ffescav = xk_sc_Fe * xFeF ! = mmol/m3/d 2418 !! 2419 !!---------------------------------------------------------------------- 2420 !! 2421 !! Mick's code contains a further (optional) implicit "scavenging" of 2422 !! iron that sets an upper bound on "free" iron concentration, and 2423 !! essentially caps the concentration of total iron as xFeL + "free" 2424 !! iron; since the former is constrained by a fixed total ligand 2425 !! concentration (= 1.0 umol/m3), and the latter isn't allowed above 2426 !! this upper bound, total iron is constrained to a maximum of ... 2427 !! 2428 !! xFeL + min(xFeF, 0.3 umol/m3) = 1.0 + 0.3 = 1.3 umol / m3 2429 !! 2430 !! In Mick's code, the actual value of total iron is reset to this 2431 !! sum (i.e. TFe = FeL + Fe'; but Fe' <= 0.3 umol/m3); this isn't 2432 !! our favoured approach to tracer updating here (not least because 2433 !! of the leapfrog), so here the amount scavenged is augmented by an 2434 !! additional amount that serves to drag total iron back towards that 2435 !! expected from this limitation on iron concentration ... 2436 !! 2437 xmaxFeF = min((xFeF * 1.e3), 0.3) ! = umol/m3 2438 !! 2439 !! Here, the difference between current total Fe and (FeL + Fe') is 2440 !! calculated and added to the scavenging flux already calculated 2441 !! above ... 2442 !! 2443 fdeltaFe = (xFeT - (xFeL + xmaxFeF)) * 1.e-3 ! = mmol/m3 2444 !! 2445 !! This assumes that the "excess" iron is dissipated with a time- 2446 !! scale of 1 day; seems reasonable to me ... (famous last words) 2447 !! 2448 ffescav = ffescav + fdeltaFe ! = mmol/m3/d 2449 !! 2583 f_sbenin_c(ji,jj) = (zdet * vsed * 86400. * xthetad) 2584 # endif 2585 endif 2586 2587 !!---------------------------------------------------------------------- 2588 !! Iron chemistry and fractionation 2589 !! following the Parekh et al. (2004) scheme adopted by the Met. 2590 !! Office, Medusa models total iron but considers "free" and 2591 !! ligand-bound forms for the purposes of scavenging (only "free" 2592 !! iron can be scavenged 2593 !!---------------------------------------------------------------------- 2594 !! 2595 !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 2596 xFeT = zfer * 1.e3 2597 !! 2598 !! calculate fractionation (based on Diat-HadOCC; in turn based on Parekh et al., 2004) 2599 xb_coef_tmp = xk_FeL * (xLgT - xFeT) - 1.0 2600 xb2M4ac = max(((xb_coef_tmp * xb_coef_tmp) + (4.0 * xk_FeL * xLgT)), 0.0) 2601 !! 2602 !! "free" ligand concentration 2603 xLgF = 0.5 * (xb_coef_tmp + (xb2M4ac**0.5)) / xk_FeL 2604 !! 2605 !! ligand-bound iron concentration 2606 xFeL = xLgT - xLgF 2607 !! 2608 !! "free" iron concentration (and convert to mmol Fe / m3) 2609 xFeF = (xFeT - xFeL) * 1.e-3 2610 xFree(ji,jj)= xFeF / (zfer + tiny(zfer)) 2611 !! 2612 !! scavenging of iron (multiple schemes); I'm only really happy with the 2613 !! first one at the moment - the others involve assumptions (sometimes 2614 !! guessed at by me) that are potentially questionable 2615 !! 2616 if (jiron.eq.1) then 2617 !!---------------------------------------------------------------------- 2618 !! Scheme 1: Dutkiewicz et al. (2005) 2619 !! This scheme includes a single scavenging term based solely on a 2620 !! fixed rate and the availablility of "free" iron 2621 !!---------------------------------------------------------------------- 2622 !! 2623 ffescav = xk_sc_Fe * xFeF ! = mmol/m3/d 2624 !! 2625 !!---------------------------------------------------------------------- 2626 !! 2627 !! Mick's code contains a further (optional) implicit "scavenging" of 2628 !! iron that sets an upper bound on "free" iron concentration, and 2629 !! essentially caps the concentration of total iron as xFeL + "free" 2630 !! iron; since the former is constrained by a fixed total ligand 2631 !! concentration (= 1.0 umol/m3), and the latter isn't allowed above 2632 !! this upper bound, total iron is constrained to a maximum of ... 2633 !! 2634 !! xFeL + min(xFeF, 0.3 umol/m3) = 1.0 + 0.3 = 1.3 umol / m3 2635 !! 2636 !! In Mick's code, the actual value of total iron is reset to this 2637 !! sum (i.e. TFe = FeL + Fe'; but Fe' <= 0.3 umol/m3); this isn't 2638 !! our favoured approach to tracer updating here (not least because 2639 !! of the leapfrog), so here the amount scavenged is augmented by an 2640 !! additional amount that serves to drag total iron back towards that 2641 !! expected from this limitation on iron concentration ... 2642 !! 2643 xmaxFeF = min((xFeF * 1.e3), 0.3) ! = umol/m3 2644 !! 2645 !! Here, the difference between current total Fe and (FeL + Fe') is 2646 !! calculated and added to the scavenging flux already calculated 2647 !! above ... 2648 !! 2649 fdeltaFe = (xFeT - (xFeL + xmaxFeF)) * 1.e-3 ! = mmol/m3 2650 !! 2651 !! This assumes that the "excess" iron is dissipated with a time- 2652 !! scale of 1 day; seems reasonable to me ... (famous last words) 2653 !! 2654 ffescav = ffescav + fdeltaFe ! = mmol/m3/d 2655 !! 2450 2656 # if defined key_deep_fe_fix 2451 !! AXY (17/01/13) 2452 !! stop scavenging for iron concentrations below 0.5 umol / m3 2453 !! at depths greater than 1000 m; this aims to end MEDUSA's 2454 !! continual loss of iron at depth without impacting things 2455 !! at the surface too much; the justification for this is that 2456 !! it appears to be what Mick Follows et al. do in their work 2457 !! (as evidenced by the iron initial condition they supplied 2458 !! me with); to be honest, it looks like Follow et al. do this 2459 !! at shallower depths than 1000 m, but I'll stick with this 2460 !! for now; I suspect that this seemingly arbitrary approach 2461 !! effectively "parameterises" the particle-based scavenging 2462 !! rates that other models use (i.e. at depth there are no 2463 !! sinking particles, so scavenging stops); it might be fun 2464 !! justifying this in a paper though! 2465 !! 2466 if ((fdep.gt.1000.) .and. (xFeT.lt.0.5)) then 2467 ffescav = 0. 2468 endif 2469 # endif 2470 else 2471 !!---------------------------------------------------------------------- 2472 !! No Scheme: you coward! 2473 !! This scheme puts its head in the sand and eskews any decision about 2474 !! how iron is removed from the ocean; prepare to get deluged in iron 2475 !! you fool! 2476 !!---------------------------------------------------------------------- 2477 ffescav = 0. 2478 endif 2479 2480 !!---------------------------------------------------------------------- 2481 !! Other iron cycle processes 2482 !!---------------------------------------------------------------------- 2483 !! 2484 !! aeolian iron deposition 2485 if (jk.eq.1) then 2486 !! zirondep is in mmol-Fe / m2 / day 2487 !! ffetop is in mmol-dissolved-Fe / m3 / day 2488 ffetop = zirondep(ji,jj) * xfe_sol / fthk 2489 else 2490 ffetop = 0.0 2491 endif 2492 !! 2493 !! seafloor iron addition 2494 !! AXY (10/07/12): amended to only apply sedimentary flux up to ~500 m down 2495 !! if (jk.eq.(mbathy(ji,jj)-1).AND.jk.lt.i1100) then 2496 if ((jk.eq.jmbathy).AND.jk.le.i0500) then 2497 !! Moore et al. (2004) cite a coastal California value of 5 umol/m2/d, but adopt a 2498 !! global value of 2 umol/m2/d for all areas < 1100 m; here we use this latter value 2499 !! but apply it everywhere 2500 !! AXY (21/07/09): actually, let's just apply it below 1100 m (levels 1-37) 2501 ffebot = (xfe_sed / fthk) 2502 else 2503 ffebot = 0.0 2504 endif 2505 2506 !!====================================================================== 2507 !! AXY (07/04/17): possible subroutine block; miscellaneous processes (fuse?) 2508 !!====================================================================== 2509 2510 !!---------------------------------------------------------------------- 2511 !! Miscellaneous 2512 !!---------------------------------------------------------------------- 2513 !! 2514 !! diatom frustule dissolution 2515 fsdiss = xsdiss * zpds 2516 2517 !!---------------------------------------------------------------------- 2518 !! Slow detritus creation 2519 !!---------------------------------------------------------------------- 2520 !! this variable integrates the creation of slow sinking detritus 2521 !! to allow the split between fast and slow detritus to be 2522 !! diagnosed 2523 fslown = fdpn + fdzmi + ((1.0 - xfdfrac1) * fdpd) + & 2524 ((1.0 - xfdfrac2) * fdzme) + ((1.0 - xbetan) * (finmi + finme)) 2525 !! 2526 !! this variable records the slow detrital sinking flux at this 2527 !! particular depth; it is used in the output of this flux at 2528 !! standard depths in the diagnostic outputs; needs to be 2529 !! adjusted from per second to per day because of parameter vsed 2530 fslownflux(ji,jj) = zdet * vsed * 86400. 2657 !! AXY (17/01/13) 2658 !! stop scavenging for iron concentrations below 0.5 umol / m3 2659 !! at depths greater than 1000 m; this aims to end MEDUSA's 2660 !! continual loss of iron at depth without impacting things 2661 !! at the surface too much; the justification for this is that 2662 !! it appears to be what Mick Follows et al. do in their work 2663 !! (as evidenced by the iron initial condition they supplied 2664 !! me with); to be honest, it looks like Follow et al. do this 2665 !! at shallower depths than 1000 m, but I'll stick with this 2666 !! for now; I suspect that this seemingly arbitrary approach 2667 !! effectively "parameterises" the particle-based scavenging 2668 !! rates that other models use (i.e. at depth there are no 2669 !! sinking particles, so scavenging stops); it might be fun 2670 !! justifying this in a paper though! 2671 !! 2672 if ((fdep.gt.1000.) .and. (xFeT.lt.0.5)) then 2673 ffescav = 0. 2674 endif 2675 # endif 2676 !! 2677 elseif (jiron.eq.2) then 2678 !!---------------------------------------------------------------------- 2679 !! Scheme 2: Moore et al. (2004) 2680 !! This scheme includes a single scavenging term that accounts for 2681 !! both suspended and sinking particles in the water column; this 2682 !! term scavenges total iron rather than "free" iron 2683 !!---------------------------------------------------------------------- 2684 !! 2685 !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 2686 xFeT = zfer * 1.e3 2687 !! 2688 !! this has a base scavenging rate (12% / y) which is modified by local 2689 !! particle concentration and sinking flux (and dust - but I'm ignoring 2690 !! that here for now) and which is accelerated when Fe concentration gets 2691 !! 0.6 nM (= 0.6 umol/m3 = 0.0006 mmol/m3), and decreased as concentrations 2692 !! below 0.4 nM (= 0.4 umol/m3 = 0.0004 mmol/m3) 2693 !! 2694 !! base scavenging rate (0.12 / y) 2695 fbase_scav = 0.12 / 365.25 2696 !! 2697 !! calculate sinking particle part of scaling factor 2698 !! this takes local fast sinking carbon (mmol C / m2 / d) and 2699 !! gets it into nmol C / cm3 / s ("rdt" below is the number of seconds in 2700 !! a model timestep) 2701 !! 2702 !! fscal_sink = ffastc(ji,jj) * 1.e2 / (86400.) 2703 !! 2704 !! ... actually, re-reading Moore et al.'s equations, it looks like he uses 2705 !! his sinking flux directly, without scaling it by time-step or anything, 2706 !! so I'll copy this here ... 2707 !! 2708 fscal_sink = ffastc(ji,jj) * 1.e2 2709 !! 2710 !! calculate particle part of scaling factor 2711 !! this totals up the carbon in suspended particles (Pn, Pd, Zmi, Zme, D), 2712 !! which comes out in mmol C / m3 (= nmol C / cm3), and then multiplies it 2713 !! by a magic factor, 0.002, to get it into nmol C / cm2 / s 2714 !! 2715 fscal_part = ((xthetapn * zphn) + (xthetapd * zphd) + (xthetazmi * zzmi) + & 2716 (xthetazme * zzme) + (xthetad * zdet)) * 0.002 2717 !! 2718 !! calculate scaling factor for base scavenging rate 2719 !! this uses the (now correctly scaled) sinking flux and standing 2720 !! particle concentration, divides through by some sort of reference 2721 !! value (= 0.0066 nmol C / cm2 / s) and then uses this, or not if its 2722 !! too high, to rescale the base scavenging rate 2723 !! 2724 fscal_scav = fbase_scav * min(((fscal_sink + fscal_part) / 0.0066), 4.0) 2725 !! 2726 !! the resulting scavenging rate is then scaled further according to the 2727 !! local iron concentration (i.e. diminished in low iron regions; enhanced 2728 !! in high iron regions; less alone in intermediate iron regions) 2729 !! 2730 if (xFeT.lt.0.4) then 2731 !! 2732 !! low iron region 2733 !! 2734 fscal_scav = fscal_scav * (xFeT / 0.4) 2735 !! 2736 elseif (xFeT.gt.0.6) then 2737 !! 2738 !! high iron region 2739 !! 2740 fscal_scav = fscal_scav + ((xFeT / 0.6) * (6.0 / 1.4)) 2741 !! 2742 else 2743 !! 2744 !! intermediate iron region: do nothing 2745 !! 2746 endif 2747 !! 2748 !! apply the calculated scavenging rate ... 2749 !! 2750 ffescav = fscal_scav * zfer 2751 !! 2752 elseif (jiron.eq.3) then 2753 !!---------------------------------------------------------------------- 2754 !! Scheme 3: Moore et al. (2008) 2755 !! This scheme includes a single scavenging term that accounts for 2756 !! sinking particles in the water column, and includes organic C, 2757 !! biogenic opal, calcium carbonate and dust in this (though the 2758 !! latter is ignored here until I work out what units the incoming 2759 !! "dust" flux is in); this term scavenges total iron rather than 2760 !! "free" iron 2761 !!---------------------------------------------------------------------- 2762 !! 2763 !! total iron concentration (mmol Fe / m3 -> umol Fe / m3) 2764 xFeT = zfer * 1.e3 2765 !! 2766 !! this has a base scavenging rate which is modified by local 2767 !! particle sinking flux (including dust - but I'm ignoring that 2768 !! here for now) and which is accelerated when Fe concentration 2769 !! is > 0.6 nM (= 0.6 umol/m3 = 0.0006 mmol/m3), and decreased as 2770 !! concentrations < 0.5 nM (= 0.5 umol/m3 = 0.0005 mmol/m3) 2771 !! 2772 !! base scavenging rate (Fe_b in paper; units may be wrong there) 2773 fbase_scav = 0.00384 ! (ng)^-1 cm 2774 !! 2775 !! calculate sinking particle part of scaling factor; this converts 2776 !! mmol / m2 / d fluxes of organic carbon, silicon and calcium 2777 !! carbonate into ng / cm2 / s fluxes; it is assumed here that the 2778 !! mass conversions simply consider the mass of the main element 2779 !! (C, Si and Ca) and *not* the mass of the molecules that they are 2780 !! part of; Moore et al. (2008) is unclear on the conversion that 2781 !! should be used 2782 !! 2783 !! milli -> nano; mol -> gram; /m2 -> /cm2; /d -> /s 2784 fscal_csink = (ffastc(ji,jj) * 1.e6 * xmassc * 1.e-4 / 86400.) ! ng C / cm2 / s 2785 fscal_sisink = (ffastsi(ji,jj) * 1.e6 * xmasssi * 1.e-4 / 86400.) ! ng Si / cm2 / s 2786 fscal_casink = (ffastca(ji,jj) * 1.e6 * xmassca * 1.e-4 / 86400.) ! ng Ca / cm2 / s 2787 !! 2788 !! sum up these sinking fluxes and convert to ng / cm by dividing 2789 !! through by a sinking rate of 100 m / d = 1.157 cm / s 2790 fscal_sink = ((fscal_csink * 6.) + fscal_sisink + fscal_casink) / & 2791 (100. * 1.e3 / 86400) ! ng / cm 2792 !! 2793 !! now calculate the scavenging rate based upon the base rate and 2794 !! this particle flux scaling; according to the published units, 2795 !! the result actually has *no* units, but as it must be expressed 2796 !! per unit time for it to make any sense, I'm assuming a missing 2797 !! "per second" 2798 fscal_scav = fbase_scav * fscal_sink ! / s 2799 !! 2800 !! the resulting scavenging rate is then scaled further according to the 2801 !! local iron concentration (i.e. diminished in low iron regions; enhanced 2802 !! in high iron regions; less alone in intermediate iron regions) 2803 !! 2804 if (xFeT.lt.0.5) then 2805 !! 2806 !! low iron region (0.5 instead of the 0.4 in Moore et al., 2004) 2807 !! 2808 fscal_scav = fscal_scav * (xFeT / 0.5) 2809 !! 2810 elseif (xFeT.gt.0.6) then 2811 !! 2812 !! high iron region (functional form different in Moore et al., 2004) 2813 !! 2814 fscal_scav = fscal_scav + ((xFeT - 0.6) * 0.00904) 2815 !! 2816 else 2817 !! 2818 !! intermediate iron region: do nothing 2819 !! 2820 endif 2821 !! 2822 !! apply the calculated scavenging rate ... 2823 !! 2824 ffescav = fscal_scav * zfer 2825 !! 2826 elseif (jiron.eq.4) then 2827 !!---------------------------------------------------------------------- 2828 !! Scheme 4: Galbraith et al. (2010) 2829 !! This scheme includes two scavenging terms, one for organic, 2830 !! particle-based scavenging, and another for inorganic scavenging; 2831 !! both terms scavenge "free" iron only 2832 !!---------------------------------------------------------------------- 2833 !! 2834 !! Galbraith et al. (2010) present a more straightforward outline of 2835 !! the scheme in Parekh et al. (2005) ... 2836 !! 2837 !! sinking particulate carbon available for scavenging 2838 !! this assumes a sinking rate of 100 m / d (Moore & Braucher, 2008), 2839 xCscav1 = (ffastc(ji,jj) * xmassc) / 100. ! = mg C / m3 2840 !! 2841 !! scale by Honeyman et al. (1981) exponent coefficient 2842 !! multiply by 1.e-3 to express C flux in g C rather than mg C 2843 xCscav2 = (xCscav1 * 1.e-3)**0.58 2844 !! 2845 !! multiply by Galbraith et al. (2010) scavenging rate 2846 xk_org = 0.5 ! ((g C m/3)^-1) / d 2847 xORGscav = xk_org * xCscav2 * xFeF 2848 !! 2849 !! Galbraith et al. (2010) also include an inorganic bit ... 2850 !! 2851 !! this occurs at a fixed rate, again based on the availability of 2852 !! "free" iron 2853 !! 2854 !! k_inorg = 1000 d**-1 nmol Fe**-0.5 kg**-0.5 2855 !! 2856 !! to implement this here, scale xFeF by 1026 to put in units of 2857 !! umol/m3 which approximately equal nmol/kg 2858 !! 2859 xk_inorg = 1000. ! ((nmol Fe / kg)^1.5) 2860 xINORGscav = (xk_inorg * (xFeF * 1026.)**1.5) * 1.e-3 2861 !! 2862 !! sum these two terms together 2863 ffescav = xORGscav + xINORGscav 2864 else 2865 !!---------------------------------------------------------------------- 2866 !! No Scheme: you coward! 2867 !! This scheme puts its head in the sand and eskews any decision about 2868 !! how iron is removed from the ocean; prepare to get deluged in iron 2869 !! you fool! 2870 !!---------------------------------------------------------------------- 2871 ffescav = 0. 2872 endif 2873 2874 !!---------------------------------------------------------------------- 2875 !! Other iron cycle processes 2876 !!---------------------------------------------------------------------- 2877 !! 2878 !! aeolian iron deposition 2879 if (jk.eq.1) then 2880 !! zirondep is in mmol-Fe / m2 / day 2881 !! ffetop is in mmol-dissolved-Fe / m3 / day 2882 ffetop = zirondep(ji,jj) * xfe_sol / fthk 2883 else 2884 ffetop = 0.0 2885 endif 2886 !! 2887 !! seafloor iron addition 2888 !! AXY (10/07/12): amended to only apply sedimentary flux up to ~500 m down 2889 !! if (jk.eq.(mbathy(ji,jj)-1).AND.jk.lt.i1100) then 2890 if ((jk.eq.jmbathy).AND.jk.le.i0500) then 2891 !! Moore et al. (2004) cite a coastal California value of 5 umol/m2/d, but adopt a 2892 !! global value of 2 umol/m2/d for all areas < 1100 m; here we use this latter value 2893 !! but apply it everywhere 2894 !! AXY (21/07/09): actually, let's just apply it below 1100 m (levels 1-37) 2895 ffebot = (xfe_sed / fthk) 2896 else 2897 ffebot = 0.0 2898 endif 2899 2900 !! AXY (16/12/09): remove iron addition/removal processes 2901 !! For the purposes of the quarter degree run, the iron cycle is being pegged to the 2902 !! initial condition supplied by Mick Follows via restoration with a 30 day period; 2903 !! iron addition at the seafloor is still permitted with the idea that this extra 2904 !! iron will be removed by the restoration away from the source 2905 !! ffescav = 0.0 2906 !! ffetop = 0.0 2907 !! ffebot = 0.0 2908 2909 # if defined key_debug_medusa 2910 !! report miscellaneous calculations 2911 if (idf.eq.1.AND.idfval.eq.1) then 2912 IF (lwp) write (numout,*) '------------------------------' 2913 IF (lwp) write (numout,*) 'xfe_sol = ', xfe_sol 2914 IF (lwp) write (numout,*) 'xfe_mass = ', xfe_mass 2915 IF (lwp) write (numout,*) 'ffetop(',jk,') = ', ffetop 2916 IF (lwp) write (numout,*) 'ffebot(',jk,') = ', ffebot 2917 IF (lwp) write (numout,*) 'xFree(',jk,') = ', xFree(ji,jj) 2918 IF (lwp) write (numout,*) 'ffescav(',jk,') = ', ffescav 2919 endif 2920 # endif 2921 2922 !!---------------------------------------------------------------------- 2923 !! Miscellaneous 2924 !!---------------------------------------------------------------------- 2925 !! 2926 !! diatom frustule dissolution 2927 fsdiss = xsdiss * zpds 2928 2929 # if defined key_debug_medusa 2930 !! report miscellaneous calculations 2931 if (idf.eq.1.AND.idfval.eq.1) then 2932 IF (lwp) write (numout,*) '------------------------------' 2933 IF (lwp) write (numout,*) 'fsdiss(',jk,') = ', fsdiss 2934 endif 2935 # endif 2936 2937 !!---------------------------------------------------------------------- 2938 !! Slow detritus creation 2939 !!---------------------------------------------------------------------- 2940 !! this variable integrates the creation of slow sinking detritus 2941 !! to allow the split between fast and slow detritus to be 2942 !! diagnosed 2943 fslown = fdpn + fdzmi + ((1.0 - xfdfrac1) * fdpd) + & 2944 ((1.0 - xfdfrac2) * fdzme) + ((1.0 - xbetan) * (finmi + finme)) 2945 !! 2946 !! this variable records the slow detrital sinking flux at this 2947 !! particular depth; it is used in the output of this flux at 2948 !! standard depths in the diagnostic outputs; needs to be 2949 !! adjusted from per second to per day because of parameter vsed 2950 fslownflux(ji,jj) = zdet * vsed * 86400. 2531 2951 # if defined key_roam 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 # endif 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2952 !! 2953 !! and the same for detrital carbon 2954 fslowc = (xthetapn * fdpn) + (xthetazmi * fdzmi) + & 2955 (xthetapd * (1.0 - xfdfrac1) * fdpd) + & 2956 (xthetazme * (1.0 - xfdfrac2) * fdzme) + & 2957 ((1.0 - xbetac) * (ficmi + ficme)) 2958 !! 2959 !! this variable records the slow detrital sinking flux at this 2960 !! particular depth; it is used in the output of this flux at 2961 !! standard depths in the diagnostic outputs; needs to be 2962 !! adjusted from per second to per day because of parameter vsed 2963 fslowcflux(ji,jj) = zdtc * vsed * 86400. 2964 # endif 2965 2966 !!---------------------------------------------------------------------- 2967 !! Nutrient regeneration 2968 !! this variable integrates total nitrogen regeneration down the 2969 !! watercolumn; its value is stored and output as a 2D diagnostic; 2970 !! the corresponding dissolution flux of silicon (from sources 2971 !! other than fast detritus) is also integrated; note that, 2972 !! confusingly, the linear loss terms from plankton compartments 2973 !! are labelled as fdX2 when one might have expected fdX or fdX1 2974 !!---------------------------------------------------------------------- 2975 !! 2976 !! nitrogen 2977 fregen = (( (xphi * (fgmipn + fgmid)) + & ! messy feeding 2978 (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) + & ! messy feeding 2979 fmiexcr + fmeexcr + fdd + & ! excretion + D remin. 2980 fdpn2 + fdpd2 + fdzmi2 + fdzme2) * fthk) ! linear mortality 2981 !! 2982 !! silicon 2983 fregensi = (( fsdiss + ((1.0 - xfdfrac1) * fdpds) + & ! dissolution + non-lin. mortality 2984 ((1.0 - xfdfrac3) * fgmepds) + & ! egestion by zooplankton 2985 fdpds2) * fthk) ! linear mortality 2566 2986 # if defined key_roam 2567 !! 2568 !! carbon 2569 fregenc = (( (xphi * ((xthetapn * fgmipn) + fgmidc)) + & ! messy feeding 2570 (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & ! messy feeding 2571 (xthetazmi * fgmezmi) + fgmedc)) + & ! messy feeding 2572 fmiresp + fmeresp + fddc + & ! respiration + D remin. 2573 (xthetapn * fdpn2) + (xthetapd * fdpd2) + & ! linear mortality 2574 (xthetazmi * fdzmi2) + (xthetazme * fdzme2)) * fthk) ! linear mortality 2575 # endif 2576 2577 2578 !!====================================================================== 2579 !! AXY (07/04/17): possible subroutine block; fast-sinking detritus 2580 !!====================================================================== 2581 2582 !!---------------------------------------------------------------------- 2583 !! Fast-sinking detritus terms 2584 !! "local" variables declared so that conservation can be checked; 2585 !! the calculated terms are added to the fast-sinking flux later on 2586 !! only after the flux entering this level has experienced some 2587 !! remineralisation 2588 !! note: these fluxes need to be scaled by the level thickness 2589 !!---------------------------------------------------------------------- 2590 !! 2591 !! nitrogen: diatom and mesozooplankton mortality 2592 ftempn = b0 * ((xfdfrac1 * fdpd) + (xfdfrac2 * fdzme)) 2593 !! 2594 !! silicon: diatom mortality and grazed diatoms 2595 ftempsi = b0 * ((xfdfrac1 * fdpds) + (xfdfrac3 * fgmepds)) 2596 !! 2597 !! iron: diatom and mesozooplankton mortality 2598 ftempfe = b0 * (((xfdfrac1 * fdpd) + (xfdfrac2 * fdzme)) * xrfn) 2599 !! 2600 !! carbon: diatom and mesozooplankton mortality 2601 ftempc = b0 * ((xfdfrac1 * xthetapd * fdpd) + & 2602 (xfdfrac2 * xthetazme * fdzme)) 2603 !! 2987 !! 2988 !! carbon 2989 fregenc = (( (xphi * ((xthetapn * fgmipn) + fgmidc)) + & ! messy feeding 2990 (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & ! messy feeding 2991 (xthetazmi * fgmezmi) + fgmedc)) + & ! messy feeding 2992 fmiresp + fmeresp + fddc + & ! respiration + D remin. 2993 (xthetapn * fdpn2) + (xthetapd * fdpd2) + & ! linear mortality 2994 (xthetazmi * fdzmi2) + (xthetazme * fdzme2)) * fthk) ! linear mortality 2995 # endif 2996 2997 !!---------------------------------------------------------------------- 2998 !! Fast-sinking detritus terms 2999 !! "local" variables declared so that conservation can be checked; 3000 !! the calculated terms are added to the fast-sinking flux later on 3001 !! only after the flux entering this level has experienced some 3002 !! remineralisation 3003 !! note: these fluxes need to be scaled by the level thickness 3004 !!---------------------------------------------------------------------- 3005 !! 3006 !! nitrogen: diatom and mesozooplankton mortality 3007 ftempn = b0 * ((xfdfrac1 * fdpd) + (xfdfrac2 * fdzme)) 3008 !! 3009 !! silicon: diatom mortality and grazed diatoms 3010 ftempsi = b0 * ((xfdfrac1 * fdpds) + (xfdfrac3 * fgmepds)) 3011 !! 3012 !! iron: diatom and mesozooplankton mortality 3013 ftempfe = b0 * (((xfdfrac1 * fdpd) + (xfdfrac2 * fdzme)) * xrfn) 3014 !! 3015 !! carbon: diatom and mesozooplankton mortality 3016 ftempc = b0 * ((xfdfrac1 * xthetapd * fdpd) + & 3017 (xfdfrac2 * xthetazme * fdzme)) 3018 !! 2604 3019 # if defined key_roam 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 3020 if (jrratio.eq.0) then 3021 !! CaCO3: latitudinally-based fraction of total primary production 3022 !! absolute latitude of current grid cell 3023 flat = abs(gphit(ji,jj)) 3024 !! 0.10 at equator; 0.02 at pole 3025 fcaco3 = xcaco3a + ((xcaco3b - xcaco3a) * ((90.0 - flat) / 90.0)) 3026 elseif (jrratio.eq.1) then 3027 !! CaCO3: Ridgwell et al. (2007) submodel, version 1 3028 !! this uses SURFACE omega calcite to regulate rain ratio 3029 if (f_omcal(ji,jj).ge.1.0) then 3030 fq1 = (f_omcal(ji,jj) - 1.0)**0.81 3031 else 3032 fq1 = 0. 3033 endif 3034 fcaco3 = xridg_r0 * fq1 3035 elseif (jrratio.eq.2) then 3036 !! CaCO3: Ridgwell et al. (2007) submodel, version 2 3037 !! this uses FULL 3D omega calcite to regulate rain ratio 3038 if (f3_omcal(ji,jj,jk).ge.1.0) then 3039 fq1 = (f3_omcal(ji,jj,jk) - 1.0)**0.81 3040 else 3041 fq1 = 0. 3042 endif 3043 fcaco3 = xridg_r0 * fq1 3044 endif 2630 3045 # else 2631 2632 2633 2634 2635 2636 # endif 2637 2638 2639 2640 2641 2642 2643 3046 !! CaCO3: latitudinally-based fraction of total primary production 3047 !! absolute latitude of current grid cell 3048 flat = abs(gphit(ji,jj)) 3049 !! 0.10 at equator; 0.02 at pole 3050 fcaco3 = xcaco3a + ((xcaco3b - xcaco3a) * ((90.0 - flat) / 90.0)) 3051 # endif 3052 !! AXY (09/03/09): convert CaCO3 production from function of 3053 !! primary production into a function of fast-sinking material; 3054 !! technically, this is what Dunne et al. (2007) do anyway; they 3055 !! convert total primary production estimated from surface 3056 !! chlorophyll to an export flux for which they apply conversion 3057 !! factors to estimate the various elemental fractions (Si, Ca) 3058 ftempca = ftempc * fcaco3 2644 3059 2645 3060 # if defined key_debug_medusa 2646 2647 2648 2649 2650 3061 !! integrate total fast detritus production 3062 if (idf.eq.1) then 3063 fifd_n(ji,jj) = fifd_n(ji,jj) + (ftempn * fthk) 3064 fifd_si(ji,jj) = fifd_si(ji,jj) + (ftempsi * fthk) 3065 fifd_fe(ji,jj) = fifd_fe(ji,jj) + (ftempfe * fthk) 2651 3066 # if defined key_roam 2652 3067 fifd_c(ji,jj) = fifd_c(ji,jj) + (ftempc * fthk) 2653 3068 # endif 2654 endif 2655 # endif 2656 2657 !!---------------------------------------------------------------------- 2658 !! This version of MEDUSA offers a choice of three methods for 2659 !! handling the remineralisation of fast detritus. All three 2660 !! do so in broadly the same way: 2661 !! 2662 !! 1. Fast detritus is stored as a 2D array [ ffastX ] 2663 !! 2. Fast detritus is added level-by-level [ ftempX ] 2664 !! 3. Fast detritus is not remineralised in the top box [ freminX ] 2665 !! 4. Remaining fast detritus is remineralised in the bottom [ fsedX ] 2666 !! box 2667 !! 2668 !! The three remineralisation methods are: 2669 !! 2670 !! 1. Ballast model (i.e. that published in Yool et al., 2011) 2671 !! (1b. Ballast-sans-ballast model) 2672 !! 2. Martin et al. (1987) 2673 !! 3. Henson et al. (2011) 2674 !! 2675 !! The first of these couples C, N and Fe remineralisation to 2676 !! the remineralisation of particulate Si and CaCO3, but the 2677 !! latter two treat remineralisation of C, N, Fe, Si and CaCO3 2678 !! completely separately. At present a switch within the code 2679 !! regulates which submodel is used, but this should be moved 2680 !! to the namelist file. 2681 !! 2682 !! The ballast-sans-ballast submodel is an original development 2683 !! feature of MEDUSA in which the ballast submodel's general 2684 !! framework and parameterisation is used, but in which there 2685 !! is no protection of organic material afforded by ballasting 2686 !! minerals. While similar, it is not the same as the Martin 2687 !! et al. (1987) submodel. 2688 !! 2689 !! Since the three submodels behave the same in terms of 2690 !! accumulating sinking material and remineralising it all at 2691 !! the seafloor, these portions of the code below are common to 2692 !! all three. 2693 !!---------------------------------------------------------------------- 2694 2695 if (jexport.eq.1) then 2696 !!====================================================================== 2697 !! BALLAST SUBMODEL 2698 !!====================================================================== 2699 !! 2700 !!---------------------------------------------------------------------- 2701 !! Fast-sinking detritus fluxes, pt. 1: REMINERALISATION 2702 !! aside from explicitly modelled, slow-sinking detritus, the 2703 !! model includes an implicit representation of detrital 2704 !! particles that sink too quickly to be modelled with 2705 !! explicit state variables; this sinking flux is instead 2706 !! instantaneously remineralised down the water column using 2707 !! the version of Armstrong et al. (2002)'s ballast model 2708 !! used by Dunne et al. (2007); the version of this model 2709 !! here considers silicon and calcium carbonate ballast 2710 !! minerals; this section of the code redistributes the fast 2711 !! sinking material generated locally down the water column; 2712 !! this differs from Dunne et al. (2007) in that fast sinking 2713 !! material is distributed at *every* level below that it is 2714 !! generated, rather than at every level below some fixed 2715 !! depth; this scheme is also different in that sinking material 2716 !! generated in one level is aggregated with that generated by 2717 !! shallower levels; this should make the ballast model more 2718 !! self-consistent (famous last words) 2719 !!---------------------------------------------------------------------- 2720 !! 2721 if (jk.eq.1) then 2722 !! this is the SURFACE OCEAN BOX (no remineralisation) 2723 !! 2724 freminc = 0.0 2725 freminn = 0.0 2726 freminfe = 0.0 2727 freminsi = 0.0 2728 freminca = 0.0 2729 elseif (jk.le.jmbathy) then 2730 !! this is an OCEAN BOX (remineralise some material) 2731 !! 2732 !! set up CCD depth to be used depending on user choice 2733 if (jocalccd.eq.0) then 2734 !! use default CCD field 2735 fccd_dep = ocal_ccd(ji,jj) 2736 elseif (jocalccd.eq.1) then 2737 !! use calculated CCD field 2738 fccd_dep = f2_ccd_cal(ji,jj) 2739 endif 2740 !! 2741 !! === organic carbon === 2742 fq0 = ffastc(ji,jj) !! how much organic C enters this box (mol) 2743 if (iball.eq.1) then 2744 fq1 = (fq0 * xmassc) !! how much it weighs (mass) 2745 fq2 = (ffastca(ji,jj) * xmassca) !! how much CaCO3 enters this box (mass) 2746 fq3 = (ffastsi(ji,jj) * xmasssi) !! how much opal enters this box (mass) 2747 fq4 = (fq2 * xprotca) + (fq3 * xprotsi) !! total protected organic C (mass) 2748 !! this next term is calculated for C but used for N and Fe as well 2749 !! it needs to be protected in case ALL C is protected 2750 if (fq4.lt.fq1) then 2751 fprotf = (fq4 / (fq1 + tiny(fq1))) !! protected fraction of total organic C (non-dim) 2752 else 2753 fprotf = 1.0 !! all organic C is protected (non-dim) 2754 endif 2755 fq5 = (1.0 - fprotf) !! unprotected fraction of total organic C (non-dim) 2756 fq6 = (fq0 * fq5) !! how much organic C is unprotected (mol) 2757 fq7 = (fq6 * exp(-(fthk / xfastc))) !! how much unprotected C leaves this box (mol) 2758 fq8 = (fq7 + (fq0 * fprotf)) !! how much total C leaves this box (mol) 2759 freminc = (fq0 - fq8) / fthk !! C remineralisation in this box (mol) 2760 ffastc(ji,jj) = fq8 2761 else 2762 fq1 = fq0 * exp(-(fthk / xfastc)) !! how much organic C leaves this box (mol) 2763 freminc = (fq0 - fq1) / fthk !! C remineralisation in this box (mol) 2764 ffastc(ji,jj) = fq1 2765 endif 2766 !! 2767 !! === organic nitrogen === 2768 fq0 = ffastn(ji,jj) !! how much organic N enters this box (mol) 2769 if (iball.eq.1) then 2770 fq5 = (1.0 - fprotf) !! unprotected fraction of total organic N (non-dim) 2771 fq6 = (fq0 * fq5) !! how much organic N is unprotected (mol) 2772 fq7 = (fq6 * exp(-(fthk / xfastc))) !! how much unprotected N leaves this box (mol) 2773 fq8 = (fq7 + (fq0 * fprotf)) !! how much total N leaves this box (mol) 2774 freminn = (fq0 - fq8) / fthk !! N remineralisation in this box (mol) 2775 ffastn(ji,jj) = fq8 2776 else 2777 fq1 = fq0 * exp(-(fthk / xfastc)) !! how much organic N leaves this box (mol) 2778 freminn = (fq0 - fq1) / fthk !! N remineralisation in this box (mol) 2779 ffastn(ji,jj) = fq1 2780 endif 2781 !! 2782 !! === organic iron === 2783 fq0 = ffastfe(ji,jj) !! how much organic Fe enters this box (mol) 2784 if (iball.eq.1) then 2785 fq5 = (1.0 - fprotf) !! unprotected fraction of total organic Fe (non-dim) 2786 fq6 = (fq0 * fq5) !! how much organic Fe is unprotected (mol) 2787 fq7 = (fq6 * exp(-(fthk / xfastc))) !! how much unprotected Fe leaves this box (mol) 2788 fq8 = (fq7 + (fq0 * fprotf)) !! how much total Fe leaves this box (mol) 2789 freminfe = (fq0 - fq8) / fthk !! Fe remineralisation in this box (mol) 2790 ffastfe(ji,jj) = fq8 2791 else 2792 fq1 = fq0 * exp(-(fthk / xfastc)) !! how much total Fe leaves this box (mol) 2793 freminfe = (fq0 - fq1) / fthk !! Fe remineralisation in this box (mol) 2794 ffastfe(ji,jj) = fq1 2795 endif 2796 !! 2797 !! === biogenic silicon === 2798 fq0 = ffastsi(ji,jj) !! how much opal centers this box (mol) 2799 fq1 = fq0 * exp(-(fthk / xfastsi)) !! how much opal leaves this box (mol) 2800 freminsi = (fq0 - fq1) / fthk !! Si remineralisation in this box (mol) 2801 ffastsi(ji,jj) = fq1 2802 !! 2803 !! === biogenic calcium carbonate === 2804 fq0 = ffastca(ji,jj) !! how much CaCO3 enters this box (mol) 2805 if (fdep.le.fccd_dep) then 2806 !! whole grid cell above CCD 2807 fq1 = fq0 !! above lysocline, no Ca dissolves (mol) 2808 freminca = 0.0 !! above lysocline, no Ca dissolves (mol) 2809 fccd(ji,jj) = real(jk) !! which is the last level above the CCD? (#) 2810 elseif (fdep.ge.fccd_dep) then 2811 !! whole grid cell below CCD 2812 fq1 = fq0 * exp(-(fthk / xfastca)) !! how much CaCO3 leaves this box (mol) 2813 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 2814 else 2815 !! partial grid cell below CCD 2816 fq2 = fdep1 - fccd_dep !! amount of grid cell below CCD (m) 2817 fq1 = fq0 * exp(-(fq2 / xfastca)) !! how much CaCO3 leaves this box (mol) 2818 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 2819 endif 2820 ffastca(ji,jj) = fq1 2821 else 2822 !! this is BELOW THE LAST OCEAN BOX (do nothing) 2823 freminc = 0.0 2824 freminn = 0.0 2825 freminfe = 0.0 2826 freminsi = 0.0 2827 freminca = 0.0 2828 endif 2829 2830 elseif (jexport.eq.2.or.jexport.eq.3) then 2831 if (jexport.eq.2) then 2832 !!====================================================================== 2833 !! MARTIN ET AL. (1987) SUBMODEL 2834 !!====================================================================== 2835 !! 2836 !!---------------------------------------------------------------------- 2837 !! This submodel uses the classic Martin et al. (1987) curve 2838 !! to determine the attenuation of fast-sinking detritus down 2839 !! the water column. All three organic elements, C, N and Fe, 2840 !! are handled identically, and their quantities in sinking 2841 !! particles attenuate according to a power relationship 2842 !! governed by parameter "b". This is assigned a canonical 2843 !! value of -0.858. Biogenic opal and calcium carbonate are 2844 !! attentuated using the same function as in the ballast 2845 !! submodel 2846 !!---------------------------------------------------------------------- 2847 !! 2848 fb_val = -0.858 2849 elseif (jexport.eq.3) then 2850 !!====================================================================== 2851 !! HENSON ET AL. (2011) SUBMODEL 2852 !!====================================================================== 2853 !! 2854 !!---------------------------------------------------------------------- 2855 !! This submodel reconfigures the Martin et al. (1987) curve by 2856 !! allowing the "b" value to vary geographically. Its value is 2857 !! set, following Henson et al. (2011), as a function of local 2858 !! sea surface temperature: 2859 !! b = -1.06 + (0.024 * SST) 2860 !! This means that remineralisation length scales are longer in 2861 !! warm, tropical areas and shorter in cold, polar areas. This 2862 !! does seem back-to-front (i.e. one would expect GREATER 2863 !! remineralisation in warmer waters), but is an outcome of 2864 !! analysis of sediment trap data, and it may reflect details 2865 !! of ecosystem structure that pertain to particle production 2866 !! rather than simply Q10. 2867 !!---------------------------------------------------------------------- 2868 !! 2869 fl_sst = tsn(ji,jj,1,jp_tem) 2870 fb_val = -1.06 + (0.024 * fl_sst) 2871 endif 2872 !! 2873 if (jk.eq.1) then 2874 !! this is the SURFACE OCEAN BOX (no remineralisation) 2875 !! 2876 freminc = 0.0 2877 freminn = 0.0 2878 freminfe = 0.0 2879 freminsi = 0.0 2880 freminca = 0.0 2881 elseif (jk.le.jmbathy) then 2882 !! this is an OCEAN BOX (remineralise some material) 2883 !! 2884 !! === organic carbon === 2885 fq0 = ffastc(ji,jj) !! how much organic C enters this box (mol) 2886 fq1 = fq0 * ((fdep1/fdep)**fb_val) !! how much organic C leaves this box (mol) 2887 freminc = (fq0 - fq1) / fthk !! C remineralisation in this box (mol) 2888 ffastc(ji,jj) = fq1 2889 !! 2890 !! === organic nitrogen === 2891 fq0 = ffastn(ji,jj) !! how much organic N enters this box (mol) 2892 fq1 = fq0 * ((fdep1/fdep)**fb_val) !! how much organic N leaves this box (mol) 2893 freminn = (fq0 - fq1) / fthk !! N remineralisation in this box (mol) 2894 ffastn(ji,jj) = fq1 2895 !! 2896 !! === organic iron === 2897 fq0 = ffastfe(ji,jj) !! how much organic Fe enters this box (mol) 2898 fq1 = fq0 * ((fdep1/fdep)**fb_val) !! how much organic Fe leaves this box (mol) 2899 freminfe = (fq0 - fq1) / fthk !! Fe remineralisation in this box (mol) 2900 ffastfe(ji,jj) = fq1 2901 !! 2902 !! === biogenic silicon === 2903 fq0 = ffastsi(ji,jj) !! how much opal centers this box (mol) 2904 fq1 = fq0 * exp(-(fthk / xfastsi)) !! how much opal leaves this box (mol) 2905 freminsi = (fq0 - fq1) / fthk !! Si remineralisation in this box (mol) 2906 ffastsi(ji,jj) = fq1 2907 !! 2908 !! === biogenic calcium carbonate === 2909 fq0 = ffastca(ji,jj) !! how much CaCO3 enters this box (mol) 2910 if (fdep.le.ocal_ccd(ji,jj)) then 2911 !! whole grid cell above CCD 2912 fq1 = fq0 !! above lysocline, no Ca dissolves (mol) 2913 freminca = 0.0 !! above lysocline, no Ca dissolves (mol) 2914 fccd(ji,jj) = real(jk) !! which is the last level above the CCD? (#) 2915 elseif (fdep.ge.ocal_ccd(ji,jj)) then 2916 !! whole grid cell below CCD 2917 fq1 = fq0 * exp(-(fthk / xfastca)) !! how much CaCO3 leaves this box (mol) 2918 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 2919 else 2920 !! partial grid cell below CCD 2921 fq2 = fdep1 - ocal_ccd(ji,jj) !! amount of grid cell below CCD (m) 2922 fq1 = fq0 * exp(-(fq2 / xfastca)) !! how much CaCO3 leaves this box (mol) 2923 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 2924 endif 2925 ffastca(ji,jj) = fq1 2926 else 2927 !! this is BELOW THE LAST OCEAN BOX (do nothing) 2928 freminc = 0.0 2929 freminn = 0.0 2930 freminfe = 0.0 2931 freminsi = 0.0 2932 freminca = 0.0 2933 endif 2934 2935 endif 2936 2937 !!---------------------------------------------------------------------- 2938 !! Fast-sinking detritus fluxes, pt. 2: UPDATE FAST FLUXES 2939 !! here locally calculated additions to the fast-sinking flux are added 2940 !! to the total fast-sinking flux; this is done here such that material 2941 !! produced in a particular layer is only remineralised below this 2942 !! layer 2943 !!---------------------------------------------------------------------- 2944 !! 2945 !! add sinking material generated in this layer to running totals 2946 !! 2947 !! === organic carbon === (diatom and mesozooplankton mortality) 2948 ffastc(ji,jj) = ffastc(ji,jj) + (ftempc * fthk) 2949 !! 2950 !! === organic nitrogen === (diatom and mesozooplankton mortality) 2951 ffastn(ji,jj) = ffastn(ji,jj) + (ftempn * fthk) 2952 !! 2953 !! === organic iron === (diatom and mesozooplankton mortality) 2954 ffastfe(ji,jj) = ffastfe(ji,jj) + (ftempfe * fthk) 2955 !! 2956 !! === biogenic silicon === (diatom mortality and grazed diatoms) 2957 ffastsi(ji,jj) = ffastsi(ji,jj) + (ftempsi * fthk) 2958 !! 2959 !! === biogenic calcium carbonate === (latitudinally-based fraction of total primary production) 2960 ffastca(ji,jj) = ffastca(ji,jj) + (ftempca * fthk) 2961 2962 !!---------------------------------------------------------------------- 2963 !! Fast-sinking detritus fluxes, pt. 3: SEAFLOOR 2964 !! remineralise all remaining fast-sinking detritus to dissolved 2965 !! nutrients; the sedimentation fluxes calculated here allow the 2966 !! separation of what's remineralised sinking through the final 2967 !! ocean box from that which is added to the final box by the 2968 !! remineralisation of material that reaches the seafloor (i.e. 2969 !! the model assumes that *all* material that hits the seafloor 2970 !! is remineralised and that none is permanently buried; hey, 2971 !! this is a giant GCM model that can't be run for long enough 2972 !! to deal with burial fluxes!) 2973 !! 2974 !! in a change to this process, in part so that MEDUSA behaves 2975 !! a little more like ERSEM et al., fast-sinking detritus (N, Fe 2976 !! and C) is converted to slow sinking detritus at the seafloor 2977 !! instead of being remineralised; the rationale is that in 2978 !! shallower shelf regions (... that are not fully mixed!) this 2979 !! allows the detrital material to return slowly to dissolved 2980 !! nutrient rather than instantaneously as now; the alternative 2981 !! would be to explicitly handle seafloor organic material - a 2982 !! headache I don't wish to experience at this point; note that 2983 !! fast-sinking Si and Ca detritus is just remineralised as 2984 !! per usual 2985 !! 2986 !! AXY (13/01/12) 2987 !! in a further change to this process, again so that MEDUSA is 2988 !! a little more like ERSEM et al., material that reaches the 2989 !! seafloor can now be added to sediment pools and stored for 2990 !! slow release; there are new 2D arrays for organic nitrogen, 2991 !! iron and carbon and inorganic silicon and carbon that allow 2992 !! fast and slow detritus that reaches the seafloor to be held 2993 !! and released back to the water column more slowly; these arrays 2994 !! are transferred via the tracer restart files between repeat 2995 !! submissions of the model 2996 !!---------------------------------------------------------------------- 2997 !! 2998 ffast2slowc = 0.0 2999 ffast2slown = 0.0 3000 ffast2slowfe = 0.0 3001 !! 3002 if (jk.eq.jmbathy) then 3003 !! this is the BOTTOM OCEAN BOX (remineralise everything) 3004 !! 3005 !! AXY (17/01/12): tweaked to include benthos pools 3006 !! 3007 !! === organic carbon === 3008 if (jfdfate.eq.0 .and. jorgben.eq.0) then 3009 freminc = freminc + (ffastc(ji,jj) / fthk) !! C remineralisation in this box (mol/m3) 3010 elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 3011 ffast2slowc = ffastc(ji,jj) / fthk !! fast C -> slow C (mol/m3) 3012 fslowc = fslowc + ffast2slowc 3013 elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 3014 f_fbenin_c(ji,jj) = ffastc(ji,jj) !! fast C -> benthic C (mol/m2) 3015 endif 3016 fsedc(ji,jj) = ffastc(ji,jj) !! record seafloor C (mol/m2) 3017 ffastc(ji,jj) = 0.0 3018 !! 3019 !! === organic nitrogen === 3020 if (jfdfate.eq.0 .and. jorgben.eq.0) then 3021 freminn = freminn + (ffastn(ji,jj) / fthk) !! N remineralisation in this box (mol/m3) 3022 elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 3023 ffast2slown = ffastn(ji,jj) / fthk !! fast N -> slow N (mol/m3) 3024 fslown = fslown + ffast2slown 3025 elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 3026 f_fbenin_n(ji,jj) = ffastn(ji,jj) !! fast N -> benthic N (mol/m2) 3027 endif 3028 fsedn(ji,jj) = ffastn(ji,jj) !! record seafloor N (mol/m2) 3029 ffastn(ji,jj) = 0.0 3030 !! 3031 !! === organic iron === 3032 if (jfdfate.eq.0 .and. jorgben.eq.0) then 3033 freminfe = freminfe + (ffastfe(ji,jj) / fthk) !! Fe remineralisation in this box (mol/m3) 3034 elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 3035 ffast2slowfe = ffastn(ji,jj) / fthk !! fast Fe -> slow Fe (mol/m3) 3036 elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 3037 f_fbenin_fe(ji,jj) = ffastfe(ji,jj) !! fast Fe -> benthic Fe (mol/m2) 3038 endif 3039 fsedfe(ji,jj) = ffastfe(ji,jj) !! record seafloor Fe (mol/m2) 3040 ffastfe(ji,jj) = 0.0 3041 !! 3042 !! === biogenic silicon === 3043 if (jinorgben.eq.0) then 3044 freminsi = freminsi + (ffastsi(ji,jj) / fthk) !! Si remineralisation in this box (mol/m3) 3045 elseif (jinorgben.eq.1) then 3046 f_fbenin_si(ji,jj) = ffastsi(ji,jj) !! fast Si -> benthic Si (mol/m2) 3047 endif 3048 fsedsi(ji,jj) = ffastsi(ji,jj) !! record seafloor Si (mol/m2) 3049 ffastsi(ji,jj) = 0.0 3050 !! 3051 !! === biogenic calcium carbonate === 3052 if (jinorgben.eq.0) then 3053 freminca = freminca + (ffastca(ji,jj) / fthk) !! Ca remineralisation in this box (mol/m3) 3054 elseif (jinorgben.eq.1) then 3055 f_fbenin_ca(ji,jj) = ffastca(ji,jj) !! fast Ca -> benthic Ca (mol/m2) 3056 endif 3057 fsedca(ji,jj) = ffastca(ji,jj) !! record seafloor Ca (mol/m2) 3058 ffastca(ji,jj) = 0.0 3059 endif 3060 3069 endif 3070 3071 !! report quantities of fast-sinking detritus for each component 3072 if (idf.eq.1.AND.idfval.eq.1) then 3073 IF (lwp) write (numout,*) '------------------------------' 3074 IF (lwp) write (numout,*) 'fdpd(',jk,') = ', fdpd 3075 IF (lwp) write (numout,*) 'fdzme(',jk,') = ', fdzme 3076 IF (lwp) write (numout,*) 'ftempn(',jk,') = ', ftempn 3077 IF (lwp) write (numout,*) 'ftempsi(',jk,') = ', ftempsi 3078 IF (lwp) write (numout,*) 'ftempfe(',jk,') = ', ftempfe 3079 IF (lwp) write (numout,*) 'ftempc(',jk,') = ', ftempc 3080 IF (lwp) write (numout,*) 'ftempca(',jk,') = ', ftempca 3081 IF (lwp) write (numout,*) 'flat(',jk,') = ', flat 3082 IF (lwp) write (numout,*) 'fcaco3(',jk,') = ', fcaco3 3083 endif 3084 # endif 3085 3086 !!---------------------------------------------------------------------- 3087 !! This version of MEDUSA offers a choice of three methods for 3088 !! handling the remineralisation of fast detritus. All three 3089 !! do so in broadly the same way: 3090 !! 3091 !! 1. Fast detritus is stored as a 2D array [ ffastX ] 3092 !! 2. Fast detritus is added level-by-level [ ftempX ] 3093 !! 3. Fast detritus is not remineralised in the top box [ freminX ] 3094 !! 4. Remaining fast detritus is remineralised in the bottom [ fsedX ] 3095 !! box 3096 !! 3097 !! The three remineralisation methods are: 3098 !! 3099 !! 1. Ballast model (i.e. that published in Yool et al., 2011) 3100 !! (1b. Ballast-sans-ballast model) 3101 !! 2. Martin et al. (1987) 3102 !! 3. Henson et al. (2011) 3103 !! 3104 !! The first of these couples C, N and Fe remineralisation to 3105 !! the remineralisation of particulate Si and CaCO3, but the 3106 !! latter two treat remineralisation of C, N, Fe, Si and CaCO3 3107 !! completely separately. At present a switch within the code 3108 !! regulates which submodel is used, but this should be moved 3109 !! to the namelist file. 3110 !! 3111 !! The ballast-sans-ballast submodel is an original development 3112 !! feature of MEDUSA in which the ballast submodel's general 3113 !! framework and parameterisation is used, but in which there 3114 !! is no protection of organic material afforded by ballasting 3115 !! minerals. While similar, it is not the same as the Martin 3116 !! et al. (1987) submodel. 3117 !! 3118 !! Since the three submodels behave the same in terms of 3119 !! accumulating sinking material and remineralising it all at 3120 !! the seafloor, these portions of the code below are common to 3121 !! all three. 3122 !!---------------------------------------------------------------------- 3123 3124 if (jexport.eq.1) then 3125 !!====================================================================== 3126 !! BALLAST SUBMODEL 3127 !!====================================================================== 3128 !! 3129 !!---------------------------------------------------------------------- 3130 !! Fast-sinking detritus fluxes, pt. 1: REMINERALISATION 3131 !! aside from explicitly modelled, slow-sinking detritus, the 3132 !! model includes an implicit representation of detrital 3133 !! particles that sink too quickly to be modelled with 3134 !! explicit state variables; this sinking flux is instead 3135 !! instantaneously remineralised down the water column using 3136 !! the version of Armstrong et al. (2002)'s ballast model 3137 !! used by Dunne et al. (2007); the version of this model 3138 !! here considers silicon and calcium carbonate ballast 3139 !! minerals; this section of the code redistributes the fast 3140 !! sinking material generated locally down the water column; 3141 !! this differs from Dunne et al. (2007) in that fast sinking 3142 !! material is distributed at *every* level below that it is 3143 !! generated, rather than at every level below some fixed 3144 !! depth; this scheme is also different in that sinking material 3145 !! generated in one level is aggregated with that generated by 3146 !! shallower levels; this should make the ballast model more 3147 !! self-consistent (famous last words) 3148 !!---------------------------------------------------------------------- 3149 !! 3150 if (jk.eq.1) then 3151 !! this is the SURFACE OCEAN BOX (no remineralisation) 3152 !! 3153 freminc = 0.0 3154 freminn = 0.0 3155 freminfe = 0.0 3156 freminsi = 0.0 3157 freminca = 0.0 3158 elseif (jk.le.jmbathy) then 3159 !! this is an OCEAN BOX (remineralise some material) 3160 !! 3161 !! set up CCD depth to be used depending on user choice 3162 if (jocalccd.eq.0) then 3163 !! use default CCD field 3164 fccd_dep = ocal_ccd(ji,jj) 3165 elseif (jocalccd.eq.1) then 3166 !! use calculated CCD field 3167 fccd_dep = f2_ccd_cal(ji,jj) 3168 endif 3169 !! 3170 !! === organic carbon === 3171 fq0 = ffastc(ji,jj) !! how much organic C enters this box (mol) 3172 if (iball.eq.1) then 3173 fq1 = (fq0 * xmassc) !! how much it weighs (mass) 3174 fq2 = (ffastca(ji,jj) * xmassca) !! how much CaCO3 enters this box (mass) 3175 fq3 = (ffastsi(ji,jj) * xmasssi) !! how much opal enters this box (mass) 3176 fq4 = (fq2 * xprotca) + (fq3 * xprotsi) !! total protected organic C (mass) 3177 !! this next term is calculated for C but used for N and Fe as well 3178 !! it needs to be protected in case ALL C is protected 3179 if (fq4.lt.fq1) then 3180 fprotf = (fq4 / (fq1 + tiny(fq1))) !! protected fraction of total organic C (non-dim) 3181 else 3182 fprotf = 1.0 !! all organic C is protected (non-dim) 3183 endif 3184 fq5 = (1.0 - fprotf) !! unprotected fraction of total organic C (non-dim) 3185 fq6 = (fq0 * fq5) !! how much organic C is unprotected (mol) 3186 fq7 = (fq6 * exp(-(fthk / xfastc))) !! how much unprotected C leaves this box (mol) 3187 fq8 = (fq7 + (fq0 * fprotf)) !! how much total C leaves this box (mol) 3188 freminc = (fq0 - fq8) / fthk !! C remineralisation in this box (mol) 3189 ffastc(ji,jj) = fq8 3061 3190 # if defined key_debug_medusa 3062 if (idf.eq.1) then 3063 !!---------------------------------------------------------------------- 3064 !! Integrate total fast detritus remineralisation 3065 !!---------------------------------------------------------------------- 3066 !! 3067 fofd_n(ji,jj) = fofd_n(ji,jj) + (freminn * fthk) 3068 fofd_si(ji,jj) = fofd_si(ji,jj) + (freminsi * fthk) 3069 fofd_fe(ji,jj) = fofd_fe(ji,jj) + (freminfe * fthk) 3191 !! report in/out/remin fluxes of carbon for this level 3192 if (idf.eq.1.AND.idfval.eq.1) then 3193 IF (lwp) write (numout,*) '------------------------------' 3194 IF (lwp) write (numout,*) 'totalC(',jk,') = ', fq1 3195 IF (lwp) write (numout,*) 'prtctC(',jk,') = ', fq4 3196 IF (lwp) write (numout,*) 'fprotf(',jk,') = ', fprotf 3197 IF (lwp) write (numout,*) '------------------------------' 3198 IF (lwp) write (numout,*) 'IN C(',jk,') = ', fq0 3199 IF (lwp) write (numout,*) 'LOST C(',jk,') = ', freminc * fthk 3200 IF (lwp) write (numout,*) 'OUT C(',jk,') = ', fq8 3201 IF (lwp) write (numout,*) 'NEW C(',jk,') = ', ftempc * fthk 3202 endif 3203 # endif 3204 else 3205 fq1 = fq0 * exp(-(fthk / xfastc)) !! how much organic C leaves this box (mol) 3206 freminc = (fq0 - fq1) / fthk !! C remineralisation in this box (mol) 3207 ffastc(ji,jj) = fq1 3208 endif 3209 !! 3210 !! === organic nitrogen === 3211 fq0 = ffastn(ji,jj) !! how much organic N enters this box (mol) 3212 if (iball.eq.1) then 3213 fq5 = (1.0 - fprotf) !! unprotected fraction of total organic N (non-dim) 3214 fq6 = (fq0 * fq5) !! how much organic N is unprotected (mol) 3215 fq7 = (fq6 * exp(-(fthk / xfastc))) !! how much unprotected N leaves this box (mol) 3216 fq8 = (fq7 + (fq0 * fprotf)) !! how much total N leaves this box (mol) 3217 freminn = (fq0 - fq8) / fthk !! N remineralisation in this box (mol) 3218 ffastn(ji,jj) = fq8 3219 # if defined key_debug_medusa 3220 !! report in/out/remin fluxes of carbon for this level 3221 if (idf.eq.1.AND.idfval.eq.1) then 3222 IF (lwp) write (numout,*) '------------------------------' 3223 IF (lwp) write (numout,*) 'totalN(',jk,') = ', fq1 3224 IF (lwp) write (numout,*) 'prtctN(',jk,') = ', fq4 3225 IF (lwp) write (numout,*) 'fprotf(',jk,') = ', fprotf 3226 IF (lwp) write (numout,*) '------------------------------' 3227 if (freminn < 0.0) then 3228 IF (lwp) write (numout,*) '** FREMIN ERROR **' 3229 endif 3230 IF (lwp) write (numout,*) 'IN N(',jk,') = ', fq0 3231 IF (lwp) write (numout,*) 'LOST N(',jk,') = ', freminn * fthk 3232 IF (lwp) write (numout,*) 'OUT N(',jk,') = ', fq8 3233 IF (lwp) write (numout,*) 'NEW N(',jk,') = ', ftempn * fthk 3234 endif 3235 # endif 3236 else 3237 fq1 = fq0 * exp(-(fthk / xfastc)) !! how much organic N leaves this box (mol) 3238 freminn = (fq0 - fq1) / fthk !! N remineralisation in this box (mol) 3239 ffastn(ji,jj) = fq1 3240 endif 3241 !! 3242 !! === organic iron === 3243 fq0 = ffastfe(ji,jj) !! how much organic Fe enters this box (mol) 3244 if (iball.eq.1) then 3245 fq5 = (1.0 - fprotf) !! unprotected fraction of total organic Fe (non-dim) 3246 fq6 = (fq0 * fq5) !! how much organic Fe is unprotected (mol) 3247 fq7 = (fq6 * exp(-(fthk / xfastc))) !! how much unprotected Fe leaves this box (mol) 3248 fq8 = (fq7 + (fq0 * fprotf)) !! how much total Fe leaves this box (mol) 3249 freminfe = (fq0 - fq8) / fthk !! Fe remineralisation in this box (mol) 3250 ffastfe(ji,jj) = fq8 3251 else 3252 fq1 = fq0 * exp(-(fthk / xfastc)) !! how much total Fe leaves this box (mol) 3253 freminfe = (fq0 - fq1) / fthk !! Fe remineralisation in this box (mol) 3254 ffastfe(ji,jj) = fq1 3255 endif 3256 !! 3257 !! === biogenic silicon === 3258 fq0 = ffastsi(ji,jj) !! how much opal centers this box (mol) 3259 fq1 = fq0 * exp(-(fthk / xfastsi)) !! how much opal leaves this box (mol) 3260 freminsi = (fq0 - fq1) / fthk !! Si remineralisation in this box (mol) 3261 ffastsi(ji,jj) = fq1 3262 !! 3263 !! === biogenic calcium carbonate === 3264 fq0 = ffastca(ji,jj) !! how much CaCO3 enters this box (mol) 3265 if (fdep.le.fccd_dep) then 3266 !! whole grid cell above CCD 3267 fq1 = fq0 !! above lysocline, no Ca dissolves (mol) 3268 freminca = 0.0 !! above lysocline, no Ca dissolves (mol) 3269 fccd(ji,jj) = real(jk) !! which is the last level above the CCD? (#) 3270 elseif (fdep.ge.fccd_dep) then 3271 !! whole grid cell below CCD 3272 fq1 = fq0 * exp(-(fthk / xfastca)) !! how much CaCO3 leaves this box (mol) 3273 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 3274 else 3275 !! partial grid cell below CCD 3276 fq2 = fdep1 - fccd_dep !! amount of grid cell below CCD (m) 3277 fq1 = fq0 * exp(-(fq2 / xfastca)) !! how much CaCO3 leaves this box (mol) 3278 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 3279 endif 3280 ffastca(ji,jj) = fq1 3281 else 3282 !! this is BELOW THE LAST OCEAN BOX (do nothing) 3283 freminc = 0.0 3284 freminn = 0.0 3285 freminfe = 0.0 3286 freminsi = 0.0 3287 freminca = 0.0 3288 endif 3289 3290 elseif (jexport.eq.2.or.jexport.eq.3) then 3291 if (jexport.eq.2) then 3292 !!====================================================================== 3293 !! MARTIN ET AL. (1987) SUBMODEL 3294 !!====================================================================== 3295 !! 3296 !!---------------------------------------------------------------------- 3297 !! This submodel uses the classic Martin et al. (1987) curve 3298 !! to determine the attenuation of fast-sinking detritus down 3299 !! the water column. All three organic elements, C, N and Fe, 3300 !! are handled identically, and their quantities in sinking 3301 !! particles attenuate according to a power relationship 3302 !! governed by parameter "b". This is assigned a canonical 3303 !! value of -0.858. Biogenic opal and calcium carbonate are 3304 !! attentuated using the same function as in the ballast 3305 !! submodel 3306 !!---------------------------------------------------------------------- 3307 !! 3308 fb_val = -0.858 3309 elseif (jexport.eq.3) then 3310 !!====================================================================== 3311 !! HENSON ET AL. (2011) SUBMODEL 3312 !!====================================================================== 3313 !! 3314 !!---------------------------------------------------------------------- 3315 !! This submodel reconfigures the Martin et al. (1987) curve by 3316 !! allowing the "b" value to vary geographically. Its value is 3317 !! set, following Henson et al. (2011), as a function of local 3318 !! sea surface temperature: 3319 !! b = -1.06 + (0.024 * SST) 3320 !! This means that remineralisation length scales are longer in 3321 !! warm, tropical areas and shorter in cold, polar areas. This 3322 !! does seem back-to-front (i.e. one would expect GREATER 3323 !! remineralisation in warmer waters), but is an outcome of 3324 !! analysis of sediment trap data, and it may reflect details 3325 !! of ecosystem structure that pertain to particle production 3326 !! rather than simply Q10. 3327 !!---------------------------------------------------------------------- 3328 !! 3329 fl_sst = tsn(ji,jj,1,jp_tem) 3330 fb_val = -1.06 + (0.024 * fl_sst) 3331 endif 3332 !! 3333 if (jk.eq.1) then 3334 !! this is the SURFACE OCEAN BOX (no remineralisation) 3335 !! 3336 freminc = 0.0 3337 freminn = 0.0 3338 freminfe = 0.0 3339 freminsi = 0.0 3340 freminca = 0.0 3341 elseif (jk.le.jmbathy) then 3342 !! this is an OCEAN BOX (remineralise some material) 3343 !! 3344 !! === organic carbon === 3345 fq0 = ffastc(ji,jj) !! how much organic C enters this box (mol) 3346 fq1 = fq0 * ((fdep1/fdep)**fb_val) !! how much organic C leaves this box (mol) 3347 freminc = (fq0 - fq1) / fthk !! C remineralisation in this box (mol) 3348 ffastc(ji,jj) = fq1 3349 !! 3350 !! === organic nitrogen === 3351 fq0 = ffastn(ji,jj) !! how much organic N enters this box (mol) 3352 fq1 = fq0 * ((fdep1/fdep)**fb_val) !! how much organic N leaves this box (mol) 3353 freminn = (fq0 - fq1) / fthk !! N remineralisation in this box (mol) 3354 ffastn(ji,jj) = fq1 3355 !! 3356 !! === organic iron === 3357 fq0 = ffastfe(ji,jj) !! how much organic Fe enters this box (mol) 3358 fq1 = fq0 * ((fdep1/fdep)**fb_val) !! how much organic Fe leaves this box (mol) 3359 freminfe = (fq0 - fq1) / fthk !! Fe remineralisation in this box (mol) 3360 ffastfe(ji,jj) = fq1 3361 !! 3362 !! === biogenic silicon === 3363 fq0 = ffastsi(ji,jj) !! how much opal centers this box (mol) 3364 fq1 = fq0 * exp(-(fthk / xfastsi)) !! how much opal leaves this box (mol) 3365 freminsi = (fq0 - fq1) / fthk !! Si remineralisation in this box (mol) 3366 ffastsi(ji,jj) = fq1 3367 !! 3368 !! === biogenic calcium carbonate === 3369 fq0 = ffastca(ji,jj) !! how much CaCO3 enters this box (mol) 3370 if (fdep.le.ocal_ccd(ji,jj)) then 3371 !! whole grid cell above CCD 3372 fq1 = fq0 !! above lysocline, no Ca dissolves (mol) 3373 freminca = 0.0 !! above lysocline, no Ca dissolves (mol) 3374 fccd(ji,jj) = real(jk) !! which is the last level above the CCD? (#) 3375 elseif (fdep.ge.ocal_ccd(ji,jj)) then 3376 !! whole grid cell below CCD 3377 fq1 = fq0 * exp(-(fthk / xfastca)) !! how much CaCO3 leaves this box (mol) 3378 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 3379 else 3380 !! partial grid cell below CCD 3381 fq2 = fdep1 - ocal_ccd(ji,jj) !! amount of grid cell below CCD (m) 3382 fq1 = fq0 * exp(-(fq2 / xfastca)) !! how much CaCO3 leaves this box (mol) 3383 freminca = (fq0 - fq1) / fthk !! Ca remineralisation in this box (mol) 3384 endif 3385 ffastca(ji,jj) = fq1 3386 else 3387 !! this is BELOW THE LAST OCEAN BOX (do nothing) 3388 freminc = 0.0 3389 freminn = 0.0 3390 freminfe = 0.0 3391 freminsi = 0.0 3392 freminca = 0.0 3393 endif 3394 3395 endif 3396 3397 !!---------------------------------------------------------------------- 3398 !! Fast-sinking detritus fluxes, pt. 2: UPDATE FAST FLUXES 3399 !! here locally calculated additions to the fast-sinking flux are added 3400 !! to the total fast-sinking flux; this is done here such that material 3401 !! produced in a particular layer is only remineralised below this 3402 !! layer 3403 !!---------------------------------------------------------------------- 3404 !! 3405 !! add sinking material generated in this layer to running totals 3406 !! 3407 !! === organic carbon === (diatom and mesozooplankton mortality) 3408 ffastc(ji,jj) = ffastc(ji,jj) + (ftempc * fthk) 3409 !! 3410 !! === organic nitrogen === (diatom and mesozooplankton mortality) 3411 ffastn(ji,jj) = ffastn(ji,jj) + (ftempn * fthk) 3412 !! 3413 !! === organic iron === (diatom and mesozooplankton mortality) 3414 ffastfe(ji,jj) = ffastfe(ji,jj) + (ftempfe * fthk) 3415 !! 3416 !! === biogenic silicon === (diatom mortality and grazed diatoms) 3417 ffastsi(ji,jj) = ffastsi(ji,jj) + (ftempsi * fthk) 3418 !! 3419 !! === biogenic calcium carbonate === (latitudinally-based fraction of total primary production) 3420 ffastca(ji,jj) = ffastca(ji,jj) + (ftempca * fthk) 3421 3422 !!---------------------------------------------------------------------- 3423 !! Fast-sinking detritus fluxes, pt. 3: SEAFLOOR 3424 !! remineralise all remaining fast-sinking detritus to dissolved 3425 !! nutrients; the sedimentation fluxes calculated here allow the 3426 !! separation of what's remineralised sinking through the final 3427 !! ocean box from that which is added to the final box by the 3428 !! remineralisation of material that reaches the seafloor (i.e. 3429 !! the model assumes that *all* material that hits the seafloor 3430 !! is remineralised and that none is permanently buried; hey, 3431 !! this is a giant GCM model that can't be run for long enough 3432 !! to deal with burial fluxes!) 3433 !! 3434 !! in a change to this process, in part so that MEDUSA behaves 3435 !! a little more like ERSEM et al., fast-sinking detritus (N, Fe 3436 !! and C) is converted to slow sinking detritus at the seafloor 3437 !! instead of being remineralised; the rationale is that in 3438 !! shallower shelf regions (... that are not fully mixed!) this 3439 !! allows the detrital material to return slowly to dissolved 3440 !! nutrient rather than instantaneously as now; the alternative 3441 !! would be to explicitly handle seafloor organic material - a 3442 !! headache I don't wish to experience at this point; note that 3443 !! fast-sinking Si and Ca detritus is just remineralised as 3444 !! per usual 3445 !! 3446 !! AXY (13/01/12) 3447 !! in a further change to this process, again so that MEDUSA is 3448 !! a little more like ERSEM et al., material that reaches the 3449 !! seafloor can now be added to sediment pools and stored for 3450 !! slow release; there are new 2D arrays for organic nitrogen, 3451 !! iron and carbon and inorganic silicon and carbon that allow 3452 !! fast and slow detritus that reaches the seafloor to be held 3453 !! and released back to the water column more slowly; these arrays 3454 !! are transferred via the tracer restart files between repeat 3455 !! submissions of the model 3456 !!---------------------------------------------------------------------- 3457 !! 3458 ffast2slowc = 0.0 3459 ffast2slown = 0.0 3460 ffast2slowfe = 0.0 3461 !! 3462 if (jk.eq.jmbathy) then 3463 !! this is the BOTTOM OCEAN BOX (remineralise everything) 3464 !! 3465 !! AXY (17/01/12): tweaked to include benthos pools 3466 !! 3467 !! === organic carbon === 3468 if (jfdfate.eq.0 .and. jorgben.eq.0) then 3469 freminc = freminc + (ffastc(ji,jj) / fthk) !! C remineralisation in this box (mol/m3) 3470 elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 3471 ffast2slowc = ffastc(ji,jj) / fthk !! fast C -> slow C (mol/m3) 3472 fslowc = fslowc + ffast2slowc 3473 elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 3474 f_fbenin_c(ji,jj) = ffastc(ji,jj) !! fast C -> benthic C (mol/m2) 3475 endif 3476 fsedc(ji,jj) = ffastc(ji,jj) !! record seafloor C (mol/m2) 3477 ffastc(ji,jj) = 0.0 3478 !! 3479 !! === organic nitrogen === 3480 if (jfdfate.eq.0 .and. jorgben.eq.0) then 3481 freminn = freminn + (ffastn(ji,jj) / fthk) !! N remineralisation in this box (mol/m3) 3482 elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 3483 ffast2slown = ffastn(ji,jj) / fthk !! fast N -> slow N (mol/m3) 3484 fslown = fslown + ffast2slown 3485 elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 3486 f_fbenin_n(ji,jj) = ffastn(ji,jj) !! fast N -> benthic N (mol/m2) 3487 endif 3488 fsedn(ji,jj) = ffastn(ji,jj) !! record seafloor N (mol/m2) 3489 ffastn(ji,jj) = 0.0 3490 !! 3491 !! === organic iron === 3492 if (jfdfate.eq.0 .and. jorgben.eq.0) then 3493 freminfe = freminfe + (ffastfe(ji,jj) / fthk) !! Fe remineralisation in this box (mol/m3) 3494 elseif (jfdfate.eq.1 .and. jorgben.eq.0) then 3495 ffast2slowfe = ffastn(ji,jj) / fthk !! fast Fe -> slow Fe (mol/m3) 3496 elseif (jfdfate.eq.0 .and. jorgben.eq.1) then 3497 f_fbenin_fe(ji,jj) = ffastfe(ji,jj) !! fast Fe -> benthic Fe (mol/m2) 3498 endif 3499 fsedfe(ji,jj) = ffastfe(ji,jj) !! record seafloor Fe (mol/m2) 3500 ffastfe(ji,jj) = 0.0 3501 !! 3502 !! === biogenic silicon === 3503 if (jinorgben.eq.0) then 3504 freminsi = freminsi + (ffastsi(ji,jj) / fthk) !! Si remineralisation in this box (mol/m3) 3505 elseif (jinorgben.eq.1) then 3506 f_fbenin_si(ji,jj) = ffastsi(ji,jj) !! fast Si -> benthic Si (mol/m2) 3507 endif 3508 fsedsi(ji,jj) = ffastsi(ji,jj) !! record seafloor Si (mol/m2) 3509 ffastsi(ji,jj) = 0.0 3510 !! 3511 !! === biogenic calcium carbonate === 3512 if (jinorgben.eq.0) then 3513 freminca = freminca + (ffastca(ji,jj) / fthk) !! Ca remineralisation in this box (mol/m3) 3514 elseif (jinorgben.eq.1) then 3515 f_fbenin_ca(ji,jj) = ffastca(ji,jj) !! fast Ca -> benthic Ca (mol/m2) 3516 endif 3517 fsedca(ji,jj) = ffastca(ji,jj) !! record seafloor Ca (mol/m2) 3518 ffastca(ji,jj) = 0.0 3519 endif 3520 3521 # if defined key_debug_medusa 3522 if (idf.eq.1) then 3523 !!---------------------------------------------------------------------- 3524 !! Integrate total fast detritus remineralisation 3525 !!---------------------------------------------------------------------- 3526 !! 3527 fofd_n(ji,jj) = fofd_n(ji,jj) + (freminn * fthk) 3528 fofd_si(ji,jj) = fofd_si(ji,jj) + (freminsi * fthk) 3529 fofd_fe(ji,jj) = fofd_fe(ji,jj) + (freminfe * fthk) 3070 3530 # if defined key_roam 3071 3531 fofd_c(ji,jj) = fofd_c(ji,jj) + (freminc * fthk) 3072 3532 # endif 3073 3074 # endif 3075 3076 3077 3078 3079 3080 3081 3082 3533 endif 3534 # endif 3535 3536 !!---------------------------------------------------------------------- 3537 !! Sort out remineralisation tally of fast-sinking detritus 3538 !!---------------------------------------------------------------------- 3539 !! 3540 !! update fast-sinking regeneration arrays 3541 fregenfast(ji,jj) = fregenfast(ji,jj) + (freminn * fthk) 3542 fregenfastsi(ji,jj) = fregenfastsi(ji,jj) + (freminsi * fthk) 3083 3543 # if defined key_roam 3084 fregenfastc(ji,jj) = fregenfastc(ji,jj) + (freminc * fthk) 3085 # endif 3086 3087 !!---------------------------------------------------------------------- 3088 !! Benthic remineralisation fluxes 3089 !!---------------------------------------------------------------------- 3090 !! 3091 if (jk.eq.jmbathy) then 3092 !! 3093 !! organic components 3094 if (jorgben.eq.1) then 3095 f_benout_n(ji,jj) = xsedn * zn_sed_n(ji,jj) 3096 f_benout_fe(ji,jj) = xsedfe * zn_sed_fe(ji,jj) 3097 f_benout_c(ji,jj) = xsedc * zn_sed_c(ji,jj) 3098 endif 3099 !! 3100 !! inorganic components 3101 if (jinorgben.eq.1) then 3102 f_benout_si(ji,jj) = xsedsi * zn_sed_si(ji,jj) 3103 f_benout_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 3104 !! 3105 !! account for CaCO3 that dissolves when it shouldn't 3106 if ( fdep .le. fccd_dep ) then 3107 f_benout_lyso_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 3108 endif 3109 endif 3110 endif 3111 CALL flush(numout) 3112 3113 !!====================================================================== 3114 !! AXY (07/04/17): possible subroutine block; business and updating 3115 !!====================================================================== 3116 3117 !!====================================================================== 3118 !! LOCAL GRID CELL TRENDS 3119 !!====================================================================== 3120 !! 3121 !!---------------------------------------------------------------------- 3122 !! Determination of trends 3123 !!---------------------------------------------------------------------- 3124 !! 3125 !!---------------------------------------------------------------------- 3126 !! chlorophyll 3127 btra(jpchn) = b0 * ( & 3128 + ((frn * fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2) * (fthetan / xxi) ) 3129 btra(jpchd) = b0 * ( & 3130 + ((frd * fprd * zphd) - fgmepd - fdpd - fdpd2) * (fthetad / xxi) ) 3131 !! 3132 !!---------------------------------------------------------------------- 3133 !! phytoplankton 3134 btra(jpphn) = b0 * ( & 3135 + (fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2 ) 3136 btra(jpphd) = b0 * ( & 3137 + (fprd * zphd) - fgmepd - fdpd - fdpd2 ) 3138 btra(jppds) = b0 * ( & 3139 + (fprds * zpds) - fgmepds - fdpds - fsdiss - fdpds2 ) 3140 !! 3141 !!---------------------------------------------------------------------- 3142 !! zooplankton 3143 btra(jpzmi) = b0 * ( & 3144 + fmigrow - fgmezmi - fdzmi - fdzmi2 ) 3145 btra(jpzme) = b0 * ( & 3146 + fmegrow - fdzme - fdzme2 ) 3147 !! 3148 !!---------------------------------------------------------------------- 3149 !! detritus 3150 btra(jpdet) = b0 * ( & 3151 + fdpn + ((1.0 - xfdfrac1) * fdpd) & ! mort. losses 3152 + fdzmi + ((1.0 - xfdfrac2) * fdzme) & ! mort. losses 3153 + ((1.0 - xbetan) * (finmi + finme)) & ! assim. inefficiency 3154 - fgmid - fgmed - fdd & ! grazing and remin. 3155 + ffast2slown ) ! seafloor fast->slow 3156 !! 3157 !!---------------------------------------------------------------------- 3158 !! dissolved inorganic nitrogen nutrient 3159 fn_cons = 0.0 & 3160 - (fprn * zphn) - (fprd * zphd) ! primary production 3161 fn_prod = 0.0 & 3162 + (xphi * (fgmipn + fgmid)) & ! messy feeding remin. 3163 + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) & ! messy feeding remin. 3164 + fmiexcr + fmeexcr + fdd + freminn & ! excretion and remin. 3165 + fdpn2 + fdpd2 + fdzmi2 + fdzme2 ! metab. losses 3166 !! 3167 !! riverine flux 3168 if ( jriver_n .gt. 0 ) then 3169 f_riv_loc_n = f_riv_n(ji,jj) * friver_dep(jk,jmbathy) / fthk 3170 fn_prod = fn_prod + f_riv_loc_n 3171 endif 3172 !! 3173 !! benthic remineralisation 3174 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3175 fn_prod = fn_prod + (f_benout_n(ji,jj) / fthk) 3176 endif 3177 !! 3178 btra(jpdin) = b0 * ( & 3179 fn_prod + fn_cons ) 3180 !! 3181 fnit_cons(ji,jj) = fnit_cons(ji,jj) + ( fthk * ( & ! consumption of dissolved nitrogen 3182 fn_cons ) ) 3183 fnit_prod(ji,jj) = fnit_prod(ji,jj) + ( fthk * ( & ! production of dissolved nitrogen 3184 fn_prod ) ) 3185 !! 3186 !!---------------------------------------------------------------------- 3187 !! dissolved silicic acid nutrient 3188 fs_cons = 0.0 & 3189 - (fprds * zpds) ! opal production 3190 fs_prod = 0.0 & 3191 + fsdiss & ! opal dissolution 3192 + ((1.0 - xfdfrac1) * fdpds) & ! mort. loss 3193 + ((1.0 - xfdfrac3) * fgmepds) & ! egestion of grazed Si 3194 + freminsi + fdpds2 ! fast diss. and metab. losses 3195 !! 3196 !! riverine flux 3197 if ( jriver_si .gt. 0 ) then 3198 f_riv_loc_si = f_riv_si(ji,jj) * friver_dep(jk,jmbathy) / fthk 3199 fs_prod = fs_prod + f_riv_loc_si 3200 endif 3201 !! 3202 !! benthic remineralisation 3203 if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 3204 fs_prod = fs_prod + (f_benout_si(ji,jj) / fthk) 3205 endif 3206 !! 3207 btra(jpsil) = b0 * ( & 3208 fs_prod + fs_cons ) 3209 !! 3210 fsil_cons(ji,jj) = fsil_cons(ji,jj) + ( fthk * ( & ! consumption of dissolved silicon 3211 fs_cons ) ) 3212 fsil_prod(ji,jj) = fsil_prod(ji,jj) + ( fthk * ( & ! production of dissolved silicon 3213 fs_prod ) ) 3214 !! 3215 !!---------------------------------------------------------------------- 3216 !! dissolved "iron" nutrient 3217 btra(jpfer) = b0 * ( & 3218 + (xrfn * btra(jpdin)) + ffetop + ffebot - ffescav ) 3544 fregenfastc(ji,jj) = fregenfastc(ji,jj) + (freminc * fthk) 3545 # endif 3546 3547 !!---------------------------------------------------------------------- 3548 !! Benthic remineralisation fluxes 3549 !!---------------------------------------------------------------------- 3550 !! 3551 if (jk.eq.jmbathy) then 3552 !! 3553 !! organic components 3554 if (jorgben.eq.1) then 3555 f_benout_n(ji,jj) = xsedn * zn_sed_n(ji,jj) 3556 f_benout_fe(ji,jj) = xsedfe * zn_sed_fe(ji,jj) 3557 f_benout_c(ji,jj) = xsedc * zn_sed_c(ji,jj) 3558 endif 3559 !! 3560 !! inorganic components 3561 if (jinorgben.eq.1) then 3562 f_benout_si(ji,jj) = xsedsi * zn_sed_si(ji,jj) 3563 f_benout_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 3564 !! 3565 !! account for CaCO3 that dissolves when it shouldn't 3566 if ( fdep .le. fccd_dep ) then 3567 f_benout_lyso_ca(ji,jj) = xsedca * zn_sed_ca(ji,jj) 3568 endif 3569 endif 3570 endif 3571 CALL flush(numout) 3572 3573 !!====================================================================== 3574 !! LOCAL GRID CELL TRENDS 3575 !!====================================================================== 3576 !! 3577 !!---------------------------------------------------------------------- 3578 !! Determination of trends 3579 !!---------------------------------------------------------------------- 3580 !! 3581 !!---------------------------------------------------------------------- 3582 !! chlorophyll 3583 btra(jpchn) = b0 * ( & 3584 + ((frn * fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2) * (fthetan / xxi) ) 3585 btra(jpchd) = b0 * ( & 3586 + ((frd * fprd * zphd) - fgmepd - fdpd - fdpd2) * (fthetad / xxi) ) 3587 !! 3588 !!---------------------------------------------------------------------- 3589 !! phytoplankton 3590 btra(jpphn) = b0 * ( & 3591 + (fprn * zphn) - fgmipn - fgmepn - fdpn - fdpn2 ) 3592 btra(jpphd) = b0 * ( & 3593 + (fprd * zphd) - fgmepd - fdpd - fdpd2 ) 3594 btra(jppds) = b0 * ( & 3595 + (fprds * zpds) - fgmepds - fdpds - fsdiss - fdpds2 ) 3596 !! 3597 !!---------------------------------------------------------------------- 3598 !! zooplankton 3599 btra(jpzmi) = b0 * ( & 3600 + fmigrow - fgmezmi - fdzmi - fdzmi2 ) 3601 btra(jpzme) = b0 * ( & 3602 + fmegrow - fdzme - fdzme2 ) 3603 !! 3604 !!---------------------------------------------------------------------- 3605 !! detritus 3606 btra(jpdet) = b0 * ( & 3607 + fdpn + ((1.0 - xfdfrac1) * fdpd) & ! mort. losses 3608 + fdzmi + ((1.0 - xfdfrac2) * fdzme) & ! mort. losses 3609 + ((1.0 - xbetan) * (finmi + finme)) & ! assim. inefficiency 3610 - fgmid - fgmed - fdd & ! grazing and remin. 3611 + ffast2slown ) ! seafloor fast->slow 3612 !! 3613 !!---------------------------------------------------------------------- 3614 !! dissolved inorganic nitrogen nutrient 3615 fn_cons = 0.0 & 3616 - (fprn * zphn) - (fprd * zphd) ! primary production 3617 fn_prod = 0.0 & 3618 + (xphi * (fgmipn + fgmid)) & ! messy feeding remin. 3619 + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed)) & ! messy feeding remin. 3620 + fmiexcr + fmeexcr + fdd + freminn & ! excretion and remin. 3621 + fdpn2 + fdpd2 + fdzmi2 + fdzme2 ! metab. losses 3622 !! 3623 !! riverine flux 3624 if ( jriver_n .gt. 0 ) then 3625 f_riv_loc_n = f_riv_n(ji,jj) * friver_dep(jk,jmbathy) / fthk 3626 fn_prod = fn_prod + f_riv_loc_n 3627 endif 3628 !! 3629 !! benthic remineralisation 3630 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3631 fn_prod = fn_prod + (f_benout_n(ji,jj) / fthk) 3632 endif 3633 !! 3634 btra(jpdin) = b0 * ( & 3635 fn_prod + fn_cons ) 3636 !! 3637 fnit_cons(ji,jj) = fnit_cons(ji,jj) + ( fthk * ( & ! consumption of dissolved nitrogen 3638 fn_cons ) ) 3639 fnit_prod(ji,jj) = fnit_prod(ji,jj) + ( fthk * ( & ! production of dissolved nitrogen 3640 fn_prod ) ) 3641 !! 3642 !!---------------------------------------------------------------------- 3643 !! dissolved silicic acid nutrient 3644 fs_cons = 0.0 & 3645 - (fprds * zpds) ! opal production 3646 fs_prod = 0.0 & 3647 + fsdiss & ! opal dissolution 3648 + ((1.0 - xfdfrac1) * fdpds) & ! mort. loss 3649 + ((1.0 - xfdfrac3) * fgmepds) & ! egestion of grazed Si 3650 + freminsi + fdpds2 ! fast diss. and metab. losses 3651 !! 3652 !! riverine flux 3653 if ( jriver_si .gt. 0 ) then 3654 f_riv_loc_si = f_riv_si(ji,jj) * friver_dep(jk,jmbathy) / fthk 3655 fs_prod = fs_prod + f_riv_loc_si 3656 endif 3657 !! 3658 !! benthic remineralisation 3659 if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 3660 fs_prod = fs_prod + (f_benout_si(ji,jj) / fthk) 3661 endif 3662 !! 3663 btra(jpsil) = b0 * ( & 3664 fs_prod + fs_cons ) 3665 !! 3666 fsil_cons(ji,jj) = fsil_cons(ji,jj) + ( fthk * ( & ! consumption of dissolved silicon 3667 fs_cons ) ) 3668 fsil_prod(ji,jj) = fsil_prod(ji,jj) + ( fthk * ( & ! production of dissolved silicon 3669 fs_prod ) ) 3670 !! 3671 !!---------------------------------------------------------------------- 3672 !! dissolved "iron" nutrient 3673 btra(jpfer) = b0 * ( & 3674 + (xrfn * btra(jpdin)) + ffetop + ffebot - ffescav ) 3219 3675 3220 3676 # if defined key_roam 3221 !! 3222 !!---------------------------------------------------------------------- 3223 !! AXY (26/11/08): implicit detrital carbon change 3224 btra(jpdtc) = b0 * ( & 3225 + (xthetapn * fdpn) + ((1.0 - xfdfrac1) * (xthetapd * fdpd)) & ! mort. losses 3226 + (xthetazmi * fdzmi) + ((1.0 - xfdfrac2) * (xthetazme * fdzme)) & ! mort. losses 3227 + ((1.0 - xbetac) * (ficmi + ficme)) & ! assim. inefficiency 3228 - fgmidc - fgmedc - fddc & ! grazing and remin. 3229 + ffast2slowc ) ! seafloor fast->slow 3230 !! 3231 !!---------------------------------------------------------------------- 3232 !! dissolved inorganic carbon 3233 fc_cons = 0.0 & 3234 - (xthetapn * fprn * zphn) - (xthetapd * fprd * zphd) ! primary production 3235 fc_prod = 0.0 & 3236 + (xthetapn * xphi * fgmipn) + (xphi * fgmidc) & ! messy feeding remin 3237 + (xthetapn * xphi * fgmepn) + (xthetapd * xphi * fgmepd) & ! messy feeding remin 3238 + (xthetazmi * xphi * fgmezmi) + (xphi * fgmedc) & ! messy feeding remin 3239 + fmiresp + fmeresp + fddc + freminc + (xthetapn * fdpn2) & ! resp., remin., losses 3240 + (xthetapd * fdpd2) + (xthetazmi * fdzmi2) & ! losses 3241 + (xthetazme * fdzme2) ! losses 3242 !! 3243 !! riverine flux 3244 if ( jriver_c .gt. 0 ) then 3245 f_riv_loc_c = f_riv_c(ji,jj) * friver_dep(jk,jmbathy) / fthk 3246 fc_prod = fc_prod + f_riv_loc_c 3247 endif 3248 !! 3249 !! benthic remineralisation 3250 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3251 fc_prod = fc_prod + (f_benout_c(ji,jj) / fthk) 3252 endif 3253 if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 3254 fc_prod = fc_prod + (f_benout_ca(ji,jj) / fthk) 3255 endif 3256 !! 3257 !! community respiration (does not include CaCO3 terms - obviously!) 3258 fcomm_resp(ji,jj) = fcomm_resp(ji,jj) + fc_prod 3259 !! 3260 !! CaCO3 3261 fc_prod = fc_prod - ftempca + freminca 3262 !! 3263 !! riverine flux 3264 if ( jk .eq. 1 .and. jriver_c .gt. 0 ) then 3265 fc_prod = fc_prod + f_riv_c(ji,jj) 3266 endif 3267 !! 3268 btra(jpdic) = b0 * ( & 3269 fc_prod + fc_cons ) 3270 !! 3271 fcar_cons(ji,jj) = fcar_cons(ji,jj) + ( fthk * ( & ! consumption of dissolved carbon 3272 fc_cons ) ) 3273 fcar_prod(ji,jj) = fcar_prod(ji,jj) + ( fthk * ( & ! production of dissolved carbon 3274 fc_prod ) ) 3275 !! 3276 !!---------------------------------------------------------------------- 3277 !! alkalinity 3278 fa_prod = 0.0 & 3279 + (2.0 * freminca) ! CaCO3 dissolution 3280 fa_cons = 0.0 & 3281 - (2.0 * ftempca) ! CaCO3 production 3282 !! 3283 !! riverine flux 3284 if ( jriver_alk .gt. 0 ) then 3285 f_riv_loc_alk = f_riv_alk(ji,jj) * friver_dep(jk,jmbathy) / fthk 3286 fa_prod = fa_prod + f_riv_loc_alk 3287 endif 3288 !! 3289 !! benthic remineralisation 3290 if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 3291 fa_prod = fa_prod + (2.0 * f_benout_ca(ji,jj) / fthk) 3292 endif 3293 !! 3294 btra(jpalk) = b0 * ( & 3295 fa_prod + fa_cons ) 3296 !! 3297 !!---------------------------------------------------------------------- 3298 !! oxygen (has protection at low O2 concentrations; OCMIP-2 style) 3299 fo2_prod = 0.0 & 3300 + (xthetanit * fprn * zphn) & ! Pn primary production, N 3301 + (xthetanit * fprd * zphd) & ! Pd primary production, N 3302 + (xthetarem * xthetapn * fprn * zphn) & ! Pn primary production, C 3303 + (xthetarem * xthetapd * fprd * zphd) ! Pd primary production, C 3304 fo2_ncons = 0.0 & 3305 - (xthetanit * xphi * fgmipn) & ! Pn messy feeding remin., N 3306 - (xthetanit * xphi * fgmid) & ! D messy feeding remin., N 3307 - (xthetanit * xphi * fgmepn) & ! Pn messy feeding remin., N 3308 - (xthetanit * xphi * fgmepd) & ! Pd messy feeding remin., N 3309 - (xthetanit * xphi * fgmezmi) & ! Zi messy feeding remin., N 3310 - (xthetanit * xphi * fgmed) & ! D messy feeding remin., N 3311 - (xthetanit * fmiexcr) & ! microzoo excretion, N 3312 - (xthetanit * fmeexcr) & ! mesozoo excretion, N 3313 - (xthetanit * fdd) & ! slow detritus remin., N 3314 - (xthetanit * freminn) & ! fast detritus remin., N 3315 - (xthetanit * fdpn2) & ! Pn losses, N 3316 - (xthetanit * fdpd2) & ! Pd losses, N 3317 - (xthetanit * fdzmi2) & ! Zmi losses, N 3318 - (xthetanit * fdzme2) ! Zme losses, N 3319 !! 3320 !! benthic remineralisation 3321 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3322 fo2_ncons = fo2_ncons - (xthetanit * f_benout_n(ji,jj) / fthk) 3323 endif 3324 fo2_ccons = 0.0 & 3325 - (xthetarem * xthetapn * xphi * fgmipn) & ! Pn messy feeding remin., C 3326 - (xthetarem * xphi * fgmidc) & ! D messy feeding remin., C 3327 - (xthetarem * xthetapn * xphi * fgmepn) & ! Pn messy feeding remin., C 3328 - (xthetarem * xthetapd * xphi * fgmepd) & ! Pd messy feeding remin., C 3329 - (xthetarem * xthetazmi * xphi * fgmezmi) & ! Zi messy feeding remin., C 3330 - (xthetarem * xphi * fgmedc) & ! D messy feeding remin., C 3331 - (xthetarem * fmiresp) & ! microzoo respiration, C 3332 - (xthetarem * fmeresp) & ! mesozoo respiration, C 3333 - (xthetarem * fddc) & ! slow detritus remin., C 3334 - (xthetarem * freminc) & ! fast detritus remin., C 3335 - (xthetarem * xthetapn * fdpn2) & ! Pn losses, C 3336 - (xthetarem * xthetapd * fdpd2) & ! Pd losses, C 3337 - (xthetarem * xthetazmi * fdzmi2) & ! Zmi losses, C 3338 - (xthetarem * xthetazme * fdzme2) ! Zme losses, C 3339 !! 3340 !! benthic remineralisation 3341 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3342 fo2_ccons = fo2_ccons - (xthetarem * f_benout_c(ji,jj) / fthk) 3343 endif 3344 fo2_cons = fo2_ncons + fo2_ccons 3345 !! 3346 !! is this a suboxic zone? 3347 if (zoxy.lt.xo2min) then ! deficient O2; production fluxes only 3348 btra(jpoxy) = b0 * ( & 3349 fo2_prod ) 3350 foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 3351 foxy_anox(ji,jj) = foxy_anox(ji,jj) + ( fthk * fo2_cons ) 3352 else ! sufficient O2; production + consumption fluxes 3353 btra(jpoxy) = b0 * ( & 3354 fo2_prod + fo2_cons ) 3355 foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 3356 foxy_cons(ji,jj) = foxy_cons(ji,jj) + ( fthk * fo2_cons ) 3357 endif 3358 !! 3359 !! air-sea fluxes (if this is the surface box) 3360 if (jk.eq.1) then 3361 !! 3362 !! CO2 flux 3363 btra(jpdic) = btra(jpdic) + (b0 * f_co2flux) 3364 !! 3365 !! O2 flux (mol/m3/s -> mmol/m3/d) 3366 btra(jpoxy) = btra(jpoxy) + (b0 * f_o2flux) 3367 endif 3368 # endif 3369 3370 !!---------------------------------------------------------------------- 3371 !! Integrate calculated fluxes for mass balance 3372 !!---------------------------------------------------------------------- 3373 !! 3374 !! === nitrogen === 3375 fflx_n(ji,jj) = fflx_n(ji,jj) + & 3376 fthk * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet) + btra(jpdin) ) 3377 !! === silicon === 3378 fflx_si(ji,jj) = fflx_si(ji,jj) + & 3379 fthk * ( btra(jppds) + btra(jpsil) ) 3380 !! === iron === 3381 fflx_fe(ji,jj) = fflx_fe(ji,jj) + & 3382 fthk * ( ( xrfn * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet)) ) + btra(jpfer) ) 3677 !! 3678 !!---------------------------------------------------------------------- 3679 !! AXY (26/11/08): implicit detrital carbon change 3680 btra(jpdtc) = b0 * ( & 3681 + (xthetapn * fdpn) + ((1.0 - xfdfrac1) * (xthetapd * fdpd)) & ! mort. losses 3682 + (xthetazmi * fdzmi) + ((1.0 - xfdfrac2) * (xthetazme * fdzme)) & ! mort. losses 3683 + ((1.0 - xbetac) * (ficmi + ficme)) & ! assim. inefficiency 3684 - fgmidc - fgmedc - fddc & ! grazing and remin. 3685 + ffast2slowc ) ! seafloor fast->slow 3686 !! 3687 !!---------------------------------------------------------------------- 3688 !! dissolved inorganic carbon 3689 fc_cons = 0.0 & 3690 - (xthetapn * fprn * zphn) - (xthetapd * fprd * zphd) ! primary production 3691 fc_prod = 0.0 & 3692 + (xthetapn * xphi * fgmipn) + (xphi * fgmidc) & ! messy feeding remin 3693 + (xthetapn * xphi * fgmepn) + (xthetapd * xphi * fgmepd) & ! messy feeding remin 3694 + (xthetazmi * xphi * fgmezmi) + (xphi * fgmedc) & ! messy feeding remin 3695 + fmiresp + fmeresp + fddc + freminc + (xthetapn * fdpn2) & ! resp., remin., losses 3696 + (xthetapd * fdpd2) + (xthetazmi * fdzmi2) & ! losses 3697 + (xthetazme * fdzme2) ! losses 3698 !! 3699 !! riverine flux 3700 if ( jriver_c .gt. 0 ) then 3701 f_riv_loc_c = f_riv_c(ji,jj) * friver_dep(jk,jmbathy) / fthk 3702 fc_prod = fc_prod + f_riv_loc_c 3703 endif 3704 !! 3705 !! benthic remineralisation 3706 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3707 fc_prod = fc_prod + (f_benout_c(ji,jj) / fthk) 3708 endif 3709 if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 3710 fc_prod = fc_prod + (f_benout_ca(ji,jj) / fthk) 3711 endif 3712 !! 3713 !! community respiration (does not include CaCO3 terms - obviously!) 3714 fcomm_resp(ji,jj) = fcomm_resp(ji,jj) + fc_prod 3715 !! 3716 !! CaCO3 3717 fc_prod = fc_prod - ftempca + freminca 3718 !! 3719 !! riverine flux 3720 if ( jk .eq. 1 .and. jriver_c .gt. 0 ) then 3721 fc_prod = fc_prod + f_riv_c(ji,jj) 3722 endif 3723 !! 3724 btra(jpdic) = b0 * ( & 3725 fc_prod + fc_cons ) 3726 !! 3727 fcar_cons(ji,jj) = fcar_cons(ji,jj) + ( fthk * ( & ! consumption of dissolved carbon 3728 fc_cons ) ) 3729 fcar_prod(ji,jj) = fcar_prod(ji,jj) + ( fthk * ( & ! production of dissolved carbon 3730 fc_prod ) ) 3731 !! 3732 !!---------------------------------------------------------------------- 3733 !! alkalinity 3734 fa_prod = 0.0 & 3735 + (2.0 * freminca) ! CaCO3 dissolution 3736 fa_cons = 0.0 & 3737 - (2.0 * ftempca) ! CaCO3 production 3738 !! 3739 !! riverine flux 3740 if ( jriver_alk .gt. 0 ) then 3741 f_riv_loc_alk = f_riv_alk(ji,jj) * friver_dep(jk,jmbathy) / fthk 3742 fa_prod = fa_prod + f_riv_loc_alk 3743 endif 3744 !! 3745 !! benthic remineralisation 3746 if (jk.eq.jmbathy .and. jinorgben.eq.1 .and. ibenthic.eq.1) then 3747 fa_prod = fa_prod + (2.0 * f_benout_ca(ji,jj) / fthk) 3748 endif 3749 !! 3750 btra(jpalk) = b0 * ( & 3751 fa_prod + fa_cons ) 3752 !! 3753 !!---------------------------------------------------------------------- 3754 !! oxygen (has protection at low O2 concentrations; OCMIP-2 style) 3755 fo2_prod = 0.0 & 3756 + (xthetanit * fprn * zphn) & ! Pn primary production, N 3757 + (xthetanit * fprd * zphd) & ! Pd primary production, N 3758 + (xthetarem * xthetapn * fprn * zphn) & ! Pn primary production, C 3759 + (xthetarem * xthetapd * fprd * zphd) ! Pd primary production, C 3760 fo2_ncons = 0.0 & 3761 - (xthetanit * xphi * fgmipn) & ! Pn messy feeding remin., N 3762 - (xthetanit * xphi * fgmid) & ! D messy feeding remin., N 3763 - (xthetanit * xphi * fgmepn) & ! Pn messy feeding remin., N 3764 - (xthetanit * xphi * fgmepd) & ! Pd messy feeding remin., N 3765 - (xthetanit * xphi * fgmezmi) & ! Zi messy feeding remin., N 3766 - (xthetanit * xphi * fgmed) & ! D messy feeding remin., N 3767 - (xthetanit * fmiexcr) & ! microzoo excretion, N 3768 - (xthetanit * fmeexcr) & ! mesozoo excretion, N 3769 - (xthetanit * fdd) & ! slow detritus remin., N 3770 - (xthetanit * freminn) & ! fast detritus remin., N 3771 - (xthetanit * fdpn2) & ! Pn losses, N 3772 - (xthetanit * fdpd2) & ! Pd losses, N 3773 - (xthetanit * fdzmi2) & ! Zmi losses, N 3774 - (xthetanit * fdzme2) ! Zme losses, N 3775 !! 3776 !! benthic remineralisation 3777 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3778 fo2_ncons = fo2_ncons - (xthetanit * f_benout_n(ji,jj) / fthk) 3779 endif 3780 fo2_ccons = 0.0 & 3781 - (xthetarem * xthetapn * xphi * fgmipn) & ! Pn messy feeding remin., C 3782 - (xthetarem * xphi * fgmidc) & ! D messy feeding remin., C 3783 - (xthetarem * xthetapn * xphi * fgmepn) & ! Pn messy feeding remin., C 3784 - (xthetarem * xthetapd * xphi * fgmepd) & ! Pd messy feeding remin., C 3785 - (xthetarem * xthetazmi * xphi * fgmezmi) & ! Zi messy feeding remin., C 3786 - (xthetarem * xphi * fgmedc) & ! D messy feeding remin., C 3787 - (xthetarem * fmiresp) & ! microzoo respiration, C 3788 - (xthetarem * fmeresp) & ! mesozoo respiration, C 3789 - (xthetarem * fddc) & ! slow detritus remin., C 3790 - (xthetarem * freminc) & ! fast detritus remin., C 3791 - (xthetarem * xthetapn * fdpn2) & ! Pn losses, C 3792 - (xthetarem * xthetapd * fdpd2) & ! Pd losses, C 3793 - (xthetarem * xthetazmi * fdzmi2) & ! Zmi losses, C 3794 - (xthetarem * xthetazme * fdzme2) ! Zme losses, C 3795 !! 3796 !! benthic remineralisation 3797 if (jk.eq.jmbathy .and. jorgben.eq.1 .and. ibenthic.eq.1) then 3798 fo2_ccons = fo2_ccons - (xthetarem * f_benout_c(ji,jj) / fthk) 3799 endif 3800 fo2_cons = fo2_ncons + fo2_ccons 3801 !! 3802 !! is this a suboxic zone? 3803 if (zoxy.lt.xo2min) then ! deficient O2; production fluxes only 3804 btra(jpoxy) = b0 * ( & 3805 fo2_prod ) 3806 foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 3807 foxy_anox(ji,jj) = foxy_anox(ji,jj) + ( fthk * fo2_cons ) 3808 else ! sufficient O2; production + consumption fluxes 3809 btra(jpoxy) = b0 * ( & 3810 fo2_prod + fo2_cons ) 3811 foxy_prod(ji,jj) = foxy_prod(ji,jj) + ( fthk * fo2_prod ) 3812 foxy_cons(ji,jj) = foxy_cons(ji,jj) + ( fthk * fo2_cons ) 3813 endif 3814 !! 3815 !! air-sea fluxes (if this is the surface box) 3816 if (jk.eq.1) then 3817 !! 3818 !! CO2 flux 3819 btra(jpdic) = btra(jpdic) + (b0 * f_co2flux) 3820 !! 3821 !! O2 flux (mol/m3/s -> mmol/m3/d) 3822 btra(jpoxy) = btra(jpoxy) + (b0 * f_o2flux) 3823 endif 3824 # endif 3825 3826 # if defined key_debug_medusa 3827 !! report state variable fluxes (not including fast-sinking detritus) 3828 if (idf.eq.1.AND.idfval.eq.1) then 3829 IF (lwp) write (numout,*) '------------------------------' 3830 IF (lwp) write (numout,*) 'btra(jpchn)(',jk,') = ', btra(jpchn) 3831 IF (lwp) write (numout,*) 'btra(jpchd)(',jk,') = ', btra(jpchd) 3832 IF (lwp) write (numout,*) 'btra(jpphn)(',jk,') = ', btra(jpphn) 3833 IF (lwp) write (numout,*) 'btra(jpphd)(',jk,') = ', btra(jpphd) 3834 IF (lwp) write (numout,*) 'btra(jppds)(',jk,') = ', btra(jppds) 3835 IF (lwp) write (numout,*) 'btra(jpzmi)(',jk,') = ', btra(jpzmi) 3836 IF (lwp) write (numout,*) 'btra(jpzme)(',jk,') = ', btra(jpzme) 3837 IF (lwp) write (numout,*) 'btra(jpdet)(',jk,') = ', btra(jpdet) 3838 IF (lwp) write (numout,*) 'btra(jpdin)(',jk,') = ', btra(jpdin) 3839 IF (lwp) write (numout,*) 'btra(jpsil)(',jk,') = ', btra(jpsil) 3840 IF (lwp) write (numout,*) 'btra(jpfer)(',jk,') = ', btra(jpfer) 3841 # if defined key_roam 3842 IF (lwp) write (numout,*) 'btra(jpdtc)(',jk,') = ', btra(jpdtc) 3843 IF (lwp) write (numout,*) 'btra(jpdic)(',jk,') = ', btra(jpdic) 3844 IF (lwp) write (numout,*) 'btra(jpalk)(',jk,') = ', btra(jpalk) 3845 IF (lwp) write (numout,*) 'btra(jpoxy)(',jk,') = ', btra(jpoxy) 3846 # endif 3847 endif 3848 # endif 3849 3850 !!---------------------------------------------------------------------- 3851 !! Integrate calculated fluxes for mass balance 3852 !!---------------------------------------------------------------------- 3853 !! 3854 !! === nitrogen === 3855 fflx_n(ji,jj) = fflx_n(ji,jj) + & 3856 fthk * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet) + btra(jpdin) ) 3857 !! === silicon === 3858 fflx_si(ji,jj) = fflx_si(ji,jj) + & 3859 fthk * ( btra(jppds) + btra(jpsil) ) 3860 !! === iron === 3861 fflx_fe(ji,jj) = fflx_fe(ji,jj) + & 3862 fthk * ( ( xrfn * ( btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet)) ) + btra(jpfer) ) 3383 3863 # if defined key_roam 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 # endif 3395 3396 3397 3398 3399 3400 3401 3402 3864 !! === carbon === 3865 fflx_c(ji,jj) = fflx_c(ji,jj) + & 3866 fthk * ( (xthetapn * btra(jpphn)) + (xthetapd * btra(jpphd)) + & 3867 (xthetazmi * btra(jpzmi)) + (xthetazme * btra(jpzme)) + btra(jpdtc) + btra(jpdic) ) 3868 !! === alkalinity === 3869 fflx_a(ji,jj) = fflx_a(ji,jj) + & 3870 fthk * ( btra(jpalk) ) 3871 !! === oxygen === 3872 fflx_o2(ji,jj) = fflx_o2(ji,jj) + & 3873 fthk * ( btra(jpoxy) ) 3874 # endif 3875 3876 !!---------------------------------------------------------------------- 3877 !! Apply calculated tracer fluxes 3878 !!---------------------------------------------------------------------- 3879 !! 3880 !! units: [unit of tracer] per second (fluxes are calculated above per day) 3881 !! 3882 ibio_switch = 1 3403 3883 # if defined key_gulf_finland 3404 3405 3406 3407 3408 3409 3410 3411 if ( flonx.gt.24.7 .and. flonx.lt.27.8 .and. &3412 & flatx.gt.59.2 .and. flatx.lt.60.2 ) then3413 3414 3884 !! AXY (17/05/13): fudge in a Gulf of Finland correction; uses longitude- 3885 !! latitude range to establish if this is a Gulf of Finland 3886 !! grid cell; if so, then BGC fluxes are ignored (though 3887 !! still calculated); for reference, this is meant to be a 3888 !! temporary fix to see if all of my problems can be done 3889 !! away with if I switch off BGC fluxes in the Gulf of 3890 !! Finland, which currently appears the source of trouble 3891 if ( glamt(ji,jj).gt.24.7 .and. glamt(ji,jj).lt.27.8 .and. & 3892 & gphit(ji,jj).gt.59.2 .and. gphit(ji,jj).lt.60.2 ) then 3893 ibio_switch = 0 3894 endif 3415 3895 # endif 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3896 if (ibio_switch.eq.1) then 3897 tra(ji,jj,jk,jpchn) = tra(ji,jj,jk,jpchn) + (btra(jpchn) / 86400.) 3898 tra(ji,jj,jk,jpchd) = tra(ji,jj,jk,jpchd) + (btra(jpchd) / 86400.) 3899 tra(ji,jj,jk,jpphn) = tra(ji,jj,jk,jpphn) + (btra(jpphn) / 86400.) 3900 tra(ji,jj,jk,jpphd) = tra(ji,jj,jk,jpphd) + (btra(jpphd) / 86400.) 3901 tra(ji,jj,jk,jppds) = tra(ji,jj,jk,jppds) + (btra(jppds) / 86400.) 3902 tra(ji,jj,jk,jpzmi) = tra(ji,jj,jk,jpzmi) + (btra(jpzmi) / 86400.) 3903 tra(ji,jj,jk,jpzme) = tra(ji,jj,jk,jpzme) + (btra(jpzme) / 86400.) 3904 tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + (btra(jpdet) / 86400.) 3905 tra(ji,jj,jk,jpdin) = tra(ji,jj,jk,jpdin) + (btra(jpdin) / 86400.) 3906 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) + (btra(jpsil) / 86400.) 3907 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + (btra(jpfer) / 86400.) 3428 3908 # if defined key_roam 3429 3430 3431 3432 3433 # endif 3434 endif3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3909 tra(ji,jj,jk,jpdtc) = tra(ji,jj,jk,jpdtc) + (btra(jpdtc) / 86400.) 3910 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + (btra(jpdic) / 86400.) 3911 tra(ji,jj,jk,jpalk) = tra(ji,jj,jk,jpalk) + (btra(jpalk) / 86400.) 3912 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + (btra(jpoxy) / 86400.) 3913 # endif 3914 endif 3915 3916 !! AXY (18/11/16): CMIP6 diagnostics 3917 IF( med_diag%FBDDTALK%dgsave ) THEN 3918 fbddtalk(ji,jj) = fbddtalk(ji,jj) + (btra(jpalk) * fthk) 3919 ENDIF 3920 IF( med_diag%FBDDTDIC%dgsave ) THEN 3921 fbddtdic(ji,jj) = fbddtdic(ji,jj) + (btra(jpdic) * fthk) 3922 ENDIF 3923 IF( med_diag%FBDDTDIFE%dgsave ) THEN 3924 fbddtdife(ji,jj) = fbddtdife(ji,jj) + (btra(jpfer) * fthk) 3925 ENDIF 3926 IF( med_diag%FBDDTDIN%dgsave ) THEN 3927 fbddtdin(ji,jj) = fbddtdin(ji,jj) + (btra(jpdin) * fthk) 3928 ENDIF 3929 IF( med_diag%FBDDTDISI%dgsave ) THEN 3930 fbddtdisi(ji,jj) = fbddtdisi(ji,jj) + (btra(jpsil) * fthk) 3931 ENDIF 3932 !! 3933 IF( med_diag%BDDTALK3%dgsave ) THEN 3934 bddtalk3(ji,jj,jk) = btra(jpalk) 3935 ENDIF 3936 IF( med_diag%BDDTDIC3%dgsave ) THEN 3937 bddtdic3(ji,jj,jk) = btra(jpdic) 3938 ENDIF 3939 IF( med_diag%BDDTDIFE3%dgsave ) THEN 3940 bddtdife3(ji,jj,jk) = btra(jpfer) 3941 ENDIF 3942 IF( med_diag%BDDTDIN3%dgsave ) THEN 3943 bddtdin3(ji,jj,jk) = btra(jpdin) 3944 ENDIF 3945 IF( med_diag%BDDTDISI3%dgsave ) THEN 3946 bddtdisi3(ji,jj,jk) = btra(jpsil) 3947 ENDIF 3468 3948 3469 3949 # if defined key_debug_medusa 3470 IF ( lwp) write (numout,*) '------'3471 IF ( lwp) write (numout,*) 'trc_bio_medusa: end all calculations'3472 IF ( lwp) write (numout,*) 'trc_bio_medusa: now outputs'3473 CALL flush(numout)3950 IF (lwp) write (numout,*) '------' 3951 IF (lwp) write (numout,*) 'trc_bio_medusa: end all calculations' 3952 IF (lwp) write (numout,*) 'trc_bio_medusa: now outputs' 3953 CALL flush(numout) 3474 3954 # endif 3475 3955 3476 3956 # if defined key_axy_nancheck 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 # endif 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3957 !!---------------------------------------------------------------------- 3958 !! Check calculated tracer fluxes 3959 !!---------------------------------------------------------------------- 3960 !! 3961 DO jn = 1,jptra 3962 fq0 = btra(jn) 3963 !! AXY (30/01/14): "isnan" problem on HECTOR 3964 !! if (fq0 /= fq0 ) then 3965 if ( ieee_is_nan( fq0 ) ) then 3966 !! there's a NaN here 3967 if (lwp) write(numout,*) 'NAN detected in btra(', ji, ',', & 3968 & jj, ',', jk, ',', jn, ') at time', kt 3969 CALL ctl_stop( 'trcbio_medusa, NAN in btra field' ) 3970 endif 3971 ENDDO 3972 DO jn = 1,jptra 3973 fq0 = tra(ji,jj,jk,jn) 3974 !! AXY (30/01/14): "isnan" problem on HECTOR 3975 !! if (fq0 /= fq0 ) then 3976 if ( ieee_is_nan( fq0 ) ) then 3977 !! there's a NaN here 3978 if (lwp) write(numout,*) 'NAN detected in tra(', ji, ',', & 3979 & jj, ',', jk, ',', jn, ') at time', kt 3980 CALL ctl_stop( 'trcbio_medusa, NAN in tra field' ) 3981 endif 3982 ENDDO 3983 CALL flush(numout) 3984 # endif 3985 3986 !!---------------------------------------------------------------------- 3987 !! Check model conservation 3988 !! these terms merely sum up the tendency terms of the relevant 3989 !! state variables, which should sum to zero; the iron cycle is 3990 !! complicated by fluxes that add (aeolian deposition and seafloor 3991 !! remineralisation) and remove (scavenging) dissolved iron from 3992 !! the model (i.e. the sum of iron fluxes is unlikely to be zero) 3993 !!---------------------------------------------------------------------- 3994 !! 3995 !! fnit0 = btra(jpphn) + btra(jpphd) + btra(jpzmi) + btra(jpzme) + btra(jpdet) + btra(jpdin) ! + ftempn 3996 !! fsil0 = btra(jppds) + btra(jpsil) ! + ftempsi 3997 !! ffer0 = (xrfn * fnit0) + btra(jpfer) 3518 3998 # if defined key_roam 3519 3520 3521 3522 # endif 3523 3524 3525 3526 !! IF ( lwp) write (*,*) '*******!MEDUSA Conservation!*******',kt3999 !! fcar0 = 0. 4000 !! falk0 = 0. 4001 !! foxy0 = 0. 4002 # endif 4003 !! 4004 !! if (kt/240*240.eq.kt) then 4005 !! if (ji.eq.2.and.jj.eq.2.and.jk.eq.1) then 4006 !! IF (lwp) write (*,*) '*******!MEDUSA Conservation!*******',kt 3527 4007 # if defined key_roam 3528 !! IF ( lwp) write (*,*) fnit0,fsil0,ffer0,fcar0,falk0,foxy04008 !! IF (lwp) write (*,*) fnit0,fsil0,ffer0,fcar0,falk0,foxy0 3529 4009 # else 3530 !! IF ( lwp ) write (*,*) fnit0,fsil0,ffer0 3531 # endif 3532 !! endif 3533 !! endif 3534 3535 IF( lk_iomput .AND. .NOT. ln_diatrc ) THEN 3536 !!---------------------------------------------------------------------- 3537 !! Add in XML diagnostics stuff 3538 !!---------------------------------------------------------------------- 3539 !! 3540 !! ** 2D diagnostics 4010 !! IF (lwp) write (*,*) fnit0,fsil0,ffer0 4011 # endif 4012 !! endif 4013 !! endif 4014 4015 # if defined key_trc_diabio 4016 !!====================================================================== 4017 !! LOCAL GRID CELL DIAGNOSTICS 4018 !!====================================================================== 4019 !! 4020 !!---------------------------------------------------------------------- 4021 !! Full diagnostics key_trc_diabio: 4022 !! LOBSTER and PISCES support full diagnistics option key_trc_diabio 4023 !! which gives an option of FULL output of biological sourses and sinks. 4024 !! I cannot see any reason for doing this. If needed, it can be done 4025 !! as shown below. 4026 !!---------------------------------------------------------------------- 4027 !! 4028 IF(lwp) WRITE(numout,*) ' MEDUSA does not support key_trc_diabio' 4029 !! trbio(ji,jj,jk, 1) = fprn 4030 # endif 4031 4032 IF( lk_iomput .AND. .NOT. ln_diatrc ) THEN 4033 !!---------------------------------------------------------------------- 4034 !! Add in XML diagnostics stuff 4035 !!---------------------------------------------------------------------- 4036 !! 4037 !! ** 2D diagnostics 3541 4038 # if defined key_debug_medusa 3542 IF ( lwp) write (numout,*) 'trc_bio_medusa: diag in ij-jj-jk loop'3543 4039 IF (lwp) write (numout,*) 'trc_bio_medusa: diag in ij-jj-jk loop' 4040 CALL flush(numout) 3544 4041 # endif 3545 4042 IF ( med_diag%PRN%dgsave ) THEN 3546 4043 fprn2d(ji,jj) = fprn2d(ji,jj) + (fprn * zphn * fthk) 3547 3548 4044 ENDIF 4045 IF ( med_diag%MPN%dgsave ) THEN 3549 4046 fdpn2d(ji,jj) = fdpn2d(ji,jj) + (fdpn * fthk) 3550 3551 4047 ENDIF 4048 IF ( med_diag%PRD%dgsave ) THEN 3552 4049 fprd2d(ji,jj) = fprd2d(ji,jj) + (fprd * zphd * fthk) 3553 3554 4050 ENDIF 4051 IF( med_diag%MPD%dgsave ) THEN 3555 4052 fdpd2d(ji,jj) = fdpd2d(ji,jj) + (fdpd * fthk) 3556 3557 3558 3559 3560 4053 ENDIF 4054 ! IF( med_diag%DSED%dgsave ) THEN 4055 ! CALL iom_put( "DSED" , ftot_n ) 4056 ! ENDIF 4057 IF( med_diag%OPAL%dgsave ) THEN 3561 4058 fprds2d(ji,jj) = fprds2d(ji,jj) + (fprds * zpds * fthk) 3562 3563 4059 ENDIF 4060 IF( med_diag%OPALDISS%dgsave ) THEN 3564 4061 fsdiss2d(ji,jj) = fsdiss2d(ji,jj) + (fsdiss * fthk) 3565 3566 4062 ENDIF 4063 IF( med_diag%GMIPn%dgsave ) THEN 3567 4064 fgmipn2d(ji,jj) = fgmipn2d(ji,jj) + (fgmipn * fthk) 3568 3569 4065 ENDIF 4066 IF( med_diag%GMID%dgsave ) THEN 3570 4067 fgmid2d(ji,jj) = fgmid2d(ji,jj) + (fgmid * fthk) 3571 3572 4068 ENDIF 4069 IF( med_diag%MZMI%dgsave ) THEN 3573 4070 fdzmi2d(ji,jj) = fdzmi2d(ji,jj) + (fdzmi * fthk) 3574 3575 4071 ENDIF 4072 IF( med_diag%GMEPN%dgsave ) THEN 3576 4073 fgmepn2d(ji,jj) = fgmepn2d(ji,jj) + (fgmepn * fthk) 3577 3578 4074 ENDIF 4075 IF( med_diag%GMEPD%dgsave ) THEN 3579 4076 fgmepd2d(ji,jj) = fgmepd2d(ji,jj) + (fgmepd * fthk) 3580 3581 4077 ENDIF 4078 IF( med_diag%GMEZMI%dgsave ) THEN 3582 4079 fgmezmi2d(ji,jj) = fgmezmi2d(ji,jj) + (fgmezmi * fthk) 3583 3584 4080 ENDIF 4081 IF( med_diag%GMED%dgsave ) THEN 3585 4082 fgmed2d(ji,jj) = fgmed2d(ji,jj) + (fgmed * fthk) 3586 3587 4083 ENDIF 4084 IF( med_diag%MZME%dgsave ) THEN 3588 4085 fdzme2d(ji,jj) = fdzme2d(ji,jj) + (fdzme * fthk) 3589 3590 3591 3592 3593 4086 ENDIF 4087 ! IF( med_diag%DEXP%dgsave ) THEN 4088 ! CALL iom_put( "DEXP" , ftot_n ) 4089 ! ENDIF 4090 IF( med_diag%DETN%dgsave ) THEN 3594 4091 fslown2d(ji,jj) = fslown2d(ji,jj) + (fslown * fthk) 3595 3596 4092 ENDIF 4093 IF( med_diag%MDET%dgsave ) THEN 3597 4094 fdd2d(ji,jj) = fdd2d(ji,jj) + (fdd * fthk) 3598 3599 4095 ENDIF 4096 IF( med_diag%AEOLIAN%dgsave ) THEN 3600 4097 ffetop2d(ji,jj) = ffetop2d(ji,jj) + (ffetop * fthk) 3601 3602 4098 ENDIF 4099 IF( med_diag%BENTHIC%dgsave ) THEN 3603 4100 ffebot2d(ji,jj) = ffebot2d(ji,jj) + (ffebot * fthk) 3604 3605 4101 ENDIF 4102 IF( med_diag%SCAVENGE%dgsave ) THEN 3606 4103 ffescav2d(ji,jj) = ffescav2d(ji,jj) + (ffescav * fthk) 3607 3608 4104 ENDIF 4105 IF( med_diag%PN_JLIM%dgsave ) THEN 3609 4106 ! fjln2d(ji,jj) = fjln2d(ji,jj) + (fjln * zphn * fthk) 3610 4107 fjln2d(ji,jj) = fjln2d(ji,jj) + (fjlim_pn * zphn * fthk) 3611 3612 4108 ENDIF 4109 IF( med_diag%PN_NLIM%dgsave ) THEN 3613 4110 fnln2d(ji,jj) = fnln2d(ji,jj) + (fnln * zphn * fthk) 3614 3615 4111 ENDIF 4112 IF( med_diag%PN_FELIM%dgsave ) THEN 3616 4113 ffln2d(ji,jj) = ffln2d(ji,jj) + (ffln * zphn * fthk) 3617 3618 4114 ENDIF 4115 IF( med_diag%PD_JLIM%dgsave ) THEN 3619 4116 ! fjld2d(ji,jj) = fjld2d(ji,jj) + (fjld * zphd * fthk) 3620 4117 fjld2d(ji,jj) = fjld2d(ji,jj) + (fjlim_pd * zphd * fthk) 3621 3622 4118 ENDIF 4119 IF( med_diag%PD_NLIM%dgsave ) THEN 3623 4120 fnld2d(ji,jj) = fnld2d(ji,jj) + (fnld * zphd * fthk) 3624 3625 4121 ENDIF 4122 IF( med_diag%PD_FELIM%dgsave ) THEN 3626 4123 ffld2d(ji,jj) = ffld2d(ji,jj) + (ffld * zphd * fthk) 3627 3628 4124 ENDIF 4125 IF( med_diag%PD_SILIM%dgsave ) THEN 3629 4126 fsld2d2(ji,jj) = fsld2d2(ji,jj) + (fsld2 * zphd * fthk) 3630 3631 4127 ENDIF 4128 IF( med_diag%PDSILIM2%dgsave ) THEN 3632 4129 fsld2d(ji,jj) = fsld2d(ji,jj) + (fsld * zphd * fthk) 3633 3634 3635 4130 ENDIF 4131 !! 4132 IF( med_diag%TOTREG_N%dgsave ) THEN 3636 4133 fregen2d(ji,jj) = fregen2d(ji,jj) + fregen 3637 3638 4134 ENDIF 4135 IF( med_diag%TOTRG_SI%dgsave ) THEN 3639 4136 fregensi2d(ji,jj) = fregensi2d(ji,jj) + fregensi 3640 3641 3642 4137 ENDIF 4138 !! 4139 IF( med_diag%FASTN%dgsave ) THEN 3643 4140 ftempn2d(ji,jj) = ftempn2d(ji,jj) + (ftempn * fthk) 3644 3645 4141 ENDIF 4142 IF( med_diag%FASTSI%dgsave ) THEN 3646 4143 ftempsi2d(ji,jj) = ftempsi2d(ji,jj) + (ftempsi * fthk) 3647 3648 4144 ENDIF 4145 IF( med_diag%FASTFE%dgsave ) THEN 3649 4146 ftempfe2d(ji,jj) =ftempfe2d(ji,jj) + (ftempfe * fthk) 3650 3651 4147 ENDIF 4148 IF( med_diag%FASTC%dgsave ) THEN 3652 4149 ftempc2d(ji,jj) = ftempc2d(ji,jj) + (ftempc * fthk) 3653 3654 4150 ENDIF 4151 IF( med_diag%FASTCA%dgsave ) THEN 3655 4152 ftempca2d(ji,jj) = ftempca2d(ji,jj) + (ftempca * fthk) 3656 3657 3658 4153 ENDIF 4154 !! 4155 IF( med_diag%REMINN%dgsave ) THEN 3659 4156 freminn2d(ji,jj) = freminn2d(ji,jj) + (freminn * fthk) 3660 3661 4157 ENDIF 4158 IF( med_diag%REMINSI%dgsave ) THEN 3662 4159 freminsi2d(ji,jj) = freminsi2d(ji,jj) + (freminsi * fthk) 3663 3664 4160 ENDIF 4161 IF( med_diag%REMINFE%dgsave ) THEN 3665 4162 freminfe2d(ji,jj)= freminfe2d(ji,jj) + (freminfe * fthk) 3666 3667 4163 ENDIF 4164 IF( med_diag%REMINC%dgsave ) THEN 3668 4165 freminc2d(ji,jj) = freminc2d(ji,jj) + (freminc * fthk) 3669 3670 4166 ENDIF 4167 IF( med_diag%REMINCA%dgsave ) THEN 3671 4168 freminca2d(ji,jj) = freminca2d(ji,jj) + (freminca * fthk) 3672 3673 4169 ENDIF 4170 !! 3674 4171 # if defined key_roam 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 ENDIF3695 3696 3697 3698 3699 ENDIF3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 4172 !! 4173 !! AXY (09/11/16): CMIP6 diagnostics 4174 IF( med_diag%FD_NIT3%dgsave ) THEN 4175 fd_nit3(ji,jj,jk) = ffastn(ji,jj) 4176 ENDIF 4177 IF( med_diag%FD_SIL3%dgsave ) THEN 4178 fd_sil3(ji,jj,jk) = ffastsi(ji,jj) 4179 ENDIF 4180 IF( med_diag%FD_CAR3%dgsave ) THEN 4181 fd_car3(ji,jj,jk) = ffastc(ji,jj) 4182 ENDIF 4183 IF( med_diag%FD_CAL3%dgsave ) THEN 4184 fd_cal3(ji,jj,jk) = ffastca(ji,jj) 4185 ENDIF 4186 !! 4187 IF (jk.eq.i0100) THEN 4188 IF( med_diag%RR_0100%dgsave ) THEN 4189 ffastca2d(ji,jj) = & 4190 ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 4191 ENDIF 4192 ELSE IF (jk.eq.i0500) THEN 4193 IF( med_diag%RR_0500%dgsave ) THEN 4194 ffastca2d(ji,jj) = & 4195 ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 4196 ENDIF 4197 ELSE IF (jk.eq.i1000) THEN 4198 IF( med_diag%RR_1000%dgsave ) THEN 4199 ffastca2d(ji,jj) = & 4200 ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) 4201 ENDIF 4202 ELSE IF (jk.eq.jmbathy) THEN 4203 IF( med_diag%IBEN_N%dgsave ) THEN 4204 iben_n2d(ji,jj) = f_sbenin_n(ji,jj) + f_fbenin_n(ji,jj) 4205 ENDIF 4206 IF( med_diag%IBEN_FE%dgsave ) THEN 4207 iben_fe2d(ji,jj) = f_sbenin_fe(ji,jj) + f_fbenin_fe(ji,jj) 4208 ENDIF 4209 IF( med_diag%IBEN_C%dgsave ) THEN 4210 iben_c2d(ji,jj) = f_sbenin_c(ji,jj) + f_fbenin_c(ji,jj) 4211 ENDIF 4212 IF( med_diag%IBEN_SI%dgsave ) THEN 4213 iben_si2d(ji,jj) = f_fbenin_si(ji,jj) 4214 ENDIF 4215 IF( med_diag%IBEN_CA%dgsave ) THEN 4216 iben_ca2d(ji,jj) = f_fbenin_ca(ji,jj) 4217 ENDIF 4218 IF( med_diag%OBEN_N%dgsave ) THEN 4219 oben_n2d(ji,jj) = f_benout_n(ji,jj) 4220 ENDIF 4221 IF( med_diag%OBEN_FE%dgsave ) THEN 4222 oben_fe2d(ji,jj) = f_benout_fe(ji,jj) 4223 ENDIF 4224 IF( med_diag%OBEN_C%dgsave ) THEN 4225 oben_c2d(ji,jj) = f_benout_c(ji,jj) 4226 ENDIF 4227 IF( med_diag%OBEN_SI%dgsave ) THEN 4228 oben_si2d(ji,jj) = f_benout_si(ji,jj) 4229 ENDIF 4230 IF( med_diag%OBEN_CA%dgsave ) THEN 4231 oben_ca2d(ji,jj) = f_benout_ca(ji,jj) 4232 ENDIF 4233 IF( med_diag%SFR_OCAL%dgsave ) THEN 4234 sfr_ocal2d(ji,jj) = f3_omcal(ji,jj,jk) 4235 ENDIF 4236 IF( med_diag%SFR_OARG%dgsave ) THEN 4237 sfr_oarg2d(ji,jj) = f3_omarg(ji,jj,jk) 4238 ENDIF 4239 IF( med_diag%LYSO_CA%dgsave ) THEN 4240 lyso_ca2d(ji,jj) = f_benout_lyso_ca(ji,jj) 4241 ENDIF 4242 ENDIF 4243 !! end bathy-1 diags 4244 !! 4245 IF( med_diag%RIV_N%dgsave ) THEN 4246 rivn2d(ji,jj) = rivn2d(ji,jj) + (f_riv_loc_n * fthk) 4247 ENDIF 4248 IF( med_diag%RIV_SI%dgsave ) THEN 4249 rivsi2d(ji,jj) = rivsi2d(ji,jj) + (f_riv_loc_si * fthk) 4250 ENDIF 4251 IF( med_diag%RIV_C%dgsave ) THEN 4252 rivc2d(ji,jj) = rivc2d(ji,jj) + (f_riv_loc_c * fthk) 4253 ENDIF 4254 IF( med_diag%RIV_ALK%dgsave ) THEN 4255 rivalk2d(ji,jj) = rivalk2d(ji,jj) + (f_riv_loc_alk * fthk) 4256 ENDIF 4257 IF( med_diag%DETC%dgsave ) THEN 4258 fslowc2d(ji,jj) = fslowc2d(ji,jj) + (fslowc * fthk) 4259 ENDIF 4260 !! 4261 !! 4262 !! 4263 IF( med_diag%PN_LLOSS%dgsave ) THEN 4264 fdpn22d(ji,jj) = fdpn22d(ji,jj) + (fdpn2 * fthk) 4265 ENDIF 4266 IF( med_diag%PD_LLOSS%dgsave ) THEN 4267 fdpd22d(ji,jj) = fdpd22d(ji,jj) + (fdpd2 * fthk) 4268 ENDIF 4269 IF( med_diag%ZI_LLOSS%dgsave ) THEN 4270 fdzmi22d(ji,jj) = fdzmi22d(ji,jj) + (fdzmi2 * fthk) 4271 ENDIF 4272 IF( med_diag%ZE_LLOSS%dgsave ) THEN 4273 fdzme22d(ji,jj) = fdzme22d(ji,jj) + (fdzme2 * fthk) 4274 ENDIF 4275 IF( med_diag%ZI_MES_N%dgsave ) THEN 4276 zimesn2d(ji,jj) = zimesn2d(ji,jj) + & 4277 (xphi * (fgmipn + fgmid) * fthk) 4278 ENDIF 4279 IF( med_diag%ZI_MES_D%dgsave ) THEN 4280 zimesd2d(ji,jj) = zimesd2d(ji,jj) + & 4281 ((1. - xbetan) * finmi * fthk) 4282 ENDIF 4283 IF( med_diag%ZI_MES_C%dgsave ) THEN 4284 zimesc2d(ji,jj) = zimesc2d(ji,jj) + & 4285 (xphi * ((xthetapn * fgmipn) + fgmidc) * fthk) 4286 ENDIF 4287 IF( med_diag%ZI_MESDC%dgsave ) THEN 4288 zimesdc2d(ji,jj) = zimesdc2d(ji,jj) + & 4289 ((1. - xbetac) * ficmi * fthk) 4290 ENDIF 4291 IF( med_diag%ZI_EXCR%dgsave ) THEN 4292 ziexcr2d(ji,jj) = ziexcr2d(ji,jj) + (fmiexcr * fthk) 4293 ENDIF 4294 IF( med_diag%ZI_RESP%dgsave ) THEN 4295 ziresp2d(ji,jj) = ziresp2d(ji,jj) + (fmiresp * fthk) 4296 ENDIF 4297 IF( med_diag%ZI_GROW%dgsave ) THEN 4298 zigrow2d(ji,jj) = zigrow2d(ji,jj) + (fmigrow * fthk) 4299 ENDIF 4300 IF( med_diag%ZE_MES_N%dgsave ) THEN 4301 zemesn2d(ji,jj) = zemesn2d(ji,jj) + & 4302 (xphi * (fgmepn + fgmepd + fgmezmi + fgmed) * fthk) 4303 ENDIF 4304 IF( med_diag%ZE_MES_D%dgsave ) THEN 4305 zemesd2d(ji,jj) = zemesd2d(ji,jj) + & 4306 ((1. - xbetan) * finme * fthk) 4307 ENDIF 4308 IF( med_diag%ZE_MES_C%dgsave ) THEN 4309 zemesc2d(ji,jj) = zemesc2d(ji,jj) + & 4310 (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & 4311 (xthetazmi * fgmezmi) + fgmedc) * fthk) 4312 ENDIF 4313 IF( med_diag%ZE_MESDC%dgsave ) THEN 4314 zemesdc2d(ji,jj) = zemesdc2d(ji,jj) + & 4315 ((1. - xbetac) * ficme * fthk) 4316 ENDIF 4317 IF( med_diag%ZE_EXCR%dgsave ) THEN 4318 zeexcr2d(ji,jj) = zeexcr2d(ji,jj) + (fmeexcr * fthk) 4319 ENDIF 4320 IF( med_diag%ZE_RESP%dgsave ) THEN 4321 zeresp2d(ji,jj) = zeresp2d(ji,jj) + (fmeresp * fthk) 4322 ENDIF 4323 IF( med_diag%ZE_GROW%dgsave ) THEN 4324 zegrow2d(ji,jj) = zegrow2d(ji,jj) + (fmegrow * fthk) 4325 ENDIF 4326 IF( med_diag%MDETC%dgsave ) THEN 4327 mdetc2d(ji,jj) = mdetc2d(ji,jj) + (fddc * fthk) 4328 ENDIF 4329 IF( med_diag%GMIDC%dgsave ) THEN 4330 gmidc2d(ji,jj) = gmidc2d(ji,jj) + (fgmidc * fthk) 4331 ENDIF 4332 IF( med_diag%GMEDC%dgsave ) THEN 4333 gmedc2d(ji,jj) = gmedc2d(ji,jj) + (fgmedc * fthk) 4334 ENDIF 4335 !! 3839 4336 # endif 3840 !! 3841 !! ** 3D diagnostics 3842 IF( med_diag%TPP3%dgsave ) THEN 3843 tpp3d(ji,jj,jk) = (fprn * zphn) + (fprd * zphd) 3844 !CALL iom_put( "TPP3" , tpp3d ) 3845 ENDIF 3846 IF( med_diag%TPPD3%dgsave ) THEN 3847 tppd3(ji,jj,jk) = (fprd * zphd) 3848 ENDIF 3849 3850 IF( med_diag%REMIN3N%dgsave ) THEN 3851 remin3dn(ji,jj,jk) = fregen + (freminn * fthk) !! remineralisation 3852 !CALL iom_put( "REMIN3N" , remin3dn ) 3853 ENDIF 3854 !! IF( med_diag%PH3%dgsave ) THEN 3855 !! CALL iom_put( "PH3" , f3_pH ) 3856 !! ENDIF 3857 !! IF( med_diag%OM_CAL3%dgsave ) THEN 3858 !! CALL iom_put( "OM_CAL3" , f3_omcal ) 3859 !! ENDIF 3860 !! 3861 !! AXY (09/11/16): CMIP6 diagnostics 3862 IF ( med_diag%DCALC3%dgsave ) THEN 3863 dcalc3(ji,jj,jk) = freminca 3864 ENDIF 3865 IF ( med_diag%FEDISS3%dgsave ) THEN 3866 fediss3(ji,jj,jk) = ffetop 3867 ENDIF 3868 IF ( med_diag%FESCAV3%dgsave ) THEN 3869 fescav3(ji,jj,jk) = ffescav 3870 ENDIF 3871 IF ( med_diag%MIGRAZP3%dgsave ) THEN 3872 migrazp3(ji,jj,jk) = fgmipn * xthetapn 3873 ENDIF 3874 IF ( med_diag%MIGRAZD3%dgsave ) THEN 3875 migrazd3(ji,jj,jk) = fgmidc 3876 ENDIF 3877 IF ( med_diag%MEGRAZP3%dgsave ) THEN 3878 megrazp3(ji,jj,jk) = (fgmepn * xthetapn) + (fgmepd * xthetapd) 3879 ENDIF 3880 IF ( med_diag%MEGRAZD3%dgsave ) THEN 3881 megrazd3(ji,jj,jk) = fgmedc 3882 ENDIF 3883 IF ( med_diag%MEGRAZZ3%dgsave ) THEN 3884 megrazz3(ji,jj,jk) = (fgmezmi * xthetazmi) 3885 ENDIF 3886 IF ( med_diag%PBSI3%dgsave ) THEN 3887 pbsi3(ji,jj,jk) = (fprds * zpds) 3888 ENDIF 3889 IF ( med_diag%PCAL3%dgsave ) THEN 3890 pcal3(ji,jj,jk) = ftempca 3891 ENDIF 3892 IF ( med_diag%REMOC3%dgsave ) THEN 3893 remoc3(ji,jj,jk) = freminc 3894 ENDIF 3895 IF ( med_diag%PNLIMJ3%dgsave ) THEN 3896 ! pnlimj3(ji,jj,jk) = fjln 3897 pnlimj3(ji,jj,jk) = fjlim_pn 3898 ENDIF 3899 IF ( med_diag%PNLIMN3%dgsave ) THEN 3900 pnlimn3(ji,jj,jk) = fnln 3901 ENDIF 3902 IF ( med_diag%PNLIMFE3%dgsave ) THEN 3903 pnlimfe3(ji,jj,jk) = ffln 3904 ENDIF 3905 IF ( med_diag%PDLIMJ3%dgsave ) THEN 3906 ! pdlimj3(ji,jj,jk) = fjld 3907 pdlimj3(ji,jj,jk) = fjlim_pd 3908 ENDIF 3909 IF ( med_diag%PDLIMN3%dgsave ) THEN 3910 pdlimn3(ji,jj,jk) = fnld 3911 ENDIF 3912 IF ( med_diag%PDLIMFE3%dgsave ) THEN 3913 pdlimfe3(ji,jj,jk) = ffld 3914 ENDIF 3915 IF ( med_diag%PDLIMSI3%dgsave ) THEN 3916 pdlimsi3(ji,jj,jk) = fsld2 3917 ENDIF 3918 ENDIF ! end of ln_diatrc option 3919 !! CLOSE wet point IF..THEN loop 3920 endif 3921 !! CLOSE horizontal loops 3922 ENDDO 3923 ENDDO 3924 !! 3925 IF( lk_iomput .AND. .NOT. ln_diatrc ) THEN 3926 !! first - 2D diag implemented 3927 !! on every K level 3928 !!----------------------------------------- 3929 !! -- 3930 !!second - 2d specific k level diags 3931 !! 3932 !!----------------------------------------- 3933 IF (jk.eq.1) THEN 4337 !! 4338 !! ** 3D diagnostics 4339 IF( med_diag%TPP3%dgsave ) THEN 4340 tpp3d(ji,jj,jk) = (fprn * zphn) + (fprd * zphd) 4341 !CALL iom_put( "TPP3" , tpp3d ) 4342 ENDIF 4343 IF( med_diag%TPPD3%dgsave ) THEN 4344 tppd3(ji,jj,jk) = (fprd * zphd) 4345 ENDIF 4346 4347 IF( med_diag%REMIN3N%dgsave ) THEN 4348 remin3dn(ji,jj,jk) = fregen + (freminn * fthk) !! remineralisation 4349 !CALL iom_put( "REMIN3N" , remin3dn ) 4350 ENDIF 4351 !! IF( med_diag%PH3%dgsave ) THEN 4352 !! CALL iom_put( "PH3" , f3_pH ) 4353 !! ENDIF 4354 !! IF( med_diag%OM_CAL3%dgsave ) THEN 4355 !! CALL iom_put( "OM_CAL3" , f3_omcal ) 4356 !! ENDIF 4357 !! 4358 !! AXY (09/11/16): CMIP6 diagnostics 4359 IF ( med_diag%DCALC3%dgsave ) THEN 4360 dcalc3(ji,jj,jk) = freminca 4361 ENDIF 4362 IF ( med_diag%FEDISS3%dgsave ) THEN 4363 fediss3(ji,jj,jk) = ffetop 4364 ENDIF 4365 IF ( med_diag%FESCAV3%dgsave ) THEN 4366 fescav3(ji,jj,jk) = ffescav 4367 ENDIF 4368 IF ( med_diag%MIGRAZP3%dgsave ) THEN 4369 migrazp3(ji,jj,jk) = fgmipn * xthetapn 4370 ENDIF 4371 IF ( med_diag%MIGRAZD3%dgsave ) THEN 4372 migrazd3(ji,jj,jk) = fgmidc 4373 ENDIF 4374 IF ( med_diag%MEGRAZP3%dgsave ) THEN 4375 megrazp3(ji,jj,jk) = (fgmepn * xthetapn) + (fgmepd * xthetapd) 4376 ENDIF 4377 IF ( med_diag%MEGRAZD3%dgsave ) THEN 4378 megrazd3(ji,jj,jk) = fgmedc 4379 ENDIF 4380 IF ( med_diag%MEGRAZZ3%dgsave ) THEN 4381 megrazz3(ji,jj,jk) = (fgmezmi * xthetazmi) 4382 ENDIF 4383 IF ( med_diag%PBSI3%dgsave ) THEN 4384 pbsi3(ji,jj,jk) = (fprds * zpds) 4385 ENDIF 4386 IF ( med_diag%PCAL3%dgsave ) THEN 4387 pcal3(ji,jj,jk) = ftempca 4388 ENDIF 4389 IF ( med_diag%REMOC3%dgsave ) THEN 4390 remoc3(ji,jj,jk) = freminc 4391 ENDIF 4392 IF ( med_diag%PNLIMJ3%dgsave ) THEN 4393 ! pnlimj3(ji,jj,jk) = fjln 4394 pnlimj3(ji,jj,jk) = fjlim_pn 4395 ENDIF 4396 IF ( med_diag%PNLIMN3%dgsave ) THEN 4397 pnlimn3(ji,jj,jk) = fnln 4398 ENDIF 4399 IF ( med_diag%PNLIMFE3%dgsave ) THEN 4400 pnlimfe3(ji,jj,jk) = ffln 4401 ENDIF 4402 IF ( med_diag%PDLIMJ3%dgsave ) THEN 4403 ! pdlimj3(ji,jj,jk) = fjld 4404 pdlimj3(ji,jj,jk) = fjlim_pd 4405 ENDIF 4406 IF ( med_diag%PDLIMN3%dgsave ) THEN 4407 pdlimn3(ji,jj,jk) = fnld 4408 ENDIF 4409 IF ( med_diag%PDLIMFE3%dgsave ) THEN 4410 pdlimfe3(ji,jj,jk) = ffld 4411 ENDIF 4412 IF ( med_diag%PDLIMSI3%dgsave ) THEN 4413 pdlimsi3(ji,jj,jk) = fsld2 4414 ENDIF 4415 !! 4416 !! ** Without using iom_use 4417 ELSE IF( ln_diatrc ) THEN 3934 4418 # if defined key_debug_medusa 3935 IF ( lwp ) write (numout,*) 'trc_bio_medusa: diag jk = 1'3936 CALL flush(numout)4419 IF (lwp) write (numout,*) 'trc_bio_medusa: diag in ij-jj-jk ln_diatrc' 4420 CALL flush(numout) 3937 4421 # endif 3938 IF( med_diag%MED_QSR%dgsave ) THEN 3939 CALL iom_put( "MED_QSR" , qsr ) ! 3940 ENDIF 3941 IF( med_diag%MED_XPAR%dgsave ) THEN 3942 CALL iom_put( "MED_XPAR" , xpar(:,:,jk) ) ! 3943 ENDIF 3944 IF( med_diag%OCAL_CCD%dgsave ) THEN 3945 CALL iom_put( "OCAL_CCD" , ocal_ccd ) ! 3946 ENDIF 3947 IF( med_diag%FE_0000%dgsave ) THEN 3948 CALL iom_put( "FE_0000" , xFree ) ! 3949 ENDIF 3950 IF( med_diag%MED_XZE%dgsave ) THEN 3951 CALL iom_put( "MED_XZE" , xze ) ! 3952 ENDIF 4422 !!---------------------------------------------------------------------- 4423 !! Prepare 2D diagnostics 4424 !!---------------------------------------------------------------------- 4425 !! 4426 !! if ((kt / 240*240).eq.kt) then 4427 !! IF (lwp) write (*,*) '*******!MEDUSA DIAADD!*******',kt 4428 !! endif 4429 trc2d(ji,jj,1) = ftot_n(ji,jj) !! nitrogen inventory 4430 trc2d(ji,jj,2) = ftot_si(ji,jj) !! silicon inventory 4431 trc2d(ji,jj,3) = ftot_fe(ji,jj) !! iron inventory 4432 trc2d(ji,jj,4) = trc2d(ji,jj,4) + (fprn * zphn * fthk) !! non-diatom production 4433 trc2d(ji,jj,5) = trc2d(ji,jj,5) + (fdpn * fthk) !! non-diatom non-grazing losses 4434 trc2d(ji,jj,6) = trc2d(ji,jj,6) + (fprd * zphd * fthk) !! diatom production 4435 trc2d(ji,jj,7) = trc2d(ji,jj,7) + (fdpd * fthk) !! diatom non-grazing losses 4436 !! diagnostic field 8 is (ostensibly) supplied by trcsed.F 4437 trc2d(ji,jj,9) = trc2d(ji,jj,9) + (fprds * zpds * fthk) !! diatom silicon production 4438 trc2d(ji,jj,10) = trc2d(ji,jj,10) + (fsdiss * fthk) !! diatom silicon dissolution 4439 trc2d(ji,jj,11) = trc2d(ji,jj,11) + (fgmipn * fthk) !! microzoo grazing on non-diatoms 4440 trc2d(ji,jj,12) = trc2d(ji,jj,12) + (fgmid * fthk) !! microzoo grazing on detrital nitrogen 4441 trc2d(ji,jj,13) = trc2d(ji,jj,13) + (fdzmi * fthk) !! microzoo non-grazing losses 4442 trc2d(ji,jj,14) = trc2d(ji,jj,14) + (fgmepn * fthk) !! mesozoo grazing on non-diatoms 4443 trc2d(ji,jj,15) = trc2d(ji,jj,15) + (fgmepd * fthk) !! mesozoo grazing on diatoms 4444 trc2d(ji,jj,16) = trc2d(ji,jj,16) + (fgmezmi * fthk) !! mesozoo grazing on microzoo 4445 trc2d(ji,jj,17) = trc2d(ji,jj,17) + (fgmed * fthk) !! mesozoo grazing on detrital nitrogen 4446 trc2d(ji,jj,18) = trc2d(ji,jj,18) + (fdzme * fthk) !! mesozoo non-grazing losses 4447 !! diagnostic field 19 is (ostensibly) supplied by trcexp.F 4448 trc2d(ji,jj,20) = trc2d(ji,jj,20) + (fslown * fthk) !! slow sinking detritus N production 4449 trc2d(ji,jj,21) = trc2d(ji,jj,21) + (fdd * fthk) !! detrital remineralisation 4450 trc2d(ji,jj,22) = trc2d(ji,jj,22) + (ffetop * fthk) !! aeolian iron addition 4451 trc2d(ji,jj,23) = trc2d(ji,jj,23) + (ffebot * fthk) !! seafloor iron addition 4452 trc2d(ji,jj,24) = trc2d(ji,jj,24) + (ffescav * fthk) !! "free" iron scavenging 4453 trc2d(ji,jj,25) = trc2d(ji,jj,25) + (fjlim_pn * zphn * fthk) !! non-diatom J limitation term 4454 trc2d(ji,jj,26) = trc2d(ji,jj,26) + (fnln * zphn * fthk) !! non-diatom N limitation term 4455 trc2d(ji,jj,27) = trc2d(ji,jj,27) + (ffln * zphn * fthk) !! non-diatom Fe limitation term 4456 trc2d(ji,jj,28) = trc2d(ji,jj,28) + (fjlim_pd * zphd * fthk) !! diatom J limitation term 4457 trc2d(ji,jj,29) = trc2d(ji,jj,29) + (fnld * zphd * fthk) !! diatom N limitation term 4458 trc2d(ji,jj,30) = trc2d(ji,jj,30) + (ffld * zphd * fthk) !! diatom Fe limitation term 4459 trc2d(ji,jj,31) = trc2d(ji,jj,31) + (fsld2 * zphd * fthk) !! diatom Si limitation term 4460 trc2d(ji,jj,32) = trc2d(ji,jj,32) + (fsld * zphd * fthk) !! diatom Si uptake limitation term 4461 if (jk.eq.i0100) trc2d(ji,jj,33) = fslownflux(ji,jj) !! slow detritus flux at 100 m 4462 if (jk.eq.i0200) trc2d(ji,jj,34) = fslownflux(ji,jj) !! slow detritus flux at 200 m 4463 if (jk.eq.i0500) trc2d(ji,jj,35) = fslownflux(ji,jj) !! slow detritus flux at 500 m 4464 if (jk.eq.i1000) trc2d(ji,jj,36) = fslownflux(ji,jj) !! slow detritus flux at 1000 m 4465 trc2d(ji,jj,37) = trc2d(ji,jj,37) + fregen !! non-fast N full column regeneration 4466 trc2d(ji,jj,38) = trc2d(ji,jj,38) + fregensi !! non-fast Si full column regeneration 4467 if (jk.eq.i0100) trc2d(ji,jj,39) = trc2d(ji,jj,37) !! non-fast N regeneration to 100 m 4468 if (jk.eq.i0200) trc2d(ji,jj,40) = trc2d(ji,jj,37) !! non-fast N regeneration to 200 m 4469 if (jk.eq.i0500) trc2d(ji,jj,41) = trc2d(ji,jj,37) !! non-fast N regeneration to 500 m 4470 if (jk.eq.i1000) trc2d(ji,jj,42) = trc2d(ji,jj,37) !! non-fast N regeneration to 1000 m 4471 trc2d(ji,jj,43) = trc2d(ji,jj,43) + (ftempn * fthk) !! fast sinking detritus N production 4472 trc2d(ji,jj,44) = trc2d(ji,jj,44) + (ftempsi * fthk) !! fast sinking detritus Si production 4473 trc2d(ji,jj,45) = trc2d(ji,jj,45) + (ftempfe * fthk) !! fast sinking detritus Fe production 4474 trc2d(ji,jj,46) = trc2d(ji,jj,46) + (ftempc * fthk) !! fast sinking detritus C production 4475 trc2d(ji,jj,47) = trc2d(ji,jj,47) + (ftempca * fthk) !! fast sinking detritus CaCO3 production 4476 if (jk.eq.i0100) trc2d(ji,jj,48) = ffastn(ji,jj) !! fast detritus N flux at 100 m 4477 if (jk.eq.i0200) trc2d(ji,jj,49) = ffastn(ji,jj) !! fast detritus N flux at 200 m 4478 if (jk.eq.i0500) trc2d(ji,jj,50) = ffastn(ji,jj) !! fast detritus N flux at 500 m 4479 if (jk.eq.i1000) trc2d(ji,jj,51) = ffastn(ji,jj) !! fast detritus N flux at 1000 m 4480 if (jk.eq.i0100) trc2d(ji,jj,52) = fregenfast(ji,jj) !! N regeneration to 100 m 4481 if (jk.eq.i0200) trc2d(ji,jj,53) = fregenfast(ji,jj) !! N regeneration to 200 m 4482 if (jk.eq.i0500) trc2d(ji,jj,54) = fregenfast(ji,jj) !! N regeneration to 500 m 4483 if (jk.eq.i1000) trc2d(ji,jj,55) = fregenfast(ji,jj) !! N regeneration to 1000 m 4484 if (jk.eq.i0100) trc2d(ji,jj,56) = ffastsi(ji,jj) !! fast detritus Si flux at 100 m 4485 if (jk.eq.i0200) trc2d(ji,jj,57) = ffastsi(ji,jj) !! fast detritus Si flux at 200 m 4486 if (jk.eq.i0500) trc2d(ji,jj,58) = ffastsi(ji,jj) !! fast detritus Si flux at 500 m 4487 if (jk.eq.i1000) trc2d(ji,jj,59) = ffastsi(ji,jj) !! fast detritus Si flux at 1000 m 4488 if (jk.eq.i0100) trc2d(ji,jj,60) = fregenfastsi(ji,jj) !! Si regeneration to 100 m 4489 if (jk.eq.i0200) trc2d(ji,jj,61) = fregenfastsi(ji,jj) !! Si regeneration to 200 m 4490 if (jk.eq.i0500) trc2d(ji,jj,62) = fregenfastsi(ji,jj) !! Si regeneration to 500 m 4491 if (jk.eq.i1000) trc2d(ji,jj,63) = fregenfastsi(ji,jj) !! Si regeneration to 1000 m 4492 trc2d(ji,jj,64) = trc2d(ji,jj,64) + (freminn * fthk) !! sum of fast-sinking N fluxes 4493 trc2d(ji,jj,65) = trc2d(ji,jj,65) + (freminsi * fthk) !! sum of fast-sinking Si fluxes 4494 trc2d(ji,jj,66) = trc2d(ji,jj,66) + (freminfe * fthk) !! sum of fast-sinking Fe fluxes 4495 trc2d(ji,jj,67) = trc2d(ji,jj,67) + (freminc * fthk) !! sum of fast-sinking C fluxes 4496 trc2d(ji,jj,68) = trc2d(ji,jj,68) + (freminca * fthk) !! sum of fast-sinking Ca fluxes 4497 if (jk.eq.jmbathy) then 4498 trc2d(ji,jj,69) = fsedn(ji,jj) !! N sedimentation flux 4499 trc2d(ji,jj,70) = fsedsi(ji,jj) !! Si sedimentation flux 4500 trc2d(ji,jj,71) = fsedfe(ji,jj) !! Fe sedimentation flux 4501 trc2d(ji,jj,72) = fsedc(ji,jj) !! C sedimentation flux 4502 trc2d(ji,jj,73) = fsedca(ji,jj) !! Ca sedimentation flux 4503 endif 4504 if (jk.eq.1) trc2d(ji,jj,74) = qsr(ji,jj) 4505 if (jk.eq.1) trc2d(ji,jj,75) = xpar(ji,jj,jk) 4506 !! if (jk.eq.1) trc2d(ji,jj,75) = real(iters) 4507 !! diagnostic fields 76 to 80 calculated below 4508 trc2d(ji,jj,81) = trc2d(ji,jj,81) + fprn_ml(ji,jj) !! mixed layer non-diatom production 4509 trc2d(ji,jj,82) = trc2d(ji,jj,82) + fprd_ml(ji,jj) !! mixed layer diatom production 4510 # if defined key_gulf_finland 4511 if (jk.eq.1) trc2d(ji,jj,83) = real(ibio_switch) !! Gulf of Finland check 4512 # else 4513 trc2d(ji,jj,83) = ocal_ccd(ji,jj) !! calcite CCD depth 4514 # endif 4515 trc2d(ji,jj,84) = fccd(ji,jj) !! last model level above calcite CCD depth 4516 if (jk.eq.1) trc2d(ji,jj,85) = xFree(ji,jj) !! surface "free" iron 4517 if (jk.eq.i0200) trc2d(ji,jj,86) = xFree(ji,jj) !! "free" iron at 100 m 4518 if (jk.eq.i0200) trc2d(ji,jj,87) = xFree(ji,jj) !! "free" iron at 200 m 4519 if (jk.eq.i0500) trc2d(ji,jj,88) = xFree(ji,jj) !! "free" iron at 500 m 4520 if (jk.eq.i1000) trc2d(ji,jj,89) = xFree(ji,jj) !! "free" iron at 1000 m 4521 !! AXY (27/06/12): extract "euphotic depth" 4522 if (jk.eq.1) trc2d(ji,jj,90) = xze(ji,jj) 4523 !! 4524 # if defined key_roam 4525 !! ROAM provisionally has access to a further 20 2D diagnostics 4526 if (jk .eq. 1) then 4527 trc2d(ji,jj,91) = trc2d(ji,jj,91) + f_wind !! surface wind 4528 trc2d(ji,jj,92) = trc2d(ji,jj,92) + f_pco2atm !! atmospheric pCO2 4529 trc2d(ji,jj,93) = trc2d(ji,jj,93) + f_ph !! ocean pH 4530 trc2d(ji,jj,94) = trc2d(ji,jj,94) + f_pco2w !! ocean pCO2 4531 trc2d(ji,jj,95) = trc2d(ji,jj,95) + f_h2co3 !! ocean H2CO3 conc. 4532 trc2d(ji,jj,96) = trc2d(ji,jj,96) + f_hco3 !! ocean HCO3 conc. 4533 trc2d(ji,jj,97) = trc2d(ji,jj,97) + f_co3 !! ocean CO3 conc. 4534 trc2d(ji,jj,98) = trc2d(ji,jj,98) + f_co2flux !! air-sea CO2 flux 4535 trc2d(ji,jj,99) = trc2d(ji,jj,99) + f_omcal(ji,jj) !! ocean omega calcite 4536 trc2d(ji,jj,100) = trc2d(ji,jj,100) + f_omarg(ji,jj) !! ocean omega aragonite 4537 trc2d(ji,jj,101) = trc2d(ji,jj,101) + f_TDIC !! ocean TDIC 4538 trc2d(ji,jj,102) = trc2d(ji,jj,102) + f_TALK !! ocean TALK 4539 trc2d(ji,jj,103) = trc2d(ji,jj,103) + f_kw660 !! surface kw660 4540 trc2d(ji,jj,104) = trc2d(ji,jj,104) + f_pp0 !! surface pressure 4541 trc2d(ji,jj,105) = trc2d(ji,jj,105) + f_o2flux !! air-sea O2 flux 4542 trc2d(ji,jj,106) = trc2d(ji,jj,106) + f_o2sat !! ocean O2 saturation 4543 trc2d(ji,jj,107) = f2_ccd_cal(ji,jj) !! depth calcite CCD 4544 trc2d(ji,jj,108) = f2_ccd_arg(ji,jj) !! depth aragonite CCD 4545 endif 4546 if (jk .eq. jmbathy) then 4547 trc2d(ji,jj,109) = f3_omcal(ji,jj,jk) !! seafloor omega calcite 4548 trc2d(ji,jj,110) = f3_omarg(ji,jj,jk) !! seafloor omega aragonite 4549 endif 4550 !! diagnostic fields 111 to 117 calculated below 4551 if (jk.eq.i0100) trc2d(ji,jj,118) = ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) !! rain ratio at 100 m 4552 if (jk.eq.i0500) trc2d(ji,jj,119) = ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) !! rain ratio at 500 m 4553 if (jk.eq.i1000) trc2d(ji,jj,120) = ffastca(ji,jj)/MAX(ffastc(ji,jj), rsmall) !! rain ratio at 1000 m 4554 !! AXY (18/01/12): benthic flux diagnostics 4555 if (jk.eq.jmbathy) then 4556 trc2d(ji,jj,121) = f_sbenin_n(ji,jj) + f_fbenin_n(ji,jj) 4557 trc2d(ji,jj,122) = f_sbenin_fe(ji,jj) + f_fbenin_fe(ji,jj) 4558 trc2d(ji,jj,123) = f_sbenin_c(ji,jj) + f_fbenin_c(ji,jj) 4559 trc2d(ji,jj,124) = f_fbenin_si(ji,jj) 4560 trc2d(ji,jj,125) = f_fbenin_ca(ji,jj) 4561 trc2d(ji,jj,126) = f_benout_n(ji,jj) 4562 trc2d(ji,jj,127) = f_benout_fe(ji,jj) 4563 trc2d(ji,jj,128) = f_benout_c(ji,jj) 4564 trc2d(ji,jj,129) = f_benout_si(ji,jj) 4565 trc2d(ji,jj,130) = f_benout_ca(ji,jj) 4566 endif 4567 !! diagnostics fields 131 to 135 calculated below 4568 trc2d(ji,jj,136) = f_runoff(ji,jj) 4569 !! AXY (19/07/12): amended to allow for riverine nutrient addition below surface 4570 trc2d(ji,jj,137) = trc2d(ji,jj,137) + (f_riv_loc_n * fthk) 4571 trc2d(ji,jj,138) = trc2d(ji,jj,138) + (f_riv_loc_si * fthk) 4572 trc2d(ji,jj,139) = trc2d(ji,jj,139) + (f_riv_loc_c * fthk) 4573 trc2d(ji,jj,140) = trc2d(ji,jj,140) + (f_riv_loc_alk * fthk) 4574 trc2d(ji,jj,141) = trc2d(ji,jj,141) + (fslowc * fthk) !! slow sinking detritus C production 4575 if (jk.eq.i0100) trc2d(ji,jj,142) = fslowcflux(ji,jj) !! slow detritus flux at 100 m 4576 if (jk.eq.i0200) trc2d(ji,jj,143) = fslowcflux(ji,jj) !! slow detritus flux at 200 m 4577 if (jk.eq.i0500) trc2d(ji,jj,144) = fslowcflux(ji,jj) !! slow detritus flux at 500 m 4578 if (jk.eq.i1000) trc2d(ji,jj,145) = fslowcflux(ji,jj) !! slow detritus flux at 1000 m 4579 trc2d(ji,jj,146) = trc2d(ji,jj,146) + ftot_c(ji,jj) !! carbon inventory 4580 trc2d(ji,jj,147) = trc2d(ji,jj,147) + ftot_a(ji,jj) !! alkalinity inventory 4581 trc2d(ji,jj,148) = trc2d(ji,jj,148) + ftot_o2(ji,jj) !! oxygen inventory 4582 if (jk.eq.jmbathy) then 4583 trc2d(ji,jj,149) = f_benout_lyso_ca(ji,jj) 4584 endif 4585 trc2d(ji,jj,150) = fcomm_resp(ji,jj) * fthk !! community respiration 4586 !! 4587 !! AXY (14/02/14): a Valentines Day gift to BASIN - a shedload of new 4588 !! diagnostics that they'll most likely never need! 4589 !! (actually, as with all such gifts, I'm giving them 4590 !! some things I'd like myself!) 4591 !! 4592 !! ---------------------------------------------------------------------- 4593 !! linear losses 4594 !! non-diatom 4595 trc2d(ji,jj,151) = trc2d(ji,jj,151) + (fdpn2 * fthk) 4596 !! diatom 4597 trc2d(ji,jj,152) = trc2d(ji,jj,152) + (fdpd2 * fthk) 4598 !! microzooplankton 4599 trc2d(ji,jj,153) = trc2d(ji,jj,153) + (fdzmi2 * fthk) 4600 !! mesozooplankton 4601 trc2d(ji,jj,154) = trc2d(ji,jj,154) + (fdzme2 * fthk) 4602 !! ---------------------------------------------------------------------- 4603 !! microzooplankton grazing 4604 !! microzooplankton messy -> N 4605 trc2d(ji,jj,155) = trc2d(ji,jj,155) + (xphi * (fgmipn + fgmid) * fthk) 4606 !! microzooplankton messy -> D 4607 trc2d(ji,jj,156) = trc2d(ji,jj,156) + ((1. - xbetan) * finmi * fthk) 4608 !! microzooplankton messy -> DIC 4609 trc2d(ji,jj,157) = trc2d(ji,jj,157) + (xphi * ((xthetapn * fgmipn) + fgmidc) * fthk) 4610 !! microzooplankton messy -> Dc 4611 trc2d(ji,jj,158) = trc2d(ji,jj,158) + ((1. - xbetac) * ficmi * fthk) 4612 !! microzooplankton excretion 4613 trc2d(ji,jj,159) = trc2d(ji,jj,159) + (fmiexcr * fthk) 4614 !! microzooplankton respiration 4615 trc2d(ji,jj,160) = trc2d(ji,jj,160) + (fmiresp * fthk) 4616 !! microzooplankton growth 4617 trc2d(ji,jj,161) = trc2d(ji,jj,161) + (fmigrow * fthk) 4618 !! ---------------------------------------------------------------------- 4619 !! mesozooplankton grazing 4620 !! mesozooplankton messy -> N 4621 trc2d(ji,jj,162) = trc2d(ji,jj,162) + (xphi * (fgmepn + fgmepd + fgmezmi + fgmed) * fthk) 4622 !! mesozooplankton messy -> D 4623 trc2d(ji,jj,163) = trc2d(ji,jj,163) + ((1. - xbetan) * finme * fthk) 4624 !! mesozooplankton messy -> DIC 4625 trc2d(ji,jj,164) = trc2d(ji,jj,164) + (xphi * ((xthetapn * fgmepn) + (xthetapd * fgmepd) + & 4626 & (xthetazmi * fgmezmi) + fgmedc) * fthk) 4627 !! mesozooplankton messy -> Dc 4628 trc2d(ji,jj,165) = trc2d(ji,jj,165) + ((1. - xbetac) * ficme * fthk) 4629 !! mesozooplankton excretion 4630 trc2d(ji,jj,166) = trc2d(ji,jj,166) + (fmeexcr * fthk) 4631 !! mesozooplankton respiration 4632 trc2d(ji,jj,167) = trc2d(ji,jj,167) + (fmeresp * fthk) 4633 !! mesozooplankton growth 4634 trc2d(ji,jj,168) = trc2d(ji,jj,168) + (fmegrow * fthk) 4635 !! ---------------------------------------------------------------------- 4636 !! miscellaneous 4637 trc2d(ji,jj,169) = trc2d(ji,jj,169) + (fddc * fthk) !! detrital C remineralisation 4638 trc2d(ji,jj,170) = trc2d(ji,jj,170) + (fgmidc * fthk) !! microzoo grazing on detrital carbon 4639 trc2d(ji,jj,171) = trc2d(ji,jj,171) + (fgmedc * fthk) !! mesozoo grazing on detrital carbon 4640 !! 4641 !! ---------------------------------------------------------------------- 4642 !! 4643 !! AXY (23/10/14): extract primary production related surface fields to 4644 !! deal with diel cycle issues; hijacking BASIN 150m 4645 !! diagnostics to do so (see commented out diagnostics 4646 !! below this section) 4647 !! 4648 !! extract fields at surface 4649 !! if (jk .eq. 1) then 4650 !! trc2d(ji,jj,172) = zchn !! Pn chlorophyll 4651 !! trc2d(ji,jj,173) = zphn !! Pn biomass 4652 !! trc2d(ji,jj,174) = fjln !! Pn J-term 4653 !! trc2d(ji,jj,175) = (fprn * zphn) !! Pn PP 4654 !! trc2d(ji,jj,176) = zchd !! Pd chlorophyll 4655 !! trc2d(ji,jj,177) = zphd !! Pd biomass 4656 !! trc2d(ji,jj,178) = fjld !! Pd J-term 4657 !! trc2d(ji,jj,179) = xpar(ji,jj,jk) !! Pd PP 4658 !! trc2d(ji,jj,180) = loc_T !! local temperature 4659 !! endif 4660 !! !! 4661 !! !! extract fields at 50m (actually 44-50m) 4662 !! if (jk .eq. 18) then 4663 !! trc2d(ji,jj,181) = zchn !! Pn chlorophyll 4664 !! trc2d(ji,jj,182) = zphn !! Pn biomass 4665 !! trc2d(ji,jj,183) = fjln !! Pn J-term 4666 !! trc2d(ji,jj,184) = (fprn * zphn) !! Pn PP 4667 !! trc2d(ji,jj,185) = zchd !! Pd chlorophyll 4668 !! trc2d(ji,jj,186) = zphd !! Pd biomass 4669 !! trc2d(ji,jj,187) = fjld !! Pd J-term 4670 !! trc2d(ji,jj,188) = xpar(ji,jj,jk) !! Pd PP 4671 !! trc2d(ji,jj,189) = loc_T !! local temperature 4672 !! endif 4673 !! !! 4674 !! !! extract fields at 100m 4675 !! if (jk .eq. i0100) then 4676 !! trc2d(ji,jj,190) = zchn !! Pn chlorophyll 4677 !! trc2d(ji,jj,191) = zphn !! Pn biomass 4678 !! trc2d(ji,jj,192) = fjln !! Pn J-term 4679 !! trc2d(ji,jj,193) = (fprn * zphn) !! Pn PP 4680 !! trc2d(ji,jj,194) = zchd !! Pd chlorophyll 4681 !! trc2d(ji,jj,195) = zphd !! Pd biomass 4682 !! trc2d(ji,jj,196) = fjld !! Pd J-term 4683 !! trc2d(ji,jj,197) = xpar(ji,jj,jk) !! Pd PP 4684 !! trc2d(ji,jj,198) = loc_T !! local temperature 4685 !! endif 4686 !! 4687 !! extract relevant BASIN fields at 150m 4688 if (jk .eq. i0150) then 4689 trc2d(ji,jj,172) = trc2d(ji,jj,4) !! Pn PP 4690 trc2d(ji,jj,173) = trc2d(ji,jj,151) !! Pn linear loss 4691 trc2d(ji,jj,174) = trc2d(ji,jj,5) !! Pn non-linear loss 4692 trc2d(ji,jj,175) = trc2d(ji,jj,11) !! Pn grazing to Zmi 4693 trc2d(ji,jj,176) = trc2d(ji,jj,14) !! Pn grazing to Zme 4694 trc2d(ji,jj,177) = trc2d(ji,jj,6) !! Pd PP 4695 trc2d(ji,jj,178) = trc2d(ji,jj,152) !! Pd linear loss 4696 trc2d(ji,jj,179) = trc2d(ji,jj,7) !! Pd non-linear loss 4697 trc2d(ji,jj,180) = trc2d(ji,jj,15) !! Pd grazing to Zme 4698 trc2d(ji,jj,181) = trc2d(ji,jj,12) !! Zmi grazing on D 4699 trc2d(ji,jj,182) = trc2d(ji,jj,170) !! Zmi grazing on Dc 4700 trc2d(ji,jj,183) = trc2d(ji,jj,155) !! Zmi messy feeding loss to N 4701 trc2d(ji,jj,184) = trc2d(ji,jj,156) !! Zmi messy feeding loss to D 4702 trc2d(ji,jj,185) = trc2d(ji,jj,157) !! Zmi messy feeding loss to DIC 4703 trc2d(ji,jj,186) = trc2d(ji,jj,158) !! Zmi messy feeding loss to Dc 4704 trc2d(ji,jj,187) = trc2d(ji,jj,159) !! Zmi excretion 4705 trc2d(ji,jj,188) = trc2d(ji,jj,160) !! Zmi respiration 4706 trc2d(ji,jj,189) = trc2d(ji,jj,161) !! Zmi growth 4707 trc2d(ji,jj,190) = trc2d(ji,jj,153) !! Zmi linear loss 4708 trc2d(ji,jj,191) = trc2d(ji,jj,13) !! Zmi non-linear loss 4709 trc2d(ji,jj,192) = trc2d(ji,jj,16) !! Zmi grazing to Zme 4710 trc2d(ji,jj,193) = trc2d(ji,jj,17) !! Zme grazing on D 4711 trc2d(ji,jj,194) = trc2d(ji,jj,171) !! Zme grazing on Dc 4712 trc2d(ji,jj,195) = trc2d(ji,jj,162) !! Zme messy feeding loss to N 4713 trc2d(ji,jj,196) = trc2d(ji,jj,163) !! Zme messy feeding loss to D 4714 trc2d(ji,jj,197) = trc2d(ji,jj,164) !! Zme messy feeding loss to DIC 4715 trc2d(ji,jj,198) = trc2d(ji,jj,165) !! Zme messy feeding loss to Dc 4716 trc2d(ji,jj,199) = trc2d(ji,jj,166) !! Zme excretion 4717 trc2d(ji,jj,200) = trc2d(ji,jj,167) !! Zme respiration 4718 trc2d(ji,jj,201) = trc2d(ji,jj,168) !! Zme growth 4719 trc2d(ji,jj,202) = trc2d(ji,jj,154) !! Zme linear loss 4720 trc2d(ji,jj,203) = trc2d(ji,jj,18) !! Zme non-linear loss 4721 trc2d(ji,jj,204) = trc2d(ji,jj,20) !! Slow detritus production, N 4722 trc2d(ji,jj,205) = trc2d(ji,jj,21) !! Slow detritus remineralisation, N 4723 trc2d(ji,jj,206) = trc2d(ji,jj,141) !! Slow detritus production, C 4724 trc2d(ji,jj,207) = trc2d(ji,jj,169) !! Slow detritus remineralisation, C 4725 trc2d(ji,jj,208) = trc2d(ji,jj,43) !! Fast detritus production, N 4726 trc2d(ji,jj,209) = trc2d(ji,jj,21) !! Fast detritus remineralisation, N 4727 trc2d(ji,jj,210) = trc2d(ji,jj,64) !! Fast detritus production, C 4728 trc2d(ji,jj,211) = trc2d(ji,jj,67) !! Fast detritus remineralisation, C 4729 trc2d(ji,jj,212) = trc2d(ji,jj,150) !! Community respiration 4730 trc2d(ji,jj,213) = fslownflux(ji,jj) !! Slow detritus N flux at 150 m 4731 trc2d(ji,jj,214) = fslowcflux(ji,jj) !! Slow detritus C flux at 150 m 4732 trc2d(ji,jj,215) = ffastn(ji,jj) !! Fast detritus N flux at 150 m 4733 trc2d(ji,jj,216) = ffastc(ji,jj) !! Fast detritus C flux at 150 m 4734 endif 4735 !! 4736 !! Jpalm (11-08-2014) 4737 !! Add UKESM1 diagnoatics 4738 !!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4739 if ((jk .eq. 1) .and.( jdms.eq.1)) then 4740 trc2d(ji,jj,221) = dms_surf !! DMS surface concentration 4741 !! AXY (13/03/15): add in other DMS estimates 4742 trc2d(ji,jj,222) = dms_andr !! DMS surface concentration 4743 trc2d(ji,jj,223) = dms_simo !! DMS surface concentration 4744 trc2d(ji,jj,224) = dms_aran !! DMS surface concentration 4745 trc2d(ji,jj,225) = dms_hall !! DMS surface concentration 4746 endif 4747 # endif 4748 !! other possible future diagnostics include: 4749 !! - integrated tracer values (esp. biological) 4750 !! - mixed layer tracer values 4751 !! - sub-surface chlorophyll maxima (plus depth) 4752 !! - different mixed layer depth criteria (T, sigma, var. sigma) 4753 4754 !!---------------------------------------------------------------------- 4755 !! Prepare 3D diagnostics 4756 !!---------------------------------------------------------------------- 4757 !! 4758 trc3d(ji,jj,jk,1) = ((fprn + fprd) * zphn) !! primary production 4759 trc3d(ji,jj,jk,2) = fslownflux(ji,jj) + ffastn(ji,jj) !! detrital flux 4760 trc3d(ji,jj,jk,3) = fregen + (freminn * fthk) !! remineralisation 4761 # if defined key_roam 4762 trc3d(ji,jj,jk,4) = f3_pH(ji,jj,jk) !! pH 4763 trc3d(ji,jj,jk,5) = f3_omcal(ji,jj,jk) !! omega calcite 4764 # else 4765 trc3d(ji,jj,jk,4) = ffastsi(ji,jj) !! fast Si flux 4766 # endif 4767 ENDIF ! end of ln_diatrc option 4768 !! CLOSE wet point IF..THEN loop 4769 endif 4770 !! CLOSE horizontal loops 4771 ENDDO 4772 ENDDO 4773 !! 4774 IF( lk_iomput .AND. .NOT. ln_diatrc ) THEN 4775 !! first - 2D diag implemented 4776 !! on every K level 4777 !!----------------------------------------- 4778 !! -- 4779 !!second - 2d specific k level diags 4780 !! 4781 !!----------------------------------------- 4782 IF (jk.eq.1) THEN 4783 # if defined key_debug_medusa 4784 IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 1' 4785 CALL flush(numout) 4786 # endif 4787 IF( med_diag%MED_QSR%dgsave ) THEN 4788 CALL iom_put( "MED_QSR" , qsr ) ! 4789 ENDIF 4790 IF( med_diag%MED_XPAR%dgsave ) THEN 4791 CALL iom_put( "MED_XPAR" , xpar(:,:,jk) ) ! 4792 ENDIF 4793 IF( med_diag%OCAL_CCD%dgsave ) THEN 4794 CALL iom_put( "OCAL_CCD" , ocal_ccd ) ! 4795 ENDIF 4796 IF( med_diag%FE_0000%dgsave ) THEN 4797 CALL iom_put( "FE_0000" , xFree ) ! 4798 ENDIF 4799 IF( med_diag%MED_XZE%dgsave ) THEN 4800 CALL iom_put( "MED_XZE" , xze ) ! 4801 ENDIF 3953 4802 # if defined key_roam 3954 IF( med_diag%WIND%dgsave ) THEN3955 CALL iom_put( "WIND" , wndm )3956 ENDIF3957 IF( med_diag%ATM_PCO2%dgsave ) THEN3958 CALL iom_put( "ATM_PCO2" , f_pco2a2d )3959 CALL wrk_dealloc( jpi, jpj, f_pco2a2d )3960 ENDIF3961 IF( med_diag%OCN_PH%dgsave ) THEN3962 zw2d(:,:) = f3_pH(:,:,jk)3963 CALL iom_put( "OCN_PH" , zw2d )3964 ENDIF3965 IF( med_diag%OCN_PCO2%dgsave ) THEN3966 CALL iom_put( "OCN_PCO2" , f_pco2w2d )3967 CALL wrk_dealloc( jpi, jpj, f_pco2w2d )3968 ENDIF3969 IF( med_diag%OCNH2CO3%dgsave ) THEN3970 zw2d(:,:) = f3_h2co3(:,:,jk)3971 CALL iom_put( "OCNH2CO3" , zw2d )3972 ENDIF3973 IF( med_diag%OCN_HCO3%dgsave ) THEN3974 zw2d(:,:) = f3_hco3(:,:,jk)3975 CALL iom_put( "OCN_HCO3" , zw2d )3976 ENDIF3977 IF( med_diag%OCN_CO3%dgsave ) THEN3978 zw2d(:,:) = f3_co3(:,:,jk)3979 CALL iom_put( "OCN_CO3" , zw2d )3980 ENDIF3981 IF( med_diag%CO2FLUX%dgsave ) THEN3982 CALL iom_put( "CO2FLUX" , f_co2flux2d )3983 CALL wrk_dealloc( jpi, jpj, f_co2flux2d )3984 ENDIF3985 !!3986 !! AXY (10/11/16): repeat CO2 flux diagnostic in UKMO/CMIP6 units; this3987 !! both outputs the CO2 flux in specified units and3988 !! sends the resulting field to the coupler3989 !! JPALM (17/11/16): put CO2 flux (fgco2) alloc/unalloc/pass to zn3990 !! out of diag list request3991 CALL lbc_lnk( fgco2(:,:),'T',1. )3992 IF( med_diag%FGCO2%dgsave ) THEN3993 CALL iom_put( "FGCO2" , fgco2 )3994 ENDIF3995 !! JPALM (17/11/16): should mv this fgco2 part3996 !! out of lk_iomput loop3997 zb_co2_flx = zn_co2_flx3998 zn_co2_flx = fgco23999 IF ( lk_oasis) THEN4000 CO2Flux_out_cpl = zn_co2_flx4001 ENDIF4002 CALL wrk_dealloc( jpi, jpj, fgco2 )4003 !! ---4004 IF( med_diag%OM_CAL%dgsave ) THEN4005 CALL iom_put( "OM_CAL" , f_omcal )4006 ENDIF4007 IF( med_diag%OM_ARG%dgsave ) THEN4008 CALL iom_put( "OM_ARG" , f_omarg )4009 ENDIF4010 IF( med_diag%TCO2%dgsave ) THEN4011 CALL iom_put( "TCO2" , f_TDIC2d )4012 CALL wrk_dealloc( jpi, jpj, f_TDIC2d )4013 ENDIF4014 IF( med_diag%TALK%dgsave ) THEN4015 CALL iom_put( "TALK" , f_TALK2d )4016 CALL wrk_dealloc( jpi, jpj, f_TALK2d )4017 ENDIF4018 IF( med_diag%KW660%dgsave ) THEN4019 CALL iom_put( "KW660" , f_kw6602d )4020 CALL wrk_dealloc( jpi, jpj, f_kw6602d )4021 ENDIF4022 IF( med_diag%ATM_PP0%dgsave ) THEN4023 CALL iom_put( "ATM_PP0" , f_pp02d )4024 CALL wrk_dealloc( jpi, jpj, f_pp02d )4025 ENDIF4026 IF( med_diag%O2FLUX%dgsave ) THEN4027 CALL iom_put( "O2FLUX" , f_o2flux2d )4028 CALL wrk_dealloc( jpi, jpj, f_o2flux2d )4029 ENDIF4030 IF( med_diag%O2SAT%dgsave ) THEN4031 CALL iom_put( "O2SAT" , f_o2sat2d )4032 CALL wrk_dealloc( jpi, jpj, f_o2sat2d )4033 ENDIF4034 IF( med_diag%CAL_CCD%dgsave ) THEN4035 CALL iom_put( "CAL_CCD" , f2_ccd_cal )4036 ENDIF4037 IF( med_diag%ARG_CCD%dgsave ) THEN4038 CALL iom_put( "ARG_CCD" , f2_ccd_arg )4039 ENDIF4040 IF (jdms .eq. 1) THEN4041 IF( med_diag%DMS_SURF%dgsave ) THEN4042 CALL lbc_lnk(dms_surf2d(:,:),'T',1. )4043 CALL iom_put( "DMS_SURF" , dms_surf2d )4044 zb_dms_srf = zn_dms_srf4045 zn_dms_srf = dms_surf2d4046 IF ( lk_oasis) THEN4047 DMS_out_cpl = zn_dms_srf4048 ENDIF4049 CALL wrk_dealloc( jpi, jpj, dms_surf2d )4050 ENDIF4051 IF( med_diag%DMS_ANDR%dgsave ) THEN4052 CALL iom_put( "DMS_ANDR" , dms_andr2d )4053 CALL wrk_dealloc( jpi, jpj, dms_andr2d )4054 ENDIF4055 IF( med_diag%DMS_SIMO%dgsave ) THEN4056 CALL iom_put( "DMS_SIMO" , dms_simo2d )4057 CALL wrk_dealloc( jpi, jpj, dms_simo2d )4058 ENDIF4059 IF( med_diag%DMS_ARAN%dgsave ) THEN4060 CALL iom_put( "DMS_ARAN" , dms_aran2d )4061 CALL wrk_dealloc( jpi, jpj, dms_aran2d )4062 ENDIF4063 IF( med_diag%DMS_HALL%dgsave ) THEN4064 CALL iom_put( "DMS_HALL" , dms_hall2d )4065 CALL wrk_dealloc( jpi, jpj, dms_hall2d )4066 ENDIF4067 ENDIF4068 !! AXY (24/11/16): extra MOCSY diagnostics4069 IF( med_diag%ATM_XCO2%dgsave ) THEN4070 CALL iom_put( "ATM_XCO2" , f_xco2a_2d )4071 CALL wrk_dealloc( jpi, jpj, f_xco2a_2d )4072 ENDIF4073 IF( med_diag%OCN_FCO2%dgsave ) THEN4074 CALL iom_put( "OCN_FCO2" , f_fco2w_2d )4075 CALL wrk_dealloc( jpi, jpj, f_fco2w_2d )4076 ENDIF4077 IF( med_diag%ATM_FCO2%dgsave ) THEN4078 CALL iom_put( "ATM_FCO2" , f_fco2a_2d )4079 CALL wrk_dealloc( jpi, jpj, f_fco2a_2d )4080 ENDIF4081 IF( med_diag%OCN_RHOSW%dgsave ) THEN4082 CALL iom_put( "OCN_RHOSW" , f_ocnrhosw_2d )4083 CALL wrk_dealloc( jpi, jpj, f_ocnrhosw_2d )4084 ENDIF4085 IF( med_diag%OCN_SCHCO2%dgsave ) THEN4086 CALL iom_put( "OCN_SCHCO2" , f_ocnschco2_2d )4087 CALL wrk_dealloc( jpi, jpj, f_ocnschco2_2d )4088 ENDIF4089 IF( med_diag%OCN_KWCO2%dgsave ) THEN4090 CALL iom_put( "OCN_KWCO2" , f_ocnkwco2_2d )4091 CALL wrk_dealloc( jpi, jpj, f_ocnkwco2_2d )4092 ENDIF4093 IF( med_diag%OCN_K0%dgsave ) THEN4094 CALL iom_put( "OCN_K0" , f_ocnk0_2d )4095 CALL wrk_dealloc( jpi, jpj, f_ocnk0_2d )4096 ENDIF4097 IF( med_diag%CO2STARAIR%dgsave ) THEN4098 CALL iom_put( "CO2STARAIR" , f_co2starair_2d )4099 CALL wrk_dealloc( jpi, jpj, f_co2starair_2d )4100 ENDIF4101 IF( med_diag%OCN_DPCO2%dgsave ) THEN4102 CALL iom_put( "OCN_DPCO2" , f_ocndpco2_2d )4103 CALL wrk_dealloc( jpi, jpj, f_ocndpco2_2d )4104 ENDIF4803 IF( med_diag%WIND%dgsave ) THEN 4804 CALL iom_put( "WIND" , wndm ) 4805 ENDIF 4806 IF( med_diag%ATM_PCO2%dgsave ) THEN 4807 CALL iom_put( "ATM_PCO2" , f_pco2a2d ) 4808 CALL wrk_dealloc( jpi, jpj, f_pco2a2d ) 4809 ENDIF 4810 IF( med_diag%OCN_PH%dgsave ) THEN 4811 zw2d(:,:) = f3_pH(:,:,jk) 4812 CALL iom_put( "OCN_PH" , zw2d ) 4813 ENDIF 4814 IF( med_diag%OCN_PCO2%dgsave ) THEN 4815 CALL iom_put( "OCN_PCO2" , f_pco2w2d ) 4816 CALL wrk_dealloc( jpi, jpj, f_pco2w2d ) 4817 ENDIF 4818 IF( med_diag%OCNH2CO3%dgsave ) THEN 4819 zw2d(:,:) = f3_h2co3(:,:,jk) 4820 CALL iom_put( "OCNH2CO3" , zw2d ) 4821 ENDIF 4822 IF( med_diag%OCN_HCO3%dgsave ) THEN 4823 zw2d(:,:) = f3_hco3(:,:,jk) 4824 CALL iom_put( "OCN_HCO3" , zw2d ) 4825 ENDIF 4826 IF( med_diag%OCN_CO3%dgsave ) THEN 4827 zw2d(:,:) = f3_co3(:,:,jk) 4828 CALL iom_put( "OCN_CO3" , zw2d ) 4829 ENDIF 4830 IF( med_diag%CO2FLUX%dgsave ) THEN 4831 CALL iom_put( "CO2FLUX" , f_co2flux2d ) 4832 CALL wrk_dealloc( jpi, jpj, f_co2flux2d ) 4833 ENDIF 4834 !! 4835 !! AXY (10/11/16): repeat CO2 flux diagnostic in UKMO/CMIP6 units; this 4836 !! both outputs the CO2 flux in specified units and 4837 !! sends the resulting field to the coupler 4838 !! JPALM (17/11/16): put CO2 flux (fgco2) alloc/unalloc/pass to zn 4839 !! out of diag list request 4840 CALL lbc_lnk( fgco2(:,:),'T',1. ) 4841 IF( med_diag%FGCO2%dgsave ) THEN 4842 CALL iom_put( "FGCO2" , fgco2 ) 4843 ENDIF 4844 !! JPALM (17/11/16): should mv this fgco2 part 4845 !! out of lk_iomput loop 4846 zb_co2_flx = zn_co2_flx 4847 zn_co2_flx = fgco2 4848 IF (lk_oasis) THEN 4849 CO2Flux_out_cpl = zn_co2_flx 4850 ENDIF 4851 CALL wrk_dealloc( jpi, jpj, fgco2 ) 4852 !! --- 4853 IF( med_diag%OM_CAL%dgsave ) THEN 4854 CALL iom_put( "OM_CAL" , f_omcal ) 4855 ENDIF 4856 IF( med_diag%OM_ARG%dgsave ) THEN 4857 CALL iom_put( "OM_ARG" , f_omarg ) 4858 ENDIF 4859 IF( med_diag%TCO2%dgsave ) THEN 4860 CALL iom_put( "TCO2" , f_TDIC2d ) 4861 CALL wrk_dealloc( jpi, jpj, f_TDIC2d ) 4862 ENDIF 4863 IF( med_diag%TALK%dgsave ) THEN 4864 CALL iom_put( "TALK" , f_TALK2d ) 4865 CALL wrk_dealloc( jpi, jpj, f_TALK2d ) 4866 ENDIF 4867 IF( med_diag%KW660%dgsave ) THEN 4868 CALL iom_put( "KW660" , f_kw6602d ) 4869 CALL wrk_dealloc( jpi, jpj, f_kw6602d ) 4870 ENDIF 4871 IF( med_diag%ATM_PP0%dgsave ) THEN 4872 CALL iom_put( "ATM_PP0" , f_pp02d ) 4873 CALL wrk_dealloc( jpi, jpj, f_pp02d ) 4874 ENDIF 4875 IF( med_diag%O2FLUX%dgsave ) THEN 4876 CALL iom_put( "O2FLUX" , f_o2flux2d ) 4877 CALL wrk_dealloc( jpi, jpj, f_o2flux2d ) 4878 ENDIF 4879 IF( med_diag%O2SAT%dgsave ) THEN 4880 CALL iom_put( "O2SAT" , f_o2sat2d ) 4881 CALL wrk_dealloc( jpi, jpj, f_o2sat2d ) 4882 ENDIF 4883 IF( med_diag%CAL_CCD%dgsave ) THEN 4884 CALL iom_put( "CAL_CCD" , f2_ccd_cal ) 4885 ENDIF 4886 IF( med_diag%ARG_CCD%dgsave ) THEN 4887 CALL iom_put( "ARG_CCD" , f2_ccd_arg ) 4888 ENDIF 4889 IF (jdms .eq. 1) THEN 4890 IF( med_diag%DMS_SURF%dgsave ) THEN 4891 CALL lbc_lnk(dms_surf2d(:,:),'T',1. ) 4892 CALL iom_put( "DMS_SURF" , dms_surf2d ) 4893 zb_dms_srf = zn_dms_srf 4894 zn_dms_srf = dms_surf2d 4895 IF (lk_oasis) THEN 4896 DMS_out_cpl = zn_dms_srf 4897 ENDIF 4898 CALL wrk_dealloc( jpi, jpj, dms_surf2d ) 4899 ENDIF 4900 IF( med_diag%DMS_ANDR%dgsave ) THEN 4901 CALL iom_put( "DMS_ANDR" , dms_andr2d ) 4902 CALL wrk_dealloc( jpi, jpj, dms_andr2d ) 4903 ENDIF 4904 IF( med_diag%DMS_SIMO%dgsave ) THEN 4905 CALL iom_put( "DMS_SIMO" , dms_simo2d ) 4906 CALL wrk_dealloc( jpi, jpj, dms_simo2d ) 4907 ENDIF 4908 IF( med_diag%DMS_ARAN%dgsave ) THEN 4909 CALL iom_put( "DMS_ARAN" , dms_aran2d ) 4910 CALL wrk_dealloc( jpi, jpj, dms_aran2d ) 4911 ENDIF 4912 IF( med_diag%DMS_HALL%dgsave ) THEN 4913 CALL iom_put( "DMS_HALL" , dms_hall2d ) 4914 CALL wrk_dealloc( jpi, jpj, dms_hall2d ) 4915 ENDIF 4916 ENDIF 4917 !! AXY (24/11/16): extra MOCSY diagnostics 4918 IF( med_diag%ATM_XCO2%dgsave ) THEN 4919 CALL iom_put( "ATM_XCO2" , f_xco2a_2d ) 4920 CALL wrk_dealloc( jpi, jpj, f_xco2a_2d ) 4921 ENDIF 4922 IF( med_diag%OCN_FCO2%dgsave ) THEN 4923 CALL iom_put( "OCN_FCO2" , f_fco2w_2d ) 4924 CALL wrk_dealloc( jpi, jpj, f_fco2w_2d ) 4925 ENDIF 4926 IF( med_diag%ATM_FCO2%dgsave ) THEN 4927 CALL iom_put( "ATM_FCO2" , f_fco2a_2d ) 4928 CALL wrk_dealloc( jpi, jpj, f_fco2a_2d ) 4929 ENDIF 4930 IF( med_diag%OCN_RHOSW%dgsave ) THEN 4931 CALL iom_put( "OCN_RHOSW" , f_ocnrhosw_2d ) 4932 CALL wrk_dealloc( jpi, jpj, f_ocnrhosw_2d ) 4933 ENDIF 4934 IF( med_diag%OCN_SCHCO2%dgsave ) THEN 4935 CALL iom_put( "OCN_SCHCO2" , f_ocnschco2_2d ) 4936 CALL wrk_dealloc( jpi, jpj, f_ocnschco2_2d ) 4937 ENDIF 4938 IF( med_diag%OCN_KWCO2%dgsave ) THEN 4939 CALL iom_put( "OCN_KWCO2" , f_ocnkwco2_2d ) 4940 CALL wrk_dealloc( jpi, jpj, f_ocnkwco2_2d ) 4941 ENDIF 4942 IF( med_diag%OCN_K0%dgsave ) THEN 4943 CALL iom_put( "OCN_K0" , f_ocnk0_2d ) 4944 CALL wrk_dealloc( jpi, jpj, f_ocnk0_2d ) 4945 ENDIF 4946 IF( med_diag%CO2STARAIR%dgsave ) THEN 4947 CALL iom_put( "CO2STARAIR" , f_co2starair_2d ) 4948 CALL wrk_dealloc( jpi, jpj, f_co2starair_2d ) 4949 ENDIF 4950 IF( med_diag%OCN_DPCO2%dgsave ) THEN 4951 CALL iom_put( "OCN_DPCO2" , f_ocndpco2_2d ) 4952 CALL wrk_dealloc( jpi, jpj, f_ocndpco2_2d ) 4953 ENDIF 4105 4954 # endif 4106 ELSE IF (jk.eq.i0100) THEN4955 ELSE IF (jk.eq.i0100) THEN 4107 4956 # if defined key_debug_medusa 4108 IF ( lwp) write (numout,*) 'trc_bio_medusa: diag jk = 100'4109 CALL flush(numout)4957 IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 100' 4958 CALL flush(numout) 4110 4959 # endif 4111 IF( med_diag%SDT__100%dgsave ) THEN4112 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)4113 CALL iom_put( "SDT__100" , zw2d )4114 ENDIF4115 IF( med_diag%REG__100%dgsave ) THEN4116 CALL iom_put( "REG__100" , fregen2d )4117 ENDIF4118 IF( med_diag%FDT__100%dgsave ) THEN4119 CALL iom_put( "FDT__100" , ffastn )4120 ENDIF4121 IF( med_diag%RG__100F%dgsave ) THEN4122 CALL iom_put( "RG__100F" , fregenfast )4123 ENDIF4124 IF( med_diag%FDS__100%dgsave ) THEN4125 CALL iom_put( "FDS__100" , ffastsi )4126 ENDIF4127 IF( med_diag%RGS_100F%dgsave ) THEN4128 CALL iom_put( "RGS_100F" , fregenfastsi )4129 ENDIF4130 IF( med_diag%FE_0100%dgsave ) THEN4131 CALL iom_put( "FE_0100" , xFree )4132 ENDIF4960 IF( med_diag%SDT__100%dgsave ) THEN 4961 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 4962 CALL iom_put( "SDT__100" , zw2d ) 4963 ENDIF 4964 IF( med_diag%REG__100%dgsave ) THEN 4965 CALL iom_put( "REG__100" , fregen2d ) 4966 ENDIF 4967 IF( med_diag%FDT__100%dgsave ) THEN 4968 CALL iom_put( "FDT__100" , ffastn ) 4969 ENDIF 4970 IF( med_diag%RG__100F%dgsave ) THEN 4971 CALL iom_put( "RG__100F" , fregenfast ) 4972 ENDIF 4973 IF( med_diag%FDS__100%dgsave ) THEN 4974 CALL iom_put( "FDS__100" , ffastsi ) 4975 ENDIF 4976 IF( med_diag%RGS_100F%dgsave ) THEN 4977 CALL iom_put( "RGS_100F" , fregenfastsi ) 4978 ENDIF 4979 IF( med_diag%FE_0100%dgsave ) THEN 4980 CALL iom_put( "FE_0100" , xFree ) 4981 ENDIF 4133 4982 # if defined key_roam 4134 IF( med_diag%RR_0100%dgsave ) THEN4135 CALL iom_put( "RR_0100" , ffastca2d )4136 ENDIF4137 IF( med_diag%SDC__100%dgsave ) THEN4138 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)4139 CALL iom_put( "SDC__100" , zw2d )4140 ENDIF4141 IF( med_diag%epC100%dgsave ) THEN4142 zw2d(:,:) = (fslowcflux + ffastc) * tmask(:,:,jk)4143 CALL iom_put( "epC100" , zw2d )4144 ENDIF4145 IF( med_diag%epCALC100%dgsave ) THEN4146 CALL iom_put( "epCALC100" , ffastca )4147 ENDIF4148 IF( med_diag%epN100%dgsave ) THEN4149 zw2d(:,:) = (fslownflux + ffastn) * tmask(:,:,jk)4150 CALL iom_put( "epN100" , zw2d )4151 ENDIF4152 IF( med_diag%epSI100%dgsave ) THEN4153 CALL iom_put( "epSI100" , ffastsi )4154 ENDIF4155 ELSE IF (jk.eq.i0150) THEN4983 IF( med_diag%RR_0100%dgsave ) THEN 4984 CALL iom_put( "RR_0100" , ffastca2d ) 4985 ENDIF 4986 IF( med_diag%SDC__100%dgsave ) THEN 4987 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 4988 CALL iom_put( "SDC__100" , zw2d ) 4989 ENDIF 4990 IF( med_diag%epC100%dgsave ) THEN 4991 zw2d(:,:) = (fslowcflux + ffastc) * tmask(:,:,jk) 4992 CALL iom_put( "epC100" , zw2d ) 4993 ENDIF 4994 IF( med_diag%epCALC100%dgsave ) THEN 4995 CALL iom_put( "epCALC100" , ffastca ) 4996 ENDIF 4997 IF( med_diag%epN100%dgsave ) THEN 4998 zw2d(:,:) = (fslownflux + ffastn) * tmask(:,:,jk) 4999 CALL iom_put( "epN100" , zw2d ) 5000 ENDIF 5001 IF( med_diag%epSI100%dgsave ) THEN 5002 CALL iom_put( "epSI100" , ffastsi ) 5003 ENDIF 5004 ELSE IF (jk.eq.i0150) THEN 4156 5005 # if defined key_debug_medusa 4157 IF ( lwp) write (numout,*) 'trc_bio_medusa: diag jk = 150'4158 CALL flush(numout)5006 IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 150' 5007 CALL flush(numout) 4159 5008 # endif 4160 5009 # endif 4161 ELSE IF (jk.eq.i0200) THEN5010 ELSE IF (jk.eq.i0200) THEN 4162 5011 # if defined key_debug_medusa 4163 IF ( lwp) write (numout,*) 'trc_bio_medusa: diag jk = 200'4164 CALL flush(numout)5012 IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 200' 5013 CALL flush(numout) 4165 5014 # endif 4166 IF( med_diag%SDT__200%dgsave ) THEN4167 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)4168 CALL iom_put( "SDT__200" , zw2d )4169 ENDIF4170 IF( med_diag%REG__200%dgsave ) THEN4171 CALL iom_put( "REG__200" , fregen2d )4172 ENDIF4173 IF( med_diag%FDT__200%dgsave ) THEN4174 CALL iom_put( "FDT__200" , ffastn )4175 ENDIF4176 IF( med_diag%RG__200F%dgsave ) THEN4177 CALL iom_put( "RG__200F" , fregenfast )4178 ENDIF4179 IF( med_diag%FDS__200%dgsave ) THEN4180 CALL iom_put( "FDS__200" , ffastsi )4181 ENDIF4182 IF( med_diag%RGS_200F%dgsave ) THEN4183 CALL iom_put( "RGS_200F" , fregenfastsi )4184 ENDIF4185 IF( med_diag%FE_0200%dgsave ) THEN4186 CALL iom_put( "FE_0200" , xFree )4187 ENDIF5015 IF( med_diag%SDT__200%dgsave ) THEN 5016 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 5017 CALL iom_put( "SDT__200" , zw2d ) 5018 ENDIF 5019 IF( med_diag%REG__200%dgsave ) THEN 5020 CALL iom_put( "REG__200" , fregen2d ) 5021 ENDIF 5022 IF( med_diag%FDT__200%dgsave ) THEN 5023 CALL iom_put( "FDT__200" , ffastn ) 5024 ENDIF 5025 IF( med_diag%RG__200F%dgsave ) THEN 5026 CALL iom_put( "RG__200F" , fregenfast ) 5027 ENDIF 5028 IF( med_diag%FDS__200%dgsave ) THEN 5029 CALL iom_put( "FDS__200" , ffastsi ) 5030 ENDIF 5031 IF( med_diag%RGS_200F%dgsave ) THEN 5032 CALL iom_put( "RGS_200F" , fregenfastsi ) 5033 ENDIF 5034 IF( med_diag%FE_0200%dgsave ) THEN 5035 CALL iom_put( "FE_0200" , xFree ) 5036 ENDIF 4188 5037 # if defined key_roam 4189 IF( med_diag%SDC__200%dgsave ) THEN4190 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)4191 CALL iom_put( "SDC__200" , zw2d )4192 ENDIF5038 IF( med_diag%SDC__200%dgsave ) THEN 5039 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 5040 CALL iom_put( "SDC__200" , zw2d ) 5041 ENDIF 4193 5042 # endif 4194 ELSE IF (jk.eq.i0500) THEN5043 ELSE IF (jk.eq.i0500) THEN 4195 5044 # if defined key_debug_medusa 4196 IF ( lwp) write (numout,*) 'trc_bio_medusa: diag jk = 500'4197 CALL flush(numout)5045 IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 500' 5046 CALL flush(numout) 4198 5047 # endif 4199 IF( med_diag%SDT__500%dgsave ) THEN4200 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)4201 CALL iom_put( "SDT__500" , zw2d )4202 ENDIF4203 IF( med_diag%REG__500%dgsave ) THEN4204 CALL iom_put( "REG__500" , fregen2d )4205 ENDIF4206 IF( med_diag%FDT__500%dgsave ) THEN4207 CALL iom_put( "FDT__500" , ffastn )4208 ENDIF4209 IF( med_diag%RG__500F%dgsave ) THEN4210 CALL iom_put( "RG__500F" , fregenfast )4211 ENDIF4212 IF( med_diag%FDS__500%dgsave ) THEN4213 CALL iom_put( "FDS__500" , ffastsi )4214 ENDIF4215 IF( med_diag%RGS_500F%dgsave ) THEN4216 CALL iom_put( "RGS_500F" , fregenfastsi )4217 ENDIF4218 IF( med_diag%FE_0500%dgsave ) THEN4219 CALL iom_put( "FE_0500" , xFree )4220 ENDIF5048 IF( med_diag%SDT__500%dgsave ) THEN 5049 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 5050 CALL iom_put( "SDT__500" , zw2d ) 5051 ENDIF 5052 IF( med_diag%REG__500%dgsave ) THEN 5053 CALL iom_put( "REG__500" , fregen2d ) 5054 ENDIF 5055 IF( med_diag%FDT__500%dgsave ) THEN 5056 CALL iom_put( "FDT__500" , ffastn ) 5057 ENDIF 5058 IF( med_diag%RG__500F%dgsave ) THEN 5059 CALL iom_put( "RG__500F" , fregenfast ) 5060 ENDIF 5061 IF( med_diag%FDS__500%dgsave ) THEN 5062 CALL iom_put( "FDS__500" , ffastsi ) 5063 ENDIF 5064 IF( med_diag%RGS_500F%dgsave ) THEN 5065 CALL iom_put( "RGS_500F" , fregenfastsi ) 5066 ENDIF 5067 IF( med_diag%FE_0500%dgsave ) THEN 5068 CALL iom_put( "FE_0500" , xFree ) 5069 ENDIF 4221 5070 # if defined key_roam 4222 IF( med_diag%RR_0500%dgsave ) THEN4223 CALL iom_put( "RR_0500" , ffastca2d )4224 ENDIF4225 IF( med_diag%SDC__500%dgsave ) THEN4226 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)4227 CALL iom_put( "SDC__500" , zw2d )4228 ENDIF5071 IF( med_diag%RR_0500%dgsave ) THEN 5072 CALL iom_put( "RR_0500" , ffastca2d ) 5073 ENDIF 5074 IF( med_diag%SDC__500%dgsave ) THEN 5075 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 5076 CALL iom_put( "SDC__500" , zw2d ) 5077 ENDIF 4229 5078 # endif 4230 ELSE IF (jk.eq.i1000) THEN5079 ELSE IF (jk.eq.i1000) THEN 4231 5080 # if defined key_debug_medusa 4232 IF ( lwp) write (numout,*) 'trc_bio_medusa: diag jk = 1000'4233 CALL flush(numout)5081 IF (lwp) write (numout,*) 'trc_bio_medusa: diag jk = 1000' 5082 CALL flush(numout) 4234 5083 # endif 4235 IF( med_diag%SDT_1000%dgsave ) THEN4236 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk)4237 CALL iom_put( "SDT_1000" , zw2d )4238 ENDIF4239 IF( med_diag%REG_1000%dgsave ) THEN4240 CALL iom_put( "REG_1000" , fregen2d )4241 ENDIF4242 IF( med_diag%FDT_1000%dgsave ) THEN4243 CALL iom_put( "FDT_1000" , ffastn )4244 ENDIF4245 IF( med_diag%RG_1000F%dgsave ) THEN4246 CALL iom_put( "RG_1000F" , fregenfast )4247 ENDIF4248 IF( med_diag%FDS_1000%dgsave ) THEN4249 CALL iom_put( "FDS_1000" , ffastsi )4250 ENDIF4251 IF( med_diag%RGS1000F%dgsave ) THEN4252 CALL iom_put( "RGS1000F" , fregenfastsi )4253 ENDIF4254 IF( med_diag%FE_1000%dgsave ) THEN4255 CALL iom_put( "FE_1000" , xFree )4256 ENDIF5084 IF( med_diag%SDT_1000%dgsave ) THEN 5085 zw2d(:,:) = fslownflux(:,:) * tmask(:,:,jk) 5086 CALL iom_put( "SDT_1000" , zw2d ) 5087 ENDIF 5088 IF( med_diag%REG_1000%dgsave ) THEN 5089 CALL iom_put( "REG_1000" , fregen2d ) 5090 ENDIF 5091 IF( med_diag%FDT_1000%dgsave ) THEN 5092 CALL iom_put( "FDT_1000" , ffastn ) 5093 ENDIF 5094 IF( med_diag%RG_1000F%dgsave ) THEN 5095 CALL iom_put( "RG_1000F" , fregenfast ) 5096 ENDIF 5097 IF( med_diag%FDS_1000%dgsave ) THEN 5098 CALL iom_put( "FDS_1000" , ffastsi ) 5099 ENDIF 5100 IF( med_diag%RGS1000F%dgsave ) THEN 5101 CALL iom_put( "RGS1000F" , fregenfastsi ) 5102 ENDIF 5103 IF( med_diag%FE_1000%dgsave ) THEN 5104 CALL iom_put( "FE_1000" , xFree ) 5105 ENDIF 4257 5106 # if defined key_roam 4258 IF( med_diag%RR_1000%dgsave ) THEN4259 CALL iom_put( "RR_1000" , ffastca2d )4260 CALL wrk_dealloc( jpi, jpj, ffastca2d )4261 ENDIF4262 IF( med_diag%SDC_1000%dgsave ) THEN4263 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk)4264 CALL iom_put( "SDC_1000" , zw2d )4265 ENDIF5107 IF( med_diag%RR_1000%dgsave ) THEN 5108 CALL iom_put( "RR_1000" , ffastca2d ) 5109 CALL wrk_dealloc( jpi, jpj, ffastca2d ) 5110 ENDIF 5111 IF( med_diag%SDC_1000%dgsave ) THEN 5112 zw2d(:,:) = fslowcflux(:,:) * tmask(:,:,jk) 5113 CALL iom_put( "SDC_1000" , zw2d ) 5114 ENDIF 4266 5115 # endif 4267 ENDIF 4268 !! to do on every k loop : 5116 ENDIF 5117 !! to do on every k loop : 5118 IF( med_diag%DETFLUX3%dgsave ) THEN 5119 detflux3d(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) !! detrital flux 5120 !CALL iom_put( "DETFLUX3" , ftot_n ) 5121 ENDIF 5122 # if defined key_roam 5123 IF( med_diag%EXPC3%dgsave ) THEN 5124 expc3(:,:,jk) = (fslowcflux(:,:) + ffastc(:,:)) * tmask(:,:,jk) 5125 ENDIF 5126 IF( med_diag%EXPN3%dgsave ) THEN 5127 expn3(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) 5128 ENDIF 5129 # endif 5130 ENDIF 5131 !! CLOSE vertical loop 5132 ENDDO 5133 5134 !!---------------------------------------------------------------------- 5135 !! Process benthic in/out fluxes 5136 !! These can be handled outside of the 3D calculations since the 5137 !! benthic pools (and fluxes) are 2D in nature; this code is 5138 !! (shamelessly) borrowed from corresponding code in the LOBSTER 5139 !! model 5140 !!---------------------------------------------------------------------- 5141 !! 5142 !! IF(lwp) WRITE(numout,*) 'AXY: rdt = ', rdt 5143 if (jorgben.eq.1) then 5144 za_sed_n(:,:) = zn_sed_n(:,:) + & 5145 & ( f_sbenin_n(:,:) + f_fbenin_n(:,:) - f_benout_n(:,:) ) * (rdt / 86400.) 5146 zn_sed_n(:,:) = za_sed_n(:,:) 5147 !! 5148 za_sed_fe(:,:) = zn_sed_fe(:,:) + & 5149 & ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * (rdt / 86400.) 5150 zn_sed_fe(:,:) = za_sed_fe(:,:) 5151 !! 5152 za_sed_c(:,:) = zn_sed_c(:,:) + & 5153 & ( f_sbenin_c(:,:) + f_fbenin_c(:,:) - f_benout_c(:,:) ) * (rdt / 86400.) 5154 zn_sed_c(:,:) = za_sed_c(:,:) 5155 endif 5156 if (jinorgben.eq.1) then 5157 za_sed_si(:,:) = zn_sed_si(:,:) + & 5158 & ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * (rdt / 86400.) 5159 zn_sed_si(:,:) = za_sed_si(:,:) 5160 !! 5161 za_sed_ca(:,:) = zn_sed_ca(:,:) + & 5162 & ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * (rdt / 86400.) 5163 zn_sed_ca(:,:) = za_sed_ca(:,:) 5164 endif 5165 IF( ln_diatrc ) THEN 5166 DO jj = 2,jpjm1 5167 DO ji = 2,jpim1 5168 trc2d(ji,jj,131) = za_sed_n(ji,jj) 5169 trc2d(ji,jj,132) = za_sed_fe(ji,jj) 5170 trc2d(ji,jj,133) = za_sed_c(ji,jj) 5171 trc2d(ji,jj,134) = za_sed_si(ji,jj) 5172 trc2d(ji,jj,135) = za_sed_ca(ji,jj) 5173 ENDDO 5174 ENDDO 5175 !! AXY (07/07/15): temporary hijacking 5176 # if defined key_roam 5177 !! trc2d(:,:,126) = zn_dms_chn(:,:) 5178 !! trc2d(:,:,127) = zn_dms_chd(:,:) 5179 !! trc2d(:,:,128) = zn_dms_mld(:,:) 5180 !! trc2d(:,:,129) = zn_dms_qsr(:,:) 5181 !! trc2d(:,:,130) = zn_dms_din(:,:) 5182 # endif 5183 ENDIF 5184 !! 5185 if (ibenthic.eq.2) then 5186 !! The code below (in this if ... then ... endif loop) is 5187 !! effectively commented out because it does not work as 5188 !! anticipated; it can be deleted at a later date 5189 if (jorgben.eq.1) then 5190 za_sed_n(:,:) = ( f_sbenin_n(:,:) + f_fbenin_n(:,:) - f_benout_n(:,:) ) * rdt 5191 za_sed_fe(:,:) = ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * rdt 5192 za_sed_c(:,:) = ( f_sbenin_c(:,:) + f_fbenin_c(:,:) - f_benout_c(:,:) ) * rdt 5193 endif 5194 if (jinorgben.eq.1) then 5195 za_sed_si(:,:) = ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * rdt 5196 za_sed_ca(:,:) = ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * rdt 5197 endif 5198 !! 5199 !! Leap-frog scheme - only in explicit case, otherwise the time stepping 5200 !! is already being done in trczdf 5201 !! IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN 5202 !! zfact = 2. * rdttra(jk) * FLOAT( ndttrc ) 5203 !! IF( neuler == 0 .AND. kt == nittrc000 ) zfact = rdttra(jk) * FLOAT(ndttrc) 5204 !! if (jorgben.eq.1) then 5205 !! za_sed_n(:,:) = zb_sed_n(:,:) + ( zfact * za_sed_n(:,:) ) 5206 !! za_sed_fe(:,:) = zb_sed_fe(:,:) + ( zfact * za_sed_fe(:,:) ) 5207 !! za_sed_c(:,:) = zb_sed_c(:,:) + ( zfact * za_sed_c(:,:) ) 5208 !! endif 5209 !! if (jinorgben.eq.1) then 5210 !! za_sed_si(:,:) = zb_sed_si(:,:) + ( zfact * za_sed_si(:,:) ) 5211 !! za_sed_ca(:,:) = zb_sed_ca(:,:) + ( zfact * za_sed_ca(:,:) ) 5212 !! endif 5213 !! ENDIF 5214 !! 5215 !! Time filter and swap of arrays 5216 IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN ! centred or tvd scheme 5217 IF( neuler == 0 .AND. kt == nittrc000 ) THEN 5218 if (jorgben.eq.1) then 5219 zb_sed_n(:,:) = zn_sed_n(:,:) 5220 zn_sed_n(:,:) = za_sed_n(:,:) 5221 za_sed_n(:,:) = 0.0 5222 !! 5223 zb_sed_fe(:,:) = zn_sed_fe(:,:) 5224 zn_sed_fe(:,:) = za_sed_fe(:,:) 5225 za_sed_fe(:,:) = 0.0 5226 !! 5227 zb_sed_c(:,:) = zn_sed_c(:,:) 5228 zn_sed_c(:,:) = za_sed_c(:,:) 5229 za_sed_c(:,:) = 0.0 5230 endif 5231 if (jinorgben.eq.1) then 5232 zb_sed_si(:,:) = zn_sed_si(:,:) 5233 zn_sed_si(:,:) = za_sed_si(:,:) 5234 za_sed_si(:,:) = 0.0 5235 !! 5236 zb_sed_ca(:,:) = zn_sed_ca(:,:) 5237 zn_sed_ca(:,:) = za_sed_ca(:,:) 5238 za_sed_ca(:,:) = 0.0 5239 endif 5240 ELSE 5241 if (jorgben.eq.1) then 5242 zb_sed_n(:,:) = (atfp * ( zb_sed_n(:,:) + za_sed_n(:,:) )) + (atfp1 * zn_sed_n(:,:) ) 5243 zn_sed_n(:,:) = za_sed_n(:,:) 5244 za_sed_n(:,:) = 0.0 5245 !! 5246 zb_sed_fe(:,:) = (atfp * ( zb_sed_fe(:,:) + za_sed_fe(:,:) )) + (atfp1 * zn_sed_fe(:,:)) 5247 zn_sed_fe(:,:) = za_sed_fe(:,:) 5248 za_sed_fe(:,:) = 0.0 5249 !! 5250 zb_sed_c(:,:) = (atfp * ( zb_sed_c(:,:) + za_sed_c(:,:) )) + (atfp1 * zn_sed_c(:,:) ) 5251 zn_sed_c(:,:) = za_sed_c(:,:) 5252 za_sed_c(:,:) = 0.0 5253 endif 5254 if (jinorgben.eq.1) then 5255 zb_sed_si(:,:) = (atfp * ( zb_sed_si(:,:) + za_sed_si(:,:) )) + (atfp1 * zn_sed_si(:,:)) 5256 zn_sed_si(:,:) = za_sed_si(:,:) 5257 za_sed_si(:,:) = 0.0 5258 !! 5259 zb_sed_ca(:,:) = (atfp * ( zb_sed_ca(:,:) + za_sed_ca(:,:) )) + (atfp1 * zn_sed_ca(:,:)) 5260 zn_sed_ca(:,:) = za_sed_ca(:,:) 5261 za_sed_ca(:,:) = 0.0 5262 endif 5263 ENDIF 5264 ELSE ! case of smolar scheme or muscl 5265 if (jorgben.eq.1) then 5266 zb_sed_n(:,:) = za_sed_n(:,:) 5267 zn_sed_n(:,:) = za_sed_n(:,:) 5268 za_sed_n(:,:) = 0.0 5269 !! 5270 zb_sed_fe(:,:) = za_sed_fe(:,:) 5271 zn_sed_fe(:,:) = za_sed_fe(:,:) 5272 za_sed_fe(:,:) = 0.0 5273 !! 5274 zb_sed_c(:,:) = za_sed_c(:,:) 5275 zn_sed_c(:,:) = za_sed_c(:,:) 5276 za_sed_c(:,:) = 0.0 5277 endif 5278 if (jinorgben.eq.1) then 5279 zb_sed_si(:,:) = za_sed_si(:,:) 5280 zn_sed_si(:,:) = za_sed_si(:,:) 5281 za_sed_si(:,:) = 0.0 5282 !! 5283 zb_sed_ca(:,:) = za_sed_ca(:,:) 5284 zn_sed_ca(:,:) = za_sed_ca(:,:) 5285 za_sed_ca(:,:) = 0.0 5286 endif 5287 ENDIF 5288 endif 5289 5290 IF( ln_diatrc ) THEN 5291 !!---------------------------------------------------------------------- 5292 !! Output several accumulated diagnostics 5293 !! - biomass-average phytoplankton limitation terms 5294 !! - integrated tendency terms 5295 !!---------------------------------------------------------------------- 5296 !! 5297 DO jj = 2,jpjm1 5298 DO ji = 2,jpim1 5299 !! non-diatom phytoplankton limitations 5300 trc2d(ji,jj,25) = trc2d(ji,jj,25) / MAX(ftot_pn(ji,jj), rsmall) 5301 trc2d(ji,jj,26) = trc2d(ji,jj,26) / MAX(ftot_pn(ji,jj), rsmall) 5302 trc2d(ji,jj,27) = trc2d(ji,jj,27) / MAX(ftot_pn(ji,jj), rsmall) 5303 !! diatom phytoplankton limitations 5304 trc2d(ji,jj,28) = trc2d(ji,jj,28) / MAX(ftot_pd(ji,jj), rsmall) 5305 trc2d(ji,jj,29) = trc2d(ji,jj,29) / MAX(ftot_pd(ji,jj), rsmall) 5306 trc2d(ji,jj,30) = trc2d(ji,jj,30) / MAX(ftot_pd(ji,jj), rsmall) 5307 trc2d(ji,jj,31) = trc2d(ji,jj,31) / MAX(ftot_pd(ji,jj), rsmall) 5308 trc2d(ji,jj,32) = trc2d(ji,jj,32) / MAX(ftot_pd(ji,jj), rsmall) 5309 !! tendency terms 5310 trc2d(ji,jj,76) = fflx_n(ji,jj) 5311 trc2d(ji,jj,77) = fflx_si(ji,jj) 5312 trc2d(ji,jj,78) = fflx_fe(ji,jj) 5313 !! integrated biomass 5314 trc2d(ji,jj,79) = ftot_pn(ji,jj) !! integrated non-diatom phytoplankton 5315 trc2d(ji,jj,80) = ftot_pd(ji,jj) !! integrated diatom phytoplankton 5316 trc2d(ji,jj,217) = ftot_zmi(ji,jj) !! Integrated microzooplankton 5317 trc2d(ji,jj,218) = ftot_zme(ji,jj) !! Integrated mesozooplankton 5318 trc2d(ji,jj,219) = ftot_det(ji,jj) !! Integrated slow detritus, nitrogen 5319 trc2d(ji,jj,220) = ftot_dtc(ji,jj) !! Integrated slow detritus, carbon 5320 # if defined key_roam 5321 !! the balance of nitrogen production/consumption 5322 trc2d(ji,jj,111) = fnit_prod(ji,jj) !! integrated nitrogen production 5323 trc2d(ji,jj,112) = fnit_cons(ji,jj) !! integrated nitrogen consumption 5324 !! the balance of carbon production/consumption 5325 trc2d(ji,jj,113) = fcar_prod(ji,jj) !! integrated carbon production 5326 trc2d(ji,jj,114) = fcar_cons(ji,jj) !! integrated carbon consumption 5327 !! the balance of oxygen production/consumption 5328 trc2d(ji,jj,115) = foxy_prod(ji,jj) !! integrated oxygen production 5329 trc2d(ji,jj,116) = foxy_cons(ji,jj) !! integrated oxygen consumption 5330 trc2d(ji,jj,117) = foxy_anox(ji,jj) !! integrated unrealised oxygen consumption 5331 # endif 5332 ENDDO 5333 ENDDO 5334 5335 # if defined key_roam 5336 # if defined key_axy_nancheck 5337 !!---------------------------------------------------------------------- 5338 !! Check for NaNs in diagnostic outputs 5339 !!---------------------------------------------------------------------- 5340 !! 5341 !! 2D diagnostics 5342 DO jn = 1,150 5343 fq0 = SUM(trc2d(:,:,jn)) 5344 !! AXY (30/01/14): "isnan" problem on HECTOR 5345 !! if (fq0 /= fq0 ) then 5346 if ( ieee_is_nan( fq0 ) ) then 5347 !! there's a NaN here 5348 if (lwp) write(numout,*) 'NAN detected in 2D diagnostic field', jn, 'at time', kt, 'at position:' 5349 DO jj = 1,jpj 5350 DO ji = 1,jpi 5351 if ( ieee_is_nan( trc2d(ji,jj,jn) ) ) then 5352 if (lwp) write (numout,'(a,3i6)') 'NAN-CHECK', & 5353 & ji, jj, jn 5354 endif 5355 ENDDO 5356 ENDDO 5357 CALL ctl_stop( 'trcbio_medusa, NAN in 2D diagnostic field' ) 5358 endif 5359 ENDDO 5360 !! 5361 !! 3D diagnostics 5362 DO jn = 1,5 5363 fq0 = SUM(trc3d(:,:,:,jn)) 5364 !! AXY (30/01/14): "isnan" problem on HECTOR 5365 !! if (fq0 /= fq0 ) then 5366 if ( ieee_is_nan( fq0 ) ) then 5367 !! there's a NaN here 5368 if (lwp) write(numout,*) 'NAN detected in 3D diagnostic field', jn, 'at time', kt, 'at position:' 5369 DO jk = 1,jpk 5370 DO jj = 1,jpj 5371 DO ji = 1,jpi 5372 if ( ieee_is_nan( trc3d(ji,jj,jk,jn) ) ) then 5373 if (lwp) write (numout,'(a,4i6)') 'NAN-CHECK', & 5374 & ji, jj, jk, jn 5375 endif 5376 ENDDO 5377 ENDDO 5378 ENDDO 5379 CALL ctl_stop( 'trcbio_medusa, NAN in 3D diagnostic field' ) 5380 endif 5381 ENDDO 5382 CALL flush(numout) 5383 # endif 5384 # endif 5385 5386 !!---------------------------------------------------------------------- 5387 !! Don't know what this does; belongs to someone else ... 5388 !!---------------------------------------------------------------------- 5389 !! 5390 !! Lateral boundary conditions on trc2d 5391 DO jn=1,jp_medusa_2d 5392 CALL lbc_lnk(trc2d(:,:,jn),'T',1. ) 5393 ENDDO 5394 5395 !! Lateral boundary conditions on trc3d 5396 DO jn=1,jp_medusa_3d 5397 CALL lbc_lnk(trc3d(:,:,1,jn),'T',1. ) 5398 ENDDO 5399 5400 5401 # if defined key_axy_nodiag 5402 !!---------------------------------------------------------------------- 5403 !! Blank diagnostics as a NaN-trap 5404 !!---------------------------------------------------------------------- 5405 !! 5406 !! blank 2D diagnostic array 5407 trc2d(:,:,:) = 0.e0 5408 !! 5409 !! blank 3D diagnostic array 5410 trc3d(:,:,:,:) = 0.e0 5411 # endif 5412 5413 5414 !!---------------------------------------------------------------------- 5415 !! Add in XML diagnostics stuff 5416 !!---------------------------------------------------------------------- 5417 !! 5418 !! ** 2D diagnostics 5419 DO jn=1,jp_medusa_2d 5420 CALL iom_put(TRIM(ctrc2d(jn)), trc2d(:,:,jn)) 5421 END DO 5422 !! AXY (17/02/14): don't think I need this if I modify the above for all diagnostics 5423 !! # if defined key_roam 5424 !! DO jn=91,jp_medusa_2d 5425 !! CALL iom_put(TRIM(ctrc2d(jn)), trc2d(:,:,jn)) 5426 !! END DO 5427 !! # endif 5428 !! 5429 !! ** 3D diagnostics 5430 DO jn=1,jp_medusa_3d 5431 CALL iom_put(TRIM(ctrc3d(jn)), trc3d(:,:,:,jn)) 5432 END DO 5433 !! AXY (17/02/14): don't think I need this if I modify the above for all diagnostics 5434 !! # if defined key_roam 5435 !! CALL iom_put(TRIM(ctrc3d(5)), trc3d(:,:,:,5)) 5436 !! # endif 5437 5438 5439 ELSE IF( lk_iomput .AND. .NOT. ln_diatrc ) THEN 5440 !!!---------------------------------------------------------------------- 5441 !! Add very last diag calculations 5442 !!!---------------------------------------------------------------------- 5443 DO jj = 2,jpjm1 5444 DO ji = 2,jpim1 5445 !! 5446 IF( med_diag%PN_JLIM%dgsave ) THEN 5447 fjln2d(ji,jj) = fjln2d(ji,jj) / MAX(ftot_pn(ji,jj), rsmall) 5448 ENDIF 5449 IF( med_diag%PN_NLIM%dgsave ) THEN 5450 fnln2d(ji,jj) = fnln2d(ji,jj) / MAX(ftot_pn(ji,jj), rsmall) 5451 ENDIF 5452 IF( med_diag%PN_FELIM%dgsave ) THEN 5453 ffln2d(ji,jj) = ffln2d(ji,jj) / MAX(ftot_pn(ji,jj), rsmall) 5454 ENDIF 5455 IF( med_diag%PD_JLIM%dgsave ) THEN 5456 fjld2d(ji,jj) = fjld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 5457 ENDIF 5458 IF( med_diag%PD_NLIM%dgsave ) THEN 5459 fnld2d(ji,jj) = fnld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 5460 ENDIF 5461 IF( med_diag%PD_FELIM%dgsave ) THEN 5462 ffld2d(ji,jj) = ffld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 5463 ENDIF 5464 IF( med_diag%PD_SILIM%dgsave ) THEN 5465 fsld2d2(ji,jj) = fsld2d2(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 5466 ENDIF 5467 IF( med_diag%PDSILIM2%dgsave ) THEN 5468 fsld2d(ji,jj) = fsld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 5469 ENDIF 5470 ENDDO 5471 ENDDO 5472 !!---------------------------------------------------------------------- 5473 !! Add in XML diagnostics stuff 5474 !!---------------------------------------------------------------------- 5475 !! 5476 !! ** 2D diagnostics 5477 # if defined key_debug_medusa 5478 IF (lwp) write (numout,*) 'trc_bio_medusa: export all diag.' 5479 CALL flush(numout) 5480 # endif 5481 IF ( med_diag%INVTN%dgsave ) THEN 5482 CALL iom_put( "INVTN" , ftot_n ) 5483 ENDIF 5484 IF ( med_diag%INVTSI%dgsave ) THEN 5485 CALL iom_put( "INVTSI" , ftot_si ) 5486 ENDIF 5487 IF ( med_diag%INVTFE%dgsave ) THEN 5488 CALL iom_put( "INVTFE" , ftot_fe ) 5489 ENDIF 5490 IF ( med_diag%ML_PRN%dgsave ) THEN 5491 CALL iom_put( "ML_PRN" , fprn_ml ) 5492 ENDIF 5493 IF ( med_diag%ML_PRD%dgsave ) THEN 5494 CALL iom_put( "ML_PRD" , fprd_ml ) 5495 ENDIF 5496 IF ( med_diag%OCAL_LVL%dgsave ) THEN 5497 CALL iom_put( "OCAL_LVL" , fccd ) 5498 ENDIF 5499 IF ( med_diag%PN_JLIM%dgsave ) THEN 5500 CALL iom_put( "PN_JLIM" , fjln2d ) 5501 CALL wrk_dealloc( jpi, jpj, fjln2d ) 5502 ENDIF 5503 IF ( med_diag%PN_NLIM%dgsave ) THEN 5504 CALL iom_put( "PN_NLIM" , fnln2d ) 5505 CALL wrk_dealloc( jpi, jpj, fnln2d ) 5506 ENDIF 5507 IF ( med_diag%PN_FELIM%dgsave ) THEN 5508 CALL iom_put( "PN_FELIM" , ffln2d ) 5509 CALL wrk_dealloc( jpi, jpj, ffln2d ) 5510 ENDIF 5511 IF ( med_diag%PD_JLIM%dgsave ) THEN 5512 CALL iom_put( "PD_JLIM" , fjld2d ) 5513 CALL wrk_dealloc( jpi, jpj, fjld2d ) 5514 ENDIF 5515 IF ( med_diag%PD_NLIM%dgsave ) THEN 5516 CALL iom_put( "PD_NLIM" , fnld2d ) 5517 CALL wrk_dealloc( jpi, jpj, fnld2d ) 5518 ENDIF 5519 IF ( med_diag%PD_FELIM%dgsave ) THEN 5520 CALL iom_put( "PD_FELIM" , ffld2d ) 5521 CALL wrk_dealloc( jpi, jpj, ffld2d ) 5522 ENDIF 5523 IF ( med_diag%PD_SILIM%dgsave ) THEN 5524 CALL iom_put( "PD_SILIM" , fsld2d2 ) 5525 CALL wrk_dealloc( jpi, jpj, fsld2d2 ) 5526 ENDIF 5527 IF ( med_diag%PDSILIM2%dgsave ) THEN 5528 CALL iom_put( "PDSILIM2" , fsld2d ) 5529 CALL wrk_dealloc( jpi, jpj, fsld2d ) 5530 ENDIF 5531 IF ( med_diag%INTFLX_N%dgsave ) THEN 5532 CALL iom_put( "INTFLX_N" , fflx_n ) 5533 ENDIF 5534 IF ( med_diag%INTFLX_SI%dgsave ) THEN 5535 CALL iom_put( "INTFLX_SI" , fflx_si ) 5536 ENDIF 5537 IF ( med_diag%INTFLX_FE%dgsave ) THEN 5538 CALL iom_put( "INTFLX_FE" , fflx_fe ) 5539 ENDIF 5540 IF ( med_diag%INT_PN%dgsave ) THEN 5541 CALL iom_put( "INT_PN" , ftot_pn ) 5542 ENDIF 5543 IF ( med_diag%INT_PD%dgsave ) THEN 5544 CALL iom_put( "INT_PD" , ftot_pd ) 5545 ENDIF 5546 IF ( med_diag%INT_ZMI%dgsave ) THEN 5547 CALL iom_put( "INT_ZMI" , ftot_zmi ) 5548 ENDIF 5549 IF ( med_diag%INT_ZME%dgsave ) THEN 5550 CALL iom_put( "INT_ZME" , ftot_zme ) 5551 ENDIF 5552 IF ( med_diag%INT_DET%dgsave ) THEN 5553 CALL iom_put( "INT_DET" , ftot_det ) 5554 ENDIF 5555 IF ( med_diag%INT_DTC%dgsave ) THEN 5556 CALL iom_put( "INT_DTC" , ftot_dtc ) 5557 ENDIF 5558 IF ( med_diag%BEN_N%dgsave ) THEN 5559 CALL iom_put( "BEN_N" , za_sed_n ) 5560 ENDIF 5561 IF ( med_diag%BEN_FE%dgsave ) THEN 5562 CALL iom_put( "BEN_FE" , za_sed_fe ) 5563 ENDIF 5564 IF ( med_diag%BEN_C%dgsave ) THEN 5565 CALL iom_put( "BEN_C" , za_sed_c ) 5566 ENDIF 5567 IF ( med_diag%BEN_SI%dgsave ) THEN 5568 CALL iom_put( "BEN_SI" , za_sed_si ) 5569 ENDIF 5570 IF ( med_diag%BEN_CA%dgsave ) THEN 5571 CALL iom_put( "BEN_CA" , za_sed_ca ) 5572 ENDIF 5573 IF ( med_diag%RUNOFF%dgsave ) THEN 5574 CALL iom_put( "RUNOFF" , f_runoff ) 5575 ENDIF 5576 # if defined key_roam 5577 IF ( med_diag%N_PROD%dgsave ) THEN 5578 CALL iom_put( "N_PROD" , fnit_prod ) 5579 ENDIF 5580 IF ( med_diag%N_CONS%dgsave ) THEN 5581 CALL iom_put( "N_CONS" , fnit_cons ) 5582 ENDIF 5583 IF ( med_diag%C_PROD%dgsave ) THEN 5584 CALL iom_put( "C_PROD" , fcar_prod ) 5585 ENDIF 5586 IF ( med_diag%C_CONS%dgsave ) THEN 5587 CALL iom_put( "C_CONS" , fcar_cons ) 5588 ENDIF 5589 IF ( med_diag%O2_PROD%dgsave ) THEN 5590 CALL iom_put( "O2_PROD" , foxy_prod ) 5591 ENDIF 5592 IF ( med_diag%O2_CONS%dgsave ) THEN 5593 CALL iom_put( "O2_CONS" , foxy_cons ) 5594 ENDIF 5595 IF ( med_diag%O2_ANOX%dgsave ) THEN 5596 CALL iom_put( "O2_ANOX" , foxy_anox ) 5597 ENDIF 5598 IF ( med_diag%INVTC%dgsave ) THEN 5599 CALL iom_put( "INVTC" , ftot_c ) 5600 ENDIF 5601 IF ( med_diag%INVTALK%dgsave ) THEN 5602 CALL iom_put( "INVTALK" , ftot_a ) 5603 ENDIF 5604 IF ( med_diag%INVTO2%dgsave ) THEN 5605 CALL iom_put( "INVTO2" , ftot_o2 ) 5606 ENDIF 5607 IF ( med_diag%COM_RESP%dgsave ) THEN 5608 CALL iom_put( "COM_RESP" , fcomm_resp ) 5609 ENDIF 5610 # endif 5611 !! 5612 !! diagnostic filled in the i-j-k main loop 5613 !!-------------------------------------------- 5614 IF ( med_diag%PRN%dgsave ) THEN 5615 CALL iom_put( "PRN" , fprn2d ) 5616 CALL wrk_dealloc( jpi, jpj, fprn2d ) 5617 ENDIF 5618 IF ( med_diag%MPN%dgsave ) THEN 5619 CALL iom_put( "MPN" ,fdpn2d ) 5620 CALL wrk_dealloc( jpi, jpj, fdpn2d ) 5621 ENDIF 5622 IF ( med_diag%PRD%dgsave ) THEN 5623 CALL iom_put( "PRD" ,fprd2d ) 5624 CALL wrk_dealloc( jpi, jpj, fprd2d ) 5625 ENDIF 5626 IF( med_diag%MPD%dgsave ) THEN 5627 CALL iom_put( "MPD" , fdpd2d ) 5628 CALL wrk_dealloc( jpi, jpj, fdpd2d ) 5629 ENDIF 5630 ! IF( med_diag%DSED%dgsave ) THEN 5631 ! CALL iom_put( "DSED" , ftot_n ) 5632 ! ENDIF 5633 IF( med_diag%OPAL%dgsave ) THEN 5634 CALL iom_put( "OPAL" , fprds2d ) 5635 CALL wrk_dealloc( jpi, jpj, fprds2d ) 5636 ENDIF 5637 IF( med_diag%OPALDISS%dgsave ) THEN 5638 CALL iom_put( "OPALDISS" , fsdiss2d ) 5639 CALL wrk_dealloc( jpi, jpj, fsdiss2d ) 5640 ENDIF 5641 IF( med_diag%GMIPn%dgsave ) THEN 5642 CALL iom_put( "GMIPn" , fgmipn2d ) 5643 CALL wrk_dealloc( jpi, jpj, fgmipn2d ) 5644 ENDIF 5645 IF( med_diag%GMID%dgsave ) THEN 5646 CALL iom_put( "GMID" , fgmid2d ) 5647 CALL wrk_dealloc( jpi, jpj, fgmid2d ) 5648 ENDIF 5649 IF( med_diag%MZMI%dgsave ) THEN 5650 CALL iom_put( "MZMI" , fdzmi2d ) 5651 CALL wrk_dealloc( jpi, jpj, fdzmi2d ) 5652 ENDIF 5653 IF( med_diag%GMEPN%dgsave ) THEN 5654 CALL iom_put( "GMEPN" , fgmepn2d ) 5655 CALL wrk_dealloc( jpi, jpj, fgmepn2d ) 5656 ENDIF 5657 IF( med_diag%GMEPD%dgsave ) THEN 5658 CALL iom_put( "GMEPD" , fgmepd2d ) 5659 CALL wrk_dealloc( jpi, jpj, fgmepd2d ) 5660 ENDIF 5661 IF( med_diag%GMEZMI%dgsave ) THEN 5662 CALL iom_put( "GMEZMI" , fgmezmi2d ) 5663 CALL wrk_dealloc( jpi, jpj, fgmezmi2d ) 5664 ENDIF 5665 IF( med_diag%GMED%dgsave ) THEN 5666 CALL iom_put( "GMED" , fgmed2d ) 5667 CALL wrk_dealloc( jpi, jpj, fgmed2d ) 5668 ENDIF 5669 IF( med_diag%MZME%dgsave ) THEN 5670 CALL iom_put( "MZME" , fdzme2d ) 5671 CALL wrk_dealloc( jpi, jpj, fdzme2d ) 5672 ENDIF 5673 ! IF( med_diag%DEXP%dgsave ) THEN 5674 ! CALL iom_put( "DEXP" , ftot_n ) 5675 ! ENDIF 5676 IF( med_diag%DETN%dgsave ) THEN 5677 CALL iom_put( "DETN" , fslown2d ) 5678 CALL wrk_dealloc( jpi, jpj, fslown2d ) 5679 ENDIF 5680 IF( med_diag%MDET%dgsave ) THEN 5681 CALL iom_put( "MDET" , fdd2d ) 5682 CALL wrk_dealloc( jpi, jpj, fdd2d ) 5683 ENDIF 5684 IF( med_diag%AEOLIAN%dgsave ) THEN 5685 CALL iom_put( "AEOLIAN" , ffetop2d ) 5686 CALL wrk_dealloc( jpi, jpj, ffetop2d ) 5687 ENDIF 5688 IF( med_diag%BENTHIC%dgsave ) THEN 5689 CALL iom_put( "BENTHIC" , ffebot2d ) 5690 CALL wrk_dealloc( jpi, jpj, ffebot2d ) 5691 ENDIF 5692 IF( med_diag%SCAVENGE%dgsave ) THEN 5693 CALL iom_put( "SCAVENGE" , ffescav2d ) 5694 CALL wrk_dealloc( jpi, jpj, ffescav2d ) 5695 ENDIF 5696 !! 5697 IF( med_diag%TOTREG_N%dgsave ) THEN 5698 CALL iom_put( "TOTREG_N" , fregen2d ) 5699 CALL wrk_dealloc( jpi, jpj, fregen2d ) 5700 ENDIF 5701 IF( med_diag%TOTRG_SI%dgsave ) THEN 5702 CALL iom_put( "TOTRG_SI" , fregensi2d ) 5703 CALL wrk_dealloc( jpi, jpj, fregensi2d ) 5704 ENDIF 5705 !! 5706 IF( med_diag%FASTN%dgsave ) THEN 5707 CALL iom_put( "FASTN" , ftempn2d ) 5708 CALL wrk_dealloc( jpi, jpj, ftempn2d ) 5709 ENDIF 5710 IF( med_diag%FASTSI%dgsave ) THEN 5711 CALL iom_put( "FASTSI" , ftempsi2d ) 5712 CALL wrk_dealloc( jpi, jpj, ftempsi2d ) 5713 ENDIF 5714 IF( med_diag%FASTFE%dgsave ) THEN 5715 CALL iom_put( "FASTFE" , ftempfe2d ) 5716 CALL wrk_dealloc( jpi, jpj, ftempfe2d ) 5717 ENDIF 5718 IF( med_diag%FASTC%dgsave ) THEN 5719 CALL iom_put( "FASTC" , ftempc2d ) 5720 CALL wrk_dealloc( jpi, jpj, ftempc2d ) 5721 ENDIF 5722 IF( med_diag%FASTCA%dgsave ) THEN 5723 CALL iom_put( "FASTCA" , ftempca2d ) 5724 CALL wrk_dealloc( jpi, jpj, ftempca2d ) 5725 ENDIF 5726 !! 5727 IF( med_diag%REMINN%dgsave ) THEN 5728 CALL iom_put( "REMINN" , freminn2d ) 5729 CALL wrk_dealloc( jpi, jpj, freminn2d ) 5730 ENDIF 5731 IF( med_diag%REMINSI%dgsave ) THEN 5732 CALL iom_put( "REMINSI" , freminsi2d ) 5733 CALL wrk_dealloc( jpi, jpj, freminsi2d ) 5734 ENDIF 5735 IF( med_diag%REMINFE%dgsave ) THEN 5736 CALL iom_put( "REMINFE" , freminfe2d ) 5737 CALL wrk_dealloc( jpi, jpj, freminfe2d ) 5738 ENDIF 5739 IF( med_diag%REMINC%dgsave ) THEN 5740 CALL iom_put( "REMINC" , freminc2d ) 5741 CALL wrk_dealloc( jpi, jpj, freminc2d ) 5742 ENDIF 5743 IF( med_diag%REMINCA%dgsave ) THEN 5744 CALL iom_put( "REMINCA" , freminca2d ) 5745 CALL wrk_dealloc( jpi, jpj, freminca2d ) 5746 ENDIF 5747 IF( med_diag%SEAFLRN%dgsave ) THEN 5748 CALL iom_put( "SEAFLRN" , fsedn ) 5749 ENDIF 5750 IF( med_diag%SEAFLRSI%dgsave ) THEN 5751 CALL iom_put( "SEAFLRSI" , fsedsi ) 5752 ENDIF 5753 IF( med_diag%SEAFLRFE%dgsave ) THEN 5754 CALL iom_put( "SEAFLRFE" , fsedfe ) 5755 ENDIF 5756 IF( med_diag%SEAFLRC%dgsave ) THEN 5757 CALL iom_put( "SEAFLRC" , fsedc ) 5758 ENDIF 5759 IF( med_diag%SEAFLRCA%dgsave ) THEN 5760 CALL iom_put( "SEAFLRCA" , fsedca ) 5761 ENDIF 5762 !! 5763 # if defined key_roam 5764 !! 5765 IF( med_diag%RIV_N%dgsave ) THEN 5766 CALL iom_put( "RIV_N" , rivn2d ) 5767 CALL wrk_dealloc( jpi, jpj, rivn2d ) 5768 ENDIF 5769 IF( med_diag%RIV_SI%dgsave ) THEN 5770 CALL iom_put( "RIV_SI" , rivsi2d ) 5771 CALL wrk_dealloc( jpi, jpj, rivsi2d ) 5772 ENDIF 5773 IF( med_diag%RIV_C%dgsave ) THEN 5774 CALL iom_put( "RIV_C" , rivc2d ) 5775 CALL wrk_dealloc( jpi, jpj, rivc2d ) 5776 ENDIF 5777 IF( med_diag%RIV_ALK%dgsave ) THEN 5778 CALL iom_put( "RIV_ALK" , rivalk2d ) 5779 CALL wrk_dealloc( jpi, jpj, rivalk2d ) 5780 ENDIF 5781 IF( med_diag%DETC%dgsave ) THEN 5782 CALL iom_put( "DETC" , fslowc2d ) 5783 CALL wrk_dealloc( jpi, jpj, fslowc2d ) 5784 ENDIF 5785 !! 5786 IF( med_diag%PN_LLOSS%dgsave ) THEN 5787 CALL iom_put( "PN_LLOSS" , fdpn22d ) 5788 CALL wrk_dealloc( jpi, jpj, fdpn22d ) 5789 ENDIF 5790 IF( med_diag%PD_LLOSS%dgsave ) THEN 5791 CALL iom_put( "PD_LLOSS" , fdpd22d ) 5792 CALL wrk_dealloc( jpi, jpj, fdpd22d ) 5793 ENDIF 5794 IF( med_diag%ZI_LLOSS%dgsave ) THEN 5795 CALL iom_put( "ZI_LLOSS" , fdzmi22d ) 5796 CALL wrk_dealloc( jpi, jpj, fdzmi22d ) 5797 ENDIF 5798 IF( med_diag%ZE_LLOSS%dgsave ) THEN 5799 CALL iom_put( "ZE_LLOSS" , fdzme22d ) 5800 CALL wrk_dealloc( jpi, jpj, fdzme22d ) 5801 ENDIF 5802 IF( med_diag%ZI_MES_N%dgsave ) THEN 5803 CALL iom_put( "ZI_MES_N" , zimesn2d ) 5804 CALL wrk_dealloc( jpi, jpj, zimesn2d ) 5805 ENDIF 5806 IF( med_diag%ZI_MES_D%dgsave ) THEN 5807 CALL iom_put( "ZI_MES_D" , zimesd2d ) 5808 CALL wrk_dealloc( jpi, jpj, zimesd2d ) 5809 ENDIF 5810 IF( med_diag%ZI_MES_C%dgsave ) THEN 5811 CALL iom_put( "ZI_MES_C" , zimesc2d ) 5812 CALL wrk_dealloc( jpi, jpj, zimesc2d ) 5813 ENDIF 5814 IF( med_diag%ZI_MESDC%dgsave ) THEN 5815 CALL iom_put( "ZI_MESDC" ,zimesdc2d ) 5816 CALL wrk_dealloc( jpi, jpj, zimesdc2d ) 5817 ENDIF 5818 IF( med_diag%ZI_EXCR%dgsave ) THEN 5819 CALL iom_put( "ZI_EXCR" , ziexcr2d ) 5820 CALL wrk_dealloc( jpi, jpj, ziexcr2d ) 5821 ENDIF 5822 IF( med_diag%ZI_RESP%dgsave ) THEN 5823 CALL iom_put( "ZI_RESP" , ziresp2d ) 5824 CALL wrk_dealloc( jpi, jpj, ziresp2d ) 5825 ENDIF 5826 IF( med_diag%ZI_GROW%dgsave ) THEN 5827 CALL iom_put( "ZI_GROW" , zigrow2d ) 5828 CALL wrk_dealloc( jpi, jpj, zigrow2d ) 5829 ENDIF 5830 IF( med_diag%ZE_MES_N%dgsave ) THEN 5831 CALL iom_put( "ZE_MES_N" , zemesn2d ) 5832 CALL wrk_dealloc( jpi, jpj, zemesn2d ) 5833 ENDIF 5834 IF( med_diag%ZE_MES_D%dgsave ) THEN 5835 CALL iom_put( "ZE_MES_D" , zemesd2d ) 5836 CALL wrk_dealloc( jpi, jpj, zemesd2d ) 5837 ENDIF 5838 IF( med_diag%ZE_MES_C%dgsave ) THEN 5839 CALL iom_put( "ZE_MES_C" , zemesc2d ) 5840 CALL wrk_dealloc( jpi, jpj, zemesc2d ) 5841 ENDIF 5842 IF( med_diag%ZE_MESDC%dgsave ) THEN 5843 CALL iom_put( "ZE_MESDC" , zemesdc2d ) 5844 CALL wrk_dealloc( jpi, jpj, zemesdc2d ) 5845 ENDIF 5846 IF( med_diag%ZE_EXCR%dgsave ) THEN 5847 CALL iom_put( "ZE_EXCR" , zeexcr2d ) 5848 CALL wrk_dealloc( jpi, jpj, zeexcr2d ) 5849 ENDIF 5850 IF( med_diag%ZE_RESP%dgsave ) THEN 5851 CALL iom_put( "ZE_RESP" , zeresp2d ) 5852 CALL wrk_dealloc( jpi, jpj, zeresp2d ) 5853 ENDIF 5854 IF( med_diag%ZE_GROW%dgsave ) THEN 5855 CALL iom_put( "ZE_GROW" , zegrow2d ) 5856 CALL wrk_dealloc( jpi, jpj, zegrow2d ) 5857 ENDIF 5858 IF( med_diag%MDETC%dgsave ) THEN 5859 CALL iom_put( "MDETC" , mdetc2d ) 5860 CALL wrk_dealloc( jpi, jpj, mdetc2d ) 5861 ENDIF 5862 IF( med_diag%GMIDC%dgsave ) THEN 5863 CALL iom_put( "GMIDC" , gmidc2d ) 5864 CALL wrk_dealloc( jpi, jpj, gmidc2d ) 5865 ENDIF 5866 IF( med_diag%GMEDC%dgsave ) THEN 5867 CALL iom_put( "GMEDC" , gmedc2d ) 5868 CALL wrk_dealloc( jpi, jpj, gmedc2d ) 5869 ENDIF 5870 IF( med_diag%IBEN_N%dgsave ) THEN 5871 CALL iom_put( "IBEN_N" , iben_n2d ) 5872 CALL wrk_dealloc( jpi, jpj, iben_n2d ) 5873 ENDIF 5874 IF( med_diag%IBEN_FE%dgsave ) THEN 5875 CALL iom_put( "IBEN_FE" , iben_fe2d ) 5876 CALL wrk_dealloc( jpi, jpj, iben_fe2d ) 5877 ENDIF 5878 IF( med_diag%IBEN_C%dgsave ) THEN 5879 CALL iom_put( "IBEN_C" , iben_c2d ) 5880 CALL wrk_dealloc( jpi, jpj, iben_c2d ) 5881 ENDIF 5882 IF( med_diag%IBEN_SI%dgsave ) THEN 5883 CALL iom_put( "IBEN_SI" , iben_si2d ) 5884 CALL wrk_dealloc( jpi, jpj, iben_si2d ) 5885 ENDIF 5886 IF( med_diag%IBEN_CA%dgsave ) THEN 5887 CALL iom_put( "IBEN_CA" , iben_ca2d ) 5888 CALL wrk_dealloc( jpi, jpj, iben_ca2d ) 5889 ENDIF 5890 IF( med_diag%OBEN_N%dgsave ) THEN 5891 CALL iom_put( "OBEN_N" , oben_n2d ) 5892 CALL wrk_dealloc( jpi, jpj, oben_n2d ) 5893 ENDIF 5894 IF( med_diag%OBEN_FE%dgsave ) THEN 5895 CALL iom_put( "OBEN_FE" , oben_fe2d ) 5896 CALL wrk_dealloc( jpi, jpj, oben_fe2d ) 5897 ENDIF 5898 IF( med_diag%OBEN_C%dgsave ) THEN 5899 CALL iom_put( "OBEN_C" , oben_c2d ) 5900 CALL wrk_dealloc( jpi, jpj, oben_c2d ) 5901 ENDIF 5902 IF( med_diag%OBEN_SI%dgsave ) THEN 5903 CALL iom_put( "OBEN_SI" , oben_si2d ) 5904 CALL wrk_dealloc( jpi, jpj, oben_si2d ) 5905 ENDIF 5906 IF( med_diag%OBEN_CA%dgsave ) THEN 5907 CALL iom_put( "OBEN_CA" , oben_ca2d ) 5908 CALL wrk_dealloc( jpi, jpj, oben_ca2d ) 5909 ENDIF 5910 IF( med_diag%SFR_OCAL%dgsave ) THEN 5911 CALL iom_put( "SFR_OCAL" , sfr_ocal2d ) 5912 CALL wrk_dealloc( jpi, jpj, sfr_ocal2d ) 5913 ENDIF 5914 IF( med_diag%SFR_OARG%dgsave ) THEN 5915 CALL iom_put( "SFR_OARG" , sfr_oarg2d ) 5916 CALL wrk_dealloc( jpi, jpj, sfr_oarg2d ) 5917 ENDIF 5918 IF( med_diag%LYSO_CA%dgsave ) THEN 5919 CALL iom_put( "LYSO_CA" , lyso_ca2d ) 5920 CALL wrk_dealloc( jpi, jpj, lyso_ca2d ) 5921 ENDIF 5922 # endif 5923 !! 5924 !! ** 3D diagnostics 5925 IF( med_diag%TPP3%dgsave ) THEN 5926 CALL iom_put( "TPP3" , tpp3d ) 5927 CALL wrk_dealloc( jpi, jpj, jpk, tpp3d ) 5928 ENDIF 4269 5929 IF( med_diag%DETFLUX3%dgsave ) THEN 4270 detflux3d(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) !! detrital flux 4271 !CALL iom_put( "DETFLUX3" , ftot_n ) 4272 ENDIF 4273 # if defined key_roam 5930 CALL iom_put( "DETFLUX3" , detflux3d ) 5931 CALL wrk_dealloc( jpi, jpj, jpk, detflux3d ) 5932 ENDIF 5933 IF( med_diag%REMIN3N%dgsave ) THEN 5934 CALL iom_put( "REMIN3N" , remin3dn ) 5935 CALL wrk_dealloc( jpi, jpj, jpk, remin3dn ) 5936 ENDIF 5937 # if defined key_roam 5938 IF( med_diag%PH3%dgsave ) THEN 5939 CALL iom_put( "PH3" , f3_pH ) 5940 ENDIF 5941 IF( med_diag%OM_CAL3%dgsave ) THEN 5942 CALL iom_put( "OM_CAL3" , f3_omcal ) 5943 ENDIF 5944 !! 5945 !! AXY (09/11/16): 2D CMIP6 diagnostics 5946 IF( med_diag%INTDISSIC%dgsave ) THEN 5947 CALL iom_put( "INTDISSIC" , intdissic ) 5948 CALL wrk_dealloc( jpi, jpj, intdissic ) 5949 ENDIF 5950 IF( med_diag%INTDISSIN%dgsave ) THEN 5951 CALL iom_put( "INTDISSIN" , intdissin ) 5952 CALL wrk_dealloc( jpi, jpj, intdissin ) 5953 ENDIF 5954 IF( med_diag%INTDISSISI%dgsave ) THEN 5955 CALL iom_put( "INTDISSISI" , intdissisi ) 5956 CALL wrk_dealloc( jpi, jpj, intdissisi ) 5957 ENDIF 5958 IF( med_diag%INTTALK%dgsave ) THEN 5959 CALL iom_put( "INTTALK" , inttalk ) 5960 CALL wrk_dealloc( jpi, jpj, inttalk ) 5961 ENDIF 5962 IF( med_diag%O2min%dgsave ) THEN 5963 CALL iom_put( "O2min" , o2min ) 5964 CALL wrk_dealloc( jpi, jpj, o2min ) 5965 ENDIF 5966 IF( med_diag%ZO2min%dgsave ) THEN 5967 CALL iom_put( "ZO2min" , zo2min ) 5968 CALL wrk_dealloc( jpi, jpj, zo2min ) 5969 ENDIF 5970 IF( med_diag%FBDDTALK%dgsave ) THEN 5971 CALL iom_put( "FBDDTALK" , fbddtalk ) 5972 CALL wrk_dealloc( jpi, jpj, fbddtalk ) 5973 ENDIF 5974 IF( med_diag%FBDDTDIC%dgsave ) THEN 5975 CALL iom_put( "FBDDTDIC" , fbddtdic ) 5976 CALL wrk_dealloc( jpi, jpj, fbddtdic ) 5977 ENDIF 5978 IF( med_diag%FBDDTDIFE%dgsave ) THEN 5979 CALL iom_put( "FBDDTDIFE" , fbddtdife ) 5980 CALL wrk_dealloc( jpi, jpj, fbddtdife ) 5981 ENDIF 5982 IF( med_diag%FBDDTDIN%dgsave ) THEN 5983 CALL iom_put( "FBDDTDIN" , fbddtdin ) 5984 CALL wrk_dealloc( jpi, jpj, fbddtdin ) 5985 ENDIF 5986 IF( med_diag%FBDDTDISI%dgsave ) THEN 5987 CALL iom_put( "FBDDTDISI" , fbddtdisi ) 5988 CALL wrk_dealloc( jpi, jpj, fbddtdisi ) 5989 ENDIF 5990 !! 5991 !! AXY (09/11/16): 3D CMIP6 diagnostics 5992 IF( med_diag%TPPD3%dgsave ) THEN 5993 CALL iom_put( "TPPD3" , tppd3 ) 5994 CALL wrk_dealloc( jpi, jpj, jpk, tppd3 ) 5995 ENDIF 5996 IF( med_diag%BDDTALK3%dgsave ) THEN 5997 CALL iom_put( "BDDTALK3" , bddtalk3 ) 5998 CALL wrk_dealloc( jpi, jpj, jpk, bddtalk3 ) 5999 ENDIF 6000 IF( med_diag%BDDTDIC3%dgsave ) THEN 6001 CALL iom_put( "BDDTDIC3" , bddtdic3 ) 6002 CALL wrk_dealloc( jpi, jpj, jpk, bddtdic3 ) 6003 ENDIF 6004 IF( med_diag%BDDTDIFE3%dgsave ) THEN 6005 CALL iom_put( "BDDTDIFE3" , bddtdife3 ) 6006 CALL wrk_dealloc( jpi, jpj, jpk, bddtdife3 ) 6007 ENDIF 6008 IF( med_diag%BDDTDIN3%dgsave ) THEN 6009 CALL iom_put( "BDDTDIN3" , bddtdin3 ) 6010 CALL wrk_dealloc( jpi, jpj, jpk, bddtdin3 ) 6011 ENDIF 6012 IF( med_diag%BDDTDISI3%dgsave ) THEN 6013 CALL iom_put( "BDDTDISI3" , bddtdisi3 ) 6014 CALL wrk_dealloc( jpi, jpj, jpk, bddtdisi3 ) 6015 ENDIF 6016 IF( med_diag%FD_NIT3%dgsave ) THEN 6017 CALL iom_put( "FD_NIT3" , fd_nit3 ) 6018 CALL wrk_dealloc( jpi, jpj, jpk, fd_nit3 ) 6019 ENDIF 6020 IF( med_diag%FD_SIL3%dgsave ) THEN 6021 CALL iom_put( "FD_SIL3" , fd_sil3 ) 6022 CALL wrk_dealloc( jpi, jpj, jpk, fd_sil3 ) 6023 ENDIF 6024 IF( med_diag%FD_CAL3%dgsave ) THEN 6025 CALL iom_put( "FD_CAL3" , fd_cal3 ) 6026 CALL wrk_dealloc( jpi, jpj, jpk, fd_cal3 ) 6027 ENDIF 6028 IF( med_diag%FD_CAR3%dgsave ) THEN 6029 CALL iom_put( "FD_CAR3" , fd_car3 ) 6030 CALL wrk_dealloc( jpi, jpj, jpk, fd_car3 ) 6031 ENDIF 6032 IF( med_diag%CO33%dgsave ) THEN 6033 CALL iom_put( "CO33" , f3_co3 ) 6034 ENDIF 6035 IF( med_diag%CO3SATARAG3%dgsave ) THEN 6036 CALL iom_put( "CO3SATARAG3" , f3_omarg ) 6037 ENDIF 6038 IF( med_diag%CO3SATCALC3%dgsave ) THEN 6039 CALL iom_put( "CO3SATCALC3" , f3_omcal ) 6040 ENDIF 4274 6041 IF( med_diag%EXPC3%dgsave ) THEN 4275 expc3(:,:,jk) = (fslowcflux(:,:) + ffastc(:,:)) * tmask(:,:,jk) 4276 ENDIF 6042 CALL iom_put( "EXPC3" , expc3 ) 6043 CALL wrk_dealloc( jpi, jpj, jpk, expc3 ) 6044 ENDIF 4277 6045 IF( med_diag%EXPN3%dgsave ) THEN 4278 expn3(:,:,jk) = (fslownflux(:,:) + ffastn(:,:)) * tmask(:,:,jk) 4279 ENDIF 4280 # endif 4281 ENDIF 4282 !! CLOSE vertical loop 4283 ENDDO 4284 4285 !!---------------------------------------------------------------------- 4286 !! Process benthic in/out fluxes 4287 !! These can be handled outside of the 3D calculations since the 4288 !! benthic pools (and fluxes) are 2D in nature; this code is 4289 !! (shamelessly) borrowed from corresponding code in the LOBSTER 4290 !! model 4291 !!---------------------------------------------------------------------- 4292 !! 4293 !! IF(lwp) WRITE(numout,*) 'AXY: rdt = ', rdt 4294 if (jorgben.eq.1) then 4295 za_sed_n(:,:) = zn_sed_n(:,:) + & 4296 & ( f_sbenin_n(:,:) + f_fbenin_n(:,:) - f_benout_n(:,:) ) * (rdt / 86400.) 4297 zn_sed_n(:,:) = za_sed_n(:,:) 4298 !! 4299 za_sed_fe(:,:) = zn_sed_fe(:,:) + & 4300 & ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * (rdt / 86400.) 4301 zn_sed_fe(:,:) = za_sed_fe(:,:) 4302 !! 4303 za_sed_c(:,:) = zn_sed_c(:,:) + & 4304 & ( f_sbenin_c(:,:) + f_fbenin_c(:,:) - f_benout_c(:,:) ) * (rdt / 86400.) 4305 zn_sed_c(:,:) = za_sed_c(:,:) 4306 endif 4307 if (jinorgben.eq.1) then 4308 za_sed_si(:,:) = zn_sed_si(:,:) + & 4309 & ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * (rdt / 86400.) 4310 zn_sed_si(:,:) = za_sed_si(:,:) 4311 !! 4312 za_sed_ca(:,:) = zn_sed_ca(:,:) + & 4313 & ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * (rdt / 86400.) 4314 zn_sed_ca(:,:) = za_sed_ca(:,:) 4315 endif 4316 !! 4317 if (ibenthic.eq.2) then 4318 !! The code below (in this if ... then ... endif loop) is 4319 !! effectively commented out because it does not work as 4320 !! anticipated; it can be deleted at a later date 4321 if (jorgben.eq.1) then 4322 za_sed_n(:,:) = ( f_sbenin_n(:,:) + f_fbenin_n(:,:) - f_benout_n(:,:) ) * rdt 4323 za_sed_fe(:,:) = ( f_sbenin_fe(:,:) + f_fbenin_fe(:,:) - f_benout_fe(:,:) ) * rdt 4324 za_sed_c(:,:) = ( f_sbenin_c(:,:) + f_fbenin_c(:,:) - f_benout_c(:,:) ) * rdt 4325 endif 4326 if (jinorgben.eq.1) then 4327 za_sed_si(:,:) = ( f_fbenin_si(:,:) - f_benout_si(:,:) ) * rdt 4328 za_sed_ca(:,:) = ( f_fbenin_ca(:,:) - f_benout_ca(:,:) ) * rdt 4329 endif 4330 !! 4331 !! Leap-frog scheme - only in explicit case, otherwise the time stepping 4332 !! is already being done in trczdf 4333 !! IF( l_trczdf_exp .AND. (ln_trcadv_cen2 .OR. ln_trcadv_tvd) ) THEN 4334 !! zfact = 2. * rdttra(jk) * FLOAT( ndttrc ) 4335 !! IF( neuler == 0 .AND. kt == nittrc000 ) zfact = rdttra(jk) * FLOAT(ndttrc) 4336 !! if (jorgben.eq.1) then 4337 !! za_sed_n(:,:) = zb_sed_n(:,:) + ( zfact * za_sed_n(:,:) ) 4338 !! za_sed_fe(:,:) = zb_sed_fe(:,:) + ( zfact * za_sed_fe(:,:) ) 4339 !! za_sed_c(:,:) = zb_sed_c(:,:) + ( zfact * za_sed_c(:,:) ) 4340 !! endif 4341 !! if (jinorgben.eq.1) then 4342 !! za_sed_si(:,:) = zb_sed_si(:,:) + ( zfact * za_sed_si(:,:) ) 4343 !! za_sed_ca(:,:) = zb_sed_ca(:,:) + ( zfact * za_sed_ca(:,:) ) 4344 !! endif 4345 !! ENDIF 4346 !! 4347 !! Time filter and swap of arrays 4348 IF( ln_trcadv_cen2 .OR. ln_trcadv_tvd ) THEN ! centred or tvd scheme 4349 IF( neuler == 0 .AND. kt == nittrc000 ) THEN 4350 if (jorgben.eq.1) then 4351 zb_sed_n(:,:) = zn_sed_n(:,:) 4352 zn_sed_n(:,:) = za_sed_n(:,:) 4353 za_sed_n(:,:) = 0.0 4354 !! 4355 zb_sed_fe(:,:) = zn_sed_fe(:,:) 4356 zn_sed_fe(:,:) = za_sed_fe(:,:) 4357 za_sed_fe(:,:) = 0.0 4358 !! 4359 zb_sed_c(:,:) = zn_sed_c(:,:) 4360 zn_sed_c(:,:) = za_sed_c(:,:) 4361 za_sed_c(:,:) = 0.0 4362 endif 4363 if (jinorgben.eq.1) then 4364 zb_sed_si(:,:) = zn_sed_si(:,:) 4365 zn_sed_si(:,:) = za_sed_si(:,:) 4366 za_sed_si(:,:) = 0.0 4367 !! 4368 zb_sed_ca(:,:) = zn_sed_ca(:,:) 4369 zn_sed_ca(:,:) = za_sed_ca(:,:) 4370 za_sed_ca(:,:) = 0.0 4371 endif 4372 ELSE 4373 if (jorgben.eq.1) then 4374 zb_sed_n(:,:) = (atfp * ( zb_sed_n(:,:) + za_sed_n(:,:) )) + (atfp1 * zn_sed_n(:,:) ) 4375 zn_sed_n(:,:) = za_sed_n(:,:) 4376 za_sed_n(:,:) = 0.0 4377 !! 4378 zb_sed_fe(:,:) = (atfp * ( zb_sed_fe(:,:) + za_sed_fe(:,:) )) + (atfp1 * zn_sed_fe(:,:)) 4379 zn_sed_fe(:,:) = za_sed_fe(:,:) 4380 za_sed_fe(:,:) = 0.0 4381 !! 4382 zb_sed_c(:,:) = (atfp * ( zb_sed_c(:,:) + za_sed_c(:,:) )) + (atfp1 * zn_sed_c(:,:) ) 4383 zn_sed_c(:,:) = za_sed_c(:,:) 4384 za_sed_c(:,:) = 0.0 4385 endif 4386 if (jinorgben.eq.1) then 4387 zb_sed_si(:,:) = (atfp * ( zb_sed_si(:,:) + za_sed_si(:,:) )) + (atfp1 * zn_sed_si(:,:)) 4388 zn_sed_si(:,:) = za_sed_si(:,:) 4389 za_sed_si(:,:) = 0.0 4390 !! 4391 zb_sed_ca(:,:) = (atfp * ( zb_sed_ca(:,:) + za_sed_ca(:,:) )) + (atfp1 * zn_sed_ca(:,:)) 4392 zn_sed_ca(:,:) = za_sed_ca(:,:) 4393 za_sed_ca(:,:) = 0.0 4394 endif 4395 ENDIF 4396 ELSE ! case of smolar scheme or muscl 4397 if (jorgben.eq.1) then 4398 zb_sed_n(:,:) = za_sed_n(:,:) 4399 zn_sed_n(:,:) = za_sed_n(:,:) 4400 za_sed_n(:,:) = 0.0 4401 !! 4402 zb_sed_fe(:,:) = za_sed_fe(:,:) 4403 zn_sed_fe(:,:) = za_sed_fe(:,:) 4404 za_sed_fe(:,:) = 0.0 4405 !! 4406 zb_sed_c(:,:) = za_sed_c(:,:) 4407 zn_sed_c(:,:) = za_sed_c(:,:) 4408 za_sed_c(:,:) = 0.0 4409 endif 4410 if (jinorgben.eq.1) then 4411 zb_sed_si(:,:) = za_sed_si(:,:) 4412 zn_sed_si(:,:) = za_sed_si(:,:) 4413 za_sed_si(:,:) = 0.0 4414 !! 4415 zb_sed_ca(:,:) = za_sed_ca(:,:) 4416 zn_sed_ca(:,:) = za_sed_ca(:,:) 4417 za_sed_ca(:,:) = 0.0 4418 endif 4419 ENDIF 4420 endif 4421 4422 !!----------------------------------------------------------------------- 4423 !! Add very last diag calculations 4424 !!----------------------------------------------------------------------- 4425 DO jj = 2,jpjm1 4426 DO ji = 2,jpim1 4427 !! 4428 IF( med_diag%PN_JLIM%dgsave ) THEN 4429 fjln2d(ji,jj) = fjln2d(ji,jj) / MAX(ftot_pn(ji,jj), rsmall) 4430 ENDIF 4431 IF( med_diag%PN_NLIM%dgsave ) THEN 4432 fnln2d(ji,jj) = fnln2d(ji,jj) / MAX(ftot_pn(ji,jj), rsmall) 4433 ENDIF 4434 IF( med_diag%PN_FELIM%dgsave ) THEN 4435 ffln2d(ji,jj) = ffln2d(ji,jj) / MAX(ftot_pn(ji,jj), rsmall) 4436 ENDIF 4437 IF( med_diag%PD_JLIM%dgsave ) THEN 4438 fjld2d(ji,jj) = fjld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 4439 ENDIF 4440 IF( med_diag%PD_NLIM%dgsave ) THEN 4441 fnld2d(ji,jj) = fnld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 4442 ENDIF 4443 IF( med_diag%PD_FELIM%dgsave ) THEN 4444 ffld2d(ji,jj) = ffld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 4445 ENDIF 4446 IF( med_diag%PD_SILIM%dgsave ) THEN 4447 fsld2d2(ji,jj) = fsld2d2(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 4448 ENDIF 4449 IF( med_diag%PDSILIM2%dgsave ) THEN 4450 fsld2d(ji,jj) = fsld2d(ji,jj) / MAX(ftot_pd(ji,jj), rsmall) 4451 ENDIF 4452 ENDDO 4453 ENDDO 4454 4455 !!---------------------------------------------------------------------- 4456 !! Add in XML diagnostics stuff 4457 !!---------------------------------------------------------------------- 4458 !! 4459 !! ** 2D diagnostics 4460 # if defined key_debug_medusa 4461 IF ( lwp ) write (numout,*) 'trc_bio_medusa: export all diag.' 4462 CALL flush(numout) 4463 # endif 4464 IF ( med_diag%INVTN%dgsave ) THEN 4465 CALL iom_put( "INVTN" , ftot_n ) 4466 ENDIF 4467 IF ( med_diag%INVTSI%dgsave ) THEN 4468 CALL iom_put( "INVTSI" , ftot_si ) 4469 ENDIF 4470 IF ( med_diag%INVTFE%dgsave ) THEN 4471 CALL iom_put( "INVTFE" , ftot_fe ) 4472 ENDIF 4473 IF ( med_diag%ML_PRN%dgsave ) THEN 4474 CALL iom_put( "ML_PRN" , fprn_ml ) 4475 ENDIF 4476 IF ( med_diag%ML_PRD%dgsave ) THEN 4477 CALL iom_put( "ML_PRD" , fprd_ml ) 4478 ENDIF 4479 IF ( med_diag%OCAL_LVL%dgsave ) THEN 4480 CALL iom_put( "OCAL_LVL" , fccd ) 4481 ENDIF 4482 IF ( med_diag%PN_JLIM%dgsave ) THEN 4483 CALL iom_put( "PN_JLIM" , fjln2d ) 4484 CALL wrk_dealloc( jpi, jpj, fjln2d ) 4485 ENDIF 4486 IF ( med_diag%PN_NLIM%dgsave ) THEN 4487 CALL iom_put( "PN_NLIM" , fnln2d ) 4488 CALL wrk_dealloc( jpi, jpj, fnln2d ) 4489 ENDIF 4490 IF ( med_diag%PN_FELIM%dgsave ) THEN 4491 CALL iom_put( "PN_FELIM" , ffln2d ) 4492 CALL wrk_dealloc( jpi, jpj, ffln2d ) 4493 ENDIF 4494 IF ( med_diag%PD_JLIM%dgsave ) THEN 4495 CALL iom_put( "PD_JLIM" , fjld2d ) 4496 CALL wrk_dealloc( jpi, jpj, fjld2d ) 4497 ENDIF 4498 IF ( med_diag%PD_NLIM%dgsave ) THEN 4499 CALL iom_put( "PD_NLIM" , fnld2d ) 4500 CALL wrk_dealloc( jpi, jpj, fnld2d ) 4501 ENDIF 4502 IF ( med_diag%PD_FELIM%dgsave ) THEN 4503 CALL iom_put( "PD_FELIM" , ffld2d ) 4504 CALL wrk_dealloc( jpi, jpj, ffld2d ) 4505 ENDIF 4506 IF ( med_diag%PD_SILIM%dgsave ) THEN 4507 CALL iom_put( "PD_SILIM" , fsld2d2 ) 4508 CALL wrk_dealloc( jpi, jpj, fsld2d2 ) 4509 ENDIF 4510 IF ( med_diag%PDSILIM2%dgsave ) THEN 4511 CALL iom_put( "PDSILIM2" , fsld2d ) 4512 CALL wrk_dealloc( jpi, jpj, fsld2d ) 4513 ENDIF 4514 IF ( med_diag%INTFLX_N%dgsave ) THEN 4515 CALL iom_put( "INTFLX_N" , fflx_n ) 4516 ENDIF 4517 IF ( med_diag%INTFLX_SI%dgsave ) THEN 4518 CALL iom_put( "INTFLX_SI" , fflx_si ) 4519 ENDIF 4520 IF ( med_diag%INTFLX_FE%dgsave ) THEN 4521 CALL iom_put( "INTFLX_FE" , fflx_fe ) 4522 ENDIF 4523 IF ( med_diag%INT_PN%dgsave ) THEN 4524 CALL iom_put( "INT_PN" , ftot_pn ) 4525 ENDIF 4526 IF ( med_diag%INT_PD%dgsave ) THEN 4527 CALL iom_put( "INT_PD" , ftot_pd ) 4528 ENDIF 4529 IF ( med_diag%INT_ZMI%dgsave ) THEN 4530 CALL iom_put( "INT_ZMI" , ftot_zmi ) 4531 ENDIF 4532 IF ( med_diag%INT_ZME%dgsave ) THEN 4533 CALL iom_put( "INT_ZME" , ftot_zme ) 4534 ENDIF 4535 IF ( med_diag%INT_DET%dgsave ) THEN 4536 CALL iom_put( "INT_DET" , ftot_det ) 4537 ENDIF 4538 IF ( med_diag%INT_DTC%dgsave ) THEN 4539 CALL iom_put( "INT_DTC" , ftot_dtc ) 4540 ENDIF 4541 IF ( med_diag%BEN_N%dgsave ) THEN 4542 CALL iom_put( "BEN_N" , za_sed_n ) 4543 ENDIF 4544 IF ( med_diag%BEN_FE%dgsave ) THEN 4545 CALL iom_put( "BEN_FE" , za_sed_fe ) 4546 ENDIF 4547 IF ( med_diag%BEN_C%dgsave ) THEN 4548 CALL iom_put( "BEN_C" , za_sed_c ) 4549 ENDIF 4550 IF ( med_diag%BEN_SI%dgsave ) THEN 4551 CALL iom_put( "BEN_SI" , za_sed_si ) 4552 ENDIF 4553 IF ( med_diag%BEN_CA%dgsave ) THEN 4554 CALL iom_put( "BEN_CA" , za_sed_ca ) 4555 ENDIF 4556 IF ( med_diag%RUNOFF%dgsave ) THEN 4557 CALL iom_put( "RUNOFF" , f_runoff ) 4558 ENDIF 4559 # if defined key_roam 4560 IF ( med_diag%N_PROD%dgsave ) THEN 4561 CALL iom_put( "N_PROD" , fnit_prod ) 4562 ENDIF 4563 IF ( med_diag%N_CONS%dgsave ) THEN 4564 CALL iom_put( "N_CONS" , fnit_cons ) 4565 ENDIF 4566 IF ( med_diag%C_PROD%dgsave ) THEN 4567 CALL iom_put( "C_PROD" , fcar_prod ) 4568 ENDIF 4569 IF ( med_diag%C_CONS%dgsave ) THEN 4570 CALL iom_put( "C_CONS" , fcar_cons ) 4571 ENDIF 4572 IF ( med_diag%O2_PROD%dgsave ) THEN 4573 CALL iom_put( "O2_PROD" , foxy_prod ) 4574 ENDIF 4575 IF ( med_diag%O2_CONS%dgsave ) THEN 4576 CALL iom_put( "O2_CONS" , foxy_cons ) 4577 ENDIF 4578 IF ( med_diag%O2_ANOX%dgsave ) THEN 4579 CALL iom_put( "O2_ANOX" , foxy_anox ) 4580 ENDIF 4581 IF ( med_diag%INVTC%dgsave ) THEN 4582 CALL iom_put( "INVTC" , ftot_c ) 4583 ENDIF 4584 IF ( med_diag%INVTALK%dgsave ) THEN 4585 CALL iom_put( "INVTALK" , ftot_a ) 4586 ENDIF 4587 IF ( med_diag%INVTO2%dgsave ) THEN 4588 CALL iom_put( "INVTO2" , ftot_o2 ) 4589 ENDIF 4590 IF ( med_diag%COM_RESP%dgsave ) THEN 4591 CALL iom_put( "COM_RESP" , fcomm_resp ) 4592 ENDIF 4593 # endif 4594 !! 4595 !! diagnostic filled in the i-j-k main loop 4596 !!-------------------------------------------- 4597 IF ( med_diag%PRN%dgsave ) THEN 4598 CALL iom_put( "PRN" , fprn2d ) 4599 CALL wrk_dealloc( jpi, jpj, fprn2d ) 4600 ENDIF 4601 IF ( med_diag%MPN%dgsave ) THEN 4602 CALL iom_put( "MPN" ,fdpn2d ) 4603 CALL wrk_dealloc( jpi, jpj, fdpn2d ) 4604 ENDIF 4605 IF ( med_diag%PRD%dgsave ) THEN 4606 CALL iom_put( "PRD" ,fprd2d ) 4607 CALL wrk_dealloc( jpi, jpj, fprd2d ) 4608 ENDIF 4609 IF( med_diag%MPD%dgsave ) THEN 4610 CALL iom_put( "MPD" , fdpd2d ) 4611 CALL wrk_dealloc( jpi, jpj, fdpd2d ) 4612 ENDIF 4613 ! IF( med_diag%DSED%dgsave ) THEN 4614 ! CALL iom_put( "DSED" , ftot_n ) 4615 ! ENDIF 4616 IF( med_diag%OPAL%dgsave ) THEN 4617 CALL iom_put( "OPAL" , fprds2d ) 4618 CALL wrk_dealloc( jpi, jpj, fprds2d ) 4619 ENDIF 4620 IF( med_diag%OPALDISS%dgsave ) THEN 4621 CALL iom_put( "OPALDISS" , fsdiss2d ) 4622 CALL wrk_dealloc( jpi, jpj, fsdiss2d ) 4623 ENDIF 4624 IF( med_diag%GMIPn%dgsave ) THEN 4625 CALL iom_put( "GMIPn" , fgmipn2d ) 4626 CALL wrk_dealloc( jpi, jpj, fgmipn2d ) 4627 ENDIF 4628 IF( med_diag%GMID%dgsave ) THEN 4629 CALL iom_put( "GMID" , fgmid2d ) 4630 CALL wrk_dealloc( jpi, jpj, fgmid2d ) 4631 ENDIF 4632 IF( med_diag%MZMI%dgsave ) THEN 4633 CALL iom_put( "MZMI" , fdzmi2d ) 4634 CALL wrk_dealloc( jpi, jpj, fdzmi2d ) 4635 ENDIF 4636 IF( med_diag%GMEPN%dgsave ) THEN 4637 CALL iom_put( "GMEPN" , fgmepn2d ) 4638 CALL wrk_dealloc( jpi, jpj, fgmepn2d ) 4639 ENDIF 4640 IF( med_diag%GMEPD%dgsave ) THEN 4641 CALL iom_put( "GMEPD" , fgmepd2d ) 4642 CALL wrk_dealloc( jpi, jpj, fgmepd2d ) 4643 ENDIF 4644 IF( med_diag%GMEZMI%dgsave ) THEN 4645 CALL iom_put( "GMEZMI" , fgmezmi2d ) 4646 CALL wrk_dealloc( jpi, jpj, fgmezmi2d ) 4647 ENDIF 4648 IF( med_diag%GMED%dgsave ) THEN 4649 CALL iom_put( "GMED" , fgmed2d ) 4650 CALL wrk_dealloc( jpi, jpj, fgmed2d ) 4651 ENDIF 4652 IF( med_diag%MZME%dgsave ) THEN 4653 CALL iom_put( "MZME" , fdzme2d ) 4654 CALL wrk_dealloc( jpi, jpj, fdzme2d ) 4655 ENDIF 4656 ! IF( med_diag%DEXP%dgsave ) THEN 4657 ! CALL iom_put( "DEXP" , ftot_n ) 4658 ! ENDIF 4659 IF( med_diag%DETN%dgsave ) THEN 4660 CALL iom_put( "DETN" , fslown2d ) 4661 CALL wrk_dealloc( jpi, jpj, fslown2d ) 4662 ENDIF 4663 IF( med_diag%MDET%dgsave ) THEN 4664 CALL iom_put( "MDET" , fdd2d ) 4665 CALL wrk_dealloc( jpi, jpj, fdd2d ) 4666 ENDIF 4667 IF( med_diag%AEOLIAN%dgsave ) THEN 4668 CALL iom_put( "AEOLIAN" , ffetop2d ) 4669 CALL wrk_dealloc( jpi, jpj, ffetop2d ) 4670 ENDIF 4671 IF( med_diag%BENTHIC%dgsave ) THEN 4672 CALL iom_put( "BENTHIC" , ffebot2d ) 4673 CALL wrk_dealloc( jpi, jpj, ffebot2d ) 4674 ENDIF 4675 IF( med_diag%SCAVENGE%dgsave ) THEN 4676 CALL iom_put( "SCAVENGE" , ffescav2d ) 4677 CALL wrk_dealloc( jpi, jpj, ffescav2d ) 4678 ENDIF 4679 !! 4680 IF( med_diag%TOTREG_N%dgsave ) THEN 4681 CALL iom_put( "TOTREG_N" , fregen2d ) 4682 CALL wrk_dealloc( jpi, jpj, fregen2d ) 4683 ENDIF 4684 IF( med_diag%TOTRG_SI%dgsave ) THEN 4685 CALL iom_put( "TOTRG_SI" , fregensi2d ) 4686 CALL wrk_dealloc( jpi, jpj, fregensi2d ) 4687 ENDIF 4688 !! 4689 IF( med_diag%FASTN%dgsave ) THEN 4690 CALL iom_put( "FASTN" , ftempn2d ) 4691 CALL wrk_dealloc( jpi, jpj, ftempn2d ) 4692 ENDIF 4693 IF( med_diag%FASTSI%dgsave ) THEN 4694 CALL iom_put( "FASTSI" , ftempsi2d ) 4695 CALL wrk_dealloc( jpi, jpj, ftempsi2d ) 4696 ENDIF 4697 IF( med_diag%FASTFE%dgsave ) THEN 4698 CALL iom_put( "FASTFE" , ftempfe2d ) 4699 CALL wrk_dealloc( jpi, jpj, ftempfe2d ) 4700 ENDIF 4701 IF( med_diag%FASTC%dgsave ) THEN 4702 CALL iom_put( "FASTC" , ftempc2d ) 4703 CALL wrk_dealloc( jpi, jpj, ftempc2d ) 4704 ENDIF 4705 IF( med_diag%FASTCA%dgsave ) THEN 4706 CALL iom_put( "FASTCA" , ftempca2d ) 4707 CALL wrk_dealloc( jpi, jpj, ftempca2d ) 4708 ENDIF 4709 !! 4710 IF( med_diag%REMINN%dgsave ) THEN 4711 CALL iom_put( "REMINN" , freminn2d ) 4712 CALL wrk_dealloc( jpi, jpj, freminn2d ) 4713 ENDIF 4714 IF( med_diag%REMINSI%dgsave ) THEN 4715 CALL iom_put( "REMINSI" , freminsi2d ) 4716 CALL wrk_dealloc( jpi, jpj, freminsi2d ) 4717 ENDIF 4718 IF( med_diag%REMINFE%dgsave ) THEN 4719 CALL iom_put( "REMINFE" , freminfe2d ) 4720 CALL wrk_dealloc( jpi, jpj, freminfe2d ) 4721 ENDIF 4722 IF( med_diag%REMINC%dgsave ) THEN 4723 CALL iom_put( "REMINC" , freminc2d ) 4724 CALL wrk_dealloc( jpi, jpj, freminc2d ) 4725 ENDIF 4726 IF( med_diag%REMINCA%dgsave ) THEN 4727 CALL iom_put( "REMINCA" , freminca2d ) 4728 CALL wrk_dealloc( jpi, jpj, freminca2d ) 4729 ENDIF 4730 IF( med_diag%SEAFLRN%dgsave ) THEN 4731 CALL iom_put( "SEAFLRN" , fsedn ) 4732 ENDIF 4733 IF( med_diag%SEAFLRSI%dgsave ) THEN 4734 CALL iom_put( "SEAFLRSI" , fsedsi ) 4735 ENDIF 4736 IF( med_diag%SEAFLRFE%dgsave ) THEN 4737 CALL iom_put( "SEAFLRFE" , fsedfe ) 4738 ENDIF 4739 IF( med_diag%SEAFLRC%dgsave ) THEN 4740 CALL iom_put( "SEAFLRC" , fsedc ) 4741 ENDIF 4742 IF( med_diag%SEAFLRCA%dgsave ) THEN 4743 CALL iom_put( "SEAFLRCA" , fsedca ) 4744 ENDIF 4745 !! 4746 # if defined key_roam 4747 !! 4748 IF( med_diag%RIV_N%dgsave ) THEN 4749 CALL iom_put( "RIV_N" , rivn2d ) 4750 CALL wrk_dealloc( jpi, jpj, rivn2d ) 4751 ENDIF 4752 IF( med_diag%RIV_SI%dgsave ) THEN 4753 CALL iom_put( "RIV_SI" , rivsi2d ) 4754 CALL wrk_dealloc( jpi, jpj, rivsi2d ) 4755 ENDIF 4756 IF( med_diag%RIV_C%dgsave ) THEN 4757 CALL iom_put( "RIV_C" , rivc2d ) 4758 CALL wrk_dealloc( jpi, jpj, rivc2d ) 4759 ENDIF 4760 IF( med_diag%RIV_ALK%dgsave ) THEN 4761 CALL iom_put( "RIV_ALK" , rivalk2d ) 4762 CALL wrk_dealloc( jpi, jpj, rivalk2d ) 4763 ENDIF 4764 IF( med_diag%DETC%dgsave ) THEN 4765 CALL iom_put( "DETC" , fslowc2d ) 4766 CALL wrk_dealloc( jpi, jpj, fslowc2d ) 4767 ENDIF 4768 !! 4769 IF( med_diag%PN_LLOSS%dgsave ) THEN 4770 CALL iom_put( "PN_LLOSS" , fdpn22d ) 4771 CALL wrk_dealloc( jpi, jpj, fdpn22d ) 4772 ENDIF 4773 IF( med_diag%PD_LLOSS%dgsave ) THEN 4774 CALL iom_put( "PD_LLOSS" , fdpd22d ) 4775 CALL wrk_dealloc( jpi, jpj, fdpd22d ) 4776 ENDIF 4777 IF( med_diag%ZI_LLOSS%dgsave ) THEN 4778 CALL iom_put( "ZI_LLOSS" , fdzmi22d ) 4779 CALL wrk_dealloc( jpi, jpj, fdzmi22d ) 4780 ENDIF 4781 IF( med_diag%ZE_LLOSS%dgsave ) THEN 4782 CALL iom_put( "ZE_LLOSS" , fdzme22d ) 4783 CALL wrk_dealloc( jpi, jpj, fdzme22d ) 4784 ENDIF 4785 IF( med_diag%ZI_MES_N%dgsave ) THEN 4786 CALL iom_put( "ZI_MES_N" , zimesn2d ) 4787 CALL wrk_dealloc( jpi, jpj, zimesn2d ) 4788 ENDIF 4789 IF( med_diag%ZI_MES_D%dgsave ) THEN 4790 CALL iom_put( "ZI_MES_D" , zimesd2d ) 4791 CALL wrk_dealloc( jpi, jpj, zimesd2d ) 4792 ENDIF 4793 IF( med_diag%ZI_MES_C%dgsave ) THEN 4794 CALL iom_put( "ZI_MES_C" , zimesc2d ) 4795 CALL wrk_dealloc( jpi, jpj, zimesc2d ) 4796 ENDIF 4797 IF( med_diag%ZI_MESDC%dgsave ) THEN 4798 CALL iom_put( "ZI_MESDC" ,zimesdc2d ) 4799 CALL wrk_dealloc( jpi, jpj, zimesdc2d ) 4800 ENDIF 4801 IF( med_diag%ZI_EXCR%dgsave ) THEN 4802 CALL iom_put( "ZI_EXCR" , ziexcr2d ) 4803 CALL wrk_dealloc( jpi, jpj, ziexcr2d ) 4804 ENDIF 4805 IF( med_diag%ZI_RESP%dgsave ) THEN 4806 CALL iom_put( "ZI_RESP" , ziresp2d ) 4807 CALL wrk_dealloc( jpi, jpj, ziresp2d ) 4808 ENDIF 4809 IF( med_diag%ZI_GROW%dgsave ) THEN 4810 CALL iom_put( "ZI_GROW" , zigrow2d ) 4811 CALL wrk_dealloc( jpi, jpj, zigrow2d ) 4812 ENDIF 4813 IF( med_diag%ZE_MES_N%dgsave ) THEN 4814 CALL iom_put( "ZE_MES_N" , zemesn2d ) 4815 CALL wrk_dealloc( jpi, jpj, zemesn2d ) 4816 ENDIF 4817 IF( med_diag%ZE_MES_D%dgsave ) THEN 4818 CALL iom_put( "ZE_MES_D" , zemesd2d ) 4819 CALL wrk_dealloc( jpi, jpj, zemesd2d ) 4820 ENDIF 4821 IF( med_diag%ZE_MES_C%dgsave ) THEN 4822 CALL iom_put( "ZE_MES_C" , zemesc2d ) 4823 CALL wrk_dealloc( jpi, jpj, zemesc2d ) 4824 ENDIF 4825 IF( med_diag%ZE_MESDC%dgsave ) THEN 4826 CALL iom_put( "ZE_MESDC" , zemesdc2d ) 4827 CALL wrk_dealloc( jpi, jpj, zemesdc2d ) 4828 ENDIF 4829 IF( med_diag%ZE_EXCR%dgsave ) THEN 4830 CALL iom_put( "ZE_EXCR" , zeexcr2d ) 4831 CALL wrk_dealloc( jpi, jpj, zeexcr2d ) 4832 ENDIF 4833 IF( med_diag%ZE_RESP%dgsave ) THEN 4834 CALL iom_put( "ZE_RESP" , zeresp2d ) 4835 CALL wrk_dealloc( jpi, jpj, zeresp2d ) 4836 ENDIF 4837 IF( med_diag%ZE_GROW%dgsave ) THEN 4838 CALL iom_put( "ZE_GROW" , zegrow2d ) 4839 CALL wrk_dealloc( jpi, jpj, zegrow2d ) 4840 ENDIF 4841 IF( med_diag%MDETC%dgsave ) THEN 4842 CALL iom_put( "MDETC" , mdetc2d ) 4843 CALL wrk_dealloc( jpi, jpj, mdetc2d ) 4844 ENDIF 4845 IF( med_diag%GMIDC%dgsave ) THEN 4846 CALL iom_put( "GMIDC" , gmidc2d ) 4847 CALL wrk_dealloc( jpi, jpj, gmidc2d ) 4848 ENDIF 4849 IF( med_diag%GMEDC%dgsave ) THEN 4850 CALL iom_put( "GMEDC" , gmedc2d ) 4851 CALL wrk_dealloc( jpi, jpj, gmedc2d ) 4852 ENDIF 4853 IF( med_diag%IBEN_N%dgsave ) THEN 4854 CALL iom_put( "IBEN_N" , iben_n2d ) 4855 CALL wrk_dealloc( jpi, jpj, iben_n2d ) 4856 ENDIF 4857 IF( med_diag%IBEN_FE%dgsave ) THEN 4858 CALL iom_put( "IBEN_FE" , iben_fe2d ) 4859 CALL wrk_dealloc( jpi, jpj, iben_fe2d ) 4860 ENDIF 4861 IF( med_diag%IBEN_C%dgsave ) THEN 4862 CALL iom_put( "IBEN_C" , iben_c2d ) 4863 CALL wrk_dealloc( jpi, jpj, iben_c2d ) 4864 ENDIF 4865 IF( med_diag%IBEN_SI%dgsave ) THEN 4866 CALL iom_put( "IBEN_SI" , iben_si2d ) 4867 CALL wrk_dealloc( jpi, jpj, iben_si2d ) 4868 ENDIF 4869 IF( med_diag%IBEN_CA%dgsave ) THEN 4870 CALL iom_put( "IBEN_CA" , iben_ca2d ) 4871 CALL wrk_dealloc( jpi, jpj, iben_ca2d ) 4872 ENDIF 4873 IF( med_diag%OBEN_N%dgsave ) THEN 4874 CALL iom_put( "OBEN_N" , oben_n2d ) 4875 CALL wrk_dealloc( jpi, jpj, oben_n2d ) 4876 ENDIF 4877 IF( med_diag%OBEN_FE%dgsave ) THEN 4878 CALL iom_put( "OBEN_FE" , oben_fe2d ) 4879 CALL wrk_dealloc( jpi, jpj, oben_fe2d ) 4880 ENDIF 4881 IF( med_diag%OBEN_C%dgsave ) THEN 4882 CALL iom_put( "OBEN_C" , oben_c2d ) 4883 CALL wrk_dealloc( jpi, jpj, oben_c2d ) 4884 ENDIF 4885 IF( med_diag%OBEN_SI%dgsave ) THEN 4886 CALL iom_put( "OBEN_SI" , oben_si2d ) 4887 CALL wrk_dealloc( jpi, jpj, oben_si2d ) 4888 ENDIF 4889 IF( med_diag%OBEN_CA%dgsave ) THEN 4890 CALL iom_put( "OBEN_CA" , oben_ca2d ) 4891 CALL wrk_dealloc( jpi, jpj, oben_ca2d ) 4892 ENDIF 4893 IF( med_diag%SFR_OCAL%dgsave ) THEN 4894 CALL iom_put( "SFR_OCAL" , sfr_ocal2d ) 4895 CALL wrk_dealloc( jpi, jpj, sfr_ocal2d ) 4896 ENDIF 4897 IF( med_diag%SFR_OARG%dgsave ) THEN 4898 CALL iom_put( "SFR_OARG" , sfr_oarg2d ) 4899 CALL wrk_dealloc( jpi, jpj, sfr_oarg2d ) 4900 ENDIF 4901 IF( med_diag%LYSO_CA%dgsave ) THEN 4902 CALL iom_put( "LYSO_CA" , lyso_ca2d ) 4903 CALL wrk_dealloc( jpi, jpj, lyso_ca2d ) 4904 ENDIF 4905 # endif 4906 !! 4907 !! ** 3D diagnostics 4908 IF( med_diag%TPP3%dgsave ) THEN 4909 CALL iom_put( "TPP3" , tpp3d ) 4910 CALL wrk_dealloc( jpi, jpj, jpk, tpp3d ) 4911 ENDIF 4912 IF( med_diag%DETFLUX3%dgsave ) THEN 4913 CALL iom_put( "DETFLUX3" , detflux3d ) 4914 CALL wrk_dealloc( jpi, jpj, jpk, detflux3d ) 4915 ENDIF 4916 IF( med_diag%REMIN3N%dgsave ) THEN 4917 CALL iom_put( "REMIN3N" , remin3dn ) 4918 CALL wrk_dealloc( jpi, jpj, jpk, remin3dn ) 4919 ENDIF 4920 # if defined key_roam 4921 IF( med_diag%PH3%dgsave ) THEN 4922 CALL iom_put( "PH3" , f3_pH ) 4923 ENDIF 4924 IF( med_diag%OM_CAL3%dgsave ) THEN 4925 CALL iom_put( "OM_CAL3" , f3_omcal ) 4926 ENDIF 4927 !! 4928 !! AXY (09/11/16): 2D CMIP6 diagnostics 4929 IF( med_diag%INTDISSIC%dgsave ) THEN 4930 CALL iom_put( "INTDISSIC" , intdissic ) 4931 CALL wrk_dealloc( jpi, jpj, intdissic ) 4932 ENDIF 4933 IF( med_diag%INTDISSIN%dgsave ) THEN 4934 CALL iom_put( "INTDISSIN" , intdissin ) 4935 CALL wrk_dealloc( jpi, jpj, intdissin ) 4936 ENDIF 4937 IF( med_diag%INTDISSISI%dgsave ) THEN 4938 CALL iom_put( "INTDISSISI" , intdissisi ) 4939 CALL wrk_dealloc( jpi, jpj, intdissisi ) 4940 ENDIF 4941 IF( med_diag%INTTALK%dgsave ) THEN 4942 CALL iom_put( "INTTALK" , inttalk ) 4943 CALL wrk_dealloc( jpi, jpj, inttalk ) 4944 ENDIF 4945 IF( med_diag%O2min%dgsave ) THEN 4946 CALL iom_put( "O2min" , o2min ) 4947 CALL wrk_dealloc( jpi, jpj, o2min ) 4948 ENDIF 4949 IF( med_diag%ZO2min%dgsave ) THEN 4950 CALL iom_put( "ZO2min" , zo2min ) 4951 CALL wrk_dealloc( jpi, jpj, zo2min ) 4952 ENDIF 4953 IF( med_diag%FBDDTALK%dgsave ) THEN 4954 CALL iom_put( "FBDDTALK" , fbddtalk ) 4955 CALL wrk_dealloc( jpi, jpj, fbddtalk ) 4956 ENDIF 4957 IF( med_diag%FBDDTDIC%dgsave ) THEN 4958 CALL iom_put( "FBDDTDIC" , fbddtdic ) 4959 CALL wrk_dealloc( jpi, jpj, fbddtdic ) 4960 ENDIF 4961 IF( med_diag%FBDDTDIFE%dgsave ) THEN 4962 CALL iom_put( "FBDDTDIFE" , fbddtdife ) 4963 CALL wrk_dealloc( jpi, jpj, fbddtdife ) 4964 ENDIF 4965 IF( med_diag%FBDDTDIN%dgsave ) THEN 4966 CALL iom_put( "FBDDTDIN" , fbddtdin ) 4967 CALL wrk_dealloc( jpi, jpj, fbddtdin ) 4968 ENDIF 4969 IF( med_diag%FBDDTDISI%dgsave ) THEN 4970 CALL iom_put( "FBDDTDISI" , fbddtdisi ) 4971 CALL wrk_dealloc( jpi, jpj, fbddtdisi ) 4972 ENDIF 4973 !! 4974 !! AXY (09/11/16): 3D CMIP6 diagnostics 4975 IF( med_diag%TPPD3%dgsave ) THEN 4976 CALL iom_put( "TPPD3" , tppd3 ) 4977 CALL wrk_dealloc( jpi, jpj, jpk, tppd3 ) 4978 ENDIF 4979 IF( med_diag%BDDTALK3%dgsave ) THEN 4980 CALL iom_put( "BDDTALK3" , bddtalk3 ) 4981 CALL wrk_dealloc( jpi, jpj, jpk, bddtalk3 ) 4982 ENDIF 4983 IF( med_diag%BDDTDIC3%dgsave ) THEN 4984 CALL iom_put( "BDDTDIC3" , bddtdic3 ) 4985 CALL wrk_dealloc( jpi, jpj, jpk, bddtdic3 ) 4986 ENDIF 4987 IF( med_diag%BDDTDIFE3%dgsave ) THEN 4988 CALL iom_put( "BDDTDIFE3" , bddtdife3 ) 4989 CALL wrk_dealloc( jpi, jpj, jpk, bddtdife3 ) 4990 ENDIF 4991 IF( med_diag%BDDTDIN3%dgsave ) THEN 4992 CALL iom_put( "BDDTDIN3" , bddtdin3 ) 4993 CALL wrk_dealloc( jpi, jpj, jpk, bddtdin3 ) 4994 ENDIF 4995 IF( med_diag%BDDTDISI3%dgsave ) THEN 4996 CALL iom_put( "BDDTDISI3" , bddtdisi3 ) 4997 CALL wrk_dealloc( jpi, jpj, jpk, bddtdisi3 ) 4998 ENDIF 4999 IF( med_diag%FD_NIT3%dgsave ) THEN 5000 CALL iom_put( "FD_NIT3" , fd_nit3 ) 5001 CALL wrk_dealloc( jpi, jpj, jpk, fd_nit3 ) 5002 ENDIF 5003 IF( med_diag%FD_SIL3%dgsave ) THEN 5004 CALL iom_put( "FD_SIL3" , fd_sil3 ) 5005 CALL wrk_dealloc( jpi, jpj, jpk, fd_sil3 ) 5006 ENDIF 5007 IF( med_diag%FD_CAL3%dgsave ) THEN 5008 CALL iom_put( "FD_CAL3" , fd_cal3 ) 5009 CALL wrk_dealloc( jpi, jpj, jpk, fd_cal3 ) 5010 ENDIF 5011 IF( med_diag%FD_CAR3%dgsave ) THEN 5012 CALL iom_put( "FD_CAR3" , fd_car3 ) 5013 CALL wrk_dealloc( jpi, jpj, jpk, fd_car3 ) 5014 ENDIF 5015 IF( med_diag%CO33%dgsave ) THEN 5016 CALL iom_put( "CO33" , f3_co3 ) 5017 ENDIF 5018 IF( med_diag%CO3SATARAG3%dgsave ) THEN 5019 CALL iom_put( "CO3SATARAG3" , f3_omarg ) 5020 ENDIF 5021 IF( med_diag%CO3SATCALC3%dgsave ) THEN 5022 CALL iom_put( "CO3SATCALC3" , f3_omcal ) 5023 ENDIF 5024 IF( med_diag%EXPC3%dgsave ) THEN 5025 CALL iom_put( "EXPC3" , expc3 ) 5026 CALL wrk_dealloc( jpi, jpj, jpk, expc3 ) 5027 ENDIF 5028 IF( med_diag%EXPN3%dgsave ) THEN 5029 CALL iom_put( "EXPN3" , expn3 ) 5030 CALL wrk_dealloc( jpi, jpj, jpk, expn3 ) 5031 ENDIF 5032 IF( med_diag%DCALC3%dgsave ) THEN 5033 CALL iom_put( "DCALC3" , dcalc3 ) 5034 CALL wrk_dealloc( jpi, jpj, jpk, dcalc3 ) 5035 ENDIF 5036 IF( med_diag%FEDISS3%dgsave ) THEN 5037 CALL iom_put( "FEDISS3" , fediss3 ) 5038 CALL wrk_dealloc( jpi, jpj, jpk, fediss3 ) 5039 ENDIF 5040 IF( med_diag%FESCAV3%dgsave ) THEN 5041 CALL iom_put( "FESCAV3" , fescav3 ) 5042 CALL wrk_dealloc( jpi, jpj, jpk, fescav3 ) 5043 ENDIF 5044 IF( med_diag%MIGRAZP3%dgsave ) THEN 5045 CALL iom_put( "MIGRAZP3" , migrazp3 ) 5046 CALL wrk_dealloc( jpi, jpj, jpk, migrazp3 ) 5047 ENDIF 5048 IF( med_diag%MIGRAZD3%dgsave ) THEN 5049 CALL iom_put( "MIGRAZD3" , migrazd3 ) 5050 CALL wrk_dealloc( jpi, jpj, jpk, migrazd3 ) 5051 ENDIF 5052 IF( med_diag%MEGRAZP3%dgsave ) THEN 5053 CALL iom_put( "MEGRAZP3" , megrazp3 ) 5054 CALL wrk_dealloc( jpi, jpj, jpk, megrazp3 ) 5055 ENDIF 5056 IF( med_diag%MEGRAZD3%dgsave ) THEN 5057 CALL iom_put( "MEGRAZD3" , megrazd3 ) 5058 CALL wrk_dealloc( jpi, jpj, jpk, megrazd3 ) 5059 ENDIF 5060 IF( med_diag%MEGRAZZ3%dgsave ) THEN 5061 CALL iom_put( "MEGRAZZ3" , megrazz3 ) 5062 CALL wrk_dealloc( jpi, jpj, jpk, megrazz3 ) 5063 ENDIF 5064 IF( med_diag%O2SAT3%dgsave ) THEN 5065 CALL iom_put( "O2SAT3" , o2sat3 ) 5066 CALL wrk_dealloc( jpi, jpj, jpk, o2sat3 ) 5067 ENDIF 5068 IF( med_diag%PBSI3%dgsave ) THEN 5069 CALL iom_put( "PBSI3" , pbsi3 ) 5070 CALL wrk_dealloc( jpi, jpj, jpk, pbsi3 ) 5071 ENDIF 5072 IF( med_diag%PCAL3%dgsave ) THEN 5073 CALL iom_put( "PCAL3" , pcal3 ) 5074 CALL wrk_dealloc( jpi, jpj, jpk, pcal3 ) 5075 ENDIF 5076 IF( med_diag%REMOC3%dgsave ) THEN 5077 CALL iom_put( "REMOC3" , remoc3 ) 5078 CALL wrk_dealloc( jpi, jpj, jpk, remoc3 ) 5079 ENDIF 5080 IF( med_diag%PNLIMJ3%dgsave ) THEN 5081 CALL iom_put( "PNLIMJ3" , pnlimj3 ) 5082 CALL wrk_dealloc( jpi, jpj, jpk, pnlimj3 ) 5083 ENDIF 5084 IF( med_diag%PNLIMN3%dgsave ) THEN 5085 CALL iom_put( "PNLIMN3" , pnlimn3 ) 5086 CALL wrk_dealloc( jpi, jpj, jpk, pnlimn3 ) 5087 ENDIF 5088 IF( med_diag%PNLIMFE3%dgsave ) THEN 5089 CALL iom_put( "PNLIMFE3" , pnlimfe3 ) 5090 CALL wrk_dealloc( jpi, jpj, jpk, pnlimfe3 ) 5091 ENDIF 5092 IF( med_diag%PDLIMJ3%dgsave ) THEN 5093 CALL iom_put( "PDLIMJ3" , pdlimj3 ) 5094 CALL wrk_dealloc( jpi, jpj, jpk, pdlimj3 ) 5095 ENDIF 5096 IF( med_diag%PDLIMN3%dgsave ) THEN 5097 CALL iom_put( "PDLIMN3" , pdlimn3 ) 5098 CALL wrk_dealloc( jpi, jpj, jpk, pdlimn3 ) 5099 ENDIF 5100 IF( med_diag%PDLIMFE3%dgsave ) THEN 5101 CALL iom_put( "PDLIMFE3" , pdlimfe3 ) 5102 CALL wrk_dealloc( jpi, jpj, jpk, pdlimfe3 ) 5103 ENDIF 5104 IF( med_diag%PDLIMSI3%dgsave ) THEN 5105 CALL iom_put( "PDLIMSI3" , pdlimsi3 ) 5106 CALL wrk_dealloc( jpi, jpj, jpk, pdlimsi3 ) 5107 ENDIF 6046 CALL iom_put( "EXPN3" , expn3 ) 6047 CALL wrk_dealloc( jpi, jpj, jpk, expn3 ) 6048 ENDIF 6049 IF( med_diag%DCALC3%dgsave ) THEN 6050 CALL iom_put( "DCALC3" , dcalc3 ) 6051 CALL wrk_dealloc( jpi, jpj, jpk, dcalc3 ) 6052 ENDIF 6053 IF( med_diag%FEDISS3%dgsave ) THEN 6054 CALL iom_put( "FEDISS3" , fediss3 ) 6055 CALL wrk_dealloc( jpi, jpj, jpk, fediss3 ) 6056 ENDIF 6057 IF( med_diag%FESCAV3%dgsave ) THEN 6058 CALL iom_put( "FESCAV3" , fescav3 ) 6059 CALL wrk_dealloc( jpi, jpj, jpk, fescav3 ) 6060 ENDIF 6061 IF( med_diag%MIGRAZP3%dgsave ) THEN 6062 CALL iom_put( "MIGRAZP3" , migrazp3 ) 6063 CALL wrk_dealloc( jpi, jpj, jpk, migrazp3 ) 6064 ENDIF 6065 IF( med_diag%MIGRAZD3%dgsave ) THEN 6066 CALL iom_put( "MIGRAZD3" , migrazd3 ) 6067 CALL wrk_dealloc( jpi, jpj, jpk, migrazd3 ) 6068 ENDIF 6069 IF( med_diag%MEGRAZP3%dgsave ) THEN 6070 CALL iom_put( "MEGRAZP3" , megrazp3 ) 6071 CALL wrk_dealloc( jpi, jpj, jpk, megrazp3 ) 6072 ENDIF 6073 IF( med_diag%MEGRAZD3%dgsave ) THEN 6074 CALL iom_put( "MEGRAZD3" , megrazd3 ) 6075 CALL wrk_dealloc( jpi, jpj, jpk, megrazd3 ) 6076 ENDIF 6077 IF( med_diag%MEGRAZZ3%dgsave ) THEN 6078 CALL iom_put( "MEGRAZZ3" , megrazz3 ) 6079 CALL wrk_dealloc( jpi, jpj, jpk, megrazz3 ) 6080 ENDIF 6081 IF( med_diag%O2SAT3%dgsave ) THEN 6082 CALL iom_put( "O2SAT3" , o2sat3 ) 6083 CALL wrk_dealloc( jpi, jpj, jpk, o2sat3 ) 6084 ENDIF 6085 IF( med_diag%PBSI3%dgsave ) THEN 6086 CALL iom_put( "PBSI3" , pbsi3 ) 6087 CALL wrk_dealloc( jpi, jpj, jpk, pbsi3 ) 6088 ENDIF 6089 IF( med_diag%PCAL3%dgsave ) THEN 6090 CALL iom_put( "PCAL3" , pcal3 ) 6091 CALL wrk_dealloc( jpi, jpj, jpk, pcal3 ) 6092 ENDIF 6093 IF( med_diag%REMOC3%dgsave ) THEN 6094 CALL iom_put( "REMOC3" , remoc3 ) 6095 CALL wrk_dealloc( jpi, jpj, jpk, remoc3 ) 6096 ENDIF 6097 IF( med_diag%PNLIMJ3%dgsave ) THEN 6098 CALL iom_put( "PNLIMJ3" , pnlimj3 ) 6099 CALL wrk_dealloc( jpi, jpj, jpk, pnlimj3 ) 6100 ENDIF 6101 IF( med_diag%PNLIMN3%dgsave ) THEN 6102 CALL iom_put( "PNLIMN3" , pnlimn3 ) 6103 CALL wrk_dealloc( jpi, jpj, jpk, pnlimn3 ) 6104 ENDIF 6105 IF( med_diag%PNLIMFE3%dgsave ) THEN 6106 CALL iom_put( "PNLIMFE3" , pnlimfe3 ) 6107 CALL wrk_dealloc( jpi, jpj, jpk, pnlimfe3 ) 6108 ENDIF 6109 IF( med_diag%PDLIMJ3%dgsave ) THEN 6110 CALL iom_put( "PDLIMJ3" , pdlimj3 ) 6111 CALL wrk_dealloc( jpi, jpj, jpk, pdlimj3 ) 6112 ENDIF 6113 IF( med_diag%PDLIMN3%dgsave ) THEN 6114 CALL iom_put( "PDLIMN3" , pdlimn3 ) 6115 CALL wrk_dealloc( jpi, jpj, jpk, pdlimn3 ) 6116 ENDIF 6117 IF( med_diag%PDLIMFE3%dgsave ) THEN 6118 CALL iom_put( "PDLIMFE3" , pdlimfe3 ) 6119 CALL wrk_dealloc( jpi, jpj, jpk, pdlimfe3 ) 6120 ENDIF 6121 IF( med_diag%PDLIMSI3%dgsave ) THEN 6122 CALL iom_put( "PDLIMSI3" , pdlimsi3 ) 6123 CALL wrk_dealloc( jpi, jpj, jpk, pdlimsi3 ) 6124 ENDIF 6125 5108 6126 # endif 5109 6127 5110 CALL wrk_dealloc( jpi, jpj, zw2d ) 6128 CALL wrk_dealloc( jpi, jpj, zw2d ) 6129 6130 ENDIF ! end of ln_diatrc option 6131 6132 # if defined key_trc_diabio 6133 !! Lateral boundary conditions on trcbio 6134 DO jn=1,jp_medusa_trd 6135 CALL lbc_lnk(trbio(:,:,1,jn),'T',1. ) 6136 ENDDO 6137 # endif 5111 6138 5112 6139 # if defined key_debug_medusa 5113 IF(lwp) WRITE(numout,*) ' MEDUSA exiting trc_bio_medusa at kt =', kt5114 CALL flush(numout)5115 # endif 5116 5117 END SUBROUTINE trc_bio_medusa6140 IF(lwp) WRITE(numout,*) ' MEDUSA exiting trc_bio_medusa at kt =', kt 6141 CALL flush(numout) 6142 # endif 6143 6144 END SUBROUTINE trc_bio_medusa 5118 6145 5119 6146 #else -
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcdms_medusa.F90
r7894 r8074 38 38 !======================================================================= 39 39 ! 40 SUBROUTINE trc_dms_medusa( chn, chd, mld, xqsr, x lim, & !! inputs40 SUBROUTINE trc_dms_medusa( chn, chd, mld, xqsr, xdin, & !! inputs 41 41 & dms_andr, dms_simo, dms_aran, dms_hall ) !! outputs 42 42 ! … … 75 75 !! to the atmosphere in trc_bio_medusa 76 76 !! 77 !! AXY (28/03/17): replace DIN input with DIN limitation input78 !! to resolve issue with fixed DIN uptake half-79 !! saturation; trc_bio_medusa has corresponding80 !! change to calculate DIN limitation term81 !!82 77 !======================================================================= 83 78 … … 88 83 REAL(wp), INTENT( in ) :: mld !! mix layer depth (m) 89 84 REAL(wp), INTENT( in ) :: xqsr !! surface irradiance (W/m2) 90 REAL(wp), INTENT( in ) :: x lim !! surface DIN limitation(mmol N/m3)85 REAL(wp), INTENT( in ) :: xdin !! surface DIN (mmol N/m3) 91 86 REAL(wp), INTENT( inout ) :: dms_andr !! DMS surface concentration (nmol/L) 92 87 REAL(wp), INTENT( inout ) :: dms_simo !! DMS surface concentration (nmol/L) … … 114 109 !! done properly; perhaps even scaled with the proportion 115 110 !! of diatoms and non-diatoms) 116 !! Qterm = xdin / (xdin + 0.5) 117 !! AXY (28/03/17): replace DIN with DIN limitation 118 Qterm = xlim 111 Qterm = xdin / (xdin + 0.5) 119 112 fq1 = log10(CHL * Jterm * Qterm) 120 113 if (fq1 > 1.72) then -
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90
r7894 r8074 12 12 !! - ! 2015-11 (J. Palmieri) added iom_use for diags 13 13 !! - ! 2016-11 (A. Yool) updated diags for CMIP6 14 !! - ! 2017-03 (A. Yool) minor tidy15 14 !!---------------------------------------------------------------------- 16 15 #if defined key_medusa … … 68 67 ! 69 68 NAMELIST/natbio/ xxi,xaln,xald,jphy,xvpn,xvpd, & 70 & xsin0,xnsi0,xuif,jliebig, xq10, &69 & xsin0,xnsi0,xuif,jliebig, jq10, & 71 70 & xthetam,xthetamd,xnln,xnld,xsld,xfln,xfld, & 72 71 & xgmi,xgme,xkmi,xkme,xphi,xbetan,xbetac,xkc, & … … 137 136 # endif 138 137 139 !! AXY (06/04/17): can this next section be deleted? I think it can 140 IF( ( .NOT.lk_iomput .AND. ln_diatrc ) .OR. ( ln_diatrc .AND. lk_medusa ) ) THEN 138 IF( ( .NOT.lk_iomput .AND. ln_diatrc ) .OR. ( ln_diatrc .AND. lk_medusa ) ) THEN 141 139 ! 142 140 ! Namelist nammeddia … … 223 221 ! ------------------------------------------- 224 222 225 !! Primary production and chl related quantities 226 xxi = 0. !! conversion factor from gC to mmolN 227 xaln = 0. !! Chl-a specific initial slope of P-I curve for non-diatoms 228 xald = 0. !! Chl-a specific initial slope of P-I curve for diatoms 229 jphy = 0 !! phytoplankton T-dependent growth switch 230 xvpn = 0. !! maximum growth rate for non-diatoms 231 xvpd = 0. !! maximum growth rate for diatoms 232 xthetam = 0. !! maximum Chl to C ratio for non-diatoms 233 xthetamd = 0. !! maximum Chl to C ratio for diatoms 234 !! 235 !! Diatom silicon parameters 236 xsin0 = 0. !! minimum diatom Si:N ratio 237 xnsi0 = 0. !! minimum diatom N:Si ratio 238 xuif = 0. !! hypothetical growth ratio at infinite Si:N ratio 239 !! 240 !! Nutrient limitation 241 jliebig = 0 !! Liebig nutrient uptake switch 242 xq10 = 0. !! specific Q10 value (if jphy = 2) 243 xnln = 0. !! half-sat constant for DIN uptake by non-diatoms 244 xnld = 0. !! half-sat constant for DIN uptake by diatoms 245 xsld = 0. !! half-sat constant for Si uptake by diatoms 246 xfln = 0. !! half-sat constant for Fe uptake by non-datoms 247 xfld = 0. !! half-sat constant for Fe uptake by diatoms 248 !! 249 !! Grazing 250 xgmi = 0. !! microzoo maximum growth rate 251 xgme = 0. !! mesozoo maximum growth rate 252 xkmi = 0. !! microzoo grazing half-sat parameter 253 xkme = 0. !! mesozoo grazing half-sat parameter 254 xphi = 0. !! micro/mesozoo grazing inefficiency 255 xbetan = 0. !! micro/mesozoo N assimilation efficiency 256 xbetac = 0. !! micro/mesozoo C assimilation efficiency 257 xkc = 0. !! micro/mesozoo net C growth efficiency 258 xpmipn = 0. !! grazing preference of microzoo for non-diatoms 259 xpmid = 0. !! grazing preference of microzoo for diatoms 260 xpmepn = 0. !! grazing preference of mesozoo for non-diatoms 261 xpmepd = 0. !! grazing preference of mesozoo for diatoms 262 xpmezmi = 0. !! grazing preference of mesozoo for microzoo 263 xpmed = 0. !! grazing preference of mesozoo for detritus 264 !! 265 !! Metabolic losses 266 xmetapn = 0. !! non-diatom metabolic loss rate 267 xmetapd = 0. !! diatom metabolic loss rate 268 xmetazmi = 0. !! microzoo metabolic loss rate 269 xmetazme = 0. !! mesozoo metabolic loss rate 270 !! 271 !! Mortality/Remineralisation 272 jmpn = 0 !! non-diatom mortality functional form 273 xmpn = 0. !! non-diatom mortality rate 274 xkphn = 0. !! non-diatom mortality half-sat constant 275 jmpd = 0 !! diatom mortality functional form 276 xmpd = 0. !! diatom mortality rate 277 xkphd = 0. !! diatom mortality half-sat constant 278 jmzmi = 0 !! microzoo mortality functional form 279 xmzmi = 0. !! microzoo mortality rate 280 xkzmi = 0. !! microzoo mortality half-sat constant 281 jmzme = 0 !! mesozoo mortality functional form 282 xmzme = 0. !! mesozoo mortality rate 283 xkzme = 0. !! mesozoo mortality half-sat constant 284 !! 285 !! Remineralisation 286 jmd = 0 !! detritus T-dependent remineralisation switch 287 jsfd = 0 !! accelerate seafloor detritus remin. switch 288 xmd = 0. !! detrital nitrogen remineralisation rate 289 xmdc = 0. !! detrital carbon remineralisation rate 290 !! 291 !! Stochiometric ratios 292 xthetapn = 0. !! non-diatom C:N ratio 293 xthetapd = 0. !! diatom C:N ratio 294 xthetazmi = 0. !! microzoo C:N ratio 295 xthetazme = 0. !! mesozoo C:N ratio 296 xthetad = 0. !! detritus C:N ratio (MEDUSA-1 only) 297 xrfn = 0. !! phytoplankton Fe:N ratio 298 xrsn = 0. !! diatom Si:N ratio (NOT USED HERE; LOBSTER ARTIFACT) 299 !! 300 !! Iron parameters 301 jiron = 0 !! iron scavenging submodel switch 302 xfe_mass = 0. !! iron atomic mass 303 xfe_sol = 0. !! aeolian iron solubility 304 xfe_sed = 0. !! sediment iron input 305 xLgT = 0. !! total ligand concentration (umol/m3) 306 xk_FeL = 0. !! dissociation constant for (Fe + L) 307 xk_sc_Fe = 0. !! scavenging rate of "free" iron 308 !! 309 !! Fast-sinking detritus parameters 310 jexport = 0 !! fast detritus remineralisation switch 311 jfdfate = 0 !! fate of fast detritus at seafloor switch 312 jrratio = 0 !! rain ratio switch 313 jocalccd = 0 !! CCD switch 314 xridg_r0 = 0. !! Ridgwell rain ratio coefficient 315 xfdfrac1 = 0. !! fast-sinking fraction of diatom nat. mort. losses 316 xfdfrac2 = 0. !! fast-sinking fraction of meszooplankton mort. losses 317 xfdfrac3 = 0. !! fast-sinking fraction of diatom silicon grazing losses 318 xcaco3a = 0. !! polar (high latitude) CaCO3 fraction 319 xcaco3b = 0. !! equatorial (low latitude) CaCO3 fraction 320 xmassc = 0. !! organic C mass:mole ratio, C106 H175 O40 N16 P1 321 xmassca = 0. !! calcium carbonate mass:mole ratio, CaCO3 322 xmasssi = 0. !! biogenic silicon mass:mole ratio, (H2SiO3)n 323 xprotca = 0. !! calcium carbonate protection ratio 324 xprotsi = 0. !! biogenic silicon protection ratio 325 xfastc = 0. !! organic C remineralisation length scale 326 xfastca = 0. !! calcium carbonate dissolution length scale 327 xfastsi = 0. !! biogenic silicon dissolution length scale 328 !! 329 !! Benthic 330 jorgben = 0 !! does organic detritus go to the benthos? 331 jinorgben = 0 !! does inorganic detritus go to the benthos? 332 xsedn = 0. !! organic nitrogen sediment remineralisation rate 333 xsedfe = 0. !! organic iron sediment remineralisation rate 334 xsedsi = 0. !! inorganic silicon sediment dissolution rate 335 xsedc = 0. !! organic carbon sediment remineralisation rate 336 xsedca = 0. !! inorganic carbon sediment dissolution rate 337 xburial = 0. !! burial rate of seafloor detritus 338 !! 339 !! Riverine inputs 340 jriver_n = 0 !! riverine N input? 341 jriver_si = 0 !! riverine Si input? 342 jriver_c = 0 !! riverine C input? 343 jriver_alk = 0 !! riverine alkalinity input? 344 jriver_dep = 1 !! depth of riverine input? 345 !! 346 !! Miscellaneous 347 xsdiss = 0. !! diatom frustule dissolution rate 348 !! 349 !! Gravitational sinking 350 vsed = 0. !! detritus gravitational sinking rate 351 xhr = 0. !! coeff for Martin's remineralisation profile (LOBSTER) 352 !! 353 !! Additional parameters 354 sedlam = 0. !! time coeff of POC in sediments (LOBSTER) 355 sedlostpoc = 0. !! sediment geol loss for POC (LOBSTER) 356 jpkb = 0. !! vertical layer for diagnostic of the vertical flux (LOBSTER) 357 !! 358 !! UKESM1 - new DMS parameters !! Jpalm 359 jdms = 0 !! include dms diagnostics 360 jdms_input = 0 !! use instant (0) or diel-avg (1) inputs 361 jdms_model = 0 !! choice of DMS model passed to atmosphere 362 !! 1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL 223 xxi = 0. 224 xaln = 0. 225 xald = 0. 226 jphy = 0 227 xvpn = 0. 228 xvpd = 0. 229 xthetam = 0. 230 xthetamd = 0. 231 !! 232 xsin0 = 0. 233 xnsi0 = 0. 234 xuif = 0. 235 !! 236 jliebig = 0 237 jq10 = 0. 238 xnln = 0. 239 xnld = 0. 240 xsld = 0. 241 xfln = 0. 242 xfld = 0. 243 !! 244 xgmi = 0. 245 xgme = 0. 246 xkmi = 0. 247 xkme = 0. 248 xphi = 0. 249 xbetan = 0. 250 xbetac = 0. 251 xkc = 0. 252 xpmipn = 0. 253 xpmid = 0. 254 xpmepn = 0. 255 xpmepd = 0. 256 xpmezmi = 0. 257 xpmed = 0. 258 !! 259 xmetapn = 0. 260 xmetapd = 0. 261 xmetazmi = 0. 262 xmetazme = 0. 263 !! 264 jmpn = 0 265 xmpn = 0. 266 xkphn = 0. 267 jmpd = 0 268 xmpd = 0. 269 xkphd = 0. 270 jmzmi = 0 271 xmzmi = 0. 272 xkzmi = 0. 273 jmzme = 0 274 xmzme = 0. 275 xkzme = 0. 276 !! 277 jmd = 0 278 jsfd = 0 279 xmd = 0. 280 xmdc = 0. 281 !! 282 xthetapn = 0. 283 xthetapd = 0. 284 xthetazmi = 0. 285 xthetazme = 0. 286 xthetad = 0. 287 xrfn = 0. 288 xrsn = 0. !: (NOT USED HERE; RETAINED FOR LOBSTER) 289 !! 290 jiron = 0 291 xfe_mass = 0. 292 xfe_sol = 0. 293 xfe_sed = 0. 294 xLgT = 0. 295 xk_FeL = 0. 296 xk_sc_Fe = 0. 297 !! 298 jexport = 0 299 jfdfate = 0 300 jrratio = 0 301 jocalccd = 0 302 xridg_r0 = 0. 303 xfdfrac1 = 0. 304 xfdfrac2 = 0. 305 xfdfrac3 = 0. 306 xcaco3a = 0. 307 xcaco3b = 0. 308 xmassc = 0. 309 xmassca = 0. 310 xmasssi = 0. 311 xprotca = 0. 312 xprotsi = 0. 313 xfastc = 0. 314 xfastca = 0. 315 xfastsi = 0. 316 !! 317 jorgben = 0 318 jinorgben = 0 319 xsedn = 0. 320 xsedfe = 0. 321 xsedsi = 0. 322 xsedc = 0. 323 xsedca = 0. 324 xburial = 0. 325 !! 326 jriver_n = 0 327 jriver_si = 0 328 jriver_c = 0 329 jriver_alk = 0 330 jriver_dep = 1 331 !! 332 xsdiss = 0. 333 !! 334 vsed = 0. 335 xhr = 0. 336 !! 337 sedlam = 0. 338 sedlostpoc = 0. 339 jpkb = 0. 340 jdms = 0 341 jdms_input = 0 342 jdms_model = 0 363 343 364 344 !REWIND(numnatm) 365 345 !READ(numnatm,natbio) 366 ! Namelist natbio 367 ! ------------------- 368 REWIND( numnatp_ref ) ! Namelist natbio in reference namelist : MEDUSA diagnostics 369 READ ( numnatp_ref, natbio, IOSTAT = ios, ERR = 903) 370 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in reference namelist', lwp ) 371 372 REWIND( numnatp_cfg ) ! Namelist natbio in configuration namelist : MEDUSA diagnostics 373 READ ( numnatp_cfg, natbio, IOSTAT = ios, ERR = 904 ) 374 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in configuration namelist', lwp ) 375 IF(lwm) WRITE ( numonp, natbio ) 376 346 ! Namelist natbio 347 ! ------------------- 348 REWIND( numnatp_ref ) ! Namelist natbio in reference namelist : MEDUSA diagnostics 349 READ ( numnatp_ref, natbio, IOSTAT = ios, ERR = 903) 350 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in reference namelist', lwp ) 351 352 REWIND( numnatp_cfg ) ! Namelist natbio in configuration namelist : MEDUSA diagnostics 353 READ ( numnatp_cfg, natbio, IOSTAT = ios, ERR = 904 ) 354 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natbio in configuration namelist', lwp ) 355 IF(lwm) WRITE ( numonp, natbio ) 356 357 !! Primary production and chl related quantities 358 !! xxi : conversion factor from gC to mmolN 359 !! xaln : Chl-a specific initial slope of P-I curve for non-diatoms 360 !! xald : Chl-a specific initial slope of P-I curve for diatoms 361 !! jphy : phytoplankton T-dependent growth switch 362 !! xvpn : maximum growth rate for non-diatoms 363 !! xvpd : maximum growth rate for diatoms 364 !! xthetam : maximum Chl to C ratio for non-diatoms 365 !! xthetamd : maximum Chl to C ratio for diatoms 366 !! 367 !! Diatom silicon parameters 368 !! xsin0 : minimum diatom Si:N ratio 369 !! xnsi0 : minimum diatom N:Si ratio 370 !! xuif : hypothetical growth ratio at infinite Si:N ratio 371 !! 372 !! Nutrient limitation 373 !! jliebig : Liebig nutrient uptake switch 374 !! xnln : half-sat constant for DIN uptake by non-diatoms 375 !! xnld : half-sat constant for DIN uptake by diatoms 376 !! xsl : half-sat constant for Si uptake by diatoms 377 !! xfld : half-sat constant for Fe uptake by diatoms 378 !! xfln : half-sat constant for Fe uptake by non-datoms 379 !! 380 !! Grazing 381 !! xgmi : microzoo maximum growth rate 382 !! xgme : mesozoo maximum growth rate 383 !! xkmi : microzoo grazing half-sat parameter 384 !! xkme : mesozoo grazing half-sat parameter 385 !! xphi : micro/mesozoo grazing inefficiency 386 !! xbetan : micro/mesozoo N assimilation efficiency 387 !! xbetac : micro/mesozoo C assimilation efficiency 388 !! xkc : micro/mesozoo net C growth efficiency 389 !! xpmipn : grazing preference of microzoo for non-diatoms 390 !! xpmid : grazing preference of microzoo for diatoms 391 !! xpmepn : grazing preference of mesozoo for non-diatoms 392 !! xpmepd : grazing preference of mesozoo for diatoms 393 !! xpmezmi : grazing preference of mesozoo for microzoo 394 !! xpmed : grazing preference of mesozoo for detritus 395 !! 396 !! Metabolic losses 397 !! xmetapn : non-diatom metabolic loss rate 398 !! xmetapd : diatom metabolic loss rate 399 !! xmetazmi : microzoo metabolic loss rate 400 !! xmetazme : mesozoo metabolic loss rate 401 !! 402 !! Mortality/Remineralisation 403 !! jmpn : non-diatom mortality functional form 404 !! xmpn : non-diatom mortality rate 405 !! xkphn : non-diatom mortality half-sat constant 406 !! jmpd : diatom mortality functional form 407 !! xmpd : diatom mortality rate 408 !! xkphd : diatom mortality half-sat constant 409 !! jmzmi : microzoo mortality functional form 410 !! xmzmi : microzoo mortality rate 411 !! xkzmi : microzoo mortality half-sat constant 412 !! jmzme : mesozoo mortality functional form 413 !! xmzme : mesozoo mortality rate 414 !! xkzme : mesozoo mortality half-sat constant 415 !! 416 !! Remineralisation 417 !! jmd : detritus T-dependent remineralisation switch 418 !! jsfd : accelerate seafloor detritus remin. switch 419 !! xmd : detrital nitrogen remineralisation rate 420 !! xmdc : detrital carbon remineralisation rate 421 !! 422 !! Stochiometric ratios 423 !! xthetapn : non-diatom C:N ratio 424 !! xthetapd : diatom C:N ratio 425 !! xthetazmi : microzoo C:N ratio 426 !! xthetazme : mesozoo C:N ratio 427 !! xthetad : detritus C:N ratio 428 !! xrfn : phytoplankton Fe:N ratio 429 !! xrsn : diatom Si:N ratio (*NOT* used) 430 !! 431 !! Iron parameters 432 !! jiron : iron scavenging submodel switch 433 !! xfe_mass : iron atomic mass 434 !! xfe_sol : aeolian iron solubility 435 !! xfe_sed : sediment iron input 436 !! xLgT : total ligand concentration (umol/m3) 437 !! xk_FeL : dissociation constant for (Fe + L) 438 !! xk_sc_Fe : scavenging rate of "free" iron 439 !! 440 !! Fast-sinking detritus parameters 441 !! jexport : fast detritus remineralisation switch 442 !! jfdfate : fate of fast detritus at seafloor switch 443 !! jrratio : rain ratio switch 444 !! jocalccd : CCD switch 445 !! xridg_r0 : Ridgwell rain ratio coefficient 446 !! xfdfrac1 : fast-sinking fraction of diatom nat. mort. losses 447 !! xfdfrac2 : fast-sinking fraction of meszooplankton mort. losses 448 !! xfdfrac3 : fast-sinking fraction of diatom silicon grazing losses 449 !! xcaco3a : polar (high latitude) CaCO3 fraction 450 !! xcaco3b : equatorial (low latitude) CaCO3 fraction 451 !! xmassc : organic C mass:mole ratio, C106 H175 O40 N16 P1 452 !! xmassca : calcium carbonate mass:mole ratio, CaCO3 453 !! xmasssi : biogenic silicon mass:mole ratio, (H2SiO3)n 454 !! xprotca : calcium carbonate protection ratio 455 !! xprotsi : biogenic silicon protection ratio 456 !! xfastc : organic C remineralisation length scale 457 !! xfastca : calcium carbonate dissolution length scale 458 !! xfastsi : biogenic silicon dissolution length scale 459 !! 460 !! Benthic 461 !! jorgben : does organic detritus go to the benthos? 462 !! jinorgben : does inorganic detritus go to the benthos? 463 !! xsedn : organic nitrogen sediment remineralisation rate 464 !! xsedfe : organic iron sediment remineralisation rate 465 !! xsedsi : inorganic silicon sediment dissolution rate 466 !! xsedc : organic carbon sediment remineralisation rate 467 !! xsedca : inorganic carbon sediment dissolution rate 468 !! xburial : burial rate of seafloor detritus 469 !! 470 !! Riverine inputs 471 !! jriver_n : riverine N input? 472 !! jriver_si : riverine Si input? 473 !! jriver_c : riverine C input? 474 !! jriver_alk : riverine alkalinity input? 475 !! jriver_dep : depth of riverine input? 476 !! 477 !! Miscellaneous 478 !! xsdiss : diatom frustule dissolution rate 479 !! 480 !! Gravitational sinking 481 !! vsed : detritus gravitational sinking rate 482 !! xhr : coeff for Martin's remineralisation profile 483 !! 484 !! Additional parameters 485 !! sedlam : time coeff of POC in sediments 486 !! sedlostpoc : sediment geol loss for POC 487 !! jpkb : vertical layer for diagnostic of the vertical flux 488 !! NOTE that in LOBSTER it is a first vertical layers where 489 !! biology is active 490 !! 491 !! UKESM1 - new diagnostics !! Jpalm 492 !! jdms : include dms diagnostics 493 !! jdms_input : use instant (0) or diel-avg (1) inputs 494 !! jdms_model : choice of DMS model passed to atmosphere 495 !! 1 = ANDR, 2 = SIMO, 3 = ARAN, 4 = HALL 496 !! 377 497 IF(lwp) THEN 378 498 !! 379 499 !! AXY (08/11/13): compilation key notification 380 500 WRITE(numout,*) '=== Compilation keys' … … 392 512 WRITE(numout,*) & 393 513 & ' key_axy_carbchem = INACTIVE' 514 #endif 515 #if defined key_mocsy 516 WRITE(numout,*) & 517 & ' key_mocsy = ACTIVE' 518 #else 519 WRITE(numout,*) & 520 & ' key_mocsy = INACTIVE' 394 521 #endif 395 522 #if defined key_avgqsr_medusa … … 474 601 & ' maximum Chl to C ratio for diatoms, xthetamd = ', xthetamd 475 602 WRITE(numout,*) & 476 & ' specific Q10 value (jphy==2), xq10 = ', xq10603 & ' specific Q10 value (jphy==2), jq10 = ', jq10 477 604 !! 478 605 !! Diatom silicon parameters … … 664 791 WRITE(numout,*) & 665 792 & ' Dutkiewicz et al. (2005) iron scavenging jiron = ', jiron 793 elseif (jiron.eq.2) then 794 WRITE(numout,*) & 795 & ' Moore et al. (2004) iron scavenging jiron = ', jiron 796 elseif (jiron.eq.3) then 797 WRITE(numout,*) & 798 & ' Moore et al. (2008) iron scavenging jiron = ', jiron 799 elseif (jiron.eq.4) then 800 WRITE(numout,*) & 801 & ' Galbraith et al. (2010) iron scavenging jiron = ', jiron 666 802 else 667 803 WRITE(numout,*) & … … 868 1004 !! 869 1005 !! UKESM1 - new diagnostics !! Jpalm; AXY (08/07/15) 870 WRITE(numout,*) '=== UKESM1 DMSparameters'1006 WRITE(numout,*) '=== UKESM1-related parameters' 871 1007 WRITE(numout,*) & 872 1008 & ' include DMS diagnostic?, jdms = ', jdms … … 948 1084 949 1085 !READ(numnatm,natroam) 950 ! Namelist natroam951 ! -------------------952 REWIND( numnatp_ref )! Namelist natroam in reference namelist : MEDUSA diagnostics953 READ ( numnatp_ref, natroam, IOSTAT = ios, ERR = 905)954 905IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in reference namelist', lwp )955 956 REWIND( numnatp_cfg )! Namelist natroam in configuration namelist : MEDUSA diagnostics957 READ ( numnatp_cfg, natroam, IOSTAT = ios, ERR = 906 )958 906IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in configuration namelist', lwp )959 IF(lwm) WRITE ( numonp, natroam )1086 ! Namelist natroam 1087 ! ------------------- 1088 REWIND( numnatp_ref ) ! Namelist natroam in reference namelist : MEDUSA diagnostics 1089 READ ( numnatp_ref, natroam, IOSTAT = ios, ERR = 905) 1090 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in reference namelist', lwp ) 1091 1092 REWIND( numnatp_cfg ) ! Namelist natroam in configuration namelist : MEDUSA diagnostics 1093 READ ( numnatp_cfg, natroam, IOSTAT = ios, ERR = 906 ) 1094 906 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natroam in configuration namelist', lwp ) 1095 IF(lwm) WRITE ( numonp, natroam ) 960 1096 961 1097 !! ROAM carbon, alkalinity and oxygen cycle parameters … … 965 1101 !! xthetarem : oxygen consumption by carbon remineralisation 966 1102 !! xo2min : oxygen minimum concentration 1103 967 1104 IF(lwp) THEN 968 1105 WRITE(numout,*) 'natroam' 969 1106 WRITE(numout,*) ' ' 1107 !! 1108 !! ROAM carbon, alkalinity and oxygen cycle parameters 970 1109 WRITE(numout,*) '=== ROAM carbon, alkalinity and oxygen cycle parameters' 971 1110 WRITE(numout,*) & … … 997 1136 998 1137 !READ(numnatm,natopt) 999 ! Namelist natopt1000 ! -------------------1001 REWIND( numnatp_ref )! Namelist natopt in reference namelist : MEDUSA diagnostics1002 READ ( numnatp_ref, natopt, IOSTAT = ios, ERR = 907)1003 907IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in reference namelist', lwp )1004 1005 REWIND( numnatp_cfg )! Namelist natopt in configuration namelist : MEDUSA diagnostics1006 READ ( numnatp_cfg, natopt, IOSTAT = ios, ERR = 908 )1007 908IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in configuration namelist', lwp )1008 IF(lwm) WRITE ( numonp, natopt )1138 ! Namelist natopt 1139 ! ------------------- 1140 REWIND( numnatp_ref ) ! Namelist natopt in reference namelist : MEDUSA diagnostics 1141 READ ( numnatp_ref, natopt, IOSTAT = ios, ERR = 907) 1142 907 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in reference namelist', lwp ) 1143 1144 REWIND( numnatp_cfg ) ! Namelist natopt in configuration namelist : MEDUSA diagnostics 1145 READ ( numnatp_cfg, natopt, IOSTAT = ios, ERR = 908 ) 1146 908 IF( ios /= 0 ) CALL ctl_nam ( ios , 'natopt in configuration namelist', lwp ) 1147 IF(lwm) WRITE ( numonp, natopt ) 1009 1148 1010 1149 IF(lwp) THEN … … 1019 1158 WRITE(numout,*) ' chla/chla+phea ratio rpig = ',rpig 1020 1159 WRITE(numout,*) ' ' 1160 1021 1161 ENDIF 1022 1162 … … 1034 1174 endif 1035 1175 WRITE(numout,*) ' ' 1036 ENDIF1176 ENDIF 1037 1177 1038 1178 END SUBROUTINE trc_nam_medusa … … 1050 1190 !!--------------------------------------------------------------------- 1051 1191 !! 1192 !! 1052 1193 !!---------------------------------------------------------------------- 1053 1194 !! Variable conventions … … 1055 1196 !! 1056 1197 IF (iom_use("INVTN")) THEN 1057 med_diag%INVTN%dgsave = .TRUE.1058 ELSE 1059 med_diag%INVTN%dgsave = .FALSE.1060 ENDIF 1061 IF (iom_use("INVTSI")) THEN1062 med_diag%INVTSI%dgsave = .TRUE.1063 ELSE 1064 med_diag%INVTSI%dgsave = .FALSE.1065 ENDIF 1066 IF (iom_use("INVTFE")) THEN1067 med_diag%INVTFE%dgsave = .TRUE.1068 ELSE 1069 med_diag%INVTFE%dgsave = .FALSE.1070 ENDIF 1071 IF (iom_use("PRN")) THEN1072 med_diag%PRN%dgsave = .TRUE.1073 ELSE 1074 med_diag%PRN%dgsave = .FALSE.1075 ENDIF 1076 IF (iom_use("MPN")) THEN1077 med_diag%MPN%dgsave = .TRUE.1078 ELSE 1079 med_diag%MPN%dgsave = .FALSE.1080 ENDIF 1081 IF (iom_use("PRD")) THEN1082 med_diag%PRD%dgsave = .TRUE.1083 ELSE 1084 med_diag%PRD%dgsave = .FALSE.1085 ENDIF 1086 IF (iom_use("MPD")) THEN1087 med_diag%MPD%dgsave = .TRUE.1088 ELSE 1089 med_diag%MPD%dgsave = .FALSE.1090 ENDIF 1091 IF (iom_use("DSED")) THEN1092 med_diag%DSED%dgsave = .TRUE.1093 ELSE 1094 med_diag%DSED%dgsave = .FALSE.1095 ENDIF 1096 IF (iom_use("OPAL")) THEN1097 med_diag%OPAL%dgsave = .TRUE.1098 ELSE 1099 med_diag%OPAL%dgsave = .FALSE.1100 ENDIF 1101 IF (iom_use("OPALDISS")) THEN1102 med_diag%OPALDISS%dgsave = .TRUE.1103 ELSE 1104 med_diag%OPALDISS%dgsave = .FALSE.1105 ENDIF 1106 IF (iom_use("GMIPn")) THEN1107 med_diag%GMIPn%dgsave = .TRUE.1108 ELSE 1109 med_diag%GMIPn%dgsave = .FALSE.1110 ENDIF 1111 IF (iom_use("GMID")) THEN1112 med_diag%GMID%dgsave = .TRUE.1113 ELSE 1114 med_diag%GMID%dgsave = .FALSE.1115 ENDIF 1116 IF (iom_use("MZMI")) THEN1117 med_diag%MZMI%dgsave = .TRUE.1118 ELSE 1119 med_diag%MZMI%dgsave = .FALSE.1120 ENDIF 1121 IF (iom_use("GMEPN")) THEN1122 med_diag%GMEPN%dgsave = .TRUE.1123 ELSE 1124 med_diag%GMEPN%dgsave = .FALSE.1125 ENDIF 1126 IF (iom_use("GMEPD")) THEN1127 med_diag%GMEPD%dgsave = .TRUE.1128 ELSE 1129 med_diag%GMEPD%dgsave = .FALSE.1130 ENDIF 1131 IF (iom_use("GMEZMI")) THEN1132 med_diag%GMEZMI%dgsave = .TRUE.1133 ELSE 1134 med_diag%GMEZMI%dgsave = .FALSE.1135 ENDIF 1136 IF (iom_use("GMED")) THEN1137 med_diag%GMED%dgsave = .TRUE.1138 ELSE 1139 med_diag%GMED%dgsave = .FALSE.1140 ENDIF 1141 IF (iom_use("MZME")) THEN1142 med_diag%MZME%dgsave = .TRUE.1143 ELSE 1144 med_diag%MZME%dgsave = .FALSE.1145 ENDIF 1146 IF (iom_use("DEXP")) THEN1147 med_diag%DEXP%dgsave = .TRUE.1148 ELSE 1149 med_diag%DEXP%dgsave = .FALSE.1150 ENDIF 1151 IF (iom_use("DETN")) THEN1152 med_diag%DETN%dgsave = .TRUE.1153 ELSE 1154 med_diag%DETN%dgsave = .FALSE.1155 ENDIF 1156 IF (iom_use("MDET")) THEN1157 med_diag%MDET%dgsave = .TRUE.1158 ELSE 1159 med_diag%MDET%dgsave = .FALSE.1160 ENDIF 1161 IF (iom_use("AEOLIAN")) THEN1162 med_diag%AEOLIAN%dgsave = .TRUE.1163 ELSE 1164 med_diag%AEOLIAN%dgsave = .FALSE.1165 ENDIF 1166 IF (iom_use("BENTHIC")) THEN1167 med_diag%BENTHIC%dgsave = .TRUE.1168 ELSE 1169 med_diag%BENTHIC%dgsave = .FALSE.1170 ENDIF 1171 IF (iom_use("SCAVENGE")) THEN1172 med_diag%SCAVENGE%dgsave = .TRUE.1173 ELSE 1174 med_diag%SCAVENGE%dgsave = .FALSE.1175 ENDIF 1176 IF (iom_use("PN_JLIM")) THEN1177 med_diag%PN_JLIM%dgsave = .TRUE.1178 ELSE 1179 med_diag%PN_JLIM%dgsave = .FALSE.1180 ENDIF 1181 IF (iom_use("PN_NLIM")) THEN1182 med_diag%PN_NLIM%dgsave = .TRUE.1183 ELSE 1184 med_diag%PN_NLIM%dgsave = .FALSE.1185 ENDIF 1186 IF (iom_use("PN_FELIM")) THEN1187 med_diag%PN_FELIM%dgsave = .TRUE.1188 ELSE 1189 med_diag%PN_FELIM%dgsave = .FALSE.1190 ENDIF 1191 IF (iom_use("PD_JLIM")) THEN1192 med_diag%PD_JLIM%dgsave = .TRUE.1193 ELSE 1194 med_diag%PD_JLIM%dgsave = .FALSE.1195 ENDIF 1196 IF (iom_use("PD_NLIM")) THEN1197 med_diag%PD_NLIM%dgsave = .TRUE.1198 ELSE 1199 med_diag%PD_NLIM%dgsave = .FALSE.1200 ENDIF 1201 IF (iom_use("PD_FELIM")) THEN1202 med_diag%PD_FELIM%dgsave = .TRUE.1203 ELSE 1204 med_diag%PD_FELIM%dgsave = .FALSE.1205 ENDIF 1206 IF (iom_use("PD_SILIM")) THEN1207 med_diag%PD_SILIM%dgsave = .TRUE.1208 ELSE 1209 med_diag%PD_SILIM%dgsave = .FALSE.1210 ENDIF 1211 IF (iom_use("PDSILIM2")) THEN1212 med_diag%PDSILIM2%dgsave = .TRUE.1213 ELSE 1214 med_diag%PDSILIM2%dgsave = .FALSE.1215 ENDIF 1216 IF (iom_use("SDT__100")) THEN1217 med_diag%SDT__100%dgsave = .TRUE.1218 ELSE 1219 med_diag%SDT__100%dgsave = .FALSE.1220 ENDIF 1221 IF (iom_use("SDT__200")) THEN1222 med_diag%SDT__200%dgsave = .TRUE.1223 ELSE 1224 med_diag%SDT__200%dgsave = .FALSE.1225 ENDIF 1226 IF (iom_use("SDT__500")) THEN1227 med_diag%SDT__500%dgsave = .TRUE.1228 ELSE 1229 med_diag%SDT__500%dgsave = .FALSE.1230 ENDIF 1231 IF (iom_use("SDT_1000")) THEN1232 med_diag%SDT_1000%dgsave = .TRUE.1233 ELSE 1234 med_diag%SDT_1000%dgsave = .FALSE.1235 ENDIF 1236 IF (iom_use("TOTREG_N")) THEN1237 med_diag%TOTREG_N%dgsave = .TRUE.1238 ELSE 1239 med_diag%TOTREG_N%dgsave = .FALSE.1240 ENDIF 1241 IF (iom_use("TOTRG_SI")) THEN1242 med_diag%TOTRG_SI%dgsave = .TRUE.1243 ELSE 1244 med_diag%TOTRG_SI%dgsave = .FALSE.1245 ENDIF 1246 IF (iom_use("REG__100")) THEN1247 med_diag%REG__100%dgsave = .TRUE.1248 ELSE 1249 med_diag%REG__100%dgsave = .FALSE.1250 ENDIF 1251 IF (iom_use("REG__200")) THEN1252 med_diag%REG__200%dgsave = .TRUE.1253 ELSE 1254 med_diag%REG__200%dgsave = .FALSE.1255 ENDIF 1256 IF (iom_use("REG__500")) THEN1257 med_diag%REG__500%dgsave = .TRUE.1258 ELSE 1259 med_diag%REG__500%dgsave = .FALSE.1260 ENDIF 1261 IF (iom_use("REG_1000")) THEN1262 med_diag%REG_1000%dgsave = .TRUE.1263 ELSE 1264 med_diag%REG_1000%dgsave = .FALSE.1265 ENDIF 1266 IF (iom_use("FASTN")) THEN1267 med_diag%FASTN%dgsave = .TRUE.1268 ELSE 1269 med_diag%FASTN%dgsave = .FALSE.1270 ENDIF 1271 IF (iom_use("FASTSI")) THEN1272 med_diag%FASTSI%dgsave = .TRUE.1273 ELSE 1274 med_diag%FASTSI%dgsave = .FALSE.1275 ENDIF 1276 IF (iom_use("FASTFE")) THEN1277 med_diag%FASTFE%dgsave = .TRUE.1278 ELSE 1279 med_diag%FASTFE%dgsave = .FALSE.1280 ENDIF 1281 IF (iom_use("FASTC")) THEN1282 med_diag%FASTC%dgsave = .TRUE.1283 ELSE 1284 med_diag%FASTC%dgsave = .FALSE.1285 ENDIF 1286 IF (iom_use("FASTCA")) THEN1287 med_diag%FASTCA%dgsave = .TRUE.1288 ELSE 1289 med_diag%FASTCA%dgsave = .FALSE.1290 ENDIF 1291 IF (iom_use("FDT__100")) THEN1292 med_diag%FDT__100%dgsave = .TRUE.1293 ELSE 1294 med_diag%FDT__100%dgsave = .FALSE.1295 ENDIF 1296 IF (iom_use("FDT__200")) THEN1297 med_diag%FDT__200%dgsave = .TRUE.1298 ELSE 1299 med_diag%FDT__200%dgsave = .FALSE.1300 ENDIF 1301 IF (iom_use("FDT__500")) THEN1302 med_diag%FDT__500%dgsave = .TRUE.1303 ELSE 1304 med_diag%FDT__500%dgsave = .FALSE.1305 ENDIF 1306 IF (iom_use("FDT_1000")) THEN1307 med_diag%FDT_1000%dgsave = .TRUE.1308 ELSE 1309 med_diag%FDT_1000%dgsave = .FALSE.1310 ENDIF 1311 IF (iom_use("RG__100F")) THEN1312 med_diag%RG__100F%dgsave = .TRUE.1313 ELSE 1314 med_diag%RG__100F%dgsave = .FALSE.1315 ENDIF 1316 IF (iom_use("RG__200F")) THEN1317 med_diag%RG__200F%dgsave = .TRUE.1318 ELSE 1319 med_diag%RG__200F%dgsave = .FALSE.1320 ENDIF 1321 IF (iom_use("RG__500F")) THEN1322 med_diag%RG__500F%dgsave = .TRUE.1323 ELSE 1324 med_diag%RG__500F%dgsave = .FALSE.1325 ENDIF 1326 IF (iom_use("RG_1000F")) THEN1327 med_diag%RG_1000F%dgsave = .TRUE.1328 ELSE 1329 med_diag%RG_1000F%dgsave = .FALSE.1330 ENDIF 1331 IF (iom_use("FDS__100")) THEN1332 med_diag%FDS__100%dgsave = .TRUE.1333 ELSE 1334 med_diag%FDS__100%dgsave = .FALSE.1335 ENDIF 1336 IF (iom_use("FDS__200")) THEN1337 med_diag%FDS__200%dgsave = .TRUE.1338 ELSE 1339 med_diag%FDS__200%dgsave = .FALSE.1340 ENDIF 1341 IF (iom_use("FDS__500")) THEN1342 med_diag%FDS__500%dgsave = .TRUE.1343 ELSE 1344 med_diag%FDS__500%dgsave = .FALSE.1345 ENDIF 1346 IF (iom_use("FDS_1000")) THEN1347 med_diag%FDS_1000%dgsave = .TRUE.1348 ELSE 1349 med_diag%FDS_1000%dgsave = .FALSE.1350 ENDIF 1351 IF (iom_use("RGS_100F")) THEN1352 med_diag%RGS_100F%dgsave = .TRUE.1353 ELSE 1354 med_diag%RGS_100F%dgsave = .FALSE.1355 ENDIF 1356 IF (iom_use("RGS_200F")) THEN1357 med_diag%RGS_200F%dgsave = .TRUE.1358 ELSE 1359 med_diag%RGS_200F%dgsave = .FALSE.1360 ENDIF 1361 IF (iom_use("RGS_500F")) THEN1362 med_diag%RGS_500F%dgsave = .TRUE.1363 ELSE 1364 med_diag%RGS_500F%dgsave = .FALSE.1365 ENDIF 1366 IF (iom_use("RGS1000F")) THEN1367 med_diag%RGS1000F%dgsave = .TRUE.1368 ELSE 1369 med_diag%RGS1000F%dgsave = .FALSE.1370 ENDIF 1371 IF (iom_use("REMINN")) THEN1372 med_diag%REMINN%dgsave = .TRUE.1373 ELSE 1374 med_diag%REMINN%dgsave = .FALSE.1375 ENDIF 1376 IF (iom_use("REMINSI")) THEN1377 med_diag%REMINSI%dgsave = .TRUE.1378 ELSE 1379 med_diag%REMINSI%dgsave = .FALSE.1380 ENDIF 1381 IF (iom_use("REMINFE")) THEN1382 med_diag%REMINFE%dgsave = .TRUE.1383 ELSE 1384 med_diag%REMINFE%dgsave = .FALSE.1385 ENDIF 1386 IF (iom_use("REMINC")) THEN1387 med_diag%REMINC%dgsave = .TRUE.1388 ELSE 1389 med_diag%REMINC%dgsave = .FALSE.1390 ENDIF 1391 IF (iom_use("REMINCA")) THEN1392 med_diag%REMINCA%dgsave = .TRUE.1393 ELSE 1394 med_diag%REMINCA%dgsave = .FALSE.1395 ENDIF 1396 IF (iom_use("SEAFLRN")) THEN1397 med_diag%SEAFLRN%dgsave = .TRUE.1398 ELSE 1399 med_diag%SEAFLRN%dgsave = .FALSE.1400 ENDIF 1401 IF (iom_use("SEAFLRSI")) THEN1402 med_diag%SEAFLRSI%dgsave = .TRUE.1403 ELSE 1404 med_diag%SEAFLRSI%dgsave = .FALSE.1405 ENDIF 1406 IF (iom_use("SEAFLRFE")) THEN1407 med_diag%SEAFLRFE%dgsave = .TRUE.1408 ELSE 1409 med_diag%SEAFLRFE%dgsave = .FALSE.1410 ENDIF 1411 IF (iom_use("SEAFLRC")) THEN1412 med_diag%SEAFLRC%dgsave = .TRUE.1413 ELSE 1414 med_diag%SEAFLRC%dgsave = .FALSE.1415 ENDIF 1416 IF (iom_use("SEAFLRCA")) THEN1417 med_diag%SEAFLRCA%dgsave = .TRUE.1418 ELSE 1419 med_diag%SEAFLRCA%dgsave = .FALSE.1420 ENDIF 1421 IF (iom_use("MED_QSR")) THEN1422 med_diag%MED_QSR%dgsave = .TRUE.1423 ELSE 1424 med_diag%MED_QSR%dgsave = .FALSE.1425 ENDIF 1426 IF (iom_use("MED_XPAR")) THEN1427 med_diag%MED_XPAR%dgsave = .TRUE.1428 ELSE 1429 med_diag%MED_XPAR%dgsave = .FALSE.1430 ENDIF 1431 IF (iom_use("INTFLX_N")) THEN1432 med_diag%INTFLX_N%dgsave = .TRUE.1433 ELSE 1434 med_diag%INTFLX_N%dgsave = .FALSE.1435 ENDIF 1436 IF (iom_use("INTFLX_SI")) THEN1437 med_diag%INTFLX_SI%dgsave = .TRUE.1438 ELSE 1439 med_diag%INTFLX_SI%dgsave = .FALSE.1440 ENDIF 1441 IF (iom_use("INTFLX_FE")) THEN1442 med_diag%INTFLX_FE%dgsave = .TRUE.1443 ELSE 1444 med_diag%INTFLX_FE%dgsave = .FALSE.1445 ENDIF 1446 IF (iom_use("INT_PN")) THEN1447 med_diag%INT_PN%dgsave = .TRUE.1448 ELSE 1449 med_diag%INT_PN%dgsave = .FALSE.1450 ENDIF 1451 IF (iom_use("INT_PD")) THEN1452 med_diag%INT_PD%dgsave = .TRUE.1453 ELSE 1454 med_diag%INT_PD%dgsave = .FALSE.1455 ENDIF 1456 IF (iom_use("ML_PRN")) THEN1457 med_diag%ML_PRN%dgsave = .TRUE.1458 ELSE 1459 med_diag%ML_PRN%dgsave = .FALSE.1460 ENDIF 1461 IF (iom_use("ML_PRD")) THEN1462 med_diag%ML_PRD%dgsave = .TRUE.1463 ELSE 1464 med_diag%ML_PRD%dgsave = .FALSE.1465 ENDIF 1466 IF (iom_use("OCAL_CCD")) THEN1467 med_diag%OCAL_CCD%dgsave = .TRUE.1468 ELSE 1469 med_diag%OCAL_CCD%dgsave = .FALSE.1470 ENDIF 1471 IF (iom_use("OCAL_LVL")) THEN1472 med_diag%OCAL_LVL%dgsave = .TRUE.1473 ELSE 1474 med_diag%OCAL_LVL%dgsave = .FALSE.1475 ENDIF 1476 IF (iom_use("FE_0000")) THEN1477 med_diag%FE_0000%dgsave = .TRUE.1478 ELSE 1479 med_diag%FE_0000%dgsave = .FALSE.1480 ENDIF 1481 IF (iom_use("FE_0100")) THEN1482 med_diag%FE_0100%dgsave = .TRUE.1483 ELSE 1484 med_diag%FE_0100%dgsave = .FALSE.1485 ENDIF 1486 IF (iom_use("FE_0200")) THEN1487 med_diag%FE_0200%dgsave = .TRUE.1488 ELSE 1489 med_diag%FE_0200%dgsave = .FALSE.1490 ENDIF 1491 IF (iom_use("FE_0500")) THEN1492 med_diag%FE_0500%dgsave = .TRUE.1493 ELSE 1494 med_diag%FE_0500%dgsave = .FALSE.1495 ENDIF 1496 IF (iom_use("FE_1000")) THEN1497 med_diag%FE_1000%dgsave = .TRUE.1498 ELSE 1499 med_diag%FE_1000%dgsave = .FALSE.1500 ENDIF 1501 IF (iom_use("MED_XZE")) THEN1502 med_diag%MED_XZE%dgsave = .TRUE.1503 ELSE 1504 med_diag%MED_XZE%dgsave = .FALSE.1505 ENDIF 1506 IF (iom_use("WIND")) THEN1507 med_diag%WIND%dgsave = .TRUE.1508 ELSE 1509 med_diag%WIND%dgsave = .FALSE.1510 ENDIF 1511 IF (iom_use("ATM_PCO2")) THEN1512 med_diag%ATM_PCO2%dgsave = .TRUE.1513 ELSE 1514 med_diag%ATM_PCO2%dgsave = .FALSE.1515 ENDIF 1516 IF (iom_use("OCN_PH")) THEN1517 med_diag%OCN_PH%dgsave = .TRUE.1518 ELSE 1519 med_diag%OCN_PH%dgsave = .FALSE.1520 ENDIF 1521 IF (iom_use("OCN_PCO2")) THEN1522 med_diag%OCN_PCO2%dgsave = .TRUE.1523 ELSE 1524 med_diag%OCN_PCO2%dgsave = .FALSE.1525 ENDIF 1526 IF (iom_use("OCNH2CO3")) THEN1527 med_diag%OCNH2CO3%dgsave = .TRUE.1528 ELSE 1529 med_diag%OCNH2CO3%dgsave = .FALSE.1530 ENDIF 1531 IF (iom_use("OCN_HCO3")) THEN1532 med_diag%OCN_HCO3%dgsave = .TRUE.1533 ELSE 1534 med_diag%OCN_HCO3%dgsave = .FALSE.1535 ENDIF 1536 IF (iom_use("OCN_CO3")) THEN1537 med_diag%OCN_CO3%dgsave = .TRUE.1538 ELSE 1539 med_diag%OCN_CO3%dgsave = .FALSE.1540 ENDIF 1541 IF (iom_use("CO2FLUX")) THEN1542 med_diag%CO2FLUX%dgsave = .TRUE.1543 ELSE 1544 med_diag%CO2FLUX%dgsave = .FALSE.1545 ENDIF 1546 IF (iom_use("OM_CAL")) THEN1547 med_diag%OM_CAL%dgsave = .TRUE.1548 ELSE 1549 med_diag%OM_CAL%dgsave = .FALSE.1550 ENDIF 1551 IF (iom_use("OM_ARG")) THEN1552 med_diag%OM_ARG%dgsave = .TRUE.1553 ELSE 1554 med_diag%OM_ARG%dgsave = .FALSE.1555 ENDIF 1556 IF (iom_use("TCO2")) THEN1557 med_diag%TCO2%dgsave = .TRUE.1558 ELSE 1559 med_diag%TCO2%dgsave = .FALSE.1560 ENDIF 1561 IF (iom_use("TALK")) THEN1562 med_diag%TALK%dgsave = .TRUE.1563 ELSE 1564 med_diag%TALK%dgsave = .FALSE.1565 ENDIF 1566 IF (iom_use("KW660")) THEN1567 med_diag%KW660%dgsave = .TRUE.1568 ELSE 1569 med_diag%KW660%dgsave = .FALSE.1570 ENDIF 1571 IF (iom_use("ATM_PP0")) THEN1572 med_diag%ATM_PP0%dgsave = .TRUE.1573 ELSE 1574 med_diag%ATM_PP0%dgsave = .FALSE.1575 ENDIF 1576 IF (iom_use("O2FLUX")) THEN1577 med_diag%O2FLUX%dgsave = .TRUE.1578 ELSE 1579 med_diag%O2FLUX%dgsave = .FALSE.1580 ENDIF 1581 IF (iom_use("O2SAT")) THEN1582 med_diag%O2SAT%dgsave = .TRUE.1583 ELSE 1584 med_diag%O2SAT%dgsave = .FALSE.1585 ENDIF 1586 IF (iom_use("CAL_CCD")) THEN1587 med_diag%CAL_CCD%dgsave = .TRUE.1588 ELSE 1589 med_diag%CAL_CCD%dgsave = .FALSE.1590 ENDIF 1591 IF (iom_use("ARG_CCD")) THEN1592 med_diag%ARG_CCD%dgsave = .TRUE.1593 ELSE 1594 med_diag%ARG_CCD%dgsave = .FALSE.1595 ENDIF 1596 IF (iom_use("SFR_OCAL")) THEN1597 med_diag%SFR_OCAL%dgsave = .TRUE.1598 ELSE 1599 med_diag%SFR_OCAL%dgsave = .FALSE.1600 ENDIF 1601 IF (iom_use("SFR_OARG")) THEN1602 med_diag%SFR_OARG%dgsave = .TRUE.1603 ELSE 1604 med_diag%SFR_OARG%dgsave = .FALSE.1605 ENDIF 1606 IF (iom_use("N_PROD")) THEN1607 med_diag%N_PROD%dgsave = .TRUE.1608 ELSE 1609 med_diag%N_PROD%dgsave = .FALSE.1610 ENDIF 1611 IF (iom_use("N_CONS")) THEN1612 med_diag%N_CONS%dgsave = .TRUE.1613 ELSE 1614 med_diag%N_CONS%dgsave = .FALSE.1615 ENDIF 1616 IF (iom_use("C_PROD")) THEN1617 med_diag%C_PROD%dgsave = .TRUE.1618 ELSE 1619 med_diag%C_PROD%dgsave = .FALSE.1620 ENDIF 1621 IF (iom_use("C_CONS")) THEN1622 med_diag%C_CONS%dgsave = .TRUE.1623 ELSE 1624 med_diag%C_CONS%dgsave = .FALSE.1625 ENDIF 1626 IF (iom_use("O2_PROD")) THEN1627 med_diag%O2_PROD%dgsave = .TRUE.1628 ELSE 1629 med_diag%O2_PROD%dgsave = .FALSE.1630 ENDIF 1631 IF (iom_use("O2_CONS")) THEN1632 med_diag%O2_CONS%dgsave = .TRUE.1633 ELSE 1634 med_diag%O2_CONS%dgsave = .FALSE.1635 ENDIF 1636 IF (iom_use("O2_ANOX")) THEN1637 med_diag%O2_ANOX%dgsave = .TRUE.1638 ELSE 1639 med_diag%O2_ANOX%dgsave = .FALSE.1640 ENDIF 1641 IF (iom_use("RR_0100")) THEN1642 med_diag%RR_0100%dgsave = .TRUE.1643 ELSE 1644 med_diag%RR_0100%dgsave = .FALSE.1645 ENDIF 1646 IF (iom_use("RR_0500")) THEN1647 med_diag%RR_0500%dgsave = .TRUE.1648 ELSE 1649 med_diag%RR_0500%dgsave = .FALSE.1650 ENDIF 1651 IF (iom_use("RR_1000")) THEN1652 med_diag%RR_1000%dgsave = .TRUE.1653 ELSE 1654 med_diag%RR_1000%dgsave = .FALSE.1655 ENDIF 1656 IF (iom_use("IBEN_N")) THEN1657 med_diag%IBEN_N%dgsave = .TRUE.1658 ELSE 1659 med_diag%IBEN_N%dgsave = .FALSE.1660 ENDIF 1661 IF (iom_use("IBEN_FE")) THEN1662 med_diag%IBEN_FE%dgsave = .TRUE.1663 ELSE 1664 med_diag%IBEN_FE%dgsave = .FALSE.1665 ENDIF 1666 IF (iom_use("IBEN_C")) THEN1667 med_diag%IBEN_C%dgsave = .TRUE.1668 ELSE 1669 med_diag%IBEN_C%dgsave = .FALSE.1670 ENDIF 1671 IF (iom_use("IBEN_SI")) THEN1672 med_diag%IBEN_SI%dgsave = .TRUE.1673 ELSE 1674 med_diag%IBEN_SI%dgsave = .FALSE.1675 ENDIF 1676 IF (iom_use("IBEN_CA")) THEN1677 med_diag%IBEN_CA%dgsave = .TRUE.1678 ELSE 1679 med_diag%IBEN_CA%dgsave = .FALSE.1680 ENDIF 1681 IF (iom_use("OBEN_N")) THEN1682 med_diag%OBEN_N%dgsave = .TRUE.1683 ELSE 1684 med_diag%OBEN_N%dgsave = .FALSE.1685 ENDIF 1686 IF (iom_use("OBEN_FE")) THEN1687 med_diag%OBEN_FE%dgsave = .TRUE.1688 ELSE 1689 med_diag%OBEN_FE%dgsave = .FALSE.1690 ENDIF 1691 IF (iom_use("OBEN_C")) THEN1692 med_diag%OBEN_C%dgsave = .TRUE.1693 ELSE 1694 med_diag%OBEN_C%dgsave = .FALSE.1695 ENDIF 1696 IF (iom_use("OBEN_SI")) THEN1697 med_diag%OBEN_SI%dgsave = .TRUE.1698 ELSE 1699 med_diag%OBEN_SI%dgsave = .FALSE.1700 ENDIF 1701 IF (iom_use("OBEN_CA")) THEN1702 med_diag%OBEN_CA%dgsave = .TRUE.1703 ELSE 1704 med_diag%OBEN_CA%dgsave = .FALSE.1705 ENDIF 1706 IF (iom_use("BEN_N")) THEN1707 med_diag%BEN_N%dgsave = .TRUE.1708 ELSE 1709 med_diag%BEN_N%dgsave = .FALSE.1710 ENDIF 1711 IF (iom_use("BEN_FE")) THEN1712 med_diag%BEN_FE%dgsave = .TRUE.1713 ELSE 1714 med_diag%BEN_FE%dgsave = .FALSE.1715 ENDIF 1716 IF (iom_use("BEN_C")) THEN1717 med_diag%BEN_C%dgsave = .TRUE.1718 ELSE 1719 med_diag%BEN_C%dgsave = .FALSE.1720 ENDIF 1721 IF (iom_use("BEN_SI")) THEN1722 med_diag%BEN_SI%dgsave = .TRUE.1723 ELSE 1724 med_diag%BEN_SI%dgsave = .FALSE.1725 ENDIF 1726 IF (iom_use("BEN_CA")) THEN1727 med_diag%BEN_CA%dgsave = .TRUE.1728 ELSE 1729 med_diag%BEN_CA%dgsave = .FALSE.1730 ENDIF 1731 IF (iom_use("RUNOFF")) THEN1732 med_diag%RUNOFF%dgsave = .TRUE.1733 ELSE 1734 med_diag%RUNOFF%dgsave = .FALSE.1735 ENDIF 1736 IF (iom_use("RIV_N")) THEN1737 med_diag%RIV_N%dgsave = .TRUE.1738 ELSE 1739 med_diag%RIV_N%dgsave = .FALSE.1740 ENDIF 1741 IF (iom_use("RIV_SI")) THEN1742 med_diag%RIV_SI%dgsave = .TRUE.1743 ELSE 1744 med_diag%RIV_SI%dgsave = .FALSE.1745 ENDIF 1746 IF (iom_use("RIV_C")) THEN1747 med_diag%RIV_C%dgsave = .TRUE.1748 ELSE 1749 med_diag%RIV_C%dgsave = .FALSE.1750 ENDIF 1751 IF (iom_use("RIV_ALK")) THEN1752 med_diag%RIV_ALK%dgsave = .TRUE.1753 ELSE 1754 med_diag%RIV_ALK%dgsave = .FALSE.1755 ENDIF 1756 IF (iom_use("DETC")) THEN1757 med_diag%DETC%dgsave = .TRUE.1758 ELSE 1759 med_diag%DETC%dgsave = .FALSE.1760 ENDIF 1761 IF (iom_use("SDC__100")) THEN1762 med_diag%SDC__100%dgsave = .TRUE.1763 ELSE 1764 med_diag%SDC__100%dgsave = .FALSE.1765 ENDIF 1766 IF (iom_use("SDC__200")) THEN1767 med_diag%SDC__200%dgsave = .TRUE.1768 ELSE 1769 med_diag%SDC__200%dgsave = .FALSE.1770 ENDIF 1771 IF (iom_use("SDC__500")) THEN1772 med_diag%SDC__500%dgsave = .TRUE.1773 ELSE 1774 med_diag%SDC__500%dgsave = .FALSE.1775 ENDIF 1776 IF (iom_use("SDC_1000")) THEN1777 med_diag%SDC_1000%dgsave = .TRUE.1778 ELSE 1779 med_diag%SDC_1000%dgsave = .FALSE.1780 ENDIF 1781 IF (iom_use("INVTC")) THEN1782 med_diag%INVTC%dgsave = .TRUE.1783 ELSE 1784 med_diag%INVTC%dgsave = .FALSE.1785 ENDIF 1786 IF (iom_use("INVTALK")) THEN1787 med_diag%INVTALK%dgsave = .TRUE.1788 ELSE 1789 med_diag%INVTALK%dgsave = .FALSE.1790 ENDIF 1791 IF (iom_use("INVTO2")) THEN1792 med_diag%INVTO2%dgsave = .TRUE.1793 ELSE 1794 med_diag%INVTO2%dgsave = .FALSE.1795 ENDIF 1796 IF (iom_use("LYSO_CA")) THEN1797 med_diag%LYSO_CA%dgsave = .TRUE.1798 ELSE 1799 med_diag%LYSO_CA%dgsave = .FALSE.1800 ENDIF 1801 IF (iom_use("COM_RESP")) THEN1802 med_diag%COM_RESP%dgsave = .TRUE.1803 ELSE 1804 med_diag%COM_RESP%dgsave = .FALSE.1805 ENDIF 1806 IF (iom_use("PN_LLOSS")) THEN1807 med_diag%PN_LLOSS%dgsave = .TRUE.1808 ELSE 1809 med_diag%PN_LLOSS%dgsave = .FALSE.1810 ENDIF 1811 IF (iom_use("PD_LLOSS")) THEN1812 med_diag%PD_LLOSS%dgsave = .TRUE.1813 ELSE 1814 med_diag%PD_LLOSS%dgsave = .FALSE.1815 ENDIF 1816 IF (iom_use("ZI_LLOSS")) THEN1817 med_diag%ZI_LLOSS%dgsave = .TRUE.1818 ELSE 1819 med_diag%ZI_LLOSS%dgsave = .FALSE.1820 ENDIF 1821 IF (iom_use("ZE_LLOSS")) THEN1822 med_diag%ZE_LLOSS%dgsave = .TRUE.1823 ELSE 1824 med_diag%ZE_LLOSS%dgsave = .FALSE.1825 ENDIF 1826 IF (iom_use("ZI_MES_N")) THEN1827 med_diag%ZI_MES_N%dgsave = .TRUE.1828 ELSE 1829 med_diag%ZI_MES_N%dgsave = .FALSE.1830 ENDIF 1831 IF (iom_use("ZI_MES_D")) THEN1832 med_diag%ZI_MES_D%dgsave = .TRUE.1833 ELSE 1834 med_diag%ZI_MES_D%dgsave = .FALSE.1835 ENDIF 1836 IF (iom_use("ZI_MES_C")) THEN1837 med_diag%ZI_MES_C%dgsave = .TRUE.1838 ELSE 1839 med_diag%ZI_MES_C%dgsave = .FALSE.1840 ENDIF 1841 IF (iom_use("ZI_MESDC")) THEN1842 med_diag%ZI_MESDC%dgsave = .TRUE.1843 ELSE 1844 med_diag%ZI_MESDC%dgsave = .FALSE.1845 ENDIF 1846 IF (iom_use("ZI_EXCR")) THEN1847 med_diag%ZI_EXCR%dgsave = .TRUE.1848 ELSE 1849 med_diag%ZI_EXCR%dgsave = .FALSE.1850 ENDIF 1851 IF (iom_use("ZI_RESP")) THEN1852 med_diag%ZI_RESP%dgsave = .TRUE.1853 ELSE 1854 med_diag%ZI_RESP%dgsave = .FALSE.1855 ENDIF 1856 IF (iom_use("ZI_GROW")) THEN1857 med_diag%ZI_GROW%dgsave = .TRUE.1858 ELSE 1859 med_diag%ZI_GROW%dgsave = .FALSE.1860 ENDIF 1861 IF (iom_use("ZE_MES_N")) THEN1862 med_diag%ZE_MES_N%dgsave = .TRUE.1863 ELSE 1864 med_diag%ZE_MES_N%dgsave = .FALSE.1865 ENDIF 1866 IF (iom_use("ZE_MES_D")) THEN1867 med_diag%ZE_MES_D%dgsave = .TRUE.1868 ELSE 1869 med_diag%ZE_MES_D%dgsave = .FALSE.1870 ENDIF 1871 IF (iom_use("ZE_MES_C")) THEN1872 med_diag%ZE_MES_C%dgsave = .TRUE.1873 ELSE 1874 med_diag%ZE_MES_C%dgsave = .FALSE.1875 ENDIF 1876 IF (iom_use("ZE_MESDC")) THEN1877 med_diag%ZE_MESDC%dgsave = .TRUE.1878 ELSE 1879 med_diag%ZE_MESDC%dgsave = .FALSE.1880 ENDIF 1881 IF (iom_use("ZE_EXCR")) THEN1882 med_diag%ZE_EXCR%dgsave = .TRUE.1883 ELSE 1884 med_diag%ZE_EXCR%dgsave = .FALSE.1885 ENDIF 1886 IF (iom_use("ZE_RESP")) THEN1887 med_diag%ZE_RESP%dgsave = .TRUE.1888 ELSE 1889 med_diag%ZE_RESP%dgsave = .FALSE.1890 ENDIF 1891 IF (iom_use("ZE_GROW")) THEN1892 med_diag%ZE_GROW%dgsave = .TRUE.1893 ELSE 1894 med_diag%ZE_GROW%dgsave = .FALSE.1895 ENDIF 1896 IF (iom_use("MDETC")) THEN1897 med_diag%MDETC%dgsave = .TRUE.1898 ELSE 1899 med_diag%MDETC%dgsave = .FALSE.1900 ENDIF 1901 IF (iom_use("GMIDC")) THEN1902 med_diag%GMIDC%dgsave = .TRUE.1903 ELSE 1904 med_diag%GMIDC%dgsave = .FALSE.1905 ENDIF 1906 IF (iom_use("GMEDC")) THEN1907 med_diag%GMEDC%dgsave = .TRUE.1908 ELSE 1909 med_diag%GMEDC%dgsave = .FALSE.1910 ENDIF 1911 IF (iom_use("INT_ZMI")) THEN1912 med_diag%INT_ZMI%dgsave = .TRUE.1913 ELSE 1914 med_diag%INT_ZMI%dgsave = .FALSE.1915 ENDIF 1916 IF (iom_use("INT_ZME")) THEN1917 med_diag%INT_ZME%dgsave = .TRUE.1918 ELSE 1919 med_diag%INT_ZME%dgsave = .FALSE.1920 ENDIF 1921 IF (iom_use("INT_DET")) THEN1922 med_diag%INT_DET%dgsave = .TRUE.1923 ELSE 1924 med_diag%INT_DET%dgsave = .FALSE.1925 ENDIF 1926 IF (iom_use("INT_DTC")) THEN1927 med_diag%INT_DTC%dgsave = .TRUE.1928 ELSE 1929 med_diag%INT_DTC%dgsave = .FALSE.1930 ENDIF 1931 IF (iom_use("DMS_SURF")) THEN1932 med_diag%DMS_SURF%dgsave = .TRUE.1933 ELSE 1934 med_diag%DMS_SURF%dgsave = .FALSE.1935 ENDIF 1936 IF (iom_use("DMS_ANDR")) THEN1937 med_diag%DMS_ANDR%dgsave = .TRUE.1938 ELSE 1939 med_diag%DMS_ANDR%dgsave = .FALSE.1940 ENDIF 1941 IF (iom_use("DMS_SIMO")) THEN1942 med_diag%DMS_SIMO%dgsave = .TRUE.1943 ELSE 1944 med_diag%DMS_SIMO%dgsave = .FALSE.1945 ENDIF 1946 IF (iom_use("DMS_ARAN")) THEN1947 med_diag%DMS_ARAN%dgsave = .TRUE.1948 ELSE 1949 med_diag%DMS_ARAN%dgsave = .FALSE.1950 ENDIF 1951 IF (iom_use("DMS_HALL")) THEN1952 med_diag%DMS_HALL%dgsave = .TRUE.1953 ELSE 1954 med_diag%DMS_HALL%dgsave = .FALSE.1955 ENDIF 1956 IF (iom_use("ATM_XCO2")) THEN1957 med_diag%ATM_XCO2%dgsave = .TRUE.1958 ELSE 1959 med_diag%ATM_XCO2%dgsave = .FALSE.1960 ENDIF 1961 IF (iom_use("OCN_FCO2")) THEN1962 med_diag%OCN_FCO2%dgsave = .TRUE.1963 ELSE 1964 med_diag%OCN_FCO2%dgsave = .FALSE.1965 ENDIF 1966 IF (iom_use("ATM_FCO2")) THEN1967 med_diag%ATM_FCO2%dgsave = .TRUE.1968 ELSE 1969 med_diag%ATM_FCO2%dgsave = .FALSE.1970 ENDIF 1971 IF (iom_use("OCN_RHOSW")) THEN1972 med_diag%OCN_RHOSW%dgsave = .TRUE.1973 ELSE 1974 med_diag%OCN_RHOSW%dgsave = .FALSE.1975 ENDIF 1976 IF (iom_use("OCN_SCHCO2")) THEN1977 med_diag%OCN_SCHCO2%dgsave = .TRUE.1978 ELSE 1979 med_diag%OCN_SCHCO2%dgsave = .FALSE.1980 ENDIF 1981 IF (iom_use("OCN_KWCO2")) THEN1982 med_diag%OCN_KWCO2%dgsave = .TRUE.1983 ELSE 1984 med_diag%OCN_KWCO2%dgsave = .FALSE.1985 ENDIF 1986 IF (iom_use("OCN_K0")) THEN1987 med_diag%OCN_K0%dgsave = .TRUE.1988 ELSE 1989 med_diag%OCN_K0%dgsave = .FALSE.1990 ENDIF 1991 IF (iom_use("CO2STARAIR")) THEN1992 med_diag%CO2STARAIR%dgsave = .TRUE.1993 ELSE 1994 med_diag%CO2STARAIR%dgsave = .FALSE.1995 ENDIF 1996 IF (iom_use("OCN_DPCO2")) THEN1997 med_diag%OCN_DPCO2%dgsave = .TRUE.1998 ELSE 1999 med_diag%OCN_DPCO2%dgsave = .FALSE.1198 med_diag%INVTN%dgsave = .TRUE. 1199 ELSE 1200 med_diag%INVTN%dgsave = .FALSE. 1201 ENDIF 1202 IF (iom_use("INVTSI")) THEN 1203 med_diag%INVTSI%dgsave = .TRUE. 1204 ELSE 1205 med_diag%INVTSI%dgsave = .FALSE. 1206 ENDIF 1207 IF (iom_use("INVTFE")) THEN 1208 med_diag%INVTFE%dgsave = .TRUE. 1209 ELSE 1210 med_diag%INVTFE%dgsave = .FALSE. 1211 ENDIF 1212 IF (iom_use("PRN")) THEN 1213 med_diag%PRN%dgsave = .TRUE. 1214 ELSE 1215 med_diag%PRN%dgsave = .FALSE. 1216 ENDIF 1217 IF (iom_use("MPN")) THEN 1218 med_diag%MPN%dgsave = .TRUE. 1219 ELSE 1220 med_diag%MPN%dgsave = .FALSE. 1221 ENDIF 1222 IF (iom_use("PRD")) THEN 1223 med_diag%PRD%dgsave = .TRUE. 1224 ELSE 1225 med_diag%PRD%dgsave = .FALSE. 1226 ENDIF 1227 IF (iom_use("MPD")) THEN 1228 med_diag%MPD%dgsave = .TRUE. 1229 ELSE 1230 med_diag%MPD%dgsave = .FALSE. 1231 ENDIF 1232 IF (iom_use("DSED")) THEN 1233 med_diag%DSED%dgsave = .TRUE. 1234 ELSE 1235 med_diag%DSED%dgsave = .FALSE. 1236 ENDIF 1237 IF (iom_use("OPAL")) THEN 1238 med_diag%OPAL%dgsave = .TRUE. 1239 ELSE 1240 med_diag%OPAL%dgsave = .FALSE. 1241 ENDIF 1242 IF (iom_use("OPALDISS")) THEN 1243 med_diag%OPALDISS%dgsave = .TRUE. 1244 ELSE 1245 med_diag%OPALDISS%dgsave = .FALSE. 1246 ENDIF 1247 IF (iom_use("GMIPn")) THEN 1248 med_diag%GMIPn%dgsave = .TRUE. 1249 ELSE 1250 med_diag%GMIPn%dgsave = .FALSE. 1251 ENDIF 1252 IF (iom_use("GMID")) THEN 1253 med_diag%GMID%dgsave = .TRUE. 1254 ELSE 1255 med_diag%GMID%dgsave = .FALSE. 1256 ENDIF 1257 IF (iom_use("MZMI")) THEN 1258 med_diag%MZMI%dgsave = .TRUE. 1259 ELSE 1260 med_diag%MZMI%dgsave = .FALSE. 1261 ENDIF 1262 IF (iom_use("GMEPN")) THEN 1263 med_diag%GMEPN%dgsave = .TRUE. 1264 ELSE 1265 med_diag%GMEPN%dgsave = .FALSE. 1266 ENDIF 1267 IF (iom_use("GMEPD")) THEN 1268 med_diag%GMEPD%dgsave = .TRUE. 1269 ELSE 1270 med_diag%GMEPD%dgsave = .FALSE. 1271 ENDIF 1272 IF (iom_use("GMEZMI")) THEN 1273 med_diag%GMEZMI%dgsave = .TRUE. 1274 ELSE 1275 med_diag%GMEZMI%dgsave = .FALSE. 1276 ENDIF 1277 IF (iom_use("GMED")) THEN 1278 med_diag%GMED%dgsave = .TRUE. 1279 ELSE 1280 med_diag%GMED%dgsave = .FALSE. 1281 ENDIF 1282 IF (iom_use("MZME")) THEN 1283 med_diag%MZME%dgsave = .TRUE. 1284 ELSE 1285 med_diag%MZME%dgsave = .FALSE. 1286 ENDIF 1287 IF (iom_use("DEXP")) THEN 1288 med_diag%DEXP%dgsave = .TRUE. 1289 ELSE 1290 med_diag%DEXP%dgsave = .FALSE. 1291 ENDIF 1292 IF (iom_use("DETN")) THEN 1293 med_diag%DETN%dgsave = .TRUE. 1294 ELSE 1295 med_diag%DETN%dgsave = .FALSE. 1296 ENDIF 1297 IF (iom_use("MDET")) THEN 1298 med_diag%MDET%dgsave = .TRUE. 1299 ELSE 1300 med_diag%MDET%dgsave = .FALSE. 1301 ENDIF 1302 IF (iom_use("AEOLIAN")) THEN 1303 med_diag%AEOLIAN%dgsave = .TRUE. 1304 ELSE 1305 med_diag%AEOLIAN%dgsave = .FALSE. 1306 ENDIF 1307 IF (iom_use("BENTHIC")) THEN 1308 med_diag%BENTHIC%dgsave = .TRUE. 1309 ELSE 1310 med_diag%BENTHIC%dgsave = .FALSE. 1311 ENDIF 1312 IF (iom_use("SCAVENGE")) THEN 1313 med_diag%SCAVENGE%dgsave = .TRUE. 1314 ELSE 1315 med_diag%SCAVENGE%dgsave = .FALSE. 1316 ENDIF 1317 IF (iom_use("PN_JLIM")) THEN 1318 med_diag%PN_JLIM%dgsave = .TRUE. 1319 ELSE 1320 med_diag%PN_JLIM%dgsave = .FALSE. 1321 ENDIF 1322 IF (iom_use("PN_NLIM")) THEN 1323 med_diag%PN_NLIM%dgsave = .TRUE. 1324 ELSE 1325 med_diag%PN_NLIM%dgsave = .FALSE. 1326 ENDIF 1327 IF (iom_use("PN_FELIM")) THEN 1328 med_diag%PN_FELIM%dgsave = .TRUE. 1329 ELSE 1330 med_diag%PN_FELIM%dgsave = .FALSE. 1331 ENDIF 1332 IF (iom_use("PD_JLIM")) THEN 1333 med_diag%PD_JLIM%dgsave = .TRUE. 1334 ELSE 1335 med_diag%PD_JLIM%dgsave = .FALSE. 1336 ENDIF 1337 IF (iom_use("PD_NLIM")) THEN 1338 med_diag%PD_NLIM%dgsave = .TRUE. 1339 ELSE 1340 med_diag%PD_NLIM%dgsave = .FALSE. 1341 ENDIF 1342 IF (iom_use("PD_FELIM")) THEN 1343 med_diag%PD_FELIM%dgsave = .TRUE. 1344 ELSE 1345 med_diag%PD_FELIM%dgsave = .FALSE. 1346 ENDIF 1347 IF (iom_use("PD_SILIM")) THEN 1348 med_diag%PD_SILIM%dgsave = .TRUE. 1349 ELSE 1350 med_diag%PD_SILIM%dgsave = .FALSE. 1351 ENDIF 1352 IF (iom_use("PDSILIM2")) THEN 1353 med_diag%PDSILIM2%dgsave = .TRUE. 1354 ELSE 1355 med_diag%PDSILIM2%dgsave = .FALSE. 1356 ENDIF 1357 IF (iom_use("SDT__100")) THEN 1358 med_diag%SDT__100%dgsave = .TRUE. 1359 ELSE 1360 med_diag%SDT__100%dgsave = .FALSE. 1361 ENDIF 1362 IF (iom_use("SDT__200")) THEN 1363 med_diag%SDT__200%dgsave = .TRUE. 1364 ELSE 1365 med_diag%SDT__200%dgsave = .FALSE. 1366 ENDIF 1367 IF (iom_use("SDT__500")) THEN 1368 med_diag%SDT__500%dgsave = .TRUE. 1369 ELSE 1370 med_diag%SDT__500%dgsave = .FALSE. 1371 ENDIF 1372 IF (iom_use("SDT_1000")) THEN 1373 med_diag%SDT_1000%dgsave = .TRUE. 1374 ELSE 1375 med_diag%SDT_1000%dgsave = .FALSE. 1376 ENDIF 1377 IF (iom_use("TOTREG_N")) THEN 1378 med_diag%TOTREG_N%dgsave = .TRUE. 1379 ELSE 1380 med_diag%TOTREG_N%dgsave = .FALSE. 1381 ENDIF 1382 IF (iom_use("TOTRG_SI")) THEN 1383 med_diag%TOTRG_SI%dgsave = .TRUE. 1384 ELSE 1385 med_diag%TOTRG_SI%dgsave = .FALSE. 1386 ENDIF 1387 IF (iom_use("REG__100")) THEN 1388 med_diag%REG__100%dgsave = .TRUE. 1389 ELSE 1390 med_diag%REG__100%dgsave = .FALSE. 1391 ENDIF 1392 IF (iom_use("REG__200")) THEN 1393 med_diag%REG__200%dgsave = .TRUE. 1394 ELSE 1395 med_diag%REG__200%dgsave = .FALSE. 1396 ENDIF 1397 IF (iom_use("REG__500")) THEN 1398 med_diag%REG__500%dgsave = .TRUE. 1399 ELSE 1400 med_diag%REG__500%dgsave = .FALSE. 1401 ENDIF 1402 IF (iom_use("REG_1000")) THEN 1403 med_diag%REG_1000%dgsave = .TRUE. 1404 ELSE 1405 med_diag%REG_1000%dgsave = .FALSE. 1406 ENDIF 1407 IF (iom_use("FASTN")) THEN 1408 med_diag%FASTN%dgsave = .TRUE. 1409 ELSE 1410 med_diag%FASTN%dgsave = .FALSE. 1411 ENDIF 1412 IF (iom_use("FASTSI")) THEN 1413 med_diag%FASTSI%dgsave = .TRUE. 1414 ELSE 1415 med_diag%FASTSI%dgsave = .FALSE. 1416 ENDIF 1417 IF (iom_use("FASTFE")) THEN 1418 med_diag%FASTFE%dgsave = .TRUE. 1419 ELSE 1420 med_diag%FASTFE%dgsave = .FALSE. 1421 ENDIF 1422 IF (iom_use("FASTC")) THEN 1423 med_diag%FASTC%dgsave = .TRUE. 1424 ELSE 1425 med_diag%FASTC%dgsave = .FALSE. 1426 ENDIF 1427 IF (iom_use("FASTCA")) THEN 1428 med_diag%FASTCA%dgsave = .TRUE. 1429 ELSE 1430 med_diag%FASTCA%dgsave = .FALSE. 1431 ENDIF 1432 IF (iom_use("FDT__100")) THEN 1433 med_diag%FDT__100%dgsave = .TRUE. 1434 ELSE 1435 med_diag%FDT__100%dgsave = .FALSE. 1436 ENDIF 1437 IF (iom_use("FDT__200")) THEN 1438 med_diag%FDT__200%dgsave = .TRUE. 1439 ELSE 1440 med_diag%FDT__200%dgsave = .FALSE. 1441 ENDIF 1442 IF (iom_use("FDT__500")) THEN 1443 med_diag%FDT__500%dgsave = .TRUE. 1444 ELSE 1445 med_diag%FDT__500%dgsave = .FALSE. 1446 ENDIF 1447 IF (iom_use("FDT_1000")) THEN 1448 med_diag%FDT_1000%dgsave = .TRUE. 1449 ELSE 1450 med_diag%FDT_1000%dgsave = .FALSE. 1451 ENDIF 1452 IF (iom_use("RG__100F")) THEN 1453 med_diag%RG__100F%dgsave = .TRUE. 1454 ELSE 1455 med_diag%RG__100F%dgsave = .FALSE. 1456 ENDIF 1457 IF (iom_use("RG__200F")) THEN 1458 med_diag%RG__200F%dgsave = .TRUE. 1459 ELSE 1460 med_diag%RG__200F%dgsave = .FALSE. 1461 ENDIF 1462 IF (iom_use("RG__500F")) THEN 1463 med_diag%RG__500F%dgsave = .TRUE. 1464 ELSE 1465 med_diag%RG__500F%dgsave = .FALSE. 1466 ENDIF 1467 IF (iom_use("RG_1000F")) THEN 1468 med_diag%RG_1000F%dgsave = .TRUE. 1469 ELSE 1470 med_diag%RG_1000F%dgsave = .FALSE. 1471 ENDIF 1472 IF (iom_use("FDS__100")) THEN 1473 med_diag%FDS__100%dgsave = .TRUE. 1474 ELSE 1475 med_diag%FDS__100%dgsave = .FALSE. 1476 ENDIF 1477 IF (iom_use("FDS__200")) THEN 1478 med_diag%FDS__200%dgsave = .TRUE. 1479 ELSE 1480 med_diag%FDS__200%dgsave = .FALSE. 1481 ENDIF 1482 IF (iom_use("FDS__500")) THEN 1483 med_diag%FDS__500%dgsave = .TRUE. 1484 ELSE 1485 med_diag%FDS__500%dgsave = .FALSE. 1486 ENDIF 1487 IF (iom_use("FDS_1000")) THEN 1488 med_diag%FDS_1000%dgsave = .TRUE. 1489 ELSE 1490 med_diag%FDS_1000%dgsave = .FALSE. 1491 ENDIF 1492 IF (iom_use("RGS_100F")) THEN 1493 med_diag%RGS_100F%dgsave = .TRUE. 1494 ELSE 1495 med_diag%RGS_100F%dgsave = .FALSE. 1496 ENDIF 1497 IF (iom_use("RGS_200F")) THEN 1498 med_diag%RGS_200F%dgsave = .TRUE. 1499 ELSE 1500 med_diag%RGS_200F%dgsave = .FALSE. 1501 ENDIF 1502 IF (iom_use("RGS_500F")) THEN 1503 med_diag%RGS_500F%dgsave = .TRUE. 1504 ELSE 1505 med_diag%RGS_500F%dgsave = .FALSE. 1506 ENDIF 1507 IF (iom_use("RGS1000F")) THEN 1508 med_diag%RGS1000F%dgsave = .TRUE. 1509 ELSE 1510 med_diag%RGS1000F%dgsave = .FALSE. 1511 ENDIF 1512 IF (iom_use("REMINN")) THEN 1513 med_diag%REMINN%dgsave = .TRUE. 1514 ELSE 1515 med_diag%REMINN%dgsave = .FALSE. 1516 ENDIF 1517 IF (iom_use("REMINSI")) THEN 1518 med_diag%REMINSI%dgsave = .TRUE. 1519 ELSE 1520 med_diag%REMINSI%dgsave = .FALSE. 1521 ENDIF 1522 IF (iom_use("REMINFE")) THEN 1523 med_diag%REMINFE%dgsave = .TRUE. 1524 ELSE 1525 med_diag%REMINFE%dgsave = .FALSE. 1526 ENDIF 1527 IF (iom_use("REMINC")) THEN 1528 med_diag%REMINC%dgsave = .TRUE. 1529 ELSE 1530 med_diag%REMINC%dgsave = .FALSE. 1531 ENDIF 1532 IF (iom_use("REMINCA")) THEN 1533 med_diag%REMINCA%dgsave = .TRUE. 1534 ELSE 1535 med_diag%REMINCA%dgsave = .FALSE. 1536 ENDIF 1537 IF (iom_use("SEAFLRN")) THEN 1538 med_diag%SEAFLRN%dgsave = .TRUE. 1539 ELSE 1540 med_diag%SEAFLRN%dgsave = .FALSE. 1541 ENDIF 1542 IF (iom_use("SEAFLRSI")) THEN 1543 med_diag%SEAFLRSI%dgsave = .TRUE. 1544 ELSE 1545 med_diag%SEAFLRSI%dgsave = .FALSE. 1546 ENDIF 1547 IF (iom_use("SEAFLRFE")) THEN 1548 med_diag%SEAFLRFE%dgsave = .TRUE. 1549 ELSE 1550 med_diag%SEAFLRFE%dgsave = .FALSE. 1551 ENDIF 1552 IF (iom_use("SEAFLRC")) THEN 1553 med_diag%SEAFLRC%dgsave = .TRUE. 1554 ELSE 1555 med_diag%SEAFLRC%dgsave = .FALSE. 1556 ENDIF 1557 IF (iom_use("SEAFLRCA")) THEN 1558 med_diag%SEAFLRCA%dgsave = .TRUE. 1559 ELSE 1560 med_diag%SEAFLRCA%dgsave = .FALSE. 1561 ENDIF 1562 IF (iom_use("MED_QSR")) THEN 1563 med_diag%MED_QSR%dgsave = .TRUE. 1564 ELSE 1565 med_diag%MED_QSR%dgsave = .FALSE. 1566 ENDIF 1567 IF (iom_use("MED_XPAR")) THEN 1568 med_diag%MED_XPAR%dgsave = .TRUE. 1569 ELSE 1570 med_diag%MED_XPAR%dgsave = .FALSE. 1571 ENDIF 1572 IF (iom_use("INTFLX_N")) THEN 1573 med_diag%INTFLX_N%dgsave = .TRUE. 1574 ELSE 1575 med_diag%INTFLX_N%dgsave = .FALSE. 1576 ENDIF 1577 IF (iom_use("INTFLX_SI")) THEN 1578 med_diag%INTFLX_SI%dgsave = .TRUE. 1579 ELSE 1580 med_diag%INTFLX_SI%dgsave = .FALSE. 1581 ENDIF 1582 IF (iom_use("INTFLX_FE")) THEN 1583 med_diag%INTFLX_FE%dgsave = .TRUE. 1584 ELSE 1585 med_diag%INTFLX_FE%dgsave = .FALSE. 1586 ENDIF 1587 IF (iom_use("INT_PN")) THEN 1588 med_diag%INT_PN%dgsave = .TRUE. 1589 ELSE 1590 med_diag%INT_PN%dgsave = .FALSE. 1591 ENDIF 1592 IF (iom_use("INT_PD")) THEN 1593 med_diag%INT_PD%dgsave = .TRUE. 1594 ELSE 1595 med_diag%INT_PD%dgsave = .FALSE. 1596 ENDIF 1597 IF (iom_use("ML_PRN")) THEN 1598 med_diag%ML_PRN%dgsave = .TRUE. 1599 ELSE 1600 med_diag%ML_PRN%dgsave = .FALSE. 1601 ENDIF 1602 IF (iom_use("ML_PRD")) THEN 1603 med_diag%ML_PRD%dgsave = .TRUE. 1604 ELSE 1605 med_diag%ML_PRD%dgsave = .FALSE. 1606 ENDIF 1607 IF (iom_use("OCAL_CCD")) THEN 1608 med_diag%OCAL_CCD%dgsave = .TRUE. 1609 ELSE 1610 med_diag%OCAL_CCD%dgsave = .FALSE. 1611 ENDIF 1612 IF (iom_use("OCAL_LVL")) THEN 1613 med_diag%OCAL_LVL%dgsave = .TRUE. 1614 ELSE 1615 med_diag%OCAL_LVL%dgsave = .FALSE. 1616 ENDIF 1617 IF (iom_use("FE_0000")) THEN 1618 med_diag%FE_0000%dgsave = .TRUE. 1619 ELSE 1620 med_diag%FE_0000%dgsave = .FALSE. 1621 ENDIF 1622 IF (iom_use("FE_0100")) THEN 1623 med_diag%FE_0100%dgsave = .TRUE. 1624 ELSE 1625 med_diag%FE_0100%dgsave = .FALSE. 1626 ENDIF 1627 IF (iom_use("FE_0200")) THEN 1628 med_diag%FE_0200%dgsave = .TRUE. 1629 ELSE 1630 med_diag%FE_0200%dgsave = .FALSE. 1631 ENDIF 1632 IF (iom_use("FE_0500")) THEN 1633 med_diag%FE_0500%dgsave = .TRUE. 1634 ELSE 1635 med_diag%FE_0500%dgsave = .FALSE. 1636 ENDIF 1637 IF (iom_use("FE_1000")) THEN 1638 med_diag%FE_1000%dgsave = .TRUE. 1639 ELSE 1640 med_diag%FE_1000%dgsave = .FALSE. 1641 ENDIF 1642 IF (iom_use("MED_XZE")) THEN 1643 med_diag%MED_XZE%dgsave = .TRUE. 1644 ELSE 1645 med_diag%MED_XZE%dgsave = .FALSE. 1646 ENDIF 1647 IF (iom_use("WIND")) THEN 1648 med_diag%WIND%dgsave = .TRUE. 1649 ELSE 1650 med_diag%WIND%dgsave = .FALSE. 1651 ENDIF 1652 IF (iom_use("ATM_PCO2")) THEN 1653 med_diag%ATM_PCO2%dgsave = .TRUE. 1654 ELSE 1655 med_diag%ATM_PCO2%dgsave = .FALSE. 1656 ENDIF 1657 IF (iom_use("OCN_PH")) THEN 1658 med_diag%OCN_PH%dgsave = .TRUE. 1659 ELSE 1660 med_diag%OCN_PH%dgsave = .FALSE. 1661 ENDIF 1662 IF (iom_use("OCN_PCO2")) THEN 1663 med_diag%OCN_PCO2%dgsave = .TRUE. 1664 ELSE 1665 med_diag%OCN_PCO2%dgsave = .FALSE. 1666 ENDIF 1667 IF (iom_use("OCNH2CO3")) THEN 1668 med_diag%OCNH2CO3%dgsave = .TRUE. 1669 ELSE 1670 med_diag%OCNH2CO3%dgsave = .FALSE. 1671 ENDIF 1672 IF (iom_use("OCN_HCO3")) THEN 1673 med_diag%OCN_HCO3%dgsave = .TRUE. 1674 ELSE 1675 med_diag%OCN_HCO3%dgsave = .FALSE. 1676 ENDIF 1677 IF (iom_use("OCN_CO3")) THEN 1678 med_diag%OCN_CO3%dgsave = .TRUE. 1679 ELSE 1680 med_diag%OCN_CO3%dgsave = .FALSE. 1681 ENDIF 1682 IF (iom_use("CO2FLUX")) THEN 1683 med_diag%CO2FLUX%dgsave = .TRUE. 1684 ELSE 1685 med_diag%CO2FLUX%dgsave = .FALSE. 1686 ENDIF 1687 IF (iom_use("OM_CAL")) THEN 1688 med_diag%OM_CAL%dgsave = .TRUE. 1689 ELSE 1690 med_diag%OM_CAL%dgsave = .FALSE. 1691 ENDIF 1692 IF (iom_use("OM_ARG")) THEN 1693 med_diag%OM_ARG%dgsave = .TRUE. 1694 ELSE 1695 med_diag%OM_ARG%dgsave = .FALSE. 1696 ENDIF 1697 IF (iom_use("TCO2")) THEN 1698 med_diag%TCO2%dgsave = .TRUE. 1699 ELSE 1700 med_diag%TCO2%dgsave = .FALSE. 1701 ENDIF 1702 IF (iom_use("TALK")) THEN 1703 med_diag%TALK%dgsave = .TRUE. 1704 ELSE 1705 med_diag%TALK%dgsave = .FALSE. 1706 ENDIF 1707 IF (iom_use("KW660")) THEN 1708 med_diag%KW660%dgsave = .TRUE. 1709 ELSE 1710 med_diag%KW660%dgsave = .FALSE. 1711 ENDIF 1712 IF (iom_use("ATM_PP0")) THEN 1713 med_diag%ATM_PP0%dgsave = .TRUE. 1714 ELSE 1715 med_diag%ATM_PP0%dgsave = .FALSE. 1716 ENDIF 1717 IF (iom_use("O2FLUX")) THEN 1718 med_diag%O2FLUX%dgsave = .TRUE. 1719 ELSE 1720 med_diag%O2FLUX%dgsave = .FALSE. 1721 ENDIF 1722 IF (iom_use("O2SAT")) THEN 1723 med_diag%O2SAT%dgsave = .TRUE. 1724 ELSE 1725 med_diag%O2SAT%dgsave = .FALSE. 1726 ENDIF 1727 IF (iom_use("CAL_CCD")) THEN 1728 med_diag%CAL_CCD%dgsave = .TRUE. 1729 ELSE 1730 med_diag%CAL_CCD%dgsave = .FALSE. 1731 ENDIF 1732 IF (iom_use("ARG_CCD")) THEN 1733 med_diag%ARG_CCD%dgsave = .TRUE. 1734 ELSE 1735 med_diag%ARG_CCD%dgsave = .FALSE. 1736 ENDIF 1737 IF (iom_use("SFR_OCAL")) THEN 1738 med_diag%SFR_OCAL%dgsave = .TRUE. 1739 ELSE 1740 med_diag%SFR_OCAL%dgsave = .FALSE. 1741 ENDIF 1742 IF (iom_use("SFR_OARG")) THEN 1743 med_diag%SFR_OARG%dgsave = .TRUE. 1744 ELSE 1745 med_diag%SFR_OARG%dgsave = .FALSE. 1746 ENDIF 1747 IF (iom_use("N_PROD")) THEN 1748 med_diag%N_PROD%dgsave = .TRUE. 1749 ELSE 1750 med_diag%N_PROD%dgsave = .FALSE. 1751 ENDIF 1752 IF (iom_use("N_CONS")) THEN 1753 med_diag%N_CONS%dgsave = .TRUE. 1754 ELSE 1755 med_diag%N_CONS%dgsave = .FALSE. 1756 ENDIF 1757 IF (iom_use("C_PROD")) THEN 1758 med_diag%C_PROD%dgsave = .TRUE. 1759 ELSE 1760 med_diag%C_PROD%dgsave = .FALSE. 1761 ENDIF 1762 IF (iom_use("C_CONS")) THEN 1763 med_diag%C_CONS%dgsave = .TRUE. 1764 ELSE 1765 med_diag%C_CONS%dgsave = .FALSE. 1766 ENDIF 1767 IF (iom_use("O2_PROD")) THEN 1768 med_diag%O2_PROD%dgsave = .TRUE. 1769 ELSE 1770 med_diag%O2_PROD%dgsave = .FALSE. 1771 ENDIF 1772 IF (iom_use("O2_CONS")) THEN 1773 med_diag%O2_CONS%dgsave = .TRUE. 1774 ELSE 1775 med_diag%O2_CONS%dgsave = .FALSE. 1776 ENDIF 1777 IF (iom_use("O2_ANOX")) THEN 1778 med_diag%O2_ANOX%dgsave = .TRUE. 1779 ELSE 1780 med_diag%O2_ANOX%dgsave = .FALSE. 1781 ENDIF 1782 IF (iom_use("RR_0100")) THEN 1783 med_diag%RR_0100%dgsave = .TRUE. 1784 ELSE 1785 med_diag%RR_0100%dgsave = .FALSE. 1786 ENDIF 1787 IF (iom_use("RR_0500")) THEN 1788 med_diag%RR_0500%dgsave = .TRUE. 1789 ELSE 1790 med_diag%RR_0500%dgsave = .FALSE. 1791 ENDIF 1792 IF (iom_use("RR_1000")) THEN 1793 med_diag%RR_1000%dgsave = .TRUE. 1794 ELSE 1795 med_diag%RR_1000%dgsave = .FALSE. 1796 ENDIF 1797 IF (iom_use("IBEN_N")) THEN 1798 med_diag%IBEN_N%dgsave = .TRUE. 1799 ELSE 1800 med_diag%IBEN_N%dgsave = .FALSE. 1801 ENDIF 1802 IF (iom_use("IBEN_FE")) THEN 1803 med_diag%IBEN_FE%dgsave = .TRUE. 1804 ELSE 1805 med_diag%IBEN_FE%dgsave = .FALSE. 1806 ENDIF 1807 IF (iom_use("IBEN_C")) THEN 1808 med_diag%IBEN_C%dgsave = .TRUE. 1809 ELSE 1810 med_diag%IBEN_C%dgsave = .FALSE. 1811 ENDIF 1812 IF (iom_use("IBEN_SI")) THEN 1813 med_diag%IBEN_SI%dgsave = .TRUE. 1814 ELSE 1815 med_diag%IBEN_SI%dgsave = .FALSE. 1816 ENDIF 1817 IF (iom_use("IBEN_CA")) THEN 1818 med_diag%IBEN_CA%dgsave = .TRUE. 1819 ELSE 1820 med_diag%IBEN_CA%dgsave = .FALSE. 1821 ENDIF 1822 IF (iom_use("OBEN_N")) THEN 1823 med_diag%OBEN_N%dgsave = .TRUE. 1824 ELSE 1825 med_diag%OBEN_N%dgsave = .FALSE. 1826 ENDIF 1827 IF (iom_use("OBEN_FE")) THEN 1828 med_diag%OBEN_FE%dgsave = .TRUE. 1829 ELSE 1830 med_diag%OBEN_FE%dgsave = .FALSE. 1831 ENDIF 1832 IF (iom_use("OBEN_C")) THEN 1833 med_diag%OBEN_C%dgsave = .TRUE. 1834 ELSE 1835 med_diag%OBEN_C%dgsave = .FALSE. 1836 ENDIF 1837 IF (iom_use("OBEN_SI")) THEN 1838 med_diag%OBEN_SI%dgsave = .TRUE. 1839 ELSE 1840 med_diag%OBEN_SI%dgsave = .FALSE. 1841 ENDIF 1842 IF (iom_use("OBEN_CA")) THEN 1843 med_diag%OBEN_CA%dgsave = .TRUE. 1844 ELSE 1845 med_diag%OBEN_CA%dgsave = .FALSE. 1846 ENDIF 1847 IF (iom_use("BEN_N")) THEN 1848 med_diag%BEN_N%dgsave = .TRUE. 1849 ELSE 1850 med_diag%BEN_N%dgsave = .FALSE. 1851 ENDIF 1852 IF (iom_use("BEN_FE")) THEN 1853 med_diag%BEN_FE%dgsave = .TRUE. 1854 ELSE 1855 med_diag%BEN_FE%dgsave = .FALSE. 1856 ENDIF 1857 IF (iom_use("BEN_C")) THEN 1858 med_diag%BEN_C%dgsave = .TRUE. 1859 ELSE 1860 med_diag%BEN_C%dgsave = .FALSE. 1861 ENDIF 1862 IF (iom_use("BEN_SI")) THEN 1863 med_diag%BEN_SI%dgsave = .TRUE. 1864 ELSE 1865 med_diag%BEN_SI%dgsave = .FALSE. 1866 ENDIF 1867 IF (iom_use("BEN_CA")) THEN 1868 med_diag%BEN_CA%dgsave = .TRUE. 1869 ELSE 1870 med_diag%BEN_CA%dgsave = .FALSE. 1871 ENDIF 1872 IF (iom_use("RUNOFF")) THEN 1873 med_diag%RUNOFF%dgsave = .TRUE. 1874 ELSE 1875 med_diag%RUNOFF%dgsave = .FALSE. 1876 ENDIF 1877 IF (iom_use("RIV_N")) THEN 1878 med_diag%RIV_N%dgsave = .TRUE. 1879 ELSE 1880 med_diag%RIV_N%dgsave = .FALSE. 1881 ENDIF 1882 IF (iom_use("RIV_SI")) THEN 1883 med_diag%RIV_SI%dgsave = .TRUE. 1884 ELSE 1885 med_diag%RIV_SI%dgsave = .FALSE. 1886 ENDIF 1887 IF (iom_use("RIV_C")) THEN 1888 med_diag%RIV_C%dgsave = .TRUE. 1889 ELSE 1890 med_diag%RIV_C%dgsave = .FALSE. 1891 ENDIF 1892 IF (iom_use("RIV_ALK")) THEN 1893 med_diag%RIV_ALK%dgsave = .TRUE. 1894 ELSE 1895 med_diag%RIV_ALK%dgsave = .FALSE. 1896 ENDIF 1897 IF (iom_use("DETC")) THEN 1898 med_diag%DETC%dgsave = .TRUE. 1899 ELSE 1900 med_diag%DETC%dgsave = .FALSE. 1901 ENDIF 1902 IF (iom_use("SDC__100")) THEN 1903 med_diag%SDC__100%dgsave = .TRUE. 1904 ELSE 1905 med_diag%SDC__100%dgsave = .FALSE. 1906 ENDIF 1907 IF (iom_use("SDC__200")) THEN 1908 med_diag%SDC__200%dgsave = .TRUE. 1909 ELSE 1910 med_diag%SDC__200%dgsave = .FALSE. 1911 ENDIF 1912 IF (iom_use("SDC__500")) THEN 1913 med_diag%SDC__500%dgsave = .TRUE. 1914 ELSE 1915 med_diag%SDC__500%dgsave = .FALSE. 1916 ENDIF 1917 IF (iom_use("SDC_1000")) THEN 1918 med_diag%SDC_1000%dgsave = .TRUE. 1919 ELSE 1920 med_diag%SDC_1000%dgsave = .FALSE. 1921 ENDIF 1922 IF (iom_use("INVTC")) THEN 1923 med_diag%INVTC%dgsave = .TRUE. 1924 ELSE 1925 med_diag%INVTC%dgsave = .FALSE. 1926 ENDIF 1927 IF (iom_use("INVTALK")) THEN 1928 med_diag%INVTALK%dgsave = .TRUE. 1929 ELSE 1930 med_diag%INVTALK%dgsave = .FALSE. 1931 ENDIF 1932 IF (iom_use("INVTO2")) THEN 1933 med_diag%INVTO2%dgsave = .TRUE. 1934 ELSE 1935 med_diag%INVTO2%dgsave = .FALSE. 1936 ENDIF 1937 IF (iom_use("LYSO_CA")) THEN 1938 med_diag%LYSO_CA%dgsave = .TRUE. 1939 ELSE 1940 med_diag%LYSO_CA%dgsave = .FALSE. 1941 ENDIF 1942 IF (iom_use("COM_RESP")) THEN 1943 med_diag%COM_RESP%dgsave = .TRUE. 1944 ELSE 1945 med_diag%COM_RESP%dgsave = .FALSE. 1946 ENDIF 1947 IF (iom_use("PN_LLOSS")) THEN 1948 med_diag%PN_LLOSS%dgsave = .TRUE. 1949 ELSE 1950 med_diag%PN_LLOSS%dgsave = .FALSE. 1951 ENDIF 1952 IF (iom_use("PD_LLOSS")) THEN 1953 med_diag%PD_LLOSS%dgsave = .TRUE. 1954 ELSE 1955 med_diag%PD_LLOSS%dgsave = .FALSE. 1956 ENDIF 1957 IF (iom_use("ZI_LLOSS")) THEN 1958 med_diag%ZI_LLOSS%dgsave = .TRUE. 1959 ELSE 1960 med_diag%ZI_LLOSS%dgsave = .FALSE. 1961 ENDIF 1962 IF (iom_use("ZE_LLOSS")) THEN 1963 med_diag%ZE_LLOSS%dgsave = .TRUE. 1964 ELSE 1965 med_diag%ZE_LLOSS%dgsave = .FALSE. 1966 ENDIF 1967 IF (iom_use("ZI_MES_N")) THEN 1968 med_diag%ZI_MES_N%dgsave = .TRUE. 1969 ELSE 1970 med_diag%ZI_MES_N%dgsave = .FALSE. 1971 ENDIF 1972 IF (iom_use("ZI_MES_D")) THEN 1973 med_diag%ZI_MES_D%dgsave = .TRUE. 1974 ELSE 1975 med_diag%ZI_MES_D%dgsave = .FALSE. 1976 ENDIF 1977 IF (iom_use("ZI_MES_C")) THEN 1978 med_diag%ZI_MES_C%dgsave = .TRUE. 1979 ELSE 1980 med_diag%ZI_MES_C%dgsave = .FALSE. 1981 ENDIF 1982 IF (iom_use("ZI_MESDC")) THEN 1983 med_diag%ZI_MESDC%dgsave = .TRUE. 1984 ELSE 1985 med_diag%ZI_MESDC%dgsave = .FALSE. 1986 ENDIF 1987 IF (iom_use("ZI_EXCR")) THEN 1988 med_diag%ZI_EXCR%dgsave = .TRUE. 1989 ELSE 1990 med_diag%ZI_EXCR%dgsave = .FALSE. 1991 ENDIF 1992 IF (iom_use("ZI_RESP")) THEN 1993 med_diag%ZI_RESP%dgsave = .TRUE. 1994 ELSE 1995 med_diag%ZI_RESP%dgsave = .FALSE. 1996 ENDIF 1997 IF (iom_use("ZI_GROW")) THEN 1998 med_diag%ZI_GROW%dgsave = .TRUE. 1999 ELSE 2000 med_diag%ZI_GROW%dgsave = .FALSE. 2001 ENDIF 2002 IF (iom_use("ZE_MES_N")) THEN 2003 med_diag%ZE_MES_N%dgsave = .TRUE. 2004 ELSE 2005 med_diag%ZE_MES_N%dgsave = .FALSE. 2006 ENDIF 2007 IF (iom_use("ZE_MES_D")) THEN 2008 med_diag%ZE_MES_D%dgsave = .TRUE. 2009 ELSE 2010 med_diag%ZE_MES_D%dgsave = .FALSE. 2011 ENDIF 2012 IF (iom_use("ZE_MES_C")) THEN 2013 med_diag%ZE_MES_C%dgsave = .TRUE. 2014 ELSE 2015 med_diag%ZE_MES_C%dgsave = .FALSE. 2016 ENDIF 2017 IF (iom_use("ZE_MESDC")) THEN 2018 med_diag%ZE_MESDC%dgsave = .TRUE. 2019 ELSE 2020 med_diag%ZE_MESDC%dgsave = .FALSE. 2021 ENDIF 2022 IF (iom_use("ZE_EXCR")) THEN 2023 med_diag%ZE_EXCR%dgsave = .TRUE. 2024 ELSE 2025 med_diag%ZE_EXCR%dgsave = .FALSE. 2026 ENDIF 2027 IF (iom_use("ZE_RESP")) THEN 2028 med_diag%ZE_RESP%dgsave = .TRUE. 2029 ELSE 2030 med_diag%ZE_RESP%dgsave = .FALSE. 2031 ENDIF 2032 IF (iom_use("ZE_GROW")) THEN 2033 med_diag%ZE_GROW%dgsave = .TRUE. 2034 ELSE 2035 med_diag%ZE_GROW%dgsave = .FALSE. 2036 ENDIF 2037 IF (iom_use("MDETC")) THEN 2038 med_diag%MDETC%dgsave = .TRUE. 2039 ELSE 2040 med_diag%MDETC%dgsave = .FALSE. 2041 ENDIF 2042 IF (iom_use("GMIDC")) THEN 2043 med_diag%GMIDC%dgsave = .TRUE. 2044 ELSE 2045 med_diag%GMIDC%dgsave = .FALSE. 2046 ENDIF 2047 IF (iom_use("GMEDC")) THEN 2048 med_diag%GMEDC%dgsave = .TRUE. 2049 ELSE 2050 med_diag%GMEDC%dgsave = .FALSE. 2051 ENDIF 2052 IF (iom_use("INT_ZMI")) THEN 2053 med_diag%INT_ZMI%dgsave = .TRUE. 2054 ELSE 2055 med_diag%INT_ZMI%dgsave = .FALSE. 2056 ENDIF 2057 IF (iom_use("INT_ZME")) THEN 2058 med_diag%INT_ZME%dgsave = .TRUE. 2059 ELSE 2060 med_diag%INT_ZME%dgsave = .FALSE. 2061 ENDIF 2062 IF (iom_use("INT_DET")) THEN 2063 med_diag%INT_DET%dgsave = .TRUE. 2064 ELSE 2065 med_diag%INT_DET%dgsave = .FALSE. 2066 ENDIF 2067 IF (iom_use("INT_DTC")) THEN 2068 med_diag%INT_DTC%dgsave = .TRUE. 2069 ELSE 2070 med_diag%INT_DTC%dgsave = .FALSE. 2071 ENDIF 2072 IF (iom_use("DMS_SURF")) THEN 2073 med_diag%DMS_SURF%dgsave = .TRUE. 2074 ELSE 2075 med_diag%DMS_SURF%dgsave = .FALSE. 2076 ENDIF 2077 IF (iom_use("DMS_ANDR")) THEN 2078 med_diag%DMS_ANDR%dgsave = .TRUE. 2079 ELSE 2080 med_diag%DMS_ANDR%dgsave = .FALSE. 2081 ENDIF 2082 IF (iom_use("DMS_SIMO")) THEN 2083 med_diag%DMS_SIMO%dgsave = .TRUE. 2084 ELSE 2085 med_diag%DMS_SIMO%dgsave = .FALSE. 2086 ENDIF 2087 IF (iom_use("DMS_ARAN")) THEN 2088 med_diag%DMS_ARAN%dgsave = .TRUE. 2089 ELSE 2090 med_diag%DMS_ARAN%dgsave = .FALSE. 2091 ENDIF 2092 IF (iom_use("DMS_HALL")) THEN 2093 med_diag%DMS_HALL%dgsave = .TRUE. 2094 ELSE 2095 med_diag%DMS_HALL%dgsave = .FALSE. 2096 ENDIF 2097 IF (iom_use("ATM_XCO2")) THEN 2098 med_diag%ATM_XCO2%dgsave = .TRUE. 2099 ELSE 2100 med_diag%ATM_XCO2%dgsave = .FALSE. 2101 ENDIF 2102 IF (iom_use("OCN_FCO2")) THEN 2103 med_diag%OCN_FCO2%dgsave = .TRUE. 2104 ELSE 2105 med_diag%OCN_FCO2%dgsave = .FALSE. 2106 ENDIF 2107 IF (iom_use("ATM_FCO2")) THEN 2108 med_diag%ATM_FCO2%dgsave = .TRUE. 2109 ELSE 2110 med_diag%ATM_FCO2%dgsave = .FALSE. 2111 ENDIF 2112 IF (iom_use("OCN_RHOSW")) THEN 2113 med_diag%OCN_RHOSW%dgsave = .TRUE. 2114 ELSE 2115 med_diag%OCN_RHOSW%dgsave = .FALSE. 2116 ENDIF 2117 IF (iom_use("OCN_SCHCO2")) THEN 2118 med_diag%OCN_SCHCO2%dgsave = .TRUE. 2119 ELSE 2120 med_diag%OCN_SCHCO2%dgsave = .FALSE. 2121 ENDIF 2122 IF (iom_use("OCN_KWCO2")) THEN 2123 med_diag%OCN_KWCO2%dgsave = .TRUE. 2124 ELSE 2125 med_diag%OCN_KWCO2%dgsave = .FALSE. 2126 ENDIF 2127 IF (iom_use("OCN_K0")) THEN 2128 med_diag%OCN_K0%dgsave = .TRUE. 2129 ELSE 2130 med_diag%OCN_K0%dgsave = .FALSE. 2131 ENDIF 2132 IF (iom_use("CO2STARAIR")) THEN 2133 med_diag%CO2STARAIR%dgsave = .TRUE. 2134 ELSE 2135 med_diag%CO2STARAIR%dgsave = .FALSE. 2136 ENDIF 2137 IF (iom_use("OCN_DPCO2")) THEN 2138 med_diag%OCN_DPCO2%dgsave = .TRUE. 2139 ELSE 2140 med_diag%OCN_DPCO2%dgsave = .FALSE. 2000 2141 ENDIF 2001 2142 !! 2002 !! 3D fields 2003 IF (iom_use("TPP3")) THEN 2004 med_diag%TPP3%dgsave = .TRUE. 2005 ELSE 2006 med_diag%TPP3%dgsave = .FALSE. 2007 ENDIF 2008 IF (iom_use("DETFLUX3")) THEN 2009 med_diag%DETFLUX3%dgsave = .TRUE. 2010 ELSE 2011 med_diag%DETFLUX3%dgsave = .FALSE. 2012 ENDIF 2013 IF (iom_use("REMIN3N")) THEN 2014 med_diag%REMIN3N%dgsave = .TRUE. 2015 ELSE 2016 med_diag%REMIN3N%dgsave = .FALSE. 2017 ENDIF 2018 IF (iom_use("PH3")) THEN 2019 med_diag%PH3%dgsave = .TRUE. 2020 ELSE 2021 med_diag%PH3%dgsave = .FALSE. 2022 ENDIF 2023 IF (iom_use("OM_CAL3")) THEN 2024 med_diag%OM_CAL3%dgsave = .TRUE. 2025 ELSE 2026 med_diag%OM_CAL3%dgsave = .FALSE. 2143 IF (iom_use("TPP3")) THEN 2144 med_diag%TPP3%dgsave = .TRUE. 2145 ELSE 2146 med_diag%TPP3%dgsave = .FALSE. 2147 ENDIF 2148 IF (iom_use("DETFLUX3")) THEN 2149 med_diag%DETFLUX3%dgsave = .TRUE. 2150 ELSE 2151 med_diag%DETFLUX3%dgsave = .FALSE. 2152 ENDIF 2153 IF (iom_use("REMIN3N")) THEN 2154 med_diag%REMIN3N%dgsave = .TRUE. 2155 ELSE 2156 med_diag%REMIN3N%dgsave = .FALSE. 2157 ENDIF 2158 IF (iom_use("PH3")) THEN 2159 med_diag%PH3%dgsave = .TRUE. 2160 ELSE 2161 med_diag%PH3%dgsave = .FALSE. 2162 ENDIF 2163 IF (iom_use("OM_CAL3")) THEN 2164 med_diag%OM_CAL3%dgsave = .TRUE. 2165 ELSE 2166 med_diag%OM_CAL3%dgsave = .FALSE. 2027 2167 ENDIF 2028 2168 !! … … 2032 2172 !! 2033 2173 !! 2D fields 2034 IF (iom_use("epC100")) THEN2035 med_diag%epC100%dgsave = .TRUE.2036 ELSE 2037 med_diag%epC100%dgsave = .FALSE.2038 ENDIF 2039 IF (iom_use("epCALC100")) THEN2040 med_diag%epCALC100%dgsave = .TRUE.2041 ELSE 2042 med_diag%epCALC100%dgsave = .FALSE.2043 ENDIF 2044 IF (iom_use("epN100")) THEN2045 med_diag%epN100%dgsave = .TRUE.2046 ELSE 2047 med_diag%epN100%dgsave = .FALSE.2048 ENDIF 2049 IF (iom_use("epSI100")) THEN2050 med_diag%epSI100%dgsave = .TRUE.2051 ELSE 2052 med_diag%epSI100%dgsave = .FALSE.2053 ENDIF 2054 IF (iom_use("FGCO2")) THEN2055 med_diag%FGCO2%dgsave = .TRUE.2056 ELSE 2057 med_diag%FGCO2%dgsave = .FALSE.2058 ENDIF 2059 IF (iom_use("INTDISSIC")) THEN2060 med_diag%INTDISSIC%dgsave = .TRUE.2061 ELSE 2062 med_diag%INTDISSIC%dgsave = .FALSE.2063 ENDIF 2064 IF (iom_use("INTDISSIN")) THEN2065 med_diag%INTDISSIN%dgsave = .TRUE.2066 ELSE 2067 med_diag%INTDISSIN%dgsave = .FALSE.2068 ENDIF 2069 IF (iom_use("INTDISSISI")) THEN2070 med_diag%INTDISSISI%dgsave = .TRUE.2071 ELSE 2072 med_diag%INTDISSISI%dgsave = .FALSE.2073 ENDIF 2074 IF (iom_use("INTTALK")) THEN2075 med_diag%INTTALK%dgsave = .TRUE.2076 ELSE 2077 med_diag%INTTALK%dgsave = .FALSE.2078 ENDIF 2079 IF (iom_use("O2min")) THEN2080 med_diag%O2min%dgsave = .TRUE.2081 ELSE 2082 med_diag%O2min%dgsave = .FALSE.2083 ENDIF 2084 IF (iom_use("ZO2min")) THEN2085 med_diag%ZO2min%dgsave = .TRUE.2086 ELSE 2087 med_diag%ZO2min%dgsave = .FALSE.2088 ENDIF 2089 IF (iom_use("FBDDTALK")) THEN2090 med_diag%FBDDTALK%dgsave = .TRUE.2091 ELSE 2092 med_diag%FBDDTALK%dgsave = .FALSE.2093 ENDIF 2094 IF (iom_use("FBDDTDIC")) THEN2095 med_diag%FBDDTDIC%dgsave = .TRUE.2096 ELSE 2097 med_diag%FBDDTDIC%dgsave = .FALSE.2098 ENDIF 2099 IF (iom_use("FBDDTDIFE")) THEN2100 med_diag%FBDDTDIFE%dgsave = .TRUE.2101 ELSE 2102 med_diag%FBDDTDIFE%dgsave = .FALSE.2103 ENDIF 2104 IF (iom_use("FBDDTDIN")) THEN2105 med_diag%FBDDTDIN%dgsave = .TRUE.2106 ELSE 2107 med_diag%FBDDTDIN%dgsave = .FALSE.2108 ENDIF 2109 IF (iom_use("FBDDTDISI")) THEN2110 med_diag%FBDDTDISI%dgsave = .TRUE.2111 ELSE 2112 med_diag%FBDDTDISI%dgsave = .FALSE.2174 IF (iom_use("epC100")) THEN 2175 med_diag%epC100%dgsave = .TRUE. 2176 ELSE 2177 med_diag%epC100%dgsave = .FALSE. 2178 ENDIF 2179 IF (iom_use("epCALC100")) THEN 2180 med_diag%epCALC100%dgsave = .TRUE. 2181 ELSE 2182 med_diag%epCALC100%dgsave = .FALSE. 2183 ENDIF 2184 IF (iom_use("epN100")) THEN 2185 med_diag%epN100%dgsave = .TRUE. 2186 ELSE 2187 med_diag%epN100%dgsave = .FALSE. 2188 ENDIF 2189 IF (iom_use("epSI100")) THEN 2190 med_diag%epSI100%dgsave = .TRUE. 2191 ELSE 2192 med_diag%epSI100%dgsave = .FALSE. 2193 ENDIF 2194 IF (iom_use("FGCO2")) THEN 2195 med_diag%FGCO2%dgsave = .TRUE. 2196 ELSE 2197 med_diag%FGCO2%dgsave = .FALSE. 2198 ENDIF 2199 IF (iom_use("INTDISSIC")) THEN 2200 med_diag%INTDISSIC%dgsave = .TRUE. 2201 ELSE 2202 med_diag%INTDISSIC%dgsave = .FALSE. 2203 ENDIF 2204 IF (iom_use("INTDISSIN")) THEN 2205 med_diag%INTDISSIN%dgsave = .TRUE. 2206 ELSE 2207 med_diag%INTDISSIN%dgsave = .FALSE. 2208 ENDIF 2209 IF (iom_use("INTDISSISI")) THEN 2210 med_diag%INTDISSISI%dgsave = .TRUE. 2211 ELSE 2212 med_diag%INTDISSISI%dgsave = .FALSE. 2213 ENDIF 2214 IF (iom_use("INTTALK")) THEN 2215 med_diag%INTTALK%dgsave = .TRUE. 2216 ELSE 2217 med_diag%INTTALK%dgsave = .FALSE. 2218 ENDIF 2219 IF (iom_use("O2min")) THEN 2220 med_diag%O2min%dgsave = .TRUE. 2221 ELSE 2222 med_diag%O2min%dgsave = .FALSE. 2223 ENDIF 2224 IF (iom_use("ZO2min")) THEN 2225 med_diag%ZO2min%dgsave = .TRUE. 2226 ELSE 2227 med_diag%ZO2min%dgsave = .FALSE. 2228 ENDIF 2229 IF (iom_use("FBDDTALK")) THEN 2230 med_diag%FBDDTALK%dgsave = .TRUE. 2231 ELSE 2232 med_diag%FBDDTALK%dgsave = .FALSE. 2233 ENDIF 2234 IF (iom_use("FBDDTDIC")) THEN 2235 med_diag%FBDDTDIC%dgsave = .TRUE. 2236 ELSE 2237 med_diag%FBDDTDIC%dgsave = .FALSE. 2238 ENDIF 2239 IF (iom_use("FBDDTDIFE")) THEN 2240 med_diag%FBDDTDIFE%dgsave = .TRUE. 2241 ELSE 2242 med_diag%FBDDTDIFE%dgsave = .FALSE. 2243 ENDIF 2244 IF (iom_use("FBDDTDIN")) THEN 2245 med_diag%FBDDTDIN%dgsave = .TRUE. 2246 ELSE 2247 med_diag%FBDDTDIN%dgsave = .FALSE. 2248 ENDIF 2249 IF (iom_use("FBDDTDISI")) THEN 2250 med_diag%FBDDTDISI%dgsave = .TRUE. 2251 ELSE 2252 med_diag%FBDDTDISI%dgsave = .FALSE. 2113 2253 ENDIF 2114 2254 !! 2115 !! 3D fields2116 IF (iom_use("TPPD3")) THEN2117 med_diag%TPPD3%dgsave = .TRUE.2118 ELSE 2119 med_diag%TPPD3%dgsave = .FALSE.2120 ENDIF 2121 IF (iom_use("BDDTALK3")) THEN2122 med_diag%BDDTALK3%dgsave = .TRUE.2123 ELSE 2124 med_diag%BDDTALK3%dgsave = .FALSE.2125 ENDIF 2126 IF (iom_use("BDDTDIC3")) THEN2127 med_diag%BDDTDIC3%dgsave = .TRUE.2128 ELSE 2129 med_diag%BDDTDIC3%dgsave = .FALSE.2130 ENDIF 2131 IF (iom_use("BDDTDIFE3")) THEN2132 med_diag%BDDTDIFE3%dgsave = .TRUE.2133 ELSE 2134 med_diag%BDDTDIFE3%dgsave = .FALSE.2135 ENDIF 2136 IF (iom_use("BDDTDIN3")) THEN2137 med_diag%BDDTDIN3%dgsave = .TRUE.2138 ELSE 2139 med_diag%BDDTDIN3%dgsave = .FALSE.2140 ENDIF 2141 IF (iom_use("BDDTDISI3")) THEN2142 med_diag%BDDTDISI3%dgsave = .TRUE.2143 ELSE 2144 med_diag%BDDTDISI3%dgsave = .FALSE.2145 ENDIF 2146 IF (iom_use("FD_NIT3")) THEN2147 med_diag%FD_NIT3%dgsave = .TRUE.2148 ELSE 2149 med_diag%FD_NIT3%dgsave = .FALSE.2150 ENDIF 2151 IF (iom_use("FD_SIL3")) THEN2152 med_diag%FD_SIL3%dgsave = .TRUE.2153 ELSE 2154 med_diag%FD_SIL3%dgsave = .FALSE.2155 ENDIF 2156 IF (iom_use("FD_CAR3")) THEN2157 med_diag%FD_CAR3%dgsave = .TRUE.2158 ELSE 2159 med_diag%FD_CAR3%dgsave = .FALSE.2160 ENDIF 2161 IF (iom_use("FD_CAL3")) THEN2162 med_diag%FD_CAL3%dgsave = .TRUE.2163 ELSE 2164 med_diag%FD_CAL3%dgsave = .FALSE.2165 ENDIF 2166 IF (iom_use("CO33")) THEN2167 med_diag%CO33%dgsave = .TRUE.2168 ELSE 2169 med_diag%CO33%dgsave = .FALSE.2170 ENDIF 2171 IF (iom_use("CO3SATARAG3")) THEN2172 med_diag%CO3SATARAG3%dgsave = .TRUE.2173 ELSE 2174 med_diag%CO3SATARAG3%dgsave = .FALSE.2175 ENDIF 2176 IF (iom_use("CO3SATCALC3")) THEN2177 med_diag%CO3SATCALC3%dgsave = .TRUE.2178 ELSE 2179 med_diag%CO3SATCALC3%dgsave = .FALSE.2180 ENDIF 2181 IF (iom_use("DCALC3")) THEN2182 med_diag%DCALC3%dgsave = .TRUE.2183 ELSE 2184 med_diag%DCALC3%dgsave = .FALSE.2185 ENDIF 2186 IF (iom_use("EXPC3")) THEN2187 med_diag%EXPC3%dgsave = .TRUE.2188 ELSE 2189 med_diag%EXPC3%dgsave = .FALSE.2190 ENDIF 2191 IF (iom_use("EXPN3")) THEN2192 med_diag%EXPN3%dgsave = .TRUE.2193 ELSE 2194 med_diag%EXPN3%dgsave = .FALSE.2195 ENDIF 2196 IF (iom_use("FEDISS3")) THEN2197 med_diag%FEDISS3%dgsave = .TRUE.2198 ELSE 2199 med_diag%FEDISS3%dgsave = .FALSE.2200 ENDIF 2201 IF (iom_use("FESCAV3")) THEN2202 med_diag%FESCAV3%dgsave = .TRUE.2203 ELSE 2204 med_diag%FESCAV3%dgsave = .FALSE.2205 ENDIF 2206 IF (iom_use("MIGRAZP3")) THEN2207 med_diag%MIGRAZP3%dgsave = .TRUE.2208 ELSE 2209 med_diag%MIGRAZP3%dgsave = .FALSE.2210 ENDIF 2211 IF (iom_use("MIGRAZD3")) THEN2212 med_diag%MIGRAZD3%dgsave = .TRUE.2213 ELSE 2214 med_diag%MIGRAZD3%dgsave = .FALSE.2215 ENDIF 2216 IF (iom_use("MEGRAZP3")) THEN2217 med_diag%MEGRAZP3%dgsave = .TRUE.2218 ELSE 2219 med_diag%MEGRAZP3%dgsave = .FALSE.2220 ENDIF 2221 IF (iom_use("MEGRAZD3")) THEN2222 med_diag%MEGRAZD3%dgsave = .TRUE.2223 ELSE 2224 med_diag%MEGRAZD3%dgsave = .FALSE.2225 ENDIF 2226 IF (iom_use("MEGRAZZ3")) THEN2227 med_diag%MEGRAZZ3%dgsave = .TRUE.2228 ELSE 2229 med_diag%MEGRAZZ3%dgsave = .FALSE.2230 ENDIF 2231 IF (iom_use("O2SAT3")) THEN2232 med_diag%O2SAT3%dgsave = .TRUE.2233 ELSE 2234 med_diag%O2SAT3%dgsave = .FALSE.2235 ENDIF 2236 IF (iom_use("PBSI3")) THEN2237 med_diag%PBSI3%dgsave = .TRUE.2238 ELSE 2239 med_diag%PBSI3%dgsave = .FALSE.2240 ENDIF 2241 IF (iom_use("PCAL3")) THEN2242 med_diag%PCAL3%dgsave = .TRUE.2243 ELSE 2244 med_diag%PCAL3%dgsave = .FALSE.2245 ENDIF 2246 IF (iom_use("REMOC3")) THEN2247 med_diag%REMOC3%dgsave = .TRUE.2248 ELSE 2249 med_diag%REMOC3%dgsave = .FALSE.2250 ENDIF 2251 IF (iom_use("PNLIMJ3")) THEN2252 med_diag%PNLIMJ3%dgsave = .TRUE.2253 ELSE 2254 med_diag%PNLIMJ3%dgsave = .FALSE.2255 ENDIF 2256 IF (iom_use("PNLIMN3")) THEN2257 med_diag%PNLIMN3%dgsave = .TRUE.2258 ELSE 2259 med_diag%PNLIMN3%dgsave = .FALSE.2260 ENDIF 2261 IF (iom_use("PNLIMFE3")) THEN2262 med_diag%PNLIMFE3%dgsave = .TRUE.2263 ELSE 2264 med_diag%PNLIMFE3%dgsave = .FALSE.2265 ENDIF 2266 IF (iom_use("PDLIMJ3")) THEN2267 med_diag%PDLIMJ3%dgsave = .TRUE.2268 ELSE 2269 med_diag%PDLIMJ3%dgsave = .FALSE.2270 ENDIF 2271 IF (iom_use("PDLIMN3")) THEN2272 med_diag%PDLIMN3%dgsave = .TRUE.2273 ELSE 2274 med_diag%PDLIMN3%dgsave = .FALSE.2275 ENDIF 2276 IF (iom_use("PDLIMFE3")) THEN2277 med_diag%PDLIMFE3%dgsave = .TRUE.2278 ELSE 2279 med_diag%PDLIMFE3%dgsave = .FALSE.2280 ENDIF 2281 IF (iom_use("PDLIMSI3")) THEN2282 med_diag%PDLIMSI3%dgsave = .TRUE.2283 ELSE 2284 med_diag%PDLIMSI3%dgsave = .FALSE.2285 ENDIF 2286 2255 !! 3D 2256 IF (iom_use("TPPD3")) THEN 2257 med_diag%TPPD3%dgsave = .TRUE. 2258 ELSE 2259 med_diag%TPPD3%dgsave = .FALSE. 2260 ENDIF 2261 IF (iom_use("BDDTALK3")) THEN 2262 med_diag%BDDTALK3%dgsave = .TRUE. 2263 ELSE 2264 med_diag%BDDTALK3%dgsave = .FALSE. 2265 ENDIF 2266 IF (iom_use("BDDTDIC3")) THEN 2267 med_diag%BDDTDIC3%dgsave = .TRUE. 2268 ELSE 2269 med_diag%BDDTDIC3%dgsave = .FALSE. 2270 ENDIF 2271 IF (iom_use("BDDTDIFE3")) THEN 2272 med_diag%BDDTDIFE3%dgsave = .TRUE. 2273 ELSE 2274 med_diag%BDDTDIFE3%dgsave = .FALSE. 2275 ENDIF 2276 IF (iom_use("BDDTDIN3")) THEN 2277 med_diag%BDDTDIN3%dgsave = .TRUE. 2278 ELSE 2279 med_diag%BDDTDIN3%dgsave = .FALSE. 2280 ENDIF 2281 IF (iom_use("BDDTDISI3")) THEN 2282 med_diag%BDDTDISI3%dgsave = .TRUE. 2283 ELSE 2284 med_diag%BDDTDISI3%dgsave = .FALSE. 2285 ENDIF 2286 IF (iom_use("FD_NIT3")) THEN 2287 med_diag%FD_NIT3%dgsave = .TRUE. 2288 ELSE 2289 med_diag%FD_NIT3%dgsave = .FALSE. 2290 ENDIF 2291 IF (iom_use("FD_SIL3")) THEN 2292 med_diag%FD_SIL3%dgsave = .TRUE. 2293 ELSE 2294 med_diag%FD_SIL3%dgsave = .FALSE. 2295 ENDIF 2296 IF (iom_use("FD_CAR3")) THEN 2297 med_diag%FD_CAR3%dgsave = .TRUE. 2298 ELSE 2299 med_diag%FD_CAR3%dgsave = .FALSE. 2300 ENDIF 2301 IF (iom_use("FD_CAL3")) THEN 2302 med_diag%FD_CAL3%dgsave = .TRUE. 2303 ELSE 2304 med_diag%FD_CAL3%dgsave = .FALSE. 2305 ENDIF 2306 IF (iom_use("CO33")) THEN 2307 med_diag%CO33%dgsave = .TRUE. 2308 ELSE 2309 med_diag%CO33%dgsave = .FALSE. 2310 ENDIF 2311 IF (iom_use("CO3SATARAG3")) THEN 2312 med_diag%CO3SATARAG3%dgsave = .TRUE. 2313 ELSE 2314 med_diag%CO3SATARAG3%dgsave = .FALSE. 2315 ENDIF 2316 IF (iom_use("CO3SATCALC3")) THEN 2317 med_diag%CO3SATCALC3%dgsave = .TRUE. 2318 ELSE 2319 med_diag%CO3SATCALC3%dgsave = .FALSE. 2320 ENDIF 2321 IF (iom_use("DCALC3")) THEN 2322 med_diag%DCALC3%dgsave = .TRUE. 2323 ELSE 2324 med_diag%DCALC3%dgsave = .FALSE. 2325 ENDIF 2326 IF (iom_use("EXPC3")) THEN 2327 med_diag%EXPC3%dgsave = .TRUE. 2328 ELSE 2329 med_diag%EXPC3%dgsave = .FALSE. 2330 ENDIF 2331 IF (iom_use("EXPN3")) THEN 2332 med_diag%EXPN3%dgsave = .TRUE. 2333 ELSE 2334 med_diag%EXPN3%dgsave = .FALSE. 2335 ENDIF 2336 IF (iom_use("FEDISS3")) THEN 2337 med_diag%FEDISS3%dgsave = .TRUE. 2338 ELSE 2339 med_diag%FEDISS3%dgsave = .FALSE. 2340 ENDIF 2341 IF (iom_use("FESCAV3")) THEN 2342 med_diag%FESCAV3%dgsave = .TRUE. 2343 ELSE 2344 med_diag%FESCAV3%dgsave = .FALSE. 2345 ENDIF 2346 IF (iom_use("MIGRAZP3")) THEN 2347 med_diag%MIGRAZP3%dgsave = .TRUE. 2348 ELSE 2349 med_diag%MIGRAZP3%dgsave = .FALSE. 2350 ENDIF 2351 IF (iom_use("MIGRAZD3")) THEN 2352 med_diag%MIGRAZD3%dgsave = .TRUE. 2353 ELSE 2354 med_diag%MIGRAZD3%dgsave = .FALSE. 2355 ENDIF 2356 IF (iom_use("MEGRAZP3")) THEN 2357 med_diag%MEGRAZP3%dgsave = .TRUE. 2358 ELSE 2359 med_diag%MEGRAZP3%dgsave = .FALSE. 2360 ENDIF 2361 IF (iom_use("MEGRAZD3")) THEN 2362 med_diag%MEGRAZD3%dgsave = .TRUE. 2363 ELSE 2364 med_diag%MEGRAZD3%dgsave = .FALSE. 2365 ENDIF 2366 IF (iom_use("MEGRAZZ3")) THEN 2367 med_diag%MEGRAZZ3%dgsave = .TRUE. 2368 ELSE 2369 med_diag%MEGRAZZ3%dgsave = .FALSE. 2370 ENDIF 2371 IF (iom_use("O2SAT3")) THEN 2372 med_diag%O2SAT3%dgsave = .TRUE. 2373 ELSE 2374 med_diag%O2SAT3%dgsave = .FALSE. 2375 ENDIF 2376 IF (iom_use("PBSI3")) THEN 2377 med_diag%PBSI3%dgsave = .TRUE. 2378 ELSE 2379 med_diag%PBSI3%dgsave = .FALSE. 2380 ENDIF 2381 IF (iom_use("PCAL3")) THEN 2382 med_diag%PCAL3%dgsave = .TRUE. 2383 ELSE 2384 med_diag%PCAL3%dgsave = .FALSE. 2385 ENDIF 2386 IF (iom_use("REMOC3")) THEN 2387 med_diag%REMOC3%dgsave = .TRUE. 2388 ELSE 2389 med_diag%REMOC3%dgsave = .FALSE. 2390 ENDIF 2391 IF (iom_use("PNLIMJ3")) THEN 2392 med_diag%PNLIMJ3%dgsave = .TRUE. 2393 ELSE 2394 med_diag%PNLIMJ3%dgsave = .FALSE. 2395 ENDIF 2396 IF (iom_use("PNLIMN3")) THEN 2397 med_diag%PNLIMN3%dgsave = .TRUE. 2398 ELSE 2399 med_diag%PNLIMN3%dgsave = .FALSE. 2400 ENDIF 2401 IF (iom_use("PNLIMFE3")) THEN 2402 med_diag%PNLIMFE3%dgsave = .TRUE. 2403 ELSE 2404 med_diag%PNLIMFE3%dgsave = .FALSE. 2405 ENDIF 2406 IF (iom_use("PDLIMJ3")) THEN 2407 med_diag%PDLIMJ3%dgsave = .TRUE. 2408 ELSE 2409 med_diag%PDLIMJ3%dgsave = .FALSE. 2410 ENDIF 2411 IF (iom_use("PDLIMN3")) THEN 2412 med_diag%PDLIMN3%dgsave = .TRUE. 2413 ELSE 2414 med_diag%PDLIMN3%dgsave = .FALSE. 2415 ENDIF 2416 IF (iom_use("PDLIMFE3")) THEN 2417 med_diag%PDLIMFE3%dgsave = .TRUE. 2418 ELSE 2419 med_diag%PDLIMFE3%dgsave = .FALSE. 2420 ENDIF 2421 IF (iom_use("PDLIMSI3")) THEN 2422 med_diag%PDLIMSI3%dgsave = .TRUE. 2423 ELSE 2424 med_diag%PDLIMSI3%dgsave = .FALSE. 2425 ENDIF 2426 2287 2427 END SUBROUTINE trc_nam_iom_medusa 2288 2428 -
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcopt_medusa.F90
r7894 r8074 12 12 !! - ! 2008-11 (A. Yool) continuing adaptation for MEDUSA 13 13 !! - ! 2010-03 (A. Yool) updated for branch inclusion 14 !! - ! 2014-08 (A. Yool) correct 1% light level calculation15 !! - ! 2015-07 (A. Yool) updated for temporal averaging16 !! - ! 2017-03 (Jpalm) correct euphotic layer17 14 !!---------------------------------------------------------------------- 18 15 #if defined key_medusa -
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcsed_medusa.F90
r7894 r8074 90 90 !! add this trend now to the general trend of tracer (ta,sa,tra): 91 91 !! tra = tra + dz(trn wn) 92 !! 93 !! IF 'key_trc_diabio' is defined, the now vertical advection 94 !! trend of passive tracers is saved for futher diagnostics. 92 95 !!--------------------------------------------------------------------- 93 96 INTEGER, INTENT( in ) :: kt ! ocean time-step index … … 137 140 ! for detrital nitrogen sedimentation only - jpdet 138 141 zwork(:,:,1 ) = 0.e0 ! surface value set to zero 142 !! DO ji = 1, jpi 143 !! zirondep(ji,jj,1) = (dustsolub * dust(ji,jj) / (55.85 * rmtss) + 3.e-10 / ryyss) & 144 !! & * rfact2 / fse3t(ji,jj,1) 145 !! zsidep (ji,jj) = 8.8 * 0.075 * dust(ji,jj) * rfact2 / & 146 !! & (fse3t(ji,jj,1) * 28.1 * rmtss) 147 !! END DO 148 !! END DO 149 150 ! sedimentation of detrital nitrogen : upstream scheme 151 ! ---------------------------------------------------- 152 ! 153 zwork(:,:,:) = 0.e0 ! initialisation of sinking variable 154 ! for detrital nitrogen sedimentation only - jpdet 155 zwork(:,:,1 ) = 0.e0 ! surface value set to zero 139 156 zwork(:,:,jpk) = 0.e0 ! bottom value set to zero 140 157 ! … … 144 161 ! zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdet),0.d0) * tmask(:,:,jk-1) 145 162 zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdet),0.) * tmask(:,:,jk-1) 163 ! 164 ! AXY (16/01/14): stop sinking in upper 10m to reduce model instability 165 ! in shallower grid cells 166 ! if ( jk .lt. 9 ) zwork(:,:,jk) = 0.e0 146 167 END DO 147 168 ! … … 152 173 ztra = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 153 174 tra(ji,jj,jk,jpdet) = tra(ji,jj,jk,jpdet) + ztra 175 # if defined key_trc_diabio 176 trbio(ji,jj,jk,8) = ztra 177 # endif 154 178 IF (lk_iomput .AND. .NOT. ln_diatrc) THEN 155 179 IF( med_diag%DSED%dgsave ) THEN 156 180 zw2d(ji,jj) = zw2d(ji,jj) + ztra * fse3t(ji,jj,jk) * 86400. 157 181 ENDIF 182 ELSE IF( ln_diatrc ) THEN 183 trc2d(ji,jj,8) = trc2d(ji,jj,8) + ztra * fse3t(ji,jj,jk) * 86400. 158 184 ENDIF 159 185 … … 162 188 END DO 163 189 ! 190 # if defined key_trc_diabio 191 CALL lbc_lnk (trbio(:,:,1,8), 'T', 1. ) ! Lateral boundary conditions on trcbio 192 # endif 193 IF( ln_diatrc ) CALL lbc_lnk( trc2d(:,:,8), 'T', 1. ) ! Lateral boundary conditions on trc2d 194 !! 164 195 IF (lk_iomput .AND. .NOT. ln_diatrc) THEN 165 196 IF( med_diag%DSED%dgsave ) THEN … … 167 198 CALL wrk_dealloc( jpi, jpj, zw2d ) 168 199 ENDIF 200 ELSE IF (lk_iomput .AND. ln_diatrc) THEN 201 CALL iom_put( "DSED",trc2d(:,:,8) ) 169 202 ENDIF 170 203 !! … … 184 217 ! zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdtc),0.d0) * tmask(:,:,jk-1) 185 218 zwork(:,:,jk) = -vsed * max(trn(:,:,jk-1,jpdtc),0.) * tmask(:,:,jk-1) 219 ! 220 ! AXY (16/01/14): stop sinking in upper 10m to reduce model instability 221 ! in shallower grid cells 222 ! if ( jk .lt. 9 ) zwork(:,:,jk) = 0.e0 186 223 END DO 187 224 ! … … 192 229 ztra = - ( zwork(ji,jj,jk) - zwork(ji,jj,jk+1) ) / fse3t(ji,jj,jk) 193 230 tra(ji,jj,jk,jpdtc) = tra(ji,jj,jk,jpdtc) + ztra 231 !! # if defined key_trc_diabio 232 !! trbio(ji,jj,jk,8) = ztra 233 !! # endif 234 !! IF( ln_diatrc ) & 235 !! & trc2d(ji,jj,8) = trc2d(ji,jj,8) + ztra * fse3t(ji,jj,jk) * 86400. 194 236 END DO 195 237 END DO 196 238 END DO 197 239 ! 240 !! # if defined key_trc_diabio 241 !! CALL lbc_lnk (trbio(:,:,1,8), 'T', 1. ) ! Lateral boundary conditions on trcbio 242 !! # endif 243 !! IF( ln_diatrc ) CALL lbc_lnk( trc2d(:,:,8), 'T', 1. ) ! Lateral boundary conditions on trc2d 244 !! # if defined key_iomput 245 !! CALL iom_put( "DSED",trc2d(:,:,8) ) 246 !! # endif 247 198 248 # endif 199 249 … … 331 381 ENDIF 332 382 383 !! AXY (04/11/13): replace this with a call in trc_ini_medusa 384 !! AXY (25/02/10) 385 !! call routine for populating CCD array if this is the first time-step 386 !! IF( kt == nittrc000 ) CALL medusa_ccd( kt ) 387 388 !! AXY (04/11/13): replace this with a call in trc_ini_medusa 389 !! AXY (26/01/12) 390 !! call routine for populating river arrays if this is the first time-step 391 !! IF( kt == nittrc000 ) CALL medusa_river( kt ) 392 393 !! AXY (10/02/09) 394 !! IF( (jnt == 1) .and. (bdustfer) ) CALL trc_sed_medusa_sbc( kt ) 395 396 !! JPALM -- 31-03-2016 -- rewrite trc_sed_medusa_sbc. 397 !! IF (kt == nittrc000 ) CALL trc_sed_medusa_sbc 398 399 !! JPALM -- 20-07-2016 -- adapt dust forcing fields reading and conversion 400 !! To read dust dep in kg-dust/m2/s instead of g-Fe/m2/month 401 !! So all forcings and coupling dust dep are in the same SI units 402 !! and then convert in mmol-Fe/m2/day 403 333 404 IF( bdustfer ) THEN 334 405 CALL fld_read( kt, 1, sf_dust ) … … 343 414 zirondep(:,:) = dust(:,:) * Fe_dust_mratio / xfe_mass * 1.e6 * 86400. !! mmol-Fe/m2/d 344 415 416 !! JPALM -- 20-07-2016 -- Zirondep and zsidep are not used. 417 !! So comment out the following lines. but keep them 418 !! as we may want to used them later on 419 !!================================================ 420 !! 421 !! zirondep(:,:,:) = 0.e0 !! Initialisation of deposition variables 422 !! zsidep (:,:) = 0.e0 423 !! 424 !! Iron and Si deposition at the surface 425 !! ------------------------------------- 426 !! 427 !! DO jj = 1, jpj 428 !! DO ji = 1, jpi 429 !! zirondep(ji,jj,1) = (dustsolub * dust(ji,jj) / (55.85 * rmtss) + 3.e-10 / ryyss) & 430 !! & * rfact2 / fse3t(ji,jj,1) 431 !! zsidep (ji,jj) = 8.8 * 0.075 * dust(ji,jj) * rfact2 / & 432 !! & (fse3t(ji,jj,1) * 28.1 * rmtss) 433 !! END DO 434 !! END DO 435 345 436 END SUBROUTINE trc_sed_medusa_dust 346 437 -
branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcsms_medusa.F90
r7894 r8074 59 59 60 60 CALL trc_avg_medusa( kt ) ! rolling average module 61 62 61 # if defined key_debug_medusa 63 62 IF(lwp) WRITE(numout,*) ' MEDUSA done trc_avg_medusa' … … 66 65 67 66 CALL trc_opt_medusa( kt ) ! optical model 68 69 67 # if defined key_debug_medusa 70 68 IF(lwp) WRITE(numout,*) ' MEDUSA done trc_opt_medusa' … … 74 72 !! AXY & JPALM (28/02/17): call dust before trc_bio_medusa (because of coupling) 75 73 CALL trc_sed_medusa_dust( kt ) ! dust submodel 76 77 74 # if defined key_debug_medusa 78 75 IF(lwp) WRITE(numout,*) ' MEDUSA done trc_sed_medusa_dust' … … 81 78 82 79 # if defined key_kill_medusa 83 84 80 !! MEDUSA skipped 85 81 IF(lwp) WRITE(numout,*) ' MEDUSA killed at kt =', kt … … 87 83 # else 88 84 CALL trc_bio_medusa( kt ) ! biological model 89 90 85 # if defined key_debug_medusa 91 86 IF(lwp) WRITE(numout,*) ' MEDUSA done trc_bio_medusa' … … 94 89 95 90 CALL trc_sed_medusa( kt ) ! sedimentation model 96 97 91 # if defined key_debug_medusa 98 92 IF(lwp) WRITE(numout,*) ' MEDUSA done trc_sed_medusa' 99 93 CALL flush(numout) 100 94 # endif 101 102 95 # endif 103 96
Note: See TracChangeset
for help on using the changeset viewer.