| 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 --- |