21 class parabolic_solver_emi
26 enum parabolic_t {SEMI_IMPLICIT = 0};
49 sf_vec* vb_one_face =
nullptr;
50 sf_vec* vb_both_face =
nullptr;
51 sf_vec* vb_unique_face =
nullptr;
53 sf_vec* Ib_one_face =
nullptr;
54 sf_vec* Ib_both_face =
nullptr;
55 sf_vec* Ib_unique_face =
nullptr;
56 sf_vec* Iij_stim =
nullptr;
57 sf_vec* Iij_temp =
nullptr;
60 sf_mat* mass_emi =
nullptr;
61 sf_mat* mass_surf_emi =
nullptr;
63 sf_mat* stiffness_emi =
nullptr;
69 sf_mat* operator_unique_to_both_faces =
nullptr;
70 sf_mat* operator_both_to_unique_face =
nullptr;
74 std::pair<SF::emi_face<mesh_int_t,SF::tuple<mesh_int_t>>,
75 SF::emi_face<mesh_int_t,SF::tuple<mesh_int_t>>>> line_face;
77 std::pair<SF::emi_face<mesh_int_t,SF::triple<mesh_int_t>>,
78 SF::emi_face<mesh_int_t,SF::triple<mesh_int_t>>>> tri_face;
80 std::pair<SF::emi_face<mesh_int_t,SF::quadruple<mesh_int_t>>,
81 SF::emi_face<mesh_int_t,SF::quadruple<mesh_int_t>>>> quad_face;
110 sf_sol* lin_solver =
nullptr;
113 lin_solver_stats stats;
116 dbc_manager* dbc =
nullptr;
117 bool phie_mat_has_nullspace =
false;
118 bool fem_matrices_exact_preallocated =
false;
123 parabolic_t parab_tech = SEMI_IMPLICIT;
126 double final_residual = -1.0;
129 ~parabolic_solver_emi()
132 if (lin_solver)
delete lin_solver;
134 if (mass_emi)
delete mass_emi;
135 if (mass_surf_emi)
delete mass_surf_emi;
136 if (lhs_emi)
delete lhs_emi;
137 if (stiffness_emi)
delete stiffness_emi;
142 if (operator_unique_to_both_faces)
delete operator_unique_to_both_faces;
143 if (operator_both_to_unique_face)
delete operator_both_to_unique_face;
148 if (ui_pre)
delete ui_pre;
151 if (vb_both_face)
delete vb_both_face;
152 if (vb_unique_face)
delete vb_unique_face;
155 if (Ib_both_face)
delete Ib_both_face;
156 if (Ib_unique_face)
delete Ib_unique_face;
157 if (Iij_stim)
delete Iij_stim;
158 if (Iij_temp)
delete Iij_temp;
159 if (Irhs)
delete Irhs;
176 void setup_linear_solver(
FILE_SPEC logger);
178 void solve_semiImplicit();
181 class EMI :
public Basic_physic
186 MaterialType mtype_vol[1];
187 MaterialType_EMI mtype_face;
196 parabolic_solver_emi parab_solver;
199 gvec_data_OnFace gvec;
202 igb_output_manager output_manager;
210 phie_recovery_data phie_rcv;
212 generic_timing_stats IO_stats;
243 inline void output_timings()
246 compute_time -= ion.compute_time;
247 initialize_time -= ion.initialize_time;
252 ion.output_timings();
260 double timer_val(
const int timer_id);
263 std::string timer_unit(
const int timer_id);
304 void setup_stimuli();
338 void apply_current_stimulus();
359 void apply_dbc_stimulus();
396 void balance_electrodes();
456 void setup_solvers();
459 void setup_mappings();
465 void dump_matrices();
467 void checkpointing();
471 void dump_field_state(
const char* roe_fnm);
475 void restore_field_state(
const char* roe_fnm);
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