CppADCodeGen 2.4.3
A C++ Algorithmic Differentiation Package with Source Code Generation
Loading...
Searching...
No Matches
dummy_deriv_util.hpp
1#ifndef CPPAD_CG_DUMMY_DERIV_UTIL_INCLUDED
2#define CPPAD_CG_DUMMY_DERIV_UTIL_INCLUDED
3/* --------------------------------------------------------------------------
4 * CppADCodeGen: C++ Algorithmic Differentiation with Source Code Generation:
5 * Copyright (C) 2012 Ciengis
6 *
7 * CppADCodeGen is distributed under multiple licenses:
8 *
9 * - Eclipse Public License Version 1.0 (EPL1), and
10 * - GNU General Public License Version 3 (GPL3).
11 *
12 * EPL1 terms and conditions can be found in the file "epl-v10.txt", while
13 * terms and conditions for the GPL3 can be found in the file "gpl3.txt".
14 * ----------------------------------------------------------------------------
15 * Author: Joao Leal
16 */
17
18#include <cppad/cg/dae_index_reduction/bipartite_nodes.hpp>
19
20namespace CppAD {
21namespace cg {
22
30template<class Base>
31bool sortVnodesByOrder(Vnode<Base>* i,
32 Vnode<Base>* j) {
33 return (i->order() > j->order());
34}
35
40public:
41 size_t originalIndex;
42 size_t originalIndex0;
43 bool hasDerivatives;
44 int order;
45public:
46 inline DaeVarOrderInfo() :
47 originalIndex(0),
48 originalIndex0(0),
49 hasDerivatives(false),
50 order(-1) {
51 }
52
53 inline DaeVarOrderInfo(size_t moriginalIndex,
54 size_t moriginalIndex0,
55 bool mhasDerivatives,
56 int morder) :
57 originalIndex(moriginalIndex),
58 originalIndex0(moriginalIndex0),
59 hasDerivatives(mhasDerivatives),
60 order(morder) {
61 }
62};
63
68public:
69 size_t originalIndex;
70 size_t originalIndex0;
71 bool differential;
72 int assignedVar;
73public:
74 inline DaeEqOrderInfo() :
75 originalIndex(0),
76 originalIndex0(0),
77 differential(false),
78 assignedVar(-1) {
79 }
80
81 inline DaeEqOrderInfo(size_t moriginalIndex,
82 size_t moriginalIndex0,
83 bool mdifferential,
84 int massignedVar) :
85 originalIndex(moriginalIndex),
86 originalIndex0(moriginalIndex0),
87 differential(mdifferential),
88 assignedVar(massignedVar) {
89 }
90};
91
100inline bool sortVariablesByOrder(const DaeVarOrderInfo& i,
101 const DaeVarOrderInfo& j) {
102 if (j.order < i.order) {
103 return true;
104 } else if (j.order > i.order) {
105 return false;
106 } else if (i.hasDerivatives == j.hasDerivatives) {
107 return j.originalIndex > i.originalIndex;
108 } else {
109 return i.hasDerivatives;
110 }
111}
112
121inline bool sortEquationByAssignedOrder2(const DaeEqOrderInfo& i,
122 const DaeEqOrderInfo& j) {
123 if (i.differential) {
124 if (j.differential)
125 return i.assignedVar < j.assignedVar;
126 else
127 return true;
128 } else {
129 if (j.differential) {
130 return false;
131 } else {
132 if (i.originalIndex0 == j.originalIndex0) {
133 return i.originalIndex == j.originalIndex0;
134 } else {
135 return i.originalIndex0 < j.originalIndex0;
136 }
137 }
138 }
139}
140
141} // END cg namespace
142} // END CppAD namespace
143
144#endif