- Timestamp:
- 2018-01-30T19:41:58+01:00 (6 years ago)
- Location:
- branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/air_sea.F90
r9257 r9292 77 77 zn_dms_chd, zn_dms_chn, zn_dms_din, & 78 78 zn_dms_mld, zn_dms_qsr, & 79 # if defined key_foam_medusa 80 f2_pco2w, f2_fco2w, & 81 # endif 79 82 xnln, xnld 80 83 USE trc, ONLY: med_diag … … 87 90 # else 88 91 USE trcco2_medusa, ONLY: trc_co2_medusa 92 # if defined key_foam_medusa 93 USE mocsy_mainmod, ONLY: p2fCO2 94 # endif 89 95 # endif 90 96 USE trcdms_medusa, ONLY: trc_dms_medusa … … 330 336 iters, ' AT (', ji, ', ', jj, ', 1) AT ', kt 331 337 endif 338 # if defined key_foam_medusa 339 !! DAF (Aug 2017): calculate fCO2 for observation operator 340 CALL p2fCO2( f_pco2w, ztmp, f_pp0, 0.0, 1, f_fco2w ) 341 # endif 332 342 ENDIF 333 343 ENDDO … … 509 519 CO2flux_conv 510 520 !! ENDIF 521 # if defined key_foam_medusa 522 !! DAF (Aug 2017): Save pCO2 and fCO2 for observation operator 523 f2_pco2w(ji,jj) = f_pco2w(ji,jj) 524 f2_fco2w(ji,jj) = f_pco2w(ji,jj) 525 # endif 511 526 IF ( lk_iomput ) THEN 512 527 IF( med_diag%ATM_PCO2%dgsave ) THEN -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90
r9114 r9292 48 48 f3_co3, f3_h2co3, f3_hco3, & 49 49 f3_omarg, f3_omcal, f3_pH, & 50 # if defined key_foam_medusa 51 mld_max, pgrow_avg, & 52 ploss_avg, phyt_avg, & 53 # endif 50 54 za_sed_c, za_sed_ca, za_sed_fe, & 51 55 za_sed_n, za_sed_si, & … … 57 61 USE trc, ONLY: med_diag, nittrc000, trn 58 62 USE trcnam_trp, ONLY: ln_trcadv_cen2, ln_trcadv_tvd 63 # if defined key_foam_medusa 64 USE zdfmxl, ONLY: hmld 65 # endif 59 66 60 67 !! time (integer timestep) … … 115 122 # endif 116 123 124 # if defined key_foam_medusa 125 !!---------------------------------------------------------------------- 126 !! Diagnostics required for ocean colour assimilation: 127 !! Mixed layer average phytoplankton growth, loss and concentration 128 !! Maximum mixed layer depth 129 !!---------------------------------------------------------------------- 130 !! 131 DO jj = 2,jpjm1 132 DO ji = 2,jpim1 133 IF ( hmld(ji,jj) .GT. 0.0 ) THEN 134 pgrow_avg(ji,jj) = pgrow_avg(ji,jj) / hmld(ji,jj) 135 ploss_avg(ji,jj) = ploss_avg(ji,jj) / hmld(ji,jj) 136 phyt_avg(ji,jj) = phyt_avg(ji,jj) / hmld(ji,jj) 137 IF ( hmld(ji,jj) .GT. mld_max(ji,jj) ) THEN 138 mld_max(ji,jj) = hmld(ji,jj) 139 ENDIF 140 ENDIF 141 END DO 142 END DO 143 # endif 144 117 145 # if defined key_debug_medusa 118 146 !! AXY (12/07/17) -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90
r9257 r9292 35 35 USE bio_medusa_mod 36 36 USE par_oce, ONLY: jpi, jpj, jpk 37 # if defined key_foam_medusa 38 USE sms_medusa, ONLY: jdms, pgrow_avg, ploss_avg, phyt_avg, mld_max 39 # else 37 40 USE sms_medusa, ONLY: jdms 41 # endif 38 42 USE trc, ONLY: ln_diatrc, med_diag, nittrc000 39 43 USE in_out_manager, ONLY: lwp … … 192 196 fslowsinkc(:,:) = 0.0 193 197 # endif 198 !! 199 # if defined key_foam_medusa 200 pgrow_avg(:,:) = 0.0 201 ploss_avg(:,:) = 0.0 202 phyt_avg(:,:) = 0.0 203 IF( kt == nittrc000 ) THEN 204 mld_max(:,:) = 0.0 205 ENDIF 206 # endif 194 207 !! 195 208 !! allocate and initiate 2D diag -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/plankton.F90
r8441 r9292 36 36 fdpn, fdpn2, fdzme, fdzme2, & 37 37 fdzmi, fdzmi2, fsdiss, fsin, & 38 # if defined key_foam_medusa 39 fdep1, fprn, fprd, & 40 fgmepd, fgmepn, fgmipn, & 41 # endif 38 42 zphd, zphn, zpds, zzme, zzmi 43 # if defined key_foam_medusa 44 USE dom_oce, ONLY: e3t_0, e3t_n, gdepw_0, gdepw_n, tmask 45 USE par_kind, ONLY: wp 46 # else 39 47 USE dom_oce, ONLY: tmask 48 # endif 40 49 USE par_oce, ONLY: jpim1, jpjm1 41 50 USE phytoplankton_mod, ONLY: phytoplankton 42 51 USE sms_medusa, ONLY: jmpd, jmpn, jmzme, jmzmi, & 52 # if defined key_foam_medusa 53 pgrow_avg, ploss_avg, phyt_avg, & 54 # endif 43 55 xkphd, xkphn, xkzme, xkzmi, & 44 56 xmetapd, xmetapn, xmetazme, xmetazmi, & 45 57 xmpd, xmpn, xmzme, xmzmi, xsdiss 58 # if defined key_foam_medusa 59 USE zdfmxl, ONLY: hmld 60 # endif 46 61 USE zooplankton_mod, ONLY: zooplankton 62 63 # if defined key_foam_medusa 64 !!* Substitution 65 # include "domzgr_substitute.h90" 66 # endif 47 67 48 68 !! Level … … 50 70 51 71 INTEGER :: ji, jj 72 73 # if defined key_foam_medusa 74 REAL(wp) :: fq0 75 # endif 52 76 53 77 !!------------------------------------------------------------------- … … 188 212 ENDDO 189 213 214 # if defined key_foam_medusa 215 !! Mixed layer averages for ocean colour assimilation 216 !! 217 DO jj = 2,jpjm1 218 DO ji = 2,jpim1 219 IF (tmask(ji,jj,jk) == 1) THEN 220 if (fdep1(ji,jj).le.hmld(ji,jj)) then 221 !! this level is entirely in the mixed layer 222 fq0 = 1.0 223 elseif (fsdepw(ji,jj,jk).ge.hmld(ji,jj)) then 224 !! this level is entirely below the mixed layer 225 fq0 = 0.0 226 else 227 !! this level straddles the mixed layer 228 fq0 = (hmld(ji,jj) - fsdepw(ji,jj,jk)) / fse3t(ji,jj,jk) 229 endif 230 !! 231 pgrow_avg(ji,jj) = pgrow_avg(ji,jj) + & 232 (((fprn(ji,jj) * zphn(ji,jj)) + & 233 (fprd(ji,jj) * zphd(ji,jj)) ) * & 234 fse3t(ji,jj,jk) * fq0) 235 ploss_avg(ji,jj) = ploss_avg(ji,jj) + & 236 ((fgmepd(ji,jj) + fdpd(ji,jj) + & 237 fdpd2(ji,jj) + & 238 fgmepn(ji,jj) + fdpn(ji,jj) + & 239 fdpn2(ji,jj) + fgmipn(ji,jj) ) * & 240 fse3t(ji,jj,jk) * fq0) 241 phyt_avg(ji,jj) = phyt_avg(ji,jj) + & 242 ((zphn(ji,jj) + zphd(ji,jj)) * & 243 fse3t(ji,jj,jk) * fq0) 244 ENDIF 245 ENDDO 246 ENDDO 247 # endif 248 190 249 END SUBROUTINE plankton 191 250 -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/sms_medusa.F90
r9258 r9292 212 212 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: f2_ccd_arg !: 2D aragonite CCD depth 213 213 !! 214 #if defined key_foam_medusa 215 !! 2D fields of pCO2 and fCO2 for observation operator 216 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: f2_pco2w !: 2D pCO2 217 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: f2_fco2w !: 2D fCO2 218 !! 219 #endif 214 220 !! 2D fields of organic and inorganic material sedimented on the seafloor 215 221 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: zb_sed_n !: 2D organic nitrogen (before) … … 391 397 & 926.4960, 935.7040 / 392 398 # endif 399 # if defined key_foam_medusa 400 REAL(wp) :: xobs_xco2a !: Observed atmospheric xCO2, read in 401 # endif 393 402 #endif 394 403 … … 441 450 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: cmask !: ??? 442 451 452 #if defined key_foam_medusa 453 !!---------------------------------------------------------------------- 454 !! Parameters required for ocean colour assimilation 455 !!---------------------------------------------------------------------- 456 !! 457 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: pgrow_avg !: Mixed layer average phytoplankton growth 458 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: ploss_avg !: Mixed layer average phytoplankton loss 459 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: phyt_avg !: Mixed layer average phytoplankton 460 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: mld_max !: Maximum mixed layer depth 461 !! 462 #endif 463 443 464 !!---------------------------------------------------------------------- 444 465 !! NEMO/TOP 3.3 , NEMO Consortium (2010) … … 453 474 !!---------------------------------------------------------------------- 454 475 USE lib_mpp , ONLY: ctl_warn 455 INTEGER :: ierr( 8) ! Local variables476 INTEGER :: ierr(9) ! Local variables 456 477 !!---------------------------------------------------------------------- 457 478 ierr(:) = 0 … … 463 484 !* 2D and 3D fields of carbonate system parameters 464 485 ALLOCATE( f2_ccd_cal(jpi,jpj) , f2_ccd_arg(jpi,jpj) , & 486 # if defined key_foam_medusa 487 f2_pco2w(jpi,jpj) , f2_fco2w(jpi,jpj) , & 488 # endif 465 489 & f3_pH(jpi,jpj,jpk) , f3_h2co3(jpi,jpj,jpk), & 466 490 & f3_hco3(jpi,jpj,jpk) , f3_co3(jpi,jpj,jpk) , & … … 511 535 & ffln(jpi,jpj,jpk) , fflf(jpi,jpj,jpk) , & 512 536 & ffls(jpi,jpj,jpk) , cmask(jpi,jpj) , STAT=ierr(8) ) 537 # if defined key_foam_medusa 538 ALLOCATE( pgrow_avg(jpi,jpj) , ploss_avg(jpi,jpj) , & 539 & phyt_avg(jpi,jpj) , mld_max(jpi,jpj) , STAT=ierr(9) ) 540 # endif 513 541 #endif 514 542 ! -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcbio_medusa.F90
r9257 r9292 102 102 !! JPALM (27-06-2016): add lk_oasis for CO2 and DMS coupling with atm 103 103 USE sbc_oce, ONLY: lk_oasis 104 # if defined key_foam_medusa 105 USE sms_medusa, ONLY: hist_pco2, xobs_xco2a, & 106 pgrow_avg, ploss_avg, & 107 phyt_avg, mld_max 108 # else 104 109 USE sms_medusa, ONLY: hist_pco2 110 # endif 105 111 USE trc, ONLY: ln_rsttr, nittrc000, trn 106 112 USE bio_medusa_init_mod, ONLY: bio_medusa_init … … 319 325 f_xco2a(:,:) = fq4 320 326 endif 327 # if defined key_foam_medusa 328 IF ( xobs_xco2a > 0.0 ) THEN 329 IF(lwp) WRITE(numout,*) ' using observed atm pCO2 = ', xobs_xco2a 330 f_xco2a(:,:) = xobs_xco2a 331 ELSE 332 IF(lwp) WRITE(numout,*) ' xobs_xco2a <= 0 so using default atm pCO2' 333 ENDIF 334 # endif 321 335 # if defined key_axy_pi_co2 322 336 !! OCMIP pre-industrial pCO2 … … 358 372 !! x * 30d + 1*rdt(i.e: mod = rdt) 359 373 !! ++ need to pass carb-chem output var through restarts 374 #if defined key_foam_medusa 375 !! DAF (Aug 2017): For FOAM we want to run daily 376 If ( (kt == nittrc000 .AND. .NOT.ln_rsttr) .OR. & 377 (mod(kt*rdt,86400.) == rdt) ) THEN 378 #else 360 379 If ( (kt == nittrc000 .AND. .NOT.ln_rsttr) .OR. & 361 380 ((86400*mod(nn_date0,100) + mod(kt*rdt,2592000.)) == rdt) ) THEN 362 !!--------------------------------------------------------------- 381 #endif 382 !!---------------------------------------------------------------------- 363 383 !! Calculate the carbonate chemistry for the whole ocean on the first 364 384 !! simulation timestep and every month subsequently; the resulting 3D -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90
r9258 r9292 90 90 #if defined key_roam 91 91 NAMELIST/natroam/ xthetaphy,xthetazoo,xthetanit, & 92 # if defined key_foam_medusa 93 & xobs_xco2a, & 94 # endif 92 95 & xthetarem,xo2min 93 96 #endif … … 490 493 & ' key_debug_medusa = INACTIVE' 491 494 # endif 495 #if defined key_foam_medusa 496 WRITE(numout,*) & 497 & ' key_foam_medusa = ACTIVE' 498 #else 499 WRITE(numout,*) & 500 & ' key_foam_medusa = INACTIVE' 501 #endif 492 502 WRITE(numout,*) ' ' 493 503 … … 1030 1040 xthetarem = 0. 1031 1041 xo2min = 0. 1042 # if defined key_foam_medusa 1043 xobs_xco2a = 0. 1044 # endif 1032 1045 1033 1046 !READ(numnatm,natroam) … … 1049 1062 !! xthetarem : oxygen consumption by carbon remineralisation 1050 1063 !! xo2min : oxygen minimum concentration 1064 # if defined key_foam_medusa 1065 !! xobs_xco2a : observed atmospheric xCO2 1066 # endif 1051 1067 1052 1068 IF(lwp) THEN … … 1066 1082 WRITE(numout,*) & 1067 1083 & ' oxygen minimum concentration xo2min = ', xo2min 1084 # if defined key_foam_medusa 1085 WRITE(numout,*) & 1086 & ' observed atmospheric xCO2 xobs_xco2a = ', xobs_xco2a 1087 # endif 1068 1088 ENDIF 1069 1089 -
branches/UKMO/dev_r5518_GO6_package_asm_3d_bgc/NEMOGCM/NEMO/TOP_SRC/trcrst.F90
r9262 r9292 45 45 USE oce, ONLY: CO2Flux_out_cpl, DMS_out_cpl, chloro_out_cpl !! Coupling variable 46 46 USE trcstat 47 #if defined key_foam_medusa 48 USE obs_const, ONLY: obfillflt ! Observation operator fill value 49 #endif 47 50 48 51 IMPLICIT NONE … … 338 341 IF(lwp) WRITE(numout,*) 'Or don t start from uncomplete restart...' 339 342 ENDIF 343 ! 344 # if defined key_foam_medusa 345 !! 2D fields of pCO2 and fCO2 for observation operator on first timestep 346 IF( iom_varid( numrtr, 'PCO2W', ldstop = .FALSE. ) > 0 ) THEN 347 IF(lwp) WRITE(numout,*) ' MEDUSA pCO2 present - reading in ...' 348 CALL iom_get( numrtr, jpdom_autoglo, 'PCO2W', f2_pco2w(:,:) ) 349 CALL iom_get( numrtr, jpdom_autoglo, 'FCO2W', f2_fco2w(:,:) ) 350 ELSE 351 IF(lwp) WRITE(numout,*) ' MEDUSA pCO2 absent - setting to fill ...' 352 f2_pco2w(:,:) = obfillflt * tmask(:,:,1) 353 f2_fco2w(:,:) = obfillflt * tmask(:,:,1) 354 ENDIF 355 # endif 340 356 # endif 341 357 # if defined key_foam_medusa 358 !! Fields for ocean colour assimilation on first timestep 359 IF( iom_varid( numrtr, 'pgrow_avg', ldstop = .FALSE. ) > 0 ) THEN 360 IF(lwp) WRITE(numout,*) ' MEDUSA pgrow_avg present - reading in ...' 361 CALL iom_get( numrtr, jpdom_autoglo, 'pgrow_avg', pgrow_avg(:,:) ) 362 CALL iom_get( numrtr, jpdom_autoglo, 'ploss_avg', ploss_avg(:,:) ) 363 CALL iom_get( numrtr, jpdom_autoglo, 'phyt_avg', phyt_avg(:,:) ) 364 CALL iom_get( numrtr, jpdom_autoglo, 'mld_max', mld_max(:,:) ) 365 ELSE 366 IF(lwp) WRITE(numout,*) ' MEDUSA pgrow_avg absent - setting to zero ...' 367 pgrow_avg(:,:) = 0.0 368 ploss_avg(:,:) = 0.0 369 phyt_avg(:,:) = 0.0 370 mld_max(:,:) = 0.0 371 ENDIF 372 # endif 342 373 343 374 #endif … … 510 541 call trc_rst_dia_stat( f2_ccd_arg(:,:),'CCD_ARG') 511 542 !! 543 # if defined key_foam_medusa 544 !! Fields for observation operator on first timestep 545 IF(lwp) WRITE(numout,*) ' MEDUSA OBS fields - writing out ...' 546 CALL iom_rstput( kt, nitrst, numrtw, 'PCO2W', f2_pco2w(:,:) ) 547 CALL iom_rstput( kt, nitrst, numrtw, 'FCO2W', f2_fco2w(:,:) ) 548 # endif 549 # endif 550 # if defined key_foam_medusa 551 !! Fields for assimilation on first timestep 552 IF(lwp) WRITE(numout,*) ' MEDUSA ASM fields - writing out ...' 553 CALL iom_rstput( kt, nitrst, numrtw, 'pgrow_avg', pgrow_avg(:,:) ) 554 CALL iom_rstput( kt, nitrst, numrtw, 'ploss_avg', ploss_avg(:,:) ) 555 CALL iom_rstput( kt, nitrst, numrtw, 'phyt_avg', phyt_avg(:,:) ) 556 CALL iom_rstput( kt, nitrst, numrtw, 'mld_max', mld_max(:,:) ) 512 557 # endif 513 558 !!
Note: See TracChangeset
for help on using the changeset viewer.