1#ifndef M1D_MOD_WATERCYCLE_CANOAK_H
2#define M1D_MOD_WATERCYCLE_CANOAK_H
5#define sze LConf::flPot + WCC_FLEX
6#define sze3 3 * LConf::flPot + WCC_FLEX
10#include "watercyclemodule.h"
16struct input_variables{
50struct flux_variables {
79 double sensible_heat_flux;
83 double dispersion[sze3][sze];
89 double air_density_mole;
90 double relative_humidity;
98 sensible_heat_flux = 0.0;
106 air_density_mole = 0.0;
107 relative_humidity = 0.0;
112struct surface_resistances{
129struct bole_respiration_structure{
131 double respiration_mole;
132 double respiration_mg;
138struct canopy_architecture{
144struct non_dimensional_variables{
165struct boundary_layer_resistances{
170 boundary_layer_resistances ()
274 double density_litter;
396struct solar_radiation_variables{
398 double prob_beam[sze];
411 double beam_flux_nir[sze];
415 double nir_soil_refl;
421 double par_shade[sze];
423 double beam_flux_par[sze];
424 double par_down[sze];
427 double quantum_sun[sze];
428 double quantum_sh[sze];
433 double par_soil_refl;
435 double rnet_sun[sze];
445 solar_radiation_variables ()
466 for (
int n1 = 0; n1 <= sze; n1++){
475 beam_flux_nir[n1] = 0.0;
478 beam_flux_par[n1] = 0.0;
489struct soil_variables{
491 double z_soil[soilsze];
492 double bulk_density[soilsze];
493 double T_soilIni[soilsze];
494 double T_soil[soilsze];
495 double k_conductivity_soil[soilsze];
496 double k_conductivity_soil_norm[soilsze];
497 double cp_soil[soilsze];
498 double cp_soil_norm[soilsze];
501 double sfc_temperature;
504 double resistance_h2o;
506 double water_content_15cm;
507 double water_content_litter;
508 double water_content[soilsze];
512 double clay_fraction;
520 double respiration_mole;
521 double respiration_mg;
522 double base_respiration;
530 double swp_mm[soilsze];
535 double dwat[soilsze];
536 double watmin[soilsze];
537 double watsat[soilsze];
538 double smpsat[soilsze];
540 double hksat[soilsze];
541 double root[soilsze];
542 double h2osoi[soilsze];
545 double clay[soilsze];
546 double sand[soilsze];
550 double qout[soilsze];
556 sfc_temperature = 0.0;
559 resistance_h2o = 0.0;
560 water_content_15cm = 0.0;
561 water_content_litter = 0.0;
571 respiration_mole = 0.0;
572 respiration_mg = 0.0;
573 base_respiration = 0.0;
589 double tair_filter[sze3];
591 double rhov_air[sze3];
592 double rhov_filter[sze3];
593 double co2_air[sze3];
598 double Gfunc_solar[sze];
599 double Gfunc_sky[sze][szeang];
601 double isopreneflux[sze];
608 double sour13co2[sze];
611 double D13C_long[sze];
612 double d13Cair[sze3];
613 double d13Cplant[sze];
614 double R13_12_air[sze3];
615 double Rplant_sun[sze];
616 double Rplant_shd[sze];
618 double Rresp_sum[sze];
619 double Rresp_ave[sze];
621 double recycle[sze3];
623 double source_co2[sze];
625 double dPsdz_mg[sze];
631 double dStomCondz[sze];
633 double sun_frac[sze];
634 double sun_tleaf[sze];
640 double sun_rbco2[sze];
645 double sun_D13_long[sze];
646 double sun_ccca[sze];
647 double sun_cica[sze];
649 double sun_T_filter[sze];
652 double sun_resp[sze];
653 double sun_isopreneflux[sze];
656 double shd_frac[sze];
657 double shd_tleaf[sze];
663 double shd_rbco2[sze];
668 double shd_D13_long[sze];
669 double shd_ccca[sze];
670 double shd_cica[sze];
672 double shd_T_filter[sze];
675 double shd_resp[sze];
676 double shd_isopreneflux[sze];
681 for (
int n0 = 0; n0 <= sze3; n0++){
683 tair_filter[n0] = 0.0 ;
686 rhov_filter[n0] = 0.0;
692 R13_12_air[n0] = 0.0;
696 for (
int n1 = 0; n1 <= sze; n1++){
700 Gfunc_solar[n1] = 0.0;
702 isopreneflux[n1] = 0.0;
709 Rplant_shd[n1] = 0.0;
712 source_co2[n1] = 0.0;
720 dStomCondz[n1] = 0.0;
722 sun_tleaf[n1] = 0.0 ;
732 sun_D13_long[n1] = 0.0;
736 sun_T_filter[n1] = 0.0;
740 sun_isopreneflux[n1] = 0.0;
743 shd_tleaf[n1] = 0.0 ;
753 shd_D13_long[n1] = 0.0;
757 shd_T_filter[n1] = 0.0;
761 shd_isopreneflux[n1] = 0.0;
782struct isotope_variable{
798class WaterCycleCANOAK :
public WaterCycleModule {
800 struct input_variables input;
801 struct flux_variables flux;
802 struct time_variables time_var;
803 struct meteorology met;
804 struct surface_resistances sfc_res;
806 struct bole_respiration_structure bole;
807 struct canopy_architecture canopy;
808 struct non_dimensional_variables non_dim;
809 struct boundary_layer_resistances bound_layer_res;
810 struct solar_radiation_variables solar;
811 struct soil_variables soil;
813 struct isotope_variable Cisotope;
814 struct other_globals og;
816 int ts,nd,ndStart,ndEnd,tsStart,tsEnd,tsMax,ny,doy;
817 bool leaf_out,leaf_full,leaf_fall,leaf_fall_complete;
818 double ts_co2_concentration,ts_airtemperature,ts_shortwaveradiance,ts_airpressure,ts_watervaporsaturationdeficit,ts_precipitation,ts_windspeed;
819 double ZONE,LAT,LONG,TAMP,temp_ny;
820 double TAU,RCMIN,VCMAX25,JMAX25,LLEAF,BFACT1,BFACT2,FSTO,
821 RCPAR1,TCPAR1,SRPAR1,RCNIR1,TCNIR1,SRNIR1,
822 RCPAR2,TCPAR2,SRPAR2,RCNIR2,TCNIR2,SRNIR2,
823 RCPAR3,TCPAR3,SRPAR3,RCNIR3,TCNIR3,SRNIR3,
824 RCPAR4,TCPAR4,SRPAR4,RCNIR4,TCNIR4,SRNIR4;
826 double h_litter,clayf,bdens;
827 double fH2O,laiPot,wc_sfc,wc_15cm,wc_litter,t_firstmin;
829 WaterCycleCANOAK(ModelCore & modelCore,
unsigned int timeInterval) : WaterCycleModule(modelCore, timeInterval),
830 modelCore_(modelCore),
831 time_(modelCore.getLandscape().getTime()),
832 si_(modelCore.getInput().getSite()),
833 sipar_(modelCore.getInput().getParameter().getSitePar()),
834 sppar_(modelCore.getInput().getParameter().getSpeciesPar()),
835 ac_(modelCore.getSubstates().getAc()),
836 mc_(const_cast<MicroClimate&>(modelCore.getSubstates().getMc())),
837 sc_(modelCore.getSubstates().getSc()),
838 wc_(const_cast<WaterCycle &>(modelCore.getSubstates().getWc())),
839 ph_(modelCore.getSubstates().getPh()),
840 vs_(modelCore.getSubstates().getVs())
842 this->setName(
"WaterCycleCANOAK");
846 ~WaterCycleCANOAK() {
852 sipar_, time_.ny(), time_.nd() , time_.ndEnd(), time_.ts(), time_.tsMax(), time_.nd(),
854 time_.ndStart(), time_.tsStart(), time_.tsMax(),
855 si_.vtMax, si_.flMax, si_.slMax, si_.slFloor,
856 si_.name_vt, si_.ZONE, si_.LONG,si_.LAT, si_.TAMP,
857 si_.wcMax_sl, si_.wcMin_sl, si_.h_sl, si_.h_fl,
858 si_.depth_vt, si_.hMax_vt, si_.hMin_vt, si_.clay_sl,
859 si_.dens_sl, si_.poro_sl, si_.stonef_sl, si_.fcOrg_sl,
860 mc_.temp_ny, ac_.ts_co2_concentration, mc_.ts_airpressure, mc_.ts_airtemperature,
861 mc_.ts_shortwaveradiance, mc_.ts_watervaporsaturationdeficit, mc_.ts_windspeed, mc_.ts_precipitation,
862 ph_.lai_vt, ph_.lai_fl, ph_.dvsFlush_vt, ph_.dvsMort_vt,
863 vs_.f_vt, vs_.laiMax_vt, vs_.fFrt_vtsl,
864 mc_.temp_a, mc_.temp_l,mc_.temp_sl, ac_.ts_co2_concentration_fl,
865 wc_.wc_fl, wc_.wc_sl, wc_.ice_sl, wc_.fH2O_vt,
866 wc_.fH2O_sl, wc_.flux_sl, wc_.evapot, wc_.transp,
867 wc_.runoff, wc_.percol, wc_.evacep, wc_.evasoil,
868 wc_.throughf,mc_.dispersion);
871 void CANOAK(
double *vpd_layer,
double *disper);
874 (
double HEIGHT,
double LAI,
double SAI,
878 (std::string SITEname,
double HH,
double DD,
882 (
int doy,
int ts,
int tsMax,
883 double ts_airtemperature,
double ts_shortwaveradiance,
double ts_watervaporsaturationdeficit,
884 double ts_windspeed,
double ts_precipitation,
double ts_co2_concentration,
double ts_airpressure,
885 double t_firstmin,
double wc_15cm,
double wc_litter);
887 void SOIL_RESPIRATION();
890 void BOLE_RESPIRATION
891 (
double BFACT1,
double BFACT2);
893 void ENERGY_AND_CARBON_FLUXES(
double FSTO,
double *vpd_layer);
895 void DIFFUSE_DIRECT_RADIATION();
903 double SKY_IR(
double a);
907 void G_FUNC_DIFFUSE();
913 double GAMMAF(
double a);
916 void LAI_TIME(
double lai);
922 double TEMP_FUNC(
double a,
double b,
double c,
double d,
double e);
924 double TBOLTZ(
double a,
double b,
double c,
double d);
926 void BOUNDARY_RESISTANCE(
double a,
double b);
928 void FRICTION_VELOCITY(
double &metH_old);
930 void CONC(
double *ap1,
double *ap2,
double c,
double d,
double e);
933 (
double b,
double d,
double e,
935 double &apc,
double &h,
double &i,
936 double &j,
double &vpd_leaf);
938 double SFC_VPD(
double a,
double b,
double c);
943 void SOIL_ENERGY_BALANCE();
945 double SOIL_SFC_RESISTANCE(
double a);
958 (
double TAU,
double RCMIN,
double VCMAX25,
double JMAX25,
double LLEAF,
959 double RCPAR1,
double TCPAR1,
double SRPAR1,
960 double RCNIR1,
double TCNIR1,
double SRNIR1,
961 double RCPAR2,
double TCPAR2,
double SRPAR2,
962 double RCNIR2,
double TCNIR2,
double SRNIR2,
963 double RCPAR3,
double TCPAR3,
double SRPAR3,
964 double RCNIR3,
double TCNIR3,
double SRNIR3,
965 double RCPAR4,
double TCPAR4,
double SRPAR4,
966 double RCNIR4,
double TCNIR4,
double SRNIR4,
967 int ndStart,
int ndEnd,
int tsStart,
int tsEnd,
int tsMax,
int doy,
968 double LAT,
double LONG,
double ZONE,
double TAMP,
969 double temp_ny,
double ht,
double laiPot,
970 double h_litter,
double bdens,
double clayf,
971 double wc_15cm,
double wc_litter);
974 int SOILH2O(
int tsMax,
double lai);
976 int TRIDIA(
double &checkChange);
980 ModelCore & modelCore_;
983 SitePar
const & sipar_;
984 SpeciesPar
const & sppar_;
986 AirChemistry
const & ac_;
988 SoilChemistry
const & sc_;
990 Physiology
const & ph_;
991 VegStructure
const & vs_;
996 unsigned int ny,
unsigned int nd,
unsigned int ndEnd,
unsigned int ts,
unsigned int tsEnd,
unsigned int doy,
997 unsigned int ndStart,
unsigned int tsStart,
unsigned int tsMax,
998 size_t const & vtMax,
size_t const & flMax,
size_t const & slMax,
size_t const & slFloor,
999 std::string *
const& name_vt,
const int &ZONE,
const double &LONG,
const double &LAT,
const double &TAMP,
1000 double *
const& wcMax_sl,
double *
const& wcMin_sl,
double *
const& h_sl,
double *
const& h_fl,
1001 double *
const& depth_vt,
double *
const& hMax_vt,
double *
const& hMin_vt,
double *
const& clay_sl,
1002 double *
const& dens_sl,
double *
const& poro_sl,
double *
const& stonef_sl,
double *
const& fcOrg_sl,
1003 const double &temp_ny,
const double &ts_co2_concentration,
const double &ts_airpressure,
const double &ts_airtemperature,
1004 const double &ts_shortwaveradiance,
const double &ts_watervaporsaturationdeficit,
const double &ts_windspeed,
const double &ts_precipitation,
1005 double *
const&lai_vt,
double *
const&lai_fl,
double *
const&dvsFlush_vt,
double *
const&dvsMort_vt,
1006 double *
const&f_vt,
double *
const&laiPot_vt,
double **
const&fFrt_vtsl,
1007 double &temp_a,
double & temp_l,
double * temp_sl,
const double *ts_co2_concentration_fl,
1008 double *wc_fl,
double *wc_sl,
double *ice_sl,
double *fH2O_vt,
1009 double *fH2O_sl,
double *flux_sl,
double &evapot,
double &transp,
1010 double &runoff,
double &percol,
double &evacep,
double &evasoil,
1011 double &throughf,
double *
const & disper);
1016 (
int JJ,
double zzz,
double FSTO,
double Iphoton,
1017 double cca,
double tlk,
double leleaf,
1018 double &rstom,
double &A_mg,
double &rd,
double &ci,
1019 double &cs,
double &wj,
double &wc);
1021 double DW2DZ(
double Z,
double HH,
double ustar,
double sigma_zo);
1023 double RAN0(
long *a);
1025 double SIGMA(
double Z,
double HH,
double sigma_zo,
double sigma_h,
double ustar);
1027 double TL(
double Z,
double HH,
double DD,
double sigma_zo,
double sigma_h,
double ustar);
1029 double RANDGEN(
double low,
double delta,
long &seed);
1031 double UZ(
double a);