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;
104 std::set<std::pair<mesh_int_t,mesh_int_t>> membraneFace_default;
105 std::set<std::pair<mesh_int_t,mesh_int_t>> gapjunctionFace_default;
124 sf_sol* lin_solver =
nullptr;
127 lin_solver_stats stats;
130 dbc_manager* dbc =
nullptr;
131 bool phie_mat_has_nullspace =
false;
136 parabolic_t parab_tech = SEMI_IMPLICIT;
139 double final_residual = -1.0;
142 ~parabolic_solver_emi()
145 if (lin_solver)
delete lin_solver;
147 if (mass_emi)
delete mass_emi;
148 if (mass_surf_emi)
delete mass_surf_emi;
149 if (lhs_emi)
delete lhs_emi;
150 if (stiffness_emi)
delete stiffness_emi;
154 if (Vm_myocyte_emi)
delete Vm_myocyte_emi;
156 if (operator_unique_to_both_faces)
delete operator_unique_to_both_faces;
157 if (operator_both_to_unique_face)
delete operator_both_to_unique_face;
162 if (ui_pre)
delete ui_pre;
165 if (vb_both_face)
delete vb_both_face;
166 if (vb_unique_face)
delete vb_unique_face;
169 if (Ib_both_face)
delete Ib_both_face;
170 if (Ib_unique_face)
delete Ib_unique_face;
171 if (Iij_stim)
delete Iij_stim;
172 if (Iij_temp)
delete Iij_temp;
173 if (Irhs)
delete Irhs;
185 void setup_linear_solver(
FILE_SPEC logger);
187 void solve_semiImplicit();
190 class EMI :
public Basic_physic
195 MaterialType mtype_vol[1];
196 MaterialType_EMI mtype_face;
205 parabolic_solver_emi parab_solver;
208 gvec_data_OnFace gvec;
211 igb_output_manager output_manager;
214 phie_recovery_data phie_rcv;
216 generic_timing_stats IO_stats;
247 inline void output_timings()
250 compute_time -= ion.compute_time;
251 initialize_time -= ion.initialize_time;
256 ion.output_timings();
264 double timer_val(
const int timer_id);
267 std::string timer_unit(
const int timer_id);
308 void setup_stimuli();
343 void apply_current_stimulus();
364 void apply_dbc_stimulus();
401 void balance_electrodes();
461 void setup_solvers();
464 void setup_mappings();
470 void dump_matrices();
472 void checkpointing();
475 void setup_EMI_mesh();
484 void set_elec_tissue_properties_emi_volume(MaterialType* mtype,
FILE_SPEC logger);
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
@ emi_surface_unique_face_msh
SF::abstract_vector< SF_int, SF_real > sf_vec
SF::abstract_matrix< SF_int, SF_real > sf_mat