surfaces load over shell elements doubt

Forum for OpenSees users to post questions, comments, etc. on the use of the OpenSees interpreter, OpenSees.exe

Moderators: silvia, selimgunay, Moderators

Post Reply
dgale
Posts: 55
Joined: Fri Jan 15, 2016 4:01 am
Location: UPM

surfaces load over shell elements doubt

Post by dgale » Fri Jun 23, 2017 5:08 am

Hello,
I'm trying to create a surface load over shell element and although the model run well, a message appears like this:

WARNING FE_Element::setID() - numDOF and number of dof at the DOF_Groups
WARNING FE_Element::setID() - numDOF and number of dof at the DOF_Groups
WARNING FE_Element::setID() - numDOF and number of dof at the DOF_Groups
WARNING FE_Element::setID() - numDOF and number of dof at the DOF_Groups
CTestNormDispIncr::test() - iteration: 4 current Norm: 3.47948e-014 (max: 1e-010, Norm deltaR: 8.19119e-013)
CTestNormDispIncr::test() - iteration: 4 current Norm: 2.75926e-013 (max: 1e-010, Norm deltaR: 1.29025e-011)
CTestNormDispIncr::test() - iteration: 4 current Norm: 9.16501e-013 (max: 1e-010, Norm deltaR: 6.76258e-011)
CTestNormDispIncr::test() - iteration: 4 current Norm: 2.12207e-012 (max: 1e-010, Norm deltaR: 2.20695e-010)
CTestNormDispIncr::test() - iteration: 4 current Norm: 4.0165e-012 (max: 1e-010, Norm deltaR: 5.48551e-010)
CTestNormDispIncr::test() - iteration: 4 current Norm: 6.66862e-012 (max: 1e-010, Norm deltaR: 1.12929e-009)
CTestNormDispIncr::test() - iteration: 4 current Norm: 1.00805e-011 (max: 1e-010, Norm deltaR: 2.00306e-009)
CTestNormDispIncr::test() - iteration: 4 current Norm: 1.41793e-011 (max: 1e-010, Norm deltaR: 3.10926e-009)
CTestNormDispIncr::test() - iteration: 4 current Norm: 1.88159e-011 (max: 1e-010, Norm deltaR: 4.21118e-009)
CTestNormDispIncr::test() - iteration: 4 current Norm: 2.37786e-011 (max: 1e-010, Norm deltaR: 4.88465e-009)

What does mean WARNING FE_Element::setID() - numDOF and number of dof at the DOF_Groups?

------------------------------------code------------------------------------------------
wipe
model BasicBuilder -ndm 3 -ndf 6
# nodes
node 1 0.0 0.0 6.0
node 2 3.0 0.0 6.0
node 3 6.0 0.0 6.0
node 4 0.0 0.0 3.0
node 5 3.0 0.0 3.0
node 6 6.0 0.0 3.0
node 7 0.0 0.0 0.0
node 8 3.0 0.0 0.0
node 9 6.0 0.0 0.0

# boundary conditions
fixZ 0.0 1 1 1 1 1 1;

set Sp1 10001;
# Section lineal $secTag $E $nu $h $rho
section ElasticMembranePlateSection 10001 4e6 0.2 0.15 0.0001

# shell elements
element ShellMITC4 1 1 2 5 4 $Sp1
element ShellMITC4 2 2 3 6 5 $Sp1
element ShellMITC4 3 4 5 8 7 $Sp1
element ShellMITC4 4 5 6 9 8 $Sp1

# surface load elements
element SurfaceLoad 5 1 2 5 4 -0.3
element SurfaceLoad 6 2 3 6 5 -0.3
element SurfaceLoad 7 4 5 8 7 -0.3
element SurfaceLoad 8 5 6 9 8 -0.3

# OUTPUTS
set Outputs Outputs
file mkdir Outputs/SectionForce
file mkdir Outputs/Displacement
file mkdir Outputs/Acceleration
file mkdir Outputs/Reactions
file mkdir Outputs/Stress
file mkdir Outputs/Strain
file mkdir Outputs/Modes
recorder Node -file Outputs/Displacement/nodesdisp.out -time -nodeRange 1 9 -dof 1 2 3 4 5 6 disp
recorder Node -file Outputs/Reactions/reactionsR.out -time -nodeRange 9 7 -dof 2 reaction
recorder Node -file Outputs/Reactions/reactionsM.out -time -nodeRange 9 7 -dof 4 reaction

# load pattern
timeSeries Linear 1
pattern Plain 1 1 {
eleLoad -ele 5 -type -surfaceLoad
eleLoad -ele 6 -type -surfaceLoad
eleLoad -ele 7 -type -surfaceLoad
eleLoad -ele 8 -type -surfaceLoad
}

# analysis
constraints Transformation
test NormDispIncr 1e-10 50 2
algorithm Newton
numberer Plain
system SparseSPD
integrator LoadControl 0.1
analysis Static
analyze 10

exit

selimgunay
Posts: 913
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: surfaces load over shell elements doubt

Post by selimgunay » Sun Jun 25, 2017 4:36 pm

Below is the cpp code that includes this warning

const ID &theDOFid = dofPtr->getID();

for (int j=0; j<theDOFid.Size(); j++)
if (current < numDOF)
myID(current++) = theDOFid(j);
else {
opserr << "WARNING FE_Element::setID() - numDOF and";
opserr << " number of dof at the DOF_Groups\n";
return -3;
}
}

The nodes should be defined in a counter clockwise manner. Could you please check if you have the node order incorrect in any of the elements?

dgale
Posts: 55
Joined: Fri Jan 15, 2016 4:01 am
Location: UPM

Re: surfaces load over shell elements doubt

Post by dgale » Sun Jun 25, 2017 7:27 pm

I've just realized the element load is only for (-ndm 3 -ndf 3) and my model is 'model BasicBuilder -ndm 3 -ndf 6'. The idea is to put on my shell elements a load/area. Is there any way to do it?

selimgunay
Posts: 913
Joined: Mon Sep 09, 2013 8:50 pm
Location: University of California, Berkeley

Re: surfaces load over shell elements doubt

Post by selimgunay » Sun Jun 25, 2017 8:29 pm

Can you convert them to nodal loads and apply them as such?

dgale
Posts: 55
Joined: Fri Jan 15, 2016 4:01 am
Location: UPM

Re: surfaces load over shell elements doubt

Post by dgale » Sun Jun 25, 2017 11:50 pm

It could be an option, is there any procedure to do it? I mean using something already done. It seems me very weird that nobody use this kind of load because it is very used in others softwares.

dgale
Posts: 55
Joined: Fri Jan 15, 2016 4:01 am
Location: UPM

Re: surfaces load over shell elements doubt

Post by dgale » Mon Jun 26, 2017 2:40 am

Because I have 3000 shell elements, and I'd like to get something general

EricsonEncinaZ
Posts: 108
Joined: Mon Sep 16, 2013 1:14 pm
Location: University of Auckland

Re: surfaces load over shell elements doubt

Post by EricsonEncinaZ » Tue Jun 27, 2017 9:38 pm

I wrote the one below in case is useful.
It takes a list of elements $listEles, calculate the area of each one (assuming the element is rectangular), times that area by the uniform distributed load $Qi (i= x y or/and z) and apply 1/4 to each node.
My models use a reference system where X is from left to right(horizontal), Y is from bottom to top (vertical) and Z=XxY, in case it does not work in your reference system.

proc cargaEles {ListaEles Qx Qy Qz} {

if {[llength ListaEles]==0} {puts "\ncargaEles: The element list is empty. -1 returned\n"; return -1}

foreach ele $ListaEles {

set nodos [eleNodes $ele]

set N1 [lindex $nodos 0]
set N2 [lindex $nodos 1]
set N4 [lindex $nodos 3]

set dx [expr [nodeCoord $N2 1]-[nodeCoord $N1 1]]
set dz [expr [nodeCoord $N4 3]-[nodeCoord $N1 3]]

set Aele [expr abs($dx*$dz)]

foreach nodo $nodos {
load $nodo [expr $Qx*$Aele/4.] [expr $Qy*$Aele/4.] [expr $Qz*$Aele/4.] 0.0 0.0 0.0
}

}
}

Regards

dgale
Posts: 55
Joined: Fri Jan 15, 2016 4:01 am
Location: UPM

Re: surfaces load over shell elements doubt

Post by dgale » Wed Jun 28, 2017 2:40 am

Thank you very much. It was extremely useful. I did some modifications to be more general

proc cargaEles {ListaEles Qx Qy Qz} {

if {[llength ListaEles]==0} {puts "\ncargaEles: The element list is empty. -1 returned\n"; return -1}

foreach ele $ListaEles {

set nodos [eleNodes $ele]
set N2 [lindex $nodos 1]
set N4 [lindex $nodos 3]

set dx [expr [nodeCoord $N4 1]-[nodeCoord $N2 1]]
set dy [expr [nodeCoord $N4 2]-[nodeCoord $N2 2]]
set dz [expr [nodeCoord $N4 3]-[nodeCoord $N2 3]]

set Aele1 [expr abs($dy*$dz)]
set Aele2 [expr abs($dx*$dz)]
set Aele3 [expr abs($dx*$dy)]

set Aele [expr max($Aele1,$Aele2,$Aele3)]

foreach nodo $nodos {
load $nodo [expr $Qx*$Aele/4.0] [expr $Qy*$Aele/4.0] [expr $Qz*$Aele/4.0] 0.0 0.0 0.0
}
}
}

EricsonEncinaZ
Posts: 108
Joined: Mon Sep 16, 2013 1:14 pm
Location: University of Auckland

Re: surfaces load over shell elements doubt

Post by EricsonEncinaZ » Wed Jun 28, 2017 5:28 pm

Great! that extended the procedure and now it can load any element at planes XY, XZ or YZ :-D
Be careful though, as it still has the limitation that the area must be rectangular, otherwise it will over-load or sub-load the area.

Post Reply