ceed-operator.c (c52157525785c51910c8fadbbfd077683f26126a) ceed-operator.c (3ca2b39b4c8169364cc5c152b6838d2c527ff5b3)
1// Copyright (c) 2017-2022, 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>

--- 1455 unchanged lines hidden (view full) ---

1464
1465 @return An error code: 0 - success, otherwise - failure
1466
1467 @ref User
1468**/
1469int CeedOperatorApply(CeedOperator op, CeedVector in, CeedVector out, CeedRequest *request) {
1470 CeedCall(CeedOperatorCheckReady(op));
1471
1// Copyright (c) 2017-2022, 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>

--- 1455 unchanged lines hidden (view full) ---

1464
1465 @return An error code: 0 - success, otherwise - failure
1466
1467 @ref User
1468**/
1469int CeedOperatorApply(CeedOperator op, CeedVector in, CeedVector out, CeedRequest *request) {
1470 CeedCall(CeedOperatorCheckReady(op));
1471
1472 if (op->num_elem) {
1473 // Standard Operator
1474 if (op->Apply) {
1475 CeedCall(op->Apply(op, in, out, request));
1476 } else {
1477 // Zero all output vectors
1478 CeedQFunction qf = op->qf;
1479 for (CeedInt i = 0; i < qf->num_output_fields; i++) {
1480 CeedVector vec = op->output_fields[i]->vec;
1481 if (vec == CEED_VECTOR_ACTIVE) vec = out;
1482 if (vec != CEED_VECTOR_NONE) {
1483 CeedCall(CeedVectorSetValue(vec, 0.0));
1484 }
1485 }
1486 // Apply
1487 CeedCall(op->ApplyAdd(op, in, out, request));
1488 }
1489 } else if (op->is_composite) {
1472 if (op->is_composite) {
1490 // Composite Operator
1491 if (op->ApplyComposite) {
1492 CeedCall(op->ApplyComposite(op, in, out, request));
1493 } else {
1494 CeedInt num_suboperators;
1495 CeedCall(CeedCompositeOperatorGetNumSub(op, &num_suboperators));
1496 CeedOperator *sub_operators;
1497 CeedCall(CeedCompositeOperatorGetSubList(op, &sub_operators));
1498
1499 // Zero all output vectors
1473 // Composite Operator
1474 if (op->ApplyComposite) {
1475 CeedCall(op->ApplyComposite(op, in, out, request));
1476 } else {
1477 CeedInt num_suboperators;
1478 CeedCall(CeedCompositeOperatorGetNumSub(op, &num_suboperators));
1479 CeedOperator *sub_operators;
1480 CeedCall(CeedCompositeOperatorGetSubList(op, &sub_operators));
1481
1482 // Zero all output vectors
1500 if (out != CEED_VECTOR_NONE) {
1501 CeedCall(CeedVectorSetValue(out, 0.0));
1502 }
1483 if (out != CEED_VECTOR_NONE) CeedCall(CeedVectorSetValue(out, 0.0));
1503 for (CeedInt i = 0; i < num_suboperators; i++) {
1504 for (CeedInt j = 0; j < sub_operators[i]->qf->num_output_fields; j++) {
1505 CeedVector vec = sub_operators[i]->output_fields[j]->vec;
1506 if (vec != CEED_VECTOR_ACTIVE && vec != CEED_VECTOR_NONE) {
1507 CeedCall(CeedVectorSetValue(vec, 0.0));
1508 }
1509 }
1510 }
1511 // Apply
1512 for (CeedInt i = 0; i < op->num_suboperators; i++) {
1513 CeedCall(CeedOperatorApplyAdd(op->sub_operators[i], in, out, request));
1514 }
1515 }
1484 for (CeedInt i = 0; i < num_suboperators; i++) {
1485 for (CeedInt j = 0; j < sub_operators[i]->qf->num_output_fields; j++) {
1486 CeedVector vec = sub_operators[i]->output_fields[j]->vec;
1487 if (vec != CEED_VECTOR_ACTIVE && vec != CEED_VECTOR_NONE) {
1488 CeedCall(CeedVectorSetValue(vec, 0.0));
1489 }
1490 }
1491 }
1492 // Apply
1493 for (CeedInt i = 0; i < op->num_suboperators; i++) {
1494 CeedCall(CeedOperatorApplyAdd(op->sub_operators[i], in, out, request));
1495 }
1496 }
1497 } else {
1498 // Standard Operator
1499 if (op->Apply) {
1500 CeedCall(op->Apply(op, in, out, request));
1501 } else {
1502 // Zero all output vectors
1503 CeedQFunction qf = op->qf;
1504 for (CeedInt i = 0; i < qf->num_output_fields; i++) {
1505 CeedVector vec = op->output_fields[i]->vec;
1506 if (vec == CEED_VECTOR_ACTIVE) vec = out;
1507 if (vec != CEED_VECTOR_NONE) CeedCall(CeedVectorSetValue(vec, 0.0));
1508 }
1509 // Apply
1510 if (op->num_elem) CeedCall(op->ApplyAdd(op, in, out, request));
1511 }
1516 }
1517 return CEED_ERROR_SUCCESS;
1518}
1519
1520/**
1521 @brief Apply CeedOperator to a vector and add result to output vector
1522
1523 This computes the action of the operator on the specified (active) input, yielding its (active) output.

--- 6 unchanged lines hidden (view full) ---

1530
1531 @return An error code: 0 - success, otherwise - failure
1532
1533 @ref User
1534**/
1535int CeedOperatorApplyAdd(CeedOperator op, CeedVector in, CeedVector out, CeedRequest *request) {
1536 CeedCall(CeedOperatorCheckReady(op));
1537
1512 }
1513 return CEED_ERROR_SUCCESS;
1514}
1515
1516/**
1517 @brief Apply CeedOperator to a vector and add result to output vector
1518
1519 This computes the action of the operator on the specified (active) input, yielding its (active) output.

--- 6 unchanged lines hidden (view full) ---

1526
1527 @return An error code: 0 - success, otherwise - failure
1528
1529 @ref User
1530**/
1531int CeedOperatorApplyAdd(CeedOperator op, CeedVector in, CeedVector out, CeedRequest *request) {
1532 CeedCall(CeedOperatorCheckReady(op));
1533
1538 if (op->num_elem) {
1539 // Standard Operator
1540 CeedCall(op->ApplyAdd(op, in, out, request));
1541 } else if (op->is_composite) {
1534 if (op->is_composite) {
1542 // Composite Operator
1543 if (op->ApplyAddComposite) {
1544 CeedCall(op->ApplyAddComposite(op, in, out, request));
1545 } else {
1546 CeedInt num_suboperators;
1547 CeedCall(CeedCompositeOperatorGetNumSub(op, &num_suboperators));
1548 CeedOperator *sub_operators;
1549 CeedCall(CeedCompositeOperatorGetSubList(op, &sub_operators));
1550
1551 for (CeedInt i = 0; i < num_suboperators; i++) {
1552 CeedCall(CeedOperatorApplyAdd(sub_operators[i], in, out, request));
1553 }
1554 }
1535 // Composite Operator
1536 if (op->ApplyAddComposite) {
1537 CeedCall(op->ApplyAddComposite(op, in, out, request));
1538 } else {
1539 CeedInt num_suboperators;
1540 CeedCall(CeedCompositeOperatorGetNumSub(op, &num_suboperators));
1541 CeedOperator *sub_operators;
1542 CeedCall(CeedCompositeOperatorGetSubList(op, &sub_operators));
1543
1544 for (CeedInt i = 0; i < num_suboperators; i++) {
1545 CeedCall(CeedOperatorApplyAdd(sub_operators[i], in, out, request));
1546 }
1547 }
1548 } else if (op->num_elem) {
1549 // Standard Operator
1550 CeedCall(op->ApplyAdd(op, in, out, request));
1555 }
1556 return CEED_ERROR_SUCCESS;
1557}
1558
1559/**
1560 @brief Destroy a CeedOperator
1561
1562 @param[in,out] op CeedOperator to destroy

--- 75 unchanged lines hidden ---
1551 }
1552 return CEED_ERROR_SUCCESS;
1553}
1554
1555/**
1556 @brief Destroy a CeedOperator
1557
1558 @param[in,out] op CeedOperator to destroy

--- 75 unchanged lines hidden ---