30 "component_magnitudes");
32 if (rel_eps.has_value() != comp_mag.has_value())
35 "Either both or none of <relative_epsilons> and "
36 "<component_magnitudes> have to be specified.");
39 std::vector<double> abs_eps;
43 if (rel_eps->size() != comp_mag->size())
46 "The numbers of components of <relative_epsilons> and "
47 "<component_magnitudes> do not match.");
50 abs_eps.resize(rel_eps->size());
51 for (std::size_t i = 0; i < rel_eps->size(); ++i)
53 abs_eps[i] = (*rel_eps)[i] * (*comp_mag)[i];
60 abs_eps.emplace_back(1e-8);
63 return std::make_unique<ForwardDifferencesJacobianAssembler>(