Source code for phaseflow.helpers
""" **helpers.py** contains a variety of patching code. """
import pathlib
import fenics
class Point(fenics.Point):
""" This class extends `fenics.Point` with a more convenient constructor for 1D/2D/3D.
Parameters
----------
coordinates : tuple of floats
"""
def __init__(self, coordinates):
if type(coordinates) is type(0.):
coordinates = (coordinates,)
if len(coordinates) == 1:
fenics.Point.__init__(self, coordinates[0])
elif len(coordinates) == 2:
fenics.Point.__init__(self, coordinates[0], coordinates[1])
elif len(coordinates) == 3:
fenics.Point.__init__(self, coordinates[0], coordinates[1], coordinates[2])
class SolutionFile(fenics.XDMFFile):
""" This class extends `fenics.XDMFFile` with some minor changes for convenience.
Parameters
----------
filepath : string
"""
def __init__(self, filepath):
fenics.XDMFFile.__init__(self, filepath)
self.parameters["functions_share_mesh"] = True # This refers to the component solution functions.
self.parameters["flush_output"] = True # This allows us to view the solution while still running.
self.path = filepath # Mimic the file path attribute from a `file` returned by `open`
[docs]def mkdir_p(pathstring):
""" Make a directory if it doesn't exist.
This is needed because `open` does not create directories.
Now this just calls the appropriate function from pathlib.
Older versions were more complicated.
Parameters
----------
path : string
"""
path = pathlib.Path(pathstring)
path.mkdir(parents = True, exist_ok = True)
def float_in(float_item, float_collection, tolerance = 1.e-8):
for item in float_collection:
if abs(float_item - item) < tolerance:
return True
return False
if __name__=="__main__":
pass