Skip to content

Commit

Permalink
execflags
Browse files Browse the repository at this point in the history
  • Loading branch information
louisponet committed Jul 9, 2019
1 parent 533da20 commit abdd066
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 12 deletions.
25 changes: 19 additions & 6 deletions src/inputAPI.jl
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,26 @@ function setdataoption!(input::DFInput, name::Symbol, option::Symbol; print=true
return input
end

execs(input::DFInput, exec::String) =
filter(x -> occursin(exec, x.exec), input.execs)

execs(input::DFInput, exec::String) = filter(x -> occursin(exec, x.exec), input.execs)
exec(input::DFInput, exec::String) = getfirst(x -> occursin(exec, x.exec), input.execs)
execflags(input::DFInput, exec::String) = [x.flags for x in execs(input, exec)]
setexecflags!(input::DFInput, exec::String, flags...) = setflags!.(execs(input, exec), (flags,)...)
setexecdir!(input::DFInput, exec, dir) = setexecdir!.(execs(input, exec), dir)
rmexecflags!(input::DFInput, exec::String, flags...) = rmflags!.(execs(input, exec), flags...)
exec(input::DFInput, exec::String) =
getfirst(x -> occursin(exec, x.exec), input.execs)

execflags(input::DFInput, exec::String) =
[x.exec => x.flags for x in execs(input, exec)]

function setexecflags!(input::DFInput, exec::String, flags...)
for e in execs(input, exec)
setflags!(e, flags...)
end
end

setexecdir!(input::DFInput, exec, dir) =
setexecdir!.(execs(input, exec), dir)

rmexecflags!(input::DFInput, exec::String, flags...) =
rmflags!.(execs(input, exec), flags...)

runcommand(input::DFInput) = input.execs[1]

Expand Down
8 changes: 6 additions & 2 deletions src/jobAPI.jl
Original file line number Diff line number Diff line change
Expand Up @@ -262,8 +262,12 @@ execs(job::DFJob, name) =
Goes through the calculations of the job and sets the exec flags to the specified ones.
"""
setexecflags!(job::DFJob, exec, flags...) =
setexecflags!.(job.inputs, (exec, flags)...)
function setexecflags!(job::DFJob, exec, flags...)
for i in job.inputs
setexecflags!(i, exec, flags...)
end
end

"""
rmexecflags!(job::DFJob, exec, flags...)
Expand Down
22 changes: 19 additions & 3 deletions src/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -180,12 +180,17 @@ end

isparseable(exec::Exec) = exec.exec parseable_execs()

is_qe_exec(exec::Exec) = exec.exec QE_EXECS
is_wannier_exec(exec::Exec) = exec.exec WAN_EXECS
is_elk_exec(exec::Exec) = exec.exec ELK_EXECS
is_mpi_exec(exec::Exec) = exec.exec == "mpirun"

function inputparser(exec::Exec)
if exec.exec QE_EXECS
if is_qe_exec(exec)
qe_read_input
elseif exec.exec WAN_EXECS
elseif is_wannier_exec(exec)
wan_read_input
elseif exec.exec ELK_EXECS
elseif is_elk_exec(exec)
elk_read_input
end
end
Expand All @@ -195,10 +200,21 @@ function setflags!(exec::Exec, flags...)
flag = isa(f, String) ? getfirst(x -> x.name == f, exec.flags) : getfirst(x -> x.symbol == f, exec.flags)
if flag != nothing
flag.value = convert(flag.typ, val)
else
for (f1, f2) in zip((is_qe_exec, is_wannier_exec, is_mpi_exec), (qeexecflag, wan_execflag, mpi_flag))
if f1(exec)
def_flag = f2(f)
if def_flag != nothing
push!(exec.flags, ExecFlag(def_flag, val))
break
end
end
end
end
end
exec.flags
end

function rmflags!(exec::Exec, flags...)
for f in flags
if isa(f, String)
Expand Down
3 changes: 2 additions & 1 deletion test/job_control_tests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,9 @@ setwanenergies!(job, nscf, fermi-7.0, Epad=3.0)
@test job["wanup"][:dis_froz_max] == 13.2921
@test job["wanup"][:dis_win_max] == 16.292099999999998

setexecflags!(job, "pw.x", :nk => 230)
setexecflags!(job, "pw.x", :nk => 230, :ndiag => 3)
@test DFControl.getfirst(x->x.symbol==:nk, execs(job, "nscf")[2].flags).value == 230
@test DFControl.getfirst(x->x.symbol==:ndiag, execs(job, "nscf")[2].flags).value == 3
rmexecflags!(job, "pw.x", :nk)
@test isempty(filter(x->x.symbol == :nk, execs(job, "nscf")[2].flags))

Expand Down

0 comments on commit abdd066

Please sign in to comment.