Skip to content

Commit 158f4d8

Browse files
committed
op - add SetNumViewTabs
1 parent d9b02d1 commit 158f4d8

File tree

13 files changed

+205
-149
lines changed

13 files changed

+205
-149
lines changed

include/ceed-impl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ struct CeedOperator_private {
368368
CeedOperatorField *input_fields;
369369
CeedOperatorField *output_fields;
370370
CeedSize input_size, output_size;
371+
CeedInt num_tabs; /* Viewing offset */
371372
CeedInt num_elem; /* Number of elements */
372373
CeedInt num_qpts; /* Number of quadrature points over all elements */
373374
CeedInt num_fields; /* Number of fields that have been set */

include/ceed/backend.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ CEED_EXTERN int CeedOperatorAssemblyDataGetElemRestrictions(CeedOperatorAssembly
446446
CeedElemRestriction **active_elem_rstrs_out);
447447
CEED_EXTERN int CeedOperatorAssemblyDataDestroy(CeedOperatorAssemblyData *data);
448448

449+
CEED_EXTERN int CeedOperatorGetNumViewTabs(CeedOperator op, CeedInt *num_tabs);
449450
CEED_EXTERN int CeedOperatorGetActiveBasis(CeedOperator op, CeedBasis *active_basis);
450451
CEED_EXTERN int CeedOperatorGetActiveBases(CeedOperator op, CeedBasis *active_input_basis, CeedBasis *active_output_basis);
451452
CEED_EXTERN int CeedOperatorGetActiveElemRestriction(CeedOperator op, CeedElemRestriction *active_rstr);

include/ceed/ceed.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,7 @@ CEED_EXTERN int CeedOperatorMultigridLevelCreateH1(CeedOperator op_fine, CeedVe
453453
CEED_EXTERN int CeedOperatorCreateFDMElementInverse(CeedOperator op, CeedOperator *fdm_inv, CeedRequest *request);
454454
CEED_EXTERN int CeedOperatorSetName(CeedOperator op, const char *name);
455455
CEED_EXTERN int CeedOperatorGetName(CeedOperator op, const char **name);
456+
CEED_EXTERN int CeedOperatorSetNumViewTabs(CeedOperator op, CeedInt num_tabs);
456457
CEED_EXTERN int CeedOperatorView(CeedOperator op, FILE *stream);
457458
CEED_EXTERN int CeedOperatorViewTerse(CeedOperator op, FILE *stream);
458459
CEED_EXTERN int CeedOperatorGetCeed(CeedOperator op, Ceed *ceed);

interface/ceed-fortran.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1019,6 +1019,13 @@ CEED_EXTERN void fCeedOperatorSetName(int *op, const char *name, int *err, fortr
10191019
*err = CeedOperatorSetName(op_, name_c);
10201020
}
10211021

1022+
#define fCeedOperatorSetNumViewTabs FORTRAN_NAME(ceedoperatorsetnumviewtabs, CEEDOPERATORSETNUMVIEWTABS)
1023+
CEED_EXTERN void fCeedOperatorSetNumViewTabs(int *op, int *ntabs, int *err) {
1024+
CeedOperator op_ = CeedOperator_dict[*op];
1025+
1026+
*err = CeedOperatorSetNumViewTabs(op_, *ntabs);
1027+
}
1028+
10221029
#define fCeedOperatorLinearAssembleQFunction FORTRAN_NAME(ceedoperatorlinearassembleqfunction, CEEDOPERATORLINEARASSEMBLEQFUNCTION)
10231030
CEED_EXTERN void fCeedOperatorLinearAssembleQFunction(int *op, int *assembledvec, int *assembledrstr, int *rqst, int *err) {
10241031
// Vector

interface/ceed-operator.c

Lines changed: 65 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,16 @@ static int CeedOperatorCheckField(Ceed ceed, CeedQFunctionField qf_field, CeedEl
8787
@param[in] op_field `CeedOperator` Field to view
8888
@param[in] qf_field `CeedQFunction` Field (carries field name)
8989
@param[in] field_number Number of field being viewed
90-
@param[in] sub true indicates sub-operator, which increases indentation; false for top-level operator
90+
@param[in] tabs Tabs to append before each line
9191
@param[in] input true for an input field; false for output field
9292
@param[in] stream Stream to view to, e.g., `stdout`
9393
9494
@return An error code: 0 - success, otherwise - failure
9595
9696
@ref Utility
9797
**/
98-
static int CeedOperatorFieldView(CeedOperatorField op_field, CeedQFunctionField qf_field, CeedInt field_number, bool sub, bool input, FILE *stream) {
99-
const char *pre = sub ? " " : "";
98+
static int CeedOperatorFieldView(CeedOperatorField op_field, CeedQFunctionField qf_field, CeedInt field_number, const char *tabs, bool input,
99+
FILE *stream) {
100100
const char *in_out = input ? "Input" : "Output";
101101
const char *field_name;
102102
CeedInt size;
@@ -112,12 +112,12 @@ static int CeedOperatorFieldView(CeedOperatorField op_field, CeedQFunctionField
112112
"%s %s field %" CeedInt_FMT
113113
":\n"
114114
"%s Name: \"%s\"\n",
115-
pre, in_out, field_number, pre, field_name);
116-
fprintf(stream, "%s Size: %" CeedInt_FMT "\n", pre, size);
117-
fprintf(stream, "%s EvalMode: %s\n", pre, CeedEvalModes[eval_mode]);
118-
if (basis == CEED_BASIS_NONE) fprintf(stream, "%s No basis\n", pre);
119-
if (vec == CEED_VECTOR_ACTIVE) fprintf(stream, "%s Active vector\n", pre);
120-
else if (vec == CEED_VECTOR_NONE) fprintf(stream, "%s No vector\n", pre);
115+
tabs, in_out, field_number, tabs, field_name);
116+
fprintf(stream, "%s Size: %" CeedInt_FMT "\n", tabs, size);
117+
fprintf(stream, "%s EvalMode: %s\n", tabs, CeedEvalModes[eval_mode]);
118+
if (basis == CEED_BASIS_NONE) fprintf(stream, "%s No basis\n", tabs);
119+
if (vec == CEED_VECTOR_ACTIVE) fprintf(stream, "%s Active vector\n", tabs);
120+
else if (vec == CEED_VECTOR_NONE) fprintf(stream, "%s No vector\n", tabs);
121121

122122
CeedCall(CeedVectorDestroy(&vec));
123123
CeedCall(CeedBasisDestroy(&basis));
@@ -128,16 +128,15 @@ static int CeedOperatorFieldView(CeedOperatorField op_field, CeedQFunctionField
128128
@brief View a single `CeedOperator`
129129
130130
@param[in] op `CeedOperator` to view
131-
@param[in] sub Boolean flag for sub-operator
131+
@param[in] tabs Tabs to append before each new line
132132
@param[in] stream Stream to write; typically `stdout` or a file
133133
134134
@return Error code: 0 - success, otherwise - failure
135135
136136
@ref Utility
137137
**/
138-
int CeedOperatorSingleView(CeedOperator op, bool sub, FILE *stream) {
138+
int CeedOperatorSingleView(CeedOperator op, const char *tabs, FILE *stream) {
139139
bool is_at_points;
140-
const char *pre = sub ? " " : "";
141140
CeedInt num_elem, num_qpts, total_fields = 0, num_input_fields, num_output_fields;
142141
CeedQFunction qf;
143142
CeedQFunctionField *qf_input_fields, *qf_output_fields;
@@ -158,23 +157,38 @@ int CeedOperatorSingleView(CeedOperator op, bool sub, FILE *stream) {
158157

159158
CeedCall(CeedOperatorAtPointsGetPoints(op, &rstr_points, NULL));
160159
CeedCall(CeedElemRestrictionGetMaxPointsInElement(rstr_points, &max_points));
161-
fprintf(stream, "%s %" CeedInt_FMT " elements with %" CeedInt_FMT " max points each\n", pre, num_elem, max_points);
160+
fprintf(stream, "%s %" CeedInt_FMT " elements with %" CeedInt_FMT " max points each\n", tabs, num_elem, max_points);
162161
CeedCall(CeedElemRestrictionDestroy(&rstr_points));
163162
} else {
164-
fprintf(stream, "%s %" CeedInt_FMT " elements with %" CeedInt_FMT " quadrature points each\n", pre, num_elem, num_qpts);
163+
fprintf(stream, "%s %" CeedInt_FMT " elements with %" CeedInt_FMT " quadrature points each\n", tabs, num_elem, num_qpts);
165164
}
166-
fprintf(stream, "%s %" CeedInt_FMT " field%s\n", pre, total_fields, total_fields > 1 ? "s" : "");
167-
fprintf(stream, "%s %" CeedInt_FMT " input field%s:\n", pre, num_input_fields, num_input_fields > 1 ? "s" : "");
165+
fprintf(stream, "%s %" CeedInt_FMT " field%s\n", tabs, total_fields, total_fields > 1 ? "s" : "");
166+
fprintf(stream, "%s %" CeedInt_FMT " input field%s:\n", tabs, num_input_fields, num_input_fields > 1 ? "s" : "");
168167
for (CeedInt i = 0; i < num_input_fields; i++) {
169-
CeedCall(CeedOperatorFieldView(op_input_fields[i], qf_input_fields[i], i, sub, 1, stream));
168+
CeedCall(CeedOperatorFieldView(op_input_fields[i], qf_input_fields[i], i, tabs, 1, stream));
170169
}
171-
fprintf(stream, "%s %" CeedInt_FMT " output field%s:\n", pre, num_output_fields, num_output_fields > 1 ? "s" : "");
170+
fprintf(stream, "%s %" CeedInt_FMT " output field%s:\n", tabs, num_output_fields, num_output_fields > 1 ? "s" : "");
172171
for (CeedInt i = 0; i < num_output_fields; i++) {
173-
CeedCall(CeedOperatorFieldView(op_output_fields[i], qf_output_fields[i], i, sub, 0, stream));
172+
CeedCall(CeedOperatorFieldView(op_output_fields[i], qf_output_fields[i], i, tabs, 0, stream));
174173
}
175174
return CEED_ERROR_SUCCESS;
176175
}
177176

177+
/**
178+
@brief SGet the number of tabs to indent for @ref CeedOperatorView() output
179+
180+
@param[in] op `CeedOperator` to get the number of view tabs
181+
@param[out] num_tabs Number of view tabs
182+
183+
@return Error code: 0 - success, otherwise - failure
184+
185+
@ref User
186+
**/
187+
int CeedOperatorGetNumViewTabs(CeedOperator op, CeedInt *num_tabs) {
188+
*num_tabs = op->num_tabs;
189+
return CEED_ERROR_SUCCESS;
190+
}
191+
178192
/**
179193
@brief Find the active input vector `CeedBasis` for a non-composite `CeedOperator`.
180194
@@ -1589,30 +1603,58 @@ int CeedOperatorGetName(CeedOperator op, const char **name) {
15891603
**/
15901604
static int CeedOperatorView_Core(CeedOperator op, FILE *stream, bool is_full) {
15911605
bool has_name, is_composite, is_at_points;
1592-
const char *name = NULL;
1606+
char *tabs = NULL;
1607+
const char *name = NULL;
1608+
CeedInt num_tabs = 0;
15931609

15941610
CeedCall(CeedOperatorGetName(op, &name));
15951611
has_name = name ? strlen(name) : false;
15961612
CeedCall(CeedOperatorIsComposite(op, &is_composite));
15971613
CeedCall(CeedOperatorIsAtPoints(op, &is_at_points));
1614+
// Set tabs
1615+
CeedCall(CeedOperatorGetNumViewTabs(op, &num_tabs));
1616+
CeedCall(CeedCalloc(2 * (num_tabs + is_composite) + 1, &tabs));
1617+
for (CeedInt i = 0; i < 2 * num_tabs; i++) tabs[i] = ' ';
15981618
if (is_composite) {
15991619
CeedInt num_suboperators;
16001620
CeedOperator *sub_operators;
16011621

16021622
CeedCall(CeedOperatorCompositeGetNumSub(op, &num_suboperators));
16031623
CeedCall(CeedOperatorCompositeGetSubList(op, &sub_operators));
1624+
fprintf(stream, tabs);
16041625
fprintf(stream, "Composite CeedOperator%s%s\n", has_name ? " - " : "", has_name ? name : "");
1626+
tabs[2 * num_tabs + 0] = ' ';
1627+
tabs[2 * num_tabs + 1] = ' ';
16051628

16061629
for (CeedInt i = 0; i < num_suboperators; i++) {
16071630
has_name = sub_operators[i]->name;
1608-
fprintf(stream, " SubOperator%s %" CeedInt_FMT "%s%s%s\n", is_at_points ? " AtPoints" : "", i, has_name ? " - " : "",
1631+
fprintf(stream, tabs);
1632+
fprintf(stream, "SubOperator%s %" CeedInt_FMT "%s%s%s\n", is_at_points ? " AtPoints" : "", i, has_name ? " - " : "",
16091633
has_name ? sub_operators[i]->name : "", is_full ? ":" : "");
1610-
if (is_full) CeedCall(CeedOperatorSingleView(sub_operators[i], 1, stream));
1634+
if (is_full) CeedCall(CeedOperatorSingleView(sub_operators[i], tabs, stream));
16111635
}
16121636
} else {
1637+
fprintf(stream, tabs);
16131638
fprintf(stream, "CeedOperator%s%s%s\n", is_at_points ? " AtPoints" : "", has_name ? " - " : "", has_name ? name : "");
1614-
if (is_full) CeedCall(CeedOperatorSingleView(op, 0, stream));
1639+
if (is_full) CeedCall(CeedOperatorSingleView(op, tabs, stream));
16151640
}
1641+
CeedCall(CeedFree(&tabs));
1642+
return CEED_ERROR_SUCCESS;
1643+
}
1644+
1645+
/**
1646+
@brief Set the number of tabs to indent for @ref CeedOperatorView() output
1647+
1648+
@param[in] op `CeedOperator` to set the number of view tabs
1649+
@param[in] num_tabs Number of view tabs to set
1650+
1651+
@return Error code: 0 - success, otherwise - failure
1652+
1653+
@ref User
1654+
**/
1655+
int CeedOperatorSetNumViewTabs(CeedOperator op, CeedInt num_tabs) {
1656+
CeedCheck(num_tabs >= 0, CeedOperatorReturnCeed(op), CEED_ERROR_MINOR, "Number of view tabs must be non-negative");
1657+
op->num_tabs = num_tabs;
16161658
return CEED_ERROR_SUCCESS;
16171659
}
16181660

tests/output/t504-operator-f.out

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,23 @@ CeedOperator - setup
1919
EvalMode: none
2020
No basis
2121
Active vector
22-
CeedOperator - mass
23-
15 elements with 8 quadrature points each
24-
3 fields
25-
2 input fields:
26-
Input field 0:
27-
Name: "rho"
28-
Size: 1
29-
EvalMode: none
30-
No basis
31-
Input field 1:
32-
Name: "u"
33-
Size: 2
34-
EvalMode: interpolation
35-
Active vector
36-
1 output field:
37-
Output field 0:
38-
Name: "v"
39-
Size: 2
40-
EvalMode: interpolation
41-
Active vector
22+
CeedOperator - mass
23+
15 elements with 8 quadrature points each
24+
3 fields
25+
2 input fields:
26+
Input field 0:
27+
Name: "rho"
28+
Size: 1
29+
EvalMode: none
30+
No basis
31+
Input field 1:
32+
Name: "u"
33+
Size: 2
34+
EvalMode: interpolation
35+
Active vector
36+
1 output field:
37+
Output field 0:
38+
Name: "v"
39+
Size: 2
40+
EvalMode: interpolation
41+
Active vector

tests/output/t504-operator.out

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,24 @@ CeedOperator - setup
2020
EvalMode: none
2121
No basis
2222
Active vector
23-
CeedOperator - mass
24-
CeedOperator - mass
25-
15 elements with 8 quadrature points each
26-
3 fields
27-
2 input fields:
28-
Input field 0:
29-
Name: "rho"
30-
Size: 1
31-
EvalMode: none
32-
No basis
33-
Input field 1:
34-
Name: "u"
35-
Size: 2
36-
EvalMode: interpolation
37-
Active vector
38-
1 output field:
39-
Output field 0:
40-
Name: "v"
41-
Size: 2
42-
EvalMode: interpolation
43-
Active vector
23+
CeedOperator - mass
24+
CeedOperator - mass
25+
15 elements with 8 quadrature points each
26+
3 fields
27+
2 input fields:
28+
Input field 0:
29+
Name: "rho"
30+
Size: 1
31+
EvalMode: none
32+
No basis
33+
Input field 1:
34+
Name: "u"
35+
Size: 2
36+
EvalMode: interpolation
37+
Active vector
38+
1 output field:
39+
Output field 0:
40+
Name: "v"
41+
Size: 2
42+
EvalMode: interpolation
43+
Active vector

tests/output/t523-operator-f.out

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -39,44 +39,44 @@ Composite CeedOperator - setup
3939
Size: 1
4040
EvalMode: none
4141
No basis
42-
Composite CeedOperator - mass
43-
SubOperator 0 - triangle elements:
44-
6 elements with 4 quadrature points each
45-
3 fields
46-
2 input fields:
47-
Input field 0:
48-
Name: "rho"
49-
Size: 1
50-
EvalMode: none
51-
No basis
52-
Input field 1:
53-
Name: "u"
54-
Size: 1
55-
EvalMode: interpolation
56-
Active vector
57-
1 output field:
58-
Output field 0:
59-
Name: "v"
60-
Size: 1
61-
EvalMode: interpolation
62-
Active vector
63-
SubOperator 1 - quadrilateral elements:
64-
6 elements with 16 quadrature points each
65-
3 fields
66-
2 input fields:
67-
Input field 0:
68-
Name: "rho"
69-
Size: 1
70-
EvalMode: none
71-
No basis
72-
Input field 1:
73-
Name: "u"
74-
Size: 1
75-
EvalMode: interpolation
76-
Active vector
77-
1 output field:
78-
Output field 0:
79-
Name: "v"
80-
Size: 1
81-
EvalMode: interpolation
82-
Active vector
42+
Composite CeedOperator - mass
43+
SubOperator 0 - triangle elements:
44+
6 elements with 4 quadrature points each
45+
3 fields
46+
2 input fields:
47+
Input field 0:
48+
Name: "rho"
49+
Size: 1
50+
EvalMode: none
51+
No basis
52+
Input field 1:
53+
Name: "u"
54+
Size: 1
55+
EvalMode: interpolation
56+
Active vector
57+
1 output field:
58+
Output field 0:
59+
Name: "v"
60+
Size: 1
61+
EvalMode: interpolation
62+
Active vector
63+
SubOperator 1 - quadrilateral elements:
64+
6 elements with 16 quadrature points each
65+
3 fields
66+
2 input fields:
67+
Input field 0:
68+
Name: "rho"
69+
Size: 1
70+
EvalMode: none
71+
No basis
72+
Input field 1:
73+
Name: "u"
74+
Size: 1
75+
EvalMode: interpolation
76+
Active vector
77+
1 output field:
78+
Output field 0:
79+
Name: "v"
80+
Size: 1
81+
EvalMode: interpolation
82+
Active vector

0 commit comments

Comments
 (0)