Skip to content

Commit

Permalink
k
Browse files Browse the repository at this point in the history
  • Loading branch information
ksagiyam committed Aug 18, 2024
1 parent a12a1f2 commit 1681eb0
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions ufl/form.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,12 @@ def coefficients(self):
self._analyze_form_arguments()
return self._coefficients

def geometric_quantities(self):
"""Return all ``GeometricQuantity`` objects found in form."""
if self._geometric_quantities is None:
self._analyze_form_arguments()
return self._geometric_quantities

def ufl_domain(self):
"""Return the single geometric integration domain occuring in the base form.
Expand Down Expand Up @@ -595,20 +601,31 @@ def _analyze_domains(self):
from ufl.geometry import GeometricQuantity
from ufl.domain import join_domains, sort_domains

# Collect integration domains
# Collect integration domains.
self._integration_domains = sort_domains(join_domains([itg.ufl_domain() for itg in self._integrals]))
# Collect domains in integrands systematically
# Collect domains in integrands.
"""
domains_in_integrands = []
for integral in self._integrals:
integrand = integral.integrand()
for t in traverse_unique_terminals(integrand):
if isinstance(t, (Coefficient, Constant, Argument, GeometricQuantity)):
domain = extract_unique_domain(t, expand_mixed_mesh=False)
domains = domain._meshes if isinstance(domain, MixedMesh) else (domain, )
for d in domains:
for d in domain.meshes:
if d not in self._integration_domains and d not in domains_in_integrands:
domains_in_integrands.append(d)
"""
domains_in_integrands = set()
for o in chain(self.arguments(),
self.coefficients(),
self.constants(),
self.geometric_quantities()):
domain = extract_unique_domain(o, expand_mixed_mesh=False)
domains_in_integrands.update(domain.meshes)
domains_in_integrands -= set(self._integration_domains)
all_domains = self._integration_domains + sort_domains(join_domains(domains_in_integrands))
# Let problem solving environments access all domains via
# self._domain_numbering.keys() (wrapped in extract_domains()).
self._domain_numbering = dict((d, i) for i, d in enumerate(all_domains))

def _analyze_subdomain_data(self):
Expand Down

0 comments on commit 1681eb0

Please sign in to comment.