Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00035 #ifndef ACADO_TOOLKIT_INTEGRATOR_EXPORT_HPP
00036 #define ACADO_TOOLKIT_INTEGRATOR_EXPORT_HPP
00037
00038 #include <acado/matrix_vector/matrix_vector.hpp>
00039 #include <acado/code_generation/export_algorithm_factory.hpp>
00040 #include <acado/ocp/model_data.hpp>
00041 #include <acado/code_generation/integrators/integrator_export_types.hpp>
00042
00043
00044 BEGIN_NAMESPACE_ACADO
00045
00046
00057 class IntegratorExport : public ExportAlgorithm
00058 {
00059
00060
00061
00062
00063 public:
00064
00070 IntegratorExport( UserInteraction* _userInteraction = 0,
00071 const std::string& _commonHeaderName = ""
00072 );
00073
00078 IntegratorExport( const IntegratorExport& arg
00079 );
00080
00083 virtual ~IntegratorExport( );
00084
00089 IntegratorExport& operator=( const IntegratorExport& arg
00090 );
00091
00092
00097 virtual returnValue setup( ) = 0;
00098
00099
00107 virtual returnValue setDifferentialEquation( const Expression& rhs ) = 0;
00108
00109
00116 virtual returnValue setLinearInput( const DMatrix& M1, const DMatrix& A1, const DMatrix& B1 );
00117
00118
00125 virtual returnValue setLinearOutput( const DMatrix& M3, const DMatrix& A3, const Expression& rhs );
00126
00127
00134 virtual returnValue setLinearOutput( const DMatrix& M3, const DMatrix& A3, const std::string& _rhs3, const std::string& _diffs_rhs3 );
00135
00136
00145 virtual returnValue setModel( const std::string& _name_ODE,
00146 const std::string& _name_diffs_ODE );
00147
00148
00157 virtual returnValue setNARXmodel( const uint delay, const DMatrix& parms ) = 0;
00158
00159
00166 virtual returnValue setModelData( const ModelData& data );
00167
00168
00175 virtual returnValue updateInputSystem( ExportStatementBlock* block,
00176 const ExportIndex& index1,
00177 const ExportIndex& index2,
00178 const ExportIndex& tmp_index );
00179
00180
00187 virtual returnValue propagateInputSystem( ExportStatementBlock* block,
00188 const ExportIndex& index1,
00189 const ExportIndex& index2,
00190 const ExportIndex& index3,
00191 const ExportIndex& tmp_index );
00192
00193
00200 virtual returnValue updateImplicitSystem( ExportStatementBlock* block,
00201 const ExportIndex& index1,
00202 const ExportIndex& index2,
00203 const ExportIndex& tmp_index );
00204
00205
00212 virtual returnValue propagateImplicitSystem( ExportStatementBlock* block,
00213 const ExportIndex& index1,
00214 const ExportIndex& index2,
00215 const ExportIndex& index3,
00216 const ExportIndex& tmp_index );
00217
00218
00225 virtual returnValue updateOutputSystem( ExportStatementBlock* block,
00226 const ExportIndex& index1,
00227 const ExportIndex& index2,
00228 const ExportIndex& tmp_index );
00229
00230
00237 virtual returnValue propagateOutputSystem( ExportStatementBlock* block,
00238 const ExportIndex& index1,
00239 const ExportIndex& index2,
00240 const ExportIndex& index3,
00241 const ExportIndex& tmp_index );
00242
00243
00250 virtual returnValue setGrid( const Grid& _grid );
00251
00252
00259 virtual returnValue getDataDeclarations( ExportStatementBlock& declarations,
00260 ExportStruct dataStruct = ACADO_ANY
00261 ) const = 0;
00262
00263
00270 virtual returnValue getFunctionDeclarations( ExportStatementBlock& declarations
00271 ) const = 0;
00272
00273
00274
00281 virtual returnValue getCode( ExportStatementBlock& code
00282 ) = 0;
00283
00284
00292 virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
00293 const std::vector<Expression> rhs ) = 0;
00294
00295
00305 virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
00306 const std::vector<std::string> _outputNames,
00307 const std::vector<std::string> _diffs_outputNames,
00308 const std::vector<uint> _dims_output ) = 0;
00309
00310
00321 virtual returnValue setupOutput( const std::vector<Grid> outputGrids_,
00322 const std::vector<std::string> _outputNames,
00323 const std::vector<std::string> _diffs_outputNames,
00324 const std::vector<uint> _dims_output,
00325 const std::vector<DMatrix> _outputDependencies ) = 0;
00326
00327
00332 virtual returnValue getGrid( Grid& grid_ ) const;
00333
00334
00339 virtual returnValue getNumSteps( DVector& _numSteps ) const;
00340
00341
00346 virtual returnValue getOutputExpressions( std::vector<Expression>& outputExpressions_ ) const;
00347
00348
00353 virtual returnValue getOutputGrids( std::vector<Grid>& outputGrids_ ) const;
00354
00355
00360 virtual bool equidistantControlGrid( ) const;
00361
00362
00363 const std::string getNameRHS() const;
00364 const std::string getNameDiffsRHS() const;
00365 virtual const std::string getNameFullRHS() const;
00366
00367 const std::string getNameOutputRHS() const;
00368 const std::string getNameOutputDiffs() const;
00369
00370 const std::string getNameOUTPUT( uint index ) const;
00371 const std::string getNameDiffsOUTPUT( uint index ) const;
00372 uint getDimOUTPUT( uint index ) const;
00373
00374
00375
00376 protected:
00377
00378
00385 DMatrix expandOutputMatrix( const DMatrix& A3 );
00386
00387
00394 virtual returnValue copy( const IntegratorExport& arg
00395 );
00396
00397
00402 virtual returnValue clear( );
00403
00404
00411 uint getIntegrationInterval( double time );
00412
00413
00418 virtual ExportVariable getAuxVariable() const = 0;
00419
00420
00421 protected:
00422
00423 uint NX1;
00424 uint NX2;
00425 uint NX3;
00426 uint NDX3;
00427 uint NXA3;
00428
00429 uint diffsDim;
00430 uint inputDim;
00432 bool timeDependant;
00433
00434 DMatrix M11, A11, B11;
00435 DMatrix A33, M33;
00436
00437 bool exportRhs;
00438 bool crsFormat;
00440 Grid grid;
00441 DVector numSteps;
00443 ExportFunction fullRhs;
00444 ExportVariable rhs_in;
00445 ExportVariable rhs_out;
00446
00447 ExportFunction integrate;
00448 ExportAcadoFunction rhs;
00449 ExportAcadoFunction diffs_rhs;
00451 ExportAcadoFunction lin_input;
00452
00453 ExportAcadoFunction rhs3;
00454 ExportAcadoFunction diffs_rhs3;
00455
00456 ExportVariable error_code;
00457 ExportVariable reset_int;
00458 ExportVariable rk_index;
00459 ExportVariable rk_ttt;
00460 ExportVariable rk_xxx;
00461 ExportVariable rk_eta;
00463 ExportVariable rk_diffsPrev1;
00464 ExportVariable rk_diffsNew1;
00465
00466 ExportVariable rk_diffsPrev2;
00467 ExportVariable rk_diffsNew2;
00468 ExportVariable rk_diffsTemp2;
00470 ExportVariable rk_diffsNew3;
00471 ExportVariable rk_diffsPrev3;
00472
00473 DifferentialState x;
00474 DifferentialStateDerivative dx;
00475 AlgebraicState z;
00476 Control u;
00477 OnlineData od;
00479 std::vector<Grid> outputGrids;
00480 std::vector<Expression> outputExpressions;
00481 std::vector<DMatrix> outputDependencies;
00482 std::vector<ExportAcadoFunction> outputs;
00483 std::vector<ExportAcadoFunction> diffs_outputs;
00485 std::vector<uint> num_outputs;
00486 };
00487
00489 typedef ExportAlgorithmFactory<IntegratorExport, ExportIntegratorType> IntegratorExportFactory;
00490
00492 typedef std::tr1::shared_ptr< IntegratorExport > IntegratorExportPtr;
00493
00494 CLOSE_NAMESPACE_ACADO
00495
00496
00497 #endif // ACADO_TOOLKIT_INTEGRATOR_EXPORT_HPP
00498
00499