Esempio n. 1
0
real gfunc2(real x)
{
  real y;
  
  y = rpow(x, 1 / (npol - 0.5));
  return (rpow(2 - y, npol - 1.5) * rpow(1 - y, 2*mpol + 2));
}
Esempio n. 2
0
real gfunc1(real x)
{
  if (rlog10(x) * (2*mpol + 2) < -36.0)
    return (0.0);
  else
    return (rpow(1 - rsqr(x), npol - 1.5) * rpow(x, 2*mpol + 2));
}
Esempio n. 3
0
local void testdata(void) {
  real rsc, vsc, r, v, x, y;
  bodyptr p;

  float scale = 1.0f;
  float vscale = 1.0f;
  float mscale = 1.0f;

  if (nbody < 1)				// check for silly values
    error("%s: absurd value for nbody\n", getargv0());
  bodytab = (bodyptr) allocate(nbody * sizeof(body));
						// alloc space for bodies
  rsc = (3 * PI) / 16;				// set length scale factor
  vsc = rsqrt(1.0 / rsc);			// find speed scale factor
  for (p = bodytab; p < bodytab+nbody; p++) {	// loop over particles
    Type(p) = BODY;				// tag as a body
    //Mass(p) = 1.0 / nbody;			// set masses equal
    // Set mass randomly, like in brute
    Mass(p) = (rand() / (float) RAND_MAX) * mscale;
    x = xrandom(0.0, MFRAC);			// pick enclosed mass
    r = 1.0 / rsqrt(rpow(x, -2.0/3.0) - 1);	// find enclosing radius
    pickshell(Pos(p), NDIM, rsc * r);		// pick position vector
    do {					// select from fn g(x)
      x = xrandom(0.0, 1.0);			// for x in range 0:1
      y = xrandom(0.0, 0.1);			// max of g(x) is 0.092
    } while (y > x*x * rpow(1 - x*x, 3.5));	// using von Neumann tech
    v = x * rsqrt(2.0 / rsqrt(1 + r*r));	// find resulting speed
    pickshell(Vel(p), NDIM, vsc * v);		// pick velocity vector
  }
  tnow = 0.0;					// set elapsed model time
}
Esempio n. 4
0
real sig2_gsp(gsprof *tgsp, gsprof *mgsp, real beta_a, real *sig2, real r)
{
    int n = tgsp->npoint - 1;
    real r0, rn, gamma, m0, c0;

    r0 = tgsp->radius[0];
    rn = tgsp->radius[n];
    if (r < r0) {
        gamma = 2 * beta_a + mgsp->alpha + tgsp->alpha + 2;
        m0 = mass_gsp(mgsp, r0);
        if (gamma != 0.0) {
            c0 = sig2[0] + m0 / (gamma * r0);
            return (- (m0 / r0) * rpow(r / r0, 2 + mgsp->alpha) / gamma +
                    c0 * rpow(r0 / r, 2 * beta_a + tgsp->alpha));
        } else {
            c0 = sig2[0] + rlog(r0) * m0 / r0;
            return (- rlog(r) * m0 / rpow(r0, 3 + mgsp->alpha) /
                    rpow(r, 2 * beta_a + tgsp->alpha) +
                    c0 * rpow(r0 / r, 2 * beta_a + tgsp->alpha));
        }
    } else if (r > rn) {
        if (tgsp->density[n] > 0) {
            gamma = 2 * beta_a + mgsp->beta + tgsp->beta + 2;
            return (- mgsp->mtot / ((2*beta_a + tgsp->beta - 1) * r) +
                    (mgsp->mtot - mass_gsp(mgsp, r)) / (gamma * r));
        } else
            return (0.0);
    } else
        return (seval(r, tgsp->radius, sig2, sig2 + n + 1, n + 1));
}
Esempio n. 5
0
real r_mass_gsp(gsprof *gsp, real m)
{
    int n = gsp->npoint - 1, k = 0;

    if (m < 0 || m > gsp->mtot)
        error("%s.r_mass_gsp: undefined for m = %g\n", getargv0(), m);
    if (m < gsp->mass[0])
	return (gsp->radius[0] * rpow(m / gsp->mass[0], 1/(3+gsp->alpha)));
    else if (m > gsp->mass[n])
	return (gsp->radius[n] *
		  rpow((gsp->mtot - m) / (gsp->mtot - gsp->mass[n]),
		       1 / (3 + gsp->beta)));
    while (gsp->mass[k] == gsp->mass[k+1])
        k++;
    while (gsp->mass[n] == gsp->mass[n-1] ||
	   gsp->mass[n-1] == gsp->mass[n-2])
        n--;
    if (gsp->rm_coef == NULL) {
	gsp->rm_coef = (real *) allocate(3 * gsp->npoint * sizeof(real));
	if (k > 0 || n < gsp->npoint - 1)
	    eprintf("[%s.r_mass_gsp: spline range %d to %d]\n",
		    getargv0(), k, n);
	spline(gsp->rm_coef, gsp->mass + k, gsp->radius + k, n + 1 - k);
	if (isnan((double) gsp->rm_coef[0]))
	    error("%s.r_mass_gsp: spline fit undefined\n", getargv0());
    }
    return (seval(m, gsp->mass + k, gsp->radius + k, gsp->rm_coef, n + 1 - k));
}
Esempio n. 6
0
gsprof *plumgsp(real mtot, real a, int np, real rmin, real rmax)
{
    gsprof *gsp;
    real *rtab, *dtab, *mtab, lgrs;
    int i;

    assert(mtot > 0.0 && a > 0.0);
    gsp = (gsprof *) allocate(sizeof(gsprof));
    rtab = (real *) allocate(np * sizeof(real));
    dtab = (real *) allocate(np * sizeof(real));
    mtab = (real *) allocate(np * sizeof(real));
    lgrs = rlog2(rmax / rmin) / (np - 1);
    for (i = 0; i < np; i++) {
	rtab[i] = rmin * rexp2(lgrs * i);
	dtab[i] = (3 / FOUR_PI) * mtot * a*a /
		    rpow(rsqr(rtab[i]) + a*a, 2.5);
	mtab[i] = mtot * rqbe(rtab[i]) /
		    rpow(rsqr(rtab[i]) + a*a, 1.5);
    }
    gsp->npoint = np;
    gsp->radius = rtab;
    gsp->density = dtab;
    gsp->mass = mtab;
    gsp->alpha = 0.0;
    gsp->beta = -5.0;
    gsp->mtot = mtot;
    return (gsp);
}
Esempio n. 7
0
void polymodel(void)
{
  gsl_interp_accel *pmsplacc = gsl_interp_accel_alloc();
  bodyptr p;
  real rad, phi, vel, psi, vr, vp, a, E, J;
  vector rhat, vtmp, vper;

  for (p = btab; p < NthBody(btab, nbody); p = NextBody(p)) {
    rad = rad_m(xrandom(0.0, mtot));
    phi = gsl_spline_eval(pmspline, (double) rad, pmsplacc);
    vel = pick_v(phi);
    psi = pick_psi();
    vr = vel * rcos(psi);
    vp = vel * rsin(psi);
    Mass(p) = mtot / nbody;
    pickshell(rhat, NDIM, 1.0);
    MULVS(Pos(p), rhat, rad);
    pickshell(vtmp, NDIM, 1.0);
    a = dotvp(vtmp, rhat);
    MULVS(vper, rhat, - a);
    ADDV(vper, vper, vtmp);
    a = absv(vper);
    MULVS(vper, vper, vp / a);
    MULVS(Vel(p), rhat, vr);
    ADDV(Vel(p), Vel(p), vper);
    Phi(p) = phi;
    E = phi + 0.5 * rsqr(vel);
    J = rad * ABS(vp);
    Aux(p) = Kprime * rpow(phi1 - E, npol - 1.5) * rpow(J, 2 * mpol);
  }
  gsl_interp_accel_free(pmsplacc);
}
Esempio n. 8
0
real pick_psi(void)
{
  static real hmax = -1.0;
  real x, psi;

  if (hmax < 0.0)
    hmax = (mpol > 0 ? rpow(2.0, mpol) : 1);
  x = vnpick(hfunc, 0.0, 1.0, hmax, "hfunc");
  psi = racos(1 - rpow(x, 1 / (mpol + 1)));
  return (xrandom(-1.0, 1.0) < 0.0 ? PI - psi : psi);
}
Esempio n. 9
0
void gspsphere(void)
{
    real gamma0, mcut, r, sig2, eint = 0.0;
    static real *sig2tab = NULL;
    bodyptr bp;

    nbody = getiparam("nbody");
    assert(nbody > 0);
    gamma0 = getdparam("gamma");
    mcut = getdparam("mcut");
    assert(0.0 < mcut && mcut <= 1.0);
    if (sig2tab == NULL)
        sig2tab = calc_sig2_gsp(gsp, ggsp, 0.0);
    if (btab == NULL)
        btab = (bodyptr) allocate(nbody * SizeofBody);
    for (bp = btab; bp < NthBody(btab, nbody); bp = NextBody(bp)) {
        Mass(bp) = gsp->mtot / nbody;
        r = r_mass_gsp(gsp, xrandom(0.0, mcut * gsp->mtot));
	pickshell(Pos(bp), NDIM, r);
	CLRV(Vel(bp));
	Rho(bp) = rho_gsp(gsp, r);
	sig2 = sig2_gsp(gsp, ggsp, 0.0, sig2tab, r);
        EntFunc(bp) = sig2 / rpow(Rho(bp), gamma0 - 1);
	Uintern(bp) = sig2 / (gamma0 - 1);
	eint += Mass(bp) * Uintern(bp);
    }
    eprintf("[%s: thermal energy = %f]\n", getargv0(), eint);
}
Esempio n. 10
0
int main(int argc, string argv[])
{
    stream istr;
    gsprof *tgsp, *mgsp;
    real beta_a, *sig2, rrange[2], lgrs, r;
    int np, i;

    initparam(argv, defv);
    istr = stropen(getparam("gsp"), "r");
    get_history(istr);
    tgsp = get_gsprof(istr);
    strclose(istr);
    if (! strnull(getparam("grav"))) {
        istr = stropen(getparam("grav"), "r");
        get_history(istr);
        mgsp = get_gsprof(istr);
        strclose(istr);
    } else
        mgsp = tgsp;
    beta_a = getdparam("beta_a");
    sig2 = calc_sig2_gsp(tgsp, mgsp, beta_a);
    np = getiparam("npoint");
    setrange(rrange, getparam("rrange"));
    lgrs = rlog2(rrange[1] / rrange[0]) / (np - 1);
    printf("%12s  %12s\n", "radius", "sig_r^2");
    for (i = 0; i < np; i++) {
        r = rrange[0] * rpow(2.0, lgrs * i);
        printf("%12.5f  %12.7f\n",
               r, sig2_gsp(tgsp, mgsp, beta_a, sig2, r));
    }
    return (0);
}
Esempio n. 11
0
int
main (int argc, char *argv[])
{
  MINT *a, *b, *c, *d;
  short  h;

  mp_set_memory_functions (NULL, NULL, NULL);
  a = itom (123);
  b = xtom ("DEADBEEF");
  c = itom (0);
  d = itom (0);
  move (a, b);
  madd (a, b, c);
  msub (a, b, c);
  mult (a, b, c);
  mdiv (b, a, c, d);
  sdiv (b, 2, c, &h);
  msqrt (a, c, d);
  pow (b, a, a, c);
  rpow (a, 3, c);
  gcd (a, b, c);
  mcmp (a, b);
  if (argc > 1)
    {
      min (c);
      mout (a);
    }
  mtox (b);
  mfree(a);

  exit (0);
}
Esempio n. 12
0
int main(int argc, string argv[])
{
    stream istr, ostr;
    gsprof *gsp;
    int np, i;
    real r0, lgrs, r;

    initparam(argv, defv);
    istr = stropen(getparam("in"), "r");
    get_history(istr);
    gsp = get_gsprof(istr);
    if (! strnull(getparam("out"))) {
	ostr = stropen(getparam("out"), "w");
	put_history(ostr);
	put_gsprof(ostr, gsp);
	strclose(ostr);
    }
    np = getiparam("npoint");
    r0 = 1.0 / getdparam("r0inv");
    lgrs = getdparam("lgrstep");
    printf("%12s%12s%12s%12s%12s%12s\n",
	   "radius", "log rho", "drho/dr", "mass", "mtot-mass", "radius(m)");
    for (i = 0; i < np; i++) {
	r = r0 * rpow(2.0, lgrs * i);
	printf("%12.5f%12.7f%12.3e%12.8f%12.8f%12.5f\n", r,
	       rlog10(rho_gsp(gsp, r)), drho_gsp(gsp, r),
	       mass_gsp(gsp, r), gsp->mtot - mass_gsp(gsp, r),
	       r_mass_gsp(gsp, mass_gsp(gsp, r)));
    }
    free_gsprof(gsp);
    return (0);
}
Esempio n. 13
0
real rho_gsp(gsprof *gsp, real r)
{
    int n = gsp->npoint - 1;

    if (r < 0)
        error("%s.rho_gsp: undefined for r = %g\n", getargv0(), r);
    if (r < gsp->radius[0])
	return (gsp->density[0] * rpow(r / gsp->radius[0], gsp->alpha));
    else if (r > gsp->radius[n])
	return (gsp->density[n] * rpow(r / gsp->radius[n], gsp->beta));
    if (gsp->dr_coef == NULL) {
	gsp->dr_coef = (real *) allocate(3 * (n + 1) * sizeof(real));
	spline(gsp->dr_coef, gsp->radius, gsp->density, n + 1);
    }
    return (seval(r, gsp->radius, gsp->density, gsp->dr_coef, n + 1));
}
Esempio n. 14
0
void sphreport(stream ostr, smxptr sm, string options)
{
  bodyptr *bptr = sm->kd->bptr;
  int i, nupd, nlev[MAXLEV+1], *rprof = sm->rprof;
  real rbsum, rbmin, rbmax, flev[MAXLEV+1], flev4, xi[NRPROF-1];

  nupd = 0;
  for (i = 0; i <= MAXLEV; i++)
    nlev[i] = 0;
  rbsum = 0.0;
  for (i = 0; i < sm->kd->ngas; i++) {
    if (Update(bptr[i])) {
      nupd++;
      nlev[NewLevel(bptr[i])]++;
      rbsum += Smooth(bptr[i]);
      rbmin = (nupd == 1 ? Smooth(bptr[i]) : MIN(rbmin, Smooth(bptr[i])));
      rbmax = (nupd == 1 ? Smooth(bptr[i]) : MAX(rbmin, Smooth(bptr[i])));
    }
  }
  flev4 = 0.0;
  for (i = 0; i <= MAXLEV; i++) {
    flev[i] = 100.0 * ((real) nlev[i]) / ((real) nupd);
    if (i >= 4)
      flev4 += flev[i];
  }
  fprintf(ostr, "\n%9s %9s %9s %9s %29s %9s\n",
	  "log hmin", "log havg", "log hmax", "freqavg",
	  "timestep level distribution", "CPUsph"); 
  fprintf(ostr,
	  "%9.4f %9.4f %9.4f %9.2f %5.1f %5.1f %5.1f %5.1f %5.1f %9.3f\n",
	  rlog10(rbmin), rlog10(rbsum / nupd), rlog10(rbmax),
	  sm->freqsum / nupd, flev[0], flev[1], flev[2], flev[3], flev4,
	  cputime() - sm->cpustart);
  if (scanopt(options, "corrfunc")) {
    for (i = 0; i <= NRPROF - 2; i++)
      xi[i] = -1 + rpow(8.0, i/2.0) * (rprof[i] - rprof[i+1]) /
	((1 - rsqrt(0.125)) * rprof[0]);
    fprintf(ostr, "\n     ");
    for (i = NRPROF - 2; i >= 0; i--)
      fprintf(ostr, "   xi%d", i);
    fprintf(ostr, "\n     ");
    for (i = NRPROF - 2; i >= 0; i--)
      fprintf(ostr, "%6.2f", xi[i]);
    fprintf(ostr, "\n");
  }	
  if (scanopt(options, "levelhist")) {
    fprintf(ostr, "\n     ");
    for (i = 0; i <= MAXLEV; i++)
      if (nlev[i] != 0)
	fprintf(ostr, i<10 ? "  lev%d" : " lev%d", i);
    fprintf(ostr, "\n     ");
    for (i = 0; i <= MAXLEV; i++)
      if (nlev[i] != 0)
	fprintf(ostr, "%6d", nlev[i]);
    fprintf(ostr, "\n");
  }	
  fflush(ostr);
}
Esempio n. 15
0
int p_capicua(int n)
{    
    int n1 = n; 
    int cifra = cifras(n);
    if(cifra == 1 && n != 9)return n+1; //si es d una sola cifra
    
    
    int FR = n/rpow(10, cifra - cifra/2); //frontal
    int BR = n%rpow(10, cifra/2);         //last-back
    int iFR = inverso(FR);               
     
    if( iFR == BR) //palindromo
    {
        n = n+rpow(10, cifras(FR));      //le sumo el 10, 100, o 1000
        FR = n/rpow(10, cifra - cifra/2); 
        iFR = inverso(FR);               //como cambio fr, hay q actualizarlo
        //
    }
     
     n = n-BR;                           //le resto la parte d atras
     n = n+iFR;                          //y la sustituyo por la de alante
     
     if(n1 > n)                          //si num viejo es mayor que el nuevo   
     {                                   //necesitamos el prox palindromo
           n = n+rpow(10, cifras(FR));
           FR = n/rpow(10, cifra - cifra/2);
           iFR = inverso(FR);
           
           BR = n%rpow(10, cifra/2); 
           n = n-BR;
           n = n+iFR;
     }    
     
     return n;
}
Esempio n. 16
0
real pick_v(real phi)
{
  real vmax, x;
  static real gmax = -1.0;

  vmax = rsqrt(2 * phi1 - 2 * phi);
  if (npol > 1.5) {
    x = vnpick(gfunc1, 0.0, 1.0, 1.0, "gfunc1");
    return (vmax * x);
  } else {
    if (gmax < 0.0) {
      x = (npol + 4*mpol + 2.5) / (npol + 2*mpol + 0.5);
      if (0.0 <= x && x < 1.0)
	gmax = rpow(2 - x, npol - 1.5) * rpow(1 - x, 2*mpol + 2);
      else
	gmax = MAX(gfunc2(0.0), gfunc2(0.99));
    }
    x = vnpick(gfunc2, 0.0, 1.0, gmax, "gfunc2");
    return (vmax * (1 - rpow(x, 1 / (npol - 0.5))));
  }
}
Esempio n. 17
0
int StackPow(void)
{
	if(curstksize < 2){
		return 1;
	}

	stack[0] = rpow(stack[1], stack[0]);
	for(int i = 1; i < curstksize - 1; ++i){
		stack[i] = stack[i + 1];
	}

	--curstksize;
	return 0;
}
Esempio n. 18
0
void plummodel(real mfrac)
{
  real rsc, vsc, r, v, x, y;
  bodyptr p;

  if (mfrac < 0 || mfrac > 1)			// check for silly values
    error("%s: absurd value for mfrac\n", getprog());
  rsc = (3 * PI) / 16;				// set length scale factor
  vsc = rsqrt(1.0 / rsc);			// and speed scale factor
  for (p = btab; p < NthBody(btab,nbody); p = NextBody(p)) {
						// loop over particles
    Mass(p) = 1.0 / nbody;			// set masses equal
    x = xrandom(0.0, mfrac);			// pick enclosed mass
    r = 1.0 / rsqrt(rpow(x, -2.0/3.0) - 1);	// find enclosing radius
    pickshell(Pos(p), NDIM, rsc * r);		// pick position vector
    do {					// use von Neumann rejection
      x = xrandom(0.0, 1.0);			// for x in range 0:1
      y = xrandom(0.0, 0.1);			// max of g(x) is 0.092
    } while (y > x*x * rpow(1 - x*x, 3.5));	// select from g(x) 
    v = x * rsqrt(2.0 / rsqrt(1 + r*r));	// find resulting speed
    pickshell(Vel(p), NDIM, vsc * v);		// pick velocity vector
    Phi(p) = -1.0 / (rsc * rsqrt(rsqr(r) + 1));	// compute model potential
  }
}
Esempio n. 19
0
void gravforce(void)
{
    double cpustart;
    vector rmid;
 
    actlen = FACTIVE * 216 * tdepth;		/* estimate list length     */
    actlen = actlen * rpow(theta, -2.5);	/* allow for opening angle  */
    active = (nodeptr *) allocate(actlen * sizeof(nodeptr));
    interact = (cellptr) allocate(actlen * sizeof(cell));
    cpustart = cputime();			/* record time, less alloc  */
    actmax = nfcalc = nbbcalc = nbccalc = 0;    /* zero cumulative counters */
    active[0] = (nodeptr) root;                 /* initialize active list   */
    CLRV(rmid);                                 /* set center of root cell  */
    walkgrav(active, active + 1, interact, interact + actlen,
             (nodeptr) root, rsize, rmid);      /* scan tree, update forces */
    cpuforce = cputime() - cpustart;		/* store CPU time w/o alloc */
    free(active);				/* free up temp storage	    */
    free(interact);
}
Esempio n. 20
0
void setprof(void)
{
  int j;
  real r, msphr;

  rdtab[0] = mdtab[0] = vctab[0] = 0.0;
  for (j = 1; j < NTAB; j++) {
    r = rcut * rpow(((real) j) / (NTAB - 1), 2.0);
    rdtab[j] = r;
    mdtab[j] = 1 - rexp(- alpha1 * r) - alpha1 * r * rexp(- alpha1 * r);
    msphr = (sphr != NULL ? mass_gsp(sphr, r) : 0.0);
    vctab[j] = rsqrt(msphr / r - gdisk(r) * r);
  }
  eprintf("[%s: rcut = %8.4f/alpha  M(rcut) = %8.6f mdisk]\n",
	  getargv0(), rdtab[NTAB-1] * alpha1, mdtab[NTAB-1]);
  if ((mdtab[0] == mdtab[1]) || (mdtab[NTAB-2] == mdtab[NTAB-1]))
      error("%s: disk mass table is degenerate\n", getargv0());
  spline(&rdtab[NTAB], &mdtab[0], &rdtab[0], NTAB);	/* for r_d = r_d(m) */
  spline(&vctab[NTAB], &rdtab[0], &vctab[0], NTAB);	/* for v_c = v_c(r) */
}
Esempio n. 21
0
void testdisk(void)
{
    int ndisk, i;
    real rmin2, rmax2, eps2, sigma, r_i, theta_i, m_i, v_i;
    bodyptr gp, sp;

    ndisk = getiparam("ndisk");
    ngalaxy = ndisk + (getbparam("nosphr") ? 0 : nspheroid);
    galaxy = (bodyptr) allocate(ngalaxy * SizeofBody);
    rmin2 = rsqr(getdparam("rmin"));
    rmax2 = rsqr(getdparam("rmax"));
    eps2 = rsqr(getdparam("eps"));
    sigma = getdparam("sigma");
    init_random(getiparam("seed"));
    for (i = 0; i < ndisk; i++) {			/* build disk       */
        gp = NthBody(galaxy, i);
        Mass(gp) = 0.0;                                 /* set mass to zero */
        r_i = rsqrt(rmin2 + i * (rmax2 - rmin2) / (ndisk - 1.0));
        theta_i = xrandom(0.0, TWO_PI);
        Pos(gp)[0] = r_i * rsin(theta_i);               /* set positions    */
        Pos(gp)[1] = r_i * rcos(theta_i);
        Pos(gp)[2] = 0.0;
        if (r_i < rsph[NTAB-1])
            m_i = seval(r_i, &rsph[0], &msph[0], &msph[NTAB], NTAB);
        else
            m_i = msph[NTAB-1];
	v_i = rsqrt(MAX(m_i, 0.0) * r_i*r_i / rpow(r_i*r_i + eps2, 1.5));
							/* set velocities   */
        Vel(gp)[0] = grandom(  v_i * rcos(theta_i), sigma);
        Vel(gp)[1] = grandom(- v_i * rsin(theta_i), sigma);
        Vel(gp)[2] = grandom(                  0.0, sigma);
    }
    if (! getbparam("nosphr"))
	for (i = 0; i < nspheroid; i++) {		/* append spheroid  */
	    sp = NthBody(spheroid, i);
	    gp = NthBody(galaxy, ndisk + i);
	    memcpy(gp, sp, SizeofBody);
	}
    if (getbparam("zerocm"))
        snapcenter(galaxy, ngalaxy, MassField.offset);
}
Esempio n. 22
0
void gravcalc(void)
{
  double cpustart;
  vector rmid;
 
  if (active == NULL) {				// if this is the 1st call
    actmax = FACTIVE * 216 * (tdepth + 1);	// estimate list length
#if !defined(QUICKSCAN)
    if (theta > 0.1)
      actmax = actmax * rpow(theta,-2.5);	// allow for opening angle
    else
      actmax = 5.0 * ncell;			// guess total node count
#endif
    active = (nodeptr *) allocate(actmax * sizeof(nodeptr));
    interact = (cellptr) allocate(actmax * sizeof(cell));
  }
  cpustart = cputime();				// record time, less alloc
  acttot = nfcalc = nbbcalc = nbccalc = 0;	// zero cumulative counters
  active[0] = (nodeptr) root;			// initialize active list
  CLRV(rmid);					// set center of root cell
  walktree(active, active + 1, interact, interact + actmax,
	   (nodeptr) root, rsize, rmid);	// scan tree, update forces
  cpuforce = cputime() - cpustart;		// store CPU time w/o alloc
}
Esempio n. 23
0
int rpow(int b, int e)
{
    return (e == 0)? 1 : b*rpow(b,e-1);
}
Esempio n. 24
0
real hfunc(real x)
{
  return (rpow(2 - rpow(x, 1 / (mpol + 1)), mpol));
}