mnlevy1981 / MOM6

Modular Ocean Model
Other
2 stars 0 forks source link

Include KPP nonlocal terms in vertical mixing for passive tracers #54

Closed mnlevy1981 closed 2 years ago

mnlevy1981 commented 2 years ago

It looks like the MOM6 implementation of KPP includes nonlocal terms for temperature and salinity, but not for any of the passive tracers.

mnlevy1981 commented 2 years ago

The terms are applied to T & S in https://github.com/mnlevy1981/MOM6/blob/mnlevy1981/add_MARBL/src/parameterizations/vertical/MOM_diabatic_driver.F90#L1220

    call KPP_NonLocalTransport_temp(CS%KPP_CSp, G, GV, h, CS%KPP_NLTheat,   CS%KPP_temp_flux, &
                                    US%T_to_s*dt, tv%T, US%Q_to_J_kg*tv%C_p)
    call KPP_NonLocalTransport_saln(CS%KPP_CSp, G, GV, h, CS%KPP_NLTscalar, CS%KPP_salt_flux, &
                                    US%T_to_s*dt, tv%S)

as part of diabatic_ALE(), with similar calls in diabatic_ALE_legacy() and layered_diabatic(); this code accesses T & S through thermo_var_ptrs, but I think vertical mixing for the rest of the tracers occurs somewhere else?

mnlevy1981 commented 2 years ago

How should we handle diagnostic quantities for these? It seems like MOM_tracer_flow_control should define the per-tracer nonlocal transport terms, but somehow we need to tell our KPP_NonLocalTransport() function the id for posting

mnlevy1981 commented 2 years ago

Lots of progress made. Current steps to take

  1. Move call to KPP_NonLocalTransport() inside {tracer}_column_physics() so that it happens before call to tracer_vertdiff()

  2. Add to pseudo_salt_tracer module (compare to real salt)

    • Need to verify pseudosalt is equivalent to salt without KPP on!
  3. Clean up register_tracer() so that T and S are not treated as special cases

mnlevy1981 commented 2 years ago

Merged to dev/ncar! https://github.com/NCAR/MOM6/pull/202