Пример #1
0
int main(int argc,char* argv[])
{
    FILE* fp=NULL;
    //printf("no of argc=%d\n",argc);
    fp=argChk(argc,argv);

    if(fp == NULL || fp == 0)
	{
		fprintf(stderr, "Quitting the Program because - %s\n", strerror(errno));
		exit(0);
	}
 
    
    My402List *list;        //------creating a list-----//
    list=(My402List*)malloc(sizeof(My402List));
    
    if(!My402ListInit(list))
    {
        fprintf(stderr,"Error: Error in Initializing the list\n");
        exit(0);
    }
        if(!Read_input(fp,list))
    {
        printf("error\n");
        exit(0);
    }

        if(list->num_members==0)
        {
            fprintf(stderr,"Error:Invalid input\n");
            exit(0);
        }
        sort(list);
        display(list);
        fclose(fp);
    cleanup(list);
       
        return TRUE;
    
        
        
        
}
int main()
{
  int Num_particles;
  int struct_index;
  double cutoff;
  double force_constant;
  double energy_offset;
  double step_size;
  double step_size_reduction_factor;
  double rmsd_pathway;
  double delta_rmsd_zero;
  double energy_from_ref_tol;
  long int Max_num_iterations;

  FR_DAT fr_ref, fr_ref_for_alignment, fr_ts, fr_start, fr_end; 
  double **pair_distances_structure;
  char Filename[1000];
  int i;
  double *Reference_x, *Reference_y, *Reference_z;
  int Num_struct_written;
  FILE *out_num, *out;
  double energy_ref, rmsd_from_ref_final;
  long int iteration_number_end;
  int is_step_size_adequate;

  /********************************************************************************/

  Read_input(&Num_particles, &struct_index, &cutoff, &force_constant, &energy_offset, &step_size, &step_size_reduction_factor, &rmsd_pathway, &delta_rmsd_zero, &energy_from_ref_tol, &Max_num_iterations);

  pair_distances_structure = (double**)malloc(Num_particles * sizeof(double*));
  for(i = 0 ; i < Num_particles ; i++)
    {
      pair_distances_structure[i] = (double*)malloc(Num_particles * sizeof(double));
    }

  fr_ref.natoms = Num_particles;
  fr_ref.x = (rvec*)malloc(Num_particles * sizeof(rvec));
  fr_ref.f = (rvec*)malloc(Num_particles * sizeof(rvec));
  fr_ref_for_alignment.natoms = Num_particles;
  fr_ref_for_alignment.x = (rvec*)malloc(Num_particles * sizeof(rvec));
  fr_ts.natoms = Num_particles;
  fr_ts.x = (rvec*)malloc(Num_particles * sizeof(rvec));
  fr_start.natoms = Num_particles;
  fr_start.x = (rvec*)malloc(Num_particles * sizeof(rvec));
  fr_end.natoms = Num_particles;
  fr_end.x = (rvec*)malloc(Num_particles * sizeof(rvec));
  fr_end.f = (rvec*)malloc(Num_particles * sizeof(rvec));

  /*Lei's code uses array whose indices start from 1.*/
  Reference_x = (double*)malloc((Num_particles + 1) * sizeof(double));
  Reference_y = (double*)malloc((Num_particles + 1) * sizeof(double));
  Reference_z = (double*)malloc((Num_particles + 1) * sizeof(double));

  /********************************************************************************/

  sprintf(Filename, "INPUT_STRUCTURE_%d", struct_index);
  Read_config_simple_3d(Num_particles, &fr_ref, Filename);

  sprintf(Filename, "minimized_struct_on_cusp");
  Read_config_simple_3d(Num_particles, &fr_ts, Filename);

  sprintf(Filename, "REFERENCE_FOR_ALIGNMENT");
  Read_config_simple_3d(Num_particles, &fr_ref_for_alignment, Filename);
  for(i = 0 ; i < Num_particles ; i++)
    {
      Reference_x[i+1] = fr_ref_for_alignment.x[i][0];
      Reference_y[i+1] = fr_ref_for_alignment.x[i][1];
      Reference_z[i+1] = fr_ref_for_alignment.x[i][2];
    }

  //Align_two_structures_lei(Reference_x, Reference_y, Reference_z, &fr_ref);
  //Align_two_structures_lei(Reference_x, Reference_y, Reference_z, &fr_ts);

  Calc_pair_distances_one_structure(Num_particles, fr_ref, pair_distances_structure);

  for(i = 0 ; i < Num_particles ; i++)
    {
      fr_start.x[i][0] = fr_ts.x[i][0];
      fr_start.x[i][1] = fr_ts.x[i][1];
      fr_start.x[i][2] = fr_ts.x[i][2];
    }


  is_step_size_adequate = 0;
  while(is_step_size_adequate == 0)
    {
       is_step_size_adequate = Check_step_size_offset(Num_particles, force_constant, cutoff, energy_offset, pair_distances_structure, Reference_x, Reference_y, Reference_z, rmsd_pathway, delta_rmsd_zero, &fr_start, step_size);
       if(is_step_size_adequate == 1)
         {
           printf("Step-size is %lf and it is adequate\n", step_size);
         }
       else
         {
           printf("Step-size is %lf and it is not adequate\n", step_size);
           step_size = step_size * step_size_reduction_factor;
         }
    }
  

  getforces_enm_offset(&fr_ref, pair_distances_structure, cutoff, force_constant, energy_offset);
  energy_ref = fr_ref.U;

  Num_struct_written = 0;
  Slide_down_single_step_size_offset(Num_particles, force_constant, cutoff, energy_offset, pair_distances_structure, Max_num_iterations, Reference_x, Reference_y, Reference_z, struct_index, rmsd_pathway, delta_rmsd_zero, &fr_ref, &fr_start, step_size, energy_ref, energy_from_ref_tol, &Num_struct_written, &fr_end, &iteration_number_end, step_size_reduction_factor);

  sprintf(Filename, "num_structures_written_%d", struct_index);
  out_num = fopen(Filename, "w");
  fprintf(out_num, "%d\n", Num_struct_written);
  fclose(out_num);

  getforces_enm_offset(&fr_end, pair_distances_structure, cutoff, force_constant, energy_offset);
  rmsd_from_ref_final = Calc_rmsd_one_structure(&fr_ref, &fr_end);
  sprintf(Filename, "final_struct_info_%d", struct_index);
  out = fopen(Filename, "w");
  fprintf(out, "Energy of the reference strucutre: %.8f\n", energy_ref);
  fprintf(out, "Number of iterations: %lu\n", iteration_number_end);
  fprintf(out, "Energy of final strucutre from minimization: %.8f\n", fr_end.U);
  fprintf(out, "RMSD of final strucutre from minimization from the reference strucutre: %.8f\n", rmsd_from_ref_final);
  fclose(out);
  sprintf(Filename, "final_struct_from_min_%d", struct_index);
  Write_config_simple(&fr_end, Filename); 

  return 0;
}