Set bar section data and calculate (API) with corrosion

Set bar section data and calculate (API) with corrosion

1234eddie
Advocate Advocate
5,931 Views
27 Replies
Message 1 of 28

Set bar section data and calculate (API) with corrosion

1234eddie
Advocate
Advocate

Hi all,

 

I'm currently working on a foundation module for our company. with this module i will be able to calculate the strength, stifness and bearing capacity of different piles(RHS, HEA, IPE). to achieve this i'm working with excel, dynamo studio and robot structural analysis. but with foundations i have to consider corrosion on the piles(RHS, HEA, IPE), where the corrosion can vary from zero to 2 or 3mm of the section. for round hollow sections it's quite easy, diameter is D-2*Tcorrosion and wall thickness T-2*Tcorrosion.  This is the script i use for this.

USec_name= IN[0]
USec_mat = IN[1]
USec_D = IN[2]
USec_T = IN[3]
nodeSupportName = IN[4]
nodeSupportData = IN[5]

application = RobotApplicationClass()
project = application.Project
structure = project.Structure
labels = structure.Labels
loads = structure.Cases
ProjectPrefs = project.Preferences
bars = structure.Bars

lab_serv = IRobotLabelServer 
lab_serv = labels
sec = IRobotLabel
sec = lab_serv.create(IRobotLabelType.I_LT_BAR_SECTION, USec_name)
data = sec.data
data.Type = IRobotBarSectionType.I_BST_NS_TUBE
data.ShapeType = IRobotBarSectionShapeType.I_BSST_USER_TUBE
nonst_data = IRobotBarSectionNonstdData
nonst_data = data.CreateNonstd(0)
nonst_data.SetValue(IRobotBarSectionNonstdDataValue.I_BSNDV_TUBE_D,USec_D)
nonst_data.SetValue(IRobotBarSectionNonstdDataValue.I_BSNDV_TUBE_T,USec_T)
data.MaterialName = USec_mat
data.CalcNonstdGeometry()
lab_serv.Store(sec)

 

But know i want to do the same for HEA and IPE sections. see picture below from a HEA200 section with 2mm corrosion on all sides.

Corrosion on members.JPGLeft Iy=20155761mm4/right Iy=22540176mm4 Difference 11%

I started searching in the API documentation and found the I_BISYM which corresponds to the left section in the picture above. but when i use this shape type i'm losing 11% on my moment of inertia of the strong axis what is way to much.

if i check the databese of the profiles i see that there are shapetypes with corresponding geometry named to I_BSDV. See pictures below.

API members I_BSDV.JPGStandard databese.JPG

So i can define the next parameters(including the reduction to corrosion) quite easy:

H(height), Bf(with of flange), Tf(thickness flange), Tw(thickness web), Ra(radius). 

After defining these parameters i ques that with 'calc geometry' i can get this section.

 

My question now is? is it possible to generate a section with I_BSDV 

or are there better options to apply corrosion to a standaard HEA/IPE section?

@Rafal.Gaweda @cool.stuff @JacquesGaudin @Anonymous 

I hope someone can help me with this. 

 

Thanks in advance.

 

Gr Edward.

 

0 Likes
Accepted solutions (1)
5,932 Views
27 Replies
Replies (27)
Message 2 of 28

Rafal.Gaweda
Autodesk Support
Autodesk Support

Hi @1234eddie 

 

Maybe... I_BSST_UNKNOWN

less easy, more precise.

 

unkno.jpg



Rafal Gaweda
0 Likes
Message 3 of 28

1234eddie
Advocate
Advocate

@Rafal.Gaweda thanks for your reply.

but it's not exactly what i'm looking for.

With the I_BSST_UNKNOWN is still have to calculate the properties by hand/import cad to section definition and get the value.

that's quite a lot of work, because every project is different, the corrosion rate is different and also the most economical pile differs per project. that's why i'm triying to write a code/script for this.

so with the script it would be easier for me to calculate multiple piles for a project in a short time.

 

Hopefully you know an other VBA part/script that is possible of doiing this? 

0 Likes
Message 4 of 28

Rafal.Gaweda
Autodesk Support
Autodesk Support

Hi @1234eddie 

 

That's why I wrote "less easy, more precise."

 



Rafal Gaweda
0 Likes
Message 5 of 28

1234eddie
Advocate
Advocate

@Rafal.Gaweda 

 

3 other thoughts from my side on this.

 

1- is it possibile to reach the 'section definition' module?

if it's possible by API/VBA or else i can go from there. because in my opinion a section is nothing more than just coordinates, which are quite easy to determine with corrosion. if i can create that geometry with this, i can them save it to my user databese.

 

2- How did the data of the 'standard' profiles(HEA, IPE, etc) end up in the databese stored in Robot?

i will not believe that they drawed all sections and added them to the correct family category. so did they use a script for it? is it possible that development team can react/ give an insight on this?

 

3- Is it possible to copy a standaard section from the databese?

and change the H, BF, TF, TW RA and let robot recalculate the copied section?

 

I still believe it's possible to automate the proces.

 

Thanks in advance

 

Gr Edward.

 

PS( i know that scia engineer has an option to just add corrosion to a section, so i don't understand why it's not possible in robot)

0 Likes
Message 6 of 28

Rafal.Gaweda
Autodesk Support
Autodesk Support

Hi @1234eddie 

 

Re 1 - Not possible \ not implemented

Re 2 - Data was "scanned" from the books

Re 3 - Anything from database is not calculated ; to force section properties to be calculated You have to use sections for which You can use 

CalcNonstdGeometry

otherwise You have to calculate properties by Your own 



Rafal Gaweda
0 Likes
Message 7 of 28

JacquesGaudin
Advocate
Advocate

Hi @1234eddie ,

 

Just adding my 2 cents here.

I haven't tried yet but I was wondering if you could start from one of the section in the catalogue, get the corresponding ``IRobotSectionData`` object and modify its fields describing web and flange thicknesses.

After calling ``CalcNonStdGeometry`` and in an ideal world, you would get the reduced corroded section you want.

 

To anyone at Autodesk in charge of the API documentation, the information about sections is incomplete and needs a bit of work on your side. That would be much appreciated.

0 Likes
Message 8 of 28

JacquesGaudin
Advocate
Advocate

Hi @1234eddie ,

 

I can confirm that ``CalcNonstdGeom`` doesn't update the I value when the flange thickness or any other parameter is updated.

 

You will have to update it manually. Here is a formula for the I value of an I-section with root radius about the major axis:

 

Iy = (bh³ - (b-tw)(h-2tf)³)/12 + 0.8584 r²(h/2-tf)² - 0.3834 r³(h/2-tf) + 0.4613 r⁴
0 Likes
Message 9 of 28

JacquesGaudin
Advocate
Advocate

@1234eddie Note that for the minor axis, the contribution of the root radii is small because they are close to the neutral axis. So the folllowing is a good approximation of the I value for the minor axis:

 

 

Iz = hb³/12 - (h-2tf)/8 * [(b-tw)³/6 + (b²-tw²)(b+tw)/2]

 

 

0 Likes
Message 10 of 28

1234eddie
Advocate
Advocate

@JacquesGaudin  many thanks for your answer.

 

I have been looking for this formula forever. where did you find it?

what i probably will do know is calculate the reduced section and create an I_BISYM section with the same characteristics(Iy)

 

Gr Edward.

Message 11 of 28

JacquesGaudin
Advocate
Advocate

@1234eddie 

 

I had a bit of time between project so calculated it!

 

It seems correct but please feel free to double-check. It gives me the correct values for the few HEA and UBs I've tried. It's based on the wikipedia page about second moment of area.

0 Likes
Message 12 of 28

1234eddie
Advocate
Advocate

@JacquesGaudin 

Your formula on the Iy is quite accurate for HEA,HEB, HEM and IPE range between 100.8% above tabular value to 95.5%(below). this occurs at an IPE240. 

But your formula made me think and i have a new one which is accurate. see this picture below.

centroid of radius.JPG

I made some of the radius form in autocad and asked for the mass properties. because now mather what radius you have, the centroid will always be the same related to the radius.

so the location of the centroid is approximatly 0.223367939021164 * R

 

Iy= (bh³ - (b-tw)(h-2tf)³)/12)+ 4*((((h/2)-tf)-(0.223367939021164*r))²)*(r²-(0.25*Pi*r²))

for the Iz the relation is the same.

 

Thanks everybody for your help and thoughts for this situation. if anyone want to know the code for the I_BISYM profile (API) let me know.

 

Gr Edward

Message 13 of 28

JacquesGaudin
Advocate
Advocate

@1234eddie 

 

Absolutely right, I rounded up the factors. For an exact value:

 

 

0.223367939021164 ≅ 1 - 2 / (12 - 3π)

 

Message 14 of 28

JacquesGaudin
Advocate
Advocate

@1234eddie

 

I personally  would be curious to see the code for I_BISYM and it would probably be useful to other users in the future.

As the documentation is not great on this topic, I believe posting an example would be a step forward.

 

This type of example helped me figuring a few things out in the past. If Autodesk was able to gather this information in one place that would be the icing on the cake. 

0 Likes
Message 15 of 28

1234eddie
Advocate
Advocate
Accepted solution

@JacquesGaudin 

Here it is.

I_BISYM with robot.JPG

 

This is the code of the python script. (quite similar to the start of the topic)

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

from System import Environment
user = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
clr.AddReferenceToFileAndPath(user +r"\Dynamo\Dynamo Core\1.3\packages\Structural Analysis for Dynamo\bin\RSA\Interop.RobotOM.dll")
from RobotOM import *
from System import Object


BISYM_name = IN[0]
BISYM_mat = IN[1]
BISYM_B = IN[2]
BISYM_HW = IN[3]
BISYM_TW = IN[4]
BISYM_TF = IN[5]
application = RobotApplicationClass()
project = application.Project
structure = project.Structure
labels = structure.Labels


lab_serv = IRobotLabelServer 
lab_serv = labels

sec = IRobotLabel
sec = lab_serv.create(IRobotLabelType.I_LT_BAR_SECTION, BISYM_name)

data = sec.data
data.Type = IRobotBarSectionType.I_BST_NS_I
data.ShapeType = IRobotBarSectionShapeType.I_BSST_USER_I_BISYM
nonst_data = IRobotBarSectionNonstdData
nonst_data = data.CreateNonstd(0)
nonst_data.SetValue(IRobotBarSectionNonstdDataValue.I_BSNDV_I_B, BISYM_B)
nonst_data.SetValue(IRobotBarSectionNonstdDataValue.I_BSNDV_I_H, BISYM_HW)
nonst_data.SetValue(IRobotBarSectionNonstdDataValue.I_BSNDV_I_TF, BISYM_TF)
nonst_data.SetValue(IRobotBarSectionNonstdDataValue.I_BSNDV_I_TW, BISYM_TW)
data.MaterialName = BISYM_mat

data.CalcNonstdGeometry()

lab_serv.Store(sec)

OUT = sec.name

 


@JacquesGaudin wrote:

@1234eddie

 

I personally  would be curious to see the code for I_BISYM and it would probably be useful to other users in the future.

As the documentation is not great on this topic, I believe posting an example would be a step forward.

 

This type of example helped me figuring a few things out in the past. If Autodesk was able to gather this information in one place that would be the icing on the cake. 


@Rafal.Gaweda See last message from @JacquesGaudin 

 

Gr Edward

 

file is attached.

Message 16 of 28

Rafal.Gaweda
Autodesk Support
Autodesk Support

Hi @1234eddie 

 

Example

 

Dim RLabel As RobotLabel
        
    Dim RLabelData As RobotBarSectionData
    Dim RLabelNSData As RobotBarSectionNonstdData

    Set RLabel = RobApp.Project.Structure.Labels.Create(I_LT_BAR_SECTION, "my_section")
    Set RLabelData = RLabel.Data
    
    RLabelData.Type = I_BST_NS_I
    RLabelData.ShapeType = I_BSST_USER_I_BISYM
    
    Set RLabelNSData = RLabelData.CreateNonstd(0)
    

    RLabelNSData.SetValue I_BSNDV_I_B, 0.2
    RLabelNSData.SetValue I_BSNDV_I_H, 0.4
    RLabelNSData.SetValue I_BSNDV_I_TF, 0.01
    RLabelNSData.SetValue I_BSNDV_I_TW, 0.01
    
    Set RLabelNSData = RLabelData.CreateNonstd(1)
    
    RLabelNSData.SetValue I_BSNDV_I_B, 0.2
    RLabelNSData.SetValue I_BSNDV_I_H, 1
    RLabelNSData.SetValue I_BSNDV_I_TF, 0.01
    RLabelNSData.SetValue I_BSNDV_I_TW, 0.01
    RLabelData.CalcNonstdGeometry
    
    RobApp.Project.Structure.Labels.Store RLabel


Rafal Gaweda
0 Likes
Message 17 of 28

1234eddie
Advocate
Advocate

@JacquesGaudin 

I found some more information about all the section properties avaible and not listed in the API.

See this link

and have a look at IRobotBarSectionType(page 114)

and IRobotBarSectionShapeType(page 106)

and IRobotBarSectionNonstdDataValue(page 115)

 

Hope this is usefull for you.

 

Gr Edward.

(PS: i started upgrading my I_BISYM script to a general script which will work with the index numbers and some loops to have 1 scrip for all sections)

Message 18 of 28

JacquesGaudin
Advocate
Advocate

@1234eddie 

 

Thanks, much appreciated. When I'm looking for something that is undocumented, I usually do a 

 

dir(IRobotBarSectionType)

 

to see what is actually defined in the object.

 

Also, sometimes even though the enum is missing some values, the integer constant still works!

 

@Rafal.Gaweda  If anyone is ever interested in fixing the documentation, I have a list of things to be corrected.

0 Likes
Message 19 of 28

PABLO.SANCHEzZTKJ5
Advocate
Advocate

Hi @1234eddie ,

I was reading this post, fully interesting., I really like your questions, they often coincide with many of my doubts.


I am in a similar situation and I would like to investigate a little more in it. The post is more than 3 years old, perhaps you apply a different method now:

 

  1. Of course, using the section type I_BISYM generates a section without taking into account the material of the radius, hence the decrease in different properties. But in addition, because of the slenderness calculation of the section sometimes goes from Class2 to Class3 because it does not take into account the rigidity of the radius, thus penalizing its final resistance, especially in cases of bending. Have you investigated the generation of the sections in any other more precise way?
  2. On the other hand, it seems in the type section(I_BSST_UNKNOWN) proposed by Rafal you can use a more aproximate parameters (Ix, Iy, A, ...) but again for the class section goes from Class2 to Class3. Did you test this type section by API?

Thanks in advance,

 

Pablo

 

 

0 Likes
Message 20 of 28

hi @PABLO.SANCHEzZTKJ5 

I think you will benefit from rewriting new section databases in this scenario.

This involves either duplicating an existing catalog and adjusting the values accordingly, or creating entirely new entries based on the section definitions.

Using new bases, you can take advantage of the design module and even make adjustments to common properties to match your measurement records.

This doesn't stop you from exploring the creation in a simple dialog box to create new sections instantly
It is essential to clearly label corroded profiles, such as “HEA 360_C1” for example.

Stephanekapetanovic_0-1709191039136.png

Best Regards

Stephanekapetanovic_3-1727154351059.png

Stéphane Kapetanovic

Did you find this post helpful? If it gave you one or more solutions,
don't forget to click the Accept Solution button and leave a < like !
EESignature