diff --git a/src/MNH/modd_type_statprof.f90 b/src/MNH/modd_type_statprof.f90 index a95c1e11cabfbf1ad402db480a0c1233c014943b..8b8a7cffb7707f0cdfe9c913cb3d4a705e112e87 100644 --- a/src/MNH/modd_type_statprof.f90 +++ b/src/MNH/modd_type_statprof.f90 @@ -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) diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index 7226a452defd415c6984d045ed308caa16be64ae..924527d0b9df55f4a3a4261086a1a81f891d86bc 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -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' ) & diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90 index a1daff5695c836a6ee4e7913b0732052427c4898..af3bc1eb87a956fbe623abe584000e150197cefe 100644 --- a/src/MNH/statprof_tools.f90 +++ b/src/MNH/statprof_tools.f90 @@ -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 diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90 index acda0bf50e09f11409c17bf2a9361ccfc73cc337..62264efabac858636ac5d392a24bd886aa440f36 100644 --- a/src/MNH/write_profilern.f90 +++ b/src/MNH/write_profilern.f90 @@ -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 )