mirror of
https://github.com/LCPQ/quantum_package
synced 2024-08-26 14:31:44 +02:00
73 lines
2.1 KiB
OCaml
73 lines
2.1 KiB
OCaml
open Core.Std
|
|
|
|
let filenames =
|
|
let dir_name = Qpackage.root^"/data/basis/"
|
|
in
|
|
Sys.readdir dir_name
|
|
|> Array.map ~f:(fun x -> dir_name^x)
|
|
|> Array.to_list
|
|
;;
|
|
|
|
let clean_file filename =
|
|
let command =
|
|
Printf.sprintf "cp -f %s %s.old" filename filename
|
|
in
|
|
let () =
|
|
match Sys.command command with
|
|
| 0 -> ()
|
|
| i -> failwith (Printf.sprintf "Command %s exited with code %d\n" command i)
|
|
in
|
|
|
|
let lines =
|
|
In_channel.with_file filename ~f:In_channel.input_lines
|
|
in
|
|
|
|
Out_channel.with_file filename ~f:(fun out_channel ->
|
|
|
|
let rec loop ~do_s = function
|
|
| [] -> ()
|
|
| line :: tail ->
|
|
begin
|
|
let buffer = String.strip line
|
|
|> String.split ~on:' '
|
|
|> List.filter ~f:(fun x -> x <> "")
|
|
in
|
|
let () =
|
|
match buffer with
|
|
| [] -> Printf.fprintf out_channel "\n"
|
|
| [ atom ] -> Printf.fprintf out_channel "%s\n" atom
|
|
| [ i ; expo ; coef ] ->
|
|
Printf.fprintf out_channel "%3s %14s %14s\n" i expo coef
|
|
| [ i ; expo ; coef ; coef2 ] ->
|
|
if (do_s) then
|
|
Printf.fprintf out_channel "%3s %14s %14s\n" i expo coef
|
|
else
|
|
Printf.fprintf out_channel "%3s %14s %14s\n" i expo coef2
|
|
| [ sym ; n ] ->
|
|
if (sym = "L") then
|
|
let () =
|
|
Printf.fprintf out_channel "S %3s\n" n
|
|
in
|
|
let rec build_newlist accu = function
|
|
| (0, _)
|
|
| (_,[]) -> List.rev ((Printf.sprintf "P %3s\n" n)::accu)
|
|
| (i,head::tail) ->
|
|
build_newlist (head::accu) ( i-1, tail )
|
|
in
|
|
let newlist = build_newlist [] ((Int.of_string n),tail)
|
|
in
|
|
loop ~do_s:true newlist
|
|
else
|
|
Printf.fprintf out_channel "%s %3s\n" sym n
|
|
| _ -> ()
|
|
in
|
|
loop ~do_s:do_s tail
|
|
end
|
|
in loop ~do_s:false lines
|
|
)
|
|
;;
|
|
|
|
List.iter ~f:clean_file filenames
|
|
;;
|
|
|