SUBROUTINE CALHEL(UST,VST,HELI) C$$$ SUBPROGRAM DOCUMENTATION BLOCK C . . . C SUBPROGRAM: CALHEL COMPUTES STORM RELATIVE HELICITY C PRGRMMR: BALDWIN ORG: W/NP2 DATE: 94-08-22 C C ABSTRACT: C THIS ROUTINE COMPUTES ESTIMATED STORM MOTION AND C STORM-RELATIVE ENVIRONMENTAL HELICITY. C (DAVIES-JONES ET AL 1990) THE ALGORITHM PROCEEDS AS C FOLLOWS. C C THE STORM MOTION COMPUTATION NO LONGER EMPLOYS THE DAVIES AND C JOHNS (1993) METHOD WHICH DEFINED STORM MOTION AS 30 DEGREES TO C THE RIGHT OF THE 0-6 KM MEAN WIND AT 75% OF THE SPEED FOR MEAN C SPEEDS LESS THAN 15 M/S AND 20 DEGREES TO THE RIGHT FOR SPEEDS C GREATER THAN 15 M/S. INSTEAD, WE NOW USE THE DYNAMIC METHOD C (BUNKERS ET AL. 1998) WHICH HAS BEEN FOUND TO DO BETTER IN C CASES WITH 'NON-CLASSIC' HODOGRAPHS (SUCH AS NORTHWEST-FLOW C EVENTS) AND DO AS WELL OR BETTER THAN THE OLD METHOD IN MORE C CLASSIC SITUATIONS. C C PROGRAM HISTORY LOG: C 94-08-22 MICHAEL BALDWIN C 97-03-27 MICHAEL BALDWIN - SPEED UP CODE C 98-06-15 T BLACK - CONVERSION FROM 1-D TO 2-D C 00-01-10 G MANIKIN - CHANGED CODE TO USE BUNKERS METHOD C AS DESCRIBED ABOVE C C USAGE: CALHEL(UST,VST,HELI) C INPUT ARGUMENT LIST: C NONE C C OUTPUT ARGUMENT LIST: C UST - ESTIMATED U COMPONENT (M/S) OF STORM MOTION. C VST - ESTIMATED V COMPONENT (M/S) OF STORM MOTION. C HELI - STORM-RELATIVE HELICITY (M**2/S**2) C C OUTPUT FILES: C NONE C C SUBPROGRAMS CALLED: C UTILITIES: C C LIBRARY: C COMMON - VRBLS C LOOPS C PHYS C EXTRA C MASKS C OPTIONS C INDX C C ATTRIBUTES: C LANGUAGE: FORTRAN 90 C MACHINE : CRAY C-90 C$$$ C C C INCLUDE PARAMETERS. INCLUDE "parmeta" INCLUDE "params" INCLUDE "parm.tbl" PARAMETER (PI=3.141592654) PARAMETER (P150=15000.0,P300=30000.0,S15=15.0) PARAMETER (D3000=3000.0,PI6=0.5235987756,PI9=0.34906585) PARAMETER (D5500=5500.0,D6000=6000.0,D7000=7000.0) PARAMETER (D500=500.0) C C DECLARE VARIABLES C REAL UST(IM,JM),VST(IM,JM),HELI(IM,JM),HTSFC(IM,JM) REAL UST6(IM,JM),VST6(IM,JM),ETOT6(IM,JM) REAL UST5(IM,JM),VST5(IM,JM),ETOT5(IM,JM) REAL UST1(IM,JM),VST1(IM,JM),ETOT1(IM,JM) C C INCLUDE COMMON BLOCKS. INCLUDE "VRBLS.comm" INCLUDE "LOOPS.comm" INCLUDE "EXTRA.comm" INCLUDE "MASKS.comm" INCLUDE "PHYS.comm" INCLUDE "OPTIONS.comm" INCLUDE "INDX.comm" INCLUDE "CTLBLK.comm" C C**************************************************************** C START CALHEL HERE C C INITIALIZE ARRAYS. C !$omp parallel do DO J=JSTA,JEND DO I=1,IM UST(I,J) = 0.0 VST(I,J) = 0.0 HELI(I,J) = 0.0 UST1(I,J) = 0.0 VST1(I,J) = 0.0 ETOT1(I,J) = 0.0 UST5(I,J) = 0.0 VST5(I,J) = 0.0 ETOT5(I,J) = 0.0 UST6(I,J) = 0.0 VST6(I,J) = 0.0 ETOT6(I,J) = 0.0 ENDDO ENDDO C C LOOP OVER HORIZONTAL GRID. C CALL EXCH(RES) CALL EXCH(PD) DO L = 1,LP1 CALL EXCH(ZINT(1,1,L)) END DO C !$omp parallel do !$omp& private(htsfc,ie,iw,pdslvk,pkl,psfck) DO L = 1,LM DO J=JSTA_M,JEND_M DO I=2,IM-1 IE=I+IVE(J) IW=I+IVW(J) PDSLVK=(PD(IW,J)*RES(IW,J)+PD(IE,J)*RES(IE,J)+ 1 PD(I,J+1)*RES(I,J+1)+PD(I,J-1)*RES(I,J-1))*0.25 PSFCK=AETA(LMV(I,J))*PDSLVK+PT HTSFC(I,J)=0.25*(ZINT(IW,J,LMV(I,J)+1)+ZINT(IE,J,LMV(I,J)+1)+ 1 ZINT(I,J+1,LMV(I,J)+1)+ZINT(I,J-1,LMV(I,J)+1)) C C COMPUTE MASS WEIGHTED MEAN WIND IN THE 0-6 KM LAYER, THE C 0-0.5 KM LAYER, AND THE 5.5-6 KM LAYER C Z2=0.125*(ZINT(IW,J,L)+ZINT(IW,J,L+1)+ 1 ZINT(IE,J,L)+ZINT(IE,J,L+1)+ 1 ZINT(I,J+1,L)+ZINT(I,J+1,L+1)+ 1 ZINT(I,J-1,L)+ZINT(I,J-1,L+1)) DZABV=Z2-HTSFC(I,J) IF (DZABV.LE.D6000 .AND. L.LE.LMV(I,J)) THEN UST6(I,J) = UST6(I,J) + U(I,J,L) * DETA(L) VST6(I,J) = VST6(I,J) + V(I,J,L) * DETA(L) ETOT6(I,J) = ETOT6(I,J) + DETA(L) ENDIF IF (DZABV.LT.D6000 .AND. DZABV.GE.D5500 .AND. & L.LE.LMV(I,J)) THEN UST5(I,J) = UST5(I,J) + U(I,J,L) * DETA(L) VST5(I,J) = VST5(I,J) + V(I,J,L) * DETA(L) ETOT5(I,J) = ETOT5(I,J) + DETA(L) ENDIF IF (DZABV.LT.D500 .AND. L.LE.LMV(I,J)) THEN UST1(I,J) = UST1(I,J) + U(I,J,L) * DETA(L) VST1(I,J) = VST1(I,J) + V(I,J,L) * DETA(L) ETOT1(I,J) = ETOT1(I,J) + DETA(L) ENDIF ENDDO ENDDO ENDDO C CASE WHERE THERE IS NO LEVEL WITH HEIGHT BETWEEN 5500 AND 6000 DO J=JSTA_M,JEND_M DO I=2,IM-1 IF (ETOT5(I,J) .EQ. 0) THEN DO L=LM,1,-1 IE=I+IVE(J) IW=I+IVW(J) Z2=0.125*(ZINT(IW,J,L)+ZINT(IW,J,L+1)+ 1 ZINT(IE,J,L)+ZINT(IE,J,L+1)+ 1 ZINT(I,J+1,L)+ZINT(I,J+1,L+1)+ 1 ZINT(I,J-1,L)+ZINT(I,J-1,L+1)) DZABV=Z2-HTSFC(I,J) IF (DZABV.LT.D7000 .AND. DZABV.GE.D6000) THEN UST5(I,J) = U(I,J,L) * DETA(L) VST5(I,J) = V(I,J,L) * DETA(L) ETOT5(I,J) = DETA(L) GOTO 30 ENDIF ENDDO ENDIF 30 CONTINUE ENDDO ENDDO !$omp parallel do !$omp& private(umean6,vmean6,umean5,vmean5,umean1,vmean1,ushr,vshr) DO J=JSTA_M,JEND_M DO I=2,IM-1 IF (ETOT6(I,J).GT.0.0 .AND. ETOT1(I,J) .GT. 0.0 1 .AND. ETOT5(I,J) .GT. 0.0) THEN UMEAN6 = UST6(I,J) / ETOT6(I,J) VMEAN6 = VST6(I,J) / ETOT6(I,J) UMEAN5 = UST5(I,J) / ETOT5(I,J) VMEAN5 = VST5(I,J) / ETOT5(I,J) UMEAN1 = UST1(I,J) / ETOT1(I,J) VMEAN1 = VST1(I,J) / ETOT1(I,J) C C COMPUTE STORM MOTION VECTOR C IT IS DEFINED AS 7.5 M/S TO THE RIGHT OF THE 0-6 KM MEAN C WIND CONSTRAINED ALONG A LINE WHICH IS BOTH PERPENDICULAR C TO THE 0-6 KM MEAN VERTICAL WIND SHEAR VECTOR AND PASSES C THROUGH THE 0-6 KM MEAN WIND. THE WIND SHEAR VECTOR IS C SET AS THE DIFFERENCE BETWEEN THE 5.5-6 KM WIND (THE HEAD C OF THE SHEAR VECTOR) AND THE 0-0.5 KM WIND (THE TAIL). C THIS IS FOR THE RIGHT-MOVING CASE; WE IGNORE THE LEFT MOVER. USHR = UMEAN5 - UMEAN1 VSHR = VMEAN5 - VMEAN1 UST(I,J) = UMEAN6 + (7.5*VSHR/SQRT(USHR*USHR+VSHR*VSHR)) VST(I,J) = VMEAN6 - (7.5*USHR/SQRT(USHR*USHR+VSHR*VSHR)) ELSE UST(I,J) = 0.0 VST(I,J) = 0.0 ENDIF ENDDO ENDDO C C C COMPUTE STORM-RELATIVE HELICITY C !$omp parallel do !$omp& private(du1,du2,dv1,dv2,dz,dz1,dz2,dzabv,ie,iw,z1,z2,z3) DO L = 2,LM-1 DO J=JSTA_M,JEND_M DO I=2,IM-1 IW=I+IVW(J) IE=I+IVE(J) Z2=0.125*(ZINT(IW,J,L)+ZINT(IW,J,L+1)+ & ZINT(IE,J,L)+ZINT(IE,J,L+1)+ & ZINT(I,J+1,L)+ZINT(I,J+1,L+1)+ & ZINT(I,J-1,L)+ZINT(I,J-1,L+1)) DZABV=Z2-HTSFC(I,J) C IF(DZABV.LT.D3000.AND.L.LE.LMV(I,J))THEN Z1=0.125*(ZINT(IW,J,L+1)+ZINT(IW,J,L+2)+ & ZINT(IE,J,L+1)+ZINT(IE,J,L+2)+ & ZINT(I,J+1,L+1)+ZINT(I,J+1,L+2)+ & ZINT(I,J-1,L+1)+ZINT(I,J-1,L+2)) Z3=0.125*(ZINT(IW,J,L-1)+ZINT(IW,J,L)+ & ZINT(IE,J,L-1)+ZINT(IE,J,L)+ & ZINT(I,J+1,L-1)+ZINT(I,J+1,L)+ & ZINT(I,J-1,L-1)+ZINT(I,J-1,L)) DZ=0.25*((ZINT(IW,J,L)+ZINT(IE,J,L)+ & ZINT(I,J-1,L)+ZINT(I,J+1,L))- & (ZINT(IW,J,L+1)+ZINT(IE,J,L+1)+ & ZINT(I,J-1,L+1)+ZINT(I,J+1,L+1))) DZ1=Z1-Z2 DZ2=Z2-Z3 DU1=U(I,J,L+1)-U(I,J,L) DU2=U(I,J,L)-U(I,J,L-1) DV1=V(I,J,L+1)-V(I,J,L) DV2=V(I,J,L)-V(I,J,L-1) HELI(I,J)=((V(I,J,L)-VST(I,J))* 1 (DZ2*(DU1/DZ1)+DZ1*(DU2/DZ2)) 2 -(U(I,J,L)-UST(I,J))* 3 (DZ2*(DV1/DZ1)+DZ1*(DV2/DZ2))) 4 *DZ/(DZ1+DZ2)+HELI(I,J) ENDIF ENDDO ENDDO ENDDO C C END OF ROUTINE. C RETURN END