Source code for pumapy.utilities.boundary_conditions

from pumapy import Workspace
import numpy as np


[docs]class ConductivityBC: def __init__(self, x, y, z): self.dirichlet = np.full((x, y, z), np.Inf, dtype=float) # self.__neumann = np.full((x, y, z, 3), np.Inf, dtype=float) def __getitem__(self, key): return self.dirichlet[key] def __setitem__(self, key, value): self.dirichlet[key] = value
[docs] @classmethod def from_workspace(cls, workspace): """ Generate ConductivityBC from a Workspace. :param workspace: domain :type workspace: Workspace """ if isinstance(workspace, Workspace): return cls(workspace.len_x(), workspace.len_y(), workspace.len_z()) else: raise Exception("Cannot create ConductivityBC, the input to the from_workspace method has to be a Workspace.")
[docs] def get_shape(self): return self.dirichlet.shape
[docs] def show(self): Workspace.show_matrix(self.dirichlet)
[docs]class Isotropic_symmetricBC: def __init__(self, len_x, len_y, len_z): self.len_x = len_x self.len_y = len_y self.len_z = len_z self.len_xy = self.len_x * self.len_y
[docs] def indexAt_3D(self, i, j, k): if i == -1: i = 0 if i == self.len_x: i = self.len_x - 1 if j == -1: j = 0 if j == self.len_y: j = self.len_y - 1 if k == -1: k = 0 if k == self.len_z: k = self.len_z - 1 return self.len_xy * k + self.len_x * j + i
[docs]class Isotropic_periodicBC: def __init__(self, len_x, len_y, len_z): self.len_x = len_x self.len_y = len_y self.len_z = len_z self.len_xy = self.len_x * self.len_y
[docs] def indexAt_3D(self, i, j, k): if i == -1: i = self.len_x - 1 if i == self.len_x: i = 0 if j == -1: j = self.len_y - 1 if j == self.len_y: j = 0 if k == -1: k = self.len_z - 1 if k == self.len_z: k = 0 return self.len_xy * k + self.len_x * j + i
[docs]class ElasticityBC: def __init__(self, x, y, z): self.dirichlet = np.full((x, y, z, 3), np.Inf, dtype=float) # self.__neumann = np.full((x, y, z, 6), np.Inf, dtype=float) def __getitem__(self, key): return self.dirichlet[key] def __setitem__(self, key, value): self.dirichlet[key] = value
[docs] @classmethod def from_workspace(cls, workspace): """ Generate ElasticityBC from a Workspace. :param workspace: domain :type workspace: Workspace """ if isinstance(workspace, Workspace): return cls(workspace.len_x(), workspace.len_y(), workspace.len_z()) else: raise Exception("Cannot create ElasticityBC, the input to the from_workspace method has to be a Workspace.")
[docs] def get_shape(self): return self.dirichlet.shape
[docs] def show(self): Workspace.show_orientation(self.dirichlet)