Skip to content

Commit

Permalink
Merge branch 'develop' into all-contributors/add-ikorotkin
Browse files Browse the repository at this point in the history
  • Loading branch information
arjxn-py authored Jun 18, 2024
2 parents a694bbb + 4d08b7a commit 3b49189
Show file tree
Hide file tree
Showing 8 changed files with 63 additions and 5 deletions.
2 changes: 1 addition & 1 deletion .all-contributorsrc
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"badgeTemplate": "[![All Contributors](https://img.shields.io/badge/all_contributors-<%= contributors.length %>-orange.svg)](#-contributors)",
"contributors": [
{
"login": "tinosulzer",
"login": "valentinsulzer",
"name": "Valentin Sulzer",
"avatar_url": "https://avatars3.githubusercontent.com/u/20817509?v=4",
"profile": "https://sites.google.com/view/valentinsulzer",
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build and push Docker image to Docker Hub
uses: docker/build-push-action@v5
uses: docker/build-push-action@v6
with:
context: .
file: scripts/Dockerfile
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/run_periodic_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ jobs:
run: python -m nox -s coverage

- name: Upload coverage report
uses: codecov/codecov-action@v4.4.1
uses: codecov/codecov-action@v4.5.0
if: github.repository == 'pybamm-team/PyBaMM'
with:
token: ${{ secrets.CODECOV_TOKEN }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test_on_push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ jobs:

- name: Upload coverage report
if: matrix.os == 'ubuntu-latest' && matrix.python-version == '3.12'
uses: codecov/codecov-action@v4.4.1
uses: codecov/codecov-action@v4.5.0
with:
token: ${{ secrets.CODECOV_TOKEN }}

Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ ci:

repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.4.8"
rev: "v0.4.9"
hooks:
- id: ruff
args: [--fix, --show-fixes]
Expand Down
5 changes: 5 additions & 0 deletions pybamm/expression_tree/unary_operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -1269,6 +1269,11 @@ def grad(symbol):
else:
new_child = pybamm.PrimaryBroadcast(0, symbol.child.domain)
return pybamm.PrimaryBroadcastToEdges(new_child, symbol.domain)
elif isinstance(symbol, pybamm.SecondaryBroadcast):
# Take gradient of the child
# then broadcast back to the originalsymbol's secondary domain
# We can do this because gradient only acts on the primary domain
return pybamm.SecondaryBroadcast(grad(symbol.child), symbol.secondary_domain)
elif isinstance(symbol, pybamm.FullBroadcast):
return pybamm.FullBroadcastToEdges(0, broadcast_domains=symbol.domains)
else:
Expand Down
8 changes: 8 additions & 0 deletions tests/unit/test_expression_tree/test_unary_operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,14 @@ def test_gradient(self):
grad = pybamm.grad(a)
self.assertEqual(grad, pybamm.PrimaryBroadcastToEdges(0, "test domain"))

# gradient of a secondary broadcast moves the secondary out of the gradient
a = pybamm.Symbol("a", domain="test domain")
a_broad = pybamm.SecondaryBroadcast(a, "another domain")
grad = pybamm.grad(a_broad)
self.assertEqual(
grad, pybamm.SecondaryBroadcast(pybamm.grad(a), "another domain")
)

# otherwise gradient should work
a = pybamm.Symbol("a", domain="test domain")
grad = pybamm.Gradient(a)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,51 @@ def test_evaluate_at(self):
y = np.arange(n)[:, np.newaxis]
self.assertEqual(evaluate_at_disc.evaluate(y=y), y[idx])

def test_inner(self):
# standard
mesh = get_mesh_for_testing()
spatial_methods = {
"macroscale": pybamm.FiniteVolume(),
"negative particle": pybamm.FiniteVolume(),
}

var = pybamm.Variable("var", domain="negative particle")
grad_var = pybamm.grad(var)
inner = pybamm.inner(grad_var, grad_var)

disc = pybamm.Discretisation(mesh, spatial_methods)
disc.set_variable_slices([var])
boundary_conditions = {
var: {
"left": (pybamm.Scalar(0), "Neumann"),
"right": (pybamm.Scalar(0), "Neumann"),
}
}
disc.bcs = boundary_conditions
inner_disc = disc.process_symbol(inner)

self.assertIsInstance(inner_disc, pybamm.Inner)
self.assertIsInstance(inner_disc.left, pybamm.MatrixMultiplication)
self.assertIsInstance(inner_disc.right, pybamm.MatrixMultiplication)

n = mesh["negative particle"].npts
y = np.ones(n)[:, np.newaxis]
np.testing.assert_array_equal(inner_disc.evaluate(y=y), np.zeros((n, 1)))
mesh = get_mesh_for_testing()

# with secondary broadcast
grad_var = pybamm.grad(pybamm.SecondaryBroadcast(var, "negative electrode"))
inner = pybamm.inner(grad_var, grad_var)

inner_disc = disc.process_symbol(inner)

self.assertIsInstance(inner_disc, pybamm.Inner)
self.assertIsInstance(inner_disc.left, pybamm.MatrixMultiplication)
self.assertIsInstance(inner_disc.right, pybamm.MatrixMultiplication)

m = mesh["negative electrode"].npts
np.testing.assert_array_equal(inner_disc.evaluate(y=y), np.zeros((n * m, 1)))


if __name__ == "__main__":
print("Add -v for more debug output")
Expand Down

0 comments on commit 3b49189

Please sign in to comment.