Skip to content

Commit

Permalink
Update to Consortium #162aee9, update scripts (#44)
Browse files Browse the repository at this point in the history
* update icepack, rename snwITDrdg to snwitdrdg (CICE-Consortium#658)

* Change max_blocks for rake tests on izumi (nothread). (CICE-Consortium#665)

* Fix some raketests for izumi

* fix some rake tests

* Makefile: make Fortran object files depend on their dependency files (CICE-Consortium#667)

When 'make' is invoked on the CICE Makefile, the first thing it does is
to try to make the included dependency files (*.d) (which are in fact
Makefiles themselves) [1], in alphabetical order.

The rule to make the dep files have the dependency generator, 'makdep',
as a prerequisite, so when processing the first dep file, make notices
'makdep' does not exist and proceeds to build it. If for whatever reason
this compilation fails, make will then proceed to the second dep file,
notice that it recently tried and failed to build its dependency
'makdep', give up on the second dep file, proceed to the third, and so
on.

In the end, no dep file is produced. Make then restarts itself and
proceeds to build the code, which of course fails catastrophically
because the Fortran source files are not compiled in the right order
because the dependency files are missing.

To avoid that, add a dependency on the dep file to the rules that make
the object file out of the Fortran source files. Since old-fashioned
suffix rules cannot have their own prerequisites [2], migrate the rules
for the Fortran source files to use pattern rules [3] instead. While at
it, also migrate the rule for the C source files.

With this new dependency, the builds abort early, before trying to
compile the Fortran sources, making it easier to understand what
has gone wrong.

Since we do not use suffix rules anymore, remove the '.SUFFIXES' line
that indicates which extension to use suffix rules for (but keep the
line that eliminates all default suffix rules).

[1] https://www.gnu.org/software/make/manual/html_node/Remaking-Makefiles.html
[2] https://www.gnu.org/software/make/manual/html_node/Suffix-Rules.html
[3] https://www.gnu.org/software/make/manual/html_node/Pattern-Rules.html#Pattern-Rules

* Fix multi-pe advection=none bug (CICE-Consortium#664)

* update parsing scripts to improve robustness, fix multi-pe advection=none

* Update cice script to improve performance including
minor refactoring of parse_namelist and parse_settings
to reduce cost and ability to use already setup ice_in file
from a prior case in the suite.

Added commented out timing ability in cice.setup.

Change test default to PEND from FAIL.

* fix cice.setup for case

* add sedbak implementation to support Mac sed

* s/spend/spent

Co-authored-by: David A. Bailey <dbailey@ucar.edu>
Co-authored-by: Philippe Blain <philippe.blain@canada.ca>
  • Loading branch information
3 people authored Nov 30, 2021
1 parent c2c0c4a commit 54e5c34
Show file tree
Hide file tree
Showing 9 changed files with 99 additions and 44 deletions.
71 changes: 60 additions & 11 deletions cice.setup
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/csh -f

#set pd0 = `date -u "+%s%N"`

set ICE_SANDBOX = `pwd`
set ICE_VERSION = unknown
if (-e cicecore/version.txt) then
Expand Down Expand Up @@ -824,8 +826,8 @@ EOF
# set default test output as failure
if (${docase} == 0) then
echo "#---" >! test_output
echo "FAIL ${testname_noid} build" >> test_output
echo "FAIL ${testname_noid} run" >> test_output
echo "PEND ${testname_noid} build" >> test_output
echo "PEND ${testname_noid} run" >> test_output
endif
# from basic script dir to case
Expand Down Expand Up @@ -934,9 +936,21 @@ EOF
if (-e ${fimods}) rm ${fimods}
if (-e ${fsmods}) rm ${fsmods}
# Use an existing ice_in file from the suite if it exists
# to reduce time spent in parse_namelist
set skip_parse_namelist = spval
if (${dosuite} == 1) then
set iceinfn = ../ice_in_save_${grid}${soptions}
if (-e ${iceinfn}) then
echo "use ${iceinfn}"
cp ${iceinfn} ice_in
set skip_parse_namelist = true
endif
endif
# Set decomp info in namelist
cat >! ${fimods} << EOF1
# cice.setup settings
nprocs = ${task}
nx_global = ${ICE_DECOMP_NXGLOB}
ny_global = ${ICE_DECOMP_NYGLOB}
Expand Down Expand Up @@ -965,7 +979,6 @@ EOF1
cat >! ${fsmods} << EOF1
# cice.setup settings
setenv ICE_SANDBOX ${ICE_SANDBOX}
setenv ICE_SCRIPTS ${ICE_SCRIPTS}
setenv ICE_CASENAME ${casename}
Expand Down Expand Up @@ -1034,44 +1047,57 @@ EOF1
foreach name (${grid} $setsx)
set found = 0
if (-e ${ICE_SCRIPTS}/options/set_nml.${name}) then
cat >> ${fimods} << EOF2
# set_nml.${name}
EOF2
cat ${ICE_SCRIPTS}/options/set_nml.${name} >> ${fimods}
cat >> ${fimods} << EOF2
if ("${skip_parse_namelist}" == "true") then
# need to make sure the decomp info from the set_nml is picked up. each case
# has a slightly different decomp that is independent of the ice_in_save file.
# compute that then overwrite by set_nml as needed.
grep -i "distribution_type" ${ICE_SCRIPTS}/options/set_nml.${name} >> ${fimods}
grep -i "processor_shape" ${ICE_SCRIPTS}/options/set_nml.${name} >> ${fimods}
cat >> ${fimods} << EOF2
# using saved ice_in
EOF2
else
cat ${ICE_SCRIPTS}/options/set_nml.${name} >> ${fimods}
cat >> ${fimods} << EOF2
EOF2
endif
echo "adding namelist mods set_nml.${name}"
echo "`date` ${0} adding namelist modes set_nml.${name}" >> ${casedir}/README.case
set found = 1
endif
if (-e ${ICE_SCRIPTS}/options/set_env.${name}) then
cat >> ${fsmods} << EOF2
# set_env.${name}
EOF2
cat ${ICE_SCRIPTS}/options/set_env.${name} >> ${fsmods}
cat >> ${fsmods} << EOF2
EOF2
echo "adding env mods set_env.${name}"
echo "`date` ${0} adding namelist modes set_env.${name}" >> ${casedir}/README.case
set found = 1
endif
if (${found} == 0) then
echo "${0}: ERROR, ${ICE_SCRIPTS}/options/set_[nml,env].${name} not found"
exit -1
endif
end
#set pd1 = `date -u "+%s%N"`
#@ pdd = ( $pd1 - $pd0 ) / 1000000
#echo "tcxp b4 parse $pdd"
${casescr}/parse_settings.sh cice.settings ${fsmods}
if ($status != 0) then
echo "${0}: ERROR, parse_namelist.sh aborted"
echo "${0}: ERROR, parse_settings.sh aborted"
exit -1
endif
${casescr}/parse_namelist.sh ice_in ${fimods}
Expand All @@ -1082,6 +1108,20 @@ EOF2
source ./cice.settings
source ./env.${machcomp} -nomodules || exit 2
${casescr}/parse_namelist_from_env.sh ice_in
if ($status != 0) then
echo "${0}: ERROR, parse_namelist_from_env.sh aborted"
exit -1
endif
#set pd1 = `date -u "+%s%N"`
#@ pdd = ( $pd1 - $pd0 ) / 1000000
#echo "tcxp after parse $pdd"
# Save ice_in in the suite to reduce time spent in parse_namelist
if (${dosuite} == 1) then
if !(-e ${iceinfn}) then
cp ice_in ${iceinfn}
endif
endif
#------------------------------------------------------------
# Generate run script
Expand Down Expand Up @@ -1166,6 +1206,10 @@ EOF
echo ""
endif
#set pd1 = `date -u "+%s%N"`
#@ pdd = ( $pd1 - $pd0 ) / 1000000
#echo "tcxp case done $pdd"
# This is the foreach end for the testsuite
end
# This is the foreach end for the envnames
Expand All @@ -1180,6 +1224,7 @@ if ( ${dosuite} == 1 ) then
cat >> ${tsdir}/suite.submit << EOF0
set nonomatch && rm -f ciceexe.* && unset nonomatch
set nonomatch && rm -f ice_in_save* && unset nonomatch
EOF0
Expand Down Expand Up @@ -1222,6 +1267,10 @@ endif
#---------------------------------------------
#set pd1 = `date -u "+%s%N"`
#@ pdd = ( $pd1 - $pd0 ) / 1000000
#echo "tcxp done $pdd"
echo " "
echo "${0} done"
echo " "
Expand Down
7 changes: 3 additions & 4 deletions configuration/scripts/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ RM := rm
AR := ar

.SUFFIXES:
.SUFFIXES: .F90 .F .c .o

.PHONY: all cice libcice targets target db_files db_flags clean realclean helloworld calchk sumchk bcstchk gridavgchk
all: $(EXEC)
Expand Down Expand Up @@ -169,13 +168,13 @@ libcice: $(OBJS)
@ echo "$(AR) -r $(EXEC) $(OBJS)"
$(AR) -r $(EXEC) $(OBJS)

.c.o:
%.o : %.c
$(CC) $(CFLAGS) $(CPPDEFS) $(INCLDIR) $<

.F.o:
%.o : %.F %.d
$(FC) -c $(FFLAGS) $(FIXEDFLAGS) $(CPPDEFS) $(INCLDIR) $<

.F90.o:
%.o : %.F90 %.d
$(FC) -c $(FFLAGS) $(FREEFLAGS) $(CPPDEFS) $(MODDIR) $(INCLDIR) $<

clean:
Expand Down
18 changes: 8 additions & 10 deletions configuration/scripts/parse_namelist.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ filename=$1
filemods=$2

#echo "$0 $1 $2"
echo "running parse_namelist.sh"
echo "running ${scriptname}"
foundstring="FoundSTRING"
vnamearray=()
valuearray=()
Expand Down Expand Up @@ -43,29 +43,27 @@ do
fi
done

#sed -i 's|\(^\s*'"$vname"'\s*\=\s*\)\(.*$\)|\1'"$value"'|g' $filename
cp ${filename} ${filename}.check
sed -i.sedbak -e 's|\(^[[:space:]]*'"$vname"'[[:space:]]*=[[:space:]]*\)\(.*$\)|\1'"$foundstring"'|g' ${filename}.check
grep -q ${foundstring} ${filename}.check
if [ $? -eq 0 ]; then
grep -q "^[[:space:]]*${vname}[[:space:]]*=" $filename
grepout=$?
if [ ${grepout} -eq 0 ]; then
sed -i.sedbak -e 's|\(^[[:space:]]*'"$vname"'[[:space:]]*=[[:space:]]*\)\(.*$\)|\1'"$value"'|g' ${filename}
if [[ "${found}" == "${foundstring}" ]]; then
vnamearray+=($vname)
valuearray+=($value)
else
valuearray[$found]=${value}
fi
if [[ -e "${filename}.sedbak" ]]; then
rm ${filename}.sedbak
fi
else
echo "${scriptname} ERROR: parsing error for ${vname}"
exit -99
fi
rm ${filename}.check ${filename}.check.sedbak

fi

done < "$filemods"

if [[ -e "${filename}.sedbak" ]]; then
rm ${filename}.sedbak
fi

exit 0
3 changes: 2 additions & 1 deletion configuration/scripts/parse_namelist_from_env.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ if [[ "$#" -ne 1 ]]; then
exit -1
fi

scriptname=`basename "$0"`
filename=$1

#echo "$0 $1"
echo "running parse_namelist_from_env.sh"
echo "running $scriptname"

sed -i.sedbak -e 's|ICE_SANDBOX|'"${ICE_SANDBOX}"'|g' $filename
sed -i.sedbak -e 's|ICE_MACHINE_INPUTDATA|'"${ICE_MACHINE_INPUTDATA}"'|g' $filename
Expand Down
34 changes: 21 additions & 13 deletions configuration/scripts/parse_settings.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ filename=$1
filemods=$2

#echo "$0 $1 $2"
echo "running parse_settings.sh"
echo "running ${scriptname}"
foundstring="FoundSTRING"
vnamearray=()
valuearray=()
Expand All @@ -23,8 +23,11 @@ do
else
#vname=`echo $line | sed "s|\(^\s*set\S*\)\s\{1,100\}\(\S*\)\s\{1,100\}\(\S*\).*$|\2|g"`
#value=`echo $line | sed "s|\(^\s*set\S*\)\s\{1,100\}\(\S*\)\s\{1,100\}\(\S*\).*$|\3|g"`
vname=`echo $line | sed "s|\(^[[:space:]]*set[^[:space:]]*\)[[:space:]][[:space:]]*\([^[:space:]]*\)[[:space:]][[:space:]]*\([^[:space:]]*\).*$|\2|g"`
vname=`echo $line | sed "s|\(^[[:space:]]*set[^[:space:]]*\)[[:space:]][[:space:]]*\([^[:space:]]*\).*$|\2|g"`
value=`echo $line | sed "s|\(^[[:space:]]*set[^[:space:]]*\)[[:space:]][[:space:]]*\([^[:space:]]*\)[[:space:]][[:space:]]*\([^[:space:]]*\).*$|\3|g"`
if [[ "${value}" == "${line}" ]]; then
value=""
fi
# echo "$line $vname $value"

found=${foundstring}
Expand All @@ -43,22 +46,27 @@ do
fi
done

#sed -i 's|\(^\s*set.* '"$vname"' \)[^#]*\(#*.*$\)|\1 '"$value"' \2|g' $filename
sed -i.sedbak -e 's|\(^[[:space:]]*set.* '"$vname"' \)[^#]*\(#*.*$\)|\1 '"$value"' \2|g' $filename

if [[ "${found}" == "${foundstring}" ]]; then
vnamearray+=($vname)
valuearray+=($value)
grep -q "^[[:space:]]*set.* ${vname}[[:space:]]*" $filename
grepout=$?
if [ ${grepout} -eq 0 ]; then
sed -i.sedbak -e 's|\(^[[:space:]]*set.* '"$vname"' \)[^#]*\(#*.*$\)|\1 '"$value"' \2|g' $filename
if [[ "${found}" == "${foundstring}" ]]; then
vnamearray+=($vname)
valuearray+=($value)
else
valuearray[$found]=${value}
fi
else
valuearray[$found]=${value}
fi

if [[ -e "${filename}.sedbak" ]]; then
rm ${filename}.sedbak
echo "${scriptname} ERROR: parsing error for ${vname}"
exit -99
fi

fi

done < "$filemods"

if [[ -e "${filename}.sedbak" ]]; then
rm ${filename}.sedbak
fi

exit 0
4 changes: 2 additions & 2 deletions configuration/scripts/tests/base_suite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,9 @@ restart gx3 4x2 fsd12,debug,short
smoke gx3 8x2 fsd12ww3,diag24,run1day
smoke gx3 4x1 isotope,debug
restart gx3 8x2 isotope
smoke gx3 4x1 snwITDrdg,snwgrain,icdefault,debug
smoke gx3 4x1 snwitdrdg,snwgrain,icdefault,debug
smoke gx3 4x1 snw30percent,icdefault,debug
restart gx3 8x2 snwITDrdg,icdefault,snwgrain
restart gx3 8x2 snwitdrdg,icdefault,snwgrain
restart gx3 4x4 gx3ncarbulk,iobinary
restart gx3 4x4 histall,precision8,cdf64
smoke gx3 30x1 bgcz,histall
Expand Down
4 changes: 2 additions & 2 deletions configuration/scripts/tests/nothread_suite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ restart gx3 16x1 gx3ncarbulk,iobinary
restart gx3 12x1 alt01
restart gx3 16x1 alt02
restart gx3 8x1 alt03
restart gx3 16x1 alt04
restart gx3 16x1x5x29x6 alt04
restart gx3 16x1 alt05
restart gx3 20x1 alt06
restart gx3 18x1 alt01,debug,short
Expand Down Expand Up @@ -66,7 +66,7 @@ restart gx3 16x1x8x10x10 droundrobin restart_gx3_8x1x25x29x2_
restart gx3 6x1x50x58x1 droundrobin restart_gx3_8x1x25x29x2_dslenderX2
restart gx3 8x1x19x19x5 droundrobin restart_gx3_8x1x25x29x2_dslenderX2
restart gx3 20x1x5x29x20 dsectrobin,short restart_gx3_8x1x25x29x2_dslenderX2
restart gx3 32x1x5x10x10 drakeX2 restart_gx3_8x1x25x29x2_dslenderX2
restart gx3 32x1x5x10x12 drakeX2 restart_gx3_8x1x25x29x2_dslenderX2
restart gx3 16x1x8x10x10 droundrobin,maskhalo restart_gx3_8x1x25x29x2_dslenderX2
restart gx3 4x1x25x29x4 droundrobin restart_gx3_8x1x25x29x2_dslenderX2

Expand Down

0 comments on commit 54e5c34

Please sign in to comment.