339 magnetic_field_over_induction = Function(
"magnetic_field_over_induction")
340 q = sum(component**2
for component
in b)
341 h = [b[i] * magnetic_field_over_induction(q)
for i
in range(3)]
342 hamiltonian = simplify(sum(b[i] * h[i] / 2
for i
in range(3))) - sum(
343 a[i] * j[i]
for i
in range(3)
346 return HamiltonianDefinition(
347 namespace=
"similie::physics::magnetostatics",
348 struct_name=
"NonlinearMagnetostaticsHamiltonian",
349 parameters=[
"bh_curve"],
350 hamiltonian=hamiltonian,
352 includes=[
"<similie/physics/magnetostatics/magnetostatics_quantities.hpp>"],
353 template_parameters=[
"class BHCurve"],
354 parameter_types={
"bh_curve":
"BHCurve"},
356 "magnetic_field_over_induction": SymbolicFunctionDefinition(
357 value_expression=
"m_bh_curve.h_over_b_from_q({argument})",
358 derivative_expressions={
359 1:
"m_bh_curve.d_h_over_b_dq_from_q({argument})",
360 2:
"m_bh_curve.d2_h_over_b_dq2_from_q({argument})",
364 moments_object_component_expression=
"{moments}.template get<{index}>()",
365 moments_object_norm2_expression=
"{moments}.norm2()",
366 generate_moments_jacobian=
True,
367 namespace_preamble=INTERPOLATED_BH_CURVE_HEADER,
368 namespace_epilogue=CONSTITUTIVE_LAW_HEADER,