Exemplo n.º 1
0
int complete_mes(char *mes, int size) {
	int cl = 0, headers = 0, len = 0;
	char *tmp = NULL;

	cl = get_cl(mes);
#ifdef DEBUG
	printf("CL: %i\n", cl);
#endif
	if (cl < 0){
		if (verbose > 0)
			printf("missing CL header; waiting for more bytes...\n");
		return 0;
	}
	tmp = get_body(mes);
#ifdef DEBUG
	printf("body: '%s'\n", tmp);
#endif
	headers = tmp - mes;
#ifdef DEBUG
	printf("length: %i, headers: %i\n", size, headers);
#endif
	len = headers + cl;
	if (len == size) {
		if (verbose > 0)
			printf("message is complete\n");
		return 1;
	}
	else if (len > size) {
		if (verbose > 0)
			printf("waiting for more bytes...\n");
		return 0;
	}
	else {
		/* we received more then the sender claims to sent
		 * for now we treat this as a complete message
		 * FIXME: should we store the extra bytes in a buffer and
		 *        truncate the message at the calculated length !? */
		if (verbose > 0)
			printf("received too much bytes...\n");
		return 1;
	}
}
Exemplo n.º 2
0
int create_basis_late(int size, double max, double *vec){

	int i,j,n;
	double c,x,y,z,w;
	
	//basis_late = (double **)create_array(size,pmax_late+1);
	basis_late_flat = (double*) malloc(size * (pmax_late+1) * sizeof *basis_late_flat);
	double (*restrict basis_late)[pmax_late+1] = (double (*restrict)[pmax_late+1]) basis_late_flat;
	
	if(eflag_order_late<4){
		basis_functions_bi(basis_late_flat, size, pmax_late, max, vec);
	}else if(eflag_order_late==4){
		
		double **basis_temp = (double **)create_array(size,pmax_late-1);
	 	basis_functions_fourier(basis_temp, size, pmax_late-2, max, vec);
		
		for (i=0;i<size;i++){
			for (j=0;j<pmax_late-1;j++){
				basis_late[i][j] = basis_temp[i][j];
			}
		}
		destroy_array(basis_temp);
		
		basis_late[0][pmax_late-1] = 0.0;
		basis_late[0][pmax_late] = 0.0;
		
		for (i=1;i<size;i++){
			x = vec[i]*(vec[i]+1e0)/(max*(max+1e0));
			y = (2e0*vec[i]+1e0)/(2e0*max+1e0);
			z = sqrt(x);
			w = pow(y,1e0/6e0);
			basis_late[i][pmax_late-1] = w/z;
			basis_late[i][pmax_late] = w*z;
		}
		
	}else if(eflag_order_late==5){
		double **basis_temp = (double **)create_array(size,pmax_late-4);
	 	basis_functions_fourier(basis_temp, size, pmax_late-5, max, vec);
		
		for (i=0;i<size;i++){
			for (j=0;j<pmax_late-4;j++){
				basis_late[i][j] = basis_temp[i][j];
			}
		}
		destroy_array(basis_temp);
		
		basis_late[0][pmax_late-4] = t_wgt[0];
		basis_late[0][pmax_late-3] = 0.0;
		basis_late[0][pmax_late-2] = 0.0;
		basis_late[0][pmax_late-1] = 0.0;
		basis_late[0][pmax_late] = 0.0;
		
		for (i=1;i<size;i++){
			x = vec[i]*(vec[i]+1.0)/(max*(max+1e0));
			y = (2e0*vec[i]+1.0)/(2e0*max+1.0);
			z = sqrt(x);
			w = pow(y,1.0/6e0);
			basis_late[i][pmax_late-4] = t_wgt[i];
			basis_late[i][pmax_late-3] = w/z;
			basis_late[i][pmax_late-2] = w*z;
			basis_late[i][pmax_late-1] = t_wgt[i]*w/z;
			basis_late[i][pmax_late] = t_wgt[i]*w*z;
		}
	}else if(eflag_order_late==6){
		double **basis_temp = (double **)create_array(size,pmax_late-7);
	 	basis_functions_fourier(basis_temp, size, pmax_late-8, max, vec);
		
		for (i=0;i<size;i++){
			for (j=0;j<pmax_late-7;j++){
				basis_late[i][j] = basis_temp[i][j];
			}
		}
		destroy_array(basis_temp);
		
		basis_late[0][pmax_late-7] = 0.0;
		basis_late[0][pmax_late-6] = 0.0;
		basis_late[0][pmax_late-5] = 0.0;
		basis_late[0][pmax_late-4] = 0.0;
		basis_late[0][pmax_late-3] = 0.0;
		basis_late[0][pmax_late-2] = 0.0;
		basis_late[0][pmax_late-1] = 0.0;
		basis_late[0][pmax_late] = 0.0;
		
		for (i=1;i<size;i++){
			x = vec[i]*(vec[i]+1.0)/(max*(max+1e0));
			y = (2e0*vec[i]+1.0)/(2e0*max+1.0);
			z = sqrt(x);
			w = pow(y,1.0/6e0);
			c = sqrt(get_cl(i)+get_noise(i)/(get_beam(i)*get_beam(i)));
			if(c!=0.0)c = w/c;
			basis_late[i][pmax_late-7] = w/z;
			basis_late[i][pmax_late-6] = w*z;
			basis_late[i][pmax_late-5] = c;
			basis_late[i][pmax_late-4] = c*x;
			basis_late[i][pmax_late-3] = c*get_lens_tt(i);
			basis_late[i][pmax_late-2] = c*get_lens_tp(i);
			basis_late[i][pmax_late-1] = c*x*get_lens_tt(i);
			basis_late[i][pmax_late] = c*x*get_lens_tp(i);
		}
	}else if(eflag_order_late==7){
		
		double **basis_temp = (double **)create_array(size,pmax_late-1);
	 	basis_functions_bi(&basis_temp[0][0], size, pmax_late-2, max, vec);
		
		for (i=0;i<size;i++){
			for (j=0;j<pmax_late-1;j++){
				basis_late[i][j] = basis_temp[i][j];
			}
		}
		destroy_array(basis_temp);
		
		basis_late[0][pmax_late-1] = 0.0;
		basis_late[0][pmax_late] = 0.0;
		
		for (i=1;i<size;i++){
			x = vec[i]*(vec[i]+1e0)/(max*(max+1e0));
			y = (2e0*vec[i]+1e0)/(2e0*max+1e0);
			z = sqrt(x);
			w = pow(y,1e0/6e0);
			basis_late[i][pmax_late-1] = w/z;
			basis_late[i][pmax_late] = w*z;
		}
	}else if(eflag_order_late==8){
		double min = 2e0;
		basis_functions_sinlog(basis_late_flat, size, pmax_late, min, max, vec);
	}else if(eflag_order_late==9){
		
		double **basis_temp = (double **)create_array(size,pmax_late-1);
	 	basis_functions_legendre(basis_temp, size, pmax_late-2, max, vec);
		
		for (i=0;i<size;i++){
			for (j=0;j<pmax_late-1;j++){
				basis_late[i][j] = basis_temp[i][j];
			}
		}
		destroy_array(basis_temp);
		
		basis_late[0][pmax_late-1] = 0.0;
		basis_late[0][pmax_late] = 0.0;
		
		for (i=1;i<size;i++){
			x = vec[i]*(vec[i]+1e0)/(max*(max+1e0));
			y = (2e0*vec[i]+1e0)/(2e0*max+1e0);
			z = sqrt(x);
			w = pow(y,1e0/6e0);
			basis_late[i][pmax_late-1] = w/z;
			basis_late[i][pmax_late] = w*z;
		}
	}

	// JB offload basis_late_flat
	/*
	int basis_late_flat_size = size * (pmax_late+1);
	int offload_target;
    MPI_Comm_rank(MPI_COMM_WORLD, &offload_target);
	#pragma offload_transfer target(mic:offload_target) in(basis_late_flat[0:basis_late_flat_size] : ALLOC RETAIN)
	*/
	return 0;
}