15 #include <cppad/cg/model/llvm/llvm.hpp> 35 template <
int IN_DIM,
int OUT_DIM>
36 class DerivativesCppadJIT :
public Derivatives<IN_DIM, OUT_DIM, double>
39 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
41 using CG_SCALAR = ADCGScalar;
42 using CG_VALUE_TYPE = ADCGValueType;
44 using IN_TYPE_CG = Eigen::Matrix<CG_SCALAR, IN_DIM, 1>;
45 using OUT_TYPE_CG = Eigen::Matrix<CG_SCALAR, OUT_DIM, 1>;
47 using IN_TYPE_D = Eigen::Matrix<double, IN_DIM, 1>;
48 using OUT_TYPE_D = Eigen::Matrix<double, OUT_DIM, 1>;
49 using JAC_TYPE_D = Eigen::Matrix<double, OUT_DIM, IN_DIM>;
50 using JAC_TYPE_ROW_MAJOR = Eigen::Matrix<double, OUT_DIM, IN_DIM, Eigen::RowMajor>;
51 using HES_TYPE_D = Eigen::Matrix<double, IN_DIM, IN_DIM>;
52 using HES_TYPE_ROW_MAJOR = Eigen::Matrix<double, IN_DIM, IN_DIM, Eigen::RowMajor>;
55 using FUN_TYPE_CG = std::function<OUT_TYPE_CG(const IN_TYPE_CG&)>;
56 using DerivativesBase = Derivatives<IN_DIM, OUT_DIM>;
70 DerivativesCppadJIT(FUN_TYPE_CG& f,
int inputDim = IN_DIM,
int outputDim = OUT_DIM);
77 DerivativesCppadJIT(
const DerivativesCppadJIT& arg);
89 void update(FUN_TYPE_CG& f,
const size_t inputDim = IN_DIM,
const size_t outputDim = OUT_DIM);
91 virtual ~DerivativesCppadJIT() =
default;
94 DerivativesCppadJIT* clone()
const;
96 virtual OUT_TYPE_D forwardZero(
const Eigen::VectorXd& x);
98 virtual JAC_TYPE_D jacobian(
const Eigen::VectorXd& x);
100 virtual void sparseJacobian(
const Eigen::VectorXd& x,
101 Eigen::VectorXd& jac,
102 Eigen::VectorXi& iRow,
103 Eigen::VectorXi& jCol);
105 virtual Eigen::VectorXd sparseJacobianValues(
const Eigen::VectorXd& x);
108 virtual HES_TYPE_D hessian(
const Eigen::VectorXd& x,
const Eigen::VectorXd& lambda);
110 virtual void sparseHessian(
const Eigen::VectorXd& x,
111 const Eigen::VectorXd& lambda,
112 Eigen::VectorXd& hes,
113 Eigen::VectorXi& iRow,
114 Eigen::VectorXi& jCol);
117 virtual Eigen::VectorXd sparseHessianValues(
const Eigen::VectorXd& x,
const Eigen::VectorXd& lambda);
124 Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic> getSparsityPatternJacobian();
131 Eigen::Matrix<bool, Eigen::Dynamic, Eigen::Dynamic> getSparsityPatternHessian();
142 void getSparsityPatternJacobian(Eigen::VectorXi& rows, Eigen::VectorXi& columns);
149 size_t getNumNonZerosJacobian();
156 size_t getNumNonZerosHessian();
166 void getSparsityPatternHessian(Eigen::VectorXi& rows, Eigen::VectorXi& columns);
174 void compileJIT(
const DerivativesCppadSettings& settings,
175 const std::string& libName =
"unnamedLib",
179 const std::shared_ptr<CppAD::cg::DynamicLib<double>> getDynamicLib();
181 #ifdef LLVM_VERSION_MAJOR 182 const std::shared_ptr<CppAD::cg::LlvmModelLibrary<double>> getLlvmLib();
190 std::function<OUT_TYPE_CG(const IN_TYPE_CG&)> cgStdFun_;
195 CppAD::ADFun<CG_VALUE_TYPE> cgCppadFun_;
198 std::string libName_;
200 std::vector<size_t> sparsityRowsJacobian_;
201 std::vector<size_t> sparsityColsJacobian_;
202 std::vector<size_t> sparsityRowsHessian_;
203 std::vector<size_t> sparsityColsHessian_;
205 Eigen::VectorXi sparsityRowsJacobianEigen_;
206 Eigen::VectorXi sparsityColsJacobianEigen_;
207 Eigen::VectorXi sparsityRowsHessianEigen_;
208 Eigen::VectorXi sparsityColsHessianEigen_;
210 CppAD::cg::GccCompiler<double> compiler_;
211 CppAD::cg::ClangCompiler<double> compilerClang_;
212 std::shared_ptr<CppAD::cg::DynamicLib<double>> dynamicLib_;
213 std::shared_ptr<CppAD::cg::GenericModel<double>> model_;
214 #ifdef LLVM_VERSION_MAJOR 215 std::shared_ptr<CppAD::cg::LlvmModelLibrary<double>> llvmModelLib_;
const bool verbose
Definition: JacobianCGTest.h:19