Skip to content

Commit

Permalink
Fix segmentation fault in topo filtering code when processing ESG gri…
Browse files Browse the repository at this point in the history
…ds (#238)

* bugfix/topo_filter

Remove seg faulting loop from filter_topo.F90.  Instead
always compute dy from lat/lon.

Issue #236.

* bugfix/topo_filter

Add quotes to filter topo namelist variables.  This fixed
a program failure when using the Gnu compiler.

Issue #236.

* bugfix/topo_filter

Add new regression test for regional ESG grid.  Update
hera grid_gen regression test script accordingly.

Issue #236.

* bugfix/topo_filter

Bug fix to hera grid gen regression test driver script.

Issue #236.

* bugfix/topo_filter

Update Dell grid gen regression test script for new esg
regional test.

Issue #236.

* bugfix/topo_filter

Update Jet grid gen regression test script for new ESG
regional test.

Issue #236.

* bugfix/topo_filter

Update orion grid gen regression test script for new ESG
regional test.

Issue #236.

* bugfix/topo_filter

Update Cray grid generation regression test script for new
ESG regional test.

Issue #236.

Co-authored-by: Edward Hartnett <38856240+edwardhartnett@users.noreply.github.com>
  • Loading branch information
GeorgeGayno-NOAA and edwardhartnett committed Feb 25, 2021
1 parent bb2724b commit c5f4e99
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 27 deletions.
9 changes: 8 additions & 1 deletion reg_tests/grid_gen/driver.cray.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,17 @@ bsub -e $LOG_FILE -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J c96.uniform -W 0:15
bsub -e $LOG_FILE -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J gfdl.regional -W 0:10 -M 2400 \
-w 'ended(c96.uniform)' -extsched 'CRAYLINUX[]' "export NODES=1; $PWD/gfdl.regional.sh"

#-----------------------------------------------------------------------------
# ESG regional grid
#-----------------------------------------------------------------------------

bsub -e $LOG_FILE -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J esg.regional -W 0:10 -M 2400 \
-w 'ended(gfdl.regional)' -extsched 'CRAYLINUX[]' "export NODES=1; $PWD/esg.regional.sh"

#-----------------------------------------------------------------------------
# Create summary log.
#-----------------------------------------------------------------------------

bsub -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J summary -R "rusage[mem=100]" -W 0:01 -w 'ended(gfdl.regional)' "grep -a '<<<' $LOG_FILE >> $SUM_FILE"
bsub -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J summary -R "rusage[mem=100]" -W 0:01 -w 'ended(esg.regional)' "grep -a '<<<' $LOG_FILE >> $SUM_FILE"

exit
9 changes: 8 additions & 1 deletion reg_tests/grid_gen/driver.dell.sh
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,16 @@ bsub -e $LOG_FILE -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J c96.uniform -W 0:15
bsub -e $LOG_FILE -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J gfdl.regional -W 0:10 -x -n 24 -w 'ended(c96.uniform)' \
-R "span[ptile=24]" -R "affinity[core(1):distribute=balance]" "$PWD/gfdl.regional.sh"

#-----------------------------------------------------------------------------
# ESG regional grid
#-----------------------------------------------------------------------------

bsub -e $LOG_FILE -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J esg.regional -W 0:10 -x -n 24 -w 'ended(gfdl.regional)' \
-R "span[ptile=24]" -R "affinity[core(1):distribute=balance]" "$PWD/esg.regional.sh"

#-----------------------------------------------------------------------------
# Create summary log.
#-----------------------------------------------------------------------------

bsub -o $LOG_FILE -q $QUEUE -P $PROJECT_CODE -J summary -R "affinity[core(1)]" -R "rusage[mem=100]" -W 0:01 \
-w 'ended(gfdl.regional)' "grep -a '<<<' $LOG_FILE >> $SUM_FILE"
-w 'ended(esg.regional)' "grep -a '<<<' $LOG_FILE >> $SUM_FILE"
9 changes: 8 additions & 1 deletion reg_tests/grid_gen/driver.hera.sh
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,19 @@ TEST1=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:15:00 -A $PROJECT_
TEST2=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:10:00 -A $PROJECT_CODE -q $QUEUE -J gfdl.regional \
-o $LOG_FILE -e $LOG_FILE -d afterok:$TEST1 ./gfdl.regional.sh)

#-----------------------------------------------------------------------------
# esg regional grid
#-----------------------------------------------------------------------------

TEST3=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:10:00 -A $PROJECT_CODE -q $QUEUE -J esg.regional \
-o $LOG_FILE -e $LOG_FILE -d afterok:$TEST2 ./esg.regional.sh)

#-----------------------------------------------------------------------------
# Create summary log.
#-----------------------------------------------------------------------------

sbatch --nodes=1 -t 0:01:00 -A $PROJECT_CODE -J grid_summary -o $LOG_FILE -e $LOG_FILE \
--open-mode=append -q $QUEUE -d afterok:$TEST2 << EOF
--open-mode=append -q $QUEUE -d afterok:$TEST3 << EOF
#!/bin/bash
grep -a '<<<' $LOG_FILE > $SUM_FILE
EOF
9 changes: 8 additions & 1 deletion reg_tests/grid_gen/driver.jet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,19 @@ TEST1=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:15:00 -A $PROJECT_
TEST2=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:10:00 -A $PROJECT_CODE -q $QUEUE -J gfdl.regional \
--partition=xjet -o $LOG_FILE -e $LOG_FILE -d afterok:$TEST1 ./gfdl.regional.sh)

#-----------------------------------------------------------------------------
# ESG regional grid
#-----------------------------------------------------------------------------

TEST3=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:10:00 -A $PROJECT_CODE -q $QUEUE -J esg.regional \
--partition=xjet -o $LOG_FILE -e $LOG_FILE -d afterok:$TEST2 ./esg.regional.sh)

#-----------------------------------------------------------------------------
# Create summary log.
#-----------------------------------------------------------------------------

sbatch --partition=xjet --nodes=1 -t 0:01:00 -A $PROJECT_CODE -J grid_summary -o $LOG_FILE -e $LOG_FILE \
--open-mode=append -q $QUEUE -d afterok:$TEST2 << EOF
--open-mode=append -q $QUEUE -d afterok:$TEST3 << EOF
#!/bin/bash
grep -a '<<<' $LOG_FILE > $SUM_FILE
EOF
11 changes: 9 additions & 2 deletions reg_tests/grid_gen/driver.orion.sh
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,25 @@ TEST1=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:15:00 -A $PROJECT_
-o $LOG_FILE -e $LOG_FILE ./c96.uniform.sh)

#-----------------------------------------------------------------------------
# C96 regional grid
# GFDL regional grid
#-----------------------------------------------------------------------------

TEST2=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:10:00 -A $PROJECT_CODE -q $QUEUE -J gfdl.regional \
--open-mode=append -o $LOG_FILE -e $LOG_FILE -d afterok:$TEST1 ./gfdl.regional.sh)

#-----------------------------------------------------------------------------
# ESG regional grid
#-----------------------------------------------------------------------------

TEST3=$(sbatch --parsable --ntasks-per-node=24 --nodes=1 -t 0:10:00 -A $PROJECT_CODE -q $QUEUE -J esg.regional \
--open-mode=append -o $LOG_FILE -e $LOG_FILE -d afterok:$TEST2 ./esg.regional.sh)

#-----------------------------------------------------------------------------
# Create summary log.
#-----------------------------------------------------------------------------

sbatch --nodes=1 -t 0:01:00 -A $PROJECT_CODE -J grid_summary -o $LOG_FILE -e $LOG_FILE \
--open-mode=append -q $QUEUE -d afterok:$TEST2 << EOF
--open-mode=append -q $QUEUE -d afterok:$TEST3 << EOF
#!/bin/bash
grep -a '<<<' $LOG_FILE > $SUM_FILE
EOF
68 changes: 68 additions & 0 deletions reg_tests/grid_gen/esg.regional.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash

#-----------------------------------------------------------------------
# Create a regional esg grid. Compare output to a set
# of baseline files using the 'nccmp' utility. This script is
# run by the machine specific driver script.
#-----------------------------------------------------------------------

set -x

export TEMP_DIR=${WORK_DIR}/esg.regional.work
export out_dir=${WORK_DIR}/esg.regional

export gtype=regional_esg
export target_lon=-97.5 # Center longitude of the highest resolution tile
export target_lat=35.5 # Center latitude of the highest resolution tile
export idim=1301 # Dimension of grid in 'i' direction
export jdim=600 # Dimension of grid in 'j' direction
export delx=0.0145 # Grid spacing in degrees in 'i' direction
export dely=0.0145 # Grid spacing in degrees in 'j' direction
export halo=3

NCCMP=${NCCMP:-$(which nccmp)}

#-----------------------------------------------------------------------
# Start script.
#-----------------------------------------------------------------------

echo "Starting at: " `date`

$home_dir/ush/fv3gfs_driver_grid.sh

iret=$?
if [ $iret -ne 0 ]; then
set +x
echo "<<< ESG REGIONAL TEST FAILED. <<<"
exit $iret
fi

echo "Ending at: " `date`

#-----------------------------------------------------------------------------
# Compare output to baseline set of data.
#-----------------------------------------------------------------------------

cd $out_dir/C3113

test_failed=0
for files in *tile*.nc ./fix_sfc/*tile*.nc
do
if [ -f $files ]; then
echo CHECK $files
$NCCMP -dmfqS $files $HOMEreg/esg.regional/$files
iret=$?
if [ $iret -ne 0 ]; then
test_failed=1
fi
fi
done

set +x
if [ $test_failed -ne 0 ]; then
echo "<<< ESG REGIONAL TEST FAILED. >>>"
else
echo "<<< ESG REGIONAL TEST PASSED. >>>"
fi

exit 0
28 changes: 9 additions & 19 deletions sorc/grid_tools.fd/filter_topo.fd/filter_topo.F90
Original file line number Diff line number Diff line change
Expand Up @@ -706,27 +706,17 @@ subroutine read_grid_file(regional)
dx(i,j,t) = great_circle_dist( g2, g1, radius )
enddo ; enddo
enddo
if( stretch_fac /= 1 ) then
do t = 1, ntiles
do j = js, je
do i = is, ie+1
g1(1) = geolon_c(i,j, t)
g1(2) = geolat_c(i,j, t)
g2(1) = geolon_c(i,j+1,t)
g2(2) = geolat_c(i,j+1,t)
dy(i,j,t) = great_circle_dist( g2, g1, radius )
enddo
enddo
enddo
else
do t = 1, ntiles
do j = js, je
do i = is, ie+1
dy(i,j,t) = dx(j,i,t)
enddo
do t = 1, ntiles
do j = js, je
do i = is, ie+1
g1(1) = geolon_c(i,j, t)
g1(2) = geolat_c(i,j, t)
g2(1) = geolon_c(i,j+1,t)
g2(2) = geolat_c(i,j+1,t)
dy(i,j,t) = great_circle_dist( g2, g1, radius )
enddo
enddo
endif
enddo

if( .not. regional ) then
!--- make sure it is consitent between tiles. The following maybe not necessary.
Expand Down
4 changes: 2 additions & 2 deletions ush/fv3gfs_filter_topo.sh
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ fi

cat > input.nml <<EOF
&filter_topo_nml
grid_file = $mosaic_grid
topo_file = $topo_file
grid_file = "$mosaic_grid"
topo_file = "$topo_file"
mask_field = "land_frac"
regional = $regional
stretch_fac = $stretch
Expand Down

0 comments on commit c5f4e99

Please sign in to comment.