ceed-basis.c (c8c3fa7d27bffffddcff68a8a1d51314e0358a98) ceed-basis.c (2a94f45ff9d2d09cbb4b4147472cdaa7b63ced87)
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>

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

1563 }
1564 }
1565 }
1566 CeedCall(CeedVectorRestoreArrayRead(basis->vec_chebyshev, &chebyshev_coeffs));
1567 CeedCall(CeedVectorRestoreArrayRead(x_ref, &x_array_read));
1568 CeedCall(CeedVectorRestoreArray(v, &v_array));
1569 break;
1570 }
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>

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

1563 }
1564 }
1565 }
1566 CeedCall(CeedVectorRestoreArrayRead(basis->vec_chebyshev, &chebyshev_coeffs));
1567 CeedCall(CeedVectorRestoreArrayRead(x_ref, &x_array_read));
1568 CeedCall(CeedVectorRestoreArray(v, &v_array));
1569 break;
1570 }
1571 case CEED_TRANSPOSE:
1572 return CeedError(basis->ceed, CEED_ERROR_UNSUPPORTED, "CEED_TRANSPOSE unsupported for arbitrary basis point evaluation");
1571 case CEED_TRANSPOSE: {
1572 // Arbitrary points to nodes
1573 CeedScalar *chebyshev_coeffs;
1574 const CeedScalar *u_array, *x_array_read;
1575
1576 // -- Transpose of evaluaton of Chebyshev polynomials at arbitrary points
1577 CeedCall(CeedVectorGetArrayWrite(basis->vec_chebyshev, CEED_MEM_HOST, &chebyshev_coeffs));
1578 CeedCall(CeedVectorGetArrayRead(x_ref, CEED_MEM_HOST, &x_array_read));
1579 CeedCall(CeedVectorGetArrayRead(u, CEED_MEM_HOST, &u_array));
1580 {
1581 CeedScalar tmp[2][num_comp * CeedIntPow(Q_1d, dim)], chebyshev_x[Q_1d];
1582
1583 // ---- Values at point
1584 for (CeedInt p = 0; p < num_points; p++) {
1585 CeedInt pre = num_comp * 1, post = 1;
1586
1587 for (CeedInt d = dim - 1; d >= 0; d--) {
1588 // ------ Compute Chebyshev polynomial values
1589 {
1590 const CeedScalar x = x_array_read[p * dim + d];
1591
1592 chebyshev_x[0] = 1.0;
1593 chebyshev_x[1] = 2 * x;
1594 for (CeedInt j = 2; j < Q_1d; j++) chebyshev_x[j] = 2 * x * chebyshev_x[j - 1] - chebyshev_x[j - 2];
1595 }
1596 // ------ Tensor contract
1597 CeedCall(CeedTensorContractApply(basis->contract, pre, 1, post, Q_1d, chebyshev_x, t_mode, p > 0 && d == 0,
1598 d == (dim - 1) ? &u_array[p * num_comp] : tmp[d % 2], d == 0 ? chebyshev_coeffs : tmp[(d + 1) % 2]));
1599 pre /= 1;
1600 post *= Q_1d;
1601 }
1602 }
1603 }
1604 CeedCall(CeedVectorRestoreArray(basis->vec_chebyshev, &chebyshev_coeffs));
1605 CeedCall(CeedVectorRestoreArrayRead(x_ref, &x_array_read));
1606 CeedCall(CeedVectorRestoreArrayRead(u, &u_array));
1607
1608 // -- Interpolate transpose from Chebyshev coefficients
1609 CeedCall(CeedBasisApply(basis->basis_chebyshev, 1, CEED_TRANSPOSE, CEED_EVAL_INTERP, basis->vec_chebyshev, v));
1610 break;
1611 }
1573 }
1574
1575 return CEED_ERROR_SUCCESS;
1576}
1577
1578/**
1579 @brief Get Ceed associated with a CeedBasis
1580

--- 432 unchanged lines hidden ---
1612 }
1613
1614 return CEED_ERROR_SUCCESS;
1615}
1616
1617/**
1618 @brief Get Ceed associated with a CeedBasis
1619

--- 432 unchanged lines hidden ---