From b91b4caa0fcc81da6d8dde3b5cb30d24a359d27e Mon Sep 17 00:00:00 2001 From: Gaelle Tanguy <gaelle.tanguy@meteo.fr> Date: Mon, 27 Jul 2015 13:51:36 +0000 Subject: [PATCH] Gaelle 27/07/2015 : add microphysic diagnostics for aircaraft,ballon and profiler --- src/MNH/aircraft_balloon.f90 | 57 ++++++++- src/MNH/aircraft_balloon_evol.f90 | 178 ++++++++++++++++++---------- src/MNH/diag.f90 | 8 +- src/MNH/ini_aircraft_balloon.f90 | 20 ++++ src/MNH/ini_posprofilern.f90 | 34 ++++++ src/MNH/ini_profilern.f90 | 15 +++ src/MNH/modd_aircraft_balloon.f90 | 11 ++ src/MNH/modd_type_profiler.f90 | 21 +++- src/MNH/modeln.f90 | 45 +++++-- src/MNH/profilern.f90 | 183 ++++++++++++++++++++++++++--- src/MNH/rain_ice.f90 | 110 ++++++++++++++--- src/MNH/resolved_cloud.f90 | 48 ++++++-- src/MNH/write_aircraft_balloon.f90 | 90 +++++++++++++- src/MNH/write_profilern.f90 | 99 +++++++++++++++- 14 files changed, 795 insertions(+), 124 deletions(-) diff --git a/src/MNH/aircraft_balloon.f90 b/src/MNH/aircraft_balloon.f90 index 7f15a0535..972dfeb9f 100644 --- a/src/MNH/aircraft_balloon.f90 +++ b/src/MNH/aircraft_balloon.f90 @@ -19,7 +19,8 @@ INTERFACE PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & - PTS, PRHODREF, PCIT, PSEA ) + PTS, PRHODREF, PCIT, PSPEEDC, PSPEEDR,& + PSPEEDS, PSPEEDG, PSPEEDH, PSEA) ! USE MODD_TYPE_DATE CHARACTER(LEN=*), INTENT(IN) :: HLUOUT ! output listing @@ -46,6 +47,11 @@ REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature ! ++ OC REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:),INTENT(IN) :: PSEA ! -- OC ! @@ -63,7 +69,8 @@ END MODULE MODI_AIRCRAFT_BALLOON PXHAT, PYHAT, PZ, & PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & - PTS, PRHODREF, PCIT, PSEA ) + PTS, PRHODREF, PCIT, PSPEEDC, PSPEEDR,& + PSPEEDS, PSPEEDG, PSPEEDH, PSEA) ! ################################################################### ! ! @@ -96,6 +103,8 @@ END MODULE MODI_AIRCRAFT_BALLOON !! Original 15/05/2000 !! !! March, 2008 (P.Lacarrere) Add 3D fluxes +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! -------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -138,6 +147,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE ! turbulent kinetic energy REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:),INTENT(IN) :: PSEA ! !------------------------------------------------------------------------------- @@ -157,54 +171,63 @@ IF (TBALLOON1%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON1, PSEA ) ENDIF IF (TBALLOON2%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON2, PSEA ) ENDIF IF (TBALLOON3%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON3, PSEA ) ENDIF IF (TBALLOON4%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON4, PSEA ) ENDIF IF (TBALLOON5%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON5, PSEA ) ENDIF IF (TBALLOON6%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON6, PSEA ) ENDIF IF (TBALLOON7%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON7, PSEA ) ENDIF IF (TBALLOON8%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON8, PSEA ) ENDIF IF (TBALLOON9%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TBALLOON9, PSEA ) ENDIF ! @@ -212,180 +235,210 @@ IF (TAIRCRAFT1%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT1, PSEA ) ENDIF IF (TAIRCRAFT2%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT2, PSEA ) ENDIF IF (TAIRCRAFT3%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT3, PSEA ) ENDIF IF (TAIRCRAFT4%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT4, PSEA ) ENDIF IF (TAIRCRAFT5%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT5, PSEA ) ENDIF IF (TAIRCRAFT6%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT6, PSEA ) ENDIF IF (TAIRCRAFT7%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT7, PSEA ) ENDIF IF (TAIRCRAFT8%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT8, PSEA ) ENDIF IF (TAIRCRAFT9%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT9, PSEA ) ENDIF IF (TAIRCRAFT10%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT10, PSEA ) ENDIF IF (TAIRCRAFT11%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT11, PSEA ) ENDIF IF (TAIRCRAFT12%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT12, PSEA ) ENDIF IF (TAIRCRAFT13%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT13, PSEA ) ENDIF IF (TAIRCRAFT14%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT14, PSEA ) ENDIF IF (TAIRCRAFT15%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT15, PSEA ) ENDIF IF (TAIRCRAFT16%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT16, PSEA ) ENDIF IF (TAIRCRAFT17%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT17, PSEA ) ENDIF IF (TAIRCRAFT18%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT18, PSEA ) ENDIF IF (TAIRCRAFT19%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT19, PSEA ) ENDIF IF (TAIRCRAFT20%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT20, PSEA ) ENDIF IF (TAIRCRAFT21%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT21, PSEA ) ENDIF IF (TAIRCRAFT22%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT22, PSEA ) ENDIF IF (TAIRCRAFT23%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT23, PSEA ) ENDIF IF (TAIRCRAFT24%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT24, PSEA ) ENDIF IF (TAIRCRAFT25%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT25, PSEA ) ENDIF IF (TAIRCRAFT26%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT26, PSEA ) ENDIF IF (TAIRCRAFT27%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT27, PSEA ) ENDIF IF (TAIRCRAFT28%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT28, PSEA ) ENDIF IF (TAIRCRAFT29%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT29, PSEA ) ENDIF IF (TAIRCRAFT30%NMODEL /= 0) THEN CALL AIRCRAFT_BALLOON_EVOL(HLUOUT, PTSTEP, TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ, PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, PTS, PRHODREF, PCIT, & + PSPEEDC,PSPEEDR,PSPEEDS,PSPEEDG,PSPEEDH, & TAIRCRAFT30, PSEA ) ENDIF ! diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90 index e4c5267af..39ae67b11 100644 --- a/src/MNH/aircraft_balloon_evol.f90 +++ b/src/MNH/aircraft_balloon_evol.f90 @@ -20,6 +20,8 @@ INTERFACE PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & PTS, PRHODREF, PCIT, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, & + PSPEEDH, & TPFLYER, PSEA ) ! USE MODD_TYPE_DATE @@ -48,6 +50,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE ! turbulent kinetic energy REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed ! TYPE(FLYER), INTENT(INOUT) :: TPFLYER! balloon/aircraft REAL, DIMENSION(:,:), INTENT(IN) :: PSEA @@ -67,6 +74,8 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL PMAP, PLONOR, PLATOR, & PU, PV, PW, PP, PTH, PR, PSV, PTKE, & PTS, PRHODREF, PCIT, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, & + PSPEEDH, & TPFLYER, PSEA ) ! ######################################################## ! @@ -131,7 +140,8 @@ END MODULE MODI_AIRCRAFT_BALLOON_EVOL !! May, 2014 (O.Caumont) modify RARE for hydrometeors containing ice !! add bright band calculation for RARE !! Feb, 2015 (C.Lac) Correction to prevent aircraft crash -!! +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! !! -------------------------------------------------------------------------- ! @@ -148,7 +158,20 @@ USE MODD_TIME USE MODD_CONF USE MODD_DIAG_IN_RUN USE MODD_TURB_FLUX_AIRCRAFT_BALLOON -USE MODD_RAIN_ICE_DESCR +USE MODD_PARAM_n, ONLY : CCLOUD +! +USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XLBEXR_I=>XLBEXR,& + XLBR_I=>XLBR,XCCR_I=>XCCR,XBR_I=>XBR,XAR_I=>XAR,& + XALPHAC_I=>XALPHAC,XNUC_I=>XNUC,& + XLBC_I=>XLBC,XBC_I=>XBC,XAC_I=>XAC,& + XALPHAC2_I=>XALPHAC2,XNUC2_I=>XNUC2,& + XALPHAS_I=>XALPHAS,XNUS_I=>XNUS,XLBEXS_I=>XLBEXS,& + XLBS_I=>XLBS,XCCS_I=>XCCS,XAS_I=>XAS,XBS_I=>XBS,XCXS_I=>XCXS,& + XALPHAG_I=>XALPHAG,XNUG_I=>XNUG,XDG_I=>XDG,XLBEXG_I=>XLBEXG,& + XLBG_I=>XLBG,XCCG_I=>XCCG,XAG_I=>XAG,XBG_I=>XBG,XCXG_I=>XCXG,XCG_I=>XCG,& + 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 MODE_FSCATTER,ONLY : QEPSW,QEPSI,BHMIE,MOMG,MG USE MODE_FGAU, ONLY : GAULAG USE MODD_REF_n, ONLY : XRHODREF @@ -192,6 +215,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PTKE ! turbulent kinetic energy REAL, DIMENSION(:,:), INTENT(IN) :: PTS ! surface temperature REAL, DIMENSION(:,:,:), INTENT(IN) :: PRHODREF ! dry air density of the reference state REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! pristine ice concentration +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed ! TYPE(FLYER), INTENT(INOUT) :: TPFLYER! balloon/aircraft REAL, DIMENSION(:,:), INTENT(IN) :: PSEA @@ -278,7 +306,7 @@ REAL :: ZVCOEF10 ! Z direction interpolation coefficient for II+1, IV REAL :: ZVCOEF11 ! Z direction interpolation coefficient for II+1, IV+1 ! INTEGER :: IN ! time index -INTEGER :: JLOOP ! loop counter +INTEGER :: JLOOP,JLOOP2 ! loop counter ! REAL :: ZU_BAL ! horizontal wind speed at balloon location (along x) REAL :: ZV_BAL ! horizontal wind speed at balloon location (along y) @@ -977,12 +1005,24 @@ IF ( TPFLYER%FLY) THEN TPFLYER%SV (IN,JLOOP) = FLYER_INTERP(PSV(:,:,:,JLOOP)) END DO TPFLYER%RTZ (IN,:) = FLYER_INTERPZ(ZR(:,:,:)) - TPFLYER%FFZ (IN,:) = FLYER_INTERPZ(SQRT(PU**2+PV**2)) + DO JLOOP=1,SIZE(PR,4) + TPFLYER%RZ (IN,:,JLOOP) = FLYER_INTERPZ(PR(:,:,:,JLOOP)) + END DO + TPFLYER%CIZ (IN,:) = FLYER_INTERPZ(PCIT(:,:,:)) + TPFLYER%FFZ (IN,:) = FLYER_INTERPZ(SQRT(PU**2+PV**2)) + TPFLYER%CIZ (IN,:) = FLYER_INTERPZ(PCIT(:,:,:)) + TPFLYER%SPEEDCZ (IN,:) = FLYER_INTERPZ(PSPEEDC(:,:,:)) + TPFLYER%SPEEDRZ (IN,:) = FLYER_INTERPZ(PSPEEDR(:,:,:)) + TPFLYER%SPEEDSZ (IN,:) = FLYER_INTERPZ(PSPEEDS(:,:,:)) + TPFLYER%SPEEDGZ (IN,:) = FLYER_INTERPZ(PSPEEDG(:,:,:)) ! initialization CRARE and CRARE_ATT TPFLYER%CRARE(IN,:) = 0. TPFLYER%CRARE_ATT(IN,:) = 0. - - IF (SIZE(PR,4) == 6 ) THEN ! only for ICE3 + TPFLYER%LWCZ (IN,:) = 0. + TPFLYER%IWCZ (IN,:) = 0. + IF (CCLOUD=="ICE3") THEN ! only for ICE3 + TPFLYER%LWCZ (IN,:) = FLYER_INTERPZ((PR(:,:,:,2)+PR(:,:,:,3))*PRHODREF(:,:,:)) + TPFLYER%IWCZ (IN,:) = FLYER_INTERPZ((PR(:,:,:,4)+PR(:,:,:,5)+PR(:,:,:,6))*PRHODREF(:,:,:)) ZTEMPZ(:)=FLYER_INTERPZ(PTH(II:II+1,IJ:IJ+1,:) * ZEXN(:,:,:)) ZRHODREFZ(:)=FLYER_INTERPZ(PRHODREF(:,:,:)) ZCIT(:)=FLYER_INTERPZ(PCIT(:,:,:)) @@ -1001,14 +1041,13 @@ IF ( TPFLYER%FLY) THEN CALL GAULAG(JPTS_GAULAG,ZX,ZW) ! for integration over diameters ! initialize minimum values ALLOCATE(ZRTMIN(SIZE(PR,4)+1)) - ZRTMIN(2)=XRTMIN(2) ! cloud water over sea - ZRTMIN(3)=XRTMIN(3) - ZRTMIN(4)=XRTMIN(4) + ZRTMIN(2)=XRTMIN_I(2) ! cloud water over sea + ZRTMIN(3)=XRTMIN_I(3) + ZRTMIN(4)=XRTMIN_I(4) ZRTMIN(5)=1E-10 - ZRTMIN(6)=XRTMIN(6) - ZRTMIN(7)=XRTMIN(2) ! cloud water over land + ZRTMIN(6)=XRTMIN_I(6) + ZRTMIN(7)=XRTMIN_I(2) ! cloud water over land ZRTMIN(2)=XRTMIN(2) ! cloud water over sea ! compute cloud radar reflectivity from vertical profiles of temperature and mixing ratios -! print *,"cest parti !!!" DO JK=1,IKU QMW=SQRT(QEPSW(ZTEMPZ(JK),XLIGHTSPEED/XLAM_CRAD)) QMI=SQRT(QEPSI(ZTEMPZ(JK),XLIGHTSPEED/XLAM_CRAD)) @@ -1016,69 +1055,69 @@ IF ( TPFLYER%FLY) THEN IF(ZRZ(JK,JLOOP)>ZRTMIN(JLOOP).AND.(JLOOP.NE.4.OR.ZCIT(JK)>0.)) THEN SELECT CASE(JLOOP) CASE(2) ! cloud water over sea - ZA=XAC - ZB=XBC - ZCC=XCONC_SEA - ZCX=0. - ZALPHA=XALPHAC2 - ZNU=XNUC2 - ZLBEX=1.0/(ZCX-ZB) - ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) + ZA=XAC_I + ZB=XBC_I + ZCC=XCONC_SEA + ZCX=0. + ZALPHA=XALPHAC2_I + ZNU=XNUC2_I + ZLBEX=1.0/(ZCX-ZB) + ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) CASE(3) ! rain water - ZA=XAR - ZB=XBR - ZCC=XCCR - ZCX=-1. - ZALPHA=1. - ZNU=XNUR - ZLB=XLBR - ZLBEX=XLBEXR + ZA=XAR_I + ZB=XBR_I + ZCC=XCCR_I + ZCX=-1. + ZALPHA=XALPHAR_I + ZNU=XNUR_I + ZLB=XLBR_I + ZLBEX=XLBEXR_I CASE(4) ! pristine ice - ZA=XAI - ZB=XBI - ZCC=ZCIT(JK) - ZCX=0. - ZALPHA=XALPHAI - ZNU=XNUI - ZLBEX=XLBEXI - ZLB=XLBI*ZCC**(-ZLBEX) ! because ZCC not included in XLBI - ZFW=0 + ZA=XAI_I + ZB=XBI_I + ZCC=ZCIT(JK) + ZCX=0. + ZALPHA=XALPHAI_I + ZNU=XNUI_I + ZLBEX=XLBEXI_I + ZLB=XLBI_I*ZCC**(-ZLBEX) ! because ZCC not included in XLBI + ZFW=0 CASE(5) ! snow - ZA=XAS - ZB=XBS - ZCC=XCCS - ZCX=XCXS - ZALPHA=XALPHAS - ZNU=XNUS - ZLB=XLBS - ZLBEX=XLBEXS - ZFW=0 + ZA=XAS_I + ZB=XBS_I + ZCC=XCCS_I + ZCX=XCXS_I + ZALPHA=XALPHAS_I + ZNU=XNUS_I + ZLB=XLBS_I + ZLBEX=XLBEXS_I + ZFW=0 CASE(6) ! graupel !If temperature between -10 and 10°C and Mr and Mg over min threshold: melting graupel ! with liquid water fraction Fw=Mr/(Mr+Mg) else dry graupel (Fw=0) IF( ZTEMPZ(JK) > XTT-10 .AND. ZTEMPZ(JK) < XTT+10 & - .AND. ZRZ(JK,3) > XRTMIN(3) ) THEN + .AND. ZRZ(JK,3) > ZRTMIN(3) ) THEN ZFW=ZRZ(JK,3)/(ZRZ(JK,3)+ZRZ(JK,JLOOP)) ELSE ZFW=0 ENDIF - ZA=XAG - ZB=XBG - ZCC=XCCG - ZCX=XCXG - ZALPHA=XALPHAG - ZNU=XNUG - ZLB=XLBG - ZLBEX=XLBEXG + ZA=XAG_I + ZB=XBG_I + ZCC=XCCG_I + ZCX=XCXG_I + ZALPHA=XALPHAG_I + ZNU=XNUG_I + ZLB=XLBG_I + ZLBEX=XLBEXG_I CASE(7) ! cloud water over land - ZA=XAC - ZB=XBC - ZCC=XCONC_LAND - ZCX=0. - ZALPHA=XALPHAC - ZNU=XNUC - ZLBEX=1.0/(ZCX-ZB) - ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) + ZA=XAC_I + ZB=XBC_I + ZCC=XCONC_LAND + ZCX=0. + ZALPHA=XALPHAC_I + ZNU=XNUC_I + ZLBEX=1.0/(ZCX-ZB) + ZLB=( ZA*ZCC*MOMG(ZALPHA,ZNU,ZB) )**(-ZLBEX) END SELECT ZLBDA=ZLB*(ZRHODREFZ(JK)*ZRZ(JK,JLOOP))**ZLBEX ZREFLOC=0. @@ -1161,7 +1200,7 @@ IF ( TPFLYER%FLY) THEN END IF TPFLYER%CRARE_ATT(IN,JK)=TPFLYER%CRARE(IN,JK)*ZAETOT END DO - + TPFLYER%ZZ (IN,:) = ZZMZ(:) DEALLOCATE(ZZMZ,ZAELOC) ! m^3 → mm^6/m^3 → dBZ WHERE(TPFLYER%CRARE(IN,:)>0) @@ -1342,10 +1381,21 @@ IF ( GSTORE ) THEN END DO DO JLOOP=1,IKU CALL DISTRIBUTE_FLYER(TPFLYER%RTZ (IN,JLOOP)) + DO JLOOP2=1,SIZE(PR,4) + CALL DISTRIBUTE_FLYER(TPFLYER%RZ (IN,JLOOP,JLOOP2)) + ENDDO CALL DISTRIBUTE_FLYER(TPFLYER%FFZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%CIZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%IWCZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%LWCZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDCZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDRZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDSZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%SPEEDGZ (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%CRARE (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%CRARE_ATT (IN,JLOOP)) CALL DISTRIBUTE_FLYER(TPFLYER%WZ (IN,JLOOP)) + CALL DISTRIBUTE_FLYER(TPFLYER%ZZ (IN,JLOOP)) END DO IF (SIZE(PTKE)>0) CALL DISTRIBUTE_FLYER(TPFLYER%TKE (IN)) IF (SIZE(PTS) >0) CALL DISTRIBUTE_FLYER(TPFLYER%TSRAD(IN)) diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index 7d991a701..ad2367b83 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -68,6 +68,8 @@ !! 03/2013 (C. Augros) Add variables for radar simulator in NAMELIST: !! NBAZIM,LSNRT,XSNRMIN !! D.Ricard 2015 : add LMOIST_ES +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler ! ! !------------------------------------------------------------------------------- @@ -191,6 +193,7 @@ LOGICAL, DIMENSION(:,:),ALLOCATABLE :: GMASKkids ! kids domains mask INTEGER :: IIU, IJU, IKU INTEGER :: IINFO_ll ! return code for _ll routines REAL, DIMENSION(:,:),ALLOCATABLE :: ZSEA,ZTOWN +REAL, DIMENSION(:,:,:),ALLOCATABLE :: ZWORK ! NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & NCONV_KF, NRAD_3D, CRAD_SAT, NRTTOVINFO, LRAD_SUBG_COND, & @@ -539,8 +542,9 @@ IF ( LAIRCRAFT_BALLOON ) THEN TDTEXP, TDTMOD, TDTCUR, TXDTBAL, & XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, & - XTKET, XTSRAD, XRHODREF,XCIT,ZSEA) - DEALLOCATE (ZSEA,ZTOWN) + XTKET, XTSRAD, XRHODREF,XCIT, & + ZWORK,ZWORK,ZWORK,ZWORK,ZWORK,ZSEA) + DEALLOCATE (ZSEA,ZTOWN,ZWORK) ! !----------------------------- ! diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90 index 13178a1bc..2a93c0d80 100644 --- a/src/MNH/ini_aircraft_balloon.f90 +++ b/src/MNH/ini_aircraft_balloon.f90 @@ -77,6 +77,8 @@ END MODULE MODI_INI_AIRCRAFT_BALLOON !! Original 15/05/2000 !! Apr, 20 2001: G.Jaubert: use in diag with stationnary fields !! March, 2013 : O.Caumont, C.Lac : add vertical profiles +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! !! -------------------------------------------------------------------------- ! @@ -378,10 +380,19 @@ ALLOCATE(TPFLYER%TH (ISTORE)) ALLOCATE(TPFLYER%R (ISTORE,KRR)) ALLOCATE(TPFLYER%SV (ISTORE,KSV)) ALLOCATE(TPFLYER%RTZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%RZ (ISTORE,KKU,KRR)) ALLOCATE(TPFLYER%FFZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%IWCZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%LWCZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%CIZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%SPEEDCZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%SPEEDRZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%SPEEDSZ (ISTORE,KKU)) +ALLOCATE(TPFLYER%SPEEDGZ (ISTORE,KKU)) ALLOCATE(TPFLYER%CRARE(ISTORE,KKU)) ALLOCATE(TPFLYER%CRARE_ATT(ISTORE,KKU)) ALLOCATE(TPFLYER%WZ(ISTORE,KKU)) +ALLOCATE(TPFLYER%ZZ(ISTORE,KKU)) IF (OUSETKE) THEN ALLOCATE(TPFLYER%TKE (ISTORE)) ELSE @@ -410,11 +421,20 @@ TPFLYER%TH = XUNDEF TPFLYER%R = XUNDEF TPFLYER%SV = XUNDEF TPFLYER%RTZ = XUNDEF +TPFLYER%RZ = XUNDEF TPFLYER%FFZ = XUNDEF +TPFLYER%CIZ = XUNDEF +TPFLYER%IWCZ = XUNDEF +TPFLYER%LWCZ = XUNDEF +TPFLYER%SPEEDCZ = XUNDEF +TPFLYER%SPEEDRZ = XUNDEF +TPFLYER%SPEEDSZ = XUNDEF +TPFLYER%SPEEDGZ = XUNDEF XLAM_CRAD = 3.154E-3 ! (in m) <=> 95.04 GHz = Rasta cloud radar frequency TPFLYER%CRARE = XUNDEF TPFLYER%CRARE_ATT= XUNDEF TPFLYER%WZ= XUNDEF +TPFLYER%ZZ= XUNDEF TPFLYER%TKE = XUNDEF TPFLYER%TSRAD = XUNDEF TPFLYER%ZS = XUNDEF diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90 index 77d9e7338..84e954110 100644 --- a/src/MNH/ini_posprofilern.f90 +++ b/src/MNH/ini_posprofilern.f90 @@ -72,6 +72,8 @@ END MODULE MODI_INI_POSPROFILER_n !! MODIFICATIONS !! ------------- !! P. Tulet 15/01/2002 +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! !! -------------------------------------------------------------------------- ! @@ -178,9 +180,21 @@ ALLOCATE(TPROFILER%FF (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%DD (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%W (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%P (ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%ZZ (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%TH (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%THV (ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%RHOD (ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%RARE (ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%SPEEDC(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%SPEEDR(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%SPEEDS(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%SPEEDG(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%SPEEDH(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%INPRC3D(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%INPRR3D(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%INPRS3D(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%INPRG3D(ISTORE,IKU,NUMBPROFILER)) +ALLOCATE(TPROFILER%INPRH3D(ISTORE,IKU,NUMBPROFILER)) ALLOCATE(TPROFILER%R (ISTORE,IKU,NUMBPROFILER,KRR)) ALLOCATE(TPROFILER%SV (ISTORE,IKU,NUMBPROFILER,KSV)) ALLOCATE(TPROFILER%AER (ISTORE,IKU,NUMBPROFILER,NAER)) @@ -202,6 +216,10 @@ ALLOCATE(TPROFILER%LEI (ISTORE,NUMBPROFILER)) ALLOCATE(TPROFILER%GFLUX (ISTORE,NUMBPROFILER)) ALLOCATE(TPROFILER%LW (ISTORE,NUMBPROFILER)) ALLOCATE(TPROFILER%SW (ISTORE,NUMBPROFILER)) +ALLOCATE(TPROFILER%IWV (ISTORE,NUMBPROFILER)) +ALLOCATE(TPROFILER%ZTD (ISTORE,NUMBPROFILER)) +ALLOCATE(TPROFILER%ZWD (ISTORE,NUMBPROFILER)) +ALLOCATE(TPROFILER%ZHD (ISTORE,NUMBPROFILER)) ALLOCATE(TPROFILER%TKE_DISS(ISTORE,IKU,NUMBPROFILER)) ! ! @@ -213,9 +231,25 @@ TPROFILER%FF = XUNDEF TPROFILER%DD = XUNDEF TPROFILER%W = XUNDEF TPROFILER%P = XUNDEF +TPROFILER%ZZ = XUNDEF TPROFILER%TH = XUNDEF TPROFILER%THV = XUNDEF +TPROFILER%RHOD = XUNDEF TPROFILER%RARE = XUNDEF +TPROFILER%SPEEDC = XUNDEF +TPROFILER%SPEEDR = XUNDEF +TPROFILER%SPEEDS = XUNDEF +TPROFILER%SPEEDG = XUNDEF +TPROFILER%SPEEDG = XUNDEF +TPROFILER%INPRC3D= XUNDEF +TPROFILER%INPRR3D= XUNDEF +TPROFILER%INPRS3D= XUNDEF +TPROFILER%INPRG3D= XUNDEF +TPROFILER%INPRH3D= XUNDEF +TPROFILER%IWV = XUNDEF +TPROFILER%ZTD = XUNDEF +TPROFILER%ZWD = XUNDEF +TPROFILER%ZHD = XUNDEF TPROFILER%R = XUNDEF TPROFILER%SV = XUNDEF TPROFILER%AER = XUNDEF diff --git a/src/MNH/ini_profilern.f90 b/src/MNH/ini_profilern.f90 index 390ca20d4..e2888785f 100644 --- a/src/MNH/ini_profilern.f90 +++ b/src/MNH/ini_profilern.f90 @@ -64,6 +64,8 @@ !! MODIFICATIONS !! ------------- !! Original 15/01/2002 +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! !! -------------------------------------------------------------------------- ! @@ -94,11 +96,13 @@ NUMBPROFILER = 0 IF (NUMBPROFILER > 0) THEN ALLOCATE(TPROFILER%LAT (NUMBPROFILER)) ALLOCATE(TPROFILER%LON (NUMBPROFILER)) +ALLOCATE(TPROFILER%ALT (NUMBPROFILER)) ALLOCATE(TPROFILER%NAME(NUMBPROFILER)) ALLOCATE(TPROFILER%TYPE(NUMBPROFILER)) ! TPROFILER%LON = XUNDEF TPROFILER%LAT = XUNDEF +TPROFILER%ALT = XUNDEF TPROFILER%NAME = " " TPROFILER%TYPE = " " ! @@ -130,6 +134,17 @@ TPROFILER%LON = (/ 5.3790, 4.8200, 5.2000, 6.0986, 5.4100, & 5.3951, 5.4842, 5.4054, 5.4253, 5.4113, & 5.4369, 5.3893, 5.5114, 5.3788, 5.4611, & 5.3994, 5.3538, 5.3674 /) +TPROFILER%ALT = (/ 2.,2.,2.,2.,2.,& + 2.,2.,2.,2.,2.,& + 2.,2.,2.,2.,2.,& + 2.,2., & + 2.,2.,2.,2.,2.,& + 2.,2.,2.,2.,2.,& + 2., & + 2.,2.,2.,2.,2.,& + 2.,2.,2.,2.,2.,& + 2.,2.,2.,2.,2.,& + 2.,2.,2. /) ! TPROFILER%NAME = (/ 'CAAM ', 'CRAU ', 'BARD ', 'MONT ', 'IUTF ', & 'OBSF ', 'VALF ', 'LUBE ', 'VENT ', 'DENT ', & diff --git a/src/MNH/modd_aircraft_balloon.f90 b/src/MNH/modd_aircraft_balloon.f90 index c49cf85de..676092e19 100644 --- a/src/MNH/modd_aircraft_balloon.f90 +++ b/src/MNH/modd_aircraft_balloon.f90 @@ -36,6 +36,8 @@ !! Original 15/05/00 !! Apr,19, 2001 (G.Jaubert) add CVBALL type !! March, 2013 : O.Caumont, C.Lac : add vertical profiles +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -128,10 +130,19 @@ REAL, DIMENSION(:), POINTER :: TH ! th(n) REAL, DIMENSION(:,:), POINTER :: R ! r*(n) REAL, DIMENSION(:,:), POINTER :: SV ! Sv*(n) REAL, DIMENSION(:,:), POINTER :: RTZ ! tot hydrometeor mixing ratio +REAL, DIMENSION(:,:,:), POINTER :: RZ ! water vapour mixing ratio REAL, DIMENSION(:,:), POINTER :: FFZ ! horizontal wind +REAL, DIMENSION(:,:), POINTER :: IWCZ ! ice water content +REAL, DIMENSION(:,:), POINTER :: LWCZ ! liquid water content +REAL, DIMENSION(:,:), POINTER :: CIZ ! Ice concentration +REAL, DIMENSION(:,:), POINTER :: SPEEDCZ ! Cloud fall velocity +REAL, DIMENSION(:,:), POINTER :: SPEEDRZ ! Rain fall velocity +REAL, DIMENSION(:,:), POINTER :: SPEEDSZ ! Snow fall velocity +REAL, DIMENSION(:,:), POINTER :: SPEEDGZ ! Graupel fall velocity REAL, DIMENSION(:,:), POINTER :: CRARE ! cloud radar reflectivity REAL, DIMENSION(:,:), POINTER :: CRARE_ATT ! attenuated (= more realistic) cloud radar reflectivity REAL, DIMENSION(:,:), POINTER :: WZ ! vertical profile of vertical velocity +REAL, DIMENSION(:,:), POINTER :: ZZ ! vertical profile of mass point altitude (above sea) REAL, DIMENSION(:,:), POINTER :: AER ! Extinction at 550 nm REAL, DIMENSION(:,:), POINTER :: DST_WL ! Extinction by wavelength REAL, DIMENSION(:), POINTER :: ZS ! zs(n) diff --git a/src/MNH/modd_type_profiler.f90 b/src/MNH/modd_type_profiler.f90 index 3cd32f7cf..9a5fc0cdc 100644 --- a/src/MNH/modd_type_profiler.f90 +++ b/src/MNH/modd_type_profiler.f90 @@ -36,7 +36,9 @@ IMPLICIT NONE !! MODIFICATIONS !! ------------- !! Original 15/01/02 -!------------------------------------------------------------------------------- +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profile +r!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ @@ -66,16 +68,29 @@ REAL, DIMENSION(:), POINTER :: X=>NULL() ! X(n) REAL, DIMENSION(:), POINTER :: Y=>NULL() ! Y(n) REAL, DIMENSION(:), POINTER :: LON=>NULL() ! longitude(n) REAL, DIMENSION(:), POINTER :: LAT=>NULL() ! latitude (n) +REAL, DIMENSION(:), POINTER :: ALT=>NULL() ! altitude (n) REAL, DIMENSION(:,:,:), POINTER :: ZON=>NULL() ! zonal wind(n) REAL, DIMENSION(:,:,:), POINTER :: MER=>NULL() ! meridian wind(n) REAL, DIMENSION(:,:,:), POINTER :: FF=>NULL() ! wind intensity REAL, DIMENSION(:,:,:), POINTER :: DD=>NULL() ! wind direction REAL, DIMENSION(:,:,:), POINTER :: W=>NULL() ! w(n) (air vertical speed) REAL, DIMENSION(:,:,:), POINTER :: P=>NULL() ! p(n) +REAL, DIMENSION(:,:,:), POINTER :: ZZ=>NULL() ! altitude(n) REAL, DIMENSION(:,:,:), POINTER :: TKE=>NULL() ! tke(n) REAL, DIMENSION(:,:,:), POINTER :: TH=>NULL() ! th(n) REAL, DIMENSION(:,:,:), POINTER :: THV=>NULL() ! thv(n) REAL, DIMENSION(:,:,:), POINTER :: RARE=>NULL() ! radar reflectivity (n) +REAL, DIMENSION(:,:,:), POINTER :: SPEEDC=>NULL() ! cloud sedim speed (n) +REAL, DIMENSION(:,:,:), POINTER :: SPEEDR=>NULL() ! rain sedim speed (n) +REAL, DIMENSION(:,:,:), POINTER :: SPEEDS=>NULL() ! snow sedim speed (n) +REAL, DIMENSION(:,:,:), POINTER :: SPEEDG=>NULL() ! graup sedim speed (n) +REAL, DIMENSION(:,:,:), POINTER :: SPEEDH=>NULL() ! hail sedim speed (n) +REAL, DIMENSION(:,:,:), POINTER :: INPRC3D=>NULL() ! sedimentation rate(n) +REAL, DIMENSION(:,:,:), POINTER :: INPRR3D=>NULL() ! sedimentation rate(n) +REAL, DIMENSION(:,:,:), POINTER :: INPRS3D=>NULL() ! sedimentation rate(n) +REAL, DIMENSION(:,:,:), POINTER :: INPRG3D=>NULL() ! sedimentation rate(n) +REAL, DIMENSION(:,:,:), POINTER :: INPRH3D=>NULL() ! sedimentation rate(n) +REAL, DIMENSION(:,:,:), POINTER :: RHOD=>NULL() ! density of dry air/moist air REAL, DIMENSION(:,:,:,:), POINTER :: R=>NULL() ! r*(n) REAL, DIMENSION(:,:,:,:), POINTER :: SV=>NULL() ! Sv*(n) REAL, DIMENSION(:,:,:,:), POINTER :: AER=>NULL() ! AER*(n) aerosol extinction @@ -93,6 +108,10 @@ REAL, DIMENSION(:,:), POINTER :: LEI=>NULL() ! Solid latent heat flux ( REAL, DIMENSION(:,:), POINTER :: GFLUX=>NULL() ! storage heat flux (W m2) REAL, DIMENSION(:,:), POINTER :: LW=>NULL() ! IR downward radiation (W m2) REAL, DIMENSION(:,:), POINTER :: SW=>NULL() ! solar downward radiation (W m2) +REAL, DIMENSION(:,:), POINTER :: IWV=>NULL() ! integrated water vpour(n) +REAL, DIMENSION(:,:), POINTER :: ZTD=>NULL() ! GPS zenith tropo delay(n) +REAL, DIMENSION(:,:), POINTER :: ZWD=>NULL() ! GPS zenith wet delay(n) +REAL, DIMENSION(:,:), POINTER :: ZHD=>NULL() ! GPS zenith hydro delay(n) ! REAL, DIMENSION(:,:,:), POINTER :: TKE_DISS=>NULL() ! TKE dissipation rate ! diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90 index a8fc1fab3..6f2dca219 100644 --- a/src/MNH/modeln.f90 +++ b/src/MNH/modeln.f90 @@ -229,6 +229,8 @@ END MODULE MODI_MODEL_n !! P. Tulet Nov 2014 accumulated moles of aqueous species that fall at the surface !! Dec 2014 (C.Lac) : For reproducibility START/RESTA !! J.Escobar 20/04/2015: missing UPDATE_HALO before UPDATE_HALO2 +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !!------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -482,6 +484,17 @@ REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XRM,DPTR_XSVM,DPTR_XRRS,DPTR_XRSVS REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV LOGICAL, DIMENSION(:,:),POINTER :: DPTR_GMASKkids +! +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDC +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDR +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDS +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDG +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZSPEEDH +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRC3D +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRS3D +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRG3D +REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZINPRH3D +! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZRUS,ZRVS,ZRWS ! ! for various testing @@ -1631,8 +1644,11 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XSRCT, XCLDFR,XCIT, & LSEDIC,LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS, XINPRG, XINPRH, XSOLORG , XMI, ZSEA, ZTOWN ) + XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, & + XINPRH,ZINPRH3D, XSOLORG , XMI, & + ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & + ZSEA, ZTOWN ) DEF_NC=.TRUE. #else CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & @@ -1646,8 +1662,11 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XSRCT, XCLDFR,XCIT, & LSEDIC,LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS, XINPRG, XINPRH, XSOLORG , XMI, ZSEA, ZTOWN ) + XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & + XSOLORG , XMI, & + ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & + ZSEA, ZTOWN ) #endif DEALLOCATE(ZTOWN) ELSE @@ -1665,8 +1684,9 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XSRCT, XCLDFR,XCIT, & LSEDIC, LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS, XINPRG, XINPRH, XSOLORG, XMI ) + XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & + XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH) DEF_NC=.TRUE. #else CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR, & @@ -1680,8 +1700,10 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN XSRCT, XCLDFR,XCIT, & LSEDIC, LACTIT, LSEDC, LSEDI, LRAIN, LWARM, LHHONI, & LCONVHG, XCF_MF,XRC_MF, XRI_MF, & - XINPRC,XINPRR, XINPRR3D, XEVAP3D, & - XINPRS, XINPRG, XINPRH, XSOLORG, XMI ) + XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D, & + XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D, & + XSOLORG, XMI, & + ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH ) #endif END IF XRTHS_CLD = XRTHS - XRTHS_CLD @@ -1866,7 +1888,8 @@ IF (LFLYER) & TDTEXP, TDTMOD, TDTSEG, TDTCUR, & XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI, & XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, & - XRHODREF,XCIT,PSEA=ZSEA(:,:)) + XRHODREF,XCIT,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, & + ZSPEEDH,PSEA=ZSEA(:,:)) !------------------------------------------------------------------------------- @@ -1890,7 +1913,9 @@ IF (LPROFILER) & TDTEXP, TDTMOD, TDTSEG, TDTCUR, & XXHAT, XYHAT, XZZ,XRHODREF, & XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, & - XAER, XCLDFR, XCIT ) + XAER, XCLDFR, XCIT , & + ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, & + ZINPRC3D,XINPRR3D,ZINPRS3D,ZINPRG3D,ZINPRH3D ) ! ! CALL SECOND_MNH2(ZTIME2) diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90 index 0e3383523..7b3174c29 100644 --- a/src/MNH/profilern.f90 +++ b/src/MNH/profilern.f90 @@ -18,7 +18,9 @@ INTERFACE TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ,PRHODREF, & PU, PV, PW, PTH, PR, PSV, PTKE, & - PTS,PP, PAER, PCLDFR, PCIT ) + PTS,PP, PAER, PCLDFR, PCIT, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH,& + PINPRC3D,PINPRR3D,PINPRS3D,PINPRG3D,PINPRH3D) ! USE MODD_TYPE_DATE ! @@ -44,6 +46,16 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PP ! pressure REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PAER ! aerosol extinction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR ! cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! ice concentration +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRC3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRR3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRS3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRG3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRH3D! 3D sedimentation rate ! !------------------------------------------------------------------------------- ! @@ -58,7 +70,9 @@ END MODULE MODI_PROFILER_n TPDTEXP, TPDTMOD, TPDTSEG, TPDTCUR, & PXHAT, PYHAT, PZ,PRHODREF, & PU, PV, PW, PTH, PR, PSV, PTKE, & - PTS, PP, PAER, PCLDFR, PCIT ) + PTS, PP, PAER, PCLDFR, PCIT, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH,& + PINPRC3D,PINPRR3D,PINPRS3D,PINPRG3D,PINPRH3D) ! ######################################################## ! ! @@ -93,6 +107,8 @@ END MODULE MODI_PROFILER_n !! Original 15/02/2002 !! March 2013 : C.Lac : Corrections for 1D + new fields (RARE,THV,DD,FF) !! April 2014 : C.Lac : Call RADAR only if ICE3 +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! !! !! -------------------------------------------------------------------------- @@ -115,7 +131,10 @@ USE MODE_ll USE MODI_WATER_SUM USE MODI_TEMPORAL_DIST USE MODI_RADAR_RAIN_ICE +USE MODI_LIDAR USE MODI_WATER_SUM +USE MODI_GPS_ZENITH_GRID +USE MODD_PARAM_n, ONLY : CCLOUD ! ! IMPLICIT NONE @@ -146,6 +165,16 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PP ! pressure REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PAER ! aerosol extinction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCLDFR ! cloud fraction REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! ice concentration +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PSPEEDH ! Hail sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRC3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRR3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRS3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRG3D! 3D sedimentation rate +REAL, DIMENSION(:,:,:), INTENT(IN) :: PINPRH3D! 3D sedimentation rate ! !------------------------------------------------------------------------------- ! @@ -154,8 +183,10 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PCIT ! ice concentration ! INTEGER :: IIB ! current processor domain sizes INTEGER :: IJB +INTEGER :: IKB INTEGER :: IIE INTEGER :: IJE +INTEGER :: IKE INTEGER :: IIU INTEGER :: IJU INTEGER :: IKU @@ -175,19 +206,43 @@ INTEGER :: JSV ! loop counter INTEGER :: JK ! loop INTEGER :: IKRAD ! -REAL,DIMENSION(SIZE(PZ,3)) :: ZU_PROFILER ! horizontal wind speed at station location (along x) -REAL,DIMENSION(SIZE(PZ,3)) :: ZV_PROFILER ! horizontal wind speed at station location (along y) -REAL,DIMENSION(SIZE(PZ,3)) :: ZFF ! horizontal wind speed at station location -REAL,DIMENSION(SIZE(PZ,3)) :: ZDD ! horizontal wind speed at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZU_PROFILER ! horizontal wind speed profile at station location (along x) +REAL,DIMENSION(SIZE(PZ,3)) :: ZV_PROFILER ! horizontal wind speed profile at station location (along y) +REAL,DIMENSION(SIZE(PZ,3)) :: ZFF ! horizontal wind speed profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZDD ! horizontal wind speed profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZRHOD ! dry air density in moist mixing profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZRV ! water vapour mixing ratio profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZT ! temperature profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZTV ! virtual temperature profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZPRES ! pressure profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZE ! water vapour partial pressure profile at station location +REAL,DIMENSION(SIZE(PZ,3)) :: ZZ ! altitude of model levels at station location +REAL,DIMENSION(SIZE(PZ,3)-1) :: ZZHATM ! altitude of mass point levels at station location REAL :: ZGAM ! rotation between meso-nh base and spherical lat-lon base. ! +REAL :: XZS_GPS ! GPS station altitude +REAL :: ZIWV ! integrated water vapour at station location +REAL :: ZZM_STAT ! altitude at station location +REAL :: ZTM_STAT ! temperature at station location +REAL :: ZTV_STAT ! virtual temperature at station location +REAL :: ZPM_STAT ! pressure at station location +REAL :: ZEM_STAT ! water vapour partial pressure at station location +REAL :: ZZTD_PROFILER ! ZTD at station location +REAL :: ZZHD_PROFILER ! ZHD at station location +REAL :: ZZWD_PROFILER ! ZWD at station location +REAL :: ZZHDR ! ZHD correction at station location +REAL :: ZZWDR ! ZWD correction at station location +! INTEGER :: IINFO_ll ! return code INTEGER :: ILUOUT ! logical unit INTEGER :: IRESP ! return code INTEGER :: I ! loop for stations ! -REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZTEMP,ZRARE,ZWORK32,ZTHV -REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZWORK33,ZWORK34 +REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2)) :: ZZTD,ZZHD,ZZWD +REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZTEMP,ZRARE,ZTHV,ZTEMPV +REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZWORK32,ZWORK33,ZWORK34,ZCIT +REAL :: ZK1,ZK2,ZK3 ! k1, k2 and K3 atmospheric refractivity constants +REAL :: ZRDSRV ! XRD/XRV !---------------------------------------------------------------------------- ! !* 2. PRELIMINARIES @@ -195,11 +250,20 @@ REAL,DIMENSION(SIZE(PTH,1),SIZE(PTH,2),SIZE(PTH,3)) :: ZWORK33,ZWORK34 ! CALL FMLOOK_ll(HLUOUT,HLUOUT,ILUOUT,IRESP) ! +!* 2.0 Refractivity coeficients +! ------------------------ +! Bevis et al. (1994) +ZK1 = 0.776 ! K/Pa +ZK2 = 0.704 ! K/Pa +ZK3 = 3739. ! K2/Pa +ZRDSRV=XRD/XRV !* 2.1 Indices ! ------- ! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IKU = SIZE(PZ,3) ! nombre de niveaux sur la verticale +IKB = JPVEXT+1 +IKE = IKU-JPVEXT ! ! !* 2.2 Interpolations of model variables to mass points @@ -358,15 +422,21 @@ END IF ! -------------- ! ZTEMP(:,:,:)=PTH(:,:,:)*(PP(:,:,:)/ XP00) **(XRD/XCPD) -IF (SIZE(PR,4) == 6) CALL RADAR_RAIN_ICE (PR, PCIT, PRHODREF, ZTEMP, ZRARE, ZWORK32, & +IF (CCLOUD(1:3)=="ICE") CALL RADAR_RAIN_ICE (PR, PCIT, PRHODREF, ZTEMP, ZRARE, ZWORK32, & ZWORK33, ZWORK34 ) ! Theta_v -ZTHV(:,:,:) = PTH(:,:,:) / (1.+WATER_SUM(PR(:,:,:,:)))*(1.+XRV/XRD*PR(:,:,:,1)) +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) IF (GSTORE) THEN IF (TPROFILER%TIME(IN) /= XUNDEF) THEN DO I=1,NUMBPROFILER IF ((ZTHIS_PROCS(I)==1.).AND.(.NOT. TPROFILER%ERROR(I))) THEN ! + ZZ(:) = PROFILER_INTERP(PZ) + ZRHOD(:) = PROFILER_INTERP(PRHODREF) + ZPRES(:) = PROFILER_INTERP(PP) ZU_PROFILER(:) = PROFILER_INTERP_U(PU) ZV_PROFILER(:) = PROFILER_INTERP_V(PV) ZGAM = (XRPK * (TPROFILER%LON(I) - XLON0) - XBETA)*(XPI/180.) @@ -381,9 +451,66 @@ IF (GSTORE) THEN IF (ZU_PROFILER(JK) <0. .AND. ZV_PROFILER(JK) >= 0.) & ZDD(JK) = ATAN(ABS(ZV_PROFILER(JK)/ZU_PROFILER(JK))) * 180./XPI + 90. IF (ZU_PROFILER(JK) == 0. .AND. ZV_PROFILER(JK) == 0.) & - ZDD(JK) = XUNDEF + ZDD(JK) = XUNDEF END DO - ! + ! GPS IWV and ZTD + XZS_GPS=TPROFILER%ALT(I) + IF ( ABS( ZZ(IKB)-XZS_GPS ) < 150 ) THEN ! distance between real and model orography ok + ZRV(:) = PROFILER_INTERP(PR(:,:,:,1)) + ZT(:) = PROFILER_INTERP(ZTEMP) + ZE(:) = ZPRES(:)*ZRV(:)/(ZRDSRV+ZRV(:)) + ZTV(:) = PROFILER_INTERP(ZTEMPV) + ZZTD_PROFILER = PROFILER_INTERP_2D(ZZTD) + ZZHD_PROFILER = PROFILER_INTERP_2D(ZZHD) + ZZWD_PROFILER = PROFILER_INTERP_2D(ZZWD) + ZIWV = 0. + DO JK=IKB,IKE + ZIWV=ZIWV+ZRHOD(JK)*ZRV(JK)*(ZZ(JK+1)-ZZ(JK)) + END DO + IF (ZZ(IKB) < XZS_GPS) THEN ! station above the model orography + DO JK=IKB+1,IKE + IF ( ZZ(JK) < XZS_GPS) THEN ! whole layer to remove + ZZHDR=( 1.E-6 * ZK1 * ZPRES(JK-1) * ( ZZ(JK) - ZZ(JK-1) ) / ZTV(JK-1)) + ZZWDR=( 1.E-6 * ( (ZK2-ZRDSRV*ZK1) + ( ZK3/ZT(JK-1) ) ) * & + ZE(JK-1)* ( ZZ(JK) - ZZ(JK-1) ) / ZT(JK-1) ) + ZZHD_PROFILER=ZZHD_PROFILER-ZZHDR + ZZWD_PROFILER=ZZWD_PROFILER-ZZWDR + ZZTD_PROFILER=ZZTD_PROFILER-ZZHDR-ZZWDR + ELSE ! partial layer to remove + ZZHDR=( 1.E-6 * ZK1 * ZPRES(JK-1) * ( XZS_GPS - ZZ(JK-1) ) / ZTV(JK-1)) + ZZWDR=( 1.E-6 * ( (ZK2-ZRDSRV*ZK1) + ( ZK3/ZT(JK-1) ) ) * & + ZE(JK-1)* ( XZS_GPS - ZZ(JK-1) ) / ZT(JK-1) ) + ZZHD_PROFILER=ZZHD_PROFILER-ZZHDR + ZZWD_PROFILER=ZZWD_PROFILER-ZZWDR + ZZTD_PROFILER=ZZTD_PROFILER-ZZHDR-ZZWDR + EXIT + END IF + END DO + ELSE ! station below the model orography +! Extrapolate variables below the model orography assuming constant T&Tv gradients, +! constant rv and hydrostatic law + ZZHATM(:)=0.5*(ZZ(1:IKU-1)+ZZ(2:IKU)) + ZZM_STAT=0.5*(XZS_GPS+ZZ(IKB)) + ZTM_STAT=ZT(IKB) + ( (ZZM_STAT-ZZHATM(IKB))*& + ( ZT(IKB)- ZT(IKB+1) )/(ZZHATM(IKB)-ZZHATM(IKB+1)) ) + ZTV_STAT=ZTV(IKB) + ( (ZZM_STAT-ZZHATM(IKB))*& + ( ZTV(IKB)- ZTV(IKB+1) )/(ZZHATM(IKB)-ZZHATM(IKB+1)) ) + ZPM_STAT = ZPRES(IKB) * EXP(XG *(ZZM_STAT-ZZHATM(IKB))& + /(XRD* 0.5 *(ZTV_STAT+ZTV(IKB)))) + ZEM_STAT = ZPM_STAT * ZRV(IKB) / ( ZRDSRV + ZRV(IKB) ) +! add contribution below the model orography + ZZHDR=( 1.E-6 * ZK1 * ZPM_STAT * ( ZZ(IKB) - XZS_GPS ) / ZTV_STAT ) + ZZWDR=( 1.E-6 * ( (ZK2-ZRDSRV*ZK1) + (ZK3/ZTM_STAT) )& + * ZEM_STAT* ( ZZ(IKB) - XZS_GPS ) / ZTM_STAT ) + ZZHD_PROFILER=ZZHD_PROFILER+ZZHDR + ZZWD_PROFILER=ZZWD_PROFILER+ZZWDR + ZZTD_PROFILER=ZZTD_PROFILER+ZZHDR+ZZWDR + END IF + TPROFILER%IWV(IN,I)= ZIWV + TPROFILER%ZTD(IN,I)= ZZTD_PROFILER + TPROFILER%ZWD(IN,I)= ZZWD_PROFILER + TPROFILER%ZHD(IN,I)= ZZHD_PROFILER + END IF TPROFILER%ZON (IN,:,I) = ZU_PROFILER(:) * COS(ZGAM) + ZV_PROFILER(:) * SIN(ZGAM) TPROFILER%MER (IN,:,I) = - ZU_PROFILER(:) * SIN(ZGAM) + ZV_PROFILER(:) * COS(ZGAM) TPROFILER%FF (IN,:,I) = ZFF(:) @@ -391,7 +518,19 @@ IF (GSTORE) THEN TPROFILER%W (IN,:,I) = PROFILER_INTERP(PW) TPROFILER%TH (IN,:,I) = PROFILER_INTERP(PTH) TPROFILER%THV (IN,:,I) = PROFILER_INTERP(ZTHV) - TPROFILER%RARE(IN,:,I) = PROFILER_INTERP(ZRARE) + TPROFILER%ZZ (IN,:,I) = ZZ(:) + TPROFILER%RHOD(IN,:,I) = ZRHOD(:) + IF (SIZE(PR,4) == 6) TPROFILER%RARE(IN,:,I) = PROFILER_INTERP(ZRARE) + TPROFILER%SPEEDC(IN,:,I) = PROFILER_INTERP(PSPEEDC) + TPROFILER%SPEEDR(IN,:,I) = PROFILER_INTERP(PSPEEDR) + TPROFILER%SPEEDS(IN,:,I) = PROFILER_INTERP(PSPEEDS) + TPROFILER%SPEEDG(IN,:,I) = PROFILER_INTERP(PSPEEDG) + TPROFILER%SPEEDH(IN,:,I) = PROFILER_INTERP(PSPEEDH) + TPROFILER%INPRC3D(IN,:,I) = PROFILER_INTERP(PINPRC3D)*3.6E6 + TPROFILER%INPRR3D(IN,:,I) = PROFILER_INTERP(PINPRR3D)*3.6E6 + TPROFILER%INPRS3D(IN,:,I) = PROFILER_INTERP(PINPRS3D)*3.6E6 + TPROFILER%INPRG3D(IN,:,I) = PROFILER_INTERP(PINPRG3D)*3.6E6 + TPROFILER%INPRH3D(IN,:,I) = PROFILER_INTERP(PINPRH3D)*3.6E6 IF (.NOT. L1D) THEN TPROFILER%P (IN,:,I) = PROFILER_INTERP(PP(II(I):II(I)+1,IJ(I):IJ(I)+1,:)) ELSE @@ -407,7 +546,7 @@ IF (GSTORE) THEN TPROFILER%SV (IN,:,I,JSV) = PROFILER_INTERP(ZWORK(:,:,:,JSV)) END DO ZWORK2(:,:,:,:) = 0. - DO JK=1+JPVEXT,IKU-JPVEXT + DO JK=IKB,IKE IKRAD = JK - JPVEXT ZWORK2(:,:,JK,:)=PAER(:,:,IKRAD,:) ENDDO @@ -467,9 +606,25 @@ IF (GSTORE) THEN CALL DISTRIBUTE_PROFILER(TPROFILER%DD (IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%W (IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%P (IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%ZZ (IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%TH (IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%THV (IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%RHOD(IN,JK,I)) CALL DISTRIBUTE_PROFILER(TPROFILER%RARE(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDC(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDR(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDS(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDG(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%SPEEDH(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%INPRC3D(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%INPRR3D(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%INPRS3D(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%INPRG3D(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%INPRH3D(IN,JK,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%IWV(IN,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%ZTD(IN,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%ZHD(IN,I)) + CALL DISTRIBUTE_PROFILER(TPROFILER%ZWD(IN,I)) ! IF (LDIAG_IN_RUN) CALL DISTRIBUTE_PROFILER(TPROFILER%TKE_DISS(IN,JK,I)) ! diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90 index 18e9e3b50..1a323ab7c 100644 --- a/src/MNH/rain_ice.f90 +++ b/src/MNH/rain_ice.f90 @@ -13,14 +13,16 @@ ! #################### ! INTERFACE - SUBROUTINE RAIN_ICE ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL, & - KSPLITR, PTSTEP, KMI, KRR, & - PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & - PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & - PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC, PINPRR, PINPRR3D, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, OCONVHG ) + SUBROUTINE RAIN_ICE ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL, & + KSPLITR, PTSTEP, KMI, KRR, & + PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,& + PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & + PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & + PINPRC,PINPRC3D, PINPRR, PINPRR3D, PEVAP3D, & + PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PSEA, PTOWN, & + PRHT, PRHS, PINPRH,PINPRH3D,OCONVHG ) ! ! LOGICAL, INTENT(IN) :: OSEDIC ! Switch for droplet sedim. @@ -68,18 +70,27 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIS ! Pristine ice m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRGS ! Graupel m.r. source +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed ! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Cloud instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D! Cloud inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D! Rain inst precip 3D REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D! Snow inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D! Graupel inst precip 3D REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PSEA REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PTOWN REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PINPRH3D! Hail instant precip 3D LOGICAL, OPTIONAL, INTENT(IN) :: OCONVHG! Switch for conversion from ! hail to graupel @@ -93,10 +104,12 @@ END MODULE MODI_RAIN_ICE PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, & PTHT, PRVT, PRCT, PRRT, PRIT, PRST, & PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, & - PINPRC, PINPRR, PINPRR3D, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & - PRHT, PRHS, PINPRH, OCONVHG ) -! ###################################################################### + PINPRC,PINPRC3D, PINPRR, PINPRR3D, PEVAP3D, & + PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PSEA, PTOWN, & + PRHT, PRHS, PINPRH,PINPRH3D,OCONVHG ) +! ##################################################################### ! !!**** * - compute the explicit microphysical sources !! @@ -232,6 +245,8 @@ END MODULE MODI_RAIN_ICE !! Juan 24/09/2012: for BUG Pgi rewrite PACK function on mode_pack_pgi !! (C. Lac) FIT temporal scheme : instant M removed !! (JP Pinty), 01-2014 : ICE4 : partial reconversion of hail to graupel +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -303,17 +318,27 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRIS ! Pristine ice m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRSS ! Snow/aggregate m.r. source REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PRGS ! Graupel m.r. source ! +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed +! REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRC! Cloud instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D! Cloud inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRR! Rain instant precip REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRR3D! Rain inst precip 3D REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D! Rain evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D! Snow inst precip 3D REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D! Graupel inst precip 3D REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PSEA REAL, DIMENSION(:,:),OPTIONAL,INTENT(IN) :: PTOWN REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN) :: PRHT ! Hail m.r. at t REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PRHS ! Hail m.r. source REAL, DIMENSION(:,:), OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip +REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: PINPRH3D! Hail instant precip 3D LOGICAL, OPTIONAL, INTENT(IN) :: OCONVHG! Switch for conversion from ! hail to graupel ! @@ -861,11 +886,20 @@ REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D ! ! O. Initialization of for sedimentation ! IF (OSEDIC) PINPRC (:,:) = 0. +IF (OSEDIC) PINPRC3D (:,:,:) = 0. PINPRR (:,:) = 0. PINPRR3D (:,:,:) = 0. PINPRS (:,:) = 0. +PINPRS3D (:,:,:) = 0. PINPRG (:,:) = 0. -IF ( KRR == 7 ) PINPRH (:,:) = 0. +PINPRG3D (:,:,:) = 0. +IF ( KRR == 7 ) PINPRH (:,:) = 0. +IF ( KRR == 7 ) PINPRH3D (:,:,:) = 0. +PSPEEDC(:,:,:) = 0. +PSPEEDR(:,:,:) = 0. +PSPEEDS(:,:,:) = 0. +PSPEEDG(:,:,:) = 0. +PSPEEDH(:,:,:) = 0. ! !* 1. Parameters for cloud sedimentation ! @@ -1033,6 +1067,9 @@ DO JN = 1 , KSPLITR PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRC(:,:) = PINPRC(:,:) + ZWSED(:,:,IKB) / XRHOLW / KSPLITR + PINPRC3D(:,:,:) = PINPRC3D(:,:,:) + ZWSED(:,:,:) / XRHOLW / KSPLITR + WHERE (PRCT(:,:,:) > 1.E-04 ) & + PSPEEDC(:,:,:) = ZWSED(:,:,:) / (PRCT(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP END IF @@ -1075,6 +1112,8 @@ DO JN = 1 , KSPLITR END DO PINPRR(:,:) = PINPRR(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR PINPRR3D(:,:,:) = PINPRR3D(:,:,:) + ZWSED(:,:,1:IKT)/XRHOLW/KSPLITR + WHERE (PRRT(:,:,:) > 1.E-04 ) & + PSPEEDR(:,:,:) = ZWSED(:,:,:) / (PRRT(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP END IF @@ -1156,6 +1195,9 @@ DO JN = 1 , KSPLITR PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRS(:,:) = PINPRS(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR + PINPRS3D(:,:,:) = PINPRS3D(:,:,:) + ZWSED(:,:,:)/XRHOLW/KSPLITR + WHERE (PRST(:,:,:) > 1.E-04 ) & + PSPEEDS(:,:,:) = ZWSED(:,:,:) / (PRST(:,:,:) * PRHODREF(:,:,:)) IF( JN==KSPLITR ) THEN PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP END IF @@ -1196,7 +1238,10 @@ END IF PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRG(:,:) = PINPRG(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR - IF( JN==KSPLITR ) THEN + PINPRG3D(:,:,:) = PINPRG3D(:,:,:) + ZWSED(:,:,:)/XRHOLW/KSPLITR + WHERE (PRGT(:,:,:) > 1.E-04 ) & + PSPEEDG(:,:,:) = ZWSED(:,:,:) / (PRGT(:,:,:) * PRHODREF(:,:,:)) + IF( JN==KSPLITR ) THEN PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP END IF ! @@ -1237,7 +1282,10 @@ END IF PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO PINPRH(:,:) = PINPRH(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR - IF( JN==KSPLITR ) THEN + PINPRH3D(:,:,:) = PINPRH3D(:,:,:) + ZWSED(:,:,:)/XRHOLW/KSPLITR + WHERE (PRHT(:,:,:) > 1.E-04 ) & + PSPEEDH(:,:,:) = ZWSED(:,:,:) / (PRHT(:,:,:) * PRHODREF(:,:,:)) + IF( JN==KSPLITR ) THEN PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP END IF END IF @@ -1289,6 +1337,21 @@ INTEGER, DIMENSION(SIZE(PRHODREF,1)*SIZE(PRHODREF,2)) :: I1, I2 REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D ! droplet condensation !------------------------------------------------------------------------------- ! +PSPEEDC(:,:,:) = 0. +PSPEEDR(:,:,:) = 0. +PSPEEDS(:,:,:) = 0. +PSPEEDG(:,:,:) = 0. +PSPEEDH(:,:,:) = 0. +IF (OSEDIC) PINPRC (:,:) = 0. +IF (OSEDIC) PINPRC3D (:,:,:) = 0. +PINPRR (:,:) = 0. +PINPRR3D (:,:,:) = 0. +PINPRS (:,:) = 0. +PINPRS3D (:,:,:) = 0. +PINPRG (:,:) = 0. +PINPRG3D (:,:,:) = 0. +IF ( KRR == 7 ) PINPRH (:,:) = 0. +IF ( KRR == 7 ) PINPRH3D (:,:,:) = 0. ! ! !* 1. Parameters for cloud sedimentation @@ -1414,8 +1477,11 @@ END DO DO JK = IKTB , IKTE PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) END DO + WHERE (PRCT(:,:,:) > 1.E-04 ) & + PSPEEDC(:,:,:) = ZWSED(:,:,:) / (PRCT(:,:,:) * PRHODREF(:,:,:)) PINPRC(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s + PINPRC3D(:,:,:) = ZWSED(:,:,:)/XRHOLW ! in m/s PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP ENDIF @@ -1468,6 +1534,8 @@ END DO DO JK = IKTB , IKTE PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO + WHERE (PRRT(:,:,:) > 1.E-04 ) & + PSPEEDR(:,:,:) = ZWSED(:,:,:) / (PRRT(:,:,:) * PRHODREF(:,:,:)) PINPRR(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s PINPRR3D(:,:,:) = ZWSED(:,:,1:IKT)/XRHOLW ! in m/s PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP @@ -1577,9 +1645,11 @@ END DO DO JK = IKTB , IKTE PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO + WHERE (PRST(:,:,:) > 1.E-04 ) & + PSPEEDS(:,:,:) = ZWSED(:,:,:) / (PRST(:,:,:) * PRHODREF(:,:,:)) PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s - + PINPRS3D(:,:,:) = ZWSED(:,:,:)/XRHOLW ! in m/s PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP @@ -1633,8 +1703,10 @@ END DO PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO + WHERE (PRGT(:,:,:) > 1.E-04 ) & + PSPEEDG(:,:,:) = ZWSED(:,:,:) / (PRGT(:,:,:) * PRHODREF(:,:,:)) PINPRG(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s - + PINPRG3D(:,:,:) = ZWSED(:,:,:)/XRHOLW ! in m/s PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP ! @@ -1686,8 +1758,10 @@ END DO PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK)) ENDDO + WHERE (PRHT(:,:,:) > 1.E-04 ) & + PSPEEDH(:,:,:) = ZWSED(:,:,:) / (PRHT(:,:,:) * PRHODREF(:,:,:)) PINPRH(:,:) = ZWSED(:,:,IKB)/XRHOLW ! in m/s - + PINPRH3D(:,:,:) = ZWSED(:,:,:)/XRHOLW ! in m/s PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP ENDIF diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90 index fc67d9d99..c2a03f97c 100644 --- a/src/MNH/resolved_cloud.f90 +++ b/src/MNH/resolved_cloud.f90 @@ -19,8 +19,11 @@ INTERFACE PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & ORAIN, OWARM, OHHONI, OCONVHG, & PCF_MF,PRC_MF, PRI_MF, & - PINPRC,PINPRR,PINPRR3D, PEVAP3D, & - PINPRS,PINPRG,PINPRH,PSOLORG,PMI,PSEA,PTOWN ) + PINPRC,PINPRC3D,PINPRR,PINPRR3D, PEVAP3D, & + PINPRS,PINPRS3D,PINPRG,PINPRG3D,PINPRH,PINPRH3D, & + PSOLORG,PMI, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PSEA,PTOWN ) ! CHARACTER(LEN=4), INTENT(IN) :: HCLOUD ! kind of cloud CHARACTER(LEN=4), INTENT(IN) :: HACTCCN ! kind of CCN activation scheme @@ -113,8 +116,17 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI ! +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction ! @@ -134,8 +146,11 @@ END MODULE MODI_RESOLVED_CLOUD PCIT, OSEDIC, OACTIT, OSEDC, OSEDI, & ORAIN, OWARM, OHHONI, OCONVHG, & PCF_MF,PRC_MF, PRI_MF, & - PINPRC,PINPRR,PINPRR3D, PEVAP3D, & - PINPRS,PINPRG,PINPRH,PSOLORG,PMI,PSEA,PTOWN ) + PINPRC,PINPRC3D,PINPRR,PINPRR3D, PEVAP3D, & + PINPRS,PINPRS3D,PINPRG,PINPRG3D,PINPRH,PINPRH3D, & + PSOLORG,PMI, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PSEA,PTOWN ) ! ########################################################################## ! !!**** * - compute the resolved clouds and precipitation @@ -232,6 +247,8 @@ END MODULE MODI_RESOLVED_CLOUD !! Add KHKO scheme !! Modifications : March 2013 (O.Thouron) !! Add prognostic supersaturation +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -361,8 +378,17 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D ! evap profile REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRS! Snow instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRG! Graupel instant precip REAL, DIMENSION(:,:), INTENT(INOUT) :: PINPRH! Hail instant precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRC3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRS3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRG3D ! sed flux of precip +REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PINPRH3D ! sed flux of precip REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PSOLORG ![%] solubility fraction of soa REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PMI ! +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDC ! Cloud sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDR ! Rain sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDS ! Snow sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDG ! Graupel sedimentation speed +REAL, DIMENSION(:,:,:), INTENT(OUT) :: PSPEEDH ! Hail sedimentation speed REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Land Sea mask REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction ! @@ -770,8 +796,10 @@ SELECT CASE ( HCLOUD ) PRT(:,:,:,5), PRT(:,:,:,6), & PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC,PINPRR, PINPRR3D, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA,PTOWN) + PINPRC,PINPRC3D,PINPRR, PINPRR3D, PEVAP3D, & + PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PSEA,PTOWN) ! !* 9.2 Perform the saturation adjustment over cloud ice and cloud water ! @@ -808,9 +836,11 @@ SELECT CASE ( HCLOUD ) PRT(:,:,:,5), PRT(:,:,:,6), & PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3), & PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6), & - PINPRC, PINPRR, PINPRR3D, PEVAP3D, & - PINPRS, PINPRG, PSIGS, PSEA, PTOWN, & - PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, OCONVHG ) + PINPRC,PINPRC3D, PINPRR, PINPRR3D, PEVAP3D, & + PINPRS,PINPRS3D, PINPRG,PINPRG3D, PSIGS, & + PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH, & + PSEA, PTOWN, & + PRT(:,:,:,7), PRS(:,:,:,7), PINPRH,PINPRH3D,OCONVHG ) ! !* 10.2 Perform the saturation adjustment over cloud ice and cloud water diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90 index 4cff17517..3060afd81 100644 --- a/src/MNH/write_aircraft_balloon.f90 +++ b/src/MNH/write_aircraft_balloon.f90 @@ -61,6 +61,8 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON !! Original 15/05/2000 !! 10/01/2011 adding IMI, the model number !! March, 2013 : C.Lac : add vertical profiles +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! !! -------------------------------------------------------------------------- ! @@ -191,6 +193,9 @@ INTEGER :: JRR ! loop counter INTEGER :: JSV ! loop counter INTEGER :: JPT ! loop counter INTEGER :: IKU, IK +CHARACTER(LEN=2) :: INDICE +INTEGER :: I +INTEGER :: JLOOP ! !---------------------------------------------------------------------------- ! @@ -203,8 +208,12 @@ IF ( IMI /= TPFLYER%NMODEL ) RETURN ! IPROC = 20 + SIZE(TPFLYER%R,2) + SIZE(TPFLYER%SV,2) & + 2 + SIZE(TPFLYER%SVW_FLUX,2) -IPROCZ = SIZE(TPFLYER%RTZ,2)+SIZE(TPFLYER%CRARE,2)+SIZE(TPFLYER%CRARE_ATT,2)+ & - SIZE(TPFLYER%WZ,2) + SIZE(TPFLYER%FFZ,2) +IPROCZ = SIZE(TPFLYER%RTZ,2)+ SIZE(TPFLYER%RZ,2)+ SIZE(TPFLYER%RZ,3)+ SIZE(TPFLYER%CRARE,2)+ & + SIZE(TPFLYER%CRARE_ATT,2)+ SIZE(TPFLYER%WZ,2) + SIZE(TPFLYER%FFZ,2)+ & + SIZE(TPFLYER%IWCZ,2)+ SIZE(TPFLYER%LWCZ,2) + SIZE(TPFLYER%CIZ,2) + & + SIZE(TPFLYER%ZZ,2) + SIZE(TPFLYER%SPEEDCZ,2) + & + SIZE(TPFLYER%SPEEDRZ,2) + SIZE(TPFLYER%SPEEDSZ,2)+ & + SIZE(TPFLYER%SPEEDGZ,2) IF (SIZE(TPFLYER%TKE )>0) IPROC = IPROC + 1 IF (LDIAG_IN_RUN) IPROC = IPROC + 1 IF (LORILAM) IPROC = IPROC + JPMODE*3 @@ -566,13 +575,83 @@ DO IK=1, IKU YUNITZ (JPROCZ) = 'kg/kg' YCOMMENTZ(JPROCZ) = '1D Total hydrometeor mixing ratio' ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%RTZ(:,IK) +! + DO JRR=1,SIZE(TPFLYER%RZ,3) + JPROCZ = JPROCZ+1 + YUNITZ (JPROCZ) = 'kg/kg' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%RZ(:,IK,JRR) + IF (JRR==1) THEN + YTITLEZ (JPROCZ) = 'Rv' + YCOMMENTZ (JPROCZ) = '1D water vapor mixing ratio' + ELSE IF (JRR==2) THEN + YTITLEZ (JPROCZ) = 'Rc' + YCOMMENTZ (JPROCZ) = '1D liquid cloud water mixing ratio' + ELSE IF (JRR==3) THEN + YTITLEZ (JPROCZ) = 'Rr' + YCOMMENTZ (JPROCZ) = '1D Rain water mixing ratio' + ELSE IF (JRR==4) THEN + YTITLEZ (JPROCZ) = 'Ri' + YCOMMENTZ (JPROCZ) = '1D Ice cloud water mixing ratio' + ELSE IF (JRR==5) THEN + YTITLEZ (JPROCZ) = 'Rs' + YCOMMENTZ (JPROCZ) = '1D Snow mixing ratio' + ELSE IF (JRR==6) THEN + YTITLEZ (JPROCZ) = 'Rg' + YCOMMENTZ (JPROCZ) = '1D Graupel mixing ratio' + ELSE IF (JRR==7) THEN + YTITLEZ (JPROCZ) = 'Rh' + YCOMMENTZ (JPROCZ) = '1D Hail mixing ratio' + END IF + END DO ! JPROCZ = JPROCZ + 1 YTITLEZ (JPROCZ) = 'FF' YUNITZ (JPROCZ) = 'm/s' YCOMMENTZ(JPROCZ) = 'Horizontal wind' ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%FFZ(:,IK) -! ++ OC +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'IWC' + YUNITZ (JPROCZ) = 'kg/m3' + YCOMMENTZ(JPROCZ) = 'Ice water content' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%IWCZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'LWC' + YUNITZ (JPROCZ) = 'kg/m3' + YCOMMENTZ(JPROCZ) = 'Liquid water content' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%LWCZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'CIT' + YUNITZ (JPROCZ) = '/m3' + YCOMMENTZ(JPROCZ) = 'Ice concentration' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%CIZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'SPEEDC' + YUNITZ (JPROCZ) = 'm/s' + YCOMMENTZ(JPROCZ) = 'Cloud fall speed' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDCZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'SPEEDR' + YUNITZ (JPROCZ) = 'm/s' + YCOMMENTZ(JPROCZ) = 'Rain fall speed' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDRZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'SPEEDS' + YUNITZ (JPROCZ) = 'm/s' + YCOMMENTZ(JPROCZ) = 'Snow fall speed' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDSZ(:,IK) +! + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'SPEEDG' + YUNITZ (JPROCZ) = 'm/s' + YCOMMENTZ(JPROCZ) = 'Graupel fall speed' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%SPEEDGZ(:,IK) +! JPROCZ = JPROCZ + 1 YTITLEZ (JPROCZ) = 'RARE' YUNITZ (JPROCZ) = 'dBZ' @@ -588,6 +667,11 @@ DO IK=1, IKU YUNITZ (JPROCZ) = 'm/s' YCOMMENTZ(JPROCZ) = '1D vertical velocity' ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%WZ(:,IK) + JPROCZ = JPROCZ + 1 + YTITLEZ (JPROCZ) = 'Z' + YUNITZ (JPROCZ) = 'm' + YCOMMENTZ(JPROCZ) = '1D altitude above sea' + ZWORKZ6 (1,1,IK,:,1,JPROCZ) = TPFLYER%ZZ(:,IK) END DO !---------------------------------------------------------------------------- ! diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90 index ef825e27e..4a03174e9 100644 --- a/src/MNH/write_profilern.f90 +++ b/src/MNH/write_profilern.f90 @@ -59,6 +59,8 @@ END MODULE MODI_WRITE_PROFILER_n !! MODIFICATIONS !! ------------- !! Original 15/02/2002 +!! July, 2015 (O.Nuissier/F.Duffourg) Add microphysics diagnostic for +!! aircraft, ballon and profiler !! !! -------------------------------------------------------------------------- ! @@ -147,7 +149,7 @@ IF (TPROFILER%X(II)==XUNDEF) RETURN IF (TPROFILER%Y(II)==XUNDEF) RETURN IKU = SIZE(TPROFILER%W,2) !nbre de niveaux sur la verticale SIZE(TPROFILER%W,2) ! -IPROC = 11 + SIZE(TPROFILER%R,4) + SIZE(TPROFILER%SV,4) +IPROC = 27 + SIZE(TPROFILER%R,4) + SIZE(TPROFILER%SV,4) IF (LDIAG_IN_RUN) IPROC = IPROC + 13 IF (LORILAM) IPROC = IPROC + JPMODE*3 IF (LDUST) IPROC = IPROC + NMODE_DST*3 @@ -190,12 +192,78 @@ YCOMMENT (JPROC) = 'Radar reflectivity' ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%RARE(:,IK,II) ! JPROC = JPROC + 1 +YTITLE (JPROC) = 'SPEEDC' +YUNIT (JPROC) = 'm/s' +YCOMMENT (JPROC) = 'Cloud sedimentation speed' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDC(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'SPEEDR' +YUNIT (JPROC) = 'm/s' +YCOMMENT (JPROC) = 'Rain sedimentation speed' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDR(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'SPEEDS' +YUNIT (JPROC) = 'm/s' +YCOMMENT (JPROC) = 'Snow sedimentation speed' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDS(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'SPEEDG' +YUNIT (JPROC) = 'm/s' +YCOMMENT (JPROC) = 'Graupel sedimentation speed' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDG(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'SPEEDH' +YUNIT (JPROC) = 'm/s' +YCOMMENT (JPROC) = 'Hail sedimentation speed' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SPEEDH(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'INPRC3D' +YUNIT (JPROC) = 'mm/h' +YCOMMENT (JPROC) = 'Cloud sedimentation rate' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRC3D(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'INPRR3D' +YUNIT (JPROC) = 'mm/h' +YCOMMENT (JPROC) = 'Rain sedimentation rate' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRR3D(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'INPRS3D' +YUNIT (JPROC) = 'mm/h' +YCOMMENT (JPROC) = 'Snow sedimentation rate' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRS3D(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'INPRG3D' +YUNIT (JPROC) = 'mm/h' +YCOMMENT (JPROC) = 'Graupel sedimentation rate' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRG3D(:,IK,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'INPRH3D' +YUNIT (JPROC) = 'mm/h' +YCOMMENT (JPROC) = 'Hail sedimentation rate' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%INPRH3D(:,IK,II) +! +JPROC = JPROC + 1 YTITLE (JPROC) = 'P' YUNIT (JPROC) = 'Pascal' YCOMMENT (JPROC) = 'Pressure' ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%P(:,IK,II) ! JPROC = JPROC + 1 +YTITLE (JPROC) = 'ALT' +YUNIT (JPROC) = 'm' +YCOMMENT (JPROC) = 'Altitude' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZZ(:,IK,II) +! +JPROC = JPROC + 1 YTITLE (JPROC) = 'LON' YUNIT (JPROC) = 'decimal degree' YCOMMENT (JPROC) = 'Longitude' @@ -346,6 +414,11 @@ DO JRR=1,SIZE(TPROFILER%R,4) YCOMMENT (JPROC) = 'Hail mixing ratio' END IF END DO +JPROC = JPROC + 1 +YTITLE (JPROC) = 'Rhod' +YUNIT (JPROC) = 'kg/m3' +YCOMMENT (JPROC) = 'Density of dry air in moist' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%RHOD(:,IK,II) ! IF (SIZE(TPROFILER%TKE,1)>0) THEN JPROC = JPROC+1 @@ -355,6 +428,30 @@ IF (SIZE(TPROFILER%TKE,1)>0) THEN ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%TKE(:,IK,II) END IF ! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'IWV' +YUNIT (JPROC) = 'kg/m2' +YCOMMENT (JPROC) = 'Integrated Water Vapour' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%IWV(:,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'ZTD' +YUNIT (JPROC) = 'm' +YCOMMENT (JPROC) = 'Zenith Tropospheric Delay' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZTD(:,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'ZWD' +YUNIT (JPROC) = 'm' +YCOMMENT (JPROC) = 'Zenith Wet Delay' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZWD(:,II) +! +JPROC = JPROC + 1 +YTITLE (JPROC) = 'ZHD' +YUNIT (JPROC) = 'm' +YCOMMENT (JPROC) = 'Zenith Hydrostatic Delay' +ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZHD(:,II) +! IF (SIZE(TPROFILER%SV,4)>=1) THEN ! User scalar variables DO JSV = 1,NSV_USER -- GitLab