Ga naar inhoud

Elementnummeringssysteem en bibliotheek met vormfuncties

De vormfunctie \(N_\alpha^e(\boldsymbol{r})\) die is geïntroduceerd in Vormfuncties en eindige-elementenbenadering heeft voor elk elementtype een specifieke vorm. Dit hoofdstuk classificeert de door FrontISTR aangeboden elementgroepen aan de hand van driecijferige elementtypenummers en beschrijft de interface van de vormfunctiebibliotheek waarmee elk element uniform kan worden behandeld. De specifieke natuurlijke coördinatenstelsels en vormfuncties van driedimensionale solide elementen, evenals de omzetting van de volgorde van middenknooppunten voor kwadratische elementen, worden behandeld in Vormfuncties voor 3D-solide elementen; richtlijnen voor de keuze van elementtypen staan in Elementbibliotheek (functies).

Elementclassificatie en naamgevingsregels

FrontISTR-elementtypen worden aangeduid met driecijferige nummers. De betekenis van elk cijfer is als volgt.

  • Eerste cijfer (elementgroep): 1 = lijnelement/vakwerk, 2 = vlak element, 3 = solide element, 5 = interface-element, 6 = balkelement, 7 = schaalelement.
  • Tweede cijfer (basisvorm): onderscheidt de geometrische vorm binnen de elementgroep (driehoek, vierhoek, tetraëder, prisma of hexaëder).
  • Derde cijfer (interpolatieorde): 1 = eerste orde (alleen hoekknooppunten), 2 = tweede orde (inclusief middenknooppunten). Als uitzondering heeft het tweeknooppunts vakwerkelement nummer 301.

De beschikbare elementen worden per elementgroep in de onderstaande tabel weergegeven.

Elementgroep Elementtype Aantal knooppunten Beschrijving
Lijnelement 111 2 2-knooppunts verbindingselement (niet beschikbaar voor spanningsanalyse)
112 3 3-knooppunts verbindingselement (niet beschikbaar voor spanningsanalyse)
Vlak element 231 3 3-knooppunts lineair driehoekselement
232 6 6-knooppunts kwadratisch driehoekselement
241 4 4-knooppunts lineair vierhoekselement
242 8 8-knooppunts kwadratisch vierhoekselement (Serendipity-familie)
Solide element 301 2 2-knooppunts vakwerkelement
341 4 4-knooppunts lineair tetraëderelement
342 10 10-knooppunts kwadratisch tetraëderelement
351 6 6-knooppunts lineair prisma-element
352 15 15-knooppunts kwadratisch prisma-element
361 8 8-knooppunts lineair hexaëderelement
362 20 20-knooppunts kwadratisch hexaëderelement (Serendipity-familie)
Interface-element 541 4×2 4-knooppunts lineair vierhoekig vlakelement (niet beschikbaar voor spanningsanalyse)
542 8×2 8-knooppunts kwadratisch vierhoekig vlakelement (niet beschikbaar voor spanningsanalyse)
Balkelement 611 2 2-knooppunts Bernoulli-Euler-balkelement (6 vrijheidsgraden per knooppunt)
641 2×2 2-knooppunts Bernoulli-Euler-balkelement (3 vrijheidsgraden per knooppunt, voor gemengde vrijheidsgraden)
Schaalelement 731 3 MITC3-driehoekig schaalelement (6 vrijheidsgraden per knooppunt)
741 4 MITC4-vierhoekig schaalelement (6 vrijheidsgraden per knooppunt)
743 9 MITC9-vierhoekig schaalelement (6 vrijheidsgraden per knooppunt)
761 3×2 MITC3-driehoekig schaalelement (3 vrijheidsgraden per knooppunt, voor gemengde vrijheidsgraden)
781 4×2 MITC4-vierhoekig schaalelement (3 vrijheidsgraden per knooppunt, voor gemengde vrijheidsgraden)

Het lineaire hexaëderelement 361 heeft meerdere formuleringen (volledige integratie, incompatibele modus, B-bar en F-bar), die via de analysebesturing worden geselecteerd. Zie Geavanceerde elementformuleringen voor details.

Balkelement 641 en schaalelementen 761/781 zijn formuleringen om structurele elementen met 6 vrijheidsgraden op dezelfde knooppunten te verbinden met solide elementen met 3 vrijheidsgraden; één structureel knooppunt wordt weergegeven door twee 3-DOF-knooppunten. De formuleringen zelf zijn identiek aan de overeenkomstige versies met 6 vrijheidsgraden (611, 731 en 741).

Vormfunctiebibliotheek

Elementberekeningsroutines (opbouw van de stijfheidsmatrix en de interne-krachtvector) hebben geen afzonderlijke routines voor elk elementtype. In plaats daarvan roepen ze de vormfunctiebibliotheek aan via een uniforme interface die het elementtypenummer fetype als argument ontvangt. De module elementInfo (fistr1/src/lib/element/element.f90) biedt de volgende functies.

  • NumOfQuadPoints(fetype): retourneert het aantal integratiepunten \(n_q\) voor het elementtype.
  • getQuadPoint(fetype, np, pos): retourneert voor integratiepunt \(i\) de natuurlijke coördinaten \(\boldsymbol{r}_i\).
  • getWeight(fetype, np): retourneert voor integratiepunt \(i\) het gewicht \(w_i\).
  • getShapeFunc(fetype, r, N): retourneert bij natuurlijke coördinaten \(\boldsymbol{r}\) de waarden van de vormfunctie \(N_\alpha^e(\boldsymbol{r})\).
  • getShapeDeriv(fetype, r, dN): retourneert de afgeleiden naar de natuurlijke coördinaten \(\partial N_\alpha^e/\partial \boldsymbol{r}\) van de vormfuncties.
  • getGlobalDeriv(fetype, n_e, r, X^e, J, dN_x): retourneert, gegeven de elementknooppuntcoördinaten \(\boldsymbol{X}^e\), de afgeleiden naar de fysieke coördinaten \(\partial N_\alpha^e/\partial \boldsymbol{x}\) en de Jacobiaandeterminant \(J\).
  • getNumberOfSubface(fetype), getSubFace(fetype, k, ...): retourneren het aantal begrenzingsvlakken van het element en de knooppuntnummers waaruit elk vlak bestaat. Ze worden gebruikt om oppervlaktebelastingen en contactoppervlakken op te bouwen.

Elke functie vertakt intern op basis van het elementtypenummer en roept de subroutines voor vormfuncties en afgeleiden daarvan aan in modules op lager niveau die voor elk elementtype beschikbaar zijn (tet4n.f90, tet10n.f90, prism6n.f90, prism15n.f90, hex8n.f90, hex20n.f90, tri3n.f90, tri6n.f90, quad4n.f90, quad8n.f90, quad9n.f90, line2n.f90, line3n.f90). Numerieke tabellen met coördinaten en gewichten van integratiepunten zijn samengebracht in quadrature.f90. Om een nieuw elementtype toe te voegen, implementeert u de overeenkomstige module op lager niveau en voegt u vertakkingen voor dit type toe aan elke functie in elementInfo.

Omzetting van de volgorde van middenknooppunten voor kwadratische driehoekselementen

Voor kwadratisch driehoekselement 232 verschilt de volgorde van de middenknooppunten tussen het HEC-MW-meshinvoerformaat (waarbij eerst de hoekknooppunten rondom het element worden geordend en daarna de middenknooppunten langs de randen 1-2, 2-3, …) en het interne FrontISTR-formaat dat door de vormfuncties in de elementbibliotheek wordt aangenomen. Het verschil tussen de twee formaten wordt direct na het laden van de mesh opgelost door hecmw2fstr_mesh_conv (fistr1/src/common/hecmw2fstr_mesh_conv.f90 en hecmw2fstr_connect_conv.c), dat de zes knooppunten volgens omzettingstabel Table232 herschikt naar \(\{1,2,3,6,4,5\}\). Omdat de omzetting rechtstreeks wordt uitgevoerd op de array waarin de elementconnectiviteit is opgeslagen, gebruiken alle daaropvolgende aanroepen van de elementbibliotheek de interne knooppuntvolgorde van FrontISTR. Bij de uitvoer van resultaten herstelt de inverse omzetting fstr2hecmw_mesh_conv vóór het schrijven het HEC-MW-formaat, zodat gebruikers voor zowel invoer als uitvoer alleen rekening hoeven te houden met het HEC-MW-formaat.

Kwadratische driedimensionale solide elementen 342 (tetraëder) en 352 (prisma) hebben vergelijkbare automatische omzettingen, terwijl 362 (kwadratische hexaëder) geen omzetting heeft. Zie Vormfuncties voor 3D-solide elementen voor de behandeling daarvan. Voor het kwadratische vlakke vierhoekselement 242 en interface-element 542 wordt geen omzetting uitgevoerd, omdat de volgorde van de middenknooppunten in het HEC-MW-invoerformaat en het interne formaat hetzelfde is.

Gerelateerde onderwerpen