Abstract class Dof represents Degree Of Freedom in finite element mesh. DOFs are possesed by DofManagers (i.e, nodes, element sides or whatever) and one Dof instance belongs to only one DofManager instance. Dof maintain its physical meaning and reference to related DofManager (reference to DofManager which possess particular DOF). To describe physical meaning of particular Dof, special enum type "DofId" has been introduced (see cltypes.h). This type is more descriptive than UnknownType, which determines physical meaning for unknowns generally (displacement or temperature). DofId type has to distinguish between DOFs representing displacement, but in different directions, since only some of those may be required by particular elements.

Dof can be subjected to boundary (BC) or initial (IC) condition. Method for obtaining corresponding DOF unknown value is provided. If no IC condition has been given, zero value IC is assumed otherwise when needed.

Dof class generally supports changes of static system during computation. This feature generally leads to equation renumbering. Then because equation number associated to dof may change, it may become extremly complicated to ask EngngModel for unknown from previous time step (because equation number may have been changed). To overcome this problem, derived class will implement so called uknown dictionary, which is updated after finishing each time step and where unknowns for particular dof are stored. Dof then uses this dictionary for requests for unknowns instead of asking EngngModel for unknowns. Unknowns in dof dictionary are updated by EngngModel automatically (if EngngModel supports changes of static system) after finishing time step.

The base class Dof declares many services necessary for DOF handling. Some of them are abstract, they have to be implemented by derived classes representing ``specialised'' DOF types. This basic DOF interface includes the following services

The derived classes should implement specific types of DOFs. The most common types are provided with OOFEMlim. Supported are so-called MasterDofs, representing true DOFs with their own equation number, Slave DOFs, representing single DOF linked to onother single DOF, Rigid Arm Dofs allowing to model rigid arms (single dof linked to one or more other DOFs). Their brief description follows:

Borek Patzak 2018-01-02