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

Regarding custom classes and the issue of outputting to an NC file #1388

Open
ConfusedThomas opened this issue Aug 27, 2024 · 5 comments
Open

Comments

@ConfusedThomas
Copy link

Hello,

I am conducting a test simulation for surface fish egg dispersion using OpenDrift with ROMS data, which is accessible and readable. Basic tests run smoothly, but I’m encountering some issues in my test where I implemented a more complex simulation.

I have customized a particle class named CustomElement, which inherits from LagrangianArray. This class includes several custom variables such as age, accumulated temperature, distance, previous coordinates (latitude and longitude), and a flag for successful hatching. Furthermore, I created a custom drift model CustomDriftModel that inherits from OceanDrift and overrode the update method to manage particle states. Each timestep updates the particle’s age, accumulated temperature, and distance traveled, and checks whether the particles exceed 30 days or reach a specified hatching temperature threshold, deleting or updating particle states accordingly.

My objective is twofold:
1. Developmental Temperature Check: At the time of particle release, I need to check if the water temperature meets a specific threshold, which is the developmental temperature necessary for the initial survival or development of the eggs.
2. Accumulated Temperature Over Time: As the particles drift, I aim to calculate whether the accumulated temperature—measured as the sum of temperature excess over a base value during the drift—reaches a certain threshold within a specified timestep. This accumulated temperature represents the necessary heat units for the development of the eggs.

The aim is to simulate the developmental threshold temperature and the effective accumulated temperature processes for particle development. While the simulation runs, I am unable to save these custom particle states to the resulting NetCDF file.

Could this issue be related to how I’ve defined my custom classes? Any guidance or suggestions would be greatly appreciated.
test.txt

Thank you.

@knutfrode
Copy link
Collaborator

Hi,
I have not had time to look very carefully at this, but some quick comments:

  • age is already a built-in particle property, no no need to redefine it

In your update() you are calling super().update(). I have never seen this being done before, but it might work well in this case.

You call a method self.delete_element(), is this something you have defined elsewhere? It is important to use the built in self.deactivate_elements() for the internal bookeeping to be correct.

@ConfusedThomas
Copy link
Author

Thank you for your prompt response, and I apologize if my previous message was overly detailed.

My primary question concerns whether OpenDrift can track additional attributes of particles during drift simulations, such as cumulative environmental factors like temperature and salinity. Additionally, is it possible to output these results directly into a NetCDF file?

Could you provide some guidance on how to ensure that custom particle attributes like accumulated temperature are correctly saved in the NetCDF output? I am particularly interested in whether additional steps or configurations are required to include these custom variables in the output file.

Best regards

@knutfrode
Copy link
Collaborator

All element properties are saved automatically (and saved to netCDF if outfile is specified for stimulation), so you only need to add/define the properties (as you already did) and then also update these within the update method.
For the latter step you are completely free in how to update the properties.

@ConfusedThomas
Copy link
Author

Thanks.

I understand now that the properties should indeed be saved automatically to the NetCDF file if defined and updated correctly within the update method.

I will run another test to ensure that this functionality works as expected, as my previous attempts did not successfully save the custom element properties to the NetCDF file.

@knutfrode
Copy link
Collaborator

Looking again at your code, it seems that you are defining a new class, but you are not using this one, but instead OceanDrift.
In fact, your file is a mixture of a class definition and an invoking script, but these should normally be kept separate from each other.

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

No branches or pull requests

2 participants