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

Incorrect units for tracer flux and tendency diagnostics #363

Open
aekiss opened this issue Feb 10, 2022 · 0 comments
Open

Incorrect units for tracer flux and tendency diagnostics #363

aekiss opened this issue Feb 10, 2022 · 0 comments

Comments

@aekiss
Copy link
Collaborator

aekiss commented Feb 10, 2022

It looks like non-temperature tracer fluxes and tendencies are given generic units that don't take into account the units of the tracer (ie it is assumed the tracer is dimensionless):

else
id_tracer_advection(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_advection', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*advection tendency', &
'kg/(sec*m^2)', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_tracer_advection_on_nrho(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_advection_on_nrho', &
Dens%neutralrho_axes(1:3), Time%model_time, 'rho*dzt*advection tendency binned to neutral density',&
'kg/(sec*m^2)', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_tracer2_advection(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_sq_advection', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*advection tendency for tracer sqrd',&
'kg/(m^2*s)*(tracer squared)', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_sweby_advect(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_sweby_advect', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*sweby advect tendency', &
'kg/(sec*m^2)', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_psom_advect(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_psom_advect', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*psom advect tendency', &
'kg/(sec*m^2)', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_horz_advect(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_horz_advect', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*horz advect tendency', &
'kg/(sec*m^2)', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_vert_advect(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_vert_advect', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*vert advect tendency', &
'kg/(sec*m^2)', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_advection_x(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_x_adv', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*x-advective tendency', &
trim(T_prog(n)%flux_units), missing_value=missing_value, range=(/-1.e18,1.e18/))
id_advection_y(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_y_adv', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*y-advective tendency', &
trim(T_prog(n)%flux_units), missing_value=missing_value, range=(/-1.e18,1.e18/))
id_advection_z(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_z_adv', &
Grd%tracer_axes(1:3), Time%model_time, 'rho*dzt*z-advective tendency', &
trim(T_prog(n)%flux_units), missing_value=missing_value, range=(/-1.e18,1.e18/))
id_xflux_adv(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_xflux_adv', &
Grd%tracer_axes_flux_x(1:3), Time%model_time, 'rho*dzt*dyt*u*tracer', &
'kg/sec', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_yflux_adv(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_yflux_adv', &
Grd%tracer_axes_flux_y(1:3), Time%model_time, 'rho*dzt*dxt*v*tracer', &
'kg/sec', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_zflux_adv(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_zflux_adv', &
Grd%tracer_axes_wt(1:3), Time%model_time, 'rho*dxt*dyt*wt*tracer', &
'kg/sec', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_xflux_adv_int_z(n) = register_diag_field ('ocean_model', &
trim(T_prog(n)%name)//'_xflux_adv_int_z', &
Grd%tracer_axes_flux_x(1:2), Time%model_time, &
'z-integral of rho*dzt*dyt*u*tracer', &
'kg/sec', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_yflux_adv_int_z(n) = register_diag_field ('ocean_model', &
trim(T_prog(n)%name)//'_yflux_adv_int_z', &
Grd%tracer_axes_flux_y(1:2), Time%model_time, &
'z-integral of rho*dzt*dxt*v*tracer', &
'kg/sec', missing_value=missing_value, range=(/-1.e18,1.e18/))
id_tracer_adv_diss(n) = register_diag_field ('ocean_model', trim(T_prog(n)%name)//'_adv_diss', &
Grd%tracer_axes(1:3), Time%model_time, &
'dissipation of squared '//trim(T_prog(n)%name)//' from advection errors', &
'[kg/(m^2*sec)]^2', missing_value=missing_value, &
range=(/-1.e18,1.e18/))
endif

So for example BGC advective flux terms get the wrong units.

e.g. adic_xflux_adv, eg /g/data/ik11/outputs/access-om2-01/01deg_jra55v140_iaf_cycle4/output882/ocean/oceanbgc-3d-adic_xflux_adv-1-monthly-mean-ym_1991_07.nc has

    long_name:      rho*dzt*dyt*u*tracer
    units:          kg/sec

but the adic tracer /g/data/ik11/outputs/access-om2-01/01deg_jra55v140_iaf_cycle4/output882/ocean/oceanbgc-3d-adic-1-monthly-mean-ym_1991_07.nc has

    long_name:      natural + anthropogenic dissolved inorganic carbon
    units:          mmol/m^3

If the adic_xflux_adv long_name is correct, the adic_xflux_adv units should be (mmol kg)/(m^3 sec), which is roughly mol/sec.

Maybe generic units for _xflux_adv should be given as (tracer units)*kg/sec. Similarly for the other fluxes, tendencies etc.

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

No branches or pull requests

1 participant