Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 17 additions & 2 deletions main/sccomp/source/solver/solver.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,14 @@ void SAL_CALL SolverComponent::solve() throw(uno::RuntimeException)
// solve model

nResult = CoinCheckProblem( hProb );
if (nResult != SOLV_CALL_SUCCESS)
{
// report invalid model

maStatus = lcl_GetResourceString( RID_ERROR_INVALIDMODEL );
CoinUnloadProblem(hProb);
return;
}
nResult = CoinOptimizeProblem( hProb, 0 );

mbSuccess = ( nResult == SOLV_CALL_SUCCESS );
Expand All @@ -586,8 +594,15 @@ void SAL_CALL SolverComponent::solve() throw(uno::RuntimeException)
maStatus = lcl_GetResourceString( RID_ERROR_INFEASIBLE );
else if ( nSolutionStatus == 2 )
maStatus = lcl_GetResourceString( RID_ERROR_UNBOUNDED );
// TODO: detect timeout condition and report as RID_ERROR_TIMEOUT
// (currently reported as infeasible)
else if ( nSolutionStatus == 3 )
maStatus = lcl_GetResourceString( RID_ERROR_ITERATIONLIMIT );
else if ( nSolutionStatus == 4 )
maStatus = lcl_GetResourceString( RID_ERROR_SOLVERERROR );
else if ( nSolutionStatus == 5 )
maStatus = lcl_GetResourceString( RID_ERROR_USERSTOP );
else if ( nSolutionStatus >= 6 )
maStatus = lcl_GetResourceString( RID_ERROR_UNKNOWN );

}

CoinUnloadProblem( hProb );
Expand Down
8 changes: 6 additions & 2 deletions main/sccomp/source/solver/solver.hrc
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,11 @@
#define RID_ERROR_NONLINEAR (SOLVER_RESOURCE_START + 7)
#define RID_ERROR_EPSILONLEVEL (SOLVER_RESOURCE_START + 8)
#define RID_ERROR_INFEASIBLE (SOLVER_RESOURCE_START + 9)
#define RID_ERROR_UNBOUNDED (SOLVER_RESOURCE_START + 10)
#define RID_ERROR_TIMEOUT (SOLVER_RESOURCE_START + 11)
#define RID_ERROR_UNBOUNDED (SOLVER_RESOURCE_START + 11)
#define RID_ERROR_ITERATIONLIMIT (SOLVER_RESOURCE_START + 12)
#define RID_ERROR_SOLVERERROR (SOLVER_RESOURCE_START + 13)
#define RID_ERROR_USERSTOP (SOLVER_RESOURCE_START + 14)
#define RID_ERROR_UNKNOWN (SOLVER_RESOURCE_START + 15)
#define RID_ERROR_INVALIDMODEL (SOLVER_RESOURCE_START + 16)

#endif
21 changes: 19 additions & 2 deletions main/sccomp/source/solver/solver.src
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ String RID_PROPERTY_NONLINEARTEST
{
Text [ en-US ] = "Run strict linearity checks";
};

String RID_ERROR_NONLINEAR
{
Text [ en-US ] = "The model seems nonlinear (see options).";
Expand All @@ -68,7 +69,23 @@ String RID_ERROR_UNBOUNDED
{
Text [ en-US ] = "The model is unbounded.";
};
String RID_ERROR_TIMEOUT
String RID_ERROR_ITERATIONLIMIT
{
Text [ en-US ] = "Iteration limit reached.";
};
String RID_ERROR_SOLVERERROR
{
Text [ en-US ] = "Numerical solver error.";
};
String RID_ERROR_USERSTOP
{
Text [ en-US ] = "User/callback cancellation.";
};
String RID_ERROR_UNKNOWN
{
Text [ en-US ] = "Unrecognized status.";
};
String RID_ERROR_INVALIDMODEL
{
Text [ en-US ] = "The time limit was reached.";
Text [ en-US ] = "Invalid internal generated model.";
};
Loading