view grid.jl @ 19:af8469bc1cb3

Implement function returning points of grid
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Mon, 17 Dec 2018 15:59:21 +0100
parents c61af27cb67a
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