Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F123110861
tst_2+2
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Thu, Jul 24, 23:39
Size
13 KB
Mime Type
text/x-shellscript
Expires
Sat, Jul 26, 23:39 (2 d)
Engine
blob
Format
Raw Data
Handle
27638774
Attached To
R2795 mitgcm_lac_leman_abirani
tst_2+2
View Options
#! /usr/bin/env bash
# $Header: /u/gcmpack/MITgcm/tools/tst_2+2,v 1.13 2016/01/11 20:46:05 jmc Exp $
# $Name: $
rnp_loc
()
{
# rnp_loc arg_1 arg_2
# rename files with prefix = 'arg_1' to files with prefix = 'arg_2'
if
[
$prt
-ge 1
]
;
then
echo
' rnp_loc:'
$1
$2
;
fi
# rnp -s $1 $2
listY
=
`
ls -1
$1
*
`
for
yy in
$listY
do
zz
=
`
echo
$yy
| sed
"s/^$1/$2/"
`
if
[
$prt
-ge 2
]
;
then
echo
' '
$cmdMV
$yy
$zz
;
fi
if
test
$action
=
1 ;
then
$cmdMV
$yy
$zz
;
fi
done
}
#-----------
move_outp
()
{
# move_outp arg_1
# move mitgcm output files to directory 'arg_1'
if
[
$prt
-ge 1
]
;
then
echo
' move_outp:'
$1
;
fi
mv *.data *.meta
$1
listF
=
`
ls -1 *.txt STD???.00?? 2> /dev/null
`
if
test
"x$listF"
!
=
x ;
then
mv
$listF
$1
;
fi
#- move back sym link:
listL
=
`
find
$1
-type l
`
ttd
=
`
echo
$listL
| wc -w
`
#echo "ttd=$ttd"
if
test
$ttd
!
=
0 ;
then
#echo "listL='$listL'"
if
[
$prt
-ge 2
]
;
then
echo
" mv back:"
$listL
| sed
"s/$1\///g"
;
fi
mv
$listL
.
fi
}
#---------------------------
#- exit status:
# 0 -> test is successful
# 1 -> fail in 1rst run
# 2 -> fail in 2nd run
# 3 -> fail in 3rd run
# 4 -> pickup*.data (written at the end of 2+2 & 4 it run) are different
# 5 -> pickup*.meta (written at the end of 2+2 & 4 it run) are different
# 6 -> missing 'data.tst' file (removed or not yet generated ?)
# 7 -> missing executable or standard output from previous run
# 8 -> missing information (in standard output of previous run) about pickup
# 9 -> error in argument list
#- default:
Nit
=
2
prt
=
1
# 1 = print some informations ; 2 = print more informations
action
=
1
cmdMV
=
'mv -f'
tmpDir
=
'temp_tst'
wait2run
=
0
# if needs sometime for file system syncro on all nodes
#- default executable, command-line , using MPI:
gcmEXE
=
./mitgcmuv
cmdEXE
=
mpi
=
0
nArg
=
$#
prev
=
for
xx ;
do
#echo "xx='$xx'"
# If the previous option needs an argument, assign it.
if
test
-n
"$prev"
;
then
eval
"$prev=\$xx"
prev
=
nArg
=
`
expr
$nArg
- 2
`
continue
fi
case
$xx
in
-mpi
)
mpi
=
1 ;
nArg
=
`
expr
$nArg
- 1
`
;;
-exe
)
prev
=
gcmEXE ;;
-command
)
prev
=
cmdEXE ;;
*
)
flag
=
$xx
;;
esac
done
#echo "cmdEXE='$cmdEXE'"
#echo "nArg=$nArg ; mpi=$mpi ; flag='$flag'"
case
$nArg
in
1
)
;;
*
)
echo
"Usage: `basename $0` flag [-mpi] [-exe EXECUTABLE] [-command COMMAND]"
echo
" Check restart: compare 1 run of 2 x $Nit it long"
echo
" with 2 consecutive runs of $Nit it long each"
echo
" where: flag = 0 -> prepare (from a previous run) pickup & data files"
echo
" flag = 1 -> do the 3 runs (using COMMAND"
echo
" or simply using EXECUTABLE, default=$gcmEXE)"
echo
" flag = 2 -> compare std_outp"
echo
" flag = 3 -> compare pickup files"
echo
" flag = 4 -> clean-up output files"
echo
" flag = NC -> do 0,1,2,3 sequentially (no cleaning)"
echo
" flag = All -> do 0,1,2,3,4 sequentially"
exit
9 ;;
esac
if
test
$flag
=
'NC'
-o
$flag
=
'All'
;
then
Multi
=
1 ;
else
Multi
=
0 ;
fi
#-- set the run-command :
if
test
"x$cmdEXE"
=
x
then
if
[
$mpi
-ge 1
]
;
then
cmdEXE
=
"mpirun -machinefile ../../mf -v -np 2 $gcmEXE"
else
cmdEXE
=
$gcmEXE
fi
fi
echo
"cmdEXE='$cmdEXE'"
#=========================
if
test
$flag
=
'0'
-o
$Multi
=
'1'
;
then
#----------------------------------------------------------------------
# check for executable:
if
test
! -x
$gcmEXE
;
then
echo
"file '$gcmEXE' does not exist or is not executable"
exit
7
fi
# last pickup written (from previous run):
if
[
$mpi
-ge 1
]
then
outpRun
=
'STDOUT.0000'
else
outpRun
=
'output.txt'
fi
if
test
-r
$outpRun
then
# grep ' %CHECKPOINT ' $outpRun | tail -1
lastPick
=
`
grep
' %CHECKPOINT '
$outpRun
| sed
's/^.*%CHECKPOINT //'
| tail -1
`
if
test
"x$lastPick"
=
x
then
echo
"no pickup information written in '$outpRun' from previous run"
exit
8
else
iter
=
`
echo
$lastPick
| awk
'{print $1}'
`
sufx
=
`
echo
$lastPick
| awk
'{print $2}'
`
echo
"from previous run $outpRun, lastPick='$lastPick' ; iter='$iter' ; sufx='$sufx'"
fi
else
echo
"no standard output file '$outpRun' from previous run"
exit
7
fi
#-------------------------
echo
"prepare parameter file 'data.tst' :"
cp -p -f data data.tst
listOut
=
'startTime endTime nIter0 nTimeSteps nEndIter chkPtFreq pChkPtFreq'
listOut
=
$listOut
' pickupSuff usePickupBeforeC54 mdsioLocalDir pickupStrictlyMatch'
#- comment out (in data.tst) all parameters from list: 'listOut'
for
yy in
$listOut
do
if
[
$prt
-ge 2
]
;
then
echo
-n
' commenting out:'
$yy
;
fi
nn
=
`
grep -i -c
"^ *$yy *="
data.tst
`
if
[
$nn
-ge 1
]
then
listN
=
`
grep -i -n
"^ *$yy *="
data.tst | sed
's/:.*$//'
`
if
[
$prt
-ge 2
]
;
then
echo
" : found on line: $listN"
;
fi
for
ll in
$listN
do
sed
"$ll s/^./#&/"
data.tst > data.tmp_
$$
# diff data.tmp_$$ data.tst
mv -f data.tmp_
$$
data.tst
done
else if
[
$prt
-ge 2
]
;
then
echo
' : not found'
;
fi
fi
done
if
[
$prt
-ge 2
]
;
then
echo
' '
;
fi
# add nIter0 & nTimeSteps in namelist "PARM03":
Dbl
=
`
expr
$Nit
\*
2
`
sed
"/^ *\&PARM03/a \ nTimeSteps=$Dbl,"
data.tst > data.tmp_
$$
mv -f data.tmp_
$$
data.tst
sed
"/^ *\&PARM03/a \ nIter0=$iter,"
data.tst > data.tmp_
$$
mv -f data.tmp_
$$
data.tst
echo
"prepare file 'data.tst' : done"
if
[
$prt
-ge 1
]
;
then
echo
' diff data.tst data'
; diff data.tst data ;
echo
' '
;
fi
#---- clean up current dir: move output to temp_tst dir:
if
test
$action
=
1 ;
then
rm -rf
$tmpDir
mkdir
$tmpDir
mv -f *.data
$tmpDir
mv -f *.meta
$tmpDir
mv -f *.txt
$tmpDir
2> /dev/null
mv -f STD???.0
[
0-9
][
0-9
][
0-9
]
$tmpDir
#- move main parameter file "data":
mv -f data
$tmpDir
#- do not deal with MNC pickup at all:
cp -p -f data.pkg data.tmp_
$$
mv -f data.pkg
$tmpDir
mv -f data.tmp_
$$
data.pkg
yy
=
'useMNC'
if
[
$prt
-ge 2
]
;
then
echo
-n
" commenting out: $yy in data.pkg"
;
fi
nn
=
`
grep -i -c
"^ *$yy *="
data.pkg
`
if
[
$nn
-ge 1
]
then
listN
=
`
grep -i -n
"^ *$yy *="
data.pkg | sed
's/:.*$//'
`
if
[
$prt
-ge 2
]
;
then
echo
" : found on line: $listN"
;
fi
for
ll in
$listN
do
sed
"$ll s/^./#&/"
data.pkg > data.tmp_
$$
if
[
$prt
-ge 1
]
;
then
echo
' changes in data.pkg'
diff data.tmp_
$$
data.pkg ;
echo
' '
;
fi
mv -f data.tmp_
$$
data.pkg
done
else if
[
$prt
-ge 2
]
;
then
echo
' : not found'
;
echo
' '
;
fi
fi
fi
#-------------------------
#-- link back pickup files
listS
=
`
ls
$tmpDir
/pickup*.
${
sufx
}
* 2> /dev/null | head -1
`
if
test
"x$listS"
!
=
x ;
then
if
[
$prt
-ge 1
]
;
then
echo
' link back:'
$tmpDir
'/pickup*.'
${
sufx
}
'*'
;
fi
if
test
$action
=
1 ;
then
ln -s
$tmpDir
/pickup*.
${
sufx
}
* . ;
fi
fi
#- rename pickup (if needed)
nIt0c
=
`
printf
"%10.10i\n"
$iter
`
if
test
$sufx
=
$nIt0c
then
echo
"no need to change pickup sufix"
else
listP
=
`
ls pickup*.
${
sufx
}
* 2> /dev/null | sed
's/\..*//g'
| uniq
`
if
test
"x$listP"
=
x
then
echo
' rename'
$sufx
'->'
$nIt0c
': no file to rename'
else
if
[
$prt
-ge 1
]
;
then
echo
' rename'
$sufx
'->'
$nIt0c
'for all:'
$listP
;
fi
for
yy in
$listP
do
rnp_loc
$yy
.
${
sufx
}
$yy
.
$nIt0c
done
fi
fi
#----------------------------------------------------------------------
fi
#=========================
if
test
-r data.tst ;
then
#- extract length of runs & starting iter number from file "data.tst"
num0
=
`
sed -n
's/^ nIter0=//p'
data.tst | sed
's/,//g'
| sed
's/ //g'
`
Dbl
=
`
sed -n
's/^ nTimeSteps=//p'
data.tst | sed
's/,//g'
`
Nit
=
`
expr
$Dbl
/ 2
`
# Nit = Nb of iter of 2nd & 3rd run (1rst one is 2 x Nit iter long)
else
echo
'=> Need a readable "data.tst" file for the 2 x Nit iterations run'
exit
6
fi
#- dir where to put the results :
dir1
=
res_2it
dir2
=
res_1iA
dir3
=
res_1iB
#---------------------------
num1
=
`
expr
$num0
+
$Nit
`
num2
=
`
expr
$num0
+
$Dbl
`
num0c
=
`
printf
"%10.10i\n"
$num0
`
num1c
=
`
printf
"%10.10i\n"
$num1
`
num2c
=
`
printf
"%10.10i\n"
$num2
`
echo
" start-end iter: $num0 , $num1 , $num2"
echo
" sufix: '$num0c' '$num1c' '$num2c'"
echo
' cmdEXE='
$cmdEXE
#exit
#---------------------------
if
test
$flag
=
'1'
-o
$Multi
=
'1'
;
then
#----------------------------------------------------------------------
#- check at the end of each run for pickup with prefix:
pref
=
'pickup'
offLine
=
`
grep -i -c
'^ *useOffLine *= *\.TRUE\.'
data.pkg
`
if
[
$offLine
-ge 1
]
;
then
pref
=
'pickup_ptracers'
;
fi
#---------------------------
if
test
-d
$dir1
-o -d
$dir2
-o -d
$dir3
then
echo
-n
'remove dir: '
if
test
-d
$dir1
;
then
echo
-n
$dir1
' , '
; rm -r
$dir1
;
fi
if
test
-d
$dir2
;
then
echo
-n
$dir2
' , '
; rm -r
$dir2
;
fi
if
test
-d
$dir3
;
then
echo
-n
$dir3
' , '
; rm -r
$dir3
;
fi
echo
' '
fi
mkdir
$dir1
$dir2
$dir3
rm -f STDERR.0000
#--- 1rst run ( 2 x Nit iter )
cp -p data.tst data
echo
'==> START RUN 2 x'
$Nit
'it'
if
[
$mpi
-ge 1
]
then
sleep
$wait2run
$cmdEXE
> TTT.out.2it 2>&1
mv STDOUT.0000 std_outp.2it
cat TTT.out.2it
else
$cmdEXE
> std_outp.2it
fi
if
test
! -s std_outp.2it
then
echo
"empty or no output file: 'std_outp.2it' => exit"
;
exit
1 ;
fi
mv STDERR.0000 std__err.2it
out
=
`
egrep -c
'STOP ABNORMAL END'
std_outp.2it
`
if
test
$out
!
=
0
then
echo
"==> RUN 2 x $Nit it : ABNORMAL END => exit"
;
exit
1 ;
fi
listF
=
`
ls -1
$pref
.ckptA*.data 2> /dev/null
`
if
test
"x$listF"
=
x
then
echo
"==> RUN 2 x $Nit it STOP without writing $pref => exit"
;
exit
1
else
echo
"==> END RUN 2 x $Nit it"
;
fi
listP
=
`
ls pickup*.ckptA* | sed
's/\..*//g'
| uniq
`
echo
' listP='
$listP
for
xx in
$listP
do
rnp_loc
$xx
.ckptA
$xx
.
$num2c
done
move_outp
$dir1
#--- 2nd run ( Nit iter , restart from same Iter = num0 as 1rst run )
sed
"s/^ nTimeSteps=$Dbl/ nTimeSteps=$Nit/g"
data.tst > data.tmp
mv -f data.tmp data
echo
'==> START RUN 1iA'
if
[
$mpi
-ge 1
]
then
sleep
$wait2run
$cmdEXE
> TTT.out.1iA 2>&1
mv STDOUT.0000 std_outp.1iA
cat TTT.out.1iA
else
$cmdEXE
> std_outp.1iA
fi
if
test
! -s std_outp.1iA
then
echo
"empty or no output file: 'std_outp.1iA' => exit"
;
exit
2 ;
fi
mv STDERR.0000 std__err.1iA
out
=
`
egrep -c
'STOP ABNORMAL END'
std_outp.1iA
`
if
test
$out
!
=
0
then
echo
"==> RUN 1iA : ABNORMAL END => exit"
;
exit
2 ;
fi
listF
=
`
ls -1
$pref
.ckptA*.data 2> /dev/null
`
if
test
"x$listF"
=
x
then
echo
"==> RUN 1iA STOP without writing $pref => exit"
;
exit
2
else
echo
"==> END RUN 1iA"
;
fi
for
xx in
$listP
do
rnp_loc
$xx
.ckptA
$xx
.
$num1c
done
move_outp
$dir2
#--- 3rd run ( Nit iter , restart from 2nd )
ln -s
$dir2
/pickup*.
$num1c
.* .
sed
"s/^ nIter0=$num0/ nIter0=$num1/g"
data > data.tmp
mv -f data.tmp data
echo
'==> START RUN 1iB'
if
[
$mpi
-ge 1
]
then
sleep
$wait2run
$cmdEXE
> TTT.out.1iB 2>&1
mv STDOUT.0000 std_outp.1iB
cat TTT.out.1iB
else
$cmdEXE
> std_outp.1iB
fi
if
test
! -s std_outp.1iB
then
echo
"empty or no output file: 'std_outp.1iB' => exit"
;
exit
3 ;
fi
mv STDERR.0000 std__err.1iB
out
=
`
egrep -c
'STOP ABNORMAL END'
std_outp.1iB
`
if
test
$out
!
=
0
then
echo
"==> RUN 1iB : ABNORMAL END => exit"
;
exit
3 ;
fi
listF
=
`
ls -1
$pref
.ckptA*.data 2> /dev/null
`
if
test
"x$listF"
=
x
then
echo
"==> RUN 1iB STOP without writing $pref => exit"
;
exit
3
else
echo
"==> END RUN 1iB"
;
fi
for
xx in
$listP
do
rnp_loc
$xx
.ckptA
$xx
.
$num2c
done
# remove pickup*.$mun1c* sym-link:
find . ! -name . -prune -type l -name
'pickup*.'
${
num1c
}
'*'
-exec rm
{}
\;
move_outp
$dir3
rm data
#----------------------------------------------------------------------
fi
if
test
$flag
=
'2'
-o
$Multi
=
'1'
;
then
#----------------------------------------------------------------------
listCGini
=
"2"
#-- check if using 3-D solver
nn
=
`
grep -i -c
"^ *nonHydrostatic *= *\.TRUE\."
data.tst
`
if
[
$nn
-eq 0
]
;
then
nn
=
`
grep -i -c
"^ *implicitIntGravWave *= *\.TRUE\."
data.tst
`
fi
if
[
$nn
-ge 1
]
;
then
listCGini
=
"$listCGini 3"
;
fi
for
nn in
$listCGini
do
echo
' '
;
echo
"== compare cg${nn}d_init_res :"
echo
' run 1iA:'
grep
"cg${nn}d_init_res"
std_outp.1iA
\
| sed
"s/.* cg${nn}d_init_res =//"
echo
' run 1iB:'
grep
"cg${nn}d_init_res"
std_outp.1iB
\
| sed
"s/.* cg${nn}d_init_res =//"
echo
' run 2it:'
grep
"cg${nn}d_init_res"
std_outp.2it
\
| sed
"s/.* cg${nn}d_init_res =//"
done
#----------------------------------------------------------------------
fi
if
test
$flag
=
'3'
-o
$Multi
=
'1'
;
then
#----------------------------------------------------------------------
echo
' '
echo
"== diff pickup files : end of 1rst run (2x$Nit it) & end of 3rd run (2nd $Nit it)"
listP
=
`
(
cd
$dir1
; ls pickup*.
$num2c
* | sed
's/\..*//g'
| uniq
)
`
chkmeta
=
'Y'
for
yy in
$listP
do
listY
=
`
(
cd
$dir1
; ls
$yy
.
$num2c
*.data | sed
"s/$yy\.$num2c//"
| sed
"s/data$//"
)
`
zz
=
$yy
.
$num2c
echo
'--> file='
$zz
', listY='
$listY
for
xx in
$listY
do
echo
' diff'
$dir1
/
$zz
${
xx
}
data
$dir3
diff
$dir1
/
$zz
${
xx
}
data
$dir3
out
=
$?
if
test
$out
!
=
0 ;
then
#-- refined check: exclude diff between +0 and -0
nbDif
=
`
cmp -l
$dir1
/
$zz
${
xx
}
data
$dir3
/
$zz
${
xx
}
data
\
| sed -e
'/ 0 200$/d'
-e
'/ 200 0$/d'
| wc -l
`
if
test
$nbDif
!
=
0 ;
then
echo
"Diff outp= $out (nb-Diff= $nbDif ) ==> stop"
exit
4
fi
fi
if
test
$chkmeta
=
'Y'
-a -f
$dir1
/
$zz
${
xx
}
meta ;
then
echo
' diff'
$dir1
/
$zz
${
xx
}
meta
$dir3
diff
$dir1
/
$zz
${
xx
}
meta
$dir3
out
=
$?
if
test
$out
!
=
0 ;
then
echo
'Diff outp='
$out
' ==> stop'
exit
5
fi
fi
done
done
#----------------------------------------------------------------------
fi
if
test
$flag
=
'4'
-o
$flag
=
'All'
;
then
#-------------
echo
' '
echo
"== clean-up and reset :"
echo
'--> remove pickup*.'
$num0c
'* sym-links:'
#find . ! -name . -prune -type l -name 'pickup*.'${num0c}'*' -exec rm {} \;
listS
=
`
find . ! -name . -prune -type l -name
'pickup*.'
${
num0c
}
'*'
`
if
[
$prt
-ge 2
]
;
then
echo
' rm'
$listS
;
fi
rm -f
$listS
echo
'--> remove output dir and output files:'
echo
' rm -rf'
$dir1
$dir2
$dir3
rm -rf
$dir1
$dir2
$dir3
echo
' rm -f'
std_????.?i?
rm -f std_????.?i?
rm -f TTT.out.?i? 2> /dev/null
echo
' rm -f'
data.pkg data.tst
rm -f data.pkg data.tst
#- move back files from temp_tst dir:
if
test
-d
$tmpDir
;
then
echo
"--> move back files from 'temp_tst' dir."
cd
$tmpDir
; mv -f * .. ;
cd
..
rmdir
$tmpDir
fi
#-------------
fi
exit
0
Event Timeline
Log In to Comment