ocean-transport / scale-aware-air-sea

Repo for collaborative project on scale-aware air-sea fluxes
2 stars 0 forks source link

Reproducing model air sea fluxes with aerobulk #26

Open jbusecke opened 2 years ago

jbusecke commented 2 years ago

Given the progress we made over at aerobulk-python I wanted to try the algo out on the CM2.6 data just for a quick test.

I was able to use the xarray wrapper to successfully compute air-sea fluxes for a month and a subset of the domain.

When I compute the airseaflux for daily data using the 'ecmwf' algo (presumably the one used in CM2.6; personal comms with Steve Griffies), and then averaging all values in time, I can compare the value with the output of the model (which is provided as monthly average).

Unfortunately the difference is pretty darn big:

image These show a percentage difference compared to the model output.

Some notes:

Overall I think this needs to be addressed before we can make any confident statement about the scale separation. Let me know if I missed something here.

rabernat commented 2 years ago

Other possibilities:

rabernat commented 2 years ago

Here is the order of operations I would follow to debug this

  1. Verify that the results of aerobulk-python are numerically identical to those of aerobulk fortran. This means excavating the aerobulk fortran test data, running their test scripts, etc. This step is important because it allows us to credibly raise any issues we find upstream in aerobulk. Otherwise, the aerobulk developers can always just say that our package is broken somehow.
  2. Run an MITgcm simulation with a prescribed atmospheric state (e.g. global_with_exf) for a single timestep. Verify that we can reproduce the air-sea flux offline with aerobulk-python.
  3. Find a full set of climate model outputs (atmosphere and ocean) for which we have hourly outputs from both ocean and atmosphere and understand exactly which air-sea interaction scheme (+ parameters) was used. Verify that we can reproduce the air-sea flux offline with aerobulk-python.
  4. Only at this point could we confidently investigate whether diurnal cycle, monthly averaging, skin temperature, etc. etc. are responsible for this discrepancy.
jbusecke commented 2 years ago

Ok so 1. Is actually implemented in test/test_fortran.py of aerobulk_python now!

Quick update: I reran the above analysis with the skin correction on (just because it was relatively easy to do), and the results are definitely better! image

But I think its not the full story, and following @rabernat steps above seems like the right avenue!

paigem commented 2 years ago

Thanks for retesting this with the skin correction @jbusecke! You're right - definitely better, but not good enough. I'll put this on the agenda for our Monday meeting to discuss our next steps based on @rabernat's suggestion above.

jbusecke commented 2 years ago

Some updates:

I originally did get the zt and zu heights wrong. CM2.6 provides the atmospheric velocities at 10m:

image

And temperature and humidity at provided at 2 m:

image

I have adjusted the defaults on the xarray wrappers in https://github.com/xgcm/aerobulk-python/pull/33

I am afraid this did not really improve the fit between the native model fluxes and the recomputed ones.

The search goes on.