Concrete-rebar bondslip constraint model #100
Conversation
| } | ||
| }; | ||
|
|
||
| // Bond-slip data |
There was a problem hiding this comment.
We need doxygen comments for all descriptions of non-override methods and for all member variables. Three slash comments for the variables, long form comments for methods, including @param and @return tags.
| RebarBondSlipConstraint::computeQpOffDiagJacobian(Moose::ConstraintJacobianType /*type*/, | ||
| unsigned int /*jvar*/) | ||
| { | ||
| return 0.0; |
There was a problem hiding this comment.
It's going to be important to implement this for anything off-axis.
There was a problem hiding this comment.
By this I mean that if the bar is oriented in a direction off the Cartesian axes, this will be nonzero. You can ignore this for the first cut, but this will be very important to get right.
| void | ||
| RebarBondSlipConstraint::computeTangent() | ||
| { | ||
| _slave_tangent *= 0.0; |
There was a problem hiding this comment.
I guess that is what this accomplishes. It just looks strange. I'd replace it with an =
| } | ||
|
|
||
| _slave_tangent /= _slave_tangent.norm(); | ||
| _current_elem_volume /= elems.size(); |
There was a problem hiding this comment.
Lines 156 and 271 don't seem consistent.
There was a problem hiding this comment.
What would be a better way to get the element length/volume?
| { | ||
| case Moose::SlaveSlave: | ||
| return _phi_slave[_j][_qp] * _penalty * _test_slave[_i][_qp] * | ||
| (1.0 - _slave_tangent(_component) * _slave_tangent(_component)); |
There was a problem hiding this comment.
These are all computed assuming that there is a penalty stiffness in the axial and perpendicular directions, which isn't the case anymore with the bond slip model. You would need to apply the penalty stiffness in the perpendicular directions, but subtract that off in the axial direction and replace it with the tangent from the bond slip model. We do that kind of thing in contact in the MechanicalContactConstraint class. Same idea here. I imagine this is the main source of the convergence trouble.
There was a problem hiding this comment.
I was just thinking -- there's a newly introduced Constraint in tensor_mechanics that Swetha wrote that does something very similar to this Constraint: NodalFrictionalConstraint. It represents a frictional slider that uses a penalty constraint until it slips. I just looked at the code for the Jacobian in that class. It computes the nonlinear Jacobian, but it doesn't have any of the code I was expecting to see to deal with the directionality of the Jacobian. That's because the NodalFrictionalConstraint class is only applied to the dof in the axial direction of the beam, and it assumes that the beam is aligned in one of the Cartesian directions. Another separate Constraint (NodalStickConstraint) deals with tying it in the other two directions. Your constraint is dealing with all directions (which is probably preferable).
There was a problem hiding this comment.
The bondslip contribution towards the residual is constant. So I only considered the penalty contributions towards jacobian calculation. I believe I am using the normal direction to assign the contribution. If the truss member is inclined, only then the penalty would apply to both x- and y- directions.
95026d5 to
1a32463
Compare
1a32463 to
2bd59a4
Compare
69d0f8d to
668ec77
Compare
668ec77 to
4218191
Compare
|
This is ready for another review @bwspenc |
64be4f9 to
79b928f
Compare
c4fa81b to
a152e13
Compare
394ba89 to
de3c71b
Compare
de3c71b to
97192a8
Compare
Addresses #99
Please take a look @bwspenc