Why does the multiple point penalty not return a redisual like the single point penalty does?
It seems to cause problems when I use the NormUnbalance test, like in the script below.
wipe
model BasicBuilder -ndm 1 -ndf 1
node 1 0.0
node 2 1.0
node 3 2.0
fix 1 1
uniaxialMaterial Elastic 1 1000
element truss 1 1 2 1.0 1
element truss 2 2 3 1.0 1
pattern Plain 1 Linear {
load 3 1
}
equalDOF 3 2 1
#rigidLink bar 2 3
system FullGeneral
constraints Penalty 1.0e12 1.0e12
#constraints Transformation
integrator LoadControl 1.0
test NormUnbalance 1.0e-6 10 4
#test NormDispIncr 1.0e-6 10 4
algorithm Newton
numberer Plain
analysis Static
set ok [analyze 1]
if {$ok == 0} {
puts "node 1 [nodeDisp 1 1]"
puts "node 2 [nodeDisp 3 1]"
puts "node 3 [nodeDisp 3 1]"
}
Which gave me these results where it seems like the force in the penalty constraint element is not included when forming the residual.
CTestNormUnbalance::test() - iteration: 1 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 0.00141421, Norm deltaR: 1.41421
deltaX: 1e-012 0.001 0.001
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 2 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 3.60555e-012, Norm deltaR: 1.41421
deltaX: 2e-021 2e-012 3e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 3 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -2.52819e-029 -2.52819e-020 1e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 4 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -2.42819e-029 -2.42819e-020 1e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 5 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -2.32819e-029 -2.32819e-020 1e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 6 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -2.22819e-029 -2.22819e-020 1e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 7 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -2.12819e-029 -2.12819e-020 1e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 8 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -2.02819e-029 -2.02819e-020 1e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 9 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -1.92819e-029 -1.92819e-020 1e-012
deltaR: 0 -1 1
CTestNormUnbalance::test() - iteration: 10 current Norm: 1.41421 (max: 1e-006)
Norm deltaX: 1e-012, Norm deltaR: 1.41421
deltaX: -1.82819e-029 -1.82819e-020 1e-012
deltaR: 0 -1 1
WARNING: CTestNormUnbalance::test() - failed to converge
after: 10 iterations
NewtnRaphson::solveCurrentStep() -the ConvergenceTest object failed in test()
StaticAnalysis::analyze() - the Algorithm failed at iteration: 0 with domain at load factor 1
OpenSees > analyze failed, returned: -3 error flag
Any help would be appreciated, thanks
Mark Denavit
PenaltyMP_FE::getResidual
Moderators: silvia, selimgunay, Moderators
the reason is that the constraint equation
for the case of all OpenSees MP constraints has Q = 0.
the equi equation (see Cook, Melkus & Plesha for example)
for our case becomes:
there is 0 added to the RHS.
b.t.w. you cannot use NormUnbalance when using the Penalty method. it is emphasised in the manual.
Code: Select all
CD=Q
the equi equation (see Cook, Melkus & Plesha for example)
Code: Select all
[K + alpha C^C]U = [R + alpha C^Q]
Code: Select all
[K + alpha C^C]U = [R]
b.t.w. you cannot use NormUnbalance when using the Penalty method. it is emphasised in the manual.