From 65a84fcb5bb108bb0232cbb92d6103446470d548 Mon Sep 17 00:00:00 2001 From: pfloos Date: Wed, 26 Mar 2025 17:24:49 +0100 Subject: [PATCH] remove unnecessary files --- GoHu | 13 -- input/basis.Hu | 6 - input/molecule.Hu | 5 - input/sph | 2 - scripts/PyDuck | 321 -------------------------------- scripts/PyOptions.json | 145 --------------- scripts/PyOptions.template.json | 145 --------------- scripts/extract.sh | 229 ----------------------- scripts/run_sph.sh | 41 ---- scripts/scan_w.sh | 119 ------------ utils/fsplit | Bin 31968 -> 0 bytes 11 files changed, 1026 deletions(-) delete mode 100755 GoHu delete mode 100644 input/basis.Hu delete mode 100644 input/molecule.Hu delete mode 100644 input/sph delete mode 100755 scripts/PyDuck delete mode 100644 scripts/PyOptions.json delete mode 100644 scripts/PyOptions.template.json delete mode 100755 scripts/extract.sh delete mode 100755 scripts/run_sph.sh delete mode 100755 scripts/scan_w.sh delete mode 100755 utils/fsplit diff --git a/GoHu b/GoHu deleted file mode 100755 index f795b6b..0000000 --- a/GoHu +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/bash - -cp input/molecule.Hu input/molecule -cp input/basis.Hu input/basis -cp int/nBas.Hu.dat int/nBas.dat -cp int/ERI.Hu.dat int/ERI.dat -cp int/Kin.Hu.dat int/Kin.dat -cp int/Nuc.Hu.dat int/Nuc.dat -cp int/Ov.Hu.dat int/Ov.dat -cp int/x.Hu.dat int/x.dat -cp int/y.Hu.dat int/y.dat -cp int/z.Hu.dat int/z.dat -./bin/QuAcK diff --git a/input/basis.Hu b/input/basis.Hu deleted file mode 100644 index bbcbbde..0000000 --- a/input/basis.Hu +++ /dev/null @@ -1,6 +0,0 @@ -1 1 -S 1 - 1 1.0000000000e+00 1.0000000000e+00 -2 1 -S 1 - 1 1.0000000000e+00 1.0000000000e+00 diff --git a/input/molecule.Hu b/input/molecule.Hu deleted file mode 100644 index 17c73c7..0000000 --- a/input/molecule.Hu +++ /dev/null @@ -1,5 +0,0 @@ -# nAt nEla nElb nCore nRyd - 2 1 1 0 0 -# Znuc x y z - X 0.0000000000 0.0000000000 0.0000000000 - X 0.0000000000 0.0000000000 1.0000000000 diff --git a/input/sph b/input/sph deleted file mode 100644 index d60b6fd..0000000 --- a/input/sph +++ /dev/null @@ -1,2 +0,0 @@ -# rs - 1.0 diff --git a/scripts/PyDuck b/scripts/PyDuck deleted file mode 100755 index 25016c9..0000000 --- a/scripts/PyDuck +++ /dev/null @@ -1,321 +0,0 @@ -#!/usr/bin/env python2 -import sys -from termcolor import colored -import shlex -from subprocess import Popen, PIPE -import itertools -import re -import numpy as np -import os -from shutil import copy2 -import matplotlib.pyplot as plt -import json -from math import * -from collections import OrderedDict -import csv -import argparse -def GetDuckDir(): - return os.path.dirname(os.path.realpath(__file__)) - -def nNucl(molbaselines): - return float(molbaselines[1].split()[0]) - -def isMononucle(molbaselines): - return nNucl(molbaselines)==1 - -def openfileindir(path,readwrite): - mydir=os.path.dirname(path) - if not os.path.exists(mydir) and mydir!="": - os.makedirs(mydir) - return open(path,readwrite) -def outfile(Outdic,item,index=None): - itemdata=Outdic[item] - if itemdata["Enabled"]: - fmt=itemdata["Format"] - if index is not None: - filename=fmt.format(index) - else: - filename=fmt - if "Parent" in Outdic: - path=os.path.join(Outdic["Parent"],filename) - else: - path=filename - return openfileindir(path,'w') - else: - return - -def runDuck(mol,basis,x,molbaselines,molbase,basisbase): - #gennerate molecule file - currdir=os.getcwd() - os.chdir(GetDuckDir()) - molname='.'.join([mol,str(x)]) - lstw=list() - for i,line in enumerate(molbaselines): - if i<3: - lstw.append(line) - else: - if isMononucle(molbaselines): - if i==3: - lstw.append(' '.join([str(x)]+line.split()[1:])) - else: - v=[float(abs(x))/float(2),float(-abs(x)/float(2))] - val=v[i-3] - lstw.append(' '.join([line.split()[0],'0.','0.',str(val)])) - junkfiles=list() - with open(molbase+molname,'w') as n: - junkfiles.append(n.name) - n.write(os.linesep.join(lstw)) - #Copy basis - basisfile=basisbase+'.'.join([mol,basis]) - newbasisfile=basisbase+'.'.join([molname,basis]) - copy2(basisfile,newbasisfile) - junkfiles.append(newbasisfile) - #start child process Goduck - cmd=" ".join(["./GoDuck",molname, basis]) - Duck=Popen(shlex.split(cmd),stdout=PIPE) - (DuckOut, DuckErr) = Duck.communicate() - excode=Duck.wait() - for junk in junkfiles: - os.remove(junk) - os.chdir(currdir) - return (excode,DuckOut,DuckErr) - -def addvalue(dic,key,x,y): - if key not in dic: - dic[key]=list() - dic[key].append(y) - print(key) - print(x,y) - -def main(mol): - #get basepath for files - molbase='examples/molecule.' - basisbase=molbase.replace('molecule','basis') - with open('PyOptions.json','r') as jfile: - options=json.loads(jfile.read()) - basis=str(options['Basis']) - #Get mehtod to analyse - methodsdic=options['Methods'] - #Get datas to analyse in this method - scandic=options['Scan'] - scan=np.arange(scandic['Start'],scandic['Stop']+scandic['Step'],scandic['Step']) - print(scan) - mymethods=dict() - alllabels=list() - for method,methoddatas in methodsdic.iteritems(): - if methoddatas['Enabled']: - mymethods[method]=methoddatas - for label,labeldatas in methoddatas['Labels'].iteritems(): - if type(labeldatas) is dict: - enabled=labeldatas['Enabled'] - else: - enabled=labeldatas - if enabled and label not in alllabels: - alllabels.append(label) - graphdic=dict() - errorconvstring="Convergence failed" - with open(os.path.join(GetDuckDir(),molbase+mol),'r') as b: - molbaselines=b.read().splitlines() - if isMononucle(molbaselines): - print('monoatomic system: variation of the nuclear charge') - else: - print('polyatomic system: variation is on the distance') - for x in scan: - (DuckExit,DuckOut,DuckErr)=runDuck(mol,basis,x,molbaselines,molbase,basisbase) - #print DuckOut on file or not - if "Outputs" in options: - outdat=options["Outputs"] - if 'DuckOutput' in outdat: - outopt=outdat["DuckOutput"] - if outopt['Enabled']: - if outopt['Multiple']: - duckoutf=outfile(outopt,"DuckOutput",x) - else: - if x==scan[0]: - duckoutf=outfile(outdat,"DuckOutput") - duckoutf.write('Z' if isMononucle(molbaselines) else 'Distance'+' '+str(x)+os.linesep+os.linesep) - duckoutf.write(DuckOut) - if outopt['Multiple']: - duckoutf.close() - print("GoDuk exit code " + str(DuckExit)) - if DuckExit !=0: - #if GoDuck is not happy - print(DuckErr) - sys.exit(-1) - #get all data for the method - for method,methoddatas in mymethods.iteritems(): - isnan=False - if '{0}' in method: - if "index" in methoddatas: - methodheaders=[method.format(str(x)) for x in methoddatas['Index']] - else: - try: - print(method) - reglist=re.findall('(\d+)'.join([re.escape(s) for s in method.split('{0}')]),DuckOut) - print(reglist) - final=max([(int(i[0]) if type(i) is tuple else int(i)) for i in reglist]) - print(final) - methodheaders=[method.format(str(final))] - except: - isnan=True - methodheaders=[None] - method=method.replace('{0}','') - else: - methodheaders=list([method]) - for methodheader in methodheaders: - if len(methodheaders)!=1: - method=methodheader - lbldic=methoddatas['Labels'] - print(methodheader) - if methodheader is None: - methodtxt='' - else: - it=itertools.dropwhile(lambda line: methodheader + ' calculation' not in line , DuckOut.splitlines()) - it=itertools.takewhile(lambda line: 'Total CPU time for ' not in line, it) - methodtxt=os.linesep.join(it) - if errorconvstring in methodtxt: - print(colored(' '.join([method, errorconvstring, '!!!!!']),'red')) - isnan=True - if methodtxt=='': - print(colored('No data' +os.linesep+ 'RHF scf not converged or method not enabled','red')) - isnan=True - #find the expected values - for label,labeldatas in lbldic.iteritems(): - if type(labeldatas) is dict: - indexed=('Index' in labeldatas) - enabled=labeldatas['Enabled'] - graph=labeldatas['Graph'] if 'Graph' in labeldatas else 1 - else: - enabled=labeldatas - graph=1 - indexed=False - if enabled: - if graph not in graphdic: - graphdic[graph]=OrderedDict() - y=graphdic[graph] - if not indexed: - v=np.nan - print(method) - print(label) - if not isnan: - try: - m=re.search('\s+'.join([re.escape(w) for w in label.split()]) + "\s+(?:"+re.escape("(eV):")+"\s+)?(?:=\s+)?(-?\d+.?\d*)",methodtxt) - v=m.group(1) - except: - v=np.nan - addvalue(y,(method,label),x,v) - else: - startindex=-1 - columnindex=-1 - linedtxt=methodtxt.split(os.linesep) - for n,line in enumerate(linedtxt): - if all(x in line for x in ['|',' '+label+' ','#']): - startindex=n+2 - columnindex=[s.strip() for s in line.split('|')].index(label) - break - with open(os.path.join(GetDuckDir(),'input','molecule'),'r') as molfile: - molfile.readline() - line=molfile.readline() - nel=int(line.split()[1]) - print(nel) - HOMO=int(nel/2) - HO=HOMO - LUMO=HOMO+1 - BV=LUMO - for i in labeldatas['Index']: - v=np.nan - if type(i) is str or type(i) is unicode: - ival=eval(i) - if type(ival) is not int: - print('Index '+ str(i) + 'must be integer') - sys.exit(-2) - else: - ival=i - v=np.nan - if not isnan: - try: - if startindex!=-1 and columnindex!=-1: - line=linedtxt[startindex+ival-1] - v=float(line.split('|')[columnindex].split()[0]) - print(method) - print(label) - print(i) - else: - v=np.nan - except: - v=np.nan - key=(method,label,i) - addvalue(y,key,x,v) - tpl=(x,scan.tolist().index(x)+1,len(y[key])) - print(tpl) - if tpl[1]-tpl[2]: - sys.exit() - #define graph grid - maxgraph=max(graphdic.keys()) - maxrow=int(round(sqrt(maxgraph))) - maxcol=int(ceil(float(maxgraph)/float(maxrow))) - #define label ls - for graph,y in graphdic.iteritems(): - datas=list() - datas.append(["#x"]+scan.tolist()) - if len(y.keys())!=0: - plt.subplot(maxrow,maxcol,graph) - plt.xlabel('Z' if isMononucle(molbaselines) else 'Distance '+mol) - ylbls=list([basis]) - for i in range(0,2): - lst=list(set([key[i] for key in y.keys()])) - if len(lst)==1: - ylbls.append(lst[0]) - plt.ylabel(' '.join(ylbls)) - print('Legend') - print(list(y.keys())) - for key,values in y.iteritems(): - legend=list() - for el in key[0:2]: - if el not in ylbls: - legend.append(el) - if len(key)>2: - legend.append(str(key[2])) - #plot curves - lbl=' '.join(legend) - plt.plot(scan,y[key],'-o',label=lbl) - #print("min",x[y.index(min(y))]/2) - #generate legends - plt.legend() - dataout=False - if "Outputs" in options: - outputs=options['Outputs'] - if "DataOutput" in outputs: - DataOutput=outputs['DataOutput'] - dataout=DataOutput['Enabled'] - if dataout: - fmtlegendf='{0}({1})' - datas.append([fmtlegendf.format("y",lbl)]+y[key]) - if dataout: - csvdatas=zip(*datas) - with outfile(outputs,"DataOutput",graph) as csvf: - writer = csv.writer(csvf, delimiter=' ') - writer.writerow(['#']+ylbls) - writer.writerows(csvdatas) - #show graph - if "Outputs" in options: - outputs=options['Outputs'] - if "FigureOutput" in outputs: - figout=outputs["FigureOutput"] - if figout["Enabled"]: - plt.savefig(figout['Path']) - plt.show() -if __name__ == '__main__': - parser=argparse.ArgumentParser() - parser.add_argument("mol",nargs='?', help="molecule to compute",type=str) - parser.add_argument("-c,--copy", help="Copy sample option file",action="store_true",dest="copy") - args = parser.parse_args() - if len(sys.argv)==1: - parser.print_help() - else: - if args.copy: - copy2(os.path.join(GetDuckDir(),"PyOptions.template.json"),"PyOptions.json") - if args.mol is not None: - os.system("vim PyOptions.json") - if args.mol is not None: - main(args.mol) diff --git a/scripts/PyOptions.json b/scripts/PyOptions.json deleted file mode 100644 index 055b3aa..0000000 --- a/scripts/PyOptions.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "Scan": { - "Start":1.8, - "Stop":1.9, - "Step":0.1 - }, - "Basis":"VDZ", - "Outputs": { - "DataOutput": { - "Enabled":true, - "Format":"Duck{0}.dat" - }, - "DuckOutput": { - "Enabled":true, - "Multiple":false, - "Format":"DuckOut.out" - }, - "FigureOutput":{ - "Enabled":false, - "Path":"Figure.png" - } - }, - "Methods": { - "RHF":{ - "Enabled": true, - "Labels": { - "One-electron energy":false, - "Kinetic energy":false, - "Potential energy":false, - "Two-electron energy":false, - "Coulomb energy":false, - "Exchange energy":false, - "Electronic energy":false, - "Nuclear repulsion":false, - "Hartree-Fock energy":true, - "HF HOMO energy":false, - "HF LUMO energy":false, - "HF HOMO-LUMO gap":false - } - }, - "One-shot G0W0": { - "Enabled": true, - "Labels": { - "G0W0 HOMO energy":true, - "G0W0 LUMO energy":true, - "G0W0 HOMO-LUMO gap":false, - "G0W0 total energy":false, - "RPA correlation energy" :false, - "Z": { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":1 - }, - "Sigma_c (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":2 - }, - "e_QP (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO+1","LUMO+2"], - "Graph":3 - }, - "e_HF (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":4 - } - } - }, - "Self-consistent evG{0}W{0}": { - "Enabled":false, - "Labels": { - "evGW HOMO energy":false, - "evGW LUMO energy":false, - "evGW HOMO-LUMO gap":false, - "evGW total energy":false, - "RPA correlation energy" :false, - "Z": { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":1 - }, - "Sigma_c (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":2 - }, - "e_QP (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":3 - }, - "e_HF (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":4 - } - } - }, - "Self-consistent qsG{0}W{0}": { - "Enabled": false, - "Labels": { - "qsGW HOMO energy":false, - "qsGW LUMO energy":false, - "qsGW HOMO-LUMO gap":false, - "qsGW total energy":false, - "qsGW exchange energy":false, - "qsGW correlation energy":false, - "RPA correlation energy":{ - "Enabled":false, - "Graph":2 - }, - "Z": { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":4 - }, - "e_QP-e_HF (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":5 - }, - "e_QP (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":6 - } - } - }, - "MP2": { - "Enabled": false, - "Labels": { - "MP2 correlation energy": { - "Enabled":true, - "Graph":4 - }, - "Direct part":false, - "Exchange part":false, - "MP2 total energy":true, - "MP2 energy":false - } - } - } -} diff --git a/scripts/PyOptions.template.json b/scripts/PyOptions.template.json deleted file mode 100644 index 055b3aa..0000000 --- a/scripts/PyOptions.template.json +++ /dev/null @@ -1,145 +0,0 @@ -{ - "Scan": { - "Start":1.8, - "Stop":1.9, - "Step":0.1 - }, - "Basis":"VDZ", - "Outputs": { - "DataOutput": { - "Enabled":true, - "Format":"Duck{0}.dat" - }, - "DuckOutput": { - "Enabled":true, - "Multiple":false, - "Format":"DuckOut.out" - }, - "FigureOutput":{ - "Enabled":false, - "Path":"Figure.png" - } - }, - "Methods": { - "RHF":{ - "Enabled": true, - "Labels": { - "One-electron energy":false, - "Kinetic energy":false, - "Potential energy":false, - "Two-electron energy":false, - "Coulomb energy":false, - "Exchange energy":false, - "Electronic energy":false, - "Nuclear repulsion":false, - "Hartree-Fock energy":true, - "HF HOMO energy":false, - "HF LUMO energy":false, - "HF HOMO-LUMO gap":false - } - }, - "One-shot G0W0": { - "Enabled": true, - "Labels": { - "G0W0 HOMO energy":true, - "G0W0 LUMO energy":true, - "G0W0 HOMO-LUMO gap":false, - "G0W0 total energy":false, - "RPA correlation energy" :false, - "Z": { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":1 - }, - "Sigma_c (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":2 - }, - "e_QP (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO+1","LUMO+2"], - "Graph":3 - }, - "e_HF (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":4 - } - } - }, - "Self-consistent evG{0}W{0}": { - "Enabled":false, - "Labels": { - "evGW HOMO energy":false, - "evGW LUMO energy":false, - "evGW HOMO-LUMO gap":false, - "evGW total energy":false, - "RPA correlation energy" :false, - "Z": { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":1 - }, - "Sigma_c (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":2 - }, - "e_QP (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":3 - }, - "e_HF (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":4 - } - } - }, - "Self-consistent qsG{0}W{0}": { - "Enabled": false, - "Labels": { - "qsGW HOMO energy":false, - "qsGW LUMO energy":false, - "qsGW HOMO-LUMO gap":false, - "qsGW total energy":false, - "qsGW exchange energy":false, - "qsGW correlation energy":false, - "RPA correlation energy":{ - "Enabled":false, - "Graph":2 - }, - "Z": { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":4 - }, - "e_QP-e_HF (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":5 - }, - "e_QP (eV)" : { - "Enabled":true, - "Index":["HOMO","LUMO","LUMO+1","LUMO+2"], - "Graph":6 - } - } - }, - "MP2": { - "Enabled": false, - "Labels": { - "MP2 correlation energy": { - "Enabled":true, - "Graph":4 - }, - "Direct part":false, - "Exchange part":false, - "MP2 total energy":true, - "MP2 energy":false - } - } - } -} diff --git a/scripts/extract.sh b/scripts/extract.sh deleted file mode 100755 index 824fdfc..0000000 --- a/scripts/extract.sh +++ /dev/null @@ -1,229 +0,0 @@ -#! /bin/bash - -INPUT=$1 - - echo - echo '******************************************' - echo '*** Extracting information of' $INPUT ' ***' - echo '******************************************' - echo - - echo - echo '*** WFT information ***' - echo - grep "Hartree-Fock energy" $INPUT - EHF=`grep "Hartree-Fock energy" $INPUT | cut -f2 -d"="` - grep "MP2 correlation energy" $INPUT - EcMP2=`grep "MP2 correlation energy" $INPUT | cut -f2 -d"="` - grep "Ec(MP2) =" $INPUT - grep "Ec(CCD) =" $INPUT - grep "Ec(CCSD) =" $INPUT - grep "Ec(CCSD(T)) =" $INPUT - -# echo -# echo '*** Gap information: HF, G0F2, GF2, G0W0 & evGW ***' -# HF=`grep "HF HOMO-LUMO gap (eV):" $INPUT | cut -f2 -d":"` -# G0F2=`grep "GF2 HOMO-LUMO gap (eV):" $INPUT | head -1 | cut -f2 -d":"` -# GF2=`grep "GF2 HOMO-LUMO gap (eV):" $INPUT | tail -1 | cut -f2 -d":"` -# G0W0=`grep "G0W0 HOMO-LUMO gap (eV):" $INPUT | cut -f2 -d":"` -# evGW=`grep "evGW HOMO-LUMO gap (eV):" $INPUT | tail -1 | cut -f2 -d":"` - -# echo -e "\t" $HF "\t" $G0F2 "\t" $GF2 "\t" $G0W0 "\t" $evGW - - echo - echo '*** RPA information: Tr@RPA (singlet), Tr@RPA (triplet), AC@RPA (singlet), AC@RPA (triplet) ***' - echo - Tr_RPA_1=`grep "Tr@RPA correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_RPA_3=`grep "Tr@RPA correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - AC_RPA_1=`grep "AC@RPA correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - AC_RPA_3=`grep "AC@RPA correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - - echo -e "\t" $Tr_RPA_1 "\t" $Tr_RPA_3 "\t" $AC_RPA_1 "\t" $AC_RPA_3 - - echo - echo '*** RPAx information: Tr@RPAx (singlet), Tr@RPAx (triplet), AC@RPAx (singlet), AC@RPAx (triplet) ***' - echo - Tr_RPAx_1=`grep "Tr@RPAx correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_RPAx_3=`grep "Tr@RPAx correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - AC_RPAx_1=`grep "AC@RPAx correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - AC_RPAx_3=`grep "AC@RPAx correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - - echo -e "\t" $Tr_RPAx_1 "\t" $Tr_RPAx_3 "\t" $AC_RPAx_1 "\t" $AC_RPAx_3 - - echo - echo '*** G0W0 information: Tr@RPA (singlet), Tr@RPA (triplet), Tr@BSE (singlet), Tr@BSE (triplet), AC@BSE (singlet), AC@BSE (triplet) ***' - echo - Tr_RPA_G0W0_1=`grep "Tr@RPA@G0W0 correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_RPA_G0W0_3=`grep "Tr@RPA@G0W0 correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - Tr_BSE_G0W0_1=`grep "Tr@BSE@G0W0 correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_BSE_G0W0_3=`grep "Tr@BSE@G0W0 correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - AC_BSE_G0W0_1=`grep "AC@BSE@G0W0 correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - AC_BSE_G0W0_3=`grep "AC@BSE@G0W0 correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - - echo -e "\t" $Tr_RPA_G0W0_1 "\t" $Tr_RPA_G0W0_3 "\t" $Tr_BSE_G0W0_1 "\t" $Tr_BSE_G0W0_3 "\t" $AC_BSE_G0W0_1 "\t" $AC_BSE_G0W0_3 - - echo - echo '*** evGW information: Tr@RPA (singlet), Tr@RPA (triplet), Tr@BSE (singlet), Tr@BSE (triplet), AC@BSE (singlet), AC@BSE (triplet) ***' - echo - Tr_RPA_evGW_1=`grep "Tr@RPA@evGW correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_RPA_evGW_3=`grep "Tr@RPA@evGW correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - Tr_BSE_evGW_1=`grep "Tr@BSE@evGW correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_BSE_evGW_3=`grep "Tr@BSE@evGW correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - AC_BSE_evGW_1=`grep "AC@BSE@evGW correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - AC_BSE_evGW_3=`grep "AC@BSE@evGW correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - - echo -e "\t" $Tr_RPA_evGW_1 "\t" $Tr_RPA_evGW_3 "\t" $Tr_BSE_evGW_1 "\t" $Tr_BSE_evGW_3 "\t" $AC_BSE_evGW_1 "\t" $AC_BSE_evGW_3 - - - echo - echo '*** qsGW information: Tr@RPA (singlet), Tr@RPA (triplet), Tr@BSE (singlet), Tr@BSE (triplet), AC@BSE (singlet), AC@BSE (triplet) ***' - echo - Tr_RPA_qsGW_1=`grep "Tr@RPA@qsGW correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_RPA_qsGW_3=`grep "Tr@RPA@qsGW correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - Tr_BSE_qsGW_1=`grep "Tr@BSE@qsGW correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - Tr_BSE_qsGW_3=`grep "Tr@BSE@qsGW correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - AC_BSE_qsGW_1=`grep "AC@BSE@qsGW correlation energy (singlet) =" $INPUT| cut -f2 -d"="` - AC_BSE_qsGW_3=`grep "AC@BSE@qsGW correlation energy (triplet) =" $INPUT| cut -f2 -d"="` - - echo -e "\t" $Tr_RPA_qsGW_1 "\t" $Tr_RPA_qsGW_3 "\t" $Tr_BSE_qsGW_1 "\t" $Tr_BSE_qsGW_3 "\t" $AC_BSE_qsGW_1 "\t" $AC_BSE_qsGW_3 - - echo - echo '*** CIS excitation energy (singlet & triplet) ***' - echo - - CIS_1_1=`grep "| 1 |" $INPUT | head -1 | cut -f3 -d"|"` - CIS_1_2=`grep "| 2 |" $INPUT | head -1 | cut -f3 -d"|"` - CIS_1_3=`grep "| 3 |" $INPUT | head -1 | cut -f3 -d"|"` - CIS_1_4=`grep "| 4 |" $INPUT | head -1 | cut -f3 -d"|"` - CIS_1_5=`grep "| 5 |" $INPUT | head -1 | cut -f3 -d"|"` - - CIS_3_1=`grep "| 1 |" $INPUT | head -2 | tail -1 | cut -f3 -d"|"` - CIS_3_2=`grep "| 2 |" $INPUT | head -2 | tail -1 | cut -f3 -d"|"` - CIS_3_3=`grep "| 3 |" $INPUT | head -2 | tail -1 | cut -f3 -d"|"` - CIS_3_4=`grep "| 4 |" $INPUT | head -2 | tail -1 | cut -f3 -d"|"` - CIS_3_5=`grep "| 5 |" $INPUT | head -2 | tail -1 | cut -f3 -d"|"` - - echo -e "\t" $CIS_1_1 "\t" $CIS_3_1 - echo -e "\t" $CIS_1_2 "\t" $CIS_3_2 - echo -e "\t" $CIS_1_3 "\t" $CIS_3_3 - echo -e "\t" $CIS_1_4 "\t" $CIS_3_4 - echo -e "\t" $CIS_1_5 "\t" $CIS_3_5 - - echo - echo '*** RPA excitation energy (singlet & triplet) ***' - echo - - RPA_1_1=`grep "| 1 |" $INPUT | head -3 | tail -1 | cut -f3 -d"|"` - RPA_1_2=`grep "| 2 |" $INPUT | head -3 | tail -1 | cut -f3 -d"|"` - RPA_1_3=`grep "| 3 |" $INPUT | head -3 | tail -1 | cut -f3 -d"|"` - RPA_1_4=`grep "| 4 |" $INPUT | head -3 | tail -1 | cut -f3 -d"|"` - RPA_1_5=`grep "| 5 |" $INPUT | head -3 | tail -1 | cut -f3 -d"|"` - - RPA_3_1=`grep "| 1 |" $INPUT | head -4 | tail -1 | cut -f3 -d"|"` - RPA_3_2=`grep "| 2 |" $INPUT | head -4 | tail -1 | cut -f3 -d"|"` - RPA_3_3=`grep "| 3 |" $INPUT | head -4 | tail -1 | cut -f3 -d"|"` - RPA_3_4=`grep "| 4 |" $INPUT | head -4 | tail -1 | cut -f3 -d"|"` - RPA_3_5=`grep "| 5 |" $INPUT | head -4 | tail -1 | cut -f3 -d"|"` - - echo -e "\t" $RPA_1_1 "\t" $RPA_3_1 - echo -e "\t" $RPA_1_2 "\t" $RPA_3_2 - echo -e "\t" $RPA_1_3 "\t" $RPA_3_3 - echo -e "\t" $RPA_1_4 "\t" $RPA_3_4 - echo -e "\t" $RPA_1_5 "\t" $RPA_3_5 - - echo - echo '*** RPAx excitation energy (singlet & triplet) ***' - echo - - RPAx_1_1=`grep "| 1 |" $INPUT | head -5 | tail -1 | cut -f3 -d"|"` - RPAx_1_2=`grep "| 2 |" $INPUT | head -5 | tail -1 | cut -f3 -d"|"` - RPAx_1_3=`grep "| 3 |" $INPUT | head -5 | tail -1 | cut -f3 -d"|"` - RPAx_1_4=`grep "| 4 |" $INPUT | head -5 | tail -1 | cut -f3 -d"|"` - RPAx_1_5=`grep "| 5 |" $INPUT | head -5 | tail -1 | cut -f3 -d"|"` - - RPAx_3_1=`grep "| 1 |" $INPUT | head -6 | tail -1 | cut -f3 -d"|"` - RPAx_3_2=`grep "| 2 |" $INPUT | head -6 | tail -1 | cut -f3 -d"|"` - RPAx_3_3=`grep "| 3 |" $INPUT | head -6 | tail -1 | cut -f3 -d"|"` - RPAx_3_4=`grep "| 4 |" $INPUT | head -6 | tail -1 | cut -f3 -d"|"` - RPAx_3_5=`grep "| 5 |" $INPUT | head -6 | tail -1 | cut -f3 -d"|"` - - echo -e "\t" $RPAx_1_1 "\t" $RPAx_3_1 - echo -e "\t" $RPAx_1_2 "\t" $RPAx_3_2 - echo -e "\t" $RPAx_1_3 "\t" $RPAx_3_3 - echo -e "\t" $RPAx_1_4 "\t" $RPAx_3_4 - echo -e "\t" $RPAx_1_5 "\t" $RPAx_3_5 - - echo - echo '*** BSE@G0W0 excitation energy (singlet & triplet) ***' - echo - - G0W0_1_1=`grep "| 1 |" $INPUT | head -7 | tail -1 | cut -f3 -d"|"` - G0W0_1_2=`grep "| 2 |" $INPUT | head -7 | tail -1 | cut -f3 -d"|"` - G0W0_1_3=`grep "| 3 |" $INPUT | head -7 | tail -1 | cut -f3 -d"|"` - G0W0_1_4=`grep "| 4 |" $INPUT | head -7 | tail -1 | cut -f3 -d"|"` - G0W0_1_5=`grep "| 5 |" $INPUT | head -7 | tail -1 | cut -f3 -d"|"` - - G0W0_3_1=`grep "| 1 |" $INPUT | head -8 | tail -1 | cut -f3 -d"|"` - G0W0_3_2=`grep "| 2 |" $INPUT | head -8 | tail -1 | cut -f3 -d"|"` - G0W0_3_3=`grep "| 3 |" $INPUT | head -8 | tail -1 | cut -f3 -d"|"` - G0W0_3_4=`grep "| 4 |" $INPUT | head -8 | tail -1 | cut -f3 -d"|"` - G0W0_3_5=`grep "| 5 |" $INPUT | head -8 | tail -1 | cut -f3 -d"|"` - - echo -e "\t" $G0W0_1_1 "\t" $G0W0_3_1 - echo -e "\t" $G0W0_1_2 "\t" $G0W0_3_2 - echo -e "\t" $G0W0_1_3 "\t" $G0W0_3_3 - echo -e "\t" $G0W0_1_4 "\t" $G0W0_3_4 - echo -e "\t" $G0W0_1_5 "\t" $G0W0_3_5 - - echo - echo '*** BSE@evGW excitation energy (singlet & triplet) ***' - echo - - evGW_1_1=`grep "| 1 |" $INPUT | head -9 | tail -1 | cut -f3 -d"|"` - evGW_1_2=`grep "| 2 |" $INPUT | head -9 | tail -1 | cut -f3 -d"|"` - evGW_1_3=`grep "| 3 |" $INPUT | head -9 | tail -1 | cut -f3 -d"|"` - evGW_1_4=`grep "| 4 |" $INPUT | head -9 | tail -1 | cut -f3 -d"|"` - evGW_1_5=`grep "| 5 |" $INPUT | head -9 | tail -1 | cut -f3 -d"|"` - - evGW_3_1=`grep "| 1 |" $INPUT | head -10 | tail -1 | cut -f3 -d"|"` - evGW_3_2=`grep "| 2 |" $INPUT | head -10 | tail -1 | cut -f3 -d"|"` - evGW_3_3=`grep "| 3 |" $INPUT | head -10 | tail -1 | cut -f3 -d"|"` - evGW_3_4=`grep "| 4 |" $INPUT | head -10 | tail -1 | cut -f3 -d"|"` - evGW_3_5=`grep "| 5 |" $INPUT | head -10 | tail -1 | cut -f3 -d"|"` - - echo -e "\t" $evGW_1_1 "\t" $evGW_3_1 - echo -e "\t" $evGW_1_2 "\t" $evGW_3_2 - echo -e "\t" $evGW_1_3 "\t" $evGW_3_3 - echo -e "\t" $evGW_1_4 "\t" $evGW_3_4 - echo -e "\t" $evGW_1_5 "\t" $evGW_3_5 - - echo - echo '*** BSE@qsGW excitation energy (singlet & triplet) ***' - echo - - qsGW_1_1=`grep "| 1 |" $INPUT | head -11 | tail -1 | cut -f3 -d"|"` - qsGW_1_2=`grep "| 2 |" $INPUT | head -11 | tail -1 | cut -f3 -d"|"` - qsGW_1_3=`grep "| 3 |" $INPUT | head -11 | tail -1 | cut -f3 -d"|"` - qsGW_1_4=`grep "| 4 |" $INPUT | head -11 | tail -1 | cut -f3 -d"|"` - qsGW_1_5=`grep "| 5 |" $INPUT | head -11 | tail -1 | cut -f3 -d"|"` - - qsGW_3_1=`grep "| 1 |" $INPUT | head -12 | tail -1 | cut -f3 -d"|"` - qsGW_3_2=`grep "| 2 |" $INPUT | head -12 | tail -1 | cut -f3 -d"|"` - qsGW_3_3=`grep "| 3 |" $INPUT | head -12 | tail -1 | cut -f3 -d"|"` - qsGW_3_4=`grep "| 4 |" $INPUT | head -12 | tail -1 | cut -f3 -d"|"` - qsGW_3_5=`grep "| 5 |" $INPUT | head -12 | tail -1 | cut -f3 -d"|"` - - echo -e "\t" $qsGW_1_1 "\t" $qsGW_3_1 - echo -e "\t" $qsGW_1_2 "\t" $qsGW_3_2 - echo -e "\t" $qsGW_1_3 "\t" $qsGW_3_3 - echo -e "\t" $qsGW_1_4 "\t" $qsGW_3_4 - echo -e "\t" $qsGW_1_5 "\t" $qsGW_3_5 - - echo - echo '*** MATHEMATICA OUTPUT ***' - echo - echo -e "\t" $EHF "\t" $EcMP2 "\t" $Tr_RPA_1 "\t" $Tr_RPA_3 "\t" $AC_RPA_1 "\t" $AC_RPA_3 "\t" $Tr_RPAx_1 "\t" $Tr_RPAx_3 "\t" $AC_RPAx_1 "\t" $AC_RPAx_3 "\t" $Tr_RPA_G0W0_1 "\t" $Tr_RPA_G0W0_3 "\t" $Tr_BSE_G0W0_1 "\t" $Tr_BSE_G0W0_3 "\t" $AC_BSE_G0W0_1 "\t" $AC_BSE_G0W0_3 "\t" $CIS_1_1 "\t" $CIS_1_2 "\t" $CIS_1_3 "\t" $CIS_1_4 "\t" $CIS_1_5 "\t" $CIS_3_1 "\t" $CIS_3_2 "\t" $CIS_3_3 "\t" $CIS_3_4 "\t" $CIS_3_5 "\t" $RPA_1_1 "\t" $RPA_1_2 "\t" $RPA_1_3 "\t" $RPA_1_4 "\t" $RPA_1_5 "\t" $RPA_3_1 "\t" $RPA_3_2 "\t" $RPA_3_3 "\t" $RPA_3_4 "\t" $RPA_3_5 "\t" $RPAx_1_1 "\t" $RPAx_1_2 "\t" $RPAx_1_3 "\t" $RPAx_1_4 "\t" $RPAx_1_5 "\t" $RPAx_3_1 "\t" $RPAx_3_2 "\t" $RPAx_3_3 "\t" $RPAx_3_4 "\t" $RPAx_3_5 "\t" $G0W0_1_1 "\t" $G0W0_1_2 "\t" $G0W0_1_3 "\t" $G0W0_1_4 "\t" $G0W0_1_5 "\t" $G0W0_3_1 "\t" $G0W0_3_2 "\t" $G0W0_3_3 "\t" $G0W0_3_4 "\t" $G0W0_3_5 "\t" $Tr_RPA_evGW_1 "\t" $Tr_RPA_evGW_3 "\t" $Tr_BSE_evGW_1 "\t" $Tr_BSE_evGW_3 "\t" $AC_BSE_evGW_1 "\t" $AC_BSE_evGW_3 "\t" $evGW_1_1 "\t" $evGW_1_2 "\t" $evGW_1_3 "\t" $evGW_1_4 "\t" $evGW_1_5 "\t" $evGW_3_1 "\t" $evGW_3_2 "\t" $evGW_3_3 "\t" $evGW_3_4 "\t" $evGW_3_5 "\t" $Tr_RPA_qsGW_1 "\t" $Tr_RPA_qsGW_3 "\t" $Tr_BSE_qsGW_1 "\t" $Tr_BSE_qsGW_3 "\t" $AC_BSE_qsGW_1 "\t" $AC_BSE_qsGW_3 "\t" $qsGW_1_1 "\t" $qsGW_1_2 "\t" $qsGW_1_3 "\t" $qsGW_1_4 "\t" $qsGW_1_5 "\t" $qsGW_3_1 "\t" $qsGW_3_2 "\t" $qsGW_3_3 "\t" $qsGW_3_4 "\t" $qsGW_3_5 - echo - echo '*** DONE ***' - echo - diff --git a/scripts/run_sph.sh b/scripts/run_sph.sh deleted file mode 100755 index fd1cc87..0000000 --- a/scripts/run_sph.sh +++ /dev/null @@ -1,41 +0,0 @@ -#! /bin/bash - -Lmin=1 -Lmax=1 -Mmax=10 -rs=$1 - -if [ $# != 1 ] -then - echo "Please, specify rs value" -else - - echo "------------------------" - echo "Maxmium L value = " $Lmax - echo "Maxmium M value = " $Mmax - echo "------------------------" - echo - - for (( L=$Lmin ; L<=$Lmax ; L++ )) ; do - - ne=$(bc -l <<< "(2*($L+1)*($L+1))") - echo - echo "------------------------" - echo "Number of electrons = " $ne - echo "------------------------" - echo - - for (( M=$L+1 ; M<=$Mmax ; M++ )) ; do - - nb=$(bc -l <<< "(($M+1)*($M+1))") - echo "Number of basis functions = " $nb - echo -e "# rs \n" $rs > input/sph - ./GoSph $ne $M > out/Sph_${ne}_${nb}.out - grep "Total CPU time for QuAcK =" out/Sph_${ne}_${nb}.out - - done - - done - -fi - diff --git a/scripts/scan_w.sh b/scripts/scan_w.sh deleted file mode 100755 index e79e50a..0000000 --- a/scripts/scan_w.sh +++ /dev/null @@ -1,119 +0,0 @@ -#! /bin/bash - -MOL=$1 -BASIS=$2 - -w_start=0.00 -w_end=1.05 -dw=0.05 - -w1=0.00 - -XF=$3 -CF=$4 - -# for H -#aw1="1.49852 7.79815 25.1445" -#aw2="0.424545 -0.0382349 -0.32472" - - -# for He -#aw1="0.429447 0.053506 -0.339391" -#aw2="0.254939 -0.0893396 0.00765453" - -# for H2 -aw1="0.445525 0.0901503 -0.286898" -aw2="0.191734 -0.0364788 -0.017035" - -# for Li -#aw1="0.055105 -0.00943825 -0.0267771" -#aw2="0.0359827 0.0096623 -0.0173542" - -# for Li+ -#aw1="0.503566, 0.137076, -0.348529" -#aw2="0.0553828, 0.00830375, -0.0234602" - - -# for B -#aw1="0.052676 -0.00624118 -0.000368825" -#aw2="0.0385558 -0.0015764 -0.000894297" - -# for O -#aw1="-0.0187067 -0.0141017 -0.0100849" -#aw2="0.00544868 -0.0000118236 -0.000163245" - -# for Al -#aw1="-0.00201219 -0.00371002 -0.00212719" -#aw2="-0.00117715 0.00188738 -0.000414761" - -# for Be -#aw1="0.0663282, -0.0117682, -0.0335909" -#aw2="0.0479262, 0.00966351, -0.0208712" - - -DATA=${MOL}_${BASIS}_${XF}_${CF}_${w2}.dat -rm $DATA -touch $DATA - -for w2 in $(seq $w_start $dw $w_end) -do - ## w2=${w1} - echo "# Restricted or unrestricted KS calculation" > input/dft - echo " eDFT-UKS" >> input/dft - echo "# exchange rung:" >> input/dft - echo "# Hartree = 0" >> input/dft - echo "# LDA = 1: RS51,RMFL20" >> input/dft - echo "# GGA = 2: RB88" >> input/dft - echo "# Hybrid = 4" >> input/dft - echo "# Hartree-Fock = 666" >> input/dft - echo " 1 $XF " >> input/dft - echo "# correlation rung: " >> input/dft - echo "# Hartree = 0" >> input/dft - echo "# LDA = 1: RVWN5,RMFL20" >> input/dft - echo "# GGA = 2: " >> input/dft - echo "# Hybrid = 4: " >> input/dft - echo "# Hartree-Fock = 666" >> input/dft - echo " 0 $CF " >> input/dft - echo "# quadrature grid SG-n" >> input/dft - echo " 1" >> input/dft - echo "# Number of states in ensemble (nEns)" >> input/dft - echo " 3" >> input/dft - echo "# occupation numbers of orbitals nO and nO+1" >> input/dft - echo " 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " >> input/dft - echo " 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " >> input/dft - echo " " >> input/dft - echo " 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " >> input/dft - echo " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " >> input/dft - echo " " >> input/dft - echo " 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 " >> input/dft - echo " 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " >> input/dft - echo "# Ensemble weights: wEns(1),...,wEns(nEns-1)" >> input/dft - echo " ${w1} ${w2} " >> input/dft - echo "# Ncentered ? 0 for NO " >> input/dft - echo " 0 " >> input/dft - echo "# Parameters for CC weight-dependent exchange functional" >> input/dft - echo ${aw1} >> input/dft - echo ${aw2} >> input/dft - echo "# choice of UCC exchange coefficient : 1 for Cx1, 2 for Cx2, 3 for Cx1*Cx2" >> input/dft - echo "2" >> input/dft - echo "# GOK-DFT: maxSCF thresh DIIS n_diis guess_type ortho_type" >> input/dft - echo " 1000 0.00001 T 5 1 1" >> input/dft - OUTPUT=${MOL}_${BASIS}_${XF}_${CF}_${w2}.out - ./GoXC $MOL $BASIS > ${OUTPUT} - Ew=`grep "Ensemble energy:" ${OUTPUT} | cut -d":" -f 2 | sed 's/au//'` - E0=`grep "Individual energy state 1:" ${OUTPUT} | cut -d":" -f 2 | sed 's/au//'` - E1=`grep "Individual energy state 2:" ${OUTPUT} | cut -d":" -f 2 | sed 's/au//'` - E2=`grep "Individual energy state 3:" ${OUTPUT} | cut -d":" -f 2 | sed 's/au//'` - IP=`grep "Ionization Potential" ${OUTPUT} | grep " au" | tail -1 | cut -d":" -f 2 | sed 's/au//'` - EA=`grep "Electronic Affinity" ${OUTPUT} | grep " au" | tail -1 | cut -d":" -f 2 | sed 's/au//'` - FG=`grep "Fundamental Gap" ${OUTPUT} | grep " au" | tail -1 | cut -d":" -f 2 | sed 's/au//'` - Ex=`grep "Exchange energy:" ${OUTPUT} | cut -d":" -f 2 | sed 's/au//'` - HOMOa=`grep "HOMO a energy:" ${OUTPUT} | cut -d":" -f 2 | sed 's/eV//'` - LUMOa=`grep "LUMO a energy:" ${OUTPUT} | cut -d":" -f 2 | sed 's/eV//'` - HOMOb=`grep "HOMO a energy:" ${OUTPUT} | cut -d":" -f 2 | sed 's/eV//'` - LUMOb=`grep "LUMO b energy:" ${OUTPUT} | cut -d":" -f 2 | sed 's/eV//'` - - echo $w1 $w2 $Ew $E0 $E1 $E2 $IP $EA $FG $Ex $HOMOa $LUMOa $HOMOb $LUMOb - echo $w1 $w2 $Ew $E0 $E1 $E2 $IP $EA $FG $Ex $HOMOa $LUMOa $HOMOb $LUMOb >> ${DATA} -done - diff --git a/utils/fsplit b/utils/fsplit deleted file mode 100755 index e967b1506ee802e2321697ca82f0c372059251c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31968 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 X7bqN1&6<;!m#_Fy=}JoSknn#1FvX?d