@@ -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
228251std::vector<std::pair<int , int >> Solver::get_vessel_caps_dof_indices () {
0 commit comments