コード例 #1
0
ファイル: main.c プロジェクト: MatthewNunes/FinalYearProject
int main ( int argc, char *argv[])
{
   float sigma, rcut, dt, eqtemp, dens, boxlx, boxly, boxlz, sfx, sfy, sfz, sr6, vrcut, dvrcut, dvrc12, freex; 
   int nstep, nequil, iscale, nc, mx, my, mz, iprint, map[MAPSIZ];
   float *rx, *ry, *rz, *vx, *vy, *vz, *fx, *fy, *fz;
   float ace, acv, ack, acp, acesq, acvsq, acksq, acpsq, vg, kg, wg;
   int   *head, *list;
   int   natoms=0;
   int ierror;
   int jstart, step, itemp;
   float potential, virial, kinetic;
   float tmpx;
   int i, icell;

   ierror = input_parameters (&sigma, &rcut, &dt, &eqtemp, &dens, &boxlx, &boxly, &boxlz, &sfx, &sfy, &sfz, &sr6, &vrcut, &dvrcut, &dvrc12, &freex, &nstep, &nequil, &iscale, &nc, &natoms, &mx, &my, &mz, &iprint, map);
   //printf ("\nReturned from input_parameters, natoms = %d\n", natoms);

   rx = (float *)malloc(2*natoms*sizeof(float));
   ry = (float *)malloc(2*natoms*sizeof(float));
   rz = (float *)malloc(2*natoms*sizeof(float));
   vx = (float *)malloc(natoms*sizeof(float));
   vy = (float *)malloc(natoms*sizeof(float));
   vz = (float *)malloc(natoms*sizeof(float));
   fx = (float *)malloc(natoms*sizeof(float));
   fy = (float *)malloc(natoms*sizeof(float));
   fz = (float *)malloc(natoms*sizeof(float));
   list = (int *)malloc(2*natoms*sizeof(int));
   head = (int *)malloc((mx+2)*(my+2)*(mz+2)*sizeof(int));

   initialise_particles (rx, ry, rz, vx, vy, vz, nc);
   //printf ("\nReturned from initialise_particles\n");

   loop_initialise(&ace, &acv, &ack, &acp, &acesq, &acvsq, &acksq, &acpsq, sigma, rcut, dt);
   //printf ("\nReturned from loop_initialise\n");

   output_particles(rx,ry,rz,vx,vy,vz,fx,fy,fz,0);
      movout (rx, ry, rz, vx, vy, vz, sfx, sfy, sfz, head, list, mx, my, mz, natoms);
   //printf ("\nReturned from movout\n");
   //   check_cells(rx, ry, rz, head, list, mx, my, mz, natoms,0,0);
      force (&potential, &virial, rx, ry, rz, fx, fy, fz, sigma, rcut, vrcut, dvrc12, dvrcut, head, list, map, mx, my, mz, natoms,0);
   //printf ("\nReturned from force: potential = %f, virial = %f, kinetic = %f\n",potential, virial, kinetic);
   output_particles(rx,ry,rz,vx,vy,vz,fx,fy,fz,0);


   for(step=1;step<=nstep;step++){
   //printf ("\nStarted step %d\n",step);
      movea (rx, ry, rz, vx, vy, vz, fx, fy, fz, dt, natoms);
//      check_cells(rx, ry, rz, head, list, mx, my, mz, natoms,step,step);
   //printf ("\nReturned from movea\n");
      movout (rx, ry, rz, vx, vy, vz, sfx, sfy, sfz, head, list, mx, my, mz, natoms);
  // printf ("\nReturned from movout\n");
  //    check_cells(rx, ry, rz, head, list, mx, my, mz, natoms,step,step);
      force (&potential, &virial, rx, ry, rz, fx, fy, fz, sigma, rcut, vrcut, dvrc12, dvrcut, head, list, map, mx, my, mz, natoms, step);
   //printf ("\nReturned from force: potential = %f, virial = %f, kinetic = %f\n",potential, virial, kinetic);
      moveb (&kinetic, vx, vy, vz, fx, fy, fz, dt, natoms);
 //     check_cells(rx, ry, rz, head, list, mx, my, mz, natoms,step,step);
//   printf ("\nReturned from moveb: potential = %f, virial = %f, kinetic = %f\n",potential, virial, kinetic);
      sum_energies (potential, kinetic, virial, &vg, &wg, &kg);
      hloop (kinetic, step, vg, wg, kg, freex, dens, sigma, eqtemp, &tmpx, &ace, &acv, &ack, &acp, &acesq, &acvsq, &acksq, &acpsq, vx, vy, vz, iscale, iprint, nequil, natoms);
   }

   tidyup (ace, ack, acv, acp, acesq, acksq, acvsq, acpsq, nstep, nequil);
   
   return 0;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: HAWinther/Codes
void main_timestep_loop(){
  double aexp, aold, amid, t, told, tmid, dt, econs = 0.0;
  int nstep = 0;

  // Initialize time variables
  aexp = aold = sim._aexp = sim._aexp_ini;
  t    = sim._ttofa_spline.f(aexp);

  // Verbose
  cout << endl;
  cout << "=============================================================================" << endl;
  cout << "Starting time-integration aexp: " << setw(10) << aexp << endl;
  cout << "=============================================================================" << endl;

  // Set initial guess for modified gravity solver
  if(sim._modified_gravity)
    make_initial_guess(sim._ScalarField, aexp);

  // Main time-step loop
  while(aexp < 1.0){

    // Update time and translate between scale-factor and code time
    dt   = calc_new_timestep();
    if(t+dt > 0.0) dt = -t + 0.001;
    told = t;
    aold = sim._aoftt_spline.f(told);
    tmid = t + dt/2.0;
    amid = sim._aoftt_spline.f(tmid);
    t    = t + dt;
    aexp = sim._aoftt_spline.f(t);

    // Verbose
    cout << endl;
    cout << "=============================================================================" << endl;
    cout << "Timestep     nstep : " << setw(10) << nstep << "  aexp : " << setw(10) << aexp << endl;
    cout << "                 t : " << setw(10) << t     << "    dt : " << setw(10) << dt   << endl; 
    cout << "              vrms : " << setw(10) << calc_vrms(aexp);
    cout << " econs : " << setw(10) << econs << endl;
    cout << "=============================================================================" << endl;
    cout << endl;

    // Update positions of particles - 1/2 time-step
    leapfrog_drift_particles(dt/2.0); sim._aexp = amid;

    // Assign density to grid
    assign_particles_to_grid(sim._Rho, sim._ngrid);

    // Solve for gravitational force
    compute_gravitational_acceleration(amid);
    
    // Solve for the scalar field and compute fifth-force
    if(sim._modified_gravity){
      solve_phi_with_multigrid();
      calculate_fifth_force();
    }

    // Update velocity of particles - 1 time-step
    leapfrog_kick_particles(dt);

    // Update positions of particles - 1/2 time-step
    leapfrog_drift_particles(dt/2.0); sim._aexp = aexp;

    // Check energy conservation
    econs = calc_energy_conservation_constant();

    // Output when a = 0.1, 0.2, ...., 1.0
    if( (int(aexp*100) % 10 == 0) && ( int(aold*100) % 10 != 0) )
      output_particles(aexp);

    ++nstep;
  }
}