Welcome to PlenFrem, software for performing linear static analysis of 2D frame structures and trusses, suitable for civil/structural and mechanical engineering applications.
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.
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 ↩
| Parameter | Unit set 1 (metric) | Unit set 2 (metric) | Unit set 3 (imperial) |
|---|---|---|---|
| X, Y locations | m | mm | in |
| Modulus of Elasticity | kN/m² | N/mm² | ksi |
| Area | m² | mm² | in² |
| Inertia | m⁴ | mm⁴ | in⁴ |
| Force | kN | N | kip |
| Moment | kNm | Nm | kip-in |
| Displacement | m | mm | in |
⚠️ 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
| Column | Values |
|---|---|
| Node # | Node identifier (must be integer) |
| X Loc, Y Loc | X and Y Location for the node |
| DOF X,Y,Z | Degree 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,Z | Equivalent Joint Loads, Forces in X & Y direction and moment in Z direction. QLJ Z has no impact for trusses. |
For the left lower grid
| Column | Values |
|---|---|
| Member # | Member identifier (must be integer) |
| Start Node #, End Node # | Node number of two ends of member (must be integers) |
| A | Area of the cross section of the member |
| E | Youngs modulus of the material |
| I | Moment 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.
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
PlenFrem comes with some example structures which you can use as input for your 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.
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] | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 0 | AE/L | 0 | 0 | -AE/L | 0 | 0 |
| 1 | 0 | 12EI/L³ | 6EI/L² | 0 | -12EI/L³ | 6EI/L² |
| 2 | 0 | 6EI/L² | 4EI/L | 0 | -6EI/L² | 2EI/L |
| 3 | -AE/L | 0 | 0 | AE/L | 0 | 0 |
| 4 | 0 | -12EI/L³ | -6EI/L² | 0 | 12EI/L³ | -6EI/L² |
| 5 | 0 | 6EI/L² | 2EI/L | 0 | -6EI/L² | 4EI/L |
calculates [T] like this to transform in global coordinates, where θ = angle between start & end nodes
| [T] | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 0 | cos θ | sin θ | 0 | 0 | 0 | 0 |
| 1 | -sin θ | cos θ | 0 | 0 | 0 | 0 |
| 2 | 0 | 0 | 1 | 0 | 0 | 0 |
| 3 | 0 | 0 | 0 | cos θ | sin θ | 0 |
| 4 | 0 | 0 | 0 | -sin θ | cos θ | 0 |
| 5 | 0 | 0 | 0 | 0 | 0 | 1 |
[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.
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.
Some tips to simulate common analysis situation.
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.
If result shows NaN or ∞ then it indicates that the structure could be unstable.
PlenFrem can solve both statically determinate and indeterminate structures.
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.
| Key | Action |
|---|---|
| F1 | Show this help file |
| F2 | Edit current cell in grid |
| F4 | View model or structure |
| F5 | Run analysis |
| F6 | View member forces (after analysis) |
| F8 | Auto adjust column widths |
| F9 | Copy value from cell above |
| F10 | Save current file |
| F11 | Show output log |
| Control + O | Open input file |
| Control + Q | Quit application |
| Control + W | Save file as |
| Control + U | Bulk edit |
| Control + Insert [also Control + C] | Copy selection |
| Shift + Insert [also Control + V] | Paste selection |
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
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 🙏🏽