本文整理汇总了C++中Treelog::message方法的典型用法代码示例。如果您正苦于以下问题:C++ Treelog::message方法的具体用法?C++ Treelog::message怎么用?C++ Treelog::message使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Treelog
的用法示例。
在下文中一共展示了Treelog::message方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: value
double value (const Iterative::Point& p) const
{
Treelog::Open nest (msg, "minimize");
if (find_SoilDepth)
daisy_assert (p.size () == 4);
else
daisy_assert (p.size () == 3);
const double CropDepth = p[0];
const double CropWidth = p[1];
const double WRoot = p[2];
const double SoilDepth = find_SoilDepth ? p[3] : fixed_SoilDepth;
if (debug > 0)
{
std::ostringstream tmp;
tmp << "CropDepth = " << CropDepth << " cm\n"
<< "CropWidth = " << CropWidth << " cm\n"
<< "WRoot = " << (0.01 * WRoot) << " Mg DM/ha\n";
if (find_SoilDepth)
tmp << "SoilDepth = " << SoilDepth << " cm";
msg.message (tmp.str ());
}
// Restrictions.
const double LARGE_NUMBER = 42.42e42;
if (CropDepth <= 0)
return LARGE_NUMBER;
if (CropWidth <= 0)
return LARGE_NUMBER;
if (WRoot <= 0)
return LARGE_NUMBER;
if (find_SoilDepth && SoilDepth <= 0)
return LARGE_NUMBER;
bool ok = fun.root.set_dynamic (SoilDepth, CropDepth, CropWidth, WRoot,
debug, msg);
if (!ok)
return LARGE_NUMBER;
const double Rsqr = Iterative::RSquared (obs, fun);
if (debug > 0)
{
std::ostringstream tmp;
tmp << "R^2 = " << Rsqr;
msg.message (tmp.str ());
}
return -Rsqr;
}
示例2: nest
void
MovementSolute::element (const Soil& soil, const SoilWater& soil_water,
DOE& element,
const double diffusion_coefficient, double dt,
Treelog& msg)
{
for (size_t i = 0; i < matrix_solute.size (); i++)
{
Treelog::Open nest (msg, "element", i, matrix_solute[i]->library_id ());
try
{
matrix_solute[i]->element (geometry (), soil, soil_water, element,
diffusion_coefficient, dt,
msg);
if (i > 0)
msg.message ("Succeeded");
return;
}
catch (const char* error)
{
msg.warning (std::string ("DOM problem: ") + error);
}
catch (const std::string& error)
{
msg.warning (std::string ("DOM trouble: ") + error);
}
}
throw "Matrix element transport failed";
}
示例3: propagate
static void propagate (Treelog& msg, int nest, const std::string& text)
{
switch (nest)
{
case is_unknown:
msg.entry (text);
break;
case is_debug:
msg.debug (text);
break;
case is_plain:
msg.message (text);
break;
case is_warning:
msg.warning (text);
break;
case is_error:
msg.error (text);
break;
case is_bug:
msg.bug (text);
break;
case is_close:
msg.close ();
break;
case is_touch:
msg.touch ();
break;
case is_flush:
msg.flush ();
break;
default:
msg.open (text);
}
}
示例4: table_center
// Use.
void table_center (const GeometryRect& geo,
const std::vector<double>& Density, Treelog& msg)
{
// Print it.
const size_t column_size = geo.cell_columns ();
const size_t row_size = geo.cell_rows ();
std::ostringstream tmp;
// Top line
tmp << "z\\x";
for (size_t col = 0; col < column_size; col++)
{
daisy_assert (row_size > 0);
tmp << "\t" << geo.cell_x (geo.cell_index (0, col));
}
// Rows.
for (size_t row = 0; row < row_size; row++)
{
daisy_assert (column_size > 0);
tmp << "\n" << geo.cell_z (geo.cell_index (row, 0));
for (size_t col = 0; col < column_size; col++)
{
const size_t cell = geo.cell_index (row, col);
daisy_assert (cell < Density.size ());
tmp << "\t" << Density[cell];
}
}
Treelog::Open nest (msg, "Root density table [(cm, cm) -> cm/cm^3]");
msg.message (tmp.str ());
}
示例5:
void
ChemistryMulti::check_ignore (const symbol chem, Treelog& msg)
{
if (ignored (chem))
return;
msg.message ("Fate of '" + chem.name () + "' will not be traced");
ignore.push_back (chem);
}
示例6: can_convert
bool
Units::can_convert (const symbol from, const symbol to, Treelog& msg) const
{
if (from == to)
return true;
// Defined?
if (!has_unit(from) || !has_unit (to))
{
if (!allow_old ())
{
if (has_unit (from))
msg.message ("Original dimension [" + from + "] known.");
else
msg.message ("Original dimension [" + from + "] not known.");
if (has_unit (to))
msg.message ("Target dimension [" + to + "] known.");
else
msg.message ("Target dimension [" + to + "] not known.");
return false;
}
msg.message (std::string ("Trying old conversion of ")
+ (has_unit (from) ? "" : "unknown ") + "[" + from + "] to "
+ (has_unit (to) ? "" : "unknown ") + "[" + to + "]." );
return Oldunits::can_convert (from, to);
}
const Unit& from_unit = get_unit (from);
const Unit& to_unit = get_unit (to);
if (compatible (from_unit, to_unit))
return true;
// Not compatible.
std::ostringstream tmp;
tmp << "Cannot convert [" << from
<< "] with base [" << from_unit.base_name () << "] to [" << to
<< "] with base [" << to_unit.base_name () << "]";
msg.message (tmp.str ());
if (!allow_old ())
return false;
msg.message ("Trying old conversion.");
return Oldunits::can_convert (from, to);
}
示例7: doIt
void doIt (Daisy& daisy, const Scope&, Treelog& msg)
{
msg.message ("Sowing " + crop->type_name ());
daisy.field ().sow (metalib, *crop, row_width, row_pos, seed,
daisy.time (), msg);
}
示例8: switch
void
UZRectMollerup::upperboundary (const GeometryRect& geo,
const Soil& soil,
const ublas::vector<double>& T,
const Surface& surface,
std::vector<top_state>& state,
const ublas::vector<double>& remaining_water,
const ublas::vector<double>& h,
const ublas::vector<double>& Kedge,
ublas::vector<double>& dq,
ublas::banded_matrix<double>& Dm_mat,
ublas::vector<double>& Dm_vec,
ublas::vector<double>& Gm,
ublas::vector<double>& B,
const double ddt,
const int debug,
Treelog& msg, const double BIG_DT)
{
const std::vector<size_t>& edge_above = geo.cell_edges (Geometry::cell_above);
const size_t edge_above_size = edge_above.size ();
for (size_t i = 0; i < edge_above_size; i++)
{
const size_t edge = edge_above[i];
const int cell = geo.edge_other (edge, Geometry::cell_above);
daisy_assert (geo.cell_is_internal (cell));
const double in_sign
= geo.cell_is_internal (geo.edge_to (edge)) ? 1.0 : -1.0;
daisy_assert (in_sign < 0);
const double area = geo.edge_area (edge);
const double sin_angle = geo.edge_sin_angle (edge);
switch (surface.top_type (geo, edge))
{
case Surface::forced_flux:
{
const double flux = -surface.q_top (geo, edge, BIG_DT);
Neumann (edge, cell, area, in_sign, flux, dq, B);
}
break;
case Surface::forced_pressure:
{
const double value = -Kedge (edge) * geo.edge_area_per_length (edge);
const double pressure = surface.h_top (geo, edge);
Dirichlet (edge, cell, area, in_sign, sin_angle,
Kedge (edge),
h (cell), value, pressure, dq, Dm_mat, Dm_vec, Gm);
}
break;
case Surface::limited_water:
{
const double h_top = remaining_water (i);
// We pretend that the surface is particlaly saturated.
const double K_sat = soil.K (cell, 0.0, 0.0, T (cell));
const double K_cell = Kedge (edge);
const double K_edge = 0.5 * (K_cell + K_sat);
const double dz = geo.edge_length (edge);
daisy_assert (approximate (dz, -geo.cell_z (cell)));
double q_in_avail = h_top / ddt;
const double q_in_pot = K_edge * (h_top - h (cell) + dz) / dz;
// Decide type.
bool is_flux = h_top <= 0.0 || q_in_pot > q_in_avail;
if (is_flux)
{
state[i] = top_flux;
Neumann (edge, cell, area, in_sign, q_in_avail, dq, B);
}
else // Pressure
{
state[i] = top_pressure;
if (debug > 0 && q_in_pot < 0.0)
{
std::ostringstream tmp;
tmp << "q_in_pot = " << q_in_pot << ", q_avail = "
<< q_in_avail << ", h_top = " << h_top
<< ", h (cell) = " << h (cell)
<< " K (edge) = " << Kedge (edge)
<< ", K_sat = " << K_sat << ", K_edge = "
<< K_edge <<", dz = " << dz << ", ddt = " << ddt
<< ", is_flux = " << is_flux << "\n";
msg.message (tmp.str ());
}
const double value = -K_edge * geo.edge_area_per_length (edge);
const double pressure = h_top;
Dirichlet (edge, cell, area, in_sign, sin_angle,
K_edge, h (cell),
value, pressure, dq, Dm_mat, Dm_vec, Gm);
}
if (debug == 3)
{
std::ostringstream tmp;
tmp << "edge = " << edge << ", K_edge = " << K_edge
<< ", h_top = "
<< h_top << ", dz = " << dz << ", q_avail = " << q_in_avail
<< ", q_pot = " << q_in_pot << ", is_flux = " << is_flux;
msg.message (tmp.str ());
}
//.........这里部分代码省略.........
示例9: nest
//.........这里部分代码省略.........
while (time_left > 0.0)
{
if (ddt > time_left)
ddt = time_left;
std::ostringstream tmp_ddt;
tmp_ddt << "Time t = " << (dt - time_left)
<< "; ddt = " << ddt
<< "; steps " << n_small_time_steps
<< "; time left = " << time_left;
Treelog::Open nest (msg, tmp_ddt.str ());
if (n_small_time_steps > 0
&& (n_small_time_steps%msg_number_of_small_time_steps) == 0)
{
msg.touch ();
msg.flush ();
}
n_small_time_steps++;
if (n_small_time_steps > max_number_of_small_time_steps)
{
msg.debug ("Too many small timesteps");
throw "Too many small timesteps";
}
// Initialization for each small time step.
if (debug > 0)
{
std::ostringstream tmp;
tmp << "h = " << h << "\n";
tmp << "Theta = " << Theta;
msg.message (tmp.str ());
}
int iterations_used = 0;
h_previous = h;
Theta_previous = Theta;
if (debug == 5)
{
std::ostringstream tmp;
tmp << "Remaining water at start: " << remaining_water;
msg.message (tmp.str ());
}
ublas::vector<double> h_conv;
for (size_t cell = 0; cell != cell_size ; ++cell)
active_lysimeter[cell] = h (cell) > h_lysimeter (cell);
for (size_t edge = 0; edge != edge_size ; ++edge)
{
Kold[edge] = find_K_edge (soil, geo, edge, h, h_ice, h_previous, T);
Ksum [edge] = 0.0;
}
std::vector<top_state> state (edge_above.size (), top_undecided);
// We try harder with smaller timesteps.
const int max_loop_iter
= max_iterations * (number_of_time_step_reductions
* max_iterations_timestep_reduction_factor + 1);
do // Start iteration loop
{
示例10: doIt
void doIt (Daisy& daisy, const Scope&, Treelog& out)
{
out.message ("Ridging");
daisy.field ().ridge (ridge);
}
示例11: doIt
void doIt (Daisy&, const Scope&, Treelog& out)
{
out.message (message.name ());
}
示例12: doIt
// Simulation.
void doIt (Daisy& daisy, const Scope&, Treelog& out)
{
out.message ("Adjusting surface detention capacity");
daisy.field ().set_surface_detention_capacity (height);
}
示例13: if
void
SummaryBalance::summarize (Treelog& msg) const
{
TREELOG_MODEL (msg);
// We write the summary to a string at first.
std::ostringstream tmp;
tmp.precision (precision);
tmp.flags (std::ios::right | std::ios::fixed);
if (description.name () != default_description)
tmp << description << "\n\n";
// Find width of tags.
const std::string total_title = "Balance (= In - Out - Increase)";
const std::string content_title = "Total increase in content";
size_t max_size = std::max (total_title.size (), content_title.size ());
for (unsigned int i = 0; i < fetch.size (); i++)
max_size = std::max (max_size, fetch[i]->name_size ());
// Find width and total values
int max_digits = 0;
const double total_input = find_total (input, max_digits);
const double total_output = find_total (output, max_digits);
const double total_content = find_total (content, max_digits);
const double total = total_input - total_output - total_content;
max_digits = std::max (max_digits, FetchPretty::width (total_input));
max_digits = std::max (max_digits, FetchPretty::width (total_output));
max_digits = std::max (max_digits, FetchPretty::width (total_content));
max_digits = std::max (max_digits, FetchPretty::width (total));
// Find total width.
const int width = max_digits + (precision > 0 ? 1 : 0) + precision;
// Find width of dimensions.
size_t dim_size = 0;
for (unsigned int i = 0; i < fetch.size (); i++)
dim_size = std::max (dim_size, fetch[i]->dimension ().name ().size ());
// Print all entries.
symbol shared_dim = Attribute::User ();
if (input.size () > 0)
{
const symbol dim = print_entries (tmp, input, max_size, width);
print_balance (tmp, "Total input", total_input, dim,
dim_size, max_size, width);
shared_dim = dim;
tmp << "\n";
}
if (output.size () > 0)
{
const symbol dim = print_entries (tmp, output, max_size, width);
print_balance (tmp, "Total output", total_output, dim,
dim_size, max_size, width);
if (shared_dim == Attribute::User ())
shared_dim = dim;
else if (dim != shared_dim)
shared_dim = Attribute::Unknown ();
tmp << "\n";
}
if (content.size () > 0)
{
const symbol dim = print_entries (tmp, content, max_size, width);
print_balance (tmp, content_title, total_content, dim,
dim_size, max_size, width);
if (shared_dim == Attribute::User ())
shared_dim = dim;
else if (dim != shared_dim)
shared_dim = Attribute::Unknown ();
tmp << "\n";
}
print_balance (tmp, total_title, total,
shared_dim, dim_size, max_size, width);
tmp << std::string (max_size + 3, ' ') << std::string (width, '=');
// Where?
if (file == "")
msg.message (tmp.str ());
else
{
std::ofstream out (file.name ().c_str ());
out << tmp.str ();
if (! out.good ())
msg.error ("Could not write to '" + file + "'");
}
}
示例14: if
void
EquilibriumGoal_A::find (const Units& units, const Scope& scope, int cell,
const double has_A, const double has_B,
double& want_A, double& want_B, Treelog& msg) const
{
daisy_assert (has_A >= 0.0);
daisy_assert (has_B >= 0.0);
const double M = has_A + has_B;
double goal_A = 1.0;
if (!goal_A_expr->tick_value (units, goal_A, goal_unit, scope, msg))
msg.error ("Could not evaluate 'goal_A'");
daisy_assert (std::isfinite (goal_A));
if (goal_A < 0.0)
{
std::ostringstream tmp;
tmp << "Goal A is " << goal_A << ", should be non-negative";
msg.error (tmp.str ());
goal_A = 0.0;
}
double min_B = 1.0;
if (!min_B_expr->tick_value (units, min_B, goal_unit, scope, msg))
msg.error ("Could not evaluate 'min_B'");
daisy_assert (min_B >= 0.0);
static const symbol Theta_name ("Theta");
const double Theta = scope.number (Theta_name);
daisy_assert (Theta > 0.0);
daisy_assert (Theta < 1.0);
const double goal_A_dry = goal_A * (A_solute ? Theta : 1.0);
const double min_B_dry = min_B * (B_solute ? Theta : 1.0);
std::ostringstream tmp;
if (has_A > goal_A_dry)
{
tmp << "A->B";
// We have too much A, convert surplus to B.
want_A = goal_A_dry;
want_B = M - want_A;
}
else if (has_B < min_B_dry)
{
tmp << "min_B";
// We have too little A and too little B, do nothing.
want_A = has_A;
want_B = has_B;
}
else
{
tmp << "B->A";
// We have too little A and too much B, convert just enough to fit one.
want_B = std::max (min_B_dry, M - goal_A_dry);
want_A = M - want_B;
}
tmp << "\t" << has_A << "\t" << goal_A_dry << "\t" << want_A << "\t"
<< has_B << "\t" << min_B_dry << "\t" << want_B << "\t" << M;
if (cell == debug_cell)
msg.message (tmp.str ());
daisy_assert (want_A >= 0.0);
daisy_assert (want_B >= 0.0);
daisy_assert (approximate (want_A + want_B, M));
}