chiark
/
gitweb
/
~ian
/
moebius2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
merge
[moebius2.git]
/
minimise.c
diff --git
a/minimise.c
b/minimise.c
index d07af5e4e5549f429a28445febb6fdc77ff1f4ba..60f2d646e08d5495f72829ee8513dfaba3011ffd 100644
(file)
--- a/
minimise.c
+++ b/
minimise.c
@@
-62,6
+62,12
@@
static void badusage(void) {
exit(8);
}
exit(8);
}
+static sig_atomic_t quit_requested;
+
+static void sigint_handler(int ignored) {
+ quit_requested= 1;
+}
+
int main(int argc, const char *const *argv) {
gsl_multimin_function multimin_function;
double size;
int main(int argc, const char *const *argv) {
gsl_multimin_function multimin_function;
double size;
@@
-69,7
+75,8
@@
int main(int argc, const char *const *argv) {
double initial_half[DIM], step_size[DIM];
FILE *initial_f;
gsl_vector initial_gsl, step_size_gsl;
double initial_half[DIM], step_size[DIM];
FILE *initial_f;
gsl_vector initial_gsl, step_size_gsl;
- int r, i;
+ int r, i, size_check_counter= 0;
+ struct sigaction sa;
if (argc==3) {
input_file= argv[1];
if (argc==3) {
input_file= argv[1];
@@
-88,6
+95,13
@@
int main(int argc, const char *const *argv) {
if (final_file)
if (asprintf(&final_file_tmp,"%s.new",final_file) <= 0) diee("asprintf");
if (final_file)
if (asprintf(&final_file_tmp,"%s.new",final_file) <= 0) diee("asprintf");
+ memset(&sa,0,sizeof(sa));
+ sa.sa_handler= sigint_handler;
+ sa.sa_flags= SA_RESETHAND;
+ r= sigaction(SIGINT,&sa,0);
+ if (r) diee("sigaction SIGINT");
+
+ mgraph_prepare();
graph_layout_prepare();
printing_init();
energy_init();
graph_layout_prepare();
printing_init();
energy_init();
@@
-124,17
+138,24
@@
int main(int argc, const char *const *argv) {
&initial_gsl, &step_size_gsl) );
for (;;) {
&initial_gsl, &step_size_gsl) );
for (;;) {
+ if (quit_requested) {
+ fprintf(stderr,"SIGINT caught.\n");
+ exit(1);
+ }
+
GA( gsl_multimin_fminimizer_iterate(minimiser) );
GA( gsl_multimin_fminimizer_iterate(minimiser) );
- size= gsl_multimin_fminimizer_size(minimiser);
- r= gsl_multimin_test_size(size, stop_epsilon);
+ if (!(size_check_counter++ % DIM)) {
+ size= gsl_multimin_fminimizer_size(minimiser);
+ r= gsl_multimin_test_size(size, stop_epsilon);
- if (printing_check(pr_size,215))
- printf("r=%2d, size %# e\n", r, size);
- flushoutput();
+
if (printing_check(pr_size,215))
+
printf("r=%2d, size %# e\n", r, size);
+
flushoutput();
- if (r==GSL_SUCCESS) break;
- assert(r==GSL_CONTINUE);
+ if (r==GSL_SUCCESS) break;
+ assert(r==GSL_CONTINUE);
+ }
}
if (final_file) {
}
if (final_file) {