Skip to content
Snippets Groups Projects
Commit ab23d4a8 authored by Evgeny Mortikov's avatar Evgeny Mortikov
Browse files

state eq. implementation update

parent 1f3aca50
No related branches found
No related tags found
Loading
......@@ -67,7 +67,7 @@ module obl_bc
theta_dyn = heat_flux / max(U_dyn, U_dyn_min)
salin_dyn = salin_flux / max(U_dyn, U_dyn_min)
rho_dyn = - Rho_ref * (alpha_state * theta_dyn - beta_state * salin_dyn)
rho_dyn = Rho_ref * ( - alpha_state * theta_dyn + beta_state * salin_dyn)
end subroutine
......
......@@ -243,7 +243,7 @@ program obl_main
call Theta_init (Theta, Theta_dev, grid%cz, grid%dz)
!call Theta_init (Theta, nz, dz)
call Salin_init(Salin, Salin_dev, grid%cz, grid%dz)
call solve_state_eq(Rho, Theta_dev, Salin_dev, grid%cz)
call get_density(Rho, Theta_dev, Salin_dev, grid%cz)
call U_init(U, grid%cz)
call V_init(V, grid%cz)
......
......@@ -153,7 +153,7 @@ module obl_scm
real, intent(in) :: dt
! ----------------------------------------------------------------------------
call solve_state_eq(Rho, Theta_dev, Salin_dev, grid%cz)
call get_density(Rho, Theta_dev, Salin_dev, grid%cz)
end subroutine advance_state_eq_scm
......
module obl_state_eq
!< @brief state equation solver
! --------------------------------------------------------------------------------
! TO DO:
! -- differentiate between using 'dev' & 'full' values
! -- add non-linear state eq. support
! modules used
use obl_math
! --------------------------------------------------------------------------------
! directives list
implicit none
private
! public interface
! --------------------------------------------------------------------------------
public :: get_density, get_density_dev
! --------------------------------------------------------------------------------
real, parameter :: Rho_ref = 999.1285 !< reference density, [kg / m**3]
!real, parameter :: Salin_0 = 35.0 !< reference salinity, [PSU]
real, parameter :: alpha_state = 0.15063 / Rho_ref !< thermal expansion [1 / K]
real, parameter :: beta_state = 7.8 * 0.0001 !< salinity expansion [1 / PSU]
! --------------------------------------------------------------------------------
real, public, parameter :: Rho_ref = 999.1285 !< reference density, [kg / m**3]
real, public, parameter :: Theta_ref = 288.15 !< reference temperature, [K]
real, public, parameter :: Salin_ref = 35.0 !< reference salinity, [PSU]
! reference temperature
real, parameter :: Theta_ref = 288.15 !< [K]
real, parameter :: Salin_ref = 35.0 !< reference salinity, [PSU]
!< linear state eq. parameters
real, public, parameter :: alpha_state = 0.15063 / Rho_ref !< thermal expansion [1 / K]
real, public, parameter :: beta_state = 7.8 * 0.0001 !< salinity expansion [1 / PSU]
! --------------------------------------------------------------------------------
contains
subroutine solve_state_eq (Rho, Theta, Salin, nz)
!< @brief state equation solver
real, intent(out) :: Rho(nz) !< density, [kg / m**3]
integer, intent(in) :: nz !< number of z-steps
real, intent(in) :: Theta(nz) !< temperature, [K]
real, intent(in) :: Salin(nz) !< salinity, [PSU]
integer :: k !< counter
! --------------------------------------------------------------------------------
subroutine get_density(Rho, Theta_dev, Salin_dev, cz)
!< @brief state equation def.
! --------------------------------------------------------------------------------
integer, intent(in) :: cz !< grid size
real, intent(out) :: Rho(cz) !< density, [kg / m**3]
real, intent(in) :: Theta_dev(cz) !< temperature, [K]
real, intent(in) :: Salin_dev(cz) !< salinity, [PSU]
do k = 1, nz
Rho(k) = Rho_ref * (1.0 - alpha_state * (Theta(k)) + beta_state * (Salin(k)))
integer :: k
! --------------------------------------------------------------------------------
do k = 1, cz
Rho(k) = Rho_ref * (1.0 - alpha_state * Theta_dev(k) + beta_state * Salin_dev(k))
end do
end subroutine
subroutine solve_state_eq_dev (Rho_dev, Theta, Salin, nz)
!< @brief state equation solver
! --------------------------------------------------------------------------------
subroutine get_density_dev(Rho_dev, Theta_dev, Salin_dev, cz)
!< @brief state equation def.
! --------------------------------------------------------------------------------
integer, intent(in) :: cz !< grid size
real, intent(out) :: Rho_dev(nz) !< density, [kg / m**3]
integer, intent(in) :: nz !< number of z-steps
real, intent(in) :: Theta(nz) !< temperature, [K]
real, intent(in) :: Salin(nz) !< salinity, [PSU]
integer :: k !< counter
real, intent(out) :: Rho_dev(cz) !< density, [kg / m**3]
real, intent(in) :: Theta_dev(cz) !< temperature, [K]
real, intent(in) :: Salin_dev(cz) !< salinity, [PSU]
integer :: k
! --------------------------------------------------------------------------------
do k = 1, nz
Rho_dev(k) = Rho_ref * (1.0 - alpha_state * (Theta(k)) + beta_state * (Salin(k))) - Rho_ref
do k = 1, cz
Rho_dev(k) = Rho_ref * ( - alpha_state * Theta_dev(k) + beta_state * Salin_dev(k))
end do
end subroutine
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment