34 class parabolic_solver_emi
39 enum parabolic_t {SEMI_IMPLICIT = 0};
62 sf_vec* vb_one_face =
nullptr;
63 sf_vec* vb_both_face =
nullptr;
64 sf_vec* vb_unique_face =
nullptr;
66 sf_vec* Ib_one_face =
nullptr;
67 sf_vec* Ib_both_face =
nullptr;
68 sf_vec* Ib_unique_face =
nullptr;
69 sf_vec* Iij_stim =
nullptr;
70 sf_vec* Iij_temp =
nullptr;
73 sf_mat* mass_emi =
nullptr;
74 sf_mat* mass_surf_emi =
nullptr;
76 sf_mat* stiffness_emi =
nullptr;
82 sf_mat* operator_unique_to_both_faces =
nullptr;
83 sf_mat* operator_both_to_unique_face =
nullptr;
87 std::pair<SF::emi_face<mesh_int_t,SF::tuple<mesh_int_t>>,
88 SF::emi_face<mesh_int_t,SF::tuple<mesh_int_t>>>> line_face;
90 std::pair<SF::emi_face<mesh_int_t,SF::triple<mesh_int_t>>,
91 SF::emi_face<mesh_int_t,SF::triple<mesh_int_t>>>> tri_face;
93 std::pair<SF::emi_face<mesh_int_t,SF::quadruple<mesh_int_t>>,
94 SF::emi_face<mesh_int_t,SF::quadruple<mesh_int_t>>>> quad_face;
123 sf_sol* lin_solver =
nullptr;
126 lin_solver_stats stats;
129 dbc_manager* dbc =
nullptr;
130 bool phie_mat_has_nullspace =
false;
131 bool fem_matrices_exact_preallocated =
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;
155 if (operator_unique_to_both_faces)
delete operator_unique_to_both_faces;
156 if (operator_both_to_unique_face)
delete operator_both_to_unique_face;
161 if (ui_pre)
delete ui_pre;
164 if (vb_both_face)
delete vb_both_face;
165 if (vb_unique_face)
delete vb_unique_face;
168 if (Ib_both_face)
delete Ib_both_face;
169 if (Ib_unique_face)
delete Ib_unique_face;
170 if (Iij_stim)
delete Iij_stim;
171 if (Iij_temp)
delete Iij_temp;
172 if (Irhs)
delete Irhs;
189 void setup_linear_solver(
FILE_SPEC logger);
191 void solve_semiImplicit();
194 class EMI :
public Basic_physic
199 MaterialType mtype_vol[1];
200 MaterialType_EMI mtype_face;
209 parabolic_solver_emi parab_solver;
212 gvec_data_OnFace gvec;
215 igb_output_manager output_manager;
218 phie_recovery_data phie_rcv;
220 generic_timing_stats IO_stats;
251 inline void output_timings()
254 compute_time -= ion.compute_time;
255 initialize_time -= ion.initialize_time;
260 ion.output_timings();
268 double timer_val(
const int timer_id);
271 std::string timer_unit(
const int timer_id);
312 void setup_stimuli();
346 void apply_current_stimulus();
367 void apply_dbc_stimulus();
404 void balance_electrodes();
464 void setup_solvers();
467 void setup_mappings();
473 void dump_matrices();
475 void checkpointing();
478 void setup_EMI_mesh();
488 void log_mesh_local_element_ranges(
const sf_mesh& emi_mesh,
489 const sf_mesh& emi_surfmesh_w_counter_face,
490 const sf_mesh& emi_surfmesh_unique_face);
503 void partition_based_tags(
int num_tags,
514 int expected_num_tags,
opencarp::local_index_t mesh_int_t
virtual void output_timings()
Tissue level electrics, main Electrics physics class.
LIMPET ionics and gap-junction models on the EMI unique-face interface 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