Analyse non linéaire géométrique du squelette élastique bidimensionnel avec Python

Aperçu du programme

Gestion des conditions aux limites
Élément Description
Incrément de force externe nodale Spécifiez le nombre de nœuds de chargement, le numéro de nœud de chargement et la valeur d'incrément de charge
Contrainte de déplacement de nœud Contrainte de déplacement Spécifiez le nombre de nœuds et le numéro de nœud de contrainte (contrainte complète: seul le déplacement = 0 peut être traité)

Programme d'analyse FEM

Program nameDescription
py_fem_gfrmAL.py Géométrie du squelette planaire Programme d'analyse structurelle non linéaire

Script pour l'exécution de l'analyse FEM

python3 py_fem_gfrmAL.py inp.txt out.txt nnmax
inp.txt : fichier de données d'entrée (données séparées par des blancs)
out.txt : fichier de données de sortie (données séparées par des blancs)
nnmax : Nombre d'étapes de chargement

Format des données d'entrée

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 : Nombre de nœuds, nombre d'éléments, nombre de caractéristiques transversales
npfix, nlod : Nombre de nœuds de contrainte, nombre de nœuds de chargement
E, A, I : coefficient d'élasticité, aire de section, moment secondaire de section
node_1, node_2, isec : Node 1, Node 2, numéro de caractéristique de section
x, y : coordonnée x, coordonnée y
lp, fix_x, fix_y, fix_r : Numéro de nœud, contrainte x / y / sens de rotation (0: libre, 1: contrainte complète)
lp, df_x, df_y, df_r : numéro de nœud, x · y · charge de rotation

Format des données de sortie

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 : charge de direction x, charge de direction y, charge de sens de rotation
dis-x, dis-y, dis-r : déplacement dans le sens x, déplacement dans le sens y, déplacement en rotation
dr-x, dr-y, dr-r : force déséquilibrée dans la direction x, force déséquilibrée dans la direction y, force déséquilibrée dans la direction de rotation
N, S, M : Force axiale, force de cisaillement, moment
n : degrés de liberté totaux (source des équations simultanées)
heure : heure de calcul

Exemple de sortie

Program nameDescription
inp_gfrm_canti.txt Cantilever FEM Données d'entrée d'analyse
inp_gfrm_cable.txt Cantilever avec câble Données d'entrée d'analyse FEM de poutre
inp_gfrm_arch.txt Entrée d'analyse Arch Données
inp_gfrm_lee.txt Entrée d'analyse du cadre FEM Données
py_fig_gfrm.py Courbe de déplacement de charge Programme de dessin (matplotlib)
py_fig_gfrm_mode.py Programme (matplotlib)

Programme de dessin de courbe de déplacement de charge py_fig_gfrm.py

Dans le programme de création de courbes de charge / déplacement py_fig_gfrm.py, après avoir essayé de le rendre polyvalent, l'entrée de la ligne de commande est devenue assez déroutante.

Programme de création de diagramme de mode de déplacement py_fig_gfrm_mode.py

Avec le programme de création de diagramme de mode de déplacement py_fig_gfrm_mode.py, il est relativement facile de réaliser quelque chose de polyvalent uniquement avec le mode de déplacement, mais si vous essayez de mettre des conditions aux limites, cela devient assez compliqué. Par conséquent, comme je ne souhaite créer que 4 graphiques, je spécifie le fichier d'entrée dans le programme et je traite chaque fichier individuellement.

(Flèche indiquant la charge)

La flèche indiquant la charge est écrite sous forme de flèche. avec flèche ``` ax.arrow(x,y,u,v,head_length=hl, ....) ``` Écrivez une instruction comme

. Par exemple, lorsque vous dessinez une flèche verticale, il convient de noter que la longueur de la queue à la pointe de la flèche est (v + head_length). La correspondance réelle est la suivante. ``` 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') ```

(Symbole indiquant l'extrémité fixe)

Le symbole indiquant l'extrémité fixe dessinée à la base de la poutre unidirectionnelle verticale est dessiné en utilisant fill (... hatch = '///'). Ici, fill spécifie une zone rectangulaire, mais comme une bordure n'est pas requise, linewidth = 0.0 est spécifié dans fill pour empêcher la bordure d'être dessinée. La correspondance réelle est la suivante. ``` 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) ```

Exécution de calcul FEM / script d'exécution du programme de dessin de courbe de déplacement de charge

# 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 : fichier de données de sortie FEM (données séparées par des blancs)
node-L : Numéro de nœud de chargement pour dessiner une courbe de déplacement de charge
node-D : numéro de nœud du dessin de déplacement pour le dessin de la courbe de déplacement de charge
nd-L : valeur numérique (signe compris) pour l'absence de charge
nd-u : valeur numérique (signe compris) pour le déplacement en direction x sans dimension
nd-v : valeur numérique (signe compris) pour le déplacement en direction y sans dimension
leg-u : étiquette de déplacement dans la direction x (pour la légende)
leg-v : étiquette de déplacement dans la direction y (pour la légende)
x-Label : étiquette de l'axe des x (déplacement)
étiquette y : étiquette axe y (charge)
loc : Position du dessin de la légende

Exemple de sortie de mode de déplacement et de courbe de déplacement de charge

Cantilever (inp_gfrm_canti.txt) qui reçoit la force de compression axiale
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

fig_mode_gfrm_canti.png

fig_gfrm_canti.png

Cantilever (inp_gfrm_cable.txt) dont la pointe est tirée par un câble
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

fig_mode_gfrm_cable.png

fig_gfrm_cable.png

Arc supporté de manière asymétrique (inp_gfrm_arch.txt) sous charge concentrée verticale
R=500mm, Center angle=215$^\circ$, E=200,000MPa, A=100m$^2$, I=833m$^4$

fig_mode_gfrm_arch.png

fig_gfrm_arch.png

Trame recevant une charge concentrée verticale (inp_gfrm_lee.txt)
L=1000mm, E=200,000MPa, A=100m$^2$, I=833m$^4$

fig_mode_gfrm_lee.png

fig_gfrm_lee.png

c'est tout

Recommended Posts

Analyse non linéaire géométrique du squelette élastique bidimensionnel avec Python
Analyse de squelette planaire avec Python
Analyse de la structure du squelette en trois dimensions avec Python
Analyse bidimensionnelle du flux de perméation saturée-insaturée avec Python
Analyse de conduction thermique bidimensionnelle non stationnaire avec Python
Analyse de données avec python 2
Analyse vocale par python
Analyse de données avec Python
Analyse du squelette de plan avec Python (4) Gestion du déplacement forcé
[Python] Analyse morphologique avec MeCab
[Analyse de co-occurrence] Analyse de co-occurrence facile avec Python! [Python]
Analyse des émotions par Python (word2vec)
Analyse des secousses musculaires avec Python
Analyse de squelette planaire avec Python (3) Création d'un diagramme de force en coupe
Analyse d'impédance (EIS) avec python [impedance.py]
Text mining avec Python ① Analyse morphologique
Analyse du squelette planaire dans Python (2) Hotfix
Analyse de données à partir de python (visualisation de données 1)
Analyse de régression logistique Self-made avec python
Analyse de données à partir de python (visualisation de données 2)
[Didacticiel d'analyse Python en base de données avec SQL Server 2017]
Apprentissage automatique avec python (2) Analyse de régression simple
Programme d'analyse des contraintes FEM 2D par Python
Exemple d'analyse de squelette tridimensionnelle par Python
Analyse des tweets avec Python, Mecab et CaboCha
Analyse de données à partir de python (pré-traitement des données-apprentissage automatique)
Vous pouvez le faire avec Python! Analyse structurale de cristaux colloïdaux bidimensionnels
Python: analyse morphologique simplifiée avec des expressions régulières
[Diverses analyses d'images avec plotly] Visualisation dynamique avec plotly [python, image]
Analyse d'images médicales avec Python 1 (Lire une image IRM avec SimpleITK)
Analyse statique du code Python avec GitLab CI
FizzBuzz en Python3
Grattage avec Python
squelette de script python
Grattage avec Python
Python avec Go
Analyse de données python
Twilio avec Python
Intégrer avec Python
Jouez avec 2016-Python
AES256 avec python
Testé avec Python
python commence par ()
avec syntaxe (Python)
Bingo avec python
Zundokokiyoshi avec python
Excel avec Python
Micro-ordinateur avec Python
Cast avec python
Collecte d'informations sur Twitter avec Python (analyse morphologique avec MeCab)
[OpenCV / Python] J'ai essayé l'analyse d'image de cellules avec OpenCV
Note de lecture: Introduction à l'analyse de données avec Python
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Construction d'un environnement d'analyse de données avec Python (notebook IPython + Pandas)
Calculer le coefficient de régression d'une analyse de régression simple avec python
[Python] Ajout d'une instance de base de données de RDS avec Elastic Beanstalk