/* This module will connect points together in a mesh */ #include "express.h" #include "math.h" #include #include #define DEBUG 0 // the tricky part is to define the subset. // if we have 48 planes (really 48+1), and we have 481 radial slices, then // subset ={0,48,0,481} if we read in all of the data.... int connect_zlin_mesh_quad(OMobj_id connect_zlin_mesh_quad_id, OMevent_mask event_mask, int seq_num){ /***********************/ /* Declare variables */ /***********************/ int nplane; int num_radial_slices; int n_slice_size = 0; int *n_slice = NULL; int subset_size =0; int *subset = NULL; int x1_size = 0; float *x1 = NULL; int x2_size = 0; float *x2 = NULL; int x3_size = 0; float *x3 = NULL; int *tmp_connections_quad = NULL; int nt; int *first_point; int num_cells=0; int ishift; int *point_connect;/*problem with the tri's......*/ int status; int mem_quad;//, mem_tri, mem_pyr; float *mesh_coord; OMobj_id field_id,tri_id,quad_id,pyr_id,cell_id,mesh_cell_set; int i,j,k,l,m,ii,mp1,lp1; int unique_connections=0; float rdiff, r, rmin; int mem=0; int points_used=0; int al_quad;//al_tri,al_pyr; if (OMget_name_int_val(connect_zlin_mesh_quad_id, OMstr_to_name("nplane"), &nplane) != 1) nplane = 0; if (OMget_name_int_val(connect_zlin_mesh_quad_id, OMstr_to_name("num_radial_slices"), &num_radial_slices) != 1) num_radial_slices = 0; n_slice = (int *)OMret_name_array_ptr(connect_zlin_mesh_quad_id, OMstr_to_name("n_slice"), OM_GET_ARRAY_RD, &n_slice_size, NULL); subset = (int *)OMret_name_array_ptr(connect_zlin_mesh_quad_id, OMstr_to_name("subset"), OM_GET_ARRAY_RD, &subset_size, NULL); //we only care about subset[2],subset[3]... min,max x1 = (float *)OMret_name_array_ptr(connect_zlin_mesh_quad_id, OMstr_to_name("x1"), OM_GET_ARRAY_RD, &x1_size, NULL); x2 = (float *)OMret_name_array_ptr(connect_zlin_mesh_quad_id, OMstr_to_name("x2"), OM_GET_ARRAY_RD, &x2_size, NULL); x3 = (float *)OMret_name_array_ptr(connect_zlin_mesh_quad_id, OMstr_to_name("x3"), OM_GET_ARRAY_RD, &x3_size, NULL); nt=0; for (i=subset[2];isubset[2];k--) { /* which radial slice am I on? */ for (j=0;jsubset[2];k--) { /* which radial slice am I on? */ for (k=subset[2]+1;k= n_slice[k]) l-= n_slice[k]; if (j +1 + ishift >= n_slice[k]) lp1-= n_slice[k]; } //tmp_connections_quad[mem_quad] = l; //tmp_connections_quad[mem_quad+1] = lp1; //tmp_connections_quad[mem_quad+2] = point_connect[lp1]; //tmp_connections_quad[mem_quad+3] = point_connect[l]; tmp_connections_quad[mem_quad+2] = l; tmp_connections_quad[mem_quad+3] = lp1; tmp_connections_quad[mem_quad+0] = point_connect[lp1]; tmp_connections_quad[mem_quad+1] = point_connect[l]; mem+=4; mem_quad+=4; num_cells++; } }// k loop //} field_id = OMfind_subobj(connect_zlin_mesh_quad_id, OMstr_to_name("field"), OM_OBJ_RD); OMuser_destroy_obj(field_id); field_id = OMcreate_obj_from_path("FLD.Field_Types.Mesh","field",connect_zlin_mesh_quad_id); OMset_int_val(OMfind_str_subobj(field_id,"nnodes",OM_OBJ_RW),points_used); OMset_int_val(OMfind_str_subobj(field_id,"nspace",OM_OBJ_RW),3); FLDadd_cell_set(field_id,"Quad"); FLDget_cell_set(field_id,0,&mesh_cell_set); /* get the first (0) cell set */ FLDget_cell_set(field_id,0,&mesh_cell_set); FLDset_ncells(mesh_cell_set,mem_quad/4); FLDset_node_connect(mesh_cell_set,tmp_connections_quad,mem_quad,OM_SET_ARRAY_FREE); FLDset_coord(field_id,mesh_coord,3*points_used,OM_SET_ARRAY_FREE); OMlink_objs(OMfind_subobj(connect_zlin_mesh_quad_id,OMstr_to_name("link"),OM_OBJ_RW),field_id); if (n_slice != NULL) ARRfree(n_slice); if (x1 != NULL) ARRfree(x1); if (x2 != NULL) ARRfree(x2); if (x3 != NULL) ARRfree(x3); if (first_point !=NULL) ARRfree(first_point); if (point_connect !=NULL) ARRfree(point_connect); if (subset !=NULL) ARRfree(subset); return(1); }