From db0367b764e22ee95300f92e85d5777040fb1591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Polack?= Date: Fri, 9 Feb 2024 05:58:24 +0100 Subject: [PATCH] need to wrap everything --- src/DFTK.jl | 7 ------- src/common/logging.jl | 14 ++++++-------- src/eigen/diag_lobpcg_hyper.jl | 4 +++- src/scf/self_consistent_field.jl | 8 ++++++-- test/forwarddiff.jl | 17 +++++++++++------ test/printing.jl | 4 ++-- test/runtests_runner.jl | 7 +++++-- 7 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/DFTK.jl b/src/DFTK.jl index b563c9026a..52b64a5f1c 100644 --- a/src/DFTK.jl +++ b/src/DFTK.jl @@ -231,13 +231,6 @@ include("workarounds/dummy_inplace_fft.jl") include("workarounds/forwarddiff_rules.jl") include("workarounds/gpu_arrays.jl") -function __init__() - # We need to wait to have access to stdout. - # But now local to the REPL… - default_logger = DFTKLogger(; io=Base.stdout) - global_logger(default_logger) -end - # Precompilation block with a basic workflow @setup_workload begin # very artificial silicon ground state example diff --git a/src/common/logging.jl b/src/common/logging.jl index a9a252394c..42b3655ea5 100644 --- a/src/common/logging.jl +++ b/src/common/logging.jl @@ -1,18 +1,12 @@ using Logging - -# Removing most of format for `@info` in default logger. -function meta_formatter(level::LogLevel, args...) - color = Logging.default_logcolor(level) - Info == level && return color, "", "" - Logging.default_metafmt(level, args...) -end +#using Preferences # Bypasses everything to ConsoleLogger but Info which just shows message without any # formatting. Base.@kwdef struct DFTKLogger <: AbstractLogger io::IO min_level::LogLevel = Info - fallback = ConsoleLogger(io, min_level; meta_formatter) + fallback = ConsoleLogger(io, min_level) end function Logging.handle_message(logger::DFTKLogger, level, msg, args...; kwargs...) level == Info && return level < logger.min_level ? nothing : println(logger.io, msg) @@ -20,3 +14,7 @@ function Logging.handle_message(logger::DFTKLogger, level, msg, args...; kwargs. end Logging.min_enabled_level(logger::DFTKLogger) = logger.min_level Logging.shouldlog(::DFTKLogger, args...) = true + +# Minimum log level is read from LocalPreferences.toml; defaults to Info. +#min_level = @load_preference("min_log_level"; default="0") +default_logger() = DFTKLogger(; io=stdout) diff --git a/src/eigen/diag_lobpcg_hyper.jl b/src/eigen/diag_lobpcg_hyper.jl index 93992fe13e..3e05b8934c 100644 --- a/src/eigen/diag_lobpcg_hyper.jl +++ b/src/eigen/diag_lobpcg_hyper.jl @@ -6,7 +6,9 @@ function lobpcg_hyper(A, X0; maxiter=100, prec=nothing, prec === nothing && (prec = I) @assert !largest "Only seeking the smallest eigenpairs is implemented." - result = LOBPCG(A, X0, I, prec, tol, maxiter; n_conv_check, kwargs...) + result = with_logger(default_logger()) do + LOBPCG(A, X0, I, prec, tol, maxiter; n_conv_check, kwargs...) + end n_conv_check === nothing && (n_conv_check = size(X0, 2)) converged = maximum(result.residual_norms[1:n_conv_check]) < tol diff --git a/src/scf/self_consistent_field.jl b/src/scf/self_consistent_field.jl index 3575a6f6d8..3abd98ebb3 100644 --- a/src/scf/self_consistent_field.jl +++ b/src/scf/self_consistent_field.jl @@ -199,7 +199,9 @@ Overview of parameters: converged = is_converged(info) converged = MPI.bcast(converged, 0, MPI.COMM_WORLD) # Ensure same converged - callback(merge(info, (; converged))) + with_logger(default_logger()) do + callback(merge(info, (; converged))) + end ρin + T(damping) .* mix_density(mixing, basis, Δρ; info...) end @@ -218,6 +220,8 @@ Overview of parameters: ρ=ρout, α=damping, eigenvalues, occupation, εF, info.n_bands_converge, n_iter, ψ, info.diagonalization, stage=:finalize, history_Δρ, history_Etot, runtime_ns=time_ns() - start_ns, algorithm="SCF") - callback(info) + with_logger(default_logger()) do + callback(info) + end info end diff --git a/test/forwarddiff.jl b/test/forwarddiff.jl index fe0f3268f6..6f4209a9c7 100644 --- a/test/forwarddiff.jl +++ b/test/forwarddiff.jl @@ -3,6 +3,7 @@ using DFTK using ForwardDiff using LinearAlgebra + using Logging silicon = TestCases.silicon function compute_force(ε1, ε2; metal=false, tol=1e-10) @@ -17,7 +18,7 @@ end basis = PlaneWaveBasis(model; Ecut=5, kgrid=[2, 2, 2], kshift=[0, 0, 0]) - response = ResponseOptions(; verbose=true) + response = ResponseOptions(; verbose=DFTK.default_logger().min_level ≤ Info) is_converged = DFTK.ScfConvergenceForce(tol) scfres = self_consistent_field(basis; is_converged, response) compute_forces_cart(scfres) @@ -61,6 +62,7 @@ end using ForwardDiff using LinearAlgebra using ComponentArrays + using Logging aluminium = TestCases.aluminium function compute_band_energies(ε::T) where {T} @@ -76,9 +78,10 @@ end basis = PlaneWaveBasis(model; Ecut=5, kgrid=[2, 2, 2], kshift=[0, 0, 0]) is_converged = DFTK.ScfConvergenceDensity(1e-10) + response = ResponseOptions(; verbose=DFTK.default_logger().min_level ≤ Info) scfres = self_consistent_field(basis; is_converged, mixing=KerkerMixing(), nbandsalg=FixedBands(; n_bands_converge=10), - damping=0.6, response=ResponseOptions(; verbose=true)) + damping=0.6, response) ComponentArray( eigenvalues=stack([ev[1:10] for ev in scfres.eigenvalues]), @@ -103,6 +106,7 @@ end using LinearAlgebra using ComponentArrays using DftFunctionals + using Logging silicon = TestCases.silicon function compute_force(ε1::T) where {T} @@ -115,8 +119,8 @@ end basis = PlaneWaveBasis(model; Ecut=5, kgrid=[2, 2, 2], kshift=[0, 0, 0]) is_converged = DFTK.ScfConvergenceDensity(1e-10) - scfres = self_consistent_field(basis; is_converged, - response=ResponseOptions(; verbose=true)) + response = ResponseOptions(; verbose=DFTK.default_logger().min_level ≤ Info) + scfres = self_consistent_field(basis; is_converged, response) compute_forces_cart(scfres) end @@ -146,6 +150,7 @@ end using DFTK using ForwardDiff using LinearAlgebra + using Logging function compute_force(ε::T) where {T} # solve the 1D Gross-Pitaevskii equation with ElementGaussian potential @@ -160,8 +165,8 @@ end basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1)) ρ = zeros(Float64, basis.fft_size..., 1) is_converged = DFTK.ScfConvergenceDensity(1e-10) - scfres = self_consistent_field(basis; ρ, is_converged, - response=ResponseOptions(; verbose=true)) + response = ResponseOptions(; verbose=DFTK.default_logger().min_level ≤ Info) + scfres = self_consistent_field(basis; ρ, is_converged, response) compute_forces_cart(scfres) end derivative_ε = let ε = 1e-5 diff --git a/test/printing.jl b/test/printing.jl index a96f094522..bb1fd4784a 100644 --- a/test/printing.jl +++ b/test/printing.jl @@ -13,7 +13,7 @@ disable_electrostatics_check=true, modelargs...) basis = PlaneWaveBasis(model; basisargs...) - io = current_logger().min_level > Info ? devnull : stdout + io = DFTK.default_logger().min_level > Info ? devnull : stdout @info model show(io, "text/plain", model) @@ -32,7 +32,7 @@ scfres = self_consistent_field(basis; nbandsalg=FixedBands(; n_bands_converge=6), tol=1e-3) - io = current_logger().min_level > Info ? devnull : stdout + io = DFTK.default_logger().min_level > Info ? devnull : stdout @info scfres.energies show(io, "text/plain", scfres.energies) diff --git a/test/runtests_runner.jl b/test/runtests_runner.jl index 6c16487b4f..08e83a50f9 100644 --- a/test/runtests_runner.jl +++ b/test/runtests_runner.jl @@ -31,8 +31,11 @@ function dftk_testfilter(ti) end using Logging +using DFTK -# Don't print anything below or equal to warning level. -with_logger(ConsoleLogger(stdout, LogLevel(1001))) do +# Don't print anything below warning level. +DFTK.default_logger() = DFTK.DFTKLogger(; io=stdout, min_level=Warn) +#@set_preferences!("min_log_level" => "1001"; export_prefs=false) +with_logger(DFTK.default_logger()) do @run_package_tests filter=dftk_testfilter verbose=true end