xref: /libCEED/python/ceed_constants.py (revision 5d1e906964b04cb5161d672bdc4191311737c811)
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
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