astronomix.initial_condition_generation.magnetic_field_from_vector_potential module

astronomix.initial_condition_generation.magnetic_field_from_vector_potential module#

Construct divergence-free magnetic fields from a vector potential.

Initialising the magnetic field from a vector potential A and taking a discrete curl guarantees div(B) = 0 to machine precision under the matching discrete divergence operator. The correct discretisation of that curl depends on the solver topology, so this module branches on the solver mode: staggered edge-centered differences for the constrained-transport finite-difference scheme, and a central-difference curl for the cell-centered finite-volume scheme.

astronomix.initial_condition_generation.magnetic_field_from_vector_potential.setup_magnetic_fields_from_vector_potential(config: SimulationConfig, vector_potential_func: Callable, *args, **kwargs) Tuple[Array, Array, Array, Array, Array, Array][source]#

Calculate the cell-centered and face-centered magnetic fields from a given vector potential function, correctly applying discrete curl operations depending on the solver mode (FINITE_DIFFERENCE or FINITE_VOLUME) to ensure a divergence-free magnetic field.

Note: Uniform background fields cannot be correctly generated from a periodic vector potential. Add background fields to the returned arrays after calling.

Parameters:
  • config – The simulation configuration object.

  • vector_potential_func – A callable f(X, Y, Z, *args, **kwargs) that returns a tuple (A_x, A_y, A_z) evaluated at the given coordinates.

  • *args – Additional positional arguments passed to vector_potential_func (e.g. a time t).

  • **kwargs – Additional keyword arguments passed to vector_potential_func.

Returns:

Cell-centered magnetic field components. bxb, byb, bzb: Face-centered (interface) magnetic field components.

Return type:

B_x, B_y, B_z