Skip to content

Releases: prisms-center/phaseField

v3.0.0

27 Mar 18:42
ea05fb4

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v2.4.2...v3.0.0

v3.0.0-rc1

15 Aug 17:39

Choose a tag to compare

v3.0.0-rc1 Pre-release
Pre-release

What's Changed

A lot has changed since the last release. In 3.0.0, we've decided to rewrite the whole library to accommodate certain features and reduce technical debt, increasing the longevity of our project. Due to this task being rather large, we've decided to release what we have for users. Certain features such as grain remapping and nucleation haven't been implemented. Additionally, the user-interface and documentation haven't been finalized or updated, so new users may struggle.

Don't worry though! We are still working on porting the other capabilities (and more!) from v2.4. These will come out in more pre-release candidates in the coming weeks. Also, during this time feel free to make issues on features or design choices you might find helpful as a user!

New Features

  • Solution solve blocks. Fields can now be solved in any order with the set_solve_block(unsigned int field_index, unsigned int solve_block) in CustomAttributeLoader. This is demonstrated in tests/automatic_tests/solution_blocks and tests/automatic_tests/cavity_flow.
  • Access to the old time states of fields. You can now access previous field values for implicit or higher order time schemes. This is demonstrated in tests/automatic_tests/allen_cahn_implicit among many other ones.
  • Geometric multigrid preconditioning. You can now select GMG as a preconditioner for linear solves. Depending on the PDE, this significantly speeds up the solver. This is demonstrated in applications/precipitate_evolution.
  • VariableContainer has been significantly optimized. Across the board, simulations should become faster now.
  • Access to different triangulation in the parameters file. You can now switch between different triangulations in the parameter file, rather the override a function. For now, rectangular and spherical meshes are the only ones supported, but more are planned to be added in another release candidate.
  • ADDITIONAL_OPTIMIZATIONS cmake flag. For fields with the same constraints and finite element system, the dealii::AffineConstraints and dealii::DoFHandlers are the same. With this flag, these additional objects are not initialized during our init and reinit steps. For adaptive mesh refinement (AMR), this leads to large performance increases and lower overhead.
  • The entire library has been rebuilt with compartmentalization in mind. This should make it easier to interface with other projects or access simulation data during runtime.
  • deal.II 9.7.0 is now supported and the minimum deal.II version has been upped to 9.6.0.
  • constV has been removed as deal.II supports all operator conversions from a double or float type to a dealii::VectorizedArray.
  • Vector fields are now allowed for postprocessed fields.
  • Several implicit Cahn-Hilliard applications are now in tests/automatic_tests
  • A fracture application is now in tests/automatics_tests
  • A incompressible Navier-Stokes cavity flow application is now in tests/automatic_tests
  • Caliper is supported as an optional dependency for better profiling.
  • Simulations now support float precision.
  • Simulations now support 1D
  • The main library now compiles with reduced template instantiations (only up to second order elements). Please use the cmake flag ADDITIONAL_DEGREES to configure with up to 6th order elements.
  • Adaptive meshing support vector fields. Note that the criterion are the same as scalar fields. We take the magnitude of the vector field for value-based criteria.
  • Postprocessed fields are now longer built on top of the main fields. Thus, it is no longer necessary to have at least one explicit field to have postprocessing.
  • A summary.log file is now generated by every simulation run. This contains more information about the simulation parameters and internal classifications that PRISMS-PF does. This is extremely helpful for debugging.
  • Implicit time-dependent fields have been added. Please see the feature notes about our implicit applications.
  • Constant fields have been added. These are evaluated during the initial condition and never updated after. For time-invariant field use these to get the best performance.
  • A single point on the mesh can now be pinned for fields to arbitrary values. Note that this may lead to undefined behavior if you don't place the point on a node (e.g., the middle of the mesh and changing the refinement) or in the case of AMR (i.e., you're point might get coarsening away).
  • VariableContainer has more getters. You can now call to get the divergence, curl, symmetric gradient, and laplacian of the field. Note that some of these don't apply for scalar fields or 1D simulations. Run your application in debug mode to check. Most of these are demonstrated in tests/automatic_tests/cavity_flow

v2.4.2

04 Aug 15:25
150d85f

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v2.4.1...v2.4.2

v2.4.1

27 Feb 20:06

Choose a tag to compare

Notes

  • Minor bug fixes.
  • Compilation has been fixed for clang, gcc, and intel-oneapi compilers that support the c++17 standard.
  • deal.II 9.5.0 or later is now required.

What's Changed

New Contributors

Full Changelog: v2.4...v2.4.1

v2.4.0

01 Nov 18:04
2de053b

Choose a tag to compare

Moderate update from 2.3. The main changes are compatibility with deal.II 9.6.0, support for the use of up to 6th order elements, improved testing and continuous integration, code auto-formatting, and bug fixes.

Features

  • deal.II 9.2.0 - 9.6.0 compatibility by @landinjm in #226 and #236
  • Adding support for 4th, 5th, and 6th order elements by @landinjm in #251
  • The local element volume is now available in equations.cc and postprocess.cc for stabilization schemes like PSPG and SUPG by @landinjm in #269
  • Fields can be pinned to 0 at any vertex in the mesh. This works in addition to the boundary conditions prescribed in parameters.prm by @landinjm in #275
  • Switched Allen-Cahn documentation to markdown by @landinjm in #263

Bug fixes

  • Fixed explicit solves for problems with both scalar and vector explicit fields by @landinjm in #208
  • Fixed multiple linear/nonlinear solves by @landinjm in #241
  • Fixed incomplete refactoring of methods in customPDE override by @landinjm in #256
  • Fixed FloodFiller unit test and fixed grainGrowth bug by @zachcroft in #224
  • Optimized vtk file read-in behavior by @fractalsbyx in #222
  • Better error handling for boundary conditions by @zachcroft in #225
  • Better error handling for model constants by @landinjm in #262
  • Deleted deprecated applications by @landinjm in #234

Miscellaneous

Tests/CI

  • Continuous integration via GitHub Actions by @landinjm in #230
  • Adding script to check that all applications work by @landinjm in #245
  • Update automatic test script to run in parallel by @landinjm in #247

New Contributors

Full Changelog: v2.3...v2.4

PRISMS-PF (Version 2.3)

04 Mar 03:18

Choose a tag to compare

Moderate update to 2.2, released in July 2021. The main changes are new applications, new postprocessing scripts, improvements in performance, bug fixes and comparibility with the latest version of deal.II.

Added Features:

  • New applications:
    • corrosion_microgalvanic: Simulates the evolution of the metal-electrolyte interface during free immersion due to the microgalvanic coupling between anodic and cathodic metals.
    • alloySolidification_uniform: Simulates solidification of a binary alloy at uniform temperature.
    • allenCahn_conserved: Simulates a system undergoing Allen-Cahn dynamics subject to global (as opposed to local) conservation.
  • New postprocessing scripts. The following Python scripts for suite post-processing suite were added:
    • plot_and_save.py - This script creates a pseudocolor (in 2D) or contour (in 3D) plot for each outputted time states and saves the serieas of plots as png images.
    • domain_stats.py - This script calculates the following quantities for each of the time states:
      • Number of domains, defined as the number or separate regions based on the values of field variable, "n". Each interconnected region for which n>0.5 is counted as a separate domain.

      • Average domain size (area in 2D and volume in 3D)

      • Standard deviation of the domain sizes

    • splitvtufiles.py - This script splits the output .vtu files into several files, allowing for parallel visualization in VisIt or ParaView.
  • New options for nucleation were added: an option to set the time interval for then nucleation is allowed and an option to allow for microstructure evolution before the first nucleation event.
  • Improved the method for grain detection when reading data from a DREAM3D microstructure file.
  • Added depencency of element degree for time step used in initial smoothing after reading from a DREAM3D microstructure file. This avoids posible numerical instabilities.
  • Added Troubleshooting/FAQ page with the most common compilation/runtime errors and the way to fix them.

Bug Fixes:

  • Fixed incomplete loop to detect dirichlet boundary conditions in init.cc
  • The code now correctly updates time-dependent non-uniform Dirichlet boundary conditions.
  • Updated input file parameters.prm for grainGrowth_dream3d application
  • Fixed several typos and errors in the documentation of built-in applications

Other Changes:

  • Updated comparibility with deal.II version 9.5.x

New Contributors

Full Changelog: v2.2...v2.3

PRISMS-PF (Version 2.2)

23 Jul 03:13
2fdbcbc

Choose a tag to compare

Moderate update to 2.1.2, released in July 2019. The biggest change in this version is the addition of new applications and post-processing scripts.

Added Features:

  • New application: corrosion. This app simulates the evolution of the metal-electrolyte interface during the anodic corrosion
    reaction. It uses the nonlinear solver functionality to solve for the electrostatic potential field at every time step.
  • New application: alloySolidification. This app simulates the dendritic solidification of a binary alloy in the dilute limit.
  • New application: spinodalDecomposition. This app simulates the evolution of a two-phase domain system following spinodal decomposition using CahnHilliard dynamics.
  • Postprocessing scripts suite. A suite of Python scripts por post-processing the results from PRISMS-PF was added. Three scripts which are integrated with VisIt via the VisIt CLI have been added. These scripts allow for the calculation of the number of domains, interfacial area (or length, in 2D) and phase fraction. A brief documentation page was added.

Bug Fixes:

  • Updated precipitate evolution documentation (Issue #134).
  • Removed elasticity terms from nucleation application documentation.
  • Updated input file parameters.prm for grainGrowth_dream3d application
  • Removed some commented lines in the equations.cc file of the alloySolidification app
  • Updated application nucleationModel_preferential. Function adaptiveRefineCriterion in customPDE.h was outdated (Issues #144, #159 and #161).

Other Changes:

  • The default parameters file name was changed to parameters.prm for compatibility with the newest recent deal.II versions.
  • Updated the conversion scripts for the vtk input files for the grainGrowth_dream3d app.

PRISMS-PF (Version 2.1.2)

31 Jul 18:46

Choose a tag to compare

Minor update to 2.1.1, released in July 2019. The biggest change in this version is a change in how the user
specifies the adaptivity criteria in the parameters file.

Added Functionality:

  • Users now specify the adaptivity criteria on a variable-by-variable basis, similar to the nucleation parameters. This new format permits more flexibility in the adaptvity criteria. Gradient-based adaptivity criteria are now supported. (Issue #56)
  • Users now have the option to have a timing summary printed out every time the code outputs, controlled via the parameters file. (Issue #132)

Bug Fixes:

  • PRISMS-PF will no longer zero out fields if the domain size is smaller than approximately 1e-5. This was related to the calculation of the inverse of the mass matrix. A tolerance to prevent a divide by zero error needs to scale with the minimum element volume. (Issue #119)
  • The code will now produce outputs/checkpoints if given a list, regardless of the number of outputs/checkpoints specified for the other frequency types. (Issue #123)

Other Changes:

  • Fixed the derivation for the mechanics and eshelbyInclusion apps with respect to surface tractions. (Issue #130)
  • Improved the error message for attempted access of a value/gradient/hessian that wasn't requested in variableAttributeLoader::loadVariableAttributes(). (Issue #136)

PRISMS-PF (Version 2.1.1)

05 Mar 02:27

Choose a tag to compare

Minor update to 2.1.1, released in March 2018. The main purpose for the release was to trigger the creation of a Zenodo DOI. A few lingering bugs were fixed.

Bug Fixes:

  • Fixed incorrect file extension for the ICs and BCs file in the fickianDiffusion app (Issue #115)
  • Added missing update to a vector containing the past values of integrated postprocessed fields (Issue #120)

Other Changes:

  • PRISMS-PF now has a DOI assigned to it (Issue #121)
  • The terminology in the output printed to the screen regarding the linear solver was updated

PRISMS-PF (Version 2.1)

21 Aug 15:41

Choose a tag to compare

Moderate-level update to v2.0, released in August 2018. The largest changes involve a restructuring of the functions in equations.cc and ICs_and_BCs.cc. Grain remapping was also introduced to permit simulations with hundreds/thousands of grains.

Changes to the example applications:

  • New application: CHAC_performance_test. This app is very similar to 'coupledCahnHilliardAllenCahn', but is 3D and was designed for scaling and performance comparisons to a finite difference code.
  • The grainGrowth app has been overhauled and now uses the grain remapping capabilities (see below). A new grainGrowth_dream3D app was added that reads in a microstructure from dream3D.
  • The singlePrecipitateKKS app has been removed in favor of the MgNd_precipitate_single_Bppp app.
  • Renamed "preferential_nucleationModel" to "nucleationModel_preferential" so that they are next to each other in file listings.
  • The source files in all of the example app directories have been changed to a ".cc" extension instead of ".h" to properly represent their contents.
  • Merged 'allenCahn_pfield' into 'allenCahn', just using a different input file.
  • Merged 'cahnHilliardWithAdaptivity' into 'cahnHilliard', just using a different input file.
  • Added an app for the CHiMaD/PFHub benchmark #3 problem.
  • Added a steady-state Allen-Cahn solver that uses the new nonlinear solver.
  • Changed the naming convention for the terms in the governing equations.

Added functionality:

  • To reflect their generality, the equation type PARABOLIC is now EXPLICIT_TIME_DEPENDENT and the equation type ELLIPTIC is now TIME_INDEPENDENT.
  • A new equation type AUXILIARY has been introduced to handle time independent equations that don't require a (non)linear solve (e.g. the chemical potential for the split form of the Cahn-Hilliard equation).
  • The core solver loop has been overhauled. AUXILIARY and TIME_INDEPENDENT equations are now updated before the EXPLICIT_TIME_DEPENDENT equations so that the EXPLICIT_TIME_DEPENDENT equations have up-to-date values for the other fields.
  • A nonlinear solver has been added. It uses Newton's method to solve for each equation and Picard's method to handle coupling between equations.
  • A grain remapping algorithm has been added so that arbitrary numbers of grains can be stored on a few order parameters. When grains are close to coming into contact, one is reassigned to a new order parameter. The initial grain structure can be read in from dream3D (or any voxelated dataset of grain ids).
  • The user can now specify a parameters file other than 'parameters.in'. The syntax is: './main -i other_parameters_file.in'

Bug fixes:

  • A typo has been fixed in the expression for 'faccV' in the precipitateEvolution app

Other changes:

  • The pdf user guide has been removed as well as the Doxygen files. A Doxygen-based user guide is now hosted on a separate site to provide a more interactive experience. The repo for the new user guide can be found here.
  • Changed how the equation dependencies are input, making them more specific and more intuitive.
  • Previously, there were separate initial condition functions and non-uniform Dirichlet BC functions for scalar fields and vector fields. These have been merged so that there is one initial condition function and one non-uniform Dirichlet BC function. These functions are now part of customPDE and have direct access to the model parameters declared in customPDE.h.
  • Renamed the functions in the equation file, removing references to 'residuals'. Instead, everything is referred to as a term in the governing equation.
  • The source file names in the app folders have been changed to .cc extensions instead of .h extensions.
  • The deal.II headers in the core library have been pruned so there aren't unneeded ones in many of the classes.

Known issues:

  • The grain remapping algorithm does not currently obey periodic BCs. This will be patched soon.
  • The CHiMaD benchmark problem 6b fails when run with more than 5 MPI processes. This might be due to the size of the coarse mesh (being too small). We're looking into it. There is no problem for benchmark 6a, which is identical except for the domain shape.
  • (Inherited from v2.0) PFields only work for scalar fields and only work when the variable with index zero is a scalar field.
  • (Inherited from v2.0) Postprocessing only works for scalar fields and only when the variable with index zero is a scalar field.