This MR splits the TRM assembly into a "constitutive part" depending not directly on shape matrices and a "structural" part that combines the coefficients computed in the constitutive part with the shape matrices and adds them to the local Jacobian and rhs.
This MR is a first small step in a large effort to restructure the local assemblers of processes. In the end the local assemblers will be much more modular, which will allow easy customization (e.g. for special constitutive relations) without excessive code duplication.
Dear reviewers, please keep in mind that in the next 3 months almost every single line touched by this MR will change again. This MR is a snapshot of a work in progress. Some developments have been started, but not finished, yet. Since this MR comes directly from my ongoing massive restructuring work, IMHO it's unfortunately not practical to split it into smaller sub-MRs.
Some features of this MR:
- constitutive/structural split
- constitutive setting does not depend on shape matrices and is in a separate translation unit. This might be beneficial for compilation time, especially when recompiling after small, local changes in the cpp file.
- first draft of a matrix coefficient naming scheme (e.g.
K_TT_X_NTN, search for "Conventions" in the MR diff)
computeSecondaryVariableConcrete()reuses the constitutive setting. Less efficient, but avoids code duplication. This will be much more efficient in the end.
- split the local assembly into smaller parts: overall assembly, single IP assembly, mass lumping, adding to local matrices
- first step to split the constitutive setting into smaller parts, work in progress: The computed data are already put in smaller groups (e.g.
ConstitutiveSettingEqU), but their computation is still monolithic (single method
- added shortcuts for matrix block access:
- added more versatile overloads for IP data access.