libmesh
libmesh copied to clipboard
Enhance MeshFunction to handle vector variables
We would resize the output vector to be equal to vec_dim * n_vector_vars + n_scalar_vars
so we can easily get the vec_dim using this->_system_vars.size() as already implemented, however which specific vector vars are we counting to calculate n_vector_vars and the same for scaler vars with n_scalar_vars?
vec_dim
isn't _system_vars.size()
; it would be the dimensionality of the vector variables, not the total number of variables.
_system_vars
is a vector of variable indices; vector variables with any of those indices would be included in n_vector_vars
and scalar variables with any of those indices would be included in n_scalar_vars
.
thank you! I guess what i'm confused about is which specific variables am I checking for having those indices, are they in the mesh_function.C file? and is there some sort of map of vector variables and their dimensionality in order to calculate vec_dim
?
Variables are added dynamically to a System
; DofMap::n_variables()
returns the total count of them for its associated system. Each variable's information is available from DofMap::variable(i)
; that information includes a FEType
, and FEInterface::n_vec_dim(mesh, fe_type)
indicates how many dimensions a particular non-SCALAR
variable has.
You might want to consider looking through some of the libMesh example programs; e.g. the distinction between variables in the C++ (might be named in a library .C file) context versus variables in the mathematical (added and named by an application) context is shown in introduction_ex2.C; later introduction_ex4.C is the first to use the returned index of a newly-added variable.