integrate_option(3rheolef)
π integrate_option β the lil' options bag for integration, bestie π
okay so real talk, this is from the rheolef manual, section 3rheolef, and it's genuinely one of those pages that looks scary but is actually just a settings menu. let's go β¨
β¨ NAME β¨
integrate_option β expression integration options (rheolef-7.2) π
π¦ DESCRIPTION π¦
so this class is basically the group chat between you and the integrate(3) function β it sends options over whenever you're building a form(2) or a field(2). lowkey a whole communication era π
it lets you pick which quadrature formula gets used during the numerical integration (Gauss, Gauss-Lobatto, etc.) and the polynomial degree that's exactly integrated. that exactly-integrated polynomial degree? that's what we call the order of the quadrature formula here. also go peek at quadrature(1) for examples of quadrature formula, iykyk.
and on top of all the quadrature customization, this class also hands you some boolean flags, like computing the inverse matrix. multitasking icon behavior fr fr π
π QUADRATURE FAMILIES π
β gauss
the Gauss formula. it's the default, so if you don't say anything, this is what you get. no thoughts, just vibes β¨
πΈ gauss_lobatto
the Gauss-Lobatto formula. useful in some cases, e.g. when you're using the method of characteristic(2). heads up tho β it's actually implemented for order <= 2. that's it. that's the limit. π
π¦ gauss_radau
the Gauss-Radau formula β another classical alternative. a classic. a staple. we love her π«Ά
π middle_edge
the nodes are located at the midle edge. yes bestie that's literally how it's spelled in the source, i'm not fixing it, i'm not that kind of girl π this formula is useful in some special cases and its order is limited.
π superconvergent
another special case β this one's for testing superconvergence of the finite element method at some specific nodes. very "main character at one specific point" energy β
π equispaced
when the solution has low regularity, e.g. is discontinuous across elements, this simple formula is also useful. and here's the twist, bestie, so listen up: in that case the order parameter refers to the number of nodes used and not to the degree of polynomial exactly integated. for instance, order=1 refers to the trapezoidal formulae, and for the general case, there are order+1 nodes per edges. read that twice, it's a plot twist π
π BOOLEAN FLAGS π
π₯ invert
this flag, when set, performs a local inversion on the matrix at the element level. but plot twist β this procedure is allowed only when the global matrix is block diagonal, e.g. for discontinuous or bubble approximations. this property is true when basis functions have a compact support inside exactly one element. default is invert=false.
ngl bestie, do not just flip this one on and hope. the block-diagonal condition is not optional. π
π§ ignore_sys_coord
this flag has effects only for axisymmetric coordinate systems. when set, it omits the r weight in the r dr dz measure during the numerical integration performed the integrate(3) function. this feature is useful for computing the stream function in the axisymmetric case. default is ignore_sys_coord=false.
π
lump
this flag, when set, performs a mass lumping procedure on the matrix at the element level:
a(i,i) += sum(j!=i) a(i,j)
the resulting matrix is diagonal. this feature is useful for computing a diagonal approximation of the mass matrix for the continuous P1 element. default is lump=false. diagonal matrix? we love a clean girl aesthetic β¨
π IMPLEMENTATION π
this documentation has been generated from file fem/geo_element/integrate_option.h
class integrate_option {
public:
// typedefs:
typedef size_t size_type;
typedef enum {
gauss = 0,
gauss_lobatto = 1,
gauss_radau = 2,
middle_edge = 3,
superconvergent = 4,
equispaced = 5,
max_family = 6
} family_type; // update also family_name[] in quatrature.cc
static const size_type unset_order = std::numeric_limits<size_type>::max();
static const size_type default_order = unset_order;
static const family_type default_family = gauss;
// allocators:
integrate_option(
family_type ft = default_family,
size_type k = default_order);
integrate_option (const std::string& name);
integrate_option (const integrate_option& iopt);
integrate_option& operator= (const integrate_option& iopt);
// accessors & modifiers:
std::string name() const;
size_t get_order() const;
family_type get_family() const;
std::string get_family_name() const;
void reset (const std::string& name);
void set_order (size_t r);
void set_family (family_type type);
void set_family (std::string name);
// data:
bool invert, ignore_sys_coord, lump;
};
(yes the comment really does say quatrature.cc. we're keeping it exactly as-is, no cap. π«Ά)
π AUTHOR π
Pierre Saramito <Pierre.Saramito@imag.fr>
π COPYRIGHT π
Copyright (C) 2000-2018 Pierre Saramito <Pierre.Saramito@imag.fr> GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.
okay bestie that's the whole page, you ate it, you understood it, periodt π β¨
rheolef, Version 7.2 β signing off, mwah π«Άπ
π¦ where this page comes from
- debian trixie: librheolef-dev 7.2-4 Β· GPL-3.0-or-later
- ubuntu noble: librheolef-dev 7.2-3build5 Β· GPL-3.0-or-later
- ubuntu questing: librheolef-dev 7.2-4build1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms