--Création d'une méthode des éléments finis (FEM) avec python ~ vba → traduction python ~
Si vous expliquez le concept grossièrement Créons la méthode des éléments finis (FEM) avec python
Tout d'abord, disons ~ vba → traduction python ~ [ce livre](https://rpx.a8.net/svt/ejp?a8mat=2TINC2+D4Q7VE+2HOM+BW8O1&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl .rakuten.co.jp% 2Fhgc% 2F0eac8dc2.9a477d4e.0eac8dc3.0aa56a48% 2Fa08100810103_2TINC2_D4Q7VE_2HOM_BW8O1% 3Fpc% 3Dhttp% 253A% 252Futen.co.puten% 252Fraks.puten.com .rakuten.co.jp% 252Frb% 252F1700147% 252F) Exemple Excel 5-1 Analyse de squelette tridimensionnelle .xls
(ci-après exemple) sera réécrit en python.
[Introduction à la méthode des éléments finis Excel (cours de génie civil Excel)](https://rpx.a8.net/svt/ejp?a8mat=2TINC2+D4Q7VE+2HOM+BW8O1&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb .afl.rakuten.co.jp% 2Fhgc% 2F0eac8dc2.9a477d4e.0eac8dc3.0aa56a48% 2Fa08100810103_2TINC2_D4Q7VE_2HOM_BW8O1% 3Fpc% 3Dhttp% 253AFputen% 252Fraks. % 252F books.rakuten.co.jp% 252Frb% 252F1700147% 252F)
La traduction est la suivante [Sample](https://rpx.a8.net/svt/ejp?a8mat=2TINC2+D4Q7VE+2HOM+BW8O1&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co. jp% 2Fhgc% 2F0eac8dc2.9a477d4e.0eac8dc3.0aa56a48% 2Fa08100810103_2TINC2_D4Q7VE_2HOM_BW8O1% 3Fpc% 3Dhttp% 253A% 252Futen% 252Fbook %Frak% 253A% 252Futen% 252Fbook %Fruten.com jp% 252Frb% 252F1700147% 252F) → python sera traduit.
5-1 Analyse tridimensionnelle du squelette.xls
Calcul de sous-cmd privé_Click()
Dim I As Long
Dim NEQ As Integer
For I =1 À la limite supérieure de la matrice
AJCB(I) = 0
Next
Saisie des données d'appel
Appelez la matrice SKY(NEQ)
For I = 1 To NEQ
FORCE(I) = 0
Next I
Appeler la distribution de charge distribuée
Appel de force externe ajouter
Call decomp(NEQ)
Call redbak(NEQ)
Calcul du déplacement d'appel
Calcul de la force d'appel et du moment
Sortie de résultat d'appel
MsgBox "L'analyse est terminée"
End Sub
framecalc.py
from Calcrate import Calcrate
if __name__ == "__main__":
cal = Calcrate()
NEQ = 0
cal.Saisie des données()
cal.Matrice SKY(NEQ)
cal.Répartition de la charge distribuée()
cal.Ajout de force externe()
cal.decomp(NEQ)
cal.redbak(NEQ)
cal.Calcul du déplacement()
cal.Calcul de force et de moment()
cal.Sortie de résultat()
print("L'analyse est terminée")
Mon environnement est le suivant.
OS
Tout d'abord, téléchargez le code source.
[Exemple](https://rpx.a8.net/svt/ejp?a8mat=2TINC2+D4Q7VE+2HOM+BW8O1&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2cF0 9a477d4e.0eac8dc3.0aa56a48% 2Fa08100810103_2TINC2_D4Q7VE_2HOM_BW8O1% 3Fpc% 3Dhttp% 253A% 252F% 252Fbooks.rak.co.jp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 252F) Veuillez télécharger 5-1 3D skeleton analysis.xls
selon les instructions du livre.
Nous allons traduire ce VBA Excel en python.
La source traduite en python est ici.
$ git clone -b "#1" https://github.com/sasaco/FramePython.git
Lorsque l'environnement est prêt, accédez au répertoire du code source et appuyez sur framecalc.py pour démarrer l'analyse. Si «L'analyse est terminée» s'affiche, l'analyse a été effectuée correctement.
python
$ cd FramePython
$ python framecalc.py
$L'analyse est terminée
[Exemple](https://rpx.a8.net/svt/ejp?a8mat=2TINC2+D4Q7VE+2HOM+BW8O1&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2cF0 9a477d4e.0eac8dc3.0aa56a48% 2Fa08100810103_2TINC2_D4Q7VE_2HOM_BW8O1% 3Fpc% 3Dhttp% 253A% 252F% 252Fbooks.rak.co.jp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 252F) Excel utilise la feuille ** [entrée 1] [entrée 2] ** comme données d'entrée. Les résultats de l'analyse sont stockés dans la feuille ** [Calcul / Sortie] **.
Le programme python traduit ne fonctionne pas avec la feuille Excel, donc [Exemple](https://rpx.a8.net/svt/ejp?a8mat=2TINC2+D4Q7VE+2HOM+BW8O1&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2cF0F0 9a477d4e.0eac8dc3.0aa56a48% 2Fa08100810103_2TINC2_D4Q7VE_2HOM_BW8O1% 3Fpc% 3Dhttp% 253A% 252F% 252Fbooks.rak.co.jp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 252F) Feuille Excel ** [Entrée 1] [Entrée 2] [Calcul / Sortie] ** est convertie en csv et le fichier est utilisé pour l'entrée et la sortie.
La séquence de vba est 1 ~
5-1 Analyse tridimensionnelle du squelette.xls
Range(1,1)
le tableau python est de 0
Calcrate.py
Range[0][0]
J'ai donc dû être prudent lors de la traduction.
[Exemple](https://rpx.a8.net/svt/ejp?a8mat=2TINC2+D4Q7VE+2HOM+BW8O1&rakuten=y&a8ejpredirect=http%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2cF0F0 9a477d4e.0eac8dc3.0aa56a48% 2Fa08100810103_2TINC2_D4Q7VE_2HOM_BW8O1% 3Fpc% 3Dhttp% 253A% 252F% 252Fbooks.rak.co.jp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 3DAhp% 252Frb% 252F1700147% 252F) La fonction de dessin Excel n'est pas portée en python
Pour le moment, le travail de traduction de vba → python est terminé, j'ai donc comparé les résultats d'analyse des deux Une petite valeur de presque 0 a une erreur, mais n'est-ce pas une reproductibilité raisonnable?
Déplacement | REACT | élément | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X | Y | Z | angX | angY | angZ | Rx | Ry | Rz | Mx | My | Mz | nœud | Fx | Fy | Fz | Mx | My | Mz | |||||
1 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 1 | 3.49E+01 | 408.073 | 20.088 | 31.400 | 1.73E-16 | -17.837 | 1 | 1 | 408.073 | -34.929 | 20.088 | 1.73E-16 | -31.400 | -17.837 | ||
2 | 2.30E-03 | -2.59E-02 | -1.23E-04 | 1.17E-04 | -6.91E-21 | -2.08E-03 | 2 | -5.00E-15 | -76.000 | 0.000 | 48.000 | 1.28E-14 | -75.000 | 2 | -408.073 | 34.929 | -20.088 | -1.73E-16 | -48.953 | -121.877 | |||
3 | 1.17E-02 | -4.30E-02 | 2.04E-04 | 2.42E-04 | 4.04E-19 | -3.80E-03 | 3 | -1.46E-13 | -78.000 | 0.000 | 48.000 | -3.70E-14 | -75.000 | 2 | 2 | 269.653 | -44.737 | 22.027 | -1.03E-14 | -34.644 | -46.608 | ||
4 | 2.76E-02 | -5.04E-02 | 1.19E-03 | 4.20E-04 | -5.62E-19 | -5.41E-03 | 4 | 9.19E-14 | -56.000 | 0.000 | 42.667 | 3.56E-13 | -66.667 | 3 | -269.653 | 44.737 | -22.027 | 1.03E-14 | -53.464 | -132.339 | |||
5 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 0.00E+00 | 5 | 7.02E+00 | 623.968 | 20.088 | 31.400 | -6.73E-15 | 29.101 | 3 | 3 | 116.788 | -45.660 | 18.809 | 2.42E-14 | -24.329 | -50.990 |
Déplacement | REACT | élément | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
X | Y | Z | angX | angY | angZ | Rx | Ry | Rz | Mx | My | Mz | nœud | Fx | Fy | Fz | Mx | My | Mz | |||||
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 34.9286048 | 408.0727049 | 20.08821182 | 31.40032555 | -9.49E-15 | -17.83716034 | 1 | 1 | 408.0727049 | -34.9286048 | 20.08821182 | -9.49E-15 | -31.40032555 | -17.83716034 | ||
2 | 0.002298747 | -0.025909378 | -0.000123095 | 0.000117015 | 3.79E-19 | -0.002080804 | 2 | -1.91E-14 | -76 | -3.11E-15 | 48 | 1.46E-14 | -75 | 2 | -408.0727049 | 34.9286048 | -20.08821182 | 9.49E-15 | -48.95252174 | -121.8772589 | |||
3 | 0.011665227 | -0.043030177 | 0.000204306 | 0.000242481 | 8.13E-19 | -0.003795417 | 3 | -6.95E-14 | -78 | -6.66E-15 | 48 | -1.17E-13 | -75 | 2 | 2 | 269.6525828 | -44.73675837 | 22.02695187 | -1.08E-14 | -34.64397073 | -46.60823232 | ||
4 | 0.027638145 | -0.050445274 | 0.001194231 | 0.000419675 | 6.78E-19 | -0.005408655 | 4 | -2.39E-13 | -56 | 3.55E-14 | 42.66666667 | -2.39E-13 | -66.66666667 | 3 | -269.6525828 | 44.73675837 | -22.02695187 | 1.08E-14 | -53.46383676 | -132.3388011 | |||
5 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 7.022385521 | 623.9683925 | 20.08821182 | 31.40032555 | -4.93E-15 | 29.10143338 | 3 | 3 | 116.7877789 | -45.66043605 | 18.80913902 | 3.39E-15 | -24.32874619 | -50.9899696 |
Pour le moment, j'ai pu obtenir des résultats similaires.
la prochaine fois, --Séparer la classe de pièces d'analyse ――La méthode de résolution de la matrice est comme python
Je suis en train de penser.
Cet article est un projet en cours, donc Pas encore complété.
L'état actuel du programme se trouve dans la branche maître. https://github.com/sasaco/FramePython/tree/master Vous avez peut-être commencé à corriger certains des problèmes ci-dessus
Veuillez nous contacter si vous êtes intéressé.
Recommended Posts