You are using an outdated browser.
Please upgrade your browser to improve your experience.
def __init__(self, name: str, m: float, k: float, c: float): super().__init__(name) self.m = m self.k = k self.c = c self.x = 0.0 self.v = 0.0 # Define ports self.input_ports = [XModPort("F_ext")] self.output_ports = [XModPort("x"), XModPort("v")]
def get_state(self): return {} # stateless xmod co-simulation
def run(self, t_start: float, t_end: float, log_callback: Callable = None): t = t_start outputs = {name: {} for name in self.models} while t < t_end - 1e-12: # Gather all inputs for each model from previous outputs inputs_for = {name: {} for name in self.models} for fm, fp, tm, tp in self.connections: if fm in outputs and fp in outputs[fm]: inputs_for[tm][tp] = outputs[fm][fp] # Step each model new_outputs = {} for name, model in self.models.items(): step_result = model.step(t, self.dt, inputs_for[name]) new_outputs[name] = step_result.outputs outputs = new_outputs t += self.dt if log_callback: log_callback(t, outputs) def __init__(self, name: str, m: float, k: float,
def __init__(self, dt: float): self.dt = dt self.models: Dict[str, XModModel] = {} self.connections: List[tuple] = [] # (from_model, from_port, to_model, to_port) Master coordinates time steps and data exchange
def __init__(self, name: str): self.name = name self.input_ports: List[XModPort] = [] self.output_ports: List[XModPort] = []
I'll write it as a with a small demo. """ xmod co-simulation — a lightweight modular co-simulation framework. Models exchange data via ports and advance with their own solvers. Master coordinates time steps and data exchange. """ import numpy as np from dataclasses import dataclass from typing import Dict, List, Callable from abc import ABC, abstractmethod ---------------------------------------------------------------------- Core xmod types ---------------------------------------------------------------------- @dataclass class XModPort: """Defines a data port for a model.""" name: str shape: tuple = () dtype: type = float
@abstractmethod def get_state(self) -> Dict: """For checkpoint/rollback.""" pass
0%