Beautiful access to element degrees of freedom
-
Feature description was added to the changelog -
Tests covering your feature were added? -
Any new feature or behavior change was documented?
2 lines of code say more than a thousand words...
auto const [x1, x2, x3] =
NumLib::localDOF<N1, NumLib::Vectorial<N2, 2>, N3>(x);
Thank you, @endJunction, your ideas and work simplified and improved the implementation considerably.
Issues
- seems not fully compatible with our current approach to staggered coupling
Future work
Similar things could be done for local matrix and vector initialization and block access therein.
auto local_Jac = MathLib::createZeroedMatrix<
typename ShapeMatricesTypeDisplacement::template MatrixType<
temperature_size + displacement_size + pressure_size,
temperature_size + displacement_size + pressure_size>>(
local_Jac_data, displacement_size + pressure_size + temperature_size,
displacement_size + pressure_size + temperature_size);
auto local_rhs = MathLib::createZeroedVector<
typename ShapeMatricesTypeDisplacement::template VectorType<
displacement_size + pressure_size + temperature_size>>(
local_rhs_data, displacement_size + pressure_size + temperature_size);
typename ShapeMatricesTypePressure::NodalMatrixType MTT;
MTT.setZero(temperature_size, temperature_size);
...
local_Jac
.template block<displacement_size, displacement_size>(
displacement_index, displacement_index)
.noalias() += B.transpose() * C * B * w;
How about the following instead?
auto local_Jac = localMatrix(N_T, N_p, N_u);
auto MTT = localMatrix(N_T);
block(localJac, "u"_b, "u"_b).noalias() += B.transpose() * C * B * w;
Edited by Christoph Lehmann