forked from geodynamics/pylith
-
Notifications
You must be signed in to change notification settings - Fork 0
PyLith is a finite element code for the solution of dynamic and quasi-static tectonic deformation problems.
License
kbai/pylith
Â
Â
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
 |  | |||
Repository files navigation
We are pleased to announce release of PyLith version 2.1.0 Please submit bug reports via the World Wide Web at: https://github.com/geodynamics/pylith/issues Please send all questions by electronic mail to: cig-short@geodynamics.org PyLith is free software. See the file COPYING for copying conditions. This release allows the solution of both quasi-static and dynamic problems in two or three dimensions. The code runs in either serial or parallel mode, and the design allows for relatively easy scripting using the Python programming language. Material properties and parameters for boundary and fault conditions are specified using a spatial database, which permits easy prescription of complex spatial variations of properties and parameters. Simulation parameters are generally specified through the use of simple ASCII files or the command line. You can download the source code and binaries from http://geodynamics.org/cig/software/pylith Installation instructions are in the bundled README and INSTALL files, as well as in the User Manual on the web page. PyLith is under active development and we expect a number of additions and improvements in the near future. See http://wiki.geodynamics.org/software:pylith:plans:2014 for the current development plan. ====================================================================== TIPS ====================================================================== * If the linear solve takes more than a few hundred iterations for a large problem (use the --petsc.ksp_monitor=1 and --petsc.ksp_view=1 to see diagnostic information for the solver), this is usually an indication that something is wrong. Either the preconditioner is inappropriate for the type of problem you are solving or there is an error in the problem setup. ====================================================================== MIGRATING FROM VERSION 2.0 TO 2.1 ====================================================================== The points file for OutputSolnPoints must now contain station names as the first column. ---------------------------------------------------------------------- Version 2.1.0 ---------------------------------------------------------------------- * Station names are required for output at arbitrary points (OutputSolnPoints) and are included in a /stations dataset in HDF5 files. * A progress monitor will update a text file with the progress of a simulation (time in the time stepping loop or the number of impulses completed) and given an estimate of when the simulation will be completed. * Bug fixes - A few bugs related to creating cohesive cells for fault intersections have been fixed. Faults can now meet at T intersections provided the buried edges of the faults are clamped. In other words, the fault ending at the T intersection has a clamped edge along the intersection. The fault ending at the intersection must also come AFTER the through-going fault in the list of fault interfaces. - There have been two major bug fixes for Drucker-Prager plasticity, for both DruckerPrager3D and DruckerPragerPlaneStrain. The first fix was a missing initial pressure term for the plastic multiplier in the Drucker-Prager formulation. This affects plasticity calculations when initial stresses are used. The error has been corrected in the code, the manual, and the unit tests. The second bug was an incorrect test for tensile yield that could cause PyLith to exit with an error when plastic yield had not actually occurred. The error would only occur when the allow_tensile_yield flag was set to False. This bug has been fixed in the code, and the new test is also described in the manual. This should prevent problems that previously existed when allow_tensile_yield was set to False (as it should be for most quasi-static problems). - Fixed bug in DataWriterHDF5Ext associated with multiple processes writing information to the HDF5 file. With external datasets the HDF5 file is limited to metadata and is maintained by process 0. - A two-dimensional gravity example has been added, based on the tutorial from the June, 2014 workshop at Stanford University. The tutorial itself is in examples/2d/gravity, and a new section has also been added to the manual describing the example. - Fixed inconsistent fault orientation when running in parallel for 2-D domains. ====================================================================== MIGRATING FROM VERSION 1.9 TO 2.0 ====================================================================== Changes to various C++ objects permitted simplifying the specification of a number of components. The map below indicates the name changes. CellFilterAvgMesh -> CellFilterAvg CellFilterAvgSubMesh -> CellFilterAvg DataWriterVTKMesh -> DataWriterVTK DataWriterVTKSubMesh -> DataWriterVTK DataWriterVTKSubSubMesh -> DataWriterVTK DataWriterHDF5Mesh -> DataWriterHDF5 DataWriterHDF5SubMesh -> DataWriterHDF5 DataWriterHDF5SubSubMesh -> DataWriterHDF5 DataWriterHDF5ExtMesh -> DataWriterHDF5Ext DataWriterHDF5ExtSubMesh -> DataWriterHDF5Ext DataWriterHDF5ExtSubSubMesh -> DataWriterHDF5Ext Running the script: bash $PYLITH_DIR/doc/developer/update_1.9to2.0.sh will update all .cfg files in the current directory and all subdirectories with the new names (you will need to replace $PYLITH_DIR with the directory containing the PyLith source code). PyLith allows use of the Chaco and ParMetis/Metis partitioners. The name of the ParMetis/Metis partitioner was changed from "parmetis" to "metis". [pylithapp.mesh_generator] distributor.partitioner = metis Buried edges of faults are handled differently in v2.0. A separate nodeset/pset should be created and contain the vertices on the buried edges of the fault. See the Section 6.4.2 of the PyLith manual for more information. ---------------------------------------------------------------------- Version 2.0.3 ---------------------------------------------------------------------- * Bug fixes - Updated autotools files (Makefile.am, configure.ac) for compatibility with recent versions of automake (up to and including v1.14.1). ---------------------------------------------------------------------- Version 2.0.2 ---------------------------------------------------------------------- * Bug fixes - Fixed linking issue in Darwin binary distribution, primarily affecting systems with OS X 10.7 and 10.8. - Improved example journal files for CUBIT/Trelis to improve compatibility (examples/meshing/surface_nurbs/dem). - Updated more journal in examples so that APREPRO lines have a leading '$' instead of a '#' to differentiate from comments. - Added examples/debugging files from Crustal Deformation Modeling workshop debugging tutorial. ---------------------------------------------------------------------- Version 2.0.1 ---------------------------------------------------------------------- * Bug fixes - Improved example journal files for CUBIT/Trelis to improve compatibility. All journal files should work with CUBIT 14.1 and Trelis 15.0. - Created examples of IDless journal files in examples/2d/greensfns. These files should work with all recent versions of CUBIT and Trelis. - Switched journal APREPRO lines to have leading '$' instead of '#' to differentiate from comments. ---------------------------------------------------------------------- Version 2.0.0 ---------------------------------------------------------------------- * Replaced C++ Sieve implementation of finite-element data structures with C DMPlex implementation. 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. * Improved treatment of buried fault edges, so that the slip naturally tapers to zero along the buried edges. An additional nodeset/pset is used to designate the buried edges of a fault. This allows the cohesive cells to be inserted up to the edge of the fault without splitting the mesh at the fault edge. The slip will naturally taper to zero at along the buried edges as a result of how the cohesive cells are created. * Switched from using Subversion to Git for version control. The source code repository changed from a CIG maintained Subversion repository to a Git repository at GitHub.com. The URL for the Git repository is https://github.com/geodynamics/pylith. The installer has been updated accordingly. * Added ability to recursively refine a mesh. Global uniform refinement can now be done recursively. Each refinement reduces the vertex spacing by a factor of two. Using more than one level of refinement should be done carefully as the mesh quality will generally deteriorate with more levels of refinement. * Directories for output are created as necessary. Directories where output files are written will be created if necessary. Previously, the directories would not be created, so that opening the output files in a nonexistent directory would generate an error. * Improved error messages. Error messages originating in PETSc will include a stack trace that includes both PyLith and PETSc code. Previously, only the PETSc code was included. This provides significantly more information for debugging. * Improved CUBIT example for mesh sizing functions. Based on experimentation with CUBIT 14.0, 14.1, and Trelis 15.0, we have improved the CUBIT mesh sizing examples (examples/meshing/cubit_cellsize). We were able to simplify the journal files and use fewer CUBIT commands. The new procedure also eliminates some CUBIT warnings. * Several small improvements to various sections of the manual based on feedback and questions from users. - Added more information about the workflow involved in using PyLith. - Added a discussion of how to set scales for nondimensionalization. - Added a discussion of how the stable time step is computed for the various materials. - Updated and expanded the discussion of using initial state variables. * Bug fixes - Fixed two MPI related bugs in computing Green's functions in parallel. The number of impulses corresponded to only those on process 0. - Corrected computation of fault tractions (Lagrange multipliers) on process boundaries for prescribed slip with explicit time stepping. - Fixed bug when reading in list of output points with just one point. - Adjusted autoconf Python setup macro to remove temporary sysconfig.pyc file. - Added check to make sure degree of freedom specified in Dirichlet BC is consistent with spatial dimension of problem. - Corrected two typos in the manual related to fault opening and tractions in examples/3d/hex8/step20 and updating to the use of cell.dimension for the quadrature scheme with tets. - Fixed stable time step computed for power-law viscoelastic rheology to match manual. ====================================================================== MIGRATING FROM VERSION 1.8 TO 1.9 ====================================================================== No changes are needed in .cfg files to switch from v1.8.0 to v1.9.0. Version 1.9.0 does includes some changes to the friction and material model interfaces, so extensions do require changes. See the templates for details. ---------------------------------------------------------------------- Version 1.9.0 ---------------------------------------------------------------------- * New features * Added Newton-Raphson algorithm for spontaneous rupture simulations with explicit-stepping. Enforcing the friction criterion in a spontaneous rupture simulation with explicit time-stepping now uses a Newton-Raphson algorithm to find the correct traction increment. This provides a more stable numerical solution and eliminates oscillatory behavior when using rate-state friction. Added SCEC spontaneous rupture benchmark TPV102 to the benchmark repository. PyLith produces results very similar to several other finite-element codes. * Bug fixes - Fixed two MPI related bugs in computing Green's functions in parallel. The number of impulses corresponded to only those on process 0 and the output of the impulses for vertices on processor boundaries was inconsistent. - Corrected computation of fault tractions (Lagrange multipliers) on process boundaries for prescribed slip with explicit time stepping. - Fixed bug when reading in list of output points with just one point. - Adjusted autoconf Python setup macro to remove temporary sysconfig.pyc file. - Added check to make sure degree of freedom specified in Dirichlet BC is consistent with spatial dimension of problem. - Corrected two typos in the manual related to fault opening and tractions in examples/3d/hex8/step20 and updating to the use of cell.dimension for the quadrature scheme with tetrahedral cells. ====================================================================== MIGRATING FROM VERSION 1.7 TO 1.8 ====================================================================== Explicit time stepping with a non-lumped Jacobian has been eliminated and ExplicitLumped is now Explicit. Old setting ------------------------------------------------ formulation = pylith.problems.ExplicitLumped formulation = pylith.problems.ExplicitLumpedTri3 formulation = pylith.problems.ExplicitLumpedTet4 New setting ------------------------------------------------ formulation = pylith.problems.Explicit formulation = pylith.problems.ExplicitTri3 formulation = pylith.problems.ExplicitTet4 ---------------------------------------------------------------------- Version 1.8.0 ---------------------------------------------------------------------- * New features * Additional flexibility in PETSc nonlinear solver parameters The default line search type for the PETSc nonlinear (SNES) solver is a customized backtrace method included in PyLith. The user may now select alternative line search types (basic, bt, l2, cp) available in PETSc. * Post-processing utility pylith_eqinfo to compute slip information. This post-processing utility computes the moment magnitude, seismic moment, seismic potency, and average slip at user-specified snapshots in time from PyLith HDF5 output. Information is given for each fault and across all faults. See the Post-processing section in the Running PyLith chapter of the manual for more information. * Computation of the stable time step for explicit time-stepping. The stable time step for explicit time-stepping is computed based on the CFL condition and minimum edge lengths. For triangular and tetrahedral cells we also account for a reduction in the stable time step due to distorted cells (e.g., slivers and needles). See the Stable time step section in the Materials chapter of the manual for more information. * Output the stable time step for each cell in a material. Output cell_info_fields "stable_dt_implicit" and "stable_dt_explicit" can be included in material output. * Added netCDF Python module to binary distribution to provide Python interface to NetCDF files, including Exodus-II files. This is used in a new meshing example for setting the discretization size using an Exodus-II vertex field. Note that this required updating the NetCDF library. * Bug fixes - Fixed omission of synchronization of stable time step computation among processors. Minimum time step among all processors rather than local value should be used. - Fixed density scale not being set in NondimElasticQuasistatic. Density scale should be set based on shear modulus, length scale, and relaxation time. - Added warning when initial state for a fault constitutive model is not set. If an initial state value is not given, for rate-state friction using a default value of L / reference slip rate. Other fault constitutive models use a default value of 0.0 for initial state variables. - Separated tensor components in Xdmf files to avoid confusion. The corresponding HDF5 files remain unchanged. - Removed explicit time-stepping formulation with non-lumped Jacobian. This formulation was not setup properly for spontaneous rupture models and is too computationally expensive for practical problems. The ExplicitLumped* formulations are now simply Explicit*. - Fixed parallel bug that resulting in inconsistent orientation of fault slip directions. Flipping the fault orientation was not synchronized across processors. This bug would only appear when running in parallel with faults that change from dipping in one direction to dipping in the opposite direction. - Fixed bug in setting name of field in OutputSolnPoints when output multiple fields. This bug caused the name of the first output field to be used and output data to overwrite each other. ====================================================================== MIGRATING FROM VERSION 1.6 TO 1.7 ====================================================================== Two changes are required when migrating from version 1.6 to 1.7. (1) The FIATSimplex object now has the same parameters as the FIAGLagrange object. Old setting New setting ------------------------ ------------------ cell.shape = line cell.dimension = 1 cell.shape = triangle cell.dimension = 2 cell.shape = tetrahedron cell.dimension = 3 (2) Prescribed fault tractions for spontaneous earthquake rupture use a new, more flexible implementation that follows the same functional form for spatial and temporal variation as that used in the Dirichlet and Neumann boundary conditions. Consequently, the output info fields are also different and follow the naming scheme used in the other time-dependent boundary conditions. Old settings -------------------------------------------------------------------- [pylithapp.timedependent.interfaces.fault] db_initial_tractions = spatialdata.spatialdb.SimpleDB db_initial_tractions.iohandler.filename = tractions.spatialdb db_initial_tractions.label = Initial fault tractions New settings -------------------------------------------------------------------- traction_perturbation = pylith.faults.TractPerturbation [pylithapp.timedependent.interfaces.fault.traction_perturbation] db_initial = spatialdata.spatialdb.SimpleDB db_initial.iohandler.filename = tractions.spatialdb db_initial.label = Initial fault tractions ---------------------------------------------------------------------- Version 1.7.1 ---------------------------------------------------------------------- * Bug fixes - Fixed a couple of bugs in the spontaneous earthquake rupture for quasi-static problems when running in parallel. These prevented the nonlinear solve from converging and erroneously generated fault-opening in a some cases. - Minor updates to the documentation and manual. Added Green's function examples to the manual. ---------------------------------------------------------------------- Version 1.7.0 ---------------------------------------------------------------------- * New features * User-friendly interface for Green's functions A new problem type provides a user-friendly interface for computing Green's functions associated with fault slip for complex spatial variation in elastic properties. See examples/2d/greensfns in the tutorials for examples. * Output of solution field at user-specified locations Added a new output manager for interpolation of the solution field to user-specified point locations. This feature is useful for comparison of the solution with observations and in computing Green's functions. See examples/3d/hex8/step19 and examples/2d/greensfns in the tutorials for examples. * Plane strain version of Drucker-Prager elastoplastic model Added a plane strain version of the Drucker-Prager elastoplastic model. Additionally, the user can now select whether to use an inscribed, intermediate, or circumscribed fit to the Mohr Coulomb criterion. * Spatial and temporal variation in tractions for spontaneous earthquake rupture Switched from a simple constant spatial variation in initial fault tractions to the more flexible spatial and temporal variation consistent with the Dirichlet, Neumann, and point force boundary conditions. Also added a switch to turn on/off applying prescribed fault tractions when the fault opens; the default behavior is to stop applying prescribed fault tractions when the fault opens, but turning this off allows simulation of dike intrusions via prescribed fault tractions. See examples/3d/hex8/step20 in the tutorials for an example of how to specify fault tractions with the new implementation. * Ability to use PETSc GPU solvers Added ability to build PyLith with either double (default) or single precision floating point values to facilitate use of GPUs. In order to use PETSc GPU solvers, CUDA and cusp must be installed and PETSc must be configured to use CUDA. See the PyLith manual and PETSc documentation for details. * User-specified start time for simulations. Users can set the simulation start time to any desired value. This facilitates combining simulations to model the earthquake cycle. * Elastic prestep in quasi-static simulations is optional. The elastic prestep in quasi-static simulations can be skipped (the default is to include the elastic prestep). This facilitates combining simulations to model the earthquake cycle. * Bug fixes - Fixed bug in the spontaneous earthquake rupture for quasi-static problems when running in parallel. ====================================================================== MIGRATING FROM VERSION 1.5 TO 1.6 ====================================================================== No changes in parameters are required. Version 1.6.1 does require users to specify descriptive labels for spatial databases and friction models. ---------------------------------------------------------------------- Version 1.6.3 ---------------------------------------------------------------------- * Bug fixes - Improved error messages for problems encountered during processing of parameters. A backtrace of the object hierarchy is now included to pinpoint in which object the error occurred. - Added a line search to the inner friction solve in quasi-static simulations to increase the robustness of the nonlinear solve. Simulations using rate and state friction now converge under a much wider range of circumstances. - Fixed bug in updating slip state variable in slip-weakening friction. This caused slight errors in the cumulative slip. We also added a parameter that forces healing to occur in a single time step. This is used to confine slip to a single time step in quasi-static simulations. See examples/3d/hex8/step13.cfg for an example. - Tuned parameters in the slip-weakening friction and rate and state friction examples (step13.cfg and step14.cfg, respectively) in examples/3d/hex8 to give stick-slip behavior. - Fixed communication issue associated with writing boundary condition information output in parallel. - Changed info in Xdmf file for fields that are not scalars, vectors, or tensors so that the each component is extracted, facilitating visualization in ParaView. The corresponding HDF5 file remains the same. - Added the ability to specify non-derived units (e.g., degree and radian). This is useful in specifying parameters for the Drucker-Prager elastoplastic rheologies. If no units are specified, radians are assumed. * Internal changes - Rate and state friction with ageing law The implementation of rate and state friction with ageing law was modified to work better with the iterative solver. We switched to the conventional, unregularized formulation but added a minimum cutoff for the slip rate. Below this cutoff friction has a linear rather than logarithmic dependence on slip rate. As long as this cutoff is close to the SNES solver tolerance, the difference in behavior is negligible while improving the ability of the solver to converge for very small deformations. KNOWN ISSUES The rate and state friction with ageing law has not been tested for dynamic rupture simulations. We plan to run the SCEC Dynamic Rupture benchmarks for rate and state friction as soon as we add a spatial-temporal specification of initial fault tractions, which are required for the benchmark problems. Running simulations with more than a million cells and large faults in parallel can result in severe memory imbalances among processors. Some processors around the fault may use 10x more memory than processors away from the fault. We expect this problem to disappear in v1.7 when we switch to new, more efficient Sieve implementation. ---------------------------------------------------------------------- Version 1.6.2 ---------------------------------------------------------------------- * Bug fixes - Fixed bug in writing tensor data for Xdmf files. Switched Tensor to Tensor6 to account for symmetry. - Fixed bug in writing HDF5 files in parallel when one processor does not write any information (e.g., faults and boundary conditions). - Added dimensioning of time dataset in HDF5 files. The units are now seconds rather than nondimensional time. - Fixed memory allocation error (std::bad_alloc) when a processor did not contain cells for a boundary condition or output. This bug did not show up on all architectures. - Increased robustness of spontaneous rupture (fault friction) implementation to broaden the range of conditions it can handle. The implementation now properly handles cases with fault opening and cases with zero shear or normal tractions. * Internal changes - Fault implementation Several changes have been made to the fault implementation, but none of these affect the user interface. The runtime performance is nearly identical with improved accuracy for spontaneous rupture (fault friction) simulations. These changes involved switching to using tractions (non-integrated quantities) for the Lagrange multipliers in the global coordinate system rather than integrated quantities in the fault coordinate system. Additionally, initial fault tractions are associated with the fault vertices and their interpolation uses the finite-element basis functions. - Distribution of mesh among processors The data structures used to distribute the mesh among processors have been improved. This reduces memory use and runtime for this stage of the simulations. KNOWN ISSUES The custom line search used with the PETSc nonlinear solver (SNES) has difficulty handling some loading cases. In cases where the direction of the line search tends to be nearly orthogonal to the residual, the rate of convergence in the SNES iterations is extremely slow. In other cases the nonlinear solver gets stuck in a local minimum. We plan to improve the line search algorithm in a future release in order to resolve this issue and improve the rate of convergence in spontaneous rupture simulations. ---------------------------------------------------------------------- Version 1.6.1 ---------------------------------------------------------------------- * Validation of user input Added stricter requirements for descriptive labels of various objects, including spatial databases and friction models. The default labels are empty strings which do not result in useful error messages; the user is now required to specify a non-empty string for the labels. This makes errors related to spatial databases much easier to diagnose. * Updates to manual - Updated description of cell_info_fields for Neumann boundary condition. The description had not been updated to reflect the time-dependence introduced in version 1.4. - Added steps 18 and 19 that discuss time-dependent Neumann boundary conditions to examples/3d/hex8. * Bug fixes - Fixed bug in writing rupture information to VTK and HDF5 files when using multiple earthquake sources. Field names did not include name of rupture. This caused loss of information in VTK output and a corrupted Xdmf metadata file for HDF5 output. - Fixed error in use of initial stress tensor with generalized Maxwell models. The initial stress tensor was added to the current stress tensor twice. - Fixed two bugs in the fault friction implementation. One bug pertained to accounting for roundoff errors and convergence tolerances in computing the slip rate. Slip rates less than 1.0e-12 (nondimensionalized) are set to zero. The friction implementation for quasi-static problems contained a bug that resulted in slip extending over all of the fault rather than the appropriate isolated patch. - Cleaned up Green's function example (examples/greensfns/hex8) so that it runs without errors. Eliminated extraneous processing. - Cleaned up meshing examples (examples/meshing), including elimination of superfluous pre-processing. - Adjusted absolute tolerances for PETSc solves in examples/3d/hex8 so that solver terminates with desired convergence criterion. - Updated examples/2d/subduction/geometry.jou to use APREPRO functions and variables to store id values. ---------------------------------------------------------------------- Version 1.6.0 ---------------------------------------------------------------------- * New features * Parallel binary output via HDF5 Provides much faster output by writing HDF5 files in parallel, which can be accessed directly from Matlab or indirectly from ParaView or Visit via automatically created Xdmf files. Temporal data is stored in 3-D arrays, permitting slicing in time and/or space. See examples/3d/hex8 Steps 6-9 and examples/2d/subduction in the tutorials for examples. * 2-D generalized Maxwell viscoelastic bulk rheology Added a 2-D generalized Maxwell viscoelastic bulk rheology corresponding to the plane strain version of the 3-D generalized Maxwell viscoelastic model. * Time-weakening fault constitutive model Added a linear time-weakening fault constitutive model. Some spontaneous rupture modelers prefer this model over linear slip-weakening because it is easier to maintain resolution of the cohesive zone. * Global uniform parallel mesh refinement Permits running larger problems through uniform global refinement of the mesh by a factor of 2 (reduces the node spacing by a factor of 2) after the mesh is distributed among processors. This allows running problems that are 4x larger in 2-D and 8x larger in 3-D. See examples/3d/tet4 Steps 2 and 4 for examples. * Custom algebraic multigrid preconditioner Adds a custom preconditioner for Lagrange multiplier degrees of freedom associated with fault slip via prescribed slip or spontaneous ruptures with algebraic multigrid preconditioning for quasi-static solutions. In most cases, this results in fewer iterations in the linear solve and the number of iterations increases much less with problem size. See examples/3d/tet4 Steps 2 and 4 for examples. * PyLith installer utility This utility provides a much more robust method for building PyLith and all of its dependencies from source, including dependency checking, installation to a central location, and creation of a shell script to set environment variables. * Bug fixes - Fixed the fault friction implementation to correctly update Lagrange multiplier values when the slip is overestimated in an iteration. This primary fixes problems encountered with the use of the Dieterich-Ruina rate and state fault constitutive model. - Corrected viscoelastic rheologies to properly account for a nonzero initial strain tensor. ====================================================================== MIGRATING FROM VERSION 1.4 TO 1.5 ====================================================================== Three changes to the code require updating old parameters settings for use with version 1.5. (1) Recent releases of CUBIT include nodeset names in the Exodus file and PyLith now uses them to associate vertices with boundary conditions and faults. Use the NetCDF utility ncdump to examine the contents of the Exodus (.exo) file to see it it includes the variable ns_names. If it does, then use nodeset names rather than nodeset ids for boundary condition label properties. If your Exodus file does not contain nodeset names, then set the MeshIOCubit property use_nodeset_names to False to continue to use nodeset id values for boundary condition labels. (2) The power-law constitutive parameters have been changed so that the parameter units are no longer dependent on the power-law exponent. This is a more logical implementation and allows (among other things) users to vary power-law parameters using a spatial database. Previously, it was not possible to vary power-law parameters unless everything used the same power-law exponent. The new implementation uses reference-strain-rate, reference-stress, and power-law-exponent to describe the material. This is described in the 'Material Models' section of the manual. (3) The fault property 'normal_dir' is obsolete. Only the property 'up_dir' is required to enforce that positive slip is left-lateral, reverse, and fault-opening for dipping faults in 2-D and horizontal fault surfaces in 3-D. Previously, in 2-D positive slip was always left-lateral, but now the up-direction is used to enforce positive slip corresponds to reverse motion for dipping faults. For horizontal fault surfaces in 3-D a normal of (0,0,1) is assumed in determining the up-dip direction. ---------------------------------------------------------------------- Version 1.5.2 ---------------------------------------------------------------------- * PyLith 1.5.2 requires FIAT version 0.9.9 or later and an updated PETSc development version. It also requires users to update to the latest spatialdata version for compatibility of the SWIG generated files. These are included in the binary distribution, but users building PyLith from source will need to update FIAT, PETSc, and spatialdata. * Bug fixes - Fixed setting of elastic constants in DruckerPrager3D and computation of the yield function. Some off-diagonal elasticity constants were off by a factor of 2.0 and the yield function was missing a factor of 0.5 and sqrt(). - Fixed computation of stable time step when using initial stresses with PowerLaw3D. If effective stress is zero, then stable time step is infinite. - Re-enabled check for compatibility of quadrature scheme and cells for bulk rheologies. - Added check to configure for compatible version of FIAT. - Fixed bug where buffer for output of initial stresses for dynamic (spontaneous) rupture. ---------------------------------------------------------------------- Version 1.5.1 ---------------------------------------------------------------------- * Bug fixes - Fixed dimensioning of velocity and acceleration fields in output. The scales were set to just the length scale rather than the length scale divided by the time scale and length scale divided by the time scale squared. - Fixed partitioning of cohesive cells. Cohesive cells were ignored during partitioning of the mesh, so they were randomly distributed among processors. ---------------------------------------------------------------------- Version 1.5.0 ---------------------------------------------------------------------- * Fault constitutive models Added fault friction interface conditions with static friction, linear slip-weakening friction, and rate- and state-friction with the ageing law. The implementation can be used in static, quasi-static, and dynamic problems. * Drucker-Prager elastoplastic bulk rheology Added a Drucker-Prager elastoplastic bulk rheology. This is a perfect plasticity implementation (no hardening). This is a nonlinear constitutive model, so the nonlinear solver is required when this rheology is used. Refer to the 'Material Models' section of the manual. * Plane strain Maxwell viscoelastic bulk rheology Linear Maxwell viscoelastic rheology for plane strain problems. * Finite-deformation formulation Added a finite-deformation (rigid body motion and small strains) implementation of elasticity with stress calculated using the Second Piola Kirchhoff stress tensor and strains calculated using the Green-Lagrange strain tensor. * Lumped Jacobian for explicit-time stepping Added the option to lump cell Jacobian matrices to form a diagonal system Jacobian matrix for explicit time stepping. This decouples all degrees of freedom and permits use of a fast, trivial, direct solver. * Optimized elasticity objects Added optimized elasticity objects for the most popular cell types and basis functions (linear polynomials). For tri3 and tet4 cells with one quadrature point, the optimized implementations do not use reference (mapped) cells in order to reduce the number of operations. * Scientific notation for ASCII VTK files Data values in ASCII data files are written in scientific notation with user-specified precision. * Nodeset names in CUBIT Exodus files Use of nodeset names in CUBIT Exodus files for boundary conditions and faults. Users can specify to use nodeset names (default behavior) or ids. * Velocity and slip rate as output fields Velocity (domain and subdomain) and slip rate (fault) fields are can be requested as output fields. The fields are computed using the time-stepping algorithm and alleviates the need to compute them via post-processing. * Dimensionless values in spatial databases no longer need artificial dimensions. Values without dimensions are understood by the parser as dimensionless quantities. * Bug fixes - Updating state variables did not retrieve physical properties for cell. Last physical properties retrieved were used. Physical properties are now retrieved when updating state variables. - Fixed incorrect dimensioning of physical properties and state variables for the power-law rheology in output. - Fixed memory bug for a fault in a 1-D mesh when constructing the cohesive cells. ====================================================================== MIGRATING FROM VERSION 1.3 TO 1.4 ====================================================================== A number of changes to the code require updating old parameter settings for use with version 1.4. (1) The mesh "importer" is now called "reader". (2) The spatial database facility for a material, "db", is separated into a "db_properties" and a "db_initial_state". The initial stress and strain tensors are specified using the "db_initial_stress" and "db_initial_strain" facilities. The names of some of the spatial database values for physical properties for viscoelastic properties have changed. (3) The code is now intelligent enough to determine the dimensions of the quadrature required (e.g., Quadrature2D and Quadrature2Din3D, etc). Setting the quadrature to the object for a given spatial dimension and cell dimension is no longer allowed because it is done automatically. (4) The names of the output filters have changed and include suffixes Mesh or SubMesh to indicate that they operate on a mesh or submesh (e.g., CellFilterAvg is now CellFilterAvgMesh or CellFilterAvgSubMesh). This is related to the use of C++ templates. (5) The DirichletPoints boundary condition has been renamed to DirichletBC. (6) The procedure for enabling certain features no longer involves setting a "use" property to True. Instead, the features are enabled when the user sets the component to a facility. This applies to gravity, initial stresses, initial strains, and initial state variables, and time-dependent boundary conditions (Dirichlet, Neumann, and point force). (7) Nondimensionalization of the problem eliminates the need to condition the fault constraints. The "mat_db" facility was removed. (8) The Dirichlet and Neumann boundary conditions now follow a more general time dependence. The names of the facilities and the names of the values in the spatial databases are, in most cases, different. (9) The FixedDOFDB has been renamed to ZeroDispDB in order to better reflect the type of spatial database. ====================================================================== MIGRATING FROM VERSION 1.2 TO 1.3 ====================================================================== The implementation of different options for controlling the time step requires adjusting input parameters from those used with PyLith 1.2. The time stepping is specified under the time-stepping formulation rather than the problem (i.e., one level deeper). ---------------------------------------------------------------------- Version 1.3.1 ---------------------------------------------------------------------- * Added stages to PETSc logging (--petsc.log_summary=1) to collect event logging into groups. * Bug fixes - Fixed partitioning options. Partitioning options were ignored in the 1.3.0 release. - Fixed assembling of Jacobian, residual, and fault sections across processors. This bug caused errors in the computation of the change in tractions over the fault surface. ---------------------------------------------------------------------- Version 1.3.0 ---------------------------------------------------------------------- * New time stepping options In addition to a uniform, user-specified time step, which is the default, there are two new time-stepping options. The user may supply a file with nonuniform time steps or, for quasi-static simulations, the user can request the code to compute the time step automatically. For the current bulk constitutive models, the automatically determined time step is independent of the deformation rate, so it is uniform. * Initial stresses Users may optionally supply an initial stress state for each material via a spatial database. The initial stress state can balance the gravitational body forces so that the model is in equilibrium without any deformation. This implementation of an initial stress state is a prelude to specifying an initial state for each material, which will be available in a future release. * Bug fixes - Fixed labeling of physical properties in output for the Maxwell viscoelastic and generalized Maxwell viscoelastic materials (mu and lambda were switched). ====================================================================== MIGRATING FROM VERSION 1.1 TO 1.2 ====================================================================== There are two new features in PyLith version 1.2 that require users to adjust input parameters from those used with PyLith 1.1. A dynamic array of kinematic rupture replaces a single kinematic rupture on a fault. Additionally, the default slip time function is now a step-function. This eliminates the need to specify a peak slip rate for quasi-static simulations. When using PyLith version 1.2 with a problem previously setup for PyLith 1.1, look for warnings about unknown components and settings in the screen output at the beginning of a run. ---------------------------------------------------------------------- Version 1.2.0 ---------------------------------------------------------------------- * New Sieve implementation The previous implementation of Sieve provided a very generalized implementation of data structures and operations for finite-element meshes. Switching to a more rigid implementation in the new implementation streamlined the data structures, resulting in a significant reduction in the memory use for storing the mesh. This leads to an overall reduction in memory use of 25-30% in many cases. * Multiple kinematic ruptures A single kinematic rupture on a fault has been replaced by a dynamic array of kinematic ruptures. This allows creation of an arbitrary number of kinematic ruptures on each fault surface. By using spatial databases to control the spatial and temporal extent of slip in each rupture independently, slip from different earthquake ruptures can overlap in space and/or time. Additionally, the rupture time at each location is specified with respect to the origin time of the corresponding earthquake rupture. * New slip time functions - Step slip time function (now the default) This slip time function simplifies specifying instantaneous slip in a quasi-static simulation compared with using the Brune slip time function. - Constant slip rate slip time function This slip time function permits prescribing a constant slip rate on the fault surface. * Gravitational body forces Gravitational body forces are implemented (they are turned off by default). The direction and acceleration of gravity may be specified. * Fixed Makefile.am files to not delete source files during "make clean" when building in the source tree. ====================================================================== MIGRATING FROM VERSION 1.0 TO 1.1 ====================================================================== There are two new features in PyLith version 1.1 that require users to adjust input parameters from those used with PyLith 1.0. The elimination of containers in favor of the dynamic arrays of components present in the latest version of Pyre requires switching from setting the container to specifying the array of components on the command line or .cfg file. Additionally, the new implementation of output requires a completely new set of parameters. When using PyLith version 1.1 with a problem previously setup for PyLith 1.0, look for warnings about unknown components and settings in the output at the beginning of a run. ---------------------------------------------------------------------- Version 1.1.2 ---------------------------------------------------------------------- * Fixed bug in output of solution over sub-domain boundary surfaces in parallel. * Fixed Makefile.am files to include documentation files in source distribution. ---------------------------------------------------------------------- Version 1.1.1 ---------------------------------------------------------------------- * Fixed Makefile.am files to include files missing from the source distribution. ---------------------------------------------------------------------- Version 1.1.0 ---------------------------------------------------------------------- * New boundary conditions - Neumann (traction) boundary conditions - Absorbing boundary conditions via simple, tuned dampers - Dirichlet boundary conditions with displacement and/or velocity values * New bulk constitutive models - Generalized Maxwell viscoelastic model * New output implementation The output to VTK files has been completely rewritten. This new implementation includes output of physical properties and state variables associated with the bulk constitutive models, as well as output of fault information (earthquake rupture parameters and slip and traction time histories). Additionally, the VTK file with the solution no longer includes fault related values- it contains just the displacement field over the domain as one would expect. A user can now also request output of the solution over an arbitrary number of sub-domains of the domain boundary, e.g., the ground surface. For each of these different kinds of output, the frequency of output and the values included can be customized by the user. The names of the VTK files and the variable names have also been adjusted to permit animation of solutions within most VTK visualization tools. * New spatial database implementations Spatialdata includes two new spatial database implementations. The SCECCVMHDB provides a seamless interface to the SCEC CVM-H seismic velocity model for elastic material properties. The UniformDB permits creating a spatial database for uniform values using only .cfg files or the command line; this eliminates the need to create a SimpleDB database file with one location. * Dynamic arrays of components in Pyre Pyre now contains dynamic arrays of components, eliminating the need for containers for materials, boundary conditions, and faults. * Better consistency checking of input parameters - Uniqueness of material identifiers for materials and faults is enforced. - The material identifier of each cell in the mesh is checked to make sure it matches a material model. - Each boundary, interface condition, and output group is checked to make sure it exists in the mesh. * Bug fixes - Fixed bug causing segmentation fault with multiple, non-overlapping Dirichlet boundary conditions applied to vertices. - Fixed numerous bugs related to explicit time integration for dynamic problems. - Eliminated several small memory errors. - Fixed several bugs associated with writing VTK files in parallel. * Known issues - PyLith still uses much more memory that PyLith 0.8 due to the current general Sieve implementation. A much more efficient, albeit less general Sieve implementation is under development. Additionally, distribution of the mesh will also be improved in a future release. - The preconditioner for explicit time stepping provides relatively poor overall performance compared to a direct solve with traditional mass lumping. An appropriate preconditioner and traditional mass lumping will be supported in a future release. ---------------------------------------------------------------------- Version 1.0.2 ---------------------------------------------------------------------- * Performance optimizations have significantly reduced runtime and memory use relative to version 1.0.1. The default quadrature order for tetrahedral cells is now 1, which is appropriate for the default basis functions. * Added checks to verify the compatibility of quadrature scheme for solid and cohesive cells. * Bug fixes - In some cases, cohesive cells were not inserted into the finite-element mesh properly. The cells mixed together vertices from the different sides of the fault. A more efficient procedure for creating cohesive cells fixed this problem. - Cell adjacency graph was created incorrectly which resulted in a poor quality of partitioning among processors. - VTK output for meshes with N faults included cohesive cells for N-1 faults. Since VTK output does not understand cohesive cells, we now remove all cohesive cells from the VTK output. - Using the SimpleDB in Spatialdata from Python limited interpolation to the "linear" scheme instead of allowing use of the "nearest" scheme. Setting the SimpleDB property to "nearest" and "linear" now works as expected. - The reader for Spatialdata coordinate systems information did not correctly putback characters in the input stream, resulting in reading errors. The putback routines were fixed. - Fault "up" and "normal" directions remained as string arrays when passed to the module, instead of being converted to float arrays. ---------------------------------------------------------------------- Version 1.0.1 ---------------------------------------------------------------------- * Bug fixes - Cohesive cells lacked consistent orientation (inconsistent normals) in cases where cells were not ordered one side of the fault and then the other. - Final slip of zero resulted in fault slip and slip increments of Nan. - Parallel importing of meshes from LaGrit and CUBIT lacked guards against all processors reading the files. ---------------------------------------------------------------------- Version 1.0.0 ---------------------------------------------------------------------- * Code now includes both dynamic and quasi-static solutions. * Completely rewritten in Python and C++, with bindings provided by Pyrex/Pyrexembed. * Easier specification of simulations: - Parameters are all set using .cfg files (or .pml/command-line). - Mesh may be directly imported from CUBIT, LaGriT, or using PyLith mesh ASCII format. - Material properties, fault dislocations, and BC are all given using spatial databases, which are independent of mesh discretization. * Faults are now implemented using cohesive elements: - Easy specification of kinematic fault slip using a spatial database. - Cohesive elements generate offsets in the mesh corresponding to fault slip, which increase the accuracy of displacement fields near faults and facilitate visualization of fault slip. - Usage of cohesive elements will facilitate the upcoming addition of fault constitutive relations, where fault slip occurs in response to prescribed physics. * Improved implicit time-stepping eliminates need to perform more than one iteration for linear rheologies. * Code is now completely modular and object-oriented, which allows much easier addition of new features. Modules may be added without having to recompile the code. * Features present in 0.8 that are not present in 1.0 that will be added in the near future. - Traction boundary conditions - Generalized Maxwell and Power-law Maxwell viscoelastic models
About
PyLith is a finite element code for the solution of dynamic and quasi-static tectonic deformation problems.
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published
Languages
- C++ 75.6%
- Python 23.7%
- Other 0.7%