LandscapeDNDC 1.37.0
Loading...
Searching...
No Matches
mbe_plant.h
1
10
11#ifndef MoBiLE_PLANT_H_
12#define MoBiLE_PLANT_H_
13
14#include "ld_legacy.h"
15
16#include <ld_plants.h>
17#include <string/cbm_string.h>
18
19namespace ldndc {
20
21typedef speciesparameters::speciesparameters_set_t MoBiLE_PlantParameters;
22class LDNDC_API MoBiLE_PlantSettings : public LD_PlantSettings< MoBiLE_PlantParameters >
23{
24public:
25 MoBiLE_PlantSettings( size_t /* canopy layers */,
26 char const * /*name*/,
27 char const * /*type*/,
28 char const * /*group*/,
29 MoBiLE_PlantParameters const * = NULL /*parameters*/);
30
31 size_t nb_ageclasses;
32 size_t nb_foliagelayers;
33 size_t nb_soillayers;
34};
35
36
37class MoBiLE_State;
38class MoBiLE_PlantVegetation;
39class LDNDC_API MoBiLE_Plant : public LD_Plant< MoBiLE_PlantSettings >
40{
41public:
42 typedef MoBiLE_PlantParameters Parameters;
43 typedef MoBiLE_PlantSettings Settings;
44public:
45 MoBiLE_Plant( MoBiLE_PlantSettings const *);
46 ~MoBiLE_Plant();
47
48 void switchparameters( Parameters _params){ m_parameters = _params; };
49
50 char const * cname() const
51 { return this->name().c_str(); }
52 char const * ctype() const
53 { return this->type().c_str(); }
54 char const * cgroup() const
55 { return this->group().c_str(); }
56 species::species_group_e groupId() const
57 { return this->parameters()->GROUP(); }
58
59 bool is_family( char const * /*family*/) const;
60
61 size_t nb_ageclasses() const;
62 size_t NB_AGECLASSES() const
63 { return this->m_plantsettings.nb_ageclasses; }
64 size_t nb_foliagelayers() const;
65 size_t NB_FOLIAGELAYERS() const
66 { return this->m_plantsettings.nb_foliagelayers; }
67 size_t nb_soillayers() const;
68 size_t NB_SOILLAYERS() const
69 { return this->m_plantsettings.nb_soillayers; }
70
71 size_t slot;
72
73 lerr_t clear();
74 lerr_t initialize();
75
76public: /*plant attributes*/
77
81
82 /* day of foliage budburst [-] */
83 int dEmerg;
84 /* yearly nitrogen fixation [g:10^3:m^-2:a^-1] */
85 double a_fix_n;
86 /* crown diameter relation to breast height diameter [%] */
87 double cdr;
88 /* average individual diameter at ground height [m] */
89 double dbas;
90 /* average individual diameter at 1.3 m height [m] */
91 double dbh;
92 /* upper height of vegetation (i.e., average height of highest vegetation cohort) [m] */
93 double height_max;
94 /* height of canopy start (from the ground) [m] */
95 double height_at_canopy_start;
96 /* root depth [m] */
97 double rooting_depth;
98 /* potential (supported by tree dimension and stand density) leaf area index [m2 m-2] */
99 double lai_pot;
100 /* maximum (supported by foliage and bud biomass) leaf area index [m2 m-2] */
101 double lai_max;
102
103 /* carbon increase of reproductive tissue per time step. [g:10^3:m^-2] */
104 double dcBud, d_dcBud;
105 /* carbon allocated to pool of free available substrat per time step. [g:10^3:m^-2] */
106 double dcFac, d_dcFac;
107 /* carbon increase of foliage per time step. [g:10^3:m^-2] */
108 double dcFol, d_dcFol;
109 /* carbon increase of fine roots per time step. [g:10^3:m^-2] */
110 double dcFrt, d_dcFrt;
111 /* carbon increase of sapwood per time step. [g:10^3:m^-2] */
112 double dcSap, d_dcSap;
113
114 /* oxidized nitrogen uptake per time step. [g:10^3:m^-2] */
115 double nox_uptake, d_nox_uptake;
116 /* reduced nitrogen uptake per time step. [g:10^3:m^-2] */
117 double nhy_uptake, d_nhy_uptake;
118 /* N2 uptake per time step. [g:10^3:m^-2] */
119 double n2_fixation, d_n2_fixation;
120
121 /* relative state of foliage flushing. [%] */
122 double dvsFlush, dvsFlushOld;
123 /* relative state of foliage senescence. [%] */
124 double dvsMort;
125 /* development stage of wood growth. [%] */
126 double dvsWood;
127
128 /* carbon loss from exudation [kgC m-2] */
129 double exsuLoss, d_exsuLoss;
130 /* area fraction of species relative to total ground coverage [%] */
131 double f_area;
132 /* fraction of vegetation group potential transpiration to total potential transpiration [-] */
133 double f_ptransp;
134 /* branch fraction of total (sap)wood [%] */
135 double f_branch;
136 /* reduction factor for initialization of the nitrogen and basic cation concentration relative to the maximum [%] */
137 double f_ncc;
138 /* relative state of free available carbon [-] */
139 double f_fac;
140 /* drought stress factor [%] */
141 double f_h2o, d_f_h2o;
142 /* heat stress factor [-] */
143 double f_heat;
144 /* heat stress grainfilling factor - daily minimum [-] */
145 double f_heat_daily;
146 /* heat stress grainfilling factor [-] */
147 double f_heat_gf;
148 /* vernalization factor */
149 double chill_factor;
150 /* dry weight of reproductive tissue [kgDW m-2] */
151 double mBud;
152 /* dry weight of reproduction mass at the end of the last year [kgDW m-2] */
153 double mBudStart;
154 /* dry weight of species specific core (dead) wood [kgDW m-2] */
155 double mCor;
156 /* dry weight of dead structural matter [kgDW m-2] */
157 double dw_dst;
158 /* living foliage biomass [kgDW m-2] */
159 double mFol;
160 /* dry weight of dead foliage biomass [kgDW m-2] */
161 double dw_dfol;
162 /* maximum foliage mass aimed at [kgDW m-2] */
163 double mFolMax;
164 /* minimum foliage mass aimed at [kgDW m-2] */
165 double mFolMin;
166 /* living fine root biomass [kgDW m-2] */
167 double mFrt;
168 /* sapwood biomass [kgDW m-2] */
169 double mSap;
170 /* dry weight of living structural matter [kgDW m-2] */
171 double dw_lst;
172
173 /* nitrogen concentration in reproductive tissue [kgN kgDW-1] */
174 double ncBud;
175 /* nitrogen concentration in heartwood [kgN kgDW-1] */
176 double ncCor;
177 /* nitrogen concentration in living foliage [kgN kgDW-1] */
178 double ncFol;
179 /* nitrogen concentration in fine roots [kgN kgDW-1] */
180 double ncFrt;
181 /* nitrogen concentration in sapwood [kgN kgDW-1] */
182 double ncSap;
183
184 /* nitrogen in dead foliage [kgN m-2] */
185 double n_dfol;
186 /* nitrogen in dead structural tissue [kgN m-2] */
187 double n_dst;
188 /* nitrogen in living structural tissue [kgN m-2] */
189 double n_lst;
190
191 /* nitrogen litter input from buds or reproductive tissue [kgN m-2] */
192 double nLitBud, d_nLitBud;
193 /* nitrogen litter input from foliage [kgN m-2] */
194 double nLitFol, d_nLitFol;
195 /* aboveground sapwood nitrogen from events [kgN m-2] */
196 double nLitWoodAbove, d_nLitWoodAbove;
197
198 /* nitrogen retention from senescence per day [kgN] */
199 double n_retention, d_n_retention;
200
201 /* sapwood area (at 1.3 m height) to foliage area ratio [-] */
202 double qsfa;
203 /* sapwood to foliage biomass ratio [-] */
204 double qsfm;
205
206 /* mean plant water potential [MPa] */
207 double psi_mean;
208 /* canopy water potential [MPa] */
209 double psi_cr;
210 /* soil to root plant water potential [MPa] */
211 double psi_sr;
212 /* plant water potential at air entry point (for embolism) [MPa] */
213 double psi_thresh;
214 /* predawn plant water potential [MPa] */
215 double psi_pd;
216
217 /* residual respiration from reproductive tissue [kgC m-1] */
218 double rBud, d_rBud;
219 /* residual respiration from foliage [kgC m-1] */
220 double rFol, d_rFol;
221 /* residual respiration from fine roots [kgC m-1] */
222 double rFrt, d_rFrt;
223 /* total growth respiration [kgC m-1] */
224 double rGro, d_rGro;
225 /* total growth respiration within the soil [kgC m-1] */
226 double rGroBelow, d_rGroBelow;
227 /* total residual respiration [kgC m-1] */
228 double rRes, d_rRes;
229 /* residual respiration from sapwood [kgC m-1] */
230 double rSap, d_rSap;
231 /* residual respiration from sapwood [kgC m-1] */
232 double rSapBelow, d_rSapBelow;
233 /* total transport and uptake respiration [kgC m-1] */
234 double rTra, d_rTra;
235
236 /* senescence of reproductive tissue [kgDW m-2] */
237 double sBud, d_sBud;
238 /* foliage senescence per time step [kgDW m-2] */
239 double sFol, d_sFol;
240 /* fine root senescence per time step [kgDW m-2] */
241 double sFrt, d_sFrt;
242 /* aboveground sapwood lost to the litter [kgDW m-2] */
243 double sWoodAbove, d_sWoodAbove;
244
245 /* weighted growing degree days [oC] */
246 double growing_degree_days;
247
248 /* previous day water supply modifier */
249 double fwatOld;
250
251 /* number of trees per ha [-] */
252 double tree_number;
253
254 /* root aerenchyme transport coefficient */
255 double root_tc;
256
257 /* resistance of water transport through the xylem (roots + stem) [MPa s m2 mol-1] */
258 double xylem_resistance;
259
260 /* estimated stem radius reduction (shrinkage) due to partial water loss [um tree-1] */
261 double wc_rel;
262
263 /* relative water content (RWC) of sapwood+bark (1 = fully hydrated, 0 = free available water fully depleted) */
264 double stem_shrinkage;
265 /* predawn (minimum) tree water deficit = maximum diurnal radius deviation from water saturated xylem state [um] */
266 double twd_pd_vt;
267 /* maximum (minimum) tree water deficit = minimum diurnal radius deviation from water saturated xylem state [um] */
268 double twd_max_vt;
269
270 /* foliage biomass per age class [kgDW] */
271 double * mFol_na;
272 /* foliage senescence per age class per time step [kgDW m-2] */
273 double * sFol_na, * d_sFol_na;
274
275 /* layer specific carbon uptake (photosynthesis) [kgC m-2] */
276 double * carbonuptake_fl, * d_carbonuptake_fl;
277 /* layer specific intercellular concentration of CO2 and under standard conditions [umol mol-1] */
278 double * co2i_fl, * co2i_std_fl, * d_co2i_fl;
279 /* layer specific leaf internal O2 concentration [umol m-2] */
280 double * o2i_fl, * o2i_std_fl;
281 /* layer specific CO2 compensation point at 25oC per canopy layer and under standard conditions [umol m-2] */
282 double * co2comp25_fl, * co2comp25_std_fl;
283 /* layer specific MEP [umol l-1] */
284 double * mep_fl;
285 /* layer specific DMADP [umol l-1] */
286 double * dmadp_fl;
287 /* layer specific DXP [umol l-1] */
288 double * dxp_fl;
289 /* layer specific GDP [umol l-1] */
290 double * gdp_fl;
291 /* layer specific IDP [umol l-1] */
292 double * idp_fl;
293 /* layer specific isoprene emission [umol m-2] */
294 double * isoprene_emission_fl, * d_isoprene_emission_fl;
295 /* layer specific monoterpene emission [umol m-2] */
296 double * monoterpene_emission_fl, * d_monoterpene_emission_fl;
297 /* layer specific monoterpene emission from storages [umol m-2] */
298 double * monoterpene_s_emission_fl, * d_monoterpene_s_emission_fl;
299 /* layer specific ovoc emission from storages [umol m-2] */
300 double * ovoc_emission_fl, * d_ovoc_emission_fl;
301 /* Michaelis-Menten constant for CO2 reaction of rubisco per canopy layer and under standard conditions [umol mol-1 ubar-1] */
302 double * kco2_fl, * kco2_std_fl;
303 /* Michaelis-Menten constant for O2 reaction of rubisco per canopy layer and under standard conditions [umol mol-1 ubar-1] */
304 double * ko2_fl, * ko2_std_fl;
305 /* layer specific nitrogen concentration [gN gDW-2] */
306 double* nc_fl;
307 /* leaf area index [m2 m-2] */
308 double * lai_fl;
309 /* relative amount of foliage per layer [%] */
310 double * fFol_fl;
311 /* deposited nh3 in the canopy [kg m-2] */
312 double * nh3_fl;
313 /* deposited nh4 in the canopy [kg m-2] */
314 double * nh4_fl;
315 /* deposited no3 in the canopy [kg m-2] */
316 double * no3_fl;
317 /* layer specific relative conductance [%] */
318 double * relativeconductance_fl, * d_relativeconductance_fl;
319 /* specific foliage area [m2 kgDW-1] */
320 double * sla_fl;
321 /* layer specific ATP production [umol m-2LA s-1] */
322 double * atp_fl;
323 /* layer specific ATP pool [umol kgDW-1] */
324 double * atp_pool_fl;
325 /* layer specific triose phosphate production [umol m-2LA s-1] */
326 double * tp_fl;
327 /* layer specific triose phosphate pool [umol kgDW-1] */
328 double * tp_pool_fl;
329 /* layer specific NADPH production [umol m-2 s-1] */
330 double * nadph_fl;
331 /* layer specific NADPH pool [umol kgDW-1] */
332 double * nadph_pool_fl;
333 /* layer specific activity state of isoprene synthase [nmol m-2 s-1] */
334 double * isoAct_fl;
335 /* layer specific activity state of monoterpene synthase [nmol m-2 s-1] */
336 double * monoAct_fl;
337 /* layer specific standard emission factor of isoprene (can be calculated from isoAct_fl) [ug gDW-1 h-1] */
338 double * ef_iso_fl;
339 /* layer specific standard emission factor of monoterpenes (can be calculated from monoAct_fl) [ug gDW-1 h-1] */
340 double * ef_mono_fl;
341 /* layer specific electron transport capacity at 25oC for full light adjusted leaves [umol m-2 s-1] */
342 double * jAct25_fl;
343 /* layer specific potential electron transport capacity per canopy layer under current light and temperature conditions [umol m-2 s-1] */
344 double * jPot_fl, * d_jPot_fl;
345 /* layer specific electron transport capacity at 25oC per canopy layer [umol m-2 s-1] */
346 double * jMax25_fl;
347 /* layer specific actual electron transport capacity per canopy layer and under standard conditions [umol m-2 s-1] */
348 double * jMax_fl, * jMax_std_fl, * d_jMax_fl;
349 /* layer specific dark respiration at 25oC per canopy layer [umol m-2 s-1] */
350 double * rdAct25_fl;
351 /* layer specific actual dark respiration per canopy layer [umol m-2 s-1] */
352 double * rd_fl;
353 /* layer specific activity state of rubisco at 25oC for full light adjusted leaves [umol m-2 s-1] */
354 double * vcAct25_fl;
355 /* layer specific activity state of rubisco with light and CO2 but not temperature restrictions [umol m-2 s-1] */
356 double * vcAct_fl;
357 /* layer specific activity state of rubisco at 25oC per canopy layer [umol m-2 s-1] */
358 double * vcMax25_fl;
359 /* layer specific actual activity state of rubisco per canopy layer and under standard conditions [umol m-2 s-1] */
360 double * vcMax_fl, * vcMax_std_fl;
361
362 /* fine root length per layer [m] */
363 double * rootlength_sl;
364 /* relative amount of fine roots per layer per species. [%] */
365 double * fFrt_sl;
366 /* fine root nitrogen litter input from events [kgN m-2] */
367 double * nLitFrt_sl, * d_nLitFrt_sl;
368 /* fine root senescence from events [kgDW m-2] */
369 double * sFrt_sl, * d_sFrt_sl;
370 /* belowground sapwood senescence from mortality events [kgDW m-2] */
371 double * sWoodBelow_sl, * d_sWoodBelow_sl;
372 /* belowground sapwood nitrogen from events [kgN m-2] */
373 double * nLitWoodBelow_sl, * d_nLitWoodBelow_sl;
374 /* absolut hypoxia per layer per species (not scaled by fFrt). [%] */
375 double * hypoxia_sl;
376
377 /* method for dimensional growth calculation (cone-based or taper-based) */
378 bool is_tapergrowth;
379public:
380
382 void reset();
383
385 double lai() const
386 { return cbm::sum( this->lai_fl, this->nb_foliagelayers()); };
387
395 double interception_capacity() const
396 { return this->aboveground_wood() * this->parameters()->MWWM()
397 + this->lai() * this->parameters()->MWFM(); };
398
406 double stand_volume() const
407 { return this->stem_wood() / (this->parameters()->DSAP() * cbm::DM3_IN_M3) * cbm::M2_IN_HA; };
408
409 double dead_structural_matter() const
410 { return ( this->mCor + this->dw_dst); };
411
412 double living_structural_matter() const
413 { return ( this->mSap + this->dw_lst); };
414
415 double foliage_matter() const
416 { return ( this->mFol + this->dw_dfol); };
417
419 double aboveground_biomass() const
420 { return ( this->aboveground_structural_matter() + this->mFol + this->dw_dfol + (this->parameters()->TUBER() ? 0.0 : this->mBud)); };
421
423 double aboveground_structural_matter() const
424 { return ( this->mSap + this->mCor + this->dw_lst + this->dw_dst) * ( 1.0 - this->parameters()->UGWDF()); };
425
427 double aboveground_wood() const
428 { return ( this->mSap + this->mCor) * ( 1.0 - this->parameters()->UGWDF()); };
429
431 double belowground_biomass() const
432 { return ( this->belowground_structural_matter() + this->mFrt + (this->parameters()->TUBER() ? this->mBud : 0.0)); };
433
435 double belowground_structural_matter() const
436 { return ( this->mSap + this->mCor + this->dw_lst + this->dw_dst) * this->parameters()->UGWDF(); };
437
439 double belowground_wood() const
440 { return ( this->mSap + this->mCor) * this->parameters()->UGWDF(); };
441
443 double stem_wood() const
444 { return this->aboveground_wood() * ( 1.0 - this->f_branch); };
445
447 double branch_wood() const
448 { return this->aboveground_wood() * this->f_branch; };
449
451 double total_biomass() const
452 { return this->mSap + this->dw_lst +
453 this->mCor + this->dw_dst +
454 this->mFol + this->dw_dfol +
455 this->mBud + this->mFrt; };
456
458 double n_cor() const
459 { return this->mCor * this->ncCor; }
460 double nc_cor() const
461 { return this->ncCor; }
462
464 double n_sap() const
465 { return this->mSap * this->ncSap; }
466 double nc_sap() const
467 { return this->ncSap; }
468
470 double n_frt() const
471 { return this->mFrt * this->ncFrt; }
472 double nc_frt() const
473 { return this->ncFrt; }
474
476 double n_fol() const
477 { return this->mFol * this->ncFol; }
478 double nc_fol() const
479 { return this->ncFol; }
480
482 double n_bud() const
483 { return this->mBud * this->ncBud; }
484 double nc_bud() const
485 { return this->ncBud; }
486
488 double nc_lst() const
489 { return cbm::flt_greater_zero( this->mSap + this->dw_lst) ? (this->n_sap() + this->n_lst) / (this->mSap + this->dw_lst): 0.0; }
490
492 double nc_dst() const
493 { return cbm::flt_greater_zero( this->mCor + this->dw_dst) ? (this->n_cor() + this->n_dst) / (this->mCor + this->dw_dst): 0.0; }
494
496 double aboveground_nitrogen() const
497 { return ( (this->n_sap() + this->n_lst + this->n_cor() + this->n_dst) * ( 1.0 - this->parameters()->UGWDF())
498 + this->n_fol() + this->n_dfol
499 + (this->parameters()->TUBER() ? 0.0 : this->n_bud())); };
500
502 double belowground_nitrogen() const
503 { return ( (this->n_sap() + this->n_lst + this->n_cor() + this->n_dst) * this->parameters()->UGWDF()
504 + this->n_frt() + (this->parameters()->TUBER() ? this->n_bud() : 0.0)); };
505
507 double total_nitrogen() const
508 { return this->n_sap() + this->n_lst + this->n_cor() + this->n_dst + this->n_fol() + this->n_dfol + this->n_bud() + this->n_frt(); };
509
511 double cn_ratio() const
512 { return cbm::flt_greater_zero( total_nitrogen()) ? total_biomass() * cbm::CCDM / total_nitrogen() : 0.0; };
513
514 /* Carbon of reproductive tissue [kgC m-2] */
515 double c_fru() const
516 { return this->mBud * cbm::CCDM; };
517
518 /* Carbon of dead structural matter [kgC m-2] */
519 double c_dst() const
520 { return (this->mCor + this->dw_dst) * cbm::CCDM; };
521
522 /* Carbon of living foliage biomass [kgC m-2] */
523 double c_fol() const
524 { return this->mFol * cbm::CCDM; };
525
526 /* Carbon of dead foliage biomass [kgC m-2] */
527 double c_dfol() const
528 { return this->dw_dfol * cbm::CCDM; };
529
530 /* Carbon of living fine root biomass [kgC m-2] */
531 double c_frt() const
532 { return this->mFrt * cbm::CCDM; };
533
534 /* Carbon of living structural matter [kgC m-2] */
535 double c_lst() const
536 { return (this->mSap + this->dw_lst) * cbm::CCDM; };
537
539 double f_fol_maximum() const
540 {
541 double f_fol_max( 0.0);
542 for ( size_t fl = 0; fl < this->nb_foliagelayers(); fl++)
543 {
544 if ( cbm::flt_greater( this->fFol_fl[fl], f_fol_max))
545 {
546 f_fol_max = this->fFol_fl[fl];
547 }
548 }
549 return f_fol_max;
550 };
551
552 double n_leaf_surface() const
553 {
554 double n_tot( 0.0);
555 for ( size_t fl = 0; fl < this->nb_foliagelayers(); fl++)
556 {
557 n_tot += nh4_fl[fl] + no3_fl[fl];
558 }
559 return n_tot;
560 }
561
563 double m_fol_fl( size_t _fl) const
564 { return this->mFol * this->fFol_fl[_fl]; }
565
575 double belowground_respiration()
576 { return rGroBelow + rFrt + rTra + rSapBelow + (parameters()->TUBER() ? rBud : 0.0); };
577
578 double d_belowground_respiration()
579 { return d_rGroBelow + d_rFrt + d_rTra + d_rSapBelow + (parameters()->TUBER() ? d_rBud : 0.0); };
580
581
582public:
583 /* properties */
584 ldate_t seeding_date;
585 double initial_biomass;
586 bool is_covercrop;
587
588private:
589 MoBiLE_PlantSettings m_plantsettings;
590 friend class MoBiLE_PlantVegetation;
591 MoBiLE_PlantVegetation const * m_plantvegetation;
592};
593
594class LDNDC_API MoBiLE_PlantVegetation : public LD_PlantVegetation< MoBiLE_Plant >
595{
596public:
597 MoBiLE_PlantVegetation( LD_PlantsParametersDB const * = NULL);
598 ~MoBiLE_PlantVegetation();
599
600 MoBiLE_Plant * new_plant( MoBiLE_PlantSettings const *);
601 lerr_t delete_plant( char const * /*plant name*/);
602
603 bool is_family( MoBiLE_Plant const *, char const * /*family*/) const;
604 bool is_family( char const * /*plant type*/, char const * /*family*/) const;
605
606 void set_input( speciesparameters::input_class_speciesparameters_t const * _speciesparameters)
607 { this->m_speciesparameters = _speciesparameters; }
608 MoBiLE_PlantParameters get_parameters( char const * /*plant type*/);
609
610 size_t slot_cnt();
611
612 double canopy_height();
613 size_t canopy_layers_used();
614
615 double lai();
616 double lai_fl( size_t /* foliage layer */);
617 double dw_frt();
618 double mfrt_sl( size_t /* soil layer */);
619 double rootlength_sl( size_t /* soil layer */);
620 double root_density_sl( size_t /* soil layer */, double , bool );
621 double area_cover();
622
623private:
624 speciesparameters::input_class_speciesparameters_t const * m_speciesparameters;
625};
626
627typedef MoBiLE_PlantVegetation::Iterator PlantIterator;
628typedef MoBiLE_PlantVegetation::GroupIterator< species::crop > CropIterator;
629typedef MoBiLE_PlantVegetation::GroupIterator< species::grass > GrassIterator;
630typedef MoBiLE_PlantVegetation::GroupIterator< species::wood > TreeIterator;
631
632} /* namespace ldndc */
633
634
635#endif /* !PLANT_H_ */
Spatially explicit groundwater model.
Definition airchemistryput.h:15