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); }
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); }