Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 015dec2

Browse filesBrowse files
committed
Enhance mesh generation and GMSH reader to support quadratic elements and improve nodal numbering mapping for quadrilateral elements
1 parent eab0927 commit 015dec2
Copy full SHA for 015dec2

File tree

2 files changed

+45
-21
lines changed
Filter options

2 files changed

+45
-21
lines changed

‎src/mesh/meshGenerationScript.js

Copy file name to clipboardExpand all lines: src/mesh/meshGenerationScript.js
+41-19Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -66,32 +66,54 @@ export class meshGeneration {
6666
JSON.stringify(this.parsedMesh.nodalNumbering)
6767
);
6868

69+
console.log(this.parsedMesh.elementTypes[3]);
70+
6971
// Check if it has quadElements or triangleElements structure from gmshReader
70-
if (quadElements && quadElements.length > 0) {
72+
if (this.parsedMesh.elementTypes[3] || this.parsedMesh.elementTypes[10]) {
7173
// Map nodal numbering from GMSH format to FEAScript format for quad elements
7274
const mappedNodalNumbering = [];
7375

7476
for (let elemIdx = 0; elemIdx < quadElements.length; elemIdx++) {
7577
const gmshNodes = quadElements[elemIdx];
7678
const feaScriptNodes = new Array(gmshNodes.length);
7779

78-
// Simple mapping for linear quad elements (4 nodes)
79-
// GMSH: FEAScript:
80-
// 3 --- 2 1 --- 3
81-
// | | | |
82-
// 0 --- 1 0 --- 2
83-
84-
feaScriptNodes[0] = gmshNodes[0]; // 0 -> 0
85-
feaScriptNodes[1] = gmshNodes[3]; // 3 -> 1
86-
feaScriptNodes[2] = gmshNodes[1]; // 1 -> 2
87-
feaScriptNodes[3] = gmshNodes[2]; // 2 -> 3
80+
// Check for element type based on number of nodes
81+
if (gmshNodes.length === 4) {
82+
// Simple mapping for linear quad elements (4 nodes)
83+
// GMSH: FEAScript:
84+
// 3 --- 2 1 --- 3
85+
// | | --> | |
86+
// 0 --- 1 0 --- 2
87+
88+
feaScriptNodes[0] = gmshNodes[0]; // 0 -> 0
89+
feaScriptNodes[1] = gmshNodes[3]; // 3 -> 1
90+
feaScriptNodes[2] = gmshNodes[1]; // 1 -> 2
91+
feaScriptNodes[3] = gmshNodes[2]; // 2 -> 3
92+
} else if (gmshNodes.length === 9) {
93+
// Mapping for quadratic quad elements (9 nodes)
94+
// GMSH: FEAScript:
95+
// 3--6--2 2--5--8
96+
// | | | |
97+
// 7 8 5 --> 1 4 7
98+
// | | | |
99+
// 0--4--1 0--3--6
100+
101+
feaScriptNodes[0] = gmshNodes[0]; // 0 -> 0
102+
feaScriptNodes[1] = gmshNodes[7]; // 7 -> 1
103+
feaScriptNodes[2] = gmshNodes[3]; // 3 -> 2
104+
feaScriptNodes[3] = gmshNodes[4]; // 4 -> 3
105+
feaScriptNodes[4] = gmshNodes[8]; // 8 -> 4
106+
feaScriptNodes[5] = gmshNodes[6]; // 6 -> 5
107+
feaScriptNodes[6] = gmshNodes[1]; // 1 -> 6
108+
feaScriptNodes[7] = gmshNodes[5]; // 5 -> 7
109+
feaScriptNodes[8] = gmshNodes[2]; // 2 -> 8
110+
}
88111

89112
mappedNodalNumbering.push(feaScriptNodes);
90113
}
91114

92115
this.parsedMesh.nodalNumbering = mappedNodalNumbering;
93-
} else if (triangleElements && triangleElements.length > 0) {
94-
this.parsedMesh.nodalNumbering = triangleElements;
116+
} else if (this.parsedMesh.elementTypes[2]) {
95117
}
96118

97119
debugLog(
@@ -480,7 +502,7 @@ export class meshGeneration {
480502
/**
481503
* Quadratic 1D elements with the following nodes representation:
482504
*
483-
* 1 --- 2 --- 3
505+
* 1--2--3
484506
*
485507
*/
486508
let columnCounter = 0;
@@ -520,11 +542,11 @@ export class meshGeneration {
520542
/**
521543
* Quadratic rectangular elements with the following nodes representation:
522544
*
523-
* 2 --- 5 --- 8
524-
* | | |
525-
* 1 --- 4 --- 7
526-
* | | |
527-
* 0 --- 3 --- 6
545+
* 2--5--8
546+
* | |
547+
* 1 4 7
548+
* | |
549+
* 0--3--6
528550
*
529551
*/
530552
for (let elementIndexX = 1; elementIndexX <= numElementsX; elementIndexX++) {

‎src/readers/gmshReaderScript.js

Copy file name to clipboardExpand all lines: src/readers/gmshReaderScript.js
+4-2Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,9 +235,11 @@ const importGmshQuadTri = async (file) => {
235235
result.boundaryNodePairs[physicalTag] = [];
236236
}
237237
result.boundaryNodePairs[physicalTag].push(nodeIndices);
238-
} else if (currentElementBlock.elementType === 2) {
238+
} else if (currentElementBlock.elementType === 2) { // Linear triangle elements (3 nodes)
239239
result.nodalNumbering.triangleElements.push(nodeIndices);
240-
} else if (currentElementBlock.elementType === 3) {
240+
} else if (currentElementBlock.elementType === 3) { // Linear quadrilateral elements (4 nodes)
241+
result.nodalNumbering.quadElements.push(nodeIndices);
242+
} else if (currentElementBlock.elementType === 10) { // Quadratic quadrilateral elements (9 nodes)
241243
result.nodalNumbering.quadElements.push(nodeIndices);
242244
}
243245

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.