Skip to content

Commit a58156f

Browse files
committed
Store important profile data in dataclass instead of deepcopying
1 parent 10615f0 commit a58156f

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

freegsnke/GSstaticsolver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ def port_critical(self, eq, profiles):
233233
eq.flag_limiter = profiles.flag_limiter
234234

235235
eq._current = np.sum(profiles.jtor) * self.dRdZ
236-
eq._profiles = deepcopy(profiles)
236+
eq._profiles = profiles.get_profile_data()
237237

238238
try:
239239
eq.tokamak_psi = self.tokamak_psi.reshape(self.nx, self.ny)

freegsnke/jtor_update.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
along with FreeGSNKE. If not, see <http://www.gnu.org/licenses/>.
2020
"""
2121

22+
from dataclasses import dataclass
23+
2224
import freegs4e
2325
import numpy as np
2426
from freegs4e.gradshafranov import mu0
@@ -30,6 +32,20 @@
3032
from . import switch_profile as swp
3133

3234

35+
@dataclass
36+
class ProfileData:
37+
"""Data from a `Jtor_universal` that is used in other
38+
areas of the code to avoid copying complex objects.
39+
"""
40+
41+
flag_limiter: bool
42+
jtor: np.ndarray
43+
diverted_core_mask: np.ndarray
44+
psi_bndry: np.ndarray
45+
xpt: list
46+
fvac: float
47+
48+
3349
class Jtor_universal:
3450

3551
def __init__(self, refine_jtor=False):
@@ -39,6 +55,16 @@ def __init__(self, refine_jtor=False):
3955
else:
4056
self.Jtor = self.Jtor_unrefined
4157

58+
def get_profile_data(self):
59+
return ProfileData(
60+
flag_limiter=self.flag_limiter,
61+
jtor=self.jtor,
62+
diverted_core_mask=self.diverted_core_mask,
63+
psi_bndry=self.psi_bndry,
64+
xpt=self.xpt,
65+
fvac=self._fvac,
66+
)
67+
4268
def set_masks(self, eq):
4369
"""Universal function to set all masks related to the limiter.
4470

0 commit comments

Comments
 (0)