diff --git a/Project.toml b/Project.toml index 5ecd8e7..020f25c 100644 --- a/Project.toml +++ b/Project.toml @@ -4,7 +4,6 @@ version = "1.2.0" [deps] LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" Requires = "ae029012-a4dd-5104-9daa-d747884805df" SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" @@ -12,9 +11,9 @@ SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" [compat] ADTypes = "1" ExplicitImports = "1" +LinearAlgebra = "1" OrdinaryDiffEq = "6, 7" OrdinaryDiffEqSDIRK = "1, 2" -ProgressMeter = "1.2" PyCall = "1.90" Requires = "0.5, 1.0" SafeTestsets = "0.1, 1" diff --git a/src/FEniCS.jl b/src/FEniCS.jl index 65d8cd7..48e9eb2 100644 --- a/src/FEniCS.jl +++ b/src/FEniCS.jl @@ -21,9 +21,6 @@ const mshr = PyCall.PyNULL() function __init__() @require PyPlot = "d330b81b-6aea-500a-939a-2ce795aea3ee" include("jplot.jl") - @require ProgressMeter = "92933f4c-e287-5a05-a399-4b506db050ca" begin - using ProgressMeter - end copy!(fenics, pyimport_conda("fenics", "fenics=2019.1.0", "conda-forge")) copy!(ufl, pyimport_conda("ufl", "ufl=2019.1.0", "conda-forge")) include_mshr && copy!(mshr, pyimport_conda("mshr", "mshr=2019.1.0", "conda-forge")) @@ -68,7 +65,7 @@ macro fenicsclass(name::Symbol, base1::Symbol = :fenicsobject) end ) end -export fenicsclass +export @fenicsclass @enum LOGLEVEL begin CRITICAL = 50 diff --git a/src/jfem.jl b/src/jfem.jl index 80ab1e1..619cf14 100644 --- a/src/jfem.jl +++ b/src/jfem.jl @@ -17,7 +17,7 @@ end export FunctionSpace, VectorFunctionSpace @fenicsclass Expression -function Argument(V, number, part::StringOrSymbol = nothing) +function Argument(V, number, part::Union{StringOrSymbol, Nothing} = nothing) return Expression(fenics.Argument(V.pyobject, number, part = part)) end TrialFunction(V::FunctionSpace) = Expression(fenics.TrialFunction(V.pyobject)) diff --git a/src/jsolve.jl b/src/jsolve.jl index a9b1785..691bb26 100644 --- a/src/jsolve.jl +++ b/src/jsolve.jl @@ -142,11 +142,16 @@ TimeSeries(path::StringOrSymbol) = fenics.TimeSeries(path) retrieve(timeseries, placeholder, time) = timeseries.retrieve(placeholder, time) export TimeSeries, retrieve -write(path, solution, time::Number) = path.write(solution.pyobject, time) -write(path, solution::PyObject, time::Number) = path.write(solution, time) - -store(path, solution, time::Number) = path.store(solution.pyobject, time) -store(path, solution::PyObject, time::Number) = path.store(solution, time) +# `write` extends `Base.write`. Typing `solution::fenicsobject` keeps this from +# being type piracy (a FEniCS-owned argument), and typing `path::PyObject` (the +# value returned by `XDMFFile`/`TimeSeries`) keeps it from being ambiguous with +# `Base.write(::IO, ...)` / `write(::AbstractString, ...)`. A raw-`PyObject` +# solution is unused; use `store` (a FEniCS-owned function) for raw vectors such +# as `vector(u)`. +write(path::PyObject, solution::fenicsobject, time::Number) = path.write(solution.pyobject, time) + +store(path::PyObject, solution, time::Number) = path.store(solution.pyobject, time) +store(path::PyObject, solution::PyObject, time::Number) = path.store(solution, time) export write, store diff --git a/test/runtests.jl b/test/runtests.jl index b5c4068..6bb824f 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -5,11 +5,9 @@ run_tests(; # body (core.jl) rather than as independent per-file groups, so it is passed # explicitly instead of being discovered as a folder. core = joinpath(@__DIR__, "core.jl"), - groups = Dict( - "QA" => (; - env = joinpath(@__DIR__, "qa"), - body = joinpath(@__DIR__, "qa", "qa.jl"), - ), + qa = (; + env = joinpath(@__DIR__, "qa"), + body = joinpath(@__DIR__, "qa", "qa.jl"), ), # The original ran only the Core body for the default GROUP="All"; QA ran only # when explicitly selected (it exited early before loading FEniCS).