File arkode.hxx

class ArkodeSolver : public Solver

Public Functions

ArkodeSolver(Options *opts = nullptr)
~ArkodeSolver()
void setJacobian(Jacobian j)

Specify a Jacobian (optional)

BoutReal getCurrentTimestep()

Return the current internal timestep.

int init(int nout, BoutReal tstep)

Initialise the solver NOTE: nout and tstep should be passed to run, not init. Needed because of how the PETSc TS code works

int run()

Run the solver, calling monitors nout times, at intervals of tstep. This function is called by solve(), and is specific to each solver type

This should probably be protected, since it shouldn’t be called by users.

BoutReal run(BoutReal tout)
void rhs_e(BoutReal t, BoutReal *udata, BoutReal *dudata)
void rhs_i(BoutReal t, BoutReal *udata, BoutReal *dudata)
void rhs(BoutReal t, BoutReal *udata, BoutReal *dudata)
void pre(BoutReal t, BoutReal gamma, BoutReal delta, BoutReal *udata, BoutReal *rvec, BoutReal *zvec)
void jac(BoutReal t, BoutReal *ydata, BoutReal *vdata, BoutReal *Jvdata)

Private Functions

void set_abstol_values(BoutReal *abstolvec_data, std::vector<BoutReal> &f2dtols, std::vector<BoutReal> &f3dtols)
void loop_abstol_values_op(Ind2D i2d, BoutReal *abstolvec_data, int &p, std::vector<BoutReal> &f2dtols, std::vector<BoutReal> &f3dtols, bool bndry)

Private Members

int NOUT
BoutReal TIMESTEP
BoutReal hcur
Jacobian jacfunc = {nullptr}
bool diagnose = {false}
N_Vector uvec = {nullptr}
void *arkode_mem = {nullptr}
BoutReal pre_Wtime = {0.0}
int pre_ncalls = {0}