[cig-commits] r12719 - seismo/3D/SPECFEM3D_GLOBE/trunk
leif at geodynamics.org
leif at geodynamics.org
Tue Aug 26 18:45:50 PDT 2008
Author: leif
Date: 2008-08-26 18:45:50 -0700 (Tue, 26 Aug 2008)
New Revision: 12719
Modified:
seismo/3D/SPECFEM3D_GLOBE/trunk/
Log:
Added postprocessing steps to BuildBot script.
Property changes on: seismo/3D/SPECFEM3D_GLOBE/trunk
___________________________________________________________________
Name: buildbot:script
- #!/bin/sh
buildnumber=$1
CODE_DIR=`pwd`
export CODE_DIR
######################################################################
# configuration
bench_dir=/home/siemins/buildbot
runs="forward kernel"
#---------------------------------------------------------------------
# forward run
function get_forward_parameters {
SAVE_FORWARD=.false.
NCHUNKS=6
NPROC_XI=6
NPROC_ETA=6
MODEL=1D_transversely_isotropic_prem
GRAVITY=.true.
ATTENUATION=.true.
RECORD_LENGTH_IN_MINUTES=50.0d0
}
#---------------------------------------------------------------------
# kernel run
function get_kernel_parameters {
SAVE_FORWARD=.true.
NCHUNKS=6
NPROC_XI=6
NPROC_ETA=6
MODEL=1D_isotropic_prem
GRAVITY=.false.
ATTENUATION=.false.
RECORD_LENGTH_IN_MINUTES=12.0d0
}
######################################################################
# utilities
function create_par_file {
sed -e "
s:^SIMULATION_TYPE .*:SIMULATION_TYPE = 1:
s:^SAVE_FORWARD .*:SAVE_FORWARD = $SAVE_FORWARD:
s:^NCHUNKS .*:NCHUNKS = $NCHUNKS:
s:^ANGULAR_WIDTH_XI_IN_DEGREES .*:ANGULAR_WIDTH_XI_IN_DEGREES = 90.d0 :
s:^ANGULAR_WIDTH_ETA_IN_DEGREES .*:ANGULAR_WIDTH_ETA_IN_DEGREES = 90.d0 :
s:^NEX_XI .*:NEX_XI = 288 :
s:^NEX_ETA .*:NEX_ETA = 288 :
s:^NPROC_XI .*:NPROC_XI = $NPROC_XI :
s:^NPROC_ETA .*:NPROC_ETA = $NPROC_ETA :
s:^MODEL .*:MODEL = $MODEL :
s:^OCEANS .*:OCEANS = .false. :
s:^ELLIPTICITY .*:ELLIPTICITY = .false. :
s:^TOPOGRAPHY .*:TOPOGRAPHY = .false. :
s:^GRAVITY .*:GRAVITY = $GRAVITY :
s:^ROTATION .*:ROTATION = .false. :
s:^ATTENUATION .*:ATTENUATION = $ATTENUATION :
s:^ABSORBING_CONDITIONS .*:ABSORBING_CONDITIONS = .false. :
s:^RECORD_LENGTH_IN_MINUTES .*:RECORD_LENGTH_IN_MINUTES = $RECORD_LENGTH_IN_MINUTES :
s:^MOVIE_SURFACE .*:MOVIE_SURFACE = .false. :
s:^MOVIE_VOLUME .*:MOVIE_VOLUME = .false. :
s:^SAVE_MESH_FILES .*:SAVE_MESH_FILES = .false. :
s:^NUMBER_OF_RUNS .*:NUMBER_OF_RUNS = 1 :
s:^LOCAL_PATH .*:LOCAL_PATH = $LOCAL_PATH :
s:^OUTPUT_SEISMOS_ASCII_TEXT .*:OUTPUT_SEISMOS_ASCII_TEXT = .true. :
s:^ROTATE_SEISMOGRAMS_RT .*:ROTATE_SEISMOGRAMS_RT = .false. :
s:^WRITE_SEISMOGRAMS_BY_MASTER .*:WRITE_SEISMOGRAMS_BY_MASTER = .false. :
s:^SAVE_ALL_SEISMOS_IN_ONE_FILE .*:SAVE_ALL_SEISMOS_IN_ONE_FILE = .false. :
s:^USE_BINARY_FOR_LARGE_FILE .*:USE_BINARY_FOR_LARGE_FILE = .false. :
s:^PRINT_SOURCE_TIME_FUNCTION .*:PRINT_SOURCE_TIME_FUNCTION = .false. :
" $CODE_DIR/DATA/Par_file > DATA/Par_file
}
function run_job {
bsub <<EOF
#!/bin/sh
#BSUB -J buildbot
#BSUB -q normal
#BSUB -W 2880
#BSUB -n $NPROC
#BSUB -a mpich_gm
#BSUB -o OUTPUT_FILES/%J.o
#BSUB -K
echo \$LSB_MCPU_HOSTS > OUTPUT_FILES/lsf_machines
cat OUTPUT_FILES/lsf_machines | xargs -n 2 echo | awk '{ print \$1 }' > OUTPUT_FILES/machines
shmux -M50 -Sall -c "mkdir -p $LOCAL_PATH" - < OUTPUT_FILES/machines >/dev/null
mpirun.lsf --gm-no-shmem --gm-copy-env \$PWD/xmeshfem3D
mpirun.lsf --gm-no-shmem --gm-copy-env \$PWD/xspecfem3D
shmux -M 50 -S all -c "rm -rf $LOCAL_PATH" - < OUTPUT_FILES/machines >/dev/null
EOF
if [ $? -ne 0 ]; then
status=1
fi
}
######################################################################
echo Build $buildnumber
status=0
mkdir output || exit $?
if [ ! -d $bench_dir ]; then
# We are not running on a cluster; simply build the code.
./configure
status=$?
if [ $status -eq 0 ]; then
make
status=$?
fi
mv config.log output || exit $?
tar cvzf output.bbl output || exit $?
exit $status
fi
for run in $runs; do
cd $CODE_DIR || exit $?
mkdir output/$run || exit $?
cd output/$run || exit $?
mkdir DATA OUTPUT_FILES obj || exit $?
cp $CODE_DIR/DATA/CMTSOLUTION DATA || exit $?
cp $CODE_DIR/DATA/STATIONS DATA || exit $?
get_${run}_parameters
LOCAL_PATH=/scratch/buildbot-$buildnumber-$run
create_par_file
for pathname in $CODE_DIR/DATA/*; do
filename=`basename $pathname`
if [ ! -e DATA/$filename ]; then
ln -s $pathname DATA || exit $?
fi
done
# Currently, BuildBot always sets FC to 'mpif90';
# force it to 'ifort' in order to get the right flags.
$CODE_DIR/configure FC=ifort
if [ $? -eq 0 ]; then
make
if [ $? -ne 0 ]; then
status=1
fi
else
status=1
fi
NPROC=$(( $NCHUNKS * $NPROC_XI * $NPROC_ETA ))
run_job
done
cd $CODE_DIR || exit $?
tar cvzf output.bbl output/*/config.log output/*/output_*.txt || exit $?
exit $status
+ #!/bin/sh
buildnumber=$1
CODE_DIR=`pwd`
export CODE_DIR
######################################################################
# configuration
bench_dir=/home/siemins/buildbot
#runs="forward kernel"
runs="forward"
STATIONS=${bench_dir}/DATA/STATIONS
CMTSOLUTION=${bench_dir}/DATA/CMTSOLUTION
#---------------------------------------------------------------------
# forward run
function get_forward_parameters {
SAVE_FORWARD=.false.
NCHUNKS=6
NPROC_XI=6
NPROC_ETA=6
MODEL=1D_transversely_isotropic_prem
GRAVITY=.true.
ATTENUATION=.true.
RECORD_LENGTH_IN_MINUTES=50.0d0
}
#---------------------------------------------------------------------
# kernel run
function get_kernel_parameters {
SAVE_FORWARD=.true.
NCHUNKS=6
NPROC_XI=6
NPROC_ETA=6
MODEL=1D_isotropic_prem
GRAVITY=.false.
ATTENUATION=.false.
RECORD_LENGTH_IN_MINUTES=12.0d0
}
######################################################################
# visualization
function visu_seismo {
# 11/08/2008
#### Plot seismograms with increasing distance for vertical, radial and transverse
# must be used in ASCII/
# set up station to display (increasing distance)
cat >stations <<EOF
SPB.G
FDF.G
TRIS.G
SCZ.G
SFJD.IU
ECH.G
RAO.IU
ATD.G
AIS.G
WUS.G
INU.G
EOF
nstation=`wc -l stations | awk '{print $1}'`
# some plotting parameters
gmtset DOTS_PR_INCH 600
region_axes=-R-10/3000/0.01/0.10
proj_axes=-JX18c/25c
region_loc=-R-10/3000/-0.005/0.03
proj=-JX18c
channel_vertical=LHZ
channel_radial=LHR
channel_transverse=LHT
for orientation in vertical radial transverse; do
channel_var=channel_$orientation
channel=${!channel_var}
output=$orientation.ps
output_pdf=$orientation.pdf
psbasemap $proj_axes $region_axes -Ba500f500Swen -K -Y2c -X2c -P > $output
# write axis label, title and legend
echo "1400 0.0070 14 0 4 LT time [s]" > tmp
pstext tmp $proj_axes $region_axes -O -K -N >> $output
echo "1200 0.105 14 0 4 LT $orientation displacement" > tmp
pstext tmp $proj_axes $region_axes -O -K -N >> $output
echo "2000 0.013" > tmp
echo "2250 0.013" >> tmp
psxy tmp $region_axes $proj_axes -O -K -W1/0/0/255 >> $output
echo "2300 0.014 14 0 4 LT normal-mode" > tmp
pstext tmp $proj_axes $region_axes -O -K >> $output
echo "2000 0.015" > tmp
echo "2250 0.015" >> tmp
psxy tmp $region_axes $proj_axes -O -K -W1/255/0/0 >> $output
echo "2300 0.0155 14 0 4 LT sem" > tmp
pstext tmp $proj_axes $region_axes -O -K >> $output
i=1
for file in `cat stations`; do
file1="$file.$channel.qmxd.sac.ascii"
file2="$file.$channel.semd.ascii.sac.ascii"
echo "0 0.001 12 0 4 LT $file" > tmp
if [ $i == 1 ]; then
psxy $file1 $region_loc $proj -O -K -W1/0/0/255 >> $output
else
psxy $file1 $region_loc $proj -O -K -W1/0/0/255 -Y2.0c >> $output
fi
pstext tmp $region_loc $proj -O -K >> $output
if [ $i == $nstation ]; then
psxy $file2 $region_loc $proj -O -W1/255/0/0 >> $output
else
psxy $file2 $region_loc $proj -O -K -W1/255/0/0 >> $output
fi
let i=i+1
done
gmtset DOTS_PR_INCH 300
ps2pdf $output $output_pdf
done
rm stations tmp
#### Plot PKPdf seismograms
# some plotting parameters
gmtset DOTS_PR_INCH 600
output=pkpdf.ps
output_pdf=pkpdf.pdf
proj_axes=-JX18c/15c
region_axes=-R127/233/900/1500
region_loc=-R-0.0015/0.0015/900/1500
proj=-JX1c/15c
psbasemap $proj_axes $region_axes -Ba10f10/a100f100SWen -K -Y4c -X2c -P > $output
# write title and axis labels
echo "165 860 14 0 4 LT epicentral distance [degrees]" > tmp
pstext tmp $proj_axes $region_axes -O -K -N >> $output
echo "115 1180 14 90 4 LT time [s]" > tmp
pstext tmp $proj_axes $region_axes -O -K -N >> $output
echo "170 1550 14 0 4 LT vertical displacement" > tmp
pstext tmp $proj_axes $region_axes -O -K -N >> $output
# where plot the legend ?
j=130
while [ $j -lt 231 ]; do
file1="S$j.DK.LHZ.qmxd.sac.ascii"
awk '{print $2,$1}' $file1 > tmp
if [ $j == 130 ]; then
psxy tmp $region_loc $proj -O -K -W1/0/0/255 >> $output
else
psxy tmp $region_loc $proj -O -K -W1/0/0/255 -X0.34c >> $output
fi
file2="S$j.DK.LHZ.semd.ascii.sac.ascii"
awk '{print $2,$1}' $file2 > tmp
if [ $j == 230 ]; then
psxy tmp $region_loc $proj -O -W1/255/0/0 >> $output
else
psxy tmp $region_loc $proj -O -K -W1/255/0/0 >> $output
fi
let j=j+2
done
gmtset DOTS_PR_INCH 300
rm tmp
ps2pdf $output $output_pdf
rm vertical.ps radial.ps transverse.ps pkpdf.ps
}
######################################################################
# utilities
function create_par_file {
sed -e "
s:^SIMULATION_TYPE .*:SIMULATION_TYPE = 1:
s:^SAVE_FORWARD .*:SAVE_FORWARD = $SAVE_FORWARD:
s:^NCHUNKS .*:NCHUNKS = $NCHUNKS:
s:^ANGULAR_WIDTH_XI_IN_DEGREES .*:ANGULAR_WIDTH_XI_IN_DEGREES = 90.d0 :
s:^ANGULAR_WIDTH_ETA_IN_DEGREES .*:ANGULAR_WIDTH_ETA_IN_DEGREES = 90.d0 :
s:^NEX_XI .*:NEX_XI = 288 :
s:^NEX_ETA .*:NEX_ETA = 288 :
s:^NPROC_XI .*:NPROC_XI = $NPROC_XI :
s:^NPROC_ETA .*:NPROC_ETA = $NPROC_ETA :
s:^MODEL .*:MODEL = $MODEL :
s:^OCEANS .*:OCEANS = .false. :
s:^ELLIPTICITY .*:ELLIPTICITY = .false. :
s:^TOPOGRAPHY .*:TOPOGRAPHY = .false. :
s:^GRAVITY .*:GRAVITY = $GRAVITY :
s:^ROTATION .*:ROTATION = .false. :
s:^ATTENUATION .*:ATTENUATION = $ATTENUATION :
s:^ABSORBING_CONDITIONS .*:ABSORBING_CONDITIONS = .false. :
s:^RECORD_LENGTH_IN_MINUTES .*:RECORD_LENGTH_IN_MINUTES = $RECORD_LENGTH_IN_MINUTES :
s:^MOVIE_SURFACE .*:MOVIE_SURFACE = .false. :
s:^MOVIE_VOLUME .*:MOVIE_VOLUME = .false. :
s:^SAVE_MESH_FILES .*:SAVE_MESH_FILES = .false. :
s:^NUMBER_OF_RUNS .*:NUMBER_OF_RUNS = 1 :
s:^LOCAL_PATH .*:LOCAL_PATH = $LOCAL_PATH :
s:^OUTPUT_SEISMOS_ASCII_TEXT .*:OUTPUT_SEISMOS_ASCII_TEXT = .true. :
s:^ROTATE_SEISMOGRAMS_RT .*:ROTATE_SEISMOGRAMS_RT = .false. :
s:^WRITE_SEISMOGRAMS_BY_MASTER .*:WRITE_SEISMOGRAMS_BY_MASTER = .false. :
s:^SAVE_ALL_SEISMOS_IN_ONE_FILE .*:SAVE_ALL_SEISMOS_IN_ONE_FILE = .false. :
s:^USE_BINARY_FOR_LARGE_FILE .*:USE_BINARY_FOR_LARGE_FILE = .false. :
s:^PRINT_SOURCE_TIME_FUNCTION .*:PRINT_SOURCE_TIME_FUNCTION = .false. :
" $CODE_DIR/DATA/Par_file > DATA/Par_file
}
function run_job {
bsub <<EOF
#!/bin/sh
#BSUB -J buildbot
#BSUB -q normal
#BSUB -W 2880
#BSUB -n $NPROC
#BSUB -a mpich_gm
#BSUB -o OUTPUT_FILES/%J.o
#BSUB -K
echo \$LSB_MCPU_HOSTS > OUTPUT_FILES/lsf_machines
cat OUTPUT_FILES/lsf_machines | xargs -n 2 echo | awk '{ print \$1 }' > OUTPUT_FILES/machines
shmux -M50 -Sall -c "mkdir -p $LOCAL_PATH" - < OUTPUT_FILES/machines >/dev/null
mpirun.lsf --gm-no-shmem --gm-copy-env \$PWD/xmeshfem3D
mpirun.lsf --gm-no-shmem --gm-copy-env \$PWD/xspecfem3D
shmux -M 50 -S all -c "rm -rf $LOCAL_PATH" - < OUTPUT_FILES/machines >/dev/null
EOF
if [ $? -ne 0 ]; then
status=1
fi
}
######################################################################
# build and run
echo Build $buildnumber
status=0
mkdir output || exit $?
if [ ! -d $bench_dir ]; then
# We are not running on a cluster; simply build the code.
./configure
status=$?
if [ $status -eq 0 ]; then
make
status=$?
fi
mv config.log output || exit $?
tar cvzf output.bbl output || exit $?
exit $status
fi
for run in $runs; do
cd $CODE_DIR || exit $?
mkdir output/$run || exit $?
cd output/$run || exit $?
mkdir DATA OUTPUT_FILES obj || exit $?
cp $CMTSOLUTION DATA || exit $?
cp $STATIONS DATA || exit $?
get_${run}_parameters
LOCAL_PATH=/scratch/buildbot-$buildnumber-$run
create_par_file
for pathname in $CODE_DIR/DATA/*; do
filename=`basename $pathname`
if [ ! -e DATA/$filename ]; then
ln -s $pathname DATA || exit $?
fi
done
# Currently, BuildBot always sets FC to 'mpif90';
# force it to 'ifort' in order to get the right flags.
$CODE_DIR/configure FC=ifort
if [ $? -eq 0 ]; then
make
if [ $? -ne 0 ]; then
status=1
fi
else
status=1
fi
NPROC=$(( $NCHUNKS * $NPROC_XI * $NPROC_ETA ))
run_job
done
######################################################################
# postprocessing
SACAUX=/home/lqy/Tools/utils/sac2000/aux
export SACAUX
PATH=/home/lqy/Tools/utils/sac2000/bin:/opt/GMT4.0/bin:/opt/seismo-util/bin:$PATH
export PATH
set -x
date
for run in $runs; do
cd output/$run || exit $?
mkdir SEM || exit $?
mv OUTPUT_FILES/*sem* SEM || exit $?
mkdir QMXD || exit $?
ln -s ${bench_dir}/QMXD/*qmxd QMXD || exit $?
cp ${bench_dir}/QMXD/ref_misfit QMXD || exit $?
sed -e "s:^half .*:half duration 15.0000 :" < DATA/CMTSOLUTION > DATA/CMTSOLUTION.tmp || exit $?
mv DATA/CMTSOLUTION.tmp DATA/CMTSOLUTION || exit $?
# cut - filter - resample
$CODE_DIR/UTILS/seis_process/process_syn.pl -m DATA/CMTSOLUTION -a DATA/STATIONS -l 0/2900 -t 16/500 -s 4 QMXD/*.qmxd || exit $?
$CODE_DIR/UTILS/seis_process/process_syn.pl -m DATA/CMTSOLUTION -a DATA/STATIONS -l 0/2900 -t 16/500 -s 4 SEM/*.semd.ascii || exit $?
# rotate to LHR LHT LHZ
rotate.pl -l 0 -L 2900 QMXD/*.LHE.qmxd.sac || exit $?
rotate.pl -l 0 -L 2900 SEM/*.LHE.semd.ascii.sac || exit $?
# convert sac into ascii
mkdir SAC ASCII || exit $?
mv QMXD/*.sac SAC || exit $?
mv SEM/*.sac SAC || exit $?
cd SAC || exit $?
for file in *.sac; do
sac2asc $file > ../ASCII/$file.ascii || exit $?
done
cd .. || exit $?
rm -rf SAC
# compare SEM and QMXD
cp QMXD/ref_misfit ASCII || exit $?
cd ASCII || exit $?
ls *LHZ*qmxd* > tmp || exit $?
awk 'BEGIN { FS = ".LHZ" } ; { print $1 }' tmp > files_to_be_processed || exit $?
rm tmp
${bench_dir}/UTILS/xmisfit 0 > xmisfit.out || exit $?
error_count=`wc -l xmisfit.out | awk '{print $1}'`
if [ $error_count -ne 0 ]; then
status=1
fi
visu_seismo
mv *.pdf ../OUTPUT_FILES
done
date
cd $CODE_DIR || exit $?
tar cvzf output.bbl output/*/config.log output/*/OUTPUT_FILES/output_*.txt output/*/OUTPUT_FILES/*.pdf || exit $?
exit $status
More information about the cig-commits
mailing list