SimiLie
Loading...
Searching...
No Matches
linear_magnetostatics.py
1#!/usr/bin/env python3
2# SPDX-FileCopyrightText: 2026 Baptiste Legouix
3# SPDX-License-Identifier: AGPL-3.0-or-later
4
5from __future__ import annotations
6
7from similie_generate_cpp_constitutive_law import ConstitutiveLawDefinition
8from similie_generate_cpp_hamiltonian import HamiltonianDefinition
9from sympy import symbols
10
11
13 @staticmethod
14 def __call__() -> HamiltonianDefinition:
15 A = symbols("A0:3")
16 B = symbols("B0:3")
17 j = symbols("j0:3")
18 mu = symbols("mu")
19 hamiltonian = sum(B[i] ** 2 / (2 * mu) - j[i] * A[i] for i in range(3))
20
21 return HamiltonianDefinition(
22 namespace="similie::physics::magnetostatics",
23 struct_name="LinearMagnetostaticsHamiltonian",
24 parameters=["mu"],
25 hamiltonian=hamiltonian,
26 variables=[A, B, j],
27 includes=["<similie/physics/magnetostatics/magnetostatics_quantities.hpp>"],
28 moments_computer="MagneticVectorPotentialToMagneticInduction<SpatialIndex...>",
29 template_parameters=["class MuTensor", "class... SpatialIndex"],
30 parameter_types={"mu": "MuTensor"},
31 parameter_value_expressions={
32 "mu": "m_mu(elem, ddc::DiscreteElement<sil::tensor::Covariant<sil::tensor::ScalarIndex>>(0))"
33 },
34 is_linear=True,
35 )
36
37
39 @staticmethod
40 def __call__() -> ConstitutiveLawDefinition:
41 hodge_star, b, h, mu = symbols("hodge_star b h mu")
42 return ConstitutiveLawDefinition(
43 namespace="similie::physics::magnetostatics",
44 class_name="LinearMagneticInductionToMagneticField",
45 parameters=["mu"],
46 variables=[str(hodge_star), str(b)],
47 output_variable=str(h),
48 constitutive_law=hodge_star * b / mu,
49 )