Merge branch 'ncep_14.2.1' of ssh://collaborate3.nws.noaa.gov:29418/AWIPS2_Dev_Baseline into master_14.2.1

Former-commit-id: 8d4a1e1204 [formerly 24785068be] [formerly d710aec521] [formerly 8d4a1e1204 [formerly 24785068be] [formerly d710aec521] [formerly fda6ab1344 [formerly d710aec521 [formerly ac54324fb0eff1483dd2c3aa8d94273760451dab]]]]
Former-commit-id: fda6ab1344
Former-commit-id: d197a72c20 [formerly c5502af3fa] [formerly 6ec1b00cf64c71cead90fca582edef188ec24710 [formerly 0aff5875b0]]
Former-commit-id: 28dc637ae8563b78153684cbfa60e954caea69c9 [formerly dcade6e18a]
Former-commit-id: 26e19974d1
This commit is contained in:
Brian.Dyke 2014-03-10 15:14:59 -04:00
commit 0a1ef77d16
13 changed files with 3981 additions and 3921 deletions

View file

@ -477,8 +477,8 @@ float cave_ship(){
t500 = i_temp(500, I_PRES); t500 = i_temp(500, I_PRES);
lr75 = lapse_rate(&ix1, 700, 500); lr75 = lapse_rate(&ix1, 700, 500);
fzlh = 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))); 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); ship = sig_hail(mucape, mumixr, lr75, t500, kt_to_mps(shr6), fzlh, mucinh, 0, 0, 25, mlcape);
/* ----- Set Parcel Back ----- */ /* ----- Set Parcel Back ----- */
if (oldlplchoice == 1) if (oldlplchoice == 1)
@ -861,122 +861,148 @@ void low_inv ( float *inv_mb, float *inv_dC )
} }
} }
} }
void mix_height ( float *mh_pres, float *mh_drct, float *mh_sped,
void mix_height ( float *mh_mb, float *mh_drct, float *mh_sped, float *mh_dC, float *mh_lr, float *mh_drct_max,
float *mh_dC, float *mh_lr, float *mh_drct_max, float *mh_sped_max, short flag )
float *mh_sped_max, short flag ) /****************************************************************************
/************************************************************************ * mix_height *
* OPC MODIFICATION - J. Morgan 5/3/05 * * *
* MIX_HEIGHT - New function * * This function modifies original mix_height funtion which *
* * * computes hydro meteorological parameters within empirical mix *
* MIX_HEIGHT * * boundary layer. *
* J. Morgan OPC * * *
* * * Calculates the mixing height. *
* Calculates the mixing height. * * *
* flag = 0 Surface-based lapse rate * * mh_pres - Pressure at mixing height (mb) *
* flag = 1 Layer-based lapse rate * * mh_drct - Wind direction at mixing height (deg) *
* * * mh_sped - Wind speed at mixing height (kts) *
* mh_mb - Pressure at mixing height (mb) * * mh_dC - Layer change in temperature (C) *
* mh_drct - Wind direction at mixing height (deg) * * mh_lr - Layer lapse rate (C/km) *
* mh_sped - Wind speed at mixing height (kt) * * mh_drct_max - Layer maximum wind direction (deg) *
* mh_dC - Layer change in temperature (C) * * mh_sped_max - Layer maximum wind speed (kts) *
* mh_lr - Layer lapse rate (C/km) * * flag - 0: Surface-based lapse rate *
* mh_drct_max - Layer maximum wind direction (deg) * * 1: Layer-based lapse rate *
* mh_sped_max - Layer maximum wind speed (kt) * * *
* * * Chin:: not in BigNsharp, therefore ported to here. 6/8/2011 * *
* Called by xwvid1.c: draw_skewt() * * J. Morgan 5/2005 Created *
* Called by xwvid3.c: show_mixheight() * * T. Lee 2/2014 Cleanup and fixed surface based and layer based *
* * parameters always have same values *
* Chin:: not in BigNsharp, therefore ported to here. 6/8/2011 ****************************************************************************/
***********************************************************************/
{ {
short ii, bb, b_1; short ii, bb, b_1;
float thresh, lapser, lapser_1, mdrct, msped, drct, sped; float thresh, lapse_rate, lapser_1, mxdrct, mxsped, drct, sped;
float dt, dz; float dt, dz;
short pIndex, zIndex, tIndex, drIndex, spIndex; short pIndex, zIndex, tIndex, drIndex, spIndex;
pIndex = getParmIndex("PRES"); Boolean first_level = True;
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;
*mh_mb = -9999; pIndex = getParmIndex("PRES");
*mh_drct = -9999; zIndex = getParmIndex("HGHT");
*mh_sped = -9999; tIndex = getParmIndex("TEMP");
*mh_dC = -9999; spIndex = getParmIndex("SPED");
*mh_lr = -9999; drIndex = getParmIndex("DRCT");
*mh_drct_max = -9999; if (!sndg || pIndex == -1 || zIndex == -1 || tIndex == -1 || drIndex == -1 || spIndex == -1) return;
*mh_sped_max = -9999;
thresh = 8.3; *mh_pres = -9999;
lapser_1 = 0.0; *mh_drct = -9999;
mdrct = 0.0; *mh_sped = -9999;
msped = 0.0; *mh_dC = -9999;
drct = 0.0; *mh_lr = -9999;
sped = 0.0; *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] )) { for ( ii = 0; ii < numlvl-1; ii++ ) {//Chin
/* ----- Set Method Values ----- */
if( flag == 0 ) {
bb = 0;
b_1 = 0;
}
else {
bb = ii;
b_1 = ii-1;
}
/* ----- Calculate Lapse Rate ----- */ if ( qc( sndg[ii+1][tIndex] ) ) { //TL
dt = sndg[ii+1][tIndex] - sndg[bb][tIndex] ; /* ----- Set Method Values ----- */
dz = sndg[ii+1][zIndex] - sndg[bb][zIndex]; if( flag == 0 ) {
lapser = (dt / dz)*-1000; bb = 0;
b_1 = 0;
}
else {
bb = ii;
b_1 = ii-1;
}
/* ----- Test Lapse Rate ----- */ if ( first_level ) {
if ( lapser > thresh ) { mxdrct = sndg[0][drIndex];
mxsped = sndg[0][spIndex];
*mh_drct = sndg[0][drIndex];
*mh_sped = sndg[0][spIndex];
}
/* ----- Store Maximum Wind Data ----- */ /* ----- Calculate Lapse Rate ----- */
drct = sndg[ii][drIndex]; if ( qc ( snd[bb][tIndex] ) ) {
sped = sndg[ii][spIndex]; dt = sndg[ii+1][tIndex] - sndg[bb][tIndex];
if ( drct > mdrct ) { dz = sndg[ii+1][zIndex] - sndg[bb][zIndex];
mdrct = drct; } else {
msped = sped; dt = sndg[ii+1][tIndex] - sndg[0][tIndex];
} dz = sndg[ii+1][zIndex] - sndg[0][zIndex];
} }
else if( ii == 0 ) { /* ----- Surface Test failed, Mixing Height=Surface ----- */ lapse_rate = (dt / dz)*-1000;
*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];
return; /* ----- Test Lapse Rate ----- */
} if ( lapse_rate > thresh ) {
else if( ii > 0 ) { /* ----- Above Mixing Height ----- */ first_level = False;
/* ----- 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;
} /* ----- 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() int cave_ww_type()
/********************************************************************/ /********************************************************************/
/* Watch type guidance */ /* Watch type guidance */
@ -993,6 +1019,9 @@ int cave_ww_type()
* 3: MRGL TOR, color 2 red * 3: MRGL TOR, color 2 red
* 4: TOR, color 2 red * 4: TOR, color 2 red
* 5: PDS TOR, color 7 Magenta * 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", /*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); 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 */ 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; //*dcp = 1;
//*wwtype = 5; //*wwtype = 5;
ww_choice = 5; ww_choice = 5;
/*outgtext( "PDS TOR", tlx + 45, tly + 60 );*/ /*outgtext( "PDS TOR", tlx + 45, tly + 60 );*/
} }
else if (((sig_tor >= 3.0) || (sig_tor_winter >= 4.0)) && (mlcn > -125.0) && (bot == 0.0)) {
else if (((sig_tor >= 3.0) || (sig_tor_winter >= 4.0)) && (bot == 0.0)) { // Chin V9 was::else if (((sig_tor >= 3.0) || (sig_tor_winter >= 4.0)) && (bot == 0.0)) {
//*dcp = 3; //*dcp = 3;
//*wwtype = 4; //*wwtype = 4;
ww_choice = 4; ww_choice = 4;
@ -1093,7 +1123,8 @@ int cave_ww_type()
/*outgtext( "TOR", tlx + 45, tly + 60 );*/ /*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; //*dcp = 4;
//*wwtype = 4; //*wwtype = 4;
ww_choice = 4; ww_choice = 4;
@ -1101,7 +1132,8 @@ int cave_ww_type()
/*outgtext( "TOR", tlx + 45, tly + 60 );*/ /*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; //*dcp = 5;
//*wwtype = 4; //*wwtype = 4;
ww_choice = 4; ww_choice = 4;
@ -1110,7 +1142,8 @@ int cave_ww_type()
outgtext( "TOR", tlx + 45, tly + 60 );*/ 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; //*dcp = 6;
//*wwtype = 3; //*wwtype = 3;
ww_choice = 3; ww_choice = 3;
@ -1119,7 +1152,8 @@ int cave_ww_type()
outgtext( "mrgl TOR", tlx + 40, tly + 60 );*/ 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; //*dcp = 7;
//*wwtype = 3; //*wwtype = 3;
ww_choice = 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; 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); 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'; /* Chin TBD::: bignsharpV2013Jun12
printf( "%d High Quality SUPERCELL Matches were found.\n", nsndgs); * for (i=0; i < 15; i++) sndglist[i][14] = '\0';
for (i=0;i<nsndgs;i++) { printf( "SUPERCELL match = %s %.0f\n", sndglist[i]), suplist[i]; } printf( "%d High Quality SUPERCELL Matches were found.\n", nsndgs);
printf( "%.0f Total matches were found.\n", matches); // modified loop and printf statement to properly display supercell match type - RLT 4/24/12
printf( "%.0f Percent were TOR.\n", p1); 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 ----- // ----- Supercell SARS matches -----
if (nsndgs>0) if (nsndgs>0)

View file

@ -1,10 +1,10 @@
subroutine cavesars(mumr, mucape, temp, lr, shr, subroutine cavesars(mumr, mucape, temp, lr, shr,
+ km9, shr3, ship, srh, tier1, + km9, shr3, ship, srh, tier1,
+ matches, p1, avsize, matches2, + matches, p1, avsize, matches2,
+ sndglist, haillist, fname, cnt) + sndglist, haillist, fname, totalSnd)
c Jan 27, 2010, REJ. c Jan 27, 2010, REJ.
integer maob,saob
parameter (maob=15000) ! Max number of raobs allowed. parameter (maob=15000) ! Max number of raobs allowed.
parameter (saob=15) ! Number of raobs to return to NSHARP. 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 datestn*15,dummy*25,matdatestn(maob)*15
character sndglist(saob)*15, fname*(256), fname1*(256) character sndglist(saob)*15, fname*(256), fname1*(256)
integer j,cnt,mrmat(maob),capemat(maob),tempmat(maob), integer cnt, maob,j,mrmat(maob),capemat(maob),tempmat(maob),
& lrmat(maob),shrmat(maob),km9mat(maob),shr3mat(maob),golf, &lrmat(maob),shrmat(maob),km9mat(maob),shr3mat(maob),golf,
& sigm(maob),tier1,tier1cnt,srhmat(maob) & sigm(maob),tier1,tier1cnt,srhmat(maob),totalSnd
c print *, "****************************************************" c print *, "****************************************************"
c print *, " Entering SARS fortran subroutine" c print *, " Entering SARS fortran subroutine"
@ -32,7 +32,7 @@ c print *, "****************************************************"
1 format(a) 1 format(a)
fname1 = fname(1:len_trim(fname)) 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) open(unit=10,status='old',file=fname1,err=999,iostat=IERR)
************* Read file list.txt into array ******************** ************* 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 c count number of soundings
cnt = j - 1 cnt = j - 1
c mixing ratio ranges (g/kg) - k1 c mixing ratio ranges (g/kg) - k1
ranmr= 2.0 c ranmr= 2.0
ranmrt1= 2.0 c ranmrt1= 2.0
c
c determine cape ranges based on cape magnitude (j/kg) - k2 c determine cape ranges based on cape magnitude (j/kg) - k2
c
rancape = mucape*.30 c rancape = mucape*.30
c
if(mucape.lt.500.) then c if(mucape.lt.500.) then
rancapet1= mucape*.50 c rancapet1= mucape*.50
elseif(mucape.ge.500.0.and.mucape.lt.2000.) then c elseif(mucape.ge.500.0.and.mucape.lt.2000.) then
rancapet1= mucape*.25 c rancapet1= mucape*.25
else c else
rancapet1= mucape*.20 c rancapet1= mucape*.20
endif c endif
c
c 700-500 mb lapse rate ranges (c/km)- k3 c 700-500 mb lapse rate ranges (c/km)- k3
ranlr= 2.0 c ranlr= 2.0
ranlrt1= 0.4 c ranlrt1= 0.4
c
c 500 mb temperature ranges (c) - k4 c 500 mb temperature ranges (c) - k4
rantemp= 9 c rantemp= 9
rantempt1= 1.5 c rantempt1= 1.5
c
c 0-6 km shear ranges (m/s) - k6 c 0-6 km shear ranges (m/s) - k6
ranshr= 12 c ranshr= 12
ranshrt1= 6 c ranshrt1= 6
c
c 0-9 shear ranges - k7 c 0-9 shear ranges - k7
rankm9= 22 c rankm9= 22
rankm9t1= 15 c rankm9t1= 15
c
c 0-3 km shear ranges (m/s) - k8 c 0-3 km shear ranges (m/s) - k8
ranshr3= 10 c ranshr3= 10
ranshr3t1= 8 c ranshr3t1= 8
c
c SRH shear ranges (m/s) - k9 c SRH shear ranges (m/s) - k9
c ransrh = 100 c ransrh = 100
if(srh.lt.50) then c if(srh.lt.50) then
ransrht1 = 25 c ransrht1 = 25
else c else
ransrht1= srh*0.5 c ransrht1= srh*0.5
endif c endif
************************************************************* *************************************************************
c using passed sounding, check against all soundings j . c using passed sounding, check against all soundings j .
@ -124,9 +124,53 @@ c using passed sounding, check against all soundings j .
golf = 0 golf = 0
tier1 = 0 tier1 = 0
jh = 0 jh = 0
totalSnd = cnt
DO 99 j=1,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 mrmat(j) = 0
capemat(j) = 0 capemat(j) = 0
@ -293,8 +337,8 @@ c endif
c matches = sigcnt + nulcnt 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 if(matches2.gt.0) then
c Calculate average hail size from matches... c Calculate average hail size from matches...
avsize = avsize/matches2 avsize = avsize/matches2

View file

@ -2,11 +2,11 @@ c program sup_nsharp
subroutine cavespnsharp(mlcape, mllcl, temp, lr, shr, subroutine cavespnsharp(mlcape, mllcl, temp, lr, shr,
+ srh, tier1, matches, p1, sndglist, supl2, + srh, tier1, matches, p1, sndglist, supl2,
+ fname,shr3k,shr9k,srh3, cnt) + fname,shr3k,shr9k,srh3, totalSnd)
c SARS For Supercells c SARS For Supercells
integer saob,maob
parameter (maob=15000) ! Max number of raobs allowed. parameter (maob=15000) ! Max number of raobs allowed.
parameter (saob=15) ! Number of raobs to return to NSHARP. 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 sndglist(saob)*15, fname*(256), fname1*(256)
character tortype(maob)*8,suplist(saob)*8 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), & mlcinmat(maob),mllclmat(maob),mucapemat(maob),sblclmat(maob),
& shrmat(maob),srhmat(maob),tempmat(maob),lrmat(maob),stpmat(maob), &shrmat(maob),srhmat(maob),tempmat(maob),lrmat(maob),stpmat(maob),
& h500umat(maob),h500vmat(maob),shrcat(maob),matshrcat(maob),tier1, &h500umat(maob),h500vmat(maob),shrcat(maob),matshrcat(maob),tier1,
& tier1cnt,matcat(maob),srh3mat(maob) & tier1cnt,matcat(maob),srh3mat(maob)
c print *, "****************************************************" c print *, "****************************************************"
@ -39,7 +39,7 @@ c print *, "****************************************************"
1 format(a) 1 format(a)
fname1 = fname(1:len_trim(fname)) 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) 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 c count number of soundings
cnt = j - 1 cnt = j - 1
c mlcape ranges - k2 c mlcape ranges - k2
ranmlcape= 1300 ranmlcape= 1300
ranmlcapet1 = mlcape*0.25 ranmlcapet1 = mlcape*0.25
@ -139,7 +138,7 @@ c using sounding i , check against all soundings j .
noncnt = 0 noncnt = 0
p1=0 p1=0
p2=0 p2=0
totalSnd = cnt
DO 99 j=1,cnt DO 99 j=1,cnt
mlcapemat(j) = 0 mlcapemat(j) = 0
@ -248,8 +247,8 @@ c endif
matches = torcnt + noncnt 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 if(matches.ne.0) then
p1 = torcnt/matches*100 p1 = torcnt/matches*100
p2 = noncnt/matches*100 p2 = noncnt/matches*100
@ -280,6 +279,6 @@ c write(*,*) ''
999 matches = 0 999 matches = 0
p1 = 0 p1 = 0
tier1 = 0 tier1 = 0
print *, "ERROR - SUPERCELL input file not found. Aborting..." print *, "ERROR - SARS input file not found. Aborting..."
end end

View file

@ -20,7 +20,10 @@
package gov.noaa.nws.ncep.ui.nsharp.display; package gov.noaa.nws.ncep.ui.nsharp.display;
import org.eclipse.swt.SWT;
import gov.noaa.nws.ncep.ui.nsharp.display.map.NsharpMapResource; import gov.noaa.nws.ncep.ui.nsharp.display.map.NsharpMapResource;
import gov.noaa.nws.ncep.ui.nsharp.display.rsc.NsharpSkewTPaneResource;
import gov.noaa.nws.ncep.ui.nsharp.display.rsc.NsharpTimeStnPaneResource; import gov.noaa.nws.ncep.ui.nsharp.display.rsc.NsharpTimeStnPaneResource;
import gov.noaa.nws.ncep.ui.nsharp.view.NsharpShowTextDialog; import gov.noaa.nws.ncep.ui.nsharp.view.NsharpShowTextDialog;
@ -76,7 +79,7 @@ public class NsharpTimeStnPaneMouseHandler extends NsharpAbstractMouseHandler{
Coordinate c = editor.translateClick(x, y); Coordinate c = editor.translateClick(x, y);
if(timeStnRsc.getTimeLineRectangle().contains((int) c.x, (int) c.y) == true && this.mode == Mode.TIMELINE_DOWN) { if(timeStnRsc.getTimeLineRectangle().contains((int) c.x, (int) c.y) == true && this.mode == Mode.TIMELINE_DOWN) {
//data time line has been touched, and may be changed //data time line has been touched, and may be changed
timeStnRsc.getRscHandler().handleUserClickOnTimeLine(c); timeStnRsc.getRscHandler().handleUserClickOnTimeLine(c,shiftDown);// FixMark:clickOnTimeStnPane
handleMouseMove(x,y); handleMouseMove(x,y);
NsharpShowTextDialog textarea = NsharpShowTextDialog.getAccess(); NsharpShowTextDialog textarea = NsharpShowTextDialog.getAccess();
@ -87,12 +90,12 @@ public class NsharpTimeStnPaneMouseHandler extends NsharpAbstractMouseHandler{
} }
else if(timeStnRsc.getStnIdRectangle().contains((int) c.x, (int) c.y) == true && this.mode == Mode.STATIONID_DOWN) { else if(timeStnRsc.getStnIdRectangle().contains((int) c.x, (int) c.y) == true && this.mode == Mode.STATIONID_DOWN) {
//stn id line has been touched, and may be changed //stn id line has been touched, and may be changed
timeStnRsc.getRscHandler().handleUserClickOnStationId(c); timeStnRsc.getRscHandler().handleUserClickOnStationId(c,shiftDown);// FixMark:clickOnTimeStnPane
handleMouseMove(x,y); handleMouseMove(x,y);
} }
else if(timeStnRsc.getSndRectangle().contains((int) c.x, (int) c.y) == true && this.mode == Mode.SNDTYPE_DOWN) { else if(timeStnRsc.getSndRectangle().contains((int) c.x, (int) c.y) == true && this.mode == Mode.SNDTYPE_DOWN) {
//stn id line has been touched, and may be changed //stn id line has been touched, and may be changed
timeStnRsc.getRscHandler().handleUserClickOnSndLine(c); timeStnRsc.getRscHandler().handleUserClickOnSndLine(c,shiftDown);// FixMark:clickOnTimeStnPane
handleMouseMove(x,y); handleMouseMove(x,y);
} }
@ -106,6 +109,31 @@ public class NsharpTimeStnPaneMouseHandler extends NsharpAbstractMouseHandler{
} }
return false; return false;
} }
// FixMark:clickOnTimeStnPane
@Override
public boolean handleKeyDown(int keyCode) {
//System.out.println("key down="+(char)keyCode+ " code ="+keyCode);
if ((keyCode & SWT.SHIFT) != 0) {
shiftDown = true;
return true;
}
return false;
}
@Override
public boolean handleKeyUp(int keyCode) {
//String s = "key up="+(char)keyCode;
//System.out.println(s+ " code ="+keyCode);
if (getPaneDisplay() == null) {
return false;
}
if (keyCode == SWT.SHIFT) {
shiftDown = false;
return true;
}
return false;
}
//End FixMark:clickOnTimeStnPane
} }

View file

@ -11,6 +11,7 @@ package gov.noaa.nws.ncep.ui.nsharp.display.rsc;
* ------- ------- -------- ----------- * ------- ------- -------- -----------
* 04/23/2012 229 Chin Chen Initial coding * 04/23/2012 229 Chin Chen Initial coding
* May 08, 2013 1847 bsteffen Allow painting with no Wind Data. * May 08, 2013 1847 bsteffen Allow painting with no Wind Data.
* 02/03/2014 1106 Chin Chen Need to be able to use clicking on the Src,Time, or StnId to select display
* *
* </pre> * </pre>
* *
@ -175,7 +176,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
this.cursorTopWindBarb = cursorTopWindBarb; this.cursorTopWindBarb = cursorTopWindBarb;
} }
public boolean isJustMoveToSidePane() { public boolean isJustMoveToSidePane() {
return justMoveToSidePane; return justMoveToSidePane;
} }
@ -797,7 +798,7 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
WGraphics world, RGB iicolor, List<NcSoundingLayer> sndLys, double xPosition, double botPress)throws VizException { WGraphics world, RGB iicolor, List<NcSoundingLayer> sndLys, double xPosition, double botPress)throws VizException {
if(sndLys.size()< 4) if(sndLys.size()< 4)
return; return;
//ArrayList<List<LineStroke>> windList = new ArrayList<List<LineStroke>>(); //ArrayList<List<LineStroke>> windList = new ArrayList<List<LineStroke>>();
List<windPickedElement> layerStateList = new ArrayList<windPickedElement>(); List<windPickedElement> layerStateList = new ArrayList<windPickedElement>();
float lastHeight = -9999; float lastHeight = -9999;
RGB icolor = iicolor;//graphConfigProperty.getWindBarbColor(); RGB icolor = iicolor;//graphConfigProperty.getWindBarbColor();
@ -897,10 +898,10 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
//Chin::if we want pgen to draw un-picked wind as a circle, then set this. //Chin::if we want pgen to draw un-picked wind as a circle, then set this.
spd=0.1f; spd=0.1f;
curWbSize = 1; curWbSize = 1;
} }
else else
continue; continue;
} }
/* TBDWB /* TBDWB
else if(windBarbMagnify==true && cursorTopWindBarb == true && currentWindBarbSoundingLayerIndex == this.soundingLys.indexOf(layer)){ else if(windBarbMagnify==true && cursorTopWindBarb == true && currentWindBarbSoundingLayerIndex == this.soundingLys.indexOf(layer)){
curWbSize = wbSize*2; curWbSize = wbSize*2;
@ -1417,9 +1418,12 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
protected void paintInternal(IGraphicsTarget target, protected void paintInternal(IGraphicsTarget target,
PaintProperties paintProps) throws VizException { PaintProperties paintProps) throws VizException {
this.paintProps = paintProps; this.paintProps = paintProps;
if(soundingLys==null)
return;
super.paintInternal(target, paintProps); super.paintInternal(target, paintProps);
if(soundingLys==null){
drawNoDataMessage(target);// FixMark:clickOnTimeStnPane
return;
}
//System.out.println("skew paintInternal zoomL="+currentZoomLevel); //System.out.println("skew paintInternal zoomL="+currentZoomLevel);
if(rscHandler== null) if(rscHandler== null)
return; return;
@ -2071,6 +2075,27 @@ public class NsharpSkewTPaneResource extends NsharpAbstractPaneResource{
dacpeTraceRscShape.compile(); dacpeTraceRscShape.compile();
} }
//start FixMark:clickOnTimeStnPane
private void drawNoDataMessage(IGraphicsTarget target){
IExtent ext = descriptor.getRenderableDisplay().getExtent();
double xmin = ext.getMinX(); //Extent's viewable envelope min x and y
double xmax = ext.getMaxX();
double xDefault = world.mapX(NsharpConstants.left);
if(xmin <xDefault)
xmin = xDefault;
double x = xmin + 15 * currentZoomLevel * xRatio;
x= (xmax-xmin)/4;
double y = world.mapY(NsharpWxMath.getSkewTXY(300, 0).y);
try {
target.drawString(font12,"Data is not loaded at selected current time line/station/source", x,y, 0.0, TextStyle.BOXED,
NsharpConstants.color_red, HorizontalAlignment.LEFT,
VerticalAlignment.MIDDLE, null);
} catch (VizException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// end FixMark:clickOnTimeStnPane
// Chin: to handle dynamically moving height mark within viewable zone when zooming, I could not use wireframeShape successfully // Chin: to handle dynamically moving height mark within viewable zone when zooming, I could not use wireframeShape successfully
// It will chop off lower part of marks. Therefore use this draw function. // It will chop off lower part of marks. Therefore use this draw function.
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")

View file

@ -236,7 +236,7 @@ public class ColorMapUtil {
Map<LocalizationLevel, LocalizationFile> files = PathManagerFactory Map<LocalizationLevel, LocalizationFile> files = PathManagerFactory
.getPathManager().getTieredLocalizationFile( .getPathManager().getTieredLocalizationFile(
LocalizationType.COMMON_STATIC, LocalizationType.CAVE_STATIC,
NcPathConstants.LOCKED_CMAP_TBL); NcPathConstants.LOCKED_CMAP_TBL);
File locCmapFile = null; File locCmapFile = null;

View file

@ -7,6 +7,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import java.io.File; import java.io.File;
import javax.xml.bind.JAXBException;
import com.raytheon.uf.common.localization.FileUpdatedMessage; import com.raytheon.uf.common.localization.FileUpdatedMessage;
import com.raytheon.uf.common.localization.ILocalizationAdapter; import com.raytheon.uf.common.localization.ILocalizationAdapter;
@ -56,6 +57,7 @@ import gov.noaa.nws.ncep.viz.resources.AbstractNatlCntrsRequestableResourceData;
* 07/22/12 #568 Greg Hull return Rbds and rbdNames sorted by seq num. * 07/22/12 #568 Greg Hull return Rbds and rbdNames sorted by seq num.
* 02/10/13 #972 Greg Hull changed to work with AbstractRbds * 02/10/13 #972 Greg Hull changed to work with AbstractRbds
* 05/19/13 #1001 Greg Hull getRbdsFromSpf(), trap RBD errors * 05/19/13 #1001 Greg Hull getRbdsFromSpf(), trap RBD errors
* 03/06/14 ? B. Yin Replaced SerializationUtil with JAXBManager.
* *
* </pre> * </pre>
* *
@ -451,7 +453,7 @@ public class SpfsManager implements ILocalizationFileObserver {
// group and spf // group and spf
// //
try { try {
SerializationUtil.jaxbMarshalToXmlFile( rbd, rbdFile.getAbsolutePath() ); AbstractRBD.getJaxbManager().marshalToXmlFile( rbd, rbdFile.getAbsolutePath() );
rbd.setLocalizationFile( lFile ); rbd.setLocalizationFile( lFile );
@ -463,6 +465,8 @@ public class SpfsManager implements ILocalizationFileObserver {
} catch (LocalizationOpFailedException e) { } catch (LocalizationOpFailedException e) {
throw new VizException(e); throw new VizException(e);
} catch (JAXBException e) {
throw new VizException(e);
} catch (SerializationException e) { } catch (SerializationException e) {
throw new VizException(e); throw new VizException(e);
} finally { } finally {

View file

@ -71,6 +71,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* Date Ticket# Engineer Description * Date Ticket# Engineer Description
* ------------ ---------- ----------- -------------------------- * ------------ ---------- ----------- --------------------------
* 05/20/2013 988 Archana.S Initial creation. * 05/20/2013 988 Archana.S Initial creation.
* 02/26/2014 1061 B. Hebbard Relax tolerance for extent/zoom compare to avoid infinite loop.
*/ */
public class NcPlotImageCreator { public class NcPlotImageCreator {
@ -219,9 +220,11 @@ public class NcPlotImageCreator {
private RGB defaultColor; private RGB defaultColor;
private static double TOLERANCE = 0.000000000000000000000001; private static double TOLERANCE = 1E-04; // 1E-24; //
// 0.000000000000000000000001;
private static double ZOOM_TOLERANCE = 0.0000000000000000000001; private static double ZOOM_TOLERANCE = 1E-04; // 1E-22; //
// 0.0000000000000000000001;
private static Amount WIND_SPD_3KNOTS = new Amount(3, NonSI.KNOT); private static Amount WIND_SPD_3KNOTS = new Amount(3, NonSI.KNOT);

View file

@ -52,6 +52,19 @@ import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.jobs.JobPool; import com.raytheon.uf.viz.core.jobs.JobPool;
import com.raytheon.viz.pointdata.PointDataRequest; import com.raytheon.viz.pointdata.PointDataRequest;
/**
*
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 05/20/2013?? 988 Archana.S Initial creation.
* 02/26/2014 1061 B. Hebbard Don't block on JobPool cancel, so CAVE doesn't freeze if resource unloaded during long retrieval
*/
public class NcPlotModelHdf5DataRequestor { public class NcPlotModelHdf5DataRequestor {
StringBuffer sb = new StringBuffer(); StringBuffer sb = new StringBuffer();
@ -136,6 +149,10 @@ public class NcPlotModelHdf5DataRequestor {
Map<String, RequestConstraint> condFilterMap = null; Map<String, RequestConstraint> condFilterMap = null;
// Indicates the dataRequestJobPool is being cancelled, so jobs
// should just exit gracefully on return from a long HDF5 request.
private boolean canceling = false;
// Map< AbstractMetParameter, RequestConstraint > // Map< AbstractMetParameter, RequestConstraint >
// condMetParamReqConstraintMap = null; // condMetParamReqConstraintMap = null;
public void queueStationsForHdf5Query(DataTime dt, public void queueStationsForHdf5Query(DataTime dt,
@ -183,7 +200,8 @@ public class NcPlotModelHdf5DataRequestor {
allMetParamsMap = new HashMap<String, AbstractMetParameter>(); allMetParamsMap = new HashMap<String, AbstractMetParameter>();
plotPrmDefns = PlotParameterDefnsMngr.getInstance().getPlotParamDefns( plotPrmDefns = PlotParameterDefnsMngr.getInstance().getPlotParamDefns(
plotModel.getPlugin()); plotModel.getPlugin());
dataRequestJobPool = new JobPool("Requesting HDF5 data...", 8, false); dataRequestJobPool = new JobPool("Requesting met param data...", 8,
false);
queueOfStations = new ConcurrentLinkedQueue<QueueEntry>(); queueOfStations = new ConcurrentLinkedQueue<QueueEntry>();
parameters = new String[0]; parameters = new String[0];
metParamNameToDbNameMap = new HashMap<String, String>(); metParamNameToDbNameMap = new HashMap<String, String>();
@ -700,8 +718,10 @@ public class NcPlotModelHdf5DataRequestor {
public void dispose() { public void dispose() {
Tracer.print("> Entry"); Tracer.print("> Entry");
Tracer.print("Invoking NcPlotModelHdf5DataRequestor.dispose()"); Tracer.print("Invoking NcPlotModelHdf5DataRequestor.dispose()");
canceling = true;
if (dataRequestJobPool != null) { if (dataRequestJobPool != null) {
dataRequestJobPool.cancel(); dataRequestJobPool.cancel(false); // false = don't wait for jobs to
// complete
dataRequestJobPool = null; dataRequestJobPool = null;
} }
imageCreator.dispose(); imageCreator.dispose();
@ -1229,6 +1249,7 @@ public class NcPlotModelHdf5DataRequestor {
private Collection<Station> requestSurfaceData(DataTime time, private Collection<Station> requestSurfaceData(DataTime time,
List<Station> listOfStationsRequestingForData) { List<Station> listOfStationsRequestingForData) {
Tracer.print("> Entry " + Tracer.shortTimeString(time)); Tracer.print("> Entry " + Tracer.shortTimeString(time));
// sem1.acquireUninterruptibly(); // sem1.acquireUninterruptibly();
Map<String, Station> stationMap = new HashMap<String, Station>( Map<String, Station> stationMap = new HashMap<String, Station>(
listOfStationsRequestingForData.size()); listOfStationsRequestingForData.size());
@ -1467,6 +1488,7 @@ public class NcPlotModelHdf5DataRequestor {
.shortTimeString(time) .shortTimeString(time)
+ " " + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ " "
+ currentStation.info.stationId + currentStation.info.stationId
+ " " + " "
+ " from pkeySet updating prmToPlot(Key) " + " from pkeySet updating prmToPlot(Key) "
@ -1479,6 +1501,7 @@ public class NcPlotModelHdf5DataRequestor {
.shortTimeString(time) .shortTimeString(time)
+ " " + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ " "
+ currentStation.info.stationId + currentStation.info.stationId
+ " " + " "
+ " prmToPlot non-null " + " prmToPlot non-null "
@ -1492,6 +1515,7 @@ public class NcPlotModelHdf5DataRequestor {
.shortTimeString(time) .shortTimeString(time)
+ " " + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ " "
+ currentStation.info.stationId + currentStation.info.stationId
+ " " + " "
+ " from pkeySet updating prmToPlot(Key) " + " from pkeySet updating prmToPlot(Key) "
@ -1523,6 +1547,7 @@ public class NcPlotModelHdf5DataRequestor {
Tracer.print(Tracer.shortTimeString(time) Tracer.print(Tracer.shortTimeString(time)
+ " " + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ " "
+ currentStation.info.stationId + currentStation.info.stationId
+ " " + " "
+ " NULL metPrm return from dbParamsMap for key -- skipping" + " NULL metPrm return from dbParamsMap for key -- skipping"
@ -1572,9 +1597,9 @@ public class NcPlotModelHdf5DataRequestor {
if (jfk) if (jfk)
Tracer.print(Tracer.shortTimeString(time) + " " Tracer.print(Tracer.shortTimeString(time) + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ currentStation.info.stationId + " " + " " + currentStation.info.stationId
+ " before setMetParamFromPDV " + dbPrm + " " + " before setMetParamFromPDV "
+ " " + metPrm); + dbPrm + " " + metPrm);
/* /*
* Set the value for Met parameters from the * Set the value for Met parameters from the
@ -1584,9 +1609,9 @@ public class NcPlotModelHdf5DataRequestor {
if (jfk) if (jfk)
Tracer.print(Tracer.shortTimeString(time) + " " Tracer.print(Tracer.shortTimeString(time) + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ currentStation.info.stationId + " " + " " + currentStation.info.stationId
+ " after setMetParamFromPDV " + dbPrm + " " + " after setMetParamFromPDV "
+ " " + metPrm); + dbPrm + " " + metPrm);
// if( // if(
// metPrm.getMetParamName().compareTo("StationID") // metPrm.getMetParamName().compareTo("StationID")
@ -1617,9 +1642,9 @@ public class NcPlotModelHdf5DataRequestor {
if (jfk) if (jfk)
Tracer.print(Tracer.shortTimeString(time) + " " Tracer.print(Tracer.shortTimeString(time) + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ currentStation.info.stationId + " " + " " + currentStation.info.stationId
+ " after put " + dbPrm + " " + metPrm + " " + " after put " + dbPrm + " "
+ " into dbParamsMap"); + metPrm + " into dbParamsMap");
if (condFilterMap != null if (condFilterMap != null
&& !condFilterMap.isEmpty()) { && !condFilterMap.isEmpty()) {
@ -1734,6 +1759,7 @@ public class NcPlotModelHdf5DataRequestor {
Tracer.print(Tracer.shortTimeString(time) Tracer.print(Tracer.shortTimeString(time)
+ " " + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ " "
+ currentStation.info.stationId + currentStation.info.stationId
+ " " + " trying to add metParam " + " " + " trying to add metParam "
+ metParam); + metParam);
@ -1744,6 +1770,7 @@ public class NcPlotModelHdf5DataRequestor {
.shortTimeString(time) .shortTimeString(time)
+ " " + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ " "
+ currentStation.info.stationId + currentStation.info.stationId
+ " " + " "
+ " newPrm NULL from newInstance -- skipping!!! " + " newPrm NULL from newInstance -- skipping!!! "
@ -1755,6 +1782,7 @@ public class NcPlotModelHdf5DataRequestor {
Tracer.print(Tracer.shortTimeString(time) Tracer.print(Tracer.shortTimeString(time)
+ " " + " "
+ Tracer.shortTimeString(dataTime) + Tracer.shortTimeString(dataTime)
+ " "
+ currentStation.info.stationId + currentStation.info.stationId
+ " " + " added newPrm " + newPrm); + " " + " added newPrm " + newPrm);
} }
@ -2061,9 +2089,14 @@ public class NcPlotModelHdf5DataRequestor {
Tracer.sanityCheckStationSet(stationsWithData); Tracer.sanityCheckStationSet(stationsWithData);
if (stationsWithData.size() > 0) if (canceling) {
Tracer.print("CANCEL in progress; no plot creation will occur for frame "
+ Tracer.shortTimeString(time));
} else if (stationsWithData.size() > 0) {
imageCreator.queueStationsToCreateImages(time, imageCreator.queueStationsToCreateImages(time,
stationsWithData, plotDensity); stationsWithData, plotDensity);
}
Tracer.print("< Exit END TASK " + Tracer.shortTimeString(time)); Tracer.print("< Exit END TASK " + Tracer.shortTimeString(time));

View file

@ -32,9 +32,25 @@ import com.vividsolutions.jts.geom.Coordinate;
//import org.hibernate.mapping.Array; //import org.hibernate.mapping.Array;
/**
*
*
* <pre>
*
* SOFTWARE HISTORY
*
* Date Ticket# Engineer Description
* ------------ ---------- ----------- --------------------------
* 05/20/2013 988 Archana.S Initial creation.
* 02/26/2014 1061 B. Hebbard Relax tolerance for extent/zoom compare to avoid infinite loop.
*/
public final class ProgressiveDisclosure { public final class ProgressiveDisclosure {
private final static double TOLERANCE = 0.0000000001;// 0.00000001;//0.000000000001; private final static double TOLERANCE = 1E-03; // 0.0000000001;//
// 0.00000001;//0.000000000001;
private final static double ZOOM_TOLERANCE = TOLERANCE; // need different?
private ConcurrentLinkedQueue<QueueEntry> queueOfStationsToBeDisclosed; private ConcurrentLinkedQueue<QueueEntry> queueOfStationsToBeDisclosed;
@ -308,7 +324,7 @@ public final class ProgressiveDisclosure {
} }
} }
if (Math.abs(progDiscTask.zoomLevel - activePane.getZoomLevel()) > 0.00000000000001) { if (Math.abs(progDiscTask.zoomLevel - activePane.getZoomLevel()) > ZOOM_TOLERANCE) {
progDiscTask.zoomLevel = activePane.getZoomLevel(); progDiscTask.zoomLevel = activePane.getZoomLevel();
progDiscTask.extent = currViewExtents.clone(); progDiscTask.extent = currViewExtents.clone();
Tracer.print("Changed zoom level"); Tracer.print("Changed zoom level");

View file

@ -21,6 +21,7 @@ import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@ -28,6 +29,8 @@ import java.util.Map;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.TreeMap; import java.util.TreeMap;
import javax.xml.bind.JAXBException;
import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.RGB;
import org.opengis.referencing.FactoryException; import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.TransformException; import org.opengis.referencing.operation.TransformException;
@ -38,8 +41,10 @@ import com.raytheon.uf.common.colormap.prefs.DataMappingPreferences;
import com.raytheon.uf.common.colormap.prefs.DataMappingPreferences.DataMappingEntry; import com.raytheon.uf.common.colormap.prefs.DataMappingPreferences.DataMappingEntry;
import com.raytheon.uf.common.dataplugin.PluginDataObject; import com.raytheon.uf.common.dataplugin.PluginDataObject;
import com.raytheon.uf.common.geospatial.ReferencedCoordinate; import com.raytheon.uf.common.geospatial.ReferencedCoordinate;
import com.raytheon.uf.common.serialization.JAXBManager;
import com.raytheon.uf.common.serialization.SerializationException; import com.raytheon.uf.common.serialization.SerializationException;
import com.raytheon.uf.common.serialization.SerializationUtil; import com.raytheon.uf.common.serialization.jaxb.JAXBClassLocator;
import com.raytheon.uf.common.serialization.jaxb.JaxbDummyObject;
import com.raytheon.uf.common.status.IUFStatusHandler; import com.raytheon.uf.common.status.IUFStatusHandler;
import com.raytheon.uf.common.status.UFStatus; import com.raytheon.uf.common.status.UFStatus;
import com.raytheon.uf.common.status.UFStatus.Priority; import com.raytheon.uf.common.status.UFStatus.Priority;
@ -53,12 +58,14 @@ import com.raytheon.uf.common.style.image.DataScale;
import com.raytheon.uf.common.style.image.DataScale.Type; import com.raytheon.uf.common.style.image.DataScale.Type;
import com.raytheon.uf.common.style.image.ImagePreferences; import com.raytheon.uf.common.style.image.ImagePreferences;
import com.raytheon.uf.common.style.image.SamplePreferences; import com.raytheon.uf.common.style.image.SamplePreferences;
import com.raytheon.uf.common.style.level.Level;
import com.raytheon.uf.common.time.DataTime; import com.raytheon.uf.common.time.DataTime;
import com.raytheon.uf.viz.core.IDisplayPaneContainer; import com.raytheon.uf.viz.core.IDisplayPaneContainer;
import com.raytheon.uf.viz.core.IGraphicsTarget; import com.raytheon.uf.viz.core.IGraphicsTarget;
import com.raytheon.uf.viz.core.drawables.PaintProperties; import com.raytheon.uf.viz.core.drawables.PaintProperties;
import com.raytheon.uf.viz.core.drawables.ResourcePair; import com.raytheon.uf.viz.core.drawables.ResourcePair;
import com.raytheon.uf.viz.core.exception.VizException; import com.raytheon.uf.viz.core.exception.VizException;
import com.raytheon.uf.viz.core.reflect.SubClassLocator;
import com.raytheon.uf.viz.core.rsc.IInputHandler; import com.raytheon.uf.viz.core.rsc.IInputHandler;
import com.raytheon.uf.viz.core.rsc.IInputHandler.InputPriority; import com.raytheon.uf.viz.core.rsc.IInputHandler.InputPriority;
import com.raytheon.uf.viz.core.rsc.IResourceDataChanged; import com.raytheon.uf.viz.core.rsc.IResourceDataChanged;
@ -90,6 +97,7 @@ import com.vividsolutions.jts.geom.Coordinate;
* 12/16/2013 #958 sgurung Set virtual cursor to point to lat/lon instead of pixel coordinates (in multipnaes) * 12/16/2013 #958 sgurung Set virtual cursor to point to lat/lon instead of pixel coordinates (in multipnaes)
* 12/27/2013 #1046 qzhou Added getFunctioningRecords method * 12/27/2013 #1046 qzhou Added getFunctioningRecords method
* Sep 5,2013 2051 mnash Fixed a deprecated method. * Sep 5,2013 2051 mnash Fixed a deprecated method.
* 02/27/2014 qzhou Changed SerializaitionUtil to JAXBManager. Added getJaxbManager function
* </pre> * </pre>
* *
* @author qzhou, sgurung * @author qzhou, sgurung
@ -136,6 +144,8 @@ public class SolarImageResource extends
private RGB rgbB; private RGB rgbB;
private static JAXBManager jaxb;
protected static class SampleResult { protected static class SampleResult {
public SampleResult() { public SampleResult() {
@ -260,7 +270,6 @@ public class SolarImageResource extends
return legendStr; return legendStr;
} }
// TODO : probably not correct : fix this as it needs to be.
public void setLegendForFrame(SolarImageRecord rec) { public void setLegendForFrame(SolarImageRecord rec) {
String timeStr = dateFmt.format(rec.getDataTime().getRefTime()); String timeStr = dateFmt.format(rec.getDataTime().getRefTime());
@ -393,7 +402,6 @@ public class SolarImageResource extends
sampleCoord); sampleCoord);
} }
// TODO : draw the lat lon lines even if there is no image?
if (isLatLonOverlayOn()) { if (isLatLonOverlayOn()) {
try { try {
if (isCarrington) { if (isCarrington) {
@ -838,6 +846,31 @@ public class SolarImageResource extends
return NcPathConstants.SOLAR_IMG_STYLE_RULES; return NcPathConstants.SOLAR_IMG_STYLE_RULES;
} }
public static synchronized JAXBManager getJaxbManager()
throws JAXBException {
if (jaxb == null) {
SubClassLocator locator = new SubClassLocator();
Collection<Class<?>> classes = JAXBClassLocator.getJAXBClasses(
locator, StyleRuleset.class, StyleRule.class, Level.class,
AbstractStylePreferences.class, MatchCriteria.class);
locator.save();
Class<?>[] jaxbClasses = new Class<?>[classes.size() + 1];
classes.toArray(jaxbClasses);
/*
* Add JaxbDummyObject at the beginning so properties are loaded
* correctly
*/
jaxbClasses[jaxbClasses.length - 1] = jaxbClasses[0];
jaxbClasses[0] = JaxbDummyObject.class;
jaxb = new JAXBManager(jaxbClasses);
}
return jaxb;
}
private void setColorMapParametersAndColorBar() throws VizException { private void setColorMapParametersAndColorBar() throws VizException {
double minPixVal = Double.NaN; double minPixVal = Double.NaN;
double maxPixVal = Double.NaN; double maxPixVal = Double.NaN;
@ -881,8 +914,10 @@ public class SolarImageResource extends
File file = NcPathManager.getInstance().getStaticFile(locFileName); File file = NcPathManager.getInstance().getStaticFile(locFileName);
StyleRule sRule = null; StyleRule sRule = null;
try { try {
StyleRuleset styleSet = (StyleRuleset) SerializationUtil StyleRuleset styleSet = (StyleRuleset) getJaxbManager()
.jaxbUnmarshalFromXmlFile(StyleRuleset.class, file); .unmarshalFromXmlFile(file);
// .jaxbUnmarshalFromXmlFile(StyleRuleset.class, file);
if (styleSet != null) { if (styleSet != null) {
List<StyleRule> styleRuleList = styleSet.getStyleRules(); List<StyleRule> styleRuleList = styleSet.getStyleRules();
@ -932,6 +967,9 @@ public class SolarImageResource extends
} }
} }
} catch (JAXBException e) {
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(), e);
} catch (SerializationException e1) { } catch (SerializationException e1) {
e1.printStackTrace(); e1.printStackTrace();