Skip to content

Commit e3cf43d

Browse files
authored
Merge pull request #36 from jeremylt/jeremy/scaling
basis - fix scaling for mesh
2 parents d7760ee + 06421cb commit e3cf43d

File tree

2 files changed

+9
-27
lines changed

2 files changed

+9
-27
lines changed

src/Basis/Base.jl

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,31 +1230,25 @@ function getdXdxgradient(basis::TensorBasis, mesh::Mesh)
12301230

12311231
# coordinate transformation
12321232
gradient = basis.gradient
1233-
dxdX = (basis.gradient1d*basis.nodes1d)[1]
12341233

12351234
# adjust for mesh
12361235
if dimension == 1
12371236
# 1D
1238-
return gradient / (dxdX * mesh.dx)
1237+
return gradient / mesh.dx
12391238
elseif dimension == 2
12401239
# 2D
1241-
scalex = 1 / (dxdX * mesh.dx)
1242-
scaley = 1 / (dxdX * mesh.dy)
12431240
numberquadraturepoints = basis.numberquadraturepoints
12441241
return [
1245-
gradient[1:numberquadraturepoints, :] * scalex
1246-
gradient[numberquadraturepoints+1:end, :] * scaley
1242+
gradient[1:numberquadraturepoints, :] / mesh.dx
1243+
gradient[numberquadraturepoints+1:end, :] / mesh.dy
12471244
]
12481245
elseif dimension == 3
12491246
# 3D
1250-
scalex = 1 / (dxdX * mesh.dx)
1251-
scaley = 1 / (dxdX * mesh.dy)
1252-
scalez = 1 / (dxdX * mesh.dz)
12531247
numberquadraturepoints = basis.numberquadraturepoints
12541248
return [
1255-
gradient[1:numberquadraturepoints, :] * scalex
1256-
gradient[numberquadraturepoints+1:2*numberquadraturepoints, :] * scaley
1257-
gradient[2*numberquadraturepoints+1:end, :] * scalez
1249+
gradient[1:numberquadraturepoints, :] / mesh.dx
1250+
gradient[numberquadraturepoints+1:2*numberquadraturepoints, :] / mesh.dy
1251+
gradient[2*numberquadraturepoints+1:end, :] / mesh.dz
12581252
]
12591253
end
12601254
end
@@ -1288,7 +1282,7 @@ basis = TensorH1LagrangeBasis(4, 3, 1, 1);
12881282
weights = LFAToolkit.getdxdXquadratureweights(basis, mesh);
12891283
12901284
# verify
1291-
@assert basis.quadratureweights / 2 ≈ weights
1285+
@assert basis.quadratureweights * mesh.volume / basis.volume ≈ weights
12921286
12931287
# output
12941288
@@ -1303,17 +1297,8 @@ function getdxdXquadratureweights(basis::TensorBasis, mesh::Mesh)
13031297
error("mesh dimension must match basis dimension") # COV_EXCL_LINE
13041298
end
13051299

1306-
# coordinate transformation
1307-
dxdX = (basis.gradient1d*basis.nodes1d)[1]
1308-
13091300
# adjust for mesh
1310-
if dimension == 1
1311-
return dxdX * basis.quadratureweights / mesh.dx
1312-
elseif dimension == 2
1313-
return dxdX^2 * basis.quadratureweights / (mesh.dx * mesh.dy)
1314-
elseif dimension == 3
1315-
return dxdX^3 * basis.quadratureweights / (mesh.dx * mesh.dy * mesh.dz)
1316-
end
1301+
return basis.quadratureweights * mesh.volume / basis.volume
13171302
end
13181303

13191304
function getdxdXquadratureweights(basis::NonTensorBasis, mesh::Mesh)

src/Operator/Base.jl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -357,14 +357,11 @@ function getelementmatrix(operator::Operator)
357357
end
358358

359359
# quadrature weight input index
360-
weightscale = 1.0
361360
if weightinputindex != 0
362361
quadratureweights = getdxdXquadratureweights(
363362
operator.inputs[weightinputindex].basis,
364363
operator.mesh,
365364
)
366-
weightscale =
367-
operator.mesh.volume / operator.inputs[weightinputindex].basis.volume
368365
end
369366

370367
# outputs
@@ -423,7 +420,7 @@ function getelementmatrix(operator::Operator)
423420
for q = 1:numberquadraturepoints
424421
# set quadrature weight
425422
if weightinputindex != 0
426-
weakforminputs[weightinputindex][1] = quadratureweights[q] * weightscale
423+
weakforminputs[weightinputindex][1] = quadratureweights[q]
427424
end
428425

429426
# fill sparse matrix

0 commit comments

Comments
 (0)