Rewrite cost function for adaptive step
This commit is contained in:
		
							
								
								
									
										48
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								src/main.c
									
									
									
									
									
								
							@@ -46,7 +46,7 @@ typedef struct nstrophy_parameters {
 | 
			
		||||
  double adaptive_tolerance;
 | 
			
		||||
  double adaptive_factor;
 | 
			
		||||
  double max_delta;
 | 
			
		||||
  unsigned int adaptive_norm;
 | 
			
		||||
  unsigned int adaptive_cost;
 | 
			
		||||
  double print_freq;
 | 
			
		||||
  int seed;
 | 
			
		||||
  double starting_time;
 | 
			
		||||
@@ -272,19 +272,19 @@ int main (
 | 
			
		||||
 | 
			
		||||
  // run command
 | 
			
		||||
  if (command==COMMAND_UK){
 | 
			
		||||
    uk(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.nu, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_norm, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, parameters.print_freq, parameters.starting_time, nthreads, savefile);
 | 
			
		||||
    uk(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.nu, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_cost, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, parameters.print_freq, parameters.starting_time, nthreads, savefile);
 | 
			
		||||
  }
 | 
			
		||||
  else if(command==COMMAND_ENSTROPHY){
 | 
			
		||||
    // register signal handler to handle aborts
 | 
			
		||||
    signal(SIGINT, sig_handler);
 | 
			
		||||
    signal(SIGTERM, sig_handler);
 | 
			
		||||
    enstrophy(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.nu, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_norm, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, parameters.print_freq, parameters.starting_time, parameters.print_alpha, nthreads, savefile, utfile, (char*)argv[0], dstring_to_str_noinit(¶m_str), dstring_to_str_noinit(&savefile_str), dstring_to_str_noinit(&utfile_str));
 | 
			
		||||
    enstrophy(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.nu, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_cost, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, parameters.print_freq, parameters.starting_time, parameters.print_alpha, nthreads, savefile, utfile, (char*)argv[0], dstring_to_str_noinit(¶m_str), dstring_to_str_noinit(&savefile_str), dstring_to_str_noinit(&utfile_str));
 | 
			
		||||
  }
 | 
			
		||||
  else if(command==COMMAND_QUIET){
 | 
			
		||||
    quiet(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.nu, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_norm, parameters.starting_time, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, nthreads, savefile);
 | 
			
		||||
    quiet(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.nu, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_cost, parameters.starting_time, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, nthreads, savefile);
 | 
			
		||||
  }
 | 
			
		||||
  else if(command==COMMAND_LYAPUNOV){
 | 
			
		||||
    lyapunov(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.lyapunov_reset, parameters.nu, parameters.D_epsilon, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_norm, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, parameters.starting_time, nthreads);
 | 
			
		||||
    lyapunov(parameters.K1, parameters.K2, parameters.N1, parameters.N2, parameters.final_time, parameters.lyapunov_reset, parameters.nu, parameters.D_epsilon, parameters.delta, parameters.L, parameters.adaptive_tolerance, parameters.adaptive_factor, parameters.max_delta, parameters.adaptive_cost, u0, g, parameters.irreversible, parameters.keep_en_cst, parameters.init_en, parameters.algorithm, parameters.starting_time, nthreads);
 | 
			
		||||
  }
 | 
			
		||||
  else if(command==0){
 | 
			
		||||
    fprintf(stderr, "error: no command specified\n");
 | 
			
		||||
@@ -393,18 +393,21 @@ int print_params(
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if(parameters.algorithm>ALGORITHM_ADAPTIVE_THRESHOLD){
 | 
			
		||||
    switch(parameters.adaptive_norm){
 | 
			
		||||
    case NORM_L1:
 | 
			
		||||
      fprintf(file,", norm=L1");
 | 
			
		||||
    switch(parameters.adaptive_cost){
 | 
			
		||||
    case COST_L1:
 | 
			
		||||
      fprintf(file,", cost=L1");
 | 
			
		||||
      break;
 | 
			
		||||
    case NORM_k3:
 | 
			
		||||
      fprintf(file,", norm=k3");
 | 
			
		||||
    case COST_k3:
 | 
			
		||||
      fprintf(file,", cost=k3");
 | 
			
		||||
      break;
 | 
			
		||||
    case NORM_k32:
 | 
			
		||||
      fprintf(file,", norm=k32");
 | 
			
		||||
    case COST_k32:
 | 
			
		||||
      fprintf(file,", cost=k32");
 | 
			
		||||
      break;
 | 
			
		||||
    case NORM_ENSTROPHY:
 | 
			
		||||
      fprintf(file,", norm=enstrophy");
 | 
			
		||||
    case COST_ENSTROPHY:
 | 
			
		||||
      fprintf(file,", cost=enstrophy");
 | 
			
		||||
      break;
 | 
			
		||||
    case COST_ALPHA:
 | 
			
		||||
      fprintf(file,", cost=alpha");
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
@@ -544,7 +547,7 @@ int set_default_params(
 | 
			
		||||
  parameters->adaptive_tolerance=1e-11;
 | 
			
		||||
  parameters->adaptive_factor=0.9;
 | 
			
		||||
  parameters->max_delta=1e-2;
 | 
			
		||||
  parameters->adaptive_norm=NORM_L1;
 | 
			
		||||
  parameters->adaptive_cost=COST_L1;
 | 
			
		||||
  parameters->final_time=100000;
 | 
			
		||||
  parameters->print_freq=1;
 | 
			
		||||
  parameters->starting_time=0;
 | 
			
		||||
@@ -759,21 +762,24 @@ int set_parameter(
 | 
			
		||||
      return(-1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else if (strcmp(lhs,"adaptive_norm")==0){
 | 
			
		||||
  else if (strcmp(lhs,"adaptive_cost")==0){
 | 
			
		||||
    if (strcmp(rhs,"L1")==0){
 | 
			
		||||
      parameters->adaptive_norm=NORM_L1;
 | 
			
		||||
      parameters->adaptive_cost=COST_L1;
 | 
			
		||||
    }
 | 
			
		||||
    else if (strcmp(rhs,"k3")==0){
 | 
			
		||||
      parameters->adaptive_norm=NORM_k3;
 | 
			
		||||
      parameters->adaptive_cost=COST_k3;
 | 
			
		||||
    }
 | 
			
		||||
    else if (strcmp(rhs,"k32")==0){
 | 
			
		||||
      parameters->adaptive_norm=NORM_k32;
 | 
			
		||||
      parameters->adaptive_cost=COST_k32;
 | 
			
		||||
    }
 | 
			
		||||
    else if (strcmp(rhs,"enstrophy")==0){
 | 
			
		||||
      parameters->adaptive_norm=NORM_ENSTROPHY;
 | 
			
		||||
      parameters->adaptive_cost=COST_ENSTROPHY;
 | 
			
		||||
    }
 | 
			
		||||
    else if (strcmp(rhs,"alpha")==0){
 | 
			
		||||
      parameters->adaptive_cost=COST_ALPHA;
 | 
			
		||||
    }
 | 
			
		||||
    else{
 | 
			
		||||
      fprintf(stderr, "error: unrecognized adaptive_norm '%s'\n",rhs);
 | 
			
		||||
      fprintf(stderr, "error: unrecognized adaptive_cost '%s'\n",rhs);
 | 
			
		||||
      return(-1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user