Program Listing for File model_dimensions.h

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

#ifndef AMICI_MODEL_DIMENSIONS_H
#define AMICI_MODEL_DIMENSIONS_H

#include <gsl/gsl-lite.hpp>
#include <vector>

namespace amici {

struct ModelDimensions {
    ModelDimensions() = default;

    ModelDimensions(
        int const nx_rdata, int const nxtrue_rdata, int const nx_solver,
        int const nxtrue_solver, int const nx_solver_reinit, int const np,
        int const nk, int const ny, int const nytrue, int const nz,
        int const nztrue, int const ne, int const nspl, int const nJ,
        int const nw, int const ndwdx, int const ndwdp, int const ndwdw,
        int const ndxdotdw, std::vector<int> ndJydy, int const ndxrdatadxsolver,
        int const ndxrdatadtcl, int const ndtotal_cldx_rdata, int const nnz,
        int const ubw, int const lbw
    )
        : nx_rdata(nx_rdata)
        , nxtrue_rdata(nxtrue_rdata)
        , nx_solver(nx_solver)
        , nxtrue_solver(nxtrue_solver)
        , nx_solver_reinit(nx_solver_reinit)
        , np(np)
        , nk(nk)
        , ny(ny)
        , nytrue(nytrue)
        , nz(nz)
        , nztrue(nztrue)
        , ne(ne)
        , nspl(nspl)
        , nw(nw)
        , ndwdx(ndwdx)
        , ndwdp(ndwdp)
        , ndwdw(ndwdw)
        , ndxdotdw(ndxdotdw)
        , ndJydy(std::move(ndJydy))
        , ndxrdatadxsolver(ndxrdatadxsolver)
        , ndxrdatadtcl(ndxrdatadtcl)
        , ndtotal_cldx_rdata(ndtotal_cldx_rdata)
        , nnz(nnz)
        , nJ(nJ)
        , ubw(ubw)
        , lbw(lbw) {
        Expects(nxtrue_rdata >= 0);
        Expects(nxtrue_rdata <= nx_rdata);
        Expects(nxtrue_solver >= 0);
        Expects(nx_solver <= nx_rdata);
        Expects(nxtrue_solver <= nx_solver);
        Expects(nx_solver_reinit >= 0);
        Expects(nx_solver_reinit <= nx_solver);
        Expects(np >= 0);
        Expects(nk >= 0);
        Expects(nytrue <= ny);
        Expects(nytrue >= 0);
        Expects(nztrue >= 0);
        Expects(nztrue <= nz);
        Expects(ne >= 0);
        Expects(nspl >= 0);
        Expects(nw >= 0);
        Expects(ndwdx >= 0);
        Expects(ndwdx <= nw * nx_solver);
        Expects(ndwdp >= 0);
        Expects(ndwdp <= nw * np);
        Expects(ndwdw >= 0);
        Expects(ndwdw <= nw * nw);
        Expects(ndxdotdw >= 0);
        Expects(ndxrdatadxsolver >= 0);
        Expects(ndxrdatadxsolver <= nx_rdata * nx_solver);
        Expects(ndxrdatadtcl >= 0);
        Expects(ndxrdatadtcl <= nx_rdata * (nx_rdata - nx_solver));
        Expects(ndtotal_cldx_rdata >= 0);
        Expects(ndtotal_cldx_rdata <= (nx_rdata - nx_solver) * nx_rdata);
        Expects(nnz >= 0);
        Expects(nJ >= 0);
        Expects(ubw >= 0);
        Expects(lbw >= 0);
    }

    int nx_rdata{0};

    int nxtrue_rdata{0};

    int nx_solver{0};

    int nxtrue_solver{0};

    int nx_solver_reinit{0};

    int np{0};

    int nk{0};

    int ny{0};

    int nytrue{0};

    int nz{0};

    int nztrue{0};

    int ne{0};

    int nspl{0};

    int nw{0};

    int ndwdx{0};

    int ndwdp{0};

    int ndwdw{0};

    int ndxdotdw{0};

    std::vector<int> ndJydy;

    int ndxrdatadxsolver{0};

    int ndxrdatadtcl{0};

    int ndtotal_cldx_rdata{0};

    int nnz{0};

    int nJ{0};

    int ubw{0};

    int lbw{0};
};

} // namespace amici

#endif // AMICI_MODEL_DIMENSIONS_H