Parallel analysis: wrong results?
Posted: Sun Feb 26, 2012 2:15 pm
Dr. McKenna,
I ran the SAME model with OpenSees.exe and OpenSeesMP.exe and I got very different results, I cannot understand why. The only difference is that the file for OpenseesMP has:
system Mumps
numberer ParallelPlain
and the one for opensees.exe has:
system BandGeneral
numberer RCM
The model is built with quad elements, the parallel one is for 13 cores. I get the displacement of the top node:
openseesMP: node 1663 at the end of analysis, dof 2, -2.98228e-005
opensees: node 1663 at the end of analysis, dof 2, -0.0119858
During execution, no errors or warnings appear.
Can you help? I think the model is correct, why results are so different?
Finally, I attach the code for the parallel model. I used files named nNN and eNN containing nodes and elements respectively in every domain.
set pid [getPID]
set np [getNP]
model BasicBuilder -ndm 2 -ndf 2
# Material "muratura": matTag E v rho
nDMaterial ElasticIsotropic 2 +1.900000E+006 +4.900000E-001 +7.345000E-007
# Section "sezione": secTag E Fy H_iso H_kin
section Bidirectional 2 +1.900000E+006 6300 +5.000000E-002 +5.000000E-002
# TimeSeries "LinearDefault": tsTag cFactor
timeSeries Linear 1 -factor 1
# Node tag xCrd yCrd
if {$pid == 0} {
source n01
source e01
# vincoli
fix 1 1 1
fix 2 1 1
fix 3 1 1
fix 4 1 1
fix 5 1 1
fix 6 1 1
fix 7 1 1
fix 8 1 1
fix 9 1 1
} elseif {$pid == 1} {
source n02
source e02
#vincoli
fix 10 1 1
fix 11 1 1
fix 12 1 1
fix 13 1 1
fix 14 1 1
fix 15 1 1
fix 16 1 1
fix 17 1 1
fix 18 1 1
} elseif {$pid == 2} {
source n03
source e03
# vincoli
fix 18 1 1 # fix twice in domains?
fix 19 1 1
fix 20 1 1
fix 21 1 1
fix 22 1 1
fix 23 1 1
fix 24 1 1
fix 25 1 1
fix 26 1 1
} elseif {$pid == 3} {
source n04
source e04
# vincoli
fix 27 1 1
fix 28 1 1
fix 29 1 1
fix 30 1 1
fix 31 1 1
fix 32 1 1
fix 33 1 1
fix 34 1 1
fix 35 1 1
} elseif {$pid == 4} {
source n05
source e05
} elseif {$pid == 5} {
source n06
source e06
} elseif {$pid == 6} {
source n07
source e07
} elseif {$pid == 7} {
source n08
source e08
} elseif {$pid == 8} {
source n09
source e09
} elseif {$pid == 9} {
source n10
source e10
} elseif {$pid == 10} {
source n11
source e11
# carico
pattern Plain 1 1 {
# Load nodeTag LoadValues
load 1639 0 -10
load 1640 0 -10
load 1641 0 -10
load 1642 0 -10
load 1643 0 -10
load 1644 0 -10
load 1645 0 -10
load 1646 0 -10
load 1647 0 -10
load 1648 0 -10
load 1649 0 -10
load 1650 0 -10
load 1651 0 -10
load 1652 0 -10
load 1653 0 -10
load 1654 0 -10
load 1655 0 -5 # half load in domain?
}
} elseif {$pid == 11} {
source n12
source e12
# carico
pattern Plain 1 1 {
# Load nodeTag LoadValues
load 1655 0 -5 # half load in domain?
load 1656 0 -10
load 1657 0 -10
load 1658 0 -10
load 1659 0 -10
load 1660 0 -10
load 1661 0 -10
load 1662 0 -10
load 1663 0 -10
load 1664 0 -10
load 1665 0 -10
load 1666 0 -10
load 1667 0 -10
load 1668 0 -10
load 1669 0 -10
load 1670 0 -10
load 1671 0 -5
}
} elseif {$pid == 12} {
source n13
source e13
# carico
pattern Plain 1 1 {
# Load nodeTag LoadValues
load 1671 0 -5
load 1672 0 -10
load 1673 0 -10
load 1674 0 -10
load 1675 0 -10
load 1676 0 -10
load 1677 0 -10
load 1678 0 -10
load 1679 0 -10
load 1680 0 -10
load 1681 0 -10
load 1682 0 -10
load 1683 0 -10
load 1684 0 -10
load 1685 0 -10
load 1686 0 -10
load 1687 0 -10
}
}
# SPC tag Dx Dy
# Start of anaysis generation
# ===========================
# Get Initial Stiffness
# ---------------------
initialize
# Node Recorder "DefoShape": fileName <nodeTag> dof respType
#recorder Node -file StaticDefaultCase_Node_DefoShape_Dsp.$pid.out -time -nodeRange 1 1687 -dof 1 2 disp
#recorder Node -file StaticDefaultCase_Node_DefoShape_RFrc.$pid.out -time -nodeRange 1 35 -dof 1 2 reaction
#recorder Node -file StaticDefaultCase_Node_DefoShape_UFrc.$pid.out -time -nodeRange 1 1687 -dof 1 2 unbalance
if {$pid == 11} {
recorder Node -file nodo1663.$pid.out -time -node 1663 -dof 2 disp
}
# AnalysisOptn "StaticDefault": Type: Static
# ------------------------------------------
system Mumps
numberer ParallelPlain
# Constraint Handler
constraints Plain
# Convergence Test
test NormDispIncr 1.E-012 25 0 2
# Integrator
# integrator LoadControl $dLambda1 <$Jd $minLambda $maxLambda>
integrator LoadControl 1
# 1 0.1 0.1
# Solution Algorithm
algorithm Newton
# Analysis Type
analysis Static
# numeroIncr increment (minStep maxStep numIter)
analyze 10
#0.01
# Clean up
# --------
wipe
exit
I ran the SAME model with OpenSees.exe and OpenSeesMP.exe and I got very different results, I cannot understand why. The only difference is that the file for OpenseesMP has:
system Mumps
numberer ParallelPlain
and the one for opensees.exe has:
system BandGeneral
numberer RCM
The model is built with quad elements, the parallel one is for 13 cores. I get the displacement of the top node:
openseesMP: node 1663 at the end of analysis, dof 2, -2.98228e-005
opensees: node 1663 at the end of analysis, dof 2, -0.0119858
During execution, no errors or warnings appear.
Can you help? I think the model is correct, why results are so different?
Finally, I attach the code for the parallel model. I used files named nNN and eNN containing nodes and elements respectively in every domain.
set pid [getPID]
set np [getNP]
model BasicBuilder -ndm 2 -ndf 2
# Material "muratura": matTag E v rho
nDMaterial ElasticIsotropic 2 +1.900000E+006 +4.900000E-001 +7.345000E-007
# Section "sezione": secTag E Fy H_iso H_kin
section Bidirectional 2 +1.900000E+006 6300 +5.000000E-002 +5.000000E-002
# TimeSeries "LinearDefault": tsTag cFactor
timeSeries Linear 1 -factor 1
# Node tag xCrd yCrd
if {$pid == 0} {
source n01
source e01
# vincoli
fix 1 1 1
fix 2 1 1
fix 3 1 1
fix 4 1 1
fix 5 1 1
fix 6 1 1
fix 7 1 1
fix 8 1 1
fix 9 1 1
} elseif {$pid == 1} {
source n02
source e02
#vincoli
fix 10 1 1
fix 11 1 1
fix 12 1 1
fix 13 1 1
fix 14 1 1
fix 15 1 1
fix 16 1 1
fix 17 1 1
fix 18 1 1
} elseif {$pid == 2} {
source n03
source e03
# vincoli
fix 18 1 1 # fix twice in domains?
fix 19 1 1
fix 20 1 1
fix 21 1 1
fix 22 1 1
fix 23 1 1
fix 24 1 1
fix 25 1 1
fix 26 1 1
} elseif {$pid == 3} {
source n04
source e04
# vincoli
fix 27 1 1
fix 28 1 1
fix 29 1 1
fix 30 1 1
fix 31 1 1
fix 32 1 1
fix 33 1 1
fix 34 1 1
fix 35 1 1
} elseif {$pid == 4} {
source n05
source e05
} elseif {$pid == 5} {
source n06
source e06
} elseif {$pid == 6} {
source n07
source e07
} elseif {$pid == 7} {
source n08
source e08
} elseif {$pid == 8} {
source n09
source e09
} elseif {$pid == 9} {
source n10
source e10
} elseif {$pid == 10} {
source n11
source e11
# carico
pattern Plain 1 1 {
# Load nodeTag LoadValues
load 1639 0 -10
load 1640 0 -10
load 1641 0 -10
load 1642 0 -10
load 1643 0 -10
load 1644 0 -10
load 1645 0 -10
load 1646 0 -10
load 1647 0 -10
load 1648 0 -10
load 1649 0 -10
load 1650 0 -10
load 1651 0 -10
load 1652 0 -10
load 1653 0 -10
load 1654 0 -10
load 1655 0 -5 # half load in domain?
}
} elseif {$pid == 11} {
source n12
source e12
# carico
pattern Plain 1 1 {
# Load nodeTag LoadValues
load 1655 0 -5 # half load in domain?
load 1656 0 -10
load 1657 0 -10
load 1658 0 -10
load 1659 0 -10
load 1660 0 -10
load 1661 0 -10
load 1662 0 -10
load 1663 0 -10
load 1664 0 -10
load 1665 0 -10
load 1666 0 -10
load 1667 0 -10
load 1668 0 -10
load 1669 0 -10
load 1670 0 -10
load 1671 0 -5
}
} elseif {$pid == 12} {
source n13
source e13
# carico
pattern Plain 1 1 {
# Load nodeTag LoadValues
load 1671 0 -5
load 1672 0 -10
load 1673 0 -10
load 1674 0 -10
load 1675 0 -10
load 1676 0 -10
load 1677 0 -10
load 1678 0 -10
load 1679 0 -10
load 1680 0 -10
load 1681 0 -10
load 1682 0 -10
load 1683 0 -10
load 1684 0 -10
load 1685 0 -10
load 1686 0 -10
load 1687 0 -10
}
}
# SPC tag Dx Dy
# Start of anaysis generation
# ===========================
# Get Initial Stiffness
# ---------------------
initialize
# Node Recorder "DefoShape": fileName <nodeTag> dof respType
#recorder Node -file StaticDefaultCase_Node_DefoShape_Dsp.$pid.out -time -nodeRange 1 1687 -dof 1 2 disp
#recorder Node -file StaticDefaultCase_Node_DefoShape_RFrc.$pid.out -time -nodeRange 1 35 -dof 1 2 reaction
#recorder Node -file StaticDefaultCase_Node_DefoShape_UFrc.$pid.out -time -nodeRange 1 1687 -dof 1 2 unbalance
if {$pid == 11} {
recorder Node -file nodo1663.$pid.out -time -node 1663 -dof 2 disp
}
# AnalysisOptn "StaticDefault": Type: Static
# ------------------------------------------
system Mumps
numberer ParallelPlain
# Constraint Handler
constraints Plain
# Convergence Test
test NormDispIncr 1.E-012 25 0 2
# Integrator
# integrator LoadControl $dLambda1 <$Jd $minLambda $maxLambda>
integrator LoadControl 1
# 1 0.1 0.1
# Solution Algorithm
algorithm Newton
# Analysis Type
analysis Static
# numeroIncr increment (minStep maxStep numIter)
analyze 10
#0.01
# Clean up
# --------
wipe
exit