static void calc_either_side(Crystal *cr, double incr_val, int *valid, long double *vals[3], int refine, PartialityModel pmodel) { RefList *compare; struct image *image = crystal_get_image(cr); if ( (refine != REF_DIV) ) { Crystal *cr_new; /* Crystal properties */ cr_new = new_shifted_crystal(cr, refine, -incr_val); compare = find_intersections(image, cr_new, pmodel); scan_partialities(crystal_get_reflections(cr), compare, valid, vals, 0, pmodel); cell_free(crystal_get_cell(cr_new)); crystal_free(cr_new); reflist_free(compare); cr_new = new_shifted_crystal(cr, refine, +incr_val); compare = find_intersections(image, cr_new, pmodel); scan_partialities(crystal_get_reflections(cr), compare, valid, vals, 2, pmodel); cell_free(crystal_get_cell(cr_new)); crystal_free(cr_new); reflist_free(compare); } else { struct image im_moved; /* "Image" properties */ im_moved = *image; shift_parameter(&im_moved, refine, -incr_val); compare = find_intersections(&im_moved, cr, pmodel); scan_partialities(crystal_get_reflections(cr), compare, valid, vals, 0, pmodel); reflist_free(compare); im_moved = *image; shift_parameter(&im_moved, refine, +incr_val); compare = find_intersections(&im_moved, cr, pmodel); scan_partialities(crystal_get_reflections(cr), compare, valid, vals, 2, pmodel); reflist_free(compare); } }
int main(int narg, char *arg[]) { comm_ext world; struct comm comm; #ifdef MPI MPI_Init(&narg,&arg); world = MPI_COMM_WORLD; #else world=0; #endif comm_init(&comm,world); id=comm.id, np=comm.np; lobatto_nodes(zr,NR),lobatto_nodes(zs,NS),lobatto_nodes(zt,NT); array_init(struct pt_data,&testp,NEL*MULD(TN,TN,TN)); crystal_init(&cr,&comm); test(&comm); crystal_free(&cr); array_free(&testp); comm_free(&comm); #ifdef MPI MPI_Finalize(); #endif return 0; }
void fcrystal_done(sint *h) { #ifdef MPI crystal_data *p = fcrystal_handle(*h); handle[*h]=0; MPI_Comm_free(&p->comm); crystal_free(p); free(p); #endif }