dune-fracture-phasefields merge requestshttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests2023-09-08T12:53:11Zhttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/49Modernize ductile-fracture2023-09-08T12:53:11ZSander, OliverModernize ductile-fractureIn preparation for the ECCOMAS 2022 conference let's try whether we can clean up `ductile-fracture.cc` and make it do something useful.In preparation for the ECCOMAS 2022 conference let's try whether we can clean up `ductile-fracture.cc` and make it do something useful.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/59Update the CI settings2023-09-07T11:37:40ZSander, OliverUpdate the CI settingshttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/57Removed unused includes2023-01-11T17:56:36ZGräser, CarstenRemoved unused includeshttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/58Disable ductile-fracture2023-01-11T17:50:18ZGräser, CarstenDisable ductile-fractureThis does not compile since years and thus makes the CI less usefull.This does not compile since years and thus makes the CI less usefull.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/56Remove manual implementation of operator* for FieldMatrix2022-06-02T06:28:48ZGräser, CarstenRemove manual implementation of operator* for FieldMatrixThis is now handled by `operator*` in `FieldMatrix` based on `mtv()`.
This should be merged after https://gitlab.dune-project.org/core/dune-common/-/merge_requests/1138 to avoid ambiguous overloads.This is now handled by `operator*` in `FieldMatrix` based on `mtv()`.
This should be merged after https://gitlab.dune-project.org/core/dune-common/-/merge_requests/1138 to avoid ambiguous overloads.Gräser, CarstenGräser, Carstenhttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/54Method mv for unblockeddiagonalmatrix2022-06-01T10:01:10ZSander, OliverMethod mv for unblockeddiagonalmatrixhttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/55Remove computation of the nodal weights2022-06-01T07:14:14ZSander, OliverRemove computation of the nodal weightsI don't see them used anywhere.I don't see them used anywhere.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/53Move class ScalarSumFunctional to a separate file2022-05-20T13:57:31ZSander, OliverMove class ScalarSumFunctional to a separate fileThis is a first step towards making it more general. There is a copy
of it in ductile-fracture.cc, which I would like to eliminate.This is a first step towards making it more general. There is a copy
of it in ductile-fracture.cc, which I would like to eliminate.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/52Add damping to local Newton solver2022-05-20T11:08:49ZGräser, CarstenAdd damping to local Newton solverThis adds a monotonicity line search (with tolerance) to the local Newton step.
Furthermore the global monotonicity line search is relaxed by adding a tolerance.This adds a monotonicity line search (with tolerance) to the local Newton step.
Furthermore the global monotonicity line search is relaxed by adding a tolerance.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/51Ensure and track monotonicity2022-05-18T17:18:25ZGräser, CarstenEnsure and track monotonicityThis is a collection of many interacting patches that help to ensure
monotonicity of the TNNMG iteration and add more diagnostic output to
track the latter:
* Implement `ScalarSumFunctional::operator()` in a way that is
consistent wit...This is a collection of many interacting patches that help to ensure
monotonicity of the TNNMG iteration and add more diagnostic output to
track the latter:
* Implement `ScalarSumFunctional::operator()` in a way that is
consistent with the global energy evaluation. Unfortunately
this means we cannot use the evaluation of the individual
constrained functionals.
* Implement `derivative(ScalarSumFunctional)`. The functional
is in general not differentiable, hence we return the minimal
norm entry of the subdifferential or, equivalently, the projection
of zero into the subdifferential. Finding a root of the
subdifferential is equivalent to find a root of this single-valued
map. Furthermore a subdifferential-aware bisection is equivalent
to a bisection for the single-valued map.
* To ensure monotonicity of the coarse grid correction add a
postprocessing step to the line search: After an approximate
root of the derivative has been found, check if this decreases energy.
If not, then half the step size until it does. Since we have a descent
direction this must terminate. This step is necessary because the
functional is not convex.
* When comparing energies take care to always evaluate it exactly the
same way, to avoid non-monotonicity due to inconsistent evaluation
algorithms.
* Track energy decrease of nonlinear smoother and coarse grid
correction. While the latter is guaranteed by the above changes,
it may happen that the smoother is not monotone - either because
of local solves with uncontrolled inexactness (called exact in our terminalogy, arg...)
or because of round-off-errors.
* Add more diagnostic output to the table:
* Number of subdifferential evaluations during line search.
Hint on interpretation: This will be at least 2+#bisectionSteps.
* Number of functional evaluations during line search.
Hint on interpretation: This will be 2+#reductionSteps,
where #reductionSteps is the number of halving steps done
to ensure monotonicity (see above).
* Energy after TNNMG step with 16 digits.
* Energy after nonlinear pre-smoothing with 16 digits.
* If the nonlinear pre-smoother is not monotone:
Relative monotonicity violation of the smoother with an additional
`X` marker for easier grepping.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/50Modularize the Decomposed::DamagedElasticEnergyDensity class2022-05-18T09:41:12ZSander, OliverModularize the Decomposed::DamagedElasticEnergyDensity classThe current `Decomposed::DamagedElasticEnergyDensity` class does too many
things together:
* It implements the St.Venant-Kirchhoff density in terms of the strain
eigenvalues, split into tensile and compressive parts as described
by ...The current `Decomposed::DamagedElasticEnergyDensity` class does too many
things together:
* It implements the St.Venant-Kirchhoff density in terms of the strain
eigenvalues, split into tensile and compressive parts as described
by Miehe, Welschinger, Hofacker.
* It degrades the tensile part with a hard-wired degradation function.
* It transforms the degraded density and its gradient and Hesse matrix
from spectral to physical coordinates.
* It contains a part of the AT1 damage functional.
This merge request modularizes it.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/48Patches to speed up TNNMG for materials with a spectral split.2022-05-07T15:09:06ZSander, OliverPatches to speed up TNNMG for materials with a spectral split.I profiled TNNMG for brittle-fracture with a spectrally split material, and a few ideas for improvements came to my mind. They are collected in this merge request.I profiled TNNMG for brittle-fracture with a spectrally split material, and a few ideas for improvements came to my mind. They are collected in this merge request.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/47Make TNNMG faster2022-04-12T13:29:51ZSander, OliverMake TNNMG fasterFor 2d brittle-fracture problems, TNNMG is too slow. For load steps away from the actual fracture, the operator-splitting algorithm is twice as fast, if not faster.
I measured the TNNMG performance with the gprof profiler. About a qua...For 2d brittle-fracture problems, TNNMG is too slow. For load steps away from the actual fracture, the operator-splitting algorithm is twice as fast, if not faster.
I measured the TNNMG performance with the gprof profiler. About a quarter of the time is spent in each of the three methods: the presmoother, `IntegralDirectionalRestriction::subDifferential`, and `IntegralFunctionalConstrainedLinearization::bind`. I think there a still ways to make the code quite a bit faster; here are patches and ideas:
- [x] `IntegralFunctionalConstrainedLinearization::addRowTransposedXMatrixXRow`: Exploit that the result matrix is symmetric.
- [x] `IntegralDirectionalRestriction::subDifferential`: Precompute the product `evaluationMatrix * direction`.
- [x] Use gradient-aware truncation. Early tests suggest that this reduces the number of iterations at least when the load is low.
- [ ] Use a different line search algorithm. Calls to `subDifferential` are not cheap (though much less expensive with the patch mentioned above), and we know that the functional is smooth.
- [ ] Exploit matrix symmetry in `IntegralCoordinateRestriction::addHessian`.
- [x] Rewrite the `evaluationMatrix` to contain derivatives of scalar shape functions, rather than lineared strains. I believe that several parts of the algorithm are limited by the memory speed, rather than by computing speed. Storing only shape function gradients instead of strains would reduce the required memory bandwidth considerably. It would also reduce our overall memory requirements which, according to Daniel's measurements, are nothing to brag with either.
- [x] Even the entries of the `evaluationMatrix` are sparse. In 2d, the entries are 4x3 matrices, but 7 of the 12 are always zero. If the matrix-vector multiplication becomes a bottle-neck then using a dedicated matrix type may speed up the code.
- [ ] Use `SymmetricMatrix` objects for small symmetric objects. Not sure how much this would buy us.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/46Add CrackSurfaceAssembler and remove PDElab dependency2022-01-12T14:12:30ZGräser, CarstenAdd CrackSurfaceAssembler and remove PDElab dependencyThis allows to get rid of the PDElab assembler.
The MR also removes the old unused assemblers and the PDELab dependencyThis allows to get rid of the PDElab assembler.
The MR also removes the old unused assemblers and the PDELab dependencyhttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/45Drop obsolete members of energy densities2022-01-07T13:55:58ZGräser, CarstenDrop obsolete members of energy densitiesThe crack surface density parameters are part of CrackSurfaceDensity
now.The crack surface density parameters are part of CrackSurfaceDensity
now.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/44Use degree() instead of deprecated CHILDREN for typetree nodes2021-12-21T10:50:35ZGräser, CarstenUse degree() instead of deprecated CHILDREN for typetree nodesThis avoids some deprecation warnings.This avoids some deprecation warnings.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/43Feature/extend cracksurfacedensity2021-12-21T10:42:27ZGräser, CarstenFeature/extend cracksurfacedensityIncorporate g_c and l into CrackSurfaceDensityIncorporate g_c and l into CrackSurfaceDensityhttps://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/42Let PreconditionedLocalSolver store the local matrix2021-12-15T09:39:09ZSander, OliverLet PreconditionedLocalSolver store the local matrixThe preconditioned local solver needs the local block of the
linear elasticity matrix, for use as its quadratic model.
Previously, this matrix was extracted from the global
Hesse matrix, with some tricks to account for the scaling
of tha...The preconditioned local solver needs the local block of the
linear elasticity matrix, for use as its quadratic model.
Previously, this matrix was extracted from the global
Hesse matrix, with some tricks to account for the scaling
of that global matrix with the residual stiffness k.
With this patch, there is now a dedicated local solver object
for each vertex, and each objects stores the correct local
matrix. This simplifies the code a little.https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/39Use CrackSurfaceDensity in BrittleFractureLocalOperator2021-11-29T20:07:56ZSander, OliverUse CrackSurfaceDensity in BrittleFractureLocalOperatorThe BrittleFractureLocalOperator class still used the old
formula with 'psi_c', which lead to subtle bugs in various
situations. In other parts of this module it has already
been replaced by the CrackSurfaceDensity class.
This commit co...The BrittleFractureLocalOperator class still used the old
formula with 'psi_c', which lead to subtle bugs in various
situations. In other parts of this module it has already
been replaced by the CrackSurfaceDensity class.
This commit completes the conversion of the module.
Warning: As some of the psi_c settings were computed
incorrectly in the parameter files, this patch may slightly
alter your problem specifications!https://gitlab.mn.tu-dresden.de/paraphase/dune-fracture-phasefields/-/merge_requests/40Solve displacement subproblem first in OS2021-11-19T12:42:51ZGräser, CarstenSolve displacement subproblem first in OS