== !PyLith Development Plans, May 2017 == Priorities for !PyLith software development, such as new features and enhancements. This a draft for community comment (May 19, 2017). 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 3.0 (2017) === # Multiphysics {{expert.png}} [30%] * Implement modular approach for specifying governing equations and computing residuals and Jacobians. {{expert.png}} * Incompressible elasticity via a pressure field {{intermediate.png}} [20%] # Higher order basis functions {{difficult.png}} [50%] * Allow user to select order of basis functions independent of the mesh (which defines the geometry). This permits higher resolution for a given mesh. # Switch to using PETSc time-stepping (TS) algorithms. {{intermediate.png}} [75%] * 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. # Update user manual * Convert from !LyX to !LaTeX for ease of maintenance and editing. {{easy.png}} [100%] * Reorganize for multiphysics implementation. {{intermediate.png}} [10%] * Reorganize examples. {{intermediate.png}} [5%] * Focus on demonstrating the range of physics and features beginning with simple cases and building towards more complex cases. * Include !ParaView Python scripts for plotting results. * Consider moving examples to Jupyter notebooks; export to PDF files for "print" documentation. === Version 3.1 (early 2018) === # Improve fault formulation for spontaneous rupture {{intermediate.png}} [10%] * Removes inner solve associated with updating Lagrange multipliers. This will significantly accelerate the nonlinear solve. # Allow full specification of the initial conditions (solution and state variables) {{intermediate.png}} [0%] # Add additional multiphysics implementations and rheologies * Poroelasticity {{difficult.png}} [5%] # Convert to Python 3 and Pyre 1.0. === Version 3.X (TBD) === # Add additional multiphysics implementations and rheologies * Drucker-Prager bulk rheology with relaxation to yield surface {{intermediate.png}} * Elasticity + heat flow {{difficult.png}} # Reorganize output for time-dependent Green's functions and adjoints {{intermediate.png}} # Multilevel nonlinear solve {{expert.png}} # Radial basis functions for spatial databases {{intermediate.png}} # Use threading to accelerate integrations on multi-core machines. {{difficult.png}} === Version 4.0 (TBD) === # Earthquake cycle modeling {{difficult.png}} * 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. {{intermediate.png}} # Moment tensor point sources via equivalent body forces {{difficult.png}} [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 {{expert.png}} * 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 implementation to support inclusion of data assimilation {{expert.png}} ==== Minor features ==== # Begin implementation of data assimilation capabilities via adjoint equation. # Combined prescribed slip / spontaneous rupture fault condition {{difficult.png}} * 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. ---- ==== difficulty rating system ==== ||[[Image(easy.png, 25px)]] easy ||[[Image(intermediate.png, 25px)]] intermediate ||[[Image(difficult.png, 25px)]] difficult ||[[Image(expert.png, 40px)]] expert || ''based on the ski trail rating system''