Subversion Repositories public iLand

Rev

Rev 561 | Rev 566 | Go to most recent revision | Show entire file | Ignore 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) mPET[i]=0.;
-
 
-
 
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 PET
-
 
388
    double div_evap = 1. + svp_slope;
-
 
389
    double pet_day = (svp_slope*net_rad + defTerm) / div_evap / latent_heat * daylength;
-
 
390
    mPET[climate->month-1] += pet_day;
-
 
-
 
387
    // calculate reference evapotranspiration
-
 
388
    // see Adair et al 2008
-
 
389
    const double psychrometric_const = 0.0672718682328237; // kPa/degC
-
 
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
-
 
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;
-
 
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
394
        pet_day = qMin(pet_day, mInterception);
-
 
395
        mInterception -= pet_day; // reduce interception
-
 
396
        mEvaporation = pet_day; // evaporation from intercepted water
-
 
-
 
399
        double div_evap = 1. + svp_slope;
-
 
400
        double evap_canopy = (svp_slope*net_rad + defTerm) / div_evap / latent_heat * daylength;
-
 
401
        evap_canopy = qMin(evap_canopy, mInterception);
-
 
402
        mInterception -= evap_canopy; // reduce interception
-
 
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