Skip to content

Commit cc3b096

Browse files
committed
Use different mesh for disc without interaction domain
Signed-off-by: Christian Glusa <[email protected]>
1 parent 3ee28f1 commit cc3b096

File tree

34 files changed

+231
-181
lines changed

34 files changed

+231
-181
lines changed

base/PyNucleus_base/DenseLinearOperator_{SCALAR}.pxi

+24
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,30 @@ cdef class {SCALAR_label}Dense_VectorLinearOperator({SCALAR_label}VectorLinearOp
196196
y[i, k] += self.data[i, j, k]*x[j]
197197
return 0
198198

199+
cdef INDEX_t matvecTrans(self,
200+
{SCALAR}_t[::1] x,
201+
{SCALAR}_t[:, ::1] y) except -1:
202+
cdef:
203+
INDEX_t i, j, k
204+
for i in range(self.num_rows):
205+
for k in range(self.vectorSize):
206+
y[i, k] = 0.
207+
for j in range(self.num_columns):
208+
for k in range(self.vectorSize):
209+
y[i, k] += self.data[j, i, k]*x[j]
210+
return 0
211+
212+
cdef INDEX_t matvecTrans_no_overwrite(self,
213+
{SCALAR}_t[::1] x,
214+
{SCALAR}_t[:, ::1] y) except -1:
215+
cdef:
216+
INDEX_t i, j, k
217+
for i in range(self.num_rows):
218+
for j in range(self.num_columns):
219+
for k in range(self.vectorSize):
220+
y[i, k] += self.data[j, i, k]*x[j]
221+
return 0
222+
199223
def isSparse(self):
200224
return False
201225

base/PyNucleus_base/utilsFem.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1073,10 +1073,8 @@ def process(self, override={}):
10731073
if params['test']:
10741074
import psutil
10751075
p = psutil.Process()
1076-
try:
1076+
if hasattr(p, 'cpu_affinity'):
10771077
p.cpu_affinity(list(range(psutil.cpu_count())))
1078-
except AttributeError:
1079-
pass
10801078
self._timer = TimerManager(self.logger, comm=self.comm, memoryProfiling=params['showMemory'])
10811079

10821080
for fun in self.processHook:
@@ -1450,12 +1448,12 @@ def __init__(self, name, params=[]):
14501448
elif p == int:
14511449
fields.append('[+-]?[0-9]+')
14521450
elif p == float:
1453-
fields.append('[+-]?[0-9]+\.[0-9]*')
1451+
fields.append(r'[+-]?[0-9]+\.[0-9]*')
14541452
elif p == bool:
14551453
fields.append('True|False')
14561454
else:
14571455
raise NotImplementedError()
1458-
self.regexp = re.compile(name+'\(?'+','.join(['\s*(' + f + ')\s*' for f in fields])+'\)?')
1456+
self.regexp = re.compile(name+r'\(?'+','.join([r'\s*(' + f + r')\s*' for f in fields])+r'\)?')
14591457

14601458
def match(self, s):
14611459
return self.regexp.match(s) is not None
@@ -1516,6 +1514,8 @@ def __call__(self):
15161514
needToBuild = True
15171515
else:
15181516
dependencyLogger.log(self.logLevel, 'Values for {} are identical: \'{}\' == \'{}\''.format(prop, oldValue, newValue))
1517+
elif newValue is None and oldValue is None:
1518+
dependencyLogger.log(self.logLevel, 'Values for {} are identical: \'{}\' == \'{}\''.format(prop, oldValue, newValue))
15191519
elif newValue != oldValue:
15201520
cached_args[prop] = newValue
15211521
dependencyLogger.log(self.logLevel, 'Values for {} differ: \'{}\' != \'{}\', calling \'{}\''.format(prop, oldValue,

drivers/testDistOp.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,13 @@
6969
h=h)
7070
elif nPP.domain == 'disc':
7171
if d.horizonToMeshSize <= 0. or nPP.kernel.horizon.value == np.inf:
72-
h = 0.04/2**(nPP.noRef-3)
72+
h = 0.04/2**(nPP.noRef-4)
7373
else:
7474
h = nPP.kernel.horizon.value/d.horizonToMeshSize/np.sqrt(2)
7575
mesh, _ = nonlocalMeshFactory(nPP.domain,
7676
kernel=nPP.kernel,
7777
boundaryCondition=HOMOGENEOUS_DIRICHLET,
78-
h=h,
78+
hTarget=h,
7979
max_volume=h**2/2,
8080
projectNodeToOrigin=False)
8181
elif d.domain == 'gradedDisc':

fem/PyNucleus_fem/factories.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def __call__(self, mesh, *args, **kwargs):
145145

146146
# meshes
147147
from . mesh import (simpleInterval, simpleSquare, simpleLshape, simpleBox, box,
148-
circle, graded_circle, cutoutCircle, twinDisc, dumbbell, wrench,
148+
uniform_disc, circle, graded_circle, cutoutCircle, twinDisc, dumbbell, wrench,
149149
Hshape, ball, rectangle, crossSquare,
150150
gradedSquare, gradedBox,
151151
squareWithCircularCutout, boxWithBallCutout,
@@ -178,6 +178,7 @@ def __call__(self, mesh, *args, **kwargs):
178178
meshFactory.register('squareWithInteraction', squareWithInteractions, 2)
179179
meshFactory.register('simpleLshape', simpleLshape, 2, aliases=['Lshape', 'L-shape'])
180180
meshFactory.register('circle', circle, 2, aliases=['disc', 'unitDisc', 'ball2d', '2dball'])
181+
meshFactory.register('uniform_disc', uniform_disc, 2, aliases=['uniform_ball2d', '2dball_uniform'])
181182
meshFactory.register('graded_circle', graded_circle, 2, aliases=['gradedCircle'])
182183
meshFactory.register('discWithInteraction', discWithInteraction, 2)
183184
meshFactory.register('twinDisc', twinDisc, 2)

fem/PyNucleus_fem/mesh.py

+18-4
Original file line numberDiff line numberDiff line change
@@ -720,10 +720,7 @@ def discWithInteraction(radius, horizon, h=0.25, max_volume=None, projectNodeToO
720720
innerRadius=radius,
721721
max_volume=max_volume)
722722
else:
723-
return circle(n,
724-
radius=radius,
725-
max_volume=max_volume,
726-
projectNodeToOrigin=projectNodeToOrigin)
723+
return uniform_disc(radius=radius)
727724

728725

729726
def gradedDiscWithInteraction(radius, horizon, mu=2., h=0.25, max_volume=None, projectNodeToOrigin=True):
@@ -946,6 +943,23 @@ def Lshape(d):
946943
return mesh2d(vertices, cells)
947944

948945

946+
def uniform_disc(radius=1., **kwargs):
947+
points = [(0., 0.)]
948+
cells = []
949+
n = 6
950+
for i in range(n):
951+
points.append((radius*np.cos(i*2*np.pi/n), radius*np.sin(i*2*np.pi/n)))
952+
for i in range(1, len(points)-1):
953+
cells.append((0, i, i+1))
954+
cells.append((0, len(points)-1, 1))
955+
956+
mesh = mesh2d(np.array(points, dtype=REAL),
957+
np.array(cells, dtype=INDEX))
958+
from . meshCy import radialMeshTransformer
959+
mesh.setMeshTransformation(radialMeshTransformer())
960+
return mesh
961+
962+
949963
def circle(n, radius=1., returnFacets=False, projectNodeToOrigin=True, **kwargs):
950964
from meshpy.triangle import MeshInfo, build
951965
mesh_info = MeshInfo()

nl/PyNucleus_nl/clusterMethodCy.pyx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1193,7 +1193,7 @@ cdef class tree_node:
11931193
for i in range(self.coefficientsDownVec.shape[0]):
11941194
for l in range(self.coefficientsDownVec.shape[1]):
11951195
y[dof, l] += self.value[componentNo, k, i]*self.coefficientsDownVec[i, l]
1196-
k += 1
1196+
k += 1
11971197
else:
11981198
for c in self.children:
11991199
for i in range(c.transferOperator.shape[0]):

tests/cache_runFractional.py--domaindisc--sconst(0.25)--problemconstant--elementP0--solvercg-mg--matrixFormatH2

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.13400055486309811
4-
L2 error: 0.0530257052232404
5-
L2 error interpolated: 0.017212921206495174
6-
Linf error interpolated: 0.04041162523460817
7-
relative Hs error: 0.09110983276196648
8-
relative L2 error: 0.04257104506006856
9-
relative interpolated L2 error: 0.013812422648097445
10-
relative interpolated Linf error: 0.0469573643243436
3+
Hs error: 0.13190712640577038
4+
L2 error: 0.05014710987068258
5+
L2 error interpolated: 0.01711413239312614
6+
Linf error interpolated: 0.042577264837976025
7+
relative Hs error: 0.08968646614351379
8+
relative L2 error: 0.04025999965392971
9+
relative interpolated L2 error: 0.013732997326192832
10+
relative interpolated Linf error: 0.04947323085350075
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconst(0.25)--problemconstant--elementP0--solvercg-mg--matrixFormatdense

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.1413324571924916
4-
L2 error: 0.05318118990883034
5-
L2 error interpolated: 0.017767471098211238
6-
Linf error interpolated: 0.0402337391432151
7-
relative Hs error: 0.0960949493963012
8-
relative L2 error: 0.042695874056279615
9-
relative interpolated L2 error: 0.014257418438872843
10-
relative interpolated Linf error: 0.046750664842368186
3+
Hs error: 0.1403179566911808
4+
L2 error: 0.050326820499312745
5+
L2 error interpolated: 0.01771990305453638
6+
Linf error interpolated: 0.042613546494036036
7+
relative Hs error: 0.09540516888676681
8+
relative L2 error: 0.0404042781550261
9+
relative interpolated L2 error: 0.014219089561682037
10+
relative interpolated Linf error: 0.04951538881627348
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconst(0.25)--problemconstant--elementP1--solvercg-mg--matrixFormatH2

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.180573736324132
4-
L2 error: 0.05758412182442717
5-
L2 error interpolated: 0.017270441090162007
6-
Linf error interpolated: 0.08537962523475567
7-
relative Hs error: 0.12277593129747377
8-
relative L2 error: 0.04623071460552205
9-
relative interpolated L2 error: 0.013926906465042695
10-
relative interpolated Linf error: 0.09919993999254309
3+
Hs error: 0.18185981625380002
4+
L2 error: 0.05782159835474865
5+
L2 error interpolated: 0.017338240822480377
6+
Linf error interpolated: 0.08846749274971044
7+
relative Hs error: 0.12365036444762217
8+
relative L2 error: 0.04642136976098792
9+
relative interpolated L2 error: 0.013982271432707184
10+
relative interpolated Linf error: 0.1027876375415333
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconst(0.25)--problemconstant--elementP1--solvercg-mg--matrixFormatdense

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.18352538491659642
4-
L2 error: 0.05767242742488538
5-
L2 error interpolated: 0.01741375173232188
6-
Linf error interpolated: 0.08492371703495766
7-
relative Hs error: 0.12478282007421258
8-
relative L2 error: 0.04630160968707422
9-
relative interpolated L2 error: 0.014042472355826032
10-
relative interpolated Linf error: 0.09867023438728048
3+
Hs error: 0.1839933908571473
4+
L2 error: 0.057885119791182965
5+
L2 error interpolated: 0.017437708550776834
6+
Linf error interpolated: 0.08802653240222696
7+
relative Hs error: 0.12510102728625555
8+
relative L2 error: 0.046472367176700564
9+
relative interpolated L2 error: 0.014062486305142948
10+
relative interpolated Linf error: 0.10227529938252666
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconst(0.75)--problemconstant--elementP1--solvercg-mg--matrixFormatH2

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.05860698560008363
4-
L2 error: 0.0021486188473719033
5-
L2 error interpolated: 0.001290467850492567
6-
Linf error interpolated: 0.0014304080053778728
7-
relative Hs error: 0.06761001433404402
8-
relative L2 error: 0.004579199453127269
9-
relative interpolated L2 error: 0.0027517017386181047
10-
relative interpolated Linf error: 0.003417393926565291
3+
Hs error: 0.059725648882225826
4+
L2 error: 0.0022274080583107514
5+
L2 error interpolated: 0.0013188143633481523
6+
Linf error interpolated: 0.0017403068951004769
7+
relative Hs error: 0.06890052330266251
8+
relative L2 error: 0.004747117328410178
9+
relative interpolated L2 error: 0.002812374690576744
10+
relative interpolated Linf error: 0.004157774698768523
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconst(0.75)--problemconstant--elementP1--solvercg-mg--matrixFormatdense

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.05957553465651644
4-
L2 error: 0.0021947415915123092
5-
L2 error interpolated: 0.0013546361081100044
6-
Linf error interpolated: 0.001421361318103019
7-
relative Hs error: 0.0687273489814099
8-
relative L2 error: 0.004677497597073466
9-
relative interpolated L2 error: 0.002888529561165253
10-
relative interpolated Linf error: 0.0033957804470319086
3+
Hs error: 0.060319591944560894
4+
L2 error: 0.002256341047519089
5+
L2 error interpolated: 0.0013588886928846355
6+
Linf error interpolated: 0.0017321548640112927
7+
relative Hs error: 0.06958570611059765
8+
relative L2 error: 0.004808780162896719
9+
relative interpolated L2 error: 0.002897833291318784
10+
relative interpolated Linf error: 0.004138298646181701
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconstantNonSym(0.25)--problemconstant--elementP1--solvergmres-jacobi--matrixFormatH2

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.18057373621467981
4-
L2 error: 0.057584121294463754
5-
L2 error interpolated: 0.017270390898283507
6-
Linf error interpolated: 0.08537914587854994
7-
relative Hs error: 0.12277593122305488
8-
relative L2 error: 0.046230714180047344
9-
relative interpolated L2 error: 0.013926865990245698
10-
relative interpolated Linf error: 0.09919938304342657
3+
Hs error: 0.18185981616987204
4+
L2 error: 0.057821602128125614
5+
L2 error interpolated: 0.01733821843880583
6+
Linf error interpolated: 0.08846702811244911
7+
relative Hs error: 0.12365036439055775
8+
relative L2 error: 0.04642137279039791
9+
relative interpolated L2 error: 0.013982253381590213
10+
relative interpolated Linf error: 0.10278709769390203
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconstantNonSym(0.25)--problemconstant--elementP1--solvergmres-jacobi--matrixFormatdense

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.1835253848079427
4-
L2 error: 0.05767242809363617
5-
L2 error interpolated: 0.01741370463401979
6-
Linf error interpolated: 0.08492323905357663
7-
relative Hs error: 0.12478282000033661
8-
relative L2 error: 0.04630161022397269
9-
relative interpolated L2 error: 0.014042434375693132
10-
relative interpolated Linf error: 0.09866967903553016
3+
Hs error: 0.18399339204392906
4+
L2 error: 0.05788512423832981
5+
L2 error interpolated: 0.017437686447626173
6+
Linf error interpolated: 0.08802604582549106
7+
relative Hs error: 0.12510102809317378
8+
relative L2 error: 0.046472370747038534
9+
relative interpolated L2 error: 0.01406246848025199
10+
relative interpolated Linf error: 0.10227473404409995
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconstantNonSym(0.75)--problemconstant--elementP1--solvergmres-jacobi--matrixFormatH2

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.058607115732549314
4-
L2 error: 0.0021486244053874164
5-
L2 error interpolated: 0.0012904756531338202
6-
Linf error interpolated: 0.0014305222217047692
7-
relative Hs error: 0.06761016445706741
8-
relative L2 error: 0.004579211298532808
9-
relative interpolated L2 error: 0.002751718376414617
10-
relative interpolated Linf error: 0.0034176668012838207
3+
Hs error: 0.0597255551387594
4+
L2 error: 0.00222740318228125
5+
L2 error interpolated: 0.001318806267789667
6+
Linf error interpolated: 0.0017403189548499884
7+
relative Hs error: 0.06890041515860693
8+
relative L2 error: 0.0047471069364732115
9+
relative interpolated L2 error: 0.002812357426779486
10+
relative interpolated Linf error: 0.004157803510768023
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--sconstantNonSym(0.75)--problemconstant--elementP1--solvergmres-jacobi--matrixFormatdense

+8-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
Timers: {}
22
errors:
3-
Hs error: 0.059575659109656745
4-
L2 error: 0.002194748254364462
5-
L2 error interpolated: 0.0013546456020427384
6-
Linf error interpolated: 0.0014213792199474634
7-
relative Hs error: 0.06872749255266705
8-
relative L2 error: 0.00467751179713923
9-
relative interpolated L2 error: 0.0028885498053512672
10-
relative interpolated Linf error: 0.003395823216405576
3+
Hs error: 0.06031949823523683
4+
L2 error: 0.0022563364021103744
5+
L2 error interpolated: 0.0013588811288227196
6+
Linf error interpolated: 0.0017321724455461873
7+
relative Hs error: 0.06958559800592927
8+
relative L2 error: 0.0048087702624655315
9+
relative interpolated L2 error: 0.0028978171609391934
10+
relative interpolated Linf error: 0.004138340650302444
1111
meshes: {}
1212
results: {}
1313
sysInfo: {}

tests/cache_runFractional.py--domaindisc--stwoDomainNonSym(0.25,0.75)--problemknownSolution--elementP1--solvergmres-mg--matrixFormatH2

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
Timers: {}
22
errors:
3-
L2 error: 0.005930197043816925
4-
L2 error interpolated: 0.003413020217808587
5-
Linf error interpolated: 0.01082136808655848
6-
relative L2 error: 0.0051832219786591745
7-
relative interpolated L2 error: 0.002984844935336751
8-
relative interpolated Linf error: 0.01082136808655848
3+
L2 error: 0.005826340789746348
4+
L2 error interpolated: 0.0031194213241089513
5+
Linf error interpolated: 0.011279648619087423
6+
relative L2 error: 0.0050924475887455896
7+
relative interpolated L2 error: 0.0027282922216046363
8+
relative interpolated Linf error: 0.011279648619087423
99
meshes: {}
1010
results: {}
1111
sysInfo: {}

0 commit comments

Comments
 (0)