Skip to content

Commit

Permalink
Merge pull request #6 from ComputationalPhysiology/initialize-state
Browse files Browse the repository at this point in the history
Make it possible to pass initial state into initializer
  • Loading branch information
finsberg authored Oct 4, 2024
2 parents 33d35a4 + cbff886 commit 2160984
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 11 deletions.
31 changes: 20 additions & 11 deletions src/circulation/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,21 +86,34 @@ def __init__(
verbose: bool = False,
comm=None,
callback_save_state: CallBack | None = None,
initial_state: dict[str, float] | None = None,
):
self.parameters = type(self).default_parameters()
if parameters is not None:
self.parameters = deep_update(self.parameters, parameters)

self._add_units = add_units

self.state = type(self).default_initial_conditions()
if initial_state is not None:
self.state.update(initial_state)

table = Table(title=f"Circulation model parameters ({type(self).__name__})")
table.add_column("Parameter")
table.add_column("Value")
recuursive_table(self.parameters, table)
logger.info(f"\n{log.log_table(table)}")

table = Table(title=f"Circulation model initial states ({type(self).__name__})")
table.add_column("State")
table.add_column("Value")
recuursive_table(self.state, table)
logger.info(f"\n{log.log_table(table)}")

if not add_units:
self.parameters = remove_units(self.parameters)
self.state = remove_units(self.state)

self._add_units = add_units
self.outdir = outdir
outdir.mkdir(exist_ok=True, parents=True)

Expand All @@ -126,8 +139,7 @@ def __init__(
def _initialize(self):
self.var = {}
self.results = defaultdict(list)
self.state = type(self).default_initial_conditions()
self.update_state()

self.update_static_variables(0.0)

if self._comm is None or (self._comm is not None and self._comm.rank == 0):
Expand All @@ -150,13 +162,6 @@ def default_parameters() -> dict[str, Any]: ...
def update_static_variables(self, t: float):
pass

def update_state(self, state: dict[str, float] | None = None):
if state is not None:
self.state.update(state)

if not self._add_units:
self.state = remove_units(self.state)

@staticmethod
@abstractmethod
def default_initial_conditions() -> dict[str, float]: ...
Expand Down Expand Up @@ -216,11 +221,15 @@ def solve(
else:
checkoint_every_n_steps = np.inf

self.update_state(state=initial_state)
if initial_state is not None:
self.state.update(initial_state)

t = 0.0
if self._add_units:
t *= units.ureg("s")
dt *= units.ureg("s")
else:
self.state = remove_units(self.state)

self.store(t)

Expand Down
2 changes: 2 additions & 0 deletions src/circulation/regazzoni2020.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def __init__(
verbose: bool = False,
comm=None,
outdir: Path = Path("results-regazzoni"),
initial_state: dict[str, float] | None = None,
):
super().__init__(
parameters,
Expand All @@ -39,6 +40,7 @@ def __init__(
verbose=verbose,
comm=comm,
outdir=outdir,
initial_state=initial_state,
)
chambers = self.parameters["chambers"]
valves = self.parameters["valves"]
Expand Down

0 comments on commit 2160984

Please sign in to comment.