Changeset 13725 for branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM
- Timestamp:
- 2020-11-05T14:34:58+01:00 (4 years ago)
- Location:
- branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/CONFIG/SHARED/field_def_bgc.xml
r10302 r13725 522 522 <field id= "PH3" long_name="Ocean pH 3D" unit="-" grid_ref="grid_T_3D" /> 523 523 <field id= "OM_CAL3" long_name="Omega calcite 3D" unit="-" grid_ref="grid_T_3D" /> 524 <field id= "MED_XPAR3" long_name="Radiation 3D" unit="W/m2" grid_ref="grid_T_3D" /> 524 525 525 526 <!-- AXY (08/11/16): add new 3D CMIP6 diagnostics --> … … 545 546 <field id= "MIGRAZD3" long_name="Microzooplankton grazing on detritus" unit="mmol-C/m3/d" grid_ref="grid_T_3D" /> 546 547 <field id= "MEGRAZP3" long_name="Mesozooplankton grazing on phytoplankton" unit="mmol-C/m3/d" grid_ref="grid_T_3D" /> 548 <field id= "MEGRAZPN3" long_name="Mesozooplankton grazing on non-diatoms" unit="mmol-C/m3/d" grid_ref="grid_T_3D" /> 549 <field id= "MEGRAZPD3" long_name="Mesozooplankton grazing on diatoms" unit="mmol-C/m3/d" grid_ref="grid_T_3D" /> 547 550 <field id= "MEGRAZD3" long_name="Mesozooplankton grazing on detritus" unit="mmol-C/m3/d" grid_ref="grid_T_3D" /> 548 551 <field id= "MEGRAZZ3" long_name="Mesozooplankton grazing on microzoop" unit="mmol-C/m3/d" grid_ref="grid_T_3D" /> … … 2391 2394 <field field_ref= "PH3" name="PH3" /> 2392 2395 <field field_ref= "OM_CAL3" name="OM_CAL3" /> 2396 <field field_ref= "MED_XPAR3" name="MED_XPAR3" /> 2393 2397 </field_group> 2394 2398 … … 2450 2454 <field field_ref= "MIGRAZD3" name="MIGRAZD3" /> 2451 2455 <field field_ref= "MEGRAZP3" name="MEGRAZP3" /> 2456 <field field_ref= "MEGRAZPN3" name="MEGRAZPN3" /> 2457 <field field_ref= "MEGRAZPD3" name="MEGRAZPD3" /> 2452 2458 <field field_ref= "MEGRAZD3" name="MEGRAZD3" /> 2453 2459 <field field_ref= "MEGRAZZ3" name="MEGRAZZ3" /> -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/CONFIG/SHARED/namelist_medusa_ref
r10302 r13725 343 343 ! xlr : red chl exposant 344 344 ! rpig : chla / (chla+phea) ratio 345 ! ln_rgb : use RGB scheme rather than 2-band scheme 345 346 ! 346 347 &natopt … … 352 353 xlr = 0.674 353 354 rpig = 0.7 355 ln_rgb = .false. 354 356 / 355 357 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r13355 r13725 34 34 USE timing ! Timing 35 35 USE stopack 36 #if defined key_medusa 37 USE trc, ONLY: trn ! MEDUSA variables 38 USE par_medusa, ONLY: & ! MEDUSA parameters 39 & jpchn, & 40 & jpchd 41 #elif defined key_hadocc 42 USE trc, ONLY: & ! HadOCC chlorophyll 43 & HADOCC_CHL 44 #endif 36 45 37 46 IMPLICIT NONE … … 200 209 ! ! ------------------------- ! 201 210 ! Set chlorophyl concentration 202 IF( nn_chldta == 1 .OR. nn_chldta == 2 .OR. lk_vvl ) THEN !* Variable Chlorophyll or ocean volume211 IF( nn_chldta == 1 .OR. nn_chldta == 2 .OR. nn_chldta == 3 .OR. lk_vvl ) THEN !* Variable Chlorophyll or ocean volume 203 212 ! 204 213 IF( nn_chldta == 1 ) THEN !* 2D Variable Chlorophyll … … 236 245 END DO 237 246 ! 247 ELSE IF( nn_chldta == 3 ) THEN 248 ! 249 #if defined key_medusa 250 zchl3d(:,:,:) = trn(:,:,:,jpchn) + trn(:,:,:,jpchd) 251 #elif defined key_hadocc 252 zchl3d(:,:,:) = HADOCC_CHL(:,:,:) 253 #else 254 CALL ctl_stop( 'tra_qsr: Trying to take chlorophyll from MEDUSA or HadOCC', & 255 & 'but neither MEDUSA nor HadOCC defined' ) 256 #endif 257 ! 238 258 ELSE !* Variable ocean volume but constant chrlorophyll 239 259 DO jk = 1, nksr + 1 … … 465 485 WRITE(numout,*) ' bio-model light penetration ln_qsr_bio = ', ln_qsr_bio 466 486 WRITE(numout,*) ' light penetration for ice-model LIM3 ln_qsr_ice = ', ln_qsr_ice 467 WRITE(numout,*) ' RGB : Chl data (=1/2) or cst value (=0) nn_chldta= ', nn_chldta487 WRITE(numout,*) ' RGB: model (3) file (2/1) or cst (0) chl nn_chldta = ', nn_chldta 468 488 WRITE(numout,*) ' RGB & 2 bands: fraction of light (rn_si1) rn_abs = ', rn_abs 469 489 WRITE(numout,*) ' RGB & 2 bands: shortess depth of extinction rn_si0 = ', rn_si0 … … 490 510 IF( ln_qsr_rgb .AND. nn_chldta == 1 ) nqsr = 2 491 511 IF( ln_qsr_rgb .AND. nn_chldta == 2 ) nqsr = 3 492 IF( ln_qsr_2bd ) nqsr = 4 493 IF( ln_qsr_bio ) nqsr = 5 512 IF( ln_qsr_rgb .AND. nn_chldta == 3 ) nqsr = 4 513 IF( ln_qsr_2bd ) nqsr = 5 514 IF( ln_qsr_bio ) nqsr = 6 494 515 ! 495 516 IF(lwp) THEN ! Print the choice … … 498 519 IF( nqsr == 2 ) WRITE(numout,*) ' R-G-B light penetration - 2D Chl data ' 499 520 IF( nqsr == 3 ) WRITE(numout,*) ' R-G-B light penetration - 3D Chl data ' 500 IF( nqsr == 4 ) WRITE(numout,*) ' 2 bands light penetration' 501 IF( nqsr == 5 ) WRITE(numout,*) ' bio-model light penetration' 502 ENDIF 521 IF( nqsr == 4 ) WRITE(numout,*) ' R-G-B light penetration - 3D Chl from BGC model ' 522 IF( nqsr == 5 ) WRITE(numout,*) ' 2 bands light penetration' 523 IF( nqsr == 6 ) WRITE(numout,*) ' bio-model light penetration' 524 ENDIF 525 #if ! (defined key_medusa || defined key_hadocc) 526 ! 527 IF( nqsr == 4 ) THEN 528 CALL ctl_stop( 'nn_chldta=3 so trying to use BGC model chlorophyll for light penetration', & 529 & 'but not running with MEDUSA or HadOCC' ) 530 ENDIF 531 #endif 503 532 ! 504 533 ENDIF … … 536 565 & 'Solar penetration function of read chlorophyll', 'namtra_qsr' ) 537 566 ! 567 ELSEIF( nn_chldta == 3 ) THEN !* Chl data will be got from model at each time step 568 IF(lwp) WRITE(numout,*) 569 IF(lwp) WRITE(numout,*) ' Chlorophyll will be taken from model at each time step' 538 570 ELSE !* constant Chl : compute once for all the distribution of light (etot3) 539 571 IF(lwp) WRITE(numout,*) -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_med_diag_iomput.F90
r10302 r13725 657 657 (fgmepd(ji,jj) * xthetapd) 658 658 ENDIF 659 IF ( med_diag%MEGRAZPN3%dgsave ) THEN 660 megrazpn3(ji,jj,jk) = fgmepn(ji,jj) * xthetapn 661 ENDIF 662 IF ( med_diag%MEGRAZPD3%dgsave ) THEN 663 megrazpd3(ji,jj,jk) = fgmepd(ji,jj) * xthetapd 664 ENDIF 659 665 IF ( med_diag%MEGRAZD3%dgsave ) THEN 660 666 megrazd3(ji,jj,jk) = fgmedc(ji,jj) -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_fin.F90
r10302 r13725 54 54 zn_sed_c, zn_sed_ca, zn_sed_fe, & 55 55 zn_sed_n, zn_sed_si, zn_chl_srf, & 56 scl_chl, chl_out56 scl_chl, chl_out, xpar 57 57 USE trc, ONLY: med_diag, nittrc000, trn 58 58 USE trcnam_trp, ONLY: ln_trcadv_cen2, ln_trcadv_tvd … … 749 749 DEALLOCATE( remin3dn ) 750 750 ENDIF 751 IF( med_diag%MED_XPAR3%dgsave ) THEN 752 CALL iom_put( "MED_XPAR3" , xpar ) 753 ENDIF 751 754 # if defined key_roam 752 755 IF( med_diag%PH3%dgsave ) THEN … … 885 888 DEALLOCATE( megrazp3 ) 886 889 ENDIF 890 IF( med_diag%MEGRAZPN3%dgsave ) THEN 891 CALL iom_put( "MEGRAZPN3" , megrazpn3 ) 892 DEALLOCATE( megrazpn3 ) 893 ENDIF 894 IF( med_diag%MEGRAZPD3%dgsave ) THEN 895 CALL iom_put( "MEGRAZPD3" , megrazpd3 ) 896 DEALLOCATE( megrazpd3 ) 897 ENDIF 887 898 IF( med_diag%MEGRAZD3%dgsave ) THEN 888 899 CALL iom_put( "MEGRAZD3" , megrazd3 ) -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_init.F90
r13316 r13725 815 815 megrazp3(:,:,: ) = 0.0 !! 816 816 ENDIF 817 IF( med_diag%MEGRAZPN3%dgsave ) THEN 818 ALLOCATE( megrazpn3(1:jpi, 1:jpj, 1:jpk) ) 819 megrazpn3(:,:,: ) = 0.0 !! 820 ENDIF 821 IF( med_diag%MEGRAZPD3%dgsave ) THEN 822 ALLOCATE( megrazpd3(1:jpi, 1:jpj, 1:jpk) ) 823 megrazpd3(:,:,: ) = 0.0 !! 824 ENDIF 817 825 IF( med_diag%MEGRAZD3%dgsave ) THEN 818 826 ALLOCATE( megrazd3(1:jpi, 1:jpj, 1:jpk) ) -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/bio_medusa_mod.F90
r10302 r13725 261 261 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: fediss3,fescav3 262 262 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: migrazp3,migrazd3,megrazp3 263 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: megrazpn3,megrazpd3 263 264 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: megrazd3, megrazz3 264 265 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: o2sat3,pbsi3,pcal3,remoc3 -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/sms_medusa.F90
r13316 r13725 317 317 REAL(wp) :: xlg !: exposant for pigment absorption in green (NAMELIST) 318 318 REAL(wp) :: rpig !: chla/chla+phea ratio (NAMELIST) 319 LOGICAL :: ln_rgb !: use RGB light scheme rather than 2-band (NAMELIST) 319 320 320 321 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: neln !: number of levels in the euphotic layer -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcnam_medusa.F90
r10302 r13725 94 94 & xthetarem,xo2min 95 95 #endif 96 NAMELIST/natopt/xkg0,xkr0,xkgp,xkrp,xlg,xlr,rpig 96 NAMELIST/natopt/xkg0,xkr0,xkgp,xkrp,xlg,xlr,rpig,ln_rgb 97 97 INTEGER :: jl, jn 98 98 INTEGER :: ios ! Local integer output status for namelist read … … 1097 1097 xlr = 0. 1098 1098 rpig = 0. 1099 ln_rgb = .false. 1099 1100 1100 1101 !READ(numnatm,natopt) … … 1120 1121 WRITE(numout,*) ' red chl exposant xlr = ',xlr 1121 1122 WRITE(numout,*) ' chla/chla+phea ratio rpig = ',rpig 1123 WRITE(numout,*) ' use RGB scheme ln_rgb = ',ln_rgb 1122 1124 WRITE(numout,*) ' ' 1123 1125 … … 1533 1535 med_diag%MED_XPAR%dgsave = .FALSE. 1534 1536 ENDIF 1537 IF (iom_use("MED_XPAR3")) THEN 1538 med_diag%MED_XPAR3%dgsave = .TRUE. 1539 ELSE 1540 med_diag%MED_XPAR3%dgsave = .FALSE. 1541 ENDIF 1535 1542 IF (iom_use("INTFLX_N")) THEN 1536 1543 med_diag%INTFLX_N%dgsave = .TRUE. … … 2337 2344 ELSE 2338 2345 med_diag%MEGRAZP3%dgsave = .FALSE. 2346 ENDIF 2347 IF (iom_use("MEGRAZPN3")) THEN 2348 med_diag%MEGRAZPN3%dgsave = .TRUE. 2349 ELSE 2350 med_diag%MEGRAZPN3%dgsave = .FALSE. 2351 ENDIF 2352 IF (iom_use("MEGRAZPD3")) THEN 2353 med_diag%MEGRAZPD3%dgsave = .TRUE. 2354 ELSE 2355 med_diag%MEGRAZPD3%dgsave = .FALSE. 2339 2356 ENDIF 2340 2357 IF (iom_use("MEGRAZD3")) THEN -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/MEDUSA/trcopt_medusa.F90
r8074 r13725 28 28 29 29 PUBLIC trc_opt_medusa ! called in trcprg.F90 30 31 REAL(wp), DIMENSION(3,61) :: okrgb !: tabulated attenuation coefficients for RGB absorption 30 32 31 33 !!* Substitution … … 50 52 !!--------------------------------------------------------------------- 51 53 INTEGER, INTENT( in ) :: kt ! index of the time stepping 52 INTEGER :: ji, jj, jk 54 INTEGER :: ji, jj, jk, irgb 53 55 REAL(wp) :: zpig ! total pigment 54 56 REAL(wp) :: zkr ! total absorption coefficient in red … … 58 60 REAL(wp), DIMENSION(jpi,jpj) :: zpar0m ! irradiance just below the surface 59 61 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zparr, zparg ! red and green compound of par 62 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zekb, zekg, zekr 63 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ze1, ze2, ze3 60 64 61 65 CHARACTER (len=25) :: charout … … 113 117 ! --------------------- 114 118 115 DO jk = 2, jpk ! determination of local par in w levels 116 DO jj = 1, jpj 117 DO ji = 1, jpi 118 totchl =trn(ji,jj,jk-1,jpchn)+trn(ji,jj,jk-1,jpchd) 119 zpig = MAX( TINY(0.), totchl/rpig) 120 zkr = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 121 zkg = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 122 zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * fse3t(ji,jj,jk-1) ) 123 zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * fse3t(ji,jj,jk-1) ) 119 IF ( ln_rgb ) THEN 120 ! Mean PAR in T levels using RGB scheme 121 ! Should be same as in traqsr, but T rather than W levels 122 IF( kt == nittrc000 ) THEN 123 CALL trc_oce_rgb( okrgb ) 124 ENDIF 125 DO jk = 1, jpkm1 126 DO jj = 1, jpj 127 DO ji = 1, jpi 128 totchl = trn(ji,jj,jk,jpchn) + trn(ji,jj,jk,jpchd) 129 totchl = MIN( 10. , MAX( 0.05, totchl ) ) 130 irgb = NINT( 41 + 20.* LOG10( totchl ) + 1.e-15 ) 131 ! 132 zekb(ji,jj,jk) = okrgb(1,irgb) * fse3t(ji,jj,jk) 133 zekg(ji,jj,jk) = okrgb(2,irgb) * fse3t(ji,jj,jk) 134 zekr(ji,jj,jk) = okrgb(3,irgb) * fse3t(ji,jj,jk) 135 END DO 124 136 END DO 125 END DO126 END DO127 128 DO jk = 1, jpkm1 ! mean par in t levels129 DO jj = 1, jpj130 DO ji = 1, jpi131 totchl =trn(ji,jj,jk ,jpchn)+trn(ji,jj,jk ,jpchd)132 zpig = MAX( TINY(0.), totchl/rpig)133 zkr = xkr0 + xkrp * EXP( xlr * LOG( zpig) )134 zkg = xkg0 + xkgp * EXP( xlg * LOG( zpig) )135 zparr(ji,jj,jk) = zparr(ji,jj,jk) / zkr / fse3t(ji,jj,jk) * ( 1 - EXP( -zkr*fse3t(ji,jj,jk) ) )136 zparg(ji,jj,jk) = zparg(ji,jj,jk) / zkg / fse3t(ji,jj,jk) * ( 1 - EXP( -zkg*fse3t(ji,jj,jk) ))137 xpar (ji,jj,jk) = MAX( zparr(ji,jj,jk) + zparg(ji,jj,jk), 1.e-15 )137 END DO 138 ze1(:,:,1) = zpar0m(:,:) * EXP( -0.5 * zekb(:,:,1) ) / 3.0 139 ze2(:,:,1) = zpar0m(:,:) * EXP( -0.5 * zekg(:,:,1) ) / 3.0 140 ze3(:,:,1) = zpar0m(:,:) * EXP( -0.5 * zekr(:,:,1) ) / 3.0 141 ! 142 DO jk = 2, jpk 143 DO jj = 1, jpj 144 DO ji = 1, jpi 145 ze1(ji,jj,jk) = ze1(ji,jj,jk-1) * EXP( -0.5 * ( zekb(ji,jj,jk-1) + zekb(ji,jj,jk) ) ) 146 ze2(ji,jj,jk) = ze2(ji,jj,jk-1) * EXP( -0.5 * ( zekg(ji,jj,jk-1) + zekg(ji,jj,jk) ) ) 147 ze3(ji,jj,jk) = ze3(ji,jj,jk-1) * EXP( -0.5 * ( zekr(ji,jj,jk-1) + zekr(ji,jj,jk) ) ) 148 xpar(ji,jj,jk) = MAX( ze1(ji,jj,jk) + ze2(ji,jj,jk) + ze3(ji,jj,jk), 1.e-15 ) 149 END DO 138 150 END DO 139 151 END DO 140 END DO 152 ELSE 153 DO jk = 2, jpk ! determination of local par in w levels 154 DO jj = 1, jpj 155 DO ji = 1, jpi 156 totchl =trn(ji,jj,jk-1,jpchn)+trn(ji,jj,jk-1,jpchd) 157 zpig = MAX( TINY(0.), totchl/rpig) 158 zkr = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 159 zkg = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 160 zparr(ji,jj,jk) = zparr(ji,jj,jk-1) * EXP( -zkr * fse3t(ji,jj,jk-1) ) 161 zparg(ji,jj,jk) = zparg(ji,jj,jk-1) * EXP( -zkg * fse3t(ji,jj,jk-1) ) 162 END DO 163 END DO 164 END DO 165 166 DO jk = 1, jpkm1 ! mean par in t levels 167 DO jj = 1, jpj 168 DO ji = 1, jpi 169 totchl =trn(ji,jj,jk ,jpchn)+trn(ji,jj,jk ,jpchd) 170 zpig = MAX( TINY(0.), totchl/rpig) 171 zkr = xkr0 + xkrp * EXP( xlr * LOG( zpig ) ) 172 zkg = xkg0 + xkgp * EXP( xlg * LOG( zpig ) ) 173 zparr(ji,jj,jk) = zparr(ji,jj,jk) / zkr / fse3t(ji,jj,jk) * ( 1 - EXP( -zkr*fse3t(ji,jj,jk) ) ) 174 zparg(ji,jj,jk) = zparg(ji,jj,jk) / zkg / fse3t(ji,jj,jk) * ( 1 - EXP( -zkg*fse3t(ji,jj,jk) ) ) 175 xpar (ji,jj,jk) = MAX( zparr(ji,jj,jk) + zparg(ji,jj,jk), 1.e-15 ) 176 END DO 177 END DO 178 END DO 179 ENDIF 141 180 142 181 ! 3. Determination of euphotic layer depth -
branches/UKMO/dev_r5518_GO6_package_FOAMv14/NEMOGCM/NEMO/TOP_SRC/trc.F90
r10302 r13725 152 152 EXPC3, EXPN3, EXPCALC3, EXPSI3, & 153 153 FEDISS3, FESCAV3, & 154 MIGRAZP3, MIGRAZD3, MEGRAZP3, MEGRAZ D3, MEGRAZZ3,&154 MIGRAZP3, MIGRAZD3, MEGRAZP3, MEGRAZPN3, MEGRAZPD3, MEGRAZD3, MEGRAZZ3, & 155 155 O2SAT3, PBSI3, PCAL3, REMOC3, & 156 PNLIMJ3, PNLIMN3, PNLIMFE3, PDLIMJ3, PDLIMN3, PDLIMFE3, PDLIMSI3 156 PNLIMJ3, PNLIMN3, PNLIMFE3, PDLIMJ3, PDLIMN3, PDLIMFE3, PDLIMSI3, & 157 ! DAF (22/10/20): some more diagnostics 158 MED_XPAR3 157 159 !! 158 160 !! list of all MEDUSA diagnostics that could be called by iom_use
Note: See TracChangeset
for help on using the changeset viewer.