示例#1
0
int main(  )
        {
                double result;
                double x;
                printf( "please input a number \n" );
                scanf( "%lf",&x);
                result=3*my_power( x, 5)+2*my_power( x,4 )-5*my_power( x,3 )-my_power( x,2 )+7*x-6;

                printf( "the result is %lf\n",result );
                return 0;
                
        }
示例#2
0
FLOAT_TYPE B_ad(int nx, int ny, int nz, system_t *s, parameters_t *p) {
  int mx, my, mz;
  int nmx, nmy, nmz;
  FLOAT_TYPE fnmx,fnmy,fnmz;
  FLOAT_TYPE km2;
  FLOAT_TYPE ret = 0.0;
  FLOAT_TYPE U2;
  FLOAT_TYPE mesh_i = 1.0/p->mesh;

  for (mx = -P3M_BRILLOUIN; mx <= P3M_BRILLOUIN; mx++) {
    nmx = nx + p->mesh*mx;
    fnmx = nmx * mesh_i;
    for (my = -P3M_BRILLOUIN; my <= P3M_BRILLOUIN; my++) {
      nmy = ny + p->mesh*my;
      fnmy = nmy * mesh_i;
      for (mz = -P3M_BRILLOUIN; mz <= P3M_BRILLOUIN; mz++) {
	nmz = nz + p->mesh*mz;
	fnmz = nmz * mesh_i;

	km2 = SQR(2.0*PI/s->length) * ( SQR ( nmx ) + SQR ( nmy ) + SQR ( nmz ) );	

	U2 = my_power(sinc(fnmx)*sinc(fnmy)*sinc(fnmz), 2*p->cao);

	ret += U2 * 4.0 * PI * EXP(- km2 / ( 4.0 * SQR(p->alpha)));
      }
    }
  }
  return ret;
 
}
示例#3
0
FLOAT_TYPE A_ad(int nx, int ny, int nz, system_t *s, parameters_t *p) {
  int mx, my, mz;
  int nmx, nmy, nmz;
  FLOAT_TYPE fnmx,fnmy,fnmz;
  FLOAT_TYPE km2;
  FLOAT_TYPE U2, U2m = 0.0, U2km = 0.0;
  FLOAT_TYPE mesh_i = 1.0/p->mesh;

  for (mx = -P3M_BRILLOUIN; mx <= P3M_BRILLOUIN; mx++) {
    nmx = nx + p->mesh*mx;
    fnmx = nmx * mesh_i;
    for (my = -P3M_BRILLOUIN; my <= P3M_BRILLOUIN; my++) {
      nmy = ny + p->mesh*my;
      fnmy = nmy * mesh_i;
      for (mz = -P3M_BRILLOUIN; mz <= P3M_BRILLOUIN; mz++) {
	nmz = nz + p->mesh*mz;
	fnmz = nmz * mesh_i;

	U2 = my_power(sinc(fnmx)*sinc(fnmy)*sinc(fnmz), 2*p->cao);
	km2 = SQR(2.0*PI/s->length) * ( SQR ( nmx ) + SQR ( nmy ) + SQR ( nmz ) );	

	U2m += U2;
	U2km += U2 * km2;
      }
    }
  }
  return U2m*U2km;
 
}
示例#4
0
文件: htoi.c 项目: yangmiemie/books
long my_htoi(char const s[])
{
    int i, j, len = 0;
    long sum = 0;
    int startStr = 0;

    if (s == NULL)
    {
        return INVALID;
    }

    if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X'))
    {
        startStr = 2;
    }

    for (i = 0; s[i] != '\0'; ++i);

    len = i;
    j = 0;

    for (i = len - 1; i >= startStr; --i)
    {
        if (s[i] >= '0' && s[i] <= '9' )
        {
            sum += (s[i] - '0') * my_power(16, j);
        }
        else if (s[i] >= 'a' && s[i] <= 'f')
        {
            sum += (s[i] - 'a' + 10) * my_power(16, j);
        }
        else if (s[i] >= 'A' && s[i] <= 'F')
        {
            sum += (s[i] - 'A' + 10) * my_power(16, j);
        }
        else
        {
            return INVALID;
        }

        ++j;
    }

    return sum;
}
示例#5
0
void Aliasing_sums_ik_i( system_t *s, parameters_t *p, data_t *d, int NX, int NY, int NZ,
                         FLOAT_TYPE *Zaehler, FLOAT_TYPE *Nenner1, FLOAT_TYPE *Nenner2)  {
  FLOAT_TYPE S1,S2,S3;
  FLOAT_TYPE fak1,fak2,zwi;
  int    MX,MY,MZ;
  FLOAT_TYPE NMX,NMY,NMZ;
  FLOAT_TYPE NM2;
  
  FLOAT_TYPE expo, TE;
  int Mesh = d->mesh;
  
  FLOAT_TYPE Leni = 1.0/s->length;
  fak1 = 1.0/(FLOAT_TYPE)Mesh;
  fak2 = SQR(PI/p->alpha);
  
  Zaehler[0] = Zaehler[1] = Zaehler[2] = *Nenner1 = *Nenner2 = 0.0;
  
  for ( MX = -P3M_BRILLOUIN; MX <= P3M_BRILLOUIN; MX++ ) {
    NMX = d->nshift[NX] + Mesh*MX;
    S1  = my_power( sinc(fak1*NMX), 2*p->cao );
    for ( MY = -P3M_BRILLOUIN; MY <= P3M_BRILLOUIN; MY++ ) {
      NMY = d->nshift[NY] + Mesh*MY;
      S2   = S1 * my_power( sinc(fak1*NMY), 2*p->cao );
      for ( MZ = -P3M_BRILLOUIN; MZ <= P3M_BRILLOUIN; MZ++ ) {
	NMZ = d->nshift[NZ] + Mesh*MZ;
	S3  = S2*my_power( sinc(fak1*NMZ), 2*p->cao );
	
	NM2 = SQR ( NMX*Leni ) + SQR ( NMY*Leni ) + SQR ( NMZ*Leni );
	*Nenner1 += S3;
	
	expo = fak2*NM2;
	TE = EXP ( -expo );
	zwi  = S3 * TE/NM2;
	Zaehler[0] += NMX*zwi*Leni;
	Zaehler[1] += NMY*zwi*Leni;
	Zaehler[2] += NMZ*zwi*Leni;
	
	if (((MX+MY+MZ)%2)==0)                                       //even term
	  *Nenner2 += S3;
	else                                                //odd term: minus sign!
	  *Nenner2 -= S3;
      }
    }
  }
}
示例#6
0
void Aliasing_sums_ad(int NX, int NY, int NZ, system_t *s, parameters_t *p, data_t *d,
		      FLOAT_TYPE *Zaehler, FLOAT_TYPE *Nenner1, FLOAT_TYPE *Nenner2)
{
  FLOAT_TYPE S1,S2,S3;
  FLOAT_TYPE fak1,fak2,zwi;
  int    MX,MY,MZ;
  FLOAT_TYPE NMX,NMY,NMZ;
  FLOAT_TYPE NM2;
  FLOAT_TYPE expo, TE;
  int Mesh = p->mesh;
  FLOAT_TYPE Len = s->length;
  FLOAT_TYPE Leni = 1.0/Len;

  fak1 = 1.0/(FLOAT_TYPE)Mesh;
  fak2 = SQR(PI/p->alpha);

  *Zaehler = *Nenner1 = *Nenner2 = 0.0;

  for (MX = -P3M_BRILLOUIN; MX <= P3M_BRILLOUIN; MX++) {
    NMX = d->nshift[NX] + Mesh*MX;
    S1   = my_power(sinc(fak1*NMX), 2*p->cao); 
    for (MY = -P3M_BRILLOUIN; MY <= P3M_BRILLOUIN; MY++) {
      NMY = d->nshift[NY] + Mesh*MY;
      S2   = S1*my_power(sinc(fak1*NMY), 2*p->cao);
      for (MZ = -P3M_BRILLOUIN; MZ <= P3M_BRILLOUIN; MZ++) {
	NMZ = d->nshift[NZ] + Mesh*MZ;
	S3   = S2*my_power(sinc(fak1*NMZ), 2*p->cao);

	NM2 = SQR(NMX*Leni) + SQR(NMY*Leni) + SQR(NMZ*Leni);

	*Nenner1 += S3;
	*Nenner2 += S3 * NM2;

	expo = fak2*NM2;
	TE = EXP(-expo);
	zwi  = S3 * TE;
        *Zaehler += zwi;
      }
    }
  }
}
示例#7
0
unsigned int	my_power(int nb, int power)
{
  unsigned int	res;

  if (power < 0)
    res = 0;
  else
    {
      res = 1;
      if (power > 0)
        res = my_power(nb, power - 1) * nb;
    }
  return (res);
}
示例#8
0
文件: 2262.cpp 项目: cwchym/ACM
bool witness(int a,int m,int j,int n)
{
	int x,y;
	x=my_power(a,m,n);
	while(j--)
	{
		y=Multi_Mod(x,x,n);
		if(y==1&&x!=1&&x!=n-1)
			return true;
		x=y;
	}

	return y!=1;
}
示例#9
0
文件: main.c 项目: yizha/projecteuler
int main(int argc, char* argv) {
    int n = 1;
    int cnt = 0;
    while (1) {
        int cycle_cnt = 0;
        for (int i = 1; i <= 9; i++) {
            if (my_power(i, n) == n) cycle_cnt++;
        }
        if (cycle_cnt == 0) break;
        cnt = cnt + cycle_cnt;
        n++;
    }

    printf("count=%d\n", cnt);
    return 0;
}
示例#10
0
static char             *oct_to_dec(char             *oct_num)
{
  char                  *dec_num = NULL;
  int                   dec_num_int = 0;
  unsigned int          len;

  len = strlen(oct_num);
  dec_num = mmalloc(sizeof (char) * len);

  bzero(dec_num, len);

  for (int i = len - 1; i >= 0; i--)
    dec_num_int += (oct_num[i] - '0') * my_power(8, len - i - 1);

  snprintf(dec_num, 3, "%i", dec_num_int);

  return (dec_num);
}
示例#11
0
int	my_put_nbr(int nb)
{

    int	power;

    if (nb <  0)
    {
        nb = nb * -1;
        my_putchar('-');
    }
    power = my_power(nb);
    while (power >= 1)
    {
        my_putchar (nb / power % 10 + 48);
        power = power / 10;
    }
    return (0);
}
示例#12
0
void p3m_tune_aliasing_sums_ik_i (int nx, int ny, int nz, 
					   system_t *s, parameters_t *p, 
				  FLOAT_TYPE *alias1, FLOAT_TYPE *alias2, FLOAT_TYPE *alias3, FLOAT_TYPE *alias4)
{

  int    mx,my,mz;
  FLOAT_TYPE nmx,nmy,nmz;
  FLOAT_TYPE fnmx,fnmy,fnmz;

  FLOAT_TYPE ex,ex2,nm2,U2,factor1;
  int mesh = p->mesh;
  FLOAT_TYPE mesh_i = 1.0 / mesh;

  factor1 = SQR(PI / ( p->alpha * s->length ) );

  *alias1 = *alias2 = *alias3 = *alias4 = 0.0;
  for (mx=-P3M_BRILLOUIN_TUNING; mx<=P3M_BRILLOUIN_TUNING; mx++) {
    fnmx = mesh_i * (nmx = nx + mx*mesh);
    for (my=-P3M_BRILLOUIN_TUNING; my<=P3M_BRILLOUIN_TUNING; my++) {
      fnmy = mesh_i * (nmy = ny + my*mesh);
      for (mz=-P3M_BRILLOUIN_TUNING; mz<=P3M_BRILLOUIN_TUNING; mz++) {

	fnmz = mesh_i * (nmz = nz + mz*mesh);
	
	nm2 = SQR(nmx) + SQR(nmy) + SQR(nmz);
	ex = EXP(-factor1*nm2);
	ex2 = SQR( ex );
	
	U2 = my_power(sinc(fnmx)*sinc(fnmy)*sinc(fnmz), 2*p->cao);
	
	*alias1 += ex2 / nm2;
	*alias2 +=  U2 * ex * (nx*nmx + ny*nmy + nz*nmz) / nm2;
	*alias3 += U2;

       if (((mx+my+mz)%2)==0) {		//consider only even terms!
	 *alias4 += U2;
       } else {
	 *alias4 -= U2;
       }
      }
    }
  }
}
示例#13
0
int	my_power_rec(int nb, int power)
{
  int   i;
  int   var_nb;

  if (power == 0)
    {
      nb = 1;
    }
  else if (power < 0)
    {
      nb = 0;
    }
  else
    {
      i = 0;
      var_nb = nb;
      nb = my_power(nb, power, i, var_nb);
    }
  return (nb);
}
示例#14
0
int	my_power(int nb, int power, int i, int var_nb)
{
  if (i < (power - 1))
    {
      if (nb > 0)
        {
          nb = nb * var_nb;
        }
      else
        {
          nb = 0;
	}
      i++;
      nb = my_power(nb, power, i, var_nb);
    }
  else
    {
      return (nb);
    }
  return (nb);
}
示例#15
0
void p3m_tune_aliasing_sums_ad(int nx, int ny, int nz, 
			       system_t *s, parameters_t *p,
			       FLOAT_TYPE *alias1, FLOAT_TYPE *alias2, FLOAT_TYPE *alias3,FLOAT_TYPE *alias4)
{

  int    mx,my,mz;
  FLOAT_TYPE nmx,nmy,nmz;
  FLOAT_TYPE fnmx,fnmy,fnmz;

  FLOAT_TYPE ex,ex2,nm2,U2,factor1;

  FLOAT_TYPE mesh_i = 1.0 / p->mesh;

  factor1 = SQR ( PI / ( p->alpha*s->length ) );

  *alias1 = *alias2 = *alias3 = *alias4 = 0.0;

  for (mx=-P3M_BRILLOUIN_TUNING; mx<=P3M_BRILLOUIN_TUNING; mx++) {
    fnmx = mesh_i * (nmx = nx + mx*p->mesh);
    for (my=-P3M_BRILLOUIN_TUNING; my<=P3M_BRILLOUIN_TUNING; my++) {
      fnmy = mesh_i * (nmy = ny + my*p->mesh);
      for (mz=-P3M_BRILLOUIN_TUNING; mz<=P3M_BRILLOUIN_TUNING; mz++) {
	fnmz = mesh_i * (nmz = nz + mz*p->mesh);
	
	nm2 = SQR ( nmx ) + SQR ( nmy ) + SQR ( nmz );
        ex = EXP(-factor1*nm2);
	ex2 = SQR( ex );
	
	U2 = my_power(sinc(fnmx)*sinc(fnmy)*sinc(fnmz), 2*p->cao);
	
	*alias1 += ex2 / nm2;
	*alias2 += U2 * ex;
	*alias3 += U2 * nm2;
	*alias4 += U2;
      }
    }
  }
}
示例#16
0
FLOAT_TYPE A_ad_water(int nx, int ny, int nz, system_t *s, parameters_t *p) {
  int mx, my, mz;
  int nmx, nmy, nmz;
  FLOAT_TYPE fnmx,fnmy,fnmz;
  FLOAT_TYPE km2;
  FLOAT_TYPE U2, U2m = 0.0, U2km = 0.0;
  FLOAT_TYPE mesh_i = 1.0/p->mesh;
  FLOAT_TYPE sin_term = 0.0, kmdHO, kmdHH;

  for (mx = -P3M_BRILLOUIN; mx <= P3M_BRILLOUIN; mx++) {
    nmx = nx + p->mesh*mx;
    fnmx = nmx * mesh_i;
    for (my = -P3M_BRILLOUIN; my <= P3M_BRILLOUIN; my++) {
      nmy = ny + p->mesh*my;
      fnmy = nmy * mesh_i;
      for (mz = -P3M_BRILLOUIN; mz <= P3M_BRILLOUIN; mz++) {
	nmz = nz + p->mesh*mz;
	fnmz = nmz * mesh_i;

	U2 = my_power(sinc(fnmx)*sinc(fnmy)*sinc(fnmz), 2*p->cao);
	km2 = SQR(2.0*PI/s->length) * ( SQR ( nmx ) + SQR ( nmy ) + SQR ( nmz ) );	
	/* sin_term = 1.0; */

	kmdHO = 1.0 * SQRT(km2);
	kmdHH = 1.63 * SQRT(km2);
	sin_term = -0.67*SIN(kmdHO)/kmdHO + 0.34 * SIN(kmdHH)/kmdHH;

	U2m += U2 * sin_term;
	U2km += U2 * km2;
	
      }
    }
  }
  return U2m*U2km;
 
}
示例#17
0
FLOAT_TYPE B_ad_water(int nx, int ny, int nz, system_t *s, parameters_t *p) {
  int mx, my, mz;
  int nmx, nmy, nmz;
  FLOAT_TYPE fnmx,fnmy,fnmz;
  FLOAT_TYPE km2;
  FLOAT_TYPE ret = 0.0;
  FLOAT_TYPE U2;
  FLOAT_TYPE mesh_i = 1.0/p->mesh;
  FLOAT_TYPE sin_term = 0.0, kmdHH, kmdHO;
  FLOAT_TYPE P3M_BRILLOUIN_LOCAL = P3M_BRILLOUIN;

  for (mx = -P3M_BRILLOUIN_LOCAL; mx <= P3M_BRILLOUIN_LOCAL; mx++) {
    nmx = nx + p->mesh*mx;
    fnmx = nmx * mesh_i;
    for (my = -P3M_BRILLOUIN_LOCAL; my <= P3M_BRILLOUIN_LOCAL; my++) {
      nmy = ny + p->mesh*my;
      fnmy = nmy * mesh_i;
      for (mz = -P3M_BRILLOUIN_LOCAL; mz <= P3M_BRILLOUIN_LOCAL; mz++) {
	nmz = nz + p->mesh*mz;
	fnmz = nmz * mesh_i;

	km2 = SQR(2.0*PI/s->length) * ( SQR ( nmx ) + SQR ( nmy ) + SQR ( nmz ) );	

	kmdHO = 1.0 * SQRT(km2);
	kmdHH = 1.63 * SQRT(km2);
	sin_term = -0.67*SIN(kmdHO)/kmdHO + 0.34 * SIN(kmdHH)/kmdHH;

	U2 = my_power(sinc(fnmx)*sinc(fnmy)*sinc(fnmz), 2*p->cao);

	ret += U2 * 4.0 * PI * EXP(- km2 / ( 4.0 * SQR(p->alpha))) * sin_term;
      }
    }
  }
  return ret;
 
}
/*-------------------------------------------------------------------------
 * (function: define_logical_function)
 *-----------------------------------------------------------------------*/
void define_logical_function(nnode_t *node, short type, FILE *out)
{
	int i, j;
	char *temp_string;
	int flag = 0;

	fprintf(out, ".names");


	if (global_args.high_level_block != NULL)
	{
		/* printout all the port hookups */
		for (i = 0; i < node->num_input_pins; i++)
		{
			/* now hookup the input wires with their respective ports.  [1+i] to skip output spot. */
			if (node->input_pins[i]->net->driver_pin->node->related_ast_node != NULL)
				fprintf(out, " %s^^%i-%i", node->input_pins[i]->net->driver_pin->node->name, 	node->input_pins[i]->net->driver_pin->node->related_ast_node->far_tag, node->input_pins[i]->net->driver_pin->node->related_ast_node->high_number); 
			else
				fprintf(out, " %s", node->input_pins[i]->net->driver_pin->node->name); 
		}
		/* now print the output */
		if (node->related_ast_node != NULL)
			fprintf(out, " %s^^%i-%i", node->name, node->related_ast_node->far_tag, node->related_ast_node->high_number);
		else
			fprintf(out, " %s", node->name);
	}
	else
	{
		/* printout all the port hookups */
		for (i = 0; i < node->num_input_pins; i++)
		{
			/* now hookup the input wires with their respective ports.  [1+i] to skip output spot. */
			/* Just print the driver_pin->name NOT driver_pin->node->name -- KEN */
			nnet_t *net = node->input_pins[i]->net;
			if (net && net->driver_pin)
			{	
				if (net->driver_pin->name != NULL)
				{
					if ((net->driver_pin->node->type == MULTIPLY) ||
					(net->driver_pin->node->type == HARD_IP) ||
					(net->driver_pin->node->type == MEMORY) ||
					(net->driver_pin->node->type == ADD) ||
					(net->driver_pin->node->type == MINUS) )
					{
						fprintf(out, " %s", net->driver_pin->name);
					}				
				}
				else
				{
					fprintf(out, " %s", net->driver_pin->node->name);
				}
			}
			else
			{
				int line_number = node->related_ast_node?node->related_ast_node->line_number:0;
				warning_message(NETLIST_ERROR, line_number, -1, "Net %s driving node %s is itself undriven.", net->name, node->name);

				fprintf(out, " %s", "unconn");
			}
		}
		/* now print the output */
		fprintf(out, " %s", node->name);
	}
	fprintf(out, "\n");

	oassert(node->num_output_pins == 1);

	/* print out the blif definition of this gate */
	switch (node->type) 
	{
		case LOGICAL_AND:
		{
			/* generates: 111111 1 */
			for (i = 0; i < node->num_input_pins; i++)
			{
				fprintf(out, "1");
			}
			fprintf(out, " 1\n");
			break;
		}
		case LOGICAL_OR:
		{
			/* generates: 1----- 1\n-1----- 1\n ... */
			for (i = 0; i < node->num_input_pins; i++)
			{
				for (j = 0; j < node->num_input_pins; j++)
				{
					if (i == j)
						fprintf(out, "1");
					else
						fprintf(out, "-");
				}
				fprintf(out, " 1\n");
			}
			break;
		}
		case LOGICAL_NAND:
		{
			/* generates: 0----- 1\n-0----- 1\n ... */
			for (i = 0; i < node->num_input_pins; i++)
			{
				for (j = 0; j < node->num_input_pins; j++)
				{
					if (i == j)
						fprintf(out, "0");
					else
						fprintf(out, "-");
				}
				fprintf(out, " 1\n");
			}
			break;
		}
		case LOGICAL_NOT:
		case LOGICAL_NOR:
		{
			/* generates: 0000000 1 */
			for (i = 0; i < node->num_input_pins; i++)
			{
				fprintf(out, "0");
			}
			fprintf(out, " 1\n");
			break;
		}
		case LOGICAL_EQUAL:
		case LOGICAL_XOR:
		{
			oassert(node->num_input_pins <= 3);
			/* generates: a 1 when odd number of 1s */
			for (i = 0; i < my_power(2, node->num_input_pins); i++)
			{
				if ((i % 8 == 1) || (i % 8 == 2) || (i % 8 == 4) || (i % 8 == 7))
				{
					temp_string = convert_long_long_to_bit_string(i, node->num_input_pins);
					fprintf(out, "%s", temp_string);
					free(temp_string);
					fprintf(out, " 1\n");
				}
			}
			break;
		}
		case NOT_EQUAL:
		case LOGICAL_XNOR:
		{
			oassert(node->num_input_pins <= 3);
			for (i = 0; i < my_power(2, node->num_input_pins); i++)
			{
				if ((i % 8 == 0) || (i % 8 == 3) || (i % 8 == 5) || (i % 8 == 6))
				{
					temp_string = convert_long_long_to_bit_string(i, node->num_input_pins);
					fprintf(out, "%s", temp_string);
					free(temp_string);
					fprintf(out, " 1\n");
				}
			}
			break;
		}
		default:
			oassert(FALSE);
			break;
	}

	fprintf(out, "\n");
	if (flag == 1)
		output_blif_pin_connect(node, out);
}
示例#19
0
data_t *Init_data(const method_t *m, system_t *s, parameters_t *p) {
    int mesh3 = p->mesh*p->mesh*p->mesh;
    data_t *d = (data_t *)Init_array(1, sizeof(data_t));

    d->mesh = p->mesh;
    
    if ( m->flags & METHOD_FLAG_Qmesh)
      d->Qmesh = (FLOAT_TYPE *)Init_array(2*mesh3, sizeof(FLOAT_TYPE));
    else
      d->Qmesh = NULL;

    if ( m->flags & METHOD_FLAG_ik ) {
        d->Fmesh = Init_vector_array(2*mesh3);
        d->Dn = (FLOAT_TYPE *)Init_array(d->mesh, sizeof(FLOAT_TYPE));
        Init_differential_operator(d);
    }
    else {
        d->Fmesh = NULL;
        d->Dn = NULL;
    }

    d->nshift = NULL;

    if ( m->flags & METHOD_FLAG_nshift ) {
      d->nshift = (FLOAT_TYPE *)Init_array(d->mesh, sizeof(FLOAT_TYPE));
      Init_nshift(d);
    }

    d->dQ[0] = NULL;
    d->dQ[1] = NULL;

    if( m->flags & METHOD_FLAG_self_force_correction)
      d->self_force_corrections = (FLOAT_TYPE *)Init_array(my_power(1+2*P3M_SELF_BRILLOUIN, 3), 3*sizeof(FLOAT_TYPE));

    if ( m->flags & METHOD_FLAG_ad ) {
      int i;
      int max = ( m->flags & METHOD_FLAG_interlaced) ? 2 : 1;

        for (i = 0; i < max; i++) {
	  d->dQ[i] = (FLOAT_TYPE *)Init_array( 3*s->nparticles*p->cao3, sizeof(FLOAT_TYPE) );
        }
    }

    if ( m->flags & METHOD_FLAG_ca ) {
      int i;
      int max = ( m->flags & METHOD_FLAG_interlaced ) ? 2 : 1;
      d->cf[1] = NULL;
      d->ca_ind[1] = NULL;
      
      for (i = 0; i < max; i++) {
	d->cf[i] = (FLOAT_TYPE *)Init_array( p->cao3 * s->nparticles, sizeof(FLOAT_TYPE));
	d->ca_ind[i] = (int *)Init_array( 3*s->nparticles, sizeof(int));
      }
	
      if( !p->tuning )
	d->inter = Init_interpolation( p->ip, m->flags & METHOD_FLAG_ad );
      else {
	if(dummy_inter == NULL)
	  dummy_inter = Init_interpolation( 6, 1 );
	d->inter = dummy_inter;
      }
    }
    else {
      d->cf[0] = NULL;
      d->ca_ind[0] = NULL;
      d->cf[1] = NULL;
      d->ca_ind[1] = NULL;
      d->inter = NULL;
    }

    if ( m->flags & METHOD_FLAG_G_hat) {
      if( !p->tuning) {
	d->G_hat = (FLOAT_TYPE *)Init_array(mesh3, sizeof(FLOAT_TYPE));
        m->Influence_function( s, p, d );   
      } else {
	dummy_g_realloc(d->mesh);
	d->G_hat = dummy_g;
      }
    }
    else
      d->G_hat = NULL;    


    d->forward_plans = 0;
    d->backward_plans = 0;

    return d;
}