<normal_arglist> ::= <force_type> , <force_arglist>where force_type can be abstract for an abstract force, or conservative or follower for a structural force. The latter types also apply to the couple element, which can be structural only. It is discussed in this section because of its input syntax commonality with the structural force elements.
<force_type> ::= abstract
<force_arglist> ::= (node_dof) <dof> ,
(drive_caller) <force_magnitude>
the dof field is a normal node_dof but no order is required
since the force simply applies to the equation related to the node,
regardless of the order.
<force_type> ::= abstract internal
<force_arglist> ::= (node_dof) <dof1> ,
(node_dof) <dof2> ,
(drive_caller) <force_magnitude>
the dof1 and dof2 fields are normal node_dof
but no order is required since the force simply applies
to the equations related to the nodes, regardless of the order, with
opposite magnitudes.
<force_type> ::= { conservative | follower }
<force_arglist> ::= <node> ,
(Vec3) <relative_direction> ,
(Vec3) <relative_arm> ,
(drive_caller) <force_magnitude>
<force_type> ::= { conservative | follower } internal
<force_arglist> ::= <node1> ,
(Vec3) <relative_direction> ,
(Vec3) <relative_arm1> ,
<node2> ,
(Vec3) <relative_arm2> ,
(drive_caller) <force_magnitude>
# constant structural force
force: 1, conservative,
0.,0.,1., null,
const, 100.;
<force_type> ::= { conservative | follower }
<force_arglist> ::= <node> ,
(Vec3) <relative_direction> ,
(drive_caller) <couple_magnitude>
<force_type> ::= { conservative | follower } internal
<force_arglist> ::= <node1> ,
(Vec3) <relative_direction> ,
<node2> ,
(drive_caller) <couple_magnitude>
i.e. the arm is not required.
Note: by using a dof drive, a simple feedback control can be easily
implemented.
A more general force element can be written by using a template drive
that contains both the direction and the amplitude. This will be done in the
future.