File: field_props.cpp

package info (click to toggle)
opm-common 2025.10%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 96,920 kB
  • sloc: cpp: 291,772; python: 3,609; sh: 198; xml: 174; pascal: 136; makefile: 12
file content (63 lines) | stat: -rw-r--r-- 1,963 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <string>

#include <opm/input/eclipse/EclipseState/Grid/FieldPropsManager.hpp>

#include <pybind11/stl.h>

#include "export.hpp"
#include "converters.hpp"

#include <python/cxx/OpmCommonPythonDoc.hpp>

namespace {

    bool contains( const FieldPropsManager& manager, const std::string& kw) {
        if (manager.has_int(kw))
            return true;
        if (manager.has_double(kw))
            return true;

        return false;
    }

    py::array_t<double> get_double_array(const FieldPropsManager& m, const std::string& kw) {
        if (m.has_double(kw))
            return convert::numpy_array( m.get_double(kw) );
        else
            throw std::invalid_argument("Keyword '" + kw + "'is not of type double.");
    }

    py::array_t<int> get_int_array(const FieldPropsManager& m, const std::string& kw) {
        if (m.has_int(kw))
            return convert::numpy_array( m.get_int(kw) );
        else
            throw std::invalid_argument("Keyword '" + kw + "'is not of type int.");
    }


    py::array get_array(const FieldPropsManager& m, const std::string& kw) {
        if (m.has_double(kw))
            return convert::numpy_array(m.get_double(kw));

        if (m.has_int(kw))
            return convert::numpy_array(m.get_int(kw));

        throw std::invalid_argument("No such keyword: " + kw);
    }


}


void python::common::export_FieldProperties(py::module& module) {

    using namespace Opm::Common::DocStrings;

    py::class_< FieldPropsManager >( module, "FieldProperties", FieldProperties_docstring)
    .def( "__contains__", &contains, py::arg("keyword"), FieldProperties_contains_docstring)
    .def("__getitem__", &get_array, py::arg("keyword"), FieldProperties_getitem_docstring)
    .def( "get_double_array",  &get_double_array, py::arg("keyword"), FieldProperties_get_double_array_docstring)
    .def( "get_int_array",  &get_int_array, py::arg("keyword"), FieldProperties_get_int_array_docstring)
    ;

}