Skip to content

IceTiki/matrixDisplacementMethod

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

matrixDisplacementMethod

——基于矩阵位移法的二维结构内力图绘制器

image-20220515190240478


简介

基于矩阵位移法的平面结构力学求解器(借助numpymatplotlib模块辅助计算和绘图)。

只需要使用节点Node构件Element结构Struction三个类即可快速组建结构。

在初始化对象时输入结构的相关参数(位置、约束条件、荷载等),即可快速求解并绘图。

详细文档

快速开始

  1. 新建文件夹
  2. 将代码文件夹matrixDisplacementMethod(注意,不要在解压时套了两层文件夹)移动到新建的文件夹内
  3. 创建一个*.py文件,输入以下示例代码。并运行。
  1. 定义节点(输入坐标, 约束条件, 荷载......)
  2. 定义构件(输入两个节点组成一个构件)
  3. 定义结构(输入一个节点,自动寻找所有与之相连的节点和构件)
  4. 计算绘图
from matrixDisplacementMethod import Node, Element, Struction

# 定义节点Node
n1 = Node(position=(0, 0), constraints=(1, 1, 1)) # 定义节点位置、约束情况(x,y,转角)、荷载(见n3节点)
n2 = Node(position=(2, 0))
n3 = Node(position=(2, 1), load=(0, 0, 10))
n4 = Node(position=(3, 1), constraints=(1, 1, 1))
# 定义构件Element
e1 = Element(node=(n1, n2), q=(0, -100)) # 定义杆件由哪两个节点相连、均布荷载的方向与大小(皆使用笛卡尔坐标系)
e2 = Element(node=(n2, n3))
e3 = Element(node=(n3, n4))
# 定义结构Struction
c1 = Struction(first_node=n1) # 选择结构内的一个节点(通过广度优先搜索, 寻找所有相连节点, 建立整个结构)
c1.print_image(output_type=1) # 绘制内力图(多种输出方式)

注意事项

坐标系是数学上常用的右手坐标系(结构力学书上常用左手坐标系)

  • 力在x, y轴正方向为正
  • 力矩逆时针方向为正

各种物理量没有单位,建议所有物理量的单位统一使用mskg以及其导出单位。

Node初始化参数文档

Parameters
---
position: tuple[float, float]
    节点坐标, 对应(x, y)。
constraints: tuple[bool, bool, bool]
    约束, 对应(x, y, θ)。
    如果为True, 则锁定对应分量, 相当于添加支座约束load: tuple[float, float, float]
    节点荷载, 对应(μ, ν, M)。

Examples
---
>>> Node(position=(10, 20), constraints=(True, True, False), load=(0, 0, 10))
>>> # 位置为x=10, y=20的节点, 使用固定铰支座 (x与y都被约束), 并在节点上施加了10的力矩。

>>> Node(position=(10, 20), constraints=(True, True, False), load=(0, 0, 0))
>>> # 位置为x=10, y=20的节点, 使用固定支座 (x、y、θ被约束)。

>>> Node(position=(10, 20), constraints=(True, False, False), load=(0, 10, 0))
>>> # 位置为x=10, y=20的节点, 使用x方向活动铰支座 (x被约束), 并在节点上施加了y正方向, 数值为10的力。

Notes
---
坐标与荷载默认皆使用右手坐标系」, 转角和力矩正方向为逆时针」。

Element初始化参数文档

Parameters
---
node: tuple[Node, Node]
    单元连接的两个节点
element_EA: float
    抗拉刚度, 杆件弹性模量和截面面积的乘积
element_EI: float
    抗弯刚度, 杆件弹性模量和轴惯性矩的乘积
q: tuple[float, float]
    均布荷载 (轴向, 法向)
    !(很长一段时间没有维护项目了, 下面两行存疑)
    以第一个节点到第二个节点为轴向正方向轴向正方向顺时针旋转90度为法向正方向junctions: tuple[bool, bool, bool, bool, bool, bool]
    单元与节点的连接方式, 分别代表:
    !(很长一段时间没有维护项目了, 忘记x, y是局部坐标系还是全局坐标系)
    (
        node_1 x方向绑定,
        node_1 y方向绑定,
        node_1 θ方向绑定,
        node_2 x方向绑定,
        node_2 y方向绑定,
        node_2 θ方向绑定,
    )

Examples
---
>>> Element(
>>>     node=(node_1, node_2),
>>>     junctions=(
>>>                   True, True, True, 
>>>                   False, True, False
>>>               )
>>> )
>>> # 连接节点node_1和node_2
>>> # 与node_1连接方式为刚性连接, 即(x, y, θ)均绑定
>>> # 与node_2连接方式为y方向连杆, 即绑定y

Notes
---
坐标与荷载默认皆使用右手坐标系」, 转角和力矩正方向为逆时针」。

链接

Readme CardReadme Card

About

基于矩阵位移法的结构力学求解器(含绘图模块) | 2D structural-mechanics solver base on matrix displacement method

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages