34 class parabolic_solver_emi
39 enum parabolic_t {SEMI_IMPLICIT = 0};
59 sf_vec* vb_one_face =
nullptr;
60 sf_vec* vb_both_face =
nullptr;
61 sf_vec* vb_unique_face =
nullptr;
63 sf_vec* Ib_one_face =
nullptr;
64 sf_vec* Ib_both_face =
nullptr;
65 sf_vec* Ib_unique_face =
nullptr;
66 sf_vec* Iij_stim =
nullptr;
67 sf_vec* Iij_temp =
nullptr;
70 sf_mat* mass_emi =
nullptr;
71 sf_mat* mass_surf_emi =
nullptr;
73 sf_mat* stiffness_emi =
nullptr;
77 sf_mat* Vm_myocyte_emi =
nullptr;
80 sf_mat* operator_unique_to_both_faces =
nullptr;
81 sf_mat* operator_both_to_unique_face =
nullptr;
85 std::pair<SF::emi_face<mesh_int_t,SF::tuple<mesh_int_t>>,
86 SF::emi_face<mesh_int_t,SF::tuple<mesh_int_t>>>> line_face;
88 std::pair<SF::emi_face<mesh_int_t,SF::triple<mesh_int_t>>,
89 SF::emi_face<mesh_int_t,SF::triple<mesh_int_t>>>> tri_face;
91 std::pair<SF::emi_face<mesh_int_t,SF::quadruple<mesh_int_t>>,
92 SF::emi_face<mesh_int_t,SF::quadruple<mesh_int_t>>>> quad_face;
121 sf_sol* lin_solver =
nullptr;
124 lin_solver_stats stats;
127 dbc_manager* dbc =
nullptr;
128 bool phie_mat_has_nullspace =
false;
133 parabolic_t parab_tech = SEMI_IMPLICIT;
136 double final_residual = -1.0;
139 ~parabolic_solver_emi()
142 if (lin_solver)
delete lin_solver;
144 if (mass_emi)
delete mass_emi;
145 if (mass_surf_emi)
delete mass_surf_emi;
146 if (lhs_emi)
delete lhs_emi;
147 if (stiffness_emi)
delete stiffness_emi;
151 if (Vm_myocyte_emi)
delete Vm_myocyte_emi;
153 if (operator_unique_to_both_faces)
delete operator_unique_to_both_faces;
154 if (operator_both_to_unique_face)
delete operator_both_to_unique_face;
159 if (ui_pre)
delete ui_pre;
162 if (vb_both_face)
delete vb_both_face;
163 if (vb_unique_face)
delete vb_unique_face;
166 if (Ib_both_face)
delete Ib_both_face;
167 if (Ib_unique_face)
delete Ib_unique_face;
168 if (Iij_stim)
delete Iij_stim;
169 if (Iij_temp)
delete Iij_temp;
170 if (Irhs)
delete Irhs;
182 void setup_linear_solver(
FILE_SPEC logger);
184 void solve_semiImplicit();
187 class EMI :
public Basic_physic
192 MaterialType mtype_vol[1];
193 MaterialType_EMI mtype_face;
202 parabolic_solver_emi parab_solver;
205 gvec_data_OnFace gvec;
208 igb_output_manager output_manager;
211 phie_recovery_data phie_rcv;
213 generic_timing_stats IO_stats;
244 inline void output_timings()
247 compute_time -= ion.compute_time;
248 initialize_time -= ion.initialize_time;
253 ion.output_timings();
261 double timer_val(
const int timer_id);
264 std::string timer_unit(
const int timer_id);
305 void setup_stimuli();
340 void apply_current_stimulus();
361 void apply_dbc_stimulus();
398 void balance_electrodes();
458 void setup_solvers();
461 void setup_mappings();
467 void dump_matrices();
469 void checkpointing();
472 void setup_EMI_mesh();
477 void log_mesh_local_element_ranges(
const sf_mesh& emi_mesh,
478 const sf_mesh& emi_surfmesh_w_counter_face,
479 const sf_mesh& emi_surfmesh_unique_face);
486 void set_elec_tissue_properties_emi_volume(MaterialType* mtype,
FILE_SPEC logger);
499 void partition_based_tags(
int num_tags,
510 int expected_num_tags,
virtual void output_timings()
Tissue level electrics, main Electrics physics class.
Electrical ionics functions (gap junction + ionic current) on the face of interface mesh for EMI mesh...
SF::abstract_linear_solver< SF_int, SF_real > sf_sol
SF::meshdata< mesh_int_t, mesh_real_t > sf_mesh
@ emi_surface_unique_face_msh
SF::abstract_vector< SF_int, SF_real > sf_vec
SF::abstract_matrix< SF_int, SF_real > sf_mat