Текст ВКР (1218920), страница 12
Текст из файла (страница 12)
forUpdateName+=intToChar(stage);
forUpdateName+="]_[";
forUpdateName+=intToChar(ochered);
forUpdateName+="]";
ifp = fopen("rezyltat", "rb");
tfp = tmpfile();
while ((c = getc(ifp)) != EOF){putc(c, tfp);}
fclose(ifp);
rewind(tfp);
ofp = fopen(forUpdateName.c_str(), "wb");
while ((c = getc(tfp)) != EOF){putc(c, ofp);}
fclose(tfp);
fclose(ofp);
ofp=fopen(input,"w");
fclose(ofp);
}
int main(int argc, char* parametr[]){
bool priznak=1;
while(priznak){
if(read_stage()>0){
strar="started_files";
if(ochered>0){
strar+="_[";
strar+=intToChar(ochered);
strar+="]";
}
FILE *StartedF;
if((StartedF=fopen(strar.c_str(),"r"))!=NULL){ char * s=new char[50];
int i=0;
while(!feof(StartedF)){
fgets(s, 50, StartedF);
if(isalpha(s[0])){i++;}
sprintf(s, "\n");
}
rewind(StartedF);
int N=i;
if(N>0){
char s[50];
for(i=0;i<N;i++){
fscanf(StartedF,"%s\n",¤t_task);
ochered=i;
cout<<"Queue["<<i<<"] completed.\nThere is "<<N-i<<" queues.\nPress any key to continue.";
cin.get();
char answ;
cout<<"\nContinue analyze? y/n\n";
cin>>answ;
if(answ=='y'){
UpdateAnalyzeFile("analyze.txt");
rename_rez_file();
prepare(current_task);
}
}
system("./copy.sh");
system("./bash2d.sh");
fclose(StartedF);
}
}
else{cout<<"\nEnd of tasks\n";}
priznak=0;
}
else{
if(argc > 1){
if(fopen(parametr[2],"r")!=NULL && strcmp(parametr[1],"prepare")==0){
prepare(parametr[2]);
}
else{
if(strcmp(parametr[1],"analyze.txt")==0){
analyze();
exit(0);
}
else{
FILE *log=fopen("error.log","a");
fprintf(log,"%s\n","Error in parametres!!! You must input 'prepare file' or 'analyze file'");
fclose(log);
}
}
}
}
}
return 0;
}
Модуль визуализации
Файл bash2d.sh
#!/bin/bash
i=1
e=9
ROOT_PATH=$(cd $(dirname $0) && pwd);
for file in $ROOT_PATH/data2D*
do
index=0
while read line; do
s=$(echo ${line##* })
array[$index]="$s"
index=$(($index+1))
done< $file
./plot2d.sh $file ""${array[0]}" ${array[0]},"${array[1]}" ${array[1]}, "${array[2]}" ${array[2]}, "${array[3]}" ${array[3]}, "${array[4]}" ${array[4]},"${array[5]}" ${array[5]}"
if [ "$i" -ge 1 ]
then
i=$(($i+1))
fi
if [ "$i" -eq 10 ]
then
i=$(0)
fi
done
Файл plot2d.sh
#!/bin/sh
gnuplot<< EOF
set terminal postscript eps color enhanced dashed
set output "$1.eps"
set term post landscape color "Times-Roman" 14
set logscale y
set grid
set title "Graphic"
set xrange [2 : 10]
set ylabel "d"
set ytics nomirror
set autoscale y
set autoscale x
set style data lines
set ytics ($2)
set style line 1 lt 2 lw 2 pt 7 ps 1.5
plot "$1" with linespoints ls 1 ti ""
EOF
Файл bash3d.sh
#!/bin/bash
i=1
e=9
ROOT_PATH=$(cd $(dirname $0) && pwd);
for file in $ROOT_PATH/data2D*
do
./plot2d.sh $file $i
echo $file $i;
if [ "$i" -ge 1 ]
then
i=$(($i+1))
fi
if [ "$i" -eq 10 ]
then
i=$(0)
fi
done
Файл plot3d.sh
#!/bin/sh
gnuplot<< EOF
set terminal postscript eps color enhanced
set output "$1.eps"
set term post landscape color "Times-Roman" 14
set xlabel "x"
set ylabel "y"
set zlabel "d"
set key top
set zrange [0:25]
set pm3d; set palette
set palette model RGB
set palette model RGB defined (0 "white", 0.00022 "white", 0.00022 "dark-yellow", 0.0016 "dark-yellow", 0.0016 "red", 0.0192 "red",0.0192 "pink", 0.0288 "pink", 0.0288 "dark-grey", 0.0384 "dark-grey",0.0384 "dark-blue", 0.048 "dark-blue", 0.048 "orange",0.096 "orange")
set title "3d-map of absolute error"
set ticslevel 0.5
set view 72,63
set autoscale
set hidden3d #back offset 0 trianglepattern 3 undefined 1 altdiagonal bentover
set contour both
set dgrid3d 70,70,4;
set style data lines
splot "$1.dat" ti ""#using 1:2 notitle w l
EOF
Модуль копирования результатов
Файл copy.h
#!/bin/bash
#mkdir ./Final/
#i=0
while read line; do
if [ "$line" = "${line%#*}" -a "$line" ]; then
#echo $line
#./plot.sh $line
cp -r $line ./Final/
#i=$(($i+1))
fi
done< ./Directories_with_plots
cp ./Output ./Final/
cp ./data2D* ./Final/
Модуль постановки задач
Файл starter
#!/bin/bash
R=$(tail -n 2 "$1"| head -n 1)
M=$(sed '$!d' "$1")
k=$(head -1 "$1")
while true
do
for w in $(seq $k)
do
B=$(grep v "$1" | tail -n "$w" | head -n 1)
echo "взялстроку" $B >> 11
echo $B > UU
U=$(cut -d',' -f 3 UU)
echo "допустимые значения сеток" $U >> 11
l=1
while read P; do
c=$(echo $P | cut -d' ' -f 2)
for f in $U
do
if [ "$c" = "$f" ]
then
echo $B >> TT
l=yes
break
fi
done
if [ "$l" = "yes" ]
then
break
fi
done<<(grep -v ["!","#","o"] "$M")
done
if [ ! -f TT ]
then
echo "нет параметров для счета" >> 11
rm UU
rm test*
exit 0
else
while read V; do
C=$(echo $V | cut -d',' -f 1 | sed 's/vl_//g')
date >> 11
echo "имя очереди" "vl_$C" >> 11
y=$(echo $V | cut -d',' -f 3)
x=$(echo $V | cut -d',' -f 4)
case "$C" in
"pluto" )
let NM=4
let SN=1
let EN=5
;;
"mercury" )
let NM=8
let SN=2
let EN=4
;;
"mars" )
let NM=24
let SN=1
let EN=4
;;
esac
date>> 11
echo " совпалосочередьюvl_$C" >> 11
A=$(echo $V | cut -d',' -f 2)
date >> 11
echo " необходимое кол-во процессоров на этой очереди" $A >> 11
let j=1
for ((i=$SN;i<=$EN;i++,j>0));
do
while true; do
pbsnodes "$C$i" > test
B=$(sed 's/[^/]//g' test | sed -e /^$/d | wc -c)
if [ "$B" -eq " " ]
then
B=1
else
B="$B"
fi
let "D = $NM - $B + 1"
if [ "$D" -ge "$A" ]
then
date>> 11
echo " на очереди" "$C" $i "есть свободное место" $D ">=" $A >> 11
E=$(qsub -l nodes="$C$i":ppn=$A -q vl_"$C" qscript -d "$PWD" -v y="$y",x="$x",M=$M,R=$R )
date >> 11
echo " ставим в очередь на узле $C" $i >> 11
sleep 2
if [ "$(qstat $E 2>/dev/null | wc -c)" == "0" ]
then
let j=0
echo "сидели в очереди на узле $C$i; скрипт быстро отвалился, видать задачи закончились"
break
fi
else
date >> 11
echo "нет необходимого места в очереди на узле $C" $i "т.к." $D "<" $A >> 11
break
fi
done
done
done< TT
rm TT
fi
sleep 3
done
exit 0
Файл qscript
#PBS -r n
#PBS -N test
#!/bin/bash
while true
do
l=no
while !(mkdir queue)
do
sleep 2
done
while read A; do
s=$(echo $A | cut -d' ' -f 2)
for b in $y
do
if [ "$b" = "$s" ]
then
echo $s "=" $b >> papapapa
echo $A >> papapapa
sed -i "s/$A/o$A/" "$M"
l=yes
break
fi
done
if [ "$l" = "yes" ]
then
break
fi
done<<(grep -v ["!","#","o"] "$M")
rmdir queue;
if [ "$l" = "no" ]
then
exit 0
fi
F=$(echo $A | sed 's/^[^ ]* //')
D=$($x -cs $F $R)
sleep 6
echo $D
while !(mkdir queue)
do
sleep 2
done
if [ "$D" = "0" ]
then
sed -i "s/o$A/!$A/" "$M"
else
sed -i "s/o$A/#$A/" "$M"
echo $A " " $D >>rezyltat
fi
rmdir queue
done
exit 0
-
Приложение В
(обязательное)
Графики результатов
Рисунок В1 – Разбиение полигонов 50х50 (слева) и 100х100 (справа)
Рисунок В2 – Различные варианты палитры для одинаковой задачи
Рисунок В3 – Трехмерный график распределения по области погрешности
(слева) и
(справа) приближенного Rv-обобщенного решения (
.
Рисунок В4 – Двумерный график распределения по области погрешности
(слева) и
(справа) приближенного Rv-обобщенного решения (
.
-
Приложение Г
(рекомендуемое)
Инструкция
Г.1 Состав программного комплекса
Программный комплекс для анализа наборов параметров включает в себя следующие компоненты.
-
Analyzer.exe – программа анализа, объединяющая весь программный комплекс в единое целое (далее Анализатор), осуществляющая подготовку входных данных для Запускателя (см. ниже), анализ полученных результатов и их уточнение.
Анализатор представляет собой консольное приложение, управление которым осуществляется при помощи параметров командной строки и текстовых файлов с параметрами:














