diff --git a/pyrealm/demography/t_model_functions.py b/pyrealm/demography/t_model_functions.py index 9c2fd903..1960f08e 100644 --- a/pyrealm/demography/t_model_functions.py +++ b/pyrealm/demography/t_model_functions.py @@ -101,7 +101,7 @@ def calculate_foliage_masses(sla: Series, lai: Series, crown_area: Series) -> Se The foliage mass (:math:`W_{f}`) is calculated from the crown area (:math:`A_{c}`), along with the specific leaf area (:math:`\sigma`) and leaf area index (:math:`L`) - of the plant functional type :cite:p:`Li:2014bc`: + of the plant functional type :cite:p:`Li:2014bc`. .. math:: @@ -128,7 +128,7 @@ def calculate_sapwood_masses( The sapwood mass (:math:`W_{\cdot s}`) is calculated from the individual crown area (:math:`A_{c}`), height :math:`H` and canopy fraction (:math:`f_{c}`) along with the wood density (:math:`\rho_s`) and crown area ratio :math:`A_{c}` of the plant - functional type :cite:p:`{Equation 14, }Li:2014bc`: + functional type :cite:p:`{Equation 14, }Li:2014bc`. .. math:: @@ -145,6 +145,262 @@ def calculate_sapwood_masses( return crown_area * rho_s * height * (1 - crown_fraction / 2) / ca_ratio +def calculate_whole_crown_gpp( + potential_gpp: Series, crown_area: Series, par_ext: Series, lai: Series +) -> Series: + r"""Calculate whole crown gross primary productivity. + + This function calculates individual GPP across the whole crown, given the + individual potential gross primary productivity (GPP) per metre squared + (:math:`P_0`) and crown area (:math:`A_c`), along with the leaf area index + (:math:`L`) and the extinction coefficient (:math:`k`) of the plant functional type + :cite:p:`{Equation 12, }Li:2014bc`. + + .. math:: + + P = P_0 A_c (1 - e^{-kL}) + + Args: + potential_gpp: Potential GPP per metre squared + crown_area: The crown area in metres squared + par_ext: The extinction coefficient + lai: The leaf area index + """ + + return potential_gpp * crown_area * (1 - np.exp(-(par_ext * lai))) + + +def calculate_sapwood_respiration(resp_s: Series, sapwood_mass: Series) -> Series: + r"""Calculate sapwood respiration. + + Calculates the total sapwood respiration (:math:`R_{\cdot s}`) given the individual + sapwood mass (:math:`W_{\cdot s}`) and the sapwood respiration rate of the plant + functional type (:math:`r_{s}`) :cite:p:`{see Equation 13, }Li:2014bc`. + + .. math:: + R_{\cdot s} = W_{\cdot s} \, r_s + + Args: + resp_s: The sapwood respiration rate + sapwood_mass: The individual sapwood mass + """ + return sapwood_mass * resp_s + + +def calculate_foliar_respiration(resp_f: Series, whole_crown_gpp: Series) -> Series: + r"""Calculate foliar respiration. + + Calculates the total foliar respiration (:math:`R_{f}`) given the individual crown + GPP (:math:`P`) and the foliar respiration rate of the plant functional type + (:math:`r_{f}`). :cite:t:`Li:2014bc` remove foliar respiration as a constant + proportion of potential GPP before calculating GPP for the crown, but ``pyrealm`` + treats this proportion as part of the definition of plant functional types. + + .. math:: + R_{f} = P \, r_f + + Args: + resp_f: The foliar respiration rate + whole_crown_gpp: The individual whole crown GPP. + """ + return whole_crown_gpp * resp_f + + +def calculate_fine_root_respiration( + zeta: Series, sla: Series, resp_r: Series, foliage_mass: Series +) -> Series: + r"""Calculate foliar respiration. + + Calculates the total fine root respiration (:math:`R_{r}`) given the individual + foliage mass (:math:`W_f`), along with the fine root respiration rate (:math:`r_r`), + the ratio of fine root mass to foliage area (:math:`\zeta`) and the specific leaf + area (:math:`\sigma`) :cite:p:`{see Equation 13, }Li:2014bc` + + .. math:: + R_{r} = \zeta \sigma W_f r_r + + Args: + zeta: The ratio of fine root mass to foliage area of the PFT. + sla: The specific leaf area of the PFT. + resp_r: The respiration rate of fine roots of the PFT. + foliage_mass: The individual foliage mass. + """ + + return zeta * sla * foliage_mass * resp_r + + +def calculate_net_primary_productivity( + yld: Series, + whole_crown_gpp: Series, + foliar_respiration: Series, + fine_root_respiration: Series, + sapwood_respiration: Series, +) -> Series: + r"""Calculate net primary productivity. + + The net primary productivity (NPP, :math:`P_{net}`) is calculated as a plant + functional type specific yield proportion (:math:`y`) of the total GPP (:math:`P`) + for the individual minus respiration (:math:`R_m`), as the sum of the respiration + costs for foliage (:math:`R_f`), fine roots (:math:`R_r`) and sapwood + (:math:`R_s`). + + .. math:: + P_{net} = y (P - R_m) = y (P - W_{\cdot s} r_s - \zeta \sigma W_f r_r - P r_f) + + Note that this differs from Equation 13 of :cite:t:`Li:2014bc`, which does not + include a term for foliar respiration. This is because :cite:t:`Li:2014bc` remove + foliar respiration as a fixed proportion of potential GPP as the first step in their + calculations. The approach here is equivalent but allows the foliar respiration to + vary between plant functional types. + + Args: + yld: The yield proportion. + whole_crown_gpp: The total GPP for the crown. + foliar_respiration: The total foliar respiration. + fine_root_respiration: The total fine root respiration + sapwood_respiration: The total sapwood respiration. + """ + + return yld * ( + whole_crown_gpp + - foliar_respiration + - fine_root_respiration + - sapwood_respiration + ) + + +def calculate_foliage_and_fine_root_turnover( + sla: Series, + zeta: Series, + tau_f: Series, + tau_r: Series, + foliage_mass: Series, +) -> Series: + r"""Calculate turnover costs. + + This function calculates the costs associated with the turnover of fine roots and + foliage. This is calculated from the total foliage mass of individuals + (:math:`W_f`), along with the specific leaf area (:math:`\sigma`) and fine root mass + to foliar area ratio (:math:`\zeta`) and the turnover times of foliage + (:math:`\tau_f`) and fine roots (:math:`\tau_r`) of the plant functional type + :cite:p:`{see Equation 15, }Li:2014bc`. + + .. math:: + + T = W_f \left( \frac{1}{\tau_f} + \frac{\sigma \zeta}{\tau_f} \right) + + Args: + sla: The specific leaf area + zeta: The ratio of fine root mass to foliage area. + tau_f: The turnover time of foliage + tau_r: The turnover time of fine roots + foliage_mass: The foliage mass + """ + + return foliage_mass * ((1 / tau_f) + (sla * zeta / tau_r)) + + +def calculate_growth_increments( + rho_s: Series, + a_hd: Series, + h_max: Series, + lai: Series, + ca_ratio: Series, + sla: Series, + zeta: Series, + npp: Series, + turnover: Series, + dbh: Series, + height: Series, +) -> tuple[Series, Series, Series]: + r"""Calculate growth increments. + + Given an estimate of net primary productivity (:math:`P_{net}`), less associated + turnover costs (:math:`T`), the remaining productivity can be allocated to growth + and hence estimate resulting increments :cite:`Li:2014bc` in: + + * the stem diameter (:math:`\Delta D`), + * the stem mass (:math:`\Delta W_s`), and + * the foliar mass (:math:`\Delta W_f`). + + + The stem diameter increment can be calculated using the available productivity for + growth and the rates of change in stem (:math:`\textrm{d}W_s / \textrm{d}t`) and + foliar masses (:math:`\textrm{d}W_f / \textrm{d}t`): + + .. math:: + + \Delta D = \frac{P_{net} - T}{ \textrm{d}W_s / \textrm{d}t + + \textrm{d}W_f / \textrm{d}t} + + The rates of change in stem and foliar mass can be calculated as: + + .. math:: + :nowrap: + + \[ + \begin{align*} + \textrm{d}W_s / \textrm{d}t &= \frac{\pi}{8} \rho_s D + \left(a D \left(1 - \frac{H}{H_{m}} + 2 H \right) \right) \\ + + \textrm{d}W_f / \textrm{d}t &= L \frac{\pi c}{4 a} \left(a D \left( 1 - + \frac{H}{H_{m}} + H \right) \right) \frac{1}{\sigma + \zeta} + \end{align*} + \] + + given the current stem diameter (:math:`D`) and height (:math:`H`) and the following + plant functional type traits: + + * the specific leaf area (:math:`\sigma`), + * the leaf area index (:math:`L`), + * the wood density of the PFT (:math:`\rho_s`), + * the maximum height (:math:`H_{m}`), + * the initial slope of the height/diameter relationship (:math:`a`), + * the crown area ratio (:math:`c`), and + * the ratio of fine root mass to leaf area (:math:`\zeta`). + + The resulting incremental changes in stem mass and foliar mass can then be + calculated as: + + .. math:: + :nowrap: + + \[ + \begin{align*} + \Delta W_s &= \textrm{d}W_s / \textrm{d}t \, \Delta D\\ + \Delta W_f &= \textrm{d}W_f / \textrm{d}t \, \Delta D + \end{align*} + \] + + Args: + rho_s: Wood density of the PFT + a_hd: Initial slope of the height/diameter relationship of the PFT + h_max: Maximum height of the PFT + lai: Leaf area index of the PFT + ca_ratio: Crown area ratio of the PFT + sla: Specific leaf area of the PFT + zeta: The ratio of fine root mass to foliage area of the PFT + npp: Net primary productivity of individuals + turnover: Fine root and foliage turnover cost of individuals + dbh: Diameter at breast height of individuals + height: Stem height of individuals + """ + # Rates of change in stem and foliar + dWsdt = np.pi / 8 * rho_s * dbh * (a_hd * dbh * (1 - (height / h_max)) + 2 * height) + + dWfdt = ( + lai + * ((np.pi * ca_ratio) / (4 * a_hd)) + * (a_hd * dbh * (1 - height / h_max) + height) + * (1 / sla + zeta) + ) + + # Increment of diameter at breast height + delta_d = (npp - turnover) / (dWsdt + dWfdt) + + return (delta_d, dWsdt * delta_d, dWfdt * delta_d) + + def calculate_canopy_q_m(m: float, n: float) -> float: """Calculate a q_m value. @@ -201,7 +457,6 @@ def calculate_canopy_z_max(z_max_prop: Series, height: Series) -> Series: z_max_prop: Canopy shape parameter of the PFT height: Crown area of individuals """ - """Calculate z_m, the height of maximum crown radius.""" return height * z_max_prop diff --git a/pyrealm_build_data/t_model/pft_definitions.csv b/pyrealm_build_data/t_model/pft_definitions.csv new file mode 100644 index 00000000..c83124d4 --- /dev/null +++ b/pyrealm_build_data/t_model/pft_definitions.csv @@ -0,0 +1,4 @@ +name,d,a,cr,Hm,rho,L,sigma,tf,tr,K,y,zeta,rr,rs +default,0.1,116,390.43,25.33,200,1.8,14,4,1.04,0.5,0.6,0.17,0.913,0.044 +alt_one,0.04,124,351.62,15.33,400,4,10,2,0.95,0.6,0.5,0.22,0.813,0.034 +alt_two,0.6,102,406.12,45.33,100,1,21,8,2.1,0.4,0.7,0.15,0.962,0.054 diff --git a/pyrealm_build_data/t_model/rtmodel_output_alt_one.csv b/pyrealm_build_data/t_model/rtmodel_output_alt_one.csv new file mode 100644 index 00000000..2df8e17c --- /dev/null +++ b/pyrealm_build_data/t_model/rtmodel_output_alt_one.csv @@ -0,0 +1,101 @@ +"P0","dD","D","H","fc","Ac","Wf","Ws","Wss","GPP","Rm1","Rm2","NPP","turnover","dWs","dWfr" +7.49554772192574,3.61065392785234,0.04,4.2375677628595,0.85434833928619,0.377501266657307,0.151000506662923,1.06501694023107,1.04242323817797,2.5728851656008,0.0354423900980509,0.270079506217303,1.13368163464272,0.42518563718244,0.547381112549485,0.161114884910798 +7.08599881624794,3.38755026387756,0.0472213078557047,4.86692916274892,0.831180467338634,0.511840683012919,0.204736273205168,1.70471163286376,1.65612729233048,3.2978773047212,0.0563083279392362,0.366191298254763,1.4376888392636,0.576494242972445,0.6900087497602,0.171185846530957 +6.35441155201201,2.79790820356479,0.0539964083834598,5.42489641651488,0.810223604848407,0.652376170769326,0.26095046830773,2.48451185764506,2.39503196394162,3.76939842353647,0.081431086774015,0.466736007615206,1.61061566457362,0.734781581813872,0.720285077549637,0.155549005210115 +5.77593157999703,2.29241120672,0.0595922247905894,5.86323566020654,0.793461877219925,0.778159664033028,0.311263865613211,3.27066773057914,3.1311475990825,4.08685633908433,0.106459018368805,0.55672655003579,1.71183538533987,0.876453516331937,0.699108609666685,0.136273259341245 +8.33987285919221,4.85691339032518,0.0641770472040294,6.20788347303686,0.78008538218186,0.887288909826318,0.354915563930527,4.01626994991319,3.82203333893048,6.72857502874762,0.129949133523636,0.634801977646141,2.98191195878892,0.999367508962274,1.67951212075214,0.303032329074508 +5.72975308173827,2.33118006371596,0.0738908739846797,6.89719483287688,0.752766017984117,1.13502404877275,0.454009619509099,5.91526190246491,5.55369363714836,5.91343171974879,0.188825583663044,0.812041605453975,2.45628226531588,1.2783955075651,1.01922771023309,0.158659047517701 +6.2657770763125,2.90848200486772,0.0785532341121116,7.20929498679816,0.740128351902204,1.26124260254576,0.504497041018302,6.98780558177195,6.51589619635768,7.1857513935746,0.221540470676161,0.902343407565335,3.03093375766655,1.42055745760417,1.40526579674485,0.205110503317538 +6.99889959249982,3.7141526111863,0.0843701981218471,7.58253873483704,0.724776132892248,1.42477233009401,0.569908932037605,8.47837560281049,7.83615410675804,9.06721370301643,0.266429239629773,1.01933911584246,3.8907226737721,1.6047435717901,2.01345046738777,0.272528634594234 +5.35906670175618,2.00948647245774,0.0917985033442197,8.03433914797226,0.705818235423524,1.64258376793897,0.657033507175587,10.6350916943143,9.71469990449124,8.00415159891184,0.330299796752702,1.17517013093425,3.24934083561244,1.85006803336284,1.24515927139619,0.154113530853421 +6.7339708545309,3.50841693125576,0.0958174762891352,8.26769531337178,0.695853875376714,1.764293999459,0.705717599783598,11.9232265565485,10.8202700920997,10.8029111869906,0.36788918313139,1.26224649897294,4.58638775244311,1.98715218886434,2.3243704214175,0.274865142161265 +5.20657779130872,1.86859022630884,0.102834310151647,8.65736875115767,0.678931864527832,1.98273978469815,0.79309591387926,14.3807610876729,12.8983239604302,9.38678128610371,0.438543014654628,1.41853135156444,3.76485345994232,2.23319112592318,1.38029995740751,0.151362376611625 +7.7135752048239,4.6541230076348,0.106571490604264,8.85605742826326,0.670158759766913,2.10195410960806,0.840781643843226,15.7994650177428,14.0805583698836,14.7427182085259,0.478738984576041,1.50382204817799,6.38007858788593,2.36746410240066,3.62953443806943,0.383080047415842 +5.00211904801865,1.65965683079547,0.115879736619534,9.32559398076352,0.649003917894614,2.40672111599011,0.962688446396043,19.6703179117587,17.2469691749055,10.9465788109412,0.586396951946786,1.72186455522396,4.31915865188523,2.71072799379938,1.46693381851576,0.141496839570078 +6.00248775076181,2.79965176697874,0.119199050281125,9.48466121777122,0.641693060378643,2.51788786024386,1.00715514409754,21.1683637820799,18.4506874667532,13.7425169930029,0.627323373869608,1.80139769073286,5.6568979642002,2.83593685311676,2.57960784223324,0.241353268850204 +6.55514448244711,3.45092930924139,0.124798353815082,9.74349770320583,0.629628452448352,2.70810506612105,1.08324202644842,23.8370483601978,20.5671992672918,16.1415930625443,0.699284775087922,1.93748668850564,6.75241079947536,3.05018149552581,3.39956982159194,0.302659482357608 +7.18895695430233,4.21444280798718,0.131700212433565,10.0468304180054,0.615206494010232,2.94684513518015,1.17873805407206,27.3729686358531,23.319961505257,19.2629063175042,0.792878691178739,2.10829088351328,8.18086837140611,3.31907820488711,4.48514962191931,0.376640544599687 +7.2606968482581,4.34072848861625,0.14012909804954,10.3950261981069,0.598240177116599,3.24411081403222,1.29764432561289,32.0628496504997,26.8875544593077,21.4176886637257,0.914176851616461,2.32096664079121,9.09127258565901,3.65389323264682,5.04168854884585,0.39569080416634 +5.20241097246857,1.92655029061938,0.148810555026772,10.7296815309437,0.581475485728199,3.5560047638444,1.42240190553776,37.3227969288469,30.7852324702318,16.8215343724606,1.04669790398788,2.54410804824483,6.61536421011394,4.00518431296158,2.4315022956229,0.178677601529461 +6.23606547081245,3.170931796341,0.152663655608011,10.8708467164419,0.5742566449875,3.69607517161585,1.47843006864634,39.7973875436604,32.5838163780909,20.9580116657696,1.10784975685509,2.64432002078084,8.60292094406686,4.16294782487259,4.14389284974421,0.296080269450059 +4.67703748513476,1.30032350754141,0.159005519200693,11.0938223098119,0.562661657279793,3.92857610292046,1.57143044116818,44.058071263053,35.6313119284455,16.7072371599917,1.21146460556715,2.81066048707341,6.34255603367555,4.42481729486831,1.79510047838872,0.122638260418522 +7.18040640219089,4.34319526832161,0.161606166215776,11.1820033525403,0.558007460377776,4.02456838754282,1.60982735501713,45.8728106508254,36.9112173982758,26.2764658800844,1.25498139154138,2.87933720718363,11.0710736406797,4.53293492070612,6.12698025562813,0.411158464345466 +6.97283473021944,4.12408693641248,0.170292556752419,11.4634457132701,0.542872481404793,4.34763033608228,1.73905213443291,52.2187399081297,41.3068212495623,27.5651651244913,1.40443192248512,3.1104686476467,11.5251322771797,4.89680469432425,6.23355651778481,0.394771065070671 +5.57430249516482,2.41596964764401,0.178540730625244,11.7129939774782,0.52906487231141,4.6574370475189,1.86297481900756,58.6492431885744,45.6420202222313,23.6067468123993,1.55182868755587,3.33211676127692,9.36140068178324,5.24574488510023,3.88236473697906,0.233291059703955 +6.87219974333148,4.04568241298336,0.183372669920532,11.851634712428,0.521221070376491,4.84010330924281,1.93604132369713,62.5989935992691,48.2494724037077,30.2446819398938,1.64048206172606,3.46280351156468,12.5706981833015,5.45148477988401,6.72683846978225,0.392374933635247 +6.551618602613,3.66762266841177,0.191464034746498,12.0719993980702,0.508475829334236,5.14764012566635,2.05905605026654,69.5141946063924,52.7198425268872,30.665877830475,1.79247464591416,3.68282765150673,12.595287766527,5.79786835206631,6.43947900138394,0.357940413076782 +8.10479390458318,5.66565175194636,0.198799280083322,12.2596824694285,0.497327791982356,5.42794945763765,2.17117978305506,76.1077203338098,56.8768711278062,40.0015101308951,1.93381361834541,3.88337215997228,17.0921621762887,6.11358517860241,10.4230816277748,0.55549536991145 +6.18408442042872,3.24343458596136,0.210130583587215,12.5285831628013,0.480829393158744,5.86317683170863,2.34527073268345,86.8961170558696,63.4743011155386,32.9690944307129,2.15812623792831,4.19475123247762,13.3081084801535,6.60378864202972,6.38458886308816,0.3197309750356 +6.23580676582209,3.32377437659101,0.216617452759137,12.6717849414995,0.471761682831625,6.1132619304899,2.44530477219596,93.3995018494875,67.3377046289707,34.6628501141491,2.28948195738501,4.37367211554969,13.9998480206072,6.88546343749915,6.78598949127018,0.32839509183787 +3.3279466719316,-0.464249369128925,0.223265001512319,12.8109427106352,0.462741824371095,6.37005972585542,2.54802389034217,100.309546042038,71.355561979679,19.2760692997857,2.42608910730909,4.557395530266,6.1462923311053,7.17469884912136,-0.9824563417916,-0.0459501762244662 +6.67747861451358,3.91240430483846,0.222336502774062,12.791952456892,0.46398547077648,6.33416500562717,2.53366600225087,99.3295010652287,70.7909856167037,38.4592220101489,2.40689351096793,4.5317150116259,15.7603067437776,7.13427005896955,8.2388810435577,0.387155641250312 +5.36289499732994,2.20211185134877,0.230161311383739,12.9476141218965,0.453665484832205,6.63687803566206,2.65475121426482,107.739330226129,75.5811438397416,32.3639667886737,2.56975889055122,4.74828802183406,12.5229599381442,7.47522052437726,4.82949459875284,0.218244815014085 +6.75433456765573,4.04527818179217,0.234565535086436,13.0309914948291,0.4480139891336,6.80743382616914,2.72297353046766,112.622649674141,78.307817150387,41.8085026377729,2.66246578311316,4.87031045659445,17.1378631990326,7.66732020421156,9.06939551437222,0.401147480448848 +5.06424265808234,1.81465382950048,0.24265609145002,13.1766263730268,0.437916539727146,7.12093784980933,2.84837513992373,121.872720161289,83.3685190854907,32.7906721299447,2.83452964890668,5.09460377526759,12.4307693528852,8.02042473610103,4.23028967741247,0.180054939371691 +6.42306065245781,3.63231366107183,0.246285399109021,13.238922870693,0.43350319348187,7.26161272521444,2.90464509008578,126.139138466167,85.6587387337746,42.4105322428931,2.91239711694834,5.19524820812742,17.1514434589087,8.17886906945205,8.6121370675439,0.360437321912728 +5.0340492653364,1.77879551704734,0.253550026431165,13.358257229889,0.424878208070108,7.54319314480357,3.01727725792143,134.895356256072,90.276683552331,34.5279906761785,3.06940724077925,5.39670210351827,13.0309406659405,8.49601754204192,4.35843754320852,0.176485580690032 +6.81449196847425,4.18261741574216,0.25710761746526,13.4141881663647,0.420753526838383,7.68105904850526,3.0724236194021,139.288146382358,92.5532853847666,47.5941093468675,3.14681170308206,5.4953368856626,19.4759803790614,8.65129808621119,10.4097852809364,0.414897011913835 +5.98245408442601,3.07220822206233,0.265472852296744,13.5395312324696,0.411302952671544,8.00507693538821,3.20203077415528,149.886920684066,97.941477898273,43.5455219527452,3.33001024854128,5.72715224265414,17.2441797307749,9.01624454827935,7.92343417125971,0.304501011235845 +7.83262355085145,5.60789750415318,0.271617268740869,13.6263431418686,0.404576132278857,8.24287027202539,3.29714810881016,157.911570914187,101.927247645222,58.7062494020637,3.46552641993756,5.89727910741785,24.6717219373541,9.28407493796544,14.8322992417785,0.555347757610214 +7.38672788528102,5.03143700949309,0.282833063749175,13.7740976524124,0.392745569447481,8.67631081249967,3.47052432499987,173.078606776226,109.254495690446,58.2754744871514,3.71465285347515,6.20737980769476,24.1767209129907,9.77226586249962,13.907218427454,0.497236623037079 +7.18290247616099,4.77651246317387,0.292895937768161,13.8957243535589,0.382601049464071,9.06434244907842,3.62573697963137,187.252560236874,115.875355165027,59.2017972088435,3.93976207561091,6.48499316176867,24.3885209857319,10.2093120215936,13.7082515947005,0.470957369437847 +5.53497045587379,2.49683999195698,0.302448962694509,14.0023794891102,0.373360233173681,9.43182444828823,3.77272977931529,201.199047020638,122.192728883623,47.4689507383995,4.15455278204319,6.74790448328333,18.2832467365365,10.623212799651,7.41446743075709,0.245566506128466 +7.13212333202592,4.74103260845525,0.307442642678423,14.054936735668,0.368674504648594,9.62353799757707,3.84941519903083,208.678151574156,125.504908160801,62.4097188705728,4.26716687746725,6.88506402498654,25.6287439840595,10.839142797271,14.3239789862833,0.465622200505186 +5.69657018653438,2.73660490087346,0.316924707895333,14.1490749477971,0.360039593899634,9.9867898585003,3.99471594340012,223.233887083183,131.808600120106,51.729464238817,4.48149240408361,7.14494893636546,20.0515114491839,11.2482791037846,8.53523790494435,0.267994440455052 +6.50193147440236,3.88239647354101,0.32239791769708,14.2002155751928,0.355206597982672,10.1959789793603,4.07839159174413,231.845820252996,135.453942540026,60.2795408637502,4.60543404636088,7.29461120099355,24.1897478081979,11.4838921135953,12.3263171922538,0.379538502348794 +7.41263388855764,5.19112664856163,0.330162710644162,14.2689917414792,0.348532739568545,10.4921157675851,4.19684630703402,244.32573084299,140.631547243974,70.7186954883545,4.78147260629512,7.50647930476105,29.2153717886492,11.8174356540168,16.8917581428071,0.50617799182525 +7.16696829889936,4.86350822307832,0.340544963941286,14.3544554431176,0.339930845268513,10.8868678073294,4.35474712293177,261.490263696711,147.561233638435,70.9474922630505,5.01708194370679,7.78890070407576,29.070754807634,12.2620511093079,16.3361585145046,0.472545183821431 +7.2094684163364,4.94451615189935,0.350271980387442,14.4282685290147,0.332190442802598,11.2554115674708,4.50216462698831,278.064078935726,154.055951575887,73.7841774265725,5.23790235358015,8.05257165183129,30.2468517105805,12.6771477654671,17.0909388474489,0.478765097664555 +5.68878302556488,2.76246573740402,0.360161012691241,14.4975882515111,0.324621572481555,11.6287819105309,4.65151276421238,295.399010174927,160.656881256254,60.1522963909355,5.46233396271264,8.31969573007026,23.1851333490763,13.097680678177,9.82092285210033,0.266529818799025 +5.89121188037656,3.06065351919607,0.365685944166049,14.5339694116652,0.320519376282107,11.8367990658652,4.73471962634609,305.295676722477,164.342519585556,63.4070479647673,5.58764566590889,8.46851952368262,24.6754413875879,13.3319736847114,11.0487618098663,0.294705893010187 +6.28626755207343,3.64158141155067,0.371807251204441,14.5724238162145,0.316076532999988,12.066780553253,4.8267122213012,316.437089494701,168.423226758122,68.9735997007119,5.72638970977613,8.63305747901933,27.3070762559582,13.5910054652429,13.366212601255,0.349858189460316 +7.40658762005926,5.28764597861629,0.379090414027543,14.6157645448772,0.310926007487322,12.3397427665913,4.93589710663653,329.933960584255,173.273738453659,83.1041836508507,5.89130710742441,8.8283455649301,34.1922654892481,13.8984471160555,19.7871720056766,0.506646367515954 +7.26273558931264,5.09625056256649,0.389665705984775,14.6743204655469,0.303699535934052,12.7347947795468,5.0939179118187,349.995328476521,180.305575701047,84.0989939109844,6.1303895738356,9.11098157707893,34.4288113800349,14.3434004359106,19.5989895246071,0.486421419517219 +6.87768770725305,4.54538602272207,0.399858207109908,14.7262091163153,0.297004660217925,13.1141076228891,5.24564304915566,369.847654672612,187.068038436844,82.012454870514,6.36031330685271,9.38235715771981,33.1348922029707,14.7706264805172,17.9320262474063,0.432239475047225 +6.25249711590599,3.63181843408895,0.408948979155352,14.7690143896017,0.291246489967656,13.4512426730981,5.38049706923923,387.980275855902,193.085547178073,76.4741263371155,6.56490860405448,9.62355705804129,30.1428303375099,15.1503470107526,14.6482449952643,0.344238331492962 +5.40785979714781,2.38378677271132,0.41621261602353,14.8010246850072,0.286783960176011,13.7198318571151,5.48793274284606,402.756112549317,197.883293371931,67.4641151905997,6.72803197464567,9.81571650385446,25.4601833560498,15.4528632495928,9.78195687050845,0.225363235948482 +6.51606717278862,4.03555716784701,0.420980189568953,14.8210355232272,0.283919488345541,13.8957494007782,5.5582997603113,412.592893976931,201.027099703529,82.331521688079,6.83492138991999,9.94157495129278,32.7775126734331,15.651001956666,16.7456271206353,0.380883596131786 +6.81072797432145,4.48403889908773,0.429051303904647,14.8532018285054,0.279183129438466,14.192897761008,5.67715910440321,429.49529607399,206.339435424981,87.8948086817728,7.01554080444935,10.1541667741356,35.3625505515939,15.985684846609,18.9548356425842,0.422030062400648 +6.28010110327007,3.6995795894813,0.438019381702822,14.886564190121,0.274081335283369,14.5221048492058,5.80884193968232,448.643114724425,212.227077647555,82.9267833378028,7.21572064001688,10.3896946933158,32.660684002235,16.3564759880528,15.9570699138556,0.347138100326614 +7.42053823875698,5.41879423743201,0.445418540881785,14.9123251050803,0.269994792074025,14.7929714786627,5.91718859146507,464.731191425483,217.072405885199,99.8135365428054,7.38046180009678,10.5834835146944,40.9247956140071,16.6615573496516,23.7560348384023,0.507203425953108 +6.78755133002097,4.47953479755171,0.456256129356649,14.9473804311299,0.264201142335562,15.18852378674,6.07540951469599,488.76757700008,224.148830880891,93.7405093192867,7.62106024995029,10.8664774579852,37.6264858056756,17.1070741598019,20.1015973590173,0.417814286856415 +5.51037714419897,2.55777459723717,0.465215198951752,14.9741270295109,0.259576835021232,15.5144782136282,6.20579128545127,509.060242608168,229.979946228433,77.7350915225599,7.81931817176674,11.0996782931581,29.4080475288175,17.4742017774549,11.6959508430542,0.237894908308447 +6.53341105025317,4.10874991554916,0.470330748146227,14.9885519230022,0.257000885462646,15.700186612128,6.28007464485118,520.818374324197,233.301796888001,93.2703085460434,7.93226109419202,11.2325415097808,37.0527529710353,17.6833680789231,18.9878386973057,0.381546194806504 +7.35868664298159,5.3681610873227,0.478548247977325,15.0105097969767,0.252957771498207,15.9978985594018,6.39915942376073,539.966455001518,238.626246299909,107.043885434628,8.11329237419692,11.4455365453385,43.7425282575464,18.0186857458526,25.2265797462809,0.497262765412957 +6.0316230754951,3.36004670521656,0.48928457015197,15.0370846790265,0.247845158677226,16.3857729014802,6.55430916059209,565.46608582439,245.561052363696,89.866896069447,8.34907578036568,11.723037364635,34.8973914622232,18.4555547416672,16.1315635528532,0.31027316770276 +5.42943672524085,2.44528069453826,0.496004663562403,15.0525816542392,0.24473920600328,16.6279426295475,6.65117705181901,581.704453172888,249.88925809508,82.0903126808989,8.49623477523273,11.8962952748835,30.8488913153913,18.728314330122,11.8952038476299,0.225373137639491 +6.07859555209321,3.43801375532007,0.50089522495148,15.0633416413604,0.242522898148294,16.8038959419706,6.72155837678824,593.656170582682,253.033143584953,92.877784605587,8.60312688188842,12.0221793127234,36.1262392054876,18.9264933241142,16.8833044486598,0.316441432713569 +6.59488898103451,4.23143433893329,0.50777125246212,15.0777678087915,0.23946787277579,17.0508850458357,6.82035401833429,610.651104976192,257.444938832627,102.247578544478,8.75312792030932,12.1988851971927,40.6477827134882,19.2046810516255,21.0543558773463,0.388745784516374 +6.44038096704321,4.00048657237704,0.516234121139987,15.0944563316087,0.235802868428029,17.3542539179589,6.94170156718356,631.87440669065,262.861487108082,101.628641825705,8.9372905616748,12.4159274230645,40.1377119204829,19.5463702023326,20.22462828527,0.366713432880225 +6.08965058184416,3.46675245243097,0.524235094284741,15.1092173499408,0.232431075950571,17.6404567340137,7.05618269360548,652.249909503733,267.969013642916,97.678912458599,9.11094646385916,12.6206883657828,37.9736388144786,19.868724953047,17.7877704505183,0.317143410913272 +5.5636508442556,2.66095981736198,0.531168599189603,15.1212587202954,0.22957990179981,17.8880130512878,7.15520522051512,670.150903536486,272.384759609614,90.4941669921769,9.26108182672687,12.7978000574133,34.2176425540184,20.1475515419768,13.8270770031237,0.24301400891783 +7.01090558635489,4.8909224496964,0.536490518824327,15.1300538464317,0.227434705733596,18.0777464421399,7.23109857685597,684.044654127675,275.767722402038,115.243655517091,9.3761025616693,12.9335429145646,46.4670050204287,20.3612512558839,25.6596553225768,0.446098441967952 +5.95807993135232,3.27355597302444,0.546272363723719,15.1452644130134,0.22358668907325,18.4258637511101,7.37034550044405,709.929456786471,281.971464616411,99.8235009201741,9.58702979695798,13.1825999620942,38.526935580561,20.7533412775661,17.4756902433374,0.29790405965746 +5.71913647020711,2.90682293927807,0.552819475669768,15.1547930544999,0.221077726815051,18.6584305673575,7.463372226943,727.505961879502,286.113611863246,97.0295878934718,9.72786280335035,13.3489875651103,36.9763687625056,21.0152849548132,15.6969397179134,0.264144089779039 +6.68411895887111,4.40092226410899,0.558633121548324,15.1628414276841,0.218893177899297,18.8646625321069,7.54586501284276,743.282372641521,289.785083647431,114.654690770338,9.85269284401266,13.4965341619706,45.6527318821773,21.2475672730046,24.0057549924555,0.399409616717252 +6.84917101948242,4.66138698484383,0.567434966076542,15.1743286140087,0.215661045178526,19.1764116874361,7.67056467497442,767.470250782624,295.332072163432,119.427398303836,10.0412904535567,13.7195719776593,47.8332679363103,21.5986952690069,25.8123039888752,0.422268678428167 +7.48997215015155,5.66086761637489,0.57675774004623,15.1856359803041,0.212333182183145,19.5059983115286,7.80239932461144,793.486833760507,301.192513237355,132.845547010564,10.2405454500701,13.955371432,54.3248150642468,21.9699138877217,31.843049639437,0.511851537088072 +7.10381833493448,5.06839671246445,0.58807947527898,15.1982692936373,0.208418577767519,19.9054464864502,7.96217859458008,825.631125131241,308.289714279991,128.576732949039,10.4818502855197,14.2411526342659,51.9268650146265,22.4198186742123,29.0497550333653,0.457291307048847 +5.43845659824591,2.48118256809504,0.598216268703909,15.2086394213556,0.205026717477764,20.2623750087988,8.1049500035195,854.922367460624,314.626375333314,100.19928721262,10.6972967613327,14.496513576295,37.5027384374959,22.821832904647,14.4574535291694,0.223452003679477 +5.95859577092069,3.29230975306861,0.603178633840099,15.21341426256,0.203403797506841,20.4368711304243,8.17474845216971,869.43769810791,317.722521945667,110.727870238116,10.8025657461527,14.6213550815507,42.6519747052062,23.0183706416358,19.3373592453172,0.296244818253236 +4.7356759676816,1.38680947509147,0.609763253346236,15.2194612834219,0.201287287027848,20.6681828257366,8.26727313029464,888.876970406358,321.825020050617,88.9985414997134,10.942050681721,14.786844720845,31.6348230485737,23.278900656356,8.23127501265384,0.124647379563903 +5.59063918752794,2.72061149549533,0.612536872296419,15.2219136091298,0.200408127849253,20.765541242261,8.30621649690439,897.126330029877,323.551156961245,105.56096114453,11.0007393366823,14.8564988263632,39.8518614907423,23.3885569781255,16.2188860620114,0.244418450605366 +6.36631446572492,3.93254541736741,0.61797809528741,15.2265675935955,0.198704292085372,20.9564088142651,8.38256352570605,913.414822128932,326.934172368727,121.311944809644,11.1157618605367,14.9930531220778,47.6015649135147,23.6035341381723,23.6450433413048,0.352987434037641 +7.38612001543715,5.52886448979596,0.625843186122144,15.2329428632823,0.196289288015978,21.232009855481,8.49280394219241,937.205322945592,331.816693083621,142.595586400059,11.2817675648431,15.1902291310053,58.0617948521054,23.9139479424891,33.652181942224,0.495664967392212 +5.18193144907903,2.08462756429157,0.636900915101736,15.2412470181734,0.192986506205585,21.6189272720202,8.64757090880809,971.14510313428,338.666675132512,101.864866477985,11.5146669545054,15.4670453274941,37.4415770979925,24.3497391379596,12.9052568304116,0.186581129621218 +6.32218351314554,3.87031908744509,0.641070170230319,15.2441902093951,0.191768426494613,21.7646503178376,8.70586012713504,984.09125900016,341.245181139771,125.117312747972,11.6023361587522,15.5713014233937,48.9718375829132,24.5138693053539,24.1117675697844,0.346200707774918 +5.61183338577813,2.7590473842904,0.64881080840521,15.2493981748366,0.189545266425647,22.0349741953983,8.81398967815932,1008.34403514711,346.026490001672,112.438729833003,11.7649006600569,15.7647019383558,42.4545636172954,24.8183393569223,17.389690497614,0.246533762759127 +7.57161989144796,5.8330723566409,0.65432890317379,15.2529166735537,0.187990155917028,22.2275076303486,8.89100305213944,1025.80540658585,349.43036715012,153.030567135017,11.8806324831041,15.9024480590566,62.623743296428,25.0351928047084,37.0677209060573,0.520829585662331 +5.93950412000593,3.27558365937069,0.665995047887072,15.2598579213945,0.184781209296159,22.6341013283293,9.05364053133173,1063.1936325335,356.614625549939,122.239639370745,12.1248972686979,16.1933414543399,46.9607003238537,25.4931457066446,21.175513662546,0.29204095466312 +7.53210296905252,5.77887893408135,0.672546215205814,15.2634780243207,0.183024693216948,22.8621676194293,9.14486704777173,1084.47026544404,360.642048755087,156.578550850343,12.2618296576729,16.3565092016445,63.9801059955126,25.7500203713572,37.7152656886097,0.514819935545742 +6.41625622548012,4.02823792749009,0.684103973073976,15.2694151449183,0.180002528217692,23.264101358431,9.30564054337242,1122.50040213469,367.735785929765,135.727108241786,12.503016721612,16.6440686758759,53.290011422149,26.2027246879171,26.7289005716234,0.358386162608547 +5.52427553963096,2.62586430212311,0.692160448928956,15.273237357374,0.177951902917416,23.543967321616,9.41758692864639,1149.38238488789,372.672211369886,118.264280711273,12.6708551865761,16.8442959805769,44.3745647720598,26.5179421411885,17.6232075453297,0.233415085541558 +6.22179039268345,3.72468424062592,0.697412177533203,15.2755981220999,0.176639168923064,23.726272626598,9.49050905063918,1167.07066759598,375.886551540165,134.228120335686,12.7801427523656,16.9747244879732,52.2366265476738,26.7232754846945,25.1824425033701,0.330908559609169 +6.37132286911498,3.96151643343558,0.704861546014454,15.2787793456806,0.174808745294554,23.9846973565391,9.59387894261563,1192.38408882768,380.441343792199,138.951254712618,12.9350056889348,17.1596118767623,54.4283185734606,27.0143433384177,27.0622897867807,0.351685448262156 +6.87780808885136,4.76148782572525,0.712784578881326,15.2819589573353,0.172901614521543,24.2593460691752,9.7037384276701,1219.59460992539,385.280012028103,151.714733913382,13.0995204089555,17.3561065517307,60.6295534763478,27.3236845200184,32.88348791259,0.422381043739328 +5.44125529061371,2.49682575096735,0.722307554532776,15.2855205597451,0.170661827252321,24.5891862465546,9.83567449862182,1252.69234868709,391.088290430448,121.658336871062,13.2970018746352,17.592087408235,45.3846237940959,27.6951887198035,17.4681400318898,0.221295042402561 +6.16230460270366,3.63522754428419,0.727301206034711,15.2872813820759,0.16950958729597,24.7620349894143,9.90481399576573,1270.21943066246,394.130892687583,138.748440635149,13.4004503513778,17.7157503128266,53.8161199854723,27.8898709880772,25.6041977407638,0.322051256631316 +6.26601053832213,3.79989777828915,0.734571661123279,15.2897211626399,0.167858643955803,25.0135596967836,10.0054238787134,1295.94861500313,398.557026593786,142.516529508522,13.5509389041887,17.8957011494669,55.5349447274332,28.1731672374299,27.0253445852755,0.336432904727765 +6.52210848807147,4.20552573690953,0.742171456679858,15.2921226380485,0.166165875218883,25.2763165577554,10.1105266231022,1323.11058768964,403.17912141265,149.899581576864,13.7080901280301,18.0836879180805,59.0539017653767,28.4691144387351,30.2126699162645,0.372117410377132 +4.59312498536532,1.15698891165422,0.750582508153677,15.2946139021842,0.164330582129995,25.5669382869945,10.2267753147978,1353.49069250473,408.289432966216,106.77893937783,13.8818407208513,18.2916103280474,37.3027441644655,28.7964462811412,8.40399040699216,0.102307476332168 +6.26097339518806,3.79414222615425,0.752896485976985,15.2952700676471,0.163832551294727,25.6468590873164,10.2587436349266,1361.90736039773,409.694416686921,146.007330349787,13.9296101673553,18.3487888654297,56.8644656585008,28.8864623404512,27.6425618120644,0.33544150598521 diff --git a/pyrealm_build_data/t_model/rtmodel_output_alt_two.csv b/pyrealm_build_data/t_model/rtmodel_output_alt_two.csv new file mode 100644 index 00000000..c0c3572f --- /dev/null +++ b/pyrealm_build_data/t_model/rtmodel_output_alt_two.csv @@ -0,0 +1,101 @@ +"P0","dD","D","H","fc","Ac","Wf","Ws","Wss","GPP","Rm1","Rm2","NPP","turnover","dWs","dWfr" +6.35655068662902,16.835303518986,0.6,33.5798055081921,0.5486896324868,63.0047820994125,3.00022771901964,474.723316320797,378.031173825666,132.034543775879,20.413683386586,9.09159005694522,71.7704892326437,4.87537004340692,65.8663093682354,1.02880982100131 +7.13108220488591,19.7257772815307,0.633670607037972,34.4371636650361,0.53279929330503,68.2393724823584,3.24949392773135,543.018199996085,424.490087682034,160.429048692085,22.9224647348299,9.84694144920431,89.3617497556353,5.28042763256345,82.8630719450124,1.21825017805949 +5.68973531883509,14.4078013668277,0.673122161601033,35.3624697907967,0.51504897636607,74.4355781444888,3.54455134021375,629.202230939793,481.228026215354,139.625638029282,25.9863134156291,10.7410539262497,72.028789481182,5.75989592784735,65.3703381708136,0.898555382521024 +6.34338332379691,16.8735034760227,0.701937764334689,35.9882560124074,0.502645757593257,78.9957081325044,3.76170038726212,696.334484557976,524.088321303909,165.202643927455,28.3007693504111,11.3990806835204,87.8519557254665,6.11276312930094,80.6809456917827,1.05824690438292 +6.82157260138089,18.7175214261303,0.735684771286734,36.671369163506,0.488691952212603,84.3651296826657,4.01738712774598,779.418200998115,575.650286764188,189.73175545329,31.0851154852662,12.1738882132087,102.530926228371,6.52825408258723,94.8227217275054,1.17995041827822 +6.49513893518327,17.5159193351451,0.773119814138995,37.3708551125743,0.473899291902444,90.3491198943974,4.30233904259035,877.175572195236,634.389202391507,193.46611586452,34.2570169291414,13.0373780007615,102.320204654232,6.99130094420933,94.2201128636027,1.10879084642025 +5.7168514614097,14.5444931490249,0.808151652809285,37.9741630954396,0.460675561731252,95.9677171151123,4.56989129119582,973.943644575127,690.651829104107,180.873362790928,37.2951987716218,13.8481415797107,90.8110157077167,7.42607334819321,82.4618466576922,0.923095701831287 +5.92255487489471,15.3534846411711,0.837240639107335,38.4402203547041,0.450127344320133,100.642231168364,4.79248719849352,1058.14785363293,738.206334780354,196.508748788989,39.8631420781391,14.5226739575949,99.4860529272782,7.78779169755197,90.7225021210206,0.975759108705611 +5.27038873009927,12.8155185553124,0.867947608389677,38.9002005936207,0.439398083406561,105.581891651649,5.02770912626899,1150.79707174324,789.13088719111,183.452919862248,42.6130679083199,15.2354669653329,87.9230694920164,8.17002733018711,78.9379814089491,0.81506075288018 +5.51071504973643,13.7607315849322,0.893578645500302,39.2605422578485,0.430748070106606,109.706702726415,5.22412870125785,1231.06714962407,832.142597763695,199.312096872264,44.9357002792395,15.8306772034217,96.9820035727222,8.489209139544,87.6175057369409,0.875288696237326 +7.54939356974498,21.8379826335328,0.921100108670166,39.6250089109782,0.421757066211035,114.13538117188,5.4350181510419,1320.20971930144,878.777941100713,284.06969259199,47.4540088194385,16.4697355031023,154.102163788614,8.83190449544308,143.881601824553,1.38865746861797 +3.54221042306307,5.9116133834398,0.964776073937232,40.1590145834713,0.408090374425407,121.158436226282,5.76944934410868,1467.89835067594,953.60988111201,141.488309228851,51.4949335800485,17.4831623474525,50.7571493109447,9.3753551841766,41.0063519626561,0.375442164111961 +7.29415483194559,20.916852879811,0.976599300704111,40.2947707483121,0.404512650948504,123.057810977306,5.85989576082411,1509.18122217015,974.017738882873,295.921625566882,52.5969578996751,17.7572421240253,157.897197880227,9.52233061133918,147.047099808253,1.32776746063497 +7.17736583844178,20.5112043555143,1.01843300646373,40.7471260686322,0.392251258147014,129.769770340942,6.1795128733782,1659.67021697482,1046.65685999763,307.065595932367,56.5194704398719,18.725777860198,162.274243342608,10.0417084192396,150.933313610098,1.29922131327072 +5.76446240966604,14.8272686734008,1.05945541517476,41.1512210344006,0.380802568655488,136.335670487032,6.49217478509676,1813.87761827228,1118.42703749844,259.096084943575,60.3950600249158,19.6732372512787,125.319451367166,10.5497840257822,113.832974304093,0.936693037291075 +6.36927494971677,17.3106971417459,1.08910995252156,41.4209613472776,0.372862129673559,141.070429358923,6.71763949328203,1929.40550568451,1170.56663822599,296.22282951795,63.2105984642033,20.3564629564925,148.859037668078,10.9161641765833,136.851699398189,1.09117409330488 +6.95286247425414,19.737288045205,1.12373134680506,41.7139306914477,0.363930494580269,146.584381245028,6.98020863071561,2068.5498552177,1231.64682064661,336.003559558579,66.5089283149171,21.1521262136575,173.839753521003,11.3428390249129,161.256276721843,1.24063777424695 +6.71087914115067,18.7837853425537,1.16320592289547,42.0212737978631,0.354170542308262,152.851570429624,7.27864621093446,2232.76136472673,1301.48622622309,338.175284062209,70.2802562160468,22.0564816129947,172.086982363217,11.8278000927685,159.082563114587,1.17661915586128 +5.26790583513827,12.8217774398287,1.20077349358057,42.2894755031074,0.345279691155205,158.795239440075,7.56167806857502,2394.49739873623,1368.07529779283,275.783337197164,73.8760660808128,22.9141530512029,125.295182645604,12.2877268614344,112.207098935612,0.800356848557437 +6.566805124161,18.2452312612906,1.22641704846023,42.45995476458,0.339422928637567,162.840262311779,7.75429820532283,2507.93208106471,1413.56565374962,352.540050645842,76.3325453024793,23.4978498515898,176.896758844241,12.6007345836496,163.159934682234,1.13608957835805 +8.11858373412842,24.7856194736716,1.26290751098281,42.6861975232612,0.331371956332191,168.578856245147,8.02756458310224,2673.56315645358,1478.31075911811,451.2070929712,79.8287809923777,24.3259289561747,242.936668115853,13.0447924475411,228.35407629729,1.5377993710223 +6.32417644520231,17.2937672380548,1.31247874993015,42.9652442879322,0.320940727762809,176.34114366281,8.39719731727666,2906.442478476,1566.2193770555,367.663207992101,84.5758463609971,25.4460270305435,180.348934220393,13.6454456405746,165.635860843253,1.06762773656446 +6.89856807347317,19.7522663348444,1.34706628440626,43.1423081277759,0.313988858655682,181.734102172055,8.65400486533596,3074.26424945922,1627.48079736818,413.32143144565,87.8839630578819,26.2242309434276,209.449266211039,14.0627579061709,194.171392334029,1.21511597083878 +6.03159946079517,16.0961124951909,1.38657081707595,43.3283830803526,0.306358726279144,187.870514608345,8.94621498134978,3271.27066389088,1697.33733062078,373.580035953626,91.6562158535224,27.1097152579842,178.369873389484,14.5375993446934,162.846055704211,0.986218340578911 +6.27778355366965,17.16394965416,1.41876304206634,43.4682489283618,0.300373840157663,192.852866922323,9.18346985344396,3435.98900015818,1754.15222481637,399.139747487371,94.7242201400838,27.8286686968912,193.610801055277,14.9231385118464,177.639446545627,1.04821599780381 +5.21642398919964,12.6295350892241,1.45309094137466,43.6066431804808,0.294211530358945,198.147929509786,9.43561569094218,3615.74781654769,1814.60873076404,340.764985119025,97.9888714612581,28.5927462282621,149.928357200653,15.332875497781,133.826844371798,0.768637331074376 +6.55619745125751,18.3952474726764,1.4783500115531,43.7018621458236,0.28981609600727,202.032528356817,9.62059658841985,3750.71760123868,1859.00125544414,436.682576845345,100.386067793984,29.1532938418887,215.000250646631,15.6334694561822,198.250050522648,1.11673066780092 +5.95993711759831,15.8446647777074,1.51514050649846,43.831218806325,0.283615829417466,207.673242246988,9.88920201176133,3951.38412628242,1923.50897853032,408.051296175994,103.869484840637,29.9672488562403,191.950193735382,16.0699532691122,174.921813282923,0.958427183346458 +7.88728680824511,24.2027307591939,1.54682983605387,43.9343698891377,0.278459276205203,212.51570473929,10.1197954637757,4128.09200944503,1978.92055295692,552.600411492272,106.861709859674,30.6660161938795,290.550879807103,16.4446676286355,272.646671641155,1.4595405373132 +8.22107522410296,25.7072772267459,1.59523529757226,44.0783962757447,0.270894921028856,219.884503251135,10.4706906310064,4404.89105922953,2063.27644923343,595.958180736472,111.416928258605,31.7293338191387,316.96834306111,17.0148722753854,298.410219153645,1.54325163207887 +6.71112521928238,19.1710920243701,1.64664985202575,44.2151337370525,0.263250686095259,227.675495035516,10.8416902397865,4707.9663229381,2152.48431418609,503.737372517346,116.234152966049,32.8535739336249,248.254751932371,17.617746639653,229.491465821617,1.14553947110074 +6.89023800746259,19.9768655220641,1.68499203607449,44.307287719967,0.257796573767286,233.462485651133,11.1172612214825,4940.0433077071,2218.74177696372,530.327160420632,119.812055956041,33.6886366794585,263.778527449593,18.0655494849091,244.52326743596,1.18971052872406 +7.76112979407141,23.8257082048812,1.72494576711862,44.3952202221123,0.252325183421029,239.472554550054,11.403454978574,5187.36719071263,2287.53747083644,612.735770347909,123.527023425168,34.5558896215728,318.257000110818,18.5306143401828,298.312213249772,1.41417252086328 +6.25057765826422,17.2060348063112,1.77259718352838,44.4902641325584,0.246067783575567,246.614794291817,11.7435616329437,5489.65408713765,2369.2590183527,508.196678582562,127.939986991046,35.5865148163092,241.269123742645,19.0832876535335,221.16848274385,1.0173533452615 +6.33509757957589,17.5901874825674,1.807009253141,44.5528335501106,0.2417212225262,251.755979211332,11.9883799624444,5712.8914070696,2428.05480451117,525.80612819557,131.114959443603,36.3283878001953,250.85394666624,19.4811174389722,230.33551895005,1.03731027721754 +6.91488450802403,20.1676572445543,1.84218962810614,44.611983259479,0.23741984984819,256.998122430973,12.2380058300463,5945.38635251638,2487.97483178667,585.878312920607,134.35064091648,37.0848290667893,290.109990056137,19.8867594738253,269.037028203938,1.18620237837325 +6.73931160907614,19.4063394208941,1.88252494259525,44.6742813871782,0.232657289656351,262.99191750131,12.5234246429195,6217.25870783403,2556.44454689767,584.319634666906,138.048005532474,37.9497336954391,285.825326807295,20.3505650447443,264.336610146147,1.13815161640412 +6.41850196835536,17.9941058688319,1.92133762143704,44.7291190646737,0.228237229236096,268.743592668877,12.7973139366132,6484.21794810845,2622.10248553891,568.675264496823,141.593534219101,38.779700422119,271.811420898922,20.7956351469964,249.96323890132,1.05254685060572 +5.9747730511708,16.0271629327293,1.9573258331747,44.7758599940221,0.224274881631349,274.063469333169,13.0506413968176,6736.4342881956,2682.78859787909,539.8400553594,144.870584285471,39.5473586247763,248.795478714407,21.2072922698286,226.652882028925,0.935304415653804 +6.29052913054772,17.440380296325,1.98938015904016,44.81442136322,0.220851238609122,278.791586051485,13.2757898119755,6964.87366780908,2736.68836173961,578.175096180058,147.781171533939,40.2296258672293,273.115009145223,21.5731584444602,250.526102621197,1.01574807956627 +4.17096572859796,7.97717281003217,2.02426091963281,44.8533405216791,0.217234165961791,283.926135389712,13.5202921614148,7217.51442345122,2795.18201798864,390.422226158856,150.939828971386,40.9705413367354,138.958299095514,21.9704747622991,116.524189610447,0.463634722767683 +6.15546298136901,16.8462038310592,2.04021526525287,44.870149040139,0.215616180044425,286.271156105999,13.6319598145714,7334.48092119112,2821.88302721456,580.939433132436,152.381683469586,41.3089278260956,271.074175285728,22.1519346986785,247.944036579181,0.978204007868186 +5.53160467339546,14.0578181245679,2.07390767291499,44.9037231810738,0.212272024428086,291.216419156258,13.8674485312504,7584.39729009076,2878.1622487121,531.079494435307,155.420761430453,42.022529284248,233.545342604424,22.5346038632819,210.195980356762,0.81475838438002 +6.17813954317543,16.9563256202662,2.10202330916413,44.9298561483692,0.209554662808895,295.336172908816,14.0636272813722,7795.96658479674,2925.01679558825,601.543304178555,157.950906961766,42.6170097507421,280.682771226233,22.8533943322298,256.84810536124,0.981271532763193 +6.51403900947682,18.4679409616795,2.13593596040466,44.9592547996009,0.20636246404865,300.297294056826,14.2998711455631,8054.81267817332,2981.40402741659,644.90287751107,160.995817480496,43.3328995323999,308.401912348722,23.2372906115401,284.097729376452,1.06689236072995 +6.86291678564618,20.0416701610014,2.17287184232802,44.9888223907982,0.202987989255609,305.69112101664,14.5567200484114,8341.28067926819,3042.66442419336,691.646364411991,164.303878906441,44.1112287627012,338.261879719994,23.6546700786686,313.45148829777,1.15572134355548 +7.20938440964792,21.6085180966257,2.21295518265002,45.0182476750904,0.199441621242011,311.533885607013,14.8349469336673,8657.52409706048,3108.9712915556,740.450474524136,167.884449744002,44.954339693092,369.328179560929,24.1067887672093,343.977621249849,1.24376954387103 +3.97341754215652,7.03601011376401,2.25617221884327,45.047136751416,0.19574684588065,317.821685360371,15.1343659695415,9004.74818030553,3180.26872423213,416.332459384523,171.734511108535,45.8616691975015,139.115395354941,24.5933447005049,114.117823915111,0.404226739324899 +7.13383296888305,21.2801954245244,2.2702442390708,45.0559531200315,0.194571589693512,319.86656803368,15.2317413349371,9119.21030750524,3203.44248475708,752.288335723568,172.985894176882,46.15674576726,373.201987045598,24.7515796692728,347.228553178835,1.22185419748985 +6.92558427196119,20.3477154671804,2.31280462991985,45.0809804853805,0.191097160217468,326.044131954048,15.5259110454309,9469.58910544113,3273.41153767995,744.432538328134,176.764223034717,47.0481682409691,364.434102936714,25.2296054488251,338.038170027688,1.16632746020092 +5.98116495848585,16.0856209308686,2.35350006085421,45.1027706607433,0.18788358387602,331.941477216838,15.8067370103256,9810.50887134914,3340.15380441796,654.545503139953,180.36830543857,47.8991551623898,298.394629777295,25.6859476417792,271.788064812345,0.920617323171306 +6.76020282743031,19.6086783694707,2.38567130271595,45.1186386568537,0.185415146743585,336.597341080319,16.0284448133485,10084.0986596268,3392.81029004832,750.175624001763,183.211755662609,48.57099631789,362.875010414885,26.0462228216913,335.70781873478,1.12096885841351 +6.98394235850872,20.6244892697195,2.42488865945489,45.1364910713637,0.182488633703364,342.265940129128,16.2983781013871,10422.4851358161,3456.87948730217,788.055620023974,186.671492314317,49.3889751606332,386.396606784316,26.484864414754,358.73425522049,1.17748714907222 +6.39636687443202,17.9661078570463,2.46613763799433,45.153643656391,0.179504490797617,348.220391796921,16.581923418901,10784.1845121894,3524.13259158699,734.311122041638,190.303159945698,50.2482025362957,345.631831691751,26.9456255557141,317.661824371769,1.02438176426843 +5.84200665420692,15.4533805220618,2.50206985370842,45.1673414534366,0.176980299897139,353.401221445891,16.8286295926615,11104.0977210229,3582.61024585722,680.648096630438,193.46095327629,50.995796254642,305.333942969654,27.3465230880749,277.107246431186,0.880173450393775 +6.2836225399326,17.4554820025052,2.53297661475254,45.178269204059,0.174863125582469,357.853159774589,17.0406266559328,11382.8715518668,3632.83364916657,741.323019591853,196.173017054995,51.6382109554732,345.458254106969,27.6910183158908,316.773893180662,0.993342610416491 +6.00254251622773,16.1791962737994,2.56788757875755,45.1897323439739,0.172529590186322,362.877351133635,17.2798738635064,11701.7729666142,3689.48383779641,718.104500330102,199.232127241006,52.3632017685835,326.556419924359,28.0797950281979,297.556769066329,0.919855829832415 +5.48632635655899,13.8332850570005,2.60024597130515,45.1995825200622,0.170419709078126,367.530125444867,17.5014345449936,12001.1585563592,3741.91972483299,664.763432944698,202.063665140982,53.0345971016942,286.765619491415,28.4398311356147,257.539949859031,0.785838496769284 +5.98282483199965,16.0870617142201,2.62791254141915,45.2074540172635,0.16865490251941,371.505325637876,17.6907297922798,12260.0361289365,3786.70009122841,732.763574124157,204.481804926334,53.6082184895455,332.271485495794,28.7474359124547,302.610786523461,0.913263059878558 +5.67376778856309,14.6803433141496,2.66008666484759,45.216012450468,0.166646540343402,376.124941256098,17.9107114883856,12564.456802952,3838.7181130582,703.552047310903,207.290778105143,54.274829023255,309.390508127754,29.1049061686267,279.452811578228,0.83279038089901 +7.23983492388136,21.8010048553562,2.68944735147589,45.2232998221572,0.164853825559235,380.337705844235,18.1113193259159,12845.4176150175,3886.13533211973,907.800854792479,209.851307934465,54.8827309533231,450.146771133284,29.4308939046134,419.47993311435,1.23594411432029 +7.19416734632511,21.5939865396093,2.73304936118661,45.2332712094154,0.16225958064549,386.58905930592,18.4090028240914,13268.2251700154,3956.46519606721,916.901400001209,213.649120587629,55.7848012578442,453.227234709015,29.9146295891486,422.089488417331,1.22311670253499 +7.71327345412673,23.9579940520286,2.77623733426582,45.2422290128025,0.159767055704081,392.775754113549,18.7036073387404,13693.581783903,4026.0307999566,998.794035973248,217.405663197656,56.6775413185852,507.297582019904,30.3933619254532,475.548315776747,1.35590431770482 +6.80656009478807,19.827899339243,2.82415332236988,45.2512000704367,0.157087511100336,399.634026818359,19.0301917532552,14173.1547308991,4103.10754590426,896.773328632942,221.56780747883,57.6671900698892,432.276831758956,30.9240615990397,400.23155416945,1.12121599046593 +6.11124360426312,16.6571270208839,2.86380912104837,45.2579269639261,0.154935314316819,405.305794116742,19.300275910321,14576.1449646088,4166.81954852107,816.591676673849,225.008255620138,58.4856260910458,373.168456473866,31.3629483542717,340.864200217104,0.941307902489831 +3.79517182518576,6.09387324258163,2.89712337509014,45.2631322083338,0.153171315359365,410.067812162191,19.52703867439,14918.9572646865,4220.29221854287,513.073595811533,227.895779801315,59.1727852950041,158.20352150065,31.7314378458838,126.127889560651,0.344194094114684 +6.75580856504265,19.593196066452,2.9093111215753,45.2649411031417,0.152535742599936,411.809360416058,19.6099695436218,15045.3459971411,4239.84368489309,917.204315665611,228.951558984227,59.4240907080371,440.180066181343,31.8662005083854,407.207401499563,1.10646417339446 +7.12178801931342,21.2608631993522,2.9484975137082,45.2704320844559,0.150526755905484,417.406773816314,19.8765130388721,15455.2508063923,4302.66775625397,980.033849843101,232.344058837714,60.2317974616941,481.220595480585,32.2993336881672,447.721283627338,1.19997816508017 +6.07003962232015,16.4591993293844,2.99101924010691,45.2758674223354,0.148404613119201,423.477239449775,20.1655828309417,15906.1501817255,4370.77620250144,847.45010956666,236.021914935078,61.1077656526025,385.224300285286,32.7690721002802,351.526776981725,0.928451203281309 +5.54665398447338,14.067105193669,3.02393763876568,45.2797322189483,0.146801619726597,428.174468784217,20.389260418296,16259.582758266,4423.46052692835,782.968666968331,238.866868454131,61.7855758455625,337.621355868047,33.1325481797311,303.695613045291,0.793194643024647 +5.86597948901178,15.5221706635119,3.05207184915301,45.2828158652527,0.145458297540648,432.18756336936,20.5803601604457,16564.6711024812,4468.46047772982,835.805734311123,241.29686579741,62.3646653941986,372.50094218366,33.4430852607243,338.182902323171,0.874954599764613 +6.7499940313267,19.5565900892202,3.08311619048004,45.2859994205356,0.144003780281376,436.614279928182,20.7911561870563,16904.5504598418,4518.08717743242,971.614226873017,243.97670758135,63.0034405936366,465.243855088621,33.7856288039664,430.356236524133,1.10198976052177 +4.95578199961377,11.3572336135693,3.12222937065848,45.2897064391146,0.142211438393329,442.189471225733,21.0566414869396,17337.6008759241,4580.5730615585,722.458878072075,247.350945324159,63.8079406978732,287.90999443503,34.2170424162769,253.053245078117,0.639706940636047 +5.40021742033823,13.385024112179,3.14494383788562,45.2917141503446,0.141190570047573,445.426179880509,21.2107704705004,17591.5631591783,4616.8417710472,793.011573138408,249.309455636549,64.2749977567575,335.598983821571,34.4675020145632,300.377725406286,0.753756400722016 +6.58267371063366,18.7856729442145,3.17171388610997,45.2939522903354,0.140005804978906,449.239886657007,21.3923755550956,17893.2039106494,4659.56895356473,974.929425243584,251.616723492495,64.8253156446061,460.941170274538,34.7626102770303,425.120939985495,1.05762001201283 +7.09688481611084,21.1330741785539,3.2092852319984,45.2968745594126,0.138375673516531,454.590799663377,21.6471809363513,18320.8136851332,4719.50609477267,1063.60639375948,254.853329117724,65.5974523914252,520.208928575234,35.1766690215708,483.842877793987,1.18938175967629 +6.00549081825657,16.1402872667318,3.25155138035551,45.299879808582,0.136586022104633,460.608298241624,21.9337284876964,18807.8077773782,4786.8936987993,911.95373435524,258.492259735162,66.4657774362663,410.896988028668,35.6423087925066,374.346610274293,0.908068961868347 +6.63004332644053,18.9930692401189,3.28383195488897,45.3019900690392,0.135249660652814,465.202770302401,22.1525128715429,19183.9933649456,4838.33454848362,1016.83666985043,261.270065618115,67.1287597546364,481.906491134372,35.9978334162572,444.840353488577,1.06830422953752 +7.03790275965857,20.8552715515222,3.32181809336921,45.3042847544534,0.13370980648881,470.607898295183,22.4098999188182,19631.3812182136,4898.84040228464,1091.93054450784,264.53738172337,67.9087197239948,531.63911014233,36.4160873680796,494.050296398511,1.17272637573945 +6.57187958564459,18.7201939408957,3.36352863647226,45.3065884754135,0.132058408880057,476.541336259031,22.6924445837634,20128.5043778859,4965.24701319008,1032.48254092468,268.123338712264,68.7649148221782,486.916001173167,36.8752224486155,448.988405561593,1.05237316295895 +6.93192037451195,20.3641803183908,3.40096902435405,45.3084800300816,0.130610064786759,481.865969670376,22.9459985557322,20579.9697315333,5024.82888213394,1101.21562000948,271.340759635233,69.5332594234352,532.239120665571,37.2872476530648,493.807348709585,1.14452430292195 +6.52173301086289,18.4837635132064,3.44169738499083,45.3103645660747,0.129069819557333,487.656846023613,23.221754572553,21076.7093170367,5089.6168501749,1048.50349363573,274.839309909445,70.3688828812073,492.306710591551,37.7353511803986,453.532765137113,1.03859427404007 +6.19871053404299,17.0020106898569,3.47866491201724,45.3119318135848,0.127702620648729,492.911853214509,23.4719930102147,21532.6587198931,5148.40017366273,1007.31003158377,278.013609377787,71.1271804188536,460.718469250994,38.1419886415989,421.621335888138,0.95514472125739 +5.87875751164983,15.5341971118263,3.51266893339696,45.313262728466,0.126470123496346,497.744696231241,23.7021283919639,21956.3254436974,5202.45371484505,964.683229486764,280.932500601632,71.8245596661681,428.348318453275,38.5159586369413,388.959824301031,0.87253551530208 +8.17929699338317,26.0623755622101,3.54373732762061,45.3143928517009,0.125364470437864,502.159607008619,23.9123622385056,22346.9932366706,5251.82700351647,1354.09861695217,283.59865818989,72.4616312913437,698.626829229653,38.8575886375717,658.305567262923,1.46367332915894 +6.55839019372951,18.6374499195066,3.59586207874503,45.3161201281912,0.123551926576211,509.565283829833,24.2650135157063,23010.1079777408,5334.63523678276,1101.76665618125,288.070302786269,73.5302704566448,518.116258056832,39.4306469630228,477.639164508722,1.04644658508762 +7.24811997637199,21.7923233454413,3.63313697858404,45.3172368127978,0.122287334069287,514.860151912496,24.5171500910712,23490.2073998688,5393.83260601876,1230.2891525949,291.266960725013,74.2943199209732,605.309510364241,39.8403688979908,564.24574101589,1.22340045036009 +8.03699004194803,25.4013998703621,3.67672162527492,45.3184291111587,0.120840893029529,521.050340388634,24.8119209708873,24057.8178303337,5463.03158153594,1380.59296179942,295.003705402941,75.1875641180799,707.281184594878,40.3193715776919,665.5360353748,1.42577764238673 +7.11338809285134,21.1673409346634,3.72752442501565,45.3196790309455,0.119197227992113,528.264480335371,25.1554514445415,24727.926824395,5543.66679390356,1238.85493414199,299.358006870792,76.2285645123941,604.28785393116,40.8776085973799,562.22233190051,1.18791343327027 +4.85641341910418,10.8253008736848,3.76985910688498,45.3206168303881,0.117861108399375,534.275203776522,25.4416763703106,25293.3257090335,5610.84312643952,855.407807754916,302.985528827734,77.0959119049521,332.728456915561,41.3427241017546,290.778296508048,0.607436305758698 +8.72776629424277,28.5571272388092,3.79150970863235,45.3210629980414,0.117189241538273,537.348878899509,25.5880418523576,25584.9350080715,5645.19219982634,1546.15132341851,304.840378790622,77.5394432251991,814.640050981885,41.580568010081,771.457169390548,1.60231358125677 +7.08212721842806,21.0137481632612,3.84862396310996,45.3221408091233,0.115452878242716,545.456325476452,25.9741107369739,26362.1763365477,5735.78714379241,1273.55072442599,309.73250576479,78.709347766252,619.576209626466,42.2079299475826,576.189402607949,1.17887707093413 +7.44958519491443,22.693764202764,3.89065145943649,45.3228499822522,0.114207523116714,551.421410794345,26.2581624187783,26941.4986580933,5802.43604046759,1354.27935218712,313.33154618525,79.5701095776239,672.964387496975,42.6695139305148,629.021880534232,1.27299303222823 +6.70427322967278,19.2748610851536,3.93603898784201,45.3235441584314,0.112892294388858,557.86272219105,26.5648915329072,27574.1752794224,5874.40005824038,1233.0241649991,317.217603144981,80.4995908121685,584.714879729363,43.1679487409741,540.465831799904,1.08109918848486 +4.45253939481135,8.95290783235091,3.97458871001232,45.3240805582976,0.111798669845848,563.333118763592,26.8253866077901,28117.2781799724,5935.51235495549,826.923998621286,320.517667167596,81.2889690375863,297.582153691272,43.5912532376589,253.488785703707,0.502114749905634 +6.00821693030311,16.0801242511131,3.99249452567702,45.3243143179729,0.111297841454115,565.873894554828,26.9463759311823,28371.3359937748,5963.89522745312,1120.87660520206,322.050342282469,81.6556029842617,502.01946195473,43.7878608881713,457.329795967968,0.901805098590442 +6.16295446882276,16.7862927535604,4.02465477417925,45.324711232619,0.110409448506277,570.43710410723,27.1636716241538,28830.5016091602,6014.86864952416,1159.01556021033,324.802907074304,82.3140741226733,526.329005309348,44.1409663892499,481.246688302997,0.94135061710152 +6.96034105030208,20.4377488087948,4.05822735968637,45.3250960483594,0.109496991509851,575.200420224076,27.3904962011465,29313.7491912436,6068.07482476288,1319.90372856316,327.676040537195,83.0014206383341,636.458387171345,44.509556326863,590.802780892225,1.14604995225686 +5.09456892523212,11.8827887757836,4.09910285730396,45.3255269759339,0.108406138366831,580.99950886989,27.6666432795186,29907.5184900864,6132.84728283027,975.833556626277,331.173753272834,83.8382291299251,392.575101956462,44.9582953292176,346.950522815231,0.666283812013103 +5.96027384301668,15.8484812556505,4.12286843485553,45.3257598941941,0.107781803388225,584.371002276896,27.8271905846141,30255.4719630029,6170.50335019394,1148.2789719047,333.207180910473,84.3247356285561,511.522938755967,45.2191846999979,465.415141656656,0.888612399312921 diff --git a/pyrealm_build_data/t_model/rtmodel_output_default.csv b/pyrealm_build_data/t_model/rtmodel_output_default.csv new file mode 100644 index 00000000..cd1a9ee3 --- /dev/null +++ b/pyrealm_build_data/t_model/rtmodel_output_default.csv @@ -0,0 +1,101 @@ +"P0","dD","D","H","fc","Ac","Wf","Ws","Wss","GPP","Rm1","Rm2","NPP","turnover","dWs","dWfr" +4.51106303704964,5.72082393359394,0.1,9.30685130731739,0.802314767872188,2.46024211324268,0.316316843131202,7.30958392378022,7.02392939699003,6.58607225315533,0.309052893467561,0.687337521113514,3.35380910314455,0.802958140256128,2.33207397726619,0.21877698562223 +5.97110627505664,8.6929386396106,0.111441647867188,10.1248091609468,0.78321560444251,2.98269910764054,0.383489885268069,9.87578844430614,9.41167108368952,10.5690022872038,0.414113527682339,0.833300511294398,5.59295294893623,0.973474324142022,4.2622737554349,0.357204869359314 +5.25390354483296,7.35980997202353,0.128827525146409,11.2884979167956,0.755386995932424,3.84432321182986,0.494270127235268,14.714427387286,13.8339819471833,11.9859299715181,0.608695205676066,1.0740193302746,6.18192926134046,1.25468570759722,4.59627922625282,0.330964327490419 +7.63967042579342,12.3929814949625,0.143547145090456,12.203827416069,0.732897952745216,4.63090305851931,0.595401821809626,19.7503618922646,18.3413018765605,20.9947186968882,0.807017282568661,1.29377243468301,11.3363573877819,1.51140462459367,9.23177046186931,0.593182301318965 +7.71699608166882,12.7874695919036,0.168333108080381,13.6123109007824,0.697114840351732,6.05726361568862,0.778791036302823,30.294293282628,27.5151123895342,27.7392363688944,1.2106649451395,1.69226619442386,14.9017831375987,1.97693109215332,12.2595328430996,0.665319202345687 +6.01901695548704,9.29027847129306,0.193908047264188,14.9073859055712,0.662746849730949,7.641390601414,0.982464505896085,44.0233453035783,39.0161437719263,27.2940330622924,1.71671032596476,2.13483642344184,14.0654917877315,2.49394836112083,11.0557901290904,0.515753297520265 +5.57841317193794,8.39526198552196,0.212488604206775,15.7575681097,0.639286539158482,8.85115425595513,1.13800554719423,55.8792234106354,48.608542913433,29.3008577450493,2.13877588819105,2.47281777372023,14.8135584498828,2.88878331210843,11.4411615218979,0.483613615876442 +8.01927620601824,13.9399372941946,0.229279128177818,16.466034426473,0.61910813151697,9.97995570326781,1.28313716184872,67.9841925508349,58.1211400212724,47.4934296366508,2.55733016093599,2.78818006446755,25.2887516467484,3.25719433392367,21.2060999245331,0.825457388291601 +7.68167675640505,13.3667115340709,0.257159002766208,17.5284926258235,0.587604141502991,11.9157498143985,1.53202497613695,91.0411882744544,75.5577820568457,54.318422770399,3.32454241050121,3.32899835164703,28.5989292049505,3.88898647788611,23.8894701117357,0.820472615328629 +6.75770324410776,11.3740809984188,0.28389242583435,18.4274568090356,0.559568948759071,13.829111578154,1.77802863147695,116.644131812233,94.0175601742685,55.457864681776,4.13677264766782,3.86354953448152,28.474525499776,4.51345729528764,23.2449971797851,0.7160710247033 +5.88395141813509,9.40520998148822,0.306640587831187,19.1103503539067,0.537255686756445,15.4907826638096,1.99167205677552,141.129501685707,110.909116971031,54.0894027143435,4.88000114672537,4.32778387904981,26.928970613141,5.05578291335325,21.2714967954537,0.601690904334045 +7.15238142037183,12.5064101411726,0.325451007794163,19.623702893677,0.519801286461809,16.8826902929905,2.17063160909878,163.245824894383,125.602838803376,71.657568350019,5.52652490734855,4.7166522486751,36.8486347163972,5.51006485386613,30.5303209504517,0.808248912079418 +5.65325234718398,8.97673686620753,0.350463828076509,20.2412976301482,0.497894307795414,18.7523898927688,2.4110215576417,195.260606075031,146.033430046453,62.9107325889391,6.42547092204394,5.23900518346196,30.7477538900599,6.12028549247508,24.0415556328468,0.585912764738114 +4.81650198985384,6.96634722675687,0.368417301808924,20.6429469785234,0.483029539047884,20.1041996066089,2.58482566370686,220.060255870452,161.24729133011,57.462997696379,7.09488081852485,5.61667107769518,26.8508674800954,6.56148053094818,19.8324137063037,0.456973242843529 +4.9810364184385,7.39349338498421,0.382349996262438,20.9326655027677,0.47196028434386,21.1573220493712,2.72022712063345,240.345832224479,173.331179314501,62.5388888219956,7.62657188983804,5.91089031950924,29.400855967589,6.90519192160798,22.0092870281885,0.486377017792504 +4.85000881520764,7.09029711951091,0.397136983032406,21.2205844482112,0.460637212461473,22.2778228415111,2.86429150819428,262.862047693503,186.392266743879,64.1187460870282,8.20125973673066,6.22393358981569,29.8161316562891,7.27089382849318,22.0777955025634,0.467442325232521 +6.16120250835905,10.4040779299032,0.411317577271428,21.4789721858788,0.450171749417732,23.3542453052975,3.00268868210967,285.402593388161,199.122219971633,85.388830971158,8.76137767875185,6.5246623449034,42.0616745685017,7.62220973150917,33.7526333789555,0.686831458036974 +5.27742123144169,8.22314302748046,0.432125733131234,21.8290019379091,0.435477539893979,24.9355574549192,3.2060002442039,320.143006778215,218.118038027627,78.0927269318696,9.5971936732156,6.96644617064042,36.9174522528082,8.1383083122099,28.2358288528599,0.543315087738353 +6.15592523474636,10.4985292838236,0.448572019186195,22.0829999772956,0.424392697977056,26.1857685404575,3.36674166948739,348.989461850704,233.360959006413,95.6595664075622,10.2678821962822,7.31572764329594,46.8455739407904,8.54634423792954,37.605675321911,0.693554380949977 +5.74789423499379,9.50397932532652,0.469569077753842,22.3806806297179,0.410880765196953,27.7809986057734,3.57184267788516,387.580707361033,253.066376229662,94.7602870423251,11.1349205541051,7.76139982848377,45.5183799958417,9.06698525924694,35.8242025594346,0.627192177160214 +5.97149900968766,10.127444252378,0.488577036404495,22.626555972576,0.399233902682805,29.2231197701014,3.7572582561559,424.203685476345,271.100132171089,103.557054529396,11.9284058155279,8.1642967551314,50.078611175242,9.53765557331882,39.8737252978456,0.667230304077618 +8.25030987196153,16.1460181633719,0.508831924909251,22.8660438421624,0.387399174373746,30.7567509890235,3.95443941287446,464.975014708175,290.479297408328,150.584566718388,12.7810890859664,8.59275957781142,77.5264308327664,10.0381923557582,66.426999476072,1.06123900093615 +4.56905157566767,6.53044383909058,0.541123961235995,23.2047588901903,0.369676893365644,33.1931828444188,4.26769493713957,533.654863629614,321.629933984687,90.0004550662801,14.1517170953262,9.27344503670805,39.9451757605475,10.8333794558158,28.684610651208,0.427185653523675 +4.12963609467907,5.37159546507656,0.554184848914176,23.3281489610887,0.362883851511289,34.1751162835838,4.39394352217505,562.703294288887,334.292468684623,83.7512949529029,14.7088686221234,9.54777563707506,35.6967904162226,11.1538566332136,24.1923267618891,0.350607021119938 +6.04893594380307,10.5065691068827,0.564928039844329,23.4242544580923,0.357449469391972,34.9811418246988,4.49757537746128,587.140341258371,344.727013163015,125.569080313727,15.1679885791726,9.77296144070071,60.3768781763123,11.4169221120171,48.2754909928686,0.684465071426604 +6.2945563317988,11.2119143099175,0.585941178058095,23.5990981439794,0.347202942649357,36.5531239580325,4.69968736603275,636.346013263859,365.170979005729,136.539833968137,16.0675230762521,10.2121386651472,66.1561033360424,11.9299756214677,53.4985695396343,0.727558174940365 +5.85813704977592,10.0791854485343,0.60836500667793,23.7680242384741,0.336799057189977,38.223669731759,4.91447182265473,690.893988327619,387.014292057569,132.880622603493,17.028628850533,10.6788524023194,63.1038848103846,12.475197703662,49.977504041231,0.651183065491647 +6.43461919416815,11.6859713482861,0.628523377574999,23.9057643733421,0.327886253694149,39.7190765803332,5.10673841747141,741.71213977051,406.653405978572,151.667224724812,17.8927498630572,11.0966361768603,73.6067032109369,12.9632590597351,59.8915269360905,0.751917215111277 +6.28452517962829,11.3237478293486,0.651895320271571,24.0503299277295,0.318042519963313,41.4451747166932,5.3286653207177,802.724737262861,429.404750928107,154.566791560146,18.8938090408367,11.5788700220003,74.4564674983851,13.5266119679757,60.2047463930205,0.725109137389003 +7.59957366756298,14.9941305432507,0.674542815930268,24.1764006186561,0.308975563582457,43.1098228057425,5.54269150359546,863.97378973908,451.413542754418,194.417437077668,19.8621958811944,12.0439360758227,97.5067830723904,14.0699092014346,82.4812350477476,0.955638823208184 +6.21149543939323,11.2170247835436,0.704531077016769,24.3244303347851,0.29763536598408,45.3020552806785,5.82454996465866,948.271872695356,480.474110520995,166.987446250236,21.1408608629238,12.6563976002054,79.9141126722639,14.7853960641335,64.4182194524633,0.71049715566715 +5.98687350548693,10.6261296950352,0.726965126583856,24.4226106406831,0.289614644779187,46.9332616048406,6.03427649205094,1013.6992438523,502.138603793136,166.744134266329,22.094098566898,13.1121207606372,78.9227489632764,15.3177787875139,62.9349616566192,0.670008519143344 +6.92465618391747,13.2853474280481,0.748217385973927,24.5067615780156,0.28235802853255,48.4717605396713,6.23208349795774,1077.53503057845,522.593715329677,199.185057712276,22.9941234745058,13.5419435160523,97.5893944330305,15.8199042640466,80.9353472990772,0.834142869906787 +6.28550492489152,11.5320441521732,0.774788080830023,24.6010799659635,0.273724236105251,50.386266173729,6.47823422233659,1159.87160371805,548.06660688132,187.941242744462,24.1149307027781,14.0768142710841,89.8496986623596,16.4447484105467,72.6846052773606,0.720344974452333 +4.49737721088138,6.50288924449187,0.797852169134369,24.6741442384487,0.266600942148725,52.040277312624,6.69089279733737,1233.60704449013,570.081669389506,138.889259921149,25.0835934531383,14.5389085950463,59.5600547237784,16.9845740240103,42.1710267562616,0.404453943506581 +6.82253612162997,13.1036095636866,0.810857947623353,24.7120668519223,0.262727965721625,52.9698716803164,6.81041207318354,1276.11116119216,582.455350270129,214.459115874962,25.6280354118857,14.7986168103034,104.419478191664,17.2879691088505,86.318438316377,0.813070766436323 +8.09628414307588,16.7700500435536,0.837065166750726,24.7819519266607,0.255222084367016,54.8365158033353,7.05040917471453,1363.77878759673,607.29868093099,263.46646295392,26.7211419609636,15.3201161121042,132.855122928511,17.8971925204292,113.922131204272,1.03579920381027 +5.94274261303538,10.6687102897861,0.870605266837834,24.859985077216,0.246162324472608,57.2133301069855,7.35599958518385,1479.90325457544,638.916795471999,201.768745702622,28.1123390007679,15.9841457386294,94.6033565779349,18.6729220239282,75.2751334635219,0.655301090484798 +7.21579747724692,14.3420120748679,0.891942687417406,24.9037403525511,0.240696425746769,58.7187229758241,7.54955009689167,1556.06724033549,658.929249251983,251.437867184224,28.9928869670873,16.4047193875398,123.624156497758,19.1642425536481,103.581922842076,0.877991102033989 +6.83611765295107,13.2848079689127,0.920626711567142,24.9562120191458,0.233688373455423,60.7347587986915,7.8087547026889,1661.25266690492,685.709434020288,246.386317319173,30.1712150968927,16.9679554436608,119.548288067172,19.8222234760565,98.9162352222531,0.809829368862466 +6.12998078400691,11.272077756155,0.947196327504967,24.9990352555523,0.227522973177596,62.5948102769921,8.04790417847041,1761.54256388277,710.39355173062,227.7021793191,31.2573162761473,17.4876129055655,107.374350082432,20.429295222271,86.2604434409872,0.684611419174225 +6.53607583312854,12.4650018762403,0.969740483017277,25.0315000481816,0.222522208052401,64.167848082737,8.2501518963519,1848.79096362887,731.249115522337,248.88819847553,32.1749610829828,17.9270850616589,119.271691398533,20.9426932753548,97.5741549713976,0.754843151780884 +7.1035131367631,14.132376749895,0.994670486769758,25.0637058368613,0.217224128494856,65.9021509660703,8.47313369563761,1947.57248452963,754.220688890985,277.806577621007,33.1857103112033,18.4116111325988,135.725553706323,21.5087239966185,113.363626467799,0.853203241904944 +6.68824176082497,12.948309708761,1.02293524026955,25.0960372946064,0.211494472547868,67.8622671252646,8.72514863039116,2062.48744336608,780.154506268251,269.345717153811,34.326798275803,18.9592244649222,129.635816647851,22.1484542156083,106.708162526814,0.779199905428901 +6.1581683314449,11.4200839978472,1.04883185968707,25.1222019151984,0.206487535790646,69.6528106533575,8.95536136971739,2170.49767791386,803.817702071254,254.542290981472,35.3679788911352,19.4594629347137,119.828909493374,22.7328404000518,96.4107172548514,0.685351838470396 +8.06064954658003,16.9909115414474,1.07167202768276,25.1428390069104,0.202252747603392,71.2280873335428,9.15789694288407,2267.92133252094,824.614657252035,340.714854929807,36.2830449190895,19.8995605830705,170.719349656588,23.2469691627057,146.455007094015,1.01737339986701 +7.92419280530731,16.6200092149109,1.10565385076566,25.1698120655593,0.196246898019613,73.5655063466234,9.45842224456586,2416.61919001554,855.43715922407,345.938588547058,37.6392350058591,20.5525840321069,172.648061705455,24.0098410823595,147.64612893792,0.992091685175668 +6.8908488253067,13.6113322391074,1.13889386919548,25.1924313050802,0.190690403921272,75.8452541560662,9.75153267720851,2566.41257486524,885.458476510731,310.149353290477,38.9601729664722,21.1894954156135,149.999810945035,24.7538906421447,124.435643811426,0.810276491464526 +6.41599754089244,12.2285472182085,1.1661165336737,25.2085556855708,0.186357991628689,77.7078672418074,9.9910115025181,2692.28946016297,909.957982198855,295.868632925862,40.0381512167496,21.7098685342817,140.472367904898,25.361798429469,114.384093970626,0.726475504803256 +7.3733979177683,15.0548981022531,1.19057362811011,25.221423677932,0.18262294834651,79.3781419600122,10.2057611091444,2807.8376677132,931.90659601351,347.326841998786,41.0038902245944,22.1765065445043,170.487867137813,25.9069320462897,143.688062491699,0.892872599824124 +6.07867478439008,11.2527027616962,1.22068342431462,25.235408838689,0.178217073801817,81.4307557288646,10.4696685937112,2953.29153874599,958.853498691067,293.74272593349,42.1895539424069,22.7499616740187,137.281926190238,26.5768510455745,110.03897490868,0.666100235984335 +6.06000065626262,11.2030124741647,1.24318882983801,25.2446722767121,0.175055051912288,82.9625150244002,10.6666090745657,3064.31789282019,978.944867056148,298.348821838847,43.0735741504705,23.1779015224869,139.258407699534,27.07677688159,111.519340090377,0.662290727567018 +6.94113097084152,13.8093923678542,1.26559485478634,25.2529934948537,0.172012567023254,84.4855898082402,10.8624329753452,3176.81664337479,998.908093942626,348.002710117346,43.9519561334755,23.6034151094465,168.268403324654,27.57386832203,139.879150777717,0.815384224907797 +6.66338984604927,12.9963297974775,1.29321363952205,25.2621426100253,0.168399933939935,86.3605763101158,11.1035026684435,3318.1851608079,1023.46544461355,341.491974163516,45.0324795629962,24.1272450883675,163.399349707291,28.1858144660488,134.447212710534,0.766322530708364 +4.8327170357636,7.58682609842304,1.319206299117,25.2697577692411,0.165131670107867,88.1229177359919,11.330089423199,3453.95275674801,1046.52997253766,252.726033941288,46.0473187916572,24.619604511246,109.235466383031,28.7609962281204,80.0276448880751,0.446825266835415 +7.56486853832027,15.6730997778151,1.33437995131385,25.2738017781918,0.163280032288862,89.1507818105098,11.462243375637,3534.43071573915,1059.97469588777,400.217696551406,46.6388866190618,24.9067671206566,197.203225687013,29.09646395354,167.184289812915,0.922471920557719 +6.79776305306633,13.4088551560273,1.36572615086948,25.2813168180963,0.159579858834912,91.2721728025958,11.734993646048,3703.53815439624,1087.70688406786,368.19183935452,47.8591028989859,25.4994370932436,176.899979617374,29.7888300245835,146.322912327283,0.788237265507842 +6.55108153415802,12.6820625133953,1.39254386118153,25.2869431822726,0.156541488982179,93.0851255245842,11.9680875674465,3851.27012102615,1111.39082839316,361.878715467997,48.9011964492989,26.0059361988073,172.182949691934,30.3805299789028,141.057614156743,0.744805556288709 +7.37489698475984,15.1286882929579,1.41790798620833,25.2916649619828,0.15376991780891,94.7982983256089,12.188352641864,3993.58928767806,1133.75862506141,414.883579686859,49.8853795027021,26.484558989612,203.108184716727,30.9396643985779,171.280754497045,0.88776582110463 +6.84902501061994,13.5727832763006,1.44816536279424,25.2966252661696,0.150586639720526,96.8402308491593,12.4508868234633,4166.66687824375,1160.40398966829,393.599297711207,51.0577755454048,27.0550300141764,189.291895290976,31.6060973210992,156.890039655707,0.795758314169167 +6.86022254840374,13.6089402219773,1.47531092934684,25.3005267030915,0.147838658604879,98.6706967663468,12.6862324413874,4325.0044955809,1184.27726458664,401.69474130844,52.1081996418121,27.5664219211884,193.212071847264,32.203513120445,160.211253032689,0.797305694129923 +7.3477007125301,15.0596995716975,1.5025288097908,25.3039806882716,0.145180420590031,100.504782567108,12.9220434729138,4486.67224192437,1208.1867447942,438.235881322554,53.1602167709448,28.0788251440334,214.198103644545,32.8021103543197,180.514267807756,0.881725482469393 +7.00480034851913,14.0434466759859,1.53264820893419,25.3073330995929,0.142346210552373,102.533064162292,13.1828225351518,4668.97154132753,1234.61603936984,426.215701191288,54.3231057322728,28.6454823995328,205.94826783569,33.4640879738469,171.662489886118,0.821689975724731 +4.42412520338839,6.37133082916498,1.56073510228616,25.3100689184987,0.139799668103702,104.423344490898,13.4258585774011,4842.18753487884,1259.23696302049,274.154105891564,55.4064263729016,29.173585137178,113.74445662889,34.0810256195567,79.2908443697532,0.372586639580628 +7.68724424133283,16.0758050936054,1.57347776394449,25.3111987239543,0.138673703562616,105.28061092448,13.5360785474331,4921.79833277223,1270.39987472213,480.273719660655,55.8975944877737,29.4130865188593,236.977823192413,34.3608147742532,201.677133514537,0.93987490362273 +6.53549245480389,12.6512986828117,1.6056293741317,25.3137728650522,0.135910679878506,107.442784882976,13.8140723420969,5125.51335906766,1298.54699945487,416.701746662533,57.1360679760141,30.017150355036,197.72911699889,35.0664913299382,161.923360050046,0.739265618905277 +6.35274927564195,12.1079573499568,1.63093197149733,25.3155483249319,0.133811519654862,109.14359579239,14.0327480304501,5288.69975770069,1320.68096909909,411.461987712382,58.10996264036,30.4923195052863,193.715823340042,35.6215911542195,157.386983357953,0.707248827869675 +5.91699470875076,10.8109050756738,1.65514788619724,25.3170653166043,0.131861669216528,110.770786335755,14.2419582431685,5447.24427203332,1341.85148594376,388.95214086689,59.0414653815252,30.9469207449107,179.378252844273,36.1526632326586,142.594312195563,0.631277416050734 +7.11070596588075,14.3652182893664,1.67676969634859,25.3182847175782,0.130167592858358,112.223231155346,14.4287011485444,5590.76186112807,1360.74438227409,473.549340451099,59.8727528200599,31.3527018737182,229.394331454393,36.6267029155359,191.929031875615,0.838596663242167 +7.75749795348562,16.2922297157796,1.70550013292732,25.3197290275256,0.127982122009404,114.152620071343,14.6767654377441,5784.32185279272,1385.83571261183,525.505541897967,60.9767713549206,31.8917306902917,259.582223911653,37.2564045727351,221.375040254999,0.950779083919013 +4.4957307046228,6.57528448774093,1.73808459235888,25.3211528130389,0.125589859706514,116.34010643624,14.9580136846595,6007.79596612599,1414.27666358085,310.3841191862,62.2281731975576,32.5028662559439,129.391847839619,37.9703424302894,91.0379126533688,0.383592755961183 +5.53202541156165,9.66232814919672,1.75123516133436,25.3216698966454,0.124649311839636,117.222744229358,15.0714956866318,6099.17593491703,1425.75051927657,384.827232241749,62.7330228481692,32.7494558373096,173.606852133762,38.2584121276037,134.784822262239,0.56361774391899 +7.72147588826699,16.1863805557521,1.77055981763276,25.3223754169807,0.123292270403731,118.51958437557,15.238232276859,6234.69958480614,1442.60696592438,543.075469250406,63.4747065006728,33.111764443678,267.893398983633,38.6816665489498,228.26771625578,0.944016178903606 +6.5999758180716,12.8438423983546,1.80293257874426,25.3234259836732,0.121083505276179,120.691593114779,15.5174905433287,6465.04146813335,1470.83440087062,472.703818953085,64.7167136383074,33.7185759012207,224.561117648134,39.3905529176806,184.42168245272,0.748882277733266 +6.8166473964829,13.4893606625801,1.82862026354097,25.3241555825511,0.119386014914728,122.414700372915,15.7390329050891,6650.76971345345,1493.22422696236,495.192605019863,65.7018659863437,34.1999741607844,237.174458923641,39.9529296821493,196.435151692866,0.786377548626018 +5.32509727569949,9.04161832682205,1.85559898486613,25.3248348377175,0.11765340651995,124.224089088532,15.971668597097,6848.6465841758,1516.73201592906,392.557349907806,66.7362087008786,34.7054775613759,174.669398187331,40.5434664387847,133.598931172164,0.527000576382554 +7.97360835993438,16.9386276011749,1.87368222151977,25.3252453483367,0.116519801533915,125.436714529821,16.1275775824055,6982.89344186759,1532.48492032709,593.539077834348,67.4293364943918,35.0442584319123,294.639289744827,40.9392354014909,252.712872437976,0.987181905359288 +6.89300044675697,13.7156193364446,1.90755947672212,25.3259286246983,0.114453558888626,127.708128152148,16.4196164767047,7237.88095507121,1561.98899880744,522.392090520488,68.7275159475272,35.6788414268908,250.791439887642,41.6805649024044,208.311673070999,0.799201914238638 +5.26652282508213,8.86343576828241,1.93499071539501,25.3264092606553,0.11283315861876,129.547065245134,16.656051245803,7447.68453779083,1585.87267393936,404.875312643241,69.7783976533319,36.1925999940551,179.342588997512,42.2807454701152,136.545442324012,0.516401203384928 +6.08722335648038,11.3108622912311,1.95271758693158,25.3266892424396,0.111810089391957,130.73531938972,16.8088267786783,7584.85317701742,1601.3042111599,472.260819467813,70.4573852910354,36.5245720604612,219.16731726979,42.6685602843372,175.839814113116,0.658942872337212 +5.80896750876091,10.4799155435318,1.97533931151404,25.3270150597917,0.110531054310357,132.251555349208,17.0037714020411,7761.70805769517,1620.99387781336,455.899884635363,71.3237306237878,36.9481750303511,208.576787388735,43.1634197128735,164.802888571085,0.610479104775902 +7.78794480336613,16.383621599156,1.9962991426011,25.3272882528751,0.109371730506603,133.656285190855,17.1843795245385,7927.38252528015,1639.23434985549,617.70625313226,72.1263113936414,37.3406256440507,304.943589656741,43.621886485367,260.36739260079,0.954310570583362 +8.26991426172695,17.8212132925492,2.02906638579942,25.3276661158517,0.107607099897109,135.852145499919,17.4667044214181,8189.88052588774,1667.74559891803,666.710439247323,73.3808063523933,37.9541007054763,333.225319313672,44.338557377446,287.848826387601,1.03793554862492 +6.73731109428416,13.2468350160601,2.06470881238451,25.3280176012061,0.105750979513948,138.240432415899,17.7737698820442,8480.25093570845,1698.75275288279,552.702503294163,74.7451211268427,38.621335527489,263.601627983899,45.1180312390352,217.712159054683,0.771437690180207 +6.21843458017346,11.6973511006776,2.09120248241663,25.3282441052809,0.104412142668151,140.015540678156,18.0019980871914,8699.35664887321,1721.7974576653,516.686433161994,75.7590881372734,39.1172617235817,241.086049980683,45.6973797597936,194.707513437714,0.681156783176294 +5.74718958761585,10.2899098123137,2.11459718461799,25.3284224999748,0.103257713296736,141.582919860161,18.203518267735,8895.15095465248,1742.14441262629,482.876572043109,76.6543541555569,39.555152984692,220.000238941716,46.2089309873272,173.192141064549,0.599166889840218 +7.79155475132858,16.3914363885919,2.13517700424262,25.3285643825726,0.102263040731213,142.961643145127,18.3807826900877,9069.18420719124,1760.04163273695,661.018180858538,77.4418318404258,39.9403379385992,326.181606647708,46.6589099056072,278.56828789789,0.954408844211479 +6.37447890188328,12.1603164214165,2.1679598770198,25.3287645142451,0.100717462781834,145.157780644712,18.6631432257487,9349.88713364684,1788.54849537084,549.104185711371,78.696133796317,40.5538904409584,257.912496884457,47.3756712653621,209.82882214266,0.708003476435719 +6.5040551061583,12.5462724436629,2.19228050986263,25.3288947332994,0.0996006395267304,146.786946007175,18.8726073437797,9560.89098089787,1809.69492601107,566.554109032377,79.6265767444869,41.0090434015926,267.551093331778,47.9073878726715,218.913260640773,0.73044481833335 +6.02775487770983,11.1233478298667,2.21737305474996,25.3290147165361,0.0984739914083491,148.467752739632,19.0887110665241,9781.05518356689,1831.51095407081,531.076965122374,80.5864819791156,41.478623824893,245.407115591019,48.4559588611766,196.303579502662,0.647577227180994 +7.86825243186233,16.6177355200017,2.23961975040969,25.32911015301,0.0974961923026586,149.957880782505,19.2802989577506,9978.34215031868,1850.85152401609,700.192292117438,81.437467056708,41.8949328172546,346.115935346085,48.94229735429,296.206219305294,0.967418686501001 +7.4651781811241,15.413292033854,2.2728552214497,25.3292357873966,0.096071003056041,152.183978029339,19.566511460915,10276.7434095373,1879.74347733965,674.184644977029,82.7087130029446,42.5168554138806,329.375445936122,49.6688367853996,278.809345452972,0.897263697750203 +6.69499559492098,13.1125185831063,2.3036818055174,25.3293364035916,0.0947858110368597,154.248651917469,19.8319695322461,10557.4413600266,1906.53953556085,612.831978573459,83.8877395646776,43.0936798753988,291.51033548003,50.3426918895477,240.4043419674,0.763301623082351 +5.71722218118665,10.1917235708941,2.32990684268362,25.3294115009699,0.0937191958484101,156.005075976532,20.057795482697,10799.2126899284,1929.33446652182,529.289825910607,84.8907165269601,43.5843861161717,240.488833960485,50.915942379154,188.979629455971,0.593262125360478 +5.10229470289402,8.35451347447815,2.3502902898254,25.3294639495582,0.0929065863847995,157.370229459934,20.2333152162772,10989.018204555,1947.05115731749,476.49446928777,85.6702509219696,43.9657799660573,208.115063039846,51.3614924720882,156.267261558641,0.486309009116385 +6.64907817101159,12.9732577153835,2.36699931677436,25.3295034379547,0.0922508877424596,158.489275959404,20.3771926233519,11145.8404625128,1961.57373008516,625.361393806355,86.3092441237471,44.2784169389864,296.864239646173,51.7267197362011,244.382368149284,0.755151760688667 +7.50429167976302,15.526584035243,2.39294583220513,25.3295590704651,0.0912508193499798,160.226951756539,20.6006080829836,11391.5611771324,1984.12433266013,713.534576827879,87.3014706370455,44.7638853278383,348.881532517797,52.2938512875736,295.683922248864,0.903758981359336 +5.80282004170579,10.4437851701799,2.42399900027561,25.3296175203138,0.0900820386897913,162.306585417359,20.8679895536604,11689.1622292395,2011.11222220252,558.914002617513,88.488937776911,45.3448892207309,255.048105371923,52.9725888669842,201.46762567534,0.607890829598647 +6.25546251951908,11.7949993764401,2.44488657061597,25.3296524113041,0.0893125575376809,163.705404819378,21.0478377624915,11891.4973005397,2029.26477557641,607.704134529585,89.287650125362,45.7356885876282,283.608477489957,53.4291266278629,229.492819924875,0.68653093721962 +6.57297094426391,12.7425793906757,2.46847656936885,25.3296880046465,0.0884591662971433,165.285182870947,21.2509520834075,12122.0965952848,2049.76541915996,644.711447770915,90.1896784430382,46.1770438201194,305.006835304655,53.944724519419,250.320435350945,0.741675434290741 diff --git a/pyrealm_build_data/t_model/rtmodel_test_outputs.r b/pyrealm_build_data/t_model/rtmodel_test_outputs.r index 16ce3cdd..bf19857a 100644 --- a/pyrealm_build_data/t_model/rtmodel_test_outputs.r +++ b/pyrealm_build_data/t_model/rtmodel_test_outputs.r @@ -12,10 +12,10 @@ tmodel <- function(P0, year, a, cr, Hm, rho, rr, P0 <- P0 * (1 - 0.1) aa <- length(year) # simulate years output <- matrix() - output <- matrix(NA, nrow = aa, ncol = 12, byrow = T) + output <- matrix(NA, nrow = aa, ncol = 16, byrow = T) colnames(output) <- c( - "dD", "D", "H", "Ac", "Wf", "Ws", "Wss", - "GPP", "Rm1", "Rm2", "dWs", "dWfr" + "P0", "dD", "D", "H", "fc", "Ac", "Wf", "Ws", "Wss", + "GPP", "Rm1", "Rm2", "NPP", "turnover", "dWs", "dWfr" ) # you can decide which index you want output dD <- 0 NPP1 <- NA @@ -80,28 +80,33 @@ tmodel <- function(P0, year, a, cr, Hm, rho, rr, a * d * (1 - H / Hm) + H )) * (1 / sigma + zeta) * dD output[i, ] <- c( - dD / 2 * 1000, d, H, Ac, Wf, Ws, Wss, GPP, Rm1, Rm2, dWs, dWfr + P0[i], dD / 2 * 1000, d, H, fc, Ac, Wf, Ws, Wss, GPP, Rm1, Rm2, NPP1, NPP2, dWs, dWfr ) } return(output) } -tmodel_run <- tmodel(rep(7, 100), seq(100), - d = 0.1, - a = 116.0, - cr = 390.43, - Hm = 25.33, - rho = 200.0, - L = 1.8, - sigma = 14.0, - tf = 4.0, - tr = 1.04, - K = 0.5, - y = 0.6, - zeta = 0.17, - rr = 0.913, - rs = 0.044 -) - -write.csv(tmodel_run, "rtmodel_output.csv", row.names = FALSE) +# Load alternative plant functional types +pfts <- read.csv("pft_definitions.csv") + +for (pft_idx in seq_len(nrow(pfts))) { + # Get the PFT + pft <- as.list(pfts[pft_idx, ]) + + # Seperate off the name + name <- pft[["name"]] + pft[["name"]] <- NULL + + # Get GPP sequence + n_years <- 100 + pft[["P0"]] <- rnorm(n_years, mean = 7) + pft[["year"]] <- seq(n_years) + + tmodel_run <- do.call(tmodel, pft) + + write.csv(tmodel_run, + sprintf("rtmodel_output_%s.csv", name), + row.names = FALSE + ) +} diff --git a/tests/regression/demography/test_t_model_functions_against_rtmodel.py b/tests/regression/demography/test_t_model_functions_against_rtmodel.py new file mode 100644 index 00000000..0582daa2 --- /dev/null +++ b/tests/regression/demography/test_t_model_functions_against_rtmodel.py @@ -0,0 +1,346 @@ +"""Regression tests of the demography.t_model functions. + +The original R implementation has been used to generate a set of predicted growth +trajectories across a set of PFT definitions (default from the original paper and then +two fairly randomly chosen variants). +""" + +from importlib import resources + +import pandas as pd +import pytest +from numpy.testing import assert_array_almost_equal + +# Fixtures: inputs and expected values from the original implementation in R + + +@pytest.fixture(scope="module") +def rvalues(): + """Fixture to load test inputs from file. + + The regression test inputs consist of time series of growth from an initial DBH + run using the original R implementation of the T model, for each of a small set of + different plant functional type definitions. The PFT definitions are loaded first + and then the output file associated with each PFT is loaded. + """ + from pyrealm.demography.flora import PlantFunctionalType + + # Load the PFT definitions and rename to pyrealm attributes + pfts_path = resources.files("pyrealm_build_data.t_model") / "pft_definitions.csv" + pft_definitions = pd.read_csv(pfts_path) + + # Map the PFT trait args from the R implementation to pyrealm + pft_definitions = pft_definitions.rename( + columns={ + "a": "a_hd", + "cr": "ca_ratio", + "Hm": "h_max", + "rho": "rho_s", + "L": "lai", + "sigma": "sla", + "tf": "tau_f", + "tr": "tau_r", + "K": "par_ext", + "y": "yld", + "rr": "resp_r", + "rs": "resp_s", + } + ) + + # Convert to dicts for creating PFT instances + pft_definitions = pft_definitions.to_dict(orient="records") + + return_value = [] + + # Loop over the PFT definitions + for pft_args in pft_definitions: + # Record the starting DBH and create the PFT instances + dbh_init = pft_args.pop("d") + pft = PlantFunctionalType(**pft_args) + + # Load the appropriate output file and then remap the field names + datapath = ( + resources.files("pyrealm_build_data.t_model") + / f"rtmodel_output_{pft.name}.csv" + ) + data = pd.read_csv(datapath) + + data = data.rename( + columns={ + "dD": "delta_d", + "D": "diameter", + "H": "height", + "fc": "crown_fraction", + "Ac": "crown_area", + "Wf": "mass_fol", + "Ws": "mass_stm", + "Wss": "mass_swd", + "P0": "potential_gpp", + "GPP": "crown_gpp", + "Rm1": "resp_swd", + "Rm2": "resp_frt", + "dWs": "delta_mass_stm", + "dWfr": "delta_mass_frt", + } + ) + + # Fix some scaling differences: + # The R tmodel implementation rescales reported delta_d as a radial increase in + # millimetres, not diameter increase in metres + data["delta_d"] = data["delta_d"] / 500 + + # NOTE: The reported P0 in the R tmodel outputs has already had fixed foliar + # respiration costs removed before calculating anything. The pyrealm + # implementation has this as a PFT trait, so in some tests the potential GPP + # will need to be proportionally scaled up to make them match, but this is not + # true for _all_ tests so the values here are left untouched. + + # Add a tuple of the inputs and outputs to the return list. + return_value.append((pft, dbh_init, data)) + + return return_value + + +def test_calculate_heights(rvalues): + """Test calculation of heights of tree from diameter.""" + + from pyrealm.demography.t_model_functions import calculate_heights + + for pft, _, data in rvalues: + actual_heights = calculate_heights( + h_max=pft.h_max, a_hd=pft.a_hd, dbh=data["diameter"] + ) + + assert_array_almost_equal(actual_heights, data["height"], decimal=8) + + +def test_calculate_crown_areas(rvalues): + """Tests calculation of crown areas of trees.""" + from pyrealm.demography.t_model_functions import calculate_crown_areas + + for pft, _, data in rvalues: + actual_crown_areas = calculate_crown_areas( + ca_ratio=pft.ca_ratio, + a_hd=pft.a_hd, + dbh=data["diameter"], + height=data["height"], + ) + + assert_array_almost_equal(actual_crown_areas, data["crown_area"], decimal=8) + + +def test_calculate_crown_fractions(rvalues): + """Tests calculation of crown fractions of trees.""" + + from pyrealm.demography.t_model_functions import calculate_crown_fractions + + for pft, _, data in rvalues: + actual_crown_fractions = calculate_crown_fractions( + a_hd=pft.a_hd, + dbh=data["diameter"], + height=data["height"], + ) + assert_array_almost_equal( + actual_crown_fractions, data["crown_fraction"], decimal=8 + ) + + +def test_calculate_stem_masses(rvalues): + """Tests happy path for calculation of stem masses of trees.""" + + from pyrealm.demography.t_model_functions import calculate_stem_masses + + for pft, _, data in rvalues: + actual_stem_masses = calculate_stem_masses( + dbh=data["diameter"], + height=data["height"], + rho_s=pft.rho_s, + ) + assert_array_almost_equal(actual_stem_masses, data["mass_stm"], decimal=8) + + +def test_calculate_foliage_masses(rvalues): + """Tests calculation of foliage masses of trees.""" + + from pyrealm.demography.t_model_functions import calculate_foliage_masses + + for pft, _, data in rvalues: + actual_foliage_masses = calculate_foliage_masses( + crown_area=data["crown_area"], lai=pft.lai, sla=pft.sla + ) + assert_array_almost_equal(actual_foliage_masses, data["mass_fol"], decimal=8) + + +def test_calculate_sapwood_masses(rvalues): + """Tests calculation of sapwood masses of trees.""" + + from pyrealm.demography.t_model_functions import calculate_sapwood_masses + + for pft, _, data in rvalues: + actual_sapwood_masses = calculate_sapwood_masses( + crown_area=data["crown_area"], + height=data["height"], + crown_fraction=data["crown_fraction"], + ca_ratio=pft.ca_ratio, + rho_s=pft.rho_s, + ) + assert_array_almost_equal(actual_sapwood_masses, data["mass_swd"], decimal=8) + + +def test_calculate_whole_crown_gpp(rvalues): + """Tests calculation of sapwood masses of trees. + + Note that this test can used reported P0 from R directly - no need to correct for + foliar respiration. + """ + + from pyrealm.demography.t_model_functions import calculate_whole_crown_gpp + + for pft, _, data in rvalues: + actual_whole_crown_gpp = calculate_whole_crown_gpp( + potential_gpp=data["potential_gpp"], + crown_area=data["crown_area"], + par_ext=pft.par_ext, + lai=pft.lai, + ) + assert_array_almost_equal(actual_whole_crown_gpp, data["crown_gpp"], decimal=8) + + +def test_calculate_sapwood_respiration(rvalues): + """Tests calculation of sapwood respiration of trees.""" + + from pyrealm.demography.t_model_functions import calculate_sapwood_respiration + + for pft, _, data in rvalues: + actual_sapwood_respiration = calculate_sapwood_respiration( + sapwood_mass=data["mass_swd"], + resp_s=pft.resp_s, + ) + assert_array_almost_equal( + actual_sapwood_respiration, data["resp_swd"], decimal=8 + ) + + +def test_calculate_foliar_respiration(rvalues): + """Tests calculation of foliar respiration of trees. + + This is implemented as a fixed proportion of GPP - and the reported values from R + are automatically penalised by this proportion beforehand, so this test looks + circular but is important to validate this difference. + """ + + from pyrealm.demography.t_model_functions import calculate_foliar_respiration + + for pft, _, data in rvalues: + actual_foliar_respiration = calculate_foliar_respiration( + whole_crown_gpp=data["crown_gpp"], + resp_f=pft.resp_f, + ) + assert_array_almost_equal( + actual_foliar_respiration, + data["crown_gpp"] * pft.resp_f, + decimal=8, + ) + + +def test_calculate_fine_root_respiration(rvalues): + """Tests calculation of fine root respiration of trees.""" + + from pyrealm.demography.t_model_functions import calculate_fine_root_respiration + + for pft, _, data in rvalues: + actual_fine_root_respiration = calculate_fine_root_respiration( + zeta=pft.zeta, + sla=pft.sla, + resp_r=pft.resp_r, + foliage_mass=data["mass_fol"], + ) + assert_array_almost_equal( + actual_fine_root_respiration, + data["resp_frt"], + decimal=8, + ) + + +def test_calculate_net_primary_productivity(rvalues): + """Tests calculation of fine root respiration of trees. + + Again - this test has to account for the R implementation removing foliar + respiration from potential GPP before calculating crown GPP. + """ + + from pyrealm.demography.t_model_functions import calculate_net_primary_productivity + + for pft, _, data in rvalues: + actual_npp = calculate_net_primary_productivity( + yld=pft.yld, + whole_crown_gpp=data["crown_gpp"] / (1 - pft.resp_f), + foliar_respiration=data["crown_gpp"] / (1 - pft.resp_f) * pft.resp_f, + fine_root_respiration=data["resp_frt"], + sapwood_respiration=data["resp_swd"], + ) + assert_array_almost_equal( + actual_npp, + data["NPP"], + decimal=8, + ) + + +def test_calculate_foliage_and_fine_root_turnover(rvalues): + """Tests calculation of fine root respiration of trees.""" + + from pyrealm.demography.t_model_functions import ( + calculate_foliage_and_fine_root_turnover, + ) + + for pft, _, data in rvalues: + actual_turnover = calculate_foliage_and_fine_root_turnover( + sla=pft.sla, + tau_f=pft.tau_f, + zeta=pft.zeta, + tau_r=pft.tau_r, + foliage_mass=data["mass_fol"], + ) + assert_array_almost_equal( + actual_turnover, + data["turnover"], + decimal=8, + ) + + +def test_calculate_growth_increments(rvalues): + """Tests calculation of fine root respiration of trees.""" + + from pyrealm.demography.t_model_functions import ( + calculate_growth_increments, + ) + + for pft, _, data in rvalues: + delta_dbh, delta_mass_stem, delta_mass_fine_root = calculate_growth_increments( + rho_s=pft.rho_s, + a_hd=pft.a_hd, + h_max=pft.h_max, + lai=pft.lai, + ca_ratio=pft.ca_ratio, + sla=pft.sla, + zeta=pft.zeta, + npp=data["NPP"], + turnover=data["turnover"], + dbh=data["diameter"], + height=data["height"], + ) + assert_array_almost_equal( + delta_dbh, + data["delta_d"], + decimal=8, + ) + assert_array_almost_equal( + delta_mass_stem, + data["delta_mass_stm"], + decimal=8, + ) + assert_array_almost_equal( + delta_mass_fine_root, + data["delta_mass_frt"], + decimal=8, + ) diff --git a/tests/regression/tmodel/test_tmodel.py b/tests/regression/tmodel/test_tmodel.py index 6c7d2f3d..2504399a 100644 --- a/tests/regression/tmodel/test_tmodel.py +++ b/tests/regression/tmodel/test_tmodel.py @@ -3,11 +3,11 @@ Tests the init, grow_ttree and other methods of TModel. """ -import csv from contextlib import nullcontext as does_not_raise from importlib import resources import numpy as np +import pandas as pd import pytest # Fixtures: inputs and expected values from the original implementation in R @@ -22,46 +22,43 @@ def rvalues(): """ from pyrealm.tmodel import TModelTraits - datapath = resources.files("pyrealm_build_data.t_model") / "rtmodel_output.csv" - - with open(str(datapath)) as infile: - rdr = csv.DictReader(infile, quoting=csv.QUOTE_NONNUMERIC) - values = [v for v in rdr] - - name_map = ( - ("dD", "delta_d"), - ("D", "diameter"), - ("H", "height"), - ("Ac", "crown_area"), - ("Wf", "mass_fol"), - ("Ws", "mass_stm"), - ("Wss", "mass_swd"), - ("GPP", "gpp_actual"), - ("Rm1", "resp_swd"), - ("Rm2", "resp_frt"), - ("dWs", "delta_mass_stm"), - ("dWfr", "delta_mass_frt"), + datapath = ( + resources.files("pyrealm_build_data.t_model") / "rtmodel_output_default.csv" ) - # copy values under R names to py names - traits = TModelTraits() + data = pd.read_csv(datapath) + + data = data.rename( + columns={ + "dD": "delta_d", + "D": "diameter", + "H": "height", + "fc": "crown_fraction", + "Ac": "crown_area", + "Wf": "mass_fol", + "Ws": "mass_stm", + "Wss": "mass_swd", + "P0": "potential_gpp", + "GPP": "gpp_actual", + "Rm1": "resp_swd", + "Rm2": "resp_frt", + "dWs": "delta_mass_stm", + "dWfr": "delta_mass_frt", + } + ) - for row in values: - for rnm, pynm in name_map: - # Fix some scaling differences: - if pynm == "delta_d": - # The R tmodel implementation rescales reported delta_d as - # a radial increase in millimetres, not diameter increase in metres - row[pynm] = row[rnm] / 500 - elif pynm == "gpp_actual": - # The R tmodel implementation slices off foliar respiration costs from - # GPP before doing anything - the pyrealm.tmodel implementation keeps - # this cost within the tree calculation - row[pynm] = row[rnm] / (1 - traits.resp_f) - else: - row[pynm] = row[rnm] + # Fix some scaling differences: + # The R tmodel implementation rescales reported delta_d as a radial increase in + # millimetres, not diameter increase in metres + data["delta_d"] = data["delta_d"] / 500 + + # The R tmodel implementation slices off foliar respiration costs from + # GPP before doing anything - the pyrealm.tmodel implementation keeps + # this cost within the tree calculation + traits = TModelTraits() + data["gpp_actual"] = data["gpp_actual"] / (1 - traits.resp_f) - return values + return data @pytest.mark.parametrize(argnames="row", argvalues=np.arange(0, 100, 10)) @@ -71,10 +68,11 @@ def test_tmodel_init(rvalues, row): from pyrealm.constants.tmodel_const import TModelTraits from pyrealm.tmodel import TTree - ttree = TTree(traits=TModelTraits, diameters=rvalues[row]["diameter"]) + row = rvalues.iloc[row] + ttree = TTree(traits=TModelTraits, diameters=row["diameter"]) for geom_est in ("height", "crown_area", "mass_fol", "mass_stm", "mass_swd"): - assert np.allclose(getattr(ttree, geom_est), rvalues[row][geom_est]) + assert np.allclose(getattr(ttree, geom_est), row[geom_est]) @pytest.mark.parametrize(argnames="row", argvalues=np.arange(0, 100, 10)) @@ -85,10 +83,11 @@ def test_tmodel_reset_diameters(rvalues, row): from pyrealm.tmodel import TTree ttree = TTree(diameters=0.001, traits=TModelTraits()) - ttree.reset_diameters(rvalues[row]["diameter"]) + row = rvalues.iloc[row] + ttree.reset_diameters(row["diameter"]) for geom_est in ("height", "crown_area", "mass_fol", "mass_stm", "mass_swd"): - assert np.allclose(getattr(ttree, geom_est), rvalues[row][geom_est]) + assert np.allclose(getattr(ttree, geom_est), row[geom_est]) def test_tmodel_init_array(rvalues): @@ -97,11 +96,11 @@ def test_tmodel_init_array(rvalues): from pyrealm.constants.tmodel_const import TModelTraits from pyrealm.tmodel import TTree - diams = np.array([rw["diameter"] for rw in rvalues]) + diams = np.array(rvalues["diameter"]) ttree = TTree(diameters=diams, traits=TModelTraits) for geom_est in ("height", "crown_area", "mass_fol", "mass_stm", "mass_swd"): - vals = [rw[geom_est] for rw in rvalues] + vals = rvalues[geom_est] assert np.allclose(getattr(ttree, geom_est), vals) @@ -148,19 +147,20 @@ def test_tmodel_growth_access(sequence, raises): def test_tmodel_calculate_growth(rvalues, row): """Test calculate_growth with scalars. - Runs a test of the tmodel.TTree against output from the R implementation. - The values in the test come from simulating a 100 year run starting from - a stem diameter of 0.1 and with an annual GPP value of 7. Each row in the - file is the successive growth, but this test just runs some values from the - sequence. + Runs a test of the tmodel.TTree against output from the R implementation. The values + in the test come from simulating a 100 year run starting from a stem diameter of + 0.1. Each row in the file is the successive growth, but this test just runs some + values from the sequence. """ from pyrealm.constants.tmodel_const import TModelTraits from pyrealm.tmodel import TTree # create a tree with the initial diameter given in the row - ttree = TTree(diameters=rvalues[row]["diameter"], traits=TModelTraits()) - ttree.calculate_growth(7) + row = rvalues.iloc[row] + traits = TModelTraits() + ttree = TTree(diameters=row["diameter"], traits=traits) + ttree.calculate_growth(row["potential_gpp"] / (1 - traits.resp_f)) for growth_est in ( "delta_d", @@ -170,7 +170,7 @@ def test_tmodel_calculate_growth(rvalues, row): "delta_mass_stm", "delta_mass_frt", ): - assert np.allclose(getattr(ttree, growth_est), rvalues[row][growth_est]) + assert np.allclose(getattr(ttree, growth_est), row[growth_est]) def test_tmodel_calculate_growth_array(rvalues): @@ -180,9 +180,10 @@ def test_tmodel_calculate_growth_array(rvalues): from pyrealm.tmodel import TTree # create a tree with the initial diameter given in the row - diams = np.array([rw["diameter"] for rw in rvalues]) - ttree = TTree(diameters=diams, traits=TModelTraits) - ttree.calculate_growth(7) + diams = np.array(rvalues["diameter"]) + traits = TModelTraits() + ttree = TTree(diameters=diams, traits=traits) + ttree.calculate_growth(rvalues["potential_gpp"] / (1 - traits.resp_f)) for growth_est in ( "delta_d", @@ -192,8 +193,7 @@ def test_tmodel_calculate_growth_array(rvalues): "delta_mass_stm", "delta_mass_frt", ): - vals = [rw[growth_est] for rw in rvalues] - assert np.allclose(getattr(ttree, growth_est), vals) + assert np.allclose(getattr(ttree, growth_est), rvalues[growth_est]) # @pytest.mark.parametrize(