Skip to content

Commit 8ee9bf4

Browse files
committed
re-org and code cleanup
1 parent 4a6129f commit 8ee9bf4

File tree

1 file changed

+57
-85
lines changed

1 file changed

+57
-85
lines changed

model_data_preprocess/postprocessing_E3SM_data_for_AR_analysis.sh

Lines changed: 57 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,11 @@ echo "==========================================================================
6363
# Create output directory structure
6464
echo "Setting up output directories..."
6565
mkdir -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..."
115117
rm -f "${result_dir}inputfile_${file_name}.txt"
116118
rm -f "${result_dir}ar_nofilt_files_out.txt"
117119
rm -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
122126
file_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"
152156
cd "${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..."
180163
echo " Method: Sea level pressure minima with temperature criteria"
181164
echo " SLP decrease: 300 Pa within 4° radius"
182165
echo " 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"
185168
if [ ${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
197179
elif [ ${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
213194
fi
214195

215-
# Concatenate TC detection results
216196
echo " Concatenating TC detection files..."
217197
cat "${result_dir}"out.dat0*.dat > "${result_dir}cyclones_${file_name}.txt"
218198

219-
# Create TC tracks
220199
echo " Creating TC tracks..."
221200
echo " Max distance: 6.0°, Min duration: 6 time steps, Max gap: 1 time step"
222201
echo " 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
235213
echo " Calculating TC radial wind profiles and circulation size..."
236214
echo " Radial bins: 0.5° for ne30, 0.125° for ne120"
237215

@@ -257,20 +235,6 @@ echo " TC radial wind profile calculation completed"
257235
echo " Creating TC mask files..."
258236
echo " 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

275239
NodeFileFilter \
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

284248
echo " 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..."
291255
echo " Method: Sea level pressure minima with closed contour criteria"
292256
echo " SLP decrease: 200 Pa within 6° radius"
293257
echo " Warm-core check: T200/T500 average to eliminate TCs"
@@ -350,20 +314,6 @@ echo " ETC tracking completed"
350314
echo " Creating ETC mask files..."
351315
echo " 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

368318
NodeFileFilter \
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

377327
echo " ETC mask creation completed"
378328
echo " 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..."
385357
echo " Exclusion distance: 8.0° from any TC center"
386358
echo " 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

398370
echo " 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..."
405377
echo " Creating AR-tagged and non-AR vapor transport products"
406378

407379
VariableProcessor \
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 "==========================================================================
421393
echo "Processing completed successfully!"
422394
echo "=============================================================================="
423395
echo "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/"
427399
echo " TC tracks: ${result_dir}cyclones_stitch_${file_name}.dat"
428400
echo " TC radial profiles: ${result_dir}cyclones_radprof_${file_name}.dat"
429401
echo " TC masks: ${result_dir}TC_masks/"

0 commit comments

Comments
 (0)