Example #1
0
File: parse.c Project: jwalle/lemin
int			parse(t_env *e, char *line, int ret)
{
	(void)ret;
	if (line[0] == '#')
	{
		if (line[1] == '#')
			return (start_end(&(line[2]), e));
		else
			return (1);
	}
	else if (ft_isalnum(line[0]))
	{
		if (is_room(line))
			e->rooms = ft_lst_push(e->rooms, stock_room(line, e, NORMAL));
		else if (is_tube(line))
			e->tubes = ft_lst_push(e->tubes, stock_tube(line));
		else
			return (0);
	}
	else
		return (0);
	return (1);
}
Example #2
0
static double check_mrw_inter(int irw,int *ie)
{
   int l,my_rank;
   double delta1,delta2,x[2],x0[2];
   double d0,d1,d2;
   mrw_masses_t ms,ms0;
   mrw_parms_t rw;

   MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);

   rw=mrw_parms(irw);

   delta1=0.0;
   delta2=0.0;         
   d0=0.0;
   d1=0.0;
   d2=0.0;
   *ie=0;

   start_end(irw,x0,x);

   ms0=get_mrw_masses(irw,0);
   ms=ms0;
   
/*
   printf("\nx0_1 %.16f\n",x0[0]);
   printf("x_1  %.16f\n",x[0]);
   printf("x0_2 %.16f\n",x0[1]);
   printf("x_2  %.16f\n",x[1]);
   
   printf("\nm1  %.16f\n",ms0.m1);
   printf("mu1 %.16f\n",ms0.mu1);
   printf("d1  %.16f\n",ms0.d1);
   printf("m2  %.16f\n",ms0.m2);
   printf("mu2 %.16f\n",ms0.mu2);
   printf("d2  %.16f\n",ms0.d2);
*/         
   delta1+=ms0.d1;
   delta2+=ms0.d2;         
   
   if (rw.mrwfact<MRW)
   {
      d0+=fabs(x[0]-ms0.mu1);
      if ((rw.mrwfact==TMRW1)||(rw.mrwfact==TMRW2)||(rw.mrwfact==TMRW4)||
          (rw.mrwfact==TMRW1_EO)||(rw.mrwfact==TMRW2_EO)||(rw.mrwfact==TMRW4_EO))
         d0+=fabs(x0[1]*x0[1]-ms0.mu2*ms0.mu2-ms0.d2);
      else
         d0+=fabs(x0[1]-ms0.mu2-ms0.d2);
   }
   else
   {
      d0+=fabs(x[0]-ms0.m1);
      d0+=fabs(x0[1]-ms0.m2-ms0.d2);
   }
   
   for (l=1;l<rw.nm;l++)
   {
      ms=get_mrw_masses(irw,l);
/*            
      printf("\nm1  %.16f\n",ms.m1);
      printf("mu1 %.16f\n",ms.mu1);
      printf("d1  %.16f\n",ms.d1);
      printf("m2  %.16f\n",ms.m2);
      printf("mu2 %.16f\n",ms.mu2);
      printf("d2  %.16f\n",ms.d2);
*/
      if (rw.mrwfact<MRW)
      {
         if ((rw.mrwfact==TMRW1)||(rw.mrwfact==TMRW2)||(rw.mrwfact==TMRW4)||
            (rw.mrwfact==TMRW1_EO)||(rw.mrwfact==TMRW2_EO)||(rw.mrwfact==TMRW4_EO))
         {
            d1+=fabs(ms.mu1*ms.mu1-ms0.mu1*ms0.mu1-ms0.d1);
            d1+=fabs(ms0.mu2*ms0.mu2-ms.mu2*ms.mu2-ms.d2);
         }
         else
         {
            d1+=fabs(ms.mu1-ms0.mu1-ms0.d1);
            d1+=fabs(ms0.mu2-ms.mu2-ms.d2);
         }
         d1+=fabs(ms0.m1-ms.m1);
         d1+=fabs(ms0.m2-ms.m2);
      }
      else
      {
         d1+=fabs(ms.m1-ms0.m1-ms0.d1);
         d1+=fabs(ms0.m2-ms.m2-ms.d2);
         d1+=fabs(ms0.mu1-ms.mu1);
         d1+=fabs(ms0.mu2-ms.mu2);
      }
      
      if (rw.pwr==0.0)
         (*ie)|=(ms0.d1!=ms.d1);
      if (rw.pwr>0.0)
         (*ie)|=(fabs(ms0.d1)>=fabs(ms.d1));
      
      delta1+=ms.d1;
      delta2+=ms.d2;         
      
      ms0=ms;
   }
   
   if (rw.mrwfact<MRW)
   {
      if ((rw.mrwfact==TMRW1)||(rw.mrwfact==TMRW2)||(rw.mrwfact==TMRW4)||
          (rw.mrwfact==TMRW1_EO)||(rw.mrwfact==TMRW2_EO)||(rw.mrwfact==TMRW4_EO))
         d0+=fabs(x0[0]*x0[0]-ms.mu1*ms.mu1-ms.d1);
      else
         d0+=fabs(x0[0]-ms.mu1-ms.d1);
      d0+=fabs(x[1]-ms.mu2);
   }
   else
   {
      d0+=fabs(x0[0]-ms.m1-ms.d1);
      d0+=fabs(x[1]-ms.m2);
   }

   if ((rw.mrwfact==TMRW1)||(rw.mrwfact==TMRW2)||(rw.mrwfact==TMRW4)||
         (rw.mrwfact==TMRW1_EO)||(rw.mrwfact==TMRW2_EO)||(rw.mrwfact==TMRW4_EO))
   {
      d2+=fabs(delta1-(x0[0]*x0[0]-x[0]*x[0]));
      d2+=fabs(delta2-(x0[1]*x0[1]-x[1]*x[1]));
   }
   else
   {
      d2+=fabs(delta1-(x0[0]-x[0]));
      d2+=fabs(delta2-(x0[1]-x[1]));
   }
      
   if (my_rank==0)
   {          
      if (*ie)
         printf("\nReweighting distances not constant (p=0) or increasing (p>0).\n");
      if (d0>DBL_EPSILON)
      {
         (*ie)=1;
         printf("\nStart/end not correct, (diff: %.1e)\n",d0);
      }
      if (d1>sqrt((double)(4*5*rw.nm))*DBL_EPSILON)
      {
         (*ie)=1;
         printf("\nReweighting distances not correct, (diff: %.1e)\n",d1);
      }
      if (d2>sqrt((double)(2*rw.nm))*DBL_EPSILON)
      {
         (*ie)=1;
         printf("\nReweighting distances do not sum up correctly, (diff: %.1e)\n",d2);
      }
   } 
   
   return (d0+d1+d2);
}