Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Suggested improvements for #85 #103

Conversation

sebastiangrimberg
Copy link
Contributor

@sebastiangrimberg sebastiangrimberg commented Oct 10, 2023

Summary of changes:

  • In ErrorIndicator:
    • Use mfem::forall for eventual GPU support
    • Remove unused normalization member and some member functions which are no longer needed.
  • In ErrorEstimator:
    • Construct RHS for projection solve using a BilinearForm to enable eventual partial assembly and construction of the RHS on GPU (the linear solve already uses this). For now, the GradientIntegrator does not support matrix-valued coefficients so the flux for the GradFluxEstimator is computed as just grad(U) instead of \epsilon grad(U). This will be fixed in libCEED integration #97.
    • Use T.OrderW() in computing the desired quadrature rule (element Jacobian order) instead of T.Order() (element order).
    • Call GetVectorValue(T, ip, ...) instead of (e, ip, ...) to avoid resetting T with a redundant call to SetIntPoint.
    • Refactor CurlFluxEstimator for code reuse between the complex-valued and real-valued variants, with changes to avoid looping over mesh elements twice.
    • Refactor GradFluxEstimator to use a vector H1 space where appropriate to take advantage of repeated basis evaluations.
    • Move all timing for estimation into errorestimation.cpp to avoid splitting it between the driver/ classes and the estimator classes.
  • Other organization:
    • Remove no longer needed functions and classes in vector.hpp and coefficient.hpp.
    • Simplify writing of indicator fields by PostProcessor, done only once for a solve.
    • Headings for error-indicators.csv are "Norm", "Maximum", "Minimum", and "Mean"
    • Make construction and use of estimator and indicator objects consistent across all drivers.

- Change the estimator class to report the array and the normalization
- Change the driver calls to better record timings, and to better output the computed fields
… csvs as the mean normalization was incorrect, also move flux projector into the error estimator files
- Drop carry the TrueDof around. This will be added in with Adaptivity when it is needed.
- Add printing of useful information to the log, including the run time.
- Redefine the reduction operator so that the global indicator computed from combining the reduced local indicators,
is equal to the average of the global estimates from each sample.
…alculations and to the matrix free calculation of the elemental norms
…ent problem special case by only normalizing if non-zero
…d add config file arguments for the estimator.
hughcars and others added 9 commits October 6, 2023 17:58
…erator now that only one field is written per Solve()

Also some corresponding simplification of ErrorIndicator class some remaining style fixes/remove std::transform over mfem::Vector.
…ding legacy LinearForm assembly and simplify, removing need for custom Coefficients and improving ComplexVector organization
palace/linalg/errorestimator.cpp Show resolved Hide resolved
@sebastiangrimberg
Copy link
Contributor Author

Merged directly into #85

@sebastiangrimberg sebastiangrimberg deleted the sjg/flux-error-estimation-dev branch May 10, 2024 21:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants