CppADCodeGen  HEAD
A C++ Algorithmic Differentiation Package with Source Code Generation
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 
20 namespace CppAD {
21 namespace cg {
22 
30 template<class Base>
31 bool sortVnodesByOrder(Vnode<Base>* i,
32  Vnode<Base>* j) {
33  return (i->order() > j->order());
34 }
35 
40 public:
41  size_t originalIndex;
42  size_t originalIndex0;
43  bool hasDerivatives;
44  int order;
45 public:
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 
68 public:
69  size_t originalIndex;
70  size_t originalIndex0;
71  bool differential;
72  int assignedVar;
73 public:
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 
100 inline 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 
121 inline 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