| ceed-operator.c (5da5ab9fd3cba19342bf8c55e0062d74fad46ef3) | ceed-operator.c (0db52efc76395f116dcbcc2ef5af6412f2cc714a) |
|---|---|
| 1// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and other CEED contributors. 2// All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3// 4// SPDX-License-Identifier: BSD-2-Clause 5// 6// This file is part of CEED: http://github.com/ceed 7 8#include <ceed-impl.h> --- 2145 unchanged lines hidden (view full) --- 2154 @ref User 2155**/ 2156int CeedOperatorApply(CeedOperator op, CeedVector in, CeedVector out, CeedRequest *request) { 2157 bool is_composite; 2158 2159 CeedCall(CeedOperatorCheckReady(op)); 2160 2161 CeedCall(CeedOperatorIsComposite(op, &is_composite)); | 1// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and other CEED contributors. 2// All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3// 4// SPDX-License-Identifier: BSD-2-Clause 5// 6// This file is part of CEED: http://github.com/ceed 7 8#include <ceed-impl.h> --- 2145 unchanged lines hidden (view full) --- 2154 @ref User 2155**/ 2156int CeedOperatorApply(CeedOperator op, CeedVector in, CeedVector out, CeedRequest *request) { 2157 bool is_composite; 2158 2159 CeedCall(CeedOperatorCheckReady(op)); 2160 2161 CeedCall(CeedOperatorIsComposite(op, &is_composite)); |
| 2162 if (is_composite) { | 2162 if (is_composite && op->ApplyComposite) { |
| 2163 // Composite Operator | 2163 // Composite Operator |
| 2164 if (op->ApplyComposite) { 2165 CeedCall(op->ApplyComposite(op, in, out, request)); 2166 } else { 2167 CeedInt num_suboperators; 2168 CeedOperator *sub_operators; 2169 2170 CeedCall(CeedCompositeOperatorGetNumSub(op, &num_suboperators)); 2171 CeedCall(CeedCompositeOperatorGetSubList(op, &sub_operators)); 2172 2173 // Zero all output vectors 2174 if (out != CEED_VECTOR_NONE) CeedCall(CeedVectorSetValue(out, 0.0)); 2175 for (CeedInt i = 0; i < num_suboperators; i++) { 2176 CeedInt num_output_fields; 2177 CeedOperatorField *output_fields; 2178 2179 CeedCall(CeedOperatorGetFields(sub_operators[i], NULL, NULL, &num_output_fields, &output_fields)); 2180 for (CeedInt j = 0; j < num_output_fields; j++) { 2181 CeedVector vec; 2182 2183 CeedCall(CeedOperatorFieldGetVector(output_fields[j], &vec)); 2184 if (vec != CEED_VECTOR_ACTIVE && vec != CEED_VECTOR_NONE) { 2185 CeedCall(CeedVectorSetValue(vec, 0.0)); 2186 } 2187 CeedCall(CeedVectorDestroy(&vec)); 2188 } 2189 } 2190 // ApplyAdd 2191 CeedCall(CeedOperatorApplyAdd(op, in, out, request)); 2192 } 2193 } else { | 2164 CeedCall(op->ApplyComposite(op, in, out, request)); 2165 } else if (!is_composite && op->Apply) { |
| 2194 // Standard Operator | 2166 // Standard Operator |
| 2195 if (op->Apply) { 2196 CeedCall(op->Apply(op, in, out, request)); 2197 } else { 2198 CeedInt num_output_fields; 2199 CeedOperatorField *output_fields; | 2167 CeedCall(op->Apply(op, in, out, request)); 2168 } else { 2169 // Standard or composite, default to zeroing out and calling ApplyAddActive 2170 // Zero active output 2171 if (out != CEED_VECTOR_NONE) CeedCall(CeedVectorSetValue(out, 0.0)); |
| 2200 | 2172 |
| 2201 CeedCall(CeedOperatorGetFields(op, NULL, NULL, &num_output_fields, &output_fields)); 2202 // Zero all output vectors 2203 for (CeedInt i = 0; i < num_output_fields; i++) { 2204 bool is_active; 2205 CeedVector vec; 2206 2207 CeedCall(CeedOperatorFieldGetVector(output_fields[i], &vec)); 2208 is_active = vec == CEED_VECTOR_ACTIVE; 2209 if (is_active) vec = out; 2210 if (vec != CEED_VECTOR_NONE) CeedCall(CeedVectorSetValue(vec, 0.0)); 2211 if (!is_active) CeedCall(CeedVectorDestroy(&vec)); 2212 } 2213 // Apply 2214 if (op->num_elem > 0) CeedCall(op->ApplyAdd(op, in, out, request)); 2215 } | 2173 // ApplyAddActive 2174 CeedCall(CeedOperatorApplyAddActive(op, in, out, request)); |
| 2216 } 2217 return CEED_ERROR_SUCCESS; 2218} 2219 2220/** 2221 @brief Apply `CeedOperator` to a `CeedVector` and add result to output `CeedVector`. 2222 2223 This computes the action of the operator on the specified (active) input, yielding its (active) output. --- 222 unchanged lines hidden --- | 2175 } 2176 return CEED_ERROR_SUCCESS; 2177} 2178 2179/** 2180 @brief Apply `CeedOperator` to a `CeedVector` and add result to output `CeedVector`. 2181 2182 This computes the action of the operator on the specified (active) input, yielding its (active) output. --- 222 unchanged lines hidden --- |