Boundary conditions that can be handled th> tr> | |
---|---|
Item th> | Description th> tr> |
Nodal external force increment td> | Specify the number of loading nodes, loading node number, and load increment value td> tr> |
Displacement constraint td> | Displacement constraint Specify the number of nodes and the number of the constraint node (complete constraint: only displacement = 0 can be handled) td> tr> |
Program name | Description |
---|---|
py_fem_gfrmAL.py td> | Planar skeleton geometry Non-linear structural analysis program td> tr> |
python3 py_fem_gfrmAL.py inp.txt out.txt nnmax
inp.txt td> | : Input data file (blank delimited data) td> tr> |
out.txt td> | : Output data file (blank separated data) td> tr> |
nnmax td> | : Number of loading steps td> tr> |
npoin nele nsec npfix nlod # Basic values for analysis
E A I # Material properties
..... (1 to nsec) ..... #
node_1 node_2 isec # Element connectivity, material set number
..... (1 to nele) ..... #
x y # Node coordinate of node
..... (1 to npoin) ..... #
lp fix_x fix_y fix_r # Restricted node number
..... (1 to npfix) ..... #
lp df_x df_y df_r # Loaded node and loading conditions (load increment)
..... (1 to nlod) ..... # (omit data input if nlod=0)
npoin, nele, nsec td> | : Number of nodes, number of elements, number of cross-sectional characteristics td> tr> |
npfix, nlod td> | : Number of constrained nodes, number of loaded nodes td> tr> |
E, A, I td> | : Elastic modulus, cross-sectional area, moment of inertia of area td> tr> |
node_1, node_2, isec td> | : Node 1, Node 2, Sectional characteristic number td> tr> |
x, y td> | : x coordinate, y coordinate td> tr> |
lp, fix_x, fix_y, fix_r td> | : Node number, x / y / rotation direction constraint (0: free, 1: complete constraint) td> tr> |
lp, df_x, df_y, df_r td> | : Node number, x · y · rotational load td> tr> |
npoin nele nsec npfix nlod nnmax
(Each value of above)
sec E A I
sec : Material number
E : Elastic modulus
A : Section area
I : Moment of inertia
..... (1 to nsec) .....
node x y fx fy fr kox koy kor
node : Node number
x : x-coordinate
y : y-coordinate
fx : Load in x-direction
fy : Load in y-direction
fr : Moment load
kox : Index of restriction in x-direction (0: free, 1: fixed)
koy : Index of restriction in y-direction (0: free, 1: fixed)
kor : Index of restriction in rotation (0: free, 1: fixed)
..... (1 to npoin) .....
elem i j sec
elem : Element number
i : Node number of start point
j : Node number of end point
sec : Material number
..... (1 to nele) .....
* nnn=0 iii=0 lam=0.0
node fp-x fp-y fp-r dis-x dis-y dis-r dr-x dr-y dr-r
node : Node number
fp-x : Total load in x-direction
fp-y : Total load in y-direction
fp-r : Total load in rotation
dis-x : Displacement in x-direction
dis-y : Displacement in y-direction
dis-r : Displacement in rotation
dr-x : Un-balanced force in x-direction
dr-y : Un-balanced force in y-direction
dr-r : Un-balanced force in rotation
..... (1 to npoin) .....
elem N_i S_i M_i N_j S_j M_j
elem : Element number
N_i : Axial force of node-i
S_i : Shear force of node-i
M_i : Moment of node-i
N_j : Axial force of node-j
S_j : Shear force of node-j
M_j : Moment of node-j
..... (1 to nele) .....
* nnn=1 iii=xx lam=xxx
node fp-x fp-y fp-r dis-x dis-y dis-r dr-x dr-y dr-r
node : Node number
fp-x : Total load in x-direction
fp-y : Total load in y-direction
fp-r : Total load in rotation
dis-x : Displacement in x-direction
dis-y : Displacement in y-direction
dis-r : Displacement in rotation
dr-x : Un-balanced force in x-direction
dr-y : Un-balanced force in y-direction
dr-r : Un-balanced force in rotation
..... (1 to npoin) .....
elem N_i S_i M_i N_j S_j M_j
elem : Element number
N_i : Axial force of node-i
S_i : Shear force of node-i
M_i : Moment of node-i
N_j : Axial force of node-j
S_j : Shear force of node-j
M_j : Moment of node-j
..... (1 to nele) .....
.... .... ....
* nnn=nnmax-1 iii=xx lam=xxx
node fp-x fp-y fp-r dis-x dis-y dis-r dr-x dr-y dr-r
..... (1 to npoin) .....
elem N_i S_i M_i N_j S_j M_j
..... (1 to nele) .....
n=(total degrees of freedom) time=(calculation time)
fp-x, fp-y, fp-r td> | : x-direction load, y-direction load, rotational direction load td> tr> |
dis-x, dis-y, dis-r td> | : x-direction displacement, y-direction displacement, rotational displacement td> tr> |
dr-x, dr-y, dr-r td> | : x-direction unbalanced force, y-direction unbalanced force, rotational direction unbalanced force td> tr> |
N, S, M td> | : Axial force, shear force, moment td> tr> |
n td> | : Total degrees of freedom (source of simultaneous equations) td> tr> |
time td> | : Calculation time td> tr> |
Program name | Description |
---|---|
inp_gfrm_canti.txt td> | Cantilever FEM Analysis input data td> tr> |
inp_gfrm_cable.txt td> | Cantilever with cable Beam FEM analysis input data td> tr> |
inp_gfrm_arch.txt td> | Arch FEM analysis input Data td> tr> |
inp_gfrm_lee.txt td> | Frame FEM analysis input Data td> tr> |
py_fig_gfrm.py td> | Load-displacement curve Drawing program (matplotlib) td> tr> |
py_fig_gfrm_mode.py td> | Program (matplotlib) td> tr> |
In the load-displacement curve creation program py_fig_gfrm.py, as a result of trying to make it versatile, the input from the command line became quite confusing. p>
With the displacement mode diagram creation program py_fig_gfrm_mode.py, it is relatively easy to realize a versatile one only with the displacement mode, but it becomes quite complicated when trying to put boundary conditions. Therefore, since I want to create only 4 graphs, I specify the input file in the program and process each file individually. p>
The arrow indicating the load is written as an arrow. with arrow p> ``` ax.arrow(x,y,u,v,head_length=hl, ....) ``` Write an instruction like
. For example, when drawing a vertical arrow, it should be noted that the length from the tail to the tip of the arrow is (v + head_length). The actual correspondence is as follows. p> ``` uu=0.0 vv=(ymax-ymin)*0.1 x1=xx[lnod-1] y1=yy[lnod-1]+vv hl=vv*0.4 hw=hl*0.5 ax.arrow(x1,y1,uu,-(vv-hl), lw=2.0,head_width=hw, head_length=hl, fc='#555555', ec='#555555') ```
The symbol indicating the fixed end drawn at the base of the vertical one-way beam is drawn using fill (... hatch ='///'). Here, the rectangular area is specified in fill, but since the border is unnecessary, linewidth = 0.0 is specified in fill to prevent the border from being drawn. The actual correspondence is as follows. p> ``` lp=1; x1=x[lp-1]; y1=y[lp-1] px=[x1-2*scl,x1+2*scl,x1+2*scl,x1-2*scl] py=[y1,y1,y1-1*scl,y1-1*scl] ax.fill(px,py,fill=False,linewidth=0.0,hatch='///') ax.plot([x1-2*scl,x1+2*scl],[y1,y1],color='#000000',linestyle='-',linewidth=1.5) ```
# FEM calculation by Arc-Length method
python py_fem_gfrmAL.py inp_gfrm_canti.txt out_gfrm_canti.txt 70
python py_fem_gfrmAL.py inp_gfrm_cable.txt out_gfrm_cable.txt 290
python py_fem_gfrmAL.py inp_gfrm_arch.txt out_gfrm_arch.txt 310
python py_fem_gfrmAL.py inp_gfrm_lee.txt out_gfrm_lee.txt 160
# Drawing of Load-displacement curve
python py_fig_gfrm.py out_gfrm_canti.txt 11 11 -411.07 1000 1000 \$u/L\$ $\v/L\$ \$u/L\$\,$\v/L\$ \$P/P_{cr}\$ LL
python py_fig_gfrm.py out_gfrm_cable.txt 12 11 -1644.3 1000 1000 \$u/L\$ \$v/L\$ \$u/L\$\,\$v/L\$ \$P/P_{cr}\$ LL
python py_fig_gfrm.py out_gfrm_arch.txt 21 21 -666.4 -500 -500 \$u/R\$ \$v/R\$ \$u/R\$\,\$v/R\$ \$P\\cdot\(R^2/EI\)\$ UL
python py_fig_gfrm.py out_gfrm_lee.txt 13 13 -166.6 1000 -1000 \$u/L\$ \$v/L\$ \$u/L\$\,\$v/L\$ \$P\\cdot\(L^2/EI\)\$ LL
# Drawing of displacement mode
python py_fig_gfrm_mode.py
python py_fig_gfrm.py out.txt node-L node-D nd-L nd-u nd-v leg-u leg-v x-Label y-Label loc
out.txt td> | : FEM output data file (blank delimited data) td> tr> |
node-L td> | : Loading node number for drawing load displacement curve td> tr> |
node-D td> | : Displacement drawing node number for drawing load displacement curve td> tr> |
nd-L td> | : Numerical value (including sign) for load dimensionless td> tr> |
nd-u td> | : Numerical value (including sign) for dimensionless displacement in x direction td> tr> |
nd-v td> | : Numerical value (including sign) for dimensionless displacement in the y direction td> tr> |
leg-u td> | : x-direction displacement label (for legend) td> tr> |
leg-v td> | : y-direction displacement label (for legend) td> tr> |
x-Label td> | : x-axis label (Displacement) td> tr> |
y-Label td> | : y-axis label (Load) td> tr> |
loc td> | : Legend drawing position td> tr> |
Cantilever beam receiving axial compressive force (inp_gfrm_canti.txt) th> tr> |
---|
L=1,000mm, E=200,000MPa, A=100m$^2$, I=833m$^4$
Initial deflection $v_0$=1mm Buckling load $P_{cr}=\pi^2 EI / 4 L^2$=411.07N |
Cantilever (inp_gfrm_cable.txt) th> tr> whose tip is pulled by a cable |
---|
Column: L=1,000mm, E=200,000MPa, A=100m$^2$, I=833m$^4$
Cable: L=1,000mm, E=200,000MPa, A=28.3$^2$ Initial deflection $v_0$=5mm Buckling load $P_{cr}=\pi^2 EI / L^2$=1644.3NN |
Asymmetrically supported arch under vertical concentrated load (inp_gfrm_arch.txt) th> tr> |
---|
R=500mm, Center angle=215$^\circ$, E=200,000MPa, A=100m$^2$, I=833m$^4$ |
Frame receiving vertical concentrated load (inp_gfrm_lee.txt) th> tr> |
---|
L=1000mm, E=200,000MPa, A=100m$^2$, I=833m$^4$ |
that's all