87 CPPADCG_ASSERT_UNKNOWN(model !=
nullptr);
88 size_t iterationCount = model->getIterationCount();
90 const std::vector<std::vector<LoopPosition> >& indexedIndepIndexes = model->getIndexedIndepIndexes();
91 const std::vector<LoopPosition>& nonIndexedIndepIndexes = model->getNonIndexedIndepIndexes();
92 const std::vector<LoopPosition>& temporaryIndependents = model->getTemporaryIndependents();
96 hessTapeSparsity_ = hessianSparsitySet<std::vector<std::set<size_t> >, CGB>(fun,
tapeI);
101 size_t nIndexed = indexedIndepIndexes.size();
102 size_t nNonIndexed = nonIndexedIndepIndexes.size();
103 size_t nTemp = temporaryIndependents.size();
109 for (
size_t tapeJ1 = 0; tapeJ1 < nIndexed; tapeJ1++) {
110 const std::set<size_t>& hessRow = hessTapeSparsity_[tapeJ1];
111 size_t j1 = indexedIndepIndexes[tapeJ1][iter].original;
113 std::set<size_t> ::const_iterator itTape2;
114 for (itTape2 = hessRow.begin(); itTape2 != hessRow.end() && *itTape2 < nIndexed; ++itTape2) {
115 size_t j2 = indexedIndepIndexes[*itTape2][iter].original;
117 pairss tapeTape(tapeJ1, *itTape2);
118 std::vector<std::set<pairss> >&
iterations = hessOrig2Iter2TapeJ1TapeJ2_[orig];
123 for (; itTape2 != hessRow.end() && *itTape2 < nIndexed + nNonIndexed; ++itTape2) {
124 size_t j2 = nonIndexedIndepIndexes[*itTape2 - nIndexed].original;
126 std::vector<std::set<size_t> >&
iterations = hessOrig2Iter2TapeJ1OrigJ2_[orig];
135 for (
size_t tapeJ1 = nIndexed; tapeJ1 < nIndexed + nNonIndexed; tapeJ1++) {
136 const std::set<size_t>& hessRow = hessTapeSparsity_[tapeJ1];
137 size_t j1 = nonIndexedIndepIndexes[tapeJ1 - nIndexed].original;
139 std::set<size_t> ::const_iterator itTape2;
140 for (itTape2 = hessRow.begin(); itTape2 != hessRow.end() && *itTape2 < nIndexed; ++itTape2) {
141 size_t j2 = indexedIndepIndexes[*itTape2][iter].original;
143 std::vector<std::set<size_t> >&
iterations = hessOrig2Iter2OrigJ1TapeJ2_[orig];
148 for (; itTape2 != hessRow.end() && *itTape2 < nIndexed + nNonIndexed; ++itTape2) {
149 size_t j2 = nonIndexedIndepIndexes[*itTape2 - nIndexed].original;
151 hessOrigJ1OrigJ2_.insert(orig);
158 for (
size_t tapeJ1 = nIndexed + nNonIndexed; tapeJ1 < nIndexed + nNonIndexed + nTemp; tapeJ1++) {
159 const std::set<size_t>& hessRow = hessTapeSparsity_[tapeJ1];
160 size_t k1 = temporaryIndependents[tapeJ1 - nIndexed - nNonIndexed].original;
162 std::set<size_t> ::const_iterator itTape2;
163 for (itTape2 = hessRow.begin(); itTape2 != hessRow.end() && *itTape2 < nIndexed; ++itTape2) {
164 size_t j2 = indexedIndepIndexes[*itTape2][iter].original;
166 std::map<size_t, std::set<size_t> >& var2iters = hessOrig2TempTapeJ22Iter_[pos];
167 var2iters[*itTape2].insert(iter);
173 hessSparsity_ =
true;