Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
sumpy
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
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
Alexandru Fikl
sumpy
Commits
baaf7ef7
Commit
baaf7ef7
authored
7 years ago
by
Isuru Fernando
Browse files
Options
Downloads
Patches
Plain Diff
Remove rscale from try_get_recurrence_for_derivative
parent
a9051281
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
sumpy/expansion/__init__.py
+20
-15
20 additions, 15 deletions
sumpy/expansion/__init__.py
sumpy/tools.py
+1
-1
1 addition, 1 deletion
sumpy/tools.py
with
21 additions
and
16 deletions
sumpy/expansion/__init__.py
+
20
−
15
View file @
baaf7ef7
...
@@ -246,7 +246,6 @@ def _spmv(spmat, x, sparse_vectors):
...
@@ -246,7 +246,6 @@ def _spmv(spmat, x, sparse_vectors):
class
LinearRecurrenceBasedDerivativeWrangler
(
DerivativeWrangler
):
class
LinearRecurrenceBasedDerivativeWrangler
(
DerivativeWrangler
):
_rscale_symbol
=
sp
.
Symbol
(
"
_sumpy_rscale_placeholder
"
)
def
get_coefficient_identifiers
(
self
):
def
get_coefficient_identifiers
(
self
):
return
self
.
stored_identifiers
return
self
.
stored_identifiers
...
@@ -295,15 +294,21 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
...
@@ -295,15 +294,21 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
"""
"""
stored_identifiers
,
coeff_matrix
=
self
.
_get_stored_ids_and_coeff_mat
()
stored_identifiers
,
coeff_matrix
=
self
.
_get_stored_ids_and_coeff_mat
()
# substitute actual rscale for internal placeholder
full_coeffs
=
self
.
get_full_coefficient_identifiers
()
return
defaultdict
(
lambda
:
[],
matrix_rows
=
[]
((
irow
,
[
for
irow
,
row
in
six
.
iteritems
(
coeff_matrix
):
(
icol
,
# For eg: (u_xxx / rscale**3) = (u_yy / rscale**2) * coeff1 +
coeff
.
xreplace
({
self
.
_rscale_symbol
:
rscale
})
# (u_xx / rscale**2) * coeff2
if
isinstance
(
coeff
,
sp
.
Basic
)
# is converted to u_xxx = u_yy * (rscale * coeff1) +
else
coeff
)
# u_xx * (rscale * coeff2)
for
icol
,
coeff
in
row
])
row_rscale
=
sum
(
full_coeffs
[
irow
])
for
irow
,
row
in
six
.
iteritems
(
coeff_matrix
)))
matrix_row
=
[]
for
icol
,
coeff
in
row
:
diff
=
row_rscale
-
sum
(
stored_identifiers
[
icol
])
matrix_row
.
append
((
icol
,
coeff
*
rscale
**
diff
))
matrix_rows
.
append
((
irow
,
matrix_row
))
return
defaultdict
(
lambda
:
[],
matrix_rows
)
@memoize_method
@memoize_method
def
_get_stored_ids_and_coeff_mat
(
self
):
def
_get_stored_ids_and_coeff_mat
(
self
):
...
@@ -321,7 +326,7 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
...
@@ -321,7 +326,7 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
from
six
import
iteritems
from
six
import
iteritems
for
i
,
identifier
in
enumerate
(
self
.
get_full_coefficient_identifiers
()):
for
i
,
identifier
in
enumerate
(
self
.
get_full_coefficient_identifiers
()):
expr
=
self
.
try_get_recurrence_for_derivative
(
expr
=
self
.
try_get_recurrence_for_derivative
(
identifier
,
identifiers_so_far
,
rscale
=
self
.
_rscale_symbol
)
identifier
,
identifiers_so_far
)
if
expr
is
None
:
if
expr
is
None
:
# Identifier should be stored
# Identifier should be stored
...
@@ -353,7 +358,7 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
...
@@ -353,7 +358,7 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
return
stored_identifiers
,
coeff_matrix
return
stored_identifiers
,
coeff_matrix
def
try_get_recurrence_for_derivative
(
self
,
deriv
,
in_terms_of
,
rscale
):
def
try_get_recurrence_for_derivative
(
self
,
deriv
,
in_terms_of
):
"""
"""
:arg deriv: a tuple of integers identifying a derivative for which
:arg deriv: a tuple of integers identifying a derivative for which
a recurrence is sought
a recurrence is sought
...
@@ -370,7 +375,7 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
...
@@ -370,7 +375,7 @@ class LinearRecurrenceBasedDerivativeWrangler(DerivativeWrangler):
class
LaplaceDerivativeWrangler
(
LinearRecurrenceBasedDerivativeWrangler
):
class
LaplaceDerivativeWrangler
(
LinearRecurrenceBasedDerivativeWrangler
):
def
try_get_recurrence_for_derivative
(
self
,
deriv
,
in_terms_of
,
rscale
):
def
try_get_recurrence_for_derivative
(
self
,
deriv
,
in_terms_of
):
deriv
=
np
.
array
(
deriv
,
dtype
=
int
)
deriv
=
np
.
array
(
deriv
,
dtype
=
int
)
for
dim
in
np
.
where
(
2
<=
deriv
)[
0
]:
for
dim
in
np
.
where
(
2
<=
deriv
)[
0
]:
...
@@ -402,7 +407,7 @@ class HelmholtzDerivativeWrangler(LinearRecurrenceBasedDerivativeWrangler):
...
@@ -402,7 +407,7 @@ class HelmholtzDerivativeWrangler(LinearRecurrenceBasedDerivativeWrangler):
super
(
HelmholtzDerivativeWrangler
,
self
).
__init__
(
order
,
dim
)
super
(
HelmholtzDerivativeWrangler
,
self
).
__init__
(
order
,
dim
)
self
.
helmholtz_k_name
=
helmholtz_k_name
self
.
helmholtz_k_name
=
helmholtz_k_name
def
try_get_recurrence_for_derivative
(
self
,
deriv
,
in_terms_of
,
rscale
):
def
try_get_recurrence_for_derivative
(
self
,
deriv
,
in_terms_of
):
deriv
=
np
.
array
(
deriv
,
dtype
=
int
)
deriv
=
np
.
array
(
deriv
,
dtype
=
int
)
for
dim
in
np
.
where
(
2
<=
deriv
)[
0
]:
for
dim
in
np
.
where
(
2
<=
deriv
)[
0
]:
...
@@ -426,7 +431,7 @@ class HelmholtzDerivativeWrangler(LinearRecurrenceBasedDerivativeWrangler):
...
@@ -426,7 +431,7 @@ class HelmholtzDerivativeWrangler(LinearRecurrenceBasedDerivativeWrangler):
coeffs
[
needed_deriv
]
=
-
1
coeffs
[
needed_deriv
]
=
-
1
else
:
else
:
k
=
sym
.
Symbol
(
self
.
helmholtz_k_name
)
k
=
sym
.
Symbol
(
self
.
helmholtz_k_name
)
coeffs
[
tuple
(
reduced_deriv
)]
=
-
k
*
k
*
rscale
*
rscale
coeffs
[
tuple
(
reduced_deriv
)]
=
-
k
*
k
return
coeffs
return
coeffs
# }}}
# }}}
...
...
This diff is collapsed.
Click to expand it.
sumpy/tools.py
+
1
−
1
View file @
baaf7ef7
...
@@ -126,7 +126,7 @@ class LinearRecurrenceBasedMiDerivativeTaker(MiDerivativeTaker):
...
@@ -126,7 +126,7 @@ class LinearRecurrenceBasedMiDerivativeTaker(MiDerivativeTaker):
recurrence
=
(
recurrence
=
(
self
.
wrangler
.
try_get_recurrence_for_derivative
(
self
.
wrangler
.
try_get_recurrence_for_derivative
(
next_mi
,
self
.
cache_by_mi
,
rscale
=
1
))
next_mi
,
self
.
cache_by_mi
))
if
recurrence
is
not
None
:
if
recurrence
is
not
None
:
expr
=
Add
(
*
tuple
(
expr
=
Add
(
*
tuple
(
...
...
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