An interface for simultaneous computation of a bilinear and linear form
Assembling lhs and rhs forms simultaneously can give a 20% speedup in assembly inside a newton loop for expensive nonlinear equations. The ufc side of this may be simple to do:
- No change is needed in the tabulate_tensor interface, we simply allow packing both element matrix and element vector in the same local dense matrix A. For compatibility with global tensor insertion, each tensor must be contiguous in memory so the layout is obvious.
- The easiest will be to assume all integrals in a form behave the same way (filling A=[Alhs,Arhs]), and thus the only place we need to modify is ufc::form properties, where rank() is no longer an integer. One way is to keep rank() but let it throw an exception when undefined, and add a
bool ufc::form:
or some better name to specify when a form is a combined lhs-rhs form (or something more generic if that has any use cases).
The actual work needed for this feature are
- Joint ufl preprocessing of lhs and rhs
- Generation of joint code in ffc
- Some minor edits in dolfin:
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Undefined
- Drafter:
- None
- Direction:
- Needs approval
- Assignee:
- None
- Definition:
- New
- Series goal:
- None
- Implementation:
- Unknown
- Milestone target:
- None
- Started by
- Completed by