@@ -63,9 +63,11 @@ echo "==========================================================================
6363# Create output directory structure
6464echo " Setting up output directories..."
6565mkdir -p " ${result_dir} "
66- mkdir -p " ${result_dir} ARtag_nofilt" # Unfiltered AR detections
67- mkdir -p " ${result_dir} ARtag_filt" # TC-filtered AR detections
68- mkdir -p " ${result_dir} TVQ_PRECT_ARtag" # AR-tagged TVQ_PRECT products
66+ mkdir -p " ${result_dir} AR_mask_nofilt"
67+ mkdir -p " ${result_dir} AR_mask_filt"
68+ mkdir -p " ${result_dir} TVQ_PRECT_AR_mask"
69+ mkdir -p " ${result_dir} TC_masks"
70+ mkdir -p " ${result_dir} ETC_masks"
6971
7072# ===============================================================================
7173# GRID GENERATION
@@ -115,8 +117,10 @@ echo "Generating input file lists..."
115117rm -f " ${result_dir} inputfile_${file_name} .txt"
116118rm -f " ${result_dir} ar_nofilt_files_out.txt"
117119rm -f " ${result_dir} ar_filt_files_out.txt"
118- rm -f " ${result_dir} TVQ_PRECT_ar_files_in.txt"
119- rm -f " ${result_dir} TVQ_PRECT_ar_files_out.txt"
120+ rm -f " ${result_dir} TVQ_PRECT_AR_mask_files_in.txt"
121+ rm -f " ${result_dir} TVQ_PRECT_AR_mask_files_out.txt"
122+ rm -f " ${result_dir} tc_mask_files_out.txt"
123+ rm -f " ${result_dir} etc_mask_files_out.txt"
120124
121125# Process input files and create systematic output filenames
122126file_count=0
@@ -126,21 +130,21 @@ for f in $(eval echo "${drc_in}/${caseid}.${atm_name}.h2.*{${start}..${end}}*.nc
126130 if [ -f " $f " ]; then
127131 g=$( basename " $f " )
128132
129- # Extract date portion from filename
130133 date_part=" ${g# ${caseid} .${atm_name} .h2.} "
131134 date_part=" ${date_part% .nc} "
132135
133- # Define systematic output filenames
134- ar_nofilt_file=" ${result_dir} ARtag_nofilt/${caseid} .${atm_name} .h2.${date_part} .ARtag_nofilt.nc"
135- ar_filt_file=" ${result_dir} ARtag_filt/${caseid} .${atm_name} .h2.${date_part} .ARtag_filt.nc"
136- tvq_prect_ar_file=" ${result_dir} TVQ_PRECT_ARtag/${caseid} .${atm_name} .h2.${date_part} .TVQ_PRECT_ARtag.nc"
137-
138- # Append to file lists
136+ ar_nofilt_file=" ${result_dir} AR_mask_nofilt/${caseid} .${atm_name} .h2.${date_part} .AR_mask_nofilt.nc"
137+ ar_filt_file=" ${result_dir} AR_mask_filt/${caseid} .${atm_name} .h2.${date_part} .AR_mask_filt.nc"
138+ tvq_prect_ar_file=" ${result_dir} TVQ_PRECT_AR_mask/${caseid} .${atm_name} .h2.${date_part} .TVQ_PRECT_AR_mask.nc"
139+ tc_mask_file=" ${result_dir} TC_masks/${caseid} .${atm_name} .h2.${date_part} .TC_mask.nc"
140+ etc_mask_file=" ${result_dir} ETC_masks/${caseid} .${atm_name} .h2.${date_part} .ETC_mask.nc"
139141 echo " $f " >> " ${result_dir} inputfile_${file_name} .txt"
140142 echo " ${ar_nofilt_file} " >> " ${result_dir} ar_nofilt_files_out.txt"
141143 echo " ${ar_filt_file} " >> " ${result_dir} ar_filt_files_out.txt"
142- echo " ${ar_filt_file} ;$f " >> " ${result_dir} TVQ_PRECT_ar_files_in.txt"
143- echo " ${tvq_prect_ar_file} " >> " ${result_dir} TVQ_PRECT_ar_files_out.txt"
144+ echo " ${ar_filt_file} ;$f " >> " ${result_dir} TVQ_PRECT_AR_mask_files_in.txt"
145+ echo " ${tvq_prect_ar_file} " >> " ${result_dir} TVQ_PRECT_AR_mask_files_out.txt"
146+ echo " ${tc_mask_file} " >> " ${result_dir} tc_mask_files_out.txt"
147+ echo " ${etc_mask_file} " >> " ${result_dir} etc_mask_files_out.txt"
144148
145149 (( file_count++ ))
146150 fi
@@ -152,31 +156,10 @@ echo " Found ${file_count} input files"
152156cd " ${result_dir} "
153157
154158# ===============================================================================
155- # STEP 1: ATMOSPHERIC RIVER DETECTION (UNFILTERED)
159+ # STEP 1: TROPICAL CYCLONE DETECTION
156160# ===============================================================================
157161
158- echo " Step 1: Detecting atmospheric rivers..."
159- echo " Method: Laplacian of integrated water vapor transport (IVT)"
160- echo " Variables: TUQ (zonal IVT), TVQ (meridional IVT)"
161- echo " Threshold: <= -20,000"
162- echo " Min latitude: 15°"
163- echo " Min area: 4e5 km²"
164-
165- DetectBlobs \
166- --in_connect " ${result_dir} connect_CSne${res} _v2.dat" \
167- --in_data_list " ${result_dir} inputfile_${file_name} .txt" \
168- --out_list " ${result_dir} ar_nofilt_files_out.txt" \
169- --thresholdcmd " _LAPLACIAN{8,10}(_VECMAG(TUQ,TVQ)),<=,-20000,0" \
170- --minabslat 15 \
171- --geofiltercmd " area,>=,4e5km2"
172-
173- echo " AR detection completed"
174-
175- # ===============================================================================
176- # STEP 2: TROPICAL CYCLONE DETECTION
177- # ===============================================================================
178-
179- echo " Step 2: Detecting tropical cyclones for filtering..."
162+ echo " Step 1: Detecting tropical cyclones for filtering..."
180163echo " Method: Sea level pressure minima with temperature criteria"
181164echo " SLP decrease: 300 Pa within 4° radius"
182165echo " Temperature decrease: 0.6 K at 200/500 hPa levels"
@@ -185,7 +168,6 @@ echo " Temperature decrease: 0.6 K at 200/500 hPa levels"
185168if [ ${res} -eq 120 ]; then
186169 echo " Using ne120 parameters..."
187170 DetectNodes \
188- --verbosity 0 \
189171 --in_connect " ${result_dir} connect_CSne${res} _v2.dat" \
190172 --closedcontourcmd " PSL,300.0,4.0,0;_AVG(T200,T500),-0.6,4,0.30" \
191173 --mergedist 6.0 \
@@ -197,7 +179,6 @@ if [ ${res} -eq 120 ]; then
197179elif [ ${res} -eq 30 ]; then
198180 echo " Using ne30 parameters..."
199181 DetectNodes \
200- --verbosity 0 \
201182 --in_connect " ${result_dir} connect_CSne${res} _v2.dat" \
202183 --closedcontourcmd " PSL,300.0,4.0,0;_AVG(T200,T500),-0.6,4,1.0" \
203184 --mergedist 6.0 \
@@ -212,11 +193,9 @@ else
212193 exit 1
213194fi
214195
215- # Concatenate TC detection results
216196echo " Concatenating TC detection files..."
217197cat " ${result_dir} " out.dat0* .dat > " ${result_dir} cyclones_${file_name} .txt"
218198
219- # Create TC tracks
220199echo " Creating TC tracks..."
221200echo " Max distance: 6.0°, Min duration: 6 time steps, Max gap: 1 time step"
222201echo " Wind speed: >= 17.5 m/s, Latitude: -40° to 40°"
@@ -231,7 +210,6 @@ StitchNodes \
231210 --out " ${result_dir} cyclones_stitch_${file_name} .dat" \
232211 --threshold " wind,>=,17.5,6;lat,<=,40.0,6;lat,>=,-40.0,6"
233212
234- # Calculate TC radial wind profiles and outer circulation size
235213echo " Calculating TC radial wind profiles and circulation size..."
236214echo " Radial bins: 0.5° for ne30, 0.125° for ne120"
237215
@@ -257,20 +235,6 @@ echo " TC radial wind profile calculation completed"
257235echo " Creating TC mask files..."
258236echo " Binary mask: 1 within TC circulation radius, 0 elsewhere"
259237
260- # Create output directory for TC masks
261- mkdir -p " ${result_dir} TC_masks"
262-
263- # Generate TC mask file list
264- rm -f " ${result_dir} tc_mask_files_out.txt"
265- for f in $( eval echo " ${drc_in} /${caseid} .${atm_name} .h2.*{${start} ..${end} }*.nc" ) ; do
266- if [ -f " $f " ]; then
267- g=$( basename " $f " )
268- date_part=" ${g# ${caseid} .${atm_name} .h2.} "
269- date_part=" ${date_part% .nc} "
270- tc_mask_file=" ${result_dir} TC_masks/${caseid} .${atm_name} .h2.${date_part} .TC_mask.nc"
271- echo " ${tc_mask_file} " >> " ${result_dir} tc_mask_files_out.txt"
272- fi
273- done
274238
275239NodeFileFilter \
276240 --in_connect " ${result_dir} connect_CSne${res} _v2.dat" \
@@ -279,15 +243,15 @@ NodeFileFilter \
279243 --in_data_list " ${result_dir} inputfile_${file_name} .txt" \
280244 --out_data_list " ${result_dir} tc_mask_files_out.txt" \
281245 --bydist " rsize" \
282- --maskvar " stormmask "
246+ --maskvar " storm_mask "
283247
284248echo " TC mask creation completed"
285249
286250# ===============================================================================
287- # STEP 2B : EXTRATROPICAL CYCLONE DETECTION AND TRACKING
251+ # STEP 2 : EXTRATROPICAL CYCLONE DETECTION AND TRACKING
288252# ===============================================================================
289253
290- echo " Step 2B : Detecting extratropical cyclones..."
254+ echo " Step 2 : Detecting extratropical cyclones..."
291255echo " Method: Sea level pressure minima with closed contour criteria"
292256echo " SLP decrease: 200 Pa within 6° radius"
293257echo " Warm-core check: T200/T500 average to eliminate TCs"
@@ -350,20 +314,6 @@ echo " ETC tracking completed"
350314echo " Creating ETC mask files..."
351315echo " Binary mask: 1 within 6° of ETC center, 0 elsewhere"
352316
353- # Create output directory for ETC masks
354- mkdir -p " ${result_dir} ETC_masks"
355-
356- # Generate ETC mask file list
357- rm -f " ${result_dir} etc_mask_files_out.txt"
358- for f in $( eval echo " ${drc_in} /${caseid} .${atm_name} .h2.*{${start} ..${end} }*.nc" ) ; do
359- if [ -f " $f " ]; then
360- g=$( basename " $f " )
361- date_part=" ${g# ${caseid} .${atm_name} .h2.} "
362- date_part=" ${date_part% .nc} "
363- etc_mask_file=" ${result_dir} ETC_masks/${caseid} .${atm_name} .h2.${date_part} .ETC_mask.nc"
364- echo " ${etc_mask_file} " >> " ${result_dir} etc_mask_files_out.txt"
365- fi
366- done
367317
368318NodeFileFilter \
369319 --in_connect " ${result_dir} connect_CSne${res} _v2.dat" \
@@ -372,16 +322,38 @@ NodeFileFilter \
372322 --in_data_list " ${result_dir} inputfile_${file_name} .txt" \
373323 --out_data_list " ${result_dir} etc_mask_files_out.txt" \
374324 --bydist 6.0 \
375- --maskvar " stormmask "
325+ --maskvar " storm_mask "
376326
377327echo " ETC mask creation completed"
378328echo " ETC detection, tracking, and masking completed"
379329
380330# ===============================================================================
381- # STEP 3: FILTER ARs TO REMOVE TC INFLUENCE
331+ # STEP 3: ATMOSPHERIC RIVER DETECTION (UNFILTERED)
332+ # ===============================================================================
333+
334+ echo " Step 3: Detecting atmospheric rivers..."
335+ echo " Method: Laplacian of integrated water vapor transport (IVT)"
336+ echo " Variables: TUQ (zonal IVT), TVQ (meridional IVT)"
337+ echo " Threshold: <= -20,000"
338+ echo " Min latitude: 15°"
339+ echo " Min area: 4e5 km²"
340+
341+ DetectBlobs \
342+ --in_connect " ${result_dir} connect_CSne${res} _v2.dat" \
343+ --in_data_list " ${result_dir} inputfile_${file_name} .txt" \
344+ --out_list " ${result_dir} ar_nofilt_files_out.txt" \
345+ --thresholdcmd " _LAPLACIAN{8,10}(_VECMAG(TUQ,TVQ)),<=,-20000,0" \
346+ --minabslat 15 \
347+ --geofiltercmd " area,>=,4e5km2" \
348+ --tagvar " ar_mask"
349+
350+ echo " AR detection completed"
351+
352+ # ===============================================================================
353+ # STEP 4: FILTER ARs TO REMOVE TC INFLUENCE
382354# ===============================================================================
383355
384- echo " Step 3 : Filtering ARs to remove tropical cyclone influence..."
356+ echo " Step 4 : Filtering ARs to remove tropical cyclone influence..."
385357echo " Exclusion distance: 8.0° from any TC center"
386358echo " Method: Remove AR detections near TC tracks"
387359
@@ -391,23 +363,23 @@ NodeFileFilter \
391363 --in_fmt " lon,lat,slp,wind" \
392364 --in_data_list " ${result_dir} ar_nofilt_files_out.txt" \
393365 --out_data_list " ${result_dir} ar_filt_files_out.txt" \
394- --var " binary_tag " \
366+ --var " ar_mask " \
395367 --bydist 8.0 \
396368 --invert
397369
398370echo " AR filtering completed"
399371
400372# ===============================================================================
401- # STEP 4 : APPLY AR MASK TO VAPOR TRANSPORT AND PRECT FIELD
373+ # STEP 5 : APPLY AR MASK TO VAPOR TRANSPORT AND PRECT FIELD
402374# ===============================================================================
403375
404- echo " Step 4 : Applying AR mask to vapor transport and precipitation field..."
376+ echo " Step 5 : Applying AR mask to vapor transport and precipitation field..."
405377echo " Creating AR-tagged and non-AR vapor transport products"
406378
407379VariableProcessor \
408- --in_data_list " ${result_dir} TVQ_PRECT_ar_files_in .txt" \
409- --out_data_list " ${result_dir} TVQ_PRECT_ar_files_out .txt" \
410- --var " _PROD(binary_tag ,TVQ);_PROD(_DIFF(1,binary_tag ),TVQ);_PROD(binary_tag ,PRECT)" \
380+ --in_data_list " ${result_dir} TVQ_PRECT_AR_mask_files_in .txt" \
381+ --out_data_list " ${result_dir} TVQ_PRECT_AR_mask_files_out .txt" \
382+ --var " _PROD(ar_mask ,TVQ);_PROD(_DIFF(1,ar_mask ),TVQ);_PROD(ar_mask ,PRECT)" \
411383 --varout " TVQ_AR,TVQ_NONAR,PRECT_AR" \
412384 --in_connect " ${result_dir} connect_CSne${res} _v2.dat"
413385
@@ -421,9 +393,9 @@ echo "==========================================================================
421393echo " Processing completed successfully!"
422394echo " =============================================================================="
423395echo " Output files:"
424- echo " Unfiltered ARs : ${result_dir} ARtag_nofilt /"
425- echo " TC-filtered ARs : ${result_dir} ARtag_filt /"
426- echo " AR-tagged TVQ/PRECT: ${result_dir} TVQ_PRECT_ARtag /"
396+ echo " Unfiltered AR masks : ${result_dir} AR_mask_nofilt /"
397+ echo " TC-filtered AR masks : ${result_dir} AR_mask_filt /"
398+ echo " AR-masked TVQ/PRECT: ${result_dir} TVQ_PRECT_AR_mask /"
427399echo " TC tracks: ${result_dir} cyclones_stitch_${file_name} .dat"
428400echo " TC radial profiles: ${result_dir} cyclones_radprof_${file_name} .dat"
429401echo " TC masks: ${result_dir} TC_masks/"
0 commit comments