23 "Numerical Jacobian assembler requires perturbation values "
24 "(epsilons) for finite difference approximation, but none were "
26 "Please specify <epsilons> in the <jacobian_assembler> section "
27 "of your project file.\n"
28 "Example: <epsilons>1e-8 1e-8</epsilons> for a process with 2 "
29 "non-deformation variables.");
36 int const max_non_deformation_dofs_per_node)
const override
39 if (num_abs_eps != max_non_deformation_dofs_per_node)
42 "Mismatch in numerical Jacobian perturbation configuration:\n"
43 " Provided epsilons: {:d}\n"
44 " Required epsilons: {:d} (one per non-deformation variable "
46 "Each non-deformation variable needs exactly one epsilon value "
47 "for numerical differentiation.\n"
48 "Deformation variables use analytical Jacobian and do not "
50 "Please adjust the <epsilons> array in your project file to "
51 "match the number of required components.",
52 num_abs_eps, max_non_deformation_dofs_per_node);
57 std::vector<int>
const& non_deformation_component_ids)
override
70 std::vector<int>
const& non_deformation_component_ids)
override
79 namespace rv = ranges::views;
82 [
this](
int comp_id) ->
double const&
Base class for Jacobian assemblers.
void checkPerturbationSize(int const max_non_deformation_dofs_per_node) const override
auto getVariableComponentEpsilonsView() const
std::vector< int > non_deformation_component_ids_
void setNonDeformationComponentIDs(std::vector< int > const &non_deformation_component_ids) override
void setNonDeformationComponentIDsNoSizeCheck(std::vector< int > const &non_deformation_component_ids) override
NumericalJacobianAssembler(std::vector< double > &&absolute_epsilons)
bool needsPicardAssembly() const override
std::vector< double > const absolute_epsilons_