Releases: prisms-center/phaseField
v3.0.0
What's Changed
- 3.0-pre Update by @landinjm in #567
- Additional optimization support for multigrid by @landinjm in #678
- Updating to doxygen awesome by @landinjm in #679
- Updating workflow to preserve prior version documentation by @landinjm in #683
- Fix
version_selectorfilename by @landinjm in #684 - Grab the submodules for the gh-pages workflow by @landinjm in #685
- Add partial installation instructions for 3.0 by @landinjm in #699
- ENH: Data input by @wband in #691
- consolidated solve blocks by @fractalsbyx in #700
- Nucleation for real this time by @fractalsbyx in #693
- Made PDEOperator utilities visible in CustomPDEs by @fractalsbyx in #702
- VTK as optional dependency by @landinjm in #703
- variable_attribute_loader functions should be public by @fractalsbyx in #709
- Update cmake & clang tidy & rewriting binary read-in by @landinjm in #708
- Fix VTK config flag by @landinjm in #719
- Explicit cast to types to prevent confusion by @landinjm in #737
- Fix for duping scalar initial conditions by @landinjm in #738
- Consolidation of solve groups and vectors in blocks (part 1/X) by @landinjm in #742
- Update PR template by @landinjm in #747
- add lower bound for rectangular doamins by @landinjm in #749
- Added Total runtime calculation and output in main.cc by @david-montiel-t in #751
- Updating timer class by @landinjm in #754
- Fix the gradient energy calculation by @jijn in #770
- CMake, C++, Python pre-commit by @landinjm in #775
- Cleaning up the CI for merge queues by @landinjm in #778
- Fix race condition in parallel build (Fix #722) by @jijn in #783
- Add DS_Store to gitignore by @jijn in #784
- [CMake] Provide out-of-source build by @jijn in #768
- Enforce pre-commit ci by @landinjm in #787
- more installation docs by @fractalsbyx in #766
- format install docs by @fractalsbyx in #789
- Fix implicit code by @jijn in #788
- Modify make command to include install option by @fractalsbyx in #791
- Fix no-commit-to-main pre-commit by @landinjm in #793
- typo fix by @jijn in #794
- Adding block vector struct by @landinjm in #804
- Organize headers by @landinjm in #805
- Run tests on macos by @jijn in #816
- Fix application related issues by @jijn in #773
- Allow initial conditions to be set via files OR programmatically by @mythreyiramesh in #818
- Upgrades to timer by @landinjm in #821
- IO Parameters - FieldOutput (1/X) by @landinjm in #800
- Fix the implicit bug by @jijn in #796
- Broken link checker by @landinjm in #846
- Configure Dependabot for GitHub Actions updates by @landinjm in #847
- Fix indentation in links.yml for checkout action by @landinjm in #852
- Bump actions/setup-python from 4 to 6 by @dependabot[bot] in #848
- Bump peter-evans/create-issue-from-file from 5 to 6 by @dependabot[bot] in #849
- Bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #850
- Bump actions/checkout from 4 to 6 by @dependabot[bot] in #851
- Fixing dead links by @landinjm in #867
New Contributors
- @jijn made their first contribution in #770
- @mythreyiramesh made their first contribution in #818
- @dependabot[bot] made their first contribution in #848
Full Changelog: v2.4.2...v3.0.0
v3.0.0-rc1
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)inCustomAttributeLoader. This is demonstrated intests/automatic_tests/solution_blocksandtests/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_implicitamong 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. VariableContainerhas 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_OPTIMIZATIONScmake flag. For fields with the same constraints and finite element system, thedealii::AffineConstraintsanddealii::DoFHandlersare 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.
constVhas been removed as deal.II supports all operator conversions from adoubleorfloattype to adealii::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_DEGREESto 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.logfile 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).
VariableContainerhas 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 intests/automatic_tests/cavity_flow
v2.4.2
What's Changed
- Update version_changes.md by @david-montiel-t in #453
- Update README.md by @david-montiel-t in #459
- Minimal fix to input file reading by @fractalsbyx in #472
- Adding missing
iostreamheaders by @landinjm in #526 - Remove quotes from reference to userInputs.output_file_type by @pdstaubl in #557
- Some typos and dead link in README.md by @fractalsbyx in #569
- Old Prisms Eshelby App Updates by @john-mcki in #556
- Update version by @landinjm in #651
New Contributors
- @pdstaubl made their first contribution in #557
- @john-mcki made their first contribution in #556
Full Changelog: v2.4.1...v2.4.2
v2.4.1
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
- Improved vtk file reading using rectilinear mesh by @supriyoumich in #286
- Shortening duration of automatic tests by @landinjm in #288
- Add vscode and zip to gitignore by @fractalsbyx in #298
- Added script to load vtu into python by @gjerdej in #297
- Updating
CMakeLists.txtby @landinjm in #315 - Update VERSION by @fractalsbyx in #320
- Refactored variableAttributeLoader by @fractalsbyx in #303
- initialize num_pp_vars which gets printed during initialization by @fractalsbyx in #321
- Clang-tidy CI by @landinjm in #282
- Fix clang-tidy errors by @landinjm in #324
- Fix clangtidy license by @landinjm in #325
- Script to update applications to newest version by @landinjm in #332
- Adding pr template by @landinjm in #333
- read the name given in parameters.prm instead of the internal variable name by @fractalsbyx in #341
- fixed nonlinearity criterion by @fractalsbyx in #343
- Update README.md by @david-montiel-t in #413
- Merging updates by @landinjm in #412
- Update README.md by @david-montiel-t in #415
- Update variableAttributeLoader.h by @fractalsbyx in #417
- Added template instantiations for vector, set, list of inserted dependencies by @fractalsbyx in #421
- Remove std::filesystem by @landinjm in #426
New Contributors
- @supriyoumich made their first contribution in #286
Full Changelog: v2.4...v2.4.1
v2.4.0
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.ccandpostprocess.ccfor 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.prmby @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
- Code auto-formatting by @landinjm in #209, #216, #229
- Suppression of warnings by @landinjm in #243 and #235, @arijitroy6 in #239, @gjerdej in #238, and @ellery-hendrix in #237
- Fixed some typos and style by @tkphd in #246
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
- @zachcroft made their first contribution in #224
- @arijitroy6 made their first contribution in #239
- @ellery-hendrix made their first contribution in #237
- @gjerdej made their first contribution in #238
- @tkphd made their first contribution in #246
- @fractalsbyx made their first contribution in #222
Full Changelog: v2.3...v2.4
PRISMS-PF (Version 2.3)
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)
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)
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:
PRISMS-PF (Version 2.1.1)
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)
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.