usnistgov / phasefield-precipitate-aging Goto Github PK
View Code? Open in Web Editor NEWPhase field model for precipitate aging in ternary analogues to Ni-based superalloys
License: Other
Phase field model for precipitate aging in ternary analogues to Ni-based superalloys
License: Other
The intermetallics are defined in the CALPHAD database with finite domains, outside of which the free energy landscape does not exist. To provide the KKS rootsolver something to do outside these domains, the free energies are constructed as piecewise functions with CALPHAD free energy inside and the Taylor series approximation outside these regions. However, no attempt has been made to produce a smooth transition, which means the code iterates indefinitely when -DCALPHAD
is provided to the compiler. W.J. Boettinger recommends using a tanh
function to interpolate. Quick prototyping shows that this approach yields smooth, continuously differentiable transitions. Further, where the CALPHAD energy slopes downward toward the boundary, tanh interpolation produces a sharp edge where the rootsolver could find a solution. It might not be the "right" solution, but it's better than searching for infinity.
Choice of only one control point for Taylor series approximation to each phase introduces unacceptable errors. Adopt technique of Poulsen and Voorhees, Early stage phase separation in ternary alloys: A test of continuum simulations: lookup table of paraboloid coefficients for each phase on 1000x1000 mesh of ternary simplex.
Documentation in the readme says to build your description via "pdflatex description.tex", but that's the not the name of the file.
More importantly, *description.tex seems to have an error in the equations in section 1 describing the free energy density (after eq. 3).
phasefield-precipitate-aging_description.pdf
Could be better. Profiling output:
% time | cum. sec | self sec | self calls | s/call | total | name |
---|---|---|---|---|---|---|
12.02 | 4.65 | 4.65 | 4548218880 | 0.00 | 0.00 | MMSP::vector<double>::operator[](int) const |
8.88 | 8.08 | 3.43 | 1 | 3.43 | 32.68 | void MMSP::update<2, double>(MMSP::grid<2, MMSP::vector<double> >&, int) |
8.46 | 11.35 | 3.27 | 61440000 | 0.00 | 0.00 | MMSP::vector<double> maskedlaplacian<2, double>(MMSP::grid<2, MMSP::vector<double> > const&, MMSP::vector<int> const&, int) |
7.71 | 14.33 | 2.98 | 307691520 | 0.00 | 0.00 | MMSP::grid<2, MMSP::vector<double> >::operator()(MMSP::vector<int>) const |
6.19 | 16.72 | 2.39 | 2521128970 | 0.00 | 0.00 | MMSP::vector<double>::operator[](int) |
4.54 | 18.47 | 1.76 | 1846149120 | 0.00 | 0.00 | MMSP::vector<int>::operator[](int) |
4.17 | 20.08 | 1.61 | 61440000 | 0.00 | 0.00 | double rootsolver::solve<double>(MMSP::vector<double>&) |
3.99 | 21.62 | 1.54 | 369254400 | 0.00 | 0.00 | MMSP::vector<int>::vector(MMSP::vector<int> const&) |
3.44 | 22.95 | 1.33 | 123002880 | 0.00 | 0.00 | MMSP::grid<2, MMSP::vector<double> >::position(int) const |
3.31 | 24.23 | 1.28 | 61440000 | 0.00 | 0.00 | parallelTangent_f(gsl_vector const*, void*, gsl_vector*) |
3.13 | 25.44 | 1.21 | 61440000 | 0.00 | 0.00 | parallelTangent_df(gsl_vector const*, void*, gsl_matrix*) |
2.99 | 26.60 | 1.16 | 430080 | 0.00 | 0.00 | MMSP::vector<double>::length() const |
2.85 | 27.70 | 1.10 | 246005760 | 0.00 | 0.00 | h(double const&) |
2.81 | 28.78 | 1.09 | 492257280 | 0.00 | 0.00 | MMSP::vector<int>::~vector() |
2.36 | 29.69 | 0.91 | 61501441 | 0.00 | 0.00 | MMSP::vector<double>::vector<double>(int, double const&) |
2.25 | 30.56 | 0.87 | 615383040 | 0.00 | 0.00 | MMSP::check_boundary(int&, int, int, int, int) |
1.94 | 31.31 | 0.75 | 738508800 | 0.00 | 0.00 | MMSP::vector<int>::operator[](int) const |
1.76 | 31.99 | 0.68 | 184320000 | 0.00 | 0.00 | dg_gam_dxNb(double, double) |
1.42 | 32.54 | 0.55 | 369254400 | 0.00 | 0.00 | MMSP::vector<int>::length() const |
Each thread creates a new rootsolver object for each node in the grid. This could be expensive -- profile to see whether allocating a grid of rootsolvers, to preserve state, would accelerate the fictitious composition updates.
Fitting a tangent plane to four phases (γ, δ, μ, and Laves) is mathematically impossible. Attempting to do so may be slowing down the rootsolver and, esp. using the CALPHAD free energies, precluding solution of the equations. Recommend dropping μ phase from the model, as it is metastable at best.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.