Dear users of Croco, I would like to ask a question. When BULK_FLUX and ONLINE are enabled, is sea surface pressure used? First of all, my ERA5_request has not downloaded any nc files related to pressure. So, logically speaking, the model should not have used pressure. However, I saw the pair part in line 779-830 of the source code bulk_flux.F. So, is this used? If not used, then there is no pressure field in the model. Wouldn’t that cause significant problems with water levels and sea levels?
!======================================================================
! EXTERNAL FUNCTIONS
!======================================================================
!=======================================================================
! Compute specific humidity from relative humidity
!=======================================================================
FUNCTION spec_hum (RH,psfc,TairC)
!$acc routine(spec_hum) seq
IMPLICIT NONE
include “params_bulk.h”
REAL :: RH , spec_hum , cff
REAL :: psfc, TairC
!$acc declare create( RH,psfc,TairC )
! !++ Compute air saturation vapor pressure (mb), using Teten formula.
cff=(1.0007+3.46e-60.01psfc)6.1121
& exp(17.502TairC/(240.97+TairC))
!++ Compute specific humidity, Q (kg/kg).
IF (RH.lt.2.0) then ! RH fraction
cff=cffRH ! Vapor pres (mb)
spec_hum=MvoMa*(cff/(psfc0.01-0.378cff)) ! Spec hum (kg/kg)
ELSE !RH input was actually specific humidity in g/kg
spec_hum=0.001*RH ! Spec Hum (kg/kg)
ENDIF
END FUNCTION spec_hum
!=======================================================================
! Compute Exner function from absolute air temperature
!=======================================================================
SUBROUTINE exner_patm_from_tairabs (iexn,pair,q,tairabs,z,psfc)
!$acc routine(exner_patm_from_tairabs) seq
IMPLICIT NONE
include “params_bulk.h”
REAL,INTENT( out) :: iexn,pair
REAL,INTENT(in ) :: q, tairabs, z, psfc
!++ Local variable declarations.
REAL :: xm,q_sat,qsat
REAL, PARAMETER :: g = 9.80665
INTEGER :: iter
INTEGER, PARAMETER :: Niter = 3
!
pair = psfc
!$acc loop seq
DO Iter = 1, Niter
q_sat = qsat(tairabs, pair, 1.)
xm = mm_dryair + (q/q_sat) * ( mm_water - mm_dryair )
pair = psfc * EXP( -g * xm * z / ( r_gas * tairabs ) )
#ifdef OPENACCNUMERIC
pair=real(pair,kind=4)
#endif
ENDDO
iexn = (pair*ip00)**(-rdocpd)
!
return
END SUBROUTINE exner_patm_from_tairabs