This project is no longer maintained
ELLIPTIc, The ExtensibLe LIbrary for Physical simulaTIons, is a library / framework for creating reusable and extensible Domain Specific Languages (DSL) for scientific purposes.
ELLIPTIc's workflow is as follows:
- An ELLIPTIc DSL contract is created to define how the DSL syntax looks like. This DSL contract defines the operations that will be available when using the DSL.
- A DSL implementation is built based on the DSL contract. The DSL implementation tells ELLIPTIc how to generate the corresponding Cython code.
- When using ELLIPTIc-based DSLs, a tree-like intermediate representation is built.
- This intermediate representation is used together with the DSL implementation to generate Cython code.
ELLIPTIc-based DSLs use a Fluent Interface syntax. This allows for elegant development of algorithms.
Below is an example of how using an ELLIPTIc-based DSL to iterate in a unstructured mesh would look like:
dsl = DSL(...) # Instatiating a DSL object
with dsl.root() as root:
all_ents = root.Entities(dim=3).Adjacencies(bridge_dim=2, to_dim=3) # Operation chaining
internal_ents = all_ents.Where(boundary=False) # Continuing an operation chain
boundary_ents = all_ents.Where(boundary=True) # Operation branching
perm_ents = internal_ents.GetField(name="permeability")
dirichlet = boundary_ents.GetField(name="dirichlet")
neumann = boundary_ents.GetField(name="neumann")
dsl.get_built_module().run() # Run the generated Cython code
It is also possible to export the intermediate representation to a image file, allowing for visual debugging:
Please refer to the documentation page.
Run python setup.py test
.
Run python setup.py build
and python setup.py install
.