@@ -282,15 +282,105 @@ void load_calibration_model(const nlohmann::json& config, Model& model) {
282282 if (config.contains (component)) {
283283 create_vessels (model, connections, config, component, vessel_id_map);
284284 }
285-
285+
286286 // Create junctions
287287 component = " junctions" ;
288288 if (config.contains (component)) {
289289 create_junctions (model, connections, config, component, vessel_id_map);
290290 }
291291
292292 // Create Connections
293- create_connections (model, connections);
293+ DEBUG_MSG (" Create connections" );
294+ for (auto & cn : connections) {
295+ auto ele1 = model.get_block (std::get<0 >(cn));
296+ auto ele2 = model.get_block (std::get<1 >(cn));
297+ if (ele1->get_vessel_type () == VesselType::inlet) {
298+ model.add_node ({}, {ele1}, std::get<0 >(cn) + " :" + ele1->get_name ());
299+ } else if (ele2->get_vessel_type () == VesselType::outlet) {
300+ model.add_node ({ele2}, {}, ele2->get_name () + " :" + std::get<1 >(cn));
301+ } else {
302+ model.add_node ({ele1}, {ele2}, ele1->get_name () + " :" + ele2->get_name ());
303+ }
304+ }
305+
306+ // Finalize model
307+ model.finalize ();
308+ }
309+
310+ void load_calibration_model_legacy (const nlohmann::json& config, Model& model) {
311+ std::vector<std::tuple<std::string, std::string>> connections;
312+ std::vector<std::tuple<std::string, std::string>> inlet_connections;
313+ std::vector<std::tuple<std::string, std::string>> outlet_connections;
314+
315+ // Create vessels
316+ DEBUG_MSG (" Load vessels" );
317+ std::map<std::int64_t , std::string> vessel_id_map;
318+ int param_counter = 0 ;
319+ for (auto const & vessel_config : config[" vessels" ]) {
320+ std::string vessel_name = vessel_config[" vessel_name" ];
321+
322+ // Create parameter IDs
323+ std::vector<int > param_ids;
324+ for (size_t k = 0 ; k < 4 ; k++) param_ids.push_back (param_counter++);
325+ model.add_block (" BloodVessel" , param_ids, vessel_name);
326+ vessel_id_map.insert ({vessel_config[" vessel_id" ], vessel_name});
327+ DEBUG_MSG (" Created vessel " << vessel_name);
328+
329+ // Read connected boundary conditions
330+ if (vessel_config.contains (" boundary_conditions" )) {
331+ auto const & vessel_bc_config = vessel_config[" boundary_conditions" ];
332+ if (vessel_bc_config.contains (" inlet" )) {
333+ inlet_connections.push_back ({vessel_bc_config[" inlet" ], vessel_name});
334+ }
335+ if (vessel_bc_config.contains (" outlet" )) {
336+ outlet_connections.push_back ({vessel_name, vessel_bc_config[" outlet" ]});
337+ }
338+ }
339+ }
340+
341+ // Create junctions
342+ for (auto const & junction_config : config[" junctions" ]) {
343+ std::string junction_name = junction_config[" junction_name" ];
344+ auto const & outlet_vessels = junction_config[" outlet_vessels" ];
345+ int num_outlets = outlet_vessels.size ();
346+
347+ if (num_outlets == 1 ) {
348+ model.add_block (" NORMAL_JUNCTION" , {}, junction_name);
349+
350+ } else {
351+ std::vector<int > param_ids;
352+ for (size_t i = 0 ; i < (num_outlets * 3 ); i++)
353+ param_ids.push_back (param_counter++);
354+ model.add_block (" BloodVesselJunction" , param_ids, junction_name);
355+ }
356+
357+ // Check for connections to inlet and outlet vessels and append to
358+ // connections list
359+ for (auto vessel_id : junction_config[" inlet_vessels" ]) {
360+ connections.push_back ({vessel_id_map[vessel_id], junction_name});
361+ }
362+
363+ for (auto vessel_id : outlet_vessels) {
364+ connections.push_back ({junction_name, vessel_id_map[vessel_id]});
365+ }
366+ DEBUG_MSG (" Created junction " << junction_name);
367+ }
368+
369+ // Create Connections
370+ DEBUG_MSG (" Created connection" );
371+ for (auto & connection : connections) {
372+ auto ele1 = model.get_block (std::get<0 >(connection));
373+ auto ele2 = model.get_block (std::get<1 >(connection));
374+ model.add_node ({ele1}, {ele2}, ele1->get_name () + " :" + ele2->get_name ());
375+ }
376+ for (auto & connection : inlet_connections) {
377+ auto ele = model.get_block (std::get<1 >(connection));
378+ model.add_node ({}, {ele}, std::get<0 >(connection) + " :" + ele->get_name ());
379+ }
380+ for (auto & connection : outlet_connections) {
381+ auto ele = model.get_block (std::get<0 >(connection));
382+ model.add_node ({ele}, {}, ele->get_name () + " :" + std::get<1 >(connection));
383+ }
294384
295385 // Finalize model
296386 model.finalize ();
@@ -494,9 +584,9 @@ void create_junctions(
494584 }
495585}
496586
497- void create_connections (Model& model,
498- std::vector<std::tuple<std::string, std::string>>&
499- connections) {
587+ void create_connections (
588+ Model& model,
589+ std::vector<std::tuple<std::string, std::string>>& connections) {
500590 DEBUG_MSG (" Creating connections" );
501591 for (auto & connection : connections) {
502592 auto ele1 = model.get_block (std::get<0 >(connection));
0 commit comments