1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: PlaneGCSSolver_Solver.h
4 // Created: 14 Dec 2014
5 // Author: Artem ZHIDKOV
7 #ifndef PlaneGCSSolver_Solver_H_
8 #define PlaneGCSSolver_Solver_H_
10 #include <PlaneGCSSolver_Defs.h>
11 #include <PlaneGCSSolver_ConstraintWrapper.h>
15 /// \brief The main class that performs the high-level operations for connection to the PlaneGCS.
16 class PlaneGCSSolver_Solver
19 /// The result of constraints solution
24 STATUS_FAILED, // set if no one other status is applicable
25 STATUS_UNKNOWN // set for newly created groups
28 PlaneGCSSolver_Solver();
29 ~PlaneGCSSolver_Solver();
31 /// \brief Clear system of equations
34 /// \brief Add constraint to the system of equations
35 void addConstraint(GCSConstraintPtr theConstraint);
37 /// \brief Remove constraint from the system of equations
38 void removeConstraint(ConstraintID theID);
40 /// \brief Initialize memory for new solver's parameter
41 double* createParameter();
42 /// \brief Release memory occupied by parameters
43 void removeParameters(const GCS::SET_pD& theParams);
45 /// \brief Solve the set of equations
46 /// \return identifier whether solution succeeded
49 /// \brief Revert solution to initial values
52 /// \brief Check the constraint is conflicted with others
53 bool isConflicting(const ConstraintID& theConstraint) const;
55 /// \brief Check conflicting/redundant constraints and DoF
58 /// \brief Degrees of freedom
62 void collectConflicting();
65 typedef std::map<ConstraintID, std::set<GCSConstraintPtr> > ConstraintMap;
67 GCS::VEC_pD myParameters; ///< list of unknowns
68 ConstraintMap myConstraints; ///< list of constraints
70 std::shared_ptr<GCS::System> myEquationSystem; ///< set of equations for solving in FreeGCS
71 bool myDiagnoseBeforeSolve; ///< is the diagnostic necessary
73 GCS::SET_I myConflictingIDs; ///< list of IDs of conflicting constraints
74 /// specifies the conflicting constraints are already collected
77 int myDOF; ///< degrees of freedom
80 typedef std::shared_ptr<PlaneGCSSolver_Solver> SolverPtr;