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(const ForwardProblem &fwd,
                             const SteadystateProblem *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_;
    const ExpData *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_;
    const std::vector<realtype> dJzdx_;
};

} // namespace amici

#endif // BACKWARDPROBLEM_H