PlenFrem help 🏗

Welcome to PlenFrem, software for performing linear static analysis of 2D frame structures and trusses, suitable for civil/structural and mechanical engineering applications.

Philosophy 🧘‍♀️

PlenFrem aims 🎯 to offer a simple application for students 👩‍🎓, researchers, engineers 👷 whoever need a basic structural analysis software at no cost 🆓. It offers no bloated features, no bells 🔔 & whistles. The interface is intuitive and anyone with fair knowledge of structural analysis 🏗 should be able to use it without spending hours in reading manual 📜. Even if you have access to commercial software 💿, PlenFrem can be used to cross check 🔎 results against other similar applications. PlenFrem is useful for occasional users who do not want subscription based 💸 commercial software.

Main features ⛳

Units 📐

You can use any set of consistent units. We recommend that you use following metric units.

Modulus of elasticity, E = kN/m², for steel 200E6 kN/m², concrete 25E6 kN/m²

Area of member's cross section, A = m²,

Moment of inertia on Z axis, I = m⁴

X, Y locations = m

Equivalent joint loads, Force = kN or Moment = kNm

Directions for positive values, Fx ➡ Fy ⬆ Mz ↪

Directions for negative values, Fx ⬅ Fy ⬇ Mz ↩

ParameterUnit set 1 (metric)Unit set 2 (metric)Unit set 3 (imperial)
X, Y locationsmmmin
Modulus of ElasticitykN/m²N/mm²ksi
Aream²mm²in²
Inertiam⁴mm⁴in⁴
ForcekNNkip
MomentkNmNmkip-in
Displacementmmmin

Input 🧮

⚠️ It is the user's responsibility to ensure the structure is stable and valid for analysis.

Nodes and members information need to be provided before running the analysis. The sample folder has few example files which can be loaded and analyzed. We recommend that you create input files using text editor or spreadsheet and then save as CSV. The format for input file is self-explanatory once you have loaded an example file. Load input file via File - Open menu.

You need to provide following information in input file.

Stiffness matrix analysis supports nodal loads only. If you have uniformly distributed loads (UDL) these needs to be converted to nodal loads (ways to do it discussed later in this document)

For the left upper grid

ColumnValues
Node #Node identifier (must be integer)
X Loc, Y LocX and Y Location for the node
DOF X,Y,ZDegree Of Freedom in X, Y, Z directions.
DOF = 1 indicates node movement is possible in that direction.
DOF = 0 indicates node movement is not possible in that direction.
Example, fixed support will be DOF = 0,0,0 for X, Y and Z directions, where Z direction indicates rotation.
A hinge support is DOF = 0,0,1, a roller on Y direction is DOF = 1,0,1 and so on.
DOF Z has no impact for trusses.
QLJ X,Y,ZEquivalent Joint Loads, Forces in X & Y direction and moment in Z direction.
QLJ Z has no impact for trusses.

For the left lower grid

ColumnValues
Member #Member identifier (must be integer)
Start Node #, End Node #Node number of two ends of member
(must be integers)
AArea of the cross section of the member
EYoungs modulus of the material
IMoment of inertia in Z direction
This parameter has no impact for trusses.

The application enforces some very basic data validation like:

The output or result grid on the right hand side is read only where displacements and member forces will be displayed after the analysis.

The text box at the upper right corner is for entering notes about the structure.

The box at right hand top corner shows green box 🟩 when file is saved and orange box 🟧 when file is unsaved.

Bulk update

You can update multiple values at once based on condition using Edit - Bulk update menu.

Example 1: n,DOF X,1,[DOF X]=0

Example 2: m,E,25e6,E=1

1st parameter = always n or m (for node grid or member grid)

2nd parameter = name of the column containing values you like to update

3rd parameter = the value which will be applied

4th parameter = the condition following SQL syntax, if column name has space use [ ] to surround it

Examples

PlenFrem comes with some example structures which you can use as input for your analysis.

Analysis 🛠

You must select either Frame or Truss for analysis.

After input file is loaded, you may examine the structure's geometry by clicking View - Model. This step is optional.

Click on Analysis - Solve to solve the structure.

Program steps 🚶🏽‍♂️

Internally, this app performs following steps (for 2D frames):

[1] Reads nodes, members and loads - manually replace UDL with equivalent joint loads

[2] Generates stiffness matrix of each member - [T]T [k] [T]

where [k] for each member is like this

[k]012345
0AE/L00-AE/L00
1012EI/L³6EI/L²0-12EI/L³6EI/L²
206EI/L²4EI/L0-6EI/L²2EI/L
3-AE/L00AE/L00
40-12EI/L³-6EI/L²012EI/L³-6EI/L²
506EI/L²2EI/L0-6EI/L²4EI/L

calculates [T] like this to transform in global coordinates, where θ = angle between start & end nodes

[T]012345
0cos θsin θ0000
1-sin θcos θ0000
2001000
3000cos θsin θ0
4000-sin θcos θ0
5000001

[3] Constructs global stiffness matrix [K]

[4] Creates [KDOF] by separating free DOFs

[5] Solves for unknown nodal displacements, {d} = [K DOF ]-1 {F}

[6] Puts these displacements in [K] and set fixed DOF values as 0

[7] Solves for {F} = [K]{D} to get support reactions

[8] Optionally calculates individual member forces

For trusses, it follows similar steps but stiffness matrices are different from frames. All commercial structural engineering applications follow above direct stiffness analysis process.

Output 📊

Once solved, click on View - Member forces to show member forces that is, Fx, Fy & Mz at start and end nodes of each member. For trusses, it will be axial forces.

You can copy the output to clipboard by clicking on upper left corner of the grid, which selects entire grid. Then press Ctrl + Ins or Ctrl + C. You can paste the result in Excel.

The output grid shows displacement and member forces at each DOF (degrees of freedom). The step by step output is written in output.log file which you can view from the app via View - Show log menu. The file is created and overwritten upon every run. If you want to save the file, just rename or move to a different folder.

Tips 💡

Some tips to simulate common analysis situation.

UDL to equivalent joint loads (for frame member)

In Stiffness Method, loads can be applied only at joints. So, all UDL must be converted to nodal loads.

If on member with length L, a UDL of w kN/m is acting, then

equivalent joint load = Fx = 0

equivalent joint load = Fy = -wL/2 kN

equivalent moment = Mz = -wL²/12 kNm in left end, +wL²/12 kNm in right end

Alternatively, a UDL can be considered as a point load (= wL) acting in the mid-point of the member. This requires the member to be split into 2 members and the equivalent join load is applied at the middle node.

The Edit - Add UDL menu can be used to assign UDL to a member. This option splits the member into several members and applies equivalent loads at each node.

Determinacy of a structure

If result shows NaN or ∞ then it indicates that the structure could be unstable.

PlenFrem can solve both statically determinate and indeterminate structures.

Internal hinge in a frame member

An approximate solution to the problem can be obtained by introducing a very short member, with very little bending stiffness, at appropriate nodes. Typical parameters for this member can be L = 0.000001 m, E = 1000 kPa, I = 1E-15 m⁴, A = 1E-05 m² or similar.

Shortcut keys

KeyAction
F1Show this help file
F2Edit current cell in grid
F4View model or structure
F5Run analysis
F6View member forces (after analysis)
F8Auto adjust column widths
F9Copy value from cell above
F10Save current file
F11Show output log
Control + OOpen input file
Control + QQuit application
Control + WSave file as
Control + UBulk edit
Control + Insert [also Control + C]Copy selection
Shift + Insert [also Control + V]Paste selection

Support 🩺

Please report bugs and feature requests via www.enselsoftware.com

If you find this program useful, please consider donation via https://www.enselsoftware.com/donate.html

Legal ⚖

This software comes without any warranty or whatsoever. The developer is not responsible for damage arising from direct or indirect/consequential use of this software. Always verify the results using other means. By using this software you agree to understand this.

Thank you 🙏🏽