@@ -256,12 +256,13 @@ namespace Gambit
256256 for (const Observable& obslike : obslikes)
257257 {
258258 // Format output
259- logger () << LogTags::dependency_resolver << endl << obslike.capability << " (" << obslike.type << " ) [" << obslike.purpose << " ]" ;
259+ logger () << LogTags::dependency_resolver << endl << obslike.capability << " (" << obslike.type << " ) [" << obslike.purpose << " ] critical: " << obslike. critical << " " ;
260260 QueueEntry target;
261261 target.quantity .first = obslike.capability ;
262262 target.quantity .second = obslike.type ;
263263 target.obslike = &obslike;
264264 target.printme = obslike.printme ;
265+ target.critical = obslike.critical ;
265266 resolutionQueue.push (target);
266267 }
267268 logger () << EOM;
@@ -333,11 +334,11 @@ namespace Gambit
333334 makeFunctorsModelCompatible ();
334335
335336 graph_traits<MasterGraphType>::vertex_iterator vi, vi_end;
336- const str formatString = " %-20s %-32s %-32s %-32s %-15s %-7i %-5i %-5i\n " ;
337+ const str formatString = " %-20s %-32s %-32s %-32s %-15s %-5i %- 7i %-5i %-5i\n " ;
337338 logger () << LogTags::dependency_resolver << endl << " Vertices registered in masterGraph" << endl;
338339 logger () << " ----------------------------------" << endl;
339340 logger () << boost::format (formatString)%
340- " MODULE" % " FUNCTION" % " CAPABILITY" % " TYPE" % " PURPOSE" % " STATUS" % " #DEPs" % " #BE_REQs" ;
341+ " MODULE" % " FUNCTION" % " CAPABILITY" % " TYPE" % " PURPOSE" % " CRITICAL " % " STATUS" % " #DEPs" % " #BE_REQs" ;
341342 for (std::tie (vi, vi_end) = vertices (masterGraph); vi != vi_end; ++vi)
342343 {
343344 logger () << boost::format (formatString)%
@@ -346,6 +347,7 @@ namespace Gambit
346347 (*masterGraph[*vi]).capability ()%
347348 (*masterGraph[*vi]).type ()%
348349 (*masterGraph[*vi]).purpose ()%
350+ (*masterGraph[*vi]).critical ()%
349351 (*masterGraph[*vi]).status ()%
350352 (*masterGraph[*vi]).dependencies ().size ()%
351353 (*masterGraph[*vi]).backendreqs ().size ();
@@ -707,6 +709,17 @@ namespace Gambit
707709 return none;
708710 }
709711
712+ // / Return whether a given functor is critical.
713+ bool DependencyResolver::getCritical (VertexID v)
714+ {
715+ for (const OutputVertex& ov : outputVertices)
716+ {
717+ if (ov.vertex == v) return ov.critical ;
718+ }
719+ // / critical can safely be false if the functor does not correspond to an ObsLike entry in the ini file.
720+ return false ;
721+ }
722+
710723 // / Tell functor that it invalidated the current point in model space (due to a large or NaN contribution to lnL)
711724 void DependencyResolver::invalidatePointAt (VertexID vertex, bool isnan)
712725 {
@@ -1569,7 +1582,8 @@ namespace Gambit
15691582 else // if output vertex
15701583 {
15711584 outVertex.vertex = fromVertex;
1572- outVertex.purpose = entry.obslike ->purpose ;;
1585+ outVertex.purpose = entry.obslike ->purpose ;
1586+ outVertex.critical = entry.obslike ->critical ;
15731587 outputVertices.push_back (outVertex);
15741588 // Don't need subcaps during dry-run
15751589 if (not boundCore->show_runorder )
0 commit comments