The base class only declares itself as a base class of all boundary conditions, and declares only very basic services. It introduces 'loadTimeFunction' as an atrribute of each boundary condition. 'loadTimeFunction' represent time variation, its value is dependent on time step. The value (or the components) of a boundary condition (load) will be the product of its value by the value of the associated load time function at given time step. The meaning of boundary condition components is dependent on particular boundary condition type, and should be defined in derived classes documentation. This base class introduces also two general services for requesting boundary condition physical meaning and boundary condition geometrical character (pointwise, acting on element body or edge and so on).

Derived classes should represent the base classes for particular boundary condition type (like
force load, or boundary condition prescribed directlly on some dof) and should declare
the basic common interface. For example, the **Load** is derived
from **GeneralBoundaryCondition** and represent base class for all
load types. The following derived classes are provided by OOFEMlib

**Load**class - base abstract class for all loads. Declares the attribute componentArray to store load components and method for evaluating the component values array at given time (component array multiplied with load time function value) is provided.**NodalLoad**- implementation of a concentrated load (force, moment,...) that acts directly on a dof manager (node or element side, if it has associated DOFs). This load could not be applied on an element. A nodal load is usually attribute of one or more nodes or element sides.**BoundaryLoad**- abstract base class representing a boundary load (force, momentum, ...) that acts directly on a boundary of some finite element (on element side, face, ...). Boundary load is usually attribute of one or more finite elements. This base class only declares the common services to all derived classes. Derived classes must implement abstract services and possibly may customize existing. Boundary load is represented by its geometry (determined by its type - linear, quadratic load) and values (it is assumed, that user will supply all necessary values for each dof).The load can generally be specified in global space or can be related to local entity space (related to edge, surface). If load is specified in global space then its values are evalueated at points, which is characterized by global coordinates. If load is specified in entity space, then point is characterized by entity isoparametric coordinates.

Methods for evaluation of load component values in any point on element boundary (on side, face, ...) are provided (this point is determined using global coordinates). The other possibility (faster, but less general) is to specify the the point using isoparametric coordinates - but this is not supported. It is generally assumed, that derived classes will approximate somehow their values based on user specified data (on side nodes for example) and load approximation type. The similar scheme borrowed from FE appriximation is used, values computed at required point are computed as a product of approximation matrix (matrix of approximation functions) with "vertex" values, which has to be specified on input by user. Elements can request the order of load approximation (for setting up the appropriate integration rule order) and the array of component values (for each dof) at specific integration point on the boundary.

For some elements it may be better to obtain "vertex values" of boundary load to compute load vector directly using exact formulae. Elements then can ask for values at nodal points and obtain cooresponding "vertex values". Meaning of these values is load type dependent, see derived classes documentation for details.

Elements must take care, on which boundary the load acts on (side number, ...). Boundary load class also introduces load related cooordinate system indicator. Load can be generally specified in global coordinate system or in entity dependent local coordinate system. The entity dependent coordinate system is defined by particular element.

To sumarize, the services provided include computing component array evaluated at specific point on boundary, returning component array of "vertex values", returning load appriximation order (usefull when numerical integrations of load vector over element boundaries are used), returning type of coordinate system, in which load applies (global c.s., or entity related c.s.).

**BodyLoad**- Class representing base class for all element body load, acting over whole element volume (e.g., the dead weight).**BoundaryCondition**- class implementing boundary condition on DOF (primary boundary condition). This boundary condition is usually attribute of one or more degrees of freedom (DOF). The type of unknown (physical meaning) is fully determined by corresponding DOF, to which given BC is associated. Boundary condition can change its value in time using its inheritted loadTimeFunction attribute. It can also switch itself on or off depending on nonzero value of intorduced isImposedTimeFunction load time function. Please note, that previous option must be supported by particular engineering model (because equation renumbering is necessary, and for incremental solution schemes DOFs unknown dictionaries must be used). See particular engineering model documantation for details.**InitialCondition**- class implementing general initial condition. Initial condition is usually attribute of one or more degrees of freedom (DOFs). One particular DOF (with its physical meaning - for example displacement) can have associated only single initial condition. Initial condition trefore must represent several initial conditions for particular DOF (for example velocity and acceleration of unknown can be prescribed using single initial condition instance). These multiple entries are distinguished by their CharTypeMode value. The CharTypeMode value is also used as key in initialValueDictionary. Initial conditions apply and should be taken into account only in one particular time step, which number is determined from engineering model*giveNumberOfTimeStepWhenIcApply*service. If in this time step both boundary condition on unknown and also initial condition on value of this unknown (TotalMode CharTypeMode) are prescribed, then always value reported by boundary condition is taken into account.

Borek Patzak 2018-01-02