branch.cc
Go to the documentation of this file.
//
// This file is part of Rheolef.
//
// Copyright (C) 2000-2009 Pierre Saramito <Pierre.Saramito@imag.fr>
//
// Rheolef is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// Rheolef is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Rheolef; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// =========================================================================
// the branch unix command
// author: Pierre.Saramito@imag.fr
//
namespace rheolef {
} // namespace rheolef
//
// TODO: filter options
// ------------
// -extract N
// ------------
// -mask u
// -unmask u
// -mask-all
// -unmask-all
//
// -select u <==> -mask-all -unmask u
//
// -show-names
// ------------
// -norm {-l2|-linf|-h1}
// -> normes in direct via gnuplot via branch (geo with dim=0)
//
// Q. how to combine and synchronize images u(t) and |u(t)| ?
// -> field n(t,x), mesh with dim=0, one point p0, value n(t,p0) = |u(t)|
// ------------
// -energy-norm
// sqrt(|u^{n+1}-u^n|/(t^{n+1}-t^n)) : mesure a(u,u), l'energie (norme l2 pour u)
// ------------
// graphic:
// -height : with -topography, interprets scalar as height
// -yield value : mask all scalars lesser than
// menu:
// stop/start
// start number
// transparency : of the height
// edit color map for height : can put uniform color
// stop/start
// -------------------------------------------------------------
// program
// -------------------------------------------------------------
#include <rheolef.h>
#include <rheolef/iofem.h>
using namespace rheolef;
using namespace std;
void usage()
{
cerr << "branch: usage: branch "
<< "-|file[.branch[.gz]]"
<< "[-toc] "
<< "[-Idir|-I dir] "
<< "[-name string] "
<< "[-index int|-extract int] "
<< "[-[catch]mark string] "
<< "[-ndigit int] "
<< "[-proj] "
<< "[-lumped-proj] "
<< "[-if {branch,vtk}] "
<< "[-paraview|-gnuplot] "
<< "[-vtk|-branch] "
<< "[-[no]verbose|-[no]clean|-[no]execute] "
<< "[-color|-gray|-black-and-white|-bw] "
<< "[-[no]elevation] "
<< "[-[no]volume] "
<< "[-[no]fill] "
<< "[-[no]showlabel] "
<< "[-label string] "
<< "[-[no]stereo] "
<< "[-[no]cut] "
<< "[-normal x [y [z]]] "
<< "[-origin x [y [z]]] "
<< "[-scale float] "
<< "[-iso[value] float|-noiso[value]] "
<< "[-n-iso int] "
<< "[-n-iso-negative int] "
<< "[-topography filename] "
<< "[-umin float] "
<< "[-umax float] "
<< "[-subdivide int] "
<< endl;
exit (1);
}
typedef field::size_type size_type;
field_basic<Float,sequential>
proj (const field_basic<Float,sequential>& uh, bool do_lumped_mass) {
const space_basic<Float,sequential>& Uh = uh.get_space();
size_t k = Uh.degree();
if (k == 0) k++;
std::string approx = "P" + itos(k);
space_basic<Float,sequential> Vh (uh.get_geo(), approx, uh.valued());
test_basic<Float,sequential,details::vf_tag_10> u (Uh), v (Vh);
test_basic<Float,sequential,details::vf_tag_01> vt (Vh);
integrate_option fopt;
fopt.lump = do_lumped_mass;
form_basic<Float,sequential> m, p;
switch (Uh.valued_tag()) {
case space_constant::scalar:
m = integrate(v*vt, fopt);
p = integrate(u*vt);
break;
case space_constant::vector:
m = integrate(dot(v,vt), fopt);
p = integrate(dot(u,vt));
break;
case space_constant::tensor:
case space_constant::unsymmetric_tensor:
m = integrate(ddot(v,vt), fopt);
p = integrate(ddot(u,vt));
break;
default:
error_macro ("proj: unexpected valued field: " << Uh.valued());
}
solver_basic<Float,sequential> sm (m.uu());
field_basic<Float,sequential> vh (Vh);
vh.set_u() = sm.solve((p*uh).u());
return vh;
}
void
extract (idiststream& in, odiststream& out, bool do_proj, bool do_lumped_mass, size_type extract_id,const Float& scale_value)
{
branch_basic<Float,sequential> event;
in >> event.header();
out << event.header();
size_t i = 0;
do {
in >> catchmark (event.parameter_name());
i++;
} while (i <= extract_id);
if (!in) return;
Float t;
in >> t;
if (!in) return;
event.set_parameter (t);
for (size_t i = 0; in && i < event.size(); i++) {
in >> catchmark (event[i].first) >> event[i].second;
}
field_basic<Float,sequential> uh = event[0].second;
if (do_proj && uh.get_space().get_basis().have_compact_support_inside_element()) {
uh = proj (uh, do_lumped_mass);
}
if (scale_value != Float(1)) {
uh *= scale_value;
}
out << event(t,uh);
out << event.finalize();
}
typedef enum {
text_render,
paraview_render,
vtk_render,
plotmtv_render,
gnuplot_render,
toc_render
} render_type;
void
put (
idiststream& in,
odiststream& out,
bool do_proj,
bool do_lumped_mass,
bool def_fill_opt,
size_type extract_id,
const Float& scale_value,
const std::pair<Float,Float>& u_range,
render_type render)
{
if (extract_id != numeric_limits<size_type>::max()) {
extract (in, out, do_proj, do_lumped_mass, extract_id, scale_value);
return;
}
Float t = 0;
branch_basic<Float,sequential> event;
if (u_range.first != std::numeric_limits<Float>::max() ||
u_range.second != -std::numeric_limits<Float>::max()) {
event.set_range (u_range);
}
in >> event.header();
if (render == toc_render) {
in.is() >> noverbose;
out << setprecision(numeric_limits<Float>::digits10)
<< "# i " << event.parameter_name() << endl;
Float param;
for (size_t n = 0; in >> catchmark (event.parameter_name()) >> param; ++n) {
out << n << " " << param << endl;
}
return;
}
field_basic<Float,sequential> uh;
size_type n = 0;
while (in >> event) {
for (size_t i = 0; i < event.size(); i++) {
uh = event[i].second;
if (n == 0) {
// default 1D graphic render is gnuplot
if (uh.get_geo().dimension() == 1 && render == paraview_render) {
dout.os() << gnuplot;
}
// default 3D is iso+cut and nofill; default 2D is nocut and fill...
if (uh.get_geo().map_dimension() == 3) {
#ifdef TODO
if (!def_plane_cut_opt) dout.os() << cut;
#endif // TODO
if (!def_fill_opt) dout.os() << nofill;
} else {
#ifdef TODO
if (!def_plane_cut_opt) dout.os() << nocut;
#endif // TODO
if (!def_fill_opt) dout.os() << fill;
}
out << event.header();
}
if (do_proj && uh.get_space().get_basis().have_compact_support_inside_element()) {
uh = proj (uh, do_lumped_mass); // TODO: avoid recomputing/inverting the mass at all step !
}
if (scale_value != Float(1)) {
uh *= scale_value;
}
event[i].second = uh;
}
out << event;
n++;
}
out << event.finalize();
}
void set_input_format (idiststream& in, std::string input_format)
{
if (input_format == "vtk") in.is() >> vtk;
else if (input_format == "branch") in.is() >> rheo;
else {
std::cerr << "branch: invalid input format \""<<input_format<<"\"" << std::endl;
usage();
}
}
int main(int argc, char**argv)
{
environment distributed(argc, argv);
if (argc <= 1) usage();
clog << verbose;
dout.os() << noelevation;
bool on_stdin = false;
bool do_proj = false;
bool do_lumped_mass = false;
bool do_cut = false;
bool def_fill_opt = false;
int digits10 = numeric_limits<Float>::digits10;
render_type render = paraview_render; dout.os() << paraview;
size_type extract_id = numeric_limits<size_type>::max();
Float scale_value = 1;
string file_name, name, input_format = "branch";
std::pair<Float,Float> u_range;
u_range.first = std::numeric_limits<Float>::max();
u_range.second = -std::numeric_limits<Float>::max();
dout.os() << showlabel;
// this normal is not so bad for the dirichlet.cc demo on the cube:
cout << setnormal(point(-0.015940197423022637, -0.9771157601293953, -0.21211011624358989));
cout << setorigin(point(std::numeric_limits<Float>::max()));
for (int i = 1; i < argc; i++) {
if (strcmp (argv[i], "-ndigit") == 0) { digits10 = atoi(argv[++i]); }
else if (strcmp (argv[i], "-toc") == 0) { render = toc_render; }
else if (strcmp (argv[i], "-index") == 0 || strcmp (argv[i], "-extract") == 0)
{ extract_id = atoi(argv[++i]); render = text_render; dout.os() << rheo; }
else if (strcmp (argv[i], "-branch") == 0) { render = text_render; dout.os() << rheo; }
else if (strcmp (argv[i], "-vtk") == 0) { render = vtk_render; dout.os() << vtk; }
else if (strcmp (argv[i], "-gnuplot") == 0) { render = gnuplot_render; dout.os() << gnuplot; }
else if (strcmp (argv[i], "-paraview") == 0) { render = paraview_render; dout.os() << paraview; }
else if (strcmp (argv[i], "-skipvtk") == 0) { dout.os() << skipvtk; }
else if (strcmp (argv[i], "-proj") == 0) { do_proj = true; }
else if (strcmp (argv[i], "-lumped-proj") == 0){ do_proj = do_lumped_mass = true; }
else if (strcmp (argv[i], "-elevation") == 0) { dout.os() << elevation; }
else if (strcmp (argv[i], "-noelevation") == 0) { dout.os() << noelevation; }
else if (strcmp (argv[i], "-color") == 0) { dout.os() << color; }
else if (strcmp (argv[i], "-gray") == 0) { dout.os() << gray; }
else if (strcmp (argv[i], "-black-and-white") == 0) { dout.os() << black_and_white; }
else if (strcmp (argv[i], "-bw") == 0) { dout.os() << black_and_white; }
else if (strcmp (argv[i], "-showlabel") == 0) { dout.os() << showlabel; }
else if (strcmp (argv[i], "-noshowlabel") == 0) { dout.os() << noshowlabel; }
else if (strcmp (argv[i], "-fill") == 0) { dout.os() << fill; def_fill_opt = true; }
else if (strcmp (argv[i], "-nofill") == 0) { dout.os() << nofill; def_fill_opt = true; }
else if (strcmp (argv[i], "-stereo") == 0) { dout.os() << stereo;
if (render != paraview_render) {
dout.os() << paraview;
render = paraview_render;
}
}
else if (strcmp (argv[i], "-nostereo") == 0) { dout.os() << nostereo; }
else if (strcmp (argv[i], "-volume") == 0) { dout.os() << paraview << volume;
render = paraview_render; }
else if (strcmp (argv[i], "-novolume") == 0) { dout.os() << novolume; }
else if (strcmp (argv[i], "-cut") == 0) { do_cut = true; }
else if (strcmp (argv[i], "-nocut") == 0) { do_cut = false; }
else if (strcmp (argv[i], "-umin") == 0) {
if (i+1 == argc || !is_float(argv[i+1])) usage();
u_range.first = to_float (argv[++i]);
} else if (strcmp (argv[i], "-umax") == 0) {
if (i+1 == argc || !is_float(argv[i+1])) usage();
u_range.second = to_float (argv[++i]);
} else if (strcmp (argv[i], "-scale") == 0) {
if (i+1 == argc || !is_float(argv[i+1])) usage();
scale_value = to_float (argv[++i]);
dout.os() << setvectorscale (scale_value);
} else if (strcmp (argv[i], "-noisovalue") == 0) {
dout.os() << noiso;
} else if (strcmp (argv[i], "-isovalue") == 0 || strcmp (argv[i], "-iso") == 0) {
dout.os() << iso;
if (i+1 < argc && is_float(argv[i+1])) {
Float iso_value = to_float (argv[++i]);
dout.os() << setisovalue(iso_value);
}
} else if (strcmp (argv[i], "-n-iso") == 0) {
if (i+1 == argc || !isdigit(argv[i+1][0])) usage();
size_t idx = atoi (argv[++i]);
dout.os() << setn_isovalue(idx);
} else if (strcmp (argv[i], "-n-iso-negative") == 0) {
if (i+1 == argc || !isdigit(argv[i+1][0])) usage();
size_t idx = atoi (argv[++i]);
dout.os() << setn_isovalue_negative(idx);
} else if (strcmp (argv[i], "-subdivide") == 0) {
if (i == argc-1) { cerr << "branch -subdivide: option argument missing" << endl; usage(); }
size_t nsub = atoi(argv[++i]);
dout.os() << setsubdivide (nsub);
} else if (strcmp (argv[i], "-topography") == 0) {
if (i+1 == argc) usage();
idiststream zin (argv[++i]);
field_basic<Float,sequential> z;
zin >> z;
dout.os() << settopography(z);
}
else if (strcmp (argv[i], "-I") == 0) {
if (i+1 == argc) { cerr << "geo -I: option argument missing" << endl; usage(); }
append_dir_to_rheo_path (argv[++i]);
}
else if (argv [i][0] == '-' && argv [i][1] == 'I') { append_dir_to_rheo_path (argv[i]+2); }
else if (strcmp (argv[i], "-noclean") == 0) clog << noclean;
else if (strcmp (argv[i], "-clean") == 0) clog << clean;
else if (strcmp (argv[i], "-noexecute") == 0) clog << noexecute;
else if (strcmp (argv[i], "-execute") == 0) clog << execute;
else if (strcmp (argv[i], "-verbose") == 0) clog << verbose;
else if (strcmp (argv[i], "-noverbose") == 0) clog << noverbose;
else if ((strcmp(argv[i], "-origin") == 0) || (strcmp (argv[i], "-normal") == 0)) {
point x;
unsigned int io = i;
if (i+1 == argc || !is_float(argv[i+1])) {
warning_macro ("invalid argument to `" << argv[i] << "'");
usage();
}
x[0] = to_float (argv[++i]);
if (i+1 < argc && is_float(argv[i+1])) {
x[1] = to_float (argv[++i]);
if (i+1 < argc && is_float(argv[i+1])) {
x[2] = to_float (argv[++i]);
}
}
if (strcmp (argv[io], "-origin") == 0) {
cout << setorigin(x);
} else {
cout << setnormal(x);
warning_macro("normal="<<x);
}
} else if (strcmp (argv[i], "-image-format") == 0) {
if (i == argc-1) {
cerr << "field -image-format: option argument missing" << endl;
usage();
}
string format = argv[++i];
dout.os() << setimage_format(format);
}
else if (strcmp (argv[i], "-resolution") == 0) {
if (i == argc-1 || !isdigit(argv[i+1][0])) { std::cerr << "geo -resolution: option argument missing" << std::endl; usage(); }
size_t nx = atoi(argv[++i]);
size_t ny = (i < argc-1 && isdigit(argv[i+1][0])) ? atoi(argv[++i]) : nx;
dout.os() << setresolution(point_basic<size_t>(nx,ny));
}
else if (argv [i][0] == '-' && argv [i][1] == 'I') {
append_dir_to_rheo_path (argv[i]+2);
}
else if (strcmp (argv[i], "-name") == 0) {
if (i+1 == argc) { std::cerr << "field -name: option argument missing" << std::endl; usage(); }
name = argv[++i];
}
else if (strcmp (argv[i], "-label") == 0) {
if (i+1 == argc) { std::cerr << "field -label: option argument missing" << std::endl; usage(); }
string label = argv[++i];
dout.os() << setlabel(label);
}
else if (strcmp (argv[i], "-catchmark") == 0 || strcmp (argv[i], "-mark") == 0) {
if (i+1 == argc) { std::cerr << "field -mark: option argument missing" << std::endl; usage(); }
string mark = argv[++i];
dout.os() << setmark(mark);
}
else if (strcmp (argv[i], "-if") == 0 ||
strcmp (argv[i], "-input-format") == 0) {
if (i == argc-1) { std::cerr << "branch "<<argv[i]<<": option argument missing" << std::endl; usage(); }
input_format = argv[++i];
}
else if (strcmp (argv [i], "-") == 0) {
on_stdin = true;
dout.os() << setbasename("output") << reader_on_stdin;
file_name = "output";
}
else if (argv [i][0] == '-') {
cerr << "branch: invalid option `" << argv[i] << "'" << endl;
usage();
}
else {
// input on file
string dir_name = get_dirname(argv[i]);
prepend_dir_to_rheo_path (dir_name);
file_name = get_basename(delete_suffix (delete_suffix (argv[i], "gz"), "branch"));
}
}
if (!on_stdin && file_name == "") {
cerr << "branch: no input specified" << endl;
usage();
}
string basename = (name != "") ? name : file_name;
dout.os() << setbasename(basename)
<< setprecision(digits10);
if (on_stdin) {
set_input_format (din, input_format);
put(din,dout, do_proj, do_lumped_mass, def_fill_opt, extract_id, scale_value, u_range, render);
} else {
idiststream in (file_name, "branch");
check_macro(in.good(), "\"" << file_name << "[.branch[.gz]]\" not found.");
set_input_format (in, input_format);
put(in, dout, do_proj, do_lumped_mass, def_fill_opt, extract_id, scale_value, u_range, render);
}
}
usage
void usage()
Definition: branch.cc:388
extract
void extract(idiststream &in, odiststream &out, bool do_proj, bool do_lumped_mass, size_type extract_id, const Float &scale_value)
Definition: branch.cc:462
main
int main(int argc, char **argv)
Definition: branch.cc:578
set_input_format
void set_input_format(idiststream &in, std::string input_format)
Definition: branch.cc:569
size_type
field::size_type size_type
Definition: branch.cc:425
render_type
render_type
Definition: branch.cc:491
gnuplot_render
@ gnuplot_render
Definition: branch.cc:496
paraview_render
@ paraview_render
Definition: branch.cc:493
vtk_render
@ vtk_render
Definition: branch.cc:494
plotmtv_render
@ plotmtv_render
Definition: branch.cc:495
toc_render
@ toc_render
Definition: branch.cc:497
text_render
@ text_render
Definition: branch.cc:492
Float
see the Float page for the full documentation
point
see the point page for the full documentation
rheolef::branch_basic
Definition: branch.h:83
rheolef::branch_basic::set_range
void set_range(const std::pair< T, T > &u_range)
Definition: branch.h:371
rheolef::branch_basic::parameter_name
const std::string & parameter_name() const
Definition: branch.h:333
rheolef::branch_basic::header
__branch_header< T, M > header()
Definition: branch.h:404
rheolef::catchmark
see the catchmark page for the full documentation
Definition: catchmark.h:67
rheolef::environment
see the environment page for the full documentation
Definition: environment.h:115
rheolef::field_basic
Definition: field.h:235
rheolef::field_basic::get_space
const space_type & get_space() const
Definition: field.h:300
rheolef::field_basic::get_geo
const geo_type & get_geo() const
Definition: field.h:301
rheolef::field_basic::valued
const std::string & valued() const
Definition: field.h:305
rheolef::field_basic::set_u
vec< T, M > & set_u()
Definition: field.h:312
rheolef::form_basic
Definition: form.h:144
rheolef::integrate_option
see the integrate_option page for the full documentation
Definition: integrate_option.h:125
rheolef::integrate_option::lump
bool lump
Definition: integrate_option.h:168
rheolef::odiststream
odiststream: see the diststream page for the full documentation
Definition: diststream.h:126
rheolef::odiststream::os
std::ostream & os()
Definition: diststream.h:236
rheolef::point_basic< size_t >
rheolef::solver_basic
Definition: solver.h:264
rheolef::solver_basic::solve
vec< T, M > solve(const vec< T, M > &b) const
Definition: solver.h:345
rheolef::space_basic
the finite element space
Definition: space.h:352
rheolef::std
Definition: vec_expr_v2.h:402
rheolef::test_basic
Definition: test.h:207
rheolef::point
point_basic< Float > point
Definition: point.h:164
rheolef::size_type
size_t size_type
Definition: basis_get.cc:76
rheolef::distributed
distributed
Definition: asr.cc:228
rheolef::Float
double Float
see the Float page for the full documentation
Definition: Float.h:143
rheolef::din
idiststream din
see the diststream page for the full documentation
Definition: diststream.h:427
rheolef::dout
odiststream dout(cout)
see the diststream page for the full documentation
Definition: diststream.h:430
error_macro
#define error_macro(message)
Definition: dis_macros.h:49
warning_macro
#define warning_macro(message)
Definition: dis_macros.h:53
paraview
verbose clean transpose logscale grid shrink ball stereo iso volume skipvtk deformation fastfieldload lattice reader_on_stdin color format format format format format format format format format format format format format format format format format format format format format paraview
Definition: iorheo-members.h:125
gnuplot
verbose clean transpose logscale grid shrink ball stereo iso volume skipvtk deformation fastfieldload lattice reader_on_stdin color format format format format format format format format format format format format format format format format format format format gnuplot
Definition: iorheo-members.h:121
vtk
verbose clean transpose logscale grid shrink ball stereo iso volume skipvtk deformation fastfieldload lattice reader_on_stdin color format format format format format format format format format format format format format format format format vtk
Definition: iorheo-members.h:113
rheo
verbose clean transpose logscale grid shrink ball stereo iso volume skipvtk deformation fastfieldload lattice reader_on_stdin color rheo
Definition: iorheo-members.h:65
gray
verbose clean transpose logscale grid shrink ball stereo iso volume skipvtk deformation fastfieldload lattice reader_on_stdin gray
Definition: iorheo-members.h:62
mkgeo_ball.clean
clean
Definition: mkgeo_ball.sh:335
mkgeo_ball.n
int n
Definition: mkgeo_ball.sh:150
mkgeo_ball.verbose
verbose
Definition: mkgeo_ball.sh:133
mkgeo_contraction.ny
ny
Definition: mkgeo_contraction.sh:150
mkgeo_contraction.nx
string nx
Definition: mkgeo_contraction.sh:124
mkgeo_contraction.name
string name
Definition: mkgeo_contraction.sh:133
mkgeo_couette.basename
string basename
Definition: mkgeo_couette.sh:73
mkgeo_sector.m
m
Definition: mkgeo_sector.sh:118
rheolef::io::out
@ out
Definition: rheostream.h:167
rheolef::space_constant::tensor
@ tensor
Definition: space_constant.h:138
rheolef::space_constant::scalar
@ scalar
Definition: space_constant.h:136
rheolef::space_constant::unsymmetric_tensor
@ unsymmetric_tensor
Definition: space_constant.h:139
rheolef::space_constant::vector
@ vector
Definition: space_constant.h:137
rheolef
This file is part of Rheolef.
Definition: compiler_eigen.h:37
rheolef::put
void put(std::ostream &out, std::string name, const tiny_matrix< T > &a)
Definition: tiny_lu.h:155
rheolef::delete_suffix
string delete_suffix(const string &name, const string &suffix)
delete_suffix: see the rheostream page for the full documentation
Definition: rheostream.cc:222
rheolef::prepend_dir_to_rheo_path
void prepend_dir_to_rheo_path(const string &dir)
prepend_dir_to_rheo_path: see the rheostream page for the full documentation
Definition: rheostream.cc:339
rheolef::proj
field_basic< T, M > proj(const field_basic< T, M > &uh, const std::string &approx="P1")
Definition: adapt.cc:39
rheolef::dot
rheolef::std enable_if ::type dot const Expr1 expr1, const Expr2 expr2 dot(const Expr1 &expr1, const Expr2 &expr2)
dot(x,y): see the expression page for the full documentation
Definition: vec_expr_v2.h:415
rheolef::get_basename
string get_basename(const string &name)
get_basename: see the rheostream page for the full documentation
Definition: rheostream.cc:254
rheolef::integrate
std::enable_if< details::is_field_expr_v2_nonlinear_arg< Expr >::value &&! is_undeterminated< Result >::value, Result >::type integrate(const geo_basic< T, M > &omega, const Expr &expr, const integrate_option &iopt, Result dummy=Result())
see the integrate page for the full documentation
Definition: integrate.h:202
rheolef::itos
std::string itos(std::string::size_type i)
itos: see the rheostream page for the full documentation
rheolef::is_float
bool is_float(const string &s)
is_float: see the rheostream page for the full documentation
Definition: rheostream.cc:476
rheolef::ddot
T ddot(const tensor_basic< T > &a, const tensor_basic< T > &b)
ddot(x,y): see the expression page for the full documentation
Definition: tensor.cc:278
rheolef::append_dir_to_rheo_path
void append_dir_to_rheo_path(const string &dir)
append_dir_to_rheo_path: see the rheostream page for the full documentation
Definition: rheostream.cc:330
rheolef::get_dirname
string get_dirname(const string &name)
get_dirname: see the rheostream page for the full documentation
Definition: rheostream.cc:263
rheolef::to_float
Float to_float(const string &s)
to_float: see the rheostream page for the full documentation
Definition: rheostream.cc:494
rheolef.h
rheolef - reference manual
p
Definition: sphere.icc:25
u
Definition: leveque.h:25
u
Float u(const point &x)
Definition: transmission_error.cc:26