Skip to content

Commit 1c2f744

Browse files
kmittal2stgeke
authored andcommitted
allow findptsms to find points in elements of particular session (#35)
1 parent 36030ba commit 1c2f744

6 files changed

+146
-80
lines changed

src/findpts.c

+22-15
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ static uint count_bits(unsigned char *p, uint n)
163163
x_base, x_stride,
164164
y_base, y_stride,
165165
z_base, z_stride,
166-
sess_base, sess_stride,npt)
166+
sess_base, sess_stride,
167+
sess_match, npt)
167168
168169
(z_base, z_stride ignored when ndim==2)
169170
@@ -182,6 +183,10 @@ static uint count_bits(unsigned char *p, uint n)
182183
x, y, z: coordinates of sought point
183184
Additional input for findptsms
184185
sess: session ID of the sought point
186+
sess_match: 1 - find points in elements who session id is same from points
187+
: 0 - find points in elements who session id is different from
188+
points
189+
185190
186191
the *_base arguments point to the data for the first point,
187192
each is advanced by the corresponding *_stride argument for the next point
@@ -375,16 +380,16 @@ void ffindpts_free(const sint *const handle)
375380
}
376381

377382
void ffindptsms(const sint *const handle,
378-
sint *const code_base, const sint *const code_stride,
379-
sint *const proc_base, const sint *const proc_stride,
380-
sint *const el_base, const sint *const el_stride,
381-
double *const r_base, const sint *const r_stride,
382-
double *const dist2_base, const sint *const dist2_stride,
383-
const double *const x_base, const sint *const x_stride,
384-
const double *const y_base, const sint *const y_stride,
385-
const double *const z_base, const sint *const z_stride,
386-
const uint *const session_id_base, const uint *const session_id_stride,
387-
const sint *const npt)
383+
sint *const code_base, const sint *const code_stride,
384+
sint *const proc_base, const sint *const proc_stride,
385+
sint *const el_base, const sint *const el_stride,
386+
double *const r_base, const sint *const r_stride,
387+
double *const dist2_base, const sint *const dist2_stride,
388+
const double *const x_base, const sint *const x_stride,
389+
const double *const y_base, const sint *const y_stride,
390+
const double *const z_base, const sint *const z_stride,
391+
const uint *const session_id_base, const uint *const session_id_stride,
392+
const uint *const session_id_match, const sint *const npt)
388393
{
389394
CHECK_HANDLE("findptsms");
390395
if(h->ndim==2) {
@@ -394,10 +399,11 @@ void ffindptsms(const sint *const handle,
394399
xv_stride[0] = *x_stride*sizeof(double),
395400
xv_stride[1] = *y_stride*sizeof(double);
396401

397-
const uint * sess_base;
402+
const uint *sess_base,*sess_match;
398403
unsigned sess_stride;
399404
sess_base = session_id_base;
400405
sess_stride = *session_id_stride*sizeof(uint);
406+
sess_match = session_id_match;
401407

402408
PREFIXED_NAME(findptsms_2)(
403409
(uint*) code_base,(* code_stride)*sizeof(sint ),
@@ -407,7 +413,7 @@ void ffindptsms(const sint *const handle,
407413
dist2_base,(*dist2_stride)*sizeof(double),
408414
xv_base, xv_stride ,
409415
sess_base, sess_stride ,
410-
*npt, h->data);
416+
sess_match, *npt, h->data);
411417
} else {
412418
const double *xv_base[3];
413419
unsigned xv_stride[3];
@@ -416,10 +422,11 @@ void ffindptsms(const sint *const handle,
416422
xv_stride[1] = *y_stride*sizeof(double),
417423
xv_stride[2] = *z_stride*sizeof(double);
418424

419-
const uint * sess_base;
425+
const uint *sess_base,*sess_match;
420426
unsigned sess_stride;
421427
sess_base = session_id_base;
422428
sess_stride = *session_id_stride*sizeof(uint);
429+
sess_match = session_id_match;
423430

424431
PREFIXED_NAME(findptsms_3)(
425432
(uint*) code_base,(* code_stride)*sizeof(sint ),
@@ -429,7 +436,7 @@ void ffindptsms(const sint *const handle,
429436
dist2_base,(*dist2_stride)*sizeof(double),
430437
xv_base, xv_stride ,
431438
sess_base, sess_stride ,
432-
*npt, h->data);
439+
sess_match, *npt, h->data);
433440
}
434441
}
435442

src/findpts.h

+19-17
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,25 @@ struct findpts_data_3 *findptsms_setup_3(
4747
void findptsms_free_2(struct findpts_data_2 *fd);
4848
void findptsms_free_3(struct findpts_data_3 *fd);
4949

50-
void findptsms_2( uint *const code_base, const unsigned code_stride,
51-
uint *const proc_base, const unsigned proc_stride,
52-
uint *const el_base, const unsigned el_stride,
53-
double *const r_base, const unsigned r_stride,
54-
double *const dist2_base, const unsigned dist2_stride,
55-
const double *const x_base[2], const unsigned x_stride[2],
56-
const uint *const session_id_base, const unsigned session_id_stride,
57-
const uint npt, struct findpts_data_2 *const fd);
58-
59-
void findptsms_3( uint *const code_base, const unsigned code_stride,
60-
uint *const proc_base, const unsigned proc_stride,
61-
uint *const el_base, const unsigned el_stride,
62-
double *const r_base, const unsigned r_stride,
63-
double *const dist2_base, const unsigned dist2_stride,
64-
const double *const x_base[3], const unsigned x_stride[3],
65-
const uint *const session_id_base, const unsigned session_id_stride,
66-
const uint npt, struct findpts_data_3 *const fd);
50+
void findptsms_2( uint *const code_base, const unsigned code_stride,
51+
uint *const proc_base, const unsigned proc_stride,
52+
uint *const el_base, const unsigned el_stride,
53+
double *const r_base, const unsigned r_stride,
54+
double *const dist2_base, const unsigned dist2_stride,
55+
const double *const x_base[2], const unsigned x_stride[2],
56+
const uint *const session_id_base, const unsigned session_id_stride,
57+
const uint *const session_id_match, const uint npt,
58+
struct findpts_data_2 *const fd);
59+
60+
void findptsms_3( uint *const code_base, const unsigned code_stride,
61+
uint *const proc_base, const unsigned proc_stride,
62+
uint *const el_base, const unsigned el_stride,
63+
double *const r_base, const unsigned r_stride,
64+
double *const dist2_base, const unsigned dist2_stride,
65+
const double *const x_base[3], const unsigned x_stride[3],
66+
const uint *const session_id_base, const unsigned session_id_stride,
67+
const uint *const session_id_match, const uint npt,
68+
struct findpts_data_3 *const fd);
6769

6870
void findptsms_eval_2(
6971
double *const out_base, const unsigned out_stride,

src/findpts_imp.h

+15-12
Original file line numberDiff line numberDiff line change
@@ -262,14 +262,15 @@ void findptsms_free(struct findpts_data *fd)
262262
struct src_pt { double x[D]; uint index, proc, session_id; };
263263
struct out_pt { double r[D], dist2, disti; uint index, code, el, proc, elsid; };
264264

265-
void findptsms( uint *const code_base, const unsigned code_stride,
266-
uint *const proc_base, const unsigned proc_stride,
267-
uint *const el_base, const unsigned el_stride,
268-
double *const r_base, const unsigned r_stride,
269-
double *const dist2_base, const unsigned dist2_stride,
270-
const double *const x_base[D], const unsigned x_stride[D],
271-
const uint * const session_id_base, const unsigned session_id_stride,
272-
const uint npt, struct findpts_data *const fd)
265+
void findptsms( uint *const code_base, const unsigned code_stride,
266+
uint *const proc_base, const unsigned proc_stride,
267+
uint *const el_base, const unsigned el_stride,
268+
double *const r_base, const unsigned r_stride,
269+
double *const dist2_base, const unsigned dist2_stride,
270+
const double *const x_base[D], const unsigned x_stride[D],
271+
const uint *const session_id_base, const unsigned session_id_stride,
272+
const uint *const session_id_match, const uint npt,
273+
struct findpts_data *const fd)
273274
{
274275
if (fd->fevsetup==1) array_free(&fd->savpt); fd->fevsetup=0;
275276
const uint np = fd->cr.comm.np, id=fd->cr.comm.id;
@@ -289,7 +290,7 @@ void findptsms( uint *const code_base, const unsigned code_
289290
session_id_base,session_id_stride,
290291
disti_base, disti_stride,
291292
elsid_base, elsid_stride,
292-
npt,&fd->local,&fd->cr.data);
293+
session_id_match,npt,&fd->local,&fd->cr.data);
293294
/* send unfound and border points to global hash cells */
294295
{
295296
uint index;
@@ -378,7 +379,7 @@ void findptsms( uint *const code_base, const unsigned code_
378379
spt_sid_base, spt_sid_stride,
379380
&opt[0].disti, sizeof(struct out_pt),
380381
&opt[0].elsid, sizeof(struct out_pt),
381-
src_pt.n,&fd->local,&fd->cr.data);
382+
session_id_match,src_pt.n,&fd->local,&fd->cr.data);
382383
}
383384
array_free(&src_pt);
384385
/* group by code to eliminate unfound points */
@@ -656,7 +657,9 @@ void findpts( uint *const code_base , const unsigned code_stride ,
656657
}
657658
unsigned int *sess_base = tmalloc(uint,1);
658659
*sess_base = 0;
659-
unsigned sess_stride=0;
660+
unsigned sess_stride = 0;
661+
unsigned int *sess_match = tmalloc(uint,1);
662+
*sess_match = 0;
660663

661664
findptsms( code_base, code_stride,
662665
proc_base, proc_stride,
@@ -665,7 +668,7 @@ void findpts( uint *const code_base , const unsigned code_stride ,
665668
dist2_base,dist2_stride,
666669
x_base, x_stride,
667670
sess_base, sess_stride,
668-
npt, fd);
671+
sess_match, npt, fd);
669672
}
670673

671674
void findpts_eval(

src/findpts_local.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ void findptsms_local_2(
5454
const uint *const session_id_base, const unsigned session_id_stride,
5555
double *const disti_base, const unsigned disti_stride,
5656
uint *const elsid_base, const unsigned elsid_stride,
57-
const uint npt, struct findpts_local_data_2 *const fd,
58-
buffer *buf);
57+
const uint *const session_id_match, const uint npt,
58+
struct findpts_local_data_2 *const fd, buffer *buf);
5959
void findptsms_local_eval_2(
6060
double *const out_base, const unsigned out_stride,
6161
const uint *const el_base, const unsigned el_stride,
@@ -133,8 +133,8 @@ void findptsms_local_3(
133133
const uint *const session_id_base, const unsigned session_id_stride,
134134
double *const disti_base, const unsigned disti_stride,
135135
uint *const elsid_base, const unsigned elsid_stride,
136-
const uint npt, struct findpts_local_data_3 *const fd,
137-
buffer *buf);
136+
const uint *const session_id_match, const uint npt,
137+
struct findpts_local_data_3 *const fd, buffer *buf);
138138
void findptsms_local_eval_3(
139139
double *const out_base, const unsigned out_stride,
140140
const uint *const el_base, const unsigned el_stride,

src/findpts_local_imp.h

+16-12
Original file line numberDiff line numberDiff line change
@@ -254,17 +254,18 @@ void findptsms_local_free(struct findpts_local_data *const fd)
254254
(const T*)((const char*)var##_base[d]+(i)*var##_stride[d])
255255

256256
static void map_points_to_els(
257-
struct array *const map,
258-
uint *const code_base, const unsigned code_stride,
259-
const double *const x_base[D], const unsigned x_stride[D],
260-
const uint *const session_id_base, const unsigned session_id_stride,
261-
const uint npt, const struct findpts_local_data *const fd,
262-
buffer *buf)
257+
struct array *const map,
258+
uint *const code_base, const unsigned code_stride,
259+
const double *const x_base[D], const unsigned x_stride[D],
260+
const uint *const session_id_base, const unsigned session_id_stride,
261+
const uint *const session_id_match, const uint npt,
262+
const struct findpts_local_data *const fd, buffer *buf)
263263
{
264264
uint index;
265265
const double *xp[D]; uint *code=code_base;
266266
unsigned d; for(d=0;d<D;++d) xp[d]=x_base[d];
267267
array_init(struct index_el,map,npt+(npt>>2)+1);
268+
uint sessm = *(session_id_match);
268269

269270
const uint *sess_id; sess_id = session_id_base;
270271
for(index=0;index<npt;++index) {
@@ -275,7 +276,8 @@ static void map_points_to_els(
275276
*code = CODE_NOT_FOUND;
276277
for(; elp!=ele; ++elp) {
277278
const uint el = *elp;
278-
if (fd->ims==1 && *(fd->nsid) == *sess_id) continue;
279+
if (fd->ims==1 && sessm!=1 && *(fd->nsid) == *sess_id) continue;
280+
if (fd->ims==1 && sessm==1 && *(fd->nsid) != *sess_id) continue;
279281
if(obbox_test(&fd->obb[el],x)>=0) {
280282
struct index_el *const p =
281283
array_reserve(struct index_el,map,map->n+1);
@@ -309,14 +311,14 @@ void findptsms_local(
309311
const uint *const session_id_base, const unsigned session_id_stride,
310312
double *const disti_base, const unsigned disti_stride,
311313
uint *const elsid_base, const unsigned elsid_stride,
312-
const uint npt, struct findpts_local_data *const fd,
313-
buffer *buf)
314+
const uint *const session_id_match, const uint npt,
315+
struct findpts_local_data *const fd, buffer *buf)
314316
{
315317
struct findpts_el_data *const fed = &fd->fed;
316318
struct findpts_el_pt *const fpt = findpts_el_points(fed);
317319
struct array map; /* point -> element map */
318320
int rsid_stride = 1;
319-
map_points_to_els(&map, code_base,code_stride, x_base,x_stride, session_id_base, session_id_stride,npt, fd, buf);
321+
map_points_to_els(&map, code_base,code_stride, x_base,x_stride, session_id_base, session_id_stride,session_id_match,npt, fd, buf);
320322
{
321323
const unsigned npt_max = fd->fed.npt_max;
322324
const struct index_el *p, *const pe = (struct index_el *)map.ptr+map.n;
@@ -436,9 +438,12 @@ void findpts_local(
436438
unsigned int *sess_base = tmalloc(uint,1);
437439
double *disti_base = tmalloc(double,1);
438440
unsigned int *elsid_base = tmalloc(uint,1);
441+
unsigned int *sess_match = tmalloc(uint,1);
439442
*sess_base = 0;
443+
*sess_match = 0;
440444
*disti_base = 0;
441445
*elsid_base = 0;
446+
442447

443448
unsigned sess_stride=0;
444449
unsigned disti_stride=0;
@@ -452,8 +457,7 @@ void findpts_local(
452457
sess_base, sess_stride,
453458
disti_base,disti_stride,
454459
elsid_base,elsid_stride,
455-
npt,fd,
456-
buf);
460+
sess_match,npt,fd,buf);
457461
}
458462

459463
/* assumes points are already grouped by elements */

0 commit comments

Comments
 (0)