Good afternoon to all the OpenSees Community.
I have a doubt about J2Plasticity nDMaterial. I have running simulations using this material with shell elements and I have problems when I reach plastic behaviour. I have not this problems with others nDMaterial like DruckerPrager. I have seen the source code of J2Plasticity material and the equation of Saturation Isotropic Hardening with linear term is: q(xi) = simga_infty + (sigma_0  sigma_infty)*exp(delta*xi) + H*xi while in OpenSees documentation is q(xi) = simga_0 + (sigma_0  sigma_infty)*exp(delta*xi) + H*xi. I don't know if the problem has to do with this and there is an error in the source code of this material. Any suggestions?
Thank you very much in advance.
J2Plasticity material
Moderators: silvia, selimgunay, Moderators
Re: J2Plasticity material
Please explain the problem in more detail and provide inputs/outputs.
Was my answer helpful to you? https://www.buymeacoffee.com/mhscott
OpenSees courses: https://courses.silviasbrainery.com/
OpenSees 1on1 sessions: https://www.silviasbrainery.com/oneononetraining
OpenSees blog: www.portwooddigital.com
OpenSees courses: https://courses.silviasbrainery.com/
OpenSees 1on1 sessions: https://www.silviasbrainery.com/oneononetraining
OpenSees blog: www.portwooddigital.com

 Posts: 7
 Joined: Sun Jun 21, 2020 9:21 am
Re: J2Plasticity material
Good morning. The model is a rectangular simply suported plate in its four edges with a central load applied in positive z direction. I have done the same model with ANSYS using a von Mises yield criterium because I wanted to compare it with J2Plasticity model. I want a BiLinear material law so I have erased exponential hardening. Linear hardening parameter is E/1000. I have used LoadControl integrator despite lack of convergence at first because I wanted to compare the displacement of central node with ANSYS model. When I run the model with DruckerPrager yield criterium I obtain similar results in Linear range and the begining of plastic range it is produced at the same load, the behaviour in plastic range is a little bit different but I think this is due to the differences between druckerprager and von mises yield criteria.
Image comparing results: https://ibb.co/X7KxFbn
When I run the model with J2Plasticity material model I get results that are not consistent. It is like it doesnt reach plastic range and behaves like a linear material model. I don't know if this could happen due to the discrepancies between the equations in OpenSees documentation
(q(xi) = simga_0 + (sigma_0  sigma_infty)*exp(delta*xi) + H*xi) and the one of the source code of J2Plasticity nDMaterial (q(xi) = simga_infty + (sigma_0  sigma_infty)*exp(delta*xi) + H*xi).
Thank you very much in advance. Kind Regards.
# 
# Start of model generation
# 
# Remove existing model
wipe
# Create ModelBuilder (with threedimensions and 6 DOF/node)
model BasicBuilder ndm 3 ndf 6
# 
# Units&Constants.tcl
# define basic units
# Define parameters
# Plate dimensions (240mm; 200mm; 10mm)
set width 0.2
set h 0.24
set th 0.01
# Element size
set minmesh 0.01
# Nodes and Elements plate
set nx [expr {int([expr {round($width/$minmesh)}])}]
set ny [expr {int([expr {round($h/$minmesh)}])}]
# Steel S275: Young Modulus E=210000 MPa; Linear hardening H=E/1000; Shear modulus G=81000 MPa; Bulk modulus K; Yield strength fy=275 MPa; Ultimate strength fu=430 MPa
set E 210000000000
set H [expr $E/1000]
set G 81000000000
set v 0.3
set K [expr $E*$G/(3*(3*$G$E))]
set fy 275000000
set fu 430000000
# Element ShellMITC4
set Plate ShellMITC4
# 
# Create the material
# 
# J2plasticity Bilinear material
#nDMaterial J2Plasticity 1 $K $G $fy $fu 0 $H
# DruckerPrager Bilinear material
nDMaterial DruckerPrager 1 $K $G $fy 0.0 0.0 0.0 0.0 0.0 0.0 $H 1.0 7850
nDMaterial PlateFiber 2 1
# Plate section
section PlateFiber 1 2 $th
set platesection "1"
# 
# Define elements
# 
block2D $nx $ny 1 1 $Plate $platesection {
1 0 0 0
2 0.2 0 0
3 0.2 0.240 0
4 0 0.240 0
}
# 
# Define Boundary conditions
# 
# Four edges simply supported Uz=0
for {set i 1} {$i <= [expr ($nx1)]} {incr i 1} {
fix [expr int(($nx+1)*($ny+1)$i)] 0 0 1 0 0 0
fix [expr int(($nx+1)$i)] 0 0 1 0 0 0
}
for {set i 1} {$i <= [expr ($ny1)]} {incr i 1} {
fix [expr int(($nx+1)*(($ny$i)+1)$nx)] 0 0 1 0 0 0
fix [expr int(($nx+1)*(($ny$i)+1))] 0 0 1 0 0 0
}
# Rigid body conditions four corners supported (Ux=Uy=Uz=0)
fix 1 1 1 1 0 0 0
fix [expr $nx+1] 1 1 1 0 0 0
fix [expr ($nx+1)*($ny+1)] 1 1 1 0 0 0
fix [expr ($nx+1)*($ny+1)$nx] 1 1 1 0 0 0
# 
# Define loads
# 
timeSeries Linear 1
# Applied a punctual central load in positive Z direction
pattern Plain 1 1 {
load [expr (($nx+1)*($ny+1)+1)/2] 0 0 40000 0 0 0
}
# 
# Start of recorder generation
# 
# Displacement central node
recorder Node file dz.out time node [expr (($nx+1)*($ny+1)+1)/2] dof 3 disp
# 
# Analysis
# 
constraints Plain
numberer RCM
system BandGeneral
test EnergyIncr 1E6 10 0
algorithm Newton
set s 1
integrator LoadControl $s
#integrator ArcLength $s 1.0
analysis Static
set num_analysis 1
set ok [analyze $num_analysis]
if {$ok == 0} {
puts "Analysis done at First iteration"
} else {
while {$ok != 0} {
reset
set s [expr $s*0.5]
set num_analysis [expr $num_analysis*2]
integrator LoadControl $s
# integrator ArcLength $s 1.0
analysis Static
set ok [analyze $num_analysis]
}
}
# 
# Print
# 
print node [expr (($nx+1)*($ny+1)+1)/2]
Image comparing results: https://ibb.co/X7KxFbn
When I run the model with J2Plasticity material model I get results that are not consistent. It is like it doesnt reach plastic range and behaves like a linear material model. I don't know if this could happen due to the discrepancies between the equations in OpenSees documentation
(q(xi) = simga_0 + (sigma_0  sigma_infty)*exp(delta*xi) + H*xi) and the one of the source code of J2Plasticity nDMaterial (q(xi) = simga_infty + (sigma_0  sigma_infty)*exp(delta*xi) + H*xi).
Thank you very much in advance. Kind Regards.
# 
# Start of model generation
# 
# Remove existing model
wipe
# Create ModelBuilder (with threedimensions and 6 DOF/node)
model BasicBuilder ndm 3 ndf 6
# 
# Units&Constants.tcl
# define basic units
# Define parameters
# Plate dimensions (240mm; 200mm; 10mm)
set width 0.2
set h 0.24
set th 0.01
# Element size
set minmesh 0.01
# Nodes and Elements plate
set nx [expr {int([expr {round($width/$minmesh)}])}]
set ny [expr {int([expr {round($h/$minmesh)}])}]
# Steel S275: Young Modulus E=210000 MPa; Linear hardening H=E/1000; Shear modulus G=81000 MPa; Bulk modulus K; Yield strength fy=275 MPa; Ultimate strength fu=430 MPa
set E 210000000000
set H [expr $E/1000]
set G 81000000000
set v 0.3
set K [expr $E*$G/(3*(3*$G$E))]
set fy 275000000
set fu 430000000
# Element ShellMITC4
set Plate ShellMITC4
# 
# Create the material
# 
# J2plasticity Bilinear material
#nDMaterial J2Plasticity 1 $K $G $fy $fu 0 $H
# DruckerPrager Bilinear material
nDMaterial DruckerPrager 1 $K $G $fy 0.0 0.0 0.0 0.0 0.0 0.0 $H 1.0 7850
nDMaterial PlateFiber 2 1
# Plate section
section PlateFiber 1 2 $th
set platesection "1"
# 
# Define elements
# 
block2D $nx $ny 1 1 $Plate $platesection {
1 0 0 0
2 0.2 0 0
3 0.2 0.240 0
4 0 0.240 0
}
# 
# Define Boundary conditions
# 
# Four edges simply supported Uz=0
for {set i 1} {$i <= [expr ($nx1)]} {incr i 1} {
fix [expr int(($nx+1)*($ny+1)$i)] 0 0 1 0 0 0
fix [expr int(($nx+1)$i)] 0 0 1 0 0 0
}
for {set i 1} {$i <= [expr ($ny1)]} {incr i 1} {
fix [expr int(($nx+1)*(($ny$i)+1)$nx)] 0 0 1 0 0 0
fix [expr int(($nx+1)*(($ny$i)+1))] 0 0 1 0 0 0
}
# Rigid body conditions four corners supported (Ux=Uy=Uz=0)
fix 1 1 1 1 0 0 0
fix [expr $nx+1] 1 1 1 0 0 0
fix [expr ($nx+1)*($ny+1)] 1 1 1 0 0 0
fix [expr ($nx+1)*($ny+1)$nx] 1 1 1 0 0 0
# 
# Define loads
# 
timeSeries Linear 1
# Applied a punctual central load in positive Z direction
pattern Plain 1 1 {
load [expr (($nx+1)*($ny+1)+1)/2] 0 0 40000 0 0 0
}
# 
# Start of recorder generation
# 
# Displacement central node
recorder Node file dz.out time node [expr (($nx+1)*($ny+1)+1)/2] dof 3 disp
# 
# Analysis
# 
constraints Plain
numberer RCM
system BandGeneral
test EnergyIncr 1E6 10 0
algorithm Newton
set s 1
integrator LoadControl $s
#integrator ArcLength $s 1.0
analysis Static
set num_analysis 1
set ok [analyze $num_analysis]
if {$ok == 0} {
puts "Analysis done at First iteration"
} else {
while {$ok != 0} {
reset
set s [expr $s*0.5]
set num_analysis [expr $num_analysis*2]
integrator LoadControl $s
# integrator ArcLength $s 1.0
analysis Static
set ok [analyze $num_analysis]
}
}
# 
# 
print node [expr (($nx+1)*($ny+1)+1)/2]