aboutsummaryrefslogtreecommitdiff
path: root/boltzgen/geometry.py
blob: 193cbe606946f154074c7184bb5948a690c2613a (plain)
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
import re
from utility.ndindex import ndindex

class Geometry:
    def __init__(self, size_x, size_y, size_z = 1):
        self.size_x = size_x
        self.size_y = size_y
        self.size_z = size_z
        self.volume = size_x * size_y * size_z

    @classmethod
    def parse(self, s):
        args = re.search(r'([0-9]+):([0-9]+):?([0-9]+)?', s)
        if args.group(3) == None:
            return self(int(args.group(1)), int(args.group(2)))
        else:
            return self(int(args.group(1)), int(args.group(2)), int(args.group(3)))

    def dimension(self):
        if self.size_x > 1 and self.size_y > 1 and self.size_z == 1:
            return 2
        elif self.size_x > 1 and self.size_y > 1 and self.size_z > 1:
            return 3
        else:
            raise Exception('Geometry malformed')

    def inner_cells(self):
        for idx in numpy.ndindex(self.inner_size()):
            yield tuple(map(lambda i: i + 1, idx))

    def size(self):
        if self.size_z == 1:
            return (self.size_x, self.size_y)
        else:
            return (self.size_x, self.size_y, self.size_z)

    def inner_size(self):
        if self.size_z == 1:
            return (self.size_x-2, self.size_y-2)
        else:
            return (self.size_x-2, self.size_y-2, self.size_z-2)