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

Philippe 16/11/2022: profilers: rename VISI -> VISIGUL + compute visibilities...

Philippe 16/11/2022: profilers: rename VISI -> VISIGUL + compute visibilities only when it has a meaning (there were NaN if not...)
parent d6efb9ad
No related branches found
No related tags found
No related merge requests found
......@@ -134,7 +134,7 @@ TYPE, EXTENDS( TSTATPROFDATA ) :: TPROFILERDATA
REAL, DIMENSION(:,:), ALLOCATABLE :: XTKE ! tke(n)
REAL, DIMENSION(:,:), ALLOCATABLE :: XTH ! th(n)
REAL, DIMENSION(:,:), ALLOCATABLE :: XTHV ! thv(n)
REAL, DIMENSION(:,:), ALLOCATABLE :: XVISI ! VISI(n)
REAL, DIMENSION(:,:), ALLOCATABLE :: XVISIGUL ! VISI GULTEPE(n)
REAL, DIMENSION(:,:), ALLOCATABLE :: XVISIKUN ! VISI KUNKEL(n)
REAL, DIMENSION(:,:), ALLOCATABLE :: XCRARE ! radar reflectivity (n)
REAL, DIMENSION(:,:), ALLOCATABLE :: XCRARE_ATT ! radar attenuated reflectivity (n)
......
......@@ -91,7 +91,7 @@ END MODULE MODI_PROFILER_n
USE MODD_CST, ONLY: XCPD, XG, XLAM_CRAD, XLIGHTSPEED, XP00, XPI, XRD, XRHOLW, XRV, XTT
USE MODD_DIAG_IN_RUN
USE MODD_GRID, ONLY: XBETA, XLON0, XRPK
USE MODD_NSV, ONLY: NSV_C2R2BEG, NSV_C2R2END, NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR
USE MODD_NSV, ONLY: NSV_C2R2, NSV_C2R2BEG, NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR
USE MODD_PARAMETERS, ONLY: JPVEXT, XUNDEF
USE MODD_PARAM_LIMA, ONLY: XALPHAR_L => XALPHAR, XNUR_L => XNUR, XALPHAS_L => XALPHAS, XNUS_L => XNUS, &
XALPHAG_L => XALPHAG, XNUG_L => XNUG, XALPHAI_L => XALPHAI, XNUI_L => XNUI, &
......@@ -199,7 +199,7 @@ REAL :: ZZWDR ! ZWD correction at station location
!
REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2)) :: ZZTD,ZZHD,ZZWD
REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZTEMP,ZTHV,ZTEMPV
REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZVISI,ZVISIKUN
REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZVISIGUL, ZVISIKUN
REAL :: ZK1,ZK2,ZK3 ! k1, k2 and K3 atmospheric refractivity constants
REAL :: ZRDSRV ! XRD/XRV
!
......@@ -262,19 +262,22 @@ ZTHV(:,:,:) = PTH(:,:,:) / (1.+WATER_SUM(PR(:,:,:,:)))*(1.+PR(:,:,:,1)/ZRDSRV)
! virtual temperature
ZTEMPV(:,:,:)=ZTHV(:,:,:)*(PP(:,:,:)/ XP00) **(XRD/XCPD)
CALL GPS_ZENITH_GRID(PR(:,:,:,1),ZTEMP,PP,ZZTD,ZZHD,ZZWD)
! Kunkel formulation
IF (SIZE(PR,4) >= 2) THEN
IF ( CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' ) THEN
! Gultepe formulation
ZVISIGUL(:,:,:) = 10E5 !default value
WHERE ( (PR(:,:,:,2) /=0. ) .AND. (PSV(:,:,:,NSV_C2R2BEG+1) /=0. ) )
ZVISIGUL(:,:,:) =1.002/(PR(:,:,:,2)*PRHODREF(:,:,:)*PSV(:,:,:,NSV_C2R2BEG+1))**0.6473
END WHERE
END IF
IF ( CCLOUD /= 'NONE' .AND. CCLOUD /= 'REVE' ) THEN
! Kunkel formulation
ZVISIKUN(:,:,:) = 10E5 !default value
WHERE ( PR(:,:,:,2) /=0 )
ZVISIKUN(:,:,:) =0.027/(10**(-8)+(PR(:,:,:,2)/(1+PR(:,:,:,2))*PRHODREF(:,:,:)*1000))**0.88
END WHERE
END IF
! Gultepe formulation
IF ((SIZE(PR,4) >= 2) .AND. NSV_C2R2END /= 0 ) THEN
WHERE ( (PR(:,:,:,2) /=0. ) .AND. (PSV(:,:,:,NSV_C2R2BEG+1) /=0. ) )
ZVISI(:,:,:) =1.002/(PR(:,:,:,2)*PRHODREF(:,:,:)*PSV(:,:,:,NSV_C2R2BEG+1))**0.6473
END WHERE
END IF
!
PROFILER: DO JP = 1, NUMBPROFILER_LOC
ZZ(:) = STATPROF_INTERP_3D( TPROFILERS(JP), PZ )
......@@ -369,8 +372,8 @@ PROFILER: DO JP = 1, NUMBPROFILER_LOC
TPROFILERS(JP)%XW (IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), PW )
TPROFILERS(JP)%XTH (IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), PTH )
TPROFILERS(JP)%XTHV (IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), ZTHV )
TPROFILERS(JP)%XVISI(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), ZVISI )
TPROFILERS(JP)%XVISIKUN(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), ZVISIKUN )
IF ( CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' ) TPROFILERS(JP)%XVISIGUL(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), ZVISIGUL )
IF ( CCLOUD /= 'NONE' .AND. CCLOUD /= 'REVE' ) TPROFILERS(JP)%XVISIKUN(IN,:) = STATPROF_INTERP_3D( TPROFILERS(JP), ZVISIKUN )
TPROFILERS(JP)%XZZ (IN,:) = ZZ(:)
TPROFILERS(JP)%XRHOD(IN,:) = ZRHOD(:)
IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) &
......
......@@ -66,8 +66,16 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
END IF
ALLOCATE( TPPROFILER%XTH (KSTORE, IKU) )
ALLOCATE( TPPROFILER%XTHV (KSTORE, IKU) )
ALLOCATE( TPPROFILER%XVISI (KSTORE, IKU) )
ALLOCATE( TPPROFILER%XVISIKUN (KSTORE, IKU) )
IF ( CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' ) THEN
ALLOCATE( TPPROFILER%XVISIGUL (KSTORE, IKU) )
ELSE
ALLOCATE( TPPROFILER%XVISIGUL (0, 0) )
END IF
IF ( CCLOUD /= 'NONE' .AND. CCLOUD /= 'REVE' ) THEN
ALLOCATE( TPPROFILER%XVISIKUN (KSTORE, IKU) )
ELSE
ALLOCATE( TPPROFILER%XVISIKUN (0, 0) )
END IF
ALLOCATE( TPPROFILER%XCRARE (KSTORE, IKU) )
ALLOCATE( TPPROFILER%XCRARE_ATT(KSTORE, IKU) )
IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) THEN
......@@ -117,8 +125,8 @@ SUBROUTINE PROFILER_ALLOCATE( TPPROFILER, KSTORE )
IF ( CTURB == 'TKEL' ) TPPROFILER%XTKE(:,:) = XUNDEF
TPPROFILER%XTH (:,:) = XUNDEF
TPPROFILER%XTHV (:,:) = XUNDEF
TPPROFILER%XVISI (:,:) = XUNDEF
TPPROFILER%XVISIKUN (:,:) = XUNDEF
IF ( CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' ) TPPROFILER%XVISIGUL(:,:) = XUNDEF
IF ( CCLOUD /= 'NONE' .AND. CCLOUD /= 'REVE' ) TPPROFILER%XVISIKUN(:,:) = XUNDEF
TPPROFILER%XCRARE (:,:) = XUNDEF
TPPROFILER%XCRARE_ATT(:,:) = XUNDEF
IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) TPPROFILER%XCIZ (:,:) = XUNDEF
......
......@@ -140,7 +140,9 @@ CALL PROFILER_ALLOCATE( TZPROFILER, SIZE( tprofilers_time%tpdates ) )
IF ( ISNPROC > 1 ) THEN
ISTORE = SIZE( TPROFILERS_TIME%TPDATES )
IPACKSIZE = 6
IPACKSIZE = IPACKSIZE + ISTORE * IKU * ( 16 + NRR + NSV + NAER )
IPACKSIZE = IPACKSIZE + ISTORE * IKU * ( 14 + NRR + NSV + NAER )
IF ( CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' ) IPACKSIZE = IPACKSIZE + ISTORE * IKU !VISIGUL
IF ( CCLOUD /= 'NONE' .AND. CCLOUD /= 'REVE' ) IPACKSIZE = IPACKSIZE + ISTORE * IKU !VISIKUN
IF ( CTURB == 'TKEL') IPACKSIZE = IPACKSIZE + ISTORE * IKU !Tke term
IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) IPACKSIZE = IPACKSIZE + ISTORE * IKU !CIZ term
IPACKSIZE = IPACKSIZE + 4 * ISTORE
......@@ -186,8 +188,12 @@ PROFILER: DO JS = 1, INUMPROF
END IF
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTH(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XTHV(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XVISI(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XVISIKUN(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
IF ( CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' ) THEN
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XVISIGUL(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
END IF
IF ( CCLOUD /= 'NONE' .AND. CCLOUD /= 'REVE' ) THEN
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XVISIKUN(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
END IF
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XCRARE(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
ZPACK(IPOS:IPOS+ISTORE*IKU-1) = RESHAPE( TPROFILERS(IDX)%XCRARE_ATT(:,:), [ISTORE*IKU] ) ; IPOS = IPOS + ISTORE * IKU
IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) THEN
......@@ -264,8 +270,12 @@ PROFILER: DO JS = 1, INUMPROF
END IF
TZPROFILER%XTH(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
TZPROFILER%XTHV(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
TZPROFILER%XVISI(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
TZPROFILER%XVISIKUN(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
IF ( CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' ) THEN
TZPROFILER%XVISIGUL(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
END IF
IF ( CCLOUD /= 'NONE' .AND. CCLOUD /= 'REVE' ) THEN
TZPROFILER%XVISIKUN(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
END IF
TZPROFILER%XCRARE(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
TZPROFILER%XCRARE_ATT(:,:) = RESHAPE( ZPACK(IPOS:IPOS+ISTORE*IKU-1), [ ISTORE, IKU ] ) ; IPOS = IPOS + ISTORE * IKU
IF ( CCLOUD == 'ICE3' .OR. CCLOUD == 'ICE4' ) THEN
......@@ -393,8 +403,10 @@ jproc = 0
call Add_profile( 'Th', 'Potential temperature', 'K', tpprofiler%xth )
call Add_profile( 'Thv', 'Virtual Potential temperature', 'K', tpprofiler%xthv )
call Add_profile( 'VISI', 'Visibility', 'km', tpprofiler%xvisi )
call Add_profile( 'VISIKUN', 'Visibility Kunkel', 'km', tpprofiler%xvisikun )
if ( ccloud == 'C2R2' .or. ccloud == 'KHKO' ) &
call Add_profile( 'VISIGUL', 'Visibility Gultepe', 'km', tpprofiler%xvisigul )
if ( ccloud /= 'NONE' .and. ccloud /= 'REVE' ) &
call Add_profile( 'VISIKUN', 'Visibility Kunkel', 'km', tpprofiler%xvisikun )
call Add_profile( 'RARE', 'Radar reflectivity', 'dBZ', tpprofiler%xcrare )
call Add_profile( 'RAREatt', 'Radar attenuated reflectivity', 'dBZ', tpprofiler%xcrare_att )
call Add_profile( 'P', 'Pressure', 'Pa', tpprofiler%xp )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment