Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*Updates in FPMix and Stokes Most #283

Merged
merged 23 commits into from
Sep 9, 2024

Conversation

gustavo-marques
Copy link
Collaborator

@gustavo-marques gustavo-marques commented Jun 21, 2024

This PR revises the formulation of the legacy K-profile parameterization (KPP) ocean boundary layer scheme. It incorporates:

  1. a non-local momentum flux—the Flux-profile parameterization (FPMIX); when the local shear is not aligned with the wind, this scheme adds a non-local momentum flux in the direction of the wind; and
  2. mixing with and without waves following the Monin-Obukhov Similarity Theory expanded to include Stokes drift (STOKES_MOST). This option provides the transition from waveless to ocean surface waves in any stage of growth or decay.

Summary:

  • Uncomment omega w2x entries;
  • Simplify the nonlocal increments in vertFPMix;
  • In the call to CVmix_kpp_compute_unresolved_shear, passes the 2D surface buoyancy flux (surfBuoyFlux2) instead of the 1D version (surfBuoyFlux), which is preferable. This is answer changing;
  • Remove uold and vold diagnostics. These were used in an alternative time-stepping scheme that is now obsolete;
  • Pass boundary layer depths to the RK2 and add consistency check to make sure FPMix is always used with SPLIT;
  • Add the capability to mix down the Eulerian gradient instead of the Lagrangian;
  • Make a minimum set of FPMix diagnostics available.

This PR relies on CVMix/CVMix-src#94.

New diagnostics:


"StokesXI"  
    ! modules: {ocean_model,ocean_model_d2}
    ! long_name: Stokes Similarity Parameter
    ! units: nondim
    ! cell_methods: xh:mean yh:mean area:mean

"Lam2"  
    ! modules: {ocean_model,ocean_model_d2}
    ! long_name: Ustk0_ustar
    ! units: nondim
    ! cell_methods: xh:mean yh:mean area:mean

"uE_h" 
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: x-zonal Eulerian
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean zl:mean area:mean
    ! variants: {uE_h,uE_h_xyave}

"vE_h" 
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: y-merid Eulerian
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean zl:mean area:mean
    ! variants: {vE_h,vE_h_xyave}

"uInc_h"  
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: x-zonal Eulerian
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean zl:mean area:mean
    ! variants: {uInc_h,uInc_h_xyave}

"vInc_h"  
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: x-zonal Eulerian
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean zl:mean area:mean
    ! variants: {vInc_h,vInc_h_xyave}

"uStk" 
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: x-FP du increment
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean zl:mean area:mean
    ! variants: {uStk,uStk_xyave}

"vStk"  
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: y-FP dv increment
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean zl:mean area:mean
    ! variants: {vStk,vStk_xyave}

"Omega_tau2s" 
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: Stress direction from shear
    ! units: radians
    ! cell_methods: xh:mean yh:mean zi:point area:mean
    ! variants: {Omega_tau2s,Omega_tau2s_xyave}

"Omega_tau2w"  
    ! modules: {ocean_model,ocean_model_z,ocean_model_rho2,ocean_model_d2,ocean_model_z_d2,ocean_model_rho2_d2}
    ! long_name: Stress direction from wind
    ! units: radians
    ! cell_methods: xh:mean yh:mean zi:point area:mean
    ! variants: {Omega_tau2w,Omega_tau2w_xyave}

"uStk0"  
    ! modules: {ocean_model,ocean_model_d2}
    ! long_name: Zonal Surface Stokes
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean area:mean

"vStk0"  
    ! modules: {ocean_model,ocean_model_d2}
    ! long_name: Merid Surface Stokes
    ! units: m s-1
    ! cell_methods: xh:mean yh:mean area:mean

* Simplify the nonlocal increments in vertFPMix;
* Pass boundary layer depths to the RK2 and add consistency check
  to make sure FPMix is always used with SPLIT;
* Add the capability to mix down the Eulerian gradient instead of
  the Lagrangian;
* Make a minimum set of FPMix diagnostics available.
@gustavo-marques gustavo-marques marked this pull request as draft July 24, 2024 20:28
@gustavo-marques gustavo-marques changed the title Updates in FPMix Updates in FPMix and Stokes Most Jul 24, 2024
@gustavo-marques gustavo-marques changed the title Updates in FPMix and Stokes Most *Updates in FPMix and Stokes Most Jul 31, 2024
@@ -1542,6 +1673,49 @@ subroutine KPP_NonLocalTransport_saln(CS, G, GV, h, nonLocalTrans, surfFlux, dt,

end subroutine KPP_NonLocalTransport_saln

!> Compute Stokes Drift components at zbot < ztop <= 0 and at k=0.5*(ztop+zbot) and
!! average components from ztop to zbot <= 0
subroutine Compute_StokesDrift(i ,j, ztop, zbot, uS_i, vS_i, uS_k, vS_k, uSbar, vSbar, waves)
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Add units

Changed the empirical coefficient for non-local momentum mixing (Cemp_NL)
from a hardcoded value to a user-defined parameter.
@gustavo-marques gustavo-marques marked this pull request as ready for review August 24, 2024 17:43
klindsay28 and others added 13 commits August 28, 2024 16:06
This is done for DIC, ALK, and related tracers.
This mimics uptake and release of these tracers by sea ice.
* Modify NUOPC cap to accept separate glc runoff fluxes
* (1/2) Add separate fluxes for glc runoff. (2/2) Add heat content fields for lrunoff_glc and frunoff_glc.
* fix merge bugs and add more glc runoff diags
* enable glc runoff flux only if use_glc_runoff is present
* add ALLOW_GLC_RUNOFF_DIAGNOSTICS param to control whether to allow separate glacier runoff fluxes.
correct some indentation issues
MARBL: convert salt_flux to tracer flux and add to STF
Updated MAX_LAYER_THICKNESS to use longString for
handling extended path+filename.
dt_pred, G, GV, US, CS%vertvisc_CSp, CS%OBC)
call vertvisc(up, vp, h, forces, visc, dt_pred, CS%OBC, CS%ADp, CS%CDp, G, &
GV, US, CS%vertvisc_CSp, CS%taux_bot, CS%tauy_bot, waves=waves)
if (ASSOCIATED(CS%KPP_CSp)) call KPP_get_BLD(CS%KPP_CSp, hbl, G, US, m_to_BLD_units=GV%m_to_H)
Copy link
Member

Choose a reason for hiding this comment

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

lowercase keywords

"If true, add non-local momentum flux increments and diffuse down the Eulerian gradient.", &
default=.false.)
if (CS%fpmix) then
call get_param(param_file, "MOM", "CEMP_NL", CS%Cemp_NL, &
Copy link
Member

Choose a reason for hiding this comment

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

MOM?

@alperaltuntas alperaltuntas merged commit 15deea4 into NCAR:dev/ncar Sep 9, 2024
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants