libmesh icon indicating copy to clipboard operation
libmesh copied to clipboard

Enhance MeshFunction to handle vector variables

Open lindsayad opened this issue 1 year ago • 4 comments

We would resize the output vector to be equal to vec_dim * n_vector_vars + n_scalar_vars

lindsayad avatar Nov 16 '23 20:11 lindsayad

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?

andcarl1364 avatar Apr 17 '24 18:04 andcarl1364

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.

roystgnr avatar Apr 17 '24 22:04 roystgnr

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?

andcarl1364 avatar Apr 18 '24 18:04 andcarl1364

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.

roystgnr avatar Apr 18 '24 19:04 roystgnr