aekiss / run_summary

Summarise ACCESS-OM2 runs
Apache License 2.0
1 stars 1 forks source link

Full ocean namelist values #32

Open aidanheerdegen opened 1 year ago

aidanheerdegen commented 1 year ago

Currently the summary is finding all namelist variables that are defined in the various model namelists, e.g. ocean/input.nml, ice/cice_in.nml etc.

Whilst the cice namelists seem to have most (all?) of the namelist variables in the namelist files, MOM5 only has a small subset of the variables, so we're not capturing the default values of many variables.

From the point of view of having a database of everything that went into a model this is a significant knowledge gap.

One option is to add some code to output the namelists before they are updated by reading from the namelist files. Whilst this is potentially a good idea for the future, it doesn't help with historical runs.

We can recover all the ocean namelist variables from the stdout logfile, as MOM5 outputs them from there using f90nml, e.g.

f90nml --format nml <( awk '1;/CICE_COMMIT_HASH/{exit}'  archive/output731/access-om2.out )

This produces 68 namelist groups, with 1434 lines of output.

Note I've used awk to cut down the amount of text f90nml has to parse, with some of the larger files it could take a long time to pull out the namelists which are just at the beginning of the file.

aidanheerdegen commented 1 year ago

From an implementation perspective it is probably better to use the f90nml python interface and take care of only passing the required part of the file in python.

aidanheerdegen commented 1 year ago

@aekiss

I ran these on 01deg_jra55v13_ryf9091 01deg_jra55v140_iaf_cycle4 and dumped them into a couple of yaml files. When I diff them I get reasonable results

$ diff /g/data/tm70/aph502/control_runs/*/input_namelist_complete.yml
4134,4135c4134,4135
<   - 80
<   - 75
---
>   - 150
>   - 100
4142a4143
>   cmip_version: 5
4163c4164
<   min_thickness: 1.0
---
>   min_thickness: 0.001
4841a4843,4861
> ocean_passive_nml:
>   debug_this_module: false
>   common_init_condition: patch
>   layer_value: 1.0
>   layer_ztop: 100.0
>   layer_zbot: 200.0
>   wall_value: 1.0
>   wall_ratio_south: 0.33333
>   wall_ratio_north: 0.66666
>   patch_value: 1.0
>   patch_ztop: 0.0
>   patch_zbot: 200.0
>   patch_ratio1: 0.33333
>   patch_ratio2: 0.66666
>   patch_init_klevel_gaussian: false
>   efold_depth: 1000.0
>   exponential_value: 1.0
>   shelfbowl_north: 70.0
>   shelf_value: 1.0
4844c4864
<   max_advection_velocity: 0.2
---
>   max_advection_velocity: 0.3
4950a4971
>   read_diff_cbt_file: false
5203c5224
<   ncar_boundary_scaling: true
---
>   ncar_boundary_scaling: false
5342a5364,5365
>   do_ustar_correction: true
>   do_frazil_redist: true
5348c5371
<   cdbot: 0.001
---
>   cdbot: 0.0025
5378c5401
<   zmax_pen: 300.0
---
>   zmax_pen: 1000000.0
5519c5542
<   overexch_npts: 4
---
>   overexch_npts: 1
5524c5547
<   overflow_umax: 5.0
---
>   overflow_umax: 1.0
5642c5665
<   num_fields_in: 15
---
>   num_fields_in: 17
5658a5682,5683
>   - licefw
>   - liceht
5660c5685
<     \0"
---
>     \0\0\0\0\0\0\0\0\0"
5671a5697,5700
>   frac_vis_dir: 0.215
>   frac_vis_dif: 0.215
>   frac_nir_dir: 0.285
>   frac_nir_dif: 0.285

There are a few changes as a result of 01deg_jra55v13_ryf9091using a significantly older codebase. The following are only in the01deg_jra55v140_iaf_cycle4` experiment:

01deg_jra55v140_iaf_cycle4 also has passive tracers, which the RYF experiment does not, hence ocean_passive_nml doesn't feature.

There are other differences, notably in zmax_pen, cdbot, near_boundary_scaling, overexh_npts, overflow_umax, max_advection_velocity and min_thickness.

Does that accord with what you thought the differences ought to be @aekiss? Has it missed anything you know about?