feat: somewhat compatible with zelus output
This commit is contained in:
parent
589f89c768
commit
6d92261afd
19 changed files with 107 additions and 515 deletions
|
|
@ -19,6 +19,7 @@ let maxstep = ref None
|
|||
let mintol = ref None
|
||||
let maxtol = ref None
|
||||
let no_print = ref false
|
||||
let zelus = ref false
|
||||
|
||||
let gt0i v i = v := if i <= 0 then 1 else i
|
||||
let gt0f v f = v := if f <= 0.0 then 1.0 else f
|
||||
|
|
@ -44,6 +45,7 @@ let opts = [
|
|||
"-mintol", Arg.String (opt mintol), "\tSet minimum solver tolerance";
|
||||
"-maxtol", Arg.String (opt maxtol), "\tSet maximum solver tolerance";
|
||||
"-no-print", Arg.Set no_print, "\tDo not print output values";
|
||||
"-zelus", Arg.Set zelus, "\tUse the output of the Zélus compiler";
|
||||
]
|
||||
|
||||
let errmsg = "Usage: " ^ Sys.executable_name ^ " [OPTIONS] MODEL\nOptions are:"
|
||||
|
|
@ -53,18 +55,30 @@ let () = try Arg.parse (Arg.align opts) set_model errmsg with _ -> exit 2
|
|||
let args = List.rev !modelargs
|
||||
let () = ignore lift
|
||||
|
||||
let wrap_zelus (HNode m) =
|
||||
let ret = Bigarray.(Array1.create Float64 c_layout 0) in
|
||||
let fout s a y = ignore (m.fout s a y); ret in
|
||||
let step s () = let _, s = m.step s () in ret, s in
|
||||
HNode { m with fout; step }
|
||||
|
||||
let m =
|
||||
try match !model with
|
||||
| None -> Format.eprintf "Missing model\n"; exit 2
|
||||
| Some "ball" -> Ball.init args
|
||||
| Some "vdp" -> Vdp.init args
|
||||
| Some "sincos" -> Sincos.init args
|
||||
| Some "sqrt" -> Sqrt.init args
|
||||
| Some "sin1x" -> Sin1x.init args
|
||||
| Some "sin1xd" -> Sin1x_der.init args
|
||||
| Some "ballz" -> lift Ballz.ball
|
||||
| Some "sincosz" -> lift Sincosz.f
|
||||
| Some s -> Format.eprintf "Unknown model: %s\n" s; exit 2
|
||||
try
|
||||
if !zelus then
|
||||
match !model with
|
||||
| None -> Format.eprintf "Missing model\n"; exit 2
|
||||
| Some "ballz" -> wrap_zelus (lift Ballz.main)
|
||||
| Some "sincosz" -> wrap_zelus (lift Sincosz.f)
|
||||
| Some s -> Format.eprintf "Unknown model: %s\n" s; exit 2
|
||||
else
|
||||
match !model with
|
||||
| None -> Format.eprintf "Missing model\n"; exit 2
|
||||
| Some "ball" -> Ball.init args
|
||||
| Some "vdp" -> Vdp.init args
|
||||
| Some "sincos" -> Sincos.init args
|
||||
| Some "sqrt" -> Sqrt.init args
|
||||
| Some "sin1x" -> Sin1x.init args
|
||||
| Some "sin1xd" -> Sin1x_der.init args
|
||||
| Some s -> Format.eprintf "Unknown model: %s\n" s; exit 2
|
||||
with Invalid_argument s -> Format.eprintf "%s\n" s; exit 2
|
||||
|
||||
let st = if !inplace then (module State.InPlaceSimState : State.SimState)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue