surfaces load over shell elements doubt
Moderators: silvia, selimgunay, Moderators
surfaces load over shell elements doubt
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
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
-
- Posts: 913
- Joined: Mon Sep 09, 2013 8:50 pm
- Location: University of California, Berkeley
Re: surfaces load over shell elements doubt
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?
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?
Re: surfaces load over shell elements doubt
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?
-
- Posts: 913
- Joined: Mon Sep 09, 2013 8:50 pm
- Location: University of California, Berkeley
Re: surfaces load over shell elements doubt
Can you convert them to nodal loads and apply them as such?
Re: surfaces load over shell elements doubt
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.
Re: surfaces load over shell elements doubt
Because I have 3000 shell elements, and I'd like to get something general
-
- Posts: 108
- Joined: Mon Sep 16, 2013 1:14 pm
- Location: University of Auckland
Re: surfaces load over shell elements doubt
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
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
Re: surfaces load over shell elements doubt
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
}
}
}
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
}
}
}
-
- Posts: 108
- Joined: Mon Sep 16, 2013 1:14 pm
- Location: University of Auckland
Re: surfaces load over shell elements doubt
Great! that extended the procedure and now it can load any element at planes XY, XZ or YZ
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.
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.