Am trying to trace the sequence of events happening during a linear/nonlinear analysis.
In the Integrator subclasses, there is a method formEleTangent() which forms the tangent matrix after iterating all over the elements(similar method for nodes).
However all solution algorithm methods in EquisolnAlgo Subclasses whether linear, or newton raphson, are calling the parallel(and more simpler) method formTangent() while solving the current step.
So what is the basis behind choosing formTangent() over formEleTangent()? Why such two parallel ways?
After reading frank's thesis, the method formEleTangent() made more sense to me for getting the complete K*e matrix..
Someone kindly throw light...
Integrator:formEleTangent() versus formTangent method..
Moderators: silvia, selimgunay, Moderators
Re: Integrator:formEleTangent() versus formTangent method..
the formTangent() methods appear high up in the class hierarchy (i.e. IncrementalIntegrator or TransientIntegrator). These methdods contain the loops to iterate over elements and nodes. As a consequence of this method, the algorithims do not have to include code to do these loops; they only need to invoke formTangent().
The formEleTang() is called by the formTangent method. I could have just let every subclass of integrator implement the formTangent method by iterating over all ele and nodes and doing the code in the formEleTang() in the inner most loop. however why duplicate all the code in all the classes? it's not good OOP design to do so. hence the solution we have.
the concrete integrator classes implement the formEleTang as they are the ones who know what each elements contribution will be (especially true for the transient integrators). the formTangent() method appears higher up in the class hierarchy and is not implemented by all the integrators. it is this one called by the solution algorithms. The code for the algorithms is made simpler by the fact that they do not have to iterate over all the elements and nodes. Likewise the code for the many integrators is made simpler in a similar fashion.
The formEleTang() is called by the formTangent method. I could have just let every subclass of integrator implement the formTangent method by iterating over all ele and nodes and doing the code in the formEleTang() in the inner most loop. however why duplicate all the code in all the classes? it's not good OOP design to do so. hence the solution we have.
the concrete integrator classes implement the formEleTang as they are the ones who know what each elements contribution will be (especially true for the transient integrators). the formTangent() method appears higher up in the class hierarchy and is not implemented by all the integrators. it is this one called by the solution algorithms. The code for the algorithms is made simpler by the fact that they do not have to iterate over all the elements and nodes. Likewise the code for the many integrators is made simpler in a similar fashion.
Re: Integrator:formEleTangent() versus formTangent method..
Could appreciate the OOP but was exasperated finding out from where the call to getEleTang() is going through. Your explanation cleared it up.
Thanks frank!!
Thanks frank!!
-
- Posts: 1
- Joined: Tue Aug 29, 2017 11:14 pm
- Contact:
Re: Integrator:formEleTangent() versus formTangent method..
Thanks for providing useful information . I found some really interesting stuff in your blog especially this discussion. Keep up the good work.