7#ifndef SVZERODSOLVER_SIMULATIONPARAMETERS_HPP_
8#define SVZERODSOLVER_SIMULATIONPARAMETERS_HPP_
11#include <nlohmann/json.hpp>
84 JsonWrapper(
const nlohmann::json& json,
const std::string& component,
85 const std::string& name_str,
const int&
id)
86 : nlohmann::json(json[component][id]),
98 const nlohmann::json&
operator[](
const char* key)
const {
99 if (!this->contains(key)) {
100 if (this->contains(name_str)) {
101 const std::string name = this->at(name_str);
102 throw std::runtime_error(
"Key " + std::string(key) +
103 " not found in element " + name +
104 " of component " + component);
106 throw std::runtime_error(
107 "Key " + std::string(key) +
" not found in element number " +
108 std::to_string(block_id) +
" of component " + component);
111 return this->at(key);
115 using nlohmann::json::contains;
116 using nlohmann::json::value;
117 using nlohmann::json::operator[];
120 std::string component;
121 std::string name_str;
140 const std::string& block_type,
const std::string_view& name,
141 bool internal =
false,
bool periodic =
true);
156 Model& model,
const nlohmann::json& j,
const std::string& chamber_name);
203 std::vector<std::tuple<std::string, std::string>>& connections,
204 const nlohmann::json& config,
const std::string& component,
205 std::map<int, std::string>& vessel_id_map);
220 std::vector<std::tuple<std::string, std::string>>& connections,
221 const nlohmann::json& config,
const std::string& component,
222 std::map<int, std::string>& vessel_id_map,
223 std::map<std::string, std::string>& bc_type_map);
236 const std::string& component,
237 std::map<std::string, std::string>& bc_type_map,
238 std::vector<std::string>& closed_loop_bcs);
251 std::vector<std::tuple<std::string, std::string>>& connections,
252 const nlohmann::json& config,
const std::string& component,
253 std::map<int, std::string>& vessel_id_map);
267 std::vector<std::tuple<std::string, std::string>>& connections,
268 const nlohmann::json& config,
const std::string& component,
269 std::vector<std::string>& closed_loop_bcs);
281 std::vector<std::tuple<std::string, std::string>>& connections,
282 const nlohmann::json& config,
const std::string& component);
294 std::vector<std::tuple<std::string, std::string>>& connections,
295 const nlohmann::json& config,
const std::string& component);
Activation function classes for cardiac chamber models.
void create_chambers(Model &model, std::vector< std::tuple< std::string, std::string > > &connections, const nlohmann::json &config, const std::string &component)
Handle the creation of chambers.
Definition SimulationParameters.cpp:598
void create_junctions(Model &model, std::vector< std::tuple< std::string, std::string > > &connections, const nlohmann::json &config, const std::string &component, std::map< int, std::string > &vessel_id_map)
Handle the creation of junctions and their connections.
Definition SimulationParameters.cpp:482
void create_boundary_conditions(Model &model, const nlohmann::json &config, const std::string &component, std::map< std::string, std::string > &bc_type_map, std::vector< std::string > &closed_loop_bcs)
Handle the creation of boundary condition blocks.
Definition SimulationParameters.cpp:362
void create_valves(Model &model, std::vector< std::tuple< std::string, std::string > > &connections, const nlohmann::json &config, const std::string &component)
Handle the creation of valves and their associated connections.
Definition SimulationParameters.cpp:580
State load_initial_condition(const nlohmann::json &config, Model &model)
Load initial conditions from a JSON configuration.
Definition SimulationParameters.cpp:631
void create_vessels(Model &model, std::vector< std::tuple< std::string, std::string > > &connections, const nlohmann::json &config, const std::string &component, std::map< int, std::string > &vessel_id_map)
Handle the creation of vessel blocks and connections with boundary conditions.
Definition SimulationParameters.cpp:327
void create_closed_loop(Model &model, std::vector< std::tuple< std::string, std::string > > &connections, const nlohmann::json &config, const std::string &component, std::vector< std::string > &closed_loop_bcs)
Handle the creation of closed-loop blocks and associated connections.
Definition SimulationParameters.cpp:524
void load_simulation_model(const nlohmann::json &config, Model &model)
Load the 0D block in the model from a configuration.
Definition SimulationParameters.cpp:253
std::unique_ptr< ActivationFunction > generate_activation_function(Model &model, const nlohmann::json &j, const std::string &chamber_name)
Create an activation function from JSON (analogous to generate_block)
Definition SimulationParameters.cpp:142
SimulationParameters load_simulation_params(const nlohmann::json &config)
Load the simulation parameters from a JSON configuration.
Definition SimulationParameters.cpp:210
int generate_block(Model &model, const nlohmann::json &block_params_json, const std::string &block_type, const std::string_view &name, bool internal=false, bool periodic=true)
Generate a new block and add its parameters to the model.
Definition SimulationParameters.cpp:44
void create_external_coupling(Model &model, std::vector< std::tuple< std::string, std::string > > &connections, const nlohmann::json &config, const std::string &component, std::map< int, std::string > &vessel_id_map, std::map< std::string, std::string > &bc_type_map)
Handle the creation of external coupling blocks and connections with other blocks.
Definition SimulationParameters.cpp:397
void validate_input(const nlohmann::json &config)
Check that the JSON configuration has the required inputs.
Definition SimulationParameters.cpp:201
const nlohmann::json & operator[](const char *key) const
Wrap error check around key retrieval (throws detailed error if key doesn't exist)
Definition SimulationParameters.h:98
JsonWrapper(const nlohmann::json &json, const std::string &component, const std::string &name_str, const int &id)
Wrap around JSON configuration with detailed error message in case key is not found in configuration.
Definition SimulationParameters.h:84
Model of 0D elements.
Definition Model.h:52
State of the system.
Definition State.h:19
Simulation parameters.
Definition SimulationParameters.h:38
bool sim_coupled
Running 0D simulation coupled with external solver.
Definition SimulationParameters.h:66
int sim_nliter
Definition SimulationParameters.h:54
bool output_all_cycles
Output all cardiac cycles.
Definition SimulationParameters.h:64
int sim_pts_per_cycle
Number of time steps per cardiac cycle.
Definition SimulationParameters.h:45
int sim_num_time_steps
Total number of time steps.
Definition SimulationParameters.h:53
double sim_external_step_size
Definition SimulationParameters.h:68
double sim_time_step_size
Simulation time step size.
Definition SimulationParameters.h:41
int sim_num_cycles
Number of cardiac cycles to simulate.
Definition SimulationParameters.h:44
bool output_mean_only
Output only the mean value.
Definition SimulationParameters.h:62
bool sim_steady_initial
Start from steady solution.
Definition SimulationParameters.h:59
int output_interval
Interval of writing output.
Definition SimulationParameters.h:57
bool output_variable_based
Output variable based instead of vessel based.
Definition SimulationParameters.h:60
double sim_abs_tol
Absolute tolerance for simulation.
Definition SimulationParameters.h:42
double sim_cardiac_period
Cardiac period.
Definition SimulationParameters.h:43
bool output_derivative
Output derivatives.
Definition SimulationParameters.h:63
double sim_cycle_to_cycle_error
Cycle-to-cycle error.
Definition SimulationParameters.h:52
bool use_cycle_to_cycle_error
Definition SimulationParameters.h:46
double sim_rho_infty
Spectral radius of generalized-alpha.
Definition SimulationParameters.h:56