diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90 index 3349a29e1c2b5ea732df591a5f9aa53de5876b26..55b9599aa4d43cbcb0ae9aca5467527a8370383e 100644 --- a/src/MNH/diag.f90 +++ b/src/MNH/diag.f90 @@ -78,6 +78,7 @@ !! 09/2016 (JP Pinty) Add LIMA !! 10/2016 (C.LAC) add LVISI !! 10/2016 (F Brosse) Add prod/loss terms computation for chemistry +!! 10/2017 (G.Delautier) New boundary layer height : replace LBLTOP by CBLTOP !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -214,7 +215,7 @@ NAMELIST/NAM_DIAG/ CISO, LVAR_RS, LVAR_LS, & LVORT, LDIV, LMEAN_POVO, XMEAN_POVO, & LGEO, LAGEO, LWIND_ZM, LMSLP, LTHW, & LCLD_COV, LVAR_PR, LTOTAL_PR, LMEAN_PR, XMEAN_PR, & - NCAPE, LBV_FR, LRADAR, LBLTOP, LTRAJ, & + NCAPE, LBV_FR, LRADAR, CBLTOP, LTRAJ, & LDIAG,XDIAG,LCHEMDIAG,LCHAQDIAG,XCHEMLAT,XCHEMLON,& CSPEC_BU_DIAG,CSPEC_DIAG,LAIRCRAFT_BALLOON,NTIME_AIRCRAFT_BALLOON,& XSTEP_AIRCRAFT_BALLOON,& @@ -289,7 +290,7 @@ XMEAN_PR(1:2)=1. NCAPE=-1 LBV_FR=.FALSE. LRADAR=.FALSE. -LBLTOP=.FALSE. +CBLTOP='NONE' LVISI=.FALSE. LVAR_FRC=.FALSE. LCHEMDIAG=.FALSE. diff --git a/src/MNH/modd_diag_flag.f90 b/src/MNH/modd_diag_flag.f90 index 589faa6df032df5846db417b5a870e466400e5cb..fda235d7a4d8fdeb005dde66660cd6a9c66ce8ff 100644 --- a/src/MNH/modd_diag_flag.f90 +++ b/src/MNH/modd_diag_flag.f90 @@ -39,6 +39,7 @@ !! D.Ricard 2015 : add LMOIST_ES !! C.Lac 10/2016 Add visibility diagnostic !! 10/2016 (F Brosse) Add prod/loss terms computation for chemistry +!! 10/2017 (G.Delautier) New boundary layer height : replace LBLTOP by CBLTOP !! !------------------------------------------------------------------------------- ! @@ -92,7 +93,7 @@ REAL, DIMENSION(2) :: XMEAN_PR INTEGER :: NCAPE ! CAPE, DCAPE, CIN, CAPEMAX, CINMAX LOGICAL :: LBV_FR LOGICAL :: LRADAR -LOGICAL :: LBLTOP +CHARACTER (LEN=5) :: CBLTOP LOGICAL :: LVISI LOGICAL :: LTRAJ ! to compute trajectories LOGICAL :: LCHEMDIAG = .FALSE. ! flag for chemistry diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index 9cfabface0b3e82b2a04ba23edfa054343f123b0..081980b2dc6dd7a6a5e07f658202efd884b41832 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -141,6 +141,7 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG !! D.Ricard 2015 : add THETAES + POVOES (LMOIST_ES=T) !! Modification 01/2016 (JP Pinty) Add LIMA !! C.Lac 04/2016 : add visibility and droplet deposition +!! 10/2017 (G.Delautier) New boundary layer height : replace LBLTOP by CBLTOP !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -326,6 +327,14 @@ INTEGER :: I ! ! LIMA LIDAR REAL,DIMENSION(:,:,:,:), ALLOCATABLE :: ZTMP1, ZTMP2, ZTMP3, ZTMP4 +! +! hauteur couche limite +REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZZZ_GRID1 +REAL,DIMENSION(:,:),ALLOCATABLE :: ZTHVSOL,ZSHMIX +REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZZONWIND,ZMERWIND,ZFFWIND2,ZRIB + + ! + ! !------------------------------------------------------------------------------- ! @@ -2205,7 +2214,7 @@ END IF ! !* Virtual potential temperature ! -IF ( LMOIST_V .OR. LMSLP .OR. LBLTOP ) THEN +IF ( LMOIST_V .OR. LMSLP .OR. CBLTOP/='NONE' ) THEN ALLOCATE(ZTHETAV(IIU,IJU,IKU)) ! IF(NRR > 0) THEN @@ -3315,15 +3324,84 @@ END IF ! !* Height of boundary layer ! -IF (LBLTOP) THEN - ZGAMREF=3.5E-3 ! K/m +IF (CBLTOP == 'THETA') THEN + ! + ! m�thode de la parcelle + ! + ALLOCATE(ZSHMIX(IIU,IJU)) + ZWORK31(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU)) ZWORK31(:,:,IKU)=2.*ZWORK31(:,:,IKU-1)-ZWORK31(:,:,IKU-2) - YFMFILE=CINIFILE - CINIFILE=HFMFILE - CALL FREE_ATM_PROFILE(ZTHETAV,ZWORK31,XZS,XZSMT,ZGAMREF,ZWORK32,ZWORK33) - CINIFILE=YFMFILE -END IF + ZWORK21(:,:) = ZTHETAV(:,:,IKB)+0.5 + ZSHMIX(:,:) = 0.0 + DO JJ=1,IJU + DO JI=1,IIU + DO JK=IKB,IKE + IF ( ZTHETAV(JI,JJ,JK).GT.ZWORK21(JI,JJ) ) THEN + ZSHMIX(JI,JJ) = ZWORK31(JI,JJ,JK-1) & + +( ZWORK31(JI,JJ,JK) - ZWORK31 (JI,JJ,JK-1) ) & + /( ZTHETAV(JI,JJ,JK) - ZTHETAV(JI,JJ,JK-1) ) & + *( ZWORK21(JI,JJ) - ZTHETAV(JI,JJ,JK-1) ) + EXIT + END IF + END DO + END DO + END DO + ZSHMIX(:,:)=ZSHMIX(:,:)-XZS(:,:) + ZSHMIX(:,:)=MAX(ZSHMIX(:,:),50.0) + YRECFM='HBLTOP' + YCOMMENT='Height of Boundary Layer TOP (M)' + ILENCH=LEN(YCOMMENT) + IGRID=1 + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZSHMIX,IGRID,ILENCH,YCOMMENT,IRESP) ! + DEALLOCATE(ZSHMIX) + +ELSEIF (CBLTOP == 'RICHA') THEN + ! + ! m�thode du "bulk Richardson number" + ! + ALLOCATE(ZRIB(IIU,IJU,IKU)) + ALLOCATE(ZSHMIX(IIU,IJU)) + + ZWORK31(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU)) + ZWORK31(:,:,IKU)=2.*ZWORK31(:,:,IKU-1)-ZWORK31(:,:,IKU-2) + ZWORK32=MXF(XUT) + ZWORK33=MYF(XVT) + ZWORK34=ZWORK32**2+ZWORK33**2 + DO JK=IKB,IKE + ZRIB(:,:,JK)=XG*ZWORK31(:,:,JK)*(ZTHETAV(:,:,JK)-ZTHETAV(:,:,IKB))/(ZTHETAV(:,:,IKB)*ZWORK34(:,:,JK)) + ENDDO + ZSHMIX=0.0 + DO JJ=1,IJU + DO JI=1,IIU + DO JK=IKB,IKE + IF ( ZRIB(JI,JJ,JK).GT.0.25 ) THEN + ZSHMIX(JI,JJ) = ZWORK31(JI,JJ,JK-1) & + +( ZWORK31(JI,JJ,JK) - ZWORK31(JI,JJ,JK-1) ) & + *( 0.25 - ZRIB(JI,JJ,JK-1) ) & + /( ZRIB(JI,JJ,JK) - ZRIB(JI,JJ,JK-1) ) + EXIT + END IF + END DO + END DO + END DO + ZSHMIX(:,:)=ZSHMIX(:,:)-XZS(:,:) + YRECFM='HBLTOP' + YCOMMENT='Height of Boundary Layer TOP (M)' + ILENCH=LEN(YCOMMENT) + IGRID=1 + CALL FMWRIT(HFMFILE,YRECFM,CLUOUT,'XY',ZSHMIX,IGRID,ILENCH,YCOMMENT,IRESP) ! + DEALLOCATE(ZRIB,ZSHMIX) +ENDIF + ! used before 5-3-1 version + ! + !ZGAMREF=3.5E-3 ! K/m + !ZWORK31(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU)) + !ZWORK31(:,:,IKU)=2.*ZWORK31(:,:,IKU-1)-ZWORK31(:,:,IKU-2) + !YFMFILE=CINIFILE + !CINIFILE=HFMFILE + !CALL FREE_ATM_PROFILE(ZTHETAV,ZWORK31,XZS,XZSMT,ZGAMREF,ZWORK32,ZWORK33) + !CINIFILE=YFMFILE ! IF (ALLOCATED(ZTHETAV)) DEALLOCATE(ZTHETAV) !