== !PyLith Development Plans, Feb 2014 == Priorities for !PyLith software development, such as new features and enhancements. This a draft for community comment (Feb 20, 2014). This plan attempts to balance meeting short-term objectives of delivering high priority, new features and meeting long-term objectives of extending the code to solve a broader range of scientific problems. === Version 2.0 (early March 2014) === Status: We have almost everything working. We are in the process of fixing a few bugs related to creating cohesive cells and running in parallel. # Replace C++ Sieve implementation of finite-element data structures with C DMPlex implementation. expert [99%] * DMPlex provides a simpler, more efficient implementation of the finite-element data structures that conforms to the PETSc data management (DM) interface. This provides tighter integration with the rest of PETSc. Additionally, this rewrite of the data structures results in a more efficient memory layout, resulting in better performance. # Switch from using Subversion to Git for version control. # Add ability to recursively refine a mesh. === Version 2.1 (by Jun 2014) === This is the version that will be available for use at the June 2014 workshop. We are behind schedule for getting multiphysics done by then, and because this is a fixed deadline, we will probably aim to get some additional less ambitious features completed. Allowing different startup cases could slip to version 2.2. # Improve fault formulation for spontaneous rupture [10%] * Removes inner solve associated with updating Lagrange multipliers. This will significantly accelerate the nonlinear solve. # Higher order basis functions [0%] * Allow user to select order of basis functions independent of the mesh (which defines the geometry). This permits higher resolution for a given mesh. # Reorganize top-level code to conform to layout needed for multiphysics [0%] * Setup modular approach for specifying governing equations and computing residuals and Jacobians. # Reorganize top-level code to allow different startup cases [0%] * Elastic prestep * User-specified initial solution * Checkpoint via special spatial database? # Radial basis functions for spatial databases [0%] # Improved handling of buried fault edges [25%] === Version 2.2 (Summer/Fall 2014) === # Multiphysics * Incompressible elasticity via a pressure field * Elasticity + heat flow * Elasticity + fluid flow # GUI interface for specifying parameters # Switch to using PETSc time-stepping (TS) algorithms. [0%] * Replace simple Python-based time-stepping implementations with PETSc time-stepping algorithms that provide support for higher order discretization in time and real adaptive time stepping. # Multilevel nonlinear solve === Version 2.3 (Spring 2015) === # Earthquake cycle modeling * Same mesh for dynamic and quasi-static parts (dynamic → quasi-static, quasi-static → dynamic, complete cycle) # Create strain hardening/softening 2-D and 3-D Drucker-Prager elastoplastic models. # Moment tensor point sources via equivalent body forces [5%] * Moment tensor point sources provide a mesh independent deformation source that is better suited for Green's function calculations than slip on a fault surface via cohesive cells. === Features for Future Releases === ==== Major features ==== # Earthquake Cycle Modeling * Different meshes for dynamic and quasi-static parts * Requires interpolation of fields between different meshes/discretizations and may require extrapolation of solutions when quasi-static problems span a larger domain than the dynamic problems. # Data assimilation * Use flexibility of multiphysics organization to support inclusion of data assimilation ==== Minor features ==== # Use KD tree search algorithm to allow output of time histories at an arbitrary location # Combined prescribed slip / spontaneous rupture fault condition * Use fault constitutive model to control slip on fault except during episodes of prescribed slip. Need some way to describe when to turn on/off prescribed slip. # Use threading to accelerate integrations on multi-core machines.