Skip to content

Commit 682567b

Browse files
committed
basis - pull BasisIsCollocated helper to interface level
1 parent 8da1e4a commit 682567b

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

backends/ref/ceed-ref-basis.c

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -286,17 +286,7 @@ int CeedBasisCreateTensorH1_Ref(CeedInt dim, CeedInt P_1d, CeedInt Q_1d, const C
286286

287287
CeedCallBackend(CeedCalloc(1, &impl));
288288
// Check for collocated interp
289-
if (Q_1d == P_1d) {
290-
bool has_collocated = true;
291-
292-
for (CeedInt i = 0; i < P_1d; i++) {
293-
has_collocated = has_collocated && (fabs(interp_1d[i + P_1d * i] - 1.0) < 1e-14);
294-
for (CeedInt j = 0; j < P_1d; j++) {
295-
if (j != i) has_collocated = has_collocated && (fabs(interp_1d[j + P_1d * i]) < 1e-14);
296-
}
297-
}
298-
impl->has_collo_interp = has_collocated;
299-
}
289+
CeedCallBackend(CeedBasisIsCollocated(basis, &impl->has_collo_interp));
300290
// Calculate collocated grad
301291
if (Q_1d >= P_1d && !impl->has_collo_interp) {
302292
CeedCallBackend(CeedMalloc(Q_1d * Q_1d, &impl->collo_grad_1d));

include/ceed/backend.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ CEED_EXTERN const char *const CeedFESpaces[];
331331
CEED_EXTERN int CeedBasisGetCollocatedGrad(CeedBasis basis, CeedScalar *colo_grad_1d);
332332
CEED_EXTERN int CeedBasisGetChebyshevInterp1D(CeedBasis basis, CeedScalar *chebyshev_interp_1d);
333333
CEED_EXTERN int CeedBasisIsTensor(CeedBasis basis, bool *is_tensor);
334+
CEED_EXTERN int CeedBasisIsCollocated(CeedBasis basis, bool *is_collocated);
334335
CEED_EXTERN int CeedBasisGetData(CeedBasis basis, void *data);
335336
CEED_EXTERN int CeedBasisSetData(CeedBasis basis, void *data);
336337
CEED_EXTERN int CeedBasisReference(CeedBasis basis);

interface/ceed-basis.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -780,6 +780,32 @@ int CeedBasisIsTensor(CeedBasis basis, bool *is_tensor) {
780780
return CEED_ERROR_SUCCESS;
781781
}
782782

783+
/**
784+
@brief Determine if given `CeedBasis` has nodes collocated with quadrature points
785+
786+
@param[in] basis `CeedBasis`
787+
@param[out] is_tensor Variable to store collocated status
788+
789+
@return An error code: 0 - success, otherwise - failure
790+
791+
@ref Backend
792+
**/
793+
int CeedBasisIsCollocated(CeedBasis basis, bool *is_collocated) {
794+
if (basis->is_tensor_basis && (basis->Q_1d == basis->P_1d)) {
795+
*is_collocated = true;
796+
797+
for (CeedInt i = 0; i < basis->P_1d; i++) {
798+
*is_collocated = *is_collocated && (fabs(basis->interp_1d[i + basis->P_1d * i] - 1.0) < 10 * CEED_EPSILON);
799+
for (CeedInt j = 0; j < basis->Q_1d; j++) {
800+
if (j != i) *is_collocated = *is_collocated && (fabs(basis->interp_1d[j + basis->P_1d * i]) < 10 * CEED_EPSILON);
801+
}
802+
}
803+
} else {
804+
*is_collocated = false;
805+
}
806+
return CEED_ERROR_SUCCESS;
807+
}
808+
783809
/**
784810
@brief Get backend data of a `CeedBasis`
785811

0 commit comments

Comments
 (0)