Skip to content

Commit 59884f8

Browse files
committed
view - add Ceed*[Get/Set]ViewTabs for all objects
1 parent 4ff0e39 commit 59884f8

File tree

10 files changed

+323
-53
lines changed

10 files changed

+323
-53
lines changed

include/ceed-impl.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ struct Ceed_private {
104104
bool cuda_compile_with_clang;
105105
char **jit_defines;
106106
CeedInt num_jit_defines, max_jit_defines, num_jit_defines_readers;
107+
CeedInt num_tabs; /* Viewing offset */
107108
int (*Error)(Ceed, const char *, int, const char *, int, const char *, va_list *);
108109
int (*SetStream)(Ceed, void *);
109110
int (*GetPreferredMemType)(CeedMemType *);
@@ -160,6 +161,7 @@ struct CeedVector_private {
160161
CeedSize length;
161162
uint64_t state;
162163
uint64_t num_readers;
164+
CeedInt num_tabs; /* Viewing offset */
163165
void *data;
164166
};
165167

@@ -192,6 +194,7 @@ struct CeedElemRestriction_private {
192194
CeedRestrictionType
193195
rstr_type; /* initialized in element restriction constructor for default, oriented, curl-oriented, or strided element restriction */
194196
uint64_t num_readers; /* number of instances of offset read only access */
197+
CeedInt num_tabs; /* Viewing offset */
195198
void *data; /* place for the backend to store any data */
196199
};
197200

@@ -225,6 +228,7 @@ struct CeedBasis_private {
225228
quadrature points for H(curl) discretizations */
226229
CeedVector vec_chebyshev;
227230
CeedBasis basis_chebyshev; /* basis interpolating from nodes to Chebyshev polynomial coefficients */
231+
CeedInt num_tabs; /* Viewing offset */
228232
void *data; /* place for the backend to store any data */
229233
};
230234

@@ -251,6 +255,7 @@ struct CeedQFunction_private {
251255
int (*Destroy)(CeedQFunction);
252256
int ref_count;
253257
CeedInt vec_length; /* Number of quadrature points must be padded to a multiple of vec_length */
258+
CeedInt num_tabs; /* Viewing offset */
254259
CeedQFunctionField *input_fields;
255260
CeedQFunctionField *output_fields;
256261
CeedInt num_input_fields, num_output_fields;
@@ -286,6 +291,7 @@ struct CeedQFunctionContext_private {
286291
CeedMemType data_destroy_mem_type;
287292
CeedInt num_fields;
288293
CeedInt max_fields;
294+
CeedInt num_tabs; /* Viewing offset */
289295
CeedContextFieldLabel *field_labels;
290296
uint64_t state;
291297
uint64_t num_readers;

include/ceed/backend.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@
7474
#define CeedPragmaCritical(x) CeedPragmaOMP(critical(x))
7575
#endif
7676

77+
/// This macro provides the tab width for viewing Ceed objects.
78+
/// @ingroup Ceed
79+
#define CEED_TAB_WIDTH 2
80+
7781
/**
7882
This enum supplies common colors for CeedDebug256 debugging output.
7983
Set the environment variable `CEED_DEBUG = 1` to activate debugging output.
@@ -248,6 +252,7 @@ CEED_EXTERN int CeedGetObjectDelegate(Ceed ceed, Ceed *delegate, const char *obj
248252
CEED_EXTERN int CeedSetObjectDelegate(Ceed ceed, Ceed delegate, const char *obj_name);
249253
CEED_EXTERN int CeedGetOperatorFallbackCeed(Ceed ceed, Ceed *fallback_ceed);
250254
CEED_EXTERN int CeedSetOperatorFallbackCeed(Ceed ceed, Ceed fallback_ceed);
255+
CEED_EXTERN int CeedGetNumViewTabs(Ceed ceed, CeedInt *num_tabs);
251256
CEED_EXTERN int CeedSetDeterministic(Ceed ceed, bool is_deterministic);
252257
CEED_EXTERN int CeedSetBackendFunctionImpl(Ceed ceed, const char *type, void *object, const char *func_name, void (*f)(void));
253258
CEED_EXTERN int CeedGetData(Ceed ceed, void *data);
@@ -264,6 +269,7 @@ CEED_EXTERN int CeedRestoreRustSourceRoots(Ceed ceed, const char ***rust_source_
264269
CEED_EXTERN int CeedGetJitDefines(Ceed ceed, CeedInt *num_defines, const char ***jit_defines);
265270
CEED_EXTERN int CeedRestoreJitDefines(Ceed ceed, const char ***jit_defines);
266271

272+
CEED_EXTERN int CeedVectorGetNumViewTabs(CeedVector vec, CeedInt *num_tabs);
267273
CEED_EXTERN int CeedVectorHasValidArray(CeedVector vec, bool *has_valid_array);
268274
CEED_EXTERN int CeedVectorHasBorrowedArrayOfType(CeedVector vec, CeedMemType mem_type, bool *has_borrowed_array_of_type);
269275
CEED_EXTERN int CeedVectorHasValidArray(CeedVector vec, bool *has_valid_array);
@@ -292,6 +298,7 @@ typedef enum {
292298
} CeedRestrictionType;
293299

294300
CEED_EXTERN int CeedElemRestrictionGetType(CeedElemRestriction rstr, CeedRestrictionType *rstr_type);
301+
CEED_EXTERN int CeedElemRestrictionGetNumViewTabs(CeedElemRestriction rstr, CeedInt *num_tabs);
295302
CEED_EXTERN int CeedElemRestrictionIsStrided(CeedElemRestriction rstr, bool *is_strided);
296303
CEED_EXTERN int CeedElemRestrictionIsAtPoints(CeedElemRestriction rstr, bool *is_points);
297304
CEED_EXTERN int CeedElemRestrictionAtPointsAreCompatible(CeedElemRestriction rstr_a, CeedElemRestriction rstr_b, bool *are_compatible);
@@ -332,6 +339,7 @@ CEED_EXTERN const char *const CeedFESpaces[];
332339

333340
CEED_EXTERN int CeedBasisGetCollocatedGrad(CeedBasis basis, CeedScalar *colo_grad_1d);
334341
CEED_EXTERN int CeedBasisGetChebyshevInterp1D(CeedBasis basis, CeedScalar *chebyshev_interp_1d);
342+
CEED_EXTERN int CeedBasisGetNumViewTabs(CeedBasis basis, CeedInt *num_tabs);
335343
CEED_EXTERN int CeedBasisIsTensor(CeedBasis basis, bool *is_tensor);
336344
CEED_EXTERN int CeedBasisIsCollocated(CeedBasis basis, bool *is_collocated);
337345
CEED_EXTERN int CeedBasisGetData(CeedBasis basis, void *data);
@@ -372,6 +380,7 @@ CEED_EXTERN int CeedQFunctionGetName(CeedQFunction qf, const char **name);
372380
CEED_EXTERN int CeedQFunctionGetSourcePath(CeedQFunction qf, const char **source_path);
373381
CEED_EXTERN int CeedQFunctionLoadSourceToBuffer(CeedQFunction qf, const char **source_buffer);
374382
CEED_EXTERN int CeedQFunctionGetUserFunction(CeedQFunction qf, CeedQFunctionUser *f);
383+
CEED_EXTERN int CeedQFunctionGetNumViewTabs(CeedQFunction qf, CeedInt *num_tabs);
375384
CEED_EXTERN int CeedQFunctionGetContext(CeedQFunction qf, CeedQFunctionContext *ctx);
376385
CEED_EXTERN int CeedQFunctionGetContextData(CeedQFunction qf, CeedMemType mem_type, void *data);
377386
CEED_EXTERN int CeedQFunctionRestoreContextData(CeedQFunction qf, void *data);
@@ -389,6 +398,7 @@ CEED_EXTERN int CeedQFunctionGetFlopsEstimate(CeedQFunction qf, CeedSize *flops)
389398

390399
CEED_EXTERN int CeedQFunctionContextGetCeed(CeedQFunctionContext ctx, Ceed *ceed);
391400
CEED_EXTERN Ceed CeedQFunctionContextReturnCeed(CeedQFunctionContext ctx);
401+
CEED_EXTERN int CeedQFunctionContextGetNumViewTabs(CeedQFunctionContext ctx, CeedInt *num_tabs);
392402
CEED_EXTERN int CeedQFunctionContextHasValidData(CeedQFunctionContext ctx, bool *has_valid_data);
393403
CEED_EXTERN int CeedQFunctionContextHasBorrowedDataOfType(CeedQFunctionContext ctx, CeedMemType mem_type, bool *has_borrowed_data_of_type);
394404
CEED_EXTERN int CeedQFunctionContextGetState(CeedQFunctionContext ctx, uint64_t *state);

include/ceed/ceed.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ CEED_EXTERN int CeedIsDeterministic(Ceed ceed, bool *is_deterministic);
109109
CEED_EXTERN int CeedAddJitSourceRoot(Ceed ceed, const char *jit_source_root);
110110
CEED_EXTERN int CeedAddRustSourceRoot(Ceed ceed, const char *rust_source_root);
111111
CEED_EXTERN int CeedAddJitDefine(Ceed ceed, const char *jit_define);
112+
CEED_EXTERN int CeedSetNumViewTabs(Ceed ceed, CeedInt num_tabs);
112113
CEED_EXTERN int CeedView(Ceed ceed, FILE *stream);
113114
CEED_EXTERN int CeedDestroy(Ceed *ceed);
114115
CEED_EXTERN int CeedErrorImpl(Ceed ceed, const char *filename, int lineno, const char *func, int ecode, const char *format, ...);
@@ -204,6 +205,7 @@ CEED_EXTERN int CeedVectorAXPY(CeedVector y, CeedScalar alpha, CeedVector x);
204205
CEED_EXTERN int CeedVectorAXPBY(CeedVector y, CeedScalar alpha, CeedScalar beta, CeedVector x);
205206
CEED_EXTERN int CeedVectorPointwiseMult(CeedVector w, CeedVector x, CeedVector y);
206207
CEED_EXTERN int CeedVectorReciprocal(CeedVector vec);
208+
CEED_EXTERN int CeedVectorSetNumViewTabs(CeedVector vec, CeedInt num_tabs);
207209
CEED_EXTERN int CeedVectorViewRange(CeedVector vec, CeedSize start, CeedSize stop, CeedInt step, const char *fp_fmt, FILE *stream);
208210
CEED_EXTERN int CeedVectorView(CeedVector vec, const char *fp_fmt, FILE *stream);
209211
CEED_EXTERN int CeedVectorGetCeed(CeedVector vec, Ceed *ceed);
@@ -293,6 +295,7 @@ CEED_EXTERN int CeedElemRestrictionGetNumComponents(CeedElemRestriction rstr, C
293295
CEED_EXTERN int CeedElemRestrictionGetNumBlocks(CeedElemRestriction rstr, CeedInt *num_block);
294296
CEED_EXTERN int CeedElemRestrictionGetBlockSize(CeedElemRestriction rstr, CeedInt *block_size);
295297
CEED_EXTERN int CeedElemRestrictionGetMultiplicity(CeedElemRestriction rstr, CeedVector mult);
298+
CEED_EXTERN int CeedElemRestrictionSetNumViewTabs(CeedElemRestriction rstr, CeedInt num_tabs);
296299
CEED_EXTERN int CeedElemRestrictionView(CeedElemRestriction rstr, FILE *stream);
297300
CEED_EXTERN int CeedElemRestrictionDestroy(CeedElemRestriction *rstr);
298301

@@ -312,6 +315,7 @@ CEED_EXTERN int CeedBasisCreateHcurl(Ceed ceed, CeedElemTopology topo, CeedInt n
312315
const CeedScalar *curl, const CeedScalar *q_ref, const CeedScalar *q_weights, CeedBasis *basis);
313316
CEED_EXTERN int CeedBasisCreateProjection(CeedBasis basis_from, CeedBasis basis_to, CeedBasis *basis_project);
314317
CEED_EXTERN int CeedBasisReferenceCopy(CeedBasis basis, CeedBasis *basis_copy);
318+
CEED_EXTERN int CeedBasisSetNumViewTabs(CeedBasis basis, CeedInt num_tabs);
315319
CEED_EXTERN int CeedBasisView(CeedBasis basis, FILE *stream);
316320
CEED_EXTERN int CeedBasisApply(CeedBasis basis, CeedInt num_elem, CeedTransposeMode t_mode, CeedEvalMode eval_mode, CeedVector u, CeedVector v);
317321
CEED_EXTERN int CeedBasisApplyAdd(CeedBasis basis, CeedInt num_elem, CeedTransposeMode t_mode, CeedEvalMode eval_mode, CeedVector u, CeedVector v);
@@ -368,6 +372,7 @@ CEED_EXTERN int CeedQFunctionGetFields(CeedQFunction qf, CeedInt *num_input_fie
368372
CEED_EXTERN int CeedQFunctionSetContext(CeedQFunction qf, CeedQFunctionContext ctx);
369373
CEED_EXTERN int CeedQFunctionSetContextWritable(CeedQFunction qf, bool is_writable);
370374
CEED_EXTERN int CeedQFunctionSetUserFlopsEstimate(CeedQFunction qf, CeedSize flops);
375+
CEED_EXTERN int CeedQFunctionSetNumViewTabs(CeedQFunction qf, CeedInt num_tabs);
371376
CEED_EXTERN int CeedQFunctionView(CeedQFunction qf, FILE *stream);
372377
CEED_EXTERN int CeedQFunctionGetCeed(CeedQFunction qf, Ceed *ceed);
373378
CEED_EXTERN Ceed CeedQFunctionReturnCeed(CeedQFunction qf);
@@ -406,6 +411,7 @@ CEED_EXTERN int CeedQFunctionContextGetAllFieldLabels(CeedQFunctionContext ctx,
406411
CEED_EXTERN int CeedContextFieldLabelGetDescription(CeedContextFieldLabel label, const char **field_name, size_t *field_offset, size_t *num_values,
407412
const char **field_description, CeedContextFieldType *field_type);
408413
CEED_EXTERN int CeedQFunctionContextGetContextSize(CeedQFunctionContext ctx, size_t *ctx_size);
414+
CEED_EXTERN int CeedQFunctionContextSetNumViewTabs(CeedQFunctionContext ctx, CeedInt num_tabs);
409415
CEED_EXTERN int CeedQFunctionContextView(CeedQFunctionContext ctx, FILE *stream);
410416
CEED_EXTERN int CeedQFunctionContextSetDataDestroy(CeedQFunctionContext ctx, CeedMemType f_mem_type, CeedQFunctionContextDataDestroyUser f);
411417
CEED_EXTERN int CeedQFunctionContextDestroy(CeedQFunctionContext *ctx);

interface/ceed-basis.c

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -153,23 +153,24 @@ static int CeedGivensRotation(CeedScalar *A, CeedScalar c, CeedScalar s, CeedTra
153153
@param[in] m Number of rows in array
154154
@param[in] n Number of columns in array
155155
@param[in] a Array to be viewed
156+
@param[in] tabs Tabs to append before each new line
156157
@param[in] stream Stream to view to, e.g., `stdout`
157158
158159
@return An error code: 0 - success, otherwise - failure
159160
160161
@ref Developer
161162
**/
162-
static int CeedScalarView(const char *name, const char *fp_fmt, CeedInt m, CeedInt n, const CeedScalar *a, FILE *stream) {
163+
static int CeedScalarView(const char *name, const char *fp_fmt, CeedInt m, CeedInt n, const CeedScalar *a, const char *tabs, FILE *stream) {
163164
if (m > 1) {
164-
fprintf(stream, " %s:\n", name);
165+
fprintf(stream, "%s %s:\n", tabs, name);
165166
} else {
166167
char padded_name[12];
167168

168169
snprintf(padded_name, 11, "%s:", name);
169-
fprintf(stream, " %-10s", padded_name);
170+
fprintf(stream, "%s %-10s", tabs, padded_name);
170171
}
171172
for (CeedInt i = 0; i < m; i++) {
172-
if (m > 1) fprintf(stream, " [%" CeedInt_FMT "]", i);
173+
if (m > 1) fprintf(stream, "%s [%" CeedInt_FMT "]", tabs, i);
173174
for (CeedInt j = 0; j < n; j++) fprintf(stream, fp_fmt, fabs(a[i * n + j]) > 1E-14 ? a[i * n + j] : 0);
174175
fputs("\n", stream);
175176
}
@@ -723,6 +724,21 @@ int CeedBasisGetCollocatedGrad(CeedBasis basis, CeedScalar *collo_grad_1d) {
723724
return CEED_ERROR_SUCCESS;
724725
}
725726

727+
/**
728+
@brief Get the number of tabs to indent for @ref CeedBasisView() output
729+
730+
@param[in] basis `CeedBasis` to get the number of view tabs
731+
@param[out] num_tabs Number of view tabs
732+
733+
@return Error code: 0 - success, otherwise - failure
734+
735+
@ref Backend
736+
**/
737+
int CeedBasisGetNumViewTabs(CeedBasis basis, CeedInt *num_tabs) {
738+
*num_tabs = basis->num_tabs;
739+
return CEED_ERROR_SUCCESS;
740+
}
741+
726742
/**
727743
@brief Return 1D interpolation matrix to Chebyshev polynomial coefficients on quadrature space
728744
@@ -1892,6 +1908,22 @@ int CeedBasisReferenceCopy(CeedBasis basis, CeedBasis *basis_copy) {
18921908
return CEED_ERROR_SUCCESS;
18931909
}
18941910

1911+
/**
1912+
@brief Set the number of tabs to indent for @ref CeedBasisView() output
1913+
1914+
@param[in] basis `CeedBasis` to set the number of view tabs
1915+
@param[in] num_tabs Number of view tabs to set
1916+
1917+
@return Error code: 0 - success, otherwise - failure
1918+
1919+
@ref User
1920+
**/
1921+
int CeedBasisSetNumViewTabs(CeedBasis basis, CeedInt num_tabs) {
1922+
CeedCheck(num_tabs >= 0, CeedBasisReturnCeed(basis), CEED_ERROR_MINOR, "Number of view tabs must be non-negative");
1923+
basis->num_tabs = num_tabs;
1924+
return CEED_ERROR_SUCCESS;
1925+
}
1926+
18951927
/**
18961928
@brief View a `CeedBasis`
18971929
@@ -1904,6 +1936,7 @@ int CeedBasisReferenceCopy(CeedBasis basis, CeedBasis *basis_copy) {
19041936
**/
19051937
int CeedBasisView(CeedBasis basis, FILE *stream) {
19061938
bool is_tensor_basis;
1939+
char *tabs = NULL;
19071940
CeedElemTopology topo;
19081941
CeedFESpace fe_space;
19091942

@@ -1912,14 +1945,22 @@ int CeedBasisView(CeedBasis basis, FILE *stream) {
19121945
CeedCall(CeedBasisGetTopology(basis, &topo));
19131946
CeedCall(CeedBasisGetFESpace(basis, &fe_space));
19141947

1948+
{
1949+
CeedInt num_tabs = 0;
1950+
1951+
CeedCall(CeedBasisGetNumViewTabs(basis, &num_tabs));
1952+
CeedCall(CeedCalloc(CEED_TAB_WIDTH * num_tabs + 1, &tabs));
1953+
for (CeedInt i = 0; i < CEED_TAB_WIDTH * num_tabs; i++) tabs[i] = ' ';
1954+
}
1955+
19151956
// Print FE space and element topology of the basis
1916-
fprintf(stream, "CeedBasis in a %s on a %s element\n", CeedFESpaces[fe_space], CeedElemTopologies[topo]);
1957+
fprintf(stream, "%sCeedBasis in a %s on a %s element\n", tabs, CeedFESpaces[fe_space], CeedElemTopologies[topo]);
19171958
if (is_tensor_basis) {
1918-
fprintf(stream, " P: %" CeedInt_FMT "\n Q: %" CeedInt_FMT "\n", basis->P_1d, basis->Q_1d);
1959+
fprintf(stream, "%s P: %" CeedInt_FMT "\n%s Q: %" CeedInt_FMT "\n", tabs, basis->P_1d, tabs, basis->Q_1d);
19191960
} else {
1920-
fprintf(stream, " P: %" CeedInt_FMT "\n Q: %" CeedInt_FMT "\n", basis->P, basis->Q);
1961+
fprintf(stream, "%s P: %" CeedInt_FMT "\n%s Q: %" CeedInt_FMT "\n", tabs, basis->P, tabs, basis->Q);
19211962
}
1922-
fprintf(stream, " dimension: %" CeedInt_FMT "\n field components: %" CeedInt_FMT "\n", basis->dim, basis->num_comp);
1963+
fprintf(stream, "%s dimension: %" CeedInt_FMT "\n%s field components: %" CeedInt_FMT "\n", tabs, basis->dim, tabs, basis->num_comp);
19231964
// Print quadrature data, interpolation/gradient/divergence/curl of the basis
19241965
if (is_tensor_basis) { // tensor basis
19251966
CeedInt P_1d, Q_1d;
@@ -1932,10 +1973,10 @@ int CeedBasisView(CeedBasis basis, FILE *stream) {
19321973
CeedCall(CeedBasisGetInterp1D(basis, &interp_1d));
19331974
CeedCall(CeedBasisGetGrad1D(basis, &grad_1d));
19341975

1935-
CeedCall(CeedScalarView("qref1d", "\t% 12.8f", 1, Q_1d, q_ref_1d, stream));
1936-
CeedCall(CeedScalarView("qweight1d", "\t% 12.8f", 1, Q_1d, q_weight_1d, stream));
1937-
CeedCall(CeedScalarView("interp1d", "\t% 12.8f", Q_1d, P_1d, interp_1d, stream));
1938-
CeedCall(CeedScalarView("grad1d", "\t% 12.8f", Q_1d, P_1d, grad_1d, stream));
1976+
CeedCall(CeedScalarView("qref1d", "\t% 12.8f", 1, Q_1d, q_ref_1d, tabs, stream));
1977+
CeedCall(CeedScalarView("qweight1d", "\t% 12.8f", 1, Q_1d, q_weight_1d, tabs, stream));
1978+
CeedCall(CeedScalarView("interp1d", "\t% 12.8f", Q_1d, P_1d, interp_1d, tabs, stream));
1979+
CeedCall(CeedScalarView("grad1d", "\t% 12.8f", Q_1d, P_1d, grad_1d, tabs, stream));
19391980
} else { // non-tensor basis
19401981
CeedInt P, Q, dim, q_comp;
19411982
const CeedScalar *q_ref, *q_weight, *interp, *grad, *div, *curl;
@@ -1950,23 +1991,24 @@ int CeedBasisView(CeedBasis basis, FILE *stream) {
19501991
CeedCall(CeedBasisGetDiv(basis, &div));
19511992
CeedCall(CeedBasisGetCurl(basis, &curl));
19521993

1953-
CeedCall(CeedScalarView("qref", "\t% 12.8f", 1, Q * dim, q_ref, stream));
1954-
CeedCall(CeedScalarView("qweight", "\t% 12.8f", 1, Q, q_weight, stream));
1994+
CeedCall(CeedScalarView("qref", "\t% 12.8f", 1, Q * dim, q_ref, tabs, stream));
1995+
CeedCall(CeedScalarView("qweight", "\t% 12.8f", 1, Q, q_weight, tabs, stream));
19551996
CeedCall(CeedBasisGetNumQuadratureComponents(basis, CEED_EVAL_INTERP, &q_comp));
1956-
CeedCall(CeedScalarView("interp", "\t% 12.8f", q_comp * Q, P, interp, stream));
1997+
CeedCall(CeedScalarView("interp", "\t% 12.8f", q_comp * Q, P, interp, tabs, stream));
19571998
if (grad) {
19581999
CeedCall(CeedBasisGetNumQuadratureComponents(basis, CEED_EVAL_GRAD, &q_comp));
1959-
CeedCall(CeedScalarView("grad", "\t% 12.8f", q_comp * Q, P, grad, stream));
2000+
CeedCall(CeedScalarView("grad", "\t% 12.8f", q_comp * Q, P, grad, tabs, stream));
19602001
}
19612002
if (div) {
19622003
CeedCall(CeedBasisGetNumQuadratureComponents(basis, CEED_EVAL_DIV, &q_comp));
1963-
CeedCall(CeedScalarView("div", "\t% 12.8f", q_comp * Q, P, div, stream));
2004+
CeedCall(CeedScalarView("div", "\t% 12.8f", q_comp * Q, P, div, tabs, stream));
19642005
}
19652006
if (curl) {
19662007
CeedCall(CeedBasisGetNumQuadratureComponents(basis, CEED_EVAL_CURL, &q_comp));
1967-
CeedCall(CeedScalarView("curl", "\t% 12.8f", q_comp * Q, P, curl, stream));
2008+
CeedCall(CeedScalarView("curl", "\t% 12.8f", q_comp * Q, P, curl, tabs, stream));
19682009
}
19692010
}
2011+
CeedCall(CeedFree(&tabs));
19702012
return CEED_ERROR_SUCCESS;
19712013
}
19722014

0 commit comments

Comments
 (0)