Contents ↓
Chapter 4

Boundary conditions and loads

A support specifies prohibited nodal motions; a load specifies generalized forces applied to the relevant components. In MKE-F these data do not change the original matrices: DOF indices and the load vector are rebuilt for each analysis.

Free and constrained DOFs

The function partitionDOFs converts support records into two disjoint lists:

  • fixedDOFs — DOFs with prescribed zero displacement;
  • freeDOFs — all DOFs not restrained by SPC; with SPC alone, these are the reduced-system unknowns.

fixedDOFs ∪ freeDOFs = {1, …, n},   fixedDOFs ∩ freeDOFs = ∅

The original global matrices K and M remain unchanged (and may be sparse). This separation preserves the physical meaning of the original model and allows correct reaction recovery.

Support types

A record has the form type,node,0,0,0. Nonzero prescribed displacements are not yet supported.

Frame 113 supports all seven combinations:

TypeConstrainedFreePhysical meaning
1ux, uy, thetaZ—Fully fixed
2uy, thetaZuxOnly ux free; rotation restrained
3ux, thetaZuyOnly uy free; rotation restrained
4ux, uythetaZPinned support
5uxuy, thetaZRoller: ux restrained, rotation free
6uyux, thetaZRoller: uy restrained, rotation free
7thetaZux, uyRotation restraint only

Truss 112 has no rotation: types 1 and 4 restrain ux, uy; types 3 and 5 restrain only ux; types 2 and 6 restrain only uy. Type 7 is rejected. The editor shows three unique combinations and exports types 1, 3 and 2 respectively.

Supports are stored as fixUx/fixUy/fixThetaZ masks. Changing element family preserves them; remove thetaZ restraints before switching to a truss. Duplicate restraints report the node and component. A pin-and-roller example is CaseRollerFrame.txt.

Work-conjugate displacements and forces

Each nodal DOF has a corresponding generalized force that does work on it:

ModelDegrees of freedomLoad components
truss 112[ux, uy][Fx, Fy]
frame 113[ux, uy, θz][Fx, Fy, Mz]

Mz is the moment about Z, work-conjugate to rotation θz. It is not a force Fz: out-of-plane displacement uz does not exist in a planar model. A nonzero Mz at a truss node is therefore rejected rather than ignored.

Four load histories

Nodal components use global axes: type,node,Fx,Fy,Mz; harmonic records append a positive frequency f in Hz. Modal analysis accepts no loads. A load on a restrained DOF remains in the full vector and contributes to the reaction.

Time-history columns correspond to t = 0, Δt, …, NΔt. If several records act on the same DOF, their values are added.

Section / typeValueSupported analysis
bcforce_stat / 10constant vector in statics; in dynamics, a compatible single-step pulse at t = Δtstatic and transient
bcforce_harm / 11F(t) = F0 sin(2πft)transient
bcforce_pulse / 12F0 only at t = Δttransient
bcforce_step / 13F0 in every column, including t = 0transient

For a single-step rectangular pulse, the discrete impulse is F0Δt. Changing the time step while keeping the amplitude fixed therefore changes the applied impulse.

% Five columns: t = [0, dt, 2dt, 3dt, 4dt]
pulse = [0, F0, 0,  0, 0];
step  = [F0, F0, F0, F0, F0];

Distributed element loading

eload_uniform is supported only for frame 113 in statics. A record 20,elementId,coordinateSystem,qx,qy gives force per unit actual member length. System 1 uses local axes (x from the first node to the second, y rotated +90° from x); system 2 uses global X, Y. Repeated records add together; the two components cannot both be zero.

After converting q to local axes, the consistent vector is:

fe = [qₓL/2, qᵧL/2, qᵧL²/12, qₓL/2, qᵧL/2, −qᵧL²/12]ᵀ

With ulocal = R uglobal, the global contribution is Rᵀfe. It is added to nodal loads; do not enter those equivalent actions a second time. Editing an element or its endpoint coordinates removes its distributed loads; Undo restores them. Switching Local/Global preserves the physical load direction.

Format and example: eload_uniform. Distributed loads are rejected in transient and modal analysis.

Linear loads: trapezoids and triangles

Section eload_linear contains 21,elementId,coordinateSystem,qx1,qy1,qx2,qy2. Values belong to the first and second element nodes: q(ξ) = (1 − ξ)q₁ + ξq₂. Loading covers the entire member. A zero endpoint gives a triangle; equal endpoints give a uniform load. Opposite signs are allowed; an entirely zero record is rejected.

For local endpoint vectors a and b, exact shape-function integration gives:

fₑ = [L(2aₓ+bₓ)/6, L(7aᵧ+3bᵧ)/20, L²(3aᵧ+2bᵧ)/60, L(aₓ+2bₓ)/6, L(3aᵧ+7bᵧ)/20, −L²(2aᵧ+3bᵧ)/60]ᵀ

N and V diagrams are quadratic and M is cubic; plotting includes interior extrema. Both load types add together and support MPCs and Mz releases. Select Linear in the editor and enter endpoint components; Local/Global transforms both vectors. Converting to Uniform takes the endpoint mean, preserving force but generally changing its moment.

Triangular load · Trapezoidal load · JSON v5

Laboratory 04. Nodal loads: force sums and time histories

The aim is to reconstruct the force at each instant from a table and distinguish static loads, single-step pulses and step loads.

Load at node 2: 10 N rightward, 20 N downward, and a 3 N·m counterclockwise moment.
The diagram shows time-dependent load amplitudes. This exercise constructs load vectors; displacements are not calculated and no supports are specified.

Input data and notation

DOF order: [u₁x; u₁y; θ₁; u₂x; u₂y; θ₂]. Time-dependent amplitudes at node 2: [10; −20; 3] (N, N, N·m); harmonic frequency 1 Hz. Time grid: t = [0, 0.25, 0.5, 0.75, 1] s. In a separate static case, the loads are added: [10; −20; 3] and [5; 2; −1].

Before running: hand calculations

  1. Find the three components of the total static load at node 2.
  2. Construct a table Fₓ(t) for three cases: the pulse acts only at t = Δt, the step starts at t = 0, and the harmonic load is 10·sin(2πt).
  3. Find the discrete impulse of each component F₀Δt; the moment impulse unit is N·m·s.

Run in Octave

Run from the project root. The supplied function prints the results; you do not need to edit its code for this exercise.

addpath(pwd);
setup;
addpath(fullfile(pwd, "reference", "examples"));
r = example_04_load_histories();

Working with the results

  1. Compare the static sum with the last three rows of Summed static load vector. The first three rows belong to unloaded node 1.
  2. Label the five columns of the three printed time tables using values from Time grid [s]. These tables show only DOFs 4–6: row one is Fₓ, row two is Fᵧ, and row three is M_z.
  3. Compare the first row of each table with your prediction. Reconstruct the other two rows by multiplying the same time function by −20 and 3. Small near-zero harmonic values arise from rounding.
  4. Compare Discrete pulse impulse components F0*dt with your calculation. Predict the impulse when Δt is halved at the same amplitude; determine the amplitude change needed to preserve the impulse.
Reference values

Static sum: [15; −18; 2]. For Fₓ, the rows are [0 10 0 0 0], [10 10 10 10 10] and [0 10 0 −10 0]. Impulse: [2.5; −5; 0.75] (N·s, N·s, N·m·s). Halving the step at fixed amplitude halves the impulse; double the amplitude to preserve it.

What to include in the report

The static load sum, a table or sketch of the three Fₓ(t) histories, impulse units, and an explanation of the time-step effect.

Chapter source code

Relationships between displacements at several nodes are covered separately in Chapter 4a: MPC, including dependent DOFs, the axis helper and constraint forces.

Mz end releases

Complete guide: chapter 4b

An Mz release disconnects moment transfer at a particular end without restraining node translations. An SPC on absent thetaZ is ignored with a warning. Nonzero nodal moments, MPC terms and monitors on absent rotations are rejected. Consistent element loads also act on private rotations.

JSON v4 · CaseReleaseStatic · CaseReleaseModal · CaseReleaseTransient