Skip to content
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

Allow the boundary conditions of scalar fields to be coupled #460

Merged
merged 10 commits into from
Jun 21, 2024

Conversation

cianwilson
Copy link
Member

@cianwilson cianwilson commented Jun 13, 2023

This PR allows the boundary values or radial gradients of scalar fields (including the thermal variable and active scalar fields) to be linearly coupled together.

The new functionality is documented in the "Under Development" section of the User Guide.

The most pressing point for review is that this changes the number of boundary condition types from two (Dirichlet and Neumann) to four (Dirichlet, Neumann, coupled Dirichlet and coupled Neumann). Combined with the fact that, in an effort to not add too many new options, T_top, T_bottom, dTdr_top, dTdr_bottom, chi_a_top, chi_a_bottom, dchidr_a_top, dchidr_a_bottom, and their _file equivalents have been overloaded, this means that the previous defaults (e.g. fix_Tvar_top=.true. with T_top=0) have had to be taken away. The default behavior now checks for multiply set boundary conditions and throws an error, or, if no boundary conditions are set, initializes the options to the old defaults while issuing a warning.

Otherwise I don't think this intersects with existing behavior.

A test for constant bcs has been added in tests/coupled_bcs. Future work should add one for spatially varying conditions.

@cianwilson
Copy link
Member Author

Need to set this up to restore the old defaults if no other bc is set

@cianwilson cianwilson changed the title An implementation of coupled bcs. Allow the boundary conditions of scalar fields to be coupled Jun 21, 2024
@cianwilson cianwilson self-assigned this Jun 21, 2024
@cianwilson cianwilson marked this pull request as ready for review June 21, 2024 18:32
@cianwilson cianwilson requested a review from feathern June 21, 2024 18:32
Think this can actually be reimplemented in a considerably simpler way but I would like to add a test to this version first.

This may break current tests as it changes the default boundary condition logic (it is no longer possible to just set the bc type
based on what it is not because there are more than two types of bc now).
This allows generic scalar fields to be output which have a length of at least 5 (not just 4).
This may break tests that rely on the old defaults.
This just runs for 2 timesteps and checks that the shell slices produced match the expected values on 2 coupled fields (1
temperature, 1 chi, both coupled to another chi).
But unclear what to do about the default values.
Renaming the chi variables to explicitly state that we are only coupling chi_a.
@cianwilson
Copy link
Member Author

Just rebased this branch on top of main

Copy link
Contributor

@feathern feathern left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesome. The docs look good, and all checks passed. Approving and merging now.

@feathern feathern merged commit 0525c98 into geodynamics:main Jun 21, 2024
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants