Add L2/H1 boundary optimization - #166
Conversation
Add code for boundary optimization. Add control file reading for the new parameters and instance variables in the SMChainedCurve class. Add the new derivativeAt method to the SMCurve class.
Add optimization to the sizer. Use the optimized segment lengths to determine mesh sizes in the sizer.
Add the elliptic arc to the template file.
Use an estimate for the change in the error with segment spacing to adjust the last segment size when it is too small.
Fix a bug so that refinement due to optimization only occurs where it is needed. When optimization is performed, the minimum mesh size is written out in verbose mode so that it can be compared to the background mesh size.
Add segment lengths and points to the MultisegmentModalCurve and the ability to use those in IntervalSearch
Fix an uninitialized array and add tests for subdividing a curve.
Remove unneeded size code. This functionality is moved to FRSegementedCurve where the size info is stored.
Use optimized segments if turned on in the smchained curve
Add string scanner class and tests.
Fix endpoint errors
Add scanner tests
Add the reading of breaks in the chain definition
Clean up unused variables. Fix the TODO items for using inputted breaks and for optimizing positions on inner and interface curves.
Add instance derivative method to chained curve.
Use Andrew's Pegasus implementation for iteration. Use limits for endpoints of chain segments by slightly offsetting those segments.
Add testing for segmented curve. Update test values due to new iterative solver differences.
Add the segmented curve tests to the test suite
Finish the implementation of finding the optimal segments along a segmented curve.
Fix allocation/deallocation bug. Fix copy/paste error in inner and interface boundary sections.
Compute the curve subdivisions created by the boundary node distribution after the mesh has been generated.
Rename the GatherboundaryNodes to ComputeBoundaryDivisionsFromBoundaryNodes to be more descriptive as to what is done.
Rename DerivativeAt to not conflict with the SMCurveClass member function.
In preparation for error estimates along boundaries, add a new polynomial interpolant subclass of SMCurve.
Change quadrature from Lobatto to Gauss to avoid segment endpoints.
Implement the boundary measure of the errors after a mesh has been generated. What's left is to implement curve joining for optimization. This means parsing the control file and using that to modify the "ends" array in ComputeBoundaryPolynomials.
Use the optimal segments along a curve to estimate size, generate, compute the error, then remesh bassed on a size estimate. Only Proof of concept. Only implemented for the outer boundary with one curve, no chain.
Make more changes to pass ifort compiler.
Add line to force compile
Remove previous comment
Looing to see why ifx fails on one test.
…QMesh into BoundaryOptimization
Change the allChains from and FTMutableObjectArray to an array of pointers to an object. Memory is now managed manually. HOHQMesh no longer has a recursion that the ifort compiler choked on.
Formatting changes
Change SPREAD function to loops because ifort would crash.
Adaptive mesh covering example using the blob.
andrewwinters5000
left a comment
There was a problem hiding this comment.
I left two comments for you to check @DavidAKopriva . Overall things look good. I will push a few cosmetic changes I made after looking over all the code. I also want to add a bit more info in the "warning" box in the docs about the experimental feature and the user set tolerance may not be achieved by the meshing process.
Remove original gatherElementBoundaryInfo that has been superseded by the one that uses the boundary approximations. Remove some commented out debug lines. Finally, remove the unused project-wise default boundary error tolerance. All optimization is now done curve-by-curve. Fix a comment: Breaks are assumed and connections are specified, rather than the other way around.
…work/HOHQMesh into BoundaryOptimization
|
@andrewwinters5000 , your changes are all fine. |
|
I added one final change to the docs to point users to the blob example. I think this is good to go. Are you ready to pull the trigger and merge @DavidAKopriva ? |
Update the adaprive mesh and news sections to show that HOHQMesh writes out the maximum errors along the boundary curves.
|
I added remarks to the adaptive and news documentation to show how the boundary errors are written out as part of the report. Beyond that, it passes all the tests, so let's deploy and see how it goes. |
This adds a feature that computes optimized boundary approximations from a user given tolerance. These errors are also included in the output after generation.
TODO:
Utilities/bootstraphas been adjusted to clone that branch of FTOL. Should be changed back to clonemainonce the FTOL changes are merged.