Skip to content
Snippets Groups Projects
Commit f6894f6a authored by WAUTELET Philippe's avatar WAUTELET Philippe
Browse files

Philippe 12/05/2022: stations + profilers: add STATPROF_INSTANT subroutine

parent 33d77245
No related branches found
No related tags found
No related merge requests found
......@@ -2116,20 +2116,18 @@ IF (LFLYER) &
!* 24.2 STATION (observation diagnostic)
! --------------------------------
!
IF ( LSTATION ) &
CALL STATION_n(XTSTEP, XZZ, &
XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST )
IF ( LSTATION ) &
CALL STATION_n( XZZ, XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST )
!
!---------------------------------------------------------
!
!* 24.3 PROFILER (observation diagnostic)
! ---------------------------------
!
IF ( LPROFILER ) &
CALL PROFILER_n(XTSTEP, &
XZZ, XRHODREF, &
XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
XAER, XCIT, PSEA=ZSEA(:,:))
IF ( LPROFILER ) &
CALL PROFILER_n( XZZ, XRHODREF, &
XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
XAER, XCIT, PSEA=ZSEA(:,:) )
!
!
CALL SECOND_MNH2(ZTIME2)
......
......@@ -9,12 +9,10 @@ MODULE MODI_PROFILER_n
!
INTERFACE
!
SUBROUTINE PROFILER_n( PTSTEP, &
PZ, PRHODREF, &
SUBROUTINE PROFILER_n( PZ, PRHODREF, &
PU, PV, PW, PTH, PR, PSV, PTKE, &
PTS, PP, PAER, PCIT, PSEA )
!
REAL, INTENT(IN) :: PTSTEP ! time step
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array
REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! horizontal wind X component
REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! horizontal wind Y component
......@@ -39,8 +37,7 @@ END INTERFACE
END MODULE MODI_PROFILER_n
!
! ########################################################
SUBROUTINE PROFILER_n( PTSTEP, &
PZ, PRHODREF, &
SUBROUTINE PROFILER_n( PZ, PRHODREF, &
PU, PV, PW, PTH, PR, PSV, PTKE, &
PTS, PP, PAER, PCIT, PSEA )
! ########################################################
......@@ -120,12 +117,12 @@ USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I => XALPHAR, XNUR_I => XNUR, XLBEXR_I
XALPHAI_I => XALPHAI, XNUI_I => XNUI, XDI_I => XDI, XLBEXI_I => XLBEXI, &
XLBI_I => XLBI, XAI_I => XAI, XBI_I => XBI, XC_I_I => XC_I, &
XRTMIN_I => XRTMIN, XCONC_LAND, XCONC_SEA
USE MODD_TIME_n, only: tdtcur
!
USE MODE_FGAU, ONLY: GAULAG
USE MODE_FSCATTER, ONLY: BHMIE, QEPSI, QEPSW, MG, MOMG
USE MODE_MSG
USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INTERP_2D, STATPROF_INTERP_3D, STATPROF_INTERP_3D_U, STATPROF_INTERP_3D_V
USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INSTANT, STATPROF_INTERP_2D, STATPROF_INTERP_3D, &
STATPROF_INTERP_3D_U, STATPROF_INTERP_3D_V
!
USE MODI_GPS_ZENITH_GRID
USE MODI_WATER_SUM
......@@ -137,7 +134,6 @@ IMPLICIT NONE
!* 0.1 declarations of arguments
!
!
REAL, INTENT(IN) :: PTSTEP ! time step
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array
REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! horizontal wind X component
REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! horizontal wind Y component
......@@ -249,30 +245,18 @@ IKE = IKU-JPVEXT
!
!----------------------------------------------------------------------------
!
!
!* 3.4 instant of storage
! ------------------
!
IF ( TPROFILERS_TIME%XTIME_CUR == XUNDEF ) TPROFILERS_TIME%XTIME_CUR = TPROFILERS_TIME%XTSTEP - PTSTEP
!
TPROFILERS_TIME%XTIME_CUR = TPROFILERS_TIME%XTIME_CUR + PTSTEP
!
IF ( TPROFILERS_TIME%XTIME_CUR >= TPROFILERS_TIME%XTSTEP - 1.E-10 ) THEN
TPROFILERS_TIME%XTIME_CUR = TPROFILERS_TIME%XTIME_CUR - TPROFILERS_TIME%XTSTEP
TPROFILERS_TIME%N_CUR = TPROFILERS_TIME%N_CUR + 1
IN = TPROFILERS_TIME%N_CUR
tprofilers_time%tpdates(in) = tdtcur
ELSE
!No profiler storage at this time step
RETURN
END IF
CALL STATPROF_INSTANT( TPROFILERS_TIME, IN )
IF ( IN < 1 ) RETURN !No profiler storage at this time step
!
!----------------------------------------------------------------------------
!
!* 8. DATA RECORDING
! --------------
!
!PW: TODO: ne faire le calcul que si necessaire (presence de profileurs locaux,...)
ZTEMP(:,:,:)=PTH(:,:,:)*(PP(:,:,:)/ XP00) **(XRD/XCPD)
! Theta_v
ZTHV(:,:,:) = PTH(:,:,:) / (1.+WATER_SUM(PR(:,:,:,:)))*(1.+PR(:,:,:,1)/ZRDSRV)
......
......@@ -9,11 +9,10 @@ MODULE MODI_STATION_n
!
INTERFACE
!
SUBROUTINE STATION_n( PTSTEP, PZ, &
SUBROUTINE STATION_n( PZ, &
PU, PV, PW, PTH, PR, PSV, PTKE, &
PTS, PP )
!
REAL, INTENT(IN) :: PTSTEP ! time step
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array
REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! horizontal wind X component
REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! horizontal wind Y component
......@@ -34,7 +33,7 @@ END INTERFACE
END MODULE MODI_STATION_n
!
! #######################################################
SUBROUTINE STATION_n( PTSTEP, PZ, &
SUBROUTINE STATION_n( PZ, &
PU, PV, PW, PTH, PR, PSV, PTKE, &
PTS, PP )
! #######################################################
......@@ -87,13 +86,12 @@ USE MODD_CONF, ONLY: LCARTESIAN
USE MODD_CST, ONLY: XPI
USE MODD_DIAG_IN_RUN
USE MODD_GRID, ONLY: XBETA, XLON0, XRPK
USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF
USE MODD_PARAMETERS, ONLY: JPVEXT
USE MODD_PARAM_n, ONLY: CRAD
USE MODD_STATION_n
USE MODD_ALLSTATION_n, ONLY: LDIAG_SURFRAD
USE MODD_TIME_n, ONLY: tdtcur
!
USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
USE MODE_STATPROF_TOOLS, ONLY: STATPROF_INSTANT, STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
!
!
IMPLICIT NONE
......@@ -102,7 +100,6 @@ IMPLICIT NONE
!* 0.1 declarations of arguments
!
!
REAL, INTENT(IN) :: PTSTEP ! time step
REAL, DIMENSION(:,:,:), INTENT(IN) :: PZ ! z array
REAL, DIMENSION(:,:,:), INTENT(IN) :: PU ! horizontal wind X component
REAL, DIMENSION(:,:,:), INTENT(IN) :: PV ! horizontal wind Y component
......@@ -134,19 +131,8 @@ INTEGER :: JK ! loop for levels
!* 3.4 instant of storage
! ------------------
!
IF ( TSTATIONS_TIME%XTIME_CUR == XUNDEF ) TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTSTEP - PTSTEP
!
TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTIME_CUR + PTSTEP
!
IF ( TSTATIONS_TIME%XTIME_CUR >= TSTATIONS_TIME%XTSTEP - 1.E-10 ) THEN
TSTATIONS_TIME%XTIME_CUR = TSTATIONS_TIME%XTIME_CUR - TSTATIONS_TIME%XTSTEP
TSTATIONS_TIME%N_CUR = TSTATIONS_TIME%N_CUR + 1
IN = TSTATIONS_TIME%N_CUR
tstations_time%tpdates(in) = tdtcur
ELSE
!No station storage at this time step
RETURN
END IF
CALL STATPROF_INSTANT( TSTATIONS_TIME, IN )
IF ( IN < 1 ) RETURN !No profiler storage at this time step
!
!----------------------------------------------------------------------------
!
......
......@@ -13,7 +13,7 @@
MODULE MODE_STATPROF_TOOLS
! ###################
USE MODD_TYPE_STATPROF, ONLY: TPROFILERDATA, TSTATIONDATA, TSTATPROFDATA
USE MODD_TYPE_STATPROF, ONLY: TPROFILERDATA, TSTATIONDATA, TSTATPROFDATA, TSTATPROFTIME
IMPLICIT NONE
......@@ -25,6 +25,7 @@ PUBLIC :: STATPROF_POSITION
PUBLIC :: PROFILER_ADD, STATION_ADD
PUBLIC :: STATPROF_INTERP_2D, STATPROF_INTERP_2D_U, STATPROF_INTERP_2D_V
PUBLIC :: STATPROF_INTERP_3D, STATPROF_INTERP_3D_U, STATPROF_INTERP_3D_V
PUBLIC :: STATPROF_INSTANT
CONTAINS
......@@ -723,5 +724,40 @@ FUNCTION STATPROF_INTERP_3D_V( TPSTATPROF, PA ) RESULT( PB )
END FUNCTION STATPROF_INTERP_3D_V
! #################################################
SUBROUTINE STATPROF_INSTANT( TPSTATPROF_TIME, KIN )
! #################################################
USE MODD_DYN_n, ONLY: XTSTEP
USE MODD_PARAMETERS, ONLY: XUNDEF
USE MODD_TIME_n, ONLY: TDTCUR
USE MODE_MSG
IMPLICIT NONE
TYPE(TSTATPROFTIME), INTENT(INOUT) :: TPSTATPROF_TIME
INTEGER, INTENT(OUT) :: KIN ! Current step of storage
IF ( TPSTATPROF_TIME%XTIME_CUR == XUNDEF ) TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTSTEP - XTSTEP
TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTIME_CUR + XTSTEP
IF ( TPSTATPROF_TIME%XTIME_CUR >= TPSTATPROF_TIME%XTSTEP - 1.E-10 ) THEN
TPSTATPROF_TIME%XTIME_CUR = TPSTATPROF_TIME%XTIME_CUR - TPSTATPROF_TIME%XTSTEP
TPSTATPROF_TIME%N_CUR = TPSTATPROF_TIME%N_CUR + 1
KIN = TPSTATPROF_TIME%N_CUR
IF ( KIN < 1 .OR. KIN > SIZE( TPSTATPROF_TIME%TPDATES ) ) THEN
CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'STATPROF_INSTANT', 'problem with step of storage' )
KIN = -2
ELSE
TPSTATPROF_TIME%TPDATES(KIN) = TDTCUR
END IF
ELSE
! Return an invalid step number
KIN = -1
END IF
END SUBROUTINE STATPROF_INSTANT
END MODULE MODE_STATPROF_TOOLS
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment