From a39d361c28ba8ac2715c173399562e314850b2a1 Mon Sep 17 00:00:00 2001 From: Jaron Krogel Date: Thu, 21 Jun 2018 08:14:34 -0400 Subject: [PATCH 1/7] nexus: add initial gamess examples --- nexus/examples/gamess/H2O/h2o_pp_casscf.py | 91 +++++++++ nexus/examples/gamess/H2O/h2o_pp_cisd.py | 91 +++++++++ nexus/examples/gamess/H2O/h2o_pp_hf.py | 55 +++++ .../H2O/pseudopotentials/H.BFD_V5Z_ANO.gms | 68 +++++++ .../gamess/H2O/pseudopotentials/O.BFD_V5Z.gms | 65 ++++++ nexus/executables/ntest | 32 ++- nexus/library/gamess_input.py | 37 ++-- nexus/library/physical_system.py | 42 ++-- nexus/library/structure.py | 190 ++++++++++++++---- .../gamess/H2O/runs/pp_casscf/cas.inp | 144 +++++++++++++ .../gamess/H2O/runs/pp_casscf/rhf.inp | 142 +++++++++++++ .../gamess/H2O/runs/pp_cisd/cisd.inp | 144 +++++++++++++ .../gamess/H2O/runs/pp_cisd/rhf.inp | 142 +++++++++++++ .../gamess/H2O/runs/pp_hf/rhf.inp | 142 +++++++++++++ 14 files changed, 1313 insertions(+), 72 deletions(-) create mode 100755 nexus/examples/gamess/H2O/h2o_pp_casscf.py create mode 100755 nexus/examples/gamess/H2O/h2o_pp_cisd.py create mode 100755 nexus/examples/gamess/H2O/h2o_pp_hf.py create mode 100644 nexus/examples/gamess/H2O/pseudopotentials/H.BFD_V5Z_ANO.gms create mode 100644 nexus/examples/gamess/H2O/pseudopotentials/O.BFD_V5Z.gms create mode 100644 nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/cas.inp create mode 100644 nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/rhf.inp create mode 100644 nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/cisd.inp create mode 100644 nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/rhf.inp create mode 100644 nexus/tests/reference/user_examples/gamess/H2O/runs/pp_hf/rhf.inp diff --git a/nexus/examples/gamess/H2O/h2o_pp_casscf.py b/nexus/examples/gamess/H2O/h2o_pp_casscf.py new file mode 100755 index 000000000..495526f45 --- /dev/null +++ b/nexus/examples/gamess/H2O/h2o_pp_casscf.py @@ -0,0 +1,91 @@ +#! /usr/bin/env python + +from nexus import settings,job,run_project,obj +from nexus import generate_physical_system +from nexus import generate_gamess + +settings( + pseudo_dir = './pseudopotentials', + results = '', + status_only = 0, + generate_only = 0, + sleep = 3, + machine = 'ws16', + ericfmt = '/your/path/to/ericfmt.dat' + ) + +gms_job = job(cores=16,app='gamess.x') + +h2o = generate_physical_system( + # full atomic/electronic structure + elem = ['O','H','H'], + pos = [[0.000000, 0.000000, 0.000000], + [0.000000,-0.757160, 0.586260], + [0.000000, 0.757160, 0.586260]], + units = 'A', # Angstroms + net_spin = 0, # multiplicity=1, nup-ndown=0 + O = 6, # Zeff=6 for BFD ECP + H = 1, # Zeff=1 for BFD ECP + # C2v symmetry structure + folded_elem = ['O','H'], + folded_pos = [[0.000000, 0.000000, 0.000000], + [0.000000, 0.757160, 0.586260]], + ) + +sims = [] + +rhf = generate_gamess( + identifier = 'rhf', + path = 'pp_casscf', + job = gms_job, + system = h2o, + pseudos = ['O.BFD_V5Z.gms','H.BFD_V5Z_ANO.gms'], + scftyp = 'rohf', + runtyp = 'energy', + exetyp = 'run', + ispher = 1, + maxit = 200, + memory = 150000000, + dirscf = True, + guess = 'huckel', + symmetry = 'Cnv 2', + prtmo = True, + ) +sims.append(rhf) + +cas = generate_gamess( + identifier = 'cas', + path = 'pp_casscf', + job = gms_job, + system = h2o, + pseudos = ['O.BFD_V5Z.gms','H.BFD_V5Z_ANO.gms'], + scftyp = 'mcscf', + runtyp = 'energy', + exetyp = 'run', + ispher = 1, + maxit = 200, + memory = 150000000, + dirscf = True, + symmetry = 'Cnv 2', + drt = obj( + group = 'C2v', + nmcc = 0, + ndoc = 4, + nalp = 0, + nval = 4, + istsym = 1, + mxnint = 500000, + fors = True, + ), + mcscf = obj( + cistep = 'guga', + maxit = 1000, + fullnr = True, + acurcy = 1e-5, + ), + dependencies = (rhf,'orbitals') + ) +sims.append(cas) + +run_project(sims) + diff --git a/nexus/examples/gamess/H2O/h2o_pp_cisd.py b/nexus/examples/gamess/H2O/h2o_pp_cisd.py new file mode 100755 index 000000000..b92143cec --- /dev/null +++ b/nexus/examples/gamess/H2O/h2o_pp_cisd.py @@ -0,0 +1,91 @@ +#! /usr/bin/env python + +from nexus import settings,job,run_project,obj +from nexus import generate_physical_system +from nexus import generate_gamess + +settings( + pseudo_dir = './pseudopotentials', + results = '', + status_only = 0, + generate_only = 0, + sleep = 3, + machine = 'ws16', + ericfmt = '/your/path/to/ericfmt.dat' + ) + +gms_job = job(cores=16,app='gamess.x') + +h2o = generate_physical_system( + # full atomic/electronic structure + elem = ['O','H','H'], + pos = [[0.000000, 0.000000, 0.000000], + [0.000000,-0.757160, 0.586260], + [0.000000, 0.757160, 0.586260]], + units = 'A', # Angstroms + net_spin = 0, # multiplicity=1, nup-ndown=0 + O = 6, # Zeff=6 for BFD ECP + H = 1, # Zeff=1 for BFD ECP + # C2v symmetry structure + folded_elem = ['O','H'], + folded_pos = [[0.000000, 0.000000, 0.000000], + [0.000000, 0.757160, 0.586260]], + ) + +sims = [] + +rhf = generate_gamess( + identifier = 'rhf', + path = 'pp_cisd', + job = gms_job, + system = h2o, + pseudos = ['O.BFD_V5Z.gms','H.BFD_V5Z_ANO.gms'], + scftyp = 'rohf', + runtyp = 'energy', + exetyp = 'run', + ispher = 1, + maxit = 200, + memory = 150000000, + dirscf = True, + guess = 'huckel', + symmetry = 'Cnv 2', + prtmo = True, + ) +sims.append(rhf) + +cisd = generate_gamess( + identifier = 'cisd', + path = 'pp_cisd', + job = gms_job, + system = h2o, + pseudos = ['O.BFD_V5Z.gms','H.BFD_V5Z_ANO.gms'], + scftyp = 'none', + cityp = 'guga', + runtyp = 'energy', + exetyp = 'run', + ispher = 1, + maxit = 200, + memory = 150000000, + dirscf = True, + symmetry = 'Cnv 2', + cidrt = obj( + group = 'C2v', + nfzc = 0, + ndoc = 4, + nalp = 0, + nval = 60, + nprt = 2, + istsym = 1, + iexcit = 2, + mxnint = 500000, + ), + gugdia = obj( + prttol = 0.001, + cvgtol = 1.0e-5, + itermx = 1000, + ), + dependencies = (rhf,'orbitals') + ) +sims.append(cisd) + +run_project(sims) diff --git a/nexus/examples/gamess/H2O/h2o_pp_hf.py b/nexus/examples/gamess/H2O/h2o_pp_hf.py new file mode 100755 index 000000000..54a198100 --- /dev/null +++ b/nexus/examples/gamess/H2O/h2o_pp_hf.py @@ -0,0 +1,55 @@ +#! /usr/bin/env python + +from nexus import settings,job,run_project +from nexus import generate_physical_system +from nexus import generate_gamess + +settings( + pseudo_dir = './pseudopotentials', + results = '', + status_only = 0, + generate_only = 0, + sleep = 3, + machine = 'ws16', + ericfmt = '/your/path/to/ericfmt.dat' + ) + +gms_job = job(cores=16,app='gamess.x') + +h2o = generate_physical_system( + # full atomic/electronic structure + elem = ['O','H','H'], + pos = [[0.000000, 0.000000, 0.000000], + [0.000000,-0.757160, 0.586260], + [0.000000, 0.757160, 0.586260]], + units = 'A', # Angstroms + net_spin = 0, # multiplicity=1, nup-ndown=0 + O = 6, # Zeff=6 for BFD ECP + H = 1, # Zeff=1 for BFD ECP + # C2v symmetry structure + folded_elem = ['O','H'], + folded_pos = [[0.000000, 0.000000, 0.000000], + [0.000000, 0.757160, 0.586260]], + ) + +sims = [] + +rhf = generate_gamess( + identifier = 'rhf', + path = 'pp_hf', + job = gms_job, + system = h2o, + pseudos = ['O.BFD_V5Z.gms','H.BFD_V5Z_ANO.gms'], + scftyp = 'rohf', + runtyp = 'energy', + exetyp = 'run', + ispher = 1, + maxit = 200, + memory = 150000000, + dirscf = True, + guess = 'huckel', + symmetry = 'Cnv 2', + ) +sims.append(rhf) + +run_project(sims) diff --git a/nexus/examples/gamess/H2O/pseudopotentials/H.BFD_V5Z_ANO.gms b/nexus/examples/gamess/H2O/pseudopotentials/H.BFD_V5Z_ANO.gms new file mode 100644 index 000000000..619c45da1 --- /dev/null +++ b/nexus/examples/gamess/H2O/pseudopotentials/H.BFD_V5Z_ANO.gms @@ -0,0 +1,68 @@ +H 1 0. 0. 0. +s 6 1.00 +1 6.359201 -0.004943 +2 3.546637 0.049579 +3 1.493442 0.037176 +4 0.551948 0.287908 +5 0.207203 0.009543 +6 0.079234 0.770084 +s 6 1.00 +1 6.359201 -0.016672 +2 3.546637 -0.005774 +3 1.493442 -0.227982 +4 0.551948 -0.285652 +5 0.207203 -1.071579 +6 0.079234 1.423767 +s 6 1.00 +1 6.359201 -0.018886 +2 3.546637 -0.058854 +3 1.493442 -0.556988 +4 0.551948 -1.084022 +5 0.207203 2.721525 +6 0.079234 -1.458091 +s 6 1.00 +1 6.359201 -0.081999 +2 3.546637 -0.069460 +3 1.493442 -2.075555 +4 0.551948 4.125180 +5 0.207203 -3.407591 +6 0.079234 1.264873 +s 6 1.00 +1 6.359201 0.624292 +2 3.546637 -3.954593 +3 1.493442 5.614244 +4 0.551948 -4.299981 +5 0.207203 2.379542 +6 0.079234 -0.749499 +s 1 1.00 +1 0.102700 1.000000 +p 1 1.00 +1 4.516000 1.000000 +p 1 1.00 +1 1.712000 1.000000 +p 1 1.00 +1 0.649000 1.000000 +p 1 1.00 +1 0.246000 1.000000 +d 1 1.00 +1 2.950000 1.000000 +d 1 1.00 +1 1.206000 1.000000 +d 1 1.00 +1 0.493000 1.000000 +f 1 1.00 +1 1.397000 1.000000 +f 1 1.00 +1 2.506000 1.000000 +f 1 1.00 +1 0.875000 1.000000 +g 1 1.00 +1 2.358000 1.000000 + + +H-QMC GEN 0 0 +3 +1.00000000 1 4.47692410 +4.47692410 3 2.97636451 +-4.32112340 2 3.01841596 + diff --git a/nexus/examples/gamess/H2O/pseudopotentials/O.BFD_V5Z.gms b/nexus/examples/gamess/H2O/pseudopotentials/O.BFD_V5Z.gms new file mode 100644 index 000000000..db84c185e --- /dev/null +++ b/nexus/examples/gamess/H2O/pseudopotentials/O.BFD_V5Z.gms @@ -0,0 +1,65 @@ +O 8 0. 0. 0. +s 9 1.00 +1 0.125346 0.055741 +2 0.268022 0.304848 +3 0.573098 0.453752 +4 1.225429 0.295926 +5 2.620277 0.019567 +6 5.602818 -0.128627 +7 11.980245 0.012024 +8 25.616801 0.000407 +9 54.775216 -0.000076 +s 1 1.00 +1 0.160664 1.000000 +s 1 1.00 +1 0.384526 1.000000 +s 1 1.00 +1 0.935157 1.000000 +s 1 1.00 +1 1.937532 1.000000 +p 9 1.00 +1 0.083598 0.044958 +2 0.167017 0.150175 +3 0.333673 0.255999 +4 0.666627 0.281879 +5 1.331816 0.242835 +6 2.660761 0.161134 +7 5.315785 0.082308 +8 10.620108 0.039899 +9 21.217318 0.004679 +p 1 1.00 +1 0.130580 1.000000 +p 1 1.00 +1 0.372674 1.000000 +p 1 1.00 +1 1.178227 1.000000 +p 1 1.00 +1 1.589967 1.000000 +d 1 1.00 +1 0.401152 1.000000 +d 1 1.00 +1 1.174596 1.000000 +d 1 1.00 +1 2.823972 1.000000 +d 1 1.00 +1 4.292433 1.000000 +f 1 1.00 +1 0.708666 1.000000 +f 1 1.00 +1 2.006788 1.000000 +f 1 1.00 +1 3.223721 1.000000 +g 1 1.00 +1 1.207657 1.000000 +g 1 1.00 +1 3.584495 1.000000 + + +O-QMC GEN 2 1 +3 +6.00000000 1 9.29793903 +55.78763416 3 8.86492204 +-38.81978498 2 8.62925665 +1 +38.41914135 2 8.71924452 + diff --git a/nexus/executables/ntest b/nexus/executables/ntest index f4f837bf8..a39061304 100755 --- a/nexus/executables/ntest +++ b/nexus/executables/ntest @@ -1694,6 +1694,20 @@ example_information = dict( ('pwscf' ,'input','quantum_espresso/relax_Ge_T_vs_kpoints/runs/relax/kgrid_666/relax.in'), ], ), + gamess_H2O = dict( + scripts = [ + 'gamess/H2O/h2o_pp_hf.py', + 'gamess/H2O/h2o_pp_cisd.py', + 'gamess/H2O/h2o_pp_casscf.py', + ], + files = [ + ('gamess' ,'input','gamess/H2O/runs/pp_hf/rhf.inp'), + ('gamess' ,'input','gamess/H2O/runs/pp_cisd/rhf.inp'), + ('gamess' ,'input','gamess/H2O/runs/pp_cisd/cisd.inp'), + ('gamess' ,'input','gamess/H2O/runs/pp_casscf/rhf.inp'), + ('gamess' ,'input','gamess/H2O/runs/pp_casscf/cas.inp'), + ], + ), qmcpack_H2O = dict( scripts = [ 'qmcpack/H2O/H2O.py', @@ -1841,8 +1855,13 @@ def user_examples(label): failed = True # if difference due to periodically equivalent points # then it is not a failure - check_pbc = code=='qmcpack' and len(dgen)==1 and len(dref)==1 and dgen.keys()[0].endswith('/position') and dref.keys()[0].endswith('/position') - check_pbc |= code=='pwscf' and len(dgen)==1 and len(dref)==1 and dgen.keys()[0].endswith('/positions') and dref.keys()[0].endswith('/positions') + check_pbc = False + if len(dgen)==1 and len(dref)==1: + kgen = dgen.keys()[0].rsplit('/',1)[1] + kref = dref.keys()[0].rsplit('/',1)[1] + check_pbc |= code=='qmcpack' and kgen==kref=='position' + check_pbc |= code=='pwscf' and kgen==kref=='positions' + #end if if check_pbc: try: # extract Structure objects from SimulationInput objects @@ -1967,7 +1986,7 @@ def regenerate_reference(update=False,overwrite=True): # execute all example scripts in generate_only mode for label,einfo in example_information.iteritems(): - for script_path in einfo.scripts: + for script_path in einfo['scripts']: print ' generating reference data for '+script_path path,script = os.path.split(script_path) path = os.path.join(refgen_example_dir,path) @@ -1985,9 +2004,10 @@ def regenerate_reference(update=False,overwrite=True): # update the reference set of example files if update: + overwrite = False ref_example_dir = os.path.join(reference_dir,'user_examples') - for label,filelist in example_files.iteritems(): - for code,filetype,filepath in filelist: + for label,einfo in example_information.iteritems(): + for code,filetype,filepath in einfo['files']: ref_filepath = os.path.join(ref_example_dir,filepath) gen_filepath = os.path.join(refgen_example_dir,filepath) if overwrite or not os.path.exists(ref_filepath): @@ -2093,7 +2113,7 @@ if __name__=='__main__': for test in NexusTest.test_list: if regex is None: tests.append(test) - elif re.match(regex,test.name): + elif re.search(regex,test.name): tests.append(test) #end if #end for diff --git a/nexus/library/gamess_input.py b/nexus/library/gamess_input.py index 105e077fc..ff3ef7052 100644 --- a/nexus/library/gamess_input.py +++ b/nexus/library/gamess_input.py @@ -1032,7 +1032,7 @@ def generate_any_gamess_input(**kwargs): invalid_names = kwset-GamessInput.all_name_aliases if len(invalid_names)>0: - GamessInput.class_error('invalid group names or keywords encountered\ninvalid names/keywords provided: {0}\nplease check if these group names or keywords are actually valid GAMESS inputs\nif so, unsupported groups can be generated by providing the keywords as a single argument:\n generate_gamess_input(\n ...,\n group_name = obj(assign keywords),\n ...,\n )'.format(sorted(invalid_names)),'generate_gamess_input') + GamessInput.class_error('invalid group names or keywords encountered\ninvalid names/keywords provided: {0}\nplease check if these group names or keywords are actually valid GAMESS inputs\nif so, unsupported groups can be generated by providing the keywords as a single argument:\ngenerate_gamess_input(\n ...,\n group_name = obj(assign keywords),\n ...,\n )'.format(sorted(invalid_names)),'generate_gamess_input') #end if gi = GamessInput() @@ -1062,9 +1062,9 @@ def generate_any_gamess_input(**kwargs): elif name in GamessInput.key_groups: gi[name] = KeywordGroup(**group_info) elif name in GamessInput.card_groups: - GamessInput.class_error('card group {0} cannot be generated from a keyword list\n keyword list provided:\n {1}'.format(name,group_info),'generate_gamess_input') + GamessInput.class_error('card group {0} cannot be generated from a keyword list\nkeyword list provided:\n{1}'.format(name,group_info),'generate_gamess_input') elif name in GamessInput.formatted_groups: - GamessInput.class_error('formatted group {0} cannot be generated from a keyword list\n keyword list provided:\n {1}'.format(name,group_info),'generate_gamess_input') + GamessInput.class_error('formatted group {0} cannot be generated from a keyword list\nkeyword list provided:\n{1}'.format(name,group_info),'generate_gamess_input') else: gi[name] = KeywordGroup(**group_info) # assume keyword group #end if @@ -1090,7 +1090,7 @@ def generate_any_gamess_input(**kwargs): #end if #end for if len(kwrem)>0: - GamessInput.class_error('encountered unrecognized keywords\n unrecognized keywords: {0}\n these keywords may belong to groups not fully implemented here\n fully supported groups: {1}\n unsupported groups can be generated by providing the keywords as a single argument: group_name = obj(assign keywords)'.format(sorted(kwrem),GamessInput.keyspec_group_order)) + GamessInput.class_error('encountered unrecognized keywords\nunrecognized keywords: {0}\nthese keywords may belong to groups not fully implemented here\nfully supported groups: {1}\nunsupported groups can be generated by providing the keywords as a single argument: group_name = obj(assign keywords)'.format(sorted(kwrem),GamessInput.keyspec_group_order)) #end if # handle nexus specific input generation keywords @@ -1101,12 +1101,20 @@ def generate_any_gamess_input(**kwargs): if not 'contrl' in gi: gi.contrl = ContrlGroup() #end if - gi.contrl.set( + # allow user override of charge and multiplicity from physical system + gi.contrl.set_optional( icharg = system.net_charge, - mult = system.net_spin+1 + mult = system.net_spin+1, ) - elem = system.structure.elem - pos = system.structure.pos + s = system.structure + if s.has_folded(): + sf = s.folded_structure + else: + sf = s + #end if + elem_ecp = s.elem + elem = sf.elem + pos = sf.pos pskw.symmetry = pskw.symmetry.strip() data = '{0}\n{1}\n'.format(pskw.descriptor,pskw.symmetry) if pskw.symmetry!='C1': @@ -1134,16 +1142,19 @@ def generate_any_gamess_input(**kwargs): coord = 'unique', ecp = 'read' ) - ecp = '' pps = nexus_noncore.pseudopotentials.pseudos_by_atom(*pskw.pseudos) - atoms = set() - for i in range(len(elem)): - a = elem[i] + for i,a in enumerate(elem): Z = pt[a].atomic_number data+='{0} {1} {2:16.8f} {3:16.8f} {4:16.8f}\n'.format(a,Z,*pos[i]) + if a in pps: + data += pps[a].basis_text+'\n\n' + #end if + #end for + ecp = '' + atoms = set() + for i,a in enumerate(elem_ecp): if a in pps: pp = pps[a] - data += pp.basis_text+'\n\n' if a in atoms: ecp += pp.pp_name+'\n' else: diff --git a/nexus/library/physical_system.py b/nexus/library/physical_system.py index 9105bd42c..b444bd594 100644 --- a/nexus/library/physical_system.py +++ b/nexus/library/physical_system.py @@ -270,25 +270,37 @@ class PhysicalSystem(Matter): #end if self.folded_system = None - if self.structure.folded_structure!=None: - vratio = structure.volume()/structure.folded_structure.volume() - ncells = int(round(vratio)) - if abs(vratio-ncells)>1e-4: - self.error('volume of system does not divide evenly into folded system') - #end if - if net_charge%ncells!=0: - self.error('net charge of system does not divide evenly into folded system') - #end if - if isinstance(net_spin,str): - net_spin_fold = net_spin - elif net_spin%ncells!=0: - self.error('net_spin of system does not divide evenly into folded system') + if self.structure.has_folded(): + if self.structure.is_tiled(): + vratio = structure.volume()/structure.folded_structure.volume() + ncells = int(round(vratio)) + if abs(vratio-ncells)>1e-4: + self.error('volume of system does not divide evenly into folded system') + #end if + if net_charge%ncells!=0: + self.error('net charge of system does not divide evenly into folded system') + #end if + if isinstance(net_spin,str): + net_spin_fold = net_spin + elif net_spin%ncells!=0: + self.error('net_spin of system does not divide evenly into folded system') + else: + net_spin_fold = net_spin/ncells + #end if + net_charge_fold = net_charge/ncells + elif not self.structure.has_axes(): # folded molecule + # net charge/spin are not physically meaningful + # for a point group folded molecule + # set them to safe values; they will not be used later + net_charge_fold = 0 + net_spin_fold = 'low' else: - net_spin_fold = net_spin/ncells + self.error('folded structure is not correctly integrated with full structure\nfolded physical system cannot be constructed') #end if + self.folded_system = PhysicalSystem( structure = structure.folded_structure, - net_charge = net_charge/ncells, + net_charge = net_charge_fold, net_spin = net_spin_fold, particles = particles, **valency diff --git a/nexus/library/structure.py b/nexus/library/structure.py index de56e343d..f583c4deb 100755 --- a/nexus/library/structure.py +++ b/nexus/library/structure.py @@ -674,12 +674,30 @@ class Structure(Sobj): #end def set_operations - def __init__(self,axes=None,scale=1.,elem=None,pos=None,mag=None, - center=None,kpoints=None,kweights=None,kgrid=None,kshift=None, - permute=None,units=None,tiling=None,rescale=True,dim=3, - magnetization=None,magnetic_order=None,magnetic_prim=True, - operations=None,background_charge=0,frozen=None,bconds=None, - posu=None): + def __init__(self, + axes = None, + scale = 1., + elem = None, + pos = None, + mag = None, + center = None, + kpoints = None, + kweights = None, + kgrid = None, + kshift = None, + permute = None, + units = None, + tiling = None, + rescale = True, + dim = 3, + magnetization = None, + magnetic_order = None, + magnetic_prim = True, + operations = None, + background_charge = 0, + frozen = None, + bconds = None, + posu = None): if center is None: if axes is not None: @@ -820,7 +838,7 @@ class Structure(Sobj): def operate(self,operations): for op in operations: if not op in self.operations: - self.error('{0} is not a known operation\n valid options are:\n {1}'.format(op,list(self.operations.keys()))) + self.error('{0} is not a known operation\nvalid options are:\n {1}'.format(op,list(self.operations.keys()))) else: self.operations[op](self) #end if @@ -828,6 +846,16 @@ class Structure(Sobj): #end def operate + def has_tmatrix(self): + return 'tmatrix' in self and self.tmatrix is not None + #end def has_tmatrix + + + def is_tiled(self): + return self.has_folded() and self.has_tmatrix() + #end def is_tiled + + def set_folded(self,folded): self.set_folded_structure(folded) #end def set_folded @@ -844,19 +872,26 @@ class Structure(Sobj): def set_folded_structure(self,folded): + if not isinstance(folded,Structure): + self.error('cannot set folded structure\nfolded structure must be an object with type Structure\nreceived type: {0}'.format(folded.__class__.__name__)) + #end if self.folded_structure = folded - self.tmatrix = self.tilematrix(folded) + if self.has_axes(): + self.tmatrix = self.tilematrix(folded) + #end if #end def set_folded_structure def remove_folded_structure(self): self.folded_structure = None - self.tmatrix = None + if 'tmatrix' in self: + del self.tmatrix + #end if #end def remove_folded_structure def has_folded_structure(self): - return self.folded_structure!=None + return self.folded_structure is not None #end def has_folded_structure @@ -2932,7 +2967,7 @@ class Structure(Sobj): ts.recenter() ts.unique_kpoints() - if self.folded_structure!=None: + if self.is_tiled(): ts.tmatrix = dot(tilematrix,self.tmatrix) ts.folded_structure = self.folded_structure.copy() else: @@ -3180,7 +3215,7 @@ class Structure(Sobj): self.unique_kpoints() #end if self.recenter_k() #added because qmcpack cannot handle kpoints outside the box - if self.folded_structure!=None: + if self.is_tiled(): kp,kw = self.kfold(self.tmatrix,kpoints,kweights) self.folded_structure.add_kpoints(kp,kw,unique=unique) #end if @@ -5261,7 +5296,17 @@ def generate_structure(type='crystal',*args,**kwargs): -def generate_atom_structure(atom=None,units='A',Lbox=None,skew=0,axes=None,kgrid=(1,1,1),kshift=(0,0,0),bconds=tuple('nnn'),struct_type=Structure): +def generate_atom_structure( + atom = None, + units = 'A', + Lbox = None, + skew = 0, + axes = None, + kgrid = (1,1,1), + kshift = (0,0,0), + bconds = tuple('nnn'), + struct_type = Structure + ): if atom is None: Structure.class_error('atom must be provided','generate_atom_structure') #end if @@ -5279,7 +5324,19 @@ def generate_atom_structure(atom=None,units='A',Lbox=None,skew=0,axes=None,kgrid #end def generate_atom_structure -def generate_dimer_structure(dimer=None,units='A',separation=None,Lbox=None,skew=0,axes=None,kgrid=(1,1,1),kshift=(0,0,0),bconds=tuple('nnn'),struct_type=Structure,axis='x'): +def generate_dimer_structure( + dimer = None, + units = 'A', + separation = None, + Lbox = None, + skew = 0, + axes = None, + kgrid = (1,1,1), + kshift = (0,0,0), + bconds = tuple('nnn'), + struct_type = Structure, + axis = 'x' + ): if dimer is None: Structure.class_error('dimer atoms must be provided to construct dimer','generate_dimer_structure') #end if @@ -5308,7 +5365,22 @@ def generate_dimer_structure(dimer=None,units='A',separation=None,Lbox=None,skew #end def generate_dimer_structure -def generate_trimer_structure(trimer=None,units='A',separation=None,angle=None,Lbox=None,skew=0,axes=None,kgrid=(1,1,1),kshift=(0,0,0),struct_type=Structure,axis='x',axis2='y',angular_units='degrees',plane_rot=None): +def generate_trimer_structure( + trimer = None, + units = 'A', + separation = None, + angle = None, + Lbox = None, + skew = 0, + axes = None, + kgrid = (1,1,1), + kshift = (0,0,0), + struct_type = Structure, + axis = 'x', + axis2 = 'y', + angular_units = 'degrees', + plane_rot = None + ): if trimer is None: Structure.class_error('trimer atoms must be provided to construct trimer','generate_trimer_structure') #end if @@ -5381,34 +5453,61 @@ def generate_jellium_structure(*args,**kwargs): -def generate_crystal_structure(lattice=None,cell=None,centering=None, - constants=None,atoms=None,basis=None, - basis_vectors=None,tiling=None,cscale=None, - axes=None,units=None,angular_units='degrees', - magnetization=None,magnetic_order=None,magnetic_prim=True, - kpoints=None,kweights=None,kgrid=None,kshift=(0,0,0),permute=None, - structure=None,shape=None,element=None,scale=None, #legacy inputs - operations=None, - struct_type=Crystal,elem=None,pos=None,frozen=None, - posu=None): +def generate_crystal_structure( + lattice = None, + cell = None, + centering = None, + constants = None, + atoms = None, + basis = None, + basis_vectors = None, + tiling = None, + cscale = None, + axes = None, + units = None, + angular_units = 'degrees', + magnetization = None, + magnetic_order = None, + magnetic_prim = True, + kpoints = None, + kweights = None, + kgrid = None, + kshift = (0,0,0), + permute = None, + operations = None, + struct_type = Crystal, + elem = None, + pos = None, + frozen = None, + posu = None, + folded_elem = None, + folded_pos = None, + folded_units = None, + #legacy inputs + structure = None, + shape = None, + element = None, + scale = None, + ): - if structure!=None: + if structure is not None: lattice = structure #end if - if shape!=None: + if shape is not None: cell = shape #end if - if element!=None: + if element is not None: atoms = element #end if - if scale!=None: + if scale is not None: constants = scale #end if #interface for total manual specification # this is only here because 'crystal' is default and must handle other cases + s = None if elem is not None and (pos is not None or posu is not None): - return Structure( + s = Structure( axes = axes, elem = elem, pos = pos, @@ -5426,18 +5525,33 @@ def generate_crystal_structure(lattice=None,cell=None,centering=None, operations = operations, posu = posu) elif isinstance(structure,Structure): - if tiling!=None: - structure = structure.tile(tiling) + s = structure + if tiling is not None: + s = s.tile(tiling) #end if - if kpoints!=None: - structure.add_kpoints(kpoints,kweights) + if kpoints is not None: + s.add_kpoints(kpoints,kweights) #end if - if kgrid!=None: - structure.add_kmesh(kgrid,kshift) + if kgrid is not None: + s.add_kmesh(kgrid,kshift) #end if - return structure #end if - + if s is not None: + # add point group folded molecular system if present + if folded_elem is not None and folded_pos is not None: + if folded_units is None: + folded_units = units + #end if + fs = Structure( + elem = folded_elem, + pos = folded_pos, + units = folded_units, + rescale = False, + ) + s.set_folded(fs) + #end if + return s + #end if s=Crystal( lattice = lattice , diff --git a/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/cas.inp b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/cas.inp new file mode 100644 index 000000000..49fd233fb --- /dev/null +++ b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/cas.inp @@ -0,0 +1,144 @@ + $contrl coord=unique ecp=read exetyp=run icharg=0 ispher=1 + maxit=200 mult=1 runtyp=energy scftyp=mcscf $end + $system memory=150000000 $end + $scf dirscf=.true. $end + $drt fors=.true. group=C2v istsym=1 mxnint=500000 nalp=0 ndoc=4 + nmcc=0 nval=4 $end + $mcscf acurcy=1d-05 cistep=guga fullnr=.true. maxit=1000 $end + $ECP +O-QMC GEN 2 1 +3 +6.00000000 1 9.29793903 +55.78763416 3 8.86492204 +-38.81978498 2 8.62925665 +1 +38.41914135 2 8.71924452 +H-QMC GEN 0 0 +3 +1.00000000 1 4.47692410 +4.47692410 3 2.97636451 +-4.32112340 2 3.01841596 +H-QMC + $END + $DATA +A molecule. +Cnv 2 + +O 8 0.00000000 0.00000000 0.00000000 +s 9 1.00 +1 0.125346 0.055741 +2 0.268022 0.304848 +3 0.573098 0.453752 +4 1.225429 0.295926 +5 2.620277 0.019567 +6 5.602818 -0.128627 +7 11.980245 0.012024 +8 25.616801 0.000407 +9 54.775216 -0.000076 +s 1 1.00 +1 0.160664 1.000000 +s 1 1.00 +1 0.384526 1.000000 +s 1 1.00 +1 0.935157 1.000000 +s 1 1.00 +1 1.937532 1.000000 +p 9 1.00 +1 0.083598 0.044958 +2 0.167017 0.150175 +3 0.333673 0.255999 +4 0.666627 0.281879 +5 1.331816 0.242835 +6 2.660761 0.161134 +7 5.315785 0.082308 +8 10.620108 0.039899 +9 21.217318 0.004679 +p 1 1.00 +1 0.130580 1.000000 +p 1 1.00 +1 0.372674 1.000000 +p 1 1.00 +1 1.178227 1.000000 +p 1 1.00 +1 1.589967 1.000000 +d 1 1.00 +1 0.401152 1.000000 +d 1 1.00 +1 1.174596 1.000000 +d 1 1.00 +1 2.823972 1.000000 +d 1 1.00 +1 4.292433 1.000000 +f 1 1.00 +1 0.708666 1.000000 +f 1 1.00 +1 2.006788 1.000000 +f 1 1.00 +1 3.223721 1.000000 +g 1 1.00 +1 1.207657 1.000000 +g 1 1.00 +1 3.584495 1.000000 + +H 1 0.00000000 0.75716000 0.58626000 +s 6 1.00 +1 6.359201 -0.004943 +2 3.546637 0.049579 +3 1.493442 0.037176 +4 0.551948 0.287908 +5 0.207203 0.009543 +6 0.079234 0.770084 +s 6 1.00 +1 6.359201 -0.016672 +2 3.546637 -0.005774 +3 1.493442 -0.227982 +4 0.551948 -0.285652 +5 0.207203 -1.071579 +6 0.079234 1.423767 +s 6 1.00 +1 6.359201 -0.018886 +2 3.546637 -0.058854 +3 1.493442 -0.556988 +4 0.551948 -1.084022 +5 0.207203 2.721525 +6 0.079234 -1.458091 +s 6 1.00 +1 6.359201 -0.081999 +2 3.546637 -0.069460 +3 1.493442 -2.075555 +4 0.551948 4.125180 +5 0.207203 -3.407591 +6 0.079234 1.264873 +s 6 1.00 +1 6.359201 0.624292 +2 3.546637 -3.954593 +3 1.493442 5.614244 +4 0.551948 -4.299981 +5 0.207203 2.379542 +6 0.079234 -0.749499 +s 1 1.00 +1 0.102700 1.000000 +p 1 1.00 +1 4.516000 1.000000 +p 1 1.00 +1 1.712000 1.000000 +p 1 1.00 +1 0.649000 1.000000 +p 1 1.00 +1 0.246000 1.000000 +d 1 1.00 +1 2.950000 1.000000 +d 1 1.00 +1 1.206000 1.000000 +d 1 1.00 +1 0.493000 1.000000 +f 1 1.00 +1 1.397000 1.000000 +f 1 1.00 +1 2.506000 1.000000 +f 1 1.00 +1 0.875000 1.000000 +g 1 1.00 +1 2.358000 1.000000 + + $END diff --git a/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/rhf.inp b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/rhf.inp new file mode 100644 index 000000000..731f296c3 --- /dev/null +++ b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_casscf/rhf.inp @@ -0,0 +1,142 @@ + $contrl coord=unique ecp=read exetyp=run icharg=0 ispher=1 + maxit=200 mult=1 runtyp=energy scftyp=rohf $end + $system memory=150000000 $end + $scf dirscf=.true. $end + $guess guess=huckel prtmo=.true. $end + $ECP +O-QMC GEN 2 1 +3 +6.00000000 1 9.29793903 +55.78763416 3 8.86492204 +-38.81978498 2 8.62925665 +1 +38.41914135 2 8.71924452 +H-QMC GEN 0 0 +3 +1.00000000 1 4.47692410 +4.47692410 3 2.97636451 +-4.32112340 2 3.01841596 +H-QMC + $END + $DATA +A molecule. +Cnv 2 + +O 8 0.00000000 0.00000000 0.00000000 +s 9 1.00 +1 0.125346 0.055741 +2 0.268022 0.304848 +3 0.573098 0.453752 +4 1.225429 0.295926 +5 2.620277 0.019567 +6 5.602818 -0.128627 +7 11.980245 0.012024 +8 25.616801 0.000407 +9 54.775216 -0.000076 +s 1 1.00 +1 0.160664 1.000000 +s 1 1.00 +1 0.384526 1.000000 +s 1 1.00 +1 0.935157 1.000000 +s 1 1.00 +1 1.937532 1.000000 +p 9 1.00 +1 0.083598 0.044958 +2 0.167017 0.150175 +3 0.333673 0.255999 +4 0.666627 0.281879 +5 1.331816 0.242835 +6 2.660761 0.161134 +7 5.315785 0.082308 +8 10.620108 0.039899 +9 21.217318 0.004679 +p 1 1.00 +1 0.130580 1.000000 +p 1 1.00 +1 0.372674 1.000000 +p 1 1.00 +1 1.178227 1.000000 +p 1 1.00 +1 1.589967 1.000000 +d 1 1.00 +1 0.401152 1.000000 +d 1 1.00 +1 1.174596 1.000000 +d 1 1.00 +1 2.823972 1.000000 +d 1 1.00 +1 4.292433 1.000000 +f 1 1.00 +1 0.708666 1.000000 +f 1 1.00 +1 2.006788 1.000000 +f 1 1.00 +1 3.223721 1.000000 +g 1 1.00 +1 1.207657 1.000000 +g 1 1.00 +1 3.584495 1.000000 + +H 1 0.00000000 0.75716000 0.58626000 +s 6 1.00 +1 6.359201 -0.004943 +2 3.546637 0.049579 +3 1.493442 0.037176 +4 0.551948 0.287908 +5 0.207203 0.009543 +6 0.079234 0.770084 +s 6 1.00 +1 6.359201 -0.016672 +2 3.546637 -0.005774 +3 1.493442 -0.227982 +4 0.551948 -0.285652 +5 0.207203 -1.071579 +6 0.079234 1.423767 +s 6 1.00 +1 6.359201 -0.018886 +2 3.546637 -0.058854 +3 1.493442 -0.556988 +4 0.551948 -1.084022 +5 0.207203 2.721525 +6 0.079234 -1.458091 +s 6 1.00 +1 6.359201 -0.081999 +2 3.546637 -0.069460 +3 1.493442 -2.075555 +4 0.551948 4.125180 +5 0.207203 -3.407591 +6 0.079234 1.264873 +s 6 1.00 +1 6.359201 0.624292 +2 3.546637 -3.954593 +3 1.493442 5.614244 +4 0.551948 -4.299981 +5 0.207203 2.379542 +6 0.079234 -0.749499 +s 1 1.00 +1 0.102700 1.000000 +p 1 1.00 +1 4.516000 1.000000 +p 1 1.00 +1 1.712000 1.000000 +p 1 1.00 +1 0.649000 1.000000 +p 1 1.00 +1 0.246000 1.000000 +d 1 1.00 +1 2.950000 1.000000 +d 1 1.00 +1 1.206000 1.000000 +d 1 1.00 +1 0.493000 1.000000 +f 1 1.00 +1 1.397000 1.000000 +f 1 1.00 +1 2.506000 1.000000 +f 1 1.00 +1 0.875000 1.000000 +g 1 1.00 +1 2.358000 1.000000 + + $END diff --git a/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/cisd.inp b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/cisd.inp new file mode 100644 index 000000000..fc2db862b --- /dev/null +++ b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/cisd.inp @@ -0,0 +1,144 @@ + $contrl cityp=guga coord=unique ecp=read exetyp=run icharg=0 + ispher=1 maxit=200 mult=1 runtyp=energy scftyp=none $end + $system memory=150000000 $end + $scf dirscf=.true. $end + $cidrt group=C2v iexcit=2 istsym=1 mxnint=500000 nalp=0 ndoc=4 + nfzc=0 nprt=2 nval=60 $end + $gugdia cvgtol=1d-05 itermx=1000 prttol=0.001 $end + $ECP +O-QMC GEN 2 1 +3 +6.00000000 1 9.29793903 +55.78763416 3 8.86492204 +-38.81978498 2 8.62925665 +1 +38.41914135 2 8.71924452 +H-QMC GEN 0 0 +3 +1.00000000 1 4.47692410 +4.47692410 3 2.97636451 +-4.32112340 2 3.01841596 +H-QMC + $END + $DATA +A molecule. +Cnv 2 + +O 8 0.00000000 0.00000000 0.00000000 +s 9 1.00 +1 0.125346 0.055741 +2 0.268022 0.304848 +3 0.573098 0.453752 +4 1.225429 0.295926 +5 2.620277 0.019567 +6 5.602818 -0.128627 +7 11.980245 0.012024 +8 25.616801 0.000407 +9 54.775216 -0.000076 +s 1 1.00 +1 0.160664 1.000000 +s 1 1.00 +1 0.384526 1.000000 +s 1 1.00 +1 0.935157 1.000000 +s 1 1.00 +1 1.937532 1.000000 +p 9 1.00 +1 0.083598 0.044958 +2 0.167017 0.150175 +3 0.333673 0.255999 +4 0.666627 0.281879 +5 1.331816 0.242835 +6 2.660761 0.161134 +7 5.315785 0.082308 +8 10.620108 0.039899 +9 21.217318 0.004679 +p 1 1.00 +1 0.130580 1.000000 +p 1 1.00 +1 0.372674 1.000000 +p 1 1.00 +1 1.178227 1.000000 +p 1 1.00 +1 1.589967 1.000000 +d 1 1.00 +1 0.401152 1.000000 +d 1 1.00 +1 1.174596 1.000000 +d 1 1.00 +1 2.823972 1.000000 +d 1 1.00 +1 4.292433 1.000000 +f 1 1.00 +1 0.708666 1.000000 +f 1 1.00 +1 2.006788 1.000000 +f 1 1.00 +1 3.223721 1.000000 +g 1 1.00 +1 1.207657 1.000000 +g 1 1.00 +1 3.584495 1.000000 + +H 1 0.00000000 0.75716000 0.58626000 +s 6 1.00 +1 6.359201 -0.004943 +2 3.546637 0.049579 +3 1.493442 0.037176 +4 0.551948 0.287908 +5 0.207203 0.009543 +6 0.079234 0.770084 +s 6 1.00 +1 6.359201 -0.016672 +2 3.546637 -0.005774 +3 1.493442 -0.227982 +4 0.551948 -0.285652 +5 0.207203 -1.071579 +6 0.079234 1.423767 +s 6 1.00 +1 6.359201 -0.018886 +2 3.546637 -0.058854 +3 1.493442 -0.556988 +4 0.551948 -1.084022 +5 0.207203 2.721525 +6 0.079234 -1.458091 +s 6 1.00 +1 6.359201 -0.081999 +2 3.546637 -0.069460 +3 1.493442 -2.075555 +4 0.551948 4.125180 +5 0.207203 -3.407591 +6 0.079234 1.264873 +s 6 1.00 +1 6.359201 0.624292 +2 3.546637 -3.954593 +3 1.493442 5.614244 +4 0.551948 -4.299981 +5 0.207203 2.379542 +6 0.079234 -0.749499 +s 1 1.00 +1 0.102700 1.000000 +p 1 1.00 +1 4.516000 1.000000 +p 1 1.00 +1 1.712000 1.000000 +p 1 1.00 +1 0.649000 1.000000 +p 1 1.00 +1 0.246000 1.000000 +d 1 1.00 +1 2.950000 1.000000 +d 1 1.00 +1 1.206000 1.000000 +d 1 1.00 +1 0.493000 1.000000 +f 1 1.00 +1 1.397000 1.000000 +f 1 1.00 +1 2.506000 1.000000 +f 1 1.00 +1 0.875000 1.000000 +g 1 1.00 +1 2.358000 1.000000 + + $END diff --git a/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/rhf.inp b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/rhf.inp new file mode 100644 index 000000000..731f296c3 --- /dev/null +++ b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_cisd/rhf.inp @@ -0,0 +1,142 @@ + $contrl coord=unique ecp=read exetyp=run icharg=0 ispher=1 + maxit=200 mult=1 runtyp=energy scftyp=rohf $end + $system memory=150000000 $end + $scf dirscf=.true. $end + $guess guess=huckel prtmo=.true. $end + $ECP +O-QMC GEN 2 1 +3 +6.00000000 1 9.29793903 +55.78763416 3 8.86492204 +-38.81978498 2 8.62925665 +1 +38.41914135 2 8.71924452 +H-QMC GEN 0 0 +3 +1.00000000 1 4.47692410 +4.47692410 3 2.97636451 +-4.32112340 2 3.01841596 +H-QMC + $END + $DATA +A molecule. +Cnv 2 + +O 8 0.00000000 0.00000000 0.00000000 +s 9 1.00 +1 0.125346 0.055741 +2 0.268022 0.304848 +3 0.573098 0.453752 +4 1.225429 0.295926 +5 2.620277 0.019567 +6 5.602818 -0.128627 +7 11.980245 0.012024 +8 25.616801 0.000407 +9 54.775216 -0.000076 +s 1 1.00 +1 0.160664 1.000000 +s 1 1.00 +1 0.384526 1.000000 +s 1 1.00 +1 0.935157 1.000000 +s 1 1.00 +1 1.937532 1.000000 +p 9 1.00 +1 0.083598 0.044958 +2 0.167017 0.150175 +3 0.333673 0.255999 +4 0.666627 0.281879 +5 1.331816 0.242835 +6 2.660761 0.161134 +7 5.315785 0.082308 +8 10.620108 0.039899 +9 21.217318 0.004679 +p 1 1.00 +1 0.130580 1.000000 +p 1 1.00 +1 0.372674 1.000000 +p 1 1.00 +1 1.178227 1.000000 +p 1 1.00 +1 1.589967 1.000000 +d 1 1.00 +1 0.401152 1.000000 +d 1 1.00 +1 1.174596 1.000000 +d 1 1.00 +1 2.823972 1.000000 +d 1 1.00 +1 4.292433 1.000000 +f 1 1.00 +1 0.708666 1.000000 +f 1 1.00 +1 2.006788 1.000000 +f 1 1.00 +1 3.223721 1.000000 +g 1 1.00 +1 1.207657 1.000000 +g 1 1.00 +1 3.584495 1.000000 + +H 1 0.00000000 0.75716000 0.58626000 +s 6 1.00 +1 6.359201 -0.004943 +2 3.546637 0.049579 +3 1.493442 0.037176 +4 0.551948 0.287908 +5 0.207203 0.009543 +6 0.079234 0.770084 +s 6 1.00 +1 6.359201 -0.016672 +2 3.546637 -0.005774 +3 1.493442 -0.227982 +4 0.551948 -0.285652 +5 0.207203 -1.071579 +6 0.079234 1.423767 +s 6 1.00 +1 6.359201 -0.018886 +2 3.546637 -0.058854 +3 1.493442 -0.556988 +4 0.551948 -1.084022 +5 0.207203 2.721525 +6 0.079234 -1.458091 +s 6 1.00 +1 6.359201 -0.081999 +2 3.546637 -0.069460 +3 1.493442 -2.075555 +4 0.551948 4.125180 +5 0.207203 -3.407591 +6 0.079234 1.264873 +s 6 1.00 +1 6.359201 0.624292 +2 3.546637 -3.954593 +3 1.493442 5.614244 +4 0.551948 -4.299981 +5 0.207203 2.379542 +6 0.079234 -0.749499 +s 1 1.00 +1 0.102700 1.000000 +p 1 1.00 +1 4.516000 1.000000 +p 1 1.00 +1 1.712000 1.000000 +p 1 1.00 +1 0.649000 1.000000 +p 1 1.00 +1 0.246000 1.000000 +d 1 1.00 +1 2.950000 1.000000 +d 1 1.00 +1 1.206000 1.000000 +d 1 1.00 +1 0.493000 1.000000 +f 1 1.00 +1 1.397000 1.000000 +f 1 1.00 +1 2.506000 1.000000 +f 1 1.00 +1 0.875000 1.000000 +g 1 1.00 +1 2.358000 1.000000 + + $END diff --git a/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_hf/rhf.inp b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_hf/rhf.inp new file mode 100644 index 000000000..11e7de316 --- /dev/null +++ b/nexus/tests/reference/user_examples/gamess/H2O/runs/pp_hf/rhf.inp @@ -0,0 +1,142 @@ + $contrl coord=unique ecp=read exetyp=run icharg=0 ispher=1 + maxit=200 mult=1 runtyp=energy scftyp=rohf $end + $system memory=150000000 $end + $scf dirscf=.true. $end + $guess guess=huckel $end + $ECP +O-QMC GEN 2 1 +3 +6.00000000 1 9.29793903 +55.78763416 3 8.86492204 +-38.81978498 2 8.62925665 +1 +38.41914135 2 8.71924452 +H-QMC GEN 0 0 +3 +1.00000000 1 4.47692410 +4.47692410 3 2.97636451 +-4.32112340 2 3.01841596 +H-QMC + $END + $DATA +A molecule. +Cnv 2 + +O 8 0.00000000 0.00000000 0.00000000 +s 9 1.00 +1 0.125346 0.055741 +2 0.268022 0.304848 +3 0.573098 0.453752 +4 1.225429 0.295926 +5 2.620277 0.019567 +6 5.602818 -0.128627 +7 11.980245 0.012024 +8 25.616801 0.000407 +9 54.775216 -0.000076 +s 1 1.00 +1 0.160664 1.000000 +s 1 1.00 +1 0.384526 1.000000 +s 1 1.00 +1 0.935157 1.000000 +s 1 1.00 +1 1.937532 1.000000 +p 9 1.00 +1 0.083598 0.044958 +2 0.167017 0.150175 +3 0.333673 0.255999 +4 0.666627 0.281879 +5 1.331816 0.242835 +6 2.660761 0.161134 +7 5.315785 0.082308 +8 10.620108 0.039899 +9 21.217318 0.004679 +p 1 1.00 +1 0.130580 1.000000 +p 1 1.00 +1 0.372674 1.000000 +p 1 1.00 +1 1.178227 1.000000 +p 1 1.00 +1 1.589967 1.000000 +d 1 1.00 +1 0.401152 1.000000 +d 1 1.00 +1 1.174596 1.000000 +d 1 1.00 +1 2.823972 1.000000 +d 1 1.00 +1 4.292433 1.000000 +f 1 1.00 +1 0.708666 1.000000 +f 1 1.00 +1 2.006788 1.000000 +f 1 1.00 +1 3.223721 1.000000 +g 1 1.00 +1 1.207657 1.000000 +g 1 1.00 +1 3.584495 1.000000 + +H 1 0.00000000 0.75716000 0.58626000 +s 6 1.00 +1 6.359201 -0.004943 +2 3.546637 0.049579 +3 1.493442 0.037176 +4 0.551948 0.287908 +5 0.207203 0.009543 +6 0.079234 0.770084 +s 6 1.00 +1 6.359201 -0.016672 +2 3.546637 -0.005774 +3 1.493442 -0.227982 +4 0.551948 -0.285652 +5 0.207203 -1.071579 +6 0.079234 1.423767 +s 6 1.00 +1 6.359201 -0.018886 +2 3.546637 -0.058854 +3 1.493442 -0.556988 +4 0.551948 -1.084022 +5 0.207203 2.721525 +6 0.079234 -1.458091 +s 6 1.00 +1 6.359201 -0.081999 +2 3.546637 -0.069460 +3 1.493442 -2.075555 +4 0.551948 4.125180 +5 0.207203 -3.407591 +6 0.079234 1.264873 +s 6 1.00 +1 6.359201 0.624292 +2 3.546637 -3.954593 +3 1.493442 5.614244 +4 0.551948 -4.299981 +5 0.207203 2.379542 +6 0.079234 -0.749499 +s 1 1.00 +1 0.102700 1.000000 +p 1 1.00 +1 4.516000 1.000000 +p 1 1.00 +1 1.712000 1.000000 +p 1 1.00 +1 0.649000 1.000000 +p 1 1.00 +1 0.246000 1.000000 +d 1 1.00 +1 2.950000 1.000000 +d 1 1.00 +1 1.206000 1.000000 +d 1 1.00 +1 0.493000 1.000000 +f 1 1.00 +1 1.397000 1.000000 +f 1 1.00 +1 2.506000 1.000000 +f 1 1.00 +1 0.875000 1.000000 +g 1 1.00 +1 2.358000 1.000000 + + $END From 1f84101c3e9967464a91e43c50b0cd80c8c0659d Mon Sep 17 00:00:00 2001 From: Mark Dewing Date: Thu, 21 Jun 2018 16:30:13 -0500 Subject: [PATCH 2/7] Reset SPOSetBuilderFactory state. The SPOSetBuilderFactory contains some global information. For unit testing, add a static method to clear this information and reset the state. --- src/QMCWaveFunctions/SPOSetBuilderFactory.cpp | 6 ++++++ src/QMCWaveFunctions/SPOSetBuilderFactory.h | 3 +++ 2 files changed, 9 insertions(+) diff --git a/src/QMCWaveFunctions/SPOSetBuilderFactory.cpp b/src/QMCWaveFunctions/SPOSetBuilderFactory.cpp index 4208f1f49..c890392a4 100644 --- a/src/QMCWaveFunctions/SPOSetBuilderFactory.cpp +++ b/src/QMCWaveFunctions/SPOSetBuilderFactory.cpp @@ -50,6 +50,12 @@ namespace qmcplusplus std::map SPOSetBuilderFactory::spo_builders; SPOSetBuilder* SPOSetBuilderFactory::last_builder=0; + void SPOSetBuilderFactory::clear() + { + spo_builders.clear(); + last_builder = nullptr; + } + SPOSetBase* get_sposet(const std::string& name) { int nfound = 0; diff --git a/src/QMCWaveFunctions/SPOSetBuilderFactory.h b/src/QMCWaveFunctions/SPOSetBuilderFactory.h index 4807bb453..2ac116e64 100644 --- a/src/QMCWaveFunctions/SPOSetBuilderFactory.h +++ b/src/QMCWaveFunctions/SPOSetBuilderFactory.h @@ -43,6 +43,9 @@ public: ///set of basis set builders resolved by type static std::map spo_builders; + /// Reset the map and last_builder pointers. Mostly for unit tests. + static void clear(); + /** constructor * \param els reference to the electrons * \param psi reference to the wavefunction From dc16250989913ed445963ed8ae7efe5d751ccec8 Mon Sep 17 00:00:00 2001 From: Mark Dewing Date: Thu, 21 Jun 2018 16:32:42 -0500 Subject: [PATCH 3/7] Add python scripts to generate GTO MO values For unit testing validation add scripts to compute values and derivatives for molecular orbitals. Read the basis set information and MO coefficients from a qmcpack input file. --- .../tests/gaussian_orbitals.py | 171 ++++++++++++++++++ src/QMCWaveFunctions/tests/gen_mo.py | 29 +++ src/QMCWaveFunctions/tests/he_sto3g.wfj.xml | 56 ++++++ src/QMCWaveFunctions/tests/read_qmcpack.py | 91 ++++++++++ 4 files changed, 347 insertions(+) create mode 100644 src/QMCWaveFunctions/tests/gaussian_orbitals.py create mode 100644 src/QMCWaveFunctions/tests/gen_mo.py create mode 100644 src/QMCWaveFunctions/tests/he_sto3g.wfj.xml create mode 100644 src/QMCWaveFunctions/tests/read_qmcpack.py diff --git a/src/QMCWaveFunctions/tests/gaussian_orbitals.py b/src/QMCWaveFunctions/tests/gaussian_orbitals.py new file mode 100644 index 000000000..240ecae0f --- /dev/null +++ b/src/QMCWaveFunctions/tests/gaussian_orbitals.py @@ -0,0 +1,171 @@ + + +# Evaluate GTO's starting from a symbolic representation +# see qmc_algorithms/Wavefunctions/GaussianOrbitals.ipynb + +from sympy import * +from collections import namedtuple, defaultdict + + +CG_basis = namedtuple('CG_basis',['orbtype','nbasis','zeta','contraction_coeff']) + +class GTO: + def __init__(self, basis=None, center=[0.0, 0.0, 0.0]): + x,y,z = symbols('x y z') + alpha = Symbol('alpha', positive=True, real=True) + r = Symbol('r',real=True,nonnegative=True) + i,j,k = symbols('i j k',integer=True) + N = Symbol('N') + self.N = N + norm1 = factorial(i)*factorial(j)*factorial(k) + norm2 = factorial(2*i)*factorial(2*j)*factorial(2*k) + norm_sym = (2*alpha/pi)**(3/S(4)) * sqrt((8*alpha)**(i+j+k)*norm1/norm2) + + gto_sym_raw = N * x**i * y**j * z**k * exp(-alpha *r**2) + + gto_sym = gto_sym_raw.subs(N, norm_sym) + + self.alpha = alpha + self.x = x; self.y = y; self.z = z + self.r = r + self.i = i; self.j = j; self.k = k + self.gto_sym = gto_sym + self.compute_grad() + + self.ijk = get_ijk_by_type() + + self.basis = basis + self.center = center + + + def compute_grad(self): + r2 = self.x**2 + self.y**2 + self.z**2 + gto_xyz = self.gto_sym.subs(self.r**2, r2) + #print gto_xyz + self.grad = [0]*3 + self.grad[0] = diff(gto_xyz, self.x).subs(r2, self.r**2) + self.grad[1] = diff(gto_xyz, self.y).subs(r2, self.r**2) + self.grad[2] = diff(gto_xyz, self.z).subs(r2, self.r**2) + lap = diff(gto_xyz, self.x, 2) + \ + diff(gto_xyz, self.y, 2) + \ + diff(gto_xyz, self.z, 2) + # Need to expand to avoid NaN's + self.lap = expand(lap.subs(r2, self.r**2)) + + def set_basis(self, basis): + self.basis = basis + + def make_subs_list(self, i, j, k, x, y, z, alpha): + subs_list = {self.i:i, self.j:j, self.k:k} + r2 = x**2 + y**2 + z**2 + r_val = sqrt(r2) + subs_list[self.r] = r_val + subs_list[self.r**2] = r2 + subs_list[self.alpha] = alpha + subs_list[self.x] = x + subs_list[self.y] = y + subs_list[self.z] = z + return subs_list + + def eval_single_v(self, i, j, k, x, y, z, alpha): + xc = x - self.center[0] + yc = y - self.center[1] + zc = z - self.center[2] + sl1 = self.make_subs_list(i,j,k,xc,yc,zc,alpha) + v = self.gto_sym.subs(sl1).evalf() + return v + + def eval_single_vgl(self, i, j, k, x, y, z, alpha): + xc = x - self.center[0] + yc = y - self.center[1] + zc = z - self.center[2] + sl1 = self.make_subs_list(i,j,k,xc,yc,zc,alpha) + v = self.gto_sym.subs(sl1).evalf() + g = [grad.subs(sl1).evalf() for grad in self.grad] + lap = self.lap.subs(sl1).evalf() + return v,g,lap + + def eval_contraction_v(self, x, y, z, basis): + vals = [] + # Expand each basis type by the angular momentum state + angular_list = self.ijk[basis.orbtype] + for i,j,k,name in angular_list: + val = 0.0 + for idx in range(basis.nbasis): + val += basis.contraction_coeff[idx] * self.eval_single_v(i,j,k,x,y,z,basis.zeta[idx]) + vals.append(val) + + return vals + + def eval_contraction_vgl(self, x, y, z, basis): + vals = [] + grads = [] + laps = [] + + angular_list = self.ijk[basis.orbtype] + for i,j,k,name in angular_list: + val = 0.0 + grad = [0.0, 0.0, 0.0] + lap = 0.0 + for idx in range(basis.nbasis): + c = basis.contraction_coeff[idx] + v,g,l = self.eval_single_vgl(i,j,k,x,y,z,basis.zeta[idx]) + val += c*v + lap += c*l + grad = [c*g[m] + grad[m] for m in range(3)] + vals.append(val) + grads.append(grad) + laps.append(lap) + return vals, grads, laps + + def eval_v(self, x, y, z): + vs = [] + for basis in self.basis: + v = self.eval_contraction_v(x, y, z, basis) + vs.extend(v) + return vs + + def eval_vgl(self, x, y, z): + vs = [] + grads = [] + lapls = [] + for basis in self.basis: + v,g,l = self.eval_contraction_vgl(x, y, z, basis) + vs.extend(v) + grads.extend(g) + lapls.extend(l) + return vs, grads, lapls + +# generated from qmcpack src/Numerics/codegen/read_order.py +# Only part of the function included for now +def get_ijk(): + ijk = [] + # S + ijk.append( (0,0,0,"S") ) + # P + ijk.append( (1,0,0,"X") ) + ijk.append( (0,1,0,"Y") ) + ijk.append( (0,0,1,"Z") ) + # D + ijk.append( (2,0,0,"XX") ) + ijk.append( (0,2,0,"YY") ) + ijk.append( (0,0,2,"ZZ") ) + ijk.append( (1,1,0,"XY") ) + ijk.append( (1,0,1,"XZ") ) + ijk.append( (0,1,1,"YZ") ) + + return ijk + +def get_ijk_by_type(): + ijk_list = get_ijk() + + by_type = defaultdict(list) + for i,j,k,name in ijk_list: + L = i + j + k + by_type[L].append((i,j,k,name)) + + return by_type + + +if __name__ == '__main__': + gto = GTO() diff --git a/src/QMCWaveFunctions/tests/gen_mo.py b/src/QMCWaveFunctions/tests/gen_mo.py new file mode 100644 index 000000000..25a256f54 --- /dev/null +++ b/src/QMCWaveFunctions/tests/gen_mo.py @@ -0,0 +1,29 @@ + +# Compute values for Gaussian Type Orbitals +# Used in test_MO.cpp + +import read_qmcpack +import gaussian_orbitals +import numpy as np + +def gen_He(): + basis_sets, MO_matrix = read_qmcpack.parse_qmc_wf("he_sto3g.wfj.xml") + gto = gaussian_orbitals.GTO(basis_sets['He']) + for pos in ([0.1, 0.0, 0.0], [1.0, 0.0, 0.0]): + atomic_orbs = gto.eval_v(*pos) + + print ' // Generated from gen_mo.py for position %s'%str(pos) + print ' REQUIRE(values[%d] == Approx(%15.10g));'%(0,atomic_orbs[0]) + print '' + + v,g,l = gto.eval_vgl(*pos) + print ' // Generated from gen_mo.py for position %s'%str(pos) + print ' REQUIRE(values[%d] == Approx(%15.10g));'%(0,v[0]) + print ' REQUIRE(dpsi[%d][0] == Approx(%15.10g));'%(0,g[0][0]) + print ' REQUIRE(dpsi[%d][1] == Approx(%15.10g));'%(0,g[0][1]) + print ' REQUIRE(dpsi[%d][2] == Approx(%15.10g));'%(0,g[0][2]) + print ' REQUIRE(d2psi[%d] == Approx(%15.10g));'%(0,l[0]) + print '' + +if __name__ == '__main__': + gen_He() diff --git a/src/QMCWaveFunctions/tests/he_sto3g.wfj.xml b/src/QMCWaveFunctions/tests/he_sto3g.wfj.xml new file mode 100644 index 000000000..e67e6930c --- /dev/null +++ b/src/QMCWaveFunctions/tests/he_sto3g.wfj.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + 1.00000000000000e+00 + + + + + + 1.00000000000000e+00 + + + + + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + + + 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 + + + + + + + + + + + + + + diff --git a/src/QMCWaveFunctions/tests/read_qmcpack.py b/src/QMCWaveFunctions/tests/read_qmcpack.py new file mode 100644 index 000000000..82d88391c --- /dev/null +++ b/src/QMCWaveFunctions/tests/read_qmcpack.py @@ -0,0 +1,91 @@ + +# Read parts of the QMCPACK XML input file + +import xml.etree.ElementTree as ET +from collections import namedtuple, defaultdict +import math +import gaussian_orbitals +import numpy as np + + +# Get the total number of basis functions after expanding the angular parts +def get_total_basis_functions(basis_set): + ijk_list = gaussian_orbitals.get_ijk() + angular_funcs = defaultdict(int) + for i,j,k,name in ijk_list: + L = i + j + k + angular_funcs[L] += 1 + + total = 0 + for cg in basis_set: + total += angular_funcs[cg.orbtype] + return total + +def read_basis_groups(atomic_basis_set): + basis_groups = atomic_basis_set.findall('basisGroup') + #print basis_groups + basis_set = [] + for basis_group in basis_groups: + if basis_group.attrib['type'] != 'Gaussian': + print 'Expecting Gaussian type basisGroup' + #print basis_group.attrib['n'] + n = int(basis_group.attrib['n']) + #print basis_group.attrib['l'] + ang_mom_l = int(basis_group.attrib['l']) + #print basis_group.attrib['type'] + zeta_list = [] + coef_list = [] + radfuncs = basis_group.findall('radfunc') + for radfunc in radfuncs: + zeta = float(radfunc.attrib['exponent']) + contraction_coef = float(radfunc.attrib['contraction']) + zeta_list.append(zeta) + coef_list.append(contraction_coef) + + cg = gaussian_orbitals.CG_basis(ang_mom_l, len(zeta_list), zeta_list, coef_list) + basis_set.append(cg) + + return basis_set + + +# Read the atomic basis set and MO coefficients + +def parse_qmc_wf(fname): + tree = ET.parse(fname) + + atomic_basis_sets = tree.findall('.//atomicBasisSet') + basis_sets = dict() + for atomic_basis_set in atomic_basis_sets: + element = atomic_basis_set.attrib['elementType'] + basis_set = read_basis_groups(atomic_basis_set) + basis_sets[element] = basis_set + + + basis_size = 0 + for element, basis_set in basis_sets.iteritems(): + basis_size += get_total_basis_functions(basis_set) + #print 'total basis size',basis_size + + # Just use the first one for now - assume up and down MO's are the same + MO_coeff_node = tree.find('.//determinant/coefficient') + MO_matrix = None + if MO_coeff_node is None: + print 'Molecular orbital coefficients not found' + else: + #print 'MO_coeff = ',MO_coeff_node + MO_size = int(MO_coeff_node.attrib['size']) + #print 'MO coeff size = ',MO_size + + MO_text = MO_coeff_node.text + MO_text_entries = MO_text.split() + MO_values = [float(a) for a in MO_text_entries] + + #MO_matrix = np.array(MO_values).reshape( (basis_size, MO_size) ) + MO_matrix = np.array(MO_values).reshape( (MO_size, basis_size) ) + #print 'MO_values = ',MO_values + + return basis_sets, MO_matrix + + +if __name__ == '__main__': + basis_set, MO_matrix = parse_qmc_wf('he_sto3g.wfj.xml') From 53fd5aef011cb46059059aba793e0c2e7f6e2233 Mon Sep 17 00:00:00 2001 From: Mark Dewing Date: Thu, 21 Jun 2018 16:35:06 -0500 Subject: [PATCH 4/7] Add unit test for GTO molecular orbitals. Test case is a He atom with STO-3G basis. The main body of the test is called twice - once to transform the GTO orbitals to numerical orbitals (default QMCPACK behavior). The other call evaluates the GTO form directly. The XML is modified in memory to avoid keeping two slighly different versions of the input file. The numerical orbital test fails in mixed precision. The quintic splines lose too much precision in the derivatives for small distances. The test is excluded from mixed precision builds. (Molecular calculations are usually done in full precision, so this is not too much of a restriction) --- src/QMCWaveFunctions/tests/CMakeLists.txt | 9 +- src/QMCWaveFunctions/tests/test_MO.cpp | 158 ++++++++++++++++++++++ 2 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 src/QMCWaveFunctions/tests/test_MO.cpp diff --git a/src/QMCWaveFunctions/tests/CMakeLists.txt b/src/QMCWaveFunctions/tests/CMakeLists.txt index 86f3db599..0b476ecd6 100644 --- a/src/QMCWaveFunctions/tests/CMakeLists.txt +++ b/src/QMCWaveFunctions/tests/CMakeLists.txt @@ -30,9 +30,16 @@ MAYBE_SYMLINK(${UTEST_HDF_INPUT} ${UTEST_DIR}/pwscf.pwscf.h5) MAYBE_SYMLINK(${UTEST_HDF_INPUT2} ${UTEST_DIR}/bccH.pwscf.h5) MAYBE_SYMLINK(${UTEST_HDF_INPUT3} ${UTEST_DIR}/LiH-arb.pwscf.h5) +EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/he_sto3g.wfj.xml" ${UTEST_DIR}) + + +IF ((NOT QMC_COMPLEX) AND (NOT QMC_MIXED_PRECISION)) + SET(MO_SRCS test_MO.cpp) +ENDIF() + ADD_EXECUTABLE(${UTEST_EXE} test_wf.cpp test_bspline_jastrow.cpp test_einset.cpp test_pw.cpp test_polynomial_eeI_jastrow.cpp test_dirac_det.cpp test_dirac_matrix.cpp - test_wavefunction_factory.cpp) + test_wavefunction_factory.cpp ${MO_SRCS}) TARGET_LINK_LIBRARIES(${UTEST_EXE} qmc qmcwfs qmcbase qmcutil ${QMC_UTIL_LIBS} ${MPI_LIBRARY}) ADD_UNIT_TEST(${UTEST_NAME} "${QMCPACK_UNIT_TEST_DIR}/${UTEST_EXE}") diff --git a/src/QMCWaveFunctions/tests/test_MO.cpp b/src/QMCWaveFunctions/tests/test_MO.cpp new file mode 100644 index 000000000..2351df92d --- /dev/null +++ b/src/QMCWaveFunctions/tests/test_MO.cpp @@ -0,0 +1,158 @@ +////////////////////////////////////////////////////////////////////////////////////// +// This file is distributed under the University of Illinois/NCSA Open Source License. +// See LICENSE file in top directory for details. +// +// Copyright (c) 2018 Jeongnim Kim and QMCPACK developers. +// +// File developed by: Mark Dewing, mdewing@anl.gov, Argonne National Laboratory +// +// File created by: Mark Dewing, mdewing@anl.gov, Argonne National Laboratory +////////////////////////////////////////////////////////////////////////////////////// + + +#include "catch.hpp" + +#include "Configuration.h" +#include "Message/Communicate.h" +#include "Numerics/OneDimGridBase.h" +#include "Particle/DistanceTableData.h" +#include "ParticleIO/XMLParticleIO.h" +#include "Numerics/GaussianBasisSet.h" +#ifdef ENABLE_SOA +#include "QMCWaveFunctions/lcao/LCAOrbitalBuilder.h" +#else +#include "QMCWaveFunctions/MolecularOrbitals/LocalizedBasisSet.h" +#include "QMCWaveFunctions/MolecularOrbitals/LCOrbitalSet.h" +#include "QMCWaveFunctions/MolecularOrbitals/SphericalBasisSet.h" +#include "QMCWaveFunctions/MolecularOrbitals/NGOBuilder.h" +#endif +#include "QMCWaveFunctions/SPOSetBuilderFactory.h" + +namespace qmcplusplus +{ + +void test_He(bool transform) +{ + std::ostringstream section_name; + section_name << "He, transform orbitals to grid: " << (transform ? "T":"F"); + + SECTION(section_name.str()) { + OHMMS::Controller->initialize(0, NULL); + Communicate *c = OHMMS::Controller; + + ParticleSet elec; + std::vector agroup(2); + agroup[0] = 1; + agroup[1] = 1; + elec.setName("e"); + elec.create(agroup); + elec.R[0] = 0.0; + + SpeciesSet &tspecies = elec.getSpeciesSet(); + int upIdx = tspecies.addSpecies("u"); + int downIdx = tspecies.addSpecies("d"); + int massIdx = tspecies.addAttribute("mass"); + tspecies(massIdx, upIdx) = 1.0; + tspecies(massIdx, downIdx) = 1.0; + + ParticleSet ions; + ions.setName("ion0"); + ions.create(1); + ions.R[0] = 0.0; + SpeciesSet &ispecies = ions.getSpeciesSet(); + int heIdx = ispecies.addSpecies("He"); + + + #ifdef ENABLE_SOA + elec.addTable(ions,DT_SOA); + #else + elec.addTable(ions,DT_AOS); + #endif + elec.update(); + + Libxml2Document doc; + bool okay = doc.parse("he_sto3g.wfj.xml"); + REQUIRE(okay); + xmlNodePtr root = doc.getRoot(); + + TrialWaveFunction psi(c); + + OrbitalBuilderBase::PtclPoolType particle_set_map; + particle_set_map["e"] = &elec; + particle_set_map["ion0"] = &ions; + + + SPOSetBuilderFactory bf(elec, psi, particle_set_map); + + OhmmsXPathObject MO_base("//determinantset", doc.getXPathContext()); + REQUIRE(MO_base.size() == 1); + if (transform) { + // input file is set to transform GTO's to numerical orbitals by default + } else { + // use direct evaluation of GTO's + xmlSetProp(MO_base[0], (const xmlChar *)"transform", (const xmlChar *)"no"); + xmlSetProp(MO_base[0], (const xmlChar *)"key", (const xmlChar *)"GTO"); + } + + SPOSetBuilder *bb = bf.createSPOSetBuilder(MO_base[0]); + REQUIRE(bb != NULL); + + OhmmsXPathObject slater_base("//determinant", doc.getXPathContext()); + bb->loadBasisSetFromXML(MO_base[0]); + SPOSetBase *sposet = bb->createSPOSet(slater_base[0]); + + //std::cout << "basis set size = " << sposet->getBasisSetSize() << std::endl; + + SPOSetBase::ValueVector_t values; + SPOSetBase::GradVector_t dpsi; + SPOSetBase::ValueVector_t d2psi; + values.resize(1); + dpsi.resize(1); + d2psi.resize(1); + + // Call makeMove to compute the distances + ParticleSet::SingleParticlePos_t newpos(0.0001, 0.0, 0.0); + elec.makeMove(0, newpos); + + sposet->evaluate(elec, 0, values); + + // Generated from gen_mo.py for position [0.0001, 0.0, 0.0] + REQUIRE(values[0] == Approx( 0.9996037001)); + + sposet->evaluate(elec, 0, values, dpsi, d2psi); + + // Generated from gen_mo.py for position [0.0001, 0.0, 0.0] + REQUIRE(values[0] == Approx( 0.9996037001)); + REQUIRE(dpsi[0][0] == Approx(-0.0006678035459)); + REQUIRE(dpsi[0][1] == Approx( 0)); + REQUIRE(dpsi[0][2] == Approx( 0)); + REQUIRE(d2psi[0] == Approx( -20.03410564)); + + + ParticleSet::SingleParticlePos_t disp(1.0, 0.0, 0.0); + elec.makeMove(0, disp); + + sposet->evaluate(elec, 0, values, dpsi, d2psi); + // Generated from gen_mo.py for position [1.0, 0.0, 0.0] + REQUIRE(values[0] == Approx( 0.2315567641)); + REQUIRE(dpsi[0][0] == Approx( -0.3805431885)); + REQUIRE(dpsi[0][1] == Approx( 0)); + REQUIRE(dpsi[0][2] == Approx( 0)); + REQUIRE(d2psi[0] == Approx( -0.2618497452)); + + SPOSetBuilderFactory::clear(); + } +} + +TEST_CASE("ReadMolecularOrbital GTO He","[wavefunction]") +{ + test_He(false); +} + +TEST_CASE("ReadMolecularOrbital Numerical He","[wavefunction]") +{ + test_He(true); +} + +} + From 91060b697f6c3345a6e654d495c59421cb16261f Mon Sep 17 00:00:00 2001 From: Mark Dewing Date: Fri, 22 Jun 2018 12:36:26 -0500 Subject: [PATCH 5/7] Convert LPQHI.eps figure to pdf. There is only one EPS file in the manual. Convert it to PDF, and remove the epsfig package. Addresses #888. --- manual/design_features.tex | 2 +- manual/figures/LPQHI.eps | 1117 ------------------------------------ manual/figures/LPQHI.pdf | Bin 0 -> 32667 bytes manual/qmcpack_manual.tex | 1 - 4 files changed, 1 insertion(+), 1119 deletions(-) delete mode 100644 manual/figures/LPQHI.eps create mode 100644 manual/figures/LPQHI.pdf diff --git a/manual/design_features.tex b/manual/design_features.tex index ce4d92962..c6dd08764 100644 --- a/manual/design_features.tex +++ b/manual/design_features.tex @@ -604,7 +604,7 @@ S = \end{equation} \begin{figure} \begin{center} -\epsfig{figure=./figures/LPQHI.eps,width=3.5in} +\includegraphics[width=3.5in]{figures/LPQHI.pdf} \caption{Basis functions $h_{j0}$, $h_{j1}$, and $h_{j2}$ are shown. We note at the left and right extremes, the values and first two derivatives of the functions are zero, while at the center, $h_{j0}$ diff --git a/manual/figures/LPQHI.eps b/manual/figures/LPQHI.eps deleted file mode 100644 index 2f9ccea26..000000000 --- a/manual/figures/LPQHI.eps +++ /dev/null @@ -1,1117 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: MATLAB, The Mathworks, Inc. -%%Title: LPQHI.eps -%%CreationDate: 06/29/2004 11:15:34 -%%DocumentNeededFonts: Helvetica -%%DocumentProcessColors: Cyan Magenta Yellow Black -%%LanguageLevel: 2 -%%Pages: 1 -%%BoundingBox: 54 179 548 583 -%%EndComments - -%%BeginProlog -% MathWorks dictionary -/MathWorks 160 dict begin -% definition operators -/bdef {bind def} bind def -/ldef {load def} bind def -/xdef {exch def} bdef -/xstore {exch store} bdef -% operator abbreviations -/c /clip ldef -/cc /concat ldef -/cp /closepath ldef -/gr /grestore ldef -/gs /gsave ldef -/mt /moveto ldef -/np /newpath ldef -/cm /currentmatrix ldef -/sm /setmatrix ldef -/rm /rmoveto ldef -/rl /rlineto ldef -/s {show newpath} bdef -/sc {setcmykcolor} bdef -/sr /setrgbcolor ldef -/sg /setgray ldef -/w /setlinewidth ldef -/j /setlinejoin ldef -/cap /setlinecap ldef -/rc {rectclip} bdef -/rf {rectfill} bdef -% page state control -/pgsv () def -/bpage {/pgsv save def} bdef -/epage {pgsv restore} bdef -/bplot /gsave ldef -/eplot {stroke grestore} bdef -% orientation switch -/portraitMode 0 def /landscapeMode 1 def /rotateMode 2 def -% coordinate system mappings -/dpi2point 0 def -% font control -/FontSize 0 def -/FMS {/FontSize xstore findfont [FontSize 0 0 FontSize neg 0 0] - makefont setfont} bdef -/reencode {exch dup where {pop load} {pop StandardEncoding} ifelse - exch dup 3 1 roll findfont dup length dict begin - { 1 index /FID ne {def}{pop pop} ifelse } forall - /Encoding exch def currentdict end definefont pop} bdef -/isroman {findfont /CharStrings get /Agrave known} bdef -/FMSR {3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse - exch FMS} bdef -/csm {1 dpi2point div -1 dpi2point div scale neg translate - dup landscapeMode eq {pop -90 rotate} - {rotateMode eq {90 rotate} if} ifelse} bdef -% line types: solid, dotted, dashed, dotdash -/SO { [] 0 setdash } bdef -/DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef -/DA { [6 dpi2point mul] 0 setdash } bdef -/DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 - dpi2point mul] 0 setdash } bdef -% macros for lines and objects -/L {lineto stroke} bdef -/MP {3 1 roll moveto 1 sub {rlineto} repeat} bdef -/AP {{rlineto} repeat} bdef -/PDlw -1 def -/W {/PDlw currentlinewidth def setlinewidth} def -/PP {closepath eofill} bdef -/DP {closepath stroke} bdef -/MR {4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto - neg 0 exch rlineto closepath} bdef -/FR {MR stroke} bdef -/PR {MR fill} bdef -/L1i {{currentfile picstr readhexstring pop} image} bdef -/tMatrix matrix def -/MakeOval {newpath tMatrix currentmatrix pop translate scale -0 0 1 0 360 arc tMatrix setmatrix} bdef -/FO {MakeOval stroke} bdef -/PO {MakeOval fill} bdef -/PD {currentlinewidth 2 div 0 360 arc fill - PDlw -1 eq not {PDlw w /PDlw -1 def} if} def -/FA {newpath tMatrix currentmatrix pop translate scale - 0 0 1 5 -2 roll arc tMatrix setmatrix stroke} bdef -/PA {newpath tMatrix currentmatrix pop translate 0 0 moveto scale - 0 0 1 5 -2 roll arc closepath tMatrix setmatrix fill} bdef -/FAn {newpath tMatrix currentmatrix pop translate scale - 0 0 1 5 -2 roll arcn tMatrix setmatrix stroke} bdef -/PAn {newpath tMatrix currentmatrix pop translate 0 0 moveto scale - 0 0 1 5 -2 roll arcn closepath tMatrix setmatrix fill} bdef -/vradius 0 def /hradius 0 def /lry 0 def -/lrx 0 def /uly 0 def /ulx 0 def /rad 0 def -/MRR {/vradius xdef /hradius xdef /lry xdef /lrx xdef /uly xdef - /ulx xdef newpath tMatrix currentmatrix pop ulx hradius add uly - vradius add translate hradius vradius scale 0 0 1 180 270 arc - tMatrix setmatrix lrx hradius sub uly vradius add translate - hradius vradius scale 0 0 1 270 360 arc tMatrix setmatrix - lrx hradius sub lry vradius sub translate hradius vradius scale - 0 0 1 0 90 arc tMatrix setmatrix ulx hradius add lry vradius sub - translate hradius vradius scale 0 0 1 90 180 arc tMatrix setmatrix - closepath} bdef -/FRR {MRR stroke } bdef -/PRR {MRR fill } bdef -/MlrRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lry uly sub 2 div def - newpath tMatrix currentmatrix pop ulx rad add uly rad add translate - rad rad scale 0 0 1 90 270 arc tMatrix setmatrix lrx rad sub lry rad - sub translate rad rad scale 0 0 1 270 90 arc tMatrix setmatrix - closepath} bdef -/FlrRR {MlrRR stroke } bdef -/PlrRR {MlrRR fill } bdef -/MtbRR {/lry xdef /lrx xdef /uly xdef /ulx xdef /rad lrx ulx sub 2 div def - newpath tMatrix currentmatrix pop ulx rad add uly rad add translate - rad rad scale 0 0 1 180 360 arc tMatrix setmatrix lrx rad sub lry rad - sub translate rad rad scale 0 0 1 0 180 arc tMatrix setmatrix - closepath} bdef -/FtbRR {MtbRR stroke } bdef -/PtbRR {MtbRR fill } bdef -/stri 6 array def /dtri 6 array def -/smat 6 array def /dmat 6 array def -/tmat1 6 array def /tmat2 6 array def /dif 3 array def -/asub {/ind2 exch def /ind1 exch def dup dup - ind1 get exch ind2 get sub exch } bdef -/tri_to_matrix { - 2 0 asub 3 1 asub 4 0 asub 5 1 asub - dup 0 get exch 1 get 7 -1 roll astore } bdef -/compute_transform { - dmat dtri tri_to_matrix tmat1 invertmatrix - smat stri tri_to_matrix tmat2 concatmatrix } bdef -/ds {stri astore pop} bdef -/dt {dtri astore pop} bdef -/db {2 copy /cols xdef /rows xdef mul dup 3 mul string - currentfile - 3 index 0 eq {/ASCIIHexDecode filter} - {/ASCII85Decode filter 3 index 2 eq {/RunLengthDecode filter} if } - ifelse exch readstring pop - dup 0 3 index getinterval /rbmap xdef - dup 2 index dup getinterval /gbmap xdef - 1 index dup 2 mul exch getinterval /bbmap xdef pop pop}bdef -/it {gs np dtri aload pop moveto lineto lineto cp c - cols rows 8 compute_transform - rbmap gbmap bbmap true 3 colorimage gr}bdef -/il {newpath moveto lineto stroke}bdef -currentdict end def -%%EndProlog - -%%BeginSetup -MathWorks begin - -0 cap - -end -%%EndSetup - -%%Page: 1 1 -%%BeginPageSetup -%%PageBoundingBox: 54 179 548 583 -MathWorks begin -bpage -%%EndPageSetup - -%%BeginObject: obj1 -bplot - -/dpi2point 12 def -portraitMode 0216 7344 csm - - 438 341 5926 4844 rc -91 dict begin %Colortable dictionary -/c0 { 0 0 0 sr} bdef -/c1 { 1 1 1 sr} bdef -/c2 { 1 0 0 sr} bdef -/c3 { 0 1 0 sr} bdef -/c4 { 0 0 1 sr} bdef -/c5 { 1 1 0 sr} bdef -/c6 { 1 0 1 sr} bdef -/c7 { 0 1 1 sr} bdef -c0 -1 j -1 sg - 0 0 6913 5186 rf -6 w -0 4226 5356 0 0 -4226 899 4615 4 MP -PP --5356 0 0 4226 5356 0 0 -4226 899 4615 5 MP stroke -4 w -DO -SO -6 w -0 sg - 899 4615 mt 6255 4615 L - 899 389 mt 6255 389 L - 899 4615 mt 899 389 L -6255 4615 mt 6255 389 L - 899 4615 mt 6255 4615 L - 899 4615 mt 899 389 L - 899 4615 mt 899 4561 L - 899 389 mt 899 442 L -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 216 FMSR - - 713 4850 mt -(-1) s -2238 4615 mt 2238 4561 L -2238 389 mt 2238 442 L -1962 4850 mt -(-0.5) s -3577 4615 mt 3577 4561 L -3577 389 mt 3577 442 L -3517 4850 mt -(0) s -4916 4615 mt 4916 4561 L -4916 389 mt 4916 442 L -4766 4850 mt -(0.5) s -6255 4615 mt 6255 4561 L -6255 389 mt 6255 442 L -6195 4850 mt -(1) s - 899 4422 mt 952 4422 L -6255 4422 mt 6201 4422 L - 618 4502 mt -(-1) s - 899 3462 mt 952 3462 L -6255 3462 mt 6201 3462 L - 438 3542 mt -(-0.5) s - 899 2502 mt 952 2502 L -6255 2502 mt 6201 2502 L - 744 2582 mt -(0) s - 899 1541 mt 952 1541 L -6255 1541 mt 6201 1541 L - 564 1621 mt -(0.5) s - 899 581 mt 952 581 L -6255 581 mt 6201 581 L - 744 661 mt -(1) s - 899 4615 mt 6255 4615 L - 899 389 mt 6255 389 L - 899 4615 mt 899 389 L -6255 4615 mt 6255 389 L -gs 899 389 5357 4227 rc -24 w -/c8 { 0.000000 0.000000 1.000000 sr} bdef -c8 -1 0 3 1 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 1 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 1 2 0 3 0 3 0 2 0 3 0 3 0 -2 1 3 0 3 0 3 0 2 0 3 0 3 1 2 0 -3 0 3 0 2 0 3 1 3 0 2 0 3 0 3 1 -2 0 3 0 3 0 2 1 3 0 3 0 2 1 3 0 -3 0 2 1 3 0 3 0 2 0 3 1 3 0 2 1 -3 0 3 0 3 1 2 0 3 0 3 1 2 0 3 1 -3 0 2 1 3 0 3 0 2 1 3 0 3 1 2 0 -3 1 3 0 2 1 3 0 3 1 2 0 3 1 3 1 -2 0 3 1 3 0 2 1 3 1 3 0 3 1 2 0 -3 1 3 1 2 0 3 1 3 1 2 0 3 1 3 1 -2 0 3 1 3 1 2 1 3 0 3 1 2 1 3 1 -3 0 2 1 3 1 3 1 2 1 3 1 3 0 2 1 -3 1 3 1 2 1 3 1 3 1 3 1 2 1 3 1 -3 1 2 0 3 1 3 1 2 1 3 1 3 1 2 1 -3 2 3 1 2 1 3 1 3 1 2 1 3 1 3 1 -2 1 3 1 3 1 2 2 3 1 3 1 2 1 3 1 -3 2 3 1 2 1 3 1 3 1 2 2 3 1 3 1 -2 2 3 1 3 1 2 2 3 1 3 1 2 2 3 1 -3 1 2 2 3 1 3 2 2 1 3 1 3 2 2 1 -3 2 3 1 2 2 3 1 3 2 2 1 3 2 3 1 -3 2 2 1 3 2 3 2 2 1 3 2 3 1 2 2 -3 2 3 1 2 2 3 2 3 1 2 2 3 2 3 2 -2 1 3 2 3 2 2 2 3 1 3 2 2 2 3 2 -3 2 2 1 3 2 3 2 3 2 2 2 3 2 3 2 -2 2 3 2 3 1 2 2 3 2 3 2 2 2 3 2 -3 2 2 2 3 2 3 2 2 2 3 2 3 3 2 2 -3 2 3 2 2 2 3 2 3 2 2 2 3 2 3 3 -2 2 3 2 3 2 3 2 2 3 3 2 3 2 2 2 -3 3 3 2 2 2 3 2 3 3 2 2 3 2 3 3 -2 2 3 2 3 3 2 2 3 2 3 3 2 2 3 3 -3 2 2 2 3 3 3 2 2 3 3 2 3 3 3 2 -2 3 3 2 3 3 5456 2193 300 MP stroke -2 2 3 3 3 2 2 3 3 2 3 3 2 3 3 2 -3 3 2 2 3 3 3 3 2 2 3 3 3 3 2 2 -3 3 3 3 2 2 3 3 3 3 2 2 3 3 3 3 -2 3 3 2 3 3 3 3 2 3 3 3 3 2 2 3 -3 3 3 3 2 3 3 3 3 2 2 3 3 3 3 3 -2 3 3 3 3 3 2 3 3 3 3 2 2 3 3 3 -3 3 2 3 3 3 3 3 2 3 3 3 3 3 3 3 -2 3 3 3 3 3 2 3 3 3 3 3 2 4 3 3 -3 3 2 3 3 3 3 3 2 3 3 3 3 3 2 3 -3 4 3 3 2 3 3 3 3 3 2 3 3 3 3 4 -2 3 3 3 3 3 2 3 3 4 3 3 3 3 2 3 -3 4 3 3 2 3 3 3 3 4 2 3 3 3 3 3 -2 4 3 3 3 3 2 4 3 3 3 3 2 4 3 3 -3 3 2 4 3 3 3 3 2 4 3 3 3 3 2 4 -3 3 3 3 3 4 2 3 3 4 3 3 2 3 3 4 -3 3 2 4 3 3 3 4 2 3 3 3 3 4 2 3 -3 4 3 3 2 4 3 3 3 4 2 3 3 4 3 3 -2 3 3 4 3 3 2 4 3 3 3 4 2 3 3 4 -3 3 3 4 2 3 3 4 3 3 2 4 3 4 3 3 -2 4 3 3 3 4 2 3 3 4 3 3 2 4 3 3 -3 4 2 3 3 4 3 4 2 3 3 4 3 3 2 4 -3 3 3 4 2 4 3 3 3 4 3 3 2 4 3 3 -3 4 2 4 3 3 3 4 2 3 3 4 3 4 2 3 -3 4 3 3 2 4 3 4 3 3 2 4 3 3 3 4 -2 4 3 3 3 4 2 3 3 4 3 4 2 3 3 4 -3 3 2 4 3 4 3 3 3 4 2 3 3 4 3 4 -2 3 3 4 3 3 2 4 3 4 3 3 2 4 3 3 -3 4 2 4 3 3 3 4 2 3 3 4 3 4 2 3 -3 4 3 3 2 4 3 3 3 4 2 4 3 3 3 4 -3 3 2 4 3 3 3 4 2 4 3 3 3 4 2 3 -3 4 3 3 2 4 3 4 3 3 2 4 3 3 3 4 -2 3 3 4 3 3 2 4 3 3 3 4 2 3 3 4 -3 3 2 4 3 3 3 4 3 3 2 4 3 3 3 4 -2 3 3 4 3 3 2 4 3 3 3 4 2 3 3 4 -3 3 2 4 3 3 3 4 2 3 3 3 3 4 2 3 -3 4 3 3 2 4 3 3 3 3 2 4 3 3 3 4 -2 3 3 3 3 4 3 3 2 4 3 3 3 3 2 4 -3 3 3 3 2 4 4656 1200 300 MP stroke -3 3 3 3 2 4 3 3 3 3 2 4 3 3 3 3 -2 3 3 4 3 3 2 3 3 4 3 3 2 3 3 3 -3 4 2 3 3 3 3 3 3 3 2 4 3 3 3 3 -2 3 3 3 3 4 2 3 3 3 3 3 2 3 3 3 -3 4 2 3 3 3 3 3 2 3 3 3 3 3 2 3 -3 3 3 3 2 3 3 4 3 3 2 3 3 3 3 3 -2 3 3 3 3 3 3 3 2 3 3 3 3 3 2 3 -3 3 3 2 2 3 3 3 3 3 2 3 3 3 3 3 -2 3 3 3 3 3 2 3 3 2 3 3 2 3 3 3 -3 3 2 3 3 2 3 3 2 3 3 3 3 2 3 3 -2 3 3 3 3 2 2 3 3 3 3 3 2 2 3 3 -3 3 2 2 3 3 3 3 2 2 3 3 3 3 2 2 -3 3 3 2 2 3 3 2 3 3 2 3 3 2 3 3 -2 2 3 3 3 2 2 3 3 2 3 3 3 2 2 3 -3 2 3 3 2 2 3 2 3 3 2 2 3 3 3 2 -2 2 3 3 3 2 2 2 3 3 3 2 2 2 3 3 -3 2 2 2 3 2 3 3 2 2 3 2 3 2 2 3 -3 2 3 2 3 2 2 2 3 2 3 3 2 2 3 2 -3 2 2 2 3 2 3 2 2 2 3 2 3 2 2 3 -3 2 3 2 2 2 3 2 3 2 2 2 3 2 3 1 -2 2 3 2 3 2 2 2 3 2 3 2 2 2 3 2 -3 2 3 1 2 2 3 2 3 2 2 2 3 1 3 2 -2 2 3 2 3 2 2 1 3 2 3 2 2 1 3 2 -3 2 2 1 3 2 3 2 2 1 3 2 3 2 2 1 -3 2 3 1 2 2 3 2 3 1 3 2 2 1 3 2 -3 1 2 2 3 1 3 2 2 1 3 2 3 1 2 1 -3 2 3 1 2 2 3 1 3 1 2 2 3 1 3 1 -2 2 3 1 3 1 2 2 3 1 3 1 2 1 3 2 -3 1 2 1 3 1 3 2 3 1 2 1 3 1 3 1 -2 1 3 2 3 1 2 1 3 1 3 1 2 1 3 1 -3 1 2 1 3 1 3 1 2 1 3 1 3 1 2 1 -3 1 3 1 2 1 3 1 3 1 2 1 3 1 3 1 -3 1 2 1 3 1 3 1 2 0 3 1 3 1 2 1 -3 1 3 1 2 0 3 1 3 1 2 1 3 1 3 0 -2 1 3 1 3 0 2 1 3 1 3 1 2 0 3 1 -3 1 2 0 3 1 3 1 2 0 3 1 3 0 3 1 -2 1 3 0 3 1 2 0 3 1 3 0 2 1 3 0 -3 1 2 1 3 0 3855 599 300 MP stroke -3 1 2 0 3 0 3 1 2 0 3 1 3 0 2 1 -3 0 3 1 2 0 3 0 3 1 2 0 3 1 3 0 -3 0 2 1 3 0 3 0 2 1 3 0 3 0 2 1 -3 0 3 0 2 1 3 0 3 0 2 0 3 1 3 0 -2 0 3 0 3 1 2 0 3 0 3 0 2 1 3 0 -3 0 2 0 3 0 3 1 2 0 3 0 3 0 3 0 -2 0 3 1 3 0 2 0 3 0 3 0 2 0 3 0 -3 1 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 1 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 -1 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 -1 -3 0 2 0 3 0 3 0 2 0 3 0 3 -1 2 0 -3 0 3 0 3 0 2 0 3 -1 3 0 2 0 3 0 -3 0 2 -1 3 0 3 0 2 0 3 -1 3 0 2 0 -3 0 3 -1 2 0 3 0 3 0 2 -1 3 0 3 0 -2 -1 3 0 3 0 2 -1 3 0 3 0 2 -1 3 0 -3 0 3 -1 2 0 3 -1 3 0 2 0 3 -1 3 0 -2 -1 3 0 3 -1 2 0 3 -1 3 0 2 0 3 -1 -3 0 2 -1 3 -1 3 0 2 -1 3 0 3 -1 2 0 -3 -1 3 0 2 -1 3 -1 3 0 3 -1 2 0 3 -1 -3 -1 2 0 3 -1 3 -1 2 0 3 -1 3 -1 2 -1 -3 0 3 -1 2 -1 3 0 3 -1 2 -1 3 -1 3 -1 -2 0 3 -1 3 -1 2 -1 3 -1 3 -1 2 0 3 -1 -3 -1 2 -1 3 -1 3 -1 3 -1 2 -1 3 -1 3 -1 -2 -1 3 -1 3 -1 2 -1 3 -1 3 -1 2 -1 3 -1 -3 -1 2 -1 3 -1 3 -1 2 -1 3 -1 3 -1 2 -1 -3 -1 3 -2 2 -1 3 -1 3 -1 2 -1 3 -1 3 -2 -3 -1 2 -1 3 -1 3 -2 2 -1 3 -1 3 -1 2 -2 -3 -1 3 -1 2 -2 3 -1 3 -1 2 -2 3 -1 3 -1 -2 -2 3 -1 3 -2 3054 685 300 MP stroke -2 -1 3 -1 3 -2 2 -1 3 -2 3 -1 2 -2 3 -1 -3 -2 2 -1 3 -2 3 -1 3 -2 2 -2 3 -1 3 -2 -2 -1 3 -2 3 -2 2 -1 3 -2 3 -2 2 -1 3 -2 -3 -2 2 -1 3 -2 3 -2 2 -1 3 -2 3 -2 2 -2 -3 -2 3 -1 2 -2 3 -2 3 -2 2 -2 3 -1 3 -2 -3 -2 2 -2 3 -2 3 -2 2 -2 3 -2 3 -2 2 -2 -3 -1 3 -2 2 -2 3 -2 3 -2 2 -2 3 -2 3 -2 -2 -3 3 -2 3 -2 2 -2 3 -2 3 -2 2 -2 3 -2 -3 -2 2 -2 3 -3 3 -2 2 -2 3 -2 3 -2 3 -2 -2 -3 3 -2 3 -2 2 -2 3 -3 3 -2 2 -2 3 -2 -3 -3 2 -2 3 -2 3 -3 2 -2 3 -2 3 -3 2 -2 -3 -2 3 -3 2 -2 3 -3 3 -2 2 -2 3 -3 3 -2 -2 -3 3 -2 3 -3 3 -2 2 -3 3 -2 3 -3 2 -2 -3 -3 3 -2 2 -3 3 -3 3 -2 2 -3 3 -2 3 -3 -2 -2 3 -3 3 -3 2 -2 3 -3 3 -3 2 -2 3 -3 -3 -3 2 -2 3 -3 3 -3 2 -3 3 -2 3 -3 2 -3 -3 -3 3 -2 3 -3 2 -3 3 -3 3 -2 2 -3 3 -3 -3 -3 2 -3 3 -3 3 -2 2 -3 3 -3 3 -3 2 -3 -3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 3 -2 3 -3 -2 -3 3 -3 3 -3 2 -3 3 -3 3 -3 3 -3 2 -3 -3 -3 3 -3 2 -3 3 -3 3 -4 2 -3 3 -3 3 -3 -2 -3 3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 3 -4 -3 -3 2 -3 3 -3 3 -3 2 -3 3 -4 3 -3 2 -3 -3 -3 3 -3 2 -4 3 -3 3 -3 3 -3 2 -3 3 -4 -3 -3 2 -3 3 -3 3 -4 2 -3 3 -3 3 -4 2 -3 -3 -3 3 -3 2 -4 3 -3 3 -3 2 -4 3 -3 3 -3 -2 -4 3 -3 3 -3 2 -4 3 -3 3 -3 2 -4 3 -3 -3 -4 3 -3 2 -3 3 -4 3 -3 2 -4 3 -3 3 -3 -2 -4 3 -3 3 -4 2 -3 3 -4 3 -3 2 -3 3 -4 -3 -3 2 -4 3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 -3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 3 -3 3 -4 -3 -3 2 -4 3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 -3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 3 -3 3 -4 -2 -4 3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 3 -4 -3 -3 2 -4 3 -3 3 -4 3 -3 2 -4 3 -4 3 -3 -2 -4 3 -3 3 -4 2 -3 3 -4 3 -4 2 -3 3 -4 -3 -3 2 -4 3 -4 3 -3 2 -4 3 -3 3 -4 2 -4 -3 -3 3 -4 2 -3 2254 1519 300 MP stroke -3 -4 3 -4 2 -3 3 -4 3 -3 2 -4 3 -4 3 -3 -3 -4 2 -3 3 -4 3 -4 2 -3 3 -4 3 -3 2 -4 -3 -4 3 -3 2 -4 3 -3 3 -4 2 -4 3 -3 3 -4 -2 -3 3 -4 3 -4 2 -3 3 -4 3 -3 2 -4 3 -4 -3 -3 2 -4 3 -3 3 -4 3 -3 2 -4 3 -4 3 -3 -2 -4 3 -3 3 -4 2 -3 3 -4 3 -4 2 -3 3 -4 -3 -3 2 -4 3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 -3 -3 3 -4 2 -4 3 -3 3 -4 2 -3 3 -4 3 -3 -3 -4 2 -3 3 -4 3 -3 2 -4 3 -3 3 -4 2 -3 -3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 3 -3 3 -4 -2 -3 3 -4 3 -3 2 -3 3 -4 3 -3 2 -4 3 -3 -3 -4 2 -3 3 -3 3 -4 2 -3 3 -4 3 -3 3 -3 -2 -4 3 -3 3 -3 2 -4 3 -3 3 -3 2 -4 3 -3 -3 -3 2 -4 3 -3 3 -3 2 -4 3 -3 3 -3 2 -4 -3 -3 3 -3 2 -3 3 -4 3 -3 2 -3 3 -3 3 -4 -2 -3 3 -3 3 -3 3 -4 2 -3 3 -3 3 -3 2 -3 -3 -4 3 -3 2 -3 3 -3 3 -3 2 -3 3 -3 3 -4 -2 -3 3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 3 -3 -3 -3 2 -4 3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 -3 -3 3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 3 -3 -3 -3 2 -3 3 -2 3 -3 2 -3 3 -3 3 -3 2 -3 -3 -3 3 -3 2 -3 3 -2 3 -3 2 -3 3 -3 3 -3 -2 -3 3 -2 3 -3 2 -3 3 -3 3 -3 3 -2 2 -3 -3 -3 3 -3 2 -2 3 -3 3 -3 2 -2 3 -3 3 -3 -2 -2 3 -3 3 -3 2 -2 3 -3 3 -3 2 -2 3 -3 -3 -2 2 -3 3 -3 3 -2 2 -3 3 -2 3 -3 2 -2 -3 -3 3 -2 2 -3 3 -2 3 -3 3 -2 2 -3 3 -2 -3 -3 2 -2 3 -2 3 -3 2 -2 3 -3 3 -2 2 -2 -3 -3 3 -2 2 -2 3 -3 3 -2 2 -2 3 -3 3 -2 -2 -2 3 -2 3 -3 2 -2 3 -2 3 -2 2 -3 3 -2 -3 -2 3 -2 2 -2 3 -3 3 -2 2 -2 3 -2 3 -2 -2 -2 3 -2 3 -2 2 -2 3 -3 3 -2 2 -2 3 -2 -3 -2 2 -2 3 -2 3 -2 2 -2 3 -2 3 -2 2 -2 -3 -1 3 -2 2 -2 3 -2 3 -2 2 -2 3 -2 3 -2 -3 -2 2 -1 3 -2 3 -2 2 -2 3 -2 3 -1 2 -2 -3 -2 3 -2 2 -1 3 -2 3 -2 2 -2 3 -1 3 -2 -2 -2 3 -1 3 -2 2 -2 3 -1 3 -2 2 -1 3 -2 -3 -2 2 -1 3 -2 1453 2380 300 MP stroke -3 -1 3 -2 2 -1 3 -2 3 -1 2 -2 3 -1 3 -2 -2 -1 3 -2 3 -1 2 -1 3 -2 3 -1 2 -2 3 -1 -3 -1 2 -2 3 -1 3 -1 2 -2 3 -1 3 -1 2 -2 -3 -1 3 -1 2 -2 3 -1 3 -1 2 -1 3 -1 3 -2 -3 -1 2 -1 3 -1 3 -1 2 -2 3 -1 3 -1 2 -1 -3 -1 3 -1 2 -1 3 -1 3 -1 2 -1 3 -1 3 -2 -2 -1 3 -1 3 -1 2 -1 3 -1 3 -1 2 0 3 -1 -3 -1 2 -1 3 -1 3 -1 3 -1 2 -1 3 -1 3 -1 -2 -1 3 0 3 -1 2 -1 3 -1 3 -1 2 -1 3 0 -3 -1 2 -1 3 -1 3 0 2 -1 3 -1 3 -1 2 0 -3 -1 3 -1 2 0 3 -1 3 -1 2 0 3 -1 3 -1 -2 0 3 -1 3 0 3 -1 2 -1 3 0 3 -1 2 0 -3 -1 3 -1 2 0 3 -1 3 0 2 -1 3 0 3 -1 -2 0 3 -1 3 0 2 -1 3 0 3 0 2 -1 3 0 -3 -1 2 0 3 -1 3 0 2 0 3 -1 3 0 3 0 -2 -1 3 0 3 -1 2 0 3 0 3 0 2 -1 3 0 -3 0 2 -1 3 0 3 0 2 -1 3 0 3 0 2 0 -3 -1 3 0 2 0 3 0 3 -1 2 0 3 0 3 0 -2 0 3 -1 3 0 2 0 3 0 3 0 3 0 2 -1 -3 0 3 0 2 0 3 0 3 0 2 0 3 -1 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 -1 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 -1 899 2502 208 MP stroke -/c9 { 0.000000 0.500000 0.000000 sr} bdef -c9 -1 0 3 1 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 3 1 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 1 -3 0 2 0 3 0 3 0 2 1 3 0 3 0 2 0 -3 0 3 1 2 0 3 0 3 0 2 1 3 0 3 0 -2 1 3 0 3 0 3 1 2 0 3 0 3 1 2 0 -3 0 3 1 2 0 3 1 3 0 2 1 3 0 3 1 -2 0 3 1 3 0 2 1 3 0 3 1 2 0 3 1 -3 1 2 0 3 1 3 0 2 1 3 1 3 0 2 1 -3 1 3 1 3 0 2 1 3 1 3 1 2 0 3 1 -3 1 2 1 3 1 3 1 2 0 3 1 3 1 2 1 -3 1 3 1 2 1 3 1 3 1 2 1 3 1 3 1 -2 1 3 2 3 1 2 1 3 1 3 1 3 1 2 1 -3 2 3 1 2 1 3 1 3 2 2 1 3 1 3 2 -2 1 3 1 3 2 2 1 3 2 3 1 2 2 3 1 -3 1 2 2 3 2 3 1 2 2 3 1 3 2 2 1 -3 2 3 2 2 1 3 2 3 2 3 2 2 1 3 2 -3 2 2 2 3 1 3 2 2 2 3 2 3 2 2 2 -3 2 3 2 2 2 3 2 3 2 2 2 3 2 3 2 -2 2 3 2 3 2 2 2 3 2 3 3 2 2 3 2 -3 2 3 3 2 2 3 2 3 2 2 3 3 2 3 2 -2 3 3 2 3 3 2 2 3 3 3 2 2 3 3 2 -3 3 2 2 3 3 3 2 2 3 3 3 3 2 2 3 -3 2 3 3 2 3 3 3 3 2 2 3 3 3 3 3 -3 3 2 2 3 3 3 3 2 3 3 3 3 3 2 3 -3 3 3 3 2 3 3 3 3 3 2 3 3 3 3 3 -2 3 3 3 3 4 2 3 3 3 3 3 2 3 3 4 -3 3 2 3 3 3 3 4 3 3 2 3 3 4 3 3 -2 3 3 4 3 3 2 4 3 3 3 4 2 3 3 4 -3 3 2 4 3 3 3 4 2 3 3 4 3 4 2 3 -3 4 3 4 2 3 3 4 3 4 2 3 3 4 3 4 -2 4 3 4 3 3 3 4 2 4 3 4 3 4 2 4 -3 4 3 3 2 4 3 4 3 4 2 4 3 4 3 4 -2 4 3 4 3 4 2 4 3 4 3 4 2 5 3 4 -3 4 2 4 3 4 3 4 2 4 3 5 3 4 3 4 -2 4 3 4 3 5 5456 1947 300 MP stroke -2 4 3 4 3 5 2 4 3 4 3 4 2 5 3 4 -3 4 2 5 3 4 3 5 2 4 3 4 3 5 2 4 -3 5 3 4 2 5 3 4 3 5 2 4 3 5 3 4 -2 5 3 4 3 5 3 4 2 5 3 4 3 5 2 5 -3 4 3 5 2 4 3 5 3 5 2 4 3 5 3 5 -2 4 3 5 3 5 2 4 3 5 3 5 2 4 3 5 -3 5 2 5 3 4 3 5 2 5 3 5 3 4 3 5 -2 5 3 5 3 5 2 4 3 5 3 5 2 5 3 5 -3 4 2 5 3 5 3 5 2 5 3 5 3 4 2 5 -3 5 3 5 2 5 3 5 3 5 2 4 3 5 3 5 -2 5 3 5 3 5 2 5 3 5 3 5 3 4 2 5 -3 5 3 5 2 5 3 5 3 5 2 5 3 5 3 5 -2 5 3 5 3 4 2 5 3 5 3 5 2 5 3 5 -3 5 2 5 3 5 3 5 2 5 3 5 3 4 2 5 -3 5 3 5 3 5 2 5 3 5 3 5 2 5 3 5 -3 4 2 5 3 5 3 5 2 5 3 5 3 5 2 5 -3 4 3 5 2 5 3 5 3 5 2 5 3 5 3 4 -2 5 3 5 3 5 2 5 3 5 3 4 2 5 3 5 -3 5 3 5 2 4 3 5 3 5 2 5 3 4 3 5 -2 5 3 5 3 4 2 5 3 5 3 4 2 5 3 5 -3 4 2 5 3 5 3 4 2 5 3 5 3 4 2 5 -3 5 3 4 2 5 3 4 3 5 3 4 2 5 3 5 -3 4 2 5 3 4 3 5 2 4 3 4 3 5 2 4 -3 5 3 4 2 5 3 4 3 4 2 5 3 4 3 4 -2 5 3 4 3 4 2 5 3 4 3 4 2 5 3 4 -3 4 2 4 3 4 3 5 3 4 2 4 3 4 3 4 -2 4 3 4 3 4 2 4 3 5 3 4 2 4 3 4 -3 4 2 3 3 4 3 4 2 4 3 4 3 4 2 4 -3 4 3 4 2 3 3 4 3 4 2 4 3 3 3 4 -3 4 2 4 3 3 3 4 2 3 3 4 3 4 2 3 -3 4 3 3 2 4 3 3 3 4 2 3 3 4 3 3 -2 3 3 4 3 3 2 3 3 4 3 3 2 3 3 3 -3 4 2 3 3 3 3 3 3 3 2 3 3 3 3 3 -2 3 3 3 3 3 2 3 3 3 3 3 2 3 3 3 -3 3 2 3 3 2 3 3 2 3 3 3 3 2 2 3 -3 3 3 2 2 3 3 2 3 3 2 2 3 3 3 2 -2 3 3 2 3 3 3 2 2 2 3 3 3 2 2 2 -3 2 3 3 2 2 4656 682 300 MP stroke -3 2 3 2 2 2 3 2 3 2 2 2 3 2 3 2 -2 2 3 2 3 2 2 2 3 1 3 2 2 2 3 2 -3 1 2 2 3 2 3 1 3 2 2 1 3 2 3 1 -2 2 3 1 3 2 2 1 3 1 3 2 2 1 3 1 -3 1 2 2 3 1 3 1 2 1 3 1 3 1 2 1 -3 1 3 1 2 1 3 1 3 1 2 0 3 1 3 1 -2 1 3 0 3 1 3 0 2 1 3 1 3 0 2 1 -3 0 3 0 2 1 3 0 3 0 2 1 3 0 3 0 -2 0 3 0 3 1 2 0 3 0 3 0 2 0 3 0 -3 0 2 -1 3 0 3 0 2 0 3 0 3 -1 3 0 -2 -1 3 0 3 0 2 -1 3 0 3 -1 2 0 3 -1 -3 -1 2 0 3 -1 3 -1 2 -1 3 -1 3 0 2 -1 -3 -1 3 -1 2 -1 3 -1 3 -1 2 -2 3 -1 3 -1 -2 -1 3 -1 3 -2 2 -1 3 -1 3 -2 3 -1 2 -2 -3 -1 3 -2 2 -1 3 -2 3 -2 2 -1 3 -2 3 -2 -2 -2 3 -2 3 -2 2 -2 3 -1 3 -2 2 -3 3 -2 -3 -2 2 -2 3 -2 3 -2 2 -3 3 -2 3 -2 2 -3 -3 -2 3 -2 3 -3 2 -2 3 -3 3 -3 2 -2 3 -3 -3 -3 2 -2 3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 -3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 3 -4 3 -3 -2 -3 3 -4 3 -3 2 -4 3 -3 3 -3 2 -4 3 -4 -3 -3 3 -4 2 -4 3 -3 3 -4 2 -4 3 -4 3 -4 -2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 2 -4 3 -4 -3 -4 2 -5 3 -4 3 -4 2 -5 3 -4 3 -5 2 -4 -3 -5 3 -4 2 -5 3 -4 3 -5 3 -5 2 -5 3 -4 -3 -5 2 -5 3 -5 3 -5 2 -5 3 -5 3 -5 2 -5 -3 -5 3 -5 2 -5 3 -6 3 -5 2 -5 3 -6 3 -5 -2 -5 3 -6 3 -5 2 -6 3 -5 3 -6 2 -6 3 -5 -3 -6 2 -6 3 -5 3 -6 3 -6 2 -6 3 -6 3 -6 -2 -6 3 -6 3 -6 2 -6 3 -6 3 -6 2 -6 3 -7 -3 -6 2 -6 3 -6 3 -7 2 -6 3 -7 3 -6 2 -7 -3 -6 3 -7 2 -6 3 -7 3 -7 2 -6 3 -7 3 -7 -3 -7 2 -6 3 -7 3 -7 2 -7 3 -7 3 -7 2 -7 -3 -7 3 -7 2 -7 3 -7 3 -8 2 -7 3 -7 3 -7 -2 -8 3 -7 3 -7 2 -8 3 -7 3 -8 2 -7 3 -8 -3 -7 2 -8 3 -7 3 -8 2 -8 3 -7 3 -8 3 -8 -2 -8 3 -7 3 -8 2 -8 3 -8 3 -8 2 -8 3 -8 -3 -8 2 -8 3 -8 3855 1559 300 MP stroke -3 -8 2 -8 3 -8 3 -8 2 -8 3 -9 3 -8 2 -8 -3 -8 3 -9 2 -8 3 -8 3 -9 2 -8 3 -9 3 -8 -3 -9 2 -8 3 -9 3 -8 2 -9 3 -8 3 -9 2 -9 -3 -8 3 -9 2 -9 3 -8 3 -9 2 -9 3 -9 3 -8 -2 -9 3 -9 3 -9 2 -9 3 -9 3 -9 2 -9 3 -9 -3 -9 2 -9 3 -9 3 -9 2 -9 3 -9 3 -9 3 -9 -2 -9 3 -9 3 -9 2 -10 3 -9 3 -9 2 -9 3 -9 -3 -10 2 -9 3 -9 3 -10 2 -9 3 -9 3 -9 2 -10 -3 -9 3 -10 2 -9 3 -9 3 -10 2 -9 3 -10 3 -9 -2 -9 3 -10 3 -9 3 -10 2 -9 3 -10 3 -9 2 -10 -3 -9 3 -10 2 -9 3 -10 3 -9 2 -10 3 -9 3 -10 -2 -10 3 -9 3 -10 2 -9 3 -10 3 -10 2 -9 3 -10 -3 -9 2 -10 3 -9 3 -10 2 -10 3 -9 3 -10 2 -9 -3 -10 3 -10 3 -9 2 -10 3 -10 3 -9 2 -10 3 -9 -3 -10 2 -9 3 -10 3 -10 2 -9 3 -10 3 -9 2 -10 -3 -10 3 -9 2 -10 3 -9 3 -10 2 -9 3 -10 3 -9 -2 -10 3 -9 3 -10 2 -9 3 -10 3 -9 3 -10 2 -9 -3 -9 3 -10 2 -9 3 -10 3 -9 2 -9 3 -10 3 -9 -2 -10 3 -9 3 -9 2 -9 3 -10 3 -9 2 -9 3 -10 -3 -9 2 -9 3 -9 3 -9 2 -10 3 -9 3 -9 2 -9 -3 -9 3 -9 3 -9 2 -9 3 -9 3 -9 2 -9 3 -9 -3 -9 2 -9 3 -9 3 -9 2 -9 3 -9 3 -9 2 -9 -3 -8 3 -9 2 -9 3 -9 3 -8 2 -9 3 -9 3 -8 -2 -9 3 -9 3 -8 2 -9 3 -8 3 -9 2 -8 3 -9 -3 -8 3 -9 2 -8 3 -9 3 -8 2 -8 3 -9 3 -8 -2 -8 3 -8 3 -9 2 -8 3 -8 3 -8 2 -8 3 -8 -3 -8 2 -8 3 -8 3 -8 2 -8 3 -8 3 -8 2 -8 -3 -8 3 -7 2 -8 3 -8 3 -8 3 -7 2 -8 3 -8 -3 -7 2 -8 3 -7 3 -8 2 -7 3 -8 3 -7 2 -8 -3 -7 3 -7 2 -8 3 -7 3 -7 2 -7 3 -8 3 -7 -2 -7 3 -7 3 -7 2 -7 3 -7 3 -7 2 -7 3 -7 -3 -7 2 -6 3 -7 3 -7 3 -7 2 -6 3 -7 3 -7 -2 -6 3 -7 3 -6 2 -7 3 -6 3 -7 2 -6 3 -7 -3 -6 2 -6 3 -6 3 -7 2 -6 3 -6 3 -6 2 -6 -3 -6 3 -6 2 -6 3 -6 3 -6 2 -6 3 -6 3 -6 -3 -5 2 -6 3 -6 3 -5 2 -6 3 -6 3 -5 2 -6 -3 -5 3 -6 2 -5 3 -5 3 -6 2 -5 3 -5 3 -6 -2 -5 3 -5 3 -5 3054 4050 300 MP stroke -2 -5 3 -5 3 -5 2 -5 3 -5 3 -5 2 -5 3 -5 -3 -4 2 -5 3 -5 3 -5 3 -4 2 -5 3 -4 3 -5 -2 -4 3 -5 3 -4 2 -5 3 -4 3 -4 2 -5 3 -4 -3 -4 2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 2 -4 -3 -4 3 -4 2 -4 3 -4 3 -3 2 -4 3 -4 3 -3 -3 -4 2 -4 3 -3 3 -3 2 -4 3 -3 3 -4 2 -3 -3 -3 3 -4 2 -3 3 -3 3 -3 2 -3 3 -3 3 -3 -2 -3 3 -3 3 -3 2 -3 3 -3 3 -3 2 -2 3 -3 -3 -3 2 -2 3 -3 3 -3 2 -2 3 -3 3 -2 3 -2 -2 -3 3 -2 3 -2 2 -3 3 -2 3 -2 2 -2 3 -2 -3 -2 2 -3 3 -2 3 -1 2 -2 3 -2 3 -2 2 -2 -3 -2 3 -2 2 -1 3 -2 3 -2 2 -1 3 -2 3 -1 -2 -2 3 -1 3 -2 3 -1 2 -1 3 -2 3 -1 2 -1 -3 -1 3 -1 2 -2 3 -1 3 -1 2 -1 3 -1 3 -1 -2 -1 3 0 3 -1 2 -1 3 -1 3 -1 2 0 3 -1 -3 -1 2 0 3 -1 3 0 2 -1 3 0 3 0 2 -1 -3 0 3 -1 3 0 2 0 3 0 3 0 2 -1 3 0 -3 0 2 0 3 0 3 0 2 0 3 1 3 0 2 0 -3 0 3 0 2 1 3 0 3 0 2 1 3 0 3 0 -2 1 3 0 3 1 2 1 3 0 3 1 3 0 2 1 -3 1 3 1 2 0 3 1 3 1 2 1 3 1 3 1 -2 1 3 1 3 1 2 1 3 1 3 1 2 2 3 1 -3 1 2 1 3 2 3 1 2 1 3 2 3 1 2 2 -3 1 3 2 2 1 3 2 3 1 3 2 2 2 3 1 -3 2 2 2 3 2 3 1 2 2 3 2 3 2 2 2 -3 2 3 2 2 2 3 2 3 2 2 2 3 2 3 2 -2 2 3 3 3 2 2 2 3 2 3 3 2 2 3 2 -3 3 3 2 2 3 3 2 3 3 2 2 3 3 3 2 -2 3 3 2 3 3 2 3 3 2 3 3 2 3 3 3 -3 2 2 3 3 3 3 3 2 3 3 3 3 3 2 3 -3 3 3 3 2 3 3 3 3 3 2 3 3 3 3 3 -3 3 2 3 3 4 3 3 2 3 3 3 3 4 2 3 -3 3 3 4 2 3 3 3 3 4 2 3 3 4 3 3 -2 4 3 3 3 4 2 3 3 4 3 4 2 3 3 4 -3 3 2 4 3 4 3 4 3 3 2 4 3 4 3 4 -2 3 3 4 3 4 2 4 3 4 3 4 2 4 3 4 -3 4 2 3 3 4 3 4 2 4 3 4 3 5 2 4 -3 4 3 4 2 4 2254 4027 300 MP stroke -3 4 3 4 2 4 3 4 3 5 2 4 3 4 3 4 -3 4 2 5 3 4 3 4 2 5 3 4 3 4 2 5 -3 4 3 4 2 5 3 4 3 4 2 5 3 4 3 5 -2 4 3 5 3 4 2 4 3 5 3 4 2 5 3 4 -3 5 2 5 3 4 3 5 3 4 2 5 3 4 3 5 -2 5 3 4 3 5 2 5 3 4 3 5 2 5 3 4 -3 5 2 5 3 4 3 5 2 5 3 4 3 5 2 5 -3 5 3 4 2 5 3 5 3 5 2 4 3 5 3 5 -3 5 2 5 3 4 3 5 2 5 3 5 3 5 2 5 -3 4 3 5 2 5 3 5 3 5 2 5 3 5 3 4 -2 5 3 5 3 5 2 5 3 5 3 5 2 5 3 4 -3 5 2 5 3 5 3 5 2 5 3 5 3 5 3 5 -2 5 3 4 3 5 2 5 3 5 3 5 2 5 3 5 -3 5 2 5 3 5 3 5 2 5 3 4 3 5 2 5 -3 5 3 5 2 5 3 5 3 5 2 5 3 5 3 5 -2 5 3 4 3 5 3 5 2 5 3 5 3 5 2 5 -3 5 3 5 2 4 3 5 3 5 2 5 3 5 3 5 -2 5 3 4 3 5 2 5 3 5 3 5 2 5 3 4 -3 5 2 5 3 5 3 5 2 4 3 5 3 5 2 5 -3 5 3 4 3 5 2 5 3 5 3 4 2 5 3 5 -3 5 2 4 3 5 3 5 2 4 3 5 3 5 2 4 -3 5 3 5 2 4 3 5 3 5 2 4 3 5 3 4 -2 5 3 5 3 4 2 5 3 4 3 5 3 4 2 5 -3 4 3 5 2 4 3 5 3 4 2 5 3 4 3 5 -2 4 3 5 3 4 2 4 3 5 3 4 2 5 3 4 -3 4 2 5 3 4 3 4 2 4 3 5 3 4 2 4 -3 5 3 4 2 4 3 4 3 4 3 5 2 4 3 4 -3 4 2 4 3 4 3 4 2 5 3 4 3 4 2 4 -3 4 3 4 2 4 3 4 3 4 2 4 3 4 3 4 -2 4 3 3 3 4 2 4 3 4 3 4 2 4 3 4 -3 3 3 4 2 4 3 4 3 4 2 3 3 4 3 4 -2 3 3 4 3 4 2 3 3 4 3 4 2 3 3 4 -3 3 2 4 3 3 3 4 2 3 3 4 3 3 2 4 -3 3 3 4 2 3 3 3 3 4 2 3 3 3 3 4 -3 3 2 3 3 3 3 4 2 3 3 3 3 3 2 3 -3 4 3 3 2 3 3 3 3 3 2 3 3 3 3 3 -2 3 3 3 3 3 2 3 3 3 3 3 2 3 3 3 -3 3 2 2 3 3 1453 2730 300 MP stroke -3 3 3 3 2 3 3 2 3 3 2 3 3 3 3 2 -2 3 3 2 3 3 2 3 3 2 3 3 2 2 3 3 -3 2 2 3 3 2 3 3 2 2 3 3 3 2 2 3 -3 2 3 2 2 3 3 2 3 2 2 2 3 3 3 2 -3 2 2 2 3 3 3 2 2 2 3 2 3 2 2 2 -3 2 3 2 2 2 3 2 3 2 2 2 3 2 3 2 -2 2 3 2 3 2 2 2 3 2 3 1 2 2 3 2 -3 2 2 1 3 2 3 2 3 2 2 1 3 2 3 2 -2 1 3 2 3 1 2 2 3 1 3 2 2 2 3 1 -3 1 2 2 3 1 3 2 2 1 3 2 3 1 2 1 -3 2 3 1 2 1 3 2 3 1 2 1 3 1 3 2 -2 1 3 1 3 1 3 1 2 1 3 1 3 2 2 1 -3 1 3 1 2 1 3 1 3 1 2 1 3 1 3 1 -2 1 3 1 3 1 2 0 3 1 3 1 2 1 3 1 -3 1 2 0 3 1 3 1 2 1 3 0 3 1 3 1 -2 1 3 0 3 1 2 1 3 0 3 1 2 0 3 1 -3 1 2 0 3 1 3 0 2 1 3 0 3 1 2 0 -3 1 3 0 2 1 3 0 3 1 2 0 3 1 3 0 -2 0 3 1 3 0 2 0 3 1 3 0 3 0 2 1 -3 0 3 0 2 1 3 0 3 0 2 0 3 1 3 0 -2 0 3 0 3 0 2 1 3 0 3 0 2 0 3 0 -3 1 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 1 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 899 2502 208 MP stroke -/c10 { 1.000000 0.000000 0.000000 sr} bdef -c10 -1 0 3 1 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 1 3 0 3 0 -2 0 3 0 3 0 2 0 3 1 3 0 2 0 3 0 -3 0 2 1 3 0 3 0 2 0 3 0 3 1 2 0 -3 0 3 1 2 0 3 0 3 1 2 0 3 0 3 1 -2 0 3 0 3 1 3 0 2 1 3 0 3 1 2 0 -3 1 3 0 2 1 3 0 3 1 2 0 3 1 3 0 -2 1 3 1 3 0 2 1 3 0 3 1 2 1 3 1 -3 0 2 1 3 1 3 1 2 0 3 1 3 1 2 1 -3 1 3 1 3 0 2 1 3 1 3 1 2 1 3 1 -3 1 2 1 3 1 3 1 2 1 3 1 3 2 2 1 -3 1 3 1 2 1 3 1 3 2 2 1 3 1 3 1 -2 2 3 1 3 1 2 2 3 1 3 1 3 2 2 1 -3 2 3 1 2 2 3 1 3 2 2 1 3 2 3 1 -2 2 3 2 3 1 2 2 3 2 3 1 2 2 3 2 -3 2 2 1 3 2 3 2 2 2 3 2 3 2 2 2 -3 2 3 2 2 1 3 2 3 3 3 2 2 2 3 2 -3 2 2 2 3 2 3 2 2 2 3 3 3 2 2 2 -3 2 3 3 2 2 3 2 3 3 2 2 3 2 3 3 -2 2 3 3 3 2 2 3 3 2 3 3 2 2 3 3 -3 2 3 3 2 2 3 3 3 3 2 3 3 2 3 3 -2 3 3 2 3 3 2 3 3 3 3 3 2 3 3 2 -3 3 2 3 3 3 3 3 2 3 3 3 3 3 2 3 -3 3 3 3 2 4 3 3 3 3 2 3 3 3 3 3 -3 4 2 3 3 3 3 3 2 4 3 3 3 3 2 4 -3 3 3 3 2 4 3 3 3 4 2 3 3 4 3 3 -2 4 3 3 3 4 2 3 3 4 3 3 2 4 3 4 -3 3 2 4 3 4 3 3 3 4 2 4 3 3 3 4 -2 4 3 4 3 4 2 3 3 4 3 4 2 4 3 4 -3 4 2 4 3 4 3 4 2 3 3 4 3 4 2 4 -3 4 3 5 2 4 3 4 3 4 2 4 3 4 3 4 -2 4 3 4 3 4 3 5 2 4 3 4 3 4 2 4 -3 5 3 4 2 4 3 4 3 5 2 4 3 4 3 5 -2 4 3 4 3 5 2 4 3 4 3 5 2 4 3 5 -3 4 2 4 3 5 3 4 2 5 3 4 3 5 3 4 -2 5 3 4 3 5 5456 1875 300 MP stroke -2 4 3 5 3 4 2 5 3 4 3 5 2 5 3 4 -3 5 2 4 3 5 3 5 2 4 3 5 3 5 2 4 -3 5 3 4 2 5 3 5 3 4 2 5 3 5 3 5 -2 4 3 5 3 5 3 4 2 5 3 5 3 4 2 5 -3 5 3 5 2 4 3 5 3 5 2 5 3 4 3 5 -2 5 3 5 3 4 2 5 3 5 3 5 2 5 3 4 -3 5 2 5 3 5 3 4 2 5 3 5 3 5 3 5 -2 4 3 5 3 5 2 5 3 4 3 5 2 5 3 5 -3 5 2 4 3 5 3 5 2 5 3 4 3 5 2 5 -3 5 3 4 2 5 3 5 3 5 2 4 3 5 3 5 -2 5 3 4 3 5 2 5 3 5 3 4 3 5 2 5 -3 4 3 5 2 5 3 4 3 5 2 5 3 4 3 5 -2 5 3 4 3 5 2 5 3 4 3 5 2 5 3 4 -3 5 2 4 3 5 3 4 2 5 3 5 3 4 2 5 -3 4 3 5 3 4 2 5 3 4 3 5 2 4 3 5 -3 4 2 4 3 5 3 4 2 5 3 4 3 4 2 5 -3 4 3 4 2 5 3 4 3 4 2 5 3 4 3 4 -2 4 3 5 3 4 2 4 3 4 3 4 2 5 3 4 -3 4 3 4 2 4 3 4 3 4 2 4 3 4 3 4 -2 4 3 4 3 4 2 4 3 4 3 4 2 4 3 4 -3 4 2 4 3 3 3 4 2 4 3 4 3 4 2 3 -3 4 3 4 2 3 3 4 3 4 3 3 2 4 3 3 -3 4 2 4 3 3 3 4 2 3 3 4 3 3 2 3 -3 4 3 3 2 4 3 3 3 3 2 4 3 3 3 3 -2 3 3 3 3 4 2 3 3 3 3 3 2 3 3 3 -3 3 2 3 3 3 3 3 3 3 2 3 3 3 3 3 -2 3 3 2 3 3 2 3 3 3 3 2 2 3 3 3 -3 2 2 3 3 3 3 2 2 3 3 2 3 3 2 2 -3 3 3 2 2 2 3 3 3 2 2 2 3 3 3 2 -3 2 2 2 3 2 3 2 2 3 3 2 3 2 2 2 -3 2 3 2 2 2 3 1 3 2 2 2 3 2 3 2 -2 1 3 2 3 2 2 1 3 2 3 2 2 1 3 2 -3 1 2 2 3 1 3 2 3 1 2 1 3 2 3 1 -2 1 3 1 3 1 2 2 3 1 3 1 2 1 3 1 -3 1 2 1 3 1 3 1 2 1 3 0 3 1 2 1 -3 1 3 0 2 1 3 1 3 0 2 1 3 0 3 1 -2 0 3 1 3 0 3 0 2 1 3 0 3 0 2 1 -3 0 3 0 2 0 4656 842 300 MP stroke -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 -1 3 0 2 0 3 -1 3 0 2 0 3 -1 -3 0 2 -1 3 0 3 -1 3 0 2 -1 3 -1 3 -1 -2 0 3 -1 3 -1 2 -1 3 -1 3 -1 2 -1 3 -1 -3 -1 2 -1 3 -1 3 -1 2 -1 3 -1 3 -2 2 -1 -3 -1 3 -2 2 -1 3 -1 3 -2 2 -1 3 -2 3 -2 -2 -1 3 -2 3 -1 3 -2 2 -2 3 -2 3 -2 2 -1 -3 -2 3 -2 2 -2 3 -2 3 -2 2 -2 3 -2 3 -3 -2 -2 3 -2 3 -2 2 -3 3 -2 3 -2 2 -3 3 -2 -3 -3 2 -2 3 -3 3 -2 2 -3 3 -2 3 -3 3 -3 -2 -3 3 -2 3 -3 2 -3 3 -3 3 -3 2 -3 3 -3 -3 -3 2 -3 3 -3 3 -3 2 -3 3 -4 3 -3 2 -3 -3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 3 -3 3 -4 -2 -3 3 -4 3 -3 2 -4 3 -4 3 -4 3 -3 2 -4 -3 -4 3 -4 2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 -2 -4 3 -4 3 -4 2 -4 3 -5 3 -4 2 -4 3 -5 -3 -4 2 -4 3 -5 3 -4 2 -5 3 -4 3 -5 2 -4 -3 -5 3 -4 3 -5 2 -5 3 -4 3 -5 2 -5 3 -5 -3 -5 2 -4 3 -5 3 -5 2 -5 3 -5 3 -5 2 -5 -3 -5 3 -5 2 -5 3 -6 3 -5 2 -5 3 -5 3 -5 -2 -6 3 -5 3 -5 2 -6 3 -5 3 -5 2 -6 3 -5 -3 -6 3 -5 2 -6 3 -5 3 -6 2 -5 3 -6 3 -6 -2 -5 3 -6 3 -6 2 -5 3 -6 3 -6 2 -5 3 -6 -3 -6 2 -6 3 -6 3 -6 2 -6 3 -5 3 -6 2 -6 -3 -6 3 -6 2 -6 3 -6 3 -6 3 -6 2 -7 3 -6 -3 -6 2 -6 3 -6 3 -6 2 -6 3 -7 3 -6 2 -6 -3 -6 3 -6 2 -7 3 -6 3 -6 2 -6 3 -7 3 -6 -2 -6 3 -7 3 -6 2 -6 3 -7 3 -6 2 -7 3 -6 -3 -6 2 -7 3 -6 3 -7 3 -6 2 -7 3 -6 3 -6 -2 -7 3 -6 3 -7 2 -6 3 -7 3 -6 2 -7 3 -6 -3 -7 2 -6 3 -7 3 -6 2 -7 3 -6 3 -7 2 -6 -3 -7 3 -6 2 -7 3 -6 3 -7 2 -6 3 -7 3 -6 -3 -7 2 -6 3 -7 3 -6 2 -7 3 -6 3 -7 2 -6 -3 -7 3 -6 2 -7 3 -6 3 -6 2 -7 3 -6 3 -7 -2 -6 3 -6 3 -7 2 -6 3 -6 3 -7 2 -6 3 -6 -3 -7 2 -6 3 -6 3 -6 2 -7 3 -6 3 -6 3 -6 -2 -6 3 -7 3 -6 2 -6 3 -6 3 -6 2 -6 3 -6 -3 -6 2 -6 3 -6 3855 2128 300 MP stroke -3 -6 2 -6 3 -6 3 -5 2 -6 3 -6 3 -6 2 -6 -3 -5 3 -6 2 -6 3 -5 3 -6 2 -5 3 -6 3 -5 -3 -6 2 -5 3 -6 3 -5 2 -5 3 -6 3 -5 2 -5 -3 -5 3 -6 2 -5 3 -5 3 -5 2 -5 3 -5 3 -5 -2 -4 3 -5 3 -5 2 -5 3 -4 3 -5 2 -5 3 -4 -3 -5 2 -4 3 -5 3 -4 2 -4 3 -4 3 -5 3 -4 -2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 2 -3 3 -4 -3 -4 2 -3 3 -4 3 -3 2 -4 3 -3 3 -3 2 -4 -3 -3 3 -3 2 -3 3 -3 3 -3 2 -2 3 -3 3 -3 -2 -3 3 -2 3 -3 3 -2 2 -2 3 -3 3 -2 2 -2 -3 -2 3 -2 2 -2 3 -1 3 -2 2 -2 3 -1 3 -2 -2 -1 3 -1 3 -2 2 -1 3 -1 3 -1 2 -1 3 0 -3 -1 2 -1 3 0 3 -1 2 0 3 0 3 0 2 -1 -3 1 3 0 3 0 2 0 3 1 3 0 2 1 3 1 -3 0 2 1 3 1 3 1 2 1 3 2 3 1 2 1 -3 2 3 1 2 2 3 2 3 1 2 2 3 2 3 2 -2 2 3 2 3 3 2 2 3 2 3 3 3 2 2 3 -3 3 3 3 2 2 3 3 3 3 2 3 3 3 3 3 -2 4 3 3 3 3 2 4 3 3 3 4 2 3 3 4 -3 4 2 3 3 4 3 4 2 4 3 4 3 4 2 4 -3 4 3 5 3 4 2 4 3 4 3 5 2 4 3 5 -3 4 2 5 3 5 3 4 2 5 3 5 3 5 2 4 -3 5 3 5 2 5 3 5 3 5 2 5 3 6 3 5 -2 5 3 5 3 6 2 5 3 5 3 6 2 5 3 6 -3 5 3 6 2 5 3 6 3 5 2 6 3 6 3 5 -2 6 3 6 3 6 2 6 3 5 3 6 2 6 3 6 -3 6 2 6 3 6 3 6 2 6 3 6 3 6 2 6 -3 6 3 7 2 6 3 6 3 6 3 6 2 7 3 6 -3 6 2 6 3 7 3 6 2 6 3 7 3 6 2 6 -3 7 3 6 2 6 3 7 3 6 2 7 3 6 3 6 -2 7 3 6 3 7 2 6 3 7 3 6 2 7 3 6 -3 7 2 6 3 7 3 6 3 7 2 6 3 7 3 6 -2 7 3 6 3 7 2 6 3 7 3 6 2 7 3 6 -3 7 2 6 3 7 3 6 2 7 3 6 3 7 2 6 -3 7 3 6 2 7 3 6 3 6 2 7 3 6 3 7 -3 6 2 7 3 6 3 6 2 7 3 6 3 7 2 6 -3 6 3 7 2 6 3 6 3 7 2 6 3 6 3 6 -2 7 3 6 3 6 3054 1549 300 MP stroke -2 6 3 6 3 7 2 6 3 6 3 6 2 6 3 6 -3 6 2 7 3 6 3 6 3 6 2 6 3 6 3 6 -2 6 3 6 3 5 2 6 3 6 3 6 2 6 3 6 -3 6 2 5 3 6 3 6 2 5 3 6 3 6 2 5 -3 6 3 6 2 5 3 6 3 5 2 6 3 5 3 6 -3 5 2 6 3 5 3 5 2 6 3 5 3 5 2 6 -3 5 3 5 2 5 3 5 3 6 2 5 3 5 3 5 -2 5 3 5 3 5 2 5 3 5 3 5 2 4 3 5 -3 5 2 5 3 5 3 4 2 5 3 5 3 4 3 5 -2 4 3 5 3 4 2 5 3 4 3 5 2 4 3 4 -3 5 2 4 3 4 3 5 2 4 3 4 3 4 2 4 -3 4 3 4 2 4 3 4 3 4 2 4 3 4 3 4 -2 4 3 3 3 4 3 4 2 4 3 3 3 4 2 3 -3 4 3 3 2 4 3 3 3 4 2 3 3 4 3 3 -2 3 3 3 3 4 2 3 3 3 3 3 2 3 3 3 -3 3 2 3 3 3 3 3 2 3 3 3 3 2 2 3 -3 3 3 3 3 2 2 3 3 2 3 3 2 2 3 3 -3 2 2 3 3 2 3 2 2 3 3 2 3 2 2 2 -3 3 3 2 2 2 3 2 3 2 2 2 3 2 3 2 -2 1 3 2 3 2 2 2 3 2 3 1 3 2 2 1 -3 2 3 2 2 1 3 2 3 1 2 1 3 2 3 1 -2 1 3 2 3 1 2 1 3 1 3 1 2 1 3 1 -3 1 2 1 3 1 3 1 2 1 3 1 3 1 2 0 -3 1 3 1 2 1 3 0 3 1 3 0 2 1 3 0 -3 1 2 0 3 0 3 1 2 0 3 0 3 1 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 -1 3 0 3 0 2 -1 3 0 -3 0 3 -1 2 0 3 -1 3 0 2 -1 3 0 3 -1 -2 -1 3 0 3 -1 2 -1 3 -1 3 0 2 -1 3 -1 -3 -1 2 -1 3 -1 3 -1 2 -1 3 -1 3 -1 2 -2 -3 -1 3 -1 2 -1 3 -1 3 -2 2 -1 3 -1 3 -2 -3 -1 2 -2 3 -1 3 -2 2 -1 3 -2 3 -2 2 -1 -3 -2 3 -2 2 -1 3 -2 3 -2 2 -2 3 -2 3 -1 -2 -2 3 -2 3 -2 2 -2 3 -2 3 -2 2 -3 3 -2 -3 -2 2 -2 3 -2 3 -2 3 -3 2 -2 3 -2 3 -3 -2 -2 3 -2 3 -3 2 -2 3 -3 3 -2 2 -3 3 -2 -3 -3 2 -3 3 -2 3 -3 2 -3 3 -2 3 -3 2 -3 -3 -3 3 -2 2 -3 2254 983 300 MP stroke -3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 3 -3 3 -3 -3 -3 2 -3 3 -3 3 -3 2 -3 3 -4 3 -3 2 -3 -3 -3 3 -3 2 -4 3 -3 3 -3 2 -4 3 -3 3 -4 -2 -3 3 -3 3 -4 2 -3 3 -4 3 -3 2 -4 3 -4 -3 -3 2 -4 3 -3 3 -4 3 -4 2 -3 3 -4 3 -4 -2 -3 3 -4 3 -4 2 -4 3 -4 3 -3 2 -4 3 -4 -3 -4 2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 2 -4 -3 -4 3 -4 2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 -3 -4 2 -5 3 -4 3 -4 2 -4 3 -4 3 -5 2 -4 -3 -4 3 -4 2 -5 3 -4 3 -4 2 -5 3 -4 3 -4 -2 -5 3 -4 3 -4 2 -5 3 -4 3 -5 2 -4 3 -4 -3 -5 2 -4 3 -5 3 -4 2 -5 3 -4 3 -5 3 -4 -2 -5 3 -4 3 -5 2 -5 3 -4 3 -5 2 -4 3 -5 -3 -4 2 -5 3 -5 3 -4 2 -5 3 -5 3 -4 2 -5 -3 -5 3 -4 2 -5 3 -5 3 -4 2 -5 3 -5 3 -4 -2 -5 3 -5 3 -4 3 -5 2 -5 3 -5 3 -4 2 -5 -3 -5 3 -5 2 -4 3 -5 3 -5 2 -5 3 -4 3 -5 -2 -5 3 -5 3 -4 2 -5 3 -5 3 -5 2 -4 3 -5 -3 -5 2 -5 3 -5 3 -4 2 -5 3 -5 3 -5 2 -4 -3 -5 3 -5 3 -5 2 -5 3 -4 3 -5 2 -5 3 -5 -3 -4 2 -5 3 -5 3 -5 2 -5 3 -4 3 -5 2 -5 -3 -5 3 -4 2 -5 3 -5 3 -5 2 -4 3 -5 3 -5 -2 -5 3 -4 3 -5 2 -5 3 -4 3 -5 3 -5 2 -4 -3 -5 3 -5 2 -5 3 -4 3 -5 2 -5 3 -4 3 -5 -2 -4 3 -5 3 -5 2 -4 3 -5 3 -5 2 -4 3 -5 -3 -4 2 -5 3 -5 3 -4 2 -5 3 -4 3 -5 2 -4 -3 -5 3 -4 2 -5 3 -4 3 -5 3 -4 2 -5 3 -4 -3 -5 2 -4 3 -4 3 -5 2 -4 3 -5 3 -4 2 -4 -3 -5 3 -4 2 -4 3 -5 3 -4 2 -4 3 -5 3 -4 -2 -4 3 -4 3 -5 2 -4 3 -4 3 -4 2 -4 3 -5 -3 -4 3 -4 2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 -2 -4 3 -5 3 -4 2 -4 3 -4 3 -4 2 -3 3 -4 -3 -4 2 -4 3 -4 3 -4 2 -4 3 -4 3 -4 2 -3 -3 -4 3 -4 2 -4 3 -4 3 -3 2 -4 3 -4 3 -3 -3 -4 2 -4 3 -3 3 -4 2 -4 3 -3 3 -4 2 -3 -3 -4 3 -3 2 -4 3 -3 3 -4 2 -3 3 -4 3 -3 -2 -4 3 -3 3 -3 2 -4 3 -3 3 -3 2 -4 3 -3 -3 -3 2 -3 3 -4 1453 2234 300 MP stroke -3 -3 3 -3 2 -3 3 -3 3 -3 2 -4 3 -3 3 -3 -2 -3 3 -3 3 -3 2 -3 3 -3 3 -3 2 -3 3 -3 -3 -2 2 -3 3 -3 3 -3 2 -3 3 -3 3 -2 2 -3 -3 -3 3 -2 2 -3 3 -3 3 -3 2 -2 3 -3 3 -2 -3 -3 2 -2 3 -3 3 -2 2 -3 3 -2 3 -3 2 -2 -3 -3 3 -2 2 -2 3 -3 3 -2 2 -2 3 -3 3 -2 -2 -2 3 -2 3 -3 2 -2 3 -2 3 -2 2 -2 3 -2 -3 -2 2 -2 3 -2 3 -3 3 -2 2 -1 3 -2 3 -2 -2 -2 3 -2 3 -2 2 -2 3 -2 3 -2 2 -1 3 -2 -3 -2 2 -2 3 -1 3 -2 2 -2 3 -1 3 -2 2 -2 -3 -1 3 -2 2 -1 3 -2 3 -1 2 -2 3 -1 3 -2 -2 -1 3 -2 3 -1 3 -1 2 -2 3 -1 3 -1 2 -2 -3 -1 3 -1 2 -1 3 -2 3 -1 2 -1 3 -1 3 -1 -2 -1 3 -2 3 -1 2 -1 3 -1 3 -1 2 -1 3 -1 -3 -1 2 -1 3 -1 3 -1 2 -1 3 0 3 -1 3 -1 -2 -1 3 -1 3 -1 2 0 3 -1 3 -1 2 -1 3 0 -3 -1 2 -1 3 -1 3 0 2 -1 3 0 3 -1 2 -1 -3 0 3 -1 2 0 3 -1 3 0 2 -1 3 0 3 -1 -2 0 3 -1 3 0 2 -1 3 0 3 -1 3 0 2 0 -3 -1 3 0 2 0 3 -1 3 0 2 0 3 -1 3 0 -2 0 3 -1 3 0 2 0 3 0 3 0 2 -1 3 0 -3 0 2 0 3 0 3 -1 2 0 3 0 3 0 2 0 -3 0 3 0 3 -1 2 0 3 0 3 0 2 0 3 0 -3 0 2 0 3 0 3 0 2 0 3 0 3 0 2 0 -3 0 3 0 2 0 3 0 3 0 2 0 3 0 3 0 -2 0 3 0 3 0 2 0 3 0 3 0 2 -1 899 2502 208 MP stroke -gr - -24 w -c10 -0 sg -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 240 FMSR - -3406 5036 mt -(r-r) s -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 192 FMSR - -3706 5156 mt -(j) s -6 w -1 sg -0 1123 1444 0 0 -1123 4641 4472 4 MP -PP --1444 0 0 1123 1444 0 0 -1123 4641 4472 5 MP stroke -4 w -DO -SO -6 w -0 sg -4641 4472 mt 6085 4472 L -4641 3349 mt 6085 3349 L -4641 4472 mt 4641 3349 L -6085 4472 mt 6085 3349 L -4641 4472 mt 6085 4472 L -4641 4472 mt 4641 3349 L -4641 4472 mt 6085 4472 L -4641 3349 mt 6085 3349 L -4641 4472 mt 4641 3349 L -6085 4472 mt 6085 3349 L -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 240 FMSR - -5309 3554 mt -(h) s -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 192 FMSR - -5442 3674 mt -(j0) s -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 240 FMSR - -5309 3895 mt -(h) s -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 192 FMSR - -5442 4015 mt -(j1) s -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 240 FMSR - -5591 3895 mt -(*5) s -5309 4236 mt -(h) s -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 192 FMSR - -5442 4356 mt -(j2) s -%%IncludeResource: font Helvetica -/Helvetica /ISOLatin1Encoding 240 FMSR - -5591 4236 mt -(*50) s -gs 4641 3349 1445 1124 rc -24 w -c8 -401 0 4774 3559 2 MP stroke -c9 -401 0 4774 3915 2 MP stroke -c10 -401 0 4774 4272 2 MP stroke -6 w -gr - -c10 - -end - -eplot -%%EndObject - -epage -end - -showpage - -%%Trailer -%%EOF diff --git a/manual/figures/LPQHI.pdf b/manual/figures/LPQHI.pdf new file mode 100644 index 0000000000000000000000000000000000000000..78068416a8e60ffee8118e8a648fcc60e9171602 GIT binary patch literal 32667 zcmc$_1yo$Y)+U-jkTgz^;Eg*3cL?t8?(XguG`PD2cXv-9cyMW)0F7JF1{!(f-aBvp zS@Y)2eY57D*K76eT~)hQo$sr!chx$l4yBTq1S1O*2Y_;VesBrE0sI7XG_e8j^8=XW z%pEM7+*dE}uLJwwD`}9Uc z6i!w^mdzAS6gCX3$K>CpCkmJDSNoaijb#>mEWq5s>|Y&Ty}yI8{)a);yq(N}%vy>j zHs+>o0A^Kp6SsfVNI1IK1DHib9KC?LpI+nHxjBLCpFZioUejyKKYFnMnB|S#T&!Os zSY9JO0smoNBUH>?9o=0_&0T@queB=w6&d^g0y2G3*iQVG)&AE)|T!r=B~_gO3G5wOipGNv;gLR z1SuI?nk%^5o4n4)EAoF-Njq3Lidmbw0eSw3^S{!?@#&Q=*1vT9S2F(2@xO=${`Dp7 zS%55mc~g0vQ)VR>M^jaEH=r(%`Bfr7{lD}4UnTLMC53;C|L?K(PjIi7`#%%IKXvf` zpazz|Q}iF@@c#kTzb}J-U)}%vb-=>*PlW%0tAASw?EmQcch>)JDg0H!|0yB-9sd8A z5dNmU|8ya6{@aND6NJF^PlW#~LilIW{Qpe|e~14+CWL<_&i}IXvHxde1lGSP>)%84 zzh4Nf|H^s)jS#s0t+j#mZzlV@HvIpS5&kj!zen4D0LRY#3hsZnPxv1$4Xpo4oc~1# ztpBzU&?{`q6LQ8&&NFSxeLgP^f4V@UR{~?oV|3v_^-d*kqAAnPQBcd2RzI6`tH_{spoOsmp|hO&(FsQ&s%kkS7@74&zgCM%*)rfLT4|JmG*jpTTpK^ z1L#u|VW-}Ui|^-R+sFC9=R-*T%Wiy|Z;sH;#a&JEn(-6OVAKLnp z+|kqv`_>CAWHP%Hx0wd*aV)}N$QoYDXX_1Mj`h3md8~ZyVZS74u-b6^3KcM9@X;@M zNgnTIeApZ8-V-vJ@?q+Wt?SeAjU#e3Y};4eWAl#T_sJ{}${Q~T2~3}|oATs)uHJl@ zGkvYt5I zQ?;1|CHU zW`$=fMc+5qd8~3G-BnJz#d$?t!#>A@vFfsHYKLFPOBAowWl}x7rfXu!Y)OZD$!uY) zw0BN*y;W?EX(}01CVvI~uxC1_U6x<;JhHrdcy+Cr)wmDlOQnzX{?h_Jo@+bRGskE&!Ji`Y;FmBIS zEjC*%KR9|EMExO5?~?ce*ATaZN_CjdGGC6U6XOhnppnUC%362v+N(6F6L#2)wc~tw ze>%L{15$D9EaX1c_?1XBZ6UO2Wi`|3%(~*raUa5`t7d&YS*Y(Io$Z7k z#1wC!uF(d)r+W9#z}$h)E{235wxr>MDIN!+9q0Xnk;?iJ-#R&~Uvd?i#j<^aKBphj zYRh~<%V`Qth7?|sEIPW5o$ z4hN>HC-NqPi2U~(Y2*UqM_9b4?JsWyrW%;Xk2iM{`QLhW-P`_@xZgen%nsMuwyaM0 ze*arCF7gqRxW7C#z4xJ+OXF?S=S@-O_x6N4ti$l-Wx1;@e-u!WxbyBQvxO*U*5A*b z-JXIXQ7#5IPRHsn^kaR%=YV$qjM{O0qs^O4frJP>Kk>P9jQkDF7w$fkVtNO?dsnE> zLEZO~HpLzZzun7A5*GpzbD4h7)1UYk{F$!zig5+}5@-key6&fF`cT11azlvei^oAX z;`^Q5V^ZxD{>HFWi4M`4-F?5ph|NH`iN@qiypuK}ik^Q_r!gz!eNnwS5$LC0RQ%)}BQM|Flqak@ zcXG|PN4#`&UWPhHv-f;2*PLAOBq&#vkyci^GOEVMu`rp1b1s_M4E=zn-F&QsbLs~s zP39E5p{aT`e$^{?BTdySM;{b3n;$+XYB#$$E8?|W7Nl2aJ?5n&XZsyd4q#q5Kvnq{@`gv`Y;vqA3XlzU2i zapP^V!h<8oX}N+Im3p?rKifB6?3BXBF*C`1KcaKHN#4ua#V?>B*jT$FpaLpoIwpcX zu#q^%huEra5F_Mw3P$jO#A}JWHW;%#4AbSQw%D>l&oOGF^#uM9O#Ff%rtdjJ>UZYX z{76jq@*+OcYNF*>q_-g`6x~CK8!B!}&VxHyFK?}edCV5RPe%2eVVp3;$Jduw5+80# zKB2Jfp3W$^j+Vo*F>ALh$?^Cym|KXiKvsTO5br8NBI^_cD9_&N-t*I(wS?L6r-%x= zt4T1*aYW?!8@KYy_H=3fg18-)uiCpx-(0+Pcv6r$ zn263E_$25YIx@6TcSV>i(nLoSj++w|Ke;YcyQtxSdFwAmzv%s8d-`P<9-;wrx31Hme9ZiU#7UwoqNJr(4n}n zH08*I=pk9qU3k8_W1)I^+RcuxX!H9T+vjE`qe^FH8p<@DtW`NQ7SY+t&>Rumj3Kt38`Vc;wm3EA6DJrsSf|dP?`Jc=RJHUt3Y!fA7Bco>IxWvPQ zl4GlAU$$gB5_T?!1vdiJfO?P#ZUsU2JyH^Fq(NAcPVmw24{ACzm*1kDMdyj5wr1-0 z(}JQ<#6M2*SiCWOB@&(4&3qC8?#pz$iJ(Tdu&od<`JG-f z@y6&0V|?E^_#|yC^u!FDM*X2N*=Wwx?*u%BV=n43YaES9)^(*B-R)mzmqHfNz?a-i zbKG{$>&M{qY(eX|NxyvgjuvwC%P}SUJR8+KDj6l3l?+8Wxxp6s|h+Qp1l6_d*kB{STVE@U42agr)-*v!+%CtLf`=Op#5Vam7VoDGAN z{ADJhQt@op1;yzAk_CmpT?bCfR8fcCTwb+;Hyh>V{Q@Qt$oF^QqTzmi1Eiun`LQ{+ zj0!^%z3jwXnG|eE6mMYeapt8dA;_$DaIaJHH&A# zor3XgjufSZmr4W`#adShj+CC8f7YjKAH$*H9=lwRnzoY-6Rg5rm)VeZ5uW}UkLGP> zNbG5~&fW&>Qu973=ja008aMcez@fV2W~uuL>++h>jV8G}A1i8-i*qEu<#B0=KFZ|^ zr7VsO?f#-S<(nC8o~*Zx%fl1i!N8QO)_58~GMub~&taj>Dd@($7>BW}Zc&K>Vh*0S zJ?gTQf(X)8@hkHyZ-GR$caP6MU*e4p%xN4tEf{JNc&`)_H%QM((80RLkv1`94muNu z)l`B%7%wR?K=75hAu;m>CylDyGWlW-ao|mI(k?J}Q6UervdiyPW4ygTjx^tVB`%fT zgXXUG1xyC~Sg;Jy=2&P0#%HGf2s!_JhfZ?td~_EC8~!r`g!i^O$~1P zr|KhZdb}D#Ox0Q{SH!4_)<5IqmYD?dXxs zuW>yvy^@dODINk$y(2rziO?&x!T zT|T&L5j)kVRXaJ{_Wypre+iU2yno7B%8ke@0n#GZzhg@B|gAHY2`I+EPx?R0^qAKt~kDjv8{=7=u2;Jf*>{T9; z8)W|H0PdGowaFW!)asElyb4jgp(sh?b%E{8>B&hYF z6Jvee=Wx`BH!MA(G19!fpU3hk4}(%Ke$>3asYydqj>|W+L1u z$?*@#6_BlPnbBnC<|{b{J7G`!cco*k#Nak^|8+iFQbX#2KcQ}!Ig^1P<|zy5rKx3a zRc?q`_i;U;3pM1MlS89IPSk!LgAXy?LT3}RCTZ@63!a1szp}B`vtkMC8QQKFWGmBP z_mVc%GYqCYLVw70={JYQB|lE9Bg$Wv*r0V-zf3l?<996`^=us0x+74+sYt&bjY3F4 zwF#AqenXq0iV(<0vxg^a$+<A^vo8f*4<2ZyK}M!YjXK50eR{qoZ5nl*s1bqQ>x}x$-7OEKj#>}iBX$p z7=ii=)9d6eQx!)3RnSTR!rqYm%{=y6#B-(kM=vzFXQqMnuWH`h+H#xZtTD(%bcB{Q zrDaiMWtwx4pz2CVTXj8!#W`(r7H#>d%A=g>va+Mk`IiU=WL53bYL2|xii!)x8{~RS z9gjl-1=}EP+oKAd<&OJ2FF?#W`BT@gOVQJcMgK}MyQDS$9eAbpe+2ruRC9WjPg&Lp zMw4Y029w3F1<0zrxCO9>lGU%P0XrRA*NQ#YdbBXg{uctX)HHKes~M_Wy!HgD977O} zE&j`g)R=a_(EivCn3grK+2$7=Yu-WyOFm%dkTbRdW~YOgH$~pV0vmVgXe6VOAuxjtfxt19akqhvDzD14PyOP4j468T>%L5A zna{TLhruUiywG?J^^0O#6G8RCKB|~~iGs51A zyd>YBz1o_lvrh@QweT-yiZqNH@Dhu3zt)1aMjN)Ehp8k6>tv)syW9oUsHl^4y!@tJ_}`JN_nCCc>SB zv_GWmFJ#RVy}3H9%Sr}{LQVxlN)ppbu&$sR`6=hV0U0U#zNnd4JHC0DP4sERW%(@{ z7gizY~LGuQ7KTIkj`VRfqGUuEst|y|erC56+|T^X|z0 zj>&8@?y_nb^|0PXrno&`wjHZDaIDO^!95XzYc8zIr!wTk%6LOOib2<0<1w!|WHohz zJ{Psu$oSnLg|AEzuDS1Bxk1aU5w2!)gcI()@-uq-JFGdXtqNOumRAxM`qB`dG;;C- zrP}21Ic-hMXw=;e@<~S~_XBWgpEkT}?n=&N$C2)YOveK~Pl9he_x_P1k95}}9{4b~ zG#9M*WKPYaDY17s_D+#n@BZj&wP0e~m+w#q@9;2&p4K+P`5a?^vg4yd2QOP*;@Yv4 zw`;BVp00EcUxshIpY*;WC!X7Zo1kVC5qvEYA94(#!amf*J3V;kv`11o*ToRN*D*k@ z70*YkbRpoYY5RtfGcpAKf^z`uQX0{RI-YPiZjAs55^bA1R^}24z-yrF9g6#HK)#`s z;lAQ#{i4fx7sY4c8@rTC*Cr*|F^v^e%!F2o2!s<+d40T;ple zv#`c&Z{9FIj(CV(q+{exC6;t$^u>Us{cfI;Awh~i20_dtpNA;0P*5aM&oQ3#G6z1= z$wQP4uzO@b9&NWs28&s#f~EdAo|_>N>rdSQJ(lYpyAX?~AK zDsEQ=-WgxuUwB{P@?W$6NnBqOdj8S#!=tzkRl&`L{yMUI6&jzl23^V@K&3dFLOh$w zE2h2%jokMBn9S*Va`dNwCSI*>J)aT_3AjQKJtMeio@8&o-`dymxRwSG^+G~qd57S7 z-0S#{SQHOrgdOeZ4kkXav{vseRI;v>3IA}iW7>Crhnr3BL)01uWv^tt7gURFfT{KU z-ZB+E^{|GCB^cquQ6Afiz^SPa(Z#N(P2@29?T(jIvyS=W;nB@^Da|^`+@B@K#^g;d z{ze5dpeOWhgjUT&Z@ZM*^u+m^RjIK>mZZ*`xiYuIhp0p*eZvm+S7TpB2jXIwn7u*a zQ}5|DuBZZWF~wDZJPD4sZ}cM?ZHH&aPZ3((K>jjFBISkyM1YHwy>kDpXHUFcZo$_J zM-ppS58?c(MAfWI+uwt~V2j}}??f)4l^&@Pt5gMFLzviuf9)ei>D5I5dtp<1gEhRV~> zZ!+>iB7ZgRv}+f2`k8>fgfe}bb`WlRFWzc9ErF$u1j?1TI8iD`qg^Z85-f4bm$+dG zYZdLBc`XaGskJMH1XL)+8gi+Ld)TP8sh6t`OlUO-AtfHo1KO;n$FLn{zOBv#D@wW{l3J>O%#=ma6O?6P-4NGj_t4r+{8Xx1d`&QMvY_+ zZsn|wdK0JD#jHM^vz|8YW;%6UJ1&De4xKbQ@@yhh$9~D7mP+A;htM`gIdhi~`a$Gq z+p1_w)+W=mcYn+B)vVR-{bH^4;BASi%AI8L-NHg08yOlpM7{#^$FC+&qKI3Y`R)87 zWK+$+8O`NHm9(E^hzMyN%*w)0)_hYj$7i3kcDT1^7g6KzzcRXYsXJ|OT&A{?e*~}L%w317w8_w zBm}9i*LBN!j6L^vzf5UQB0kfxX%mOu;&8ZKIZqXr{lF`>lknpQ zn;kAa(7yiGNTVQUtf;yF3BBavO~VCY?XjsV?`zA`v6H#sspDn@oz3@U{l#G_@Alew z{cB&b1sv{f8K@1eU}JNI|&@wz=A(kA~Nn>$E4Y7yGjaQx2H3pb$myEhE;Dva$;OyyAY3QZ08PZ z0(s$1U3tR4xktt!9O;o}9FOTwRcCHPJA5c3t|mnJkxg%1b5Iykz`%Q#GQ3aAh);J` z^l(7D)X8hz-Wm^6+MsmvGpyib6nBVt>MUX$T3*^IsTVisDP3pjD+(8&Udz$=J>I1D zb%FuC@NfYwEW++2tLSQwhU3rfhNo;wE5nl_UV*>(kZR9O=e_|Rm&g!L6TB6J075Fy zYIo{mLfyg=y!n@cD!2L@>6;9%rOVt0!9bg{_(U1B)A&UCvhVS~xH$rfI|raRWq|{Juue|P5gO%`p{R`b<#CRl%3%LO zp-0!C;W7Y(?VE@23s_v)j}mBbgN`B;*(113hFtEA^Jv)8#xbT+@WvNLrnBwhVN(FR z;i-i5aRkh{!}RC37fD~LtrS=j6=^{DNt*7K1+19`diV*hW<$>I2Tihy__X7IogvxN z%f=NJmkdyfG|n%zO-7e2MFx;dcKSP24si=Yh#y5#F5d8NWZ9@~sh{3Hx zTJFM%kO555Q8(ko40V#N`D|5Z(==1h$vUNj&vKV`yak~qxnS3N7lj%#lyiIzustLj zqAuSi)huXC2&l#W+4A!^)ubYCnTd~!wIN--LRONK68~tLYPAESsOHYT``V^XmUz^M zQ`aG}D^`5_J9s}WMdpSd%b{%n;Mu_WNj7Y7%*hYgSozVqB3+F%?MZU@^8HBE>^B(O58DLtrC1qYGIJzYXc6<;uIO$@UN(fqU@TSq2^rZGKx# z3v2w+<^b%KG}B>BIc#fbqW4k_x%8*W&WWgwTa|rb^6jRGlOz;7Hf~$)wB^NWsHoy? zj+nOxZE@=AG>Ky9dOAjswK|-~owSxb@zI$bqh5FwwmOiad9K{*Xd3Ib6-M;8I%xJu zj=k5~4kv4K@I?!ASjQz<2|QZ7FW2dHsEIF2tMffSA5ae5$GU{*$I*RFATmr9le&3{ zfZOc(gmNk`&Hr04MO;Bn=Bh`d;6m+!R0h38mU7}t{bCmfipY&Gqpwr^$Vb9io%3p1 zQ4YVFy4NBVm63HX`3(A$poT5Cn7w(+FHx=YTy^8}l)7Cq6D_jP#~8}Z#9T!6D^gjE z0RU-gES?79MfHQ7r}PecX1*_KZxp3ux+r}_8qep?2AfV7@r5A9 z_!1L(T35MIZAvWp&7mSDJ60%RaGSJB?`x=Z>u8$4*hv>9obla=TvX#Fibd%FWmssd z?;XTTrlab`(?zPj<5&P>d&xJj=EfBHbz8I}o>ispdYTJNO7A{ws3CRXq<7{Ajm!Ge zm4@Z7Bp0KrU}_Xl5@2ew)I9z~F5&IP83Qmb=t$G6T=$r@7HXK6I}J9)gXr{)8$46G zMP%zWpq-LqbXY(7P0n#pkQlp)X>nGTYzG^p8a%N^3jt3$%?x>PIE5C*1rSUDq|=KQ zIvp$dg)wX663_Vskz72+?>Ka@Dg3&{D|{>V%F*R%p3!A=^*5Vm1CNJ^kw~X^(xObw zRwAZn#58qc;Y`gIHWi(|VpI*%1?EZ3XN8<^XMRLmCeHJED?@`AOK>%OB^{X6Y-t2~ zp-LJ&%`QUlNda3rV(c#>NJVLI$Svk67Di@@;c#&0MU~MeY0ej9jiFmd;>Ad!*`c$X z$Ze)t&`)cz!JH;ml=GKg3jk7JY;t;_tRD;KsM>>dsvB!F!NB^*1HKLN#z?y036)gr z4;|lT$&$8wWX!1g(p!3@g-rzHEmL#`m#l+8BYU8O>>5xVdD*7=VsXO_5ApBr&iFi( zQHXLUzR%<;nC;_*C77tWM)##@C~ZZ@xdM7>gc`>TLC=X^Q# zc$QqN9Laz_t&aR5h5yjI8?|5Wn=z zukpN#XxtUTWC*^~GMEn1>HLg6g5UTk25*-V61GNIg<(iW$e}t6{VMJrDc&o0sVBs9 z>t?W9<>Ac2{S#=2rMJ8#&1B_5kz_&2RM`$({U6q@b3nQ9!_T1b>a7UD%C z)HU{XAXo_Mo3-&Jj3;XM5OlPar9peb)~KG*lzM$G8aUF|)6MTPOc~NKP>aI4TW_m+ z=UIPT7} z6fSBPXGz4XhsuL?tM4N17wHNH|4P(lijqLH@AQ&)U22G)acw-^R-YVgjV?-@i$g&^ zFxwoIElBoHkI^bVlP%cE^dc8$F5}e8>Eb_KQit44Ia8QYBTRmqDDeb;&_6>>P?SY64?pmWEu(_`cY$^F~>M(pd75$~x zYlLL`;AM=oEES>W_0g={4h=td2&b_Nt<{OEc$$_xLcJfS6TP55EQRr-?$S~A5KdvQ zwar#sC+TSQ5Fnh*v@m&zGbp)$nyDtm`0fCCf@%-WAF7j~=)| zCUSbMA7_@m&B@UxKS`@g%fIE(dh}N@POCv_d6;kVUGw9z@Ofg}u0U@4O?LBxFvi?c zKZ?7CDH2zJw`C(uBb`G*=qEVFwQscMfGT(92}ZkhSyv>k-^nr-%6jk}PPX&K5bE!b z+?g$@*EUH=T(Wfly(OQt%%3Y+_=hNfJ7y|enZDW4>IrblkG;^?96N<2sr^PyLh^<% zf)q|?B#d%7yMlSz35GQ#4UT3fQSF6kkxJ4n92J)LZ3&e!?O~BhR2@$A0h#q-1fPc1 zGOf-`yW za|zVAz0VwnT$tRi<5VW-?0ibK!#+rx3;+lUt+loYpOq+W39>qZcdHfEOIr&vEwDMs z*^I;3$?-InGJb_(b5hOK_m`SvX>xbuPSD$ZD)kOC`t<4`mj;I=Czw~k;fI$~#eL_< z42$hyZ>?`gH$w6@3T8Bu3DUKqbZQTi`{0Dc++zg2r_u-LATF|MJ5Myf#$~1r;Y68O z`{=pSqcDc*T3Z>vIvKVOC2w7~HKMc-TN}TH$;s~Fu+slvq|ge{)w;r(7Af>94=c|I zVZ3&OZ$Sr?RD{Vni8EGHwnk!`qujY(0 z9igyEC?JRD4i^A6WtfM}`zTYqB>)gvN9LiKD~FIz@Yp$lpJjj|yeB)Jjn3<*$MT_T z_L$`1q)`BCMM#014F!dnSnaP4KLIts5@`3)hawsOrF{3mR_x*)=><`~LDEhu_qI{p z+l#?4D4`z57l`Jsj0XLCmgR6v#O&lP!S5>nnBC(7!FkP-~6B9p;gVCp7Y!ri08Pli`=~f2yo=>%cLn+Y#uL13XoAkVCOb26%!gQ~~r7pb&Ly+EY=gTYdyPRPZ(dJ(bzlyWWYb*2q%6 z&jLzOc$U!DBZVIHQhttf(B*YIpd##B?`)w=v3gT1TmD<<4AEUzLKy>{lhj0epOiEfYwbB|7K<)e=%!pilqJcE3T zV{>yg2b_-1;@xnKc9zZ7k`vH&k<6Xu!L(|)wET^D4%KHFn#DWGBat6Mt(?^@aIINq z$boivT1ZF<;a^^8wlsf`KCAX&j9iM_U z5V$7OuJvaa1y{Onqs2k}*9XwiV?l}d5A zMR=mxRb5^6N*Ma2AGGv94)q-p&>nuJ=KCi#TR`Xkixd% z9Eo9ujVvH$?~9Cz(H}wqRkl*^ICJ$E3DB*DQocsa3>w8n%uKn&A>eZk&YR0;aeo=n z5Q!^1O8QT9-988LIQK6Z&v#@pWqF^uJuu%~4#sgZOPyGa1H@c$c28rYIhkqR(9_|g zofSkp-))N`;b6JH6z6<4{Z>MQ9=iRy?Tr-s3U~)Ije{LofjdG*#YYcdKU|K2*`g`E zi?^`zi+bS>`KFZxL)u^P*iAdRh=oYSZ3|$?`~5S3JrE50e38gCE}H(9^#}ILg}9A^ z+VnP}h6{|WDD&>|_+(3B6LY^_CvpOTL|BZgbz=#?{{@Pva&QStS~}pqonMpKW!6zW z=xb0nS_=&)lNITN^=sqXU?%wLcO}lkYV7zg-07t+9UsyEfOpPPl%k$9P733v<8eFq zibyI}-aUEobnV48ABV-OjnY>z&5_jYiFbliDO53m`b9P{VDU4HdzEVd+~tEzaQ6uC zBdoV~j{`awj&}+;ay;mrqTWJ~i#1Y}8As<$Bxst}Ez-mG?$SoB$ksr#&a;Qr(rtpi zFSfA^S6c@bI8_=%SL1eDSNw4HoY>f#ZCH-^!Sdy^nkUHd?C9*-Jw<~T3Uc=5;t^m2 z(#jyfcmr0odFGSn)l^>JMRP<2FBglJD9KiSK&LRt2m&hSzI*o-kpd{iZv9p`PoBP- zkPfC7?hF5042`q*B_`Yn3q5b%UD{3mc2W)P%RVAZh=YgGKAQgwoaqjSvDQA_{yaNs zjB57YANSoQklqdvyj5L`mmoREs18;-rFjFi)(C!kn1YEcg((#lTr5BIQ3_KmELbe& z4KhU`yb*BpO>l5?63oYuBJ1Q!i0J_wYgJ&ct2YN}Cam}Mx#u3KMPS9Dw<|Ecj&KC- zt=il%##eW#wr{aUJv1Oa*e}KX_~>Al>umNw-E)DEPPh&XICn&UocEaeic$%|)e$?L zJ`|!~kSRDBu&|8?Z_1-3w2qWA;IkC2|32%HTuvyTK9N5b+KY6K;~dZQtD6%~6C zZ6t2MAxJB%a!XlWMZ=Hog$5^_6ub$oo*=SHV8Hw)+*k*P>T*4(oWRx29d)r64JlVw z4xw(FR|R)zq;QF!`X#BHG<^vv7C|SZ81zRcrCkg`JX`>NmU4804b2((VwS=M_4(R2 z1FE_s&_W3;G6W7x2E?YX-Yg(*qMNB0^hMcL6d%*YScQq;M%G|Mo~y@W;D4tz*v zLw~6H`<+E=LG)l~16<)wMjX^-V^X1V;f9zK?v-+?S?U#|v~YfzG0TMKdp`#W(r zj9yG8#Qd899cYD}#8#98R_b~<*4$M_)IJqHktwCo0A9$Unw0@%p_yD()V*-xMAAwI zC&K1AX|RBXj_tvDZdXBo{fnoyC7M~$>_8#Vnm16SEHfLKp0KrGjMD@@&O ztw^7+hcm1;{@BFMG)YAv+>2BRnN2SK@m>l`sbJb)n5mxNPE6`L|(@%Ny) zue2%N-4d482a>R_aA@x^X16UTV%UiyM`1rJxl-2zQhh49_zbo|LJMWaM-%gCLln-l zmGiY*WR3(T=>osx7_yuyzuBgGckjbVIzp0sWa-831r#K^_&kkVlg}j zikA$*B7L`j^c~i@V)lnITNdii2&&|Diec8nN4T2<%1t{?bi)t)Nr~hgOU;Xj*EP`&F;LNpB{kX-h@%H!_b%)bfObGbo&w??le{mm&J<0L zl*m5sx?m3)>iLw2r{D?4rZ&kNqY;q&fWWU`e4TQF-iy4O3pRjljCOO|3Hr!FBBm$d z^qIH$y} zK=1r-R|E3aej)U`98hHMs*2?5DqPI`582O0*NCAs-f7a2r(fw~Xbc%Y^6gFz0bBd( z!o@D0kT7?dnHQ1GiA#aE_VD3l4x;4fP$~|XL;?aDw0PAI=u^1U^(U3fh3x_poLHU1 zO|gd&0;HJ%UI8T}w|=cKVol1>dwU7D;hxf83u5d{>kU1ndhRR9{d8}(Nqx2trE?7D zIGFSH*KIbZ-VUHamA4#xi7C%o&&%Zd(QX)2@&)i|#f2yo;h&VseT&ct?9MHq@T&y= zG%-CL5fcrbP5we5$-d>(&Fv9S?*c*YKLq`7)|}9oZxjNee7!0ZFJU3m(k`lK%mR}W z{N3}=ySJ~kVG!8cKPrwp2xnWA{F|qN>76b@L&OHSR07s1e2)-1J!g4_-+Nd~q3XDD z0x^RboM9ZZozNhG=Js`jvx40d!9fA!R)wDe$efy({vXS!5dA;q=BpZ+R&=193>bli zPX;67$WxHIj5cp34f*--~iR!zS`DjMoNI)iqXL#A_0psPF{1jVU@SAj6`J%k!OFWR(qH!C4IpLVf_=%~fxAiW^7K(`l-_Dh z1e3t~)7a>Ir9+X9UH^;+x*qtpGi1*?Q^DWEYhf7f(;epfl_8gaoxCHAI;BT7Sauqt zg!r3Qwz4;W1ex&O0Hf7$BaTD$De`W$@-lA|8f>fzgaZyv4yQA=(wh}JEyK;D!kLH} zxZP3SEAW1KXhoS%LBOLSu|}N%cb>UZnVH60F34oMmHzFDQ5@$7){UX=nOZZU5i8{HK}!*d^-2fU-yVRKQPl&1w9BpqpR20 zdM`T(4j(m=I(zcSejBglW-6|%1u`j#rL%?2|H=n4p#~-I?$06x5;7`5G>~!CT^(jk z-^itrhdT{LZNRM6e`!O%(=@zGL)SOtnYJ-eO|Q!eS(xsYw(q#uC#A z_nDA+q$r`$$ug7buizqEw^*EsqJvmZ5%m|AZ+f=R*xlAqq~|}eRfq@NGOOna-4_rK zgA@uWa(L05ifgy6(;|CjH8@)OoEv3Nj?vWw2{dlmkyrC>m@HJNM*9qM zGr;|5x~<20hqgMPg6_3pOpC~WUVrvJ&r@phK8pK`gJ-aDeb4es-CaN1^je3}O?J2Ws03&+HL&UJQ{?_x4E79hS zZ;b~Zepump)C@!Nz(Ws;S!)3ETv*or(vcM9ny`v^m>grEtzRR?D9NAE5cyzdt&wzu zv@r;RHfJBnq4tNg2$vO4jKYJB1UfTWmWcCg#CEcU=NokH)dzlD1=DcaJ-8+Zol1q;vv<6`Z-JeNW z2@>p7asH?ZLu=-bW4(GQ;;4T%;e8|_&zn*7pQlAxxO?N>dkZ?g^3}_}ati0qKDl^% z$uO!3=QR}O7sPL9+qaX)U)v%?k?#s>Rz7x}mRNAJ-Wx^u)fDI;nm3_*|Jq%muPi_l z?1sIjKXcwu)Fr!;Kw_FV@#P+CuLH)IJWoFT{C=>pbp8)~Ye5@mg3w+OScrINO zGxFM9aH`kizL;<7*#Z*lo>ic%lf6H)S(*2GOtv!7XA$q+_1jCoGkcpsPfOEpOovAY$6 z^QKA^lhArx4_((FAm^L+V~6p#%;KKI3;X3At78EqN>dsy(9gbtlY)v9=aSI158Fhi z&e*%!VSiMc_jeAEbZY~fap`{YtsucQ^2G!(H37xaS7n_H+Jj9ULmcvje9|fp&X!ib z`K|~UoM|%|!XcLm@bMTeUR}6=Tp&eH>OY2NnzFuhneNI0Zeuh8#XTjbTor>ne+gO& z9#;q52jBW3j_XZzm`(-^s0W_2rOlC??f{(h984CQu=#|B1V{w51>feWGJFvr@kgTR zZ&ElwSZYEtiSZG9NK=aOyarc(M7#Y$R$1hj2)JzYRCn}#>~YL^=!h$+OIzzHHG}h# z-24pqvsU3Sc{Ssi(%;oXZ6D_8yJ-OcSMNU1PF`(z>JNHC7YuK_P*-DIuAia=h4EV< z`W1}dd-C4_&Te}ZvDZ61#=h_OoUc-Uulkj3GzDFj(4R6UP-p7Pw^s`@^4;8BNmv)B zV)ERCmTDTckz|ycpmF`C-t#`UE->kO`u^L})ED<-M~?qFt*G#NfKhWH??)=YvB5BF zBy-6(hx5Dr_eVd)Dk9@Tp!vRmZGMw}cr>;T1r-UXzoR|@>UJ6}&d&|C%bCfoMT9(~ zZz1NN^L6)A*p3dS?;o;q8@D*f=#Pj%i!YD2(rCYaj~Db357AM*u#&l6r>gfp^VX7- zGq0%jKJWfnH4ni2`XJ8qvcg;GxY$?hG+bv0y{uylR9b%+4|&J;%-YzKTWg|p4~8A_ z^{&!DV~)^3{Sb%?zvV7jZlMoJ04y3pGX9#a*MCkhQgECh(qi9>_ovJ7c?0?OoZGzlri#UD%| z3OJ?WHenP>CusM|Nx}BLz|F6c*0;;X2Tl7eAC=@FMElw#OyinYOTXBb=1%kUGnM`K(PgC6Jf$KAUa8HG%=^cY< zdg6vza#P#JuNTAZi?s;mCcic^*Kpk%SY!v&=&;j=X2b3<)O~Clenq*e#wWkH8mq=> z_*cNyb2AgWtKy*j9s5k++;v^aYaBMGzmv}`#3)C_cU%wC8UxO2N(_+a#c8TVr}M%f z!+NX6l3!s$meN_(ZujH|UDW2q%7W9^LHG9YXF{S))E32Ef-~1g-AHyzE9+s6g%CL* zKdZo~x7=prqj`+KAJMj0;f@8!{a&jxCaj2{Z8^l943JAfb}r(O_*YntX0gxYEkH0+ zp8iZ=p9zr5T3@*(QomeSurfyy!1LC96NZyp-pQt@{lpaU6AKnf$^G!~S~P#{&h3Mt zakswKmS%b2uveG)*Oxn`2&7tFgpGY^6Vu=n5EW`5oU#*@ZN55^>(i~>3Uyzy1;ig; z6(uE)=K{bd5tSLkk4+1}^tr-^j(`oD^jB|IDj{Dcq(*LM*2MgjuV&i?i;(jik$V>I zRM+eCM){ZB%hj*r+wp^bIVNK~HdcDX+`ws{tTAz{&WRU#G2Ju#ed?)jN_0#|{;;la zY*yEnRxm5tf|HOXF6$XXx~-IZP7|VEj#RZc(pRLj;##r`XQ=8&y@A6Piq@50>A%Hh z#i!3mVq@h<(Rp4`+7``<<*x^8GT&gGb@6|ux$PHDjr+!%t$NMyeBWMWP|>b&Qid!g zy0QWV=D(7`5kajGQw8Df_TYV>f*f?82p@fMDfiNGLp`5y29$Eth~r!thCVV}-T%}3h7|PT1%R5s3!F!Wha6XDh^7lAeG%Iy&3bZdzR-I3x-!t zaq1-7or%;!T5gJy=F4eIlIFJ$tj;rS?vrb1652x*Qlh6rb4PG3z)=7^VCpVFg;j^g zmdJE#Qq<4;H};x%K~GIJ@4*+JSa;x@VMd{FGt=g9Q{U211NLCi$Z3v7^%CzT2iL3E zB5OCQZi!d-m~QmAJ6em-QzXQ#*N#j!Rqe{*I(p@pS~wGruK#n4#k@D zPqy4xesY=l<5;&x6=`)`x0}J+37Kc+jVyjHbeXzsww_1m|7Z_OP+`$8W*R4Gz39T;5x|ub+<69Rv7EcENkHr^oi6_1<-j1!BE;USMvUgXxYC!V%Uf;(z3L2zlYL~+!lM&Gc#*SJjP}smOusBE2LuI_s7ty z7?Kcp|3S~83BMoEdP~JNPI4cuE}xaf5g$_4IK4;f;`LfqOTzM`W>Yj=5!cFESxgI@D#)Ch6ykOrRKQhNWV@3==I-;_!T z(?1F?rI+%4pnGSf06ZvB zz0$ZOTse5Y-4`TfH({yJ(@O5%6Iy;2dQ2>7)D;wLG<3IETT|uM!*z0Fx_sfpHNtbg zp;xSb24N1mjbaoYFoPT}kl*e*i*0l^Ad(YLFlCe$9W|ixOkTM65&VuqtV?aXTQ}dy zmKuJZ$v?l+op%b3TQ5DlOc3&G!16p2!hTTYClRxTN$dG;zc){sTvKUg(eAj7|2RmJ z3_;Q%*I4r^UHeY&1hMptm+@MPBqp(~0_7M&c7QAS8Q9%t@(OeFWxQwJonO99`-)t5 zsf@FM8ka)_LaG3desJ0~mEMi+*`HOyXWr-2k^G?RfzL34fvt?~DRF+EP2HTUeEi`M zA1IejD{B?5(p7@{Sw*)ToG^@z>c?A4M7i`mkXKTn*+u*pV&fh+wU~&iKCng?Zixc& ztel#+lnaMB>$Fz2<0|oNx*D{$JW)#ao3t^7XvM}R`PIOyomG;il8gdo>zrR<6;c(` zy34}P`>~QZ$|I>5JboEhVCs#IC8ZWc;3Po@sr4Yv;g9uz1HtL#JTh1mpkTsE=d06! zB#s!pc)49Hwr-*UwWk^788*07ATi?V19HbWij)xM>Vp|ybl$-)7ko`1CS%^gQ3@_OgC##^qTeHYRsi>q8!s~>CATE~XHITO z^RUO3h zl_|!TFk6>vi~y8@^~M6_iN-Ct%-%9aOmYEGkSZ|LT(&&XE>h8qkwOy^fWoFoc`jPy z3^?6VjIW-#RFIwZ_RxMcmI(c;S$ZI_3>aw$g|PIzCo zvx^1bqe0P$mLc8f{1__D^YS|)b;!^$b9w#FtwW#aDoz;R#@38Peec#xwGnnapPKz( zSs4&BUM5}1D0vR9<8YBoU;f-!do%Kd_duCNr>!XPCU9xSkP(~qHlo;BsI~SrrUKKH zj#0G1{IzUsT&%qSa7qy;PFZu>+8LHsK;rJf?0n$J-mRhDX{pc6+KF2LsH8F|)1Vq}6_RvBG}yHG3HvJ37bqeoAJ@Dl29KNeFd*_K^BC>=}m z{4Qi%)*P;#Cstix6lgVD##H!OvBB0IVF4fp5z$#YM<@=(@c}Z%W~7=I)#5mkNoj+A zGA%Pi{uxE#Kl+PL4?7)3;kS~Bx;eLgN+t=tl$sT&UK)zSjlyRH2>Se*`GeXlixu!w zVD6K0a}M)gnpvB`iO02g@e75FdD<4W6aW3I{it-61OeL`&rlro% zb}XfxCJv>YPwC}E7(^U^&uxP6bh9st3b+^)$QW0ja-~jcHb51hDrBc#DbeF|8#i2; z03&gDuuM^bB$k|H09zd*A^p~wg;lsbU!RDgUh_Q-e6mrX+*qdn?Ey>zLovEplo_VG zfUCIp1BdvcPsUQ`trV>}>KA5BxO?&e{X@OV0-xs-Sv+%9D7z09 zqck;owj^gjL=6xXDPRCqv^%O`e;kUvL^OPwNvV2gseXPd-T6Xw9B(blhbwj}UNU z(%HG!q^az}ba_{Sc5V|~JrknaKl1=pR=A4b-LB=Nh3O*3pAhke_WtD!1_+Z-6+Ee) zF~_Q&>3t+yMw_mN5uzA}8Wc)Yv#>vqX|*w9SgDb06$M3q_@emF%OI!KV8pd@6b?&` zsE|OrW|@O33)?ajaA>S1TCqONeBM-6yW{Hc2>C#I=alCBp@5Ld=-deB*ldug6;Jul7DME%fiSVYT2yf|s`<>9D^-RnG9AgZsa&C^2@*H_)e) zWYR=RX4~>CZhhG*28>XmE={`KDbMd0k;?OBlsNgsXi}U7N1fp{kuR+~^We^D zPelQ@p9Dw`s1#By&;4oV18nUWUzie0!ZL=2UuHWuEyL$92U7iT%VywoNkj4~bZ?4) z7L=P)DY$VqZoo0zPjG&W<~3M8Kv~6;v*bBWh@dz*1L&p<4yPj=N=)^Lh=;@Z!33oo4|v6`1ifj47A8rxj}6G|czgd_U>z$q(RD*0_!XPX%R74IB{_Q$P$x z5qRBII-#;h&gDpFdoKdnKEDd0Sr)I!QX-LNc8z-|eQ((LEs#?{d8G)v?2sG(%wl^@ zpt4Mh?pe>Vz^RHK#qWw|Zzx~EFz0Yp#UfTPz@1D2m0NG=o>|OrV9e@#oJxzc)5iy6 zz?4-xI5`wx_cO#`nt7;d$Bx=XiHp9#?5;(>YLDk)u|2mG{7CmZ=sVxml{qLKbPjSW&uMz@+yD z{H3E0Zs0*b?JlQ?Dh&O%32s-H90_?jhg!inZC2&SSnfPv?29)gy3CKduue3?@%e%5127Mgta#vaT#%!)61uKTZdJ z6jhzQ^~#Pc&!u_WIs^b^Ks`ITX3;LDaw1`>$uz8>4gof>{|I(w@9m=Q?8On2YJPRH zg=TamKlzTWS~qK_&a5$OI1dH;H2Q9$V>yZP&nVuV<1{aG9V&~`vGdxuNX)VYPi5@I zKTicpypFD1?!{!YIMkJ$t(3x4li~-bpD$CftHTJJ-TyOYR9xAa$rdV^#g=}qb}H9g zsUb*)E{Smb-lByurS4Qr;%p>zNLl*&&`4G%y>d&GN)7NROKp}cJBiI=3T9nt!yux( zBFsn$MsW$u`s#m4cZ6ZH{wS>BnqAX{svcLV#{kt18gpLp$DET98Q>rCF@It?vA%GR zgDkS=J(F%)cMko zrlq-XWgpC1)pC>D_9Ow{*j(&@W?Idme~j`~&`gwD*!d^*l2iDgUN}@m-x}@6Qh0hQ z4b{y1EsjL{DO#esSia}u(H}wSAcKt#bWa%Spah9_^hQ+RRr4S!3VA$(fMSW9;anGS zDx{ss1ZiPv0%#S}abElN8+G8D5Z^O8Mt6z5iK~ZXvHGscKt#}N@l@f$)Q0+$w&n;W z7vx;r2K1^UOyL>jY!6!@)htQ&(?1Z#ltdi^F}9S7^l8HB*{!20m9vVGWe+GPz2J3b znz+#l;Zd9*Ikg-k^}dK^L42jxEOrjb1Y272Zj`)a@FZTtd1pZkJt46WTUa?vSC56T z@Qm|5B8&0q8}lKbheVmpN;BLQ^~v5NrifVvOj<5!zE8vYPqO=h<9xM%L|i0UZhi(M zR~$9Riw5@E3Y40Mv6W1b$lVn#qVDsH+Sti6EVWnda?hxZgWyzi zNuMIs_}lD-G-2c5XKMT`3X8L`-^shUemS4QHo;B34WIKGWfX8YPdm>QTb}lRn8$bG@qN0$Wku-u?1>mm8 zUyG{7Z2f)u$yBI6NdV9+?NEJc{2aG5GUnA%e@bG^N$ zyJ`7E4VLE~n*lu|O9c{(iO(8N;w!@Re?V3JMb{}0Yf55RdKx~nUr`oNprm7i0^PZO znTk>dNYD|6IC*l>NO-;lvP07=7asz9KFVHBa)EyoC9w7k{OavJ`JBLploIApV_m~k z4|0Fr;a#`)MK+U9f=qR`r_nwW@>4pI4Y{hHn2EaQX{r=6A9w-I*05Id1hpDLbDlfC znKh%R{{CZ?U;J>rk3t*PaZS#JG>gDeuNcSDDIomukp&f8`R&<`>N%ZYPrW(Sjda^q z1T>h*;EoV6D$#P9edP z^=mH1;tIFbdQs`m#E<;3?M2}XA};T*tJ_6C&wD%j&JW$a!m<(F7v@vwp#9JIeb8iY ztJSwE^T30&^c{b>h$kzBIwR^G9whSb_Wik|Fjt-%2uKIB0)(XtJfow2Wfn^w z<>db?c58XgG_M%>ohHty)^c$7gzrE=qA-)RrKOuq@#KULpyucIG#~$c&tI%>P=TS7 zlLiYxneJn=x8IB~-)=2iFxv(A8PDLq2PJ~GTe=^qT%R<|3cfOPcp2y9zx+-88JU%X zzq@W)C)>Ey^t|kp(JKS%ul`cK3^gx5u9x`AK6HS#&AQ1BM7CGh8lsQGELk_kTfdH? zn(IIC^vPHeec99x4#cj28Otu;uWGP$;9UugXCGO*bUo|Jwev82&;Ry(yADQuc=XN# zpmW(1s8rp4Vkzv%>d*fid3V1}+VwMK=wtV{V9eupzV&aA7>(Z>=?>b2rm6o}iq;nQ z882`@nbGj%CObb`gWfHFRhl8RY!p`MCq_m?r5u z292>QX=(A2SX+O<`m<(5=nnJ7-x z)|csv3eXqTw#m{D&Fl_h$7^r#=RNz!ttUDvEs8Zmfo`YMnPyYQn_}d{p zM;KHx#`p**wJzCKliD%eEAxS5dJ2XF<(r9hb2rwuA$U%YwK}vOcO&Y5k0fPS670G8 zA3thcK}xFJe^qN_YY#?_`gG5yXm*xYPUmPG)wCRj%?RPU^h+_m<|rs!)03A!-WXCLxtRyxaRz`0!WRnc-1}R*H@-R> zt%q3%Y83kMe6}{-D0O*mU+(pdX|Xtn;NvCx4UJy$;xGLe7ppVU^rJhc)5G0MSF4b# zM;90V+B#!>h=&DnPya`Oe)X4P*AX7!wX}9qsihCxy%)VCK^vv&&n<<<+UPa}`cpjb zchHXZ@(m0qB{)pLSA92Xmx>11ZSqaEBfD4SSMF!H%OZEuxt0TkYxfIz&L2=pu$)W7 zjyMwk{?ja(CX0^HLyu#lMmcQrkH?6IJ*L+hR=#c|unj=vNh)*L@2M$DP4}b7iiziU z#oZMyCPFngD=5Nd<4yvPB1wah*pe?E5w+_a)$`|~a`n(CVi%Em_1Jnpr_3+&3X_LN zxZ4omqf>@Mf*SvDPy8rTX-gB=WkpJBw+rWL|Mo|6X+|n!!oG*f?za_gE}5brIT|^A zGUXY{m?sdNc`}0lZCg9c4ZCYYC_EJa8XHSVV!Bp00=32pG_n)s3sM3#!n&bTo z|B{?1S2ySTd1Chfc%KM=It^ptnUdQBU0qa$rnq{npC^B)&+87Cl3Y3( z`4E~?vfd9a8f0+0PL*8xq#*AEIvI8l#BQt?hG7%%|Kt#Dh_z@(QBYKMrL27&wlE5H zTZ_w#K9Uk)FM}{42KVmP`oUA!!ysYpnf_q|+ZD(+Q7GsNVgPc}G}enbqUB{T3mW&K zE8J7uf#wT?3Kxow9@^eRQVLLk%hiYPJ6n?LIsM9@`$QthG#s(ki;BU{!?4eJVp9~O z3?BFCLSC>EI}WYiMHAB9X1Kp!jJfpL(-n*IhJlMp-<{};Xpl0iluREy1}hG@m31=e3a(}#lj zn_q_fv_@NPMnj$R(}Fk}+Ku3rLm&y*XCPu4>@Ee4&$FQOZVr69Rhlmd+9qka&#K*1nk7t?OqclSTnMSY;%f2TfSh>X$-BY*e| zYhK~T3m}k@xp`p8^RF)s7-f8*!SRFH*nZ+~^HB_s?fyxX9(qUs-C*71IE6+NwwciG zGF`X0^=$z#?2ZLgfLd2Wt7v@dv9YTF-l%&TK!@6nM)rO5tbME{192{~`^f6){Y#|E zU&3wRoFksUNfxnkDL`1!A+4G3xH_1AxPGZR3h@lW7pm7<`Ra8}oj`y%382}8OEKbV zUZuukB34cXEMWdGHFHr6X_X0|HlB4teg?3a!>*)=a~Hzm$7VwhLLc=GZPkq)mh1UIst&RRWQ-mF&e6GM9`@FL(V+6-Bd7R!QOIvZft8v+eKT^zmg^!bE2ln{On!|<@!o!OXN{AqoanDJ-o2J`Vx z>BB1tm*cTl2Vc_GS>2MBp}&(?JN=vP)yt+PP8Cf&7AG%EgSAttyWHvolE|4 zQLN_i7rqXCergLld_IA-Gk;efG>X)qjG8tr)?M z!?j1$yH@y}CAKN|;nUZ3?ecA^UPdDiv)w>HSY3q5de z7xT(vD`Z5oz`PV0aeJ!+Y`yq=(Gy+IpZe`8BC>gIa%SfAce!pE4vs4Sltn|Z% z5v4 z*mv42iqeWBFSO&d{1daw5ZOBHAl>hV@>>2khAdUxG80RO4O>EAGKBaQ7`w?Q=MEdF zg?(W>`rhQgNr5D5RX1vS6m0lC zUjk_uT>i$-&`M9T`$YTEw+3RMPr#AS_B=kR0*ZXsrR+r{6U}@mKl}8?r>-z+69)6rqA# zv8xQz+_ziR+v=y0AJ(w6{6G3X5Ao;ir0nlDUnAc#$S#xsO?71;3_g%P-}q=u?XGlz2t)vm?busx~yCgyKCe}}%#_KmZj&+o(_rqY-!TD4}( z4tw3XvZIF{VgeAD8F`)ChC30iw!dri7X@#~mNwG)%8-*%eaxov+&@ehB=j~Hv*0i<;<}Roe$@t*l z$I+};-+R5FA?6DcnFkd^UyjZk8aayj!{%2>-YX-KYljQr#=$ISzn0%SUtA|Gn_51o z$6m4ouZ}#aLQCPCkSt{m^pqiZBRx?-mYY4_wuCU-Dl>blC9wT<*2BEe{jiqC$i}Bn z)VE>~0Chw@B85mGrY;dHPD{+2xyvDijSONs8l|WuHq%cJRNo{n_IMFhhS=uF6PLE! zwEIC#*JHg0si4i2;Pr^kLrnRqcG9ik304&n+w8T@Ji*lxGaL8{E|^KlJC^Yku9_e6 z*o63ZC5wY@Y_Y1k)hx56MBsE{(w63KwW6UTvF_a9{XG2k^wEoOo^(gjnk z$U_42NmabpR*kD{T7M^)jYzYQk)P$}`w`;SafMr%^2>?bxV}<>hhZ!mRr^VlDk9TC zz!9clo06}*@+JGwC|tn7^o&edvm-3#34&M9<}1Wihs_qo6CCT79jC+sHQO49QBf2? z4+Okz^`T}OgW2Fj_dG$QEjog-%1Edg3%eYGTu0CmMrHK&!i|dB4*JAJ&;eFE3(9}DluV1@ z#jzWP)DFe)pl&jnH{XY-VZzvyDJ zpvbTb96Q4oK#oh}wyCd-1RO3r2wDOHnGqk%P%Q26-DC23p?*3~O|}%srju3ZNB0 zvRL72YCM{R99sHuSORba;UCQGUdWB>F$-J3*vE-2-}8?)8g5>HSo?5oi(`hL%H(QF zkh-CP71(3&)Ebt1rk3ilEcyg$wmcPszGK4nFsg0hd=zmsH=@O6;$5^WV~bwRo`}Zd z2Ak>MIX7f>FyCLq`R{bz6CmmG9W=vE!~sTS2Fed}m{+lDqF@+S+)T@;N}bV$ilhAgBXE_@KNzil)8)EwCFg#N|{{Vfeuy2JC%S$l~QTK^+D z=n^Ik-~P;@8JuQ+u^@N%w&U@Vy;qB^=hwP*Y3HO4KhmXd-vwX-6a#W8|MgeLLZLv{w<>WlF2#qmxEYx+~7}(*@r}4pSd=E-Iz% z60~S?%-Cc>`x-swd5md#m+@oo(MGF__6$3utb^1&W3Uz1G`Qt+{zBlQ7{W9@Z^!k~ z%nA=@2ZuAXdic>ROXAkc1v$)m^tzAT)>&CsP7#3fk1BoadXWp@w-usD^uaeqp#&;D z=7#&XGB~Y%N8OPNrpo9t;n%3q7h@99uFC@h$Igy;0G>{NW1TMVCrgJ7y zq5UT6Li@gLe@xl*X#?%Z<>a!gEB?2`73Q+p5=5eWBb9m92Gi{m%)_abG?FI`oQnd_JD9)T_DUPLTV z{;ZAu(p|OOC(F>6zEBF2HKj0*YQ??5nTKtI(idb0txYLn23i~3t$YQ@GK{dXuk8ir zk{a9=;{tH!R?H>^>WK<)X9^Cepdz~>c?(qE4p2%v%sRu{Oo-s@;n%hje>=+2fF&qM+7vr3tpKw|Idu4;yewUodzo z+lG6AHxHn;7U2tsdb1&q>R=eD9mK2_VU{mlFi=1jJLAs-4xSmf;%&;-^I+h){HP)J z=Y8S(smJ6kmMKM|LTlUs{#-!~S?R)~1KIk-nMl*<+(#}T>7-!lqE+=zZ56&=^|dgZ z>bApNf%@cBf|-?b&4>j^9VLH%kDUFsLcJQw?03E2 zFA4j5WA$*o^Xl)8!psAjh(t{y^?qvW?(1)-hoCFGKc`nr;lDk@uRQ-AriG6`9eMbC z{r<}XO6D8W-#&Cn)jt2>@8635Ec!oe-Jvl~PBOnp!(;QqufOkxf6sr20)?OM zJXrnl{>!KmyqA3uwvn|MLXYxl{d+n;g_3XxETXqE`*S5Zzi~k{eP@1G(0JQd%+~vU z_r2l5{sW@quV3)PAOEXLpSx@EW6$s@@W|iqtwdtuJ|*5$C5hX;AR#i?xxt)!a7ndC zHq83(^_6vN(X%_`3tZBK;*U9Pc}2Gw|9H-^ zbaKV-f7Nj9QTdz{pVsnTOYh-#dV38^z4jLI@uQ(B8S6CfZzc{wgS|ofUp{tK+N*4l zYkeeX_72jpKf-06NDd8qb3<#jRCDWmp&)iw_U-EPz1zJd+SQ>&a&flT0Ozak%UeZK zY7?ST3sluxSUh;$)^zyVzf*gk-n{)eu`K5H@E&;+pGLlqc|q9zJ@4+iG3M@X&eNy_5kd40o&ycL+?dv2i+)|^8{+2~(MZbQyV4lX!Df@atwqsDr7*nu+go6t?l!SN;)jUj z9eL+7sJGZgu`liJE*)Onqtsc}4f}BWBUZw3swl)}?~hgUaqKzw97~SWiu18&>2Eie ztXn(FAwMxu5wR}w6qI9rU2W4%j0vy{+3bZMid!laOz{7BB>yWg77gFC_q9VKe!0-( zUjqjdG^!aWz$Yk*h5##|nadDQbO}29-$}5ihvGj_J}yN`Apt>g0Z~CgL7LJU(t6Of`CJcLf#+9ReY(2;Fo&j6qCl{|Ev%2PtcU z8S#w%l_hmIDOsr}Njn={Wf7U#8kH;onC(R7F_(G0t9+c~ ztgV@_&vaL9bw8|>he->}=Ii!s^AstIGtX#GmjA|>=b2OZZRz4vCHk@<$t~lEP;~sn zyIk88__iXQqwt_=cAQE)da$;E`>fX+AbRU*va4U3J)BJhPx@NR6%^}T!4j-)ulKQe zjy65Az--d_<+2n3Uh>T!`R`q64no4zzgEAt;*>xf;3B`sKm=pta9f+^B&z9<1OcEJ zz)Mf=_I9B9j~hjU`gcbop3c_*Re9>!DZ?{PCcfT-xyZla0Vx{eM$RvD&rPJn*>@f` z|CG!Q;FpxQah%zL*}rKg6OG;Mv@#}qHZXk=6lSW)=5^;~N~&o2qW-!O{39*?(<`33 z7O;alo=|16$}_L=EKcV7Z?HFOh|Bb_wg z31+?Ra^$~4WE!?aqei#N_mOJ_cZa=QpXW?&?uoW2ZQ%jZe=iQ?eCmUZKlz>YGf7|9 z5BD=IaEhQx_!s)DsL_mq9${K#gOYQ+%x=OPYDB4SS9sGOjLq|;?Egn!^$#ZX|6;Q0 zIXDvXt9jTv{0FIB_#dFCJ~+sMSr`q|HU0<9F2pQ|&eQYsgfI*Li$?noxSUz|Kl!r! zYKqKeFGWQaltkskMHR#ql;xF$l*ELUL`6iz6eYw(h2`Xx1Z9~2XA!iPe{~BI|Lzr- z|3~cT3e~6-xvUPEA{-UJ|93S#cC=EDotbRRFp&-GBS?s0O%j2<$r?;1MIYk6Y!Q82 zk2J|qf+?&D(%AR^%6wL#t9+hz{+5$gIM87LlJha=b(f(D`@Z(ycM}923}F{IMAQGh b8hs!(-jD!qbj1k^38OnUc6KFgWy1dj8q?Gw literal 0 HcmV?d00001 diff --git a/manual/qmcpack_manual.tex b/manual/qmcpack_manual.tex index 6b45c18ac..33b2a5caa 100644 --- a/manual/qmcpack_manual.tex +++ b/manual/qmcpack_manual.tex @@ -18,7 +18,6 @@ \usepackage{caption} \usepackage{subcaption} \usepackage{graphicx} -\usepackage{epsfig} % making listing behave properly % with setting below, listings now render correctly From aeade0db8ed7e2f73aa51bef4738ed1202449bed Mon Sep 17 00:00:00 2001 From: Mark Dewing Date: Mon, 25 Jun 2018 16:46:47 -0500 Subject: [PATCH 6/7] Attempt fix for test_MO with Intel SoA build Add a call to ions.update to ensure that RSoA.copyIn get called. It appears that ions must be updated before elec (because the call to elec.update uses data from ions). Will this change, the run is clear from uninitialized value errors from valgrind. --- src/QMCWaveFunctions/tests/test_MO.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/QMCWaveFunctions/tests/test_MO.cpp b/src/QMCWaveFunctions/tests/test_MO.cpp index 2351df92d..5a2543171 100644 --- a/src/QMCWaveFunctions/tests/test_MO.cpp +++ b/src/QMCWaveFunctions/tests/test_MO.cpp @@ -61,6 +61,7 @@ void test_He(bool transform) ions.R[0] = 0.0; SpeciesSet &ispecies = ions.getSpeciesSet(); int heIdx = ispecies.addSpecies("He"); + ions.update(); #ifdef ENABLE_SOA From f3ca75cacac4c67182b30cac1c93c5bc0d1a86c9 Mon Sep 17 00:00:00 2001 From: Mark Dewing Date: Tue, 26 Jun 2018 13:09:59 -0500 Subject: [PATCH 7/7] Add more molecular orbital unit tests. Add Ne atom as an example with multiple orbitals on a single center. Add HCN molecule as an example with multiple centers. Update the python scripts to read atomic positions from the structure file, and add a class to handle GTO's on multiple centers. --- src/QMCWaveFunctions/tests/CMakeLists.txt | 5 +- .../tests/gaussian_orbitals.py | 29 + src/QMCWaveFunctions/tests/gen_mo.py | 55 +- src/QMCWaveFunctions/tests/hcn.structure.xml | 36 + src/QMCWaveFunctions/tests/hcn.wfnoj.xml | 712 ++++++++++++++++++ .../tests/ne_def2_svp.wfnoj.xml | 159 ++++ src/QMCWaveFunctions/tests/read_qmcpack.py | 32 + src/QMCWaveFunctions/tests/test_MO.cpp | 305 ++++++++ 8 files changed, 1331 insertions(+), 2 deletions(-) create mode 100644 src/QMCWaveFunctions/tests/hcn.structure.xml create mode 100644 src/QMCWaveFunctions/tests/hcn.wfnoj.xml create mode 100644 src/QMCWaveFunctions/tests/ne_def2_svp.wfnoj.xml diff --git a/src/QMCWaveFunctions/tests/CMakeLists.txt b/src/QMCWaveFunctions/tests/CMakeLists.txt index 0b476ecd6..de68ee93f 100644 --- a/src/QMCWaveFunctions/tests/CMakeLists.txt +++ b/src/QMCWaveFunctions/tests/CMakeLists.txt @@ -30,8 +30,11 @@ MAYBE_SYMLINK(${UTEST_HDF_INPUT} ${UTEST_DIR}/pwscf.pwscf.h5) MAYBE_SYMLINK(${UTEST_HDF_INPUT2} ${UTEST_DIR}/bccH.pwscf.h5) MAYBE_SYMLINK(${UTEST_HDF_INPUT3} ${UTEST_DIR}/LiH-arb.pwscf.h5) -EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/he_sto3g.wfj.xml" ${UTEST_DIR}) +SET(FILES_TO_COPY he_sto3g.wfj.xml ne_def2_svp.wfnoj.xml hcn.structure.xml hcn.wfnoj.xml) +FOREACH(fname ${FILES_TO_COPY}) + EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/${fname}" ${UTEST_DIR}) +ENDFOREACH() IF ((NOT QMC_COMPLEX) AND (NOT QMC_MIXED_PRECISION)) SET(MO_SRCS test_MO.cpp) diff --git a/src/QMCWaveFunctions/tests/gaussian_orbitals.py b/src/QMCWaveFunctions/tests/gaussian_orbitals.py index 240ecae0f..da28ee931 100644 --- a/src/QMCWaveFunctions/tests/gaussian_orbitals.py +++ b/src/QMCWaveFunctions/tests/gaussian_orbitals.py @@ -167,5 +167,34 @@ def get_ijk_by_type(): return by_type +# Collection of atoms with different types and positions +class GTO_centers: + def __init__(self, pos_list, elements, basis_sets): + self.gto_list = [] + for pos, element in zip(pos_list, elements): + gto = GTO(basis_sets[element], pos) + self.gto_list.append(gto) + + def eval_v(self, x, y, z): + vs = [] + for gto in self.gto_list: + v = gto.eval_v(x, y, z) + vs.extend(v) + return vs + + def eval_vgl(self, x, y, z): + vs = [] + grads = [] + laps = [] + for gto in self.gto_list: + v,g,l = gto.eval_vgl(x,y,z) + vs.extend(v) + grads.extend(g) + laps.extend(l) + + return vs, grads, laps + + + if __name__ == '__main__': gto = GTO() diff --git a/src/QMCWaveFunctions/tests/gen_mo.py b/src/QMCWaveFunctions/tests/gen_mo.py index 25a256f54..14239b466 100644 --- a/src/QMCWaveFunctions/tests/gen_mo.py +++ b/src/QMCWaveFunctions/tests/gen_mo.py @@ -25,5 +25,58 @@ def gen_He(): print ' REQUIRE(d2psi[%d] == Approx(%15.10g));'%(0,l[0]) print '' +def gen_Ne(): + basis_sets, MO_matrix = read_qmcpack.parse_qmc_wf("ne_def2_svp.wfnoj.xml") + gto = gaussian_orbitals.GTO(basis_sets['Ne']) + for pos in ([0.00001, 0.0, 0.0], [1.0, 0.0, 0.0]): + atomic_orbs = gto.eval_v(*pos) + mol_orbs = np.dot(MO_matrix, atomic_orbs) + + print ' // Generated from gen_mo.py for position %s'%str(pos) + print ' REQUIRE(values[%d] == Approx(%15.10g));'%(0,mol_orbs[0]) + + v,g,l = gto.eval_vgl(*pos) + mo_v = np.dot(MO_matrix, v) + mo_g = np.dot(MO_matrix, g) + mo_l = np.dot(MO_matrix, l) + print ' // Generated from gen_mo.py for position %s'%str(pos) + print ' REQUIRE(values[%d] == Approx(%15.10g));'%(0,mo_v[0]) + print ' REQUIRE(dpsi[%d][0] == Approx(%15.10g));'%(0,mo_g[0][0]) + print ' REQUIRE(dpsi[%d][1] == Approx(%15.10g));'%(0,mo_g[0][1]) + print ' REQUIRE(dpsi[%d][2] == Approx(%15.10g));'%(0,mo_g[0][2]) + print ' REQUIRE(d2psi[%d] == Approx(%15.10g));'%(0,mo_l[0]) + + +def gen_HCN(): + basis_sets, MO_matrix = read_qmcpack.parse_qmc_wf("hcn.wfnoj.xml") + pos_list, elements = read_qmcpack.read_structure_file("hcn.structure.xml") + + gtos = gaussian_orbitals.GTO_centers(pos_list, elements, basis_sets) + pos = [0.0, 0.0, 0.0] + atomic_orbs = gtos.eval_v(*pos) + #print 'first MO',MO_matrix[0,:] + #print 'atomic_orbs',atomic_orbs + mol_orbs = np.dot(MO_matrix, atomic_orbs) + print ' // Generated from gen_mo.py for position %s'%str(pos) + for i in range(7): + print ' REQUIRE(values[%d] == Approx(%15.10g));'%(i,mol_orbs[i]) + + v,g,l = gtos.eval_vgl(*pos) + mo_v = np.dot(MO_matrix, v) + mo_g = np.dot(MO_matrix, g) + mo_l = np.dot(MO_matrix, l) + print ' // Generated from gen_mo.py for position %s'%str(pos) + for i in range(7): + print ' REQUIRE(values[%d] == Approx(%15.10g));'%(i,mo_v[i]) + print ' REQUIRE(dpsi[%d][0] == Approx(%15.10g));'%(i,mo_g[i][0]) + print ' REQUIRE(dpsi[%d][1] == Approx(%15.10g));'%(i,mo_g[i][1]) + print ' REQUIRE(dpsi[%d][2] == Approx(%15.10g));'%(i,mo_g[i][2]) + print ' REQUIRE(d2psi[%d] == Approx(%15.10g));'%(i,mo_l[i]) + print '' + + + if __name__ == '__main__': - gen_He() + #gen_He() + #gen_Ne() + gen_HCN() diff --git a/src/QMCWaveFunctions/tests/hcn.structure.xml b/src/QMCWaveFunctions/tests/hcn.structure.xml new file mode 100644 index 000000000..44e764405 --- /dev/null +++ b/src/QMCWaveFunctions/tests/hcn.structure.xml @@ -0,0 +1,36 @@ + + + + + 7 + 5 + 7 + + + 6 + 4 + 6 + + + 1 + 1 + 1 + + + -1.0960410729e+00 0.0000000000e+00 0.0000000000e+00 + 1.0960410729e+00 0.0000000000e+00 0.0000000000e+00 + 3.1085992498e+00 0.0000000000e+00 0.0000000000e+00 + + + N C H + + + + + -1 + + + -1 + + + diff --git a/src/QMCWaveFunctions/tests/hcn.wfnoj.xml b/src/QMCWaveFunctions/tests/hcn.wfnoj.xml new file mode 100644 index 000000000..213ec85db --- /dev/null +++ b/src/QMCWaveFunctions/tests/hcn.wfnoj.xml @@ -0,0 +1,712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.00180500000000e+00 2.76000000000000e-03 -8.17900000000000e-03 2.85400000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -2.30800000000000e-03 -0.00000000000000e+00 + -0.00000000000000e+00 9.50000000000000e-04 -4.75000000000000e-04 -4.75000000000000e-04 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -7.70000000000000e-05 + -5.53000000000000e-04 2.26500000000000e-03 6.39000000000000e-04 -0.00000000000000e+00 + -0.00000000000000e+00 -4.01200000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 + -1.56200000000000e-03 7.81000000000000e-04 7.81000000000000e-04 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.36600000000000e-03 1.66100000000000e-03 + -4.76000000000000e-04 -0.00000000000000e+00 -0.00000000000000e+00 -1.25600000000000e-03 + -5.10000000000000e-04 -3.64000000000000e-03 -3.47000000000000e-04 0.00000000000000e+00 + 0.00000000000000e+00 -1.55700000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 1.54000000000000e-04 -7.70000000000000e-05 -7.70000000000000e-05 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.00186700000000e+00 4.16700000000000e-03 + -1.19900000000000e-03 6.95000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 + -2.97400000000000e-03 0.00000000000000e+00 0.00000000000000e+00 3.29900000000000e-03 + -1.65000000000000e-03 -1.65000000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -2.53200000000000e-03 2.15700000000000e-03 1.80400000000000e-03 + 0.00000000000000e+00 0.00000000000000e+00 -1.55350000000000e-02 3.65161000000000e-01 + 2.97153000000000e-01 1.85599000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + 4.35670000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 2.53730000000000e-02 + -1.26870000000000e-02 -1.26870000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -2.42230000000000e-02 2.77291000000000e-01 1.34521000000000e-01 + -2.09376000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 4.15300000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 2.54090000000000e-02 -1.27050000000000e-02 + -1.27050000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 4.22250000000000e-02 -1.39540000000000e-02 -1.25100000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 6.12000000000000e-04 -1.56038000000000e-01 -1.58669000000000e-01 + 1.77970000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 2.81360000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 4.58000000000000e-04 -2.29000000000000e-04 + -2.29000000000000e-04 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -1.20440000000000e-02 2.57665000000000e-01 2.34699000000000e-01 3.24125000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 8.59440000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 7.68000000000000e-03 -3.84000000000000e-03 -3.84000000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 3.98520000000000e-01 + 7.29220000000000e-02 -3.87470000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -2.65000000000000e-03 -2.36949000000000e-01 -3.37662000000000e-01 5.03473000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 3.17378000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 3.14930000000000e-02 -1.57460000000000e-02 -1.57460000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -2.95000000000000e-04 + 1.31389000000000e-01 -1.87670000000000e-02 -2.64026000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 4.49900000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -1.10320000000000e-02 5.51600000000000e-03 5.51600000000000e-03 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -1.16056000000000e-01 -8.95470000000000e-02 + -2.08300000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 4.22402000000000e-01 + -8.19720000000000e-02 0.00000000000000e+00 2.67744000000000e-01 -5.19590000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.85400000000000e-02 + -7.47900000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 3.94312000000000e-01 -7.65200000000000e-02 + 0.00000000000000e+00 2.43812000000000e-01 -4.73140000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -4.24180000000000e-02 8.23200000000000e-03 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.69550000000000e-02 -3.29000000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 8.19720000000000e-02 4.22402000000000e-01 + 0.00000000000000e+00 5.19590000000000e-02 2.67744000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 7.47900000000000e-03 3.85400000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 7.65200000000000e-02 3.94312000000000e-01 0.00000000000000e+00 + 4.73140000000000e-02 2.43812000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -8.23200000000000e-03 -4.24180000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.29000000000000e-03 + 1.69550000000000e-02 3.08880000000000e-02 8.83180000000000e-02 -3.29596000000000e-01 + 1.07464000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 6.51130000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 8.23500000000000e-03 -4.11700000000000e-03 + -4.11700000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 5.91330000000000e-02 -8.62490000000000e-02 -1.60259100000000e+00 -2.13358000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -1.02272400000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -1.79480000000000e-02 8.97400000000000e-03 8.97400000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 7.17680000000000e-02 + 2.32498300000000e+00 -2.15480000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -2.56648000000000e-01 -2.96943000000000e-01 0.00000000000000e+00 -4.42362000000000e-01 + -5.11814000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 2.73600000000000e-03 3.16600000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 2.25473000000000e-01 + 2.60873000000000e-01 0.00000000000000e+00 5.13324000000000e-01 5.93917000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 2.94380000000000e-02 + 3.40600000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 2.69520000000000e-02 3.11840000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.96943000000000e-01 + 2.56648000000000e-01 0.00000000000000e+00 -5.11814000000000e-01 4.42362000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.16600000000000e-03 + -2.73600000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 2.60873000000000e-01 -2.25473000000000e-01 + 0.00000000000000e+00 5.93917000000000e-01 -5.13324000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 3.40600000000000e-02 -2.94380000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 3.11840000000000e-02 -2.69520000000000e-02 -8.69870000000000e-02 6.00040000000000e-02 + 3.03903700000000e+00 1.21895000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 1.11791200000000e+00 0.00000000000000e+00 0.00000000000000e+00 6.55260000000000e-02 + -3.27630000000000e-02 -3.27630000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 6.43150000000000e-02 7.02130000000000e-02 -2.21869100000000e+00 + 3.88000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 2.50357800000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -4.78040000000000e-02 2.39020000000000e-02 + 2.39020000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 4.23336000000000e-01 -1.26321100000000e+00 -1.56750000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -2.25300000000000e-03 -6.14630000000000e-02 0.00000000000000e+00 + 4.96000000000000e-04 1.35220000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -3.02400000000000e-03 -8.24990000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -3.65470000000000e-02 -9.97138000000000e-01 0.00000000000000e+00 3.79460000000000e-02 + 1.03531800000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.11200000000000e-03 3.03530000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -1.64200000000000e-03 -4.48040000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -6.14630000000000e-02 2.25300000000000e-03 0.00000000000000e+00 1.35220000000000e-02 + -4.96000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -8.24990000000000e-02 3.02400000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -9.97138000000000e-01 + 3.65470000000000e-02 0.00000000000000e+00 1.03531800000000e+00 -3.79460000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.03530000000000e-02 + -1.11200000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -4.48040000000000e-02 1.64200000000000e-03 2.30010000000000e-02 + 1.29706000000000e-01 2.48118700000000e+00 -3.39952000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 1.09159100000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.15203000000000e-01 -5.76010000000000e-02 -5.76010000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -4.29140000000000e-02 6.96770000000000e-02 + -1.46641400000000e+00 -3.28820000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 2.48977900000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.33714000000000e-01 + 2.16857000000000e-01 2.16857000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -9.10804000000000e-01 -3.32637000000000e-01 -2.34309000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 4.61100000000000e-03 -1.14469000000000e-01 + -4.91694000000000e-01 2.76418000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -1.51882000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 4.93060000000000e-02 + -2.46530000000000e-02 -2.46530000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 7.08500000000000e-02 1.50184000000000e-01 2.10823700000000e+00 + -7.64722000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.22609300000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.07113000000000e-01 -5.35560000000000e-02 + -5.35560000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -2.70665000000000e-01 -1.24871800000000e+00 1.65701000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -1.31800000000000e-03 1.12103000000000e-01 3.63376000000000e-01 + -2.16021000000000e-01 0.00000000000000e+00 0.00000000000000e+00 5.06819000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 -8.39190000000000e-02 4.19590000000000e-02 + 4.19590000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -6.77191000000000e-01 -1.57009400000000e+00 2.45619000000000e+00 -2.14141000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 1.53198200000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 2.22738000000000e-01 -1.11369000000000e-01 -1.11369000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.23693000000000e-01 + -1.87471000000000e+00 2.90375000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -3.31636000000000e-01 -8.83668000000000e-01 -0.00000000000000e+00 4.79660000000000e-01 + 1.27809200000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 5.98000000000000e-04 1.59300000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 7.50570000000000e-02 + 1.99994000000000e-01 -0.00000000000000e+00 -2.31459000000000e-01 -6.16741000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 9.86950000000000e-02 + 2.62979000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -2.44900000000000e-02 -6.52540000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -8.83668000000000e-01 + 3.31636000000000e-01 -0.00000000000000e+00 1.27809200000000e+00 -4.79660000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 1.59300000000000e-03 + -5.98000000000000e-04 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.99994000000000e-01 -7.50570000000000e-02 + -0.00000000000000e+00 -6.16741000000000e-01 2.31459000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 2.62979000000000e-01 -9.86950000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -6.52540000000000e-02 2.44900000000000e-02 -8.11550000000000e-02 -3.10751000000000e-01 + -9.93720000000000e-02 -7.09235000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + 4.27313000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.81948000000000e-01 + -9.09740000000000e-02 -9.09740000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 1.59037000000000e-01 4.59829000000000e-01 -7.42555000000000e-01 + -5.34907000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -6.57057000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -3.16562000000000e-01 1.58281000000000e-01 + 1.58281000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 9.31771000000000e-01 1.13204000000000e-01 2.30033000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 7.31700000000000e-02 2.86917000000000e-01 0.00000000000000e+00 + 6.35410000000000e-02 2.49159000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -2.79830000000000e-02 -1.09727000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -9.45700000000000e-03 -3.70830000000000e-02 0.00000000000000e+00 -9.68060000000000e-02 + -3.79598000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.51599000000000e-01 5.94453000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.45390000000000e-01 5.70106000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 2.86917000000000e-01 -7.31700000000000e-02 0.00000000000000e+00 2.49159000000000e-01 + -6.35410000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -1.09727000000000e-01 2.79830000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.70830000000000e-02 + 9.45700000000000e-03 0.00000000000000e+00 -3.79598000000000e-01 9.68060000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 5.94453000000000e-01 + -1.51599000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 5.70106000000000e-01 -1.45390000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 2.26700000000000e-03 -2.26700000000000e-03 -0.00000000000000e+00 + -0.00000000000000e+00 2.03131000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 1.05010000000000e-02 -1.05010000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + 9.40743000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -1.75916000000000e-01 1.75916000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 2.61800000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -8.14707000000000e-01 + 8.14707000000000e-01 0.00000000000000e+00 0.00000000000000e+00 1.21250000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -7.88913000000000e-01 -1.69090700000000e+00 6.14157300000000e+00 + 3.85750000000000e-01 0.00000000000000e+00 0.00000000000000e+00 1.65994500000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -1.34915000000000e-01 6.74580000000000e-02 + 6.74580000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -2.16958000000000e-01 -4.57251000000000e-01 -2.79431400000000e+00 2.44505000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 3.37130700000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -6.26928000000000e-01 3.13464000000000e-01 3.13464000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.21370000000000e-02 + -1.23188900000000e+00 -3.02030000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -1.38340000000000e-01 -3.05664000000000e-01 0.00000000000000e+00 8.31480000000000e-02 + 1.83717000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.64001000000000e-01 3.62362000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.19397000000000e-01 + -2.63808000000000e-01 0.00000000000000e+00 -9.59700000000000e-02 -2.12048000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.78678000000000e-01 + -6.15743000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 3.92446000000000e-01 8.67114000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -3.05664000000000e-01 + 1.38340000000000e-01 -0.00000000000000e+00 1.83717000000000e-01 -8.31480000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 3.62362000000000e-01 + -1.64001000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -2.63808000000000e-01 1.19397000000000e-01 + -0.00000000000000e+00 -2.12048000000000e-01 9.59700000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -6.15743000000000e-01 2.78678000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 8.67114000000000e-01 -3.92446000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -9.43000000000000e-04 9.43000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 + 9.98607000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.70000000000000e-04 + -3.70000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 -3.91590000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 8.64819000000000e-01 + -8.64819000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.08900000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -3.39127000000000e-01 3.39127000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -4.27000000000000e-04 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -4.97634000000000e-01 -1.05288900000000e+00 2.03788400000000e+00 -4.05922000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 9.00362000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 2.03161000000000e-01 -1.01581000000000e-01 -1.01581000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -4.61994000000000e-01 + -9.12887000000000e-01 -1.14142300000000e+00 -8.80023000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 7.75678000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + 1.49602000000000e-01 -7.48010000000000e-02 -7.48010000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 4.18134000000000e-01 1.24904000000000e-01 + -1.23084600000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 2.56992000000000e-01 + 1.88260000000000e-02 -0.00000000000000e+00 5.03534000000000e-01 3.68870000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 1.20614700000000e+00 + 8.83580000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -3.32232000000000e-01 -2.43380000000000e-02 + -0.00000000000000e+00 -2.12086000000000e-01 -1.55370000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.20788500000000e+00 8.84850000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -5.42781000000000e-01 -3.97620000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -1.88260000000000e-02 2.56992000000000e-01 + 0.00000000000000e+00 -3.68870000000000e-02 5.03534000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -8.83580000000000e-02 1.20614700000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 2.43380000000000e-02 -3.32232000000000e-01 0.00000000000000e+00 + 1.55370000000000e-02 -2.12086000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -8.84850000000000e-02 1.20788500000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.97620000000000e-02 + -5.42781000000000e-01 -2.37913000000000e-01 -3.78712000000000e-01 3.41250700000000e+00 + 5.68383000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.67818000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.39311300000000e+00 -6.96556000000000e-01 + -6.96556000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -7.16214000000000e-01 -1.43820700000000e+00 -1.68378100000000e+00 1.31728200000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.21344300000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -5.03409000000000e-01 2.51705000000000e-01 2.51705000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 2.02280000000000e-02 + -3.41236000000000e-01 5.30580000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + 7.95349000000000e-01 1.54857500000000e+00 -7.06059000000000e-01 9.90206000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 -2.04509000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 1.90450000000000e-01 -9.52250000000000e-02 -9.52250000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.16410000000000e-01 + -9.52447000000000e-01 -1.64769900000000e+00 -4.54581000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 -1.15401500000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -2.28832400000000e+00 1.14416200000000e+00 1.14416200000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 2.33854900000000e+00 9.38078000000000e-01 + -1.45805000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + + + + + + 1.00180500000000e+00 2.76000000000000e-03 -8.17900000000000e-03 2.85400000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -2.30800000000000e-03 -0.00000000000000e+00 + -0.00000000000000e+00 9.50000000000000e-04 -4.75000000000000e-04 -4.75000000000000e-04 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -7.70000000000000e-05 + -5.53000000000000e-04 2.26500000000000e-03 6.39000000000000e-04 -0.00000000000000e+00 + -0.00000000000000e+00 -4.01200000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 + -1.56200000000000e-03 7.81000000000000e-04 7.81000000000000e-04 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.36600000000000e-03 1.66100000000000e-03 + -4.76000000000000e-04 -0.00000000000000e+00 -0.00000000000000e+00 -1.25600000000000e-03 + -5.10000000000000e-04 -3.64000000000000e-03 -3.47000000000000e-04 0.00000000000000e+00 + 0.00000000000000e+00 -1.55700000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 1.54000000000000e-04 -7.70000000000000e-05 -7.70000000000000e-05 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.00186700000000e+00 4.16700000000000e-03 + -1.19900000000000e-03 6.95000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 + -2.97400000000000e-03 0.00000000000000e+00 0.00000000000000e+00 3.29900000000000e-03 + -1.65000000000000e-03 -1.65000000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -2.53200000000000e-03 2.15700000000000e-03 1.80400000000000e-03 + 0.00000000000000e+00 0.00000000000000e+00 -1.55350000000000e-02 3.65161000000000e-01 + 2.97153000000000e-01 1.85599000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + 4.35670000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 2.53730000000000e-02 + -1.26870000000000e-02 -1.26870000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -2.42230000000000e-02 2.77291000000000e-01 1.34521000000000e-01 + -2.09376000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 4.15300000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 2.54090000000000e-02 -1.27050000000000e-02 + -1.27050000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 4.22250000000000e-02 -1.39540000000000e-02 -1.25100000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 6.12000000000000e-04 -1.56038000000000e-01 -1.58669000000000e-01 + 1.77970000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 2.81360000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 4.58000000000000e-04 -2.29000000000000e-04 + -2.29000000000000e-04 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -1.20440000000000e-02 2.57665000000000e-01 2.34699000000000e-01 3.24125000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 8.59440000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 7.68000000000000e-03 -3.84000000000000e-03 -3.84000000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 3.98520000000000e-01 + 7.29220000000000e-02 -3.87470000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -2.65000000000000e-03 -2.36949000000000e-01 -3.37662000000000e-01 5.03473000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 3.17378000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 3.14930000000000e-02 -1.57460000000000e-02 -1.57460000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -2.95000000000000e-04 + 1.31389000000000e-01 -1.87670000000000e-02 -2.64026000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 4.49900000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -1.10320000000000e-02 5.51600000000000e-03 5.51600000000000e-03 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -1.16056000000000e-01 -8.95470000000000e-02 + -2.08300000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 4.22402000000000e-01 + -8.19720000000000e-02 0.00000000000000e+00 2.67744000000000e-01 -5.19590000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.85400000000000e-02 + -7.47900000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 3.94312000000000e-01 -7.65200000000000e-02 + 0.00000000000000e+00 2.43812000000000e-01 -4.73140000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -4.24180000000000e-02 8.23200000000000e-03 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.69550000000000e-02 -3.29000000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 8.19720000000000e-02 4.22402000000000e-01 + 0.00000000000000e+00 5.19590000000000e-02 2.67744000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 7.47900000000000e-03 3.85400000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 7.65200000000000e-02 3.94312000000000e-01 0.00000000000000e+00 + 4.73140000000000e-02 2.43812000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -8.23200000000000e-03 -4.24180000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.29000000000000e-03 + 1.69550000000000e-02 3.08880000000000e-02 8.83180000000000e-02 -3.29596000000000e-01 + 1.07464000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 6.51130000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 8.23500000000000e-03 -4.11700000000000e-03 + -4.11700000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 5.91330000000000e-02 -8.62490000000000e-02 -1.60259100000000e+00 -2.13358000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -1.02272400000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -1.79480000000000e-02 8.97400000000000e-03 8.97400000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 7.17680000000000e-02 + 2.32498300000000e+00 -2.15480000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -2.56648000000000e-01 -2.96943000000000e-01 0.00000000000000e+00 -4.42362000000000e-01 + -5.11814000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 2.73600000000000e-03 3.16600000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 2.25473000000000e-01 + 2.60873000000000e-01 0.00000000000000e+00 5.13324000000000e-01 5.93917000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 2.94380000000000e-02 + 3.40600000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 2.69520000000000e-02 3.11840000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.96943000000000e-01 + 2.56648000000000e-01 0.00000000000000e+00 -5.11814000000000e-01 4.42362000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.16600000000000e-03 + -2.73600000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 2.60873000000000e-01 -2.25473000000000e-01 + 0.00000000000000e+00 5.93917000000000e-01 -5.13324000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 3.40600000000000e-02 -2.94380000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 3.11840000000000e-02 -2.69520000000000e-02 -8.69870000000000e-02 6.00040000000000e-02 + 3.03903700000000e+00 1.21895000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 1.11791200000000e+00 0.00000000000000e+00 0.00000000000000e+00 6.55260000000000e-02 + -3.27630000000000e-02 -3.27630000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 6.43150000000000e-02 7.02130000000000e-02 -2.21869100000000e+00 + 3.88000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 2.50357800000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -4.78040000000000e-02 2.39020000000000e-02 + 2.39020000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 4.23336000000000e-01 -1.26321100000000e+00 -1.56750000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -2.25300000000000e-03 -6.14630000000000e-02 0.00000000000000e+00 + 4.96000000000000e-04 1.35220000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -3.02400000000000e-03 -8.24990000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -3.65470000000000e-02 -9.97138000000000e-01 0.00000000000000e+00 3.79460000000000e-02 + 1.03531800000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.11200000000000e-03 3.03530000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -1.64200000000000e-03 -4.48040000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -6.14630000000000e-02 2.25300000000000e-03 0.00000000000000e+00 1.35220000000000e-02 + -4.96000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -8.24990000000000e-02 3.02400000000000e-03 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -9.97138000000000e-01 + 3.65470000000000e-02 0.00000000000000e+00 1.03531800000000e+00 -3.79460000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.03530000000000e-02 + -1.11200000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -4.48040000000000e-02 1.64200000000000e-03 2.30010000000000e-02 + 1.29706000000000e-01 2.48118700000000e+00 -3.39952000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 1.09159100000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.15203000000000e-01 -5.76010000000000e-02 -5.76010000000000e-02 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -4.29140000000000e-02 6.96770000000000e-02 + -1.46641400000000e+00 -3.28820000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 2.48977900000000e+00 0.00000000000000e+00 0.00000000000000e+00 -4.33714000000000e-01 + 2.16857000000000e-01 2.16857000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -9.10804000000000e-01 -3.32637000000000e-01 -2.34309000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 4.61100000000000e-03 -1.14469000000000e-01 + -4.91694000000000e-01 2.76418000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -1.51882000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 4.93060000000000e-02 + -2.46530000000000e-02 -2.46530000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 7.08500000000000e-02 1.50184000000000e-01 2.10823700000000e+00 + -7.64722000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.22609300000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.07113000000000e-01 -5.35560000000000e-02 + -5.35560000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -2.70665000000000e-01 -1.24871800000000e+00 1.65701000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -1.31800000000000e-03 1.12103000000000e-01 3.63376000000000e-01 + -2.16021000000000e-01 0.00000000000000e+00 0.00000000000000e+00 5.06819000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 -8.39190000000000e-02 4.19590000000000e-02 + 4.19590000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -6.77191000000000e-01 -1.57009400000000e+00 2.45619000000000e+00 -2.14141000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 1.53198200000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 2.22738000000000e-01 -1.11369000000000e-01 -1.11369000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.23693000000000e-01 + -1.87471000000000e+00 2.90375000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -3.31636000000000e-01 -8.83668000000000e-01 -0.00000000000000e+00 4.79660000000000e-01 + 1.27809200000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 5.98000000000000e-04 1.59300000000000e-03 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 7.50570000000000e-02 + 1.99994000000000e-01 -0.00000000000000e+00 -2.31459000000000e-01 -6.16741000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 9.86950000000000e-02 + 2.62979000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -2.44900000000000e-02 -6.52540000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -8.83668000000000e-01 + 3.31636000000000e-01 -0.00000000000000e+00 1.27809200000000e+00 -4.79660000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 1.59300000000000e-03 + -5.98000000000000e-04 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.99994000000000e-01 -7.50570000000000e-02 + -0.00000000000000e+00 -6.16741000000000e-01 2.31459000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 2.62979000000000e-01 -9.86950000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -6.52540000000000e-02 2.44900000000000e-02 -8.11550000000000e-02 -3.10751000000000e-01 + -9.93720000000000e-02 -7.09235000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + 4.27313000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.81948000000000e-01 + -9.09740000000000e-02 -9.09740000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 1.59037000000000e-01 4.59829000000000e-01 -7.42555000000000e-01 + -5.34907000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -6.57057000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -3.16562000000000e-01 1.58281000000000e-01 + 1.58281000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 9.31771000000000e-01 1.13204000000000e-01 2.30033000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 7.31700000000000e-02 2.86917000000000e-01 0.00000000000000e+00 + 6.35410000000000e-02 2.49159000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -2.79830000000000e-02 -1.09727000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -9.45700000000000e-03 -3.70830000000000e-02 0.00000000000000e+00 -9.68060000000000e-02 + -3.79598000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.51599000000000e-01 5.94453000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.45390000000000e-01 5.70106000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 2.86917000000000e-01 -7.31700000000000e-02 0.00000000000000e+00 2.49159000000000e-01 + -6.35410000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -1.09727000000000e-01 2.79830000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.70830000000000e-02 + 9.45700000000000e-03 0.00000000000000e+00 -3.79598000000000e-01 9.68060000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 5.94453000000000e-01 + -1.51599000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 5.70106000000000e-01 -1.45390000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 2.26700000000000e-03 -2.26700000000000e-03 -0.00000000000000e+00 + -0.00000000000000e+00 2.03131000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 1.05010000000000e-02 -1.05010000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + 9.40743000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -1.75916000000000e-01 1.75916000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 2.61800000000000e-03 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -8.14707000000000e-01 + 8.14707000000000e-01 0.00000000000000e+00 0.00000000000000e+00 1.21250000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -7.88913000000000e-01 -1.69090700000000e+00 6.14157300000000e+00 + 3.85750000000000e-01 0.00000000000000e+00 0.00000000000000e+00 1.65994500000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -1.34915000000000e-01 6.74580000000000e-02 + 6.74580000000000e-02 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -2.16958000000000e-01 -4.57251000000000e-01 -2.79431400000000e+00 2.44505000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 3.37130700000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -6.26928000000000e-01 3.13464000000000e-01 3.13464000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.21370000000000e-02 + -1.23188900000000e+00 -3.02030000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -1.38340000000000e-01 -3.05664000000000e-01 0.00000000000000e+00 8.31480000000000e-02 + 1.83717000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 1.64001000000000e-01 3.62362000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -1.19397000000000e-01 + -2.63808000000000e-01 0.00000000000000e+00 -9.59700000000000e-02 -2.12048000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -2.78678000000000e-01 + -6.15743000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 3.92446000000000e-01 8.67114000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -3.05664000000000e-01 + 1.38340000000000e-01 -0.00000000000000e+00 1.83717000000000e-01 -8.31480000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 3.62362000000000e-01 + -1.64001000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -2.63808000000000e-01 1.19397000000000e-01 + -0.00000000000000e+00 -2.12048000000000e-01 9.59700000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -6.15743000000000e-01 2.78678000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 8.67114000000000e-01 -3.92446000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -9.43000000000000e-04 9.43000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 + 9.98607000000000e-01 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.70000000000000e-04 + -3.70000000000000e-04 0.00000000000000e+00 0.00000000000000e+00 -3.91590000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 8.64819000000000e-01 + -8.64819000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.08900000000000e-03 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -3.39127000000000e-01 3.39127000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -4.27000000000000e-04 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -4.97634000000000e-01 -1.05288900000000e+00 2.03788400000000e+00 -4.05922000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 9.00362000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 2.03161000000000e-01 -1.01581000000000e-01 -1.01581000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -4.61994000000000e-01 + -9.12887000000000e-01 -1.14142300000000e+00 -8.80023000000000e-01 -0.00000000000000e+00 + -0.00000000000000e+00 7.75678000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + 1.49602000000000e-01 -7.48010000000000e-02 -7.48010000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 4.18134000000000e-01 1.24904000000000e-01 + -1.23084600000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 2.56992000000000e-01 + 1.88260000000000e-02 -0.00000000000000e+00 5.03534000000000e-01 3.68870000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 1.20614700000000e+00 + 8.83580000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -3.32232000000000e-01 -2.43380000000000e-02 + -0.00000000000000e+00 -2.12086000000000e-01 -1.55370000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.20788500000000e+00 8.84850000000000e-02 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -5.42781000000000e-01 -3.97620000000000e-02 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -1.88260000000000e-02 2.56992000000000e-01 + 0.00000000000000e+00 -3.68870000000000e-02 5.03534000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 -8.83580000000000e-02 1.20614700000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 2.43380000000000e-02 -3.32232000000000e-01 0.00000000000000e+00 + 1.55370000000000e-02 -2.12086000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 -8.84850000000000e-02 1.20788500000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.97620000000000e-02 + -5.42781000000000e-01 -2.37913000000000e-01 -3.78712000000000e-01 3.41250700000000e+00 + 5.68383000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 1.67818000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.39311300000000e+00 -6.96556000000000e-01 + -6.96556000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -7.16214000000000e-01 -1.43820700000000e+00 -1.68378100000000e+00 1.31728200000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 1.21344300000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -5.03409000000000e-01 2.51705000000000e-01 2.51705000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 2.02280000000000e-02 + -3.41236000000000e-01 5.30580000000000e-02 -0.00000000000000e+00 -0.00000000000000e+00 + 7.95349000000000e-01 1.54857500000000e+00 -7.06059000000000e-01 9.90206000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 -2.04509000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 1.90450000000000e-01 -9.52250000000000e-02 -9.52250000000000e-02 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 -3.16410000000000e-01 + -9.52447000000000e-01 -1.64769900000000e+00 -4.54581000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 -1.15401500000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -2.28832400000000e+00 1.14416200000000e+00 1.14416200000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 2.33854900000000e+00 9.38078000000000e-01 + -1.45805000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + + + + + + diff --git a/src/QMCWaveFunctions/tests/ne_def2_svp.wfnoj.xml b/src/QMCWaveFunctions/tests/ne_def2_svp.wfnoj.xml new file mode 100644 index 000000000..21a9608ed --- /dev/null +++ b/src/QMCWaveFunctions/tests/ne_def2_svp.wfnoj.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 9.90133000000000e-01 -3.12330000000000e-02 9.07200000000000e-03 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.22026000000000e-01 + 6.43777000000000e-01 4.60567000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 6.97249000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -4.54527000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 6.97249000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 -4.54527000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 6.97249000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -4.54527000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 3.27583000000000e-01 + 1.60811800000000e+00 -1.57553100000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 9.06086000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 1.04907300000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 9.06086000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 1.04907300000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 9.06086000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 1.04907300000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 1.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.00000000000000e+00 0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -4.80634000000000e-01 -5.19119000000000e-01 9.99753000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 8.76921000000000e-01 -8.54702000000000e-01 -2.22200000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 + + + + + + 9.90133000000000e-01 -3.12330000000000e-02 9.07200000000000e-03 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 3.22026000000000e-01 + 6.43777000000000e-01 4.60567000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 6.97249000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 + -4.54527000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 6.97249000000000e-01 0.00000000000000e+00 + 0.00000000000000e+00 -4.54527000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 6.97249000000000e-01 -0.00000000000000e+00 -0.00000000000000e+00 -4.54527000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 3.27583000000000e-01 + 1.60811800000000e+00 -1.57553100000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 9.06086000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 1.04907300000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 9.06086000000000e-01 0.00000000000000e+00 0.00000000000000e+00 + 1.04907300000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 9.06086000000000e-01 + 0.00000000000000e+00 0.00000000000000e+00 1.04907300000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 1.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 0.00000000000000e+00 + 0.00000000000000e+00 0.00000000000000e+00 1.00000000000000e+00 0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -4.80634000000000e-01 -5.19119000000000e-01 9.99753000000000e-01 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 -0.00000000000000e+00 + 8.76921000000000e-01 -8.54702000000000e-01 -2.22200000000000e-02 -0.00000000000000e+00 + -0.00000000000000e+00 -0.00000000000000e+00 + + + + + + diff --git a/src/QMCWaveFunctions/tests/read_qmcpack.py b/src/QMCWaveFunctions/tests/read_qmcpack.py index 82d88391c..da28b62f7 100644 --- a/src/QMCWaveFunctions/tests/read_qmcpack.py +++ b/src/QMCWaveFunctions/tests/read_qmcpack.py @@ -87,5 +87,37 @@ def parse_qmc_wf(fname): return basis_sets, MO_matrix +# Read the ion positions and types + +def parse_structure(node): + particleset = node.find("particleset[@name='ion0']") + npos = int(particleset.attrib['size']) + pos_node = particleset.find("attrib[@name='position']") + pos_values = [float(a) for a in pos_node.text.split()] + pos = np.array(pos_values).reshape( (3, npos) ) + + elements_node = particleset.find("attrib[@name='ionid']") + elements = elements_node.text.split() + return pos, elements + + +def read_structure_file(fname): + tree = ET.parse(fname) + return parse_structure(tree) + + + if __name__ == '__main__': + # For He basis_set, MO_matrix = parse_qmc_wf('he_sto3g.wfj.xml') + + + # For HCN - need ion positions as well + basis_sets, MO_matrix = parse_qmc_wf('hcn.wfnoj.xml') + + pos_list, elements = read_structure_file("hcn.structure.xml") + + gtos = gaussian_orbitals.GTO_centers(pos_list, elements, basis_sets) + atomic_orbs = gtos.eval_v(1.0, 0.0, 0.0) + #print np.dot(MO_matrix, atomic_orbs) + diff --git a/src/QMCWaveFunctions/tests/test_MO.cpp b/src/QMCWaveFunctions/tests/test_MO.cpp index 5a2543171..785e50c7f 100644 --- a/src/QMCWaveFunctions/tests/test_MO.cpp +++ b/src/QMCWaveFunctions/tests/test_MO.cpp @@ -155,5 +155,310 @@ TEST_CASE("ReadMolecularOrbital Numerical He","[wavefunction]") test_He(true); } + +void test_Ne(bool transform) +{ + std::ostringstream section_name; + section_name << "Neon, transform orbitals to grid: " << (transform ? "T":"F"); + + SECTION(section_name.str()) { + OHMMS::Controller->initialize(0, NULL); + Communicate *c = OHMMS::Controller; + + ParticleSet elec;; + std::vector agroup(2); + agroup[0] = 1; + agroup[1] = 1; + elec.setName("e"); + elec.create(agroup); + elec.R[0]= 0.0; + + SpeciesSet &tspecies = elec.getSpeciesSet(); + int upIdx = tspecies.addSpecies("u"); + int downIdx = tspecies.addSpecies("d"); + int massIdx = tspecies.addAttribute("mass"); + tspecies(massIdx, upIdx) = 1.0; + tspecies(massIdx, downIdx) = 1.0; + + ParticleSet ions; + ions.setName("ion0"); + ions.create(1); + ions.R[0][0] = 0.0; + ions.R[0][1] = 0.0; + ions.R[0][2] = 0.0; + SpeciesSet &ispecies = ions.getSpeciesSet(); + int heIdx = ispecies.addSpecies("Ne"); + ions.update(); + + + #ifdef ENABLE_SOA + elec.addTable(ions,DT_SOA); + #else + elec.addTable(ions,DT_AOS); + #endif + elec.update(); + + Libxml2Document doc; + bool okay = doc.parse("ne_def2_svp.wfnoj.xml"); + REQUIRE(okay); + xmlNodePtr root = doc.getRoot(); + + TrialWaveFunction psi(c); + + OrbitalBuilderBase::PtclPoolType particle_set_map; + particle_set_map["e"] = &elec; + particle_set_map["ion0"] = &ions; + + + SPOSetBuilderFactory bf(elec, psi, particle_set_map); + + OhmmsXPathObject MO_base("//determinantset", doc.getXPathContext()); + REQUIRE(MO_base.size() == 1); + + if (transform) { + // input file is set to transform GTO's to numerical orbitals by default + } else { + // use direct evaluation of GTO's + xmlSetProp(MO_base[0], (const xmlChar *)"transform", (const xmlChar *)"no"); + xmlSetProp(MO_base[0], (const xmlChar *)"key", (const xmlChar *)"GTO"); + } + + SPOSetBuilder *bb = bf.createSPOSetBuilder(MO_base[0]); + REQUIRE(bb != NULL); + + OhmmsXPathObject slater_base("//determinant", doc.getXPathContext()); + bb->loadBasisSetFromXML(MO_base[0]); + SPOSetBase *sposet = bb->createSPOSet(slater_base[0]); + + //std::cout << "basis set size = " << sposet->getBasisSetSize() << std::endl; + + SPOSetBase::ValueVector_t values; + SPOSetBase::GradVector_t dpsi; + SPOSetBase::ValueVector_t d2psi; + values.resize(5); + dpsi.resize(5); + d2psi.resize(5); + + ParticleSet::SingleParticlePos_t newpos(0.00001, 0.0, 0.0); + elec.makeMove(0, newpos); + + sposet->evaluate(elec, 0, values); + + std::cout << "values = " << values << std::endl; + + // Generated from gen_mo.py for position [1e-05, 0.0, 0.0] + REQUIRE(values[0] == Approx( -16.11819042)); + + sposet->evaluate(elec, 0, values, dpsi, d2psi); + std::cout << "values = " << values << std::endl; + std::cout << "dpsi = " << dpsi << std::endl; + std::cout << "d2psi = " << d2psi << std::endl; + // Generated from gen_mo.py for position [1e-05, 0.0, 0.0] + REQUIRE(values[0] == Approx( -16.11819042)); + REQUIRE(dpsi[0][0] == Approx( 0.1747261458)); + REQUIRE(dpsi[0][1] == Approx( 0)); + REQUIRE(dpsi[0][2] == Approx( 0)); + + + ParticleSet::SingleParticlePos_t disp(1.0, 0.0, 0.0); + elec.makeMove(0, disp); + sposet->evaluate(elec, 0, values); + // Generated from gen_mo.py for position [1.0, 0.0, 0.0] + REQUIRE(values[0] == Approx(-0.005041631374)); + + + sposet->evaluate(elec, 0, values, dpsi, d2psi); + // Generated from gen_mo.py for position [1.0, 0.0, 0.0] + REQUIRE(values[0] == Approx(-0.005041631374)); + REQUIRE(dpsi[0][0] == Approx( 0.01862216578)); + REQUIRE(dpsi[0][1] == Approx( 0)); + REQUIRE(dpsi[0][2] == Approx( 0)); + REQUIRE(d2psi[0] == Approx( -0.01551755818)); + + + SPOSetBuilderFactory::clear(); + } +} + +TEST_CASE("ReadMolecularOrbital GTO Ne","[wavefunction]") +{ + test_Ne(false); +} + +TEST_CASE("ReadMolecularOrbital Numerical Ne","[wavefunction]") +{ + test_Ne(true); +} + +TEST_CASE("ReadMolecularOrbital HCN","[wavefunction]") +{ +} + +void test_HCN(bool transform) +{ + std::ostringstream section_name; + section_name << "HCN, transform orbitals to grid: " << (transform ? "T":"F"); + + SECTION(section_name.str()) { + OHMMS::Controller->initialize(0, NULL); + Communicate *c = OHMMS::Controller; + + Libxml2Document doc; + bool okay = doc.parse("hcn.structure.xml"); + REQUIRE(okay); + xmlNodePtr root = doc.getRoot(); + Tensor tmat; + tmat(0,0) = 1; + tmat(1,1) = 1; + tmat(2,2) = 1; + + ParticleSet ions; + XMLParticleParser parse_ions(ions, tmat); + OhmmsXPathObject particleset_ion("//particleset[@name='ion0']", doc.getXPathContext()); + REQUIRE(particleset_ion.size() == 1); + parse_ions.put(particleset_ion[0]); + + REQUIRE(ions.groups() == 3); + REQUIRE(ions.R.size() == 3); + ions.update(); + + ParticleSet elec; + XMLParticleParser parse_elec(elec, tmat); + OhmmsXPathObject particleset_elec("//particleset[@name='e']", doc.getXPathContext()); + REQUIRE(particleset_elec.size() == 1); + parse_elec.put(particleset_elec[0]); + + REQUIRE(elec.groups() == 2); + REQUIRE(elec.R.size() == 14); + + elec.R = 0.0; + + #ifdef ENABLE_SOA + elec.addTable(ions,DT_SOA); + #else + elec.addTable(ions,DT_AOS); + #endif + elec.update(); + + Libxml2Document doc2; + okay = doc2.parse("hcn.wfnoj.xml"); + REQUIRE(okay); + xmlNodePtr root2 = doc2.getRoot(); + + TrialWaveFunction psi(c); + + OrbitalBuilderBase::PtclPoolType particle_set_map; + particle_set_map["e"] = &elec; + particle_set_map["ion0"] = &ions; + + + SPOSetBuilderFactory bf(elec, psi, particle_set_map); + + OhmmsXPathObject MO_base("//determinantset", doc2.getXPathContext()); + REQUIRE(MO_base.size() == 1); + + if (transform) { + // input file is set to transform GTO's to numerical orbitals by default + } else { + // use direct evaluation of GTO's + xmlSetProp(MO_base[0], (const xmlChar *)"transform", (const xmlChar *)"no"); + xmlSetProp(MO_base[0], (const xmlChar *)"key", (const xmlChar *)"GTO"); + } + + SPOSetBuilder *bb = bf.createSPOSetBuilder(MO_base[0]); + REQUIRE(bb != NULL); + + OhmmsXPathObject slater_base("//determinant", doc2.getXPathContext()); + bb->loadBasisSetFromXML(MO_base[0]); + SPOSetBase *sposet = bb->createSPOSet(slater_base[0]); + + //std::cout << "basis set size = " << sposet->getBasisSetSize() << std::endl; + + SPOSetBase::ValueVector_t values; + SPOSetBase::GradVector_t dpsi; + SPOSetBase::ValueVector_t d2psi; + values.resize(7); + dpsi.resize(7); + d2psi.resize(7); + + ParticleSet::SingleParticlePos_t newpos; + elec.makeMove(0, newpos); + + sposet->evaluate(elec, 0, values); + + //typedef LCOrbitalSet>>, false> OrbType; + //OrbType *lcob = dynamic_cast(sposet); + //REQUIRE(lcob != NULL); + + //std::cout << "atomic orbs = " << lcob->myBasisSet->Phi << std::endl; + //std::cout << "values = " << values << std::endl; + REQUIRE(values[0] == Approx( 0.009452265234)); + REQUIRE(values[1] == Approx( 0.02008357407)); + REQUIRE(values[2] == Approx( 0.4163749594)); + REQUIRE(values[3] == Approx( -0.08854428343)); + REQUIRE(values[4] == Approx( 0.273158705)); + REQUIRE(values[5] == Approx( 0)); + REQUIRE(values[6] == Approx( 0)); + + sposet->evaluate(elec, 0, values, dpsi, d2psi); + + + // Generated form gen_mo.py for position [0.0, 0.0, 0.0] + REQUIRE(values[0] == Approx( 0.009452265234)); + REQUIRE(dpsi[0][0] == Approx( -0.05400764372)); + REQUIRE(dpsi[0][1] == Approx( 0)); + REQUIRE(dpsi[0][2] == Approx( 0)); + REQUIRE(d2psi[0] == Approx( 0.2532157143)); + + REQUIRE(values[1] == Approx( 0.02008357407)); + REQUIRE(dpsi[1][0] == Approx( 0.1009262252)); + REQUIRE(dpsi[1][1] == Approx( 0)); + REQUIRE(dpsi[1][2] == Approx( 0)); + REQUIRE(d2psi[1] == Approx( 0.3423520138)); + + REQUIRE(values[2] == Approx( 0.4163749594)); + REQUIRE(dpsi[2][0] == Approx( -0.1202256419)); + REQUIRE(dpsi[2][1] == Approx( 0)); + REQUIRE(dpsi[2][2] == Approx( 0)); + REQUIRE(d2psi[2] == Approx( -1.178149899)); + + REQUIRE(values[3] == Approx( -0.08854428343)); + REQUIRE(dpsi[3][0] == Approx(-0.004505552544)); + REQUIRE(dpsi[3][1] == Approx( 0)); + REQUIRE(dpsi[3][2] == Approx( 0)); + REQUIRE(d2psi[3] == Approx( 0.2838238091)); + + REQUIRE(values[4] == Approx( 0.273158705)); + REQUIRE(dpsi[4][0] == Approx( -0.01125044248)); + REQUIRE(dpsi[4][1] == Approx( 0)); + REQUIRE(dpsi[4][2] == Approx( 0)); + REQUIRE(d2psi[4] == Approx( -0.9173261582)); + + REQUIRE(values[5] == Approx( 0)); + REQUIRE(dpsi[5][0] == Approx( 0)); + REQUIRE(dpsi[5][1] == Approx( 0.4221165864)); + REQUIRE(dpsi[5][2] == Approx( -0.08191634629)); + REQUIRE(d2psi[5] == Approx( 0)); + + REQUIRE(values[6] == Approx( 0)); + REQUIRE(dpsi[6][0] == Approx( 0)); + REQUIRE(dpsi[6][1] == Approx( 0.08191634629)); + REQUIRE(dpsi[6][2] == Approx( 0.4221165864)); + REQUIRE(d2psi[6] == Approx( 0)); + + SPOSetBuilderFactory::clear(); + } +} + +TEST_CASE("ReadMolecularOrbital GTO HCN","[wavefunction]") +{ + test_HCN(false); +} + +TEST_CASE("ReadMolecularOrbital Numerical HCN","[wavefunction]") +{ + test_HCN(true); +} + }