Beautiful access to element degrees of freedom

  1. Feature description was added to the changelog
  2. Tests covering your feature were added?
  3. 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

Merge request reports

Loading