SimiLie
Loading...
Searching...
No Matches
scalar_field.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_hamiltonian import HamiltonianDefinition
8from sympy import gamma, symbols
9
10
12 @staticmethod
13 def __call__(dimension: int) -> HamiltonianDefinition:
14 mass = symbols("mass")
15 coupling_constant = symbols("coupling_constant")
16 coupling_power = symbols("coupling_power")
17 phi = symbols("phi")
18 pi = symbols(f"pi0:{dimension}")
19
20 metric_sign = [-1] + [1] * (dimension - 1)
21 hamiltonian = 0.5 * (
22 -(mass**2) * phi**2
23 + sum(metric_sign[i] * pi[i] ** 2 for i in range(dimension))
24 ) - coupling_constant * phi**coupling_power / gamma(coupling_power + 1)
25
26 return HamiltonianDefinition(
27 namespace="similie::physics::scalar_field",
28 struct_name="ScalarFieldWithPowerCouplingHamiltonian",
29 parameters=["mass", "coupling_constant", "coupling_power"],
30 hamiltonian=hamiltonian,
31 variables=[phi, pi],
32 template_parameters=["class TemporalIndex", "class... SpatialIndex"],
33 )
HamiltonianDefinition __call__(int dimension)