コード例 #1
0
ファイル: PDE.py プロジェクト: JohannOberleitner/pdesolver
 def __init__(self, gridWidth, gridHeight):
     self.gridWidth = gridWidth
     self.gridHeight = gridHeight
     self.delta = 1.0
     self.rect = Rectangle(0, 0, gridWidth, gridHeight)
     self.geometry = Geometry(self.rect, self.delta)
     self.boundaryCondition = RectangularBoundaryCondition(self.geometry)
     self.auxiliaryFunctions = {}
コード例 #2
0
def solvePDE(geometry, charges, gridConfig):

    g = geometry
    boundaryCondition = RectangularBoundaryCondition(geometry)

    start = time.time()

    fdm = FiniteDifferencesMethod4(g, boundaryCondition, gridConfig, charges)
    fdm.solve()

    resulting_matrix = fdm.values

    duration = time.time() - start
    print('Total duration for solving the PDE lasted {0} sec'.format(duration))

    return resulting_matrix
コード例 #3
0
def calcSolutions(inputDataSet):

    delta = 1.0
    rect = Rectangle(0, 0, inputDataSet.geometry.gridWidth,
                     inputDataSet.geometry.gridHeight)
    g = Geometry(rect, delta)
    boundaryCondition = RectangularBoundaryCondition(g)
    charges = load_chargedistribution(g, inputDataSet)

    index = 1

    resultsSet = ResultsSet(label=inputDataSet.label)

    start = time.time()

    for dataElement in inputDataset:
        eps = generate_permittivity_function(
            dataElement.get_permittivity_matrix())
        gridConfig = make_finite_differences_poisson_equation_in_matter(eps)

        #fdm3 = FiniteDifferencesMethod3(g, boundaryCondition, gridConfig, charges)
        #fdm3.solve()
        #fdm3.calcMetrices()

        fdm = FiniteDifferencesMethod4(g, boundaryCondition, gridConfig,
                                       charges)
        fdm.solve()
        #fdm.calcMetrices()

        #compareVectors(fdm3.bias, fdm.bias)
        #compareMatrices(fdm3.matrix, fdm.matrix.todense())

        #resultsSet.add(fdm.results)
        resultsSet.add(fdm.values)

        #s = json.dumps(fdm.results.tolist())
        #print(s)

        #s = generate_text_presentation(index, dataElement, fdm.values, fdm.error)
        index = index + 1

    duration = time.time() - start
    print('Total duration for solving {0} PDEs lasted :{1}'.format(
        inputDataset.count(), duration))

    return resultsSet
コード例 #4
0
def solvePDE(geometry, charges):

    #g = Geometry(rect, delta)
    g = geometry
    boundaryCondition = RectangularBoundaryCondition(geometry)

    index = 1

    start = time.time()

    gridConfig = create_finite_differences_configuration()

    fdm = FiniteDifferencesMethod4(g, boundaryCondition, gridConfig, charges)
    fdm.solve()

    resulting_matrix = fdm.values

    index = index + 1

    duration = time.time() - start
    #print('Total duration for solving {0} PDEs lasted :{1}'.format(inputDataset.count(), duration))

    return resulting_matrix
コード例 #5
0
        self.error_axes.set_title('Errors', fontsize=9)
        self.colorbar = fig.colorbar(im, ax=self.error_axes)


if __name__ == '__main__':

    np.set_printoptions(threshold=np.nan)

    count = 60
    index = 0

    # setup for finite differences
    delta = 1.0
    rect = Rectangle(0, 0, 64.0, 64.0)
    g = Geometry(rect, delta)
    boundaryCondition = RectangularBoundaryCondition(g)
    charges = make_charges_in_line(g, 11, -10.0, 16.0, 20.0, 48.0, 20.0)
    #charges = make_charges_in_line(g, 32, -10.0, 16.0, 20.0, 48.0, 20.0)

    # setup for plot
    fig = plt.figure()

    permittivity_data = load_test_set(count)
    permittivity_title = 'eps = {0}'.format(
        permittivity_data[0]['permittivities'][index])
    permittivity_axes = fig.add_subplot(1, 3, 1)
    surface_axes = fig.add_subplot(1, 3, 2, projection='3d')
    error_axes = fig.add_subplot(1, 3, 3)

    def generate_finite_differences_solver(index):