Source code for sfepy.discrete.structural.fields

"""
Fields corresponding to structural elements.
"""
from sfepy.base.base import Struct
from sfepy.discrete.fem.fields_nodal import H1NodalMixin, FEField
from sfepy.discrete.structural.mappings import Shell10XMapping
from sfepy.discrete import PolySpace

[docs] class Shell10XField(H1NodalMixin, FEField): """ The approximation for the shell10x element. """ family_name = 'volume_H1_shell10x' def _create_interpolant(self): name = '%s_%s_%s_%d' % (self.gel.name, self.space, self.poly_space_basis, self.approx_order) ps = PolySpace.any_from_args(name, self.gel, self.approx_order, basis='lagrange', force_bubble=False) self.poly_space = ps
[docs] def create_mapping(self, region, integral, integration, return_mapping=True): """ Create a new reference mapping. """ if integration != 'custom': msg = "Shell10XField requires 'custom' integration instead of '%s'!" raise ValueError(msg % integration) qp = self.get_qp('v', integral) mapping = Shell10XMapping(region, self) out = mapping.get_mapping(qp.vals, qp.weights) # Store the integral used. out.integral = integral out.qp = qp if return_mapping: out = (out, mapping) return out
[docs] def create_output(self, dofs, var_name, dof_names=None, key=None, thickness=None, **kwargs): """ Convert the DOFs corresponding to the field to a dictionary of output data usable by Mesh.write(). Parameters ---------- dofs : array, shape (n_nod, n_component) The array of DOFs reshaped so that each column corresponds to one component. var_name : str The variable name corresponding to `dofs`. dof_names : tuple of str The names of DOF components. key : str, optional The key to be used in the output dictionary instead of the variable name. Returns ------- out : dict The output dictionary. """ out = {} out[key + '_disp'] = Struct(name='output_data', mode='vertex', data=dofs[:, :3], var_name=var_name, dofs=dof_names[:3]) out[key + '_rot'] = Struct(name='output_data', mode='vertex', data=dofs[:, 3:], var_name=var_name, dofs=dof_names[3:]) return out