Problems using Non-Conforming Interfaces on Curved Surfaces
Summary
I detected multiple issues when using non-conforming interfaces on curved boundaries. My main points are:
- Acou-Mech coupling on a curved NCI produces NaN results in most cases. This might be linked to an issue created on cfs-dev: https://cfs-dev.mdmt.tuwien.ac.at/cfs/CFS/-/issues/309
- Rotating Acou-Acou interfaces appear to have multiple problems, such as occurring artifacts and stability issues, as well as a displaced field in the rotating region.
I have already discovered an issue in the projection algorithm for rectangle elements: the projection plane is computed using only the 0th node in the primary (master) element and the difference vectors to its neighbors. This plane is however not unique for out-of-plane skewed rectangle elements.
Example Input or way to reproduce
- Any AcouMech coupling on curved NCIs using Rectangle elements
- Any Acou Acou rotating interface using rectangles of similar size
What is the current bug behavior?
My discoveries are (sorry, wrote that in German):
Problem: NCIs funktionieren nicht richtig, vorallem bei gekrümmten Oberflächen
Spezialfälle:
#### AcouMech Kopplung mit NCI divergiert in vielen Fällen (nicht rotierend):
- NaN, außer bei sehr kleinem Zeitschritt divergieren feststellbar
- Kann funktionieren wenn nur Dreiecke auf beiden Seiten
- Funktioniert wenn konform
- Sobald Rechtecke dabei sind divergiert die Sim
- Rechteck-Rechteck oder Rechteck-Dreieck Kopplung funktioniert nicht, auch nicht mit unterschiedlichen Meshgrößen
- Dreieck-Dreieck Kopplung funktioniert, sogar bei gleicher Elementgröße.
#### Rotierende AcouAcou Kopplung macht probleme:
- Rechtecke machen probleme, können aber funktionieren
- Mit Rechtecken funktioniert es eher bei unterschiedlich großen Elementen.
- Kann aber auch bei gleich großen elementen funktionieren
- Es treten artefakte am Interface auf. Siehe Screenshot.
- CGAL build erzeugt (gefühlt) weniger Artefakte, aber auch
- Höhere Nietsche Faktoren stärkere produzieren Artefakte (Tendentiell ab >100)
- Gleich große Meshes am Interface erzeugen mehr Artefakte als unterschiedlich große
- Generell schauen Ergebnisse mit und ohne CGAL unterschiedlich aus
- Das Rotierte Feld sieht an bestimmten Punkten verschoben aus.
Allerdings weniger verschoben als ein Zeitschritt wäre.
Visualisiert mit Paraview Translate Filter, wobei erster und letzter Zeitschritt gut aussehen.
Siehe Screenshot.
- Elementgröße hat scheinbar wenig Einfluss auf das verschobene Feld
- Der Parameter "timeStepAlpha" beeinflusst das verschobene Feld! <... timeStepAlpha="-0.2"> ist scheinbar doch nicht
Empfehlenswert. Der default Wert zeigt kein solches Verhalten, ist jedoch sensibler bzgl. Instabilität.
#### Gekrümmte Interfaces haben oftmals Löcher
- Scheinbar entstehen die Löcher hauptsächlich beim Verschneiden im nicht-CGAL Build
- Stehen die Artefakte im Zusammenhang mit den Löchern? Dafür wäre es gut die NCIs für jeden Rotationsschritt raus zu schreiben
#### Es treten verschiedene Warnings und Error messages auf:
- Error: "Could not find a suitable volume neighbor for surface element ###### in region XXXXXX."
- Grund/Abhilfe:
- Master / Slave Regionen müssen jeweils einer PDE zugeordnet sein (getestet an AcouMech Kopplung)
- Für AcouMech war Master->Mech und Slave->Acou notwendig, damit CFS die Regions findet (sonst Error)
- Error: "Error occured during solution of linear system: Zero pivot, numerical factorization or iterative refinement problem."
-Grund/Abhilfe:
- Tritt auf bei kleinen Nietsche Faktoren (tendentiell < 20, aber unterschiedlich)
- Vermutung: Das System wird unsymmetrisch, da der Zugefügte Symmetrisierungs-Term p1-p2=0 annimmt. Bei sehr kleinen Nietsche Faktoren ist die Penalisierung zu klein und p1-p2=0 nicht mehr garantiert
- Kann auch sonst im Zusammenhang mit instabilen Artefakten am Interface auftreten
<... timeStepAlpha="-0.2"> kann helfen, macht jedoch die oben genannten Probleme.
- Warning: "Deleting named nodes which are not a continuous block at the end of the node array. In case of rotating AND static NcInterfaces this may lead to wrong results. Only proceed if you know what you are doing."
-
- Warning: "A line cannot cut more than two edges of a convex polygon. This cann occur, e.g. if two elements touch on a node or a line(2D). Ignoring this pair of elements. Still, check the intersection grid."
- Tritt auf in Verbindung mit Löchern am Interface
- Passiert nur in der nicht-CGAL Version
Im Code:
#### In MortarInterface.cc:
- Funktionen CutPolys() und CutPolysCGAL():
- Die Projektion von Master auf Slave Element ist nicht richtig für Rechteck Elemente. Es wir nur ein Knoten für die Definition eines Normalvektors verwendet. Dies ist nicht eindeutig bei verzerrten Rechtecken und wird daher Fehler produzieren.
#### Im XSD Schema, CFS_DirectCoupling.xsd:
- es ist ein Nietsche Interface definiert, wobei AcouMech Kopplung kein Nietsche verwendet.
- produziert wahrscheinlich keine Fehler aber ist verwirrend
What is the expected correct behavior?
No NaN, no diverging, no artifacts
Possible fixes
- Fix projection in MortarInterface::CutPolys() and MortarInterface::CutPolysCGAL() (same in both functions)
- Maybe there is another problem when deleting named nodes after rotation steps, in GridCFS::DeleteNamedNodes()
Edited by Patrick Heidegger