Bug Summary

File:dm/impls/plex/plexinterpolate.c
Warning:line 196, column 10
Array access (via field 'flags') results in a null pointer dereference

Annotated Source Code

[?] Use j/k keys for keyboard navigation

/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c

1#include <petsc/private/dmpleximpl.h> /*I "petscdmplex.h" I*/
2#include <petsc/private/hashmapi.h>
3#include <petsc/private/hashmapij.h>
4
5/* HashIJKL */
6
7#include <petsc/private/hashmap.h>
8
9typedef struct _PetscHashIJKLKey { PetscInt i, j, k, l; } PetscHashIJKLKey;
10
11#define PetscHashIJKLKeyHash(key)PetscHashCombine(PetscHashCombine(PetscHashInt((key).i),PetscHashInt
((key).j)), PetscHashCombine(PetscHashInt((key).k),PetscHashInt
((key).l)))
\
12 PetscHashCombine(PetscHashCombine(PetscHashInt((key).i),PetscHashInt((key).j)), \
13 PetscHashCombine(PetscHashInt((key).k),PetscHashInt((key).l)))
14
15#define PetscHashIJKLKeyEqual(k1,k2)(((k1).i==(k2).i) ? ((k1).j==(k2).j) ? ((k1).k==(k2).k) ? ((k1
).l==(k2).l) : 0 : 0 : 0)
\
16 (((k1).i==(k2).i) ? ((k1).j==(k2).j) ? ((k1).k==(k2).k) ? ((k1).l==(k2).l) : 0 : 0 : 0)
17
18PETSC_HASH_MAP(HashIJKL, PetscHashIJKLKey, PetscInt, PetscHashIJKLKeyHash, PetscHashIJKLKeyEqual, -1)typedef struct kh_HashIJKL_s { khint_t n_buckets, size, n_occupied
, upper_bound; khint32_t *flags; PetscHashIJKLKey *keys; PetscInt
*vals; } kh_HashIJKL_t; static inline __attribute((unused)) kh_HashIJKL_t
*kh_init_HashIJKL(void) { return (kh_HashIJKL_t*)calloc(1,sizeof
(kh_HashIJKL_t)); } static inline __attribute((unused)) void kh_destroy_HashIJKL
(kh_HashIJKL_t *h) { if (h) { free((void *)h->keys); free(
h->flags); free((void *)h->vals); free(h); } } static inline
__attribute((unused)) void kh_clear_HashIJKL(kh_HashIJKL_t *
h) { if (h && h->flags) { memset(h->flags, 0xaa
, ((h->n_buckets) < 16? 1 : (h->n_buckets)>>4)
* sizeof(khint32_t)); h->size = h->n_occupied = 0; } }
static inline __attribute((unused)) khint_t kh_get_HashIJKL(
const kh_HashIJKL_t *h, PetscHashIJKLKey key) { if (h->n_buckets
) { khint_t k, i, last, mask, step = 0; mask = h->n_buckets
- 1; k = PetscHashCombine(PetscHashCombine(PetscHashInt((key
).i),PetscHashInt((key).j)), PetscHashCombine(PetscHashInt((key
).k),PetscHashInt((key).l))); i = k & mask; last = i; while
(!((h->flags[i>>4]>>((i&0xfU)<<1))&
2) && (((h->flags[i>>4]>>((i&0xfU)
<<1))&1) || !(((h->keys[i]).i==(key).i) ? ((h->
keys[i]).j==(key).j) ? ((h->keys[i]).k==(key).k) ? ((h->
keys[i]).l==(key).l) : 0 : 0 : 0))) { i = (i + (++step)) &
mask; if (i == last) return h->n_buckets; } return ((h->
flags[i>>4]>>((i&0xfU)<<1))&3)? h->
n_buckets : i; } else return 0; } static inline __attribute((
unused)) int kh_resize_HashIJKL(kh_HashIJKL_t *h, khint_t new_n_buckets
) { khint32_t *new_flags = 0; khint_t j = 1; { (--(new_n_buckets
), (new_n_buckets)|=(new_n_buckets)>>1, (new_n_buckets)
|=(new_n_buckets)>>2, (new_n_buckets)|=(new_n_buckets)>>
4, (new_n_buckets)|=(new_n_buckets)>>8, (new_n_buckets)
|=(new_n_buckets)>>16, ++(new_n_buckets)); if (new_n_buckets
< 4) new_n_buckets = 4; if (h->size >= (khint_t)(new_n_buckets
* __ac_HASH_UPPER + 0.5)) j = 0; else { new_flags = (khint32_t
*)malloc(((new_n_buckets) < 16? 1 : (new_n_buckets)>>
4) * sizeof(khint32_t)); if (!new_flags) return -1; memset(new_flags
, 0xaa, ((new_n_buckets) < 16? 1 : (new_n_buckets)>>
4) * sizeof(khint32_t)); if (h->n_buckets < new_n_buckets
) { PetscHashIJKLKey *new_keys = (PetscHashIJKLKey*)realloc((
void *)h->keys,new_n_buckets * sizeof(PetscHashIJKLKey)); if
(!new_keys) { free(new_flags); return -1; } h->keys = new_keys
; if (1) { PetscInt *new_vals = (PetscInt*)realloc((void *)h->
vals,new_n_buckets * sizeof(PetscInt)); if (!new_vals) { free
(new_flags); return -1; } h->vals = new_vals; } } } } if (
j) { for (j = 0; j != h->n_buckets; ++j) { if (((h->flags
[j>>4]>>((j&0xfU)<<1))&3) == 0) { PetscHashIJKLKey
key = h->keys[j]; PetscInt val; khint_t new_mask; new_mask
= new_n_buckets - 1; if (1) val = h->vals[j]; (h->flags
[j>>4]|=1ul<<((j&0xfU)<<1)); while (1) {
khint_t k, i, step = 0; k = PetscHashCombine(PetscHashCombine
(PetscHashInt((key).i),PetscHashInt((key).j)), PetscHashCombine
(PetscHashInt((key).k),PetscHashInt((key).l))); i = k & new_mask
; while (!((new_flags[i>>4]>>((i&0xfU)<<
1))&2)) i = (i + (++step)) & new_mask; (new_flags[i>>
4]&=~(2ul<<((i&0xfU)<<1))); if (i < h->
n_buckets && ((h->flags[i>>4]>>((i&
0xfU)<<1))&3) == 0) { { PetscHashIJKLKey tmp = h->
keys[i]; h->keys[i] = key; key = tmp; } if (1) { PetscInt tmp
= h->vals[i]; h->vals[i] = val; val = tmp; } (h->flags
[i>>4]|=1ul<<((i&0xfU)<<1)); } else { h
->keys[i] = key; if (1) h->vals[i] = val; break; } } } }
if (h->n_buckets > new_n_buckets) { h->keys = (PetscHashIJKLKey
*)realloc((void *)h->keys,new_n_buckets * sizeof(PetscHashIJKLKey
)); if (1) h->vals = (PetscInt*)realloc((void *)h->vals
,new_n_buckets * sizeof(PetscInt)); } free(h->flags); h->
flags = new_flags; h->n_buckets = new_n_buckets; h->n_occupied
= h->size; h->upper_bound = (khint_t)(h->n_buckets *
__ac_HASH_UPPER + 0.5); } return 0; } static inline __attribute
((unused)) khint_t kh_put_HashIJKL(kh_HashIJKL_t *h, PetscHashIJKLKey
key, int *ret) { khint_t x; if (h->n_occupied >= h->
upper_bound) { if (h->n_buckets > (h->size<<1)
) { if (kh_resize_HashIJKL(h, h->n_buckets - 1) < 0) { *
ret = -1; return h->n_buckets; } } else if (kh_resize_HashIJKL
(h, h->n_buckets + 1) < 0) { *ret = -1; return h->n_buckets
; } } { khint_t k, i, site, last, mask = h->n_buckets - 1,
step = 0; x = site = h->n_buckets; k = PetscHashCombine(PetscHashCombine
(PetscHashInt((key).i),PetscHashInt((key).j)), PetscHashCombine
(PetscHashInt((key).k),PetscHashInt((key).l))); i = k & mask
; if (((h->flags[i>>4]>>((i&0xfU)<<1
))&2)) x = i; else { last = i; while (!((h->flags[i>>
4]>>((i&0xfU)<<1))&2) && (((h->
flags[i>>4]>>((i&0xfU)<<1))&1) || !
(((h->keys[i]).i==(key).i) ? ((h->keys[i]).j==(key).j) ?
((h->keys[i]).k==(key).k) ? ((h->keys[i]).l==(key).l) :
0 : 0 : 0))) { if (((h->flags[i>>4]>>((i&
0xfU)<<1))&1)) site = i; i = (i + (++step)) & mask
; if (i == last) { x = site; break; } } if (x == h->n_buckets
) { if (((h->flags[i>>4]>>((i&0xfU)<<
1))&2) && site != h->n_buckets) x = site; else
x = i; } } } if (((h->flags[x>>4]>>((x&0xfU
)<<1))&2)) { h->keys[x] = key; (h->flags[x>>
4]&=~(3ul<<((x&0xfU)<<1))); ++h->size;
++h->n_occupied; *ret = 1; } else if (((h->flags[x>>
4]>>((x&0xfU)<<1))&1)) { h->keys[x] = key
; (h->flags[x>>4]&=~(3ul<<((x&0xfU)<<
1))); ++h->size; *ret = 2; } else *ret = 0; return x; } static
inline __attribute((unused)) void kh_del_HashIJKL(kh_HashIJKL_t
*h, khint_t x) { if (x != h->n_buckets && !((h->
flags[x>>4]>>((x&0xfU)<<1))&3)) { (
h->flags[x>>4]|=1ul<<((x&0xfU)<<1));
--h->size; } } typedef kh_HashIJKL_t *PetscHashIJKL; static
inline __attribute((unused)) PetscErrorCode PetscHashIJKLCreate
(PetscHashIJKL *ht) { do { do { ; if (petscstack && (
petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); *ht = kh_init_HashIJKL(); do { if (__builtin_expect
(!!(!(*ht!=((void*)0))),0)) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","*ht!=((void*)0)"
); } while(0); do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLDestroy
(PetscHashIJKL *ht) { do { do { ; if (petscstack && (
petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); if (!*ht) do { do { ; if (petscstack &&
petscstack->currentsize > 0) { petscstack->currentsize
--; petscstack->function[petscstack->currentsize] = 0; petscstack
->file[petscstack->currentsize] = 0; petscstack->line
[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); kh_destroy_HashIJKL(*ht); *ht = ((void*)0); do
{ do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0); } static
inline __attribute((unused)) PetscErrorCode PetscHashIJKLReset
(PetscHashIJKL ht) { do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); { if (ht) { free((ht)->keys); free((ht)->
flags); free((ht)->vals); memset((ht), 0x00, sizeof(*(ht))
); } }; do { do { ; if (petscstack && petscstack->
currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLDuplicate
(PetscHashIJKL ht,PetscHashIJKL *hd) { int ret; PetscHashIJKLKey
key; PetscInt val; do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!hd) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(hd,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0); *hd = kh_init_HashIJKL(); do { if (__builtin_expect
(!!(!(*hd!=((void*)0))),0)) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","*hd!=((void*)0)"
); } while(0); ret = kh_resize_HashIJKL(*hd, ((ht)->size))
; do { if (__builtin_expect(!!(!(ret==0)),0)) return PetscError
(((MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret==0"
); } while(0); { khint_t __i; for (__i = (khint_t)(0); __i !=
((ht)->n_buckets); ++__i) { if (!(!(((ht)->flags[(__i)
>>4]>>(((__i)&0xfU)<<1))&3))) continue
; (key) = ((ht)->keys[__i]); (val) = ((ht)->vals[__i]);
{ khiter_t i; i = kh_put_HashIJKL(*hd, key, &ret); do { if
(__builtin_expect(!!(!(ret>=0)),0)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); ((*hd)->vals[i]) = val;}; } } do { do { ; if
(petscstack && petscstack->currentsize > 0) { petscstack
->currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHashIJKLClear(PetscHashIJKL ht) { do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); kh_clear_HashIJKL(ht); do { do { ; if (petscstack
&& petscstack->currentsize > 0) { petscstack->
currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHashIJKLResize(PetscHashIJKL ht,PetscInt nb) { int ret;
do { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); ret = kh_resize_HashIJKL(ht, (khint_t)nb); do {
if (__builtin_expect(!!(!(ret>=0)),0)) return PetscError(
((MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLGetSize
(PetscHashIJKL ht,PetscInt *n) { do { do { ; if (petscstack &&
(petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!n) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(n,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); *n = (PetscInt)((ht)->size); do { do { ;
if (petscstack && petscstack->currentsize > 0)
{ petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHashIJKLGetCapacity(PetscHashIJKL
ht,PetscInt *n) { do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!n) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(n,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); *n = (PetscInt)((ht)->n_buckets); do { do
{ ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHashIJKLHas(PetscHashIJKL ht,PetscHashIJKLKey
key,PetscBool *has) { khiter_t iter; do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!has) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(has,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); iter = kh_get_HashIJKL(ht, key); *has = (iter !=
((ht)->n_buckets)) ? PETSC_TRUE : PETSC_FALSE; do { do { ;
if (petscstack && petscstack->currentsize > 0)
{ petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHashIJKLGet(PetscHashIJKL ht,PetscHashIJKLKey
key,PetscInt *val) { khiter_t iter; do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!val) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(val,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,3); } while (0); iter = kh_get_HashIJKL(ht, key); *val = (iter
!= ((ht)->n_buckets)) ? ((ht)->vals[iter]) : (-1); do {
do { ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHashIJKLSet(PetscHashIJKL ht,PetscHashIJKLKey
key,PetscInt val) { int ret; khiter_t iter; do { do { ; if (
petscstack && (petscstack->currentsize < 64)) {
petscstack->function[petscstack->currentsize] = __func__
; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); iter = kh_put_HashIJKL(ht, key, &ret); do {
if (__builtin_expect(!!(!(ret>=0)),0)) return PetscError(
((MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); ((ht)->vals[iter]) = val; do { do { ; if (petscstack
&& petscstack->currentsize > 0) { petscstack->
currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHashIJKLDel(PetscHashIJKL ht,PetscHashIJKLKey key) { khiter_t
iter; do { do { ; if (petscstack && (petscstack->
currentsize < 64)) { petscstack->function[petscstack->
currentsize] = __func__; petscstack->file[petscstack->currentsize
] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); iter = kh_get_HashIJKL(ht, key); kh_del_HashIJKL
(ht, iter); do { do { ; if (petscstack && petscstack->
currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLQuerySet
(PetscHashIJKL ht,PetscHashIJKLKey key,PetscInt val,PetscBool
*missing) { int ret; khiter_t iter; do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!missing) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(missing,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); iter = kh_put_HashIJKL(ht, key, &ret); do {
if (__builtin_expect(!!(!(ret>=0)),0)) return PetscError(
((MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); ((ht)->vals[iter]) = val; *missing = ret ? PETSC_TRUE
: PETSC_FALSE; do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLQueryDel
(PetscHashIJKL ht,PetscHashIJKLKey key,PetscBool *present) { khiter_t
iter; do { do { ; if (petscstack && (petscstack->
currentsize < 64)) { petscstack->function[petscstack->
currentsize] = __func__; petscstack->file[petscstack->currentsize
] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!present) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(present,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); iter = kh_get_HashIJKL(ht, key); if (iter != ((
ht)->n_buckets)) { kh_del_HashIJKL(ht, iter); *present = PETSC_TRUE
; } else { *present = PETSC_FALSE; } do { do { ; if (petscstack
&& petscstack->currentsize > 0) { petscstack->
currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHashIJKLFind(PetscHashIJKL ht,PetscHashIJKLKey key,PetscHashIter
*iter,PetscBool *found) { do { do { ; if (petscstack &&
(petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!iter) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(iter,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0); do { if (!found) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(found,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); *iter = kh_get_HashIJKL(ht, key); *found = (*iter
!= ((ht)->n_buckets)) ? PETSC_TRUE : PETSC_FALSE; do { do
{ ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHashIJKLPut(PetscHashIJKL ht,PetscHashIJKLKey
key,PetscHashIter *iter,PetscBool *missing) { int ret; do { do
{ ; if (petscstack && (petscstack->currentsize <
64)) { petscstack->function[petscstack->currentsize] =
__func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!iter) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(iter,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0); do { if (!missing) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(missing,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); *iter = kh_put_HashIJKL(ht, key, &ret); do {
if (__builtin_expect(!!(!(ret>=0)),0)) return PetscError(
((MPI_Comm)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); *missing = ret ? PETSC_TRUE : PETSC_FALSE; do {
do { ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHashIJKLIterGet(PetscHashIJKL ht
,PetscHashIter iter,PetscInt *val) { do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!val) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(val,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); *val = __builtin_expect(!!(iter < ((ht)->
n_buckets) && (!(((ht)->flags[(iter)>>4]>>
(((iter)&0xfU)<<1))&3))),1) ? ((ht)->vals[iter
]) : (-1); do { do { ; if (petscstack && petscstack->
currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLIterSet
(PetscHashIJKL ht,PetscHashIter iter,PetscInt val) { do { do {
; if (petscstack && (petscstack->currentsize <
64)) { petscstack->function[petscstack->currentsize] =
__func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); if (__builtin_expect(!!(iter < ((ht)->n_buckets
) && (!(((ht)->flags[(iter)>>4]>>(((iter
)&0xfU)<<1))&3))),1)) ((ht)->vals[iter]) = val
; do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0); } static
inline __attribute((unused)) PetscErrorCode PetscHashIJKLIterDel
(PetscHashIJKL ht,PetscHashIter iter) { do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); if (__builtin_expect(!!(iter < ((ht)->n_buckets
)),1)) kh_del_HashIJKL(ht, iter); do { do { ; if (petscstack &&
petscstack->currentsize > 0) { petscstack->currentsize
--; petscstack->function[petscstack->currentsize] = 0; petscstack
->file[petscstack->currentsize] = 0; petscstack->line
[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHashIJKLGetKeys(PetscHashIJKL ht,PetscInt *off,PetscHashIJKLKey
array[]) { PetscHashIJKLKey key; PetscInt pos; do { do { ; if
(petscstack && (petscstack->currentsize < 64))
{ petscstack->function[petscstack->currentsize] = __func__
; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!off) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(off,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); pos = *off; { khint_t __i; for (__i = (khint_t
)(0); __i != ((ht)->n_buckets); ++__i) { if (!(!(((ht)->
flags[(__i)>>4]>>(((__i)&0xfU)<<1))&
3))) continue; (key) = ((ht)->keys[__i]); array[pos++] = key
; } }; *off = pos; do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLGetVals
(PetscHashIJKL ht,PetscInt *off,PetscInt array[]) { PetscInt val
; PetscInt pos; do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!off) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(off,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); pos = *off; { khint_t __i; for (__i = (khint_t
)(0); __i != ((ht)->n_buckets); ++__i) { if (!(!(((ht)->
flags[(__i)>>4]>>(((__i)&0xfU)<<1))&
3))) continue; (val) = ((ht)->vals[__i]); array[pos++] = val
; } }; *off = pos; do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHashIJKLGetPairs
(PetscHashIJKL ht,PetscInt *off,PetscHashIJKLKey karray[],PetscInt
varray[]) { PetscInt val; PetscHashIJKLKey key; PetscInt pos
; do { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 18; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!off) return PetscError(((MPI_Comm)0x44000001
),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(off,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),18,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); pos = *off; { khint_t __i; for (__i = (khint_t
)(0); __i != ((ht)->n_buckets); ++__i) { if (!(!(((ht)->
flags[(__i)>>4]>>(((__i)&0xfU)<<1))&
3))) continue; (key) = ((ht)->keys[__i]); (val) = ((ht)->
vals[__i]); { karray[pos] = key; varray[pos++] = val;}; } } *
off = pos; do { do { ; if (petscstack && petscstack->
currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); }
19
20
21/*
22 DMPlexGetFaces_Internal - Gets groups of vertices that correspond to faces for the given cell
23 This assumes that the mesh is not interpolated from the depth of point p to the vertices
24*/
25PetscErrorCode DMPlexGetFaces_Internal(DM dm, PetscInt dim, PetscInt p, PetscInt *numFaces, PetscInt *faceSize, const PetscInt *faces[])
26{
27 const PetscInt *cone = NULL((void*)0);
28 PetscInt coneSize;
29 PetscErrorCode ierr;
30
31 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 31; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
32 PetscValidHeaderSpecific(dm, DM_CLASSID, 1)do { if (!dm) return PetscError(((MPI_Comm)0x44000001),32,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),32,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),32,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),32,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
33 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),33,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
34 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),34,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
35 ierr = DMPlexGetRawFaces_Internal(dm, dim, coneSize, cone, numFaces, faceSize, faces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),35,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
36 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
37}
38
39/*
40 DMPlexRestoreFaces_Internal - Restores the array
41*/
42PetscErrorCode DMPlexRestoreFaces_Internal(DM dm, PetscInt dim, PetscInt p, PetscInt *numFaces, PetscInt *faceSize, const PetscInt *faces[])
43{
44 PetscErrorCode ierr;
45
46 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 46; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
47 if (faces) { ierr = DMRestoreWorkArray(dm, 0, MPIU_INT((MPI_Datatype)0x4c000405), (void *) faces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),47,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; }
48 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
49}
50
51/*
52 DMPlexGetRawFaces_Internal - Gets groups of vertices that correspond to faces for the given cone
53*/
54PetscErrorCode DMPlexGetRawFaces_Internal(DM dm, PetscInt dim, PetscInt coneSize, const PetscInt cone[], PetscInt *numFaces, PetscInt *faceSize, const PetscInt *faces[])
55{
56 PetscInt *facesTmp;
57 PetscInt maxConeSize, maxSupportSize;
58 PetscErrorCode ierr;
59
60 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 60; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
61 PetscValidHeaderSpecific(dm, DM_CLASSID, 1)do { if (!dm) return PetscError(((MPI_Comm)0x44000001),61,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),61,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),61,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),61,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
62 if (faces && coneSize) PetscValidIntPointer(cone,4)do { if (!cone) return PetscError(((MPI_Comm)0x44000001),62,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",4); if
(!PetscCheckPointer(cone,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),62,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,4); } while (0)
;
63 ierr = DMPlexGetMaxSizes(dm, &maxConeSize, &maxSupportSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),63,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
64 if (faces) {ierr = DMGetWorkArray(dm, PetscSqr(PetscMax(maxConeSize, maxSupportSize))(((((maxConeSize)<(maxSupportSize)) ? (maxSupportSize) : (
maxConeSize)))*((((maxConeSize)<(maxSupportSize)) ? (maxSupportSize
) : (maxConeSize))))
, MPIU_INT((MPI_Datatype)0x4c000405), &facesTmp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),64,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
65 switch (dim) {
66 case 1:
67 switch (coneSize) {
68 case 2:
69 if (faces) {
70 facesTmp[0] = cone[0]; facesTmp[1] = cone[1];
71 *faces = facesTmp;
72 }
73 if (numFaces) *numFaces = 2;
74 if (faceSize) *faceSize = 1;
75 break;
76 default:
77 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Cone size %D not supported for dimension %D", coneSize, dim)return PetscError(((MPI_Comm)0x44000001),77,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Cone size %D not supported for dimension %D"
,coneSize,dim)
;
78 }
79 break;
80 case 2:
81 switch (coneSize) {
82 case 3:
83 if (faces) {
84 facesTmp[0] = cone[0]; facesTmp[1] = cone[1];
85 facesTmp[2] = cone[1]; facesTmp[3] = cone[2];
86 facesTmp[4] = cone[2]; facesTmp[5] = cone[0];
87 *faces = facesTmp;
88 }
89 if (numFaces) *numFaces = 3;
90 if (faceSize) *faceSize = 2;
91 break;
92 case 4:
93 /* Vertices follow right hand rule */
94 if (faces) {
95 facesTmp[0] = cone[0]; facesTmp[1] = cone[1];
96 facesTmp[2] = cone[1]; facesTmp[3] = cone[2];
97 facesTmp[4] = cone[2]; facesTmp[5] = cone[3];
98 facesTmp[6] = cone[3]; facesTmp[7] = cone[0];
99 *faces = facesTmp;
100 }
101 if (numFaces) *numFaces = 4;
102 if (faceSize) *faceSize = 2;
103 break;
104 default:
105 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Cone size %D not supported for dimension %D", coneSize, dim)return PetscError(((MPI_Comm)0x44000001),105,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Cone size %D not supported for dimension %D"
,coneSize,dim)
;
106 }
107 break;
108 case 3:
109 switch (coneSize) {
110 case 3:
111 if (faces) {
112 facesTmp[0] = cone[0]; facesTmp[1] = cone[1];
113 facesTmp[2] = cone[1]; facesTmp[3] = cone[2];
114 facesTmp[4] = cone[2]; facesTmp[5] = cone[0];
115 *faces = facesTmp;
116 }
117 if (numFaces) *numFaces = 3;
118 if (faceSize) *faceSize = 2;
119 break;
120 case 4:
121 /* Vertices of first face follow right hand rule and normal points away from last vertex */
122 if (faces) {
123 facesTmp[0] = cone[0]; facesTmp[1] = cone[1]; facesTmp[2] = cone[2];
124 facesTmp[3] = cone[0]; facesTmp[4] = cone[3]; facesTmp[5] = cone[1];
125 facesTmp[6] = cone[0]; facesTmp[7] = cone[2]; facesTmp[8] = cone[3];
126 facesTmp[9] = cone[2]; facesTmp[10] = cone[1]; facesTmp[11] = cone[3];
127 *faces = facesTmp;
128 }
129 if (numFaces) *numFaces = 4;
130 if (faceSize) *faceSize = 3;
131 break;
132 case 8:
133 /* 7--------6
134 /| /|
135 / | / |
136 4--------5 |
137 | | | |
138 | | | |
139 | 1--------2
140 | / | /
141 |/ |/
142 0--------3
143 */
144 if (faces) {
145 facesTmp[0] = cone[0]; facesTmp[1] = cone[1]; facesTmp[2] = cone[2]; facesTmp[3] = cone[3]; /* Bottom */
146 facesTmp[4] = cone[4]; facesTmp[5] = cone[5]; facesTmp[6] = cone[6]; facesTmp[7] = cone[7]; /* Top */
147 facesTmp[8] = cone[0]; facesTmp[9] = cone[3]; facesTmp[10] = cone[5]; facesTmp[11] = cone[4]; /* Front */
148 facesTmp[12] = cone[2]; facesTmp[13] = cone[1]; facesTmp[14] = cone[7]; facesTmp[15] = cone[6]; /* Back */
149 facesTmp[16] = cone[3]; facesTmp[17] = cone[2]; facesTmp[18] = cone[6]; facesTmp[19] = cone[5]; /* Right */
150 facesTmp[20] = cone[0]; facesTmp[21] = cone[4]; facesTmp[22] = cone[7]; facesTmp[23] = cone[1]; /* Left */
151 *faces = facesTmp;
152 }
153 if (numFaces) *numFaces = 6;
154 if (faceSize) *faceSize = 4;
155 break;
156 default:
157 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Cone size %D not supported for dimension %D", coneSize, dim)return PetscError(((MPI_Comm)0x44000001),157,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Cone size %D not supported for dimension %D"
,coneSize,dim)
;
158 }
159 break;
160 default:
161 SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Dimension %D not supported", dim)return PetscError(((MPI_Comm)0x44000001),161,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Dimension %D not supported",dim)
;
162 }
163 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
164}
165
166/*
167 DMPlexGetRawFacesHybrid_Internal - Gets groups of vertices that correspond to faces for the given cone using hybrid ordering (prisms)
168*/
169static PetscErrorCode DMPlexGetRawFacesHybrid_Internal(DM dm, PetscInt dim, PetscInt coneSize, const PetscInt cone[], PetscInt *numFaces, PetscInt *numFacesNotH, PetscInt *faceSize, const PetscInt *faces[])
170{
171 PetscInt *facesTmp;
172 PetscInt maxConeSize, maxSupportSize;
173 PetscErrorCode ierr;
174
175 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 175; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
176 PetscValidHeaderSpecific(dm, DM_CLASSID, 1)do { if (!dm) return PetscError(((MPI_Comm)0x44000001),176,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),176,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),176,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),176,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
177 if (faces && coneSize) PetscValidIntPointer(cone,4)do { if (!cone) return PetscError(((MPI_Comm)0x44000001),177,
__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",4); if
(!PetscCheckPointer(cone,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),177,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,4); } while (0)
;
178 ierr = DMPlexGetMaxSizes(dm, &maxConeSize, &maxSupportSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),178,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
179 if (faces) {ierr = DMGetWorkArray(dm, PetscSqr(PetscMax(maxConeSize, maxSupportSize))(((((maxConeSize)<(maxSupportSize)) ? (maxSupportSize) : (
maxConeSize)))*((((maxConeSize)<(maxSupportSize)) ? (maxSupportSize
) : (maxConeSize))))
, MPIU_INT((MPI_Datatype)0x4c000405), &facesTmp);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),179,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
180 switch (dim) {
181 case 1:
182 switch (coneSize) {
183 case 2:
184 if (faces) {
185 facesTmp[0] = cone[0]; facesTmp[1] = cone[1];
186 *faces = facesTmp;
187 }
188 if (numFaces) *numFaces = 2;
189 if (numFacesNotH) *numFacesNotH = 2;
190 if (faceSize) *faceSize = 1;
191 break;
192 default:
193 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Cone size %D not supported for dimension %D", coneSize, dim)return PetscError(((MPI_Comm)0x44000001),193,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Cone size %D not supported for dimension %D"
,coneSize,dim)
;
194 }
195 break;
196 case 2:
197 switch (coneSize) {
198 case 4:
199 if (faces) {
200 facesTmp[0] = cone[0]; facesTmp[1] = cone[1];
201 facesTmp[2] = cone[2]; facesTmp[3] = cone[3];
202 facesTmp[4] = cone[0]; facesTmp[5] = cone[2];
203 facesTmp[6] = cone[1]; facesTmp[7] = cone[3];
204 *faces = facesTmp;
205 }
206 if (numFaces) *numFaces = 4;
207 if (numFacesNotH) *numFacesNotH = 2;
208 if (faceSize) *faceSize = 2;
209 break;
210 default:
211 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Cone size %D not supported for dimension %D", coneSize, dim)return PetscError(((MPI_Comm)0x44000001),211,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Cone size %D not supported for dimension %D"
,coneSize,dim)
;
212 }
213 break;
214 case 3:
215 switch (coneSize) {
216 case 6: /* triangular prism */
217 if (faces) {
218 facesTmp[0] = cone[0]; facesTmp[1] = cone[1]; facesTmp[2] = cone[2]; facesTmp[3] = -1; /* Bottom */
219 facesTmp[4] = cone[3]; facesTmp[5] = cone[4]; facesTmp[6] = cone[5]; facesTmp[7] = -1; /* Top */
220 facesTmp[8] = cone[0]; facesTmp[9] = cone[1]; facesTmp[10] = cone[3]; facesTmp[11] = cone[4]; /* Back left */
221 facesTmp[12] = cone[1]; facesTmp[13] = cone[2]; facesTmp[14] = cone[4]; facesTmp[15] = cone[5]; /* Back right */
222 facesTmp[16] = cone[2]; facesTmp[17] = cone[0]; facesTmp[18] = cone[5]; facesTmp[19] = cone[3]; /* Front */
223 *faces = facesTmp;
224 }
225 if (numFaces) *numFaces = 5;
226 if (numFacesNotH) *numFacesNotH = 2;
227 if (faceSize) *faceSize = -4;
228 break;
229 default:
230 SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Cone size %D not supported for dimension %D", coneSize, dim)return PetscError(((MPI_Comm)0x44000001),230,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Cone size %D not supported for dimension %D"
,coneSize,dim)
;
231 }
232 break;
233 default:
234 SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "Dimension %D not supported", dim)return PetscError(((MPI_Comm)0x44000001),234,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,63,PETSC_ERROR_INITIAL,"Dimension %D not supported",dim)
;
235 }
236 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
237}
238
239static PetscErrorCode DMPlexRestoreRawFacesHybrid_Internal(DM dm, PetscInt dim, PetscInt coneSize, const PetscInt cone[], PetscInt *numFaces, PetscInt *numFacesNotH, PetscInt *faceSize, const PetscInt *faces[])
240{
241 PetscErrorCode ierr;
242
243 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 243; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
244 if (faces) { ierr = DMRestoreWorkArray(dm, 0, MPIU_INT((MPI_Datatype)0x4c000405), (void *) faces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),244,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
; }
245 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
246}
247
248static PetscErrorCode DMPlexGetFacesHybrid_Internal(DM dm, PetscInt dim, PetscInt p, PetscInt *numFaces, PetscInt *numFacesNotH, PetscInt *faceSize, const PetscInt *faces[])
249{
250 const PetscInt *cone = NULL((void*)0);
251 PetscInt coneSize;
252 PetscErrorCode ierr;
253
254 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 254; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
255 PetscValidHeaderSpecific(dm, DM_CLASSID, 1)do { if (!dm) return PetscError(((MPI_Comm)0x44000001),255,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),255,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),255,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),255,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
256 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),256,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
257 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),257,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
258 ierr = DMPlexGetRawFacesHybrid_Internal(dm, dim, coneSize, cone, numFaces, numFacesNotH, faceSize, faces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),258,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
259 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
260}
261
262/* This interpolates faces for cells at some stratum */
263static PetscErrorCode DMPlexInterpolateFaces_Internal(DM dm, PetscInt cellDepth, DM idm)
264{
265 DMLabel subpointMap;
266 PetscHashIJKL faceTable;
267 PetscInt *pStart, *pEnd;
268 PetscInt cellDim, depth, faceDepth = cellDepth, numPoints = 0, faceSizeAll = 0, face, c, d;
269 PetscInt coneSizeH = 0, faceSizeAllH = 0, faceSizeAllT = 0, numCellFacesH = 0, faceT = 0, faceH, pMax = -1, dim, outerloop;
270 PetscInt cMax, fMax, eMax, vMax;
271 PetscErrorCode ierr;
272
273 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 273; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
274 ierr = DMGetDimension(dm, &cellDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),274,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
275 /* HACK: I need a better way to determine face dimension, or an alternative to GetFaces() */
276 ierr = DMPlexGetSubpointMap(dm, &subpointMap);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),276,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
277 if (subpointMap) ++cellDim;
278 ierr = DMPlexGetDepth(dm, &depth);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),278,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
279 ++depth;
280 ++cellDepth;
281 cellDim -= depth - cellDepth;
282 ierr = PetscMalloc2(depth+1,&pStart,depth+1,&pEnd)PetscMallocA(2,PETSC_FALSE,282,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(depth+1)*sizeof(**(&pStart)),(&pStart),(size_t
)(depth+1)*sizeof(**(&pEnd)),(&pEnd))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),282,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
283 for (d = depth-1; d >= faceDepth; --d) {
284 ierr = DMPlexGetDepthStratum(dm, d, &pStart[d+1], &pEnd[d+1]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),284,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
285 }
286 ierr = DMPlexGetDepthStratum(dm, -1, NULL((void*)0), &pStart[faceDepth]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),286,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
287 pEnd[faceDepth] = pStart[faceDepth];
288 for (d = faceDepth-1; d >= 0; --d) {
289 ierr = DMPlexGetDepthStratum(dm, d, &pStart[d], &pEnd[d]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),289,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
290 }
291 cMax = fMax = eMax = vMax = PETSC_DETERMINE-1;
292 ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),292,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
293 if (cellDim == dim) {
294 ierr = DMPlexGetHybridBounds(dm, &cMax, NULL((void*)0), NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),294,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
295 pMax = cMax;
296 } else if (cellDim == dim -1) {
297 ierr = DMPlexGetHybridBounds(dm, &cMax, &fMax, NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),297,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
298 pMax = fMax;
299 }
300 pMax = pMax < 0 ? pEnd[cellDepth] : pMax;
301 if (pMax < pEnd[cellDepth]) {
302 const PetscInt *cellFaces, *cone;
303 PetscInt numCellFacesT, faceSize, cf;
304
305 /* First get normal cell face size (we now allow hybrid cells to meet normal cells on either hybrid or normal faces */
306 if (pStart[cellDepth] < pMax) {ierr = DMPlexGetFaces_Internal(dm, cellDim, pStart[cellDepth], NULL((void*)0), &faceSizeAll, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),306,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
307
308 ierr = DMPlexGetConeSize(dm, pMax, &coneSizeH);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),308,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
309 ierr = DMPlexGetCone(dm, pMax, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),309,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
310 ierr = DMPlexGetRawFacesHybrid_Internal(dm, cellDim, coneSizeH, cone, &numCellFacesH, &numCellFacesT, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),310,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
311 if (faceSize < 0) {
312 PetscInt *sizes, minv, maxv;
313
314 /* count vertices of hybrid and non-hybrid faces */
315 ierr = PetscCalloc1(numCellFacesH, &sizes)PetscMallocA(1,PETSC_TRUE,315,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(numCellFacesH)*sizeof(**(&sizes)),(&sizes))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),315,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
316 for (cf = 0; cf < numCellFacesT; ++cf) { /* These are the non-hybrid faces */
317 const PetscInt *cellFace = &cellFaces[-cf*faceSize];
318 PetscInt f;
319
320 for (f = 0; f < -faceSize; ++f) sizes[cf] += (cellFace[f] >= 0 ? 1 : 0);
321 }
322 ierr = PetscSortInt(numCellFacesT, sizes);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),322,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
323 minv = sizes[0];
324 maxv = sizes[PetscMax(numCellFacesT-1, 0)(((numCellFacesT-1)<(0)) ? (0) : (numCellFacesT-1))];
325 if (minv != maxv) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Different number of vertices for non-hybrid face %D != %D", minv, maxv)return PetscError(((MPI_Comm)0x44000001),325,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Different number of vertices for non-hybrid face %D != %D"
,minv,maxv)
;
326 faceSizeAllT = minv;
327 ierr = PetscArrayzero(sizes, numCellFacesH)PetscMemzero(sizes,(numCellFacesH)*sizeof(*(sizes)));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),327,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
328 for (cf = numCellFacesT; cf < numCellFacesH; ++cf) { /* These are the hybrid faces */
329 const PetscInt *cellFace = &cellFaces[-cf*faceSize];
330 PetscInt f;
331
332 for (f = 0; f < -faceSize; ++f) sizes[cf-numCellFacesT] += (cellFace[f] >= 0 ? 1 : 0);
333 }
334 ierr = PetscSortInt(numCellFacesH - numCellFacesT, sizes);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),334,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
335 minv = sizes[0];
336 maxv = sizes[PetscMax(numCellFacesH - numCellFacesT-1, 0)(((numCellFacesH - numCellFacesT-1)<(0)) ? (0) : (numCellFacesH
- numCellFacesT-1))
];
337 ierr = PetscFree(sizes)((*PetscTrFree)((void*)(sizes),337,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
) || ((sizes) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),337,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
338 if (minv != maxv) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Different number of vertices for hybrid face %D != %D", minv, maxv)return PetscError(((MPI_Comm)0x44000001),338,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Different number of vertices for hybrid face %D != %D"
,minv,maxv)
;
339 faceSizeAllH = minv;
340 if (!faceSizeAll) faceSizeAll = faceSizeAllT;
341 } else { /* the size of the faces in hybrid cells is the same */
342 faceSizeAll = faceSizeAllH = faceSizeAllT = faceSize;
343 }
344 ierr = DMPlexRestoreRawFacesHybrid_Internal(dm, cellDim, coneSizeH, cone, &numCellFacesH, &numCellFacesT, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),344,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
345 } else if (pEnd[cellDepth] > pStart[cellDepth]) {
346 ierr = DMPlexGetFaces_Internal(dm, cellDim, pStart[cellDepth], NULL((void*)0), &faceSizeAll, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),346,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
347 faceSizeAllH = faceSizeAllT = faceSizeAll;
348 }
349 if (faceSizeAll > 4) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Do not support interpolation of meshes with faces of %D vertices", faceSizeAll)return PetscError(((MPI_Comm)0x44000001),349,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Do not support interpolation of meshes with faces of %D vertices"
,faceSizeAll)
;
350
351 /* With hybrid grids, we first iterate on hybrid cells and start numbering the non-hybrid faces
352 Then, faces for non-hybrid cells are numbered.
353 This is to guarantee consistent orientations (all 0) of all the points in the cone of the hybrid cells */
354 ierr = PetscHashIJKLCreate(&faceTable);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),354,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
355 for (outerloop = 0, face = pStart[faceDepth]; outerloop < 2; outerloop++) {
356 PetscInt start, end;
357
358 start = outerloop == 0 ? pMax : pStart[cellDepth];
359 end = outerloop == 0 ? pEnd[cellDepth] : pMax;
360 for (c = start; c < end; ++c) {
361 const PetscInt *cellFaces;
362 PetscInt numCellFaces, faceSize, faceSizeInc, faceSizeCheck, cf;
363
364 if (c < pMax) {
365 ierr = DMPlexGetFaces_Internal(dm, cellDim, c, &numCellFaces, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),365,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
366 if (faceSize != faceSizeAll) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Inconsistent face for cell %D of size %D != %D", c, faceSize, faceSizeAll)return PetscError(((MPI_Comm)0x44000001),366,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Inconsistent face for cell %D of size %D != %D"
,c,faceSize,faceSizeAll)
;
367 faceSizeCheck = faceSizeAll;
368 } else { /* Hybrid cell */
369 const PetscInt *cone;
370 PetscInt numCellFacesN, coneSize;
371
372 ierr = DMPlexGetConeSize(dm, c, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),372,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
373 if (coneSize != coneSizeH) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected hybrid coneSize %D != %D", coneSize, coneSizeH)return PetscError(((MPI_Comm)0x44000001),373,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected hybrid coneSize %D != %D"
,coneSize,coneSizeH)
;
374 ierr = DMPlexGetCone(dm, c, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),374,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
375 ierr = DMPlexGetRawFacesHybrid_Internal(dm, cellDim, coneSize, cone, &numCellFaces, &numCellFacesN, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),375,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
376 if (numCellFaces != numCellFacesH) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected numCellFaces %D != %D for hybrid cell %D", numCellFaces, numCellFacesH, c)return PetscError(((MPI_Comm)0x44000001),376,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected numCellFaces %D != %D for hybrid cell %D"
,numCellFaces,numCellFacesH,c)
;
377 faceSize = PetscMax(faceSize, -faceSize)(((faceSize)<(-faceSize)) ? (-faceSize) : (faceSize));
378 if (faceSize > 4) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Do not support interpolation of meshes with faces of %D vertices", faceSize)return PetscError(((MPI_Comm)0x44000001),378,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Do not support interpolation of meshes with faces of %D vertices"
,faceSize)
;
379 numCellFaces = numCellFacesN; /* process only non-hybrid faces */
380 faceSizeCheck = faceSizeAllT;
381 }
382 faceSizeInc = faceSize;
383 for (cf = 0; cf < numCellFaces; ++cf) {
384 const PetscInt *cellFace = &cellFaces[cf*faceSizeInc];
385 PetscInt faceSizeH = faceSize;
386 PetscHashIJKLKey key;
387 PetscHashIter iter;
388 PetscBool missing;
389
390 if (faceSizeInc == 2) {
391 key.i = PetscMin(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[0]) : (cellFace
[1]))
;
392 key.j = PetscMax(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[1]) : (cellFace
[0]))
;
393 key.k = PETSC_MAX_INT2147483647;
394 key.l = PETSC_MAX_INT2147483647;
395 } else {
396 key.i = cellFace[0];
397 key.j = cellFace[1];
398 key.k = cellFace[2];
399 key.l = faceSize > 3 ? (cellFace[3] < 0 ? faceSizeH = 3, PETSC_MAX_INT2147483647 : cellFace[3]) : PETSC_MAX_INT2147483647;
400 ierr = PetscSortInt(faceSize, (PetscInt *) &key);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),400,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
401 }
402 /* this check is redundant for non-hybrid meshes */
403 if (faceSizeH != faceSizeCheck) SETERRQ4(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected number of vertices for face %D of point %D -> %D != %D", cf, c, faceSizeH, faceSizeCheck)return PetscError(((MPI_Comm)0x44000001),403,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected number of vertices for face %D of point %D -> %D != %D"
,cf,c,faceSizeH,faceSizeCheck)
;
404 ierr = PetscHashIJKLPut(faceTable, key, &iter, &missing);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),404,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
405 if (missing) {
406 ierr = PetscHashIJKLIterSet(faceTable, iter, face++);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),406,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
407 if (c >= pMax) ++faceT;
408 }
409 }
410 if (c < pMax) {
411 ierr = DMPlexRestoreFaces_Internal(dm, cellDim, c, &numCellFaces, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),411,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
412 } else {
413 ierr = DMPlexRestoreRawFacesHybrid_Internal(dm, cellDim, coneSizeH, NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0), &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),413,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
414 }
415 }
416 }
417 pEnd[faceDepth] = face;
418
419 /* Second pass for hybrid meshes: number hybrid faces */
420 for (c = pMax; c < pEnd[cellDepth]; ++c) {
421 const PetscInt *cellFaces, *cone;
422 PetscInt numCellFaces, numCellFacesN, faceSize, cf, coneSize;
423
424 ierr = DMPlexGetConeSize(dm, c, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),424,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
425 ierr = DMPlexGetCone(dm, c, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),425,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
426 ierr = DMPlexGetRawFacesHybrid_Internal(dm, cellDim, coneSize, cone, &numCellFaces, &numCellFacesN, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),426,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
427 if (numCellFaces != numCellFacesH) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected hybrid numCellFaces %D != %D", numCellFaces, numCellFacesH)return PetscError(((MPI_Comm)0x44000001),427,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected hybrid numCellFaces %D != %D"
,numCellFaces,numCellFacesH)
;
428 faceSize = PetscMax(faceSize, -faceSize)(((faceSize)<(-faceSize)) ? (-faceSize) : (faceSize));
429 for (cf = numCellFacesN; cf < numCellFaces; ++cf) { /* These are the hybrid faces */
430 const PetscInt *cellFace = &cellFaces[cf*faceSize];
431 PetscHashIJKLKey key;
432 PetscHashIter iter;
433 PetscBool missing;
434 PetscInt faceSizeH = faceSize;
435
436 if (faceSize == 2) {
437 key.i = PetscMin(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[0]) : (cellFace
[1]))
;
438 key.j = PetscMax(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[1]) : (cellFace
[0]))
;
439 key.k = PETSC_MAX_INT2147483647;
440 key.l = PETSC_MAX_INT2147483647;
441 } else {
442 key.i = cellFace[0];
443 key.j = cellFace[1];
444 key.k = cellFace[2];
445 key.l = faceSize > 3 ? (cellFace[3] < 0 ? faceSizeH = 3, PETSC_MAX_INT2147483647 : cellFace[3]) : PETSC_MAX_INT2147483647;
446 ierr = PetscSortInt(faceSize, (PetscInt *) &key);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),446,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
447 }
448 if (faceSizeH != faceSizeAllH) SETERRQ4(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected number of vertices for hybrid face %D of point %D -> %D != %D", cf, c, faceSizeH, faceSizeAllH)return PetscError(((MPI_Comm)0x44000001),448,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected number of vertices for hybrid face %D of point %D -> %D != %D"
,cf,c,faceSizeH,faceSizeAllH)
;
449 ierr = PetscHashIJKLPut(faceTable, key, &iter, &missing);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),449,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
450 if (missing) {ierr = PetscHashIJKLIterSet(faceTable, iter, face++);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),450,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
451 }
452 ierr = DMPlexRestoreRawFacesHybrid_Internal(dm, cellDim, coneSize, cone, &numCellFaces, &numCellFacesN, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),452,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
453 }
454 faceH = face - pEnd[faceDepth];
455 if (faceH) {
456 if (fMax == PETSC_DETERMINE-1) fMax = pEnd[faceDepth];
457 else if (eMax == PETSC_DETERMINE-1) eMax = pEnd[faceDepth];
458 else SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Number of unassigned hybrid facets %D for cellDim %D and dimension %D", faceH, cellDim, dim)return PetscError(((MPI_Comm)0x44000001),458,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Number of unassigned hybrid facets %D for cellDim %D and dimension %D"
,faceH,cellDim,dim)
;
459 }
460 pEnd[faceDepth] = face;
461 ierr = PetscHashIJKLDestroy(&faceTable);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),461,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
462 /* Count new points */
463 for (d = 0; d <= depth; ++d) {
464 numPoints += pEnd[d]-pStart[d];
465 }
466 ierr = DMPlexSetChart(idm, 0, numPoints);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),466,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
467 /* Set cone sizes */
468 for (d = 0; d <= depth; ++d) {
469 PetscInt coneSize, p;
470
471 if (d == faceDepth) {
472 /* Now we have two cases: */
473 if (faceSizeAll == faceSizeAllT) {
474 /* I see no way to do this if we admit faces of different shapes */
475 for (p = pStart[d]; p < pEnd[d]-faceH; ++p) {
476 ierr = DMPlexSetConeSize(idm, p, faceSizeAll);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),476,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
477 }
478 for (p = pEnd[d]-faceH; p < pEnd[d]; ++p) {
479 ierr = DMPlexSetConeSize(idm, p, faceSizeAllH);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),479,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
480 }
481 } else if (faceSizeAll == faceSizeAllH) {
482 for (p = pStart[d]; p < pStart[d]+faceT; ++p) {
483 ierr = DMPlexSetConeSize(idm, p, faceSizeAllT);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),483,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
484 }
485 for (p = pStart[d]+faceT; p < pEnd[d]-faceH; ++p) {
486 ierr = DMPlexSetConeSize(idm, p, faceSizeAll);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),486,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
487 }
488 for (p = pEnd[d]-faceH; p < pEnd[d]; ++p) {
489 ierr = DMPlexSetConeSize(idm, p, faceSizeAllH);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),489,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
490 }
491 } else SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Inconsistent faces sizes N: %D T: %D H: %D", faceSizeAll, faceSizeAllT, faceSizeAllH)return PetscError(((MPI_Comm)0x44000001),491,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Inconsistent faces sizes N: %D T: %D H: %D"
,faceSizeAll,faceSizeAllT,faceSizeAllH)
;
492 } else if (d == cellDepth) {
493 for (p = pStart[d]; p < pEnd[d]; ++p) {
494 /* Number of cell faces may be different from number of cell vertices*/
495 if (p < pMax) {
496 ierr = DMPlexGetFaces_Internal(dm, cellDim, p, &coneSize, NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),496,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
497 } else {
498 ierr = DMPlexGetFacesHybrid_Internal(dm, cellDim, p, &coneSize, NULL((void*)0), NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),498,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
499 }
500 ierr = DMPlexSetConeSize(idm, p, coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),500,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
501 }
502 } else {
503 for (p = pStart[d]; p < pEnd[d]; ++p) {
504 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),504,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
505 ierr = DMPlexSetConeSize(idm, p, coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),505,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
506 }
507 }
508 }
509 ierr = DMSetUp(idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),509,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
510 /* Get face cones from subsets of cell vertices */
511 if (faceSizeAll > 4) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Do not support interpolation of meshes with faces of %D vertices", faceSizeAll)return PetscError(((MPI_Comm)0x44000001),511,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Do not support interpolation of meshes with faces of %D vertices"
,faceSizeAll)
;
512 ierr = PetscHashIJKLCreate(&faceTable);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),512,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
513 for (d = depth; d > cellDepth; --d) {
514 const PetscInt *cone;
515 PetscInt p;
516
517 for (p = pStart[d]; p < pEnd[d]; ++p) {
518 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),518,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
519 ierr = DMPlexSetCone(idm, p, cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),519,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
520 ierr = DMPlexGetConeOrientation(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),520,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
521 ierr = DMPlexSetConeOrientation(idm, p, cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),521,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
522 }
523 }
524 for (outerloop = 0, face = pStart[faceDepth]; outerloop < 2; outerloop++) {
525 PetscInt start, end;
526
527 start = outerloop == 0 ? pMax : pStart[cellDepth];
528 end = outerloop == 0 ? pEnd[cellDepth] : pMax;
529 for (c = start; c < end; ++c) {
530 const PetscInt *cellFaces;
531 PetscInt numCellFaces, faceSize, faceSizeInc, cf;
532
533 if (c < pMax) {
534 ierr = DMPlexGetFaces_Internal(dm, cellDim, c, &numCellFaces, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),534,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
535 if (faceSize != faceSizeAll) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Inconsistent face for cell %D of size %D != %D", c, faceSize, faceSizeAll)return PetscError(((MPI_Comm)0x44000001),535,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Inconsistent face for cell %D of size %D != %D"
,c,faceSize,faceSizeAll)
;
536 } else {
537 const PetscInt *cone;
538 PetscInt numCellFacesN, coneSize;
539
540 ierr = DMPlexGetConeSize(dm, c, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),540,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
541 if (coneSize != coneSizeH) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected hybrid coneSize %D != %D", coneSize, coneSizeH)return PetscError(((MPI_Comm)0x44000001),541,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected hybrid coneSize %D != %D"
,coneSize,coneSizeH)
;
542 ierr = DMPlexGetCone(dm, c, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),542,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
543 ierr = DMPlexGetRawFacesHybrid_Internal(dm, cellDim, coneSize, cone, &numCellFaces, &numCellFacesN, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),543,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
544 if (numCellFaces != numCellFacesH) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected numCellFaces %D != %D for hybrid cell %D", numCellFaces, numCellFacesH, c)return PetscError(((MPI_Comm)0x44000001),544,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected numCellFaces %D != %D for hybrid cell %D"
,numCellFaces,numCellFacesH,c)
;
545 faceSize = PetscMax(faceSize, -faceSize)(((faceSize)<(-faceSize)) ? (-faceSize) : (faceSize));
546 if (faceSize > 4) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Do not support interpolation of meshes with faces of %D vertices", faceSize)return PetscError(((MPI_Comm)0x44000001),546,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Do not support interpolation of meshes with faces of %D vertices"
,faceSize)
;
547 numCellFaces = numCellFacesN; /* process only non-hybrid faces */
548 }
549 faceSizeInc = faceSize;
550 for (cf = 0; cf < numCellFaces; ++cf) {
551 const PetscInt *cellFace = &cellFaces[cf*faceSizeInc];
552 PetscHashIJKLKey key;
553 PetscHashIter iter;
554 PetscBool missing;
555
556 if (faceSizeInc == 2) {
557 key.i = PetscMin(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[0]) : (cellFace
[1]))
;
558 key.j = PetscMax(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[1]) : (cellFace
[0]))
;
559 key.k = PETSC_MAX_INT2147483647;
560 key.l = PETSC_MAX_INT2147483647;
561 } else {
562 key.i = cellFace[0];
563 key.j = cellFace[1];
564 key.k = cellFace[2];
565 key.l = faceSizeInc > 3 ? (cellFace[3] < 0 ? faceSize = 3, PETSC_MAX_INT2147483647 : cellFace[3]) : PETSC_MAX_INT2147483647;
566 ierr = PetscSortInt(faceSizeInc, (PetscInt *) &key);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),566,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
567 }
568 ierr = PetscHashIJKLPut(faceTable, key, &iter, &missing);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),568,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
569 if (missing) {
570 ierr = DMPlexSetCone(idm, face, cellFace);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),570,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
571 ierr = PetscHashIJKLIterSet(faceTable, iter, face);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),571,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
572 ierr = DMPlexInsertCone(idm, c, cf, face++);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),572,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
573 } else {
574 const PetscInt *cone;
575 PetscInt coneSize, ornt, i, j, f;
576
577 ierr = PetscHashIJKLIterGet(faceTable, iter, &f);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),577,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
578 ierr = DMPlexInsertCone(idm, c, cf, f);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),578,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
579 /* Orient face: Do not allow reverse orientation at the first vertex */
580 ierr = DMPlexGetConeSize(idm, f, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),580,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
581 ierr = DMPlexGetCone(idm, f, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),581,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
582 if (coneSize != faceSize) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Invalid number of face vertices %D for face %D should be %D", coneSize, f, faceSize)return PetscError(((MPI_Comm)0x44000001),582,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Invalid number of face vertices %D for face %D should be %D"
,coneSize,f,faceSize)
;
583 /* - First find the initial vertex */
584 for (i = 0; i < faceSize; ++i) if (cellFace[0] == cone[i]) break;
585 /* - Try forward comparison */
586 for (j = 0; j < faceSize; ++j) if (cellFace[j] != cone[(i+j)%faceSize]) break;
587 if (j == faceSize) {
588 if ((faceSize == 2) && (i == 1)) ornt = -2;
589 else ornt = i;
590 } else {
591 /* - Try backward comparison */
592 for (j = 0; j < faceSize; ++j) if (cellFace[j] != cone[(i+faceSize-j)%faceSize]) break;
593 if (j == faceSize) {
594 if (i == 0) ornt = -faceSize;
595 else ornt = -i;
596 } else SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Could not determine orientation of face %D in cell %D", f, c)return PetscError(((MPI_Comm)0x44000001),596,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Could not determine orientation of face %D in cell %D"
,f,c)
;
597 }
598 ierr = DMPlexInsertConeOrientation(idm, c, cf, ornt);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),598,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
599 }
600 }
601 if (c < pMax) {
602 ierr = DMPlexRestoreFaces_Internal(dm, cellDim, c, &numCellFaces, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),602,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
603 } else {
604 ierr = DMPlexRestoreRawFacesHybrid_Internal(dm, cellDim, coneSizeH, NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0), &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),604,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
605 }
606 }
607 }
608 /* Second pass for hybrid meshes: orient hybrid faces */
609 for (c = pMax; c < pEnd[cellDepth]; ++c) {
610 const PetscInt *cellFaces, *cone;
611 PetscInt numCellFaces, numCellFacesN, faceSize, cf, coneSize;
612
613 ierr = DMPlexGetConeSize(dm, c, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),613,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
614 ierr = DMPlexGetCone(dm, c, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),614,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
615 ierr = DMPlexGetRawFacesHybrid_Internal(dm, cellDim, coneSize, cone, &numCellFaces, &numCellFacesN, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),615,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
616 if (numCellFaces != numCellFacesH) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected hybrid numCellFaces %D != %D", numCellFaces, numCellFacesH)return PetscError(((MPI_Comm)0x44000001),616,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected hybrid numCellFaces %D != %D"
,numCellFaces,numCellFacesH)
;
617 faceSize = PetscMax(faceSize, -faceSize)(((faceSize)<(-faceSize)) ? (-faceSize) : (faceSize));
618 for (cf = numCellFacesN; cf < numCellFaces; ++cf) { /* These are the hybrid faces */
619 const PetscInt *cellFace = &cellFaces[cf*faceSize];
620 PetscHashIJKLKey key;
621 PetscHashIter iter;
622 PetscBool missing;
623 PetscInt faceSizeH = faceSize;
624
625 if (faceSize == 2) {
626 key.i = PetscMin(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[0]) : (cellFace
[1]))
;
627 key.j = PetscMax(cellFace[0], cellFace[1])(((cellFace[0])<(cellFace[1])) ? (cellFace[1]) : (cellFace
[0]))
;
628 key.k = PETSC_MAX_INT2147483647;
629 key.l = PETSC_MAX_INT2147483647;
630 } else {
631 key.i = cellFace[0];
632 key.j = cellFace[1];
633 key.k = cellFace[2];
634 key.l = faceSize > 3 ? (cellFace[3] < 0 ? faceSizeH = 3, PETSC_MAX_INT2147483647 : cellFace[3]) : PETSC_MAX_INT2147483647;
635 ierr = PetscSortInt(faceSize, (PetscInt *) &key);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),635,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
636 }
637 if (faceSizeH != faceSizeAllH) SETERRQ4(PETSC_COMM_SELF, PETSC_ERR_SUP, "Unexpected number of vertices for hybrid face %D of point %D -> %D != %D", cf, c, faceSizeH, faceSizeAllH)return PetscError(((MPI_Comm)0x44000001),637,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,56,PETSC_ERROR_INITIAL,"Unexpected number of vertices for hybrid face %D of point %D -> %D != %D"
,cf,c,faceSizeH,faceSizeAllH)
;
638 ierr = PetscHashIJKLPut(faceTable, key, &iter, &missing);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),638,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
639 if (missing) {
640 ierr = DMPlexSetCone(idm, face, cellFace);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),640,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
641 ierr = PetscHashIJKLIterSet(faceTable, iter, face);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),641,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
642 ierr = DMPlexInsertCone(idm, c, cf, face++);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),642,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
643 } else {
644 PetscInt fv[4] = {0, 1, 2, 3};
645 const PetscInt *cone;
646 PetscInt coneSize, ornt, i, j, f;
647 PetscBool q2h = PETSC_FALSE;
648
649 ierr = PetscHashIJKLIterGet(faceTable, iter, &f);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),649,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
650 ierr = DMPlexInsertCone(idm, c, cf, f);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),650,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
651 /* Orient face: Do not allow reverse orientation at the first vertex */
652 ierr = DMPlexGetConeSize(idm, f, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),652,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
653 ierr = DMPlexGetCone(idm, f, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),653,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
654 if (coneSize != faceSizeH) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Invalid number of face vertices %D for face %D should be %D", coneSize, f, faceSizeH)return PetscError(((MPI_Comm)0x44000001),654,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Invalid number of face vertices %D for face %D should be %D"
,coneSize,f,faceSizeH)
;
655 /* Hybrid faces are stored as tensor products of edges, so to compare them to normal faces, we have to flip */
656 if (faceSize == 4 && c >= pMax && faceSizeAll != faceSizeAllT && f < pEnd[faceDepth] - faceH) {q2h = PETSC_TRUE; fv[2] = 3; fv[3] = 2;}
657 /* - First find the initial vertex */
658 for (i = 0; i < faceSizeH; ++i) if (cellFace[fv[0]] == cone[i]) break;
659 if (q2h) { /* Matt's case: hybrid faces meeting with non-hybrid faces. This is a case that is not (and will not be) supported in general by the refinements */
660 /* - Try forward comparison */
661 for (j = 0; j < faceSizeH; ++j) if (cellFace[fv[j]] != cone[(i+j)%faceSizeH]) break;
662 if (j == faceSizeH) {
663 if ((faceSizeH == 2) && (i == 1)) ornt = -2;
664 else ornt = i;
665 } else {
666 /* - Try backward comparison */
667 for (j = 0; j < faceSizeH; ++j) if (cellFace[fv[j]] != cone[(i+faceSizeH-j)%faceSizeH]) break;
668 if (j == faceSizeH) {
669 if (i == 0) ornt = -faceSizeH;
670 else ornt = -i;
671 } else SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Could not determine orientation of face %D in cell %D", f, c)return PetscError(((MPI_Comm)0x44000001),671,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Could not determine orientation of face %D in cell %D"
,f,c)
;
672 }
673 } else {
674 /* when matching hybrid faces in 3D, only few cases are possible.
675 Face traversal however can no longer follow the usual convention, this seems a serious issue to me */
676 PetscInt tquad_map[4][4] = { {PETSC_MIN_INT(-2147483647 - 1), 0,PETSC_MIN_INT(-2147483647 - 1),PETSC_MIN_INT(-2147483647 - 1)},
677 { -1,PETSC_MIN_INT(-2147483647 - 1),PETSC_MIN_INT(-2147483647 - 1),PETSC_MIN_INT(-2147483647 - 1)},
678 {PETSC_MIN_INT(-2147483647 - 1),PETSC_MIN_INT(-2147483647 - 1),PETSC_MIN_INT(-2147483647 - 1), 1},
679 {PETSC_MIN_INT(-2147483647 - 1),PETSC_MIN_INT(-2147483647 - 1), -2,PETSC_MIN_INT(-2147483647 - 1)} };
680 PetscInt i2;
681
682 /* find the second vertex */
683 for (i2 = 0; i2 < faceSizeH; ++i2) if (cellFace[fv[1]] == cone[i2]) break;
684 switch (faceSizeH) {
685 case 2:
686 ornt = i ? -2 : 0;
687 break;
688 case 4:
689 ornt = tquad_map[i][i2];
690 break;
691 default:
692 SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Unhandled face size %D for face %D in cell %D", faceSizeH, f, c)return PetscError(((MPI_Comm)0x44000001),692,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Unhandled face size %D for face %D in cell %D"
,faceSizeH,f,c)
;
693
694 }
695 }
696 ierr = DMPlexInsertConeOrientation(idm, c, cf, ornt);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),696,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
697 }
698 }
699 ierr = DMPlexRestoreRawFacesHybrid_Internal(dm, cellDim, coneSize, cone, &numCellFaces, &numCellFacesN, &faceSize, &cellFaces);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),699,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
700 }
701 if (face != pEnd[faceDepth]) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Invalid number of faces %D should be %D", face-pStart[faceDepth], pEnd[faceDepth]-pStart[faceDepth])return PetscError(((MPI_Comm)0x44000001),701,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Invalid number of faces %D should be %D"
,face-pStart[faceDepth],pEnd[faceDepth]-pStart[faceDepth])
;
702 ierr = PetscFree2(pStart,pEnd)PetscFreeA(2,702,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,&(pStart),&(pEnd))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),702,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
703 ierr = PetscHashIJKLDestroy(&faceTable);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),703,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
704 ierr = PetscFree2(pStart,pEnd)PetscFreeA(2,704,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,&(pStart),&(pEnd))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),704,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
705 ierr = DMPlexSetHybridBounds(idm, cMax, fMax, eMax, vMax);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),705,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
706 ierr = DMPlexSymmetrize(idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),706,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
707 ierr = DMPlexStratify(idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),707,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
708 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
709}
710
711PetscErrorCode DMPlexOrientCell(DM dm, PetscInt p, PetscInt masterConeSize, const PetscInt masterCone[])
712{
713 PetscInt coneSize;
714 PetscInt start1=0;
715 PetscBool reverse1=PETSC_FALSE;
716 const PetscInt *cone=NULL((void*)0);
717 PetscErrorCode ierr;
718
719 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 719; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
720 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),720,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
721 if (!coneSize) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
; /* do nothing for points with no cone */
722 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),722,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
723 ierr = DMPlexFixFaceOrientations_Orient_Private(coneSize, masterConeSize, masterCone, cone, &start1, &reverse1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),723,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
724#if defined(PETSC_USE_DEBUG1)
725 if (PetscUnlikely(cone[start1] != masterCone[0])__builtin_expect(!!(cone[start1] != masterCone[0]),0)) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "The algorithm above is wrong as cone[%d] = %d != %d = masterCone[0]", start1, cone[start1], masterCone[0])return PetscError(((MPI_Comm)0x44000001),725,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"The algorithm above is wrong as cone[%d] = %d != %d = masterCone[0]"
,start1,cone[start1],masterCone[0])
;
726#endif
727 ierr = DMPlexOrientCell_Internal(dm, p, start1, reverse1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),727,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
728#if defined(PETSC_USE_DEBUG1)
729 {
730 PetscInt c;
731 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),731,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
732 for (c = 0; c < 2; c++) {
733 if (PetscUnlikely(cone[c] != masterCone[c])__builtin_expect(!!(cone[c] != masterCone[c]),0)) SETERRQ4(PETSC_COMM_SELF, PETSC_ERR_PLIB, "The algorithm above is wrong as cone[%d] = %d != %d = masterCone[%d]", c, cone[c], masterCone[c], c)return PetscError(((MPI_Comm)0x44000001),733,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"The algorithm above is wrong as cone[%d] = %d != %d = masterCone[%d]"
,c,cone[c],masterCone[c],c)
;
734 }
735 }
736#endif
737 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
738}
739
740PetscErrorCode DMPlexOrientCell_Internal(DM dm, PetscInt p, PetscInt start1, PetscBool reverse1)
741{
742 PetscInt i, j, k, maxConeSize, coneSize, coneConeSize, supportSize, supportConeSize;
743 PetscInt start0, start;
744 PetscBool reverse0, reverse;
745 PetscInt newornt;
746 const PetscInt *cone=NULL((void*)0), *support=NULL((void*)0), *supportCone=NULL((void*)0), *ornts=NULL((void*)0);
747 PetscInt *newcone=NULL((void*)0), *newornts=NULL((void*)0);
748 PetscErrorCode ierr;
749
750 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 750; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
751 if (!start1 && !reverse1) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
752 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),752,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
753 if (!coneSize) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
; /* do nothing for points with no cone */
754 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),754,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
755 ierr = DMPlexGetMaxSizes(dm, &maxConeSize, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),755,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
756 /* permute p's cone and orientations */
757 ierr = DMPlexGetConeOrientation(dm, p, &ornts);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),757,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
758 ierr = DMGetWorkArray(dm, maxConeSize, MPIU_INT((MPI_Datatype)0x4c000405), &newcone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),758,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
759 ierr = DMGetWorkArray(dm, maxConeSize, MPIU_INT((MPI_Datatype)0x4c000405), &newornts);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),759,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
760 ierr = DMPlexFixFaceOrientations_Permute_Private(coneSize, cone, start1, reverse1, newcone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),760,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
761 ierr = DMPlexFixFaceOrientations_Permute_Private(coneSize, ornts, start1, reverse1, newornts);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),761,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
762 /* if direction of p (face) is flipped, flip also p's cone points (edges) */
763 if (reverse1) {
764 for (i=0; i<coneSize; i++) {
765 ierr = DMPlexGetConeSize(dm, cone[i], &coneConeSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),765,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
766 ierr = DMPlexFixFaceOrientations_Translate_Private(newornts[i], &start0, &reverse0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),766,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
767 ierr = DMPlexFixFaceOrientations_Combine_Private(coneConeSize, start0, reverse0, 1, PETSC_FALSE, &start, &reverse);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),767,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
768 ierr = DMPlexFixFaceOrientations_TranslateBack_Private(coneConeSize, start, reverse, &newornts[i]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),768,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
769 }
770 }
771 ierr = DMPlexSetConeOrientation(dm, p, newornts);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),771,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
772 /* fix oriention of p within cones of p's support points */
773 ierr = DMPlexGetSupport(dm, p, &support);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),773,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
774 ierr = DMPlexGetSupportSize(dm, p, &supportSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),774,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
775 for (j=0; j<supportSize; j++) {
776 ierr = DMPlexGetCone(dm, support[j], &supportCone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),776,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
777 ierr = DMPlexGetConeSize(dm, support[j], &supportConeSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),777,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
778 ierr = DMPlexGetConeOrientation(dm, support[j], &ornts);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),778,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
779 for (k=0; k<supportConeSize; k++) {
780 if (supportCone[k] != p) continue;
781 ierr = DMPlexFixFaceOrientations_Translate_Private(ornts[k], &start0, &reverse0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),781,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
782 ierr = DMPlexFixFaceOrientations_Combine_Private(coneSize, start0, reverse0, start1, reverse1, &start, &reverse);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),782,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
783 ierr = DMPlexFixFaceOrientations_TranslateBack_Private(coneSize, start, reverse, &newornt);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),783,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
784 ierr = DMPlexInsertConeOrientation(dm, support[j], k, newornt);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),784,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
785 }
786 }
787 /* rewrite cone */
788 ierr = DMPlexSetCone(dm, p, newcone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),788,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
789 ierr = DMRestoreWorkArray(dm, maxConeSize, MPIU_INT((MPI_Datatype)0x4c000405), &newcone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),789,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
790 ierr = DMRestoreWorkArray(dm, maxConeSize, MPIU_INT((MPI_Datatype)0x4c000405), &newornts);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),790,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
791 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
792}
793
794static PetscErrorCode SortRmineRremoteByRemote_Private(PetscSF sf, PetscInt *rmine1[], PetscInt *rremote1[])
795{
796 PetscInt nleaves;
797 PetscInt nranks;
798 const PetscMPIInt *ranks=NULL((void*)0);
799 const PetscInt *roffset=NULL((void*)0), *rmine=NULL((void*)0), *rremote=NULL((void*)0);
800 PetscInt n, o, r;
801 PetscErrorCode ierr;
802
803 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 803; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
804 ierr = PetscSFGetRootRanks(sf, &nranks, &ranks, &roffset, &rmine, &rremote);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),804,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
805 nleaves = roffset[nranks];
806 ierr = PetscMalloc2(nleaves, rmine1, nleaves, rremote1)PetscMallocA(2,PETSC_FALSE,806,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(nleaves)*sizeof(**(rmine1)),(rmine1),(size_t)(nleaves
)*sizeof(**(rremote1)),(rremote1))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),806,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
807 for (r=0; r<nranks; r++) {
808 /* simultaneously sort rank-wise portions of rmine & rremote by values in rremote
809 - to unify order with the other side */
810 o = roffset[r];
811 n = roffset[r+1] - o;
812 ierr = PetscArraycpy(&(*rmine1)[o], &rmine[o], n)((sizeof(*(&(*rmine1)[o])) != sizeof(*(&rmine[o]))) ||
PetscMemcpy(&(*rmine1)[o],&rmine[o],(n)*sizeof(*(&
(*rmine1)[o]))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),812,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
813 ierr = PetscArraycpy(&(*rremote1)[o], &rremote[o], n)((sizeof(*(&(*rremote1)[o])) != sizeof(*(&rremote[o])
)) || PetscMemcpy(&(*rremote1)[o],&rremote[o],(n)*sizeof
(*(&(*rremote1)[o]))))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),813,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
814 ierr = PetscSortIntWithArray(n, &(*rremote1)[o], &(*rmine1)[o]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),814,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
815 }
816 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
817}
818
819PetscErrorCode DMPlexOrientInterface(DM dm)
820{
821 PetscSF sf=NULL((void*)0);
822 PetscInt (*roots)[2], (*leaves)[2];
823 PetscMPIInt (*rootsRanks)[2], (*leavesRanks)[2];
824 const PetscInt *locals=NULL((void*)0);
825 const PetscSFNode *remotes=NULL((void*)0);
826 PetscInt nroots, nleaves, p, c;
827 PetscInt nranks, n, o, r;
828 const PetscMPIInt *ranks=NULL((void*)0);
829 const PetscInt *roffset=NULL((void*)0);
830 PetscInt *rmine1=NULL((void*)0), *rremote1=NULL((void*)0); /* rmine and rremote copies simultaneously sorted by rank and rremote */
831 const PetscInt *cone=NULL((void*)0);
832 PetscInt coneSize, ind0;
833 MPI_Comm comm;
834 PetscMPIInt rank;
835 PetscInt debug = 0;
836 PetscErrorCode ierr;
837
838 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 838; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
839 ierr = DMGetPointSF(dm, &sf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),839,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
840 ierr = PetscSFGetGraph(sf, &nroots, &nleaves, &locals, &remotes);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),840,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
841 if (nroots < 0) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
842 ierr = PetscSFSetUp(sf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),842,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
843 ierr = PetscSFGetRootRanks(sf, &nranks, &ranks, &roffset, NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),843,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
844#if defined(PETSC_USE_DEBUG1)
845 ierr = DMViewFromOptions(dm, NULL((void*)0), "-before_fix_dm_view");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),845,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
846 ierr = DMPlexCheckPointSF(dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),846,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
847#endif
848 ierr = SortRmineRremoteByRemote_Private(sf, &rmine1, &rremote1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),848,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
849 ierr = PetscMalloc4(nroots, &roots, nroots, &leaves, nroots, &rootsRanks, nroots, &leavesRanks)PetscMallocA(4,PETSC_FALSE,849,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(nroots)*sizeof(**(&roots)),(&roots),(size_t
)(nroots)*sizeof(**(&leaves)),(&leaves),(size_t)(nroots
)*sizeof(**(&rootsRanks)),(&rootsRanks),(size_t)(nroots
)*sizeof(**(&leavesRanks)),(&leavesRanks))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),849,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
850 ierr = PetscObjectGetComm((PetscObject) dm, &comm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),850,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
851 ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),851,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
852 if (debug && rank == 0) {ierr = PetscSynchronizedPrintf(comm, "Roots\n");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),852,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
853 for (p = 0; p < nroots; ++p) {
854 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),854,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
855 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),855,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
856 /* Translate all points to root numbering */
857 for (c = 0; c < 2; c++) {
858 if (coneSize > 1) {
859 ierr = PetscFindInt(cone[c], nleaves, locals, &ind0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),859,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
860 if (ind0 < 0) {
861 roots[p][c] = cone[c];
862 rootsRanks[p][c] = rank;
863 } else {
864 roots[p][c] = remotes[ind0].index;
865 rootsRanks[p][c] = remotes[ind0].rank;
866 }
867 } else {
868 roots[p][c] = -1;
869 rootsRanks[p][c] = -1;
870 }
871 }
872 }
873 if (debug) {
874 for (p = 0; p < nroots; ++p) {
875 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),875,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
876 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),876,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
877 if (coneSize > 1) {
878 ierr = PetscSynchronizedPrintf(comm, "[%d] %D: cone=[%D %D] roots=[%D %D] rootsRanks=[%D %D]\n", rank, p, cone[0], cone[1], roots[p][0], roots[p][1], rootsRanks[p][0], rootsRanks[p][1]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),878,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
879 }
880 }
881 ierr = PetscSynchronizedFlush(comm, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),881,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
882 }
883 for (p = 0; p < nroots; ++p) {
884 for (c = 0; c < 2; c++) {
885 leaves[p][c] = -2;
886 leavesRanks[p][c] = -2;
887 }
888 }
889 ierr = PetscSFBcastBegin(sf, MPIU_2INT((MPI_Datatype)0x4c000816), roots, leaves);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),889,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
890 ierr = PetscSFBcastBegin(sf, MPI_2INT((MPI_Datatype)0x4c000816), rootsRanks, leavesRanks);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),890,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
891 ierr = PetscSFBcastEnd(sf, MPIU_2INT((MPI_Datatype)0x4c000816), roots, leaves);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),891,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
892 ierr = PetscSFBcastEnd(sf, MPI_2INT((MPI_Datatype)0x4c000816), rootsRanks, leavesRanks);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),892,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
893 if (debug) {ierr = PetscSynchronizedFlush(comm, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),893,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
894 if (debug && rank == 0) {ierr = PetscSynchronizedPrintf(comm, "Referred leaves\n");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),894,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
895 for (p = 0; p < nroots; ++p) {
896 if (leaves[p][0] < 0) continue;
897 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),897,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
898 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),898,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
899 if (debug) {ierr = PetscSynchronizedPrintf(comm, "[%d] %D: cone=[%D %D] leaves=[%D %D] roots=[%D %D] leavesRanks=[%D %D] rootsRanks=[%D %D]\n", rank, p, cone[0], cone[1], leaves[p][0], leaves[p][1], roots[p][0], roots[p][1], leavesRanks[p][0], leavesRanks[p][1], rootsRanks[p][0], rootsRanks[p][1]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),899,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
900 if ((leaves[p][0] != roots[p][0]) || (leaves[p][1] != roots[p][1]) || (leavesRanks[p][0] != rootsRanks[p][0]) || (leavesRanks[p][0] != rootsRanks[p][0])) {
901 PetscInt masterCone[2];
902 /* Translate these two cone points back to leave numbering */
903 for (c = 0; c < 2; c++) {
904 if (leavesRanks[p][c] == rank) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_PLIB, "this should never happen - remote rank of point %D is the same rank",leavesRanks[p][c])return PetscError(((MPI_Comm)0x44000001),904,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"this should never happen - remote rank of point %D is the same rank"
,leavesRanks[p][c])
;
905 /* Find index of rank leavesRanks[p][c] among remote ranks */
906 /* No need for PetscMPIIntCast because these integers were originally cast from PetscMPIInt. */
907 ierr = PetscFindMPIInt((PetscMPIInt)leavesRanks[p][c], nranks, ranks, &r);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),907,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
908 if (PetscUnlikely(r < 0)__builtin_expect(!!(r < 0),0)) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_PLIB, "this should never happen - rank %D not found among remote ranks",leavesRanks[p][c])return PetscError(((MPI_Comm)0x44000001),908,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"this should never happen - rank %D not found among remote ranks"
,leavesRanks[p][c])
;
909 /* Find point leaves[p][c] among remote points aimed at rank leavesRanks[p][c] */
910 o = roffset[r];
911 n = roffset[r+1] - o;
912 ierr = PetscFindInt(leaves[p][c], n, &rremote1[o], &ind0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),912,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
913 if (PetscUnlikely(ind0 < 0)__builtin_expect(!!(ind0 < 0),0)) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "No cone point of %D is connected to (%D, %D) - it seems there is missing connection in point SF!",p,ranks[r],leaves[p][c])return PetscError(((MPI_Comm)0x44000001),913,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"No cone point of %D is connected to (%D, %D) - it seems there is missing connection in point SF!"
,p,ranks[r],leaves[p][c])
;
914 /* Get the corresponding local point */
915 masterCone[c] = rmine1[o+ind0];CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),915,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
916 }
917 if (debug) {ierr = PetscSynchronizedPrintf(comm, "[%d] %D: masterCone=[%D %D]\n", rank, p, masterCone[0], masterCone[1]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),917,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
918 /* Vaclav's note: Here we only compare first 2 points of the cone. Full cone size would lead to stronger self-checking. */
919 ierr = DMPlexOrientCell(dm, p, 2, masterCone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),919,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
920 }
921 }
922#if defined(PETSC_USE_DEBUG1)
923 ierr = DMViewFromOptions(dm, NULL((void*)0), "-after_fix_dm_view");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),923,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
924 for (r = 0; r < nleaves; ++r) {
925 p = locals[r];
926 ierr = DMPlexGetConeSize(dm, p, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),926,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
927 if (!coneSize) continue;
928 ierr = DMPlexGetCone(dm, p, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),928,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
929 for (c = 0; c < 2; c++) {
930 ierr = PetscFindInt(cone[c], nleaves, locals, &ind0);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),930,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
931 if (ind0 < 0) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Point SF contains %D but is missing its cone point cone[%D] = %D!", p, c, cone[c])return PetscError(((MPI_Comm)0x44000001),931,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Point SF contains %D but is missing its cone point cone[%D] = %D!"
,p,c,cone[c])
;
932 if (leaves[p][c] != remotes[ind0].index || leavesRanks[p][c] != remotes[ind0].rank) {
933 if (leavesRanks[p][c] == rank) {
934 PetscInt ind1;
935 ierr = PetscFindInt(leaves[p][c], nleaves, locals, &ind1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),935,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
936 if (ind1 < 0) {
937 SETERRQ8(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Point %D = locals[%d]: cone[%D]=%D --> (%D, %D) differs from the enforced (%D, %D). The latter was not even found among the local SF points - it is probably broken!", p, r, c, cone[c], remotes[ind0].rank, remotes[ind0].index, leavesRanks[p][c], leaves[p][c])return PetscError(((MPI_Comm)0x44000001),937,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Point %D = locals[%d]: cone[%D]=%D --> (%D, %D) differs from the enforced (%D, %D). The latter was not even found among the local SF points - it is probably broken!"
,p,r,c,cone[c],remotes[ind0].rank,remotes[ind0].index,leavesRanks
[p][c],leaves[p][c])
;
938 } else {
939 SETERRQ9(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Point %D = locals[%d]: cone[%D]=%D --> (%D, %D) differs from the enforced %D --> (%D, %D). Is the algorithm above or the point SF broken?", p, r, c, cone[c], remotes[ind0].rank, remotes[ind0].index, leaves[p][c], remotes[ind1].rank, remotes[ind1].index)return PetscError(((MPI_Comm)0x44000001),939,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Point %D = locals[%d]: cone[%D]=%D --> (%D, %D) differs from the enforced %D --> (%D, %D). Is the algorithm above or the point SF broken?"
,p,r,c,cone[c],remotes[ind0].rank,remotes[ind0].index,leaves[
p][c],remotes[ind1].rank,remotes[ind1].index)
;
940 }
941 } else {
942 SETERRQ8(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Point %D = locals[%d]: cone[%D]=%D --> (%D, %D) differs from the enforced (%D, %D). Is the algorithm above or the point SF broken?", p, r, c, cone[c], remotes[ind0].rank, remotes[ind0].index, leavesRanks[p][c], leaves[p][c])return PetscError(((MPI_Comm)0x44000001),942,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Point %D = locals[%d]: cone[%D]=%D --> (%D, %D) differs from the enforced (%D, %D). Is the algorithm above or the point SF broken?"
,p,r,c,cone[c],remotes[ind0].rank,remotes[ind0].index,leavesRanks
[p][c],leaves[p][c])
;
943 }
944 }
945 }
946 }
947#endif
948 if (debug) {ierr = PetscSynchronizedFlush(comm, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),948,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
949 ierr = PetscFree4(roots, leaves, rootsRanks, leavesRanks)PetscFreeA(4,949,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,&(roots),&(leaves),&(rootsRanks),&(leavesRanks
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),949,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
950 ierr = PetscFree2(rmine1, rremote1)PetscFreeA(2,950,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,&(rmine1),&(rremote1))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),950,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
951 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
952}
953
954static PetscErrorCode IntArrayViewFromOptions(MPI_Comm comm, const char opt[], const char name[], const char idxname[], const char valname[], PetscInt n, const PetscInt a[])
955{
956 PetscInt idx;
957 PetscMPIInt rank;
958 PetscBool flg;
959 PetscErrorCode ierr;
960
961 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 961; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
962 ierr = PetscOptionsHasName(NULL((void*)0), NULL((void*)0), opt, &flg);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),962,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
963 if (!flg) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
964 ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),964,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
965 ierr = PetscSynchronizedPrintf(comm, "[%d]%s:\n", rank, name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),965,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
966 for (idx = 0; idx < n; ++idx) {ierr = PetscSynchronizedPrintf(comm, "[%d]%s %D %s %D\n", rank, idxname, idx, valname, a[idx]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),966,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
967 ierr = PetscSynchronizedFlush(comm, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),967,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
968 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
969}
970
971static PetscErrorCode SFNodeArrayViewFromOptions(MPI_Comm comm, const char opt[], const char name[], const char idxname[], PetscInt n, const PetscSFNode a[])
972{
973 PetscInt idx;
974 PetscMPIInt rank;
975 PetscBool flg;
976 PetscErrorCode ierr;
977
978 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 978; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
979 ierr = PetscOptionsHasName(NULL((void*)0), NULL((void*)0), opt, &flg);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),979,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
980 if (!flg) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
981 ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),981,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
982 ierr = PetscSynchronizedPrintf(comm, "[%d]%s:\n", rank, name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),982,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
983 if (idxname) {
984 for (idx = 0; idx < n; ++idx) {ierr = PetscSynchronizedPrintf(comm, "[%d]%s %D rank %D index %D\n", rank, idxname, idx, a[idx].rank, a[idx].index);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),984,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
985 } else {
986 for (idx = 0; idx < n; ++idx) {ierr = PetscSynchronizedPrintf(comm, "[%d]rank %D index %D\n", rank, a[idx].rank, a[idx].index);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),986,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
987 }
988 ierr = PetscSynchronizedFlush(comm, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),988,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
989 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
990}
991
992static PetscErrorCode DMPlexMapToLocalPoint(PetscHMapIJ roothash, const PetscInt localPoints[], PetscMPIInt rank, PetscSFNode remotePoint, PetscInt *localPoint)
993{
994 PetscErrorCode ierr;
995
996 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 996; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
997 if (remotePoint.rank == rank) {
998 *localPoint = remotePoint.index;
999 } else {
1000 PetscHashIJKey key;
1001 PetscInt root;
1002
1003 key.i = remotePoint.index;
1004 key.j = remotePoint.rank;
1005 ierr = PetscHMapIJGet(roothash, key, &root);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1005,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1006 if (root >= 0) {
1007 *localPoint = localPoints[root];
1008 } else PetscFunctionReturn(1)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(1);} while (0)
;
1009 }
1010 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1011}
1012
1013/*@
1014 DMPlexInterpolatePointSF - Insert interpolated points in the overlap into the PointSF in parallel, following local interpolation
1015
1016 Collective on dm
1017
1018 Input Parameters:
1019+ dm - The interpolated DM
1020- pointSF - The initial SF without interpolated points
1021
1022 Output Parameter:
1023. pointSF - The SF including interpolated points
1024
1025 Level: intermediate
1026
1027 Note: All debugging for this process can be turned on with the options: -dm_interp_pre_view -petscsf_interp_pre_view -petscsection_interp_candidate_view -petscsection_interp_candidate_remote_view -petscsection_interp_claim_view -petscsf_interp_pre_view -dmplex_interp_debug
1028
1029.seealso: DMPlexInterpolate(), DMPlexUninterpolate()
1030@*/
1031PetscErrorCode DMPlexInterpolatePointSF(DM dm, PetscSF pointSF)
1032{
1033 /*
1034 Okay, the algorithm is:
1035 - Take each point in the overlap (root)
1036 - Look at the neighboring points in the overlap (candidates)
1037 - Send these candidate points to neighbors
1038 - Neighbor checks for edge between root and candidate
1039 - If edge is found, it replaces candidate point with edge point
1040 - Send back the overwritten candidates (claims)
1041 - Original guy checks for edges, different from original candidate, and gets its own edge
1042 - This pair is put into SF
1043
1044 We need a new algorithm that tolerates groups larger than 2.
1045 - Take each point in the overlap (root)
1046 - Find all collections of points in the overlap which make faces (do early join)
1047 - Send collections as candidates (add size as first number)
1048 - Make sure to send collection to all owners of all overlap points in collection
1049 - Neighbor check for face in collections
1050 - If face is found, it replaces candidate point with face point
1051 - Send back the overwritten candidates (claims)
1052 - Original guy checks for faces, different from original candidate, and gets its own face
1053 - This pair is put into SF
1054 */
1055 PetscHMapI leafhash;
1056 PetscHMapIJ roothash;
1057 const PetscInt *localPoints, *rootdegree;
1058 const PetscSFNode *remotePoints;
1059 PetscSFNode *candidates, *candidatesRemote, *claims;
1060 PetscSection candidateSection, candidateSectionRemote, claimSection;
1061 PetscInt numLeaves, l, numRoots, r, candidatesSize, candidatesRemoteSize;
1062 PetscMPIInt size, rank;
1063 PetscHashIJKey key;
1064 PetscBool debug = PETSC_FALSE;
1065 PetscErrorCode ierr;
1066
1067 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 1067; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1068 ierr = PetscOptionsHasName(NULL((void*)0), ((PetscObject) dm)->prefix, "-dmplex_interp_debug", &debug);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1068,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1069 ierr = MPI_Comm_size(PetscObjectComm((PetscObject) dm), &size);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1069,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1070 ierr = MPI_Comm_rank(PetscObjectComm((PetscObject) dm), &rank);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1070,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1071 ierr = PetscSFGetGraph(pointSF, &numRoots, &numLeaves, &localPoints, &remotePoints);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1071,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1072 if (size < 2 || numRoots < 0) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1
Assuming 'size' is >= 2
2
Assuming 'numRoots' is >= 0
3
Taking false branch
1073 ierr = PetscObjectViewFromOptions((PetscObject) dm, NULL((void*)0), "-dm_interp_pre_view");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1073,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1074 ierr = PetscObjectViewFromOptions((PetscObject) pointSF, NULL((void*)0), "-petscsf_interp_pre_view");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1074,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1075 ierr = PetscLogEventBegin(DMPLEX_InterpolateSF,dm,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[DMPLEX_InterpolateSF].active) ? (*PetscLogPLB)((DMPLEX_InterpolateSF
),0,(PetscObject)(dm),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1075,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1076 /* Build hashes of points in the SF for efficient lookup */
1077 ierr = PetscHMapICreate(&leafhash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1077,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1078 ierr = PetscHMapIJCreate(&roothash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1078,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1079 for (l = 0; l < numLeaves; ++l) {
4
Assuming 'l' is >= 'numLeaves'
5
Loop condition is false. Execution continues on line 1086
1080 key.i = remotePoints[l].index;
1081 key.j = remotePoints[l].rank;
1082 ierr = PetscHMapISet(leafhash, localPoints[l], l);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1082,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1083 ierr = PetscHMapIJSet(roothash, key, l);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1083,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1084 }
1085 /* Compute root degree to identify shared points */
1086 ierr = PetscSFComputeDegreeBegin(pointSF, &rootdegree);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1086,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1087 ierr = PetscSFComputeDegreeEnd(pointSF, &rootdegree);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1087,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1088 ierr = IntArrayViewFromOptions(PetscObjectComm((PetscObject) dm), "-interp_root_degree_view", "Root degree", "point", "degree", numRoots, rootdegree);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1088,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1089 /* Build a section / SFNode array of candidate points (face bd points) in the cone(support(leaf)),
1090 where each candidate is defined by a set of remote points (roots) for the other points that define the face. */
1091 ierr = PetscSectionCreate(PetscObjectComm((PetscObject) dm), &candidateSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1091,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1092 ierr = PetscSectionSetChart(candidateSection, 0, numRoots);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1092,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1093 {
1094 PetscHMapIJ facehash;
1095
1096 ierr = PetscHMapIJCreate(&facehash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1096,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1097 for (l = 0; l < numLeaves; ++l) {
6
Loop condition is false. Execution continues on line 1132
1098 const PetscInt localPoint = localPoints[l];
1099 const PetscInt *support;
1100 PetscInt supportSize, s;
1101
1102 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Checking local point %D\n", rank, localPoint);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1102,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1103 ierr = DMPlexGetSupportSize(dm, localPoint, &supportSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1103,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1104 ierr = DMPlexGetSupport(dm, localPoint, &support);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1104,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1105 for (s = 0; s < supportSize; ++s) {
1106 const PetscInt face = support[s];
1107 const PetscInt *cone;
1108 PetscInt coneSize, c, f, root;
1109 PetscBool isFace = PETSC_TRUE;
1110
1111 /* Only add face once */
1112 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Support point %D\n", rank, face);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1112,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1113 key.i = localPoint;
1114 key.j = face;
1115 ierr = PetscHMapIJGet(facehash, key, &f);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1115,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1116 if (f >= 0) continue;
1117 ierr = DMPlexGetConeSize(dm, face, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1117,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1118 ierr = DMPlexGetCone(dm, face, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1118,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1119 /* If a cone point does not map to leaves on any proc, then do not put face in SF */
1120 for (c = 0; c < coneSize; ++c) {
1121 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Cone point %D\n", rank, cone[c]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1121,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1122 ierr = PetscHMapIGet(leafhash, cone[c], &root);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1122,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1123 if (!rootdegree[cone[c]] && (root < 0)) {isFace = PETSC_FALSE; break;}
1124 }
1125 if (isFace) {
1126 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Found shared face %D\n", rank, face);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1126,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1127 ierr = PetscHMapIJSet(facehash, key, l);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1127,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1128 ierr = PetscSectionAddDof(candidateSection, localPoint, coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1128,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1129 }
1130 }
1131 }
1132 if (debug) {ierr = PetscSynchronizedFlush(PetscObjectComm((PetscObject) dm), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1132,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
7
Assuming 'debug' is 0
8
Taking false branch
1133 ierr = PetscHMapIJClear(facehash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1133,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1134 ierr = PetscSectionSetUp(candidateSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1134,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1135 ierr = PetscSectionGetStorageSize(candidateSection, &candidatesSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1135,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1136 ierr = PetscMalloc1(candidatesSize, &candidates)PetscMallocA(1,PETSC_FALSE,1136,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(candidatesSize)*sizeof(**(&candidates)),(&candidates
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1136,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1137 for (l = 0; l < numLeaves; ++l) {
9
Loop condition is false. Execution continues on line 1185
1138 const PetscInt localPoint = localPoints[l];
1139 const PetscInt *support;
1140 PetscInt supportSize, s, offset, idx = 0;
1141
1142 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Checking local point %D\n", rank, localPoint);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1142,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1143 ierr = PetscSectionGetOffset(candidateSection, localPoint, &offset);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1143,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1144 ierr = DMPlexGetSupportSize(dm, localPoint, &supportSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1144,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1145 ierr = DMPlexGetSupport(dm, localPoint, &support);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1145,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1146 for (s = 0; s < supportSize; ++s) {
1147 const PetscInt face = support[s];
1148 const PetscInt *cone;
1149 PetscInt coneSize, c, f, root;
1150 PetscBool isFace = PETSC_TRUE;
1151
1152 /* Only add face once */
1153 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Support point %D\n", rank, face);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1153,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1154 key.i = localPoint;
1155 key.j = face;
1156 ierr = PetscHMapIJGet(facehash, key, &f);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1156,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1157 if (f >= 0) continue;
1158 ierr = DMPlexGetConeSize(dm, face, &coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1158,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1159 ierr = DMPlexGetCone(dm, face, &cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1159,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1160 /* If a cone point does not map to leaves on any proc, then do not put face in SF */
1161 for (c = 0; c < coneSize; ++c) {
1162 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Cone point %D\n", rank, cone[c]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1162,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1163 ierr = PetscHMapIGet(leafhash, cone[c], &root);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1163,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1164 if (!rootdegree[cone[c]] && (root < 0)) {isFace = PETSC_FALSE; break;}
1165 }
1166 if (isFace) {
1167 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Adding shared face %D at idx %D\n", rank, face, idx);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1167,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1168 ierr = PetscHMapIJSet(facehash, key, l);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1168,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1169 candidates[offset+idx].rank = -1;
1170 candidates[offset+idx++].index = coneSize-1;
1171 for (c = 0; c < coneSize; ++c) {
1172 if (cone[c] == localPoint) continue;
1173 if (rootdegree[cone[c]]) {
1174 candidates[offset+idx].rank = rank;
1175 candidates[offset+idx++].index = cone[c];
1176 } else {
1177 ierr = PetscHMapIGet(leafhash, cone[c], &root);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1177,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1178 if (root < 0) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Cannot locate local point %D in SF", cone[c])return PetscError(((MPI_Comm)0x44000001),1178,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Cannot locate local point %D in SF",
cone[c])
;
1179 candidates[offset+idx++] = remotePoints[root];
1180 }
1181 }
1182 }
1183 }
1184 }
1185 if (debug) {ierr = PetscSynchronizedFlush(PetscObjectComm((PetscObject) dm), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1185,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
10
Taking false branch
1186 ierr = PetscHMapIJDestroy(&facehash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1186,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1187 ierr = PetscObjectViewFromOptions((PetscObject) candidateSection, NULL((void*)0), "-petscsection_interp_candidate_view");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1187,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1188 ierr = SFNodeArrayViewFromOptions(PetscObjectComm((PetscObject) dm), "-petscsection_interp_candidate_view", "Candidates", NULL((void*)0), candidatesSize, candidates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1188,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1189 }
1190 /* Gather candidate section / array pair into the root partition via inverse(multi(pointSF)). */
1191 /* Note that this section is indexed by offsets into leaves, not by point number */
1192 {
1193 PetscSF sfMulti, sfInverse, sfCandidates;
1194 PetscInt *remoteOffsets;
1195
1196 ierr = PetscSFGetMultiSF(pointSF, &sfMulti);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1196,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1197 ierr = PetscSFCreateInverseSF(sfMulti, &sfInverse);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1197,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1198 ierr = PetscSectionCreate(PetscObjectComm((PetscObject) dm), &candidateSectionRemote);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1198,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1199 ierr = PetscSFDistributeSection(sfInverse, candidateSection, &remoteOffsets, candidateSectionRemote);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1199,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1200 ierr = PetscSFCreateSectionSF(sfInverse, candidateSection, remoteOffsets, candidateSectionRemote, &sfCandidates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1200,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1201 ierr = PetscSectionGetStorageSize(candidateSectionRemote, &candidatesRemoteSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1201,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1202 ierr = PetscMalloc1(candidatesRemoteSize, &candidatesRemote)PetscMallocA(1,PETSC_FALSE,1202,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(candidatesRemoteSize)*sizeof(**(&candidatesRemote
)),(&candidatesRemote))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1202,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1203 ierr = PetscSFBcastBegin(sfCandidates, MPIU_2INT((MPI_Datatype)0x4c000816), candidates, candidatesRemote);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1203,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1204 ierr = PetscSFBcastEnd(sfCandidates, MPIU_2INT((MPI_Datatype)0x4c000816), candidates, candidatesRemote);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1204,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1205 ierr = PetscSFDestroy(&sfInverse);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1205,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1206 ierr = PetscSFDestroy(&sfCandidates);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1206,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1207 ierr = PetscFree(remoteOffsets)((*PetscTrFree)((void*)(remoteOffsets),1207,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
) || ((remoteOffsets) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1207,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1208
1209 ierr = PetscObjectViewFromOptions((PetscObject) candidateSectionRemote, NULL((void*)0), "-petscsection_interp_candidate_remote_view");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1209,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1210 ierr = SFNodeArrayViewFromOptions(PetscObjectComm((PetscObject) dm), "-petscsection_interp_candidate_remote_view", "Remote Candidates", NULL((void*)0), candidatesRemoteSize, candidatesRemote);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1210,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1211 }
1212 /* */
1213 {
1214 PetscInt idx;
1215 /* There is a section point for every leaf attached to a given root point */
1216 for (r = 0, idx = 0; r < numRoots; ++r) {
11
Loop condition is true. Entering loop body
14
Loop condition is false. Execution continues on line 1246
1217 PetscInt deg;
1218 for (deg = 0; deg < rootdegree[r]; ++deg, ++idx) {
12
Assuming the condition is false
13
Loop condition is false. Execution continues on line 1216
1219 PetscInt offset, dof, d;
1220
1221 ierr = PetscSectionGetDof(candidateSectionRemote, idx, &dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1221,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1222 ierr = PetscSectionGetOffset(candidateSectionRemote, idx, &offset);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1222,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1223 for (d = 0; d < dof; ++d) {
1224 const PetscInt sizeInd = offset+d;
1225 const PetscInt numPoints = candidatesRemote[sizeInd].index;
1226 const PetscInt *join = NULL((void*)0);
1227 PetscInt points[1024], p, joinSize;
1228
1229 points[0] = r;
1230 for (p = 0; p < numPoints; ++p) {
1231 ierr = DMPlexMapToLocalPoint(roothash, localPoints, rank, candidatesRemote[offset+(++d)], &points[p+1]);
1232 if (ierr) {d += numPoints-1 - p; break;} /* We got a point not in our overlap */
1233 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Checking local candidate %D\n", rank, points[p+1]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1233,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1234 }
1235 if (ierr) continue;
1236 ierr = DMPlexGetJoin(dm, numPoints+1, points, &joinSize, &join);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1236,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1237 if (joinSize == 1) {
1238 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Adding face %D at idx %D\n", rank, join[0], sizeInd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1238,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1239 candidatesRemote[sizeInd].rank = rank;
1240 candidatesRemote[sizeInd].index = join[0];
1241 }
1242 ierr = DMPlexRestoreJoin(dm, numPoints+1, points, &joinSize, &join);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1242,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1243 }
1244 }
1245 }
1246 if (debug) {ierr = PetscSynchronizedFlush(PetscObjectComm((PetscObject) dm), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1246,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
15
Taking false branch
1247 }
1248 /* Push claims back to receiver via the MultiSF and derive new pointSF mapping on receiver */
1249 {
1250 PetscSF sfMulti, sfClaims, sfPointNew;
1251 PetscSFNode *remotePointsNew;
1252 PetscHMapI claimshash;
1253 PetscInt *remoteOffsets, *localPointsNew;
1254 PetscInt claimsSize, pStart, pEnd, root, numLocalNew, p, d;
1255
1256 ierr = PetscSFGetMultiSF(pointSF, &sfMulti);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1256,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1257 ierr = PetscSectionCreate(PetscObjectComm((PetscObject) dm), &claimSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1257,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1258 ierr = PetscSFDistributeSection(sfMulti, candidateSectionRemote, &remoteOffsets, claimSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1258,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1259 ierr = PetscSFCreateSectionSF(sfMulti, candidateSectionRemote, remoteOffsets, claimSection, &sfClaims);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1259,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1260 ierr = PetscSectionGetStorageSize(claimSection, &claimsSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1260,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1261 ierr = PetscMalloc1(claimsSize, &claims)PetscMallocA(1,PETSC_FALSE,1261,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(claimsSize)*sizeof(**(&claims)),(&claims))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1261,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1262 ierr = PetscSFBcastBegin(sfClaims, MPIU_2INT((MPI_Datatype)0x4c000816), candidatesRemote, claims);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1262,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1263 ierr = PetscSFBcastEnd(sfClaims, MPIU_2INT((MPI_Datatype)0x4c000816), candidatesRemote, claims);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1263,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1264 ierr = PetscSFDestroy(&sfClaims);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1264,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1265 ierr = PetscFree(remoteOffsets)((*PetscTrFree)((void*)(remoteOffsets),1265,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
) || ((remoteOffsets) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1265,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1266 ierr = PetscObjectViewFromOptions((PetscObject) claimSection, NULL((void*)0), "-petscsection_interp_claim_view");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1266,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1267 ierr = SFNodeArrayViewFromOptions(PetscObjectComm((PetscObject) dm), "-petscsection_interp_claim_view", "Claims", NULL((void*)0), claimsSize, claims);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1267,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1268 /* Walk the original section of local supports and add an SF entry for each updated item */
1269 ierr = PetscHMapICreate(&claimshash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1269,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
16
Calling 'PetscHMapICreate'
19
Returning from 'PetscHMapICreate'
1270 for (p = 0; p < numRoots; ++p) {
20
Loop condition is true. Entering loop body
1271 PetscInt dof, offset;
1272
1273 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Checking root for claims %D\n", rank, p);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1273,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
21
Taking false branch
1274 ierr = PetscSectionGetDof(candidateSection, p, &dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1274,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1275 ierr = PetscSectionGetOffset(candidateSection, p, &offset);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1275,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1276 for (d = 0; d < dof;) {
22
Assuming 'd' is < 'dof'
23
Loop condition is true. Entering loop body
26
Loop condition is true. Entering loop body
28
Loop condition is true. Entering loop body
30
Loop condition is true. Entering loop body
1277 if (claims[offset+d].rank >= 0) {
24
Assuming the condition is false
25
Taking false branch
27
Taking false branch
29
Taking false branch
31
Taking true branch
1278 const PetscInt faceInd = offset+d;
1279 const PetscInt numPoints = candidates[faceInd].index;
1280 const PetscInt *join = NULL((void*)0);
1281 PetscInt joinSize, points[1024], c;
1282
1283 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Found claim for remote point (%D, %D)\n", rank, claims[faceInd].rank, claims[faceInd].index);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1283,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
32
Taking false branch
1284 points[0] = p;
1285 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] point %D\n", rank, points[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1285,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
33
Taking false branch
1286 for (c = 0, ++d; c < numPoints; ++c, ++d) {
34
Assuming 'c' is >= 'numPoints'
35
Loop condition is false. Execution continues on line 1293
1287 key.i = candidates[offset+d].index;
1288 key.j = candidates[offset+d].rank;
1289 ierr = PetscHMapIJGet(roothash, key, &root);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1289,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1290 points[c+1] = localPoints[root];
1291 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] point %D\n", rank, points[c+1]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1291,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1292 }
1293 ierr = DMPlexGetJoin(dm, numPoints+1, points, &joinSize, &join);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1293,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1294 if (joinSize == 1) {
36
Assuming 'joinSize' is equal to 1
37
Taking true branch
1295 if (debug) {ierr = PetscSynchronizedPrintf(PetscObjectComm((PetscObject) dm), "[%d] Found local face %D\n", rank, join[0]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1295,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
38
Taking false branch
1296 ierr = PetscHMapISet(claimshash, join[0], faceInd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1296,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
39
Calling 'PetscHMapISet'
1297 }
1298 ierr = DMPlexRestoreJoin(dm, numPoints+1, points, &joinSize, &join);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1298,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1299 } else d += claims[offset+d].index+1;
1300 }
1301 }
1302 if (debug) {ierr = PetscSynchronizedFlush(PetscObjectComm((PetscObject) dm), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1302,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1303 /* Create new pointSF from hashed claims */
1304 ierr = PetscHMapIGetSize(claimshash, &numLocalNew);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1304,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1305 ierr = DMPlexGetChart(dm, &pStart, &pEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1305,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1306 ierr = PetscMalloc1(numLeaves + numLocalNew, &localPointsNew)PetscMallocA(1,PETSC_FALSE,1306,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(numLeaves + numLocalNew)*sizeof(**(&localPointsNew
)),(&localPointsNew))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1306,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1307 ierr = PetscMalloc1(numLeaves + numLocalNew, &remotePointsNew)PetscMallocA(1,PETSC_FALSE,1307,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(numLeaves + numLocalNew)*sizeof(**(&remotePointsNew
)),(&remotePointsNew))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1307,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1308 for (p = 0; p < numLeaves; ++p) {
1309 localPointsNew[p] = localPoints[p];
1310 remotePointsNew[p].index = remotePoints[p].index;
1311 remotePointsNew[p].rank = remotePoints[p].rank;
1312 }
1313 p = numLeaves;
1314 ierr = PetscHMapIGetKeys(claimshash, &p, localPointsNew);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1314,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1315 ierr = PetscSortInt(numLocalNew, &localPointsNew[numLeaves]);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1315,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1316 for (p = numLeaves; p < numLeaves + numLocalNew; ++p) {
1317 PetscInt offset;
1318 ierr = PetscHMapIGet(claimshash, localPointsNew[p], &offset);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1318,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1319 remotePointsNew[p] = claims[offset];
1320 }
1321 ierr = PetscSFCreate(PetscObjectComm((PetscObject) dm), &sfPointNew);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1321,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1322 ierr = PetscSFSetGraph(sfPointNew, pEnd-pStart, numLeaves+numLocalNew, localPointsNew, PETSC_OWN_POINTER, remotePointsNew, PETSC_OWN_POINTER);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1322,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1323 ierr = DMSetPointSF(dm, sfPointNew);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1323,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1324 ierr = PetscSFDestroy(&sfPointNew);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1324,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1325 ierr = PetscHMapIDestroy(&claimshash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1325,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1326 }
1327 ierr = PetscHMapIDestroy(&leafhash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1327,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1328 ierr = PetscHMapIJDestroy(&roothash);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1328,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1329 ierr = PetscSectionDestroy(&candidateSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1329,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1330 ierr = PetscSectionDestroy(&candidateSectionRemote);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1330,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1331 ierr = PetscSectionDestroy(&claimSection);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1331,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1332 ierr = PetscFree(candidates)((*PetscTrFree)((void*)(candidates),1332,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
) || ((candidates) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1332,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1333 ierr = PetscFree(candidatesRemote)((*PetscTrFree)((void*)(candidatesRemote),1333,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
) || ((candidatesRemote) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1333,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1334 ierr = PetscFree(claims)((*PetscTrFree)((void*)(claims),1334,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
) || ((claims) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1334,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1335 ierr = PetscLogEventEnd(DMPLEX_InterpolateSF,dm,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[DMPLEX_InterpolateSF].active) ? (*PetscLogPLE)((DMPLEX_InterpolateSF
),0,(PetscObject)(dm),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1335,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1336 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1337}
1338
1339/*@
1340 DMPlexInterpolate - Take in a cell-vertex mesh and return one with all intermediate faces, edges, etc.
1341
1342 Collective on dm
1343
1344 Input Parameters:
1345+ dm - The DMPlex object with only cells and vertices
1346- dmInt - The interpolated DM
1347
1348 Output Parameter:
1349. dmInt - The complete DMPlex object
1350
1351 Level: intermediate
1352
1353 Notes:
1354 It does not copy over the coordinates.
1355
1356.seealso: DMPlexUninterpolate(), DMPlexCreateFromCellList(), DMPlexCopyCoordinates()
1357@*/
1358PetscErrorCode DMPlexInterpolate(DM dm, DM *dmInt)
1359{
1360 DM idm, odm = dm;
1361 PetscSF sfPoint;
1362 PetscInt depth, dim, d;
1363 const char *name;
1364 PetscBool flg=PETSC_TRUE;
1365 PetscErrorCode ierr;
1366
1367 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 1367; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1368 PetscValidHeaderSpecific(dm, DM_CLASSID, 1)do { if (!dm) return PetscError(((MPI_Comm)0x44000001),1368,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),1368,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),1368,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),1368,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
1369 PetscValidPointer(dmInt, 2)do { if (!dmInt) return PetscError(((MPI_Comm)0x44000001),1369
,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(dmInt,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),1369,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0)
;
1370 ierr = PetscLogEventBegin(DMPLEX_Interpolate,dm,0,0,0)(((PetscLogPLB && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[DMPLEX_Interpolate].active) ? (*PetscLogPLB)((DMPLEX_Interpolate
),0,(PetscObject)(dm),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1370,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1371 ierr = DMPlexGetDepth(dm, &depth);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1371,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1372 ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1372,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1373 if ((depth == dim) || (dim <= 1)) {
1374 ierr = PetscObjectReference((PetscObject) dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1374,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1375 idm = dm;
1376 } else {
1377 for (d = 1; d < dim; ++d) {
1378 /* Create interpolated mesh */
1379 ierr = DMCreate(PetscObjectComm((PetscObject)dm), &idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1379,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1380 ierr = DMSetType(idm, DMPLEX"plex");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1380,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1381 ierr = DMSetDimension(idm, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1381,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1382 if (depth > 0) {
1383 ierr = DMPlexInterpolateFaces_Internal(odm, 1, idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1383,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1384 ierr = DMGetPointSF(odm, &sfPoint);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1384,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1385 ierr = DMPlexInterpolatePointSF(idm, sfPoint);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1385,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1386 }
1387 if (odm != dm) {ierr = DMDestroy(&odm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1387,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1388 odm = idm;
1389 }
1390 ierr = PetscObjectGetName((PetscObject) dm, &name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1390,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1391 ierr = PetscObjectSetName((PetscObject) idm, name);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1391,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1392 ierr = DMPlexCopyCoordinates(dm, idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1392,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1393 ierr = DMCopyLabels(dm, idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1393,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1394 ierr = PetscOptionsGetBool(((PetscObject)dm)->options, ((PetscObject)dm)->prefix, "-dm_plex_interpolate_orient_interfaces", &flg, NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1394,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1395 if (flg) {ierr = DMPlexOrientInterface(idm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1395,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;}
1396 }
1397 {
1398 PetscBool isper;
1399 const PetscReal *maxCell, *L;
1400 const DMBoundaryType *bd;
1401
1402 ierr = DMGetPeriodicity(dm,&isper,&maxCell,&L,&bd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1402,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1403 ierr = DMSetPeriodicity(idm,isper,maxCell,L,bd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1403,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1404 }
1405 *dmInt = idm;
1406 ierr = PetscLogEventEnd(DMPLEX_Interpolate,dm,0,0,0)(((PetscLogPLE && petsc_stageLog->stageInfo[petsc_stageLog
->curStage].perfInfo.active && petsc_stageLog->
stageInfo[petsc_stageLog->curStage].eventLog->eventInfo
[DMPLEX_Interpolate].active) ? (*PetscLogPLE)((DMPLEX_Interpolate
),0,(PetscObject)(dm),(PetscObject)(0),(PetscObject)(0),(PetscObject
)(0)) : 0 ))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1406,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1407 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1408}
1409
1410/*@
1411 DMPlexCopyCoordinates - Copy coordinates from one mesh to another with the same vertices
1412
1413 Collective on dmA
1414
1415 Input Parameter:
1416. dmA - The DMPlex object with initial coordinates
1417
1418 Output Parameter:
1419. dmB - The DMPlex object with copied coordinates
1420
1421 Level: intermediate
1422
1423 Note: This is typically used when adding pieces other than vertices to a mesh
1424
1425.seealso: DMCopyLabels(), DMGetCoordinates(), DMGetCoordinatesLocal(), DMGetCoordinateDM(), DMGetCoordinateSection()
1426@*/
1427PetscErrorCode DMPlexCopyCoordinates(DM dmA, DM dmB)
1428{
1429 Vec coordinatesA, coordinatesB;
1430 VecType vtype;
1431 PetscSection coordSectionA, coordSectionB;
1432 PetscScalar *coordsA, *coordsB;
1433 PetscInt spaceDim, Nf, vStartA, vStartB, vEndA, vEndB, coordSizeB, v, d;
1434 PetscInt cStartA, cEndA, cStartB, cEndB, cS, cE;
1435 PetscBool lc = PETSC_FALSE;
1436 PetscErrorCode ierr;
1437
1438 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 1438; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1439 PetscValidHeaderSpecific(dmA, DM_CLASSID, 1)do { if (!dmA) return PetscError(((MPI_Comm)0x44000001),1439,
__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dmA,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),1439,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dmA))->classid != DM_CLASSID) { if
(((PetscObject)(dmA))->classid == -1) return PetscError((
(MPI_Comm)0x44000001),1439,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),1439,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
1440 PetscValidHeaderSpecific(dmB, DM_CLASSID, 2)do { if (!dmB) return PetscError(((MPI_Comm)0x44000001),1440,
__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",2); if (
!PetscCheckPointer(dmB,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),1440,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,2); if (((PetscObject)(dmB))->classid != DM_CLASSID) { if
(((PetscObject)(dmB))->classid == -1) return PetscError((
(MPI_Comm)0x44000001),1440,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,2); else return PetscError(((MPI_Comm)0x44000001),1440,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,2); } } while (0)
;
1441 if (dmA == dmB) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1442 ierr = DMPlexGetDepthStratum(dmA, 0, &vStartA, &vEndA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1442,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1443 ierr = DMPlexGetDepthStratum(dmB, 0, &vStartB, &vEndB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1443,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1444 if ((vEndA-vStartA) != (vEndB-vStartB)) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "The number of vertices in first DM %d != %d in the second DM", vEndA-vStartA, vEndB-vStartB)return PetscError(((MPI_Comm)0x44000001),1444,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,60,PETSC_ERROR_INITIAL,"The number of vertices in first DM %d != %d in the second DM"
,vEndA-vStartA,vEndB-vStartB)
;
1445 ierr = DMPlexGetHeightStratum(dmA, 0, &cStartA, &cEndA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1445,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1446 ierr = DMPlexGetHeightStratum(dmB, 0, &cStartB, &cEndB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1446,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1447 ierr = DMGetCoordinateSection(dmA, &coordSectionA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1447,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1448 ierr = DMGetCoordinateSection(dmB, &coordSectionB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1448,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1449 if (coordSectionA == coordSectionB) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1450 ierr = PetscSectionGetNumFields(coordSectionA, &Nf);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1450,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1451 if (!Nf) PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1452 if (Nf > 1) SETERRQ1(PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "The number of coordinate fields must be 1, not %D", Nf)return PetscError(((MPI_Comm)0x44000001),1452,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,60,PETSC_ERROR_INITIAL,"The number of coordinate fields must be 1, not %D"
,Nf)
;
1453 if (!coordSectionB) {
1454 PetscInt dim;
1455
1456 ierr = PetscSectionCreate(PetscObjectComm((PetscObject) coordSectionA), &coordSectionB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1456,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1457 ierr = DMGetCoordinateDim(dmA, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1457,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1458 ierr = DMSetCoordinateSection(dmB, dim, coordSectionB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1458,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1459 ierr = PetscObjectDereference((PetscObject) coordSectionB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1459,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1460 }
1461 ierr = PetscSectionSetNumFields(coordSectionB, 1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1461,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1462 ierr = PetscSectionGetFieldComponents(coordSectionA, 0, &spaceDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1462,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1463 ierr = PetscSectionSetFieldComponents(coordSectionB, 0, spaceDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1463,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1464 ierr = PetscSectionGetChart(coordSectionA, &cS, &cE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1464,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1465 if (cStartA <= cS && cS < cEndA) { /* localized coordinates */
1466 if ((cEndA-cStartA) != (cEndB-cStartB)) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_ARG_SIZ, "The number of cells in first DM %D != %D in the second DM", cEndA-cStartA, cEndB-cStartB)return PetscError(((MPI_Comm)0x44000001),1466,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,60,PETSC_ERROR_INITIAL,"The number of cells in first DM %D != %D in the second DM"
,cEndA-cStartA,cEndB-cStartB)
;
1467 cS = cS - cStartA + cStartB;
1468 cE = vEndB;
1469 lc = PETSC_TRUE;
1470 } else {
1471 cS = vStartB;
1472 cE = vEndB;
1473 }
1474 ierr = PetscSectionSetChart(coordSectionB, cS, cE);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1474,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1475 for (v = vStartB; v < vEndB; ++v) {
1476 ierr = PetscSectionSetDof(coordSectionB, v, spaceDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1476,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1477 ierr = PetscSectionSetFieldDof(coordSectionB, v, 0, spaceDim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1477,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1478 }
1479 if (lc) { /* localized coordinates */
1480 PetscInt c;
1481
1482 for (c = cS-cStartB; c < cEndB-cStartB; c++) {
1483 PetscInt dof;
1484
1485 ierr = PetscSectionGetDof(coordSectionA, c + cStartA, &dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1485,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1486 ierr = PetscSectionSetDof(coordSectionB, c + cStartB, dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1486,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1487 ierr = PetscSectionSetFieldDof(coordSectionB, c + cStartB, 0, dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1487,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1488 }
1489 }
1490 ierr = PetscSectionSetUp(coordSectionB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1490,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1491 ierr = PetscSectionGetStorageSize(coordSectionB, &coordSizeB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1491,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1492 ierr = DMGetCoordinatesLocal(dmA, &coordinatesA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1492,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1493 ierr = VecCreate(PETSC_COMM_SELF((MPI_Comm)0x44000001), &coordinatesB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1493,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1494 ierr = PetscObjectSetName((PetscObject) coordinatesB, "coordinates");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1494,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1495 ierr = VecSetSizes(coordinatesB, coordSizeB, PETSC_DETERMINE-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1495,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1496 ierr = VecGetBlockSize(coordinatesA, &d);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1496,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1497 ierr = VecSetBlockSize(coordinatesB, d);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1497,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1498 ierr = VecGetType(coordinatesA, &vtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1498,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1499 ierr = VecSetType(coordinatesB, vtype);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1499,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1500 ierr = VecGetArray(coordinatesA, &coordsA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1500,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1501 ierr = VecGetArray(coordinatesB, &coordsB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1501,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1502 for (v = 0; v < vEndB-vStartB; ++v) {
1503 PetscInt offA, offB;
1504
1505 ierr = PetscSectionGetOffset(coordSectionA, v + vStartA, &offA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1505,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1506 ierr = PetscSectionGetOffset(coordSectionB, v + vStartB, &offB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1506,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1507 for (d = 0; d < spaceDim; ++d) {
1508 coordsB[offB+d] = coordsA[offA+d];
1509 }
1510 }
1511 if (lc) { /* localized coordinates */
1512 PetscInt c;
1513
1514 for (c = cS-cStartB; c < cEndB-cStartB; c++) {
1515 PetscInt dof, offA, offB;
1516
1517 ierr = PetscSectionGetOffset(coordSectionA, c + cStartA, &offA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1517,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1518 ierr = PetscSectionGetOffset(coordSectionB, c + cStartB, &offB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1518,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1519 ierr = PetscSectionGetDof(coordSectionA, c + cStartA, &dof);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1519,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1520 ierr = PetscArraycpy(coordsB + offB,coordsA + offA,dof)((sizeof(*(coordsB + offB)) != sizeof(*(coordsA + offA))) || PetscMemcpy
(coordsB + offB,coordsA + offA,(dof)*sizeof(*(coordsB + offB)
)))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1520,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1521 }
1522 }
1523 ierr = VecRestoreArray(coordinatesA, &coordsA);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1523,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1524 ierr = VecRestoreArray(coordinatesB, &coordsB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1524,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1525 ierr = DMSetCoordinatesLocal(dmB, coordinatesB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1525,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1526 ierr = VecDestroy(&coordinatesB);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1526,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1527 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1528}
1529
1530/*@
1531 DMPlexUninterpolate - Take in a mesh with all intermediate faces, edges, etc. and return a cell-vertex mesh
1532
1533 Collective on dm
1534
1535 Input Parameter:
1536. dm - The complete DMPlex object
1537
1538 Output Parameter:
1539. dmUnint - The DMPlex object with only cells and vertices
1540
1541 Level: intermediate
1542
1543 Notes:
1544 It does not copy over the coordinates.
1545
1546.seealso: DMPlexInterpolate(), DMPlexCreateFromCellList(), DMPlexCopyCoordinates()
1547@*/
1548PetscErrorCode DMPlexUninterpolate(DM dm, DM *dmUnint)
1549{
1550 DM udm;
1551 PetscInt dim, vStart, vEnd, cStart, cEnd, cMax, c, maxConeSize = 0, *cone;
1552 PetscErrorCode ierr;
1553
1554 PetscFunctionBegindo { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
; petscstack->line[petscstack->currentsize] = 1554; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0)
;
1555 PetscValidHeaderSpecific(dm, DM_CLASSID, 1)do { if (!dm) return PetscError(((MPI_Comm)0x44000001),1555,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Object: Parameter # %d",1); if (
!PetscCheckPointer(dm,PETSC_OBJECT)) return PetscError(((MPI_Comm
)0x44000001),1555,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Invalid Pointer to Object: Parameter # %d"
,1); if (((PetscObject)(dm))->classid != DM_CLASSID) { if (
((PetscObject)(dm))->classid == -1) return PetscError(((MPI_Comm
)0x44000001),1555,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,64,PETSC_ERROR_INITIAL,"Object already free: Parameter # %d"
,1); else return PetscError(((MPI_Comm)0x44000001),1555,__func__
,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,62,PETSC_ERROR_INITIAL,"Wrong type of object: Parameter # %d"
,1); } } while (0)
;
1556 PetscValidPointer(dmUnint, 2)do { if (!dmUnint) return PetscError(((MPI_Comm)0x44000001),1556
,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(dmUnint,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),1556,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0)
;
1557 ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1557,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1558 if (dim <= 1) {
1559 ierr = PetscObjectReference((PetscObject) dm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1559,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1560 *dmUnint = dm;
1561 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1562 }
1563 ierr = DMPlexGetDepthStratum(dm, 0, &vStart, &vEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1563,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1564 ierr = DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1564,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1565 ierr = DMPlexGetHybridBounds(dm, &cMax, NULL((void*)0), NULL((void*)0), NULL((void*)0));CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1565,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1566 ierr = DMCreate(PetscObjectComm((PetscObject) dm), &udm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1566,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1567 ierr = DMSetType(udm, DMPLEX"plex");CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1567,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1568 ierr = DMSetDimension(udm, dim);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1568,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1569 ierr = DMPlexSetChart(udm, cStart, vEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1569,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1570 for (c = cStart; c < cEnd; ++c) {
1571 PetscInt *closure = NULL((void*)0), closureSize, cl, coneSize = 0;
1572
1573 ierr = DMPlexGetTransitiveClosure(dm, c, PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1573,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1574 for (cl = 0; cl < closureSize*2; cl += 2) {
1575 const PetscInt p = closure[cl];
1576
1577 if ((p >= vStart) && (p < vEnd)) ++coneSize;
1578 }
1579 ierr = DMPlexRestoreTransitiveClosure(dm, c, PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1579,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1580 ierr = DMPlexSetConeSize(udm, c, coneSize);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1580,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1581 maxConeSize = PetscMax(maxConeSize, coneSize)(((maxConeSize)<(coneSize)) ? (coneSize) : (maxConeSize));
1582 }
1583 ierr = DMSetUp(udm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1583,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1584 ierr = PetscMalloc1(maxConeSize, &cone)PetscMallocA(1,PETSC_FALSE,1584,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(maxConeSize)*sizeof(**(&cone)),(&cone))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1584,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1585 for (c = cStart; c < cEnd; ++c) {
1586 PetscInt *closure = NULL((void*)0), closureSize, cl, coneSize = 0;
1587
1588 ierr = DMPlexGetTransitiveClosure(dm, c, PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1588,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1589 for (cl = 0; cl < closureSize*2; cl += 2) {
1590 const PetscInt p = closure[cl];
1591
1592 if ((p >= vStart) && (p < vEnd)) cone[coneSize++] = p;
1593 }
1594 ierr = DMPlexRestoreTransitiveClosure(dm, c, PETSC_TRUE, &closureSize, &closure);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1594,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1595 ierr = DMPlexSetCone(udm, c, cone);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1595,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1596 }
1597 ierr = PetscFree(cone)((*PetscTrFree)((void*)(cone),1597,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
) || ((cone) = 0,0))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1597,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1598 ierr = DMPlexSetHybridBounds(udm, cMax, PETSC_DETERMINE-1, PETSC_DETERMINE-1, PETSC_DETERMINE-1);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1598,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1599 ierr = DMPlexSymmetrize(udm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1599,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1600 ierr = DMPlexStratify(udm);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1600,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1601 /* Reduce SF */
1602 {
1603 PetscSF sfPoint, sfPointUn;
1604 const PetscSFNode *remotePoints;
1605 const PetscInt *localPoints;
1606 PetscSFNode *remotePointsUn;
1607 PetscInt *localPointsUn;
1608 PetscInt vEnd, numRoots, numLeaves, l;
1609 PetscInt numLeavesUn = 0, n = 0;
1610 PetscErrorCode ierr;
1611
1612 /* Get original SF information */
1613 ierr = DMGetPointSF(dm, &sfPoint);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1613,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1614 ierr = DMGetPointSF(udm, &sfPointUn);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1614,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1615 ierr = DMPlexGetDepthStratum(dm, 0, NULL((void*)0), &vEnd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1615,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1616 ierr = PetscSFGetGraph(sfPoint, &numRoots, &numLeaves, &localPoints, &remotePoints);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1616,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1617 /* Allocate space for cells and vertices */
1618 for (l = 0; l < numLeaves; ++l) if (localPoints[l] < vEnd) numLeavesUn++;
1619 /* Fill in leaves */
1620 if (vEnd >= 0) {
1621 ierr = PetscMalloc1(numLeavesUn, &remotePointsUn)PetscMallocA(1,PETSC_FALSE,1621,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(numLeavesUn)*sizeof(**(&remotePointsUn)),(&
remotePointsUn))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1621,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1622 ierr = PetscMalloc1(numLeavesUn, &localPointsUn)PetscMallocA(1,PETSC_FALSE,1622,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,(size_t)(numLeavesUn)*sizeof(**(&localPointsUn)),(&localPointsUn
))
;CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1622,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1623 for (l = 0; l < numLeaves; l++) {
1624 if (localPoints[l] < vEnd) {
1625 localPointsUn[n] = localPoints[l];
1626 remotePointsUn[n].rank = remotePoints[l].rank;
1627 remotePointsUn[n].index = remotePoints[l].index;
1628 ++n;
1629 }
1630 }
1631 if (n != numLeavesUn) SETERRQ2(PETSC_COMM_SELF, PETSC_ERR_PLIB, "Inconsistent number of leaves %d != %d", n, numLeavesUn)return PetscError(((MPI_Comm)0x44000001),1631,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,77,PETSC_ERROR_INITIAL,"Inconsistent number of leaves %d != %d"
,n,numLeavesUn)
;
1632 ierr = PetscSFSetGraph(sfPointUn, vEnd, numLeavesUn, localPointsUn, PETSC_OWN_POINTER, remotePointsUn, PETSC_OWN_POINTER);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1632,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1633 }
1634 }
1635 {
1636 PetscBool isper;
1637 const PetscReal *maxCell, *L;
1638 const DMBoundaryType *bd;
1639
1640 ierr = DMGetPeriodicity(dm,&isper,&maxCell,&L,&bd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1640,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1641 ierr = DMSetPeriodicity(udm,isper,maxCell,L,bd);CHKERRQ(ierr)do {if (__builtin_expect(!!(ierr),0)) return PetscError(((MPI_Comm
)0x44000001),1641,__func__,"/sandbox/petsc/petsc.next/src/dm/impls/plex/plexinterpolate.c"
,ierr,PETSC_ERROR_REPEAT," ");} while (0)
;
1642 }
1643
1644 *dmUnint = udm;
1645 PetscFunctionReturn(0)do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0)
;
1646}

/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h

1#if !defined(PETSC_HASHMAPI_H)
2#define PETSC_HASHMAPI_H
3
4#include <petsc/private/hashmap.h>
5
6PETSC_HASH_MAP(HMapI, PetscInt, PetscInt, PetscHashInt, PetscHashEqual, -1)typedef struct kh_HMapI_s { khint_t n_buckets, size, n_occupied
, upper_bound; khint32_t *flags; PetscInt *keys; PetscInt *vals
; } kh_HMapI_t; static inline __attribute((unused)) kh_HMapI_t
*kh_init_HMapI(void) { return (kh_HMapI_t*)calloc(1,sizeof(kh_HMapI_t
)); } static inline __attribute((unused)) void kh_destroy_HMapI
(kh_HMapI_t *h) { if (h) { free((void *)h->keys); free(h->
flags); free((void *)h->vals); free(h); } } static inline __attribute
((unused)) void kh_clear_HMapI(kh_HMapI_t *h) { if (h &&
h->flags) { memset(h->flags, 0xaa, ((h->n_buckets) <
16? 1 : (h->n_buckets)>>4) * sizeof(khint32_t)); h->
size = h->n_occupied = 0; } } static inline __attribute((unused
)) khint_t kh_get_HMapI(const kh_HMapI_t *h, PetscInt key) { if
(h->n_buckets) { khint_t k, i, last, mask, step = 0; mask
= h->n_buckets - 1; k = PetscHashInt(key); i = k & mask
; last = i; while (!((h->flags[i>>4]>>((i&
0xfU)<<1))&2) && (((h->flags[i>>4]
>>((i&0xfU)<<1))&1) || !((h->keys[i]) ==
(key)))) { i = (i + (++step)) & mask; if (i == last) return
h->n_buckets; } return ((h->flags[i>>4]>>(
(i&0xfU)<<1))&3)? h->n_buckets : i; } else return
0; } static inline __attribute((unused)) int kh_resize_HMapI
(kh_HMapI_t *h, khint_t new_n_buckets) { khint32_t *new_flags
= 0; khint_t j = 1; { (--(new_n_buckets), (new_n_buckets)|=(
new_n_buckets)>>1, (new_n_buckets)|=(new_n_buckets)>>
2, (new_n_buckets)|=(new_n_buckets)>>4, (new_n_buckets)
|=(new_n_buckets)>>8, (new_n_buckets)|=(new_n_buckets)>>
16, ++(new_n_buckets)); if (new_n_buckets < 4) new_n_buckets
= 4; if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER
+ 0.5)) j = 0; else { new_flags = (khint32_t*)malloc(((new_n_buckets
) < 16? 1 : (new_n_buckets)>>4) * sizeof(khint32_t))
; if (!new_flags) return -1; memset(new_flags, 0xaa, ((new_n_buckets
) < 16? 1 : (new_n_buckets)>>4) * sizeof(khint32_t))
; if (h->n_buckets < new_n_buckets) { PetscInt *new_keys
= (PetscInt*)realloc((void *)h->keys,new_n_buckets * sizeof
(PetscInt)); if (!new_keys) { free(new_flags); return -1; } h
->keys = new_keys; if (1) { PetscInt *new_vals = (PetscInt
*)realloc((void *)h->vals,new_n_buckets * sizeof(PetscInt)
); if (!new_vals) { free(new_flags); return -1; } h->vals =
new_vals; } } } } if (j) { for (j = 0; j != h->n_buckets;
++j) { if (((h->flags[j>>4]>>((j&0xfU)<<
1))&3) == 0) { PetscInt key = h->keys[j]; PetscInt val
; khint_t new_mask; new_mask = new_n_buckets - 1; if (1) val =
h->vals[j]; (h->flags[j>>4]|=1ul<<((j&
0xfU)<<1)); while (1) { khint_t k, i, step = 0; k = PetscHashInt
(key); i = k & new_mask; while (!((new_flags[i>>4]>>
((i&0xfU)<<1))&2)) i = (i + (++step)) & new_mask
; (new_flags[i>>4]&=~(2ul<<((i&0xfU)<<
1))); if (i < h->n_buckets && ((h->flags[i>>
4]>>((i&0xfU)<<1))&3) == 0) { { PetscInt tmp
= h->keys[i]; h->keys[i] = key; key = tmp; } if (1) { PetscInt
tmp = h->vals[i]; h->vals[i] = val; val = tmp; } (h->
flags[i>>4]|=1ul<<((i&0xfU)<<1)); } else
{ h->keys[i] = key; if (1) h->vals[i] = val; break; } }
} } if (h->n_buckets > new_n_buckets) { h->keys = (
PetscInt*)realloc((void *)h->keys,new_n_buckets * sizeof(PetscInt
)); if (1) h->vals = (PetscInt*)realloc((void *)h->vals
,new_n_buckets * sizeof(PetscInt)); } free(h->flags); h->
flags = new_flags; h->n_buckets = new_n_buckets; h->n_occupied
= h->size; h->upper_bound = (khint_t)(h->n_buckets *
__ac_HASH_UPPER + 0.5); } return 0; } static inline __attribute
((unused)) khint_t kh_put_HMapI(kh_HMapI_t *h, PetscInt key, int
*ret) { khint_t x; if (h->n_occupied >= h->upper_bound
) { if (h->n_buckets > (h->size<<1)) { if (kh_resize_HMapI
(h, h->n_buckets - 1) < 0) { *ret = -1; return h->n_buckets
; } } else if (kh_resize_HMapI(h, h->n_buckets + 1) < 0
) { *ret = -1; return h->n_buckets; } } { khint_t k, i, site
, last, mask = h->n_buckets - 1, step = 0; x = site = h->
n_buckets; k = PetscHashInt(key); i = k & mask; if (((h->
flags[i>>4]>>((i&0xfU)<<1))&2)) x =
i; else { last = i; while (!((h->flags[i>>4]>>
((i&0xfU)<<1))&2) && (((h->flags[i>>
4]>>((i&0xfU)<<1))&1) || !((h->keys[i]
) == (key)))) { if (((h->flags[i>>4]>>((i&
0xfU)<<1))&1)) site = i; i = (i + (++step)) & mask
; if (i == last) { x = site; break; } } if (x == h->n_buckets
) { if (((h->flags[i>>4]>>((i&0xfU)<<
1))&2) && site != h->n_buckets) x = site; else
x = i; } } } if (((h->flags[x>>4]>>((x&0xfU
)<<1))&2)) { h->keys[x] = key; (h->flags[x>>
4]&=~(3ul<<((x&0xfU)<<1))); ++h->size;
++h->n_occupied; *ret = 1; } else if (((h->flags[x>>
4]>>((x&0xfU)<<1))&1)) { h->keys[x] = key
; (h->flags[x>>4]&=~(3ul<<((x&0xfU)<<
1))); ++h->size; *ret = 2; } else *ret = 0; return x; } static
inline __attribute((unused)) void kh_del_HMapI(kh_HMapI_t *h
, khint_t x) { if (x != h->n_buckets && !((h->flags
[x>>4]>>((x&0xfU)<<1))&3)) { (h->
flags[x>>4]|=1ul<<((x&0xfU)<<1)); --h->
size; } } typedef kh_HMapI_t *PetscHMapI; static inline __attribute
((unused)) PetscErrorCode PetscHMapICreate(PetscHMapI *ht) { do
{ do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); *ht = kh_init_HMapI(); do { if (__builtin_expect
(!!(!(*ht!=((void*)0))),0)) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","*ht!=((void*)0)"
); } while(0); do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHMapIDestroy
(PetscHMapI *ht) { do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); if (!*ht) do { do { ; if (petscstack &&
petscstack->currentsize > 0) { petscstack->currentsize
--; petscstack->function[petscstack->currentsize] = 0; petscstack
->file[petscstack->currentsize] = 0; petscstack->line
[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); kh_destroy_HMapI(*ht); *ht = ((void*)0); do {
do { ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHMapIReset(PetscHMapI ht) { do
{ do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); { if (ht) { free((ht)->keys); free((ht)->
flags); free((ht)->vals); memset((ht), 0x00, sizeof(*(ht))
); } }; do { do { ; if (petscstack && petscstack->
currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHMapIDuplicate
(PetscHMapI ht,PetscHMapI *hd) { int ret; PetscInt key; PetscInt
val; do { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!hd) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(hd,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0); *hd = kh_init_HMapI(); do { if (__builtin_expect
(!!(!(*hd!=((void*)0))),0)) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","*hd!=((void*)0)"
); } while(0); ret = kh_resize_HMapI(*hd, ((ht)->size)); do
{ if (__builtin_expect(!!(!(ret==0)),0)) return PetscError((
(MPI_Comm)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret==0"
); } while(0); { khint_t __i; for (__i = (khint_t)(0); __i !=
((ht)->n_buckets); ++__i) { if (!(!(((ht)->flags[(__i)
>>4]>>(((__i)&0xfU)<<1))&3))) continue
; (key) = ((ht)->keys[__i]); (val) = ((ht)->vals[__i]);
{ khiter_t i; i = kh_put_HMapI(*hd, key, &ret); do { if (
__builtin_expect(!!(!(ret>=0)),0)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); ((*hd)->vals[i]) = val;}; } } do { do { ; if
(petscstack && petscstack->currentsize > 0) { petscstack
->currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHMapIClear(PetscHMapI ht) { do { do { ; if (petscstack &&
(petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); kh_clear_HMapI(ht); do { do { ; if (petscstack &&
petscstack->currentsize > 0) { petscstack->currentsize
--; petscstack->function[petscstack->currentsize] = 0; petscstack
->file[petscstack->currentsize] = 0; petscstack->line
[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHMapIResize(PetscHMapI ht,PetscInt nb) { int ret; do { do
{ ; if (petscstack && (petscstack->currentsize <
64)) { petscstack->function[petscstack->currentsize] =
__func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); ret = kh_resize_HMapI(ht, (khint_t)nb); do { if
(__builtin_expect(!!(!(ret>=0)),0)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHMapIGetSize
(PetscHMapI ht,PetscInt *n) { do { do { ; if (petscstack &&
(petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!n) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(n,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); *n = (PetscInt)((ht)->size); do { do { ;
if (petscstack && petscstack->currentsize > 0)
{ petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHMapIGetCapacity(PetscHMapI ht
,PetscInt *n) { do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!n) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(n,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); *n = (PetscInt)((ht)->n_buckets); do { do
{ ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHMapIHas(PetscHMapI ht,PetscInt
key,PetscBool *has) { khiter_t iter; do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!has) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(has,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); iter = kh_get_HMapI(ht, key); *has = (iter != (
(ht)->n_buckets)) ? PETSC_TRUE : PETSC_FALSE; do { do { ; if
(petscstack && petscstack->currentsize > 0) { petscstack
->currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHMapIGet(PetscHMapI ht,PetscInt key,PetscInt *val) { khiter_t
iter; do { do { ; if (petscstack && (petscstack->
currentsize < 64)) { petscstack->function[petscstack->
currentsize] = __func__; petscstack->file[petscstack->currentsize
] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!val) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(val,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,3); } while (0); iter = kh_get_HMapI(ht, key); *val = (iter !=
((ht)->n_buckets)) ? ((ht)->vals[iter]) : (-1); do { do
{ ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHMapISet(PetscHMapI ht,PetscInt
key,PetscInt val) { int ret; khiter_t iter; do { do { ; if (
petscstack && (petscstack->currentsize < 64)) {
petscstack->function[petscstack->currentsize] = __func__
; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); iter = kh_put_HMapI(ht, key, &ret); do { if
(__builtin_expect(!!(!(ret>=0)),0)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); ((ht)->vals[iter]) = val; do { do { ; if (petscstack
&& petscstack->currentsize > 0) { petscstack->
currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHMapIDel(PetscHMapI ht,PetscInt key) { khiter_t iter; do
{ do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); iter = kh_get_HMapI(ht, key); kh_del_HMapI(ht, iter
); do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0); } static
inline __attribute((unused)) PetscErrorCode PetscHMapIQuerySet
(PetscHMapI ht,PetscInt key,PetscInt val,PetscBool *missing) {
int ret; khiter_t iter; do { do { ; if (petscstack &&
(petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!missing) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(missing,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); iter = kh_put_HMapI(ht, key, &ret); do { if
(__builtin_expect(!!(!(ret>=0)),0)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); ((ht)->vals[iter]) = val; *missing = ret ? PETSC_TRUE
: PETSC_FALSE; do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHMapIQueryDel
(PetscHMapI ht,PetscInt key,PetscBool *present) { khiter_t iter
; do { do { ; if (petscstack && (petscstack->currentsize
< 64)) { petscstack->function[petscstack->currentsize
] = __func__; petscstack->file[petscstack->currentsize]
= "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!present) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(present,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); iter = kh_get_HMapI(ht, key); if (iter != ((ht)
->n_buckets)) { kh_del_HMapI(ht, iter); *present = PETSC_TRUE
; } else { *present = PETSC_FALSE; } do { do { ; if (petscstack
&& petscstack->currentsize > 0) { petscstack->
currentsize--; petscstack->function[petscstack->currentsize
] = 0; petscstack->file[petscstack->currentsize] = 0; petscstack
->line[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHMapIFind(PetscHMapI ht,PetscInt key,PetscHashIter *iter
,PetscBool *found) { do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!iter) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(iter,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0); do { if (!found) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(found,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); *iter = kh_get_HMapI(ht, key); *found = (*iter !=
((ht)->n_buckets)) ? PETSC_TRUE : PETSC_FALSE; do { do { ;
if (petscstack && petscstack->currentsize > 0)
{ petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHMapIPut(PetscHMapI ht,PetscInt
key,PetscHashIter *iter,PetscBool *missing) { int ret; do { do
{ ; if (petscstack && (petscstack->currentsize <
64)) { petscstack->function[petscstack->currentsize] =
__func__; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!iter) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(iter,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",2);
} while (0); do { if (!missing) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(missing,PETSC_CHAR)) return PetscError((
(MPI_Comm)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); *iter = kh_put_HMapI(ht, key, &ret); do { if
(__builtin_expect(!!(!(ret>=0)),0)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","ret>=0"
); } while(0); *missing = ret ? PETSC_TRUE : PETSC_FALSE; do {
do { ; if (petscstack && petscstack->currentsize >
0) { petscstack->currentsize--; petscstack->function[petscstack
->currentsize] = 0; petscstack->file[petscstack->currentsize
] = 0; petscstack->line[petscstack->currentsize] = 0; petscstack
->petscroutine[petscstack->currentsize] = PETSC_FALSE; }
if (petscstack) { petscstack->hotdepth = (((petscstack->
hotdepth-1)<(0)) ? (0) : (petscstack->hotdepth-1)); } ;
} while (0); return(0);} while (0); } static inline __attribute
((unused)) PetscErrorCode PetscHMapIIterGet(PetscHMapI ht,PetscHashIter
iter,PetscInt *val) { do { do { ; if (petscstack && (
petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!val) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",3); if
(!PetscCheckPointer(val,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",3);
} while (0); *val = __builtin_expect(!!(iter < ((ht)->
n_buckets) && (!(((ht)->flags[(iter)>>4]>>
(((iter)&0xfU)<<1))&3))),1) ? ((ht)->vals[iter
]) : (-1); do { do { ; if (petscstack && petscstack->
currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHMapIIterSet
(PetscHMapI ht,PetscHashIter iter,PetscInt val) { do { do { ;
if (petscstack && (petscstack->currentsize < 64
)) { petscstack->function[petscstack->currentsize] = __func__
; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); if (__builtin_expect(!!(iter < ((ht)->n_buckets
) && (!(((ht)->flags[(iter)>>4]>>(((iter
)&0xfU)<<1))&3))),1)) ((ht)->vals[iter]) = val
; do { do { ; if (petscstack && petscstack->currentsize
> 0) { petscstack->currentsize--; petscstack->function
[petscstack->currentsize] = 0; petscstack->file[petscstack
->currentsize] = 0; petscstack->line[petscstack->currentsize
] = 0; petscstack->petscroutine[petscstack->currentsize
] = PETSC_FALSE; } if (petscstack) { petscstack->hotdepth =
(((petscstack->hotdepth-1)<(0)) ? (0) : (petscstack->
hotdepth-1)); } ; } while (0); return(0);} while (0); } static
inline __attribute((unused)) PetscErrorCode PetscHMapIIterDel
(PetscHMapI ht,PetscHashIter iter) { do { do { ; if (petscstack
&& (petscstack->currentsize < 64)) { petscstack
->function[petscstack->currentsize] = __func__; petscstack
->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_TRUE || petscstack->hotdepth); } ; } while (0);
; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); if (__builtin_expect(!!(iter < ((ht)->n_buckets
)),1)) kh_del_HMapI(ht, iter); do { do { ; if (petscstack &&
petscstack->currentsize > 0) { petscstack->currentsize
--; petscstack->function[petscstack->currentsize] = 0; petscstack
->file[petscstack->currentsize] = 0; petscstack->line
[petscstack->currentsize] = 0; petscstack->petscroutine
[petscstack->currentsize] = PETSC_FALSE; } if (petscstack)
{ petscstack->hotdepth = (((petscstack->hotdepth-1)<
(0)) ? (0) : (petscstack->hotdepth-1)); } ; } while (0); return
(0);} while (0); } static inline __attribute((unused)) PetscErrorCode
PetscHMapIGetKeys(PetscHMapI ht,PetscInt *off,PetscInt array
[]) { PetscInt key; PetscInt pos; do { do { ; if (petscstack &&
(petscstack->currentsize < 64)) { petscstack->function
[petscstack->currentsize] = __func__; petscstack->file[
petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!off) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(off,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); pos = *off; { khint_t __i; for (__i = (khint_t
)(0); __i != ((ht)->n_buckets); ++__i) { if (!(!(((ht)->
flags[(__i)>>4]>>(((__i)&0xfU)<<1))&
3))) continue; (key) = ((ht)->keys[__i]); array[pos++] = key
; } }; *off = pos; do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHMapIGetVals
(PetscHMapI ht,PetscInt *off,PetscInt array[]) { PetscInt val
; PetscInt pos; do { do { ; if (petscstack && (petscstack
->currentsize < 64)) { petscstack->function[petscstack
->currentsize] = __func__; petscstack->file[petscstack->
currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!off) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(off,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); pos = *off; { khint_t __i; for (__i = (khint_t
)(0); __i != ((ht)->n_buckets); ++__i) { if (!(!(((ht)->
flags[(__i)>>4]>>(((__i)&0xfU)<<1))&
3))) continue; (val) = ((ht)->vals[__i]); array[pos++] = val
; } }; *off = pos; do { do { ; if (petscstack && petscstack
->currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); } static inline __attribute((unused)) PetscErrorCode PetscHMapIGetPairs
(PetscHMapI ht,PetscInt *off,PetscInt karray[],PetscInt varray
[]) { PetscInt val; PetscInt key; PetscInt pos; do { do { ; if
(petscstack && (petscstack->currentsize < 64))
{ petscstack->function[petscstack->currentsize] = __func__
; petscstack->file[petscstack->currentsize] = "/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
; petscstack->line[petscstack->currentsize] = 6; petscstack
->petscroutine[petscstack->currentsize] = PETSC_TRUE; petscstack
->currentsize++; } if (petscstack) { petscstack->hotdepth
+= (PETSC_FALSE || petscstack->hotdepth); } ; } while (0)
; ; } while (0); do { if (!ht) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,85,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",1); if
(!PetscCheckPointer(ht,PETSC_CHAR)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer: Parameter # %d",1);
} while (0); do { if (!off) return PetscError(((MPI_Comm)0x44000001
),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Null Pointer: Parameter # %d",2); if
(!PetscCheckPointer(off,PETSC_INT)) return PetscError(((MPI_Comm
)0x44000001),6,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashmapi.h"
,68,PETSC_ERROR_INITIAL,"Invalid Pointer to PetscInt: Parameter # %d"
,2); } while (0); pos = *off; { khint_t __i; for (__i = (khint_t
)(0); __i != ((ht)->n_buckets); ++__i) { if (!(!(((ht)->
flags[(__i)>>4]>>(((__i)&0xfU)<<1))&
3))) continue; (key) = ((ht)->keys[__i]); (val) = ((ht)->
vals[__i]); { karray[pos] = key; varray[pos++] = val;}; } } *
off = pos; do { do { ; if (petscstack && petscstack->
currentsize > 0) { petscstack->currentsize--; petscstack
->function[petscstack->currentsize] = 0; petscstack->
file[petscstack->currentsize] = 0; petscstack->line[petscstack
->currentsize] = 0; petscstack->petscroutine[petscstack
->currentsize] = PETSC_FALSE; } if (petscstack) { petscstack
->hotdepth = (((petscstack->hotdepth-1)<(0)) ? (0) :
(petscstack->hotdepth-1)); } ; } while (0); return(0);} while
(0); }
17
Within the expansion of the macro 'PETSC_HASH_MAP':
a
Assuming 'petscstack' is null
b
Assuming the condition is false
c
Calling 'kh_init_HMapI'
d
Returning from 'kh_init_HMapI'
e
Assuming the condition is true
f
Assuming 'petscstack' is null
18
Within the expansion of the macro 'PETSC_HASH_MAP':
a
Null pointer value stored to field 'flags'
40
Within the expansion of the macro 'PETSC_HASH_MAP':
a
Assuming 'petscstack' is null
b
Assuming the condition is false
c
Calling 'kh_put_HMapI'
41
Within the expansion of the macro 'PETSC_HASH_MAP':
a
Calling 'kh_resize_HMapI'
b
Returning from 'kh_resize_HMapI'
c
Calling 'PetscHashInt'
d
Returning from 'PetscHashInt'
e
Array access (via field 'flags') results in a null pointer dereference
42
Within the expansion of the macro 'PETSC_HASH_MAP':
7
8#endif /* PETSC_HASHMAPI_H */

/sandbox/petsc/petsc.next/include/petsc/private/hashtable.h

1#if !defined(PETSC_HASHTABLE_H)
2#define PETSC_HASHTABLE_H
3
4#include <petsc/private/petscimpl.h>
5
6#define kh_inlineinline PETSC_INLINEinline
7#define klib_unused__attribute((unused)) PETSC_UNUSED__attribute((unused))
8#include <petsc/private/kernels/khash.h>
9
10/* Required for khash <= 0.2.5 */
11#if !defined(kcalloc)
12#define kcalloc(N,Z)calloc(N,Z) calloc(N,Z)
13#endif
14#if !defined(kmalloc)
15#define kmalloc(Z)malloc(Z) malloc(Z)
16#endif
17#if !defined(krealloc)
18#define krealloc(P,Z)realloc(P,Z) realloc(P,Z)
19#endif
20#if !defined(kfree)
21#define kfree(P)free(P) free(P)
22#endif
23
24/* --- Useful extensions to khash --- */
25
26#if !defined(kh_reset)
27/*! @function
28 @abstract Reset a hash table to initial state.
29 @param name Name of the hash table [symbol]
30 @param h Pointer to the hash table [khash_t(name)*]
31 */
32#define kh_reset(name, h){ if (h) { free((h)->keys); free((h)->flags); free((h)->
vals); memset((h), 0x00, sizeof(*(h))); } }
{ \
33 if (h) { \
34 kfree((h)->keys)free((h)->keys); kfree((h)->flags)free((h)->flags); \
35 kfree((h)->vals)free((h)->vals); \
36 memset((h), 0x00, sizeof(*(h))); \
37 } }
38#endif /*kh_reset*/
39
40#if !defined(kh_foreach)
41/*! @function
42 @abstract Iterate over the entries in the hash table
43 @param h Pointer to the hash table [khash_t(name)*]
44 @param kvar Variable to which key will be assigned
45 @param vvar Variable to which value will be assigned
46 @param code Block of code to execute
47 */
48#define kh_foreach(h, kvar, vvar, code){ khint_t __i; for (__i = (khint_t)(0); __i != ((h)->n_buckets
); ++__i) { if (!(!(((h)->flags[(__i)>>4]>>(((
__i)&0xfU)<<1))&3))) continue; (kvar) = ((h)->
keys[__i]); (vvar) = ((h)->vals[__i]); code; } }
{ khint_t __i; \
49 for (__i = kh_begin(h)(khint_t)(0); __i != kh_end(h)((h)->n_buckets); ++__i) { \
50 if (!kh_exist(h,__i)(!(((h)->flags[(__i)>>4]>>(((__i)&0xfU)<<
1))&3))
) continue; \
51 (kvar) = kh_key(h,__i)((h)->keys[__i]); \
52 (vvar) = kh_val(h,__i)((h)->vals[__i]); \
53 code; \
54 } }
55#endif /*kh_foreach*/
56
57#if !defined(kh_foreach_key)
58/*! @function
59 @abstract Iterate over the keys in the hash table
60 @param h Pointer to the hash table [khash_t(name)*]
61 @param kvar Variable to which key will be assigned
62 @param code Block of code to execute
63 */
64#define kh_foreach_key(h, kvar, code){ khint_t __i; for (__i = (khint_t)(0); __i != ((h)->n_buckets
); ++__i) { if (!(!(((h)->flags[(__i)>>4]>>(((
__i)&0xfU)<<1))&3))) continue; (kvar) = ((h)->
keys[__i]); code; } }
{ khint_t __i; \
65 for (__i = kh_begin(h)(khint_t)(0); __i != kh_end(h)((h)->n_buckets); ++__i) { \
66 if (!kh_exist(h,__i)(!(((h)->flags[(__i)>>4]>>(((__i)&0xfU)<<
1))&3))
) continue; \
67 (kvar) = kh_key(h,__i)((h)->keys[__i]); \
68 code; \
69 } }
70#endif /*kh_foreach_key*/
71
72#if !defined(kh_foreach_value)
73/*! @function
74 @abstract Iterate over the values in the hash table
75 @param h Pointer to the hash table [khash_t(name)*]
76 @param vvar Variable to which value will be assigned
77 @param code Block of code to execute
78 */
79#define kh_foreach_value(h, vvar, code){ khint_t __i; for (__i = (khint_t)(0); __i != ((h)->n_buckets
); ++__i) { if (!(!(((h)->flags[(__i)>>4]>>(((
__i)&0xfU)<<1))&3))) continue; (vvar) = ((h)->
vals[__i]); code; } }
{ khint_t __i; \
80 for (__i = kh_begin(h)(khint_t)(0); __i != kh_end(h)((h)->n_buckets); ++__i) { \
81 if (!kh_exist(h,__i)(!(((h)->flags[(__i)>>4]>>(((__i)&0xfU)<<
1))&3))
) continue; \
82 (vvar) = kh_val(h,__i)((h)->vals[__i]); \
83 code; \
84 } }
85#endif /*kh_foreach_value*/
86
87
88/* --- Helper macro for error checking --- */
89
90#if defined(PETSC_USE_DEBUG1)
91#define PetscHashAssert(expr)do { if (__builtin_expect(!!(!(expr)),0)) return PetscError((
(MPI_Comm)0x44000001),91,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashtable.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","expr"
); } while(0)
do { \
92 if (PetscUnlikely(!(expr))__builtin_expect(!!(!(expr)),0)) \
93 SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_LIB, \return PetscError(((MPI_Comm)0x44000001),95,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashtable.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","expr"
)
94 "[khash] Assertion: `%s' failed.", \return PetscError(((MPI_Comm)0x44000001),95,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashtable.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","expr"
)
95 PetscStringize(expr))return PetscError(((MPI_Comm)0x44000001),95,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashtable.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","expr"
)
; \
96} while(0)
97#else
98#define PetscHashAssert(expr)do { if (__builtin_expect(!!(!(expr)),0)) return PetscError((
(MPI_Comm)0x44000001),98,__func__,"/sandbox/petsc/petsc.next/include/petsc/private/hashtable.h"
,76,PETSC_ERROR_INITIAL,"[khash] Assertion: `%s' failed.","expr"
); } while(0)
((void)(expr))
99#endif
100
101
102/* --- Low level iterator API --- */
103
104typedef khiter_t PetscHashIter;
105
106#define PetscHashIterBegin(ht,i)do { (i) = (khint_t)(0); if ((i) != (((ht))->n_buckets) &&
!(!((((ht))->flags[((i))>>4]>>((((i))&0xfU
)<<1))&3))) do { ++((i)); } while (((i)) != ((((ht)
))->n_buckets) && !(!(((((ht)))->flags[(((i)))>>
4]>>(((((i)))&0xfU)<<1))&3))); } while (0
)
do { \
107 (i) = kh_begin((ht))(khint_t)(0); \
108 if ((i) != kh_end((ht))(((ht))->n_buckets) && !kh_exist((ht),(i))(!((((ht))->flags[((i))>>4]>>((((i))&0xfU)
<<1))&3))
) \
109 PetscHashIterNext((ht),(i))do { ++((i)); } while (((i)) != ((((ht)))->n_buckets) &&
!(!(((((ht)))->flags[(((i)))>>4]>>(((((i)))&
0xfU)<<1))&3)))
; \
110} while (0)
111
112#define PetscHashIterNext(ht,i)do { ++(i); } while ((i) != (((ht))->n_buckets) &&
!(!((((ht))->flags[((i))>>4]>>((((i))&0xfU
)<<1))&3)))
\
113 do { ++(i); } while ((i) != kh_end((ht))(((ht))->n_buckets) && !kh_exist((ht),(i))(!((((ht))->flags[((i))>>4]>>((((i))&0xfU)
<<1))&3))
)
114
115#define PetscHashIterAtEnd(ht,i)((i) == (((ht))->n_buckets)) ((i) == kh_end((ht))(((ht))->n_buckets))
116
117#define PetscHashIterGetKey(ht,i,k)((k) = (((ht))->keys[(i)])) ((k) = kh_key((ht),(i))(((ht))->keys[(i)]))
118
119#define PetscHashIterGetVal(ht,i,v)((v) = (((ht))->vals[(i)])) ((v) = kh_val((ht),(i))(((ht))->vals[(i)]))
120
121#define PetscHashIterSetVal(ht,i,v)((((ht))->vals[(i)]) = (v)) (kh_val((ht),(i))(((ht))->vals[(i)]) = (v))
122
123
124/* --- Thomas Wang integer hash functions --- */
125
126typedef khint32_t PetscHash32_t;
127typedef khint64_t PetscHash64_t;
128typedef khint_t PetscHash_t;
129
130/* Thomas Wang's first version for 32bit integers */
131PETSC_STATIC_INLINEstatic inline PetscHash_t PetscHash_UInt32_v0(PetscHash32_t key)
132{
133 key += ~(key << 15);
134 key ^= (key >> 10);
135 key += (key << 3);
136 key ^= (key >> 6);
137 key += ~(key << 11);
138 key ^= (key >> 16);
139 return key;
140}
141
142/* Thomas Wang's second version for 32bit integers */
143PETSC_STATIC_INLINEstatic inline PetscHash_t PetscHash_UInt32_v1(PetscHash32_t key)
144{
145 key = ~key + (key << 15); /* key = (key << 15) - key - 1; */
146 key = key ^ (key >> 12);
147 key = key + (key << 2);
148 key = key ^ (key >> 4);
149 key = key * 2057; /* key = (key + (key << 3)) + (key << 11); */
150 key = key ^ (key >> 16);
151 return key;
152}
153
154PETSC_STATIC_INLINEstatic inline PetscHash_t PetscHash_UInt32(PetscHash32_t key)
155{
156 return PetscHash_UInt32_v1(key);
44
Calling 'PetscHash_UInt32_v1'
45
Returning from 'PetscHash_UInt32_v1'
157}
158
159/* Thomas Wang's version for 64bit integer -> 32bit hash */
160PETSC_STATIC_INLINEstatic inline PetscHash32_t PetscHash_UInt64_32(PetscHash64_t key)
161{
162 key = ~key + (key << 18); /* key = (key << 18) - key - 1; */
163 key = key ^ (key >> 31);
164 key = key * 21; /* key = (key + (key << 2)) + (key << 4); */
165 key = key ^ (key >> 11);
166 key = key + (key << 6);
167 key = key ^ (key >> 22);
168 return (PetscHash32_t)key;
169}
170
171/* Thomas Wang's version for 64bit integer -> 64bit hash */
172PETSC_STATIC_INLINEstatic inline PetscHash64_t PetscHash_UInt64_64(PetscHash64_t key)
173{
174 key = ~key + (key << 21); /* key = (key << 21) - key - 1; */
175 key = key ^ (key >> 24);
176 key = key * 265; /* key = (key + (key << 3)) + (key << 8); */
177 key = key ^ (key >> 14);
178 key = key * 21; /* key = (key + (key << 2)) + (key << 4); */
179 key = key ^ (key >> 28);
180 key = key + (key << 31);
181 return key;
182}
183
184PETSC_STATIC_INLINEstatic inline PetscHash_t PetscHash_UInt64(PetscHash64_t key)
185{
186 return sizeof(PetscHash_t) < sizeof(PetscHash64_t)
187 ? (PetscHash_t)PetscHash_UInt64_32(key)
188 : (PetscHash_t)PetscHash_UInt64_64(key);
189}
190
191PETSC_STATIC_INLINEstatic inline PetscHash_t PetscHashInt(PetscInt key)
192{
193#if defined(PETSC_USE_64BIT_INDICES)
194 return PetscHash_UInt64((PetscHash64_t)key);
195#else
196 return PetscHash_UInt32((PetscHash32_t)key);
43
Calling 'PetscHash_UInt32'
46
Returning from 'PetscHash_UInt32'
197#endif
198}
199
200PETSC_STATIC_INLINEstatic inline PetscHash_t PetscHashCombine(PetscHash_t seed, PetscHash_t hash)
201{
202 /* https://doi.org/10.1002/asi.10170 */
203 /* https://dl.acm.org/citation.cfm?id=759509 */
204 return seed ^ (hash + (seed << 6) + (seed >> 2));
205}
206
207#define PetscHashEqual(a,b)((a) == (b)) ((a) == (b))
208
209
210#endif /* PETSC_HASHTABLE_H */