File indexing completed on 2026-01-27 18:49:44 UTC
view on githubraw file Latest commit 983ffa45 on 2026-01-23 13:17:31 UTC
8fbfd1f382 Oliv*0001 #include "DARWIN_OPTIONS.h"
0002
0003
0004
0005
0006
0007 SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid )
0008
0009
0010
0011
0012
0013 IMPLICIT NONE
0014 #include "SIZE.h"
0015 #include "EEPARAMS.h"
0016 #include "PARAMS.h"
0017 #ifdef ALLOW_RADTRANS
0018 #include "RADTRANS_SIZE.h"
0019 #include "RADTRANS_PARAMS.h"
0020 #endif
0021 #include "DARWIN_SIZE.h"
0022 #include "DARWIN_INDICES.h"
0023 #include "DARWIN_RADTRANS.h"
0024 #include "DARWIN_PARAMS.h"
0025 #include "DARWIN_TRAITPARAMS.h"
0026 #include "DARWIN_TRAITS.h"
0027
0028
0029
0030 INTEGER myThid
0031
0032
0033 #ifdef ALLOW_DARWIN
0034
0035
0036
0037 CHARACTER*(MAX_LEN_MBUF) msgBuf
0038 INTEGER jpg(nGroup)
0039 INTEGER jp,jp2,jz,g,gz,l,gmin,iopt
0040 _RL logvol, vol, volmin
0041 _RL pp_opt, pp_sig, prd_pry
0042 _RL kappa
0043 _RL volmeas, dmmeas
0044 _RL dmint, dmac
0045 _RL scalefac, dmratio, slope
0046 _RL carpcellmeas, carpcellac
0047 _RL bphy_cell_type
0048 _RL bmean, bbmean
0049 _RL bbbratiomeas, bbbratioac
0050
0051
0052
0053
0054
0055
983ffa4545 Oliv*0056
8fbfd1f382 Oliv*0057
0058
0059
0060
0061
0062
0063 DO g=1,nGroup
0064 IF (logvol0ind(g) .GT. 0) THEN
0065 IF (biovol0(g) .NE. 0.0 _d 0) THEN
0066 WRITE(msgBuf,'(2A)') 'DARWIN_GENERATE_ALLOMETRIC: ',
0067 & 'cannot set both biovol0 and logvol0ind'
0068 CALL PRINT_ERROR( msgBuf, myThid )
0069 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0070 ENDIF
0071 logvol = logvolbase + (logvol0ind(g)-1)*logvolinc
0072 biovol0(g) = 10 _d 0 ** logvol
0073 biovolfac(g) = 10 _d 0 ** logvolinc
0074 ENDIF
0075 ENDDO
0076
0077 DO g=1,nGroup
0078 DO jp=1,grp_nplank(g)
0079 IF (grp_logvolind(jp,g) .GT. 0 .AND.
0080 & grp_biovol(jp,g) .GT. 0.0 _d 0) THEN
0081 WRITE(msgBuf,'(2A)') 'DARWIN_GENERATE_ALLOMETRIC: ',
0082 & 'cannot set both grp_biovol and grp_logvolind'
0083 CALL PRINT_ERROR( msgBuf, myThid )
0084 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0085 ELSEIF (grp_logvolind(jp,g) .GT. 0) THEN
0086
0087 logvol = logvolbase + (grp_logvolind(jp,g)-1)*logvolinc
0088 grp_biovol(jp,g) = 10 _d 0 ** logvol
0089 ELSEIF (grp_biovol(jp,g) .EQ. 0) THEN
0090 IF (biovol0(g) .GT. 0.0 _d 0) THEN
0091 grp_biovol(jp,g) = biovol0(g) * biovolfac(g)**(jp-1)
0092 ELSE
0093 WRITE(msgBuf,'(3A)') 'DARWIN_GENERATE_ALLOMETRIC: ',
0094 & 'Need to set one of grp_biovol, grp_logvolind, ',
0095 & 'biovol0, logvol0ind'
0096 CALL PRINT_ERROR( msgBuf, myThid )
0097 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0098 ENDIF
0099 ENDIF
0100 biovol_bygroup(jp,g) = grp_biovol(jp,g)
0101 ENDDO
0102 DO jp=grp_nplank(g)+1,nplank
0103 IF (grp_biovol(jp,g) .NE. 0.0 _d 0) THEN
0104 WRITE(msgBuf,'(2A,I5,A,I5,A)') 'DARWIN_GENERATE_ALLOMETRIC: ',
0105 & 'index',jp,'group',g,'out of range for grp_biovol'
0106 CALL PRINT_ERROR( msgBuf, myThid )
0107 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0108 ENDIF
0109 IF (grp_logvolind(jp,g) .NE. 0) THEN
0110 WRITE(msgBuf,'(2A,I5,A,I5,A)') 'DARWIN_GENERATE_ALLOMETRIC: ',
0111 & 'index',jp,'group',g,'out of range for grp_logvolind'
0112 CALL PRINT_ERROR( msgBuf, myThid )
0113 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0114 ENDIF
0115 biovol_bygroup(jp,g) = 0.0 _d 0
0116 ENDDO
0117 ENDDO
0118
0119
0120
0121
0122 IF (darwin_sort_biovol) THEN
0123
0124
0125 DO g=1,nGroup
0126 jpg(g) = 1
0127 ENDDO
0128 DO jp=1,nplank
0129 volmin = 1 _d 38
0130 gmin = 0
0131
0132 DO g=1,ngroup
0133 IF (grp_photo(g).NE.0) THEN
0134 vol = grp_biovol(jpg(g),g)
0135 IF (jpg(g).LE.grp_nplank(g) .AND. vol.LT.volmin) THEN
0136 gmin = g
0137 volmin = vol
0138 ENDIF
0139 ENDIF
0140 ENDDO
0141
0142 IF (gmin.EQ.0) THEN
0143 DO g=1,ngroup
0144 IF (grp_photo(g).EQ.0) THEN
0145 vol = grp_biovol(jpg(g),g)
0146 IF (jpg(g).LE.grp_nplank(g) .AND. vol.LT.volmin) THEN
0147 gmin = g
0148 volmin = vol
0149 ENDIF
0150 ENDIF
0151 ENDDO
0152 ENDIF
0153 IF (gmin.EQ.0) THEN
0154 STOP 'gmin'
0155 ENDIF
0156 group(jp) = gmin
0157 biovol(jp) = volmin
0158 igroup(jp) = jpg(gmin)
0159 jpg(gmin) = jpg(gmin) + 1
0160 ENDDO
0161 DO g=1,ngroup
0162 IF (jpg(g).NE.grp_nplank(g)+1) THEN
0163 STOP 'grp_nplank'
0164 ENDIF
0165 ENDDO
0166
0167 ELSE
0168
0169
0170 jp = 1
0171 DO g=1,ngroup
0172 DO jp2=1,grp_nplank(g)
0173 IF (jp .GT. nPlank) THEN
0174 WRITE(msgBuf,'(2A)') 'DARWIN_GENERATE_ALLOMETRIC: ',
0175 & 'need SUM(grp_nplank) = nPlank, nPlank too small'
0176 CALL PRINT_ERROR( msgBuf, myThid )
0177 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0178 ENDIF
0179 group(jp) = g
0180 igroup(jp) = jp2
0181 biovol(jp) = grp_biovol(jp2,g)
0182 jp = jp + 1
0183 ENDDO
0184 ENDDO
0185 IF (jp .NE. nPlank + 1) THEN
0186 WRITE(msgBuf,'(2A,2I4)') 'DARWIN_GENERATE_ALLOMETRIC: ',
0187 & 'need SUM(grp_nplank) = nPlank, not ',jp-1,nPlank
0188 CALL PRINT_ERROR( msgBuf, myThid )
0189 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0190 ENDIF
0191
0192
0193 ENDIF
0194
0195
0196
0197 DO jp=1,nplank
0198 g = group(jp)
0199
0200
0201
0202
0203
0204 isPhoto(jp) = grp_photo(g)
0205 isPrey(jp) = grp_prey(g)
0206 isPred(jp) = grp_pred(g)
0207 hasSi(jp) = grp_hasSi(g)
0208 hasPIC(jp) = grp_hasPIC(g)
0209 diazo(jp) = grp_diazo(g)
0210 useNH4(jp) = grp_useNH4(g)
0211 useNO2(jp) = grp_useNO2(g)
0212 useNO3(jp) = grp_useNO3(g)
0213 combNO(jp) = grp_combNO(g)
0214 tempMort(jp) = grp_tempMort(g)
0215 tempMort2(jp) = grp_tempMort2(g)
14aae40637 Oliv*0216 tempGraz(jp) = grp_tempGraz(g)
8fbfd1f382 Oliv*0217
0218
0219 Xmin(jp) = a_Xmin(g)
0220 amminhib(jp) = a_amminhib(g)
0221 acclimtimescl(jp) = a_acclimtimescl(g)
0222
0223
0224 mort(jp) = a_mort(g)
0225 mort2(jp) = a_mort2(g)
0226
0227 ExportFracMort(jp) = a_ExportFracMort(g)
0228 ExportFracMort2(jp) = a_ExportFracMort2(g)
0229 ExportFracExude(jp) = a_ExportFracExude(g)
c7b6c66d45 Oliv*0230 FracExudeC(jp) = a_FracExudeC(g)
8fbfd1f382 Oliv*0231
0232
0233 phytoTempCoeff(jp) = a_phytoTempCoeff(g)
0234 phytoTempExp1(jp) = a_phytoTempExp1(g)
09b16dd232 Oliv*0235 phytoTempAe(jp) = a_phytoTempAe(g)
8fbfd1f382 Oliv*0236 phytoTempExp2(jp) = a_phytoTempExp2(g)
0237 phytoTempOptimum(jp) = a_phytoTempOptimum(g)
0238 phytoDecayPower(jp) = a_phytoDecayPower(g)
0239
09b16dd232 Oliv*0240 hetTempAe(jp) = a_hetTempAe(g)
0241 hetTempExp2(jp) = a_hetTempExp2(g)
0242 hetTempOptimum(jp) = a_hetTempOptimum(g)
0243 hetDecayPower(jp) = a_hetDecayPower(g)
0244
0245 grazTempAe(jp) = a_grazTempAe(g)
0246 grazTempExp2(jp) = a_grazTempExp2(g)
0247 grazTempOptimum(jp) = a_grazTempOptimum(g)
0248 grazDecayPower(jp) = a_grazDecayPower(g)
0249
8fbfd1f382 Oliv*0250
0251 R_NC(jp) = a_R_NC(g)
0252 R_PC(jp) = a_R_PC(g)
0253 R_SiC(jp) = a_R_SiC(g)
0254 R_FeC(jp) = a_R_FeC(g)
0255 R_ChlC(jp) = a_R_ChlC(g)
0256 R_PICPOC(jp) = a_R_PICPOC(g)
0257
0258
0259 biosink(jp) = a_biosink(g) * biovol(jp)**b_biosink(g)
0260 bioswim(jp) = a_bioswim(g) * biovol(jp)**b_bioswim(g)
5e7acb36b1 daat*0261 bioswimDVM(jp) = a_bioswimDVM(g) * biovol(jp)**b_bioswimDVM(g)
0262
0263
0264 mortmaxDVM(jp) = a_mortmaxDVM(g) * biovol(jp)**b_mortmaxDVM(g)
0265 ksatDVM(jp) = a_ksatDVM(g) * biovol(jp)**b_ksatDVM(g)
0266 ksatPARDVM(jp) = a_ksatPARDVM(g) * biovol(jp)**b_ksatPARDVM(g)
0267 fracPARmort(jp) = a_fracPARmort(g)*biovol(jp)**b_fracPARmort(g)
0268 ExportFracDVM(jp) = a_ExportFracDVM(g)
8fbfd1f382 Oliv*0269
a092808e6b shlo*0270 hillnumDIN(jp) = a_hillnumDIN(g)
0271 hillnumPO4(jp) = a_hillnumPO4(g)
0272 hillnumFeT(jp) = a_hillnumFeT(g)
0273 hillnumSiO2(jp) = a_hillnumSiO2(g)
0274
8fbfd1f382 Oliv*0275
0276 qcarbon(jp) = a_qcarbon(g) * biovol(jp)**b_qcarbon(g)
0277 respRate(jp) = a_respRate_c(g)
0278 & * (12. _d 9 * qcarbon(jp))**b_respRate_c(g)
0279 & / qcarbon(jp)
0280
0281
0282 PCmax(jp)= a_PCmax(g) * biovol(jp)**b_PCmax(g)
0283
0284 vmaxNH4(jp) = a_vmaxNH4(g) * biovol(jp)**b_vmaxNH4(g)
0285 vmaxNO2(jp) = a_vmaxNO2(g) * biovol(jp)**b_vmaxNO2(g)
0286 vmaxNO3(jp) = a_vmaxNO3(g) * biovol(jp)**b_vmaxNO3(g)
0287 vmaxN(jp) = a_vmaxN(g) * biovol(jp)**b_vmaxN(g)
0288 vmaxPO4(jp) = a_vmaxPO4(g) * biovol(jp)**b_vmaxPO4(g)
0289 vmaxSiO2(jp) = a_vmaxSiO2(g) * biovol(jp)**b_vmaxSiO2(g)
0290 vmaxFeT(jp) = a_vmaxFeT(g) * biovol(jp)**b_vmaxFeT(g)
0291
0292 Qnmin(jp) = a_Qnmin(g) * biovol(jp)**b_Qnmin(g)
0293 Qnmax(jp) = a_Qnmax(g) * biovol(jp)**b_Qnmax(g)
0294
0295 Qpmin(jp) = a_Qpmin(g) * biovol(jp)**b_Qpmin(g)
0296 Qpmax(jp) = a_Qpmax(g) * biovol(jp)**b_Qpmax(g)
0297
0298 Qsimin(jp) = a_Qsimin(g) * biovol(jp)**b_Qsimin(g)
0299 Qsimax(jp) = a_Qsimax(g) * biovol(jp)**b_Qsimax(g)
0300
0301 Qfemin(jp) = a_Qfemin(g) * biovol(jp)**b_Qfemin(g)
0302 Qfemax(jp) = a_Qfemax(g) * biovol(jp)**b_Qfemax(g)
0303
0304 ksatNH4(jp) = a_ksatNH4(g) * biovol(jp)**b_ksatNH4(g)
0305 ksatNO2(jp) = a_ksatNO2(g) * biovol(jp)**b_ksatNO2(g)
0306 ksatNO3(jp) = a_ksatNO3(g) * biovol(jp)**b_ksatNO3(g)
0307 ksatPO4(jp) = a_ksatPO4(g) * biovol(jp)**b_ksatPO4(g)
0308 ksatSiO2(jp) = a_ksatSiO2(g) * biovol(jp)**b_ksatSiO2(g)
0309 ksatFeT(jp) = a_ksatFeT(g) * biovol(jp)**b_ksatFeT(g)
0310
0311
0312
0313 kexcc(jp) = a_kexcc(g) * biovol(jp)**b_kexcc(g)
0314 kexcn(jp) = a_kexcn(g) * biovol(jp)**b_kexcn(g)
0315 kexcp(jp) = a_kexcp(g) * biovol(jp)**b_kexcp(g)
0316 kexcsi(jp) = a_kexcsi(g) * biovol(jp)**b_kexcsi(g)
0317 kexcfe(jp) = a_kexcfe(g) * biovol(jp)**b_kexcfe(g)
0318
5e7acb36b1 daat*0319
0320 PARpref(jp) = a_PARpref(g) * biovol(jp)**b_PARpref(g)
0321
5910c7e5d2 Oliv*0322 IF (darwin_effective_ksat) THEN
8fbfd1f382 Oliv*0323
0324
0325 IF (darwin_select_kn_allom.EQ.1) THEN
0326
0327 kappa=(ksatNO3(jp)*PCmax(jp)*Qnmin(jp)*(Qnmax(jp)-Qnmin(jp)))/
0328 & (vmaxNO3(jp)*Qnmax(jp) +
0329 & PCmax(jp)*Qnmin(jp)*(Qnmax(jp)-Qnmin(jp)))
0330 ELSEIF (darwin_select_kn_allom.EQ.2) THEN
0331
0332 kappa = (ksatNO3(jp)*PCmax(jp)*Qnmin(jp))/vmaxNO3(jp)
0333 ELSE
0334 WRITE(msgBuf,'(2A)')'DARWIN_GENERATE_ALLOMETRIC: ',
0335 & 'illegal value for darwin_select_kn_allom'
0336 CALL PRINT_ERROR( msgBuf, myThid )
0337 STOP 'ABNORMAL END: S/R DARWIN_GENERATE_ALLOMETRIC'
0338 ENDIF
0339 #ifndef DARWIN_ALLOW_NQUOTA
0340 ksatNO3(jp) = kappa
0341 ksatNO2(jp) = kappa*a_ksatNO2fac(g)
0342 ksatNH4(jp) = kappa*a_ksatNH4fac(g)
0343 #endif
0344 #ifndef DARWIN_ALLOW_PQUOTA
0345 ksatPO4(jp) = kappa/R_NC(jp)*R_PC(jp)
0346 #endif
0347 #ifndef DARWIN_ALLOW_SIQUOTA
0348 ksatSiO2(jp) = kappa/R_NC(jp)*R_SiC(jp)
0349 #endif
0350 #ifndef DARWIN_ALLOW_FEQUOTA
0351 ksatFeT(jp) = kappa/R_NC(jp)*R_FeC(jp)
0352 #endif
0353 ENDIF
0354
0355
0356
0357
0358 bactType(jp) = grp_bacttype(g)
0359 isAerobic(jp) = grp_aerobic(g)
0360 isDenit(jp) = grp_denit(g)
0361
0362
0363 yieldO2(jp) = 1.0
0364 yieldNO3(jp) = 1.0
0365 IF (isAerobic(jp) .NE. 0) THEN
0366 yield(jp) = yod
0367 yieldO2(jp) = yoe
0368 ELSEIF (isDenit(jp) .NE. 0) THEN
0369 yield(jp) = ynd
0370 yieldNO3(jp) = yne
0371 ENDIF
0372
367178819a Oliv*0373 ksatPON(jp) = a_ksatPON(g)
0374 ksatDON(jp) = a_ksatDON(g)
8fbfd1f382 Oliv*0375 ksatPOC(jp) = ksatPON(jp)/R_NC(jp)
0376 ksatPOP(jp) = ksatPON(jp)/R_NC(jp)*R_PC(jp)
0377 ksatPOFe(jp) = ksatPON(jp)/R_NC(jp)*R_FeC(jp)
0378 ksatDOC(jp) = ksatDON(jp)/R_NC(jp)
0379 ksatDOP(jp) = ksatDON(jp)/R_NC(jp)*R_PC(jp)
0380 ksatDOFe(jp) = ksatDON(jp)/R_NC(jp)*R_FeC(jp)
0381
a092808e6b shlo*0382
0383 #ifdef DARWIN_MACROMOLECULAR_GROWTH
0384 Y_CP_Plip(jp) = a_Y_CP_Plip(g)
0385 Y_CN_protein(jp) = a_Y_CN_protein(g)
0386 Y_NC_chl(jp) = a_Y_NC_chl(g)
0387 Y_CN_cyano(jp) = a_Y_CN_cyano(g)
0388 Y_PN_nucacid(jp) = a_Y_PN_nucacid(g)
0389 Y_CN_DNA(jp) = a_Y_CN_DNA(g)
0390 Y_CN_RNA(jp) = a_Y_CN_RNA(g)
0391 Y_THY_P(jp) = a_Y_THY_P(g)
0392 Y_FeN_photo(jp) = a_Y_FeN_photo(g)
0393
0394 ECo2Prod(jp) = a_ECo2Prod(g)
0395 maintConsum(jp) = a_maintConsum(g)
0396 A_I(jp) = a_A_I(g)
0397 A_pho(jp) = a_A_pho(g)
0398 A_bio(jp) = a_A_bio(g)
0399
0400 QC_other(jp) = a_QC_other(g)
0401 QC_pro_other(jp) = a_QC_pro_other(g)
0402 QP_other(jp) = a_QP_other(g)
0403 QP_RNA_min(jp) = a_QP_RNA_min(g)
0404 QC_DNA(jp) = a_QC_DNA(g)
0405 AP_RNA(jp) = a_AP_RNA(g)
0406
0407 VI_max(jp) = a_VI_max(g) * biovol(jp)**b_VI_max(g)
0408 QN_sto_max(jp) = a_QN_sto_max(g) * biovol(jp)**b_QN_sto_max(g)
0409 Qp_max(jp) = a_Qp_max(g) * biovol(jp)**b_Qp_max(g)
0410 Qfe_max(jp) = a_Qfe_max(g) * biovol(jp)**b_Qfe_max(g)
0411
0412 Sf(jp) = 1.0 _d 0
0413
0414 #else /* DARWIN_MACROMOLECULAR_GROWTH */
0415
0416 # ifdef DARWIN_ALLOW_GEIDER
8fbfd1f382 Oliv*0417 mQyield(jp) = a_mQyield(g)
0418 chl2cmax(jp) = a_chl2cmax(g)
0419 inhibGeider(jp) = a_inhibGeider(g)
a092808e6b shlo*0420 # else
8fbfd1f382 Oliv*0421 ksatPAR(jp) = a_ksatPAR(g)
0422 kinhPAR(jp) = a_kinhPAR(g)
a092808e6b shlo*0423 # endif /* DARWIN_ALLOW_GEIDER */
0424
0425 #endif /* DARWIN_MACROMOLECULAR_GROWTH */
8fbfd1f382 Oliv*0426
0427 #ifdef ALLOW_RADTRANS
0428 aptype(jp) = grp_aptype(g)
0429 iopt = aptype(jp)
0430 IF (1 .LE. iopt .AND. iopt .LE. nOpt) THEN
0431 IF (darwin_allomSpectra) THEN
0432
0433
0434
0435 volmeas = PI / 6. _d 0 * asize(iopt)**3
0436 scalefac = (biovol(jp)/volmeas)**darwin_absorpSlope
0437
0438 DO l = 1, nlam
0439 aphy_chl(jp,l) = aphy_chl_type(iopt,l)*scalefac
0440 aphy_chl_ps(jp,l) = aphy_chl_ps_type(iopt,l)*scalefac
0441 ENDDO
0442
f61b1017e2 Oliv*0443
0444 IF (asize_mgC(iopt).GT.0 _d 0)THEN
0445 volmeas = PI / 6. _d 0 * asize_mgC(iopt)**3
0446 scalefac = (biovol(jp)/volmeas)**darwin_absorpSlope
0447 ELSE
0448 scalefac = 1 _d 0
0449 ENDIF
0450
0451 DO l = 1, nlam
0452 aphy_mgC(jp,l) = aphy_mgC_type(iopt,l)*scalefac
0453 ENDDO
0454
8fbfd1f382 Oliv*0455
0456
0457 volmeas = PI / 6. _d 0 * bsize(iopt)**3
0458 dmmeas = bsize(iopt)
0459 dmac = (6. _d 0 * biovol(jp)/PI)**(1. _d 0 / 3. _d 0)
0460 dmratio = dmac/dmmeas
0461 carpcellmeas = darwin_aCarCell*volmeas**darwin_bCarCell
0462 carpcellac = darwin_aCarCell*biovol(jp)**darwin_bCarCell
0463
0464 DO l = 1, nlam
0465
0466 bphy_cell_type = bphy_mgC_type(iopt,l)*carpcellmeas
0467 dmint = 10.0 _d 0 ** darwin_scatSwitchSizeLog(l)
0468 IF (dmmeas.GE.dmint) THEN
0469 slope = darwin_scatSlopeLarge(l)
0470 ELSE
0471 slope = darwin_scatSlopeSmall(l)
0472 ENDIF
0473 bphy_mgC(jp,l) = bphy_cell_type*dmratio**slope/carpcellac
0474 ENDDO
0475
0476
0477
0478 bmean = 0. _d 0
0479 bbmean = 0. _d 0
0480 DO l = 1, nlam
0481 bmean = bmean + bphy_mgC_type(iopt,l)*RT_wbWidths(l)
0482 bbmean = bbmean + bbphy_mgC_type(iopt,l)*RT_wbWidths(l)
0483 ENDDO
0484 bmean = bmean/RT_wbTotalWidth
0485 bbmean = bbmean/RT_wbTotalWidth
0486
0487 bbbratiomeas = bbmean/bmean
0488 bbbratioac = bbbratiomeas*dmratio**darwin_bbbSlope
0489 DO l = 1, nlam
0490 bbphy_mgC(jp,l) = bphy_mgC(jp,l)*bbbratioac
0491 ENDDO
0492
0493 ELSE
0494
0495 DO l = 1, nlam
0496 aphy_chl(jp,l) = aphy_chl_type(iopt,l)
0497 aphy_chl_ps(jp,l) = aphy_chl_ps_type(iopt,l)
f61b1017e2 Oliv*0498 aphy_mgC(jp,l) = aphy_mgC_type(iopt,l)
8fbfd1f382 Oliv*0499 bphy_mgC(jp,l) = bphy_mgC_type(iopt,l)
0500 bbphy_mgC(jp,l) = bbphy_mgC_type(iopt,l)
0501 ENDDO
0502 ENDIF
0503 ELSEIF (jp .LE. nPhoto) THEN
0504 WRITE(msgBuf,'(A,2I4)')'invalid optical phyto type:',jp,iopt
0505 CALL PRINT_ERROR( msgBuf, myThid )
0506 STOP 'ABNORMAL END: S/R DARWIN_READTRAITS'
0507 ENDIF
0508 #endif
0509
0510
0511 ENDDO
0512
0513
0514
0515
0516 DO jz=1,nplank
0517 gz = group(jz)
0518
0519 grazemax(jz) = a_grazemax(gz) * biovol(jz)**b_grazemax(gz)
0520
0521 kgrazesat(jz) = a_kgrazesat(gz) * biovol(jz)**b_kgrazesat(gz)
0522 DO jp=1,nplank
0523 g = group(jp)
0524 IF (grp_pred(gz).GT.0 .AND. grp_prey(g).GT.0) THEN
0525 #ifdef DARWIN_ALLOMETRIC_PALAT
0526
0527
0528 pp_opt = a_ppOpt(gz) * biovol(jz)**b_ppOpt(gz)
0529
1d634e507f Oliv*0530 pp_sig = a_ppSig(gz)
8fbfd1f382 Oliv*0531 prd_pry = biovol(jz) / biovol(jp)
0532 palat(jp,jz) =
0533 & EXP(-(LOG(prd_pry/pp_opt)**2) / (2*pp_sig**2))
0534 & / pp_sig/2. _d 0
0535 IF (palat(jp,jz).LT.palat_min) THEN
0536 palat(jp,jz) = 0. _d 0
0537 ENDIF
0538 #else
0539 palat(jp,jz) = 0.0 _d 0
0540 #endif
0541 asseff(jp,jz) = grp_ass_eff(g,gz)
0542 ExportFracPreyPred(jp,jz) = grp_ExportFracPreyPred(g,gz)
0543 ELSE
0544 palat(jp,jz) = 0. _d 0
0545 asseff(jp,jz) = 0. _d 0
0546 ExportFracPreyPred(jp,jz) = 0. _d 0
0547 ENDIF
0548 ENDDO
0549 ENDDO
0550
0551 #endif /*ALLOW_DARWIN*/
0552
0553 RETURN
0554 END