Skip to content

Commit ce47de2

Browse files
committed
unify reading of calibration parameters
1 parent 73053f1 commit ce47de2

2 files changed

Lines changed: 35 additions & 71 deletions

File tree

src/solve/SimulationParameters.cpp

Lines changed: 25 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,6 @@ void load_simulation_model(const nlohmann::json& config, Model& model) {
200200
std::string component;
201201

202202
// Create vessels
203-
DEBUG_MSG("Loading vessels");
204203
component = "vessels";
205204
std::map<int, std::string> vessel_id_map;
206205
if (config.contains(component)) {
@@ -255,90 +254,33 @@ void load_simulation_model(const nlohmann::json& config, Model& model) {
255254
}
256255

257256
// Create Connections
258-
for (auto& connection : connections) {
259-
auto ele1 = model.get_block(std::get<0>(connection));
260-
auto ele2 = model.get_block(std::get<1>(connection));
261-
model.add_node({ele1}, {ele2}, ele1->get_name() + ":" + ele2->get_name());
262-
}
257+
create_connections(model, connections);
263258

264259
// Finalize model
265260
model.finalize();
266261
}
267262

268263
void load_calibration_model(const nlohmann::json& config, Model& model) {
269264
std::vector<std::tuple<std::string, std::string>> connections;
270-
std::vector<std::tuple<std::string, std::string>> inlet_connections;
271-
std::vector<std::tuple<std::string, std::string>> outlet_connections;
272265

273-
// Create vessels
274-
DEBUG_MSG("Load vessels");
275-
std::map<std::int64_t, std::string> vessel_id_map;
276-
int param_counter = 0;
277-
for (auto const& vessel_config : config["vessels"]) {
278-
std::string vessel_name = vessel_config["vessel_name"];
279-
280-
// Create parameter IDs
281-
std::vector<int> param_ids;
282-
for (size_t k = 0; k < 4; k++) param_ids.push_back(param_counter++);
283-
model.add_block("BloodVessel", param_ids, vessel_name);
284-
vessel_id_map.insert({vessel_config["vessel_id"], vessel_name});
285-
DEBUG_MSG("Created vessel " << vessel_name);
266+
// Move through different component names
267+
std::string component;
286268

287-
// Read connected boundary conditions
288-
if (vessel_config.contains("boundary_conditions")) {
289-
auto const& vessel_bc_config = vessel_config["boundary_conditions"];
290-
if (vessel_bc_config.contains("inlet")) {
291-
inlet_connections.push_back({vessel_bc_config["inlet"], vessel_name});
292-
}
293-
if (vessel_bc_config.contains("outlet")) {
294-
outlet_connections.push_back({vessel_name, vessel_bc_config["outlet"]});
295-
}
296-
}
269+
// Create vessels
270+
component = "vessels";
271+
std::map<int, std::string> vessel_id_map;
272+
if (config.contains(component)) {
273+
create_vessels(model, connections, config, component, vessel_id_map);
297274
}
298-
275+
299276
// Create junctions
300-
for (auto const& junction_config : config["junctions"]) {
301-
std::string junction_name = junction_config["junction_name"];
302-
auto const& outlet_vessels = junction_config["outlet_vessels"];
303-
int num_outlets = outlet_vessels.size();
304-
305-
if (num_outlets == 1) {
306-
model.add_block("NORMAL_JUNCTION", {}, junction_name);
307-
308-
} else {
309-
std::vector<int> param_ids;
310-
for (size_t i = 0; i < (num_outlets * 3); i++)
311-
param_ids.push_back(param_counter++);
312-
model.add_block("BloodVesselJunction", param_ids, junction_name);
313-
}
314-
315-
// Check for connections to inlet and outlet vessels and append to
316-
// connections list
317-
for (auto vessel_id : junction_config["inlet_vessels"]) {
318-
connections.push_back({vessel_id_map[vessel_id], junction_name});
319-
}
320-
321-
for (auto vessel_id : outlet_vessels) {
322-
connections.push_back({junction_name, vessel_id_map[vessel_id]});
323-
}
324-
DEBUG_MSG("Created junction " << junction_name);
277+
component = "junctions";
278+
if (config.contains(component)) {
279+
create_junctions(model, connections, config, component, vessel_id_map);
325280
}
326281

327282
// Create Connections
328-
DEBUG_MSG("Created connection");
329-
for (auto& connection : connections) {
330-
auto ele1 = model.get_block(std::get<0>(connection));
331-
auto ele2 = model.get_block(std::get<1>(connection));
332-
model.add_node({ele1}, {ele2}, ele1->get_name() + ":" + ele2->get_name());
333-
}
334-
for (auto& connection : inlet_connections) {
335-
auto ele = model.get_block(std::get<1>(connection));
336-
model.add_node({}, {ele}, std::get<0>(connection) + ":" + ele->get_name());
337-
}
338-
for (auto& connection : outlet_connections) {
339-
auto ele = model.get_block(std::get<0>(connection));
340-
model.add_node({ele}, {}, ele->get_name() + ":" + std::get<1>(connection));
341-
}
283+
create_connections(model, connections);
342284

343285
// Finalize model
344286
model.finalize();
@@ -349,6 +291,7 @@ void create_vessels(
349291
std::vector<std::tuple<std::string, std::string>>& connections,
350292
const nlohmann::json& config, const std::string& component,
351293
std::map<int, std::string>& vessel_id_map) {
294+
DEBUG_MSG("Loading vessels");
352295
// Loop all vessels
353296
for (size_t i = 0; i < config[component].size(); i++) {
354297
const auto& vessel_config =
@@ -541,6 +484,17 @@ void create_junctions(
541484
}
542485
}
543486

487+
void create_connections(Model& model,
488+
std::vector<std::tuple<std::string, std::string>>&
489+
connections) {
490+
DEBUG_MSG("Creating connections");
491+
for (auto& connection : connections) {
492+
auto ele1 = model.get_block(std::get<0>(connection));
493+
auto ele2 = model.get_block(std::get<1>(connection));
494+
model.add_node({ele1}, {ele2}, ele1->get_name() + ":" + ele2->get_name());
495+
}
496+
}
497+
544498
void create_closed_loop(
545499
Model& model,
546500
std::vector<std::tuple<std::string, std::string>>& connections,

src/solve/SimulationParameters.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,16 @@ void create_junctions(
233233
const nlohmann::json& config, const std::string& component,
234234
std::map<int, std::string>& vessel_id_map);
235235

236+
/**
237+
* @brief Create connections between blocks
238+
*
239+
* @param model The model the block is associated with
240+
* @param connections Vector storing the connections between blocks
241+
*/
242+
void create_connections(
243+
Model& model,
244+
std::vector<std::tuple<std::string, std::string>>& connections);
245+
236246
/**
237247
* @brief Handle the creation of closed-loop blocks and associated connections
238248
*

0 commit comments

Comments
 (0)