@@ -75,12 +75,15 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
7575 if (eval_mode == CEED_EVAL_WEIGHT ) { // Skip
7676 data -> fields .inputs [i ] = NULL ;
7777 } else {
78+ bool is_active ;
7879 CeedVector vec ;
7980
8081 // Get input vector
8182 CeedCallBackend (CeedOperatorFieldGetVector (op_input_fields [i ], & vec ));
82- if (vec == CEED_VECTOR_ACTIVE ) vec = input_vec ;
83+ is_active = vec == CEED_VECTOR_ACTIVE ;
84+ if (is_active ) vec = input_vec ;
8385 CeedCallBackend (CeedVectorGetArrayRead (vec , CEED_MEM_DEVICE , & data -> fields .inputs [i ]));
86+ if (!is_active ) CeedCallBackend (CeedVectorDestroy (& vec ));
8487 }
8588 }
8689
@@ -90,14 +93,17 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
9093 if (eval_mode == CEED_EVAL_WEIGHT ) { // Skip
9194 data -> fields .outputs [i ] = NULL ;
9295 } else {
96+ bool is_active ;
9397 CeedVector vec ;
9498
9599 // Get output vector
96100 CeedCallBackend (CeedOperatorFieldGetVector (op_output_fields [i ], & vec ));
97- if (vec == CEED_VECTOR_ACTIVE ) vec = output_vec ;
101+ is_active = vec == CEED_VECTOR_ACTIVE ;
102+ if (is_active ) vec = output_vec ;
98103 output_vecs [i ] = vec ;
99104 // Check for multiple output modes
100105 CeedInt index = -1 ;
106+
101107 for (CeedInt j = 0 ; j < i ; j ++ ) {
102108 if (vec == output_vecs [j ]) {
103109 index = j ;
@@ -109,6 +115,7 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
109115 } else {
110116 data -> fields .outputs [i ] = data -> fields .outputs [index ];
111117 }
118+ if (!is_active ) CeedCallBackend (CeedVectorDestroy (& vec ));
112119 }
113120 }
114121
@@ -191,11 +198,14 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
191198 CeedCallBackend (CeedQFunctionFieldGetEvalMode (qf_input_fields [i ], & eval_mode ));
192199 if (eval_mode == CEED_EVAL_WEIGHT ) { // Skip
193200 } else {
201+ bool is_active ;
194202 CeedVector vec ;
195203
196204 CeedCallBackend (CeedOperatorFieldGetVector (op_input_fields [i ], & vec ));
197- if (vec == CEED_VECTOR_ACTIVE ) vec = input_vec ;
205+ is_active = vec == CEED_VECTOR_ACTIVE ;
206+ if (is_active ) vec = input_vec ;
198207 CeedCallBackend (CeedVectorRestoreArrayRead (vec , & data -> fields .inputs [i ]));
208+ if (!is_active ) CeedCallBackend (CeedVectorDestroy (& vec ));
199209 }
200210 }
201211
@@ -204,10 +214,12 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
204214 CeedCallBackend (CeedQFunctionFieldGetEvalMode (qf_output_fields [i ], & eval_mode ));
205215 if (eval_mode == CEED_EVAL_WEIGHT ) { // Skip
206216 } else {
217+ bool is_active ;
207218 CeedVector vec ;
208219
209220 CeedCallBackend (CeedOperatorFieldGetVector (op_output_fields [i ], & vec ));
210- if (vec == CEED_VECTOR_ACTIVE ) vec = output_vec ;
221+ is_active = vec == CEED_VECTOR_ACTIVE ;
222+ if (is_active ) vec = output_vec ;
211223 // Check for multiple output modes
212224 CeedInt index = -1 ;
213225
@@ -220,6 +232,7 @@ static int CeedOperatorApplyAdd_Hip_gen(CeedOperator op, CeedVector input_vec, C
220232 if (index == -1 ) {
221233 CeedCallBackend (CeedVectorRestoreArray (vec , & data -> fields .outputs [i ]));
222234 }
235+ if (!is_active ) CeedCallBackend (CeedVectorDestroy (& vec ));
223236 }
224237 }
225238
0 commit comments