Skip to content

Commit daf41c0

Browse files
Merge pull request #54 from TimMarchok-NOAA/mods_for_et_genesis
Modify genesis detection for extratropical cyclones. Subroutine find_all_maxmins was modified to enable better detection of extratropical cyclones. This involved changing the logic so that the check for a low-level (near-surface) closed wind circulation is not peformed, as it is for detection of TCs.
2 parents 2b82dcf + 580a047 commit daf41c0

1 file changed

Lines changed: 83 additions & 53 deletions

File tree

code/src/tracker/gettrk_subroutines.f

Lines changed: 83 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -32867,14 +32867,20 @@ subroutine find_all_maxmins (imax,jmax,ibeg,iend,jbeg,jend,fxy
3286732867
c ------------------------------------------------------------------
3286832868
c STEP 3: Now go through the grid again and, for all eligible
3286932869
c points that are not already masked out (due to there being an
32870-
c already-existing storm from the previous lead time), call a
32871-
c routine to go out along 8 radials surrounding each point to
32872-
c determine if there is a radial gradient of MSLP along each radial
32873-
c that is at least as strong as that specified by the user. If
32874-
c that check passes, then call a routine that checks for a closed
32875-
c low-level (10m) wind circulation. If both the MSLP radial
32876-
c gradient and low-level wind circulation checks pass, then you
32877-
c can consider this as a candidate point.
32870+
c already-existing storm from the previous lead time), do one or
32871+
c both of these next two steps:
32872+
c
32873+
c (1) For both trkrtypes ("midlat" or "tcgen"), call a routine to
32874+
c go out along 8 radials surrounding each point to determine
32875+
c if there is a radial gradient of MSLP along each radial
32876+
c that is at least as strong as that specified by the user.
32877+
c
32878+
c (2) If that check passes *AND* if this is a "tcgen" run, then
32879+
c call a routine that checks for a closed low-level (10m) wind
32880+
c circulation. If both the MSLP radial gradient and low-level
32881+
c wind circulation checks pass, then you can consider this as a
32882+
c candidate point. If this is instead a "midlat" run, then we
32883+
c will skip the check for a low-level wind circulation.
3287832884
c ------------------------------------------------------------------
3287932885

3288032886
candidate_ct = 0
@@ -32929,74 +32935,98 @@ subroutine find_all_maxmins (imax,jmax,ibeg,iend,jbeg,jend,fxy
3292932935

3293032936
if (icmrgret == 0) then
3293132937

32932-
call date_and_time (big_ben(1),big_ben(2),big_ben(3)
32933-
& ,date_time)
32934-
write (6,31) date_time(5),date_time(6),date_time(7)
32935-
31 format (1x,'TIMING: b4 check_for_closed_wind_circ at '
32936-
& ,i2.2,':',i2.2,':',i2.2)
32937-
32938-
!------------------------------------------------------
32938+
!-------------------------------------------------------
3293932939
! Call routine to check for low-level circulation here
32940-
!------------------------------------------------------
32940+
! since we have passed the mslp radial gradient test.
32941+
! However, note from the IF statement below that we
32942+
! will only do the low-level wind circulation test for
32943+
! a tcgen case; For a midlat case, we skip the low-level
32944+
! wind circulation test.
32945+
!-------------------------------------------------------
3294132946

32942-
low_level_wind_circ_flag = 'n'
32943-
call check_for_closed_wind_circulation (imax,jmax,ip,jp
32944-
& ,dx,dy,valid_pt,trkrinfo,ifh
32945-
& ,low_level_wind_circ_flag,gm_wrap_flag
32946-
& ,vtquadmax,'genesis',iccwcret)
32947+
if (trkrinfo%type == 'tcgen') then
3294732948

32948-
call date_and_time (big_ben(1),big_ben(2),big_ben(3)
32949-
& ,date_time)
32950-
write (6,33) date_time(5),date_time(6),date_time(7)
32951-
33 format (1x,'TIMING: after check_for_closed_wind_circ at'
32952-
& ,' ',i2.2,':',i2.2,':',i2.2)
32949+
call date_and_time (big_ben(1),big_ben(2),big_ben(3)
32950+
& ,date_time)
32951+
write (6,31) date_time(5),date_time(6),date_time(7)
32952+
31 format (1x,'TIMING: b4 check_for_closed_wind_circ at '
32953+
& ,i2.2,':',i2.2,':',i2.2)
3295332954

32954-
if (iccwcret == 0) then
32955+
low_level_wind_circ_flag = 'n'
32956+
call check_for_closed_wind_circulation (imax,jmax,ip,jp
32957+
& ,dx,dy,valid_pt,trkrinfo,ifh
32958+
& ,low_level_wind_circ_flag,gm_wrap_flag
32959+
& ,vtquadmax,'genesis',iccwcret)
3295532960

32956-
int_vtq_ne = nint(10.0 * vtquadmax(1) * 1.9427)
32957-
int_vtq_se = nint(10.0 * vtquadmax(2) * 1.9427)
32958-
int_vtq_sw = nint(10.0 * vtquadmax(3) * 1.9427)
32959-
int_vtq_nw = nint(10.0 * vtquadmax(4) * 1.9427)
32961+
call date_and_time (big_ben(1),big_ben(2),big_ben(3)
32962+
& ,date_time)
32963+
write (6,33) date_time(5),date_time(6),date_time(7)
32964+
33 format (1x,'TIMING: after check_for_closed_wind_circ at'
32965+
& ,' ',i2.2,':',i2.2,':',i2.2)
3296032966

32961-
print *,' '
32967+
if (iccwcret == 0) then
3296232968

32963-
write (6,234) ,atcfymdh,adjustr(atcfname)
32964-
& ,ifhours(ifh)
32965-
& ,int_vtq_ne,int_vtq_se,int_vtq_sw,int_vtq_nw
32969+
int_vtq_ne = nint(10.0 * vtquadmax(1) * 1.9427)
32970+
int_vtq_se = nint(10.0 * vtquadmax(2) * 1.9427)
32971+
int_vtq_sw = nint(10.0 * vtquadmax(3) * 1.9427)
32972+
int_vtq_nw = nint(10.0 * vtquadmax(4) * 1.9427)
32973+
32974+
print *,' '
3296632975

32967-
234 format (1x,'tcvq_genesis ',i10.10,', ',1x,a4,', ',1x
32976+
write (6,234) ,atcfymdh,adjustr(atcfname)
32977+
& ,ifhours(ifh)
32978+
& ,int_vtq_ne,int_vtq_se,int_vtq_sw,int_vtq_nw
32979+
32980+
234 format (1x,'tcvq_genesis ',i10.10,', ',1x,a4,', ',1x
3296832981
& ,i3,4(', ',i7))
3296932982

32970-
if (low_level_wind_circ_flag == 'y') then
32971-
candidate_ct = candidate_ct + 1
32972-
prstemp(candidate_ct) = slp_array(ip,jp)
32973-
ipos(candidate_ct) = ip
32974-
jpos(candidate_ct) = jp
32975-
if (verb >= 3) then
32976-
print *,' '
32977-
print *,' +++ Successful check of both MSLP radial'
32978-
& ,' gradient and LL wind circ, '
32979-
& ,' ip= ',ip,' jp= ',jp
32980-
print *,' '
32983+
if (low_level_wind_circ_flag == 'y') then
32984+
candidate_ct = candidate_ct + 1
32985+
prstemp(candidate_ct) = slp_array(ip,jp)
32986+
ipos(candidate_ct) = ip
32987+
jpos(candidate_ct) = jp
32988+
if (verb >= 3) then
32989+
print *,' '
32990+
print *,' +++ Successful check of both MSLP'
32991+
& ,' radial gradient and LL wind circ, '
32992+
& ,' ip= ',ip,' jp= ',jp
32993+
print *,' '
32994+
endif
32995+
else
32996+
if (verb >= 3) then
32997+
print *,' '
32998+
print *,' !!! MSLP radial gradient passed but'
32999+
& ,' LL wind circ check FAILED. '
33000+
& ,' ip= ',ip,' jp= ',jp
33001+
print *,' '
33002+
endif
33003+
cycle iloop_g
3298133004
endif
3298233005
else
3298333006
if (verb >= 3) then
3298433007
print *,' '
32985-
print *,' !!! MSLP radial gradient passed but'
32986-
& ,' LL wind circ check FAILED. '
32987-
& ,' ip= ',ip,' jp= ',jp
33008+
print *,' !!! Failed check 2 of LL wind circ, '
33009+
& ,' ip= ',ip,' jp= ',jp
3298833010
print *,' '
3298933011
endif
3299033012
cycle iloop_g
3299133013
endif
33014+
3299233015
else
33016+
33017+
candidate_ct = candidate_ct + 1
33018+
prstemp(candidate_ct) = slp_array(ip,jp)
33019+
ipos(candidate_ct) = ip
33020+
jpos(candidate_ct) = jp
33021+
3299333022
if (verb >= 3) then
3299433023
print *,' '
32995-
print *,' !!! Failed check 2 of LL wind circ, '
32996-
& ,' ip= ',ip,' jp= ',jp
33024+
print *,' +++ Successful check of the MSLP radial'
33025+
& ,' gradient check for a midlat run,'
33026+
& ,' ip= ',ip,' jp= ',jp
3299733027
print *,' '
3299833028
endif
32999-
cycle iloop_g
33029+
3300033030
endif
3300133031

3300233032
else

0 commit comments

Comments
 (0)