Skip to content

Commit fda4dd2

Browse files
authored
Added warning for periodic mesh (#98)
1 parent 2605268 commit fda4dd2

File tree

1 file changed

+13
-21
lines changed

1 file changed

+13
-21
lines changed

ngsPETSc/plex.py

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
PETSc DMPlex using the petsc4py interface.
44
'''
55
import itertools
6+
import warnings
67
import numpy as np
78
from petsc4py import PETSc
89
import netgen.meshing as ngm
@@ -47,7 +48,7 @@ def build2DCells(coordinates, sIndicies, cell_indicies, start_end):
4748
if np.linalg.det(A) > 0:
4849
cells[i] = cell
4950
else:
50-
cells[i] = np.array([cell[0],cell[2],cell[1]])
51+
cells[i] = np.array([cell[0], cell[2], cell[1]])
5152
else:
5253
raise RuntimeError("We only support triangles.")
5354
return cells
@@ -77,7 +78,7 @@ def build3DCells(coordinates, sIndicies, cell_indicies, start_end):
7778
if np.linalg.det(A) > 0:
7879
cells[i] = cell
7980
else:
80-
cells[i] = np.array([cell[0],cell[1],cell[2], cell[2]])
81+
cells[i] = np.array([cell[0], cell[1], cell[2], cell[2]])
8182
else:
8283
raise RuntimeError("We only support tets.")
8384
return cells
@@ -86,22 +87,19 @@ def build2DCells(coordinates, sIndicies, cell_indicies, start_end):
8687
"""
8788
Method used to construct 2D cells
8889
"""
89-
cStart = start_end[0]
90-
cEnd = start_end[1]
90+
cStart, cEnd = start_end
9191
cells = np.zeros((cell_indicies.shape[0], 3))
9292
for i in range(cStart,cEnd):
9393
sIndex = sIndicies[i]
9494
if len(sIndex)==3:
9595
cell = list(set(cell_indicies[i]))
9696
A = np.zeros((2,2))
97-
A[0,0] = (coordinates[cell[1]]-coordinates[cell[0]])[0]
98-
A[0,1] = (coordinates[cell[1]]-coordinates[cell[0]])[1]
99-
A[1,0] = (coordinates[cell[2]]-coordinates[cell[1]])[0]
100-
A[1,1] = (coordinates[cell[2]]-coordinates[cell[1]])[1]
97+
for i in range(2):
98+
A[i, :] = coordinates[cell[i+1]] - coordinates[cell[i]]
10199
if np.linalg.det(A) > 0:
102100
cells[i] = cell
103101
else:
104-
cells[i] = np.array([cell[0],cell[2],cell[1]])
102+
cells[i] = np.array([cell[0], cell[2], cell[1]])
105103
else:
106104
raise RuntimeError("We only support triangles.")
107105
return cells
@@ -110,27 +108,19 @@ def build3DCells(coordinates, sIndicies, cell_indicies, start_end):
110108
"""
111109
Method used to construct 3D cells
112110
"""
113-
cStart = start_end[0]
114-
cEnd = start_end[1]
111+
cStart, cEnd = start_end
115112
cells = np.zeros((cell_indicies.shape[0], 4))
116113
for i in range(cStart,cEnd):
117114
sIndex = sIndicies[i]
118115
if len(sIndex)==4:
119116
cell = list(set(cell_indicies[i]))
120117
A = np.zeros((3,3))
121-
A[0,0] = (coordinates[cell[1]]-coordinates[cell[0]])[0]
122-
A[0,1] = (coordinates[cell[1]]-coordinates[cell[0]])[1]
123-
A[0,2] = (coordinates[cell[1]]-coordinates[cell[0]])[2]
124-
A[1,0] = (coordinates[cell[2]]-coordinates[cell[1]])[0]
125-
A[1,1] = (coordinates[cell[2]]-coordinates[cell[1]])[1]
126-
A[1,2] = (coordinates[cell[2]]-coordinates[cell[1]])[2]
127-
A[2,0] = (coordinates[cell[3]]-coordinates[cell[2]])[0]
128-
A[2,1] = (coordinates[cell[3]]-coordinates[cell[2]])[1]
129-
A[2,2] = (coordinates[cell[3]]-coordinates[cell[2]])[2]
118+
for i in range(3):
119+
A[i, :] = coordinates[cell[i+1]] - coordinates[cell[i]]
130120
if np.linalg.det(A) > 0:
131121
cells[i] = cell
132122
else:
133-
cells[i] = np.array([cell[0],cell[1],cell[3], cell[2]])
123+
cells[i] = np.array([cell[0], cell[1], cell[3], cell[2]])
134124
else:
135125
raise RuntimeError("We only support tets.")
136126
return cells
@@ -284,6 +274,8 @@ def createPETScDMPlex(self, mesh):
284274
self.ngMesh = mesh.ngmesh
285275
else:
286276
self.ngMesh = mesh
277+
if len(self.ngMesh.GetIdentifications()) > 0:
278+
warnings.warn("Periodic meshes are not supported by ngsPETSc" , RuntimeWarning)
287279
comm = self.comm
288280
self.geo = self.ngMesh.GetGeometry()
289281
if self.ngMesh.dim == 3:

0 commit comments

Comments
 (0)