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

Mask areas with sea ice #43

Open
jbusecke opened this issue Oct 31, 2022 · 4 comments
Open

Mask areas with sea ice #43

jbusecke opened this issue Oct 31, 2022 · 4 comments

Comments

@jbusecke
Copy link
Collaborator

We are currently computing air sea fluxes in every ocean cell, even the ones with sea ice over them. Any presence of sea ice will greatly affect the air-sea flux calculation, and i think for our project it is out of the scope to handle these situations properly. Instead we need a way to mask out sea ice areas.

@jbusecke
Copy link
Collaborator Author

jbusecke commented Nov 1, 2022

I have come up with a first solution for CM2.6:
There is a melt variable in the data which is "water_flux_into_sea_water_due_to_sea_ice_thermodynamics".
I have now assumed that any area which has |melt| > 0 might have had sea ice at some point and should be removed (this is a very strict criterion, but for now I think it is good to focus on cells that are 100% ice free).

It is straightforward to create the mask:

from intake import open_catalog

cat = open_catalog("https://raw.githubusercontent.com/pangeo-data/pangeo-datastore/master/intake-catalogs/ocean/GFDL_CM2.6.yaml")
ds  = cat["GFDL_CM2_6_control_ocean_boundary_flux"].to_dask()
ice_mask = (np.abs(ds['melt'])>0).any('time')
ice_mask.plot()

image

This is an example picture of the global domain with the mask applied. I think this is ok for our purposes. What does @ocean-transport/collab_team think?

image

@rabernat
Copy link
Collaborator

rabernat commented Nov 1, 2022

Nice work finding a solution for identifying where seaice might be!

I'm a little worried that this very strict criterion eliminates some climatologically interesting parts of the ocean, such as the ACC and North Atlantic.

What if, instead, we used a time varying mask, only masking points if there is ice there at that specific time.

Could we see what

(np.abs(ds['melt'])>0).astype(int).sum('time')

looks like?

@jbusecke
Copy link
Collaborator Author

jbusecke commented Nov 1, 2022

What if, instead, we used a time varying mask, only masking points if there is ice there at that specific time.

This variable is only given monthly, so we wont be able to mask out daily fields precisely.

Could we see what
(np.abs(ds['melt'])>0).astype(int).sum('time')
looks like?

image

What we could do is mask only areas that are covered a certain part of the year (keep in mind that this is monthly data for 20 years, so 240 in this plot means it is covered all the time).

@jbusecke
Copy link
Collaborator Author

jbusecke commented Nov 1, 2022

FYI, for the upcoming plots I have chosen a compromise: I mask out all areas that are on average more than half of the year ice covered (e.g. everything above 120 in the above plot).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants