Skip to content

Commit 7ca3aaa

Browse files
Split Solver.run() function (#198)
1 parent 02b8cbd commit 7ca3aaa

File tree

2 files changed

+46
-14
lines changed

2 files changed

+46
-14
lines changed

src/solve/Solver.cpp

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ Solver::Solver(const nlohmann::json& config) {
5656
sanity_checks();
5757
}
5858

59-
void Solver::run() {
60-
auto state = initial_state;
59+
void Solver::setup_initial() {
60+
state = initial_state;
6161

6262
// Create steady initial condition
6363
if (simparams.sim_steady_initial) {
@@ -79,12 +79,15 @@ void Solver::run() {
7979
// Use the initial condition (steady or user-provided) to set up parameters
8080
// which depend on the initial condition
8181
this->model->setup_initial_state_dependent_parameters(state);
82+
DEBUG_MSG("Setup initial");
83+
}
8284

85+
void Solver::setup_integrator() {
8386
// Set-up integrator
8487
DEBUG_MSG("Setup time integration");
85-
Integrator integrator(this->model.get(), simparams.sim_time_step_size,
86-
simparams.sim_rho_infty, simparams.sim_abs_tol,
87-
simparams.sim_nliter);
88+
integrator = Integrator(this->model.get(), simparams.sim_time_step_size,
89+
simparams.sim_rho_infty, simparams.sim_abs_tol,
90+
simparams.sim_nliter);
8891

8992
// Initialize loop
9093
states = std::vector<State>();
@@ -102,8 +105,10 @@ void Solver::run() {
102105
states.reserve(num_states);
103106
times.reserve(num_states);
104107
}
105-
double time = 0.0;
108+
time = 0.0;
109+
}
106110

111+
void Solver::run_integration() {
107112
// Run integrator
108113
DEBUG_MSG("Run time integration");
109114
int interval_counter = 0;
@@ -113,31 +118,37 @@ void Solver::run() {
113118
if (simparams.output_all_cycles || (0 >= start_last_cycle)) {
114119
times.push_back(time);
115120
states.push_back(std::move(state));
121+
DEBUG_MSG("Added initial state and time");
116122
}
117123

118124
int num_time_pts_in_two_cycles;
119125
std::vector<State> states_last_two_cycles;
120126
int last_two_cycles_time_pt_counter = 0;
127+
121128
if (simparams.use_cycle_to_cycle_error) {
122129
num_time_pts_in_two_cycles = 2 * (simparams.sim_pts_per_cycle - 1) + 1;
123130
states_last_two_cycles =
124131
std::vector<State>(num_time_pts_in_two_cycles, state);
132+
DEBUG_MSG("Initialized cycle to cycle error tracking with "
133+
<< num_time_pts_in_two_cycles << " points");
125134
}
135+
126136
for (int i = 1; i < simparams.sim_num_time_steps; i++) {
127137
if (simparams.use_cycle_to_cycle_error) {
128138
if (i == simparams.sim_num_time_steps - num_time_pts_in_two_cycles + 1) {
129-
// add first state
130139
states_last_two_cycles[last_two_cycles_time_pt_counter] = state;
131-
last_two_cycles_time_pt_counter +=
132-
1; // last_two_cycles_time_pt_counter becomes 1
140+
last_two_cycles_time_pt_counter += 1;
133141
}
134142
}
143+
135144
state = integrator.step(state, time);
145+
136146
if (simparams.use_cycle_to_cycle_error &&
137147
last_two_cycles_time_pt_counter > 0) {
138148
states_last_two_cycles[last_two_cycles_time_pt_counter] = state;
139149
last_two_cycles_time_pt_counter += 1;
140150
}
151+
141152
interval_counter += 1;
142153
time = simparams.sim_time_step_size * double(i);
143154

@@ -166,9 +177,11 @@ void Solver::run() {
166177
states_last_two_cycles.begin(),
167178
states_last_two_cycles.begin() + simparams.sim_pts_per_cycle - 1,
168179
states_last_two_cycles.end());
180+
169181
last_two_cycles_time_pt_counter = simparams.sim_pts_per_cycle;
170182
for (size_t i = 1; i < simparams.sim_pts_per_cycle; i++) {
171183
state = integrator.step(state, time);
184+
172185
states_last_two_cycles[last_two_cycles_time_pt_counter] = state;
173186
last_two_cycles_time_pt_counter += 1;
174187
interval_counter += 1;
@@ -184,8 +197,10 @@ void Solver::run() {
184197
}
185198
}
186199
extra_num_cycles++;
200+
187201
converged = check_vessel_cap_convergence(states_last_two_cycles,
188202
vessel_caps_dof_indices);
203+
189204
assert(last_two_cycles_time_pt_counter == num_time_pts_in_two_cycles);
190205
}
191206
std::cout << "Ran simulation for " << extra_num_cycles
@@ -196,6 +211,7 @@ void Solver::run() {
196211
std::pair<double, double> cycle_to_cycle_errors_in_flow_and_pressure =
197212
get_cycle_to_cycle_errors_in_flow_and_pressure(
198213
states_last_two_cycles, dof_indices);
214+
199215
double cycle_to_cycle_error_flow =
200216
cycle_to_cycle_errors_in_flow_and_pressure.first;
201217
double cycle_to_cycle_error_pressure =
@@ -223,6 +239,13 @@ void Solver::run() {
223239
time -= start_time;
224240
}
225241
}
242+
DEBUG_MSG("Ran time integration");
243+
}
244+
245+
void Solver::run() {
246+
setup_initial();
247+
setup_integrator();
248+
run_integration();
226249
}
227250

228251
std::vector<std::pair<int, int>> Solver::get_vessel_caps_dof_indices() {

src/solve/Solver.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,16 @@ class Solver {
3131
*/
3232
Solver(const nlohmann::json& config);
3333

34-
/**
35-
* @brief Run the simulation
36-
*
37-
*/
34+
/// Set up and initialize the simulation parameters and model
35+
void setup_initial();
36+
37+
/// Set up integrator
38+
void setup_integrator();
39+
40+
/// Run the integration
41+
void run_integration();
42+
43+
/// Run the simulation
3844
void run();
3945

4046
/**
@@ -96,8 +102,11 @@ class Solver {
96102
std::shared_ptr<Model> model;
97103
SimulationParameters simparams;
98104
std::vector<State> states;
99-
std::vector<double> times;
100105
State initial_state;
106+
State state;
107+
std::vector<double> times;
108+
double time;
109+
Integrator integrator;
101110

102111
void sanity_checks();
103112

0 commit comments

Comments
 (0)