Source code for simudo.fem.dolfin_parameters
import os as _os
import dolfin
__all__ = ['setup_dolfin_parameters']
_FEM_DIR = _os.path.dirname(_os.path.abspath(__file__))
def update_dolfin_external_includes(headers):
ffc_param = dolfin.parameters["form_compiler"]
current = set(x for x in ffc_param["external_includes"].split(":") if x)
current.update(headers)
ffc_param["external_includes"] = ":".join(current)
def update_dolfin_external_include_dirs(dirs): # Claude Sonnet 4.6
ffc_param = dolfin.parameters["form_compiler"]
current = set(x for x in ffc_param["external_include_dirs"].split(":") if x)
current.update(dirs)
ffc_param["external_include_dirs"] = ":".join(current)
def _add_to_dolfin_pc_include_dirs(dirs): # Claude Sonnet 4.6
# dolfin.jit.jit.dolfin_pc["include_dirs"] is the list that dolfin injects
# directly into form_compiler_parameters when calling ffc_jit. Appending
# here is the only reliable way to get a custom directory into every JIT
# compilation, because dolfin/fem/form.py overwrites external_include_dirs
# with this list, bypassing dolfin.parameters["form_compiler"].
from dolfin.jit.jit import dolfin_pc
include_dirs = dolfin_pc["include_dirs"]
for d in dirs:
if d not in include_dirs:
include_dirs.append(d)
[docs]
def setup_dolfin_parameters():
parameters = dolfin.parameters
parameters["refinement_algorithm"] = "plaza_with_parent_facets"
parameters["form_compiler"]["cpp_optimize"] = True
parameters["form_compiler"]["cpp_optimize_flags"] = '-O3 -march=native'
update_dolfin_external_includes(["simudo_math_extras.hpp"])
# Two code paths need our FEM dir in the include search path:
# 1. dolfin.FunctionSpace JIT reads dolfin.parameters["form_compiler"]["external_include_dirs"]
# 2. dolfin.Form JIT (and its element dependencies) reads dolfin_pc["include_dirs"] directly
# and overwrites the form_compiler parameter, so we must patch both.
update_dolfin_external_include_dirs([_FEM_DIR])
_add_to_dolfin_pc_include_dirs([_FEM_DIR])