Thème :
Conversion d'une nervure en modèle surfacique avec poutre résultante par VBA
Remarque :
Si une nervure est incluse dans un calcul non linéaire ou si elle est rigidement connectée aux murs voisins, la modélisation doit être réalisée à l'aide d'une surface plutôt que d'une barre. Pour que la nervure reste cependant calculée comme une barre, une poutre résultante avec l'excentrement adéquat est nécessaire. Les efforts internes de surface sont ainsi transformés en efforts internes de barre.
Description :
La modélisation d'une nervure basée sur une surface avec une poutre résultante est bien plus complexe que la création d'une barre de type nervure. Une nervure basée sur une barre doit donc être convertie en un modèle de surface (poutre résultante incluse) à l'aide du programme EXCEL-VBA ci-dessous.
Pour effectuer cette opération, les étapes sont les suivantes :
1.
Lecture des paramètres de la nervure (section, orientation, etc.)
Deuxième
Création d'une surface pour la nervure
3.
créer une poutre résultante
4.
Suppression de la nervure
Des exemples tirés du code source complet sont donnés dans cet article et celui-ci peut être téléchargé au bas de cette page.
Lecture des paramètres de la nervure
L'utilisateur peut sélectionner la nervure à convertir à partir de l'interface du logiciel grâce à la fonction EnableSelections. Tant que la fonction EnableSelections est activée par la commande true, seuls les éléments sélectionnés dans RFEM sont lus. La barre sélectionnée est lue comme suit :
' get interface of active model
Set iMod = iApp.GetActiveModel
' get interface of (structural) model data
Dim iModData As RFEM5.IModelData2
Set iModData = iMod.GetModelData
' get selected member
iModData.EnableSelections True
Dim mems() As RFEM5.Member
Dim selMem As RFEM5.Member
mems = iModData.GetMembers
selMem = mems(0)
iModData.EnableSelections False
Les paramètres suivants sont requis pour la modélisation de la nervure :
Section de la nervure, numéros des surfaces et largeurs efficaces
Orientation des nervures
Matériau de la nervure
Dans RFEM, une nervure est un type de barre. Pour effectuer la programmation via l'interface COM, cela signifie que les données d'une nervure doivent être extraites via deux interfaces différentes : une pour la barre et une pour la nervure. L'interface pour la nervure peut être appelée via la fonction IModelData.GetRib. La fonction GetRib attend le numéro de la nervure contenu dans la barre via Member.RibNo.
' get parameters of rib
' #####################
Dim iRb As RFEM5.IRib
Set iRb = iModData.GetRib(selMem.RibNo, AtNo)
Dim selRb As RFEM5.Rib
selRb = iRb.GetData
Dim rbCrsc As RFEM5.RibCrossSection
rbCrsc = iRb.GetRibCrossSection
L'interface avec la nervure comporte deux éléments différents : les données générales de la nervure via la structure de la nervure et les données de la section de la nervure via RibCrossSection. Rib contient les numéros de surface, la position de la nervure et les largeurs efficaces. RibCrossSection contient la description et les dimensions de la section interne de la nervure, également utilisée par RF-CONCRETE Members (ITCU).
Une orientation, disponible via le système d'axes local de la barre, est également requise. L'accès au système d'axes se fait via l'interface avec la barre. La fonction IMemer.GetLocalCoordinateSystem renvoie la structure à CoordinateSystem.
Dim cosy As RFEM5.CoordinateSystem
cosy = iModData.GetMember(selMem.no, AtNo).GetLocalCoordinateSystem(0#).GetData
GetLocalCoordinateSystem a toujours besoin de la position x de la barre, qui a été définie sur 0,0 ou au début. Outre les paramètres mentionnés ci-dessus, le matériau de la barre est également requis et peut être obtenu via la section de la barre.
Dim selCrsc As RFEM5.CrossSection
selCrsc = iModData.GetCrossSection(selMem.StartCrossSectionNo, AtNo).GetData
Création d'une surface pour la nervure
Le logiciel a été créé uniquement pour les nervures droites du côté z+. La nervure pouvant également être oblique, il faut créer la surface à l'aide de l'orientation de barre. La variable cosy du système d'axes de barre local inclut le vecteur de direction pour l'axe z local cosy.Axis avec ses trois valeurs x, y et z. Ce vecteur est normalisé de sorte qu'il indique la distance et la direction du bord inférieur de la nervure une fois multiplié par la hauteur de la nervure. Pour les lignes de contour de la surface de la nervure, ce vecteur est multiplié par la hauteur de la nervure et ajouté aux nœuds de début et de fin. On obtient ainsi les deux nœuds d'extrémité de la ligne du bord inférieur de la nervure surfacique. La hauteur de la nervure inclut également la moitié de l'épaisseur de la largeur efficace. À des fins de simplification, seule l'épaisseur de surface du premier côté (-y, dans le système d'axes local) de la section de nervure est utilisée (UpperLeftFlangeThickness). Une fois que les nœuds sont disponibles, vous pouvez générer le contour...