Lines Matching +full:- +full:v
1 // Copyright (c) 2017-2026, Lawrence Livermore National Security, LLC and other CEED contributors.
2 // All Rights Reserved. See the top-level LICENSE and NOTICE files for details.
4 // SPDX-License-Identifier: BSD-2-Clause
14 #include "ceed-ref.h"
16 //------------------------------------------------------------------------------
18 //------------------------------------------------------------------------------
20 CeedVector V) { in CeedBasisApplyCore_Ref() argument
24 CeedScalar *v; in CeedBasisApplyCore_Ref() local
37 // Clear v if operating in transpose in CeedBasisApplyCore_Ref()
38 if (apply_add) CeedCallBackend(CeedVectorGetArray(V, CEED_MEM_HOST, &v)); in CeedBasisApplyCore_Ref()
39 else CeedCallBackend(CeedVectorGetArrayWrite(V, CEED_MEM_HOST, &v)); in CeedBasisApplyCore_Ref()
44 CeedCallBackend(CeedVectorGetLength(V, &len)); in CeedBasisApplyCore_Ref()
45 for (CeedInt i = 0; i < len; i++) v[i] = 0.0; in CeedBasisApplyCore_Ref()
58 if (impl->is_collocated) { in CeedBasisApplyCore_Ref()
59 memcpy(v, u, num_elem * num_comp * num_nodes * sizeof(u[0])); in CeedBasisApplyCore_Ref()
67 CeedInt pre = num_comp * CeedIntPow(P, dim - 1), post = num_elem; in CeedBasisApplyCore_Ref()
68 CeedScalar tmp[2][num_elem * num_comp * Q * CeedIntPow(P > Q ? P : Q, dim - 1)]; in CeedBasisApplyCore_Ref()
73 …ontractApply(contract, pre, P, post, Q, interp_1d, t_mode, add && (d == dim - 1), d == 0 ? u : tmp… in CeedBasisApplyCore_Ref()
74 d == dim - 1 ? v : tmp[(d + 1) % 2])); in CeedBasisApplyCore_Ref()
83 // u has shape [dim, num_comp, P^dim, num_elem], row-major layout in CeedBasisApplyCore_Ref()
84 // v has shape [dim, num_comp, Q^dim, num_elem], row-major layout in CeedBasisApplyCore_Ref()
85 // In CEED_TRANSPOSE mode, the sizes of u and v are switched. in CeedBasisApplyCore_Ref()
92 CeedInt pre = num_comp * CeedIntPow(P, dim - 1), post = num_elem; in CeedBasisApplyCore_Ref()
96 if (impl->collo_grad_1d) { in CeedBasisApplyCore_Ref()
97 CeedScalar tmp[2][num_elem * num_comp * Q * CeedIntPow(P > Q ? P : Q, dim - 1)]; in CeedBasisApplyCore_Ref()
98 CeedScalar interp[num_elem * num_comp * Q * CeedIntPow(P > Q ? P : Q, dim - 1)]; in CeedBasisApplyCore_Ref()
103 …ly(contract, pre, P, post, Q, (t_mode == CEED_NOTRANSPOSE ? interp_1d : impl->collo_grad_1d), t_mo… in CeedBasisApplyCore_Ref()
106 … (t_mode == CEED_NOTRANSPOSE ? (d == dim - 1 ? interp : tmp[(d + 1) % 2]) : interp))); in CeedBasisApplyCore_Ref()
117 pre = num_comp * CeedIntPow(P, dim - 1), post = num_elem; in CeedBasisApplyCore_Ref()
119 …rContractApply(contract, pre, P, post, Q, (t_mode == CEED_NOTRANSPOSE ? impl->collo_grad_1d : inte… in CeedBasisApplyCore_Ref()
120 … (t_mode == CEED_NOTRANSPOSE && apply_add) || (t_mode == CEED_TRANSPOSE && (d == dim - 1)), in CeedBasisApplyCore_Ref()
122 … (t_mode == CEED_NOTRANSPOSE ? &v[d * num_qpts * num_comp * num_elem] in CeedBasisApplyCore_Ref()
123 … : (d == dim - 1 ? v : tmp[(d + 1) % 2])))); in CeedBasisApplyCore_Ref()
127 } else if (impl->is_collocated) { // Qpts collocated with nodes in CeedBasisApplyCore_Ref()
133 CeedInt pre = num_comp * CeedIntPow(P, dim - 1), post = num_elem; in CeedBasisApplyCore_Ref()
138 … t_mode == CEED_TRANSPOSE ? v : &v[d * num_comp * num_qpts * num_elem])); in CeedBasisApplyCore_Ref()
151 CeedScalar tmp[2][num_elem * num_comp * Q * CeedIntPow(P > Q ? P : Q, dim - 1)]; in CeedBasisApplyCore_Ref()
155 CeedInt pre = num_comp * CeedIntPow(P, dim - 1), post = num_elem; in CeedBasisApplyCore_Ref()
159 … contract, pre, P, post, Q, (p == d) ? grad_1d : interp_1d, t_mode, add && (d == dim - 1), in CeedBasisApplyCore_Ref()
161 …(d == dim - 1 ? (t_mode == CEED_TRANSPOSE ? v : &v[p * num_comp * num_qpts * num_elem]) : tmp[(d +… in CeedBasisApplyCore_Ref()
176 CeedInt pre = CeedIntPow(Q, dim - d - 1), post = CeedIntPow(Q, d); in CeedBasisApplyCore_Ref()
181 … const CeedScalar w = q_weight_1d[j] * (d == 0 ? 1 : v[((i * Q + j) * post + k) * num_elem]); in CeedBasisApplyCore_Ref()
183 … for (CeedInt e = 0; e < num_elem; e++) v[((i * Q + j) * post + k) * num_elem + e] = w; in CeedBasisApplyCore_Ref()
198 // Non-tensor basis in CeedBasisApplyCore_Ref()
207 …TensorContractStridedApply(contract, num_comp, P, num_elem, q_comp, Q, interp, t_mode, add, u, v)); in CeedBasisApplyCore_Ref()
214 …edTensorContractStridedApply(contract, num_comp, P, num_elem, q_comp, Q, grad, t_mode, add, u, v)); in CeedBasisApplyCore_Ref()
221 …eedTensorContractStridedApply(contract, num_comp, P, num_elem, q_comp, Q, div, t_mode, add, u, v)); in CeedBasisApplyCore_Ref()
228 …edTensorContractStridedApply(contract, num_comp, P, num_elem, q_comp, Q, curl, t_mode, add, u, v)); in CeedBasisApplyCore_Ref()
237 for (CeedInt e = 0; e < num_elem; e++) v[i * num_elem + e] = q_weight[i]; in CeedBasisApplyCore_Ref()
249 CeedCallBackend(CeedVectorRestoreArray(V, &v)); in CeedBasisApplyCore_Ref()
253 …, CeedInt num_elem, CeedTransposeMode t_mode, CeedEvalMode eval_mode, CeedVector U, CeedVector V) { in CeedBasisApply_Ref() argument
254 CeedCallBackend(CeedBasisApplyCore_Ref(basis, false, num_elem, t_mode, eval_mode, U, V)); in CeedBasisApply_Ref()
258 …, CeedInt num_elem, CeedTransposeMode t_mode, CeedEvalMode eval_mode, CeedVector U, CeedVector V) { in CeedBasisApplyAdd_Ref() argument
259 CeedCallBackend(CeedBasisApplyCore_Ref(basis, true, num_elem, t_mode, eval_mode, U, V)); in CeedBasisApplyAdd_Ref()
263 //------------------------------------------------------------------------------
265 //------------------------------------------------------------------------------
270 CeedCallBackend(CeedFree(&impl->collo_grad_1d)); in CeedBasisDestroyTensor_Ref()
275 //------------------------------------------------------------------------------
277 //------------------------------------------------------------------------------
289 CeedCallBackend(CeedBasisIsCollocated(basis, &impl->is_collocated)); in CeedBasisCreateTensorH1_Ref()
290 if (Q_1d >= P_1d && !impl->is_collocated) { in CeedBasisCreateTensorH1_Ref()
291 CeedCallBackend(CeedMalloc(Q_1d * Q_1d, &impl->collo_grad_1d)); in CeedBasisCreateTensorH1_Ref()
292 CeedCallBackend(CeedBasisGetCollocatedGrad(basis, impl->collo_grad_1d)); in CeedBasisCreateTensorH1_Ref()
308 //------------------------------------------------------------------------------
309 // Basis Create Non-Tensor H^1
310 //------------------------------------------------------------------------------
330 //------------------------------------------------------------------------------
331 // Basis Create Non-Tensor H(div)
332 //------------------------------------------------------------------------------
352 //------------------------------------------------------------------------------
353 // Basis Create Non-Tensor H(curl)
354 //------------------------------------------------------------------------------
374 //------------------------------------------------------------------------------