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 ne_solver, 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)
        , ne_solver(ne_solver)
        , 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(ne_solver >= 0);
        Expects(ne >= ne_solver);
        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 ne_solver{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