@@ -86,18 +86,19 @@ constant Integer defaultMaxIter = 20;
8686// =============================================================================
8787
8888public function differentiateEquationTime
89- "Differentiates an equation with respect to time."
89+ "Differentiates an equation with respect to time.
90+ Returns NONE() if it was not possible to calculate a derivative."
9091 input BackendDAE . Equation inEquation;
9192 input BackendDAE . Variables inVariables;
9293 input BackendDAE . Shared inShared;
93- output BackendDAE . Equation outEquation;
94- output BackendDAE . Shared outShared;
94+ output Option < BackendDAE . Equation > outEquation;
95+ output BackendDAE . Shared outShared = inShared ;
9596protected
96- String msg;
97- DAE . ElementSource source;
98- DAE . FunctionTree funcs;
9997 BackendDAE . DifferentiateInputData diffData;
98+ BackendDAE . Equation eqn;
10099 BackendDAE . Variables knvars;
100+ DAE . ElementSource source;
101+ DAE . FunctionTree funcs;
101102algorithm
102103 try
103104 if Flags . isSet(Flags . DEBUG_DIFFERENTIATION ) then
@@ -106,16 +107,16 @@ algorithm
106107 funcs := BackendDAEUtil . getFunctions(inShared);
107108 knvars := BackendDAEUtil . getGlobalKnownVarsFromShared(inShared);
108109 diffData := BackendDAE . DIFFINPUTDATA (NONE (), SOME (inVariables), SOME (knvars), SOME (inVariables), {}, {}, NONE ());
109- (outEquation, funcs) := differentiateEquation(inEquation, DAE . crefTime, diffData, BackendDAE . DIFFERENTIATION_TIME (), funcs);
110+ (eqn, funcs) := differentiateEquation(inEquation, DAE . crefTime, diffData, BackendDAE . DIFFERENTIATION_TIME (), funcs);
111+ outEquation := SOME (eqn);
110112 outShared := BackendDAEUtil . setSharedFunctionTree(inShared, funcs);
111113 if Flags . isSet(Flags . DEBUG_DIFFERENTIATION ) then
112- BackendDump . debugStrEqnStr("### Result of differentiation \n --> " , outEquation , " \n " );
114+ BackendDump . debugStrEqnStr("### Result of differentiation \n --> " , eqn , " \n " );
113115 end if ;
114116 else
115- msg := " \n Differentiate.differentiateEquationTime failed for " + BackendDump . equationString(inEquation) + " \n\n " ;
116117 source := BackendEquation . equationSource(inEquation);
117- Error . addSourceMessage(Error . INTERNAL_ERROR , {msg }, ElementSource . getElementSourceFileInfo(source));
118- fail ();
118+ Error . addSourceMessage(Error . INTERNAL_ERROR , {" \n Differentiate.differentiateEquationTime failed for " + BackendDump . equationString(inEquation) + " \n\n " }, ElementSource . getElementSourceFileInfo(source));
119+ outEquation : = NONE ();
119120 end try ;
120121end differentiateEquationTime;
121122
0 commit comments