NEURON
nmodl::visitor::MatexpVisitor Class Reference

Visitor used for generating the necessary AST nodes for matexp solver. More...

#include <matexp_visitor.hpp>

Inheritance diagram for nmodl::visitor::MatexpVisitor:
nmodl::visitor::AstVisitor nmodl::visitor::Visitor

Public Member Functions

 MatexpVisitor ()=default
 
void visit_program (ast::Program &node) override
 visit node of type ast::Program More...
 
void visit_solve_block (ast::SolveBlock &node) override
 Populate the lists of solve-block statements in the program. More...
 
void visit_kinetic_block (ast::KineticBlock &node) override
 Populate the list of kinetic blocks in the program. More...
 
void visit_statement_block (ast::StatementBlock &node) override
 visit node of type ast::StatementBlock More...
 
void visit_reaction_statement (ast::ReactionStatement &node) override
 visit node of type ast::ReactionStatement More...
 
- Public Member Functions inherited from nmodl::visitor::AstVisitor
void visit_node (ast::Node &node) override
 visit node of type ast::Node More...
 
void visit_statement (ast::Statement &node) override
 visit node of type ast::Statement More...
 
void visit_expression (ast::Expression &node) override
 visit node of type ast::Expression More...
 
void visit_block (ast::Block &node) override
 visit node of type ast::Block More...
 
void visit_identifier (ast::Identifier &node) override
 visit node of type ast::Identifier More...
 
void visit_number (ast::Number &node) override
 visit node of type ast::Number More...
 
void visit_string (ast::String &node) override
 visit node of type ast::String More...
 
void visit_integer (ast::Integer &node) override
 visit node of type ast::Integer More...
 
void visit_float (ast::Float &node) override
 visit node of type ast::Float More...
 
void visit_double (ast::Double &node) override
 visit node of type ast::Double More...
 
void visit_boolean (ast::Boolean &node) override
 visit node of type ast::Boolean More...
 
void visit_name (ast::Name &node) override
 visit node of type ast::Name More...
 
void visit_prime_name (ast::PrimeName &node) override
 visit node of type ast::PrimeName More...
 
void visit_indexed_name (ast::IndexedName &node) override
 visit node of type ast::IndexedName More...
 
void visit_var_name (ast::VarName &node) override
 visit node of type ast::VarName More...
 
void visit_argument (ast::Argument &node) override
 visit node of type ast::Argument More...
 
void visit_react_var_name (ast::ReactVarName &node) override
 visit node of type ast::ReactVarName More...
 
void visit_read_ion_var (ast::ReadIonVar &node) override
 visit node of type ast::ReadIonVar More...
 
void visit_write_ion_var (ast::WriteIonVar &node) override
 visit node of type ast::WriteIonVar More...
 
void visit_nonspecific_cur_var (ast::NonspecificCurVar &node) override
 visit node of type ast::NonspecificCurVar More...
 
void visit_electrode_cur_var (ast::ElectrodeCurVar &node) override
 visit node of type ast::ElectrodeCurVar More...
 
void visit_range_var (ast::RangeVar &node) override
 visit node of type ast::RangeVar More...
 
void visit_global_var (ast::GlobalVar &node) override
 visit node of type ast::GlobalVar More...
 
void visit_pointer_var (ast::PointerVar &node) override
 visit node of type ast::PointerVar More...
 
void visit_random_var (ast::RandomVar &node) override
 visit node of type ast::RandomVar More...
 
void visit_bbcore_pointer_var (ast::BbcorePointerVar &node) override
 visit node of type ast::BbcorePointerVar More...
 
void visit_extern_var (ast::ExternVar &node) override
 visit node of type ast::ExternVar More...
 
void visit_param_block (ast::ParamBlock &node) override
 visit node of type ast::ParamBlock More...
 
void visit_independent_block (ast::IndependentBlock &node) override
 visit node of type ast::IndependentBlock More...
 
void visit_assigned_block (ast::AssignedBlock &node) override
 visit node of type ast::AssignedBlock More...
 
void visit_state_block (ast::StateBlock &node) override
 visit node of type ast::StateBlock More...
 
void visit_initial_block (ast::InitialBlock &node) override
 visit node of type ast::InitialBlock More...
 
void visit_constructor_block (ast::ConstructorBlock &node) override
 visit node of type ast::ConstructorBlock More...
 
void visit_destructor_block (ast::DestructorBlock &node) override
 visit node of type ast::DestructorBlock More...
 
void visit_statement_block (ast::StatementBlock &node) override
 visit node of type ast::StatementBlock More...
 
void visit_derivative_block (ast::DerivativeBlock &node) override
 visit node of type ast::DerivativeBlock More...
 
void visit_linear_block (ast::LinearBlock &node) override
 visit node of type ast::LinearBlock More...
 
void visit_non_linear_block (ast::NonLinearBlock &node) override
 visit node of type ast::NonLinearBlock More...
 
void visit_discrete_block (ast::DiscreteBlock &node) override
 visit node of type ast::DiscreteBlock More...
 
void visit_function_table_block (ast::FunctionTableBlock &node) override
 visit node of type ast::FunctionTableBlock More...
 
void visit_function_block (ast::FunctionBlock &node) override
 visit node of type ast::FunctionBlock More...
 
void visit_procedure_block (ast::ProcedureBlock &node) override
 visit node of type ast::ProcedureBlock More...
 
void visit_net_receive_block (ast::NetReceiveBlock &node) override
 visit node of type ast::NetReceiveBlock More...
 
void visit_solve_block (ast::SolveBlock &node) override
 visit node of type ast::SolveBlock More...
 
void visit_breakpoint_block (ast::BreakpointBlock &node) override
 visit node of type ast::BreakpointBlock More...
 
void visit_before_block (ast::BeforeBlock &node) override
 visit node of type ast::BeforeBlock More...
 
void visit_after_block (ast::AfterBlock &node) override
 visit node of type ast::AfterBlock More...
 
void visit_ba_block (ast::BABlock &node) override
 visit node of type ast::BABlock More...
 
void visit_for_netcon (ast::ForNetcon &node) override
 visit node of type ast::ForNetcon More...
 
void visit_kinetic_block (ast::KineticBlock &node) override
 visit node of type ast::KineticBlock More...
 
void visit_unit_block (ast::UnitBlock &node) override
 visit node of type ast::UnitBlock More...
 
void visit_constant_block (ast::ConstantBlock &node) override
 visit node of type ast::ConstantBlock More...
 
void visit_neuron_block (ast::NeuronBlock &node) override
 visit node of type ast::NeuronBlock More...
 
void visit_unit (ast::Unit &node) override
 visit node of type ast::Unit More...
 
void visit_double_unit (ast::DoubleUnit &node) override
 visit node of type ast::DoubleUnit More...
 
void visit_local_var (ast::LocalVar &node) override
 visit node of type ast::LocalVar More...
 
void visit_limits (ast::Limits &node) override
 visit node of type ast::Limits More...
 
void visit_number_range (ast::NumberRange &node) override
 visit node of type ast::NumberRange More...
 
void visit_constant_var (ast::ConstantVar &node) override
 visit node of type ast::ConstantVar More...
 
void visit_binary_operator (ast::BinaryOperator &node) override
 visit node of type ast::BinaryOperator More...
 
void visit_unary_operator (ast::UnaryOperator &node) override
 visit node of type ast::UnaryOperator More...
 
void visit_reaction_operator (ast::ReactionOperator &node) override
 visit node of type ast::ReactionOperator More...
 
void visit_paren_expression (ast::ParenExpression &node) override
 visit node of type ast::ParenExpression More...
 
void visit_binary_expression (ast::BinaryExpression &node) override
 visit node of type ast::BinaryExpression More...
 
void visit_diff_eq_expression (ast::DiffEqExpression &node) override
 visit node of type ast::DiffEqExpression More...
 
void visit_unary_expression (ast::UnaryExpression &node) override
 visit node of type ast::UnaryExpression More...
 
void visit_non_lin_equation (ast::NonLinEquation &node) override
 visit node of type ast::NonLinEquation More...
 
void visit_lin_equation (ast::LinEquation &node) override
 visit node of type ast::LinEquation More...
 
void visit_function_call (ast::FunctionCall &node) override
 visit node of type ast::FunctionCall More...
 
void visit_watch (ast::Watch &node) override
 visit node of type ast::Watch More...
 
void visit_ba_block_type (ast::BABlockType &node) override
 visit node of type ast::BABlockType More...
 
void visit_unit_def (ast::UnitDef &node) override
 visit node of type ast::UnitDef More...
 
void visit_factor_def (ast::FactorDef &node) override
 visit node of type ast::FactorDef More...
 
void visit_valence (ast::Valence &node) override
 visit node of type ast::Valence More...
 
void visit_unit_state (ast::UnitState &node) override
 visit node of type ast::UnitState More...
 
void visit_local_list_statement (ast::LocalListStatement &node) override
 visit node of type ast::LocalListStatement More...
 
void visit_model (ast::Model &node) override
 visit node of type ast::Model More...
 
void visit_define (ast::Define &node) override
 visit node of type ast::Define More...
 
void visit_include (ast::Include &node) override
 visit node of type ast::Include More...
 
void visit_param_assign (ast::ParamAssign &node) override
 visit node of type ast::ParamAssign More...
 
void visit_assigned_definition (ast::AssignedDefinition &node) override
 visit node of type ast::AssignedDefinition More...
 
void visit_conductance_hint (ast::ConductanceHint &node) override
 visit node of type ast::ConductanceHint More...
 
void visit_expression_statement (ast::ExpressionStatement &node) override
 visit node of type ast::ExpressionStatement More...
 
void visit_protect_statement (ast::ProtectStatement &node) override
 visit node of type ast::ProtectStatement More...
 
void visit_from_statement (ast::FromStatement &node) override
 visit node of type ast::FromStatement More...
 
void visit_while_statement (ast::WhileStatement &node) override
 visit node of type ast::WhileStatement More...
 
void visit_if_statement (ast::IfStatement &node) override
 visit node of type ast::IfStatement More...
 
void visit_else_if_statement (ast::ElseIfStatement &node) override
 visit node of type ast::ElseIfStatement More...
 
void visit_else_statement (ast::ElseStatement &node) override
 visit node of type ast::ElseStatement More...
 
void visit_watch_statement (ast::WatchStatement &node) override
 visit node of type ast::WatchStatement More...
 
void visit_mutex_lock (ast::MutexLock &node) override
 visit node of type ast::MutexLock More...
 
void visit_mutex_unlock (ast::MutexUnlock &node) override
 visit node of type ast::MutexUnlock More...
 
void visit_conserve (ast::Conserve &node) override
 visit node of type ast::Conserve More...
 
void visit_compartment (ast::Compartment &node) override
 visit node of type ast::Compartment More...
 
void visit_lon_diffuse (ast::LonDiffuse &node) override
 visit node of type ast::LonDiffuse More...
 
void visit_reaction_statement (ast::ReactionStatement &node) override
 visit node of type ast::ReactionStatement More...
 
void visit_lag_statement (ast::LagStatement &node) override
 visit node of type ast::LagStatement More...
 
void visit_constant_statement (ast::ConstantStatement &node) override
 visit node of type ast::ConstantStatement More...
 
void visit_table_statement (ast::TableStatement &node) override
 visit node of type ast::TableStatement More...
 
void visit_suffix (ast::Suffix &node) override
 visit node of type ast::Suffix More...
 
void visit_useion (ast::Useion &node) override
 visit node of type ast::Useion More...
 
void visit_nonspecific (ast::Nonspecific &node) override
 visit node of type ast::Nonspecific More...
 
void visit_electrode_current (ast::ElectrodeCurrent &node) override
 visit node of type ast::ElectrodeCurrent More...
 
void visit_range (ast::Range &node) override
 visit node of type ast::Range More...
 
void visit_global (ast::Global &node) override
 visit node of type ast::Global More...
 
void visit_random_var_list (ast::RandomVarList &node) override
 visit node of type ast::RandomVarList More...
 
void visit_pointer (ast::Pointer &node) override
 visit node of type ast::Pointer More...
 
void visit_bbcore_pointer (ast::BbcorePointer &node) override
 visit node of type ast::BbcorePointer More...
 
void visit_external (ast::External &node) override
 visit node of type ast::External More...
 
void visit_thread_safe (ast::ThreadSafe &node) override
 visit node of type ast::ThreadSafe More...
 
void visit_verbatim (ast::Verbatim &node) override
 visit node of type ast::Verbatim More...
 
void visit_line_comment (ast::LineComment &node) override
 visit node of type ast::LineComment More...
 
void visit_block_comment (ast::BlockComment &node) override
 visit node of type ast::BlockComment More...
 
void visit_ontology_statement (ast::OntologyStatement &node) override
 visit node of type ast::OntologyStatement More...
 
void visit_program (ast::Program &node) override
 visit node of type ast::Program More...
 
void visit_nrn_state_block (ast::NrnStateBlock &node) override
 visit node of type ast::NrnStateBlock More...
 
void visit_eigen_newton_solver_block (ast::EigenNewtonSolverBlock &node) override
 visit node of type ast::EigenNewtonSolverBlock More...
 
void visit_eigen_linear_solver_block (ast::EigenLinearSolverBlock &node) override
 visit node of type ast::EigenLinearSolverBlock More...
 
void visit_matexp_block (ast::MatexpBlock &node) override
 visit node of type ast::MatexpBlock More...
 
void visit_cvode_block (ast::CvodeBlock &node) override
 visit node of type ast::CvodeBlock More...
 
void visit_longitudinal_diffusion_block (ast::LongitudinalDiffusionBlock &node) override
 visit node of type ast::LongitudinalDiffusionBlock More...
 
void visit_wrapped_expression (ast::WrappedExpression &node) override
 visit node of type ast::WrappedExpression More...
 
void visit_derivimplicit_callback (ast::DerivimplicitCallback &node) override
 visit node of type ast::DerivimplicitCallback More...
 
void visit_solution_expression (ast::SolutionExpression &node) override
 visit node of type ast::SolutionExpression More...
 
void visit_update_dt (ast::UpdateDt &node) override
 visit node of type ast::UpdateDt More...
 
- Public Member Functions inherited from nmodl::visitor::Visitor
virtual ~Visitor ()=default
 

Private Member Functions

ast::KineticBlockfind_kinetic_block (const std::string &block_name)
 search the "kinetic_blocks" vector for the given block More...
 
std::shared_ptr< ast::MatexpBlocksolve_kinetic_block (const ast::KineticBlock &node, bool steadystate)
 convert a KineticBlock into a MatexpBlock More...
 
void replace_solve_block (const ast::SolveBlock &node, bool steadystate)
 replace the given solve-block statement with a MatexpBlock More...
 
std::shared_ptr< ast::MatexpBlockget_solve_block (const ast::SolveBlock &node, bool steadystate)
 return the MatexpBlock solution for the given solve-block statement More...
 
int get_state_index (const std::string &state_name)
 returns an index into the "states" vector More...
 
std::shared_ptr< ast::Statementtransform_decay_statement (std::shared_ptr< ast::Expression > lhs, std::shared_ptr< ast::Expression > kf)
 convert a decay reaction statement "->" into equivalent assignments to the Jacobian matrix More...
 
std::vector< std::shared_ptr< ast::Statement > > transform_reaction_statement (std::shared_ptr< ast::Expression > lhs, std::shared_ptr< ast::Expression > rhs, std::shared_ptr< ast::Expression > kf, std::shared_ptr< ast::Expression > kb)
 convert a reaction statement "<->" into equivalent assignments to the Jacobian matrix More...
 

Private Attributes

std::vector< ast::SolveBlock * > steadystate_blocks
 blocks to be solved More...
 
std::vector< ast::SolveBlock * > solve_blocks
 blocks to be solved More...
 
std::vector< std::string > keep_blocks
 blocks to be solved by a different solver method More...
 
std::vector< ast::KineticBlock * > kinetic_blocks
 all kinetic blocks in the program More...
 
std::vector< std::shared_ptr< symtab::Symbol > > states
 ordered list of state variables More...
 
bool in_jacobian_block = false
 currently visiting kinetic block that is being solved More...
 

Detailed Description

Visitor used for generating the necessary AST nodes for matexp solver.

Definition at line 30 of file matexp_visitor.hpp.

Constructor & Destructor Documentation

◆ MatexpVisitor()

nmodl::visitor::MatexpVisitor::MatexpVisitor ( )
default

Member Function Documentation

◆ find_kinetic_block()

ast::KineticBlock * nmodl::visitor::MatexpVisitor::find_kinetic_block ( const std::string &  block_name)
private

search the "kinetic_blocks" vector for the given block

Definition at line 159 of file matexp_visitor.cpp.

◆ get_solve_block()

std::shared_ptr< ast::MatexpBlock > nmodl::visitor::MatexpVisitor::get_solve_block ( const ast::SolveBlock node,
bool  steadystate 
)
private

return the MatexpBlock solution for the given solve-block statement

Definition at line 149 of file matexp_visitor.cpp.

◆ get_state_index()

int nmodl::visitor::MatexpVisitor::get_state_index ( const std::string &  state_name)
private

returns an index into the "states" vector

Definition at line 218 of file matexp_visitor.cpp.

◆ replace_solve_block()

void nmodl::visitor::MatexpVisitor::replace_solve_block ( const ast::SolveBlock node,
bool  steadystate 
)
private

replace the given solve-block statement with a MatexpBlock

Definition at line 138 of file matexp_visitor.cpp.

◆ solve_kinetic_block()

std::shared_ptr< ast::MatexpBlock > nmodl::visitor::MatexpVisitor::solve_kinetic_block ( const ast::KineticBlock node,
bool  steadystate 
)
private

convert a KineticBlock into a MatexpBlock

Definition at line 170 of file matexp_visitor.cpp.

◆ transform_decay_statement()

std::shared_ptr< ast::Statement > nmodl::visitor::MatexpVisitor::transform_decay_statement ( std::shared_ptr< ast::Expression lhs,
std::shared_ptr< ast::Expression kf 
)
private

convert a decay reaction statement "->" into equivalent assignments to the Jacobian matrix

Definition at line 244 of file matexp_visitor.cpp.

◆ transform_reaction_statement()

std::vector< std::shared_ptr< ast::Statement > > nmodl::visitor::MatexpVisitor::transform_reaction_statement ( std::shared_ptr< ast::Expression lhs,
std::shared_ptr< ast::Expression rhs,
std::shared_ptr< ast::Expression kf,
std::shared_ptr< ast::Expression kb 
)
private

convert a reaction statement "<->" into equivalent assignments to the Jacobian matrix

Definition at line 259 of file matexp_visitor.cpp.

◆ visit_kinetic_block()

void nmodl::visitor::MatexpVisitor::visit_kinetic_block ( ast::KineticBlock node)
overridevirtual

Populate the list of kinetic blocks in the program.

Implements nmodl::visitor::Visitor.

Definition at line 82 of file matexp_visitor.cpp.

◆ visit_program()

void nmodl::visitor::MatexpVisitor::visit_program ( ast::Program node)
overridevirtual

visit node of type ast::Program

Implements nmodl::visitor::Visitor.

Definition at line 27 of file matexp_visitor.cpp.

◆ visit_reaction_statement()

void nmodl::visitor::MatexpVisitor::visit_reaction_statement ( ast::ReactionStatement node)
overridevirtual

visit node of type ast::ReactionStatement

Implements nmodl::visitor::Visitor.

Definition at line 294 of file matexp_visitor.cpp.

◆ visit_solve_block()

void nmodl::visitor::MatexpVisitor::visit_solve_block ( ast::SolveBlock node)
overridevirtual

Populate the lists of solve-block statements in the program.

Implements nmodl::visitor::Visitor.

Definition at line 60 of file matexp_visitor.cpp.

◆ visit_statement_block()

void nmodl::visitor::MatexpVisitor::visit_statement_block ( ast::StatementBlock node)
overridevirtual

visit node of type ast::StatementBlock

Implements nmodl::visitor::Visitor.

Definition at line 188 of file matexp_visitor.cpp.

Member Data Documentation

◆ in_jacobian_block

bool nmodl::visitor::MatexpVisitor::in_jacobian_block = false
private

currently visiting kinetic block that is being solved

Definition at line 65 of file matexp_visitor.hpp.

◆ keep_blocks

std::vector<std::string> nmodl::visitor::MatexpVisitor::keep_blocks
private

blocks to be solved by a different solver method

Definition at line 39 of file matexp_visitor.hpp.

◆ kinetic_blocks

std::vector<ast::KineticBlock*> nmodl::visitor::MatexpVisitor::kinetic_blocks
private

all kinetic blocks in the program

Definition at line 42 of file matexp_visitor.hpp.

◆ solve_blocks

std::vector<ast::SolveBlock*> nmodl::visitor::MatexpVisitor::solve_blocks
private

blocks to be solved

Definition at line 36 of file matexp_visitor.hpp.

◆ states

std::vector<std::shared_ptr<symtab::Symbol> > nmodl::visitor::MatexpVisitor::states
private

ordered list of state variables

Definition at line 59 of file matexp_visitor.hpp.

◆ steadystate_blocks

std::vector<ast::SolveBlock*> nmodl::visitor::MatexpVisitor::steadystate_blocks
private

blocks to be solved

Definition at line 33 of file matexp_visitor.hpp.


The documentation for this class was generated from the following files: