Source code for simudo.mesh.construction_helper_example
from __future__ import absolute_import, division, print_function
from builtins import bytes, dict, int, range, str, super
import numpy as np
import dolfin
try:
    import mshr
except ImportError:
    mshr = None
from . import mesh_entity_predicate as mep
from .construction_helper import ConstructionHelperMshr, LinearTransform
[docs]class Bob(ConstructionHelperMshr):
[docs]    def user_define_mshr_regions(self):
        '''must return `{region_name: mshr_domain}`
        `regions['domain']` is overall domain'''
        def r(x0, y0, x1, y1):
            return mshr.Rectangle(dolfin.Point(x0, y0), dolfin.Point(x1, y1))
        A = r(0, 0, 10, 10)
        B = r(0, 0, 1, 1)
        C = r(1, 1, 2, 2)
        D = r(3, 3, 5, 5)
        E = r(4, 4, 7, 7)
        F = r(2, 3.5, 10.7, 4.5)
        domain = A + F
        keys = 'ABCDEF'
        _locals = locals()
        d = {k:_locals[k] for k in keys}
        d['domain'] = domain
        return d 
[docs]    def user_refinement(self):
        R = self.cell_regions
        pred1 = mep.MaxEdgeLengthCellPredicate(0.2, dim=self.dim)
        self.refine_subdomains((R['F'] - R['A']), pred1)
        pred2 = mep.DirectionalEdgeLengthPredicate(
            np.array([1.0, 0.0, 0.0]), 0.06)
        trans = LinearTransform([1.0, 0.2])
        trans.transform(self.mesh)
        self.refine_subdomains((R['D'] - (R['F'] | R['E'])), pred2)
        trans.untransform(self.mesh)  
[docs]def main():
    dolfin.parameters["refinement_algorithm"] = 'plaza_with_parent_facets'
    h = Bob()
    h.run()
    h.save("out/poop")
    ro = h.robjs
    for k, v in h.facet_regions.items():
        dolfin.plot(h.debug_fvs_to_mf(v, signed=False))
    dolfin.plot(ro['cf'])
    dolfin.plot(h.debug_cvs_to_mf(h.cell_regions['Z']))
    dolfin.interactive() 
if __name__ == '__main__':
    main()