Skip to content

Conversation

@hkershaw-brown
Copy link
Member

Description:

ROMS option to have model_interpolate salinity units in kg/kg (default) or g/kg
The converters we have in the dart repo: wod, GTSPP, give salinity in kg/kg
I believe this choice of kg/kg for units was for POP. There is no concept of units in observation sequence files or obs_def which is not ideal, but a larger topic beyond the scope of this pull request.

The namelist option allows users to use observation sequences generated outside dart (g/kg)

It would be good to get some oceanography input on this because I am not sure if this pull request is the correct thing to do. There seems to be differing references on whether psu (dimensionless) is exactly the same as g/kg

I'm following this convention:
1ef07d8
and using /1000. But maybe this is not correct.

Fixes issue

fixes #1003

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update

Documentation changes needed?

  • My change requires a change to the documentation.
    • I have updated the documentation accordingly.

Tests

Please describe any tests you ran to verify your changes.
PMO to take a look at interpolated values

Checklist for merging

  • Updated changelog entry
  • Documentation updated
  • Update conf.py

Checklist for release

  • Merge into main
  • Create release from the main branch with appropriate tag
  • Delete feature-branch

Testing Datasets

  • Dataset needed for testing available upon request
  • Dataset download instructions included
  • No dataset needed

Copy link
Contributor

@mgharamti mgharamti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very Good! I'll need to test a filtering cycle with those changes.

As far as units, you're correct PSU is not technically g/kg but very close to it. The reason for that is because it's defined using conductivity ratios and not mass fraction. Thought, it is well accepted that: S{kg/kg} = S{psu}/1000

* - ``convert_salinity_to_kgkg``
- `logical`
- `.true.`
- If true, module_interpolate salinity output is converted to kg/kg, otherwise PSU (g/g) is used. Be sure to match observation units.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PSU (g/kg)

integer :: assimilation_period_seconds = 0 ! Assimilation window in secs
real(r8) :: perturbation_amplitude = 0.02 ! Perturbation size for generating an ensemble
integer :: debug = 0 ! Turn up for more debug messages
logical :: convert_salinity_to_kgkg = .true. ! model_interpolate salinity ouput in kg/kg
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would default this to .false. and add it to the input.nml given its importance

Copy link
Member Author

@hkershaw-brown hkershaw-brown Dec 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Chatting with the WHOI folks about this who agree, PSU is the way to go as the default.
Crocolake converter - PSU
MOM6, ROMS - option to have /1000 so you can use the dart bank of WOD obs on glade, but default is PSU.

expected_obs = sensible_temp(expected_T, expected_S, pdbar)
endif

if (convert_salinity_to_kgkg .and. qty == QTY_SALINITY) expected_obs = expected_obs / CONCENTRATION_TO_PPT
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good. This is the right location. We don't want to do that prior to the sensible temperature computation (we need salinity to be in PSU there).

@hkershaw-brown hkershaw-brown self-assigned this Dec 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: ROMS salinity unit mismatch dart observation converters wod, GTSPP are in MSU

3 participants