Hello all,

First of all, congratulations on this project. I’m trying to do a small 
check model of a curved beam. I’d like to use ChBuilderBeamIGA() from 
python, but it throws an error.

"""

sys = chrono.ChSystemSMC()
mesh = fea.ChMesh()
mesh.SetAutomaticGravity(True,2)
sys.Add(mesh)
sys.Set_G_acc(chrono.ChVectorD(0,-9.81, 0))

beam_ro = 0.050
beam_ri = 0.045
CH_C_PI = 3.1456

minertia = fea.ChInertiaCosseratSimple()
minertia.SetDensity(7800)
minertia.SetArea(CH_C_PI * (pow(beam_ro, 2)- pow(beam_ri, 2)))
minertia.SetIyy( (CH_C_PI / 4.0) * (pow(beam_ro, 4) - pow(beam_ri, 4)) )
minertia.SetIzz( (CH_C_PI / 4.0) * (pow(beam_ro, 4) - pow(beam_ri, 4)) )
    
melasticity = fea.ChElasticityCosseratSimple()
melasticity.SetYoungModulus(210e9)
melasticity.SetGwithPoissonRatio(0.3)
melasticity.SetIyy( (CH_C_PI / 4.0) * (pow(beam_ro, 4) - pow(beam_ri, 4)) )
melasticity.SetIzz( (CH_C_PI / 4.0) * (pow(beam_ro, 4) - pow(beam_ri, 4)) )
melasticity.SetJ  ( (CH_C_PI / 2.0) * (pow(beam_ro, 4) - pow(beam_ri, 4)) )

msection = fea.ChBeamSectionCosserat(minertia, melasticity)

msection.SetCircular(True)
msection.SetDrawCircularRadius(beam_ro)

gen_cpoints = np.genfromtxt("./Control Points.csv", delimiter=',')
points = []
for _p in gen_cpoints:
    points.append(chrono.ChVectorD(*_p))
pos = chrono.ChVectorD(0, 0.0, 0.0)
splinepoints = chrono.vector_ChVectorD(points)
mspline = chrono.ChLineBspline(3, splinepoints)

builder = fea.ChBuilderBeamIGA()
beam = builder.BuildBeam(mesh, msection, mspline, chrono.VECT_X)

"""

This code gives a type error:

"""

TypeError: Wrong number or type of arguments for overloaded function 
'ChBuilderBeamIGA_BuildBeam'.
  Possible C/C++ prototypes are:
    chrono::fea::ChBuilderBeamIGA::BuildBeam(std::shared_ptr< 
chrono::fea::ChMesh >,std::shared_ptr< chrono::fea::ChBeamSectionCosserat 
>,int const,chrono::ChVector< > const,chrono::ChVector< > 
const,chrono::ChVector< > const,int const)
    chrono::fea::ChBuilderBeamIGA::BuildBeam(std::shared_ptr< 
chrono::fea::ChMesh >,std::shared_ptr< chrono::fea::ChBeamSectionCosserat 
>,int const,chrono::ChVector< > const,chrono::ChVector< > 
const,chrono::ChVector< > const)
    chrono::fea::ChBuilderBeamIGA::BuildBeam(std::shared_ptr< 
chrono::fea::ChMesh >,std::shared_ptr< chrono::fea::ChBeamSectionCosserat 
>,geometry::ChLineBspline &,chrono::ChVector< > const)

"""

I may be missing something, but if I do print(type(mesh), type(msection), 
type(mspline)) I get:

<class 'pychrono.fea.ChMesh'> <class 'pychrono.fea.ChBeamSectionCosserat'> 
<class 'pychrono.core.ChLineBspline'>

The call looks correct to me. I've been looking into the code and with my 
very limited knowledge of swig it seems like this particular function is 
exported to python.
I have also tried two other approaches, first I tried to reproduce the 
process in BuilderBeamIGA in python, but it came a point 
(elem.SetNodesGenericOrder) where I needed to pass a std::vector< 
double,std::allocator< double > >. I thought this should work with a list 
of doubles but it does not.
I also tried using BuilderBeamIGA call with start point and end point. My 
idea (kind of a hack really) was to move afterward the nodes into position 
(the beam is curved). I’m not finding an easy way to do that from pyhton.
Am I trying to do something impossible from python?
Thank you for your time.

-- 
You received this message because you are subscribed to the Google Groups 
"ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/projectchrono/5ee0329f-fda0-4087-9454-fbfc8ef19707n%40googlegroups.com.

Reply via email to