Integrals on subdomains
You often need to integrate only on a part of the mesh (a subset of elements) defined by markers or ranges.
Examples of ranges:
-
elements(mesh)
— whole mesh -
elements(mesh, "RegionName")
— elements marked withRegionName
(if your mesh generation set region markers) -
faces(mesh, "MarkerName")
andmarkedfaces(mesh, "MarkerName")
— face-based markers
1. Example: integral over a subregion
double energy = integrate( _range = elements(mesh, "DomainA"), _expr = 0.5*nu*trans(gradv(u))*gradv(u) ).evaluate()(0,0);
2. Example: assemble only on a subdomain
Use form1
/form2
and restrict integrals to a region:
form2( _test = Xh, _trial = Xh, _matrix = A ) +=
integrate( _range = elements(mesh, "DomainA"), _expr = trans(gradt(u))*grad(v) );
When using external mesh generators, ensure region and boundary markers are exported and preserved in the mesh file.