Rev 561 | Rev 566 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 561 | Rev 562 | ||
---|---|---|---|
Line 337... | Line 337... | ||
337 | mLAIBroadleaved=LAIbroadleave; |
337 | mLAIBroadleaved=LAIbroadleave; |
338 | mLAI=LAIneedle+LAIbroadleave; |
338 | mLAI=LAIneedle+LAIbroadleave; |
339 | mAvgMaxCanopyConductance = maxCanopyConductance; |
339 | mAvgMaxCanopyConductance = maxCanopyConductance; |
340 | 340 | ||
341 | // clear aggregation containers
|
341 | // clear aggregation containers
|
342 | for (int i=0;i<12;++i) |
342 | for (int i=0;i<12;++i) mET0[i]=0.; |
343 | 343 | ||
344 | }
|
344 | }
|
345 | 345 | ||
346 | 346 | ||
347 | 347 | ||
Line 382... | Line 382... | ||
382 | 382 | ||
383 | double div = (1. + svp_slope + gBL / gC); |
383 | double div = (1. + svp_slope + gBL / gC); |
384 | double Etransp = (svp_slope * net_rad + defTerm) / div; |
384 | double Etransp = (svp_slope * net_rad + defTerm) / div; |
385 | double canopy_transpiration = Etransp / latent_heat * daylength; |
385 | double canopy_transpiration = Etransp / latent_heat * daylength; |
386 | 386 | ||
- | 387 | // calculate reference evapotranspiration
|
|
387 | // |
388 | // see Adair et al 2008
|
- | 389 | const double psychrometric_const = 0.0672718682328237; // kPa/degC |
|
388 | double |
390 | const double windspeed = 2.; // m/s |
- | 391 | double net_rad_mj_day = net_rad*daylength/1000000.; // convert W/m2 again to MJ/m2*day |
|
389 | double |
392 | double et0_day = 0.408*svp_slope*net_rad_mj_day + psychrometric_const*900./(temperature+273.)*windspeed*climate->vpd; |
- | 393 | double et0_div = svp_slope+psychrometric_const*(1.+0.34*windspeed); |
|
- | 394 | et0_day = et0_day / et0_div; |
|
390 |
|
395 | mET0[climate->month-1] += et0_day; |
391 | 396 | ||
392 | if (mInterception>0.) { |
397 | if (mInterception>0.) { |
393 | // we assume that for evaporation from leaf surface gBL/gC -> 0
|
398 | // we assume that for evaporation from leaf surface gBL/gC -> 0
|
- | 399 | double div_evap = 1. + svp_slope; |
|
- | 400 | double evap_canopy = (svp_slope*net_rad + defTerm) / div_evap / latent_heat * daylength; |
|
394 |
|
401 | evap_canopy = qMin(evap_canopy, mInterception); |
395 | mInterception -= |
402 | mInterception -= evap_canopy; // reduce interception |
396 | mEvaporation = |
403 | mEvaporation = evap_canopy; // evaporation from intercepted water |
397 | }
|
404 | }
|
398 | return canopy_transpiration; |
405 | return canopy_transpiration; |
399 | }
|
406 | }
|
400 | 407 | ||
401 | } // end namespace |
408 | } // end namespace |