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. 3# 4# SPDX-License-Identifier: BSD-2-Clause 5# 6# This file is part of CEED: http://github.com/ceed 7 8from _ceed_cffi import ffi, lib 9from abc import ABC 10 11# ------------------------------------------------------------------------------ 12# Ceed Enums 13# ------------------------------------------------------------------------------ 14# CeedMemType 15MEM_HOST = lib.CEED_MEM_HOST 16MEM_DEVICE = lib.CEED_MEM_DEVICE 17mem_types = {MEM_HOST: "host", 18 MEM_DEVICE: "device"} 19 20# CeedScalarType 21SCALAR_FP32 = lib.CEED_SCALAR_FP32 22SCALAR_FP64 = lib.CEED_SCALAR_FP64 23scalar_types = {SCALAR_FP32: "float32", 24 SCALAR_FP64: "float64"} 25# Machine eps corresponding to CeedScalar 26EPSILON = lib.CEED_EPSILON 27 28# CeedCopyMode 29COPY_VALUES = lib.CEED_COPY_VALUES 30USE_POINTER = lib.CEED_USE_POINTER 31OWN_POINTER = lib.CEED_OWN_POINTER 32copy_modes = {COPY_VALUES: "copy values", 33 USE_POINTER: "use pointer", 34 OWN_POINTER: "own pointer"} 35 36# CeedNormType 37NORM_1 = lib.CEED_NORM_1 38NORM_2 = lib.CEED_NORM_2 39NORM_MAX = lib.CEED_NORM_MAX 40norm_types = {NORM_1: "L1 norm", 41 NORM_2: "L2 norm", 42 NORM_MAX: "max norm"} 43 44# CeedTransposeMode 45TRANSPOSE = lib.CEED_TRANSPOSE 46NOTRANSPOSE = lib.CEED_NOTRANSPOSE 47transpose_modes = {TRANSPOSE: "transpose", 48 NOTRANSPOSE: "no transpose"} 49 50# CeedEvalMode 51EVAL_NONE = lib.CEED_EVAL_NONE 52EVAL_INTERP = lib.CEED_EVAL_INTERP 53EVAL_GRAD = lib.CEED_EVAL_GRAD 54EVAL_DIV = lib.CEED_EVAL_DIV 55EVAL_CURL = lib.CEED_EVAL_CURL 56EVAL_WEIGHT = lib.CEED_EVAL_WEIGHT 57eval_modes = {EVAL_NONE: "none", 58 EVAL_INTERP: "interpolation", 59 EVAL_GRAD: "gradient", 60 EVAL_DIV: "divergence", 61 EVAL_CURL: "curl", 62 EVAL_WEIGHT: "quadrature weights"} 63 64# CeedQuadMode 65GAUSS = lib.CEED_GAUSS 66GAUSS_LOBATTO = lib.CEED_GAUSS_LOBATTO 67quad_modes = {GAUSS: "Gauss", 68 GAUSS_LOBATTO: "Gauss Lobatto"} 69 70# CeedElemTopology 71LINE = lib.CEED_TOPOLOGY_LINE 72TRIANGLE = lib.CEED_TOPOLOGY_TRIANGLE 73QUAD = lib.CEED_TOPOLOGY_QUAD 74TET = lib.CEED_TOPOLOGY_TET 75PYRAMID = lib.CEED_TOPOLOGY_PYRAMID 76PRISM = lib.CEED_TOPOLOGY_PRISM 77HEX = lib.CEED_TOPOLOGY_HEX 78elem_topologies = {LINE: "line", 79 TRIANGLE: "triangle", 80 QUAD: "quadrilateral", 81 TET: "tetrahedron", 82 PYRAMID: "pyramid", 83 PRISM: "prism", 84 HEX: "hexahedron"} 85 86# ------------------------------------------------------------------------------ 87# Ceed Constants 88# ------------------------------------------------------------------------------ 89 90# Requests 91REQUEST_IMMEDIATE = lib.CEED_REQUEST_IMMEDIATE 92REQUEST_ORDERED = lib.CEED_REQUEST_ORDERED 93 94# Object shell 95 96 97class _CeedConstantObject(ABC): 98 """Shell for holding constant Vector and Basis constants.""" 99 100 def __init__(self, constant): 101 self._pointer = [constant] 102 103 104# Vectors 105VECTOR_ACTIVE = _CeedConstantObject(lib.CEED_VECTOR_ACTIVE) 106VECTOR_NONE = _CeedConstantObject(lib.CEED_VECTOR_NONE) 107 108# ElemRestriction 109ELEMRESTRICTION_NONE = _CeedConstantObject(lib.CEED_ELEMRESTRICTION_NONE) 110 111# Basis 112BASIS_NONE = _CeedConstantObject(lib.CEED_BASIS_NONE) 113 114# ------------------------------------------------------------------------------ 115