Example #1
0
 void tick (const double dt, const double rain, const Geometry& geo,
            const SoilWater& soil_water, Treelog& msg)
 {
   // Ice content.
   std::map<const Horizon*, double> ice;
   for (std::size_t c = 0; c < geo.cell_size (); c++)
     ice[horizon_[c]] += soil_water.X_ice (c) * geo.cell_volume (c);
   
   for (std::map<const Horizon*, double>::const_iterator i = ice.begin ();
        i != ice.end ();
        i++)
     {
       const Horizon *const hor = (*i).first;
       const double total_ice = (*i).second;
       const double total_volume = volume[hor];
       const double Ice = total_ice / total_volume;
       hor->hydraulic->tick (dt, rain, Ice, msg);
     }
 }
Example #2
0
double 
Movement1D::surface_snow_T (const Soil& soil,
                            const SoilWater& soil_water,
                            const SoilHeat& soil_heat,
                            const double T_snow,
                            const double K_snow,
                            const double dZs) const
{
  // Information about soil.
  const double K_soil 
    = soil.heat_conductivity (0, soil_water.Theta (0),
                              soil_water.X_ice (0)) 
    * 1e-7 * 100.0 / 3600.0; // [erg/cm/h/dg C] -> [W/m/dg C]
  const double Z = -geo->cell_z (0) / 100.0; // [cm] -> [m]
  const double T_soil = soil_heat.T (0); // [dg C]
  daisy_assert (T_soil > -100.0);
  daisy_assert (T_soil < 50.0);

  const double T = (K_soil / Z * T_soil + K_snow / dZs * T_snow) 
    / (K_soil / Z + K_snow / dZs);
  daisy_assert (T > -100.0);
  daisy_assert (T < 50.0);
  return T;
}