Research Article

Finite Element Assembly Using an Embedded Domain Specific Language

Listing 17

The code for the correction step in Chorin’s method.
) Handle<LSSActionUnsteady> correction_lss = create_component<LSSActionUnsteady>("
     CorrectionLSS");
()
() Handle<ProtoAction> correction_matrix_assembly = correction_lss->create_component<
    ProtoAction>("MatrixAssembly");
() correction_matrix_assembly->set_expression(elements_expression(LagrangeP1P2(),
() group
() (
()  _A(u) = _0,
()  element_quadrature(_A(u[_i], u[_i]) += transpose(N(u))*N(u)),
()  correction_lss->system_matrix += _A
() )));
()
() Handle<ProtoAction> correction_rhs_assembly = correction_lss->create_component<ProtoAction>(
     "RHSAssembly");
() correction_rhs_assembly->set_expression(elements_expression(LagrangeP1P2(),
() group
() (
()  _a[u] = _0,
()  element_quadrature(_a[u[_i]] +=
()   transpose(N(u))*(u[_i] lit(correction_lss->dt()) * gradient(p)[_i])),
()  correction_lss->system_rhs += _a
() )));