MOM6
mom_eos_nemo::calculate_density_nemo Interface Reference

Detailed Description

Compute the in situ density of sea water ([kg m-3]), or its anomaly with respect to a reference density, from absolute salinity (g/kg), conservative temperature (in deg C), and pressure [Pa], using the expressions derived for use with NEMO.

Definition at line 28 of file MOM_EOS_NEMO.F90.

Private functions

subroutine calculate_density_scalar_nemo (T, S, pressure, rho, rho_ref)
 This subroutine computes the in situ density of sea water (rho in [kg m-3]) from absolute salinity (S [g kg-1]), conservative temperature (T [degC]), and pressure [Pa]. It uses the expressions derived for use with NEMO. More...
 
subroutine calculate_density_array_nemo (T, S, pressure, rho, start, npts, rho_ref)
 This subroutine computes the in situ density of sea water (rho in [kg m-3]) from absolute salinity (S [g kg-1]), conservative temperature (T [degC]), and pressure [Pa]. It uses the expressions derived for use with NEMO. More...
 

Functions and subroutines

◆ calculate_density_array_nemo()

subroutine mom_eos_nemo::calculate_density_nemo::calculate_density_array_nemo ( real, dimension(:), intent(in)  T,
real, dimension(:), intent(in)  S,
real, dimension(:), intent(in)  pressure,
real, dimension(:), intent(out)  rho,
integer, intent(in)  start,
integer, intent(in)  npts,
real, intent(in), optional  rho_ref 
)
private

This subroutine computes the in situ density of sea water (rho in [kg m-3]) from absolute salinity (S [g kg-1]), conservative temperature (T [degC]), and pressure [Pa]. It uses the expressions derived for use with NEMO.

Parameters
[in]tConservative temperature [degC].
[in]sAbsolute salinity [g kg-1].
[in]pressurepressure [Pa].
[out]rhoin situ density [kg m-3].
[in]startthe starting point in the arrays.
[in]nptsthe number of values to calculate.
[in]rho_refA reference density [kg m-3].

Definition at line 206 of file MOM_EOS_NEMO.F90.

206  real, dimension(:), intent(in) :: T !< Conservative temperature [degC].
207  real, dimension(:), intent(in) :: S !< Absolute salinity [g kg-1].
208  real, dimension(:), intent(in) :: pressure !< pressure [Pa].
209  real, dimension(:), intent(out) :: rho !< in situ density [kg m-3].
210  integer, intent(in) :: start !< the starting point in the arrays.
211  integer, intent(in) :: npts !< the number of values to calculate.
212  real, optional, intent(in) :: rho_ref !< A reference density [kg m-3].
213 
214  ! Local variables
215  real :: zp, zt, zh, zs, zr0, zn, zn0, zn1, zn2, zn3, zs0
216  integer :: j
217 
218  do j=start,start+npts-1
219  !Conversions
220  zs = s(j) !gsw_sr_from_sp(S(j)) !Convert practical salinity to absolute salinity
221  zt = t(j) !gsw_ct_from_pt(S(j),T(j)) !Convert potential temp to conservative temp
222  zp = pressure(j)* pa2db !Convert pressure from Pascal to decibar
223 
224  !The following algorithm was provided by Roquet in a private communication.
225  !It is not necessarily the algorithm used in NEMO ocean!
226  zp = zp * r1_p0 !pressure
227  zt = zt * r1_t0 !temperature
228  zs = sqrt( abs( zs + rdeltas ) * r1_s0 ) ! square root salinity
229 
230  zn3 = eos013*zt &
231  & + eos103*zs+eos003
232 
233  zn2 = (eos022*zt &
234  & + eos112*zs+eos012)*zt &
235  & + (eos202*zs+eos102)*zs+eos002
236 
237  zn1 = (((eos041*zt &
238  & + eos131*zs+eos031)*zt &
239  & + (eos221*zs+eos121)*zs+eos021)*zt &
240  & + ((eos311*zs+eos211)*zs+eos111)*zs+eos011)*zt &
241  & + (((eos401*zs+eos301)*zs+eos201)*zs+eos101)*zs+eos001
242 
243  zn0 = (((((eos060*zt &
244  & + eos150*zs+eos050)*zt &
245  & + (eos240*zs+eos140)*zs+eos040)*zt &
246  & + ((eos330*zs+eos230)*zs+eos130)*zs+eos030)*zt &
247  & + (((eos420*zs+eos320)*zs+eos220)*zs+eos120)*zs+eos020)*zt &
248  & + ((((eos510*zs+eos410)*zs+eos310)*zs+eos210)*zs+eos110)*zs+eos010)*zt
249 
250  zs0 = (((((eos600*zs+eos500)*zs+eos400)*zs+eos300)*zs+eos200)*zs+eos100)*zs + eos000
251 
252  zr0 = (((((r05 * zp+r04) * zp+r03 ) * zp+r02 ) * zp+r01) * zp+r00) * zp
253 
254  if (present(rho_ref)) then
255  zn = ( ( zn3 * zp + zn2 ) * zp + zn1 ) * zp + (zn0 + (zs0 - rho_ref))
256  rho(j) = ( zn + zr0 ) ! density
257  else
258  zn = ( ( zn3 * zp + zn2 ) * zp + zn1 ) * zp + (zn0 + zs0)
259  rho(j) = ( zn + zr0 ) ! density
260  endif
261 
262  enddo

◆ calculate_density_scalar_nemo()

subroutine mom_eos_nemo::calculate_density_nemo::calculate_density_scalar_nemo ( real, intent(in)  T,
real, intent(in)  S,
real, intent(in)  pressure,
real, intent(out)  rho,
real, intent(in), optional  rho_ref 
)
private

This subroutine computes the in situ density of sea water (rho in [kg m-3]) from absolute salinity (S [g kg-1]), conservative temperature (T [degC]), and pressure [Pa]. It uses the expressions derived for use with NEMO.

Parameters
[in]tConservative temperature [degC].
[in]sAbsolute salinity [g kg-1].
[in]pressurepressure [Pa].
[out]rhoIn situ density [kg m-3].
[in]rho_refA reference density [kg m-3].

Definition at line 181 of file MOM_EOS_NEMO.F90.

181  real, intent(in) :: T !< Conservative temperature [degC].
182  real, intent(in) :: S !< Absolute salinity [g kg-1].
183  real, intent(in) :: pressure !< pressure [Pa].
184  real, intent(out) :: rho !< In situ density [kg m-3].
185  real, optional, intent(in) :: rho_ref !< A reference density [kg m-3].
186 
187  real :: al0, p0, lambda
188  integer :: j
189  real, dimension(1) :: T0, S0, pressure0
190  real, dimension(1) :: rho0
191 
192  t0(1) = t
193  s0(1) = s
194  pressure0(1) = pressure
195 
196  call calculate_density_array_nemo(t0, s0, pressure0, rho0, 1, 1, rho_ref)
197  rho = rho0(1)
198 

The documentation for this interface was generated from the following file: