48 double TEMPdoubletoint;
49 nitroparms.
ileafN=REAL(NNITROP)[0];
50 nitroparms.kln=REAL(NNITROP)[1];
51 nitroparms.Vmaxb1=REAL(NNITROP)[2];
52 nitroparms.Vmaxb0=REAL(NNITROP)[3];
53 nitroparms.alphab1=REAL(NNITROP)[4];
54 nitroparms.alphab0=REAL(NNITROP)[5];
55 nitroparms.Rdb1=REAL(NNITROP)[6];
56 nitroparms.Rdb0=REAL(NNITROP)[7];
57 nitroparms.kpLN=REAL(NNITROP)[8];
58 nitroparms.lnb0=REAL(NNITROP)[9];
59 nitroparms.lnb1=REAL(NNITROP)[10];
60 TEMPdoubletoint=REAL(NNITROP)[11];
61 nitroparms.lnFun=(int)TEMPdoubletoint;
62 nitroparms.maxln=REAL(NNITROP)[12];
63 nitroparms.minln=REAL(NNITROP)[13];
64 nitroparms.daymaxln=REAL(NNITROP)[14];
75 int plantDate, emergeDate, harvestDate;
76 double baseTemp, maxLeaves;
77 double plantEmerge, phyllochron1, phyllochron2;
78 double R1, R2, R3, R4, R5, R6;
79 double phenoStage = 0.0;
81 double TTc = 0.0, TTc_V10 = 0.0, TTc_Vn = 0.0;
85 double lat = REAL(LAT)[0];
86 int timestep = INTEGER(TIMESTEP)[0];
89 double vmax1, vmax11, vmax12, alpha1, kparm1, theta, beta, Rd11, Rd12, Rd1,upperT,lowerT;
92 double Ca, b01, b11, ws_0;
95 double CanopyA, CanopyT;
99 double Sp, SpD, nlayers, kd, chil, heightFactor;
103 double seneLeaf, seneStem, seneRoot;
104 double newLeafcol[8760];
105 double newStemcol[8760];
106 double newRootcol[8760];
107 double *sti, *sti2, *sti3;
108 int k = 0, j = 0, q = 0, m = 0;
109 sti = &newLeafcol[0];
110 sti2 = &newStemcol[0];
111 sti3 = &newRootcol[0];
114 double iLeafN, kLN, vmax_b1, alpha_b1, kpLN, lnb0, lnb1, lnFun_0;
115 double LeafN, LeafNR;
119 double laiMethod, TTcoef, maxLAI;
120 double Ax, LNx, LT, a1, a2, k0, L0, LLx, Lx, LNl, Amax, c1, c2, c3,
124 double kLeaf, kStem, kRoot, kGrain;
125 double newLeaf, newStem, newRoot, newGrain;
126 double Leaf = 0.0, Stem = 0.0, Root = 0.0, Grain = 0.0;
128 double plantdensity = REAL(PLANTDENSITY)[0];
131 double FieldC, WiltP, phi1, phi2, soilDepth;
132 int soilType, wsFun, hydrDist;
133 double soilEvap, TotEvap;
134 double waterCont = 0.3;
136 int soillayers = INTEGER(SOILP2)[1];
137 double cwsVec[soillayers];
138 for(i3=0;i3<soillayers;i3++){
139 cwsVec[i3] = REAL(CWS)[i3];
141 double cwsVecSum = 0.0;
150 double LeafPsim = 0.0;
154 plantDate = INTEGER(DATES)[0];
155 emergeDate = INTEGER(DATES)[1];
156 harvestDate = INTEGER(DATES)[2];
160 baseTemp = REAL(PHENOP)[0];
161 maxLeaves = REAL(PHENOP)[1];
162 plantEmerge = REAL(PHENOP)[2];
163 phyllochron1 = REAL(PHENOP)[3];
164 phyllochron2 = REAL(PHENOP)[4];
165 R1 = REAL(PHENOP)[5];
166 R2 = REAL(PHENOP)[6];
167 R3 = REAL(PHENOP)[7];
168 R4 = REAL(PHENOP)[8];
169 R5 = REAL(PHENOP)[9];
170 R6 = REAL(PHENOP)[10];
174 vmax11 = REAL(PHOTOP)[0];
175 vmax12 = REAL(PHOTOP)[1];
177 alpha1 = REAL(PHOTOP)[2];
179 kparm1 = REAL(PHOTOP)[3];
180 theta = REAL(PHOTOP)[4];
181 beta = REAL(PHOTOP)[5];
182 Rd11 = REAL(PHOTOP)[6];
183 Rd12 = REAL(PHOTOP)[7];
184 Ca = REAL(PHOTOP)[8];
185 b01 = REAL(PHOTOP)[9];
186 b11 = REAL(PHOTOP)[10];
187 ws_0 = REAL(PHOTOP)[11];
189 upperT = REAL(PHOTOP)[12];
190 lowerT= REAL(PHOTOP)[13];
193 Sp = REAL(CANOPYP)[0];
194 SpD = REAL(CANOPYP)[1];
195 nlayers = REAL(CANOPYP)[2];
196 kd = REAL(CANOPYP)[3];
197 chil = REAL(CANOPYP)[4];
198 mrc1 = REAL(CANOPYP)[5];
199 mrc2 = REAL(CANOPYP)[6];
200 heightFactor = REAL(CANOPYP)[7];
203 seneStem = REAL(SENEP)[0];
204 seneLeaf = REAL(SENEP)[1];
205 seneRoot = REAL(SENEP)[2];
208 iLeafN = REAL(NITROP)[0];
210 kLN = REAL(NITROP)[1];
211 vmax_b1 = REAL(NITROP)[2];
212 alpha_b1 = REAL(NITROP)[3];
213 kpLN = REAL(NITROP)[4];
214 lnb0 = REAL(NITROP)[5];
215 lnb1 = REAL(NITROP)[6];
216 lnFun_0 = REAL(NITROP)[7];
220 laiMethod = REAL(LAIP)[0];
221 TTcoef = REAL(LAIP)[1];
222 maxLAI = REAL(LAIP)[2];
231 LNl = REAL(LAIP)[11];
232 Amax = REAL(LAIP)[12];
245 FieldC = REAL(SOILP)[0];
246 WiltP = REAL(SOILP)[1];
247 phi1 = REAL(SOILP)[2];
248 phi2 = REAL(SOILP)[3];
249 soilDepth = REAL(SOILP)[4];
250 scsf = REAL(SOILP)[5];
251 transpRes = REAL(SOILP)[6];
252 leafPotTh = REAL(SOILP)[7];
253 rfl = REAL(SOILP)[8];
254 rsec = REAL(SOILP)[9];
255 rsdf = REAL(SOILP)[10];
258 soilType = INTEGER(SOILP2)[0];
259 wsFun = INTEGER(SOILP2)[2];
260 hydrDist = INTEGER(SOILP2)[3];
289 SEXP SoilEvaporation;
291 SEXP StomatalCondCoefs;
293 PROTECT(lists = allocVector(VECSXP,23));
294 PROTECT(names = allocVector(STRSXP,23));
296 PROTECT(DayofYear = allocVector(REALSXP,vecsize));
297 PROTECT(Hour = allocVector(REALSXP,vecsize));
298 PROTECT(TTTc = allocVector(REALSXP,vecsize));
299 PROTECT(PhenoStage = allocVector(REALSXP,vecsize));
300 PROTECT(CanopyAssim = allocVector(REALSXP,vecsize));
301 PROTECT(CanopyTrans = allocVector(REALSXP,vecsize));
302 PROTECT(LAIc = allocVector(REALSXP,vecsize));
303 PROTECT(LeafVec = allocVector(REALSXP,vecsize));
304 PROTECT(StemVec = allocVector(REALSXP,vecsize));
305 PROTECT(RootVec = allocVector(REALSXP,vecsize));
306 PROTECT(GrainVec = allocVector(REALSXP,vecsize));
307 PROTECT(LAImat = allocMatrix(REALSXP,
MAXLEAFNUMBER,vecsize));
308 PROTECT(VmaxVec = allocVector(REALSXP,vecsize));
309 PROTECT(LeafNVec = allocVector(REALSXP,vecsize));
310 PROTECT(cwsMat = allocMatrix(REALSXP,soillayers,vecsize));
311 PROTECT(psimMat = allocMatrix(REALSXP,soillayers,vecsize));
312 PROTECT(rdMat = allocMatrix(REALSXP,soillayers,vecsize));
313 PROTECT(SCpools = allocVector(REALSXP,9));
314 PROTECT(SNpools = allocVector(REALSXP,9));
315 PROTECT(LeafPsimVec = allocVector(REALSXP,vecsize));
316 PROTECT(SoilEvaporation = allocVector(REALSXP,vecsize));
317 PROTECT(SoilWatCont = allocVector(REALSXP,vecsize));
318 PROTECT(StomatalCondCoefs = allocVector(REALSXP,vecsize));
320 int *pt_doy = INTEGER(DOY);
321 int *pt_hr = INTEGER(HR);
322 double *pt_temp = REAL(TEMP);
323 double *pt_solar = REAL(SOLAR);
324 double *pt_rh = REAL(RH);
325 double *pt_windspeed = REAL(WINDSPEED);
326 double *pt_precip = REAL(PRECIP);
328 for(i=0;i<vecsize;i++)
336 if(*(pt_doy+i) < plantDate){
337 REAL(PhenoStage)[i] = -1;
341 if(*(pt_doy+i) >= harvestDate){
343 REAL(PhenoStage)[i] = -1;
345 if(*(pt_temp+i) > baseTemp){
346 TTc += (*(pt_temp+i) - baseTemp) / (24/timestep);
350 if(TTc < plantEmerge || *(pt_doy+i) < emergeDate){
351 REAL(PhenoStage)[i] = 0.0;
353 if(REAL(PhenoStage)[i-1] < 0.10){
354 REAL(PhenoStage)[i] = floor(TTc / phyllochron1) / 100;
357 if(REAL(PhenoStage)[i-1] < 1){
358 REAL(PhenoStage)[i] = 0.10 +
359 floor((TTc - TTc_V10) / phyllochron2) / 100;
363 if(TTc > R1) REAL(PhenoStage)[i] = 1;
365 if(TTc > R2) REAL(PhenoStage)[i] = 2;
367 if(TTc > R3) REAL(PhenoStage)[i] = 3;
369 if(TTc > R4) REAL(PhenoStage)[i] = 4;
371 if(TTc > R5) REAL(PhenoStage)[i] = 5;
373 if(TTc > R6) REAL(PhenoStage)[i] = 6;
393 phenoStage = REAL(PhenoStage)[i];
394 if(*(pt_doy+i) < emergeDate){
402 if(laiMethod == 0.0){
404 LAI = fabs(TTc * TTcoef - plantEmerge * TTcoef);
407 if(laiMethod == 1.0){
408 LAI = Leaf * Sp + 1e-3;
411 if(laiMethod == 2.0){
413 phyllochron2, Ax, LT, k0,
414 a1, a2, L0, LLx, Lx, LNl);
419 LAI = tmpLAI.totalLeafArea * 1e-4 * plantdensity;
422 if(laiMethod == 3.0){
433 LAI = tmpLAI.totalLeafArea * 1e-4 * plantdensity;
436 if(laiMethod == 4.0){
446 LAI = tmpLAI.totalLeafArea / 1e4 * plantdensity;
449 if(LAI > maxLAI) LAI = maxLAI;
450 if(LAI < 1e-3) LAI = 1e-3;
466 if(*(pt_doy+i) > emergeDate && TTc < R6){
468 Canopy =
CanAC(LAI, *(pt_doy+i), *(pt_hr+i),
469 *(pt_solar+i), *(pt_temp+i),
470 *(pt_rh+i), *(pt_windspeed+i),
473 theta,beta,Rd1,Ca,b01,b11,StomWS,
476 LeafN, kpLN, lnb0, lnb1, lnFun,upperT,lowerT,nitroparms);
480 CanopyA = Canopy.Assim * timestep;
481 CanopyT = Canopy.Trans * timestep;
491 LeafN = iLeafN * pow(Stem + Leaf,-kLN);
492 if(LeafN > iLeafN) LeafN = iLeafN;
495 LeafN = LeafNR - (TTc - R1) * (kLN * 0.0045);
496 if(LeafN < 1e-3) LeafN = 1e-3;
499 if(phenoStage == -1) LeafN = 0;
502 vmax = vmax1 * (2/(1 + exp(-vmax_b1*(LeafN - 0.02))) - 1);
508 alpha = (iLeafN - LeafN) * alpha_b1 + alpha1;
513 soilMLS =
soilML(*(pt_precip+i), CanopyT, &cwsVec[0], soilDepth,
514 REAL(SOILDEPTHS), FieldC, WiltP,
515 phi1, phi2, soTexS, wsFun, soillayers, Root,
516 LAI, 0.68, *(pt_temp+i), *(pt_solar), *(pt_windspeed+i), *(pt_rh+i),
517 hydrDist, rfl, rsec, rsdf);
519 StomWS = soilMLS.rcoefPhoto;
520 LeafWS = soilMLS.rcoefSpleaf;
521 soilEvap = soilMLS.SoilEvapo;
522 for(i4=0;i4<soillayers;i4++){
523 cwsVec[i4] = soilMLS.cws[i4];
524 cwsVecSum += cwsVec[i4];
525 REAL(cwsMat)[i4 + i*soillayers] = soilMLS.cws[i4];
526 REAL(rdMat)[i4 + i*soillayers] = soilMLS.rootDist[i4];
529 waterCont = cwsVecSum / soillayers;
534 soilEvap =
SoilEvapo(LAI, 0.68, *(pt_temp+i), *(pt_solar+i), waterCont, FieldC, WiltP,
535 *(pt_windspeed+i), *(pt_rh+i), rsec);
536 TotEvap = soilEvap + CanopyT;
537 WaterS =
watstr(*(pt_precip+i),TotEvap,waterCont,soilDepth,FieldC,WiltP,phi1,phi2,soilType, wsFun);
538 waterCont = WaterS.awc;
539 StomWS = WaterS.rcoefPhoto ;
540 LeafWS = WaterS.rcoefSpleaf;
541 REAL(cwsMat)[i] = waterCont;
542 REAL(psimMat)[i] = WaterS.psim;
561 LeafPsim = WaterS.psim - (CanopyT * 1e3 * 1e-4 * 1.0/3600.0) * transpRes;
565 if(LeafPsim < leafPotTh){
572 StomWS = 1 - ((leafPotTh - LeafPsim)/1000 * scsf);
574 if(StomWS < 0.1) StomWS = 0.1;
583 REAL(SCpools)[0] = 1;
584 REAL(SCpools)[1] = 1;
585 REAL(SCpools)[2] = 1;
586 REAL(SCpools)[3] = 1;
587 REAL(SCpools)[4] = 1;
588 REAL(SCpools)[5] = 1;
589 REAL(SCpools)[6] = 1;
590 REAL(SCpools)[7] = 1;
591 REAL(SCpools)[8] = 1;
593 REAL(SNpools)[0] = 1;
594 REAL(SNpools)[1] = 1;
595 REAL(SNpools)[2] = 1;
596 REAL(SNpools)[3] = 1;
597 REAL(SNpools)[4] = 1;
598 REAL(SNpools)[5] = 1;
599 REAL(SNpools)[6] = 1;
600 REAL(SNpools)[7] = 1;
601 REAL(SNpools)[8] = 1;
606 kLeaf = tmpDBP.kLeaf;
607 kStem = tmpDBP.kStem;
608 kRoot = tmpDBP.kRoot;
609 kGrain = tmpDBP.kGrain;
619 if(kLeaf > 0 || TTc > R6){
620 newLeaf = CanopyA * kLeaf * LeafWS;
621 newLeaf =
resp(newLeaf, mrc1, *(pt_temp+i));
623 newLeaf = Leaf * kLeaf;
624 Stem += kStem * -newLeaf * 0.9;
625 Root += kRoot * -newLeaf * 0.9;
626 Grain += kGrain * -newLeaf * 0.9;
629 if(kStem > 0 || TTc > R6){
630 newStem = CanopyA * kStem;
631 newStem =
resp(newStem, mrc1, *(pt_temp+i));
633 newStem = Stem * kStem;
634 Leaf += kLeaf * -newStem * 0.9;
635 Root += kRoot * -newStem * 0.9;
636 Grain += kGrain * -newStem * 0.9;
639 newRoot = CanopyA * kRoot;
643 newGrain = CanopyA * kGrain * LeafWS;
645 newGrain = CanopyA * kGrain * StomWS;
649 if(*(pt_doy+i) < emergeDate + 7){
650 if(newLeaf < 0) newLeaf = 0.0;
651 if(newStem < 0) newStem = 0.0;
652 if(newRoot < 0) newRoot = 0.0;
653 if(newGrain < 0) newGrain = 0.0;
664 if(TTc < seneLeaf || TTc > R6){
667 Leaf += newLeaf - *(sti+k);
672 if(TTc < seneStem || TTc > R6){
675 Stem += newStem - *(sti2+j);
680 if(TTc < seneRoot || TTc > R6){
683 Root += newRoot - *(sti3+m);
688 REAL(DayofYear)[i] = *(pt_doy+i);
689 REAL(Hour)[i] = *(pt_hr+i);
690 REAL(CanopyAssim)[i] = CanopyA;
691 REAL(CanopyTrans)[i] = CanopyT;
693 REAL(LeafVec)[i] = Leaf;
694 REAL(StemVec)[i] = Stem;
695 REAL(RootVec)[i] = Root;
696 REAL(GrainVec)[i] = Grain;
697 REAL(VmaxVec)[i] = vmax;
698 REAL(LeafNVec)[i] = LeafN;
699 REAL(SoilEvaporation)[i] = soilEvap;
700 REAL(LeafPsimVec)[i] = LeafPsim;
701 REAL(SoilWatCont)[i] = waterCont;
702 REAL(StomatalCondCoefs)[i] = StomWS;
705 SET_VECTOR_ELT(lists, 0, DayofYear);
706 SET_VECTOR_ELT(lists, 1, Hour);
707 SET_VECTOR_ELT(lists, 2, TTTc);
708 SET_VECTOR_ELT(lists, 3, PhenoStage);
709 SET_VECTOR_ELT(lists, 4, CanopyAssim);
710 SET_VECTOR_ELT(lists, 5, CanopyTrans);
711 SET_VECTOR_ELT(lists, 6, LAIc);
712 SET_VECTOR_ELT(lists, 7, LeafVec);
713 SET_VECTOR_ELT(lists, 8, StemVec);
714 SET_VECTOR_ELT(lists, 9, RootVec);
715 SET_VECTOR_ELT(lists, 10, GrainVec);
716 SET_VECTOR_ELT(lists, 11, LAImat);
717 SET_VECTOR_ELT(lists, 12, VmaxVec);
718 SET_VECTOR_ELT(lists, 13, LeafNVec);
719 SET_VECTOR_ELT(lists, 14, cwsMat);
720 SET_VECTOR_ELT(lists, 15, psimMat);
721 SET_VECTOR_ELT(lists, 16, rdMat);
722 SET_VECTOR_ELT(lists, 17, SCpools);
723 SET_VECTOR_ELT(lists, 18, SNpools);
724 SET_VECTOR_ELT(lists, 19, LeafPsimVec);
725 SET_VECTOR_ELT(lists, 20, SoilEvaporation);
726 SET_VECTOR_ELT(lists, 21, SoilWatCont);
727 SET_VECTOR_ELT(lists, 22, StomatalCondCoefs);
729 SET_STRING_ELT(names,0,mkChar(
"DayofYear"));
730 SET_STRING_ELT(names,1,mkChar(
"Hour"));
731 SET_STRING_ELT(names,2,mkChar(
"TTTc"));
732 SET_STRING_ELT(names,3,mkChar(
"PhenoStage"));
733 SET_STRING_ELT(names,4,mkChar(
"CanopyAssim"));
734 SET_STRING_ELT(names,5,mkChar(
"CanopyTrans"));
735 SET_STRING_ELT(names,6,mkChar(
"LAI"));
736 SET_STRING_ELT(names,7,mkChar(
"Leaf"));
737 SET_STRING_ELT(names,8,mkChar(
"Stem"));
738 SET_STRING_ELT(names,9,mkChar(
"Root"));
739 SET_STRING_ELT(names,10,mkChar(
"Grain"));
740 SET_STRING_ELT(names,11,mkChar(
"LAImat"));
741 SET_STRING_ELT(names,12,mkChar(
"VmaxVec"));
742 SET_STRING_ELT(names,13,mkChar(
"LeafNVec"));
743 SET_STRING_ELT(names,14,mkChar(
"cwsMat"));
744 SET_STRING_ELT(names,15,mkChar(
"psimMat"));
745 SET_STRING_ELT(names,16,mkChar(
"rdMat"));
746 SET_STRING_ELT(names,17,mkChar(
"SCpools"));
747 SET_STRING_ELT(names,18,mkChar(
"SNpools"));
748 SET_STRING_ELT(names,19,mkChar(
"LeafPsimVec"));
749 SET_STRING_ELT(names,20,mkChar(
"SoilEvaporation"));
750 SET_STRING_ELT(names,21,mkChar(
"SoilWatCont"));
751 SET_STRING_ELT(names,22,mkChar(
"StomatalCondCoefs"));
753 setAttrib(lists,R_NamesSymbol,names);
double CanopyAssim[8760]
Definition: BioCro.h:10
Definition: AuxBioCro.h:128
Definition: AuxBioCro.h:48
Definition: AuxBioCro.h:95
double LAIc[8760]
Definition: BioCro.h:16
struct ws_str watstr(double precipit, double evapo, double cws, double soildepth, double fieldc, double wiltp, double phi1, double phi2, int soiltype, int wsFun)
Definition: AuxBioCro.c:673
struct lai_str laiBirchdiscontinuousFun(double phenostage, double LT, double Amax, double c1, double c2, double c3, double c4)
Definition: AuxMaizeGro.c:97
Definition: AuxBioCro.h:59
double ileafN
Definition: AuxBioCro.h:129
struct soilText_str soilTchoose(int soiltype)
Definition: AuxBioCro.c:1166
struct Can_Str CanAC(double LAI, int DOY, int hr, double solarR, double Temp, double RH, double WindSpeed, double lat, int nlayers, double Vmax, double Alpha, double Kparm, double theta, double beta, double Rd, double Catm, double b0, double b1, double StomataWS, int ws, double kd, double chil, double heightf, double leafN, double kpLN, double lnb0, double lnb1, int lnfun, double upperT, double lowerT, struct nitroParms nitroP)
Definition: AuxBioCro.c:539
struct lai_str laiBirchcontinuousFun(double phenostage, double a, double b, double Amax, double x0, double f, double g, double TT, double LT)
Definition: AuxMaizeGro.c:140
struct soilML_str soilML(double precipit, double transp, double *cws, double soildepth, double *depths, double fieldc, double wiltp, double phi1, double phi2, struct soilText_str soTexS, int wsFun, int layers, double rootDB, double LAI, double k, double AirTemp, double IRad, double winds, double RelH, int hydrDist, double rfl, double rsec, double rsdf)
Definition: AuxBioCro.c:807
double SoilEvapo(double LAI, double k, double AirTemp, double IRad, double awc, double fieldc, double wiltp, double winds, double RelH, double rsec)
Definition: AuxBioCro.c:412
#define MAXLEAFNUMBER
Definition: AuxMaizeGro.h:10
Definition: AuxBioCro.h:41
Definition: AuxMaizeGro.h:19
struct lai_str laiLizasoFun(double thermalt, double phenostage, double phyllochron1, double phyllochron2, double Ax, double LT, double k0, double a1, double a2, double L0, double LLx, double Lx, double LNl)
Definition: AuxMaizeGro.c:10
struct maize_dbp_str maize_sel_dbp_coef(double dbpCoefs[13], double phenoStage)
Definition: AuxMaizeGro.c:231
Definition: AuxMaizeGro.h:12
double resp(double comp, double mrc, double temp)
Definition: AuxBioCro.c:1024