Program Listing for File backwardproblem.h

Return to documentation for file (include/amici/backwardproblem.h)

#ifndef AMICI_BACKWARDPROBLEM_H
#define AMICI_BACKWARDPROBLEM_H

#include "amici/defines.h"
#include "amici/vector.h"

#include <vector>

namespace amici {

class ExpData;
class Solver;
class Model;
class ForwardProblem;
class SteadystateProblem;


class BackwardProblem {
  public:
    explicit BackwardProblem(
        ForwardProblem const& fwd, SteadystateProblem const* posteq
    );

    void workBackwardProblem();

    realtype gett() const { return t_; }

    int getwhich() const { return which; }

    int* getwhichptr() { return &which; }

    std::vector<realtype> const& getdJydx() const { return dJydx_; }

    AmiVector const& getAdjointState() const { return xB_; }

    AmiVector const& getAdjointQuadrature() const { return xQB_; }

  private:
    void handleEventB();

    void handleDataPointB(int it);

    realtype getTnext(int it);

    Model* model_;
    Solver* solver_;
    ExpData const* edata_;

    realtype t_;
    AmiVector xB_;
    AmiVector dxB_;
    AmiVector xQB_;
    std::vector<AmiVector> x_disc_;
    std::vector<AmiVector> xdot_disc_;
    std::vector<AmiVector> xdot_old_disc_;
    AmiVectorArray sx0_;
    std::vector<int> nroots_;
    std::vector<realtype> discs_;
    int which = 0;
    std::vector<std::vector<int>> root_idx_;

    std::vector<realtype> dJydx_;
    std::vector<realtype> const dJzdx_;
};

} // namespace amici

#endif // BACKWARDPROBLEM_H