Skip to content

xiangzhang1-ustc/gen

Repository files navigation

Workflow automation code for VASP based on Bash. Deprecated by the qchem package.


==Idea==
The script is based on the notion of:
 - modules [ changeable_keyword, nonchangeable_keyword, customized_keyword, othercustomized_keyword ]
 - completeness: in each module, all publevel keywords are compulsorily set by hand, or defaulted to the mandatory value. if something goes unset, you'll definitely know
 - explicit self-consistency: no overwriting is ever allowed. nonchangeable keyword values are fixed, and changeable keyword values cannot be rewritten. if conflicts arrise, you'll definitely now
 - partial logical self-consistency: some logical errors (i.e. isnotmetal+ismetal,hse06+isym=2) is checked
 - portability: through gen.conf.modules,gen.conf.cust,gen.con.othercust,gen.conf.opt_man_modules,gen.conf.kwban,gen.conf.kwnullify, you get to establish, with ease and from scratch/newbie, a module-based command-line quantumchem-input-file-establishing system. Any of them!


==Data structure==
Associative arrays:
modnames[$modname=1/0] #flags   #mod "virtual" collects ckw's and nckw's from cust and othercust. note that module "virtual"'s kw's values are not used at all. only names are used.
$modname_ckw[$kwname=""]        #changeable_keyword                 #are necessary in module, but value changeable, therefore read or overwritten by nckw. still, empty at the start
$modname_nckw[$kwname=$kwval]   #nonchangeable_keyword and value    #are necessary in module, and value fixed (diff wl ckw is confirmation mechanism)
$keywords[$kwname=$kwval]
$nullifiedkw[$kwname=$kwval]    #effective after keyword nullifying takes place

Files: 
gen.conf.modules        =>  module infrastructure (& with cust,othercust...)    =>  $modname:$nckwname=$nckwval,...:$ckwname
gen.conf.cust           =>  customized keywords if modules $ifyes are present   =>  $ifyes:$ifnot:$nckwname=$nckwval,...:$ckwname:1/0   #1 if must, 0 if recommended. 1 comes first!
gen.conf.othercust      =>  script-customized kws if modules $ifyes are present =>  $ifyes:$ifnot:$nckwname:$ckwname[1]:$batchname,...  #$batchname is run if $ifyes !$ifnot
..opt_mand_modules      =>  customizable optional mandatory modules             =>  $sum_act_mod_number1,...:$modname1,...              #active mods summed equals $sum_act_1 or ...
----
[1] for othercust, nckw means 'keywords whose values must be dictated by othercust' and ckw means 'keywords whose values must survive as non-zero but can be changed by anyone'


==Additional feature==
gen.conf.kwban          =>  ban certain value of keywords (or kws) if $ifyes    =>  $ifyes:$ifnot:$kwban_kw=$kwban_kwval:$kwban_kw
gen.conf.kwnullify      =>  nullify certain kw if $ifyes !$ifnot                =>  $ifyes:$ifnot:$kwnullify
gen.conf.check          =>  perform non-complete syntax&semantic check          =>  $ifyes:$ifnot:$batchname,...                        #$batchname is run if $ifyes !$ifnot
gen.conf.postcheck      =>  check after KPOINTS/INCAR/POTCAR writing            =>  $ifyes:$ifnot:$batchname,...                        #$batchname is run if $ifyes !$ifnot

==Usage==
gen [modname] [kwname] [kwval]

==Dependency==
requires makeparam utility in vasp4.X in SCRIPTDIR. makeparam will not work if needed memory > local machine memory.

==Justification==
extreme flexibility requires untyped variables

About

Bash-based VASP input file generation.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages