home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / fractal / kaos.lha / complib / symp_forberz_int_one.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-11-18  |  1.1 KB  |  53 lines

  1. /*
  2. ### Forest-Berz integrator one-stepper ###
  3. */
  4.  
  5. symp_forberz_int_one(vy,vx,ptime,time_step,dim)
  6. double vy[],vx[],*ptime,time_step;
  7. int dim;
  8. {
  9.     int i;
  10.     double ts,beta,s1,s2,d1,d2,exp(),log();
  11.     extern double *t_vf,*param;
  12.     extern int (*f_p)();
  13.  
  14.  
  15.     beta = exp(log(2.)/3.);
  16.     ts = time_step/(2.-beta);
  17.     s1 = ts/2.;
  18.     s2 = ts*(1.-beta)/2.;
  19.     d1 = ts;
  20.     d2 = -ts*beta;
  21.     
  22.     /* m1(s1) */
  23.     (int) f_p(vy,1,vx,param,*ptime,dim);
  24.     for(i=0;i<dim;i += 2) vy[i] = vx[i] + s1 * vy[i];
  25.     for(i=1;i<dim;i += 2) vy[i] = vx[i];
  26.  
  27.     /* m2(d1) . m1(s1) */
  28.     (int) f_p(t_vf,2,vy,param,*ptime,dim);
  29.     for(i=1;i<dim;i += 2) vy[i]  += d1 * t_vf[i];
  30.  
  31.     /* m1(s2) ... */
  32.     (int) f_p(t_vf,1,vy,param,*ptime,dim);
  33.     for(i=0;i<dim;i += 2) vy[i]  += s2 * t_vf[i];
  34.  
  35.     /* m2(d2) ... */
  36.     (int) f_p(t_vf,2,vy,param,*ptime,dim);
  37.     for(i=1;i<dim;i += 2) vy[i] += d2 * t_vf[i];
  38.  
  39.     /* m1(s2) ... */
  40.     (int) f_p(t_vf,1,vy,param,*ptime,dim);
  41.     for(i=0;i<dim;i += 2) vy[i] += s2 * t_vf[i];
  42.  
  43.     /* m1(d1) ... */
  44.     (int) f_p(t_vf,2,vy,param,*ptime,dim);
  45.     for(i=1;i<dim;i  += 2) vy[i] += d1 * t_vf[i];
  46.  
  47.     /* m1(s1) ... */
  48.     (int) f_p(t_vf,1,vy,param,*ptime,dim);
  49.     for(i=0;i<dim;i  += 2) vy[i] += s1 * t_vf[i];
  50.  
  51.     *ptime  += time_step;
  52. }
  53.