Back to home page

darwin3

 
 

    


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 CBOP
                0004 C !ROUTINE: DARWIN_GENERATE_ALLOMETRIC
                0005 
                0006 C !INTERFACE: ==========================================================
                0007       SUBROUTINE DARWIN_GENERATE_ALLOMETRIC( myThid )
                0008 
                0009 C !DESCRIPTION:
                0010 C     Generate parameters for plankton types using an allometric approach
                0011 
                0012 C !USES: ===============================================================
                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 C !INPUT PARAMETERS: ===================================================
                0029 C  myThid               :: thread number
                0030       INTEGER myThid
                0031 CEOP
                0032 
                0033 #ifdef ALLOW_DARWIN
                0034 
                0035 C !LOCAL VARIABLES: ====================================================
                0036 C     msgBuf   :: Informational/error meesage buffer
                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 C ======================================================================
                0052 C compute cell volumes in micrometer^3
                0053 C
                0054 C in decreasing precedence (if bold quantity is set):
                0055 C
983ffa4545 Oliv*0056 C   V = 10**(logvolbase + (grp_logvolind(j,g)-1)*logvolinc)
8fbfd1f382 Oliv*0057 C   V = GRP_BIOVOL(j,g)
                0058 C   V = 10**(logvolbase+(GRP_BIOVOLIND(j,g)-1)*logvolinc)
                0059 C   V = 10**(logvolbase+(LOGVOL0IND(g)+j-2)*logvolinc)
                0060 C   V = BIOVOL0(g)*biovolfac(g)**(j-1)
                0061 C
                0062 C     if logvol0ind is set, use it to compute biovol0
                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 C         pick from logrange
                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 C set up single list of plankton types from groups
                0120 C type order is either by group or, if darwin_sort_biovol, by biovol.
                0121 
                0122       IF (darwin_sort_biovol) THEN
                0123 c      sort by volume
                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 C       first check phototrophs
                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 C       then pure heterotrophs
                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 C      sort by group
                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 C      endif sort order
                0193       ENDIF
                0194 
                0195 C ======================================================================
                0196 C compute traits from trait parameters
                0197       DO jp=1,nplank
                0198         g = group(jp)
                0199 
                0200 C ----------------------------------------------------------------------
                0201 C non-allometric traits (same within group)
                0202 
                0203 C flags
                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 C traits
                0219         Xmin(jp)       = a_Xmin(g)
                0220         amminhib(jp)   = a_amminhib(g)
                0221         acclimtimescl(jp) = a_acclimtimescl(g)
                0222 
                0223 C mortality
                0224         mort(jp) = a_mort(g)
                0225         mort2(jp) = a_mort2(g)
                0226 C       if 0, temperature dependent, if 1, not.
                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 C temperature function parameters
                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 C plankton elemental ratios
                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 C plankton sinking and swimming
                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 C light-dependent mortality for DVM
                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 C respRate rate is given in terms of carbon content
                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 C parameters relating to inorganic nutrients
                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 C parameters relating to quota nutrients
                0312 c EXCRETION
                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 C PAR preference for DVM
                0320         PARpref(jp) = a_PARpref(g) * biovol(jp)**b_PARpref(g)
                0321 
5910c7e5d2 Oliv*0322         IF (darwin_effective_ksat) THEN
8fbfd1f382 Oliv*0323 c        compute effective half sat for uptake of non-quota elements
                0324 C        we compute it for NO3 and scale for others
                0325          IF (darwin_select_kn_allom.EQ.1) THEN
                0326 C         following Ward et al.
                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 C         following Follett et al.
                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 C parameters for bacteria
                0356 
                0357 C flags
                0358         bactType(jp)  = grp_bacttype(g)
                0359         isAerobic(jp) = grp_aerobic(g)
                0360         isDenit(jp)   = grp_denit(g)
                0361 
                0362 C real parameters
                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 C ----------------------------------------------------------------------
                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 c FOR ABSORPTION
                0434 c in terms of volume
                0435            volmeas = PI / 6. _d 0 * asize(iopt)**3
                0436            scalefac = (biovol(jp)/volmeas)**darwin_absorpSlope
                0437 c size specific absorption spectra
                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 c in terms of mg C
                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 c size specific absorption spectra
                0451            DO l = 1, nlam
                0452              aphy_mgC(jp,l) = aphy_mgC_type(iopt,l)*scalefac
                0453            ENDDO
                0454 
8fbfd1f382 Oliv*0455 c TOTAL SCATTER
                0456 c in terms of diameter
                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 c size specific scattering spectra
                0464            DO l = 1, nlam
                0465 c convert scatter spectrum from m2/mgC to m2/celll
                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 c BACK SCATTER
                0477 c calculate mean scatter
                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 c scale mean backscattering ratio
                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 cc
                0493          ELSE
                0494 c OR use read in absorbtion spectra
                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 C     jp
                0511       ENDDO
                0512 
                0513 C ======================================================================
                0514 C grazing
                0515 
                0516       DO jz=1,nplank
                0517         gz = group(jz)
                0518 C       maximum grazing rate
                0519         grazemax(jz) = a_grazemax(gz) * biovol(jz)**b_grazemax(gz)
                0520 C       grazing half-saturation
                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 C assign grazing preference according to predator/prey radius ratio
                0527 C           grazing size preference ratio
                0528             pp_opt = a_ppOpt(gz) * biovol(jz)**b_ppOpt(gz)
                0529 C           standard deviation of size preference
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