view grid.jl @ 26:d2896e70cd4f

Merge with default
author Ylva Rydin <ylva.rydin@telia.com>
date Mon, 17 Dec 2018 16:35:08 +0100
parents af8469bc1cb3
children 2dbdd00eaea0 aff8ea85ca70
line wrap: on
line source

module grid

abstract type Grid end

function numberOfDimensions(grid::Grid)
    error("Not yet implemented")
end

function numberOfPoints(grid::Grid)
    error("Not yet implemented")
end

function points(grid::Grid)
    error("Not yet implemented")
end

abstract type BoundaryId end

# Move to seperate file.
struct EquidistantGrid <: Grid
    nPointsPerDim::Vector{Int}
    limits::Vector{Pair{Real, Real}}
    function EquidistantGrid(nPointsPerDim, lims)
        @assert length(lims) == length(nPointsPerDim)
        return new(nPointsPerDim, lims)
    end
end

function numberOfDimensions(grid::EquidistantGrid)
    return length(grid.nPointsPerDim)
end

function numberOfPoints(grid::EquidistantGrid)
    numberOfPoints = grid.nPointsPerDim[1];
    for i = 2:length(grid.nPointsPerDim);
        numberOfPoints = numberOfPoints*grid.nPointsPerDim[i]
    end
    return numberOfPoints
end

function points(grid::EquidistantGrid)
    points = Vector{Real}(undef, numberOfPoints(grid))
    for i = 1:numberOfDimensions(grid)
        lims = limitsForDimension(grid,i)
        points = range(lims.first, stop=lims.second, length=grid.nPointsPerDim[i])
    end
    return points
end

function limitsForDimension(grid::EquidistantGrid, dim::Int)
    return grid.limits[dim]
end

end