NOAA-EMC / godas

7 stars 4 forks source link

MOM6 DA history collection #354

Closed guillaumevernieres closed 2 years ago

guillaumevernieres commented 2 years ago

Description

As an alternative to dumping intermittent MOM6 restarts, add a DA history collection to the diag_table that would include hourly snapshots of:

- Potential temp
- salt
- currents
- ave_ssh
- h
- mld
- ...

Deliverable

Definition of done

Not clear as of now. Options:

guillaumevernieres commented 2 years ago

@hyunchul386 , happy to discuss this issue when you have time.

hyunchul386 commented 2 years ago

@guillaumevernieres Following is a collection in diag_table for the history of ODA. This diag_table gave six sets of one hourly snap shop in each files. for example, ocn_2021_03_22_13.nc have the one hourly snap shots from 2021-03-22 13Z to 2021-03-22 18Z.

###################### "ocn%4yr%2mo%2dy%2hr", 0, "hours", 1, "hours", "time", 6, "hours", "1901 1 1 0 0 0" ##############################################

static fields

"ocean_model", "geolon", "geolon", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 "ocean_model", "geolat", "geolat", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2

ocean output TSUV and others

"ocean_model", "SSH", "SSH", "ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2 "ocean_model", "SST", "SST", "ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2 "ocean_model", "SSS", "SSS", "ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2 "ocean_model", "MLD_0125", "MLD", "ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2

Z-Space Fields Provided for CMIP6 (CMOR Names):

===============================================

"ocean_model_z","uo","u" ,"ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2 "ocean_model_z","vo","v" ,"ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2 "ocean_model_z","so","salt" ,"ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2 "ocean_model_z","temp","temp" ,"ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2 "ocean_model_z","h","h" ,"ocn%4yr%2mo%2dy%2hr","all",.false.,"none",2

=============================================================================================

The variables in each file are GEOLON Longitude of tracer (T) points 1:72 1:35 ... ... GEOLAT Latitude of tracer (T) points 1:72 1:35 ... ... SSH Sea Surface Height 1:72 1:35 ... 1:6 SST Sea Surface Temperature 1:72 1:35 ... 1:6 SSS Sea Surface Salinity 1:72 1:35 ... 1:6 MLD Mixed layer depth (delta rho = 1:72 1:35 ... 1:6 U Sea Water X Velocity 1:72 1:35 1:33 1:6 V Sea Water Y Velocity 1:72 1:35 1:33 1:6 SALT Sea Water Salinity 1:72 1:35 1:33 1:6 TEMP Potential Temperature 1:72 1:35 1:33 1:6 H Layer Thickness 1:72 1:35 1:33 1:6

The data from ncdump are netcdf ocn_2021_03_22_13 { dimensions: xh = 72 ; yh = 35 ; time = UNLIMITED ; // (6 currently) xq = 72 ; z_l = 33 ; z_i = 34 ; yq = 35 ; variables: double xh(xh) ; xh:units = "degrees_east" ; xh:long_name = "h point nominal longitude" ; xh:axis = "X" ; double yh(yh) ; yh:units = "degrees_north" ; yh:long_name = "h point nominal latitude" ; yh:axis = "Y" ; double time(time) ; time:units = "hours since 2021-03-22 06:00:00" ; time:long_name = "time" ; time:axis = "T" ; time:calendar_type = "JULIAN" ; time:calendar = "julian" ; double xq(xq) ; xq:units = "degrees_east" ; xq:long_name = "q point nominal longitude" ; xq:axis = "X" ; double z_l(z_l) ; z_l:units = "meters" ; z_l:long_name = "Depth at cell center" ; z_l:axis = "Z" ; z_l:positive = "down" ; z_l:edges = "z_i" ; double z_i(z_i) ; z_i:units = "meters" ; z_i:long_name = "Depth at interface" ; z_i:axis = "Z" ; z_i:positive = "down" ; double yq(yq) ; yq:units = "degrees_north" ; yq:long_name = "q point nominal latitude" ; yq:axis = "Y" ; float geolon(yh, xh) ; geolon:_FillValue = 1.e+20f ; geolon:missing_value = 1.e+20f ; geolon:units = "degrees_east" ; geolon:long_name = "Longitude of tracer (T) points" ; geolon:cell_methods = "time: point" ; float geolat(yh, xh) ; geolat:_FillValue = 1.e+20f ; geolat:missing_value = 1.e+20f ; geolat:units = "degrees_north" ; geolat:long_name = "Latitude of tracer (T) points" ; geolat:cell_methods = "time: point" ; float SSH(time, yh, xh) ; SSH:_FillValue = 1.e+20f ; SSH:missing_value = 1.e+20f ; SSH:units = "m" ; SSH:long_name = "Sea Surface Height" ; SSH:cell_methods = "area:mean yh:mean xh:mean time: point" ; float SST(time, yh, xh) ; SST:_FillValue = 1.e+20f ; SST:missing_value = 1.e+20f ; SST:units = "degC" ; SST:long_name = "Sea Surface Temperature" ; SST:cell_methods = "area:mean yh:mean xh:mean time: point" ; float SSS(time, yh, xh) ; SSS:_FillValue = 1.e+20f ; SSS:missing_value = 1.e+20f ; SSS:units = "psu" ; SSS:long_name = "Sea Surface Salinity" ; SSS:cell_methods = "area:mean yh:mean xh:mean time: point" ; float MLD(time, yh, xh) ; MLD:_FillValue = 1.e+20f ; MLD:missing_value = 1.e+20f ; MLD:units = "m" ; MLD:long_name = "Mixed layer depth (delta rho = 0.125)" ; MLD:cell_methods = "area:mean yh:mean xh:mean time: point" ; float u(time, z_l, yh, xq) ; u:_FillValue = 1.e+20f ; u:missing_value = 1.e+20f ; u:units = "m s-1" ; u:long_name = "Sea Water X Velocity" ; u:cell_methods = "z_l:mean yh:mean xq:point time: point" ; u:standard_name = "sea_water_x_velocity" ; u:interp_method = "none" ; float v(time, z_l, yq, xh) ; v:_FillValue = 1.e+20f ; v:missing_value = 1.e+20f ; v:units = "m s-1" ; v:long_name = "Sea Water Y Velocity" ; v:cell_methods = "z_l:mean yq:point xh:mean time: point" ; v:standard_name = "sea_water_y_velocity" ; v:interp_method = "none" ; float salt(time, z_l, yh, xh) ; salt:_FillValue = 1.e+20f ; salt:missing_value = 1.e+20f ; salt:units = "psu" ; salt:long_name = "Sea Water Salinity" ; salt:cell_methods = "area:mean z_l:mean yh:mean xh:mean time: point" ; salt:standard_name = "sea_water_salinity" ; float temp(time, z_l, yh, xh) ; temp:_FillValue = 1.e+20f ; temp:missing_value = 1.e+20f ; temp:units = "degC" ; temp:long_name = "Potential Temperature" ; temp:cell_methods = "area:mean z_l:mean yh:mean xh:mean time: point" ; float h(time, z_l, yh, xh) ; h:_FillValue = 1.e+20f ; h:missing_value = 1.e+20f ; h:units = "m" ; h:long_name = "Layer Thickness" ; h:cell_methods = "area:mean z_l:sum yh:mean xh:mean time: point" ;

// global attributes: :NumFilesInSet = 1 ; :title = "20210322.06Z.C48.64bit.non-mono" ; :grid_type = "regular" ; :grid_tile = "N/A" ;

The diag_table and outputs can be found at /work/noaa/stmp/hlee/stmp/hlee/FV3_RT/cpld_c48/cpld_control_c48/diag_table_ocn_history /work/noaa/stmp/hlee/stmp/hlee/FV3_RT/cpld_c48/cpld_control_c48/ocn_202103??_??.nc

ShastriPaturi commented 2 years ago

@hyunchul386 you could add: "ocean_model_z","umo","umo" (for transport) "ocean_model_z","vmo","vmo" "ocean_model","MLD_003" , "MLD_003"

and other variables.

guillaumevernieres commented 2 years ago

@hyunchul386 you could add: "ocean_model_z","umo","umo" (for transport) "ocean_model_z","vmo","vmo" "ocean_model","MLD_003" , "MLD_003"

and other variables.

We're building a collection for DA, not diagnostic @ShastriPaturi . But we do need an mld estimate.

hyunchul386 commented 2 years ago

The diag_table includes MLD, based on density. Do we need both MLD's?

guillaumevernieres commented 2 years ago

Thanks @hyunchul386 . A few comments:

The diag_table includes MLD, based on density. Do we need both MLD's?

Nope, we only need one.

ShastriPaturi commented 2 years ago

For CICE6 variables:

"icemodel","siconc", "sic", "sicm%4yr%3dy_%2hr","all","mean","none",2

"icemodel","sithick", "sih", "sicm%4yr%3dy_%2hr","all","mean","none",2

"sicm%4yr%3dy%2hr", 1,"days", 1, "days","Time", 1,"days" for daily.

hyunchul386 commented 2 years ago

@ShastriPaturi, I will take a look at "siconc" and "sithick", and what is the variable for "hsnon"?

ShastriPaturi commented 2 years ago

@ShastriPaturi, I will take a look at "siconc" and "sithick", and what is the variable for "hsnon"?

Good question. I will need to look.

guillaumevernieres commented 2 years ago

@hyunchul386 & @ShastriPaturi , I'm not too interested in cice for now, sorting out the issues in my comment above would be more useful.

hyunchul386 commented 2 years ago

The ocean_da history files by /work/noaa/stmp/hlee/stmp/hlee/FV3_RT/cpld_c48/cpld_control_c48/diag_table_ocn_da :

guillaumevernieres commented 2 years ago

Thanks @hyunchul386 . A few questions/requests:

hyunchul386 commented 2 years ago
guillaumevernieres commented 2 years ago

@hyunchul386 it all sounds good. Please double check, but it seems that (u,v) are saved on the native grid, but are marked as "mean" because they have been rotated (meridional/zonal as opposed to following the logical grid). Can you confirm?

guillaumevernieres commented 2 years ago

@hyunchul386 , I generated the diag files for the period specified in the description using your diag_table. I was also able to read them with soca after modifying the layer thickness field.

hyunchul386 commented 2 years ago

@guillaumevernieres I am checking the native grid representation and will update it

hyunchul386 commented 2 years ago

@guillaumevernieres, in my view,

hyunchul386 commented 2 years ago
guillaumevernieres commented 2 years ago
  • create feature/ocn_da_diag_table to add the diag_table as ~/parm/soca/mom6/diag_table

Sounds good @hyunchul386 . Create a pull request when ready.

hyunchul386 commented 2 years ago

@guillaumevernieres There was the confirmation from Jiande, modeling group that the diag_table provide fields at the MOM6 native grid without rotational process. A PR was created.