Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
G
grudge
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Andreas Klöckner
grudge
Commits
1247415d
Commit
1247415d
authored
3 years ago
by
Thomas Gibson
Browse files
Options
Downloads
Patches
Plain Diff
Functioning mass matrix test
parent
1516ffa5
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
grudge/op.py
+47
-22
47 additions, 22 deletions
grudge/op.py
test/test_new_world_grudge.py
+0
-2
0 additions, 2 deletions
test/test_new_world_grudge.py
with
47 additions
and
24 deletions
grudge/op.py
+
47
−
22
View file @
1247415d
...
@@ -334,8 +334,9 @@ def reference_mass_matrix(actx, out_element_group, in_element_group):
...
@@ -334,8 +334,9 @@ def reference_mass_matrix(actx, out_element_group, in_element_group):
def
get_ref_mass_mat
(
out_grp
,
in_grp
):
def
get_ref_mass_mat
(
out_grp
,
in_grp
):
if
out_grp
==
in_grp
:
if
out_grp
==
in_grp
:
from
meshmode.discretization.poly_element
import
mass_matrix
from
meshmode.discretization.poly_element
import
mass_matrix
return
actx
.
freeze
(
return
actx
.
freeze
(
actx
.
from_numpy
(
mass_matrix
(
in
_grp
))
actx
.
from_numpy
(
mass_matrix
(
out
_grp
))
)
)
from
modepy
import
vandermonde
from
modepy
import
vandermonde
...
@@ -355,30 +356,59 @@ def reference_mass_matrix(actx, out_element_group, in_element_group):
...
@@ -355,30 +356,59 @@ def reference_mass_matrix(actx, out_element_group, in_element_group):
def
_apply_mass_operator
(
dcoll
,
dd_out
,
dd_in
,
vec
):
def
_apply_mass_operator
(
dcoll
,
dd_out
,
dd_in
,
vec
):
from
grudge.geometry
import
area_element
import
numpy
as
np
in_discr
=
dcoll
.
discr_from_dd
(
dd_in
)
in_discr
=
dcoll
.
discr_from_dd
(
dd_in
)
out_discr
=
dcoll
.
discr_from_dd
(
dd_out
)
out_discr
=
dcoll
.
discr_from_dd
(
dd_out
)
actx
=
vec
.
array_context
actx
=
vec
.
array_context
area_elements
=
in_discr
.
zeros
(
actx
)
# FIXME *cough*
area_elements
=
area_element
(
actx
,
dcoll
,
dd
=
dd_in
)
return
DOFArray
(
actx
,
tuple
(
data
=
[]
actx
.
einsum
(
"
ij,ej,ej->ei
"
,
for
in_grp
,
out_grp
,
ae_i
,
vec_i
in
zip
(
reference_mass_matrix
(
actx
,
in_discr
.
groups
,
out_discr
.
groups
,
area_elements
,
vec
):
out_element_group
=
out_grp
,
in_element_group
=
in_grp
),
ref_mass
=
reference_mass_matrix
(
actx
,
ae_i
,
vec_i
,
out_element_group
=
out_grp
,
arg_names
=
(
"
mass_mat
"
,
"
jac_det
"
,
"
vec
"
),
in_element_group
=
in_grp
)
tagged
=
(
MassOperatorTag
(),))
numpy_mass
=
actx
.
to_numpy
(
ref_mass
)
numpy_aei
=
actx
.
to_numpy
(
ae_i
)
for
in_grp
,
out_grp
,
ae_i
,
vec_i
in
zip
(
numpy_veci
=
actx
.
to_numpy
(
vec_i
)
in_discr
.
groups
,
out_discr
.
groups
,
result
=
np
.
einsum
(
"
ij,ej,ej->ei
"
,
numpy_mass
,
numpy_aei
,
numpy_veci
)
area_elements
,
vec
)))
# result = actx.einsum("ij,ej,ej->ei",
# ref_mass,
# ae_i,
# vec_i,
# arg_names=("mass_mat", "jac_det", "vec"),
# tagged=(MassOperatorTag(),))
data
.
append
(
actx
.
from_numpy
(
result
))
#import pdb; pdb.set_trace()
return
DOFArray
(
actx
,
data
=
tuple
(
data
))
# return DOFArray(
# actx,
# tuple(actx.einsum("ij,ej,ej->ei",
# reference_mass_matrix(
# actx,
# out_element_group=out_grp,
# in_element_group=in_grp
# ),
# ae_i,
# vec_i,
# arg_names=("mass_mat", "jac_det", "vec"),
# tagged=(MassOperatorTag(),))
# for in_grp, out_grp, ae_i, vec_i in zip(
# in_discr.groups, out_discr.groups, area_elements, vec)
# )
# )
def
mass_operator
(
dcoll
,
*
args
):
def
mass_operator
(
dcoll
,
*
args
):
if
len
(
args
)
==
1
:
if
len
(
args
)
==
1
:
vec
,
=
args
vec
,
=
args
dd
=
sym
.
DOFDesc
(
"
vol
"
,
sym
.
QTAG_NONE
)
dd
=
dof_desc
.
DOFDesc
(
"
vol
"
,
dof_desc
.
QTAG_NONE
)
elif
len
(
args
)
==
2
:
elif
len
(
args
)
==
2
:
dd
,
vec
=
args
dd
,
vec
=
args
else
:
else
:
...
@@ -389,12 +419,7 @@ def mass_operator(dcoll, *args):
...
@@ -389,12 +419,7 @@ def mass_operator(dcoll, *args):
lambda
el
:
mass_operator
(
dcoll
,
dd
,
el
),
vec
lambda
el
:
mass_operator
(
dcoll
,
dd
,
el
),
vec
)
)
dd_in
=
dd
return
_apply_mass_operator
(
dcoll
,
dof_desc
.
DD_VOLUME
,
dd
,
vec
)
del
dd
from
grudge.dof_desc
import
QTAG_NONE
dd_out
=
dd_in
.
with_qtag
(
QTAG_NONE
)
return
_apply_mass_operator
(
dcoll
,
dd_out
,
dd_in
,
vec
)
@memoize_on_first_arg
@memoize_on_first_arg
...
...
This diff is collapsed.
Click to expand it.
test/test_new_world_grudge.py
+
0
−
2
View file @
1247415d
...
@@ -97,8 +97,6 @@ def test_mass_mat_trig(actx_factory, ambient_dim, quad_tag):
...
@@ -97,8 +97,6 @@ def test_mass_mat_trig(actx_factory, ambient_dim, quad_tag):
f_quad
=
f
(
x_quad
)
f_quad
=
f
(
x_quad
)
ones_quad
=
quad_disc
.
zeros
(
actx
)
+
1
ones_quad
=
quad_disc
.
zeros
(
actx
)
+
1
#mass_op = bind(discr, dof_desc.MassOperator(dd_quad, dof_desc.DD_VOLUME)(sym_f))
mop
=
op
.
mass_operator
(
dcoll
,
dd_quad
,
f_quad
)
mop
=
op
.
mass_operator
(
dcoll
,
dd_quad
,
f_quad
)
num_integral_1
=
np
.
dot
(
num_integral_1
=
np
.
dot
(
actx
.
to_numpy
(
flatten
(
ones_volm
)),
actx
.
to_numpy
(
flatten
(
ones_volm
)),
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment