-
Notifications
You must be signed in to change notification settings - Fork 32
Export average surface temperature #949
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
kaelyndunnell
wants to merge
87
commits into
festim-dev:fenicsx
Choose a base branch
from
kaelyndunnell:export-surface-temp
base: fenicsx
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
87 commits
Select commit
Hold shift + click to select a range
67277fd
update rtol to make callable in problem
kaelyndunnell be656dc
adjust default rtol
kaelyndunnell 4e3874c
adjust default rtol
kaelyndunnell ffa890d
update atol to make callable in problem.py
kaelyndunnell 9ac79df
fix bug
kaelyndunnell d3fd8a7
add temp export
kaelyndunnell eb5cdd4
surface temperature export class
kaelyndunnell 77da114
add surfacetemp to festim attribute
kaelyndunnell 9b20f01
update surfacetemperature class
kaelyndunnell aa813e5
circular import
kaelyndunnell b9f700a
fix circular import
kaelyndunnell d4a5e9f
fix surface temperature export
kaelyndunnell 773b291
add post processing surfacetemp update
kaelyndunnell b3f4488
update compute method for surface temp
kaelyndunnell 3e70f37
fix double count surface temp
kaelyndunnell d1b71de
typos
kaelyndunnell d67fa20
Merge branch 'festim-dev:fenicsx' into fenicsx
kaelyndunnell 6a52a39
add surface temperature export class
kaelyndunnell 4e5e68b
add surface temp to derived quantities test
kaelyndunnell 9a9106d
add better doc, add surface temp test
kaelyndunnell f03ae7d
add pytest to import
kaelyndunnell aefcdaa
add my_export quantity
kaelyndunnell 806502a
delete extra line
kaelyndunnell 91f1d5b
fix exported value comparison
kaelyndunnell 1e5e2b0
add temp field value to surface temp
kaelyndunnell 7b0ea6d
add temp field setter
kaelyndunnell 528492c
initialise exports
kaelyndunnell 1971774
remove surface temp from derived quantities
kaelyndunnell 7d687de
change func name, add float and int to temp types
kaelyndunnell 37d59f6
test if test or definition problem
kaelyndunnell 98167a0
fix test
kaelyndunnell a044ecf
fix test
kaelyndunnell eb486c3
fix temp field setter
kaelyndunnell e0b1820
fix setter
kaelyndunnell 9e2937e
simplify setter
kaelyndunnell 38a6ae1
testing export.value
kaelyndunnell 7e8d843
update test
kaelyndunnell f414bd1
update test
kaelyndunnell 66ad788
uodate test
kaelyndunnell 60eb9e7
update test
kaelyndunnell c1bac95
update test
kaelyndunnell 03148d1
add test
kaelyndunnell c955d9f
black formatted
kaelyndunnell 8c2f0bf
add test for title
kaelyndunnell f6b5ff6
black formatted
kaelyndunnell 339a94a
additional tests
kaelyndunnell e960b5a
black formatted
kaelyndunnell 97b3b17
add mesh, fix temp_field name
kaelyndunnell c69e971
fix failing tests
kaelyndunnell 134a8ff
temperature cannot be a string
kaelyndunnell e1ed3bd
Update src/festim/exports/surface_temperature.py
kaelyndunnell 38d68c7
delete unneeded lines when inherit from F.SurfaceQuantity
kaelyndunnell baa374d
also inherited now
kaelyndunnell ecf4532
also inherited
kaelyndunnell 8ef1981
remove old line
kaelyndunnell dd3ed99
rename to AverageSurfaceTemperature
kaelyndunnell 15fe0ad
set temp field as an attribute
kaelyndunnell 3454d35
fix surfacequantity inheritance
kaelyndunnell 96bf5dd
truncate computation of AverageSurfaceTemperature in hydrogentranspor…
kaelyndunnell 78d34ce
fix festim init
kaelyndunnell e2b7b9a
renamed class
kaelyndunnell f0123dc
remove temp field from arguments
kaelyndunnell 7ede0ec
remove unneeded test
kaelyndunnell b542a18
fix if statement
kaelyndunnell b774070
add line
kaelyndunnell fe8f5c6
add test line, simply HTP
kaelyndunnell b1d7ec7
fix test
kaelyndunnell 352fb85
fix temp line
kaelyndunnell 7fb1fc1
simplify HTP
kaelyndunnell e531a88
ruff formatted
kaelyndunnell bc9aa19
Merge branch 'fenicsx' into export-surface-temp
RemDelaporteMathurin 2b2c38a
remove unneeded tests
kaelyndunnell 2af4b73
Merge branch 'fenicsx' into export-surface-temp
kaelyndunnell a722253
add averagesurfacetemperature to export init
kaelyndunnell b9795ba
updates/rebase
kaelyndunnell c568c21
full integration test
kaelyndunnell d1eeb8b
fix integration tests and test
kaelyndunnell 5b36778
ruff
kaelyndunnell dc51fb6
add not implemented error for discontinuous problem
kaelyndunnell 0bcd616
ruff
kaelyndunnell b331392
update testing coverage
kaelyndunnell d268289
ruff
kaelyndunnell a9e9e20
Update src/festim/exports/surface_temperature.py
kaelyndunnell 262a912
simplify
kaelyndunnell b592a68
Merge branch 'fenicsx' into export-surface-temp
kaelyndunnell 0e2fa61
add changes erased in resolve conflicts
kaelyndunnell c7b5464
ruff
kaelyndunnell File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Some comments aren't visible on the classic Files Changed page.
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| import csv | ||
| from dolfinx import fem | ||
| import ufl | ||
| from .surface_quantity import SurfaceQuantity | ||
| from festim.subdomain.surface_subdomain import SurfaceSubdomain | ||
|
|
||
|
|
||
| class AverageSurfaceTemperature(SurfaceQuantity): | ||
| """Exports the average temperature on a given surface. | ||
|
|
||
| Args: | ||
| surface: the surface subdomain | ||
| filename: name of the file to which the average surface temperature is exported | ||
|
|
||
| Attributes: | ||
| temperature_field: the temperature field | ||
| surface (int or festim.SurfaceSubdomain): the surface subdomain | ||
| filename (str): name of the file to which the surface temperature is exported | ||
| t (list): list of time values | ||
| data (list): list of average temperature values on the surface | ||
| """ | ||
|
|
||
| surface: int | SurfaceSubdomain | ||
| filename: str | None | ||
|
|
||
| temperature_field: fem.Constant | fem.Function | ||
|
|
||
| def __init__(self, surface, filename: str = None) -> None: | ||
| self.surface = surface | ||
| self.filename = filename | ||
|
|
||
| self.temperature_field = None | ||
| self.t = [] | ||
| self.data = [] | ||
| self._first_time_export = True | ||
|
|
||
| @property | ||
| def title(self): | ||
| return f"Temperature surface {self.surface.id}" | ||
|
|
||
| def compute(self, ds): | ||
| """Computes the average temperature on the surface. | ||
|
|
||
| Args: | ||
| ds (ufl.Measure): surface measure of the model | ||
| """ | ||
| temperature_field = self.temperature_field | ||
|
|
||
| self.value = fem.assemble_scalar( | ||
| fem.form(temperature_field * ds(self.surface.id)) | ||
| ) / fem.assemble_scalar( | ||
| fem.form(1 * ds(self.surface.id)) | ||
| ) # integral over surface / surface area | ||
|
|
||
| self.data.append(self.value) | ||
RemDelaporteMathurin marked this conversation as resolved.
Show resolved
Hide resolved
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,127 @@ | ||
| import numpy as np | ||
| import ufl | ||
| from dolfinx import fem | ||
| import pytest | ||
| import os | ||
|
|
||
| import festim as F | ||
|
|
||
|
|
||
| @pytest.mark.parametrize( | ||
| "T_function, expected_values", | ||
| [ | ||
| (3, 3), | ||
| (lambda t: t, 3.0), | ||
| (lambda x, t: 1.0 + x[0] + t, 10.0), | ||
| ], | ||
| ) | ||
| def test_surface_temperature_compute_1D(T_function, expected_values): | ||
| """Test that the average surface temperature export computes the correct value.""" | ||
|
|
||
| # BUILD | ||
| L = 6.0 | ||
| my_mesh = F.Mesh1D(np.linspace(0, L, 10000)) | ||
| dummy_surface = F.SurfaceSubdomain1D(id=1, x=L) | ||
| dummy_volume = F.VolumeSubdomain1D( | ||
| id=1, borders=(0.0, L), material=F.Material(D_0=1, E_D=1, name="dummy") | ||
| ) | ||
|
|
||
| facet_meshtags, temp = my_mesh.define_meshtags( | ||
| surface_subdomains=[dummy_surface], volume_subdomains=[dummy_volume] | ||
| ) | ||
| ds = ufl.Measure("ds", domain=my_mesh.mesh, subdomain_data=facet_meshtags) | ||
|
|
||
| dt = F.Stepsize(initial_value=1) | ||
| settings = F.Settings(atol=1e05, rtol=1e-10, stepsize=dt, final_time=10) | ||
| my_model = F.HydrogenTransportProblem( | ||
| mesh=my_mesh, temperature=T_function, settings=settings | ||
| ) | ||
|
|
||
| my_model.species = [F.Species("H")] | ||
| my_model.subdomains = [ | ||
| dummy_surface, | ||
| dummy_volume, | ||
| ] | ||
|
|
||
| my_model.t = fem.Constant(my_mesh.mesh, 0.0) | ||
| dt = fem.Constant(my_mesh.mesh, 1.0) | ||
|
|
||
| my_model.define_temperature() | ||
|
|
||
| my_export = F.AverageSurfaceTemperature(surface=dummy_surface) | ||
| my_export.temperature_field = my_model.temperature_fenics | ||
| my_model.exports = [my_export] | ||
|
|
||
| # RUN | ||
| for _ in range(3): | ||
| my_model.t.value += dt.value | ||
| my_model.update_time_dependent_values() | ||
|
|
||
| my_model.initialise() | ||
| my_model.run() | ||
|
|
||
| # TEST | ||
| assert np.isclose(my_export.value, expected_values) | ||
|
|
||
|
|
||
| def test_title(tmp_path): | ||
| surf_1 = F.SurfaceSubdomain(id=1) | ||
| results = "test.csv" | ||
| temp = 400 | ||
| surface_temp = F.AverageSurfaceTemperature(surface=surf_1, filename=results) | ||
|
|
||
| my_model = F.HydrogenTransportProblem( | ||
| temperature=temp, | ||
| ) | ||
| surface_temp.filename = os.path.join(tmp_path, "test.csv") | ||
| surface_temp.value = 1 | ||
|
|
||
| assert surface_temp.title == "Temperature surface 1" | ||
|
|
||
|
|
||
| @pytest.mark.parametrize("value", ["my_export.csv", "my_export.txt"]) | ||
| def test_title_generation(tmp_path, value): | ||
| """Test that the title is made to be written to the header in a csv or txt file""" | ||
| my_model = F.HydrogenTransportProblem( | ||
| mesh=F.Mesh1D(np.linspace(0, 6.0, 10000)), temperature=500 | ||
| ) | ||
| my_model.define_temperature() | ||
|
|
||
| my_export = F.AverageSurfaceTemperature( | ||
| filename=os.path.join(tmp_path, f"{value}"), | ||
| surface=F.SurfaceSubdomain1D(id=35, x=1), | ||
| ) | ||
| my_export.value = 2.0 | ||
| my_export.write(0) | ||
| title = np.genfromtxt(my_export.filename, delimiter=",", max_rows=1, dtype=str) | ||
|
|
||
| expected_title = "Temperature surface 35" | ||
|
|
||
| assert title[1] == expected_title | ||
|
|
||
|
|
||
| def test_not_implemented_error_raised_with_initialise_exports_multiple_subdomains(): | ||
| """Test that NotImplementedError is raised for problems with multiple volume domains.""" | ||
|
|
||
| # BUILD | ||
| L = 1.0 | ||
| test_mesh = F.Mesh1D(vertices=np.linspace(0, L, num=101)) | ||
|
|
||
| my_mat = F.Material(D_0=1, E_D=1) | ||
| dummy_surface = F.SurfaceSubdomain1D(id=1, x=L) | ||
| vol_1 = F.VolumeSubdomain1D(id=1, borders=[0, 0.5], material=my_mat) | ||
| vol_2 = F.VolumeSubdomain1D(id=1, borders=[0.5, L], material=my_mat) | ||
|
|
||
| H = F.Species("H") | ||
| my_model = F.HydrogenTransportProblemDiscontinuous( | ||
| mesh=test_mesh, | ||
| temperature=10, | ||
| subdomains=[dummy_surface, vol_1, vol_2], | ||
| species=[F.Species("H")], | ||
| ) | ||
|
|
||
| my_model.exports = [F.AverageSurfaceTemperature(surface=dummy_surface)] | ||
|
|
||
| # TEST | ||
| with pytest.raises(NotImplementedError): | ||
| my_model.initialise_exports() |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.