sort by:
Revision Author Date Message Commit Date
46e8e2b matc OpenMP fix: main.c Don't try to set number of threads without omp.h header. 27 February 2024, 12:05:43 UTC
116d2c6 Merge branch 'devel' of https://github.com/elmercsc/elmerfem into devel 27 February 2024, 09:19:24 UTC
7138468 Correct the too small buffer size for MPI_BSEND() 27 February 2024, 09:18:38 UTC
00a5cbd Update some test norms 27 February 2024, 09:03:21 UTC
49d1f8e Merge pull request #449 from ElmerCSC/HcurlStyling Hcurl styling 26 February 2024, 12:01:32 UTC
f7a7a79 Final fix to pass all Hcurl tests that passed before when modifying edge element calls 26 February 2024, 11:58:06 UTC
10db331 Fix to previous. 26 February 2024, 10:08:55 UTC
5f7a158 Correct a typo in a commentary 23 February 2024, 09:03:25 UTC
737ce4c Minor edits for Hcurl options 22 February 2024, 11:32:26 UTC
1f96c16 Make use of Hcurl elements more transparent for the user. Use mainly only one way to call them, mainly get the element style in one place, and add second kind basis support. 21 February 2024, 18:42:44 UTC
dd4157a Use more approrpiate communicator in CoilSolver 20 February 2024, 14:57:41 UTC
2d8b64f Reduce ill-conditioning of H(curl) basis of degree 2 20 February 2024, 11:44:11 UTC
751dadd Fixes for saving data on point data elements 19 February 2024, 19:02:08 UTC
aca7538 A less ill-conditioned H(curl) basis of degree 2 19 February 2024, 11:49:25 UTC
31a7c17 Merge pull request #447 from ElmerCSC/MaterialLossExponent Material loss exponent 14 February 2024, 10:39:07 UTC
ace3b8f Fix to previous 14 February 2024, 10:35:38 UTC
bbcf457 Minor edit to previous 13 February 2024, 17:25:55 UTC
05aea39 Enable new style of keywords for both harmonic and transient loss computation 13 February 2024, 17:17:14 UTC
74a1c67 Fix proposed by Juris 13 February 2024, 16:33:02 UTC
5271644 Correct quadrature for 2nd order basis and enable Nedelec's 2nd family 13 February 2024, 11:56:26 UTC
804acb7 Let ElementInfo return the basis of Nedelec's second family 13 February 2024, 11:47:08 UTC
a399e88 Enable use of material section for DIM-2 entities 08 February 2024, 15:26:26 UTC
d940512 Update SOLVER.KEYWORDS 08 February 2024, 13:01:12 UTC
d59ab29 Allow for an offset of the beam axis and fix a bug 08 February 2024, 12:53:19 UTC
8200c4e Enable saving of fourier series 06 February 2024, 15:06:11 UTC
bd214e1 Automate instead of introducing new keyword 31 January 2024, 15:03:09 UTC
f58c86c Enable material loss exponent be given in material section 31 January 2024, 14:57:11 UTC
6738af7 Merge pull request #441 from ElmerCSC/volumeprobe Add module: Probes.F90 31 January 2024, 12:55:15 UTC
90fe10f Merge branch 'devel' of https://github.com/elmercsc/elmerfem into devel 30 January 2024, 09:21:17 UTC
dd723ea Small enhancements. 30 January 2024, 09:20:25 UTC
500b4e2 Add module: Probes.F90 Contains solver module that integrates variables over bodies. 29 January 2024, 15:33:48 UTC
fcde668 Enable -distribute also for multiline expressions 26 January 2024, 15:44:53 UTC
da60c92 Enable change of size for conforming projectors 26 January 2024, 15:29:13 UTC
2f2156e Add one more block strategy to be tested 24 January 2024, 15:52:05 UTC
318a6d2 Activate finding of Material etc. by their names even in numbered mode. 24 January 2024, 15:51:44 UTC
819f606 Try out some additional block strategies without much success. 23 January 2024, 10:08:16 UTC
b4a3dc5 Minor modification for rotor automation 22 January 2024, 14:45:54 UTC
714cfa8 Merge pull request #438 from iwheel/calving_mmg Fix post merge and squashed commit for calving 22 January 2024, 09:35:30 UTC
216f037 Fix for setting bcs numbers when using mmgls. Also change file output… types take 2 22 January 2024, 09:30:45 UTC
6df130d Fixes for tentative quadratic hcurl multigrid idea 18 January 2024, 19:32:51 UTC
a564eb9 Add test case for block solution of quadratic edge elements 18 January 2024, 16:53:48 UTC
a9564a4 Squashed commit of developments related to calving of ice in St.Andrews between in years 2019-2023. ================================================================================================== - There are >300 commits over a broad spectrum of features needed in modeling of calving. - Most of the commits related to Iain Wheel's <iw43@st-andrews.ac.uk> work. - Also numerous commits by Joe Todd and Eef van Dongen - This is a huge effort! Thank you! - A squash was done in order not to mess up with the history of devel branch of Elmer over past four years. - The full history is currently available in "calving_meshadapt" branch. These are most of the individual commit messages. ------------------------------------------------- - Fix adaptive timestepping for calving. Add no angle detection for calving. Fixes to Zoltan interface for serial repartitioning. Alter ParallelRemeshParMetis test case build instructions. - Fix to allow fixed mesh regions. - Separate the test case for Zoltan and ParMetis. Improve logic for angle detection etc. - Fixes to get mmg test cases working. Added relevant keywords to sifs. Moved mmg specified angle to only when automatic angle detection is turned on. Keywords no angle detection actually turns on angle detection at the minute. - corrected MMG types header in CalvingRemeshMMG.F90 to newer headerfile structure of MMG - Fix parmmg calving routines following merge and update mmg header in calvingremeshmm that I have somehow managed to change during the merge. - Update calving user docs following merge. - Changed order of finding unfound point. This prevents unfound boundary points giving prevvalues nans into the system. - Test case now needs normal to be calculated on the full base following changes to seapressure in merge. - Update the interpolation of unfound points following merge. - Following merge remeshing proc now creates mmgloops var so need to create on all procs so interpolation has same number of variables. - Update calving test to include changes to ElmerSolver and FlowSolve. - Add calving user docs. - Update calving3D sif. - Make saving the terminus geometry to a txt file optional. - Removed tangled references that are a legacy of the previous solver for extruded meshes. - Change the order mpi execs are searched for. - Added the option to base the vertical metric on requested number of layers and the glacier thickness at a given point rather than having one prescribed vertical metric for the whole domain. - Add the option to save the binary crevasse field as predicted by CDL. - Fix bugs in front advance routine. - Three additions: add buffer to search for pointin2dpolygon, fixes to savedomainedge and fix saveterminusposition so the full terminus is saved. - Add few fixes here: set PlaneMesh MaxDOFs to reduce optimization time, fix assumption that calving and signdistances perms are identical and some fixes to checking the lateral calving. - Remove any PlaneMesh (square) elements outside 3D glacier domain. - Add options to specify crevasse penetration to induce calving. Similar to what's available in Calving3DMMG. - Update 3D calving routines to work with Gmsh 4 and to use later mpi versions. - Update ParMMG cmake so it can be found independently of Mmg. - Correct FixedElems bug. Prevent nosizereq. Not needed in mmg update (5.7). - Fix interpolation on projectable boundaries. An element mask is also required as unstructured mesh means all nodes can be in mask but elem not on boundary. - Routine to save front position at each timestep. Only serial at the minute. Would need to be rewritten to for parallel remeshing. Also need to rewrite some of these routines which call the front advance fjord walls. Should save once. - Update calving stats output to say when remeshing fails eg calving does not occur. - Fix unfound interpolation masks. Bit annoying to have the mpi reduce all call but if we don't have this need to remove the barrier in the loop. Barrier not always required but if a part searches for multiple unfounded shared nodes it is needed to stop a deadlock. Also removed enforcegroundmask prevention for calving front as I think problems there resulted from this interpolation bug. - Allow new front to be ungrounded. If GM enforced when glacier retreating inland can result in grounding areas that are ungrounded but were connected to a calve grounded area. - If there are no supp nodes then interp not after finding other nodes. Therefore use while loop to find unfoundnodes. - With triangles all 3 nodes can be on another boundary... - Prevent fixed nodes from being altered in remeshing. Seems to make it more robust... - Update to match new MeshPartition code. - Update Meshpartition so method, approach, library etc can be specified in sif. Also change Cmakelist so if Zoltan compiled Elmer check to see if ParMetis present. - When Stokes fail alter Hgrad inline with other variables rather than confining to 1.1. Secondly fix problems with solver puasing interfacing with calving pausing. - Increase remesh distance when Stokes fail. - CheckBaseFreeSurface bug fixes. - CheckBaseFreeSurface: add buffer since free surface will fail if element is close to vertical but not fully inverted. Write info statements to print since only one part will reach here. - Add subroutine to check and transfer inverted base boundary elements to lateral or front boundries. Base boundary elements can become inverted due to melting or langrangian movement. Tranfer is required to solver free surfaces. - For complex partition geometries, shared base nodes can be present on partition with no base elements so GMaskPerm = 0. If this is the case we need to check if this node has been moved on other partitions and match. - Update interp unfound shared node routines: Previous strategy failed for complex partition boundaries (often from repartitioning). Instead of using neighbour list which may not be correct especially when masks applied use global indexes. Share this gdofs and if also present on higher part then remove. - CheckFlowConvergence if first time need to access exec solvers. - CheckFlowConvergence only turn solvers back on if calving has not suppressed them... - If requested allow secondary rebalance using parmetis (has to be secondary as needs fully distributed mesh). Maybe useful as mesh rebalancing seems poor after a while with Zoltan. - Couple f fixes here. First, if the crev node lies outwith rails this can cause problems so change search for the intersect rather than the railnode (this arises from having the crevs originating from PlaneMesh with seperate coords). Second, if there is an intersect on the right need to mark it. Finally, since remeshing is no longer suppressed if no crevs comment out the not found call. - Fix checkflowconvergence mesh changes so they can keep changing after multiple fails. - Allow CheckFlowConvergence to modify mesh metric. Percentage mesh density change can be specified in sif. - Change logic when no crevasses are found. Instead of returning skip calculating of signed distance but still output IsoMesh to vtu and release IsoMesh. Previously when unreleased caused issues in switch mesh. - If daving new result every time step then make Mesh % SavesDone = 0 to enforce the creation of a new file. - Add option to save result file for each timestep. Useful if mesh changes each timestep. - Force remeshing when there is no calving and prevent calving when Stokes fail. - Add option in FlowSolve to prevent norm reaching too high a value and blowing up the Stokes because of poor mesh quality. This prevents a fatal call, allowing remeshing. - Further updates to checkflowconvergence. Base fatal call on the number of new meshes. Prevent Nonlinear Max Iterations for getting too large. Better to remesh than keep increasing. - CheckFlowConvergence add option to alter nonlinear system max iterations. - Move CheckFlowConvergence back to CalvingRemeshMMG.F90 so it can be an independant solver. Fix issues so it works with newer mmg code and changes to work with adaptive timestepping. Fix CalvingRemeshMMG logic when Stokes fail. - Fixes to GetFrontCorners update. Removed duplicate (shared) nodes and fix MPI communication. - Make sure lset variable zero when there are no crevasses. - Update GetFrontCorners. This is for when lagrangian movement of front leads to unconnected bits of terminus. This now returns the frontcorners most advanced on rails. - Prevent mem faults when not using new optional arguments. - Interpolation bug fix. If the terminus advances leaving a group of unfoundnodes DO NOT use unfound nodes for interpolation. This lead to errors in interpolation especially in the GroundedMask where unfound nodes automatically have a value of 0 (not a Nan). - Fix memfault on grounded mask boundary transfer. - Update EnforceGroundedMask to change elements which the mask is enforced on one node and become vertically aligned to change to front boundary condition. Still need to debug. - Restrict front extrapolation to bulk and front nodes. Prevent extrapolation from surface and base unfoundnodes as they wil by interpmaskreduced boundary projection. This prevents important base or surface variables (eg GroundedMask) being interpolated using bulk nodes. Remember this routine only makes things look nice (eg no gaps in vtu) any important bulk variables should be recalculated at the start of the next timestep. - Only check lateral jamming for nearest fjord wall. - If calving does not occur so remeshing is skipped need to unpause mesh deforming solvers. - If there are no crevasses exit. This rarely happens hence why it led to an error... - If inside closest crev exit. - If no new iceberg elems found exit. - Add new subroutine to check if lateral calving would jam on lateral margins. If it does suppress calving. - Forgot to add initial mindist when finding unfound boundary constraints. Also add info print statement. - Add missing allocations and bcast i forgot. - Fix for when isomesh edge elements do not insect glacier. Rare bug. Finds the nearest edge element and assigns its boundary constraint. - If using a tetra mesh not all parts have boundary elems so if parallel cannot return early. Fixed this before but the commit disappeared in the merge. - Add the option to artifically increase the movement of the lateral margin by a factor of x. - Alterations to allow fully Lagrangian mesh using FrontAdvance variable. Two changes: 1) Keyword MoveBulk = Logical True. Bulk nodes will be given front advance equal to vx, vy 2) Changes making the solver more robust so elements along lateral boundary whose closest rail node is 1 will still be advected. - Clean up parallel remeshing routines. Keep input variables as MMG3D... so it easier to swap between parallel and serial remeshing. - Zoltan update: add check to see if the mesh is distributed among all partitions. If not use Zoltan graph rebalancing as ParMetis only works for a distributed mesh. ParallelRemeshing should now use ParMetis if present while serial remeshing (CalvingRemeshMMG) will always use Zoltan graph. - Update nodeinterface following merge. - Add implicit friction direction name ost in merge. - Changes to implicit friction allowing a direction following merge. - Update parmmg name routine to recover shared nodes following the St Andrews pull request being merged into parmmg. See: https://github.com/MmgTools/ParMmg/pull/55 - Add parallel remesh test case. Ctest currently not working on my computer but works if mpirun -n 4 ElmerSolver_mpi prescribed from terminal. - Fix in SwapMesh mesh to mesh interpolation in parallel. - Fixes in MeshMetricAniso. - Create USF style subroutine to calculate metric for anisotrophic remeshing based of a remeshing levelset variable. Potentially change this to a subroutine that loops through nodes internally but would need to make changes to calving routine to allow this. Change DistributedRemeshParMMG to a variable metric rather than hardcoded. Still needs testing... - Tidy up comments in ParallelRemesh. - Create generic ParallelRemesh subroutine. Mesh switched using SwapMesh so mesh must be saved onto disk first. Metric still prescribed so need to add the option to define this in sif. Also need to add test case to Elmer repo. - Add option to automatically detect edge angle in remeshing. Unnecessary for calving where edges are prescribed but may be useful for more generic uses. - Remove unnecessary include statement in calving test subroutine. - Add HAVE_PARMETIS definition. Forgot to add this code in previous commit. - Add option to suppress calving in sif to use the solver for just remeshing. - Removed unwanted code from remeshing test subroutine. - Add option to use ParMetis if compiled to do rebalancing. Usually produces higher quality partitions which speed up parallel remeshing. - Make use of new distributed parallel remeshing routines. Solver is currently a bit of mesh. Half way between parallel and serial. No point fixing this until levelset implementation by tetra splitting is available in parallel. Test subroutine added to bottom and works for partitioned mesh in Elmer. - Remove assumption that GlobalDOFs are in asscending order for interpolation of unfound nodes. - Distributed parallel remeshing routines added. Works for testcases but needs some refining. Metric currently prescibed instead of being calculated outwith remeshing. Other options for generic solver such as edge detection should be added. - removed logical keyword that triggers implicit friction (checked by default now) - hopefully enabled implicit Coulomb friction - Only add variables to 2D mesh if present. Post merge not all these time variables are automatically initiated. - Add requirement for ParMMG installation to use parmmg related subroutines. Allows Elmer to compile using MMG but not ParMMG. - Update testcase sif to include latest keywords. - Recovery of parent elems. ParMMG doesn't seem to give a gdof for all ref node so only recover if greater than 10 (the offset). Distributed parallel remeshing working. - Update to CheckFrontBoudary: only use nodes only present on front for GDOF check. Prevents errors where partition boundary lies along boundary edge. - Add remesh but no calving scenario. Need to copy code across from CalvingRemeshMMG for remeshing failure. - Add rails to test case. Need to update sif. - Update calving parmmg to work with new sequential parmmg routine. Remeshing works but failure to recover parent elems. Need to add a case for no calving but remeshing. Also how to include the option to remesh a distributed mesh. - Major update to ParMMG remeshing code: Update the remeshing subroutine to work for a sequential case - where a gathered mesh is present on rank 0. Name changed to SequentialRemeshParMMG. Add Set_ParMMG_Mesh subroutine. Currently segfaults when recovering mesh from parmmg format when getting parent bulk elems from boundary elems. Not clear there a routine to perform this at the minute. Remeshing is successful in parallel! Next step to set up a distributed parallel remeshing routine and investigate how to get parent elems - Allow compilation with ParMMG. If ParMMG linked in use the parmmg mpif.h include statements to avoid duplications of mpi definitions. - CheckFrontBoundary: renumber mpi message tags. - Update CheckFrontBoundary: Add code to share lateral tags to ranks which do not have them. Also seems to be working as expected at the minute... - Update to CheckFrontBoundary: Since rebalancing leaves parts with areas unconnected from each other it is not ok just to check for neighbours. We need to check which group in the partition this group is connected to. To do this each group saves the GDOF of each node which has a new neighbouring part to check. When cycling through groups of front elements the GDOF is checked against those present in this group. - Add fatal call if lateral margins have a negative number of nodes to add to crevasse. - Only release crevasses if present. - Suppress calving on disconnected sections of the front: As the lateral margins advance they can be transferred to the lateral boundary when they make contact with the fjord walls. This can lead a part of the 'front' behind the this new part of the lateral margin. Fix is to suppress calving in this area until it joins the lateral margin. Method: check for unconnected sections of the front. Then mark this elements. When searching for the isomesh boundaries assign a lateral boundary tag to these marked elements. Checked for bugs on testcase but hard to replicate on a testcase so need to try on a real glacier to see if this works as planned. - Bug fix for constriction algorithm. Headlands should be detected using crevasse nodes not iterating through mesh nodes. I modified the ValidateCrevassePaths too but this is not used in Calving3D_lset. Still used in Calving3D. Surely could be replaced by ValidateNPCrevassePaths in Calving3D so is defunct? - Add addition of elements ony connected by one node to edgeline. If missing node is off the corner of the glacier this is needed. - Allow calvingremeshmmg to use latest mmg version. - Add rmc option to prevent so many levelset failures. Set very low as it prevents calving of the set volume. Rmc value is the percentage of the total mesh volume. - Fix rebalancing issues in remeshing during calving procedure: Previously Zoltan imbalance tolerance was fixed at 1.1(10%) however I found that when using 128+ cores some partitions were allocated no elems in rebalancing. To avoid this the imbalance tolerance is tightened after rebalancing fails and before it is tried again. Additionally imbalance tolerance, the tolerance change between iterations and an noniminal minimum elems required on each paritition can be set when calling the routine. Finally a small fix in LocalNumberingMeshPieces for a mesh not present on all procs. - If parallel all processes needed for parallel communication so cannot return even if they have zero boundary elements. - Forgot to remove time variable in previous commit. Need to remove it to compile - Save NewTime to reduce the number of times perms is computed. Very slow if recomputed everytime for 200000 nodes... - Calving stats given in output file. Iceberg volumes and extents for each timestep calculated. - Improve efficiency of code to remove mesh islands. Previously 30s for 250000 elems now less than a second. - Save variable on model % simulation if solvers paused. Logic is when solvers not paused and remesh fails no need to remove mesh update variables so front advances. If solvers paused and remeshing fails needs to add meshtag so solvers which have been paused know mesh has changed since they were last used even if the mesh did not change this time step. - Changes to Adjoint solvers to allow use for tetrahedral 3D meshes eg those not extruded internally by elmer. Minor changes as not all partitions will have active elements when used as a boundary solver. Previously active elements are assumed and guaranteed by vertical extrusion. Keyword added to Optimize_m1qn3Parallel - 'All Partitions Active'. Set to FALSE if not all parts presents on solver boundary. Default is FALSE. - Reset mesh update if remeshing fails so front still advances. - If remeshing fails need to make sure solvers (front advance) is not paused or model will be stuck in the position which cannot be remeshed. - If no calving occurs then turn off remeshing. If it does turn remeshing solver back on. - Fix bug for when lateral margins advance. The margin does not advance uniformly so does not follow z axis. This leads to a scenario where a IsoMesh node could be given a front tag behind one that is given a lateral tag. To ensure this doesn't happen we need to iterate through all ice elements and assign a lateral tag to an isomesh node which is vertically inline with any lateral ice elements. - Allow crevasse penetration required to induce calving to be specified. Default is full thickness. If not full thickness, a second variable 'ave_cindex_fullthickness' is created and gives the crevasse penetration prior to modification. - Correction of bug in enforce lateral margins (typo). - Add option in sif to enforce lateral margins (disruption due to remeshing see previous commits). Also fix typo. - If remeshing fails return. No point redistributing original mesh. - Reduce default mem usage. - Only recalculate timesteps (due to calving) if simulation transient. - Correct solution files saved. - Allow the addition of extra timesteps when solvers are paused to check additionally calving. This means the simulation will not be shortened by temporarily pausing solvers and reducing timesteps eg timesteps at the end of the simulations will equal timesteps in sif + number of times paused. - If calving is above threshold pause mesh update solvers and reduce timesteps. Recalculate stress and see if calving occurs. Similar to how Joe had set up the remesher in Calving3D previously. Can't pause solvers if remeshing fails. - Allow lateral calving margins to be set in sif - keywords 'Lateral Calving Margins = Logical ....'. Default is TRUE. This dictates whether the lateral margins are added in when constrictions are calculated for crevasses on lateral boundary. - Release additional Faces structures associated with parallel mesh reparitioning. - Several fixes here: 1) Mainly this is a fix allowing the glacier to advance on a narrowing fjord. In this situation the front nodes overtake the lateral corner and hit the rails so need to be transferred to the lateral boundary. This assumes the front nodes have NOT already past the front (can happen in remeshing) so needs the lateral margins to be enforced. 2) The code for the lateral corners is reverted to the original code but a fix is included to take the absolute value of the TempDist as this was previously a vector but used as a scalar. 3) Inclusion of some fatal error calls which should capture if the glacier has advanced beyond the rails. - Couple of bugs fixed in crevasse validation. 1) it is possible to get 4 edge nodes within the PlaneMesh gridzise distance and for this we want to select the node furthest down the lateral margin. 2) If the crevasse is on both lateral margins more elements will need to be broken when forming the validated crevasse. - Enforce Lateral Margins: when the glacier advances nodes stay on the rails but elements can straddle corners. Therefore when remeshing occurs new nodes can lie outside the rails and cause problem with GlacierFrontAdvance3D. This subroutine checks if any nodes are beyond the rails and 'pushes' them back onto the rails similar to enforcing a ground mask. Nodes are pushed back onto the closest point of the rail. There is now an option in the Frontadvance solver in the sif to set a 'buffer' which nodes closer to the rails than this distance are not moved. Set by: Rail Buffer = Real 0.1 (Default). Maybe need to make the call of this subroutine optional for those not invoking front advance? - Adding missing code from commit 11101081 - Fatal error if calving search distance could lead to inflow boundary being present on PlaneMesh. - Option to set PlaneMesh grid size in sif file - PlaneMesh Grid Size = - Missing calvingoccurs statement. - Add option in sif file to save mmgmeshes at pre and post levelset and pre and post remeshing. - Update expanding edge line to remove duplicates and reduce search area - if the front is at an angle prevents false positives at the back of the remeshing domain. - Prevent ZeroPolygon changing PointInPolygon inputs. - Fixes to the addition of the lateral edges to lateral crevasses. Correction prevents chain building errors. - Remove lateral crevs which the glacier corner does not lie inside. This happens when the crevs ends to the lateral side of the glacier front but since 202 element crosses the front boundary is marked as being on the front. - Expand edgeline to include unfound nodes: Sometimes glacier nodes will lie outside the edgeline as they are not properly picked up by ProjectCalving hitcount in PlaneMesh. So check if these nodes exist then expand the edgeline to include them. Important in the validation of lateral crevasses. - Zero polygon and point to reduce floating point errors. This is often a minor problem when using Calving3D_lset. Usually the removal of islands in the remeshing will prevent major errors. However any floating point errors do lead to awkwardly defined level set surface. - Couple of changes to compensate for changes in validation of lateral crevasses (c26075ad). Once validated most lateral crevasses will ONLY be made off edge nodes so should not be removed based on having no interior nodes. Secondly, this means that removing smaller crevs within larger crevs cannot be done using PointInPolygon. Instead some of the edge node must match and the area for such crevs is calculated with the smaller one removed. - Once any constrictions have been considered remove the excess lateral nodes eg only include the first node on the lateral margin. This helps to better define the level set surface providing smoother calving at the lateral margins. - Update lateral crevasse validation to work for cases where the last/first node can be on any lateral margin. Considers what margin the crevasse is on and whether it is the first or last node on that margin. Removed the assumption that on the left margin the lateral node is the first and on the right it is the last. Should work for all cases in the 2D plane now. - Fixed a fairly large memory leak. Mesh % Repartition is not deallocated in ReleaseMesh so needs to be deallocated mannually before the mesh is released and nullified. - Release IsoMeah - doesn't seem to be automatically released even when PlaneMesh % Next points towards it. - Add logical choice of whether or not to remove crevasses inside a larger crevasse. The first call of RemoveInvalidCrevasses is FALSE the second is TRUE as after constrictions are calculated since the larger crevasse may no longer be larger... - Fix sign error in RemoveInvalidCrevs. - Several fixes in establishing whether crev is below: fix bug in isbelow calculation CrevBelow now based off mean as some crevs may be a mix on a crescent shaped glacier edge remove crevs which has no edge nodes in range as they are cyclical once lateral edge nodes addded. - Lateral margin edge addition put into loop as crevs can lie on both margins. - IsoMesh boundary masks fix. There was stil some confusion over boundary masks between elements and nodes. Solution two masks created - one for elements and one for nodes. - Fix floating point errors so constrictions never happen on vertical lines. - Change so when crevs overlap smallest crev removed. - Add second call of remove invalid crevs to remove those only on edge nodes shortened by constriciton algorithm in validatenpcrevassepaths. - Change for lateral crevasses: Previously if crevasses were on lateral boundary the mesh was rotated in line with the front corner to crevasse front edge. However it was not considered that the could be shortened to the lateral boundary if there was a constriction. To overcome this the lateral margin edge nodes are added to the crevasse and mesh before constrictions are calculated. This produces more realistic calving on lateral margins. - Add missing pack statement to remove crev nodes not in edge range. - Add parallel remeshing routines - not currently working. - Remeshing reworked to loop to through an input array of hmin and hausd which will usually rectify as probelms from remeshing. Remeshing will now always occurs even if the levelset fails. Added option of a mesh mesh quality for both levelset and remeshing. - Remove crevasses which are only on the glacier edge. Can cause issues in remeshing since levelset is the distance to nearest crev which is used to define ansiotrophic remeshing element size. - Fixed unrealistic calving behaviour: Since the front is now non-projectible it is no longer enough to state the crevasse moves from left to right. Crevasses can move left to right but sit below or above the edge (when rotated). This means unrealistic calving occurs when the logic for the removal of constrictions is inverted e.g. the crevasse may run left to right (last node y > than first node y) but in as it sits above the glacier edge in the rotated plane it runs from its right to left. To fix this a second boolean is added if the glacier is above or below the glacier edge and it can be determined if the crevasse nodes move right to left or left to right (facing from that part of the glacier edge outwards). - Reallocate bdry constraints to correct nodenumbers after non useful isomesh elements are removed causing the nodenumbers to change. - Fix edgeline issue for scenario where edge could be in nodes 4 and 2 or 1 and 3. Occurs with narrow headlands. - Transfer ResetMeshUpdate, CheckFlowConvergenceMMG, EnforceGroundMask and CheckMeshQuality to CalvingGeometry from CalvingRemeshMMG so CalvingRemeshparMMG can access them too. - Update to match CalvingRemeshMMG. Next need to transfer additional subroutines in CalvingRemeshMMG to CalvingGeometry so both subroutines can access them. Then create new ParRemesh subroutine. - Fix for situation where calving front may have a level set greater than remesh distance: Parts of the front may have a high level set value if calving does not occur on this part of the terminus. Repartitioning of the mesh after remeshing assumes the whole front has been remeshed. As such, this part of the front is lost. Fix uses distance from front if level set value if greater. - Remove requirement of allocation in PointInPolygon2D. - Crop CrevassePaths to end on first and last EdgeNode. Also add GridSize buffer to avoid floating point errors. - Update of routine to find EdgeLine: addition of an allocation of an extra space if the node is found twice - eg a deadend of edgeline if not all nodes are found eg if a there are some deadend which aren't followed these nodes lie within the edgeline. While loop can be completed if the outside line if found even if not all edge nodes are found. - Fix for interpolation bug: When there is a shared node over 3 parts and one node has no supplementary nodes. Over allocation in the procs with supp nodes occurred as they were assigned space for all neighbours to provide values leading to the presence of nans. Instead they are now assigned the space for only neighbours which will send values to them. For the proc with no suppnodes it allocates for all neighbours (includings itself) but its own values are set to zero so do not effect interp. - CrevassePath Update: This fixes unrealistic crevasses which are produced on non projectible surfaces. Additionally fixes the issues of crevasses prematurely removed if they lie in the x plane of the another crev. Firstly invalid crevs are removed if they lie in another crevs polygon not if they lie with the x or y extent. This is in the subroutine RemoveInvalidCrevasses. Next the crevasses are validated. The mesh is rotated for each crevasse based on its boundary nodes which gives a better solution. This prevents unrealistic crevasses including those on non projectable parts of the front. The method for validating is the same as ValidateCrevassePaths. This is formed in a new subroutine ValidateNPCrevassePaths. Probably need to merge to the two as some point but not sure if validatecrevassepaths is needed in its current form. Finally if the crevasse boundary node lies on a lateral margin the angle of rotation is based of the edge of the front of that lateral margin. The front edges are gathered by GetFrontCorners. - Get polygons from crevassepath rather than CrevX and CrevY. This allows it be called to get polygons when validating crev paths which needs updating... - Update levelset dist starting values. A procs maxdist from the front may be smaller than the distance to the nearest crevasse. - Update LevelSet calculation. Now search to see if node is inside any polygons. If yes, this crev becomes the closest one no matter the dist. This prevents the error where a node's closed crev may not be the one which causes it to calve. Think about two headlands... - Fix in GetFrontOrientation so it works for multiple timesteps. Previously procs which had found the edge on the previous timestep has HaveLeft/HaveRight == TRUE. This resets the logicals at the start of each use. - CheckCrevassePaths: Update boundary perms after deleting nodes. - Change boundary perms to nodes. Previously the element numbers mark on the boundary although the boundary perms were used as though they were based of node numbers - see CalvingGeometry - ValidateCrevassePaths. - More robust search for edgenodes. - Add debug options MMG remeshing, option to prevent auto remeshing in levelset and save mmg meshes and sols prior and after levelset and remeshing - Calving lset updated: Previous method calculated the sign of the lset distance based of the angle of the crevasse. This caused issues with fronts that were not projectable. New method is based of creating a 2D calving polygon. Points are then assigned a negative lset distance if they are within this polygon. To create the polygon, the nodes on the PlaneMesh which are not overlapping with the Solver % Mesh are marked and saved into a ordered line. The EdgeLine is then cropped based of each crevasse's end nodes. The cropped line and the crevasse are stitched together to create a polygon. The PlaneMesh is used to create the polygon as this allows the front to be non vertical. Previous trials using Solver % Mesh boundary nodes failed as there was alway front nodes not captured by the polygon. NOTE: the edgeline is based off the PlaneMesh nodes which are not in the Solver % Mesh domain but there are nodes in the element which are. - Fix for when one proc has 0 suppnodes. Fixed parallel communication. Same as previous commit for CalvingGeometry. - Get cboss to send element no required for remeshing to a proc not involved. - Set calving boss to part with the most calving nodes. This is first step to fixing the error exposed by the island removal code. Since the calving proc does not send any non-calving elems it can in theory have some elems at the back of the glacier. When the mesh is gathered these can be an 'island' behind the rest of the calving mesh. This will result in this part of the back of the mesh to be removed. Steps to prevent this: Set cboss to the part with the most nodes marked as remeshed. This has the added benefit of increased efficeny. Completed in this commit. Get the cboss to send any nodes not marked as remeshed to be sent to a proc not invloved in calvingremeshing (TODO). - Remove mesh 'islands' not removed in levelset. - Fix to update Model % IsNeighbours which is needed to the repartitioning. This is required if the previous solver (in equation section on sif file) only uses a subsection of the mesh partitions. For example, if GroundedSolver is called before the calving solvers and one or more mesh partitions are not on the lower boundary. Model % IsNeighbours will have been modified to not include these parts. A similar scenario could apply with the upper free surface. - Subroutine to reset mesh updates and freesurfaces when terminus advancing. If this is not called terminus will not advance as NS velocity fields will drastically change in the consequent timestep. - Cut out some unused code from PlumeSolver Note this is untested. I haven't yet been able to link ODEPack and so I am unable to compile PlumeSolver.F90. For now I am taking Samuel's word for it that anything in "IF(.NOT. Calving)" can be removed. - 3D interpolation of unfound nodes from InterpMeshToMesh from terminus advance or surface readjustment in remeshing. Interpolated in 3D using bulk nodes as calving front does not have any variables only defined on its boundary. Since there can be large clusters of unfoundnodes in locations where the terminus advances no unfound node which has not already been interpolated can be a suppnode. - Remove duplicate Suppnodes. These lines were accidently removed when the subroutine was reworked. - Reduce limit of parasitic element volume in levelset. - Calculate mesh volume to allow calculation of calved ice. Only works for tetras. - Add option to change remeshing frequency to every nth timestep as defined in sif. - Allow surface modifications in remeshing and allow the removal parasitic elements in levelset - Fix for when one proc doesn't have any suppnodes - usually only when it is a shared node between 3 parts - Fix after elmerice merge. This allows the calving code to work with the updates on Mesh % MaxNGOFs. - ElmerCSC/element_n_flag for details. - MMG updates so solver can be complied with MMG 5.5 - Fix call to RemeshMMG3D - Reworked the method of interpolating unfound points. This new method means all variables present on every suppnode is iterpolated not just the common variables. Shared nodes are nore interped in a different subrountine. Calculate SuppNodes Create a mask for the variables present Calculate the weight for each SuppNode Using the above calculate the interped value for each variable InterpUnfoundSharedNode works the same but with parallel communication - Fix bug in LocalNumberingMeshPieces - Remove 2D interp of calving front as it is NO LONGER projectable. - Change InterpUnfoundPOint debug statements to correct nodes. Also change time call in front orientation get time to mesh rather than model so the model can be spat out in vtu before remeshing when debugging - Changes allowing USF_GlacierMeshMetric to be called in sif to anisotropic remeshing - Fixed duplicate nodes bug. Sometimes mmg creates a new required node which has a ref of 10. If more than one of these are created or an input node has a GDOF of 10 elmer will have two nodes with a GDOF of 10. In order to avoid this ref = GDOF - 10. - Released data structures after each call stage of meshing. Add in call for MMG debug along with failure of mmg3dls - Undo Temporarily setting unfoundnodes in InterpMaskedBCReduced for Calving Front Mask. - Issue with shared node on InterpUnfoundPoint. Varcount and varno now based of nodes in boundary element, which contains the nodenumber, and matches mask boundary id. Interp still based of suppnodes. Works for the majority of cases where varcount on the lower process was too high. However doesn't work a case where a suppnode has a lower number of variables than the rest. Could be fixed by passing a mask between parts. Questions? Why does this node have so few variables when it is on the calving front and the surface boundary also has more variables? - Readding implicit values accidently removed in previous tidying up commit - Removed print statements and tidy up. - Addressed the parallel logic. Now when two parts share a node they search for it at the same time. - Some code golf & notes on approach - Trying to fix parallel logic so shared nodes are searched by the relevant partitions at the same time. CUrrently not working for 4 parts - Order changed so varcount calculated prior to neighbour removal. This prevents bug where a shared node of the boundary won't have any neighbours on only on the required boundary so varcount will be different - Link CheckFlowConvergenceMMG to remesher, such that doing mesh adaptation but no calving if NS fails to converge. - Temporarily setting unfoundnodes in InterpMaskedBCReduced for Calving Front Mask such that code runs again, but this can give interpolation artefact. - Fix unnecessary work in GetFrontOrientation when orientation is given constant. - GetCalvingEdgeNodes now set to detect all shared boundary edges not just the the ones on the calving front - Changed 202 inputs to MMG3D_set_ridge instead of MMG3D_set_required edge - Fixed bug in Front Orientation, was HaveLeft/Right was not reset to False - GetCalvingEdgeNodes added to second call of Set_MMG3D_Mesh - Add CheckFlowConvergenceMMG, based on original CheckFlowConvergence, but changing MMG parameters. - Set_Ridge and Set_requiredEdge added to Set_MMG3D_Mesh. Also fixed a boundary node bug in GetCalvingEdgeNodes - Only calculate the Front orientation once per time step (not every time it is called) - Fixed bug in Front Orientation, normalize the orientation vector - GetCalvingEdgeNodes changed to 3d arrays in a loop. Several bugs removed. Now edges which are defined are preserved in MMG remeshing. - Calculate Front Orientation if not given constant. - Add Subroutine GetCalvingEdgeNodes which finds the shared boundary pairs (202s) at the calving boundary. At the minute the pairs list is sent to Set_MMG3D_Mesh and called in MMG3D_set_edge. Although this results in no changes in the test case. - Updating the implementation of 'rails' for glacier advance following margins. All nodes on the lateral margin and front advance now, based on a projection of the velocity onto the rails. Not checking for tangled nodes yet, so may cause convergence/ mesh quality problems in the long run. - added MMG and ParMMG include and lib directories. Compiles CalvingRemeshparMMG.f90 - Changed to up-to-date CalvingRemeshMMG code - Add ParMMG sections to makefiles and FindPARMMG. Can set the parmmg directories but still an error when trying to find mmg using parmmg - add parMMG version to update - currently error when calling parmmg .h file - Optional debug stats for element bodyIDs etc - Add options for sharp angle detection Note - these are not necessarily sensible default values but demonstrate the functionality. We probably need to replace the auto-detection by feeding in 202 elements along existing edges. Something like GetDomainEdge, except we don't need to worry about connecting them into a line. - Including reading of rails for CalvingGlacierAdvance, in order to let the glacier align with valley walls. - Unhardcode all (most?) parameters for levelset & aniso remeshing Those relating to aniostropic remeshing live in the Material section for now, because they ought to be solver agnostic. The calving level-set cutting stuff is in the CalvingRemeshMMG solver section. Also added USF_GlacierMeshMetric which computes an anisotropic metric based on distance from the calving front. For now the z-component is constant. - Add 'Default' value option to several ListGet* functions This removes the need for: Value = ListGetInteger(...,Found) IF(.NOT. Found) Value = Default Instead: Value = ListGetInteger(...., Default) - More directory creation stuff in SaveMesh - More robust straight-line detection in GetDomainEdge - InterpMaskedBCReduced -don't depend on 'remesh mesh update' existing - Calving isoline constriction detection - deal with straight lines If the numerical value of CCW is zero, causes all sorts of NaN issues. When CCW is zero, it means the angle is 180 degrees (no constriction). - GroundedSolver/GetHydrostaticLoads - deal with empty partitions With zoltan internal partitioning, it can arise that a partition has no basal nodes/elements. In this case, ParallelSumVector produces a segfault because the matrix is not associated. So, now check if current partition is active and only ParallelSumVector if so. - Add default imbalance tolerance to Zoltan (and debug options) imbalance_tol specifies the maximum permissible bulk element-wise load imbalance for repartitioning (10%) Also changed from 'refine' mode to 'repartition' because the former does a poor job of keeping partitions contiguous - Fix a problem with extra BC elems in RemeshMMG3D Get_MMG3D_Mesh sets boundary element body IDs And associated changes in CalvingRemeshMMG - Generalise CutMesh to allow only element removal - ValidateCrevassePaths - option not to ensure projectibility. - Tidy up unused stuff in Calving3D_lset - Properly compute extent of rotated calving plane mesh - Add a flag (currently False) to control aniso remeshing after cut - Optionally pass OnLeft & OnRight to ValidateCrevassePaths Checks that crevasse paths don't begin & end on the same boundary 18 January 2024, 12:48:37 UTC
bb42b48 Merge branch 'devel' of https://github.com/elmercsc/elmerfem into devel 18 January 2024, 11:23:04 UTC
fb6c61c Add CHOLMOD to "EigenSolve.F90" + allow complex pos.def. cases for CHOLMOD 18 January 2024, 11:21:21 UTC
745bc6a Baby steps for lumping in alternate version. 17 January 2024, 12:26:45 UTC
986bfcb Add two missing keywords 17 January 2024, 11:42:33 UTC
5253250 .. 16 January 2024, 10:28:29 UTC
3fa3f77 Revert accidental change. 16 January 2024, 10:24:23 UTC
e523385 Revert accidental change. 16 January 2024, 10:09:49 UTC
61d55a3 Revert accidental changes. 16 January 2024, 09:18:12 UTC
a19ba8c Merge branch 'LibraryAdaptivity' into devel 16 January 2024, 09:02:32 UTC
e4a2606 Disable library adaptivity for now, as it would require "cray pointer" feature asis. 16 January 2024, 08:57:03 UTC
f3574be Small fix in SPQR interface. 12 January 2024, 10:07:23 UTC
dff8499 Fix for the 64-bit int "big umfpack" mode. 11 January 2024, 12:53:29 UTC
45f4575 Change to 64-bit int CHOLMOD interface to enable the use of GPU's. 11 January 2024, 12:29:28 UTC
05cb52d Added CHOLMOD option to cmake configuration (-DWITH_CHOLMOD:BOOL=TRUE and provide CHOLMOD_LIBRARIES CHOLMOD_INCLUDE_DIR 11 January 2024, 10:10:09 UTC
a9f6666 introduced optional external UMFPACK for cmake configuration (set EXTERNAL_UMFPACK=ON + UMFPACK_LIBRARIES and UMFPACK_INCLUDE_DIR) 10 January 2024, 09:48:15 UTC
2a6a61a introduced optional external UMFPACK for cmake configuration (set EXTERNAL_UMFPACK=ON + UMFPACK_LIBRARIES and UMFPACK_INCLUDE_DIR) 10 January 2024, 09:39:24 UTC
4d67add Simplify previous. 29 December 2023, 11:18:10 UTC
91cdb64 Fix the phase of the current density induced by Lagrange multipliers in 2D harmonic magnetodynamics. 29 December 2023, 10:50:22 UTC
83652c0 deactivate unnecessary makedefine's 28 December 2023, 23:52:33 UTC
3f499d2 Eliminate vtu writing of some of the bigger files in tests as they are highly unnecessary. 28 December 2023, 13:56:52 UTC
247e966 Fix norms related to correction of axially symmetric weight of skin condition of MagnetoDynamics2D 28 December 2023, 13:45:42 UTC
49b7010 Make a sensitive test norm more tolerant 28 December 2023, 12:43:43 UTC
2537ec0 Automatically disable slave solver when using monolithic strategy for the coupled system. 28 December 2023, 12:30:24 UTC
685de2e Fix the broken logic of integral constraints. 28 December 2023, 11:15:47 UTC
434ad6e Minor edit for more informative output 28 December 2023, 09:34:08 UTC
09ed55a Use WITH_LUA flag 27 December 2023, 13:32:21 UTC
14fb0eb Check WITH_LUA flag 27 December 2023, 13:21:39 UTC
e420a9a Merge branch MeshLevelsForLines into devel These changes enable an internal subdivision of a mesh containing 1-D and 2-D elements. This update combines an additional change of Isosurface.F90 and the squashed commit of the following: commit cd8391c9f0190b4ee41f386d7232b99b7265020f Author: Juha Ruokolainen <jpr@ruokolainen-linux.x.csc.fi> Date: Tue Nov 21 15:03:13 2023 +0200 small fix. commit 4019e32bea4b9e7a4958b202b748bf056457aefc Author: Juha Ruokolainen <jpr@ruokolainen-linux.x.csc.fi> Date: Tue Nov 21 14:04:50 2023 +0200 Add test for mesh multiplication of line elements. commit 7516e5fc7dc182c7333d81471ced6d2097b1482d Author: Juha Ruokolainen <jpr@ruokolainen-linux.x.csc.fi> Date: Tue Nov 21 14:02:43 2023 +0200 Mesh multiplication for line elements. 27 December 2023, 12:55:44 UTC
58b3696 Minor change in test 21 December 2023, 08:41:04 UTC
ff4d487 Small fix 20 December 2023, 13:24:54 UTC
4f98ee7 Merge branch 'devel' of https://github.com/elmercsc/elmerfem into devel 18 December 2023, 14:19:59 UTC
9750ae9 Quick remedy for zero diagonals within passive elements. 18 December 2023, 14:18:39 UTC
0212f2c Renamed constant "Latent Heat" to "Latent Heat SI" only for SubShelfMelt solver 16 December 2023, 14:59:52 UTC
687d8fc Renamed constant SW density to Ocean Water Density for naming consistency 16 December 2023, 14:57:43 UTC
07e5598 minor bug fix to GlaDS in serial 16 December 2023, 14:33:02 UTC
e13c1e6 Changing default water density name in GlaDS from "water density" to "fresh water density" due to naming conflict with floatation code. 16 December 2023, 14:33:02 UTC
e94585b Automate unique naming of Lagrange Multipliers so that different solver have their own. Consider the integral constraint in postprocessing of 2D mag.dyn. 14 December 2023, 17:39:40 UTC
c444a42 Fix keyword to be consistent with documentation 13 December 2023, 11:55:02 UTC
f685ef9 Add label "lua" 13 December 2023, 05:29:01 UTC
2341f2e Merge branch 'devel' of https://github.com/elmercsc/elmerfem into devel 12 December 2023, 15:37:03 UTC
92465d7 Add metrix weight to robin BCs in MagnetoDynamics2D 12 December 2023, 14:25:43 UTC
aa275ae Initalize allocated "PrevValues" arrays to zero. 12 December 2023, 14:10:09 UTC
c0ee6f0 Change the model parameters of a test 12 December 2023, 13:46:27 UTC
d8b1c79 Bring the real-valued ILUT preconditioner back to service 12 December 2023, 13:00:28 UTC
7608e33 Merge pull request #428 from ElmerCSC/feature/homogenization-post-final Implement post processing for homogenization 12 December 2023, 07:46:47 UTC
7be50b9 Allocate/deallocate automatic for "allocatables" in Fortran. 12 December 2023, 07:22:02 UTC
1f5be3a Simplify the default behavior in timestep initialization 11 December 2023, 15:47:47 UTC
fe8913a Treat case without time extrapolation in more simple manner. 11 December 2023, 15:05:17 UTC
e40ff26 Give an error message when implementation is missing 11 December 2023, 08:38:45 UTC
bc71585 Update of beam analysis and some typo corrections 08 December 2023, 09:44:17 UTC
9200146 small cleanup. 08 December 2023, 07:31:46 UTC
5e1cbe7 Merge branch 'devel' of https://github.com/elmercsc/elmerfem into devel 08 December 2023, 05:36:27 UTC
5181673 Implement direct method for damped eigen systems. 08 December 2023, 05:34:18 UTC
4618e76 Damped eigen system test. 08 December 2023, 05:33:40 UTC
13c2e93 Minor change to Flux Integral constraint such that external field value for the Lagrange multiplier will have a correct value. 07 December 2023, 16:39:55 UTC
401b8b9 Update the right parameter section 07 December 2023, 15:08:50 UTC
be83217 Enable "Displace Mesh" for the beam solver 07 December 2023, 14:56:34 UTC
4f95af4 Echo some lumped info about view factors. 07 December 2023, 11:18:09 UTC
back to top