Research Article
Finite Element Assembly Using an Embedded Domain Specific Language
Listing 16
Pressure Poisson problem for Chorin’s method.
( // The pressure field, using the default first order shape function | () FieldVariable<1, ScalarField> p("Pressure", pressure_lss->solution_tag()); | () // The linear system manager | () Handle<LSSActionUnsteady> pressure_lss = create_component<LSSActionUnsteady>("PressureLSS"); | () // The assembly action | () Handle<ProtoAction> pressure_mat_assembly = | () pressure_lss->create_component<ProtoAction>("MatrixAssembly"); | () pressure_mat_assembly->set_expression(elements_expression(LagrangeP1(), | () group | () ( | () _A(p) = _0, | () element_quadrature(_A(p) += transpose(nabla(p))*nabla(p)), | () pressure_lss->system_matrix += _A | () ))); | () | () Handle<ProtoAction> pressure_rhs_assembly = | () pressure_lss->create_component<ProtoAction>("RHSAssembly"); | () pressure_rhs_assembly->set_expression(elements_expression(LagrangeP1P2(), | () group | () ( | () _a[p] = _0, | () element_quadrature(_a[p] += transpose(N(p))*divergence(u)), | () pressure_lss->system_rhs += −lit(pressure_lss->invdt())*_a | () ))); |
|