VLab Issue #3224 - NSHARP: Fix erroneous mixing heights
Change-Id: Ib27352c1f0e5f2ee860577e5b3e96be5252902f2 Former-commit-id:8560c21c50
[formerly200c7e60da
] [formerly65dd8b4c3c
] [formerly8560c21c50
[formerly200c7e60da
] [formerly65dd8b4c3c
] [formerlyf203a4c035
[formerly65dd8b4c3c
[formerly 459cd2e6772efa05a683073798a1d4424aa2facf]]]] Former-commit-id:f203a4c035
Former-commit-id:803a4584c9
[formerly00c1f40997
] [formerly ad4b7bcc63f7e8c66ec4b0f39eea3f4a987956f1 [formerly46ebeb9969
]] Former-commit-id: d34facf3627b4a21886984446a4d5d04222a5da1 [formerlyabb11feb16
] Former-commit-id:aaa14d1b1d
This commit is contained in:
parent
e3d279329d
commit
806b78cf4d
4 changed files with 255 additions and 173 deletions
Binary file not shown.
|
@ -477,8 +477,8 @@ float cave_ship(){
|
|||
|
||||
t500 = i_temp(500, I_PRES);
|
||||
lr75 = lapse_rate(&ix1, 700, 500);
|
||||
fzlh = agl(i_hght(temp_lvl( 0, &ix1 ), I_PRES));
|
||||
//fzlh = mtof(agl(i_hght(temp_lvl(0, &ix1), I_PRES)));
|
||||
// Chin V9 was:: fzlh = agl(i_hght(temp_lvl( 0, &ix1 ), I_PRES));
|
||||
fzlh = mtof(agl(i_hght(temp_lvl(0, &ix1), I_PRES)));//Chin: according to bignsharpV2013Jun12
|
||||
ship = sig_hail(mucape, mumixr, lr75, t500, kt_to_mps(shr6), fzlh, mucinh, 0, 0, 25, mlcape);
|
||||
/* ----- Set Parcel Back ----- */
|
||||
if (oldlplchoice == 1)
|
||||
|
@ -861,122 +861,148 @@ void low_inv ( float *inv_mb, float *inv_dC )
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
void mix_height ( float *mh_mb, float *mh_drct, float *mh_sped,
|
||||
float *mh_dC, float *mh_lr, float *mh_drct_max,
|
||||
float *mh_sped_max, short flag )
|
||||
/************************************************************************
|
||||
* OPC MODIFICATION - J. Morgan 5/3/05 *
|
||||
* MIX_HEIGHT - New function *
|
||||
* *
|
||||
* MIX_HEIGHT *
|
||||
* J. Morgan OPC *
|
||||
* *
|
||||
* Calculates the mixing height. *
|
||||
* flag = 0 Surface-based lapse rate *
|
||||
* flag = 1 Layer-based lapse rate *
|
||||
* *
|
||||
* mh_mb - Pressure at mixing height (mb) *
|
||||
* mh_drct - Wind direction at mixing height (deg) *
|
||||
* mh_sped - Wind speed at mixing height (kt) *
|
||||
* mh_dC - Layer change in temperature (C) *
|
||||
* mh_lr - Layer lapse rate (C/km) *
|
||||
* mh_drct_max - Layer maximum wind direction (deg) *
|
||||
* mh_sped_max - Layer maximum wind speed (kt) *
|
||||
* *
|
||||
* Called by xwvid1.c: draw_skewt() *
|
||||
* Called by xwvid3.c: show_mixheight() *
|
||||
*
|
||||
* Chin:: not in BigNsharp, therefore ported to here. 6/8/2011
|
||||
***********************************************************************/
|
||||
void mix_height ( float *mh_pres, float *mh_drct, float *mh_sped,
|
||||
float *mh_dC, float *mh_lr, float *mh_drct_max,
|
||||
float *mh_sped_max, short flag )
|
||||
/****************************************************************************
|
||||
* mix_height *
|
||||
* *
|
||||
* This function modifies original mix_height funtion which *
|
||||
* computes hydro meteorological parameters within empirical mix *
|
||||
* boundary layer. *
|
||||
* *
|
||||
* Calculates the mixing height. *
|
||||
* *
|
||||
* mh_pres - Pressure at mixing height (mb) *
|
||||
* mh_drct - Wind direction at mixing height (deg) *
|
||||
* mh_sped - Wind speed at mixing height (kts) *
|
||||
* mh_dC - Layer change in temperature (C) *
|
||||
* mh_lr - Layer lapse rate (C/km) *
|
||||
* mh_drct_max - Layer maximum wind direction (deg) *
|
||||
* mh_sped_max - Layer maximum wind speed (kts) *
|
||||
* flag - 0: Surface-based lapse rate *
|
||||
* 1: Layer-based lapse rate *
|
||||
* *
|
||||
* Chin:: not in BigNsharp, therefore ported to here. 6/8/2011 * *
|
||||
* J. Morgan 5/2005 Created *
|
||||
* T. Lee 2/2014 Cleanup and fixed surface based and layer based *
|
||||
* parameters always have same values *
|
||||
****************************************************************************/
|
||||
{
|
||||
short ii, bb, b_1;
|
||||
float thresh, lapser, lapser_1, mdrct, msped, drct, sped;
|
||||
float dt, dz;
|
||||
short pIndex, zIndex, tIndex, drIndex, spIndex;
|
||||
pIndex = getParmIndex("PRES");
|
||||
zIndex = getParmIndex("HGHT");
|
||||
tIndex = getParmIndex("TEMP");
|
||||
spIndex = getParmIndex("SPED");
|
||||
drIndex = getParmIndex("DRCT");
|
||||
if (!sndg || pIndex == -1 || zIndex == -1 || tIndex == -1 || drIndex == -1 || spIndex == -1) return;
|
||||
short ii, bb, b_1;
|
||||
float thresh, lapse_rate, lapser_1, mxdrct, mxsped, drct, sped;
|
||||
float dt, dz;
|
||||
short pIndex, zIndex, tIndex, drIndex, spIndex;
|
||||
Boolean first_level = True;
|
||||
|
||||
*mh_mb = -9999;
|
||||
*mh_drct = -9999;
|
||||
*mh_sped = -9999;
|
||||
*mh_dC = -9999;
|
||||
*mh_lr = -9999;
|
||||
*mh_drct_max = -9999;
|
||||
*mh_sped_max = -9999;
|
||||
pIndex = getParmIndex("PRES");
|
||||
zIndex = getParmIndex("HGHT");
|
||||
tIndex = getParmIndex("TEMP");
|
||||
spIndex = getParmIndex("SPED");
|
||||
drIndex = getParmIndex("DRCT");
|
||||
if (!sndg || pIndex == -1 || zIndex == -1 || tIndex == -1 || drIndex == -1 || spIndex == -1) return;
|
||||
|
||||
thresh = 8.3;
|
||||
lapser_1 = 0.0;
|
||||
mdrct = 0.0;
|
||||
msped = 0.0;
|
||||
drct = 0.0;
|
||||
sped = 0.0;
|
||||
*mh_pres = -9999;
|
||||
*mh_drct = -9999;
|
||||
*mh_sped = -9999;
|
||||
*mh_dC = -9999;
|
||||
*mh_lr = -9999;
|
||||
*mh_drct_max = -9999;
|
||||
*mh_sped_max = -9999;
|
||||
|
||||
for ( ii = 0; ii < numlvl-1; ii++ ) {//Chin
|
||||
thresh = 8.3;
|
||||
lapser_1 = 0.0;
|
||||
mxdrct = 0.0;
|
||||
mxsped = 0.0;
|
||||
drct = 0.0;
|
||||
sped = 0.0;
|
||||
|
||||
if ( qc( sndg[ii+1][tIndex] ) && qc( sndg[ii][tIndex] )) {
|
||||
/* ----- Set Method Values ----- */
|
||||
if( flag == 0 ) {
|
||||
bb = 0;
|
||||
b_1 = 0;
|
||||
}
|
||||
else {
|
||||
bb = ii;
|
||||
b_1 = ii-1;
|
||||
}
|
||||
for ( ii = 0; ii < numlvl-1; ii++ ) {//Chin
|
||||
|
||||
/* ----- Calculate Lapse Rate ----- */
|
||||
dt = sndg[ii+1][tIndex] - sndg[bb][tIndex] ;
|
||||
dz = sndg[ii+1][zIndex] - sndg[bb][zIndex];
|
||||
lapser = (dt / dz)*-1000;
|
||||
if ( qc( sndg[ii+1][tIndex] ) ) { //TL
|
||||
/* ----- Set Method Values ----- */
|
||||
if( flag == 0 ) {
|
||||
bb = 0;
|
||||
b_1 = 0;
|
||||
}
|
||||
else {
|
||||
bb = ii;
|
||||
b_1 = ii-1;
|
||||
}
|
||||
|
||||
/* ----- Test Lapse Rate ----- */
|
||||
if ( lapser > thresh ) {
|
||||
if ( first_level ) {
|
||||
mxdrct = sndg[0][drIndex];
|
||||
mxsped = sndg[0][spIndex];
|
||||
*mh_drct = sndg[0][drIndex];
|
||||
*mh_sped = sndg[0][spIndex];
|
||||
}
|
||||
|
||||
/* ----- Store Maximum Wind Data ----- */
|
||||
drct = sndg[ii][drIndex];
|
||||
sped = sndg[ii][spIndex];
|
||||
if ( drct > mdrct ) {
|
||||
mdrct = drct;
|
||||
msped = sped;
|
||||
}
|
||||
}
|
||||
else if( ii == 0 ) { /* ----- Surface Test failed, Mixing Height=Surface ----- */
|
||||
*mh_mb = sndg[ii][pIndex];
|
||||
*mh_drct = sndg[ii][drIndex];
|
||||
*mh_sped = sndg[ii][spIndex];
|
||||
*mh_dC = -(sndg[ii+1][tIndex] - sndg[ii][tIndex] );
|
||||
*mh_lr = lapser;
|
||||
*mh_drct_max = sndg[ii][drIndex];
|
||||
*mh_sped_max = sndg[ii][spIndex];
|
||||
/* ----- Calculate Lapse Rate ----- */
|
||||
if ( qc ( snd[bb][tIndex] ) ) {
|
||||
dt = sndg[ii+1][tIndex] - sndg[bb][tIndex];
|
||||
dz = sndg[ii+1][zIndex] - sndg[bb][zIndex];
|
||||
} else {
|
||||
dt = sndg[ii+1][tIndex] - sndg[0][tIndex];
|
||||
dz = sndg[ii+1][zIndex] - sndg[0][zIndex];
|
||||
}
|
||||
lapse_rate = (dt / dz)*-1000;
|
||||
|
||||
return;
|
||||
}
|
||||
else if( ii > 0 ) { /* ----- Above Mixing Height ----- */
|
||||
/* ----- Calculate Previous Rate ----- */
|
||||
dt = sndg[ii][tIndex] - sndg[b_1][tIndex] ;
|
||||
dz = sndg[ii][zIndex] - sndg[b_1][zIndex];
|
||||
lapser_1 = (dt / dz)*-1000;
|
||||
}
|
||||
if(ii!=0){ //Chin
|
||||
*mh_mb = sndg[ii-1][pIndex];
|
||||
*mh_drct = sndg[ii-1][drIndex];
|
||||
*mh_sped = sndg[ii-1][spIndex];
|
||||
*mh_dC = -(sndg[ii][tIndex] - sndg[b_1][tIndex] );
|
||||
*mh_lr = lapser_1;
|
||||
*mh_drct_max = mdrct;
|
||||
*mh_sped_max = msped;
|
||||
/* ----- Test Lapse Rate ----- */
|
||||
if ( lapse_rate > thresh ) {
|
||||
first_level = False;
|
||||
|
||||
}
|
||||
/* ----- Store Maximum Wind Data ----- */
|
||||
if ( qc (sndg[ii+1][drIndex] ) ) {
|
||||
drct = sndg[ii+1][drIndex];
|
||||
sped = sndg[ii+1][spIndex];
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
if ( sped >= mxsped ) { // TL
|
||||
mxdrct = drct;
|
||||
mxsped = sped;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if( first_level ) { /* ----- Surface Test failed, Mixing Height=Surface ----- */
|
||||
*mh_pres = sndg[0][pIndex];
|
||||
*mh_drct = sndg[0][drIndex];
|
||||
*mh_sped = sndg[0][spIndex];
|
||||
*mh_dC = -(sndg[ii+1][tIndex] - sndg[0][tIndex]);
|
||||
*mh_lr = lapse_rate;
|
||||
*mh_drct_max = sndg[0][drIndex];
|
||||
*mh_sped_max = sndg[0][spIndex];
|
||||
|
||||
return;
|
||||
}
|
||||
else if( ii > 0 ) { /* ----- Above Mixing Height ----- */
|
||||
/* ----- Calculate lapse rate within mixing layer ----- */
|
||||
if ( qc ( sndg[b_1][tIndex]) ) {
|
||||
dt = sndg[ii][tIndex] - sndg[b_1][tIndex];
|
||||
dz = sndg[ii][zIndex] - sndg[b_1][zIndex];
|
||||
} else {
|
||||
dt = sndg[ii][tIndex] - sndg[0][tIndex];
|
||||
dz = sndg[ii][zIndex] - sndg[0][zIndex];
|
||||
}
|
||||
*mh_dC = -dt;
|
||||
if ( dz != 0. ) lapser_1 = (dt / dz)*-1000;
|
||||
*mh_pres = sndg[ii][pIndex];
|
||||
if ( qc (sndg[ii][drIndex] ) ) {
|
||||
*mh_drct = sndg[ii][drIndex];
|
||||
*mh_sped = sndg[ii][spIndex];
|
||||
} else {
|
||||
*mh_drct = drct;
|
||||
*mh_sped = sped;
|
||||
}
|
||||
*mh_lr = lapser_1;
|
||||
*mh_drct_max = mxdrct;
|
||||
*mh_sped_max = mxsped;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int cave_ww_type()
|
||||
/********************************************************************/
|
||||
/* Watch type guidance */
|
||||
|
@ -993,6 +1019,9 @@ int cave_ww_type()
|
|||
* 3: MRGL TOR, color 2 red
|
||||
* 4: TOR, color 2 red
|
||||
* 5: PDS TOR, color 7 Magenta
|
||||
*
|
||||
*
|
||||
* Chin: 10/2/2013 : modified according to BigNsharpV2013-06-12
|
||||
*/
|
||||
/********************************************************************/
|
||||
{
|
||||
|
@ -1077,15 +1106,16 @@ int cave_ww_type()
|
|||
/*printf("sig_tor=%f sig_tor_winter=%f srh1=%f esrh=%f sr46_spd=%f shr8=%f sblcl=%f\n mllcl=%f lr1=%f bot=%f low_mid_rh=%f rm_scp=%f\n mucn=%f dncp=%f sighail=%f cbsig=%f wind_dmg=%f",
|
||||
sig_tor,sig_tor_winter,srh1,esrh,sr46_spd,shr8, sblcl, mllcl, lr1, bot, low_mid_rh, rm_scp,mucn, dncp, sighail, cbsig, wind_dmg);
|
||||
Decision tree below is identical to the operational "ww_type" flow chart documentation 9/23/09 RLT */
|
||||
if ((sig_tor >= 3.0) && (sig_tor_winter >= 3.0) && (srh1 >= 150) && (esrh >= 150) && (sr46_spd >= 15.0) && (shr8 >= 40.0) && (sblcl < 1000) && (mllcl < 1100) && (lr1 >= 5.0) && (bot == 0.0)) {
|
||||
if ((sig_tor >= 3.0) && (sig_tor_winter >= 4.0) && (srh1 >=200) && (esrh >= 200) && (sr46_spd >= 15.0) && (shr8 >= 45.0) && (sblcl < 1000) && (mllcl < 1200) && (lr1 >= 5.0) && (mlcn > -50.0) && (bot == 0.0)) {
|
||||
// Chin V9 was::if ((sig_tor >= 3.0) && (sig_tor_winter >= 3.0) && (srh1 >= 150) && (esrh >= 150) && (sr46_spd >= 15.0) && (shr8 >= 40.0) && (sblcl < 1000) && (mllcl < 1100) && (lr1 >= 5.0) && (bot == 0.0)) {
|
||||
//*dcp = 1;
|
||||
//*wwtype = 5;
|
||||
ww_choice = 5;
|
||||
|
||||
/*outgtext( "PDS TOR", tlx + 45, tly + 60 );*/
|
||||
}
|
||||
|
||||
else if (((sig_tor >= 3.0) || (sig_tor_winter >= 4.0)) && (bot == 0.0)) {
|
||||
else if (((sig_tor >= 3.0) || (sig_tor_winter >= 4.0)) && (mlcn > -125.0) && (bot == 0.0)) {
|
||||
// Chin V9 was::else if (((sig_tor >= 3.0) || (sig_tor_winter >= 4.0)) && (bot == 0.0)) {
|
||||
//*dcp = 3;
|
||||
//*wwtype = 4;
|
||||
ww_choice = 4;
|
||||
|
@ -1093,7 +1123,8 @@ int cave_ww_type()
|
|||
/*outgtext( "TOR", tlx + 45, tly + 60 );*/
|
||||
}
|
||||
|
||||
else if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && ((sr46_spd >= 15.0) || (shr8 >= 40.0)) && (bot == 0.0)) {
|
||||
else if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && ((sr46_spd >= 15.0) || (shr8 >= 40.0)) && (mlcn > -75.0) && (bot == 0.0)) {
|
||||
// Chin V9 was::if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && ((sr46_spd >= 15.0) || (shr8 >= 40.0)) && (bot == 0.0)) {
|
||||
//*dcp = 4;
|
||||
//*wwtype = 4;
|
||||
ww_choice = 4;
|
||||
|
@ -1101,7 +1132,8 @@ int cave_ww_type()
|
|||
/*outgtext( "TOR", tlx + 45, tly + 60 );*/
|
||||
}
|
||||
|
||||
else if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (low_mid_rh >= 60) && (lr1 >= 5.0) && (bot == 0.0)) {
|
||||
else if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (low_mid_rh >= 60) && (lr1 >= 5.0) && (mlcn > -50.0) && (bot == 0.0)) {
|
||||
// Chin V9 was::if if (((sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (low_mid_rh >= 60) && (lr1 >= 5.0) && (bot == 0.0)) {
|
||||
//*dcp = 5;
|
||||
//*wwtype = 4;
|
||||
ww_choice = 4;
|
||||
|
@ -1110,7 +1142,8 @@ int cave_ww_type()
|
|||
outgtext( "TOR", tlx + 45, tly + 60 );*/
|
||||
}
|
||||
|
||||
else if ((( sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (bot == 0.0)) {
|
||||
else if ((( sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (mlcn > -150.0) && (bot == 0.0)) {
|
||||
// Chin V9 was:: if ((( sig_tor >= 1.0) || (sig_tor_winter >= 1.0)) && (bot == 0.0)) {
|
||||
//*dcp = 6;
|
||||
//*wwtype = 3;
|
||||
ww_choice = 3;
|
||||
|
@ -1119,7 +1152,8 @@ int cave_ww_type()
|
|||
outgtext( "mrgl TOR", tlx + 40, tly + 60 );*/
|
||||
}
|
||||
|
||||
else if (((( sig_tor >= 0.5) && (esrh >= 150)) || ((sig_tor_winter >= 0.5) && (srh1 >= 150))) && (bot == 0.0)) {
|
||||
else if (((( sig_tor >= 0.5) && (esrh >= 150)) || ((sig_tor_winter >= 0.5) && (srh1 >= 150))) && (mlcn > -50.0) && (bot == 0.0)) {
|
||||
// Chin V9 was:: if (((( sig_tor >= 0.5) && (esrh >= 150)) || ((sig_tor_winter >= 0.5) && (srh1 >= 150))) && (bot == 0.0)) {
|
||||
//*dcp = 7;
|
||||
//*wwtype = 3;
|
||||
ww_choice = 3;
|
||||
|
@ -1939,12 +1973,17 @@ void getSarsInfo(SarsInfoStr * sarsInfo)
|
|||
wind_shear(sndg[sfc()][pIndex], i_pres(msl(3000)), &ix1, &ix2, &ix3, &ix4); shr3k = ix4;
|
||||
|
||||
cavespnsharp(&mlcp, &mllcl, &t500, &lr75, &shr6k, &srh1, &nsndgs, &matches, &p1, sndglist, &suplist, &sup_filename, &shr3k, &shr9k, &srh3, &totalsndgs);
|
||||
/*
|
||||
for (i=0; i < 15; i++) sndglist[i][14] = '\0';
|
||||
printf( "%d High Quality SUPERCELL Matches were found.\n", nsndgs);
|
||||
for (i=0;i<nsndgs;i++) { printf( "SUPERCELL match = %s %.0f\n", sndglist[i]), suplist[i]; }
|
||||
printf( "%.0f Total matches were found.\n", matches);
|
||||
printf( "%.0f Percent were TOR.\n", p1);
|
||||
|
||||
/* Chin TBD::: bignsharpV2013Jun12
|
||||
* for (i=0; i < 15; i++) sndglist[i][14] = '\0';
|
||||
printf( "%d High Quality SUPERCELL Matches were found.\n", nsndgs);
|
||||
// modified loop and printf statement to properly display supercell match type - RLT 4/24/12
|
||||
for (i=0;i<nsndgs;i++) {
|
||||
j = suplist[i];
|
||||
printf( "SUPERCELL match = %s %s\n", sndglist[i], tortags[j]);
|
||||
}
|
||||
printf( "%.0f Total matches were found.\n", matches);
|
||||
printf( "%.0f Percent were TOR.\n", p1);
|
||||
*/
|
||||
// ----- Supercell SARS matches -----
|
||||
if (nsndgs>0)
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
subroutine cavesars(mumr, mucape, temp, lr, shr,
|
||||
+ km9, shr3, ship, srh, tier1,
|
||||
+ matches, p1, avsize, matches2,
|
||||
+ sndglist, haillist, fname, cnt)
|
||||
+ sndglist, haillist, fname, totalSnd)
|
||||
|
||||
c Jan 27, 2010, REJ.
|
||||
integer maob,saob
|
||||
|
||||
parameter (maob=15000) ! Max number of raobs allowed.
|
||||
parameter (saob=15) ! Number of raobs to return to NSHARP.
|
||||
|
||||
|
@ -21,9 +21,9 @@ c Jan 27, 2010, REJ.
|
|||
character datestn*15,dummy*25,matdatestn(maob)*15
|
||||
character sndglist(saob)*15, fname*(256), fname1*(256)
|
||||
|
||||
integer j,cnt,mrmat(maob),capemat(maob),tempmat(maob),
|
||||
& lrmat(maob),shrmat(maob),km9mat(maob),shr3mat(maob),golf,
|
||||
& sigm(maob),tier1,tier1cnt,srhmat(maob)
|
||||
integer cnt, maob,j,mrmat(maob),capemat(maob),tempmat(maob),
|
||||
&lrmat(maob),shrmat(maob),km9mat(maob),shr3mat(maob),golf,
|
||||
& sigm(maob),tier1,tier1cnt,srhmat(maob),totalSnd
|
||||
|
||||
c print *, "****************************************************"
|
||||
c print *, " Entering SARS fortran subroutine"
|
||||
|
@ -32,7 +32,7 @@ c print *, "****************************************************"
|
|||
1 format(a)
|
||||
|
||||
fname1 = fname(1:len_trim(fname))
|
||||
c print *, "Sars Opening input file: ", fname1(1:len_trim(fname1))
|
||||
c print *, "Opening input file: ", fname1(1:len_trim(fname1))
|
||||
open(unit=10,status='old',file=fname1,err=999,iostat=IERR)
|
||||
|
||||
************* Read file list.txt into array ********************
|
||||
|
@ -70,48 +70,48 @@ c Calculate difference in shear magnitude between sounding and match
|
|||
c count number of soundings
|
||||
cnt = j - 1
|
||||
c mixing ratio ranges (g/kg) - k1
|
||||
ranmr= 2.0
|
||||
ranmrt1= 2.0
|
||||
|
||||
c ranmr= 2.0
|
||||
c ranmrt1= 2.0
|
||||
c
|
||||
c determine cape ranges based on cape magnitude (j/kg) - k2
|
||||
|
||||
rancape = mucape*.30
|
||||
|
||||
if(mucape.lt.500.) then
|
||||
rancapet1= mucape*.50
|
||||
elseif(mucape.ge.500.0.and.mucape.lt.2000.) then
|
||||
rancapet1= mucape*.25
|
||||
else
|
||||
rancapet1= mucape*.20
|
||||
endif
|
||||
|
||||
c
|
||||
c rancape = mucape*.30
|
||||
c
|
||||
c if(mucape.lt.500.) then
|
||||
c rancapet1= mucape*.50
|
||||
c elseif(mucape.ge.500.0.and.mucape.lt.2000.) then
|
||||
c rancapet1= mucape*.25
|
||||
c else
|
||||
c rancapet1= mucape*.20
|
||||
c endif
|
||||
c
|
||||
c 700-500 mb lapse rate ranges (c/km)- k3
|
||||
ranlr= 2.0
|
||||
ranlrt1= 0.4
|
||||
|
||||
c ranlr= 2.0
|
||||
c ranlrt1= 0.4
|
||||
c
|
||||
c 500 mb temperature ranges (c) - k4
|
||||
rantemp= 9
|
||||
rantempt1= 1.5
|
||||
|
||||
c rantemp= 9
|
||||
c rantempt1= 1.5
|
||||
c
|
||||
c 0-6 km shear ranges (m/s) - k6
|
||||
ranshr= 12
|
||||
ranshrt1= 6
|
||||
|
||||
c ranshr= 12
|
||||
c ranshrt1= 6
|
||||
c
|
||||
c 0-9 shear ranges - k7
|
||||
rankm9= 22
|
||||
rankm9t1= 15
|
||||
|
||||
c rankm9= 22
|
||||
c rankm9t1= 15
|
||||
c
|
||||
c 0-3 km shear ranges (m/s) - k8
|
||||
ranshr3= 10
|
||||
ranshr3t1= 8
|
||||
|
||||
c ranshr3= 10
|
||||
c ranshr3t1= 8
|
||||
c
|
||||
c SRH shear ranges (m/s) - k9
|
||||
c ransrh = 100
|
||||
if(srh.lt.50) then
|
||||
ransrht1 = 25
|
||||
else
|
||||
ransrht1= srh*0.5
|
||||
endif
|
||||
c if(srh.lt.50) then
|
||||
c ransrht1 = 25
|
||||
c else
|
||||
c ransrht1= srh*0.5
|
||||
c endif
|
||||
*************************************************************
|
||||
c using passed sounding, check against all soundings j .
|
||||
|
||||
|
@ -124,9 +124,53 @@ c using passed sounding, check against all soundings j .
|
|||
golf = 0
|
||||
tier1 = 0
|
||||
jh = 0
|
||||
|
||||
totalSnd = cnt
|
||||
DO 99 j=1,cnt
|
||||
|
||||
c mixing ratio ranges (g/kg) - k1
|
||||
ranmr= 2.0
|
||||
ranmrt1= 2.0
|
||||
|
||||
c determine cape ranges based on cape magnitude (j/kg) - k2
|
||||
|
||||
rancape = mucape*.30
|
||||
|
||||
if(mucape.lt.500.) then
|
||||
rancapet1= mucape*.50
|
||||
elseif(mucape.ge.500.0.and.mucape.lt.2000.) then
|
||||
rancapet1= mucape*.25
|
||||
else
|
||||
rancapet1= mucape*.20
|
||||
endif
|
||||
|
||||
c 700-500 mb lapse rate ranges (c/km)- k3
|
||||
ranlr= 2.0
|
||||
ranlrt1= 0.4
|
||||
|
||||
c 500 mb temperature ranges (c) - k4
|
||||
rantemp= 9
|
||||
rantempt1= 1.5
|
||||
|
||||
c 0-6 km shear ranges (m/s) - k6
|
||||
ranshr= 12
|
||||
ranshrt1= 6
|
||||
|
||||
c 0-9 shear ranges - k7
|
||||
rankm9= 22
|
||||
rankm9t1= 15
|
||||
|
||||
c 0-3 km shear ranges (m/s) - k8
|
||||
ranshr3= 10
|
||||
ranshr3t1= 8
|
||||
|
||||
c SRH shear ranges (m/s) - k9
|
||||
c ransrh = 100
|
||||
if(srh.lt.50) then
|
||||
ransrht1 = 25
|
||||
else
|
||||
ransrht1= srh*0.5
|
||||
endif
|
||||
|
||||
|
||||
mrmat(j) = 0
|
||||
capemat(j) = 0
|
||||
|
@ -293,8 +337,8 @@ c endif
|
|||
|
||||
c matches = sigcnt + nulcnt
|
||||
|
||||
c print *, 'SARS Searching',cnt,' soundings, found',matches
|
||||
|
||||
C print *, 'SARS Searching',cnt,' soundings, found',matches
|
||||
|
||||
if(matches2.gt.0) then
|
||||
c Calculate average hail size from matches...
|
||||
avsize = avsize/matches2
|
||||
|
|
|
@ -2,11 +2,11 @@ c program sup_nsharp
|
|||
|
||||
subroutine cavespnsharp(mlcape, mllcl, temp, lr, shr,
|
||||
+ srh, tier1, matches, p1, sndglist, supl2,
|
||||
+ fname,shr3k,shr9k,srh3, cnt)
|
||||
+ fname,shr3k,shr9k,srh3, totalSnd)
|
||||
|
||||
|
||||
c SARS For Supercells
|
||||
integer saob,maob
|
||||
|
||||
parameter (maob=15000) ! Max number of raobs allowed.
|
||||
parameter (saob=15) ! Number of raobs to return to NSHARP.
|
||||
|
||||
|
@ -26,10 +26,10 @@ c SARS For Supercells
|
|||
character sndglist(saob)*15, fname*(256), fname1*(256)
|
||||
character tortype(maob)*8,suplist(saob)*8
|
||||
|
||||
integer i,j,cnt,mlmrmat(maob),mlcapemat(maob),
|
||||
integer totalSnd, cnt, maob,i,j,mlmrmat(maob),mlcapemat(maob),
|
||||
& mlcinmat(maob),mllclmat(maob),mucapemat(maob),sblclmat(maob),
|
||||
& shrmat(maob),srhmat(maob),tempmat(maob),lrmat(maob),stpmat(maob),
|
||||
& h500umat(maob),h500vmat(maob),shrcat(maob),matshrcat(maob),tier1,
|
||||
&shrmat(maob),srhmat(maob),tempmat(maob),lrmat(maob),stpmat(maob),
|
||||
&h500umat(maob),h500vmat(maob),shrcat(maob),matshrcat(maob),tier1,
|
||||
& tier1cnt,matcat(maob),srh3mat(maob)
|
||||
|
||||
c print *, "****************************************************"
|
||||
|
@ -39,7 +39,7 @@ c print *, "****************************************************"
|
|||
|
||||
1 format(a)
|
||||
fname1 = fname(1:len_trim(fname))
|
||||
c print *, "SUP Opening input file: ", fname1(1:len_trim(fname1))
|
||||
c print *, "Opening input file: ", fname1(1:len_trim(fname1))
|
||||
open(unit=10,status='old',file=fname1,err=999,iostat=IERR)
|
||||
|
||||
|
||||
|
@ -73,7 +73,6 @@ c matsrh(j) = abs(matsrh(j))
|
|||
c count number of soundings
|
||||
cnt = j - 1
|
||||
|
||||
|
||||
c mlcape ranges - k2
|
||||
ranmlcape= 1300
|
||||
ranmlcapet1 = mlcape*0.25
|
||||
|
@ -139,7 +138,7 @@ c using sounding i , check against all soundings j .
|
|||
noncnt = 0
|
||||
p1=0
|
||||
p2=0
|
||||
|
||||
totalSnd = cnt
|
||||
DO 99 j=1,cnt
|
||||
|
||||
mlcapemat(j) = 0
|
||||
|
@ -248,8 +247,8 @@ c endif
|
|||
|
||||
matches = torcnt + noncnt
|
||||
|
||||
c print *, 'SARS Supercell Searching',cnt,' soundings, found',matches
|
||||
|
||||
c print *, 'SARS Searching',cnt,' soundings, found',matches
|
||||
|
||||
if(matches.ne.0) then
|
||||
p1 = torcnt/matches*100
|
||||
p2 = noncnt/matches*100
|
||||
|
@ -280,6 +279,6 @@ c write(*,*) ''
|
|||
999 matches = 0
|
||||
p1 = 0
|
||||
tier1 = 0
|
||||
print *, "ERROR - SUPERCELL input file not found. Aborting..."
|
||||
print *, "ERROR - SARS input file not found. Aborting..."
|
||||
end
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue