├── .gitignore ├── LICENSE.md ├── README.md ├── bin └── pysoc ├── doc ├── .~lock.Silico Quick Reference - Draft.odt# └── pysoc.pdf ├── examples ├── ch2o_gaussian │ ├── ch2o0.com │ ├── gaussian.chk │ ├── gaussian.log │ └── gaussian.rwf └── ch2o_tddftb │ ├── EXC.DAT │ ├── SPX.DAT │ ├── TDP.DAT │ ├── TRA.DAT │ ├── XplusY.DAT │ ├── band.out │ ├── ch2o.gen │ ├── ch2o.xyz │ ├── charges.bin │ ├── detailed.out │ ├── dftb_in.hsd │ ├── dftb_pin.hsd │ ├── eigenvec.bin │ ├── eigenvec.out │ ├── out │ ├── oversqr.dat │ └── soc_detail.out ├── molsoc.tar.gz ├── molsoc ├── README └── molsoc0.1 │ ├── bin │ └── molsoc0.1.exe │ ├── doc │ ├── Figure1.ps │ ├── logo.eps │ ├── manual.aux │ ├── manual.dvi │ ├── manual.idx │ ├── manual.lof │ ├── manual.lot │ ├── manual.pdf │ ├── manual.ps │ ├── manual.tex │ ├── manual.toc │ └── molsoc.sty │ ├── examples │ ├── BCl │ │ ├── Full │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ │ └── Zeff │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ ├── Fe+ │ │ └── d-2d-1 │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ ├── H2O+ │ │ ├── Full │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ │ └── Zeff │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ ├── NO+ │ │ ├── Full │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ │ └── Zeff │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ ├── O2+ │ │ ├── Full │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ │ └── Zeff │ │ │ ├── aover │ │ │ ├── basis │ │ │ ├── bover │ │ │ ├── coef │ │ │ ├── molsoc.inp │ │ │ ├── molsoc.out │ │ │ ├── mos1 │ │ │ ├── mos2 │ │ │ └── soint │ └── SnCl │ │ ├── Full │ │ ├── aover │ │ ├── basis │ │ ├── bover │ │ ├── coef │ │ ├── molsoc.inp │ │ ├── molsoc.out │ │ ├── mos1 │ │ ├── mos2 │ │ └── soint │ │ └── Zeff │ │ ├── aover │ │ ├── basis │ │ ├── bover │ │ ├── coef │ │ ├── molsoc.inp │ │ ├── molsoc.out │ │ ├── mos1 │ │ ├── mos2 │ │ └── soint │ ├── include │ ├── fileio.h │ ├── math.h │ ├── molecule.h │ ├── moleculeD.h │ └── parameter.h │ └── source │ ├── Makefile │ ├── altmos.f │ ├── atomdata.f │ ├── atomdis.f │ ├── bldimat.f │ ├── bldimom.f │ ├── bldimso.f │ ├── bldover.f │ ├── bldpfs0.f │ ├── bldpfs2.f │ ├── bldsoc.f │ ├── bldsoc0.f │ ├── bldsoc2.f │ ├── chkmult.f │ ├── clebsch.f │ ├── copyr.f │ ├── cputime.f │ ├── crftable.f │ ├── demon.f │ ├── discone.f │ ├── disczero.f │ ├── errors.f │ ├── fileio.f │ ├── finele.f │ ├── finkey.f │ ├── finnel.f │ ├── finstr.f │ ├── gammaf.f │ ├── gaussian.f │ ├── genop.f │ ├── genop.f0 │ ├── genop.f_sindro │ ├── getdate.f │ ├── iniocc.f │ ├── initialize.f │ ├── ioscr.f │ ├── kssoc.f │ ├── mathcon.f │ ├── matrelem.f │ ├── molsoc.f │ ├── moment.f │ ├── momesym.f │ ├── moocc.f │ ├── mos.f │ ├── motrsc.f │ ├── muldens.f │ ├── multipole.f │ ├── norgtf.f │ ├── norsto.f │ ├── orbord.f │ ├── orbsym.f │ ├── ortho.f │ ├── ortsvdlap.f │ ├── overabu.f │ ├── overfs.f │ ├── overlap.f │ ├── pointer.f │ ├── readbas.f │ ├── readinp.f │ ├── readmos.f │ ├── readshgf.f │ ├── rr1socin.f │ ├── rr21.f │ ├── rr22.f │ ├── rr23.f │ ├── rr24.f │ ├── rr2socin.f │ ├── rrmomint.f │ ├── rrovint.f │ ├── scangm.f │ ├── scangmf.f │ ├── scangmt.f │ ├── sdist.f │ ├── shellop.f │ ├── socfst0.f │ ├── socfst2.f │ ├── socint.f │ ├── socone.f │ ├── sozeff.f │ ├── traatb.f │ ├── transc.f │ ├── turbomole.f │ ├── turbord.f │ ├── ucc.f │ ├── vecfso.f │ ├── vecfso2.f │ ├── vprod.f │ ├── writout.f │ ├── wrthead.f │ └── xyzcomp.f ├── pysoc ├── __init__.py ├── data │ ├── bin │ │ ├── molsoc │ │ └── soc_td │ └── parameters │ │ ├── README │ │ └── mio-1-1-fit │ │ ├── C.basis │ │ ├── H.basis │ │ ├── N.basis │ │ ├── O.basis │ │ ├── P.basis │ │ └── S.basis ├── io │ ├── SOC.py │ ├── __init__.py │ ├── dftb_plus.py │ ├── file.py │ ├── gaussian.py │ ├── molsoc.py │ └── soc_td.py └── program │ ├── __init__.py │ └── main.py ├── requirements.txt └── soc_td ├── Makefile ├── backup_soc_state.f90 ├── basis_match.f90 ├── data_input.f90 ├── dip_mo.f90 ├── init_prep.f90 ├── norm_mo.f90 ├── prec_mod.f90 ├── soc_mo.f90 ├── soc_state.f90 ├── soc_td.f90 ├── test.f90 └── trans_dipole.f90 /bin/pysoc: -------------------------------------------------------------------------------- 1 | ../pysoc/program/main.py -------------------------------------------------------------------------------- /doc/.~lock.Silico Quick Reference - Draft.odt#: -------------------------------------------------------------------------------- 1 | ,oliver,oliver-Inspiron-7591,03.08.2020 08:28,file:///home/oliver/.config/libreoffice/4; -------------------------------------------------------------------------------- /doc/pysoc.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/doc/pysoc.pdf -------------------------------------------------------------------------------- /examples/ch2o_gaussian/ch2o0.com: -------------------------------------------------------------------------------- 1 | %mem=1GB 2 | %chk=gaussian.chk 3 | %rwf=gaussian.rwf 4 | # td(50-50,nstates=5) wB97XD/TZVP 6D 10F nosymm GFInput 5 | 6 | test 7 | 8 | 0 1 9 | C -0.131829 -0.000001 -0.000286 10 | O 1.065288 0.000001 0.000090 11 | H -0.718439 0.939705 0.000097 12 | H -0.718441 -0.939705 0.000136 13 | 14 | -------------------------------------------------------------------------------- /examples/ch2o_gaussian/gaussian.chk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/examples/ch2o_gaussian/gaussian.chk -------------------------------------------------------------------------------- /examples/ch2o_gaussian/gaussian.rwf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/examples/ch2o_gaussian/gaussian.rwf -------------------------------------------------------------------------------- /examples/ch2o_tddftb/EXC.DAT: -------------------------------------------------------------------------------- 1 | 2 | w [eV] Osc.Str. Transition Weight KS [eV] Sym. 3 | 4 | ================================================================================ 5 | 6 | 4.499 0.0000000 6 -> 7 1.000 4.499 T 7 | 7.231 0.0000000 5 -> 7 1.000 8.024 T 8 | 8.700 0.0000000 4 -> 7 1.000 8.700 T 9 | 9.321 0.0000000 3 -> 7 1.000 9.321 T 10 | 12.724 0.0000000 2 -> 7 1.000 12.724 T 11 | 15.587 0.0000000 6 -> 8 1.000 16.131 T 12 | 16.395 0.0000000 6 -> 9 0.999 17.017 T 13 | 19.656 0.0000000 5 -> 8 1.000 19.656 T 14 | 19.699 0.0000000 4 -> 8 0.963 20.331 T 15 | 20.315 0.0000000 3 -> 8 0.989 20.952 T 16 | 4.499 0.0000000 6 -> 7 1.000 4.499 S 17 | 8.700 0.0000000 4 -> 7 1.000 8.700 S 18 | 9.321 0.0000000 3 -> 7 1.000 9.321 S 19 | 9.838 0.2256530 5 -> 7 0.999 8.024 S 20 | 12.724 0.0000000 2 -> 7 1.000 12.724 S 21 | 16.750 0.2210760 6 -> 8 0.999 16.131 S 22 | 17.971 0.3800506 6 -> 9 0.999 17.017 S 23 | 19.656 0.0000002 5 -> 8 1.000 19.656 S 24 | 20.542 0.0000000 5 -> 9 1.000 20.542 S 25 | 20.707 0.2094408 4 -> 8 0.999 20.331 S 26 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/SPX.DAT: -------------------------------------------------------------------------------- 1 | 2 | # w [eV] Osc.Str. Transition 3 | 4 | ========================================================== 5 | 6 | 1 4.499 0.0000000 6 -> 7 7 | 2 8.024 0.2446608 5 -> 7 8 | 3 8.700 0.0000002 4 -> 7 9 | 4 9.321 0.0000000 3 -> 7 10 | 5 12.724 0.0000000 2 -> 7 11 | 6 16.131 0.2711483 6 -> 8 12 | 7 17.017 0.3348119 6 -> 9 13 | 8 19.656 0.0000001 5 -> 8 14 | 9 20.331 0.1107195 4 -> 8 15 | 10 20.542 0.0000000 5 -> 9 16 | 11 20.952 0.4218077 3 -> 8 17 | 12 21.217 0.1257333 4 -> 9 18 | 13 21.838 0.0150856 3 -> 9 19 | 14 23.029 0.0000000 1 -> 7 20 | 15 24.356 0.1836352 2 -> 8 21 | 16 25.242 0.4374742 2 -> 9 22 | 17 34.661 0.0044403 1 -> 8 23 | 18 35.547 0.0286491 1 -> 9 24 | 19 38.868 0.0000187 6 -> 10 25 | 20 42.392 0.0000004 5 -> 10 26 | 21 43.068 0.7996162 4 -> 10 27 | 22 43.689 0.0000162 3 -> 10 28 | 23 47.093 0.0835870 2 -> 10 29 | 24 57.398 2.0076694 1 -> 10 30 | 31 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/TDP.DAT: -------------------------------------------------------------------------------- 1 | 2 | # w [eV] Transition dipole (x,y,z) [Debye] 3 | 4 | ================================================================= 5 | 6 | 1 4.499 0.000000 0.000000 0.000000 7 | 2 7.231 0.000000 0.000000 0.000000 8 | 3 8.700 0.000000 0.000000 0.000000 9 | 4 9.321 0.000000 0.000000 0.000000 10 | 5 12.724 0.000000 0.000000 0.000000 11 | 6 15.587 0.000000 0.000000 0.000000 12 | 7 16.395 0.000000 0.000000 0.000000 13 | 8 19.656 0.000000 0.000000 0.000000 14 | 9 19.699 0.000000 0.000000 0.000000 15 | 10 20.315 0.000000 0.000000 0.000000 16 | 1 4.499 0.000000 0.000954 -0.000000 17 | 2 8.700 0.000863 0.000000 0.000001 18 | 3 9.321 0.000000 -0.000918 0.000000 19 | 4 9.838 2.459410 0.000004 0.001045 20 | 5 12.724 0.000520 0.000000 -0.000000 21 | 6 16.750 -0.000018 1.865629 -0.000039 22 | 7 17.971 -2.361491 -0.000008 0.000185 23 | 8 19.656 0.001768 -0.000000 0.000000 24 | 9 20.542 -0.000000 0.000142 -0.000000 25 | 10 20.707 1.633143 -0.000005 -0.000373 26 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/band.out: -------------------------------------------------------------------------------- 1 | KPT 1 SPIN 1 KWEIGHT 1.00000000000000 2 | -24.83989 2.00000 3 | -14.53516 2.00000 4 | -11.13149 2.00000 5 | -10.51049 2.00000 6 | -9.83479 2.00000 7 | -6.31002 2.00000 8 | -1.81092 0.00000 9 | 9.82077 0.00000 10 | 10.70671 0.00000 11 | 32.55762 0.00000 12 | 13 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/ch2o.gen: -------------------------------------------------------------------------------- 1 | 4 C 2 | C O H 3 | 1 1 -1.3182900000E-01 -1.0000000000E-06 -2.8600000000E-04 4 | 2 2 1.0652880000E+00 1.0000000000E-06 9.0000000000E-05 5 | 3 3 -7.1843900000E-01 9.3970500000E-01 9.7000000000E-05 6 | 4 3 -7.1844100000E-01 -9.3970500000E-01 1.3600000000E-04 7 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/ch2o.xyz: -------------------------------------------------------------------------------- 1 | 4 2 | 3 | C -0.131829 -0.000001 -0.000286 4 | O 1.065288 0.000001 0.000090 5 | H -0.718439 0.939705 0.000097 6 | H -0.718441 -0.939705 0.000136 7 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/charges.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/examples/ch2o_tddftb/charges.bin -------------------------------------------------------------------------------- /examples/ch2o_tddftb/detailed.out: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/examples/ch2o_tddftb/detailed.out -------------------------------------------------------------------------------- /examples/ch2o_tddftb/dftb_in.hsd: -------------------------------------------------------------------------------- 1 | Geometry = GenFormat { 2 | <<< "ch2o.gen" 3 | } 4 | 5 | Driver = {} 6 | 7 | Hamiltonian = DFTB { 8 | SCC = Yes 9 | SCCTolerance = 1e-10 # Very tight for test purposes only 10 | MaxAngularMomentum = { 11 | H = "s" 12 | C = "p" 13 | O = "p" 14 | } 15 | SlaterKosterFiles = Type2FileNames { 16 | Prefix = "/fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/" 17 | Separator = "-" 18 | Suffix = ".skf" 19 | } 20 | LinearResponse { 21 | NrOfExcitations = 10 22 | StateOfInterest = 0 23 | Symmetry = both 24 | HubbardDerivatives { 25 | H = 0.347100 0.491900 26 | C = 0.341975 0.387425 27 | O = 0.467490 0.523300 28 | } 29 | WriteTransitions = Yes 30 | WriteTransitionDipole = Yes 31 | WriteXplusY = Yes 32 | } 33 | } 34 | 35 | Options { 36 | WriteEigenvectors = Yes 37 | WriteHS = Yes 38 | } 39 | 40 | ParserOptions { 41 | ParserVersion = 4 42 | } 43 | 44 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/dftb_pin.hsd: -------------------------------------------------------------------------------- 1 | Geometry = GenFormat { 2 | 4 C 3 | C O H 4 | 1 1 -1.3182900000E-01 -1.0000000000E-06 -2.8600000000E-04 5 | 2 2 1.0652880000E+00 1.0000000000E-06 9.0000000000E-05 6 | 3 3 -7.1843900000E-01 9.3970500000E-01 9.7000000000E-05 7 | 4 3 -7.1844100000E-01 -9.3970500000E-01 1.3600000000E-04 8 | } 9 | Driver = {} 10 | Hamiltonian = DFTB { 11 | SCC = Yes 12 | SCCTolerance = 1e-10 13 | MaxAngularMomentum = { 14 | H = "s" 15 | C = "p" 16 | O = "p" 17 | } 18 | SlaterKosterFiles = Type2FileNames { 19 | Prefix = "/fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/" 20 | Separator = "-" 21 | Suffix = ".skf" 22 | LowerCaseTypeName = No 23 | } 24 | LinearResponse = { 25 | NrOfExcitations = 10 26 | StateOfInterest = 0 27 | Symmetry = both 28 | HubbardDerivatives = { 29 | H = { 30 | 0.347100 0.491900 31 | } 32 | C = { 33 | 0.341975 0.387425 34 | } 35 | O = { 36 | 0.467490 0.523300 37 | } 38 | } 39 | WriteTransitions = Yes 40 | WriteTransitionDipole = Yes 41 | WriteXplusY = Yes 42 | EnergyWindow = 100000.000000000 43 | OscStrWindow = 1000.00000000000 44 | WriteMulliken = No 45 | WriteCoefficients = No 46 | WriteStatusArnoldi = No 47 | } 48 | PolynomialRepulsive = {} 49 | OldRepulsiveSum = No 50 | OrbitalResolvedSCC = No 51 | OldSKInterpolation = No 52 | OnsiteCorrection = No 53 | Charge = 0.000000000000000E+000 54 | ReadInitialCharges = No 55 | InitialCharges = {} 56 | MaxSCCIterations = 100 57 | Mixer = Broyden { 58 | MixingParameter = 0.200000000000000 59 | CachedIterations = -1 60 | InverseJacobiWeight = 1.000000000000000E-002 61 | MinimalWeight = 1.00000000000000 62 | MaximalWeight = 100000.000000000 63 | WeightFactor = 1.000000000000000E-002 64 | } 65 | ElectricField = {} 66 | DampXH = No 67 | SpinPolarisation = {} 68 | Eigensolver = DivideAndConquer {} 69 | Filling = Fermi { 70 | Temperature = 0.000000000000000E+000 71 | } 72 | Dispersion = {} 73 | ThirdOrder = No 74 | ThirdOrderFull = No 75 | } 76 | Options = { 77 | WriteEigenvectors = Yes 78 | WriteHS = Yes 79 | CalculateForces = No 80 | WriteAutotestTag = No 81 | WriteDetailedXML = No 82 | WriteResultsTag = No 83 | WriteDetailedOut = Yes 84 | WriteBandOut = Yes 85 | AtomResolvedEnergies = No 86 | RestartFrequency = 20 87 | RandomSeed = 0 88 | WriteRealHS = No 89 | MinimiseMemoryUsage = No 90 | ShowFoldedCoords = No 91 | } 92 | ParserOptions = { 93 | ParserVersion = 4 94 | WriteHSDInput = Yes 95 | WriteXMLInput = No 96 | StopAfterParsing = No 97 | IgnoreUnprocessedNodes = No 98 | } 99 | Analysis = { 100 | ProjectStates = {} 101 | } 102 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/eigenvec.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/examples/ch2o_tddftb/eigenvec.bin -------------------------------------------------------------------------------- /examples/ch2o_tddftb/out: -------------------------------------------------------------------------------- 1 | ================================================================================ 2 | == 3 | == Density Functional based Tight Binding with a lot of extensions (DFTB+) 4 | == 5 | == Unofficial release (r4514) 6 | == 7 | == (ParserVersion = 4) 8 | == 9 | ================================================================================ 10 | 11 | 12 | ******************************************************************************** 13 | ** Parsing and initializing 14 | ******************************************************************************** 15 | 16 | Interpreting input file 'dftb_in.hsd' 17 | -------------------------------------------------------------------------------- 18 | Reading SK-files: 19 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/C-C.skf 20 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/C-O.skf 21 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/C-H.skf 22 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/O-C.skf 23 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/O-O.skf 24 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/O-H.skf 25 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/H-C.skf 26 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/H-O.skf 27 | /fsnfs/users/xinggao/work/gsh/thiothymine/gtsh/test_python/tddftb/sk/mio-1-1/H-H.skf 28 | Done. 29 | 30 | 31 | Processed input in HSD format written to 'dftb_pin.hsd' 32 | 33 | Starting initialization... 34 | -------------------------------------------------------------------------------- 35 | Mode: Static calculation 36 | Self consistent charges: Yes 37 | SCC-tolerance: 0.100000E-09 38 | Max. scc iterations: 100 39 | Ewald alpha parameter: 0.000000E+00 40 | Spin polarisation: No 41 | Nr. of up electrons: 6.000000 42 | Nr. of down electrons: 6.000000 43 | Periodic boundaries: No 44 | Diagonalizer: Divide and Conquer 45 | Mixer: Broyden mixer 46 | Mixing parameter: 0.200000 47 | Maximal SCC-cycles: 100 48 | Nr. of chrg. vec. in memory: 100 49 | Electronic temperature: 0.100000E-07 50 | Initial charges: Set automatically (system chrg: 0.000E+00) 51 | Included shells: C: s, p 52 | O: s, p 53 | H: s 54 | Extra options: 55 | Eigenvector printing 56 | -------------------------------------------------------------------------------- 57 | 58 | 59 | ******************************************************************************** 60 | ** Geometry step: 0 61 | ******************************************************************************** 62 | 63 | iSCC Total electronic Diff electronic SCC error 64 | Hamilton/Overlap written, exiting program. 65 | -------------------------------------------------------------------------------- /examples/ch2o_tddftb/oversqr.dat: -------------------------------------------------------------------------------- 1 | # REAL NALLORB NKPOINT 2 | T 10 1 3 | # IKPOINT 4 | 1 5 | # MATRIX 6 | 1.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 3.114573862369493E-01 -5.314352558555294E-07 -9.990982810083954E-05 -3.180950895920019E-01 4.177094927414515E-01 4.177098690766863E-01 7 | 0.000000000000000E+00 1.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 6.524599277547992E-07 1.844410817973386E-01 -2.665476288358599E-10 -8.486401536944099E-07 3.729114850464987E-01 -3.729111196433276E-01 8 | 0.000000000000000E+00 0.000000000000000E+00 1.000000000000000E+00 0.000000000000000E+00 1.226624664179022E-04 -2.665476288358599E-10 1.844410316878022E-01 -1.595443488945491E-04 1.519891314653828E-04 1.674660238644129E-04 9 | 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.000000000000000E+00 3.905354356670209E-01 -8.486401536944099E-07 -1.595443488945491E-04 -3.235196956363390E-01 -2.327894109893164E-01 -2.327904720169454E-01 10 | 3.114573862369493E-01 6.524599277547992E-07 1.226624664179022E-04 3.905354356670209E-01 1.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 4.154671603733218E-02 4.154640590936082E-02 11 | -5.314352558555294E-07 1.844410817973386E-01 -2.665476288358599E-10 -8.486401536944099E-07 0.000000000000000E+00 1.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 2.881846644615783E-02 -2.881829993982288E-02 12 | -9.990982810083954E-05 -2.665476288358599E-10 1.844410316878022E-01 -1.595443488945491E-04 0.000000000000000E+00 0.000000000000000E+00 1.000000000000000E+00 0.000000000000000E+00 2.146732004153485E-07 1.410698449548957E-06 13 | -3.180950895920019E-01 -8.486401536944099E-07 -1.595443488945491E-04 -3.235196956363390E-01 0.000000000000000E+00 0.000000000000000E+00 0.000000000000000E+00 1.000000000000000E+00 -5.470262625103838E-02 -5.470225510251113E-02 14 | 4.177094927414515E-01 3.729114850464987E-01 1.519891314653828E-04 -2.327894109893164E-01 4.154671603733218E-02 2.881846644615783E-02 2.146732004153485E-07 -5.470262625103838E-02 1.000000000000000E+00 9.024437849493637E-02 15 | 4.177098690766863E-01 -3.729111196433276E-01 1.674660238644129E-04 -2.327904720169454E-01 4.154640590936082E-02 -2.881829993982288E-02 1.410698449548957E-06 -5.470225510251113E-02 9.024437849493637E-02 1.000000000000000E+00 16 | -------------------------------------------------------------------------------- /molsoc.tar.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc.tar.gz -------------------------------------------------------------------------------- /molsoc/molsoc0.1/bin/molsoc0.1.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc/molsoc0.1/bin/molsoc0.1.exe -------------------------------------------------------------------------------- /molsoc/molsoc0.1/doc/manual.aux: -------------------------------------------------------------------------------- 1 | \relax 2 | \citation{Breit} 3 | \citation{Chiod1} 4 | \citation{Chiod2} 5 | \citation{Chiod1} 6 | \citation{Chiod2} 7 | \@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}} 8 | \newlabel{1}{{1}{1}} 9 | \newlabel{1}{{2}{1}} 10 | \@writefile{toc}{\contentsline {section}{\numberline {2}{\sf MolSOC} installation}{2}} 11 | \@writefile{toc}{\contentsline {subsection}{\numberline {2.1}{\sf MolSOC} installation}{2}} 12 | \@writefile{toc}{\contentsline {subsection}{\numberline {2.2}Contents of the distribution package}{2}} 13 | \citation{Chiod2} 14 | \@writefile{toc}{\contentsline {section}{\numberline {3}How to run {\sf MolSOC}}{3}} 15 | \@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Description of the input files}{3}} 16 | \@writefile{toc}{\contentsline {subsection}{\numberline {3.2}The file {\bf molsoc.inp}}{3}} 17 | \@writefile{toc}{\contentsline {subsubsection}{{\em Route section}}{4}} 18 | \@writefile{toc}{\contentsline {subsubsection}{{\em Charge and multiplicities section}}{4}} 19 | \citation{Chiod2} 20 | \@writefile{toc}{\contentsline {subsubsection}{\em Molecular Geometry section}{5}} 21 | \@writefile{toc}{\contentsline {subsubsection}{{\em Keyword ZEFF}}{5}} 22 | \citation{Chiod3} 23 | \citation{Chiod4} 24 | \citation{Breit} 25 | \citation{Chiod1} 26 | \@writefile{toc}{\contentsline {subsubsection}{{\em Keyword ALTER}}{6}} 27 | \citation{Chiod2} 28 | \@writefile{toc}{\contentsline {subsection}{\numberline {3.3}The file {\bf basis}}{9}} 29 | \@writefile{toc}{\contentsline {subsection}{\numberline {3.4}Description of the output files}{10}} 30 | \@writefile{toc}{\contentsline {subsection}{\numberline {3.5}Driving steps in some of the output files}{11}} 31 | \bibcite{Breit}{1} 32 | \bibcite{Chiod1}{2} 33 | \bibcite{Chiod2}{3} 34 | \bibcite{Chiod3}{4} 35 | \bibcite{Chiod4}{5} 36 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/doc/manual.dvi: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc/molsoc0.1/doc/manual.dvi -------------------------------------------------------------------------------- /molsoc/molsoc0.1/doc/manual.idx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc/molsoc0.1/doc/manual.idx -------------------------------------------------------------------------------- /molsoc/molsoc0.1/doc/manual.lof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc/molsoc0.1/doc/manual.lof -------------------------------------------------------------------------------- /molsoc/molsoc0.1/doc/manual.lot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc/molsoc0.1/doc/manual.lot -------------------------------------------------------------------------------- /molsoc/molsoc0.1/doc/manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc/molsoc0.1/doc/manual.pdf -------------------------------------------------------------------------------- /molsoc/molsoc0.1/doc/manual.toc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/molsoc/molsoc0.1/doc/manual.toc -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/BCl/Full/basis: -------------------------------------------------------------------------------- 1 | 1 0 2 | S 6 1.00 3 | 1915.16660 -0.203950000E-02 4 | 287.183110 -0.155966000E-01 5 | 65.1571760 -0.762442000E-01 6 | 18.1958270 -0.247924400 7 | 5.70153790 -0.479082300 8 | 1.84383750 -0.335295300 9 | s 2 1.00 10 | 3.49143040 0.774224000E-01 11 | 0.305056000 -0.574123900 12 | s 1 1.00 13 | 0.964865000E-01 1.00000000 14 | p 4 1.00 15 | 11.6874170 0.150861000E-01 16 | 2.63077550 0.888157000E-01 17 | 0.744226900 0.290368200 18 | 0.230476100 0.499443300 19 | p 1 1.00 20 | 0.699380000E-01 1.00000000 21 | d 1 1.00 22 | 0.400000000 1.00000000 23 | *** 24 | 2 0 25 | s 6 1.00 26 | 26351.4580 0.173240000E-02 27 | 3945.05670 0.133109000E-01 28 | 892.438350 0.666748000E-01 29 | 249.417430 0.230050600 30 | 79.7215720 0.474230700 31 | 26.8311450 0.359524000 32 | S 3 1.00 33 | 52.7853010 -0.956296000E-01 34 | 5.61564290 0.588084000 35 | 2.10590760 0.486698200 36 | s 2 1.00 37 | 3.55861490 0.180689100 38 | 0.484798100 -0.688482900 39 | S 1 1.00 40 | 0.173331000 1.00000000 41 | p 5 1.00 42 | 271.078210 -0.109257000E-01 43 | 63.5472080 -0.775909000E-01 44 | 19.7371090 -0.277515900 45 | 6.78899370 -0.503193300 46 | 2.34803030 -0.334842600 47 | p 2 1.00 48 | 1.10668640 -0.276538100 49 | 0.382968000 -0.546676800 50 | p 1 1.00 51 | 0.125113300 1.00000000 52 | D 1 1.00 53 | 0.750000000 1.00000000 54 | END 55 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/BCl/Full/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between alpha-alpha triplet determinants 3 | # Pi-Pi states 4 | # Full Breit-Pauli operator 5 | # 6 | 0 3 D 3 D 7 | B 0.00000000E+00 0.00000000E+00 -2.47949248E+00 1.0 8 | Cl 0.00000000E+00 0.00000000E+00 7.29262494E-01 1.0 9 | End 10 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/BCl/Zeff/basis: -------------------------------------------------------------------------------- 1 | B 0 2 | S 6 1.00 3 | 1915.16660 -0.203950000E-02 4 | 287.183110 -0.155966000E-01 5 | 65.1571760 -0.762442000E-01 6 | 18.1958270 -0.247924400 7 | 5.70153790 -0.479082300 8 | 1.84383750 -0.335295300 9 | s 2 1.00 10 | 3.49143040 0.774224000E-01 11 | 0.305056000 -0.574123900 12 | s 1 1.00 13 | 0.964865000E-01 1.00000000 14 | p 4 1.00 15 | 11.6874170 0.150861000E-01 16 | 2.63077550 0.888157000E-01 17 | 0.744226900 0.290368200 18 | 0.230476100 0.499443300 19 | p 1 1.00 20 | 0.699380000E-01 1.00000000 21 | d 1 1.00 22 | 0.400000000 1.00000000 23 | *** 24 | 2 0 25 | s 6 1.00 26 | 26351.4580 0.173240000E-02 27 | 3945.05670 0.133109000E-01 28 | 892.438350 0.666748000E-01 29 | 249.417430 0.230050600 30 | 79.7215720 0.474230700 31 | 26.8311450 0.359524000 32 | S 3 1.00 33 | 52.7853010 -0.956296000E-01 34 | 5.61564290 0.588084000 35 | 2.10590760 0.486698200 36 | s 2 1.00 37 | 3.55861490 0.180689100 38 | 0.484798100 -0.688482900 39 | S 1 1.00 40 | 0.173331000 1.00000000 41 | p 5 1.00 42 | 271.078210 -0.109257000E-01 43 | 63.5472080 -0.775909000E-01 44 | 19.7371090 -0.277515900 45 | 6.78899370 -0.503193300 46 | 2.34803030 -0.334842600 47 | p 2 1.00 48 | 1.10668640 -0.276538100 49 | 0.382968000 -0.546676800 50 | p 1 1.00 51 | 0.125113300 1.00000000 52 | D 1 1.00 53 | 0.750000000 1.00000000 54 | END 55 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/BCl/Zeff/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between alpha-alpha triplet determinants 3 | # Pi-Pi states 4 | # One-electron operator with Zeff 5 | # 6 | Zeff 7 | 0 3 D 3 D 8 | B 0.00000000E+00 0.00000000E+00 -2.47949248E+00 1.0 9 | Cl 0.00000000E+00 0.00000000E+00 7.29262494E-01 1.0 10 | End 11 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/Fe+/d-2d-1/basis: -------------------------------------------------------------------------------- 1 | Fe 0 2 | S 6 1.00 3 | 61430.2270 0.175590000E-02 4 | 9222.17600 0.134169000E-01 5 | 2097.59690 0.666954000E-01 6 | 591.490400 0.228205100 7 | 191.860620 0.469449900 8 | 65.8263280 0.363556900 9 | S 3 1.00 10 | 128.740740 -0.104916800 11 | 14.7181330 0.617961900 12 | 5.95075430 0.456009300 13 | S 3 1.00 14 | 10.8598790 0.218491700 15 | 1.71944710 -0.711331000 16 | 0.666453200 -0.418694700 17 | S 2 1.00 18 | 0.975476100 -0.144105400 19 | 0.123114300 0.595813400 20 | S 1 1.00 21 | 0.448795000E-01 1.00000000 22 | P 5 1.00 23 | 780.620300 -0.912170000E-02 24 | 184.006220 -0.680040000E-01 25 | 58.0844670 -0.259768100 26 | 20.7597950 -0.506013800 27 | 7.59345150 -0.341908200 28 | P 3 1.00 29 | 4.02791730 -0.327296200 30 | 1.52647000 -0.548150000 31 | 0.557370200 -0.250662900 32 | P 1 1.00 33 | 0.121000000 1.00000000 34 | D 4 1.00 35 | 23.9293160 -0.634921000E-01 36 | 6.39990130 -0.278391300 37 | 1.93174170 -0.493819500 38 | 0.511527900 -0.486269400 39 | D 1 1.00 40 | 0.900000000E-01 1.00000000 41 | END 42 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/Fe+/d-2d-1/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between d-2 and d-1 states of Fe+ d6s1 3 | # 4 | +1 6 R 6 R 5 | Fe 0.000000000000 0.000000000000 0.000000000000 1.0 6 | end 7 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Full/aover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999589 5 | 1 2 -0.000000000 6 | 1 3 0.000000000 7 | 1 4 -0.000000000 8 | 2 1 0.000000000 9 | 2 2 0.999913289 10 | 2 3 0.000000000 11 | 2 4 0.000000000 12 | 3 1 0.000000000 13 | 3 2 0.000000000 14 | 3 3 0.999911304 15 | 3 4 0.000000000 16 | 4 1 -0.000000000 17 | 4 2 0.000000000 18 | 4 3 0.000000000 19 | 4 4 0.000000000 20 | 21 | DIAGONAL ELEMENTS 22 | 23 | 1 1 0.999999589 24 | 2 2 0.999913289 25 | 3 3 0.999911304 26 | 4 4 0.000000000 27 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Full/basis: -------------------------------------------------------------------------------- 1 | O 0 2 | s 6 1.00 3 | 5222.90220 -0.193640000E-02 4 | 782.539940 -0.148507000E-01 5 | 177.267430 -0.733187000E-01 6 | 49.5166880 -0.245116200 7 | 15.6664400 -0.480284700 8 | 5.17935990 -0.335942700 9 | s 2 1.00 10 | 10.6014410 0.788058000E-01 11 | 0.942317000 -0.567695200 12 | s 1 1.00 13 | 0.277474600 1.00000000 14 | p 4 1.00 15 | 33.4241260 0.175603000E-01 16 | 7.62217140 0.107630000 17 | 2.23820930 0.323525600 18 | 0.686730000 0.483222900 19 | p 1 1.00 20 | 0.193813500 1.00000000 21 | d 1 1.00 22 | 0.800000000 1.00000000 23 | **** 24 | H 0 25 | s 3 1.00 26 | 50.9991780 0.966050000E-02 27 | 7.48321810 0.737289000E-01 28 | 1.77746760 0.295858100 29 | s 1 1.00 30 | 0.519329500 1.00000000 31 | s 1 1.00 32 | 0.154110000 1.00000000 33 | p 1 1.00 34 | 0.750000000 1.00000000 35 | END 36 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Full/bover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999607 5 | 1 2 -0.000000000 6 | 1 3 0.000000000 7 | 1 4 -0.000000000 8 | 1 5 0.000000000 9 | 2 1 -0.000000000 10 | 2 2 0.999947406 11 | 2 3 0.000000000 12 | 2 4 -0.000000000 13 | 2 5 -0.000000000 14 | 3 1 -0.000000000 15 | 3 2 -0.000000000 16 | 3 3 0.999911304 17 | 3 4 0.000000000 18 | 3 5 -0.000000000 19 | 4 1 0.000000000 20 | 4 2 0.000000000 21 | 4 3 0.000000000 22 | 4 4 0.999222889 23 | 4 5 0.000000000 24 | 5 1 -0.000000000 25 | 5 2 0.000000000 26 | 5 3 0.000000000 27 | 5 4 -0.000000000 28 | 5 5 0.998801123 29 | 30 | DIAGONAL ELEMENTS 31 | 32 | 1 1 0.999999607 33 | 2 2 0.999947406 34 | 3 3 0.999911304 35 | 4 4 0.999222889 36 | 5 5 0.998801123 37 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Full/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between 2B1-2A1 states of H2O+ 3 | # Full Breit-Pauli operator 4 | # 5 | +1 2 R 2 R 6 | O 1.04589168E-32 0.00000000E+00 2.26274170E-01 1.0 7 | H 5.57808895E-33 1.13137085E+00 -9.05096680E-01 1.0 8 | H -1.38552969E-16 -1.13137085E+00 -9.05096680E-01 1.0 9 | end 10 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Zeff/aover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999589 5 | 1 2 -0.000000000 6 | 1 3 0.000000000 7 | 1 4 -0.000000000 8 | 2 1 0.000000000 9 | 2 2 0.999913289 10 | 2 3 0.000000000 11 | 2 4 0.000000000 12 | 3 1 0.000000000 13 | 3 2 0.000000000 14 | 3 3 0.999911304 15 | 3 4 0.000000000 16 | 4 1 -0.000000000 17 | 4 2 0.000000000 18 | 4 3 0.000000000 19 | 4 4 0.000000000 20 | 21 | DIAGONAL ELEMENTS 22 | 23 | 1 1 0.999999589 24 | 2 2 0.999913289 25 | 3 3 0.999911304 26 | 4 4 0.000000000 27 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Zeff/basis: -------------------------------------------------------------------------------- 1 | O 0 2 | s 6 1.00 3 | 5222.90220 -0.193640000E-02 4 | 782.539940 -0.148507000E-01 5 | 177.267430 -0.733187000E-01 6 | 49.5166880 -0.245116200 7 | 15.6664400 -0.480284700 8 | 5.17935990 -0.335942700 9 | s 2 1.00 10 | 10.6014410 0.788058000E-01 11 | 0.942317000 -0.567695200 12 | s 1 1.00 13 | 0.277474600 1.00000000 14 | p 4 1.00 15 | 33.4241260 0.175603000E-01 16 | 7.62217140 0.107630000 17 | 2.23820930 0.323525600 18 | 0.686730000 0.483222900 19 | p 1 1.00 20 | 0.193813500 1.00000000 21 | d 1 1.00 22 | 0.800000000 1.00000000 23 | **** 24 | H 0 25 | s 3 1.00 26 | 50.9991780 0.966050000E-02 27 | 7.48321810 0.737289000E-01 28 | 1.77746760 0.295858100 29 | s 1 1.00 30 | 0.519329500 1.00000000 31 | s 1 1.00 32 | 0.154110000 1.00000000 33 | p 1 1.00 34 | 0.750000000 1.00000000 35 | END 36 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Zeff/bover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999607 5 | 1 2 -0.000000000 6 | 1 3 0.000000000 7 | 1 4 -0.000000000 8 | 1 5 0.000000000 9 | 2 1 -0.000000000 10 | 2 2 0.999947406 11 | 2 3 0.000000000 12 | 2 4 -0.000000000 13 | 2 5 -0.000000000 14 | 3 1 -0.000000000 15 | 3 2 -0.000000000 16 | 3 3 0.999911304 17 | 3 4 0.000000000 18 | 3 5 -0.000000000 19 | 4 1 0.000000000 20 | 4 2 0.000000000 21 | 4 3 0.000000000 22 | 4 4 0.999222889 23 | 4 5 0.000000000 24 | 5 1 -0.000000000 25 | 5 2 0.000000000 26 | 5 3 0.000000000 27 | 5 4 -0.000000000 28 | 5 5 0.998801123 29 | 30 | DIAGONAL ELEMENTS 31 | 32 | 1 1 0.999999607 33 | 2 2 0.999947406 34 | 3 3 0.999911304 35 | 4 4 0.999222889 36 | 5 5 0.998801123 37 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/H2O+/Zeff/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between 2B1-2A1 states of H2O+ 3 | # One-electron operator with Zeff 4 | # 5 | Zeff 6 | # 7 | +1 2 R 2 R 8 | O 1.04589168E-32 0.00000000E+00 2.26274170E-01 1.0 9 | H 5.57808895E-33 1.13137085E+00 -9.05096680E-01 1.0 10 | H -1.38552969E-16 -1.13137085E+00 -9.05096680E-01 1.0 11 | end 12 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Full/aover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999997 5 | 1 2 0.000000000 6 | 1 3 0.000000000 7 | 1 4 0.000000000 8 | 1 5 0.000000000 9 | 1 6 0.000000000 10 | 1 7 0.000000000 11 | 1 8 0.000000000 12 | 2 1 -0.000000000 13 | 2 2 0.999999548 14 | 2 3 -0.000000000 15 | 2 4 0.000000000 16 | 2 5 0.000000000 17 | 2 6 0.000000000 18 | 2 7 -0.000000000 19 | 2 8 0.000000000 20 | 3 1 0.000000000 21 | 3 2 0.000000000 22 | 3 3 0.999994602 23 | 3 4 0.000000000 24 | 3 5 0.000000000 25 | 3 6 0.000000000 26 | 3 7 -0.000000000 27 | 3 8 0.000000000 28 | 4 1 0.000000000 29 | 4 2 0.000000000 30 | 4 3 0.000000000 31 | 4 4 0.999957390 32 | 4 5 0.000000000 33 | 4 6 0.000000000 34 | 4 7 0.000000000 35 | 4 8 0.000000000 36 | 5 1 0.000000000 37 | 5 2 -0.000000000 38 | 5 3 0.000000000 39 | 5 4 0.000000000 40 | 5 5 0.999950887 41 | 5 6 0.000000000 42 | 5 7 0.000000000 43 | 5 8 0.000000000 44 | 6 1 0.000000000 45 | 6 2 0.000000000 46 | 6 3 0.000000000 47 | 6 4 0.000000000 48 | 6 5 0.000000000 49 | 6 6 0.999107392 50 | 6 7 0.000000000 51 | 6 8 0.000000000 52 | 7 1 -0.000000000 53 | 7 2 0.000000000 54 | 7 3 0.000000000 55 | 7 4 0.000000000 56 | 7 5 -0.000000000 57 | 7 6 0.000000000 58 | 7 7 0.998421257 59 | 7 8 0.000000000 60 | 61 | DIAGONAL ELEMENTS 62 | 63 | 1 1 0.999999997 64 | 2 2 0.999999548 65 | 3 3 0.999994602 66 | 4 4 0.999957390 67 | 5 5 0.999950887 68 | 6 6 0.999107392 69 | 7 7 0.998421257 70 | 8 8 0.999549155 71 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Full/basis: -------------------------------------------------------------------------------- 1 | N 0 2 | s 6 1.00 3 | 3845.41490 0.201860000E-02 4 | 577.533230 0.154078000E-01 5 | 131.319830 0.753714000E-01 6 | 36.8237810 0.248212200 7 | 11.6701150 0.479827400 8 | 3.85426040 0.331801200 9 | s 2 1.00 10 | 7.82956110 -0.776669000E-01 11 | 0.687735100 0.565459800 12 | s 1 1.00 13 | 0.204038800 1.00000000 14 | p 4 1.00 15 | 26.8098410 0.154663000E-01 16 | 6.06815400 0.964397000E-01 17 | 1.76762560 0.308361000 18 | 0.546672700 0.491159700 19 | p 1 1.00 20 | 0.158728900 1.00000000 21 | d 1 1.00 22 | 0.700000000 1.00000000 23 | **** 24 | O 0 25 | s 6 1.00 26 | 5222.90220 -0.193640000E-02 27 | 782.539940 -0.148507000E-01 28 | 177.267430 -0.733187000E-01 29 | 49.5166880 -0.245116200 30 | 15.6664400 -0.480284700 31 | 5.17935990 -0.335942700 32 | s 2 1.00 33 | 10.6014410 0.788058000E-01 34 | 0.942317000 -0.567695200 35 | s 1 1.00 36 | 0.277474600 1.00000000 37 | p 4 1.00 38 | 33.4241260 0.175603000E-01 39 | 7.62217140 0.107630000 40 | 2.23820930 0.323525600 41 | 0.686730000 0.483222900 42 | p 1 1.00 43 | 0.193813500 1.00000000 44 | d 1 1.00 45 | 0.800000000 1.00000000 46 | EnD 47 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Full/bover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999996 5 | 1 2 0.000000000 6 | 1 3 -0.000000000 7 | 1 4 0.000000000 8 | 1 5 0.000000000 9 | 1 6 0.000000000 10 | 2 1 0.000000000 11 | 2 2 0.999999471 12 | 2 3 0.000000000 13 | 2 4 0.000000000 14 | 2 5 0.000000000 15 | 2 6 0.000000000 16 | 3 1 0.000000000 17 | 3 2 0.000000000 18 | 3 3 0.999989719 19 | 3 4 -0.000000000 20 | 3 5 0.000000000 21 | 3 6 0.000000000 22 | 4 1 0.000000000 23 | 4 2 0.000000000 24 | 4 3 0.000000000 25 | 4 4 0.999948115 26 | 4 5 0.000000000 27 | 4 6 0.000000000 28 | 5 1 0.000000000 29 | 5 2 0.000000000 30 | 5 3 0.000000000 31 | 5 4 0.000000000 32 | 5 5 0.999107392 33 | 5 6 0.000000000 34 | 6 1 0.000000000 35 | 6 2 0.000000000 36 | 6 3 0.000000000 37 | 6 4 0.000000000 38 | 6 5 0.000000000 39 | 6 6 0.998868602 40 | 7 1 -0.000000000 41 | 7 2 -0.000000000 42 | 7 3 0.000000000 43 | 7 4 -0.000000000 44 | 7 5 0.000000000 45 | 7 6 0.000000000 46 | 47 | DIAGONAL ELEMENTS 48 | 49 | 1 1 0.999999996 50 | 2 2 0.999999471 51 | 3 3 0.999989719 52 | 4 4 0.999948115 53 | 5 5 0.999107392 54 | 6 6 0.998868602 55 | 7 7 0.998428978 56 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Full/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between 1Sigma+ and 3PI states 3 | # Full Breit-Pauli operator 4 | # 5 | Octupole 6 | +1 1 D 3 D 7 | N 0.00000000E+00 0.00000000E+00 -9.60000000E-01 1.0 8 | O 0.00000000E+00 0.00000000E+00 8.40000000E-01 1.0 9 | End 10 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Zeff/aover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999997 5 | 1 2 0.000000000 6 | 1 3 0.000000000 7 | 1 4 0.000000000 8 | 1 5 0.000000000 9 | 1 6 0.000000000 10 | 1 7 0.000000000 11 | 1 8 0.000000000 12 | 2 1 -0.000000000 13 | 2 2 0.999999548 14 | 2 3 -0.000000000 15 | 2 4 0.000000000 16 | 2 5 0.000000000 17 | 2 6 0.000000000 18 | 2 7 -0.000000000 19 | 2 8 0.000000000 20 | 3 1 0.000000000 21 | 3 2 0.000000000 22 | 3 3 0.999994602 23 | 3 4 0.000000000 24 | 3 5 0.000000000 25 | 3 6 0.000000000 26 | 3 7 -0.000000000 27 | 3 8 0.000000000 28 | 4 1 0.000000000 29 | 4 2 0.000000000 30 | 4 3 0.000000000 31 | 4 4 0.999957390 32 | 4 5 0.000000000 33 | 4 6 0.000000000 34 | 4 7 0.000000000 35 | 4 8 0.000000000 36 | 5 1 0.000000000 37 | 5 2 -0.000000000 38 | 5 3 0.000000000 39 | 5 4 0.000000000 40 | 5 5 0.999950887 41 | 5 6 0.000000000 42 | 5 7 0.000000000 43 | 5 8 0.000000000 44 | 6 1 0.000000000 45 | 6 2 0.000000000 46 | 6 3 0.000000000 47 | 6 4 0.000000000 48 | 6 5 0.000000000 49 | 6 6 0.999107392 50 | 6 7 0.000000000 51 | 6 8 0.000000000 52 | 7 1 -0.000000000 53 | 7 2 0.000000000 54 | 7 3 0.000000000 55 | 7 4 0.000000000 56 | 7 5 -0.000000000 57 | 7 6 0.000000000 58 | 7 7 0.998421257 59 | 7 8 0.000000000 60 | 61 | DIAGONAL ELEMENTS 62 | 63 | 1 1 0.999999997 64 | 2 2 0.999999548 65 | 3 3 0.999994602 66 | 4 4 0.999957390 67 | 5 5 0.999950887 68 | 6 6 0.999107392 69 | 7 7 0.998421257 70 | 8 8 0.999549155 71 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Zeff/basis: -------------------------------------------------------------------------------- 1 | N 0 2 | s 6 1.00 3 | 3845.41490 0.201860000E-02 4 | 577.533230 0.154078000E-01 5 | 131.319830 0.753714000E-01 6 | 36.8237810 0.248212200 7 | 11.6701150 0.479827400 8 | 3.85426040 0.331801200 9 | s 2 1.00 10 | 7.82956110 -0.776669000E-01 11 | 0.687735100 0.565459800 12 | s 1 1.00 13 | 0.204038800 1.00000000 14 | p 4 1.00 15 | 26.8098410 0.154663000E-01 16 | 6.06815400 0.964397000E-01 17 | 1.76762560 0.308361000 18 | 0.546672700 0.491159700 19 | p 1 1.00 20 | 0.158728900 1.00000000 21 | d 1 1.00 22 | 0.700000000 1.00000000 23 | **** 24 | O 0 25 | s 6 1.00 26 | 5222.90220 -0.193640000E-02 27 | 782.539940 -0.148507000E-01 28 | 177.267430 -0.733187000E-01 29 | 49.5166880 -0.245116200 30 | 15.6664400 -0.480284700 31 | 5.17935990 -0.335942700 32 | s 2 1.00 33 | 10.6014410 0.788058000E-01 34 | 0.942317000 -0.567695200 35 | s 1 1.00 36 | 0.277474600 1.00000000 37 | p 4 1.00 38 | 33.4241260 0.175603000E-01 39 | 7.62217140 0.107630000 40 | 2.23820930 0.323525600 41 | 0.686730000 0.483222900 42 | p 1 1.00 43 | 0.193813500 1.00000000 44 | d 1 1.00 45 | 0.800000000 1.00000000 46 | EnD 47 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Zeff/bover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 0.999999996 5 | 1 2 0.000000000 6 | 1 3 -0.000000000 7 | 1 4 0.000000000 8 | 1 5 0.000000000 9 | 1 6 0.000000000 10 | 2 1 0.000000000 11 | 2 2 0.999999471 12 | 2 3 0.000000000 13 | 2 4 0.000000000 14 | 2 5 0.000000000 15 | 2 6 0.000000000 16 | 3 1 0.000000000 17 | 3 2 0.000000000 18 | 3 3 0.999989719 19 | 3 4 -0.000000000 20 | 3 5 0.000000000 21 | 3 6 0.000000000 22 | 4 1 0.000000000 23 | 4 2 0.000000000 24 | 4 3 0.000000000 25 | 4 4 0.999948115 26 | 4 5 0.000000000 27 | 4 6 0.000000000 28 | 5 1 0.000000000 29 | 5 2 0.000000000 30 | 5 3 0.000000000 31 | 5 4 0.000000000 32 | 5 5 0.999107392 33 | 5 6 0.000000000 34 | 6 1 0.000000000 35 | 6 2 0.000000000 36 | 6 3 0.000000000 37 | 6 4 0.000000000 38 | 6 5 0.000000000 39 | 6 6 0.998868602 40 | 7 1 -0.000000000 41 | 7 2 -0.000000000 42 | 7 3 0.000000000 43 | 7 4 -0.000000000 44 | 7 5 0.000000000 45 | 7 6 0.000000000 46 | 47 | DIAGONAL ELEMENTS 48 | 49 | 1 1 0.999999996 50 | 2 2 0.999999471 51 | 3 3 0.999989719 52 | 4 4 0.999948115 53 | 5 5 0.999107392 54 | 6 6 0.998868602 55 | 7 7 0.998428978 56 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/NO+/Zeff/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between 1Sigma+ and 3PI states 3 | # One-electron operator with Zeff 4 | # 5 | Octupole Zeff 6 | +1 1 D 3 D 7 | N 0.00000000E+00 0.00000000E+00 -9.60000000E-01 1.0 8 | O 0.00000000E+00 0.00000000E+00 8.40000000E-01 1.0 9 | End 10 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/O2+/Full/aover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 1.000000000 5 | 1 2 0.000000000 6 | 1 3 0.000000000 7 | 1 4 0.000000000 8 | 1 5 0.000000000 9 | 1 6 0.000000000 10 | 2 1 -0.000000000 11 | 2 2 0.999999999 12 | 2 3 0.000000000 13 | 2 4 0.000000000 14 | 2 5 0.000000000 15 | 2 6 0.000000000 16 | 3 1 0.000000000 17 | 3 2 -0.000000000 18 | 3 3 0.999999999 19 | 3 4 -0.000000000 20 | 3 5 -0.000000000 21 | 3 6 0.000000000 22 | 4 1 -0.000000000 23 | 4 2 0.000000000 24 | 4 3 0.000000000 25 | 4 4 0.999991109 26 | 4 5 -0.000000000 27 | 4 6 0.000000000 28 | 5 1 0.000000000 29 | 5 2 -0.000000000 30 | 5 3 -0.000000000 31 | 5 4 -0.000000000 32 | 5 5 0.999986241 33 | 5 6 0.000000000 34 | 6 1 -0.000000000 35 | 6 2 0.000000000 36 | 6 3 0.000000000 37 | 6 4 0.000000000 38 | 6 5 0.000000000 39 | 6 6 0.000000000 40 | 41 | DIAGONAL ELEMENTS 42 | 43 | 1 1 1.000000000 44 | 2 2 0.999999999 45 | 3 3 0.999999999 46 | 4 4 0.999991109 47 | 5 5 0.999986241 48 | 6 6 0.000000000 49 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/O2+/Full/basis: -------------------------------------------------------------------------------- 1 | 1 2 0 2 | s 6 1.00 3 | 5222.90220 -0.193640000E-02 4 | 782.539940 -0.148507000E-01 5 | 177.267430 -0.733187000E-01 6 | 49.5166880 -0.245116200 7 | 15.6664400 -0.480284700 8 | 5.17935990 -0.335942700 9 | s 2 1.00 10 | 10.6014410 0.788058000E-01 11 | 0.942317000 -0.567695200 12 | s 1 1.00 13 | 0.277474600 1.00000000 14 | p 4 1.00 15 | 33.4241260 0.175603000E-01 16 | 7.62217140 0.107630000 17 | 2.23820930 0.323525600 18 | 0.686730000 0.483222900 19 | p 1 1.00 20 | 0.193813500 1.00000000 21 | d 1 1.00 22 | 0.800000000 1.00000000 23 | END 24 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/O2+/Full/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between beta-beta quartet determinants 3 | # Pi-Pi states 4 | # Full Breit-Pauli operator 5 | # 6 | Quadrupole 7 | +1 4 R 4 R 8 | O 0.00000000E+00 0.00000000E+00 1.30485590E+00 1.0 9 | O 1.59798760E-16 0.00000000E+00 -1.30485590E+00 1.0 10 | end 11 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/O2+/Zeff/aover: -------------------------------------------------------------------------------- 1 | 2 | TWO-STATE MO OVERLAP INTEGRALS 3 | 4 | 1 1 1.000000000 5 | 1 2 0.000000000 6 | 1 3 0.000000000 7 | 1 4 0.000000000 8 | 1 5 0.000000000 9 | 1 6 0.000000000 10 | 2 1 -0.000000000 11 | 2 2 0.999999999 12 | 2 3 0.000000000 13 | 2 4 0.000000000 14 | 2 5 0.000000000 15 | 2 6 0.000000000 16 | 3 1 0.000000000 17 | 3 2 -0.000000000 18 | 3 3 0.999999999 19 | 3 4 -0.000000000 20 | 3 5 -0.000000000 21 | 3 6 0.000000000 22 | 4 1 -0.000000000 23 | 4 2 0.000000000 24 | 4 3 0.000000000 25 | 4 4 0.999991109 26 | 4 5 -0.000000000 27 | 4 6 0.000000000 28 | 5 1 0.000000000 29 | 5 2 -0.000000000 30 | 5 3 -0.000000000 31 | 5 4 -0.000000000 32 | 5 5 0.999986241 33 | 5 6 0.000000000 34 | 6 1 -0.000000000 35 | 6 2 0.000000000 36 | 6 3 0.000000000 37 | 6 4 0.000000000 38 | 6 5 0.000000000 39 | 6 6 0.000000000 40 | 41 | DIAGONAL ELEMENTS 42 | 43 | 1 1 1.000000000 44 | 2 2 0.999999999 45 | 3 3 0.999999999 46 | 4 4 0.999991109 47 | 5 5 0.999986241 48 | 6 6 0.000000000 49 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/O2+/Zeff/basis: -------------------------------------------------------------------------------- 1 | O 0 2 | s 6 1.00 3 | 5222.90220 -0.193640000E-02 4 | 782.539940 -0.148507000E-01 5 | 177.267430 -0.733187000E-01 6 | 49.5166880 -0.245116200 7 | 15.6664400 -0.480284700 8 | 5.17935990 -0.335942700 9 | s 2 1.00 10 | 10.6014410 0.788058000E-01 11 | 0.942317000 -0.567695200 12 | s 1 1.00 13 | 0.277474600 1.00000000 14 | p 4 1.00 15 | 33.4241260 0.175603000E-01 16 | 7.62217140 0.107630000 17 | 2.23820930 0.323525600 18 | 0.686730000 0.483222900 19 | p 1 1.00 20 | 0.193813500 1.00000000 21 | d 1 1.00 22 | 0.800000000 1.00000000 23 | END 24 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/O2+/Zeff/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between beta-beta quartet determinants 3 | # Pi-Pi states 4 | # One-electron operator with Zeff 5 | # 6 | dipole Zeff 7 | +1 4 R 4 R 8 | O 0.00000000E+00 0.00000000E+00 1.30485590E+00 1.0 9 | O 1.59798760E-16 0.00000000E+00 -1.30485590E+00 1.0 10 | end 11 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/SnCl/Full/basis: -------------------------------------------------------------------------------- 1 | Sn 0 2 | s 6 1.00 3 | 245047.360 -0.161620000E-02 4 | 36750.0260 -0.123711000E-01 5 | 8342.77350 -0.621339000E-01 6 | 2347.47230 -0.216397700 7 | 762.836200 -0.462974900 8 | 262.737930 -0.384447800 9 | s 3 1.00 10 | 498.732830 -0.113605200 11 | 60.9504580 0.632718200 12 | 26.3056100 0.441608600 13 | s 3 1.00 14 | 48.3039130 -0.265535900 15 | 8.66714370 0.830889700 16 | 3.95646920 0.317672400 17 | s 3 1.00 18 | 7.76814460 -0.327576500 19 | 1.75268360 0.793946800 20 | 0.770296100 0.404934100 21 | s 2 1.00 22 | 1.20051550 -0.214842000 23 | 0.194702600 0.702611400 24 | s 1 1.00 25 | 0.742741000E-01 1.00000000 26 | p 5 1.00 27 | 3581.69690 -0.736590000E-02 28 | 846.744340 -0.567097000E-01 29 | 270.732080 -0.236337500 30 | 98.2183720 -0.506028400 31 | 37.4960670 -0.362604600 32 | p 3 1.00 33 | 146.343380 0.248184000E-01 34 | 17.9099630 -0.496192600 35 | 6.91641320 -0.574425600 36 | p 3 1.00 37 | 3.08060130 0.419303800 38 | 1.31196840 0.528903900 39 | 0.558685900 0.139170100 40 | p 2 1.00 41 | 0.300903700 -0.299925000 42 | 0.115427300 -0.561515500 43 | p 1 1.00 44 | 0.434033000E-01 1.00000000 45 | d 5 1.00 46 | 354.240330 -0.132982000E-01 47 | 104.710750 -0.943270000E-01 48 | 38.6067210 -0.311078200 49 | 15.3717900 -0.499583900 50 | 6.09218330 -0.306913800 51 | d 3 1.00 52 | 4.84719880 -0.266455800 53 | 1.72875630 -0.558161400 54 | 0.565428300 -0.376159100 55 | d 1 1.00 56 | 0.154000000 1.00000000 57 | **** 58 | Cl 0 59 | s 6 1.00 60 | 26351.4580 0.173240000E-02 61 | 3945.05670 0.133109000E-01 62 | 892.438350 0.666748000E-01 63 | 249.417430 0.230050600 64 | 79.7215720 0.474230700 65 | 26.8311450 0.359524000 66 | s 3 1.00 67 | 52.7853010 -0.956296000E-01 68 | 5.61564290 0.588084000 69 | 2.10590760 0.486698200 70 | s 2 1.00 71 | 3.55861490 0.180689100 72 | 0.484798100 -0.688482900 73 | s 1 1.00 74 | 0.173331000 1.00000000 75 | p 5 1.00 76 | 271.078210 -0.109257000E-01 77 | 63.5472080 -0.775909000E-01 78 | 19.7371090 -0.277515900 79 | 6.78899370 -0.503193300 80 | 2.34803030 -0.334842600 81 | p 2 1.00 82 | 1.10668640 -0.276538100 83 | 0.382968000 -0.546676800 84 | p 1 1.00 85 | 0.125113300 1.00000000 86 | d 1 1.00 87 | 0.750000000 1.00000000 88 | END 89 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/SnCl/Full/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between alpha-alpha doublet determinants 3 | # Pi-Pi states 4 | # Full Breit-Pauli operator 5 | # 6 | 0 2 D 2 D 7 | Sn 0.00000000E+00 0.00000000E+00 1.13205877E+00 1.0 8 | Cl 0.00000000E+00 0.00000000E+00 -3.32958463E+00 1.0 9 | end 10 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/SnCl/Zeff/basis: -------------------------------------------------------------------------------- 1 | Sn 0 2 | s 6 1.00 3 | 245047.360 -0.161620000E-02 4 | 36750.0260 -0.123711000E-01 5 | 8342.77350 -0.621339000E-01 6 | 2347.47230 -0.216397700 7 | 762.836200 -0.462974900 8 | 262.737930 -0.384447800 9 | s 3 1.00 10 | 498.732830 -0.113605200 11 | 60.9504580 0.632718200 12 | 26.3056100 0.441608600 13 | s 3 1.00 14 | 48.3039130 -0.265535900 15 | 8.66714370 0.830889700 16 | 3.95646920 0.317672400 17 | s 3 1.00 18 | 7.76814460 -0.327576500 19 | 1.75268360 0.793946800 20 | 0.770296100 0.404934100 21 | s 2 1.00 22 | 1.20051550 -0.214842000 23 | 0.194702600 0.702611400 24 | s 1 1.00 25 | 0.742741000E-01 1.00000000 26 | p 5 1.00 27 | 3581.69690 -0.736590000E-02 28 | 846.744340 -0.567097000E-01 29 | 270.732080 -0.236337500 30 | 98.2183720 -0.506028400 31 | 37.4960670 -0.362604600 32 | p 3 1.00 33 | 146.343380 0.248184000E-01 34 | 17.9099630 -0.496192600 35 | 6.91641320 -0.574425600 36 | p 3 1.00 37 | 3.08060130 0.419303800 38 | 1.31196840 0.528903900 39 | 0.558685900 0.139170100 40 | p 2 1.00 41 | 0.300903700 -0.299925000 42 | 0.115427300 -0.561515500 43 | p 1 1.00 44 | 0.434033000E-01 1.00000000 45 | d 5 1.00 46 | 354.240330 -0.132982000E-01 47 | 104.710750 -0.943270000E-01 48 | 38.6067210 -0.311078200 49 | 15.3717900 -0.499583900 50 | 6.09218330 -0.306913800 51 | d 3 1.00 52 | 4.84719880 -0.266455800 53 | 1.72875630 -0.558161400 54 | 0.565428300 -0.376159100 55 | d 1 1.00 56 | 0.154000000 1.00000000 57 | **** 58 | Cl 0 59 | s 6 1.00 60 | 26351.4580 0.173240000E-02 61 | 3945.05670 0.133109000E-01 62 | 892.438350 0.666748000E-01 63 | 249.417430 0.230050600 64 | 79.7215720 0.474230700 65 | 26.8311450 0.359524000 66 | s 3 1.00 67 | 52.7853010 -0.956296000E-01 68 | 5.61564290 0.588084000 69 | 2.10590760 0.486698200 70 | s 2 1.00 71 | 3.55861490 0.180689100 72 | 0.484798100 -0.688482900 73 | s 1 1.00 74 | 0.173331000 1.00000000 75 | p 5 1.00 76 | 271.078210 -0.109257000E-01 77 | 63.5472080 -0.775909000E-01 78 | 19.7371090 -0.277515900 79 | 6.78899370 -0.503193300 80 | 2.34803030 -0.334842600 81 | p 2 1.00 82 | 1.10668640 -0.276538100 83 | 0.382968000 -0.546676800 84 | p 1 1.00 85 | 0.125113300 1.00000000 86 | d 1 1.00 87 | 0.750000000 1.00000000 88 | 89 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/examples/SnCl/Zeff/molsoc.inp: -------------------------------------------------------------------------------- 1 | # 2 | # Coupling between alpha-alpha doublet determinants 3 | # Pi-Pi states 4 | # One-electron operator with Zeff 5 | # 6 | Zeff OcT 7 | # 8 | 0 2 D 2 D 9 | Sn 0.00000000E+00 0.00000000E+00 1.13205877E+00 1.0 10 | Cl 0.00000000E+00 0.00000000E+00 -3.32958463E+00 1.0 11 | End 12 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/include/fileio.h: -------------------------------------------------------------------------------- 1 | C FILEIO COMMON 2 | C 3 | C Purpose: Common definition for FILE Input/Output routines. 4 | C 5 | C ------------------------------------------------------------------ 6 | C 7 | C *** Input/Output parameters *** 8 | C 9 | INTEGER MINPER,MAXPER,MINTEM,MAXTEM,INP,BASIS,OUT,DEN1,DEN2,SOCA, 10 | $ COESP,SOMAT,IOSO,IOAL,IOBE,IOMO,IOPM 11 | C 12 | PARAMETER (MINPER = 1, 13 | $ INP = 1, 14 | $ BASIS = 2, 15 | $ OUT = 3, 16 | $ DEN1 = 4, 17 | $ DEN2 = 5, 18 | $ SOCA = 6, 19 | $ COESP = 7, 20 | $ SOMAT = 8, 21 | $ IOAL = 9, 22 | $ IOBE = 10, 23 | $ MAXPER = 10, 24 | $ MINTEM = 11, 25 | $ IOSO = 11, 26 | $ IOMO = 12, 27 | $ IOPM = 13, 28 | $ MAXTEM = 13) 29 | 30 | C 31 | C *** Common blocks for FILE Input/Output variables *** 32 | C 33 | CHARACTER*10 FNAME(MAXTEM) 34 | C 35 | COMMON /CFILEIO/ FNAME 36 | C 37 | C ------------------------------------------------------------------ 38 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/include/math.h: -------------------------------------------------------------------------------- 1 | C MATH COMMON 2 | C 3 | C ------------------------------------------------------------------ 4 | C 5 | C *** Common block for mathematical constants and functions *** 6 | C 7 | REAL PI,UM(3,3) 8 | C 9 | REAL DFAC(-1:2*MAXFAC+1),FAC(0:MAXFAC),FTABLE(MAXITAB,0:MXLT+6), 10 | $ TRMSC(MXSO,MXCO,0:MXL) 11 | C 12 | COMMON /RMATH/ DFAC,FAC,FTABLE,PI,UM,TRMSC 13 | C 14 | C ------------------------------------------------------------------ 15 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/include/molecule.h: -------------------------------------------------------------------------------- 1 | C MOLECULE COMMON 2 | C 3 | C Common definition for molecule data. 4 | C 5 | CHARACTER ELEMENT(MXATM)*2,ZTYPE*4,ORSYM(MXSTO)*6, 6 | $ ANGBO*7,MOMSYM(2:MAXMOM)*3,ORSYMS(MXSTO)*6 7 | COMMON /CMOLECULE/ ELEMENT,ZTYPE,ORSYM,ANGBO,MOMSYM, 8 | $ ORSYMS 9 | C 10 | LOGICAL PRINT,UKS,SROKS,SPHEORB,DIRECTA,DIRECTB,SOCTWOM, 11 | $ GRAMS,ALTER,NOBIO,TDTB 12 | COMMON /LMOLECULE/ PRINT,UKS,SROKS,SPHEORB,DIRECTA, 13 | $ DIRECTB,SOCTWOM,GRAMS,ALTER,NOBIO,TDTB 14 | C 15 | INTEGER NAT,NGTF,CHARGE,MULTF,MULTS, 16 | $ NOMOAF,NOMOBF,NOMOAS,NOMOBS, 17 | $ LFOMOAF,LFOMOBF,LFOMOAS,LFOMOBS,HFOMOAF,HFOMOBF, 18 | $ HFOMOAS,HFOMOBS,DISCIN,READMO,MELEM 19 | COMMON /IMOLECULE/ NAT,NGTF,CHARGE, 20 | $ MULTF,MULTS, 21 | $ NOMOAF,NOMOBF,NOMOAS,NOMOBS,LFOMOAF, 22 | $ LFOMOBF,LFOMOAS,LFOMOBS,HFOMOAF,HFOMOBF, 23 | $ HFOMOAS,HFOMOBS,DISCIN,READMO,MELEM 24 | C 25 | REAL C(3,MXATM),BOHR,GCC(MXGTF),ZATOM(MXATM),OCCNUM, 26 | $ OCCNAF(MXSTO),OCCNBF(MXSTO),OCCNAS(MXSTO), 27 | $ OCCNBS(MXSTO),ZEFF(MXATM),FINESTRC,CMM1,SCAL(MXATM), 28 | $ OCCNF(MXSTO),OCCNS(MXSTO),DEBYE,TRANS 29 | COMMON /RMOLECULE/ C,BOHR,GCC,ZATOM,OCCNUM,OCCNAF,OCCNBF, 30 | $ OCCNAS,OCCNBS,ZEFF,FINESTRC,CMM1,SCAL, 31 | $ OCCNF,OCCNS,DEBYE,TRANS 32 | C 33 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/include/moleculeD.h: -------------------------------------------------------------------------------- 1 | C MOLECULE COMMON 2 | C 3 | C Common definition for molecule data 4 | C 5 | C ------------------------------------------------------------------ 6 | C 7 | INTEGER PSHELL(MXSH,3),NSTO,COP(0:MXL,0:MXL,0:MXL), 8 | $ DSHL,NATOM,SOP(0:MXL,0:MXL,0:MXL),NSHL,GLL(MXSH), 9 | $ LLS(MXATM),GUL(MXSH),ULS(MXATM),ULSTO(MXSH),LLSTO(MXSH), 10 | $ NELEC,SLL(MXSH),SUL(MXSH),NSPH,LM 11 | COMMON /IMOLECULED/ PSHELL,NSTO,COP,DSHL,NATOM,SOP,NSHL,GLL, 12 | $ LLS,GUL,ULS,ULSTO,LLSTO,NELEC,SLL,SUL,NSPH,LM 13 | C 14 | REAL ZET(MXGTF),SDISTANCE(MXATM,MXATM), 15 | $ INTHRESH,INTHRESH2,RAB(3),RCD(3),RAC(3),RBC(3),RSQAB,RSQCD, 16 | $ NCSTO(MXSTO),MS(3),AAT(3),BAT(3),CAT(3),DAT(3),ENERTWO(3), 17 | $ PRODAT,PRODBT,ENERTWOAU(3),TOLTIME,CPUT,ENER(3),ENERD(3) 18 | COMMON /RMOLECULED/ ZET,SDISTANCE,INTHRESH,INTHRESH2, 19 | $ RAB,RCD,RAC,RBC,RSQAB,RSQCD,NCSTO,MS,AAT,BAT, 20 | $ CAT,DAT,ENERTWO,PRODAT,PRODBT,ENERTWOAU, 21 | $ TOLTIME,CPUT,ENER,ENERD 22 | C 23 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/include/parameter.h: -------------------------------------------------------------------------------- 1 | C PARAMETER DEFINITION 2 | C 3 | C *** MolSOC parameters *** 4 | C 5 | INTEGER MXATM,MXSH,MXGTF,MXSTO 6 | C 7 | PARAMETER (MXATM = 5000, 8 | $ MXSH = 10000, 9 | $ MXGTF = 50000, 10 | $ MXSTO = 50000) 11 | C 12 | INTEGER MXL,MXLT,MXSO,MXCO 13 | C 14 | PARAMETER (MXL = 3, 15 | $ MXLT = 4*MXL+1, 16 | $ MXSO = 2*MXL+1, 17 | $ MXCO = (MXL+1)*(MXL+2)/2) 18 | C 19 | INTEGER MAXFAC,MAXMOM,MAXITAB 20 | C 21 | PARAMETER (MAXFAC = 30, 22 | $ MAXMOM = 20, 23 | $ MAXITAB = 120) 24 | C 25 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/Makefile: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # ********************** 4 | # *** MolSOC program *** 5 | # ********************** 6 | # 7 | # Creation: S. G. Chiodo 8 | # 9 | # *** Alpha OSF1 Fortran Compiler; f90 *** 10 | # 11 | #F90 = f90 12 | #FLAG = -r8 -fast -check nopower 13 | #LINK = -L../lib -ldmy 14 | #LINK = -lcxml 15 | #INCLUDE = ../include 16 | # 17 | # *** Intel Compiler; efc *** 18 | # 19 | F90 = ifort 20 | FLAG = -r8 21 | LINK = -L../lib -ldmy 22 | #LINK = -lmkl -lpthread -lguide 23 | INCLUDE = ../include 24 | # 25 | # *** PGI Fortran Compiler; pgf90 *** 26 | # 27 | #F90 = pgf90 28 | #FLAG = -r8 -fast 29 | #LINK = -L../lib -ldmy 30 | #INCLUDE = ../include 31 | # 32 | #F90 = gfortran 33 | #FLAG = -fdefault-real-8 34 | #LINK = -L../lib -ldmy 35 | #INCLUDE = ../include 36 | # 37 | PROGNAME = molsoc0.1.exe 38 | # 39 | SHELL = /bin/sh 40 | CP = /bin/cp 41 | MV = /bin/mv 42 | RM = /bin/rm -f 43 | 44 | OBJECTS = \ 45 | altmos.o atomdata.o atomdis.o bldimat.o bldimso.o bldimom.o \ 46 | bldover.o bldpfs0.o bldpfs2.o bldsoc.o bldsoc0.o bldsoc2.o \ 47 | chkmult.o clebsch.o cputime.o copyr.o crftable.o demon.o \ 48 | discone.o disczero.o errors.o fileio.o finele.o \ 49 | finnel.o finkey.o finstr.o gammaf.o \ 50 | gaussian.o genop.o getdate.o iniocc.o initialize.o ioscr.o \ 51 | mathcon.o matrelem.o molsoc.o moment.o momesym.o \ 52 | moocc.o mos.o motrsc.o muldens.o multipole.o norgtf.o \ 53 | norsto.o orbord.o orbsym.o ortho.o ortsvdlap.o overabu.o \ 54 | overfs.o overlap.o pointer.o readbas.o readinp.o readmos.o readshgf.o \ 55 | rr1socin.o rr2socin.o rrmomint.o rrovint.o scangm.o scangmf.o \ 56 | scangmt.o sdist.o shellop.o socone.o \ 57 | socfst0.o socfst2.o socint.o sozeff.o \ 58 | traatb.o transc.o turbomole.o turbord.o \ 59 | kssoc.o ucc.o vecfso.o vecfso2.o vprod.f writout.o wrthead.o xyzcomp.o \ 60 | rr21.o rr22.o rr23.o rr24.o 61 | 62 | all: s cleano utils 63 | 64 | s: $(OBJECTS) 65 | $(F90) $(FLAG) -o $(PROGNAME) $(OBJECTS) $(LINK) 66 | 67 | clean: 68 | ${RM} ${PROGNAME} *.o *~ core 69 | 70 | .f.o: 71 | $(F90) $(FLAG) -I$(INCLUDE) -c $*.f 72 | 73 | cleano: 74 | ${RM} *.o *~ core 75 | 76 | utils: 77 | ${MV} molsoc0.1.exe ../bin 78 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/altmos.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE ALTMOS(CA,CB,STRWRT,DMAT) 2 | C 3 | C ****************************************************************** 4 | C *** Alter MOs *** 5 | C ****************************************************************** 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | INCLUDE 'fileio.h' 11 | INCLUDE 'molecule.h' 12 | C 13 | CHARACTER :: LINE*80,STRWRT*(*),STRING*80 14 | C 15 | INTEGER :: DMAT,NALMOA,NALMOB 16 | C 17 | INTEGER :: IORB 18 | C 19 | REAL, DIMENSION(DMAT,DMAT) :: CA,CB 20 | C 21 | INTEGER :: ALLOCATION 22 | INTEGER, ALLOCATABLE, DIMENSION(:) :: ORBA,ORBB 23 | REAL, ALLOCATABLE, DIMENSION(:) :: MATRIX 24 | C 25 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 26 | C 27 | IF (.NOT.ALTER) RETURN 28 | C 29 | READ(INP,*) NALMOA,NALMOB 30 | IF (NALMOA == 0) GOTO 100 31 | C 32 | C ___ Allocate local fileds ___ 33 | C 34 | ALLOCATE(ORBA(NALMOA),ORBB(NALMOA),MATRIX(DMAT),STAT=ALLOCATION) 35 | IF (ALLOCATION /= 0) THEN 36 | WRITE(OUT,*) 'ALTMOS: ALLOCATION FAILED' 37 | STOP 38 | END IF 39 | C 40 | STRING = STRWRT//' STATE ALPHA MOs ALTERED:' 41 | WRITE(OUT,"(/,T2,A80)") STRING 42 | C 43 | DO IORB=1,NALMOA 44 | READ(INP,*) ORBA(IORB),ORBB(IORB) 45 | WRITE(OUT,1000) ORBA(IORB),ORBB(IORB) 46 | END DO 47 | C 48 | DO IORB=1,NALMOA 49 | MATRIX(:) = CA(:,ORBB(IORB)) 50 | CA(:,ORBB(IORB)) = CA(:,ORBA(IORB)) 51 | CA(:,ORBA(IORB)) = MATRIX(:) 52 | END DO 53 | C 54 | C ___ Deallocate local fields 55 | C 56 | DEALLOCATE(ORBA,ORBB,MATRIX,STAT=ALLOCATION) 57 | IF (ALLOCATION /= 0) THEN 58 | WRITE(OUT,*) 'ALTMOS: DEALLOCATION FAILED' 59 | STOP 60 | END IF 61 | C 62 | 100 CONTINUE 63 | C 64 | READ(INP,"(A80)") LINE 65 | C 66 | IF (NALMOB == 0) RETURN 67 | C 68 | C ___ Allocate local fileds ___ 69 | C 70 | ALLOCATE(ORBA(NALMOB),ORBB(NALMOB),MATRIX(DMAT),STAT=ALLOCATION) 71 | IF (ALLOCATION /= 0) THEN 72 | WRITE(OUT,*) 'ALTMOS: ALLOCATION FAILED' 73 | STOP 74 | END IF 75 | C 76 | STRING = STRWRT//' STATE BETA MOs ALTERED:' 77 | WRITE(OUT,"(/,T2,A80)") STRING 78 | C 79 | DO IORB=1,NALMOB 80 | READ(INP,*) ORBA(IORB),ORBB(IORB) 81 | WRITE(OUT,1000) ORBA(IORB),ORBB(IORB) 82 | END DO 83 | C 84 | DO IORB=1,NALMOB 85 | MATRIX(:) = CB(:,ORBB(IORB)) 86 | CB(:,ORBB(IORB)) = CB(:,ORBA(IORB)) 87 | CB(:,ORBA(IORB)) = MATRIX(:) 88 | END DO 89 | C 90 | READ(INP,"(A80)") LINE 91 | C 92 | C ___ Deallocate local fields ___ 93 | C 94 | DEALLOCATE(ORBA,ORBB,MATRIX,STAT=ALLOCATION) 95 | IF (ALLOCATION /= 0) THEN 96 | WRITE(OUT,*) 'ALTMOS: DEALLOCATION FAILED' 97 | STOP 98 | END IF 99 | C 100 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 101 | C 102 | 1000 FORMAT(T2,I5,2X,I5) 103 | C 104 | C O________________________________________________________________O 105 | C 106 | END SUBROUTINE ALTMOS 107 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/atomdata.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE ATOMDATA(ATOM,ILINE) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | C 11 | INTEGER :: I,ATOM,ILINE 12 | CHARACTER*2, DIMENSION(92) :: ELEM 13 | C 14 | REAL :: SOZEFF 15 | C 16 | LOGICAL :: FAILED 17 | C 18 | CHARACTER :: UCC*7 19 | C 20 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 21 | C 22 | DATA ELEM /'H ','He', 23 | $ 'Li','Be','B ','C ','N ','O ','F ','Ne', 24 | $ 'Na','Mg','Al','Si','P ','S ','Cl','Ar', 25 | $ 'K ','Ca', 26 | $ 'Sc','Ti','V ','Cr','Mn','Fe','Co','Ni','Cu','Zn', 27 | $ 'Ga','Ge','As','Se','Br','Kr', 28 | $ 'Rb','Sr', 29 | $ 'Y ','Zr','Nb','Mo','Tc','Ru','Rh','Pd','Ag','Cd', 30 | $ 'In','Sn','Sb','Te','I ','Xe', 31 | $ 'Cs','Ba', 32 | $ 'La', 33 | $ 'Ce','Pr','Nd','Pm','Sm','Eu','Gd', 34 | $ 'Tb','Dy','Ho','Er','Tm','Yb','Lu', 35 | $ 'Hf','Ta','W ','Re','Os','Ir','Pt','Au','Hg', 36 | $ 'Tl','Pb','Bi','Po','At','Rn', 37 | $ 'Fr','Ra', 38 | $ 'Ac', 39 | $ 'Th','Pa','U '/ 40 | C 41 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 42 | C 43 | C ___ Load atomic number ___ 44 | C 45 | FAILED = .TRUE. 46 | DO I=1,92 47 | IF (UCC(ELEM(I)(1:2)) == UCC(ELEMENT(ATOM)(1:2))) THEN 48 | ZATOM(ATOM) = REAL(I) 49 | FAILED = .FALSE. 50 | END IF 51 | END DO 52 | C 53 | IF (FAILED) THEN 54 | WRITE(OUT,"(/,'ERROR READING INPUT LINE ',I5)") ILINE 55 | WRITE(OUT,"('ATOMDATA: NO ATOMIC NUMBER FOUND')") 56 | STOP 57 | END IF 58 | C 59 | C ___ Calculate Zeff ___ 60 | C 61 | IF (ZTYPE == 'ZEFF') THEN 62 | ZEFF(ATOM) = SOZEFF(INT(ZATOM(ATOM))) 63 | IF (ZEFF(ATOM) == 0.0) THEN 64 | WRITE(OUT,"('ATOMDATA: CANNOT BE FOUND Z_eff')") 65 | STOP 66 | END IF 67 | C 68 | C ___ ZATOM ___ 69 | C 70 | ELSE IF (ZTYPE == 'ATOM') THEN 71 | ZEFF(ATOM) = ZATOM(ATOM)*SCAL(ATOM) 72 | ELSE 73 | STOP 'ATOMDATA: Z_eff IS NOT AVAILABLE' 74 | END IF 75 | C 76 | C O________________________________________________________________O 77 | C 78 | END SUBROUTINE ATOMDATA 79 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/atomdis.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE ATOMDIS(ATOMA,ATOMB,R,RSQUARE) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | INTEGER :: ATOMA,ATOMB,I 13 | REAL :: RSQUARE 14 | C 15 | REAL, DIMENSION(3) :: R 16 | C 17 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 18 | C 19 | RSQUARE = 0.0 20 | IF (ATOMA /= ATOMB) RSQUARE = SDISTANCE(ATOMA,ATOMB) 21 | C 22 | R(:) = C(:,ATOMA) - C(:,ATOMB) 23 | C 24 | C O________________________________________________________________O 25 | C 26 | END SUBROUTINE ATOMDIS 27 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/bldimat.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE BLDIMAT(ISHELL,JSHELL,NORM,MATRIX,BLOCKS,DMAT) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | INTEGER :: DMAT 13 | INTEGER :: ICO,I,J,IRO,ISHELL,JSHELL 14 | C 15 | REAL, DIMENSION(DMAT,DMAT) :: MATRIX 16 | REAL, DIMENSION(DSHL,DSHL) :: BLOCKS 17 | C 18 | REAL, DIMENSION(*) :: NORM 19 | C 20 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 21 | C 22 | DO IRO=LLSTO(ISHELL),ULSTO(ISHELL) 23 | I = IRO - LLSTO(ISHELL) + 1 24 | DO ICO=LLSTO(JSHELL),ULSTO(JSHELL) 25 | J = ICO - LLSTO(JSHELL) + 1 26 | MATRIX(IRO,ICO) = MATRIX(IRO,ICO) + 27 | $ NORM(IRO)*NORM(ICO)*BLOCKS(I,J) 28 | END DO 29 | END DO 30 | C 31 | C O________________________________________________________________O 32 | C 33 | END SUBROUTINE BLDIMAT 34 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/bldimom.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE BLDIMOM(ISHELL,JSHELL,NORM,MATRIX,BLOCKS,DMAT,DMOM) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | INTEGER :: DMAT,DMOM, counter=1 13 | INTEGER :: ICO,I,J,IRO,ISHELL,JSHELL 14 | C 15 | REAL, DIMENSION(DMAT,DMAT,2:DMOM) :: MATRIX 16 | REAL, DIMENSION(DSHL,DSHL,2:DMOM) :: BLOCKS 17 | C 18 | REAL, DIMENSION(*) :: NORM 19 | C 20 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 21 | C 22 | DO IRO=LLSTO(ISHELL),ULSTO(ISHELL) 23 | I = IRO - LLSTO(ISHELL) + 1 24 | DO ICO=LLSTO(JSHELL),ULSTO(JSHELL) 25 | J = ICO - LLSTO(JSHELL) + 1 26 | MATRIX(IRO,ICO,2:DMOM) = MATRIX(IRO,ICO,2:DMOM) + 27 | $ NORM(IRO)*NORM(ICO)* 28 | $ BLOCKS(I,J,2:DMOM) 29 | C print *, "counter2", counter 30 | C print *, "IRO, ICO", IRO, ICO, I, J 31 | C counter = counter + 1 32 | END DO 33 | END DO 34 | C 35 | C O________________________________________________________________O 36 | C 37 | END SUBROUTINE BLDIMOM 38 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/bldimso.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE BLDIMSO(ISHELL,JSHELL,NORM,MATRIX,BLOCKS,DMAT) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | INTEGER :: DMAT 13 | INTEGER :: ICO,I,J,IRO,ISHELL,JSHELL 14 | C 15 | REAL, DIMENSION(DMAT,DMAT,3) :: MATRIX 16 | REAL, DIMENSION(DSHL,DSHL,3) :: BLOCKS 17 | C 18 | REAL, DIMENSION(*) :: NORM 19 | C 20 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 21 | C 22 | DO IRO=LLSTO(ISHELL),ULSTO(ISHELL) 23 | I = IRO - LLSTO(ISHELL) + 1 24 | DO ICO=LLSTO(JSHELL),ULSTO(JSHELL) 25 | J = ICO - LLSTO(JSHELL) + 1 26 | MATRIX(IRO,ICO,:) = MATRIX(IRO,ICO,:) + 27 | $ NORM(IRO)*NORM(ICO)*BLOCKS(I,J,:) 28 | END DO 29 | END DO 30 | C 31 | C O________________________________________________________________O 32 | C 33 | END SUBROUTINE BLDIMSO 34 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/bldover.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE BLDOVER 2 | C 3 | C ****************************************************************** 4 | C *** Build overlap matrix *** 5 | C ****************************************************************** 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | INCLUDE 'fileio.h' 11 | INCLUDE 'moleculeD.h' 12 | INCLUDE 'molecule.h' 13 | C 14 | INTEGER :: ISTO,JSTO 15 | INTEGER :: ALLOCATION 16 | REAL, DIMENSION(:,:), ALLOCATABLE :: S 17 | C 18 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 19 | C 20 | C ___ Allocate local fields ___ 21 | C 22 | ALLOCATE(S(NSTO,NSTO),STAT=ALLOCATION) 23 | IF (ALLOCATION /= 0) THEN 24 | WRITE(OUT,*) 'BLDOVER: ALLOCATION FAILED' 25 | STOP 26 | END IF 27 | C 28 | C ___ Calculate overlap matrix ___ 29 | C 30 | CALL OVERLAP(S,NSTO) 31 | C 32 | C ___ Store overlap matrix on tape ___ 33 | C 34 | CALL IOSCR(S,NSTO**2,'WRITE','ZERO',4) 35 | OPEN(UNIT=171716, FILE='molsoc_overlap.dat', STATUS='REPLACE') 36 | WRITE(171716, "(A15)") "AO_overlap" 37 | WRITE(171716, "(f19.9)") S(:,:) 38 | CLOSE(171716) 39 | C 40 | C ___ Deallocate local fields ___ 41 | C 42 | DEALLOCATE(S,STAT=ALLOCATION) 43 | IF (ALLOCATION /= 0) THEN 44 | WRITE(OUT,*) 'BLDOVER: DEALLOCATION FAILED' 45 | STOP 46 | END IF 47 | C 48 | C O________________________________________________________________O 49 | C 50 | END SUBROUTINE BLDOVER 51 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/bldsoc.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE BLDSOC 2 | C 3 | C ****************************************************************** 4 | C 5 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 6 | C 7 | C ___ Calculate the occupation numbers ___ 8 | C 9 | CALL INIOCC 10 | C 11 | C ___ Calculate UKS or SROKS SOC contributions ___ 12 | C 13 | CALL KSSOC 14 | C 15 | C O_________________________________________________________________ 16 | C 17 | END SUBROUTINE BLDSOC 18 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/chkmult.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE CHKMULT 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | CHARACTER :: STRING*80 13 | C 14 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 15 | C 16 | C ___ Check the right multiplicity ___ 17 | C 18 | IF (MULTF < 1) THEN 19 | STRING = 'MULTIPLICITY OF THE I-STATE MUST BE > 0' 20 | GOTO 100 21 | ELSE IF (MULTS < 1) THEN 22 | STRING = 'MULTIPLICITY OF THE II-STATE MUST BE > 0' 23 | GOTO 100 24 | ELSE IF ((MULTF - 1) > NELEC) THEN 25 | STRING = 'MULTIPLICITY OF THE I-STATE CANNOT BE OBTAINED '// 26 | $ 'BY THE GIVEN NUMBER OF ELECTRONS' 27 | GOTO 100 28 | ELSE IF ((MULTS - 1) > NELEC) THEN 29 | STRING = 'MULTIPLICITY OF THE II-STATE CANNOT BE OBTAINED '// 30 | $ 'BY THE GIVEN NUMBER OF ELECTRONS' 31 | GOTO 100 32 | ELSE IF ((MOD(MULTF,2) == 0).AND.(MOD(NELEC,2) == 0)) THEN 33 | STRING = 'I-STATE: AN EVEN MULTIPLICITY IMPLIES AN ODD '// 34 | $ 'NUMBER OF ELECTRONS' 35 | GOTO 100 36 | ELSE IF ((MOD(MULTS,2) == 0).AND.(MOD(NELEC,2) == 0)) THEN 37 | STRING = 'II-STATE: AN EVEN MULTIPLICITY IMPLIES AN ODD '// 38 | $ 'NUMBER OF ELECTRONS' 39 | GOTO 100 40 | ELSE IF ((MOD(MULTF,2) /= 0).AND.(MOD(NELEC,2) /= 0)) THEN 41 | STRING = 'I-STATE: AN ODD MULTIPLICITY IMPLIES AN EVEN '// 42 | $ 'NUMBER OF ELECTRONS' 43 | GOTO 100 44 | ELSE IF ((MOD(MULTS,2) /= 0).AND.(MOD(NELEC,2) /= 0)) THEN 45 | STRING = 'II-STATE: AN ODD MULTIPLICITY IMPLIES AN EVEN '// 46 | $ 'NUMBER OF ELECTRONS' 47 | GOTO 100 48 | ELSE IF (NELEC > 2*NSTO) THEN 49 | STRING = 'NOT ENOUGH ORBITAL FUNCTIONS' 50 | GOTO 100 51 | END IF 52 | C 53 | RETURN 54 | C 55 | 100 CONTINUE 56 | C 57 | WRITE(OUT,"(/,A80)") STRING 58 | STOP 59 | C 60 | C O________________________________________________________________O 61 | C 62 | END SUBROUTINE CHKMULT 63 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/clebsch.f: -------------------------------------------------------------------------------- 1 | REAL FUNCTION CLEBSCH(J1,J2,M1,M2,J,M) 2 | C 3 | C Purpose: Calculate Clebsch-Gordan coefficients using the 4 | C Racah formula. 5 | C 6 | C ****************************************************************** 7 | C 8 | IMPLICIT NONE 9 | C 10 | INCLUDE 'parameter.h' 11 | INCLUDE 'fileio.h' 12 | INCLUDE 'math.h' 13 | C 14 | INTEGER :: J1,J2,M1,M2,J,M 15 | INTEGER :: T1,T2,T3,T4,T5,KMIN,KMAX,PHASE 16 | INTEGER :: K 17 | C 18 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 19 | C 20 | CLEBSCH = 0.0 21 | C 22 | IF ((ABS(M1) > J1).OR.(ABS(M2) > J2) 23 | $ .OR.(ABS(M) > J) 24 | $ .OR.(J1 < 0) 25 | $ .OR.(J2 < 0) 26 | $ .OR.(J < 0) 27 | $ .OR.(ABS(J1-J2) > J) 28 | $ .OR.(J > J1+J2) 29 | $ .OR.(M1+M2 /= M)) RETURN 30 | C 31 | IF ((MAX(J1,J2)+J) > MAXFAC) THEN 32 | WRITE(OUT,1000) 33 | WRITE(OUT,2000) MAXFAC,MAX(J1,J2)+J 34 | ENDIF 35 | C 36 | T1 = (J1 - M1)/2 37 | T2 = (J - J2 + M1)/2 38 | T3 = (J2 + M2)/2 39 | T4 = (J - J1 - M2)/2 40 | T5 = (J1 + J2 - J)/2 41 | C 42 | IF ((T1*2 /= J1-M1).OR.(T3*2 /= J2+M2) 43 | $ .OR.(T5*2 /= J1+J2-J)) RETURN 44 | C 45 | KMIN = MAX(MAX(-T2,-T4),0) 46 | KMAX = MIN(MIN(T1,T3),T5) 47 | C 48 | PHASE = 1 49 | IF ((KMIN/2)*2 /= KMIN) PHASE = -1 50 | C 51 | DO K=KMIN,KMAX 52 | CLEBSCH = CLEBSCH + PHASE/(FAC(T1-K)*FAC(T2+K)* 53 | $ FAC(T3-K)*FAC(T4+K)*FAC(K)*FAC(T5-K)) 54 | PHASE = -PHASE 55 | END DO 56 | C 57 | IF (KMIN > KMAX) CLEBSCH = 1.0 58 | CLEBSCH = CLEBSCH*SQRT(FAC(T5)*FAC((J1+J-J2)/2)* 59 | $ FAC((J2+J-J1)/2)/FAC((J1+J2+J)/2+1)*(J+1)* 60 | $ FAC((J1+M1)/2)*FAC(T1)*FAC(T3)*FAC((J2-M2)/2)* 61 | $ FAC((J+M)/2)*FAC((J-M)/2)) 62 | C 63 | C 64 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 65 | C 66 | 1000 FORMAT(/,T2,'*** CLEBSCH: INCREASE THE NUMBER OF FACTORIALS ***') 67 | 2000 FORMAT(/,T5,'ARE NEEDED ',I5,' INSTEAD OF ',I5) 68 | C 69 | C O________________________________________________________________O 70 | C 71 | END FUNCTION CLEBSCH 72 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/copyr.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE COPYR 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | C 11 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 12 | C 13 | WRITE(OUT,1000) 14 | C 15 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 16 | C 17 | C ___ Format statements ___ 18 | C 19 | 1000 FORMAT(T5,46("-"),/, 20 | $ T5,("-"),44X,("-"),/, 21 | $ T5,("-"),15X,'PROGRAM MolSOC',15X,("-"),/, 22 | $ T5,("-"),16X,'Version 0.1',17X,("-"),/, 23 | $ T5,("-"),10X,'AUTHOR: Sandro G. Chiodo', 24 | $ 10X,("-"),/,T5,("-"),44X,("-"),/, 25 | $ T5,46("-"),/) 26 | C 27 | C O________________________________________________________________O 28 | C 29 | END SUBROUTINE COPYR 30 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/cputime.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE CPUTIME 2 | C 3 | C ***************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'moleculeD.h' 10 | C 11 | REAL(KIND = 4) :: ETIME 12 | REAL(KIND = 4), DIMENSION(2) :: TIMEVEC 13 | REAL :: TIMER 14 | C 15 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 16 | C 17 | TIMEVEC(1) = 0.0; TIMEVEC(2) = 0.0 18 | TIMER = ETIME(TIMEVEC) 19 | CPUT = MAX(TIMER,TOLTIME) 20 | C 21 | C O________________________________________________________________O 22 | C 23 | END SUBROUTINE CPUTIME 24 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/crftable.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE CRFTABLE 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'math.h' 9 | C 10 | INTEGER, PARAMETER :: ITMAX = 50, NMAX = MXLT+6 11 | INTEGER :: J,K,N,ITAB 12 | REAL :: FACTOR,PROD,SUMTERM,SUMT,TERM,EPS,T 13 | REAL, DIMENSION(ITMAX + 10) :: R 14 | C 15 | C ------------------------------------------------------------------ 16 | C 17 | EPS = EPSILON(0.0) 18 | C 19 | DO ITAB=1,MAXITAB 20 | T = FLOAT(ITAB)*0.1 21 | FTABLE(ITAB,0:NMAX) = 0.0 22 | C 23 | R(ITMAX+10) = 0.0 24 | DO J=ITMAX+9,1,-1 25 | R(J) = -T/((4.0*J + 2.0) - T*R(J+1)) 26 | END DO 27 | C 28 | FACTOR = 2.0*SINH(0.5*T)*EXP(-0.5*T)/T 29 | C 30 | DO N=0,NMAX 31 | C 32 | C ___ Initialize the iteration ___ 33 | C 34 | SUMT = FACTOR/(2.0*N + 1.0) 35 | TERM = 1.0 36 | C 37 | C ___ Start the summation and recursion ___ 38 | C 39 | DO K=1,ITMAX 40 | TERM = TERM*(2.0*N - 2.0*K + 1.0)/(2.0*N + 2.0*K + 1.0) 41 | C 42 | C ___ Product of Bessel function quotients ___ 43 | C 44 | PROD = 1.0 45 | DO J=1,K 46 | PROD = PROD*R(J) 47 | END DO 48 | C 49 | SUMTERM = FACTOR*TERM*PROD*(2.0*K + 1.0)/(2.0*N + 1.0) 50 | C 51 | C ___ Convergence test ___ 52 | C 53 | IF (ABS(SUMTERM) < EPS) THEN 54 | C 55 | EXIT 56 | C 57 | ELSE IF (K == ITMAX) THEN 58 | C 59 | STOP 'MAXIMUM NUMBER OF ITERATIONS REACHED IN CRFTABLE' 60 | C 61 | ELSE 62 | C 63 | SUMT = SUMT + SUMTERM 64 | C 65 | END IF 66 | END DO 67 | C 68 | FTABLE(ITAB,N) = SUMT 69 | C 70 | END DO 71 | END DO 72 | C 73 | C ------------------------------------------------------------------ 74 | C 75 | END SUBROUTINE CRFTABLE 76 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/demon.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE DEMON(MATRIX,OCCN,OPTION1,OPTION2,DENS) 2 | C 3 | C ******************************************************************* 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'molecule.h' 11 | INCLUDE 'moleculeD.h' 12 | C 13 | CHARACTER*(*) :: OPTION1,OPTION2 14 | CHARACTER :: PRSTR*80,PRSTR1*29,FSTRING*21 15 | INTEGER :: START,I,J,LOOP,NTIM,ARR,DENS,DIM,JCOUN 16 | INTEGER, DIMENSION(5) :: ORBIT 17 | C 18 | REAL, DIMENSION(NSTO,NSTO) :: MATRIX 19 | REAL, DIMENSION(MXSTO) :: OCCN 20 | REAL, DIMENSION(5) :: VECTOR 21 | C 22 | INTEGER :: ALLOCATION 23 | REAL, DIMENSION(:), ALLOCATABLE :: EIGVAL 24 | C 25 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 26 | C 27 | PRSTR = OPTION1//' MO COEFFICIENTS OF THE '//OPTION2//' STATE' 28 | PRSTR1 = 'COEFFICIENTS OF CARTESIAN MOs' 29 | C 30 | C ___ Allocate local fields ___ 31 | C 32 | ALLOCATE(EIGVAL(NSTO),STAT=ALLOCATION) 33 | IF (ALLOCATION /= 0) THEN 34 | WRITE(OUT,*) 'ALLOCATION FAILED' 35 | STOP 36 | END IF 37 | C 38 | C ___ Read deMon MO coefficients ___ 39 | C 40 | DIM = NSTO 41 | READ(DENS,END=10010,ERR=10000) ((MATRIX(J,I),J=1,DIM),I=1,DIM) 42 | READ(DENS,END=10010,ERR=10000) (EIGVAL(I),I=1,DIM) 43 | C 44 | WRITE(COESP,*) 45 | WRITE(COESP,*) PRSTR 46 | WRITE(COESP,*) PRSTR1 47 | C 48 | NTIM = (DIM-1)/5 + 1 49 | START = 0 50 | ARR = 0 51 | DO LOOP=1,NTIM 52 | START = ARR + 1 53 | ARR = ARR + 5 54 | ARR = MIN(ARR,DIM) 55 | JCOUN = 0 56 | DO J=START,ARR 57 | JCOUN = JCOUN + 1 58 | ORBIT(JCOUN) = J 59 | END DO 60 | WRITE(COESP,"(4X,5I9)") (ORBIT(J),J=1,JCOUN) 61 | WRITE(COESP,"(4X,5F10.5)") (OCCN(J),J=START,ARR) 62 | WRITE(COESP,"(4X,5F10.5)") (EIGVAL(J),J=START,ARR) 63 | WRITE(COESP,*) 64 | DO I=1,DIM 65 | WRITE(COESP,"(A4,5F10.5)") ORSYM(I),(MATRIX(I,J),J=START,ARR) 66 | END DO 67 | END DO 68 | C 69 | C ___ Deallocate local fields ___ 70 | C 71 | DEALLOCATE(EIGVAL,STAT=ALLOCATION) 72 | IF (ALLOCATION /= 0) THEN 73 | WRITE(OUT,*) 'DEMON: DEALLOCATION FAILED' 74 | STOP 75 | END IF 76 | C 77 | RETURN 78 | C 79 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 80 | C 81 | C ___ Error handling ___ 82 | C 83 | 10000 CONTINUE 84 | WRITE(OUT,"(/,T2,'RSTIO: ERROR READING FROM RESTART FILE')") 85 | STOP 86 | C 87 | 10010 CONTINUE 88 | WRITE(OUT,"(/,T2,'RSTIO: UNEXPECTED END OF RESTART FILE')") 89 | STOP 90 | C 91 | C O________________________________________________________________O 92 | C 93 | END SUBROUTINE DEMON 94 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/discone.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE DISCONE(CA,CB,NOAF,NOBS,DMAT) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'molecule.h' 9 | INCLUDE 'moleculeD.h' 10 | INCLUDE 'fileio.h' 11 | INCLUDE 'math.h' 12 | C 13 | INTEGER :: DMAT,NOAF,NOBS 14 | INTEGER :: IMAT,JMAT 15 | REAL :: PROD,PRODA,PRODB,SIG,SOMO 16 | C 17 | REAL, DIMENSION(DMAT) :: CA,CB 18 | C 19 | INTEGER :: ALLOCATION 20 | REAL, DIMENSION(:,:), ALLOCATABLE :: MATRIX,SMOA,SMOB 21 | C 22 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 23 | C 24 | SIG = 1.0 25 | C 26 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 27 | C 28 | C ___ Allocate local fields ___ 29 | C 30 | ALLOCATE(MATRIX(DMAT,DMAT),SMOA(DMAT,DMAT),SMOB(DMAT,DMAT), 31 | $ STAT=ALLOCATION) 32 | IF (ALLOCATION /= 0) THEN 33 | WRITE(OUT,*) 'DISCONE: ALLOCATION FAILED' 34 | STOP 35 | END IF 36 | C 37 | C ___ Read from tape two-state MO overlap matrices ___ 38 | C 39 | CALL IOSCR(SMOA,DMAT**2,'READ','ZERO',5) 40 | CALL IOSCR(SMOB,DMAT**2,'READ','ZERO',6) 41 | C 42 | PRODA = 1.0 43 | DO IMAT=1,NOAF 44 | PRODA = PRODA*SMOA(IMAT,IMAT) 45 | END DO 46 | C 47 | PRODB = 1.0 48 | IF (NOBS > 0) THEN 49 | DO IMAT=1,NOBS 50 | PRODB = PRODB*SMOB(IMAT,IMAT) 51 | END DO 52 | END IF 53 | C 54 | PROD = PRODA*PRODB 55 | C 56 | C ___ Read from tape MO SOC integrals ___ 57 | C 58 | CALL IOSCR(MATRIX,DMAT**2,'READ','ZERO',1) 59 | C 60 | SOMO = 0.0 61 | DO IMAT=1,DMAT 62 | DO JMAT=1,DMAT 63 | SOMO = SOMO + CB(IMAT)*CA(JMAT)*MATRIX(IMAT,JMAT) 64 | END DO 65 | END DO 66 | C 67 | ENERD(1) = 0.5*FINESTRC**2*SOMO*PROD 68 | ENER(1) = ENERD(1)*CMM1 69 | C 70 | CALL IOSCR(MATRIX,DMAT**2,'READ','ZERO',2) 71 | C 72 | SOMO = 0.0 73 | DO IMAT=1,DMAT 74 | DO JMAT=1,DMAT 75 | SOMO = SOMO + CB(IMAT)*CA(JMAT)*MATRIX(IMAT,JMAT) 76 | END DO 77 | END DO 78 | C 79 | ENERD(2) = 0.5*FINESTRC**2*SOMO*PROD 80 | ENER(2) = ENERD(2)*CMM1 81 | C 82 | CALL IOSCR(MATRIX,DMAT**2,'READ','ZERO',3) 83 | C 84 | SOMO = 0.0 85 | DO IMAT=1,DMAT 86 | DO JMAT=1,DMAT 87 | SOMO = SOMO + CB(IMAT)*CA(JMAT)*MATRIX(IMAT,JMAT) 88 | END DO 89 | END DO 90 | C 91 | ENERD(3) = 0.5*FINESTRC**2*SOMO*PROD 92 | ENER(3) = ENERD(3)*CMM1 93 | C 94 | C ___ Deallocate local fields ___ 95 | C 96 | DEALLOCATE(MATRIX,SMOA,SMOB,STAT=ALLOCATION) 97 | IF (ALLOCATION /= 0) THEN 98 | WRITE(OUT,*) 'DISCONE: DEALLOCATION FAILED' 99 | STOP 100 | END IF 101 | C 102 | C O________________________________________________________________O 103 | C 104 | END SUBROUTINE DISCONE 105 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/errors.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE ERRORS 2 | C 3 | C ******************************************************************* 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'molecule.h' 11 | INCLUDE 'moleculeD.h' 12 | C 13 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 14 | C 15 | C ___ Write error messages and exit ___ 16 | C 17 | IF (DISCIN == 2) THEN 18 | IF (((.NOT.DIRECTA).AND.(DIRECTB)).OR. 19 | $ ((DIRECTA).AND.(.NOT.DIRECTB))) THEN 20 | IF ((MULTF /= 1).AND.(MULTS /= 3)) THEN 21 | WRITE(OUT,1000) 22 | STOP 23 | END IF 24 | END IF 25 | END IF 26 | C 27 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 28 | C 29 | C *** Format statements *** 30 | C 31 | 1000 FORMAT(/,T2,'ERRONEOUS COMBINATION OF THE COUPLE OF IDENTIFIER O', 32 | $ /,T2,'FOR DIRECT OR REVERSE PROCEDURE') 33 | C 34 | C O________________________________________________________________O 35 | C 36 | END SUBROUTINE ERRORS 37 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/fileio.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE FILEIO(OPTION) 2 | C 3 | C ------------------------------------------------------------------ 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | C 11 | CHARACTER :: OPTION*(*) 12 | C 13 | CHARACTER :: NAME*10,STRING*80 14 | INTEGER :: ITA 15 | LOGICAL :: EXIS,NMD,OPE 16 | C 17 | C ------------------------------------------------------------------ 18 | C 19 | SELECT CASE (OPTION) 20 | C 21 | C *** Open permanent files *** 22 | C 23 | CASE ('OPEN PERMANENT FILES') 24 | C 25 | OPEN(UNIT=INP,FILE='molsoc.inp',STATUS='UNKNOWN', 26 | $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 27 | OPEN(UNIT=BASIS,FILE='molsoc_basis',STATUS='UNKNOWN', 28 | $ POSITION='REWIND',ACCESS='SEQUENTIAL',FORM='FORMATTED') 29 | OPEN(OUT,FILE='molsoc.out',STATUS='UNKNOWN',POSITION='REWIND', 30 | $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 31 | OPEN(SOCA,FILE='soint',STATUS='UNKNOWN',POSITION='REWIND', 32 | $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 33 | C OPEN(COESP,FILE='coef',STATUS='UNKNOWN',POSITION='REWIND', 34 | C $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 35 | C OPEN(IOAL,FILE='aover',STATUS='UNKNOWN',POSITION='REWIND', 36 | C $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 37 | C OPEN(IOBE,FILE='bover',STATUS='UNKNOWN',POSITION='REWIND', 38 | C $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 39 | C 40 | CASE ('OPEN MOS PERMANENT FILES') 41 | C 42 | C IF ((READMO == 1).OR.(READMO == 3).OR.(READMO == 4) 43 | C $ .OR.(READMO == 5)) THEN 44 | C OPEN(DEN1,FILE='mos1',STATUS='UNKNOWN',POSITION='REWIND', 45 | C $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 46 | C OPEN(DEN2,FILE='mos2',STATUS='UNKNOWN',POSITION='REWIND', 47 | C $ ACCESS='SEQUENTIAL',FORM='FORMATTED') 48 | C ELSE IF (READMO == 2) THEN 49 | C OPEN(DEN1,FILE='mos1',STATUS='UNKNOWN',POSITION='REWIND', 50 | C $ ACCESS='SEQUENTIAL',FORM='UNFORMATTED') 51 | C OPEN(DEN2,FILE='mos2',STATUS='UNKNOWN',POSITION='REWIND', 52 | C $ ACCESS='SEQUENTIAL',FORM='UNFORMATTED') 53 | C END IF 54 | C 55 | C *** Temporary file names *** 56 | C 57 | FNAME(IOSO) = 'ioso.scr' 58 | FNAME(IOMO) = 'iomom.scr' 59 | FNAME(IOPM) = 'iopm.scr' 60 | C 61 | CASE ('CLOSE ALL FILES') 62 | C 63 | DO ITA=MINPER,MAXPER 64 | CLOSE (UNIT=ITA,STATUS='KEEP') 65 | END DO 66 | C 67 | DO ITA=MINTEM,MAXTEM 68 | CLOSE (UNIT=ITA,STATUS='DELETE') 69 | END DO 70 | C 71 | C *** Error handling *** 72 | C 73 | CASE DEFAULT 74 | C 75 | STRING = 'UNKNOWN OPTION '//OPTION 76 | WRITE(OUT,*) STRING 77 | C 78 | END SELECT 79 | C 80 | C ------------------------------------------------------------------ 81 | C 82 | END SUBROUTINE FILEIO 83 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/finele.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE FINELE(LINE,SUCCESS,STRING,INAT,IATOM,CLINE) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | CHARACTER*(*) :: LINE,EL*2 13 | C 14 | INTEGER :: I,ILINE,ILOW,ISTART,INU,LIM,IATOM,RNUM,CNUM,CLINE 15 | C 16 | INTEGER, DIMENSION(80) :: LENSTR,LLSTR,ULSTR 17 | C 18 | INTEGER, DIMENSION(NATOM) :: INAT 19 | C 20 | LOGICAL :: SUCCESS 21 | C 22 | CHARACTER*(*) :: UCC*7,STRING,IFOR*4,CHECKL*25,CHECKS*4,LINE1*1 23 | C 24 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 25 | C 26 | C ___ Find keywords decoding the line ___ 27 | C 28 | ILINE = 1 29 | ILOW = 0 30 | LENSTR = 0 31 | LLSTR = 0 32 | INAT = 0 33 | SUCCESS = .FALSE. 34 | CHECKL = 'ABCDEFGHIYJKLMNOPQRSTUVWZ' 35 | CHECKS = '#?!*' 36 | C 37 | DO I=1,LEN(LINE) 38 | IF (INDEX(' ',LINE(I:I)) == 0) THEN 39 | ILOW = ILOW + 1 40 | LENSTR(ILINE) = LENSTR(ILINE) + 1 41 | ELSE 42 | ULSTR(ILINE) = LLSTR(ILINE) + LENSTR(ILINE) - 1 43 | ILINE = ILINE + 1 44 | ILOW = 0 45 | END IF 46 | IF (ILOW == 1) LLSTR(ILINE) = I 47 | END DO 48 | C 49 | RNUM = 0 50 | CNUM = 0 51 | DO I=1,LEN(LINE) 52 | LINE1 = UCC(LINE(I:I)) 53 | IF (INDEX('.',LINE(I:I)) /= 0) RNUM = RNUM + 1 54 | IF ((INDEX(CHECKL,LINE1) /= 0).OR. 55 | $ (INDEX(CHECKS,LINE(I:I)) /= 0)) CNUM = CNUM + 1 56 | END DO 57 | IF (RNUM /= 0) GOTO 300 58 | IF (CNUM /= 0) GOTO 200 59 | C 60 | LIM = 0 61 | 100 CONTINUE 62 | LIM = LIM + 1 63 | BACKSPACE(BASIS) 64 | READ(BASIS,*,ERR=9999) (INAT(I),I=1,LIM) 65 | IF (INAT(LIM) /= 0) GOTO 100 66 | DO I=1,LIM 67 | IF (INAT(I) == IATOM) SUCCESS = .TRUE. 68 | END DO 69 | C 70 | 200 CONTINUE 71 | C 72 | DO I=1,ILINE 73 | IF (LENSTR(I) /= 0) THEN 74 | IF (UCC(LINE(LLSTR(I):ULSTR(I))) == UCC(STRING(1:2))) THEN 75 | SUCCESS = .TRUE. 76 | GOTO 300 77 | END IF 78 | END IF 79 | END DO 80 | C 81 | 300 CONTINUE 82 | RETURN 83 | C 84 | 9999 CONTINUE 85 | WRITE(OUT,1000) CLINE 86 | STOP 87 | C 88 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 89 | C 90 | C ___ Format statements ___ 91 | C 92 | 1000 FORMAT(/,T2,'FINELE: ERROR READING BASIS SET INPUT LINE',I5) 93 | C 94 | C O________________________________________________________________O 95 | C 96 | END SUBROUTINE FINELE 97 | 98 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/finnel.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE FINNEL 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'molecule.h' 9 | INCLUDE 'moleculeD.h' 10 | C 11 | INTEGER :: IATOM 12 | C 13 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 14 | C 15 | C ___ Calculate number of electrons ___ 16 | C 17 | NELEC = 0 18 | DO IATOM=1,NATOM 19 | NELEC = NELEC + INT(ZATOM(IATOM)) 20 | END DO 21 | NELEC = NELEC - CHARGE 22 | C 23 | C ___ Set threshold for integrals ___ 24 | C 25 | INTHRESH2 = 1.0E-10 26 | INTHRESH = 1.0E-10 27 | C 28 | C O________________________________________________________________O 29 | C 30 | END SUBROUTINE FINNEL 31 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/finstr.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE FINSTR(LINE,SUCCESS,STRING) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | CHARACTER*(*) :: LINE 13 | C 14 | INTEGER :: I,ILINE,ILOW,COUNC 15 | INTEGER, DIMENSION(80) :: LENSTR,LLSTR 16 | C 17 | LOGICAL :: SUCCESS 18 | C 19 | CHARACTER :: UCC*7,STRING*(*) 20 | C 21 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 22 | C 23 | ILINE = 1 24 | ILOW = 0 25 | LENSTR = 0 26 | LLSTR = 0 27 | SUCCESS = .FALSE. 28 | C 29 | DO I=1,LEN(LINE) 30 | IF (INDEX(' ',LINE(I:I)) == 0) THEN 31 | ILOW = ILOW + 1 32 | LENSTR(ILINE) = LENSTR(ILINE) + 1 33 | ELSE 34 | ILINE = ILINE + 1 35 | ILOW = 0 36 | END IF 37 | IF (ILOW == 1) LLSTR(ILINE) = I 38 | END DO 39 | C 40 | COUNC = 0 41 | DO I=1,ILINE 42 | IF (LENSTR(I) /= 0) THEN 43 | IF (UCC(LINE(LLSTR(I):LLSTR(I)+2)) == STRING(1:3)) 44 | $ SUCCESS = .TRUE. 45 | COUNC = COUNC + 1 46 | END IF 47 | END DO 48 | C 49 | IF ((UCC(STRING(1:3)) == 'END').AND.(COUNC == 0)) SUCCESS = .TRUE. 50 | C 51 | C O________________________________________________________________O 52 | C 53 | END SUBROUTINE FINSTR 54 | 55 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/gammaf.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE GAMMAF(F,T,NMAX) 2 | C 3 | C ------------------------------------------------------------------ 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'math.h' 9 | C 10 | REAL, PARAMETER :: TEPS = 1.E-13 11 | C 12 | INTEGER :: NMAX 13 | C 14 | INTEGER :: I,ITAB,K 15 | C 16 | REAL :: TDELTA,EXPO,G,TMP,TTAB,T 17 | REAL, DIMENSION(0:NMAX) :: F 18 | C 19 | C ------------------------------------------------------------------ 20 | C 21 | C ___ Calculate F(t) ___ 22 | C 23 | IF (T < TEPS) THEN 24 | C 25 | C ___ Special cases: t = 0 ___ 26 | C 27 | DO I=0,NMAX 28 | F(I) = 1.0/(2.0*I + 1.0) 29 | END DO 30 | C 31 | ELSE IF (T <= 12.0) THEN 32 | C 33 | C ___ 0 < T < 12 --> Taylor expansion ___ 34 | C 35 | C ___ Use the pretabulation of the F(t) function ___ 36 | C ___ for the Taylor series expansion ___ 37 | C 38 | TDELTA = 0.1 39 | ITAB = NINT(T/TDELTA) 40 | TTAB = REAL(ITAB)*TDELTA 41 | C 42 | F(NMAX) = FTABLE(ITAB,NMAX) 43 | C 44 | TMP = 1.0 45 | DO K=1,6 46 | TMP = TMP*(TTAB - T) 47 | F(NMAX) = F(NMAX) + FTABLE(ITAB,NMAX+K)*TMP*FAC(K) 48 | END DO 49 | C 50 | EXPO = EXP(-T) 51 | C 52 | C ___ With the downward recursive relation ___ 53 | C ___ are create the other F(t) values ___ 54 | C 55 | DO I=NMAX-1,0,-1 56 | F(I) = (2.0*T*F(I+1) + EXPO)/(2.0*I + 1.0) 57 | END DO 58 | C 59 | ELSE 60 | C 61 | C ___ T > 12 ___ 62 | C 63 | IF (T <= 15.0) THEN 64 | C 65 | C ___ 12 < T <= 15 --> Four term polynom expansion ___ 66 | C 67 | G = 0.4999489092 - 0.2473631686/T + 68 | $ 0.321180909/T**2 - 0.3811559346/T**3 69 | F(0) = 0.5*SQRT(PI/T) - G*EXP(-T)/T 70 | C 71 | ELSE IF (T <= 18.0) THEN 72 | C 73 | C ___ 15 < T <= 18 --> three term polynom expansion ___ 74 | C 75 | G = 0.4998436875 - 0.24249438/T + 0.24642845/T**2 76 | F(0) = 0.5*SQRT(PI/T) - G*EXP(-T)/T 77 | C 78 | ELSE IF (T <= 24.0) THEN 79 | C 80 | C ___ 18 < t <= 24 --> Two term polynom expansion ___ 81 | C 82 | G = 0.499093162 - 0.2152832/T 83 | F(0) = 0.5*SQRT(PI/T) - G*EXP(-T)/T 84 | C 85 | ELSE IF (T <= 30.0) THEN 86 | C 87 | C ___ 24 < t <= 30 --> 1 term polynom expansion ___ 88 | C 89 | G = 0.49 90 | F(0) = 0.5*SQRT(PI/T) - G*EXP(-T)/T 91 | C 92 | ELSE 93 | C 94 | C ___ t > 30 -> Asymptotic formula ___ 95 | C 96 | F(0) = 0.5*SQRT(PI/T) 97 | C 98 | END IF 99 | C 100 | IF (T.GT.(2.0*NMAX + 36.0)) THEN 101 | EXPO = 0.0 102 | ELSE 103 | EXPO = EXP(-T) 104 | END IF 105 | C 106 | C ___ With the upward recursion relation ___ 107 | C ___ are created the other F(t) values ___ 108 | C 109 | DO I=1,NMAX 110 | F(I) = 0.5*((2.0*I - 1)*F(I-1) - EXPO)/T 111 | END DO 112 | C 113 | END IF 114 | C 115 | C ------------------------------------------------------------------ 116 | C 117 | END SUBROUTINE GAMMAF 118 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/genop.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE GENOP 2 | C 3 | C ******************************************************************* 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'molecule.h' 11 | INCLUDE 'moleculeD.h' 12 | C 13 | INTEGER :: AX,AY,AZ,IATOM,IS,ISLAT,LSTO,MXLB,NUM,ICOU 14 | C 15 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 16 | C 17 | C ___ Initialize pointers ___ 18 | C 19 | GLL = 0 20 | GUL = 0 21 | LLS = 0 22 | ULS = 0 23 | LLSTO = 0 24 | ULSTO = 0 25 | C 26 | C ___ Initialize counters ___ 27 | C 28 | ISLAT = 0 29 | IATOM = 1 30 | NUM = 0 31 | ICOU = 1 32 | MXLB = 0 33 | C 34 | C ___ Build pointers ___ 35 | C 36 | DO IS=1,NSHL 37 | IF (IS == 1) THEN 38 | GLL(1) = 1 39 | ELSE 40 | GLL(IS) = GUL(IS-1) + 1 41 | END IF 42 | GUL(IS) = GLL(IS) + PSHELL(IS,3) - 1 43 | LSTO = PSHELL(IS,2) 44 | IATOM = PSHELL(IS,1) 45 | MXLB = MAX(MXLB,LSTO) 46 | IF (IATOM == 1) THEN 47 | LLS(1) = 1 48 | ULS(1) = ULS(1) + 1 49 | ELSE 50 | LLS(IATOM) = ULS(IATOM-1) + 1 51 | ULS(IATOM) = IS 52 | END IF 53 | C 54 | DO AX=LSTO,0,-1 55 | DO AY=LSTO-AX,0,-1 56 | AZ = LSTO - AX - AY 57 | ISLAT = ISLAT + 1 58 | IF (ISLAT > NSTO) GOTO 10000 59 | IF (ICOU == IS) THEN 60 | NUM = NUM + 1 61 | ELSE 62 | ICOU = IS 63 | NUM = 1 64 | END IF 65 | END DO 66 | END DO 67 | IF (IS == 1) THEN 68 | LLSTO(1) = 1 69 | ELSE 70 | LLSTO(IS) = ULSTO(IS-1) + 1 71 | END IF 72 | ULSTO(IS) = LLSTO(IS) + NUM - 1 73 | END DO 74 | C 75 | DSHL = ((MXLB + 1)*(MXLB + 2))/2 76 | C 77 | RETURN 78 | C 79 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 80 | C 81 | C ___ Error handling ___ 82 | C 83 | 10000 CONTINUE 84 | WRITE(OUT,"(/,T2,'ERROR FOR ORBITAL POINTER')") 85 | STOP 86 | C 87 | C O________________________________________________________________O 88 | C 89 | END SUBROUTINE GENOP 90 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/genop.f_sindro: -------------------------------------------------------------------------------- 1 | SUBROUTINE GENOP 2 | C 3 | C ******************************************************************* 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'molecule.h' 11 | INCLUDE 'moleculeD.h' 12 | C 13 | INTEGER :: AX,AY,AZ,IATOM,IS,ISLAT,LSTO,MXLB,NUM,ICOU 14 | C 15 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 16 | C 17 | C ___ Initialize pointers ___ 18 | C 19 | GLL = 0 20 | GUL = 0 21 | LLS = 0 22 | ULS = 0 23 | LLSTO = 0 24 | ULSTO = 0 25 | C 26 | C ___ Initialize counters ___ 27 | C 28 | ISLAT = 0 29 | IATOM = 1 30 | NUM = 0 31 | ICOU = 1 32 | MXLB = 0 33 | C 34 | C ___ Build pointers ___ 35 | C 36 | DO IS=1,NSHL 37 | IF (IS == 1) THEN 38 | GLL(1) = 1 39 | ELSE 40 | GLL(IS) = GUL(IS-1) + 1 41 | END IF 42 | GUL(IS) = GLL(IS) + PSHELL(IS,3) - 1 43 | LSTO = PSHELL(IS,2) 44 | IATOM = PSHELL(IS,1) 45 | MXLB = MAX(MXLB,LSTO) 46 | IF (IATOM == 1) THEN 47 | LLS(1) = 1 48 | ULS(1) = ULS(1) + 1 49 | ELSE 50 | LLS(IATOM) = ULS(IATOM-1) + 1 51 | ULS(IATOM) = IS 52 | END IF 53 | C 54 | DO AX=LSTO,0,-1 55 | DO AY=LSTO-AX,0,-1 56 | AZ = LSTO - AX - AY 57 | ISLAT = ISLAT + 1 58 | IF (ISLAT > NSTO) GOTO 10000 59 | IF (ICOU == IS) THEN 60 | NUM = NUM + 1 61 | ELSE 62 | ICOU = IS 63 | NUM = 1 64 | END IF 65 | END DO 66 | END DO 67 | IF (IS == 1) THEN 68 | LLSTO(1) = 1 69 | ELSE 70 | LLSTO(IS) = ULSTO(IS-1) + 1 71 | END IF 72 | ULSTO(IS) = LLSTO(IS) + NUM - 1 73 | END DO 74 | C 75 | DSHL = ((MXLB + 1)*(MXLB + 2))/2 76 | C 77 | RETURN 78 | C 79 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 80 | C 81 | C ___ Error handling ___ 82 | C 83 | 10000 CONTINUE 84 | WRITE(OUT,"(/,T2,'ERROR FOR ORBITAL POINTER')") 85 | STOP 86 | C 87 | C O________________________________________________________________O 88 | C 89 | END SUBROUTINE GENOP 90 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/getdate.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE GETDATE 2 | C 3 | C ***************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'fileio.h' 8 | C 9 | CHARACTER :: DATE*8,TIME*10,ZONE*5 10 | CHARACTER*8, DIMENSION(12) :: MONTH 11 | INTEGER :: I 12 | INTEGER, DIMENSION(8) :: TIMEDATE 13 | C 14 | C ------------------------------------------------------------------ 15 | C 16 | MONTH(1) = 'Jan' 17 | MONTH(2) = 'Feb' 18 | MONTH(3) = 'Mar' 19 | MONTH(4) = 'Apr' 20 | MONTH(5) = 'May' 21 | MONTH(6) = 'Jun' 22 | MONTH(7) = 'Jul' 23 | MONTH(8) = 'Aug' 24 | MONTH(9) = 'Sep' 25 | MONTH(10) = 'Oct' 26 | MONTH(11) = 'Nov' 27 | MONTH(12) = 'Dec' 28 | C 29 | CALL DATE_AND_TIME(DATE,TIME,ZONE,TIMEDATE) 30 | C 31 | WRITE(OUT,1000) TIMEDATE(3),MONTH(TIMEDATE(2)),TIMEDATE(1), 32 | $ TIME(1:2),TIME(3:4),TIME(5:6) 33 | C 34 | C ------------------------------------------------------------------ 35 | C 36 | C *** Format statements *** 37 | C 38 | 1000 FORMAT(/,T2,3("*"),I3,X,A3,I5,X,("-"),X,A2,':',A2,':',A2,X,3("*")) 39 | C 40 | C ------------------------------------------------------------------ 41 | C 42 | END SUBROUTINE GETDATE 43 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/iniocc.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE INIOCC 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'molecule.h' 9 | INCLUDE 'moleculeD.h' 10 | C 11 | INTEGER :: IMO,NOMOUA,NOMOLA,NOMOUB,NOMOLB 12 | C 13 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 14 | C 15 | C ___ Initialize orbital occupation ___ 16 | C 17 | OCCNAF = 0.0 18 | OCCNBF = 0.0 19 | OCCNAS = 0.0 20 | OCCNBS = 0.0 21 | OCCNF = 0.0 22 | C 23 | OCCNUM = 1.0 24 | IF (DIRECTA) THEN 25 | NOMOAF = (NELEC + MULTF - 1)/2 26 | NOMOBF = (NELEC - MULTF + 1)/2 27 | NOMOUA = NOMOAF 28 | NOMOLA = NOMOBF 29 | ELSE 30 | NOMOAF = (NELEC - MULTF + 1)/2 31 | NOMOBF = (NELEC + MULTF - 1)/2 32 | NOMOLA = NOMOAF 33 | NOMOUA = NOMOBF 34 | END IF 35 | IF (DIRECTB) THEN 36 | NOMOAS = (NELEC + MULTS - 1)/2 37 | NOMOBS = (NELEC - MULTS + 1)/2 38 | NOMOUB = NOMOAS 39 | NOMOLB = NOMOBS 40 | ELSE 41 | NOMOAS = (NELEC - MULTS + 1)/2 42 | NOMOBS = (NELEC + MULTS - 1)/2 43 | NOMOLB = NOMOAS 44 | NOMOUB = NOMOBS 45 | END IF 46 | C 47 | CALL MOOCC(OCCNAF,NOMOAF,LFOMOAF,HFOMOAF) 48 | CALL MOOCC(OCCNBF,NOMOBF,LFOMOBF,HFOMOBF) 49 | CALL MOOCC(OCCNAS,NOMOAS,LFOMOAS,HFOMOAS) 50 | CALL MOOCC(OCCNBS,NOMOBS,LFOMOBS,HFOMOBS) 51 | C 52 | DO IMO=1,NOMOLA 53 | OCCNF(IMO) = 2.0 54 | END DO 55 | C 56 | IF (NOMOUA.GT.NOMOLA) THEN 57 | DO IMO=NOMOLA+1,NOMOUA 58 | OCCNF(IMO) = 1.0 59 | END DO 60 | END IF 61 | C 62 | DO IMO=1,NOMOLB 63 | OCCNS(IMO) = 2.0 64 | END DO 65 | C 66 | IF (NOMOUB.GT.NOMOLB) THEN 67 | DO IMO=NOMOLB+1,NOMOUB 68 | OCCNS(IMO) = 1.0 69 | END DO 70 | END IF 71 | C 72 | C O________________________________________________________________O 73 | C 74 | END SUBROUTINE INIOCC 75 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/initialize.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE INITIALIZE 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'math.h' 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | INTEGER :: I 13 | C 14 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 15 | C 16 | GCC = 0.0 17 | C = 0.0 18 | MULTF = 0 19 | MULTS = 0 20 | NAT = 0 21 | NGTF = 0 22 | NSHL = 0 23 | ZATOM = 0.0 24 | NATOM = 0 25 | TRMSC = 0.0 26 | C 27 | PSHELL = 0 28 | NSTO = 0 29 | COP = 0 30 | SOP = 0 31 | C 32 | MS = 1.0 33 | C 34 | BOHR = 1.88972595820018 35 | FINESTRC = 7.297352568E-3 36 | CMM1 = 219474.6 37 | DEBYE = 2.54174780119995 38 | C CMM1 = 219474.625390476 39 | ZTYPE = 'ATOMS' 40 | TOLTIME = 1.0E-14 41 | C 42 | ENER = 0.0 43 | ENERD = 0.0 44 | ENERTWOAU = 0.0 45 | ENERTWO = 0.0 46 | C 47 | C ___ Initialize input keywords ___ 48 | C 49 | TRANS = 1.0 50 | GRAMS = .FALSE. 51 | UKS = .FALSE. 52 | SROKS = .TRUE. 53 | SPHEORB = .TRUE. 54 | ZTYPE = 'ATOM' 55 | SOCTWOM = .TRUE. 56 | LM = 0 57 | READMO = 1 58 | ALTER = .FALSE. 59 | MELEM = 1 60 | NOBIO = .FALSE. 61 | TDTB = .FALSE. 62 | C 63 | C O________________________________________________________________O 64 | C 65 | END SUBROUTINE INITIALIZE 66 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/mathcon.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE MATHCON 2 | C 3 | C ****************************************************************** 4 | C *** Initialization of mathematical constants and functions *** 5 | C ****************************************************************** 6 | C 7 | C List of mathematical constants: 8 | C 9 | C PI: Mathematical constant Pi. 10 | C 11 | C List of mathematical functions: 12 | C 13 | C DFAC: Double factorial function. 14 | C FAC : Factorial function. 15 | C 16 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 17 | C 18 | IMPLICIT NONE 19 | C 20 | INCLUDE 'parameter.h' 21 | INCLUDE 'math.h' 22 | C 23 | INTEGER :: I 24 | C 25 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 26 | C 27 | C ___ Definition of Pi ___ 28 | C 29 | PI = 2.0*ACOS(0.0) 30 | C 31 | C ___ Definition of factorial function ___ 32 | C 33 | FAC(0) = 1.0 34 | C 35 | DO I=1,MAXFAC 36 | FAC(I) = REAL(I)*FAC(I-1) 37 | END DO 38 | C 39 | C ___ Definition of double factorial function ___ 40 | C 41 | DFAC(-1) = 1.0 42 | DFAC(0) = 1.0 43 | DFAC(1) = 1.0 44 | DFAC(2) = 2.0 45 | C 46 | DO I=3,2*MAXFAC+1 47 | DFAC(I) = REAL(I)*DFAC(I-2) 48 | END DO 49 | C 50 | UM = 0.0 51 | DO I=1,3 52 | UM(I,I) = 1.0 53 | END DO 54 | C 55 | C O________________________________________________________________O 56 | C 57 | END SUBROUTINE MATHCON 58 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/molsoc.f: -------------------------------------------------------------------------------- 1 | C O_______________--------------oOOOo--------------________________O 2 | PROGRAM MolSOC 3 | C **************************************************************** 4 | C **************************** **************************** 5 | C -------------------------------------------------------------- 6 | C *** Calculate Spin-Orbit Coupling between preoptimized *** 7 | C *** states *** 8 | C ---------------------------------------------------------------- 9 | C AUTHOR: 10 | C Sandro Giuseppe Chiodo 11 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 12 | C 13 | C ___ Open permanent files ___ 14 | C 15 | CALL FILEIO('OPEN PERMANENT FILES') 16 | C 17 | C ___ Write copyright ___ 18 | C 19 | CALL COPYR 20 | C 21 | C ___ Get date and time ___ 22 | C 23 | CALL GETDATE 24 | C 25 | C ___ Initialization ___ 26 | C 27 | CALL INITIALIZE 28 | C 29 | C ___ Set orbital pointers ___ 30 | C 31 | CALL POINTER 32 | C 33 | C ___ Read input data ___ 34 | C 35 | CALL READINP 36 | C 37 | C ___ Write input header ___ 38 | C 39 | CALL WRTHEAD 40 | C 41 | C ___ Open MO permanent files ___ 42 | C 43 | CALL FILEIO('OPEN MOS PERMANENT FILES') 44 | C 45 | C ___ Read Gaussian basis set ___ 46 | C 47 | CALL READBAS 48 | C 49 | C ___ Generate spherical orbital pointer ___ 50 | C 51 | CALL SHELLOP 52 | C 53 | C ___ Calculate number of electrons ___ 54 | C 55 | CALL FINNEL 56 | C 57 | C ___ Check if charge and multiplicities are consistent ___ 58 | C 59 | C CALL CHKMULT 60 | C 61 | C ___ Calculate the square of the distance matrix ___ 62 | C 63 | CALL SDIST 64 | C 65 | C ___ Initialization of mathematical constants ___ 66 | C 67 | CALL MATHCON 68 | CALL TRANSC 69 | CALL CRFTABLE 70 | C 71 | C ___ Generate orbital pointer ___ 72 | C 73 | CALL GENOP 74 | C 75 | C ___ Write outuput informations ___ 76 | C 77 | CALL WRITOUT 78 | C 79 | C ___ Normalize Gaussian-type functions ___ 80 | C 81 | CALL NORGTF 82 | C 83 | C ___ Normalize slater type orbitals ___ 84 | C 85 | CALL NORSTO 86 | C 87 | C ___ Generate orbital symmetry label ___ 88 | C 89 | CALL ORBSYM 90 | C 91 | C ___ Generate moment symmetry label ___ 92 | C 93 | CALL MOMESYM 94 | C 95 | C ___ Calculate one-electron SOC integrals ___ 96 | C 97 | CALL SOCONE 98 | C 99 | C ___ Calculate overlap integrals ___ 100 | C 101 | CALL BLDOVER 102 | C 103 | C ___ Calculate moments integrals ___ 104 | C 105 | CALL MOMENT 106 | C 107 | C ___ Calculate spin-orbit coupling ___ 108 | C 109 | C CALL BLDSOC 110 | C 111 | C ___ Get date and time ___ 112 | C 113 | CALL GETDATE 114 | C 115 | C ___ Close temporary files ___ 116 | C 117 | CALL FILEIO('CLOSE ALL FILES') 118 | C 119 | C O_______________--------------oOOOo--------------________________O 120 | C *** End of PROGRAM MolSOC *** 121 | C ****************************************************************** 122 | C 123 | END PROGRAM MolSOC 124 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/momesym.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE MOMESYM 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'molecule.h' 9 | C 10 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 11 | C 12 | MOMSYM(2) = 'X ' 13 | MOMSYM(3) = 'Y ' 14 | MOMSYM(4) = 'Z ' 15 | MOMSYM(5) = 'XX ' 16 | MOMSYM(6) = 'XY ' 17 | MOMSYM(7) = 'XZ ' 18 | MOMSYM(8) = 'YY ' 19 | MOMSYM(9) = 'YZ ' 20 | MOMSYM(10) = 'ZZ ' 21 | MOMSYM(11) = 'XXX' 22 | MOMSYM(12) = 'XXY' 23 | MOMSYM(13) = 'XXZ' 24 | MOMSYM(14) = 'XYY' 25 | MOMSYM(15) = 'XYZ' 26 | MOMSYM(16) = 'XZZ' 27 | MOMSYM(17) = 'YYY' 28 | MOMSYM(18) = 'YYZ' 29 | MOMSYM(19) = 'YZZ' 30 | MOMSYM(20) = 'ZZZ' 31 | C 32 | C O________________________________________________________________O 33 | C 34 | END SUBROUTINE MOMESYM 35 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/moocc.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE MOOCC(OCCN,NOMO,LFOMO,HFOMO) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | C 13 | INTEGER :: HFOMO,LFOMO,NOMO 14 | INTEGER :: IMO 15 | C 16 | REAL, DIMENSION(MXSTO) :: OCCN 17 | C 18 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 19 | C 20 | C *** Set MO occupation *** 21 | C 22 | DO IMO=1,NOMO 23 | OCCN(IMO) = OCCNUM 24 | END DO 25 | C 26 | DO IMO=NOMO+1,NSTO 27 | OCCN(IMO) = 0.0 28 | END DO 29 | C 30 | LFOMO = NOMO + 1 31 | HFOMO = NOMO 32 | C 33 | C 34 | C O________________________________________________________________O 35 | C 36 | END SUBROUTINE MOOCC 37 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/mos.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE MOS(C1,C2,SMO,DMAT) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | C 10 | INTEGER :: DMAT,N 11 | C 12 | REAL, DIMENSION(DMAT,DMAT) :: C1,C2,SMO 13 | C 14 | INTEGER :: ALLOCATION 15 | REAL, DIMENSION(:,:), ALLOCATABLE :: CMAT 16 | C 17 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 18 | C 19 | C ___ Allocate local fields ___ 20 | C 21 | ALLOCATE(CMAT(DMAT,DMAT),STAT=ALLOCATION) 22 | IF (ALLOCATION /= 0) THEN 23 | WRITE(OUT,*) 'MOS: ALLOCATION FAILED' 24 | STOP 25 | END IF 26 | C 27 | N = DMAT 28 | C 29 | C ___ Read from tape overlap integrals ___ 30 | C 31 | SMO = 0.0 32 | CALL IOSCR(SMO,DMAT**2,'READ','ZERO',4) 33 | C 34 | C ___ Calculate the two state MO overlap matrix ___ 35 | C 36 | CMAT = 0.0 37 | CALL DGEMM('N','N',N,N,N,1.0,SMO,DMAT,C2,DMAT,0.0,CMAT,DMAT) 38 | C 39 | SMO = 0.0 40 | CALL DGEMM('T','N',N,N,N,1.0,C1,DMAT,CMAT,DMAT,0.0,SMO,DMAT) 41 | C 42 | C ___ Deallocate local fields ___ 43 | C 44 | DEALLOCATE(CMAT,STAT=ALLOCATION) 45 | IF (ALLOCATION /= 0) THEN 46 | WRITE(OUT,*) 'MOS: DEALLOCATION FAILED' 47 | STOP 48 | END IF 49 | C 50 | C O________________________________________________________________O 51 | C 52 | END SUBROUTINE MOS 53 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/motrsc.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE MOTRSC(SPHER,CART,DMAT) 2 | C 3 | C ****************************************************************** 4 | C *** MO transformation from sphericals to cartesians *** 5 | C ****************************************************************** 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | C 11 | INCLUDE 'math.h' 12 | INCLUDE 'molecule.h' 13 | INCLUDE 'moleculeD.h' 14 | C 15 | INTEGER :: DMAT 16 | INTEGER :: I,IMO,J,ISHELL,IS,ISLAT,L 17 | C 18 | REAL, DIMENSION(DMAT,DMAT) :: CART,SPHER 19 | C 20 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 21 | C 22 | CART = 0.0 23 | DO IMO=1,NSTO 24 | DO ISHELL=1,NSHL 25 | L = PSHELL(ISHELL,2) 26 | DO ISLAT=LLSTO(ISHELL),ULSTO(ISHELL) 27 | I = ISLAT - LLSTO(ISHELL) + 1 28 | DO IS=SLL(ISHELL),SUL(ISHELL) 29 | J = IS - SLL(ISHELL) + 1 30 | CART(ISLAT,IMO) = CART(ISLAT,IMO) + 31 | $ TRMSC(J,I,L)*SPHER(IS,IMO) 32 | END DO 33 | END DO 34 | END DO 35 | END DO 36 | C 37 | C O________________________________________________________________O 38 | C 39 | END SUBROUTINE MOTRSC 40 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/muldens.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE MULDENS(COE,DMAT,LFOMO,OCCN,OPTION1) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | CHARACTER :: OPTION1*(*),STRING*34 13 | C 14 | INTEGER :: IMAT,JMAT,DMAT,IMO,LFOMO 15 | C 16 | REAL MUL,NELECTR,MC 17 | REAL, DIMENSION(DMAT,DMAT) :: COE 18 | REAL, DIMENSION(MXSTO) :: OCCN 19 | C 20 | INTEGER :: ALLOCATION 21 | REAL, DIMENSION(:,:), ALLOCATABLE :: S,P 22 | C 23 | CHARACTER :: UCC*7 24 | REAL :: TRAATB 25 | C 26 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 27 | C 28 | IF (OPTION1 == 'FIRST') THEN 29 | STRING = ' BEFORE SVD (BIORTHOGONALIZATION) ' 30 | ELSE IF (OPTION1 == 'SECOND') THEN 31 | STRING = ' AFTER SVD (BIORTHOGONALIZATION) ' 32 | END IF 33 | C 34 | C *** Allocate local fields *** 35 | C 36 | ALLOCATE(S(DMAT,DMAT),P(DMAT,DMAT),STAT=ALLOCATION) 37 | IF (ALLOCATION /= 0) THEN 38 | WRITE(OUT,*) 'MULDENS: ALLOCATION FAILED' 39 | STOP 40 | END IF 41 | C 42 | C *** Read Overlap matrix from tape *** 43 | C 44 | CALL IOSCR(S,DMAT**2,'READ','ZERO',4) 45 | C 46 | IF (GRAMS) THEN 47 | CALL ORTHO(S,COE,DMAT,NSPH) 48 | IF (OPTION1 == 'FIRST') THEN 49 | WRITE(OUT,"(/,T2,'GRAM-SCHMIDT ORTHOGONALIZATION')") 50 | END IF 51 | END IF 52 | C 53 | C *** Calculate spin-density matrix *** 54 | C 55 | P = 0.0 56 | DO IMAT=1,DMAT 57 | DO JMAT=IMAT,DMAT 58 | DO IMO=1,LFOMO 59 | P(IMAT,JMAT) = P(IMAT,JMAT) + 2.0*OCCN(IMO)* 60 | $ COE(IMAT,IMO)*COE(JMAT,IMO) 61 | END DO 62 | END DO 63 | END DO 64 | C 65 | DO IMAT=1,DMAT 66 | P(IMAT,IMAT) = 0.5*P(IMAT,IMAT) 67 | END DO 68 | C 69 | C *** Calculate the number of sigma electrons *** 70 | C 71 | NELECTR = TRAATB(P,S,DMAT,DMAT) 72 | C 73 | C *** Write the number of spin electrons *** 74 | C 75 | IF ((OPTION1 == 'FIRST').OR.(OPTION1 == 'SECOND')) THEN 76 | WRITE(OUT,"(//,T2,3('*'),A34,3('*'),/)") STRING 77 | END IF 78 | C 79 | WRITE(OUT,"(T2,'NUMBER OF ELECTRONS =', F20.9)") NELECTR 80 | C 81 | C *** Deallocate local fields *** 82 | C 83 | DEALLOCATE(S,P,STAT=ALLOCATION) 84 | IF (ALLOCATION /= 0) THEN 85 | WRITE(OUT,*) 'MULDENS: DEALLOCATION FAILED' 86 | STOP 87 | END IF 88 | C 89 | C O________________________________________________________________O 90 | C 91 | END SUBROUTINE MULDENS 92 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/norgtf.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE NORGTF 2 | C 3 | C ******************************************************************* 4 | C *** Normalization of the Gaussian-type functions *** 5 | C ******************************************************************* 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | INCLUDE 'molecule.h' 11 | INCLUDE 'moleculeD.h' 12 | INCLUDE 'math.h' 13 | C 14 | INTEGER :: L,I,J 15 | REAL :: N 16 | C 17 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 18 | C 19 | IF (TDTB) THEN 20 | GCC = GCC 21 | ELSE 22 | DO I=1,NSHL 23 | L = PSHELL(I,2) 24 | N = 2.0**L*(2.0/PI)**0.75 25 | DO J=GLL(I),GUL(I) 26 | GCC(J) = N*(ZET(J)**(2*L+3))**0.25*GCC(J) 27 | END DO 28 | END DO 29 | END IF 30 | C 31 | C O________________________________________________________________O 32 | C 33 | END SUBROUTINE NORGTF 34 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/norsto.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE NORSTO 2 | C 3 | C ****************************************************************** 4 | C *** Normalization of Slater type orbitals. *** 5 | C ****************************************************************** 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | INCLUDE 'math.h' 11 | INCLUDE 'molecule.h' 12 | INCLUDE 'moleculeD.h' 13 | C 14 | INTEGER :: AX,AY,AZ,IATOM,IG,IS,ISLAT,JG,L 15 | REAL :: FACT,NOR 16 | C 17 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 18 | C 19 | NCSTO = 0.0 20 | ISLAT = 0 21 | C 22 | IF (TDTB) THEN 23 | NCSTO = 1.0 24 | ELSE 25 | DO IATOM=1,NATOM 26 | DO IS=LLS(IATOM),ULS(IATOM) 27 | L = PSHELL(IS,2) 28 | FACT = PI**1.5/2**L 29 | NOR = 0.0 30 | DO IG=GLL(IS),GUL(IS) 31 | DO JG=GLL(IS),GUL(IS) 32 | NOR = NOR + GCC(IG)*GCC(JG)*FACT/ 33 | $ (ZET(IG) + ZET(JG))**(L+1.5) 34 | END DO 35 | END DO 36 | C 37 | DO AX=L,0,-1 38 | DO AY=L-AX,0,-1 39 | AZ = L - AX - AY 40 | ISLAT = ISLAT + 1 41 | NCSTO(ISLAT) = 1.0/SQRT(NOR*DFAC(2*AX-1)*DFAC(2*AY-1)* 42 | $ DFAC(2*AZ-1)) 43 | END DO 44 | END DO 45 | C 46 | END DO 47 | END DO 48 | END IF 49 | C 50 | C O________________________________________________________________O 51 | C 52 | END SUBROUTINE NORSTO 53 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/ortho.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE ORTHO(S,CA,DMAT,DIM) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INTEGER :: DMAT,DIM 8 | INTEGER :: IMAT,JMAT,KMAT,LMAT 9 | C 10 | REAL :: PROJEC,SUM 11 | REAL, DIMENSION(DMAT,DMAT) :: S,CA 12 | C 13 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 14 | C 15 | C ___ Cram-Schmidt Orthogonalization ___ 16 | C 17 | DO IMAT=1,DIM 18 | C 19 | DO JMAT=1,IMAT-1 20 | PROJEC = 0.0 21 | DO KMAT=1,DMAT 22 | DO LMAT=1,DMAT 23 | PROJEC = PROJEC + CA(LMAT,JMAT)*CA(KMAT,IMAT)*S(LMAT,KMAT) 24 | END DO 25 | END DO 26 | DO KMAT=1,DMAT 27 | CA(KMAT,IMAT) = CA(KMAT,IMAT) - PROJEC*CA(KMAT,JMAT) 28 | END DO 29 | END DO 30 | C 31 | SUM = 0.0 32 | DO JMAT=1,DMAT 33 | DO KMAT=1,DMAT 34 | SUM = SUM + CA(JMAT,IMAT)*CA(KMAT,IMAT)*S(KMAT,JMAT) 35 | END DO 36 | END DO 37 | SUM = 1.0/SQRT(SUM) 38 | DO KMAT=1,DMAT 39 | CA(KMAT,IMAT) = CA(KMAT,IMAT)*SUM 40 | END DO 41 | C 42 | END DO 43 | C 44 | C O_______________________________________________________________O 45 | C 46 | END SUBROUTINE ORTHO 47 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/ortsvdlap.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE ORTSVDLAP(CA,CB,SOMO,HOMOA,HOMOB,DMAT) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | C 10 | INTEGER :: DMAT,HOMOA,HOMOB,DIMS 11 | INTEGER :: IMOA,IMOB,IMAT,JMAT,KMAT 12 | INTEGER :: LWORK,INFO 13 | C 14 | REAL :: DET 15 | REAL, DIMENSION(DMAT,DMAT) :: CA,CB,SOMO 16 | C 17 | INTEGER :: ALLOCATION 18 | REAL, DIMENSION(:), ALLOCATABLE :: S,WORK 19 | REAL,DIMENSION(:,:), ALLOCATABLE :: U,V,A 20 | C 21 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 22 | C 23 | LWORK = 5*MAX(3*MIN(HOMOA,HOMOB) + 24 | $ MAX(HOMOA,HOMOB),5*MIN(HOMOA,HOMOB)) 25 | C 26 | DIMS = MIN(HOMOA,HOMOB) + 1 27 | C 28 | C ___ Allocate local fields ___ 29 | C 30 | ALLOCATE(U(DMAT,DMAT),V(DMAT,DMAT),A(DMAT,DMAT), 31 | $ S(DIMS),WORK(LWORK),STAT=ALLOCATION) 32 | IF (ALLOCATION /= 0) THEN 33 | WRITE(OUT,*) 'ORTSVDLAP: ALLOCATION FAILED' 34 | STOP 35 | END IF 36 | C 37 | C ___ SVD matrices initialization ___ 38 | C 39 | U = 0.0 40 | V = 0.0 41 | A = 0.0 42 | S = 0.0 43 | WORK = 0.0 44 | C 45 | DO IMOA=1,DMAT 46 | DO IMOB=1,DMAT 47 | A(IMOA,IMOB) = SOMO(IMOA,IMOB) 48 | END DO 49 | END DO 50 | C 51 | C ___ Do singular value decomposition (Lapack) ___ 52 | C 53 | CALL DGESVD('A','A',HOMOA,HOMOB,A,DMAT,S,U,DMAT,V,DMAT, 54 | $ WORK,LWORK,INFO) 55 | C 56 | IF (INFO.EQ.0) THEN 57 | WRITE(OUT,"(/,T2,'ORTSVDLAP: DGESVD SUCCESSFULL EXIT:',I5)") 58 | $ INFO 59 | ELSE IF (INFO.LT.0) THEN 60 | WRITE(OUT,"(/,T2,'ORTSVDLAP: IN DGESVD THE ',I5, 61 | $ '-th ARGUMENT HAS AN ILLEGAL VALUE')") INFO 62 | ELSE IF (INFO.GT.0) THEN 63 | WRITE(OUT,"(/,T2,'ORTSVDLAP:',I5,'DGESVD DID NOT CONVERGE')") 64 | $ INFO 65 | END IF 66 | C 67 | C ___ Update MO alpha coefficients ___ 68 | C 69 | A = 0.0 70 | DO IMAT=1,DMAT 71 | DO JMAT=1,HOMOA 72 | DO KMAT=1,HOMOA 73 | A(IMAT,JMAT) = A(IMAT,JMAT) + CA(IMAT,KMAT)*U(KMAT,JMAT) 74 | END DO 75 | END DO 76 | END DO 77 | C 78 | DO IMAT=1,DMAT 79 | DO JMAT=1,HOMOA 80 | CA(IMAT,JMAT) = A(IMAT,JMAT) 81 | END DO 82 | END DO 83 | C 84 | C ___ Update MO beta coefficients ___ 85 | C 86 | A = 0.0 87 | DO IMAT=1,DMAT 88 | DO JMAT=1,HOMOB 89 | DO KMAT=1,HOMOB 90 | A(IMAT,JMAT) = A(IMAT,JMAT) + CB(IMAT,KMAT)*V(JMAT,KMAT) 91 | END DO 92 | END DO 93 | END DO 94 | C 95 | DO IMAT=1,DMAT 96 | DO JMAT=1,HOMOB 97 | CB(IMAT,JMAT) = A(IMAT,JMAT) 98 | END DO 99 | END DO 100 | C 101 | C ___ Deallocate local fields ___ 102 | C 103 | DEALLOCATE(U,V,A,S,WORK,STAT=ALLOCATION) 104 | IF (ALLOCATION /= 0) THEN 105 | WRITE(OUT,*) 'ORTSVDLAP: DEALLOCATION FAILED' 106 | STOP 107 | END IF 108 | C 109 | C O_______________________________________________________________O 110 | C 111 | END SUBROUTINE ORTSVDLAP 112 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/overabu.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE OVERABU(DMAT,NOAF,NOBF,NOAS,NOBS) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'molecule.h' 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'math.h' 11 | C 12 | REAL, PARAMETER :: OVERTOL = 1.0E-10 13 | C 14 | INTEGER :: DMAT,NOAF,NOBF,NOAS,NOBS,IMAT,JMAT,NOLIM 15 | C 16 | INTEGER :: ALLOCATION 17 | REAL, DIMENSION(:,:), ALLOCATABLE :: SMOA,SMOB 18 | C 19 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 20 | C 21 | C ___ Allocate local fields ___ 22 | C 23 | ALLOCATE(SMOA(DMAT,DMAT),SMOB(DMAT,DMAT),STAT=ALLOCATION) 24 | IF (ALLOCATION /= 0) THEN 25 | WRITE(OUT,*) 'OVERABU: ALLOCATION FAILED' 26 | STOP 27 | END IF 28 | C 29 | C ___ Read from tape two-state MO overlap integrals ___ 30 | C 31 | CALL IOSCR(SMOA,DMAT**2,'READ','ZERO',5) 32 | CALL IOSCR(SMOB,DMAT**2,'READ','ZERO',6) 33 | C 34 | C ___ Write two-state alpha MO overlap integrals ___ 35 | C 36 | WRITE(IOAL,"(/,'TWO-STATE MO OVERLAP INTEGRALS',/)") 37 | C 38 | DO IMAT=1,NOAF 39 | DO JMAT=1,NOAS 40 | WRITE(IOAL,1000) IMAT,JMAT,SMOA(IMAT,JMAT) 41 | IF (IMAT /= JMAT) THEN 42 | IF (SMOA(IMAT,JMAT) > OVERTOL) THEN 43 | WRITE(IOAL,"('OFF DIAGONAL ELEMENT >',F20.9)") OVERTOL 44 | END IF 45 | END IF 46 | END DO 47 | END DO 48 | C 49 | C ___ Write alpha diagonal elements ___ 50 | C 51 | WRITE(IOAL,"(/,'DIAGONAL ELEMENTS',/)") 52 | C 53 | NOLIM = NOAF 54 | IF (NOAS > NOAF) NOLIM = NOAS 55 | DO IMAT=1,NOLIM 56 | WRITE(IOAL,1000) IMAT,IMAT,SMOA(IMAT,IMAT) 57 | END DO 58 | C 59 | C ___ Write two-state beta MO overlap integrals ___ 60 | C 61 | WRITE(IOBE,"(/,'TWO-STATE MO OVERLAP INTEGRALS',/)") 62 | C 63 | DO IMAT=1,NOBF 64 | DO JMAT=1,NOBS 65 | WRITE(IOBE,1000) IMAT,JMAT,SMOB(IMAT,JMAT) 66 | IF (IMAT /= JMAT) THEN 67 | IF (SMOB(IMAT,JMAT) > OVERTOL) THEN 68 | WRITE(IOAL,"('OFF DIAGONAL ELEMENT >',F20.9)") OVERTOL 69 | END IF 70 | END IF 71 | END DO 72 | END DO 73 | C 74 | C ___ Write beta diagonal elements ___ 75 | C 76 | WRITE(IOBE,"(/,'DIAGONAL ELEMENTS',/)") 77 | C 78 | NOLIM = NOBF 79 | IF (NOBS.GT.NOBF) NOLIM = NOBS 80 | DO IMAT=1,NOLIM 81 | WRITE(IOBE,1000) IMAT,IMAT,SMOB(IMAT,IMAT) 82 | END DO 83 | C 84 | DEALLOCATE(SMOA,SMOB,STAT=ALLOCATION) 85 | IF (ALLOCATION /= 0) THEN 86 | WRITE(OUT,*) 'OVERABU: DEALLOCATION FAILED' 87 | STOP 88 | END IF 89 | C 90 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 91 | C 92 | C ___ Format statements ___ 93 | C 94 | 1000 FORMAT(I7,4X,I7,10X,F20.9) 95 | C 96 | C O_______________________________________________________________O 97 | C 98 | END SUBROUTINE OVERABU 99 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/overfs.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE OVERFS(C1,C2,HOMO1,HOMO2,DMAT,NUM) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'moleculeD.h' 11 | INCLUDE 'molecule.h' 12 | C 13 | INTEGER :: DMAT,NUM,HOMO1,HOMO2 14 | C 15 | REAL :: CPUTOLD 16 | REAL, DIMENSION(DMAT,DMAT) :: C1,C2 17 | C 18 | INTEGER :: ALLOCATION 19 | REAL, DIMENSION(:,:), ALLOCATABLE :: SMO 20 | C 21 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 22 | C 23 | C ___ Allocate local fields ___ 24 | C 25 | ALLOCATE(SMO(DMAT,DMAT),STAT=ALLOCATION) 26 | IF (ALLOCATION /= 0) THEN 27 | WRITE(OUT,*) 'OVERFS: ALLOCATION FAILED' 28 | STOP 29 | END IF 30 | C 31 | IF (NOBIO) GOTO 100 32 | C 33 | C ___ Calculate the two state MO overlap matrix ___ 34 | C 35 | CALL MOS(C1,C2,SMO,DMAT) 36 | C 37 | C ___ Get CPU time ___ 38 | C 39 | CALL CPUTIME 40 | CPUTOLD = CPUT 41 | C 42 | C ___ SVD ___ 43 | C 44 | IF (HOMO1.LT.HOMO2) THEN 45 | SMO = TRANSPOSE(SMO) 46 | CALL ORTSVDLAP(C2,C1,SMO,HOMO2,HOMO1,DMAT) 47 | ELSE 48 | CALL ORTSVDLAP(C1,C2,SMO,HOMO1,HOMO2,DMAT) 49 | END IF 50 | C 51 | C ___ Get CPU time ___ 52 | C 53 | CALL CPUTIME 54 | WRITE(OUT,1000) CPUT - CPUTOLD 55 | C 56 | 100 CONTINUE 57 | C 58 | C ___ Calculate MO overlap integrals ___ 59 | C 60 | CALL MOS(C1,C2,SMO,DMAT) 61 | C 62 | C CALL CHKSGMO(SMO,HOMO1,HOMO2,DMAT) 63 | C 64 | C ___ Write on tape MO overlap integrals ___ 65 | C 66 | CALL IOSCR(SMO,DMAT**2,'WRITE','ZERO',NUM) 67 | C 68 | C ___ Deallocate local fields ___ 69 | C 70 | DEALLOCATE(SMO,STAT=ALLOCATION) 71 | IF (ALLOCATION.GT.0) THEN 72 | WRITE(OUT,*) 'OVERFS: DEALLOCATION FAILED' 73 | STOP 74 | END IF 75 | C 76 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 77 | C 78 | C ___ Format statements ___ 79 | C 80 | 1000 FORMAT(/,T2,'BIORTHOGONALIZATION PERFORMED IN',F12.6,' SEC.') 81 | C 82 | C O________________________________________________________________O 83 | C 84 | END SUBROUTINE OVERFS 85 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/overlap.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE OVERLAP(S,DSTO) 2 | C 3 | C ****************************************************************** 4 | C *** Calculate the OVERLAP matrix *** 5 | C ****************************************************************** 6 | C 7 | C Lit.: S.Obara, A.Saika, J.Chem.Phys. 84, 3963 (1986) 8 | C 9 | C Creation (16.01.05, SC) 10 | C 11 | C List of local dimensions: 12 | C 13 | C DSPP: Dimension of scaling parameters. 14 | C 15 | C List of local variables: 16 | C 17 | C L{A/B} : Orbital L quantum number. 18 | C 19 | C List of local dynamical fields: 20 | C 21 | C BLOCKS: Diatomic integral shell block. 22 | C 23 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 24 | C 25 | IMPLICIT NONE 26 | C 27 | INCLUDE 'parameter.h' 28 | C 29 | INCLUDE 'fileio.h' 30 | INCLUDE 'molecule.h' 31 | INCLUDE 'moleculeD.h' 32 | C 33 | INTEGER :: DSTO 34 | INTEGER :: IATOM,ISHL,JATOM,JSHL,LA,LB,ISTO,JSTO 35 | C 36 | REAL, DIMENSION(DSTO,DSTO) :: S 37 | C 38 | INTEGER :: ALLOCATION 39 | REAL, DIMENSION(:,:), ALLOCATABLE :: BLOCKS 40 | C 41 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 42 | C 43 | C ___ Allocate local fields ___ 44 | C 45 | ALLOCATE(BLOCKS(DSHL,DSHL),STAT=ALLOCATION) 46 | IF (ALLOCATION /= 0) THEN 47 | WRITE(OUT,*) 'OVERLAP: ALLOCATION FAILED' 48 | STOP 49 | END IF 50 | C 51 | C ___ Initialize overlap matrix ___ 52 | C 53 | S = 0.0 54 | C 55 | C ___ Calculate the overlap matrix ___ 56 | C 57 | DO IATOM=1,NATOM 58 | DO JATOM=IATOM,NATOM 59 | CALL ATOMDIS(IATOM,JATOM,RAB,RSQAB) 60 | DO ISHL=LLS(IATOM),ULS(IATOM) 61 | DO JSHL=MAX(ISHL,LLS(JATOM)),ULS(JATOM) 62 | LA = PSHELL(ISHL,2) 63 | LB = PSHELL(JSHL,2) 64 | C print *, "LA,LB", LA, LB 65 | CALL RROVINT(LA,LB,ISHL,JSHL,BLOCKS) 66 | CALL BLDIMAT(ISHL,JSHL,NCSTO,S,BLOCKS,DSTO) 67 | END DO 68 | END DO 69 | END DO 70 | END DO 71 | C 72 | C ___ Symmetrize overlap matrix ___ 73 | C 74 | DO ISTO=1,NSTO-1 75 | DO JSTO=ISTO+1,NSTO 76 | S(JSTO,ISTO) = S(ISTO,JSTO) 77 | END DO 78 | END DO 79 | C 80 | C ___ Deallocate local fields ___ 81 | C 82 | DEALLOCATE(BLOCKS,STAT=ALLOCATION) 83 | IF (ALLOCATION /= 0) THEN 84 | WRITE(OUT,*) 'OVERLAP: DEALLOCATION FAILED' 85 | STOP 86 | END IF 87 | C 88 | C O________________________________________________________________O 89 | C 90 | END SUBROUTINE OVERLAP 91 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/pointer.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE POINTER 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'moleculeD.h' 10 | C 11 | INTEGER :: AX,AY,AZ,I,IC,ICC 12 | C 13 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 14 | C 15 | ICC = 0 16 | DO I=0,MXL 17 | IC = 0 18 | DO AX=I,0,-1 19 | DO AY=I-AX,0,-1 20 | AZ = I - AX - AY 21 | IC = IC + 1 22 | ICC = ICC + 1 23 | COP(AX,AY,AZ) = ICC 24 | SOP(AX,AY,AZ) = IC 25 | C print *, "ICC,IC", ICC,IC, AX,AY,AZ 26 | END DO 27 | END DO 28 | END DO 29 | C COP(2,0,0) = 5 30 | C COP(0,2,0) = 6 31 | C COP(0,0,2) = 7 32 | C COP(1,1,0) = 8 33 | C COP(1,0,1) = 9 34 | C COP(0,1,1) = 10 35 | C SOP(2,0,0) = 1 36 | C SOP(0,2,0) = 2 37 | C SOP(0,0,2) = 3 38 | C SOP(1,1,0) = 4 39 | C SOP(1,0,1) = 5 40 | C SOP(0,1,1) = 6 41 | C 42 | C O________________________________________________________________O 43 | C 44 | END SUBROUTINE POINTER 45 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/readbas.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE READBAS 2 | C 3 | C ****************************************************************** 4 | C *** Read basis set *** 5 | C ****************************************************************** 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | INCLUDE 'fileio.h' 11 | INCLUDE 'molecule.h' 12 | INCLUDE 'moleculeD.h' 13 | C 14 | CHARACTER :: ELEM*2,LINE*80,ORS*1 15 | INTEGER :: IATOM,ILINE,IAT 16 | REAL :: SCALZET 17 | C 18 | INTEGER ALLOCATION 19 | INTEGER, DIMENSION(:), ALLOCATABLE :: ILIN,INAT 20 | C 21 | CHARACTER :: UCC*7 22 | C 23 | LOGICAL :: SUCCESS 24 | C 25 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 26 | C 27 | C ___ Allocate local fields ___ 28 | C 29 | ALLOCATE(ILIN(NATOM),INAT(NATOM),STAT=ALLOCATION) 30 | IF (ALLOCATION /= 0) THEN 31 | WRITE(OUT,"(/,T2,'READBAS: ALLOCATION FAILED')") 32 | STOP 33 | END IF 34 | C 35 | C ___ Find atomic basis set line ___ 36 | C 37 | DO IATOM=1,NATOM 38 | C 39 | ILINE = 0 40 | ILIN(IATOM) = 0 41 | C 42 | 50 CONTINUE 43 | ILINE = ILINE + 1 44 | READ(BASIS,"(A80)",ERR=9999) LINE 45 | IF (LINE(1:1) == '#') GOTO 50 46 | CALL FINELE(LINE,SUCCESS,ELEMENT(IATOM),INAT,IATOM,ILINE) 47 | IF (SUCCESS) ILIN(IATOM) = ILINE 48 | CALL FINSTR(LINE,SUCCESS,'END') 49 | IF (SUCCESS) THEN 50 | IF (ILIN(IATOM) == 0) THEN 51 | WRITE(OUT,1000) UCC(ELEMENT(IATOM)) 52 | STOP 53 | END IF 54 | END IF 55 | IF (ILIN(IATOM) == 0) GOTO 50 56 | C 57 | REWIND(BASIS) 58 | C 59 | END DO 60 | C 61 | C ___ Read basis set ___ 62 | C 63 | DO IATOM=1,NAT 64 | C 65 | ILINE = 0 66 | C 67 | 100 CONTINUE 68 | ILINE = ILINE + 1 69 | READ(BASIS,"(A80)",ERR=9999) LINE 70 | IF (ILIN(IATOM) /= ILINE) GOTO 100 71 | C 72 | C ___ Loop over the shells ___ 73 | C 74 | 300 CONTINUE 75 | C 76 | C ___ Read shell pointers and GTF ___ 77 | C 78 | CALL READSHGF(IATOM,ILINE) 79 | C 80 | ILINE = ILINE + 1 81 | READ(BASIS,"(A80)",ERR=9999) LINE 82 | CALL FINSTR(LINE,SUCCESS,'***') 83 | IF (SUCCESS) GOTO 200 84 | CALL FINSTR(LINE,SUCCESS,'END') 85 | IF (SUCCESS) GOTO 200 86 | BACKSPACE(BASIS) 87 | ILINE = ILINE - 1 88 | GOTO 300 89 | C 90 | 200 CONTINUE 91 | C 92 | REWIND(BASIS) 93 | C 94 | END DO 95 | C 96 | C ___ Deallocate local fields ___ 97 | C 98 | DEALLOCATE(ILIN,INAT,STAT=ALLOCATION) 99 | IF (ALLOCATION /= 0) THEN 100 | WRITE(OUT,"(/,T2,'READBAS: DEALLOCATION FAILED')") 101 | STOP 102 | END IF 103 | C 104 | RETURN 105 | C 106 | 9999 CONTINUE 107 | WRITE(OUT,"('ERROR READING BASIS SET INPUT LINE',I5)") ILINE 108 | STOP 109 | C 110 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 111 | C 112 | C ___ Format statements ___ 113 | C 114 | 1000 FORMAT(/,T2,'READBAS: CANNOT FIND BASIS SET FOR THE ELEMENT ',A2) 115 | C 116 | C O________________________________________________________________O 117 | C 118 | END SUBROUTINE READBAS 119 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/readmos.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE READMOS(MATRIX,OCCN,OPTION1,OPTION2,OPTION3,DENS) 2 | C 3 | C ******************************************************************* 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'molecule.h' 11 | INCLUDE 'moleculeD.h' 12 | C 13 | CHARACTER*(*) :: OPTION1,OPTION2,OPTION3 14 | C 15 | INTEGER :: DENS 16 | C 17 | REAL, DIMENSION(MXSTO) :: OCCN 18 | REAL, DIMENSION(NSTO,NSTO) :: MATRIX 19 | C 20 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 21 | C 22 | C ___ Load MOs from Gaussian formatted files ___ 23 | C 24 | IF (READMO == 1) THEN 25 | CALL GAUSSIAN(MATRIX,OCCN,OPTION1,OPTION2,OPTION3,DENS) 26 | ELSE IF (READMO == 2) THEN 27 | CALL DEMON(MATRIX,OCCN,OPTION1,OPTION2,DENS) 28 | ELSE IF (READMO == 3) THEN 29 | CALL TURBOMOLE(MATRIX,OCCN,OPTION1,OPTION2,OPTION3,DENS) 30 | C ELSE IF (READMO == 4) THEN 31 | C CALL DALTON(MATRIX,OCCN,OPTION1,OPTION2,OPTION3,DENS) 32 | C ELSE IF (READMO == 5) THEN 33 | C CALL GAMESS(MATRIX,OCCN,OPTION1,OPTION2,'CARTESIAN',DENS) 34 | ELSE 35 | WRITE(OUT,"(/,T2,'UNKNOWN MOs OUTPUT FILES')") 36 | STOP 37 | END IF 38 | C 39 | C O________________________________________________________________O 40 | C 41 | END SUBROUTINE READMOS 42 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/rr21.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE RR21(BLOCKS,RRINT,RRERI,IL,LA,LB,DPA,DPB,DQA,DQB,DWP, 2 | $ NIPR,RHO,ZETIG,ZETJG,ZETNI,ZETPR,DCPA,DCPC,DSH, 3 | $ ULLR,LBCD) 4 | C 5 | C Creation (12.08.03, SC) 6 | C (05.12.04, SC) 7 | C 8 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 9 | C 10 | IMPLICIT NONE 11 | C 12 | INCLUDE 'parameter.h' 13 | INCLUDE 'moleculeD.h' 14 | C 15 | INTEGER :: DCPA,DCPC,DSH,ULLR,LBCD 16 | INTEGER :: LA,LB,COOR,IL,N,X,Y,Z 17 | INTEGER :: IC,I1S,I2S,IS 18 | INTEGER, DIMENSION(3) :: S 19 | INTEGER, DIMENSION(4) :: DELK 20 | C 21 | REAL :: NIPR,RHO,RRERI2,RRERI3,ZETIG,ZETJG,ZETNI,ZETPR 22 | REAL, DIMENSION(3) :: DPA,DPB,DQA,DQB,DWP,PDEL1,PDEL2,RRINT2, 23 | $ RRINT3,RS 24 | C 25 | REAL, DIMENSION(DSH,DSH,DSH,DSH,3) :: BLOCKS 26 | REAL, DIMENSION(DCPA,DCPA,DCPC,DCPC,0:ULLR,3) :: RRINT 27 | REAL, DIMENSION(DCPA,DCPA,DCPC,DCPC,0:ULLR+1) :: RRERI 28 | C 29 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 30 | C 31 | DO 30 X=IL,0,-1 32 | DO 20 Y=IL-X,0,-1 33 | Z = IL - X - Y 34 | CALL SCANGMF(0,0,0,0,0,0,0,0,0,X,Y,Z,COOR,S,DELK) 35 | RS(:) = REAL(S(:)) 36 | CALL VPROD(RS,DQB,PDEL1) 37 | CALL VPROD(RS,DQA,PDEL2) 38 | IC = COP(X,Y,Z) 39 | I1S = COP(X-S(1),Y-S(2),Z-S(3)) 40 | DO 10 N=0,ULLR-IL 41 | RRINT2 = 0.0; RRERI2 = 0.0 42 | C 43 | IF (DELK(1) /= 0) THEN 44 | I2S = COP(X-2*S(1),Y-2*S(2),Z-2*S(3)) 45 | RRERI2 = RRERI(I2S,1,1,1,N+1) - RHO/ZETPR* 46 | $ RRERI(I2S,1,1,1,N+2) 47 | RRINT2(:) = RRINT(I2S,1,1,1,N,:) - RHO/ZETPR* 48 | $ RRINT(I2S,1,1,1,N+1,:) 49 | END IF 50 | RRERI(IC,1,1,1,N+1) = DPA(COOR)*RRERI(I1S,1,1,1,N+1) + 51 | $ DWP(COOR)*RRERI(I1S,1,1,1,N+2) + 52 | $ 0.5*DELK(1)/ZETPR*RRERI2 53 | RRINT(IC,1,1,1,N,:) = DPA(COOR)*RRINT(I1S,1,1,1,N,:) + 54 | $ DWP(COOR)*RRINT(I1S,1,1,1,N+1,:) + 55 | $ 0.5*DELK(1)/ZETPR*RRINT2(:) - 56 | $ 2.0*ZETJG*NIPR/ZETNI*PDEL1(:)* 57 | $ RRERI(I1S,1,1,1,N+1) 58 | C 59 | IF ((IL == LA).AND.(LBCD == 0)) THEN 60 | IS = SOP(X,Y,Z) 61 | BLOCKS(IS,1,1,1,:) = BLOCKS(IS,1,1,1,:) + 62 | $ RRINT(IC,1,1,1,N,:) 63 | IF (N /= 0) THEN 64 | STOP 'ERROR IN RECUR. A' 65 | END IF 66 | END IF 67 | C 68 | 10 CONTINUE 69 | 20 CONTINUE 70 | 30 CONTINUE 71 | C 72 | C O_______________________________________________________________O 73 | C 74 | END SUBROUTINE RR21 75 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/scangm.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE SCANGM(AX,AY,AZ,BX,BY,BZ,COOR,S,DELK) 2 | C 3 | C Purpose: Get scaled ANGular Momentum indeces for 4 | C cartesian gaussian functions. 5 | C 6 | C ****************************************************************** 7 | C 8 | C List of local variables: 9 | C 10 | C AX,AY,AZ : Angular momentum index of orbital A. 11 | C BX,BY,BZ : Angular momentum index of orbital B. 12 | C COOR : Pointer position of the angular momentum to be scaled. 13 | C DELK : Like Kronecker's delta variable. 14 | C S : Scaling number. 15 | C 16 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 17 | C 18 | IMPLICIT NONE 19 | C 20 | INTEGER :: AX,AY,AZ,BX,BY,BZ,COOR,I 21 | INTEGER, DIMENSION(2) :: DELK 22 | INTEGER, DIMENSION(3) :: A,B,S 23 | C 24 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 25 | C 26 | C ___ Initialization ___ 27 | C 28 | A(1) = AX; A(2) = AY; A(3) = AZ 29 | B(1) = BX; B(2) = BY; B(3) = BZ 30 | COOR = 0 31 | C 32 | C ___ Check pointer of the angular momentum ___ 33 | C 34 | DO I=1,3 35 | S(I) = 0 36 | IF (B(I) /= 0) COOR = I 37 | END DO 38 | S(COOR) = 1 39 | C 40 | C ___ Check Kronecker's delta for left recurrence relation ___ 41 | C 42 | DELK(:) = 0 43 | IF (A(COOR) /= 0) DELK(1) = A(COOR) 44 | C 45 | C ___ Check Kronecker's delta for right recurrence relation ___ 46 | C 47 | IF (B(COOR) > 1) DELK(2) = B(COOR) - 1 48 | C 49 | C O________________________________________________________________O 50 | C 51 | END SUBROUTINE SCANGM 52 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/scangmf.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE SCANGMF(AX,AY,AZ,BX,BY,BZ,CX,CY,CZ,DX,DY,DZ,COOR,S, 2 | $ DELK) 3 | C 4 | C Purpose: Get scaled ANGular Momentum indeces for 5 | C cartesian gaussian functions. 6 | C 7 | C ****************************************************************** 8 | C 9 | C List of local variables: 10 | C 11 | C AX,AY,AZ : Angular momentum index of orbital A. 12 | C BX,BY,BZ : Angular momentum index of orbital B. 13 | C COOR : Pointer position of the angular momentum to be scaled. 14 | C DELK : Like Kronecker's delta variable. 15 | C SA/B : Scaling number. 16 | C 17 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 18 | C 19 | IMPLICIT NONE 20 | C 21 | INTEGER :: AX,AY,AZ,BX,BY,BZ,CX,CY,CZ,DX,DY,DZ,COOR,I 22 | INTEGER, DIMENSION(3) :: A,B,C,D,S 23 | INTEGER, DIMENSION(4) :: DELK 24 | C 25 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 26 | C 27 | C ___ Initialization ___ 28 | C 29 | A(1) = AX; A(2) = AY; A(3) = AZ 30 | B(1) = BX; B(2) = BY; B(3) = BZ 31 | C(1) = CX; C(2) = CY; C(3) = CZ 32 | D(1) = DX; D(2) = DY; D(3) = DZ 33 | COOR = 0 34 | C 35 | C ___ Check pointer of the angular momentum ___ 36 | C 37 | DO I=1,3 38 | S(I) = 0 39 | IF (D(I) /= 0) COOR = I 40 | END DO 41 | S(COOR) = 1 42 | C 43 | C ___ Check Kronecker's delta for recurrence relation ___ 44 | C 45 | DELK(:) = 0 46 | C 47 | IF (A(COOR) /= 0) DELK(4) = A(COOR) 48 | IF (B(COOR) /= 0) DELK(3) = B(COOR) 49 | IF (C(COOR) /= 0) DELK(2) = C(COOR) 50 | IF (D(COOR) > 1) DELK(1) = D(COOR) - 1 51 | C 52 | C O________________________________________________________________O 53 | C 54 | END SUBROUTINE SCANGMF 55 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/scangmt.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE SCANGMT(AX,AY,AZ,BX,BY,BZ,CX,CY,CZ,COOR,S,DELK) 2 | C 3 | C Purpose: Get scaled ANGular Momentum indeces for 4 | C cartesian gaussian functions. 5 | C 6 | C ****************************************************************** 7 | C 8 | C List of local variables: 9 | C 10 | C AX,AY,AZ : Angular momentum index of orbital A. 11 | C BX,BY,BZ : Angular momentum index of orbital B. 12 | C COOR : Pointer position of the angular momentum to be scaled. 13 | C DELK : Like Kronecker's delta variable. 14 | C SA/B : Scaling number. 15 | C 16 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 17 | C 18 | IMPLICIT NONE 19 | C 20 | INTEGER :: AX,AY,AZ,BX,BY,BZ,CX,CY,CZ,COOR,I 21 | INTEGER, DIMENSION(3) :: A,B,C,DELK,S 22 | C 23 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 24 | C 25 | C ___ Initialization ___ 26 | C 27 | A(1) = AX; A(2) = AY; A(3) = AZ 28 | B(1) = BX; B(2) = BY; B(3) = BZ 29 | C(1) = CX; C(2) = CY; C(3) = CZ 30 | COOR = 0 31 | C 32 | C ___ Check pointer of the angular momentum ___ 33 | C 34 | DO I=1,3 35 | S(I) = 0 36 | IF (C(I) /= 0) COOR = I 37 | END DO 38 | S(COOR) = 1 39 | C 40 | C ___ Check Kronecker's delta for recurrence relation ___ 41 | C 42 | DELK(:) = 0 43 | C 44 | IF (A(COOR) /= 0) DELK(3) = A(COOR) 45 | IF (B(COOR) /= 0) DELK(2) = B(COOR) 46 | IF (C(COOR) > 1) DELK(1) = C(COOR) - 1 47 | C 48 | C O________________________________________________________________O 49 | C 50 | END SUBROUTINE SCANGMT 51 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/sdist.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE SDIST 2 | C 3 | C ****************************************************************** 4 | C *** Calculate the square of the distance matrix *** 5 | C ****************************************************************** 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | C 11 | INCLUDE 'molecule.h' 12 | INCLUDE 'moleculeD.h' 13 | C 14 | INTEGER :: I,IATOM,JATOM 15 | C 16 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 17 | C 18 | C ___ Calculate the square of the distance matrix ___ 19 | C 20 | DO IATOM=1,NATOM 21 | SDISTANCE(IATOM,IATOM) = 0.0 22 | DO JATOM=IATOM+1,NATOM 23 | SDISTANCE(IATOM,JATOM) = (C(1,IATOM) - C(1,JATOM))**2 + 24 | $ (C(2,IATOM) - C(2,JATOM))**2 + 25 | $ (C(3,IATOM) - C(3,JATOM))**2 26 | SDISTANCE(JATOM,IATOM) = SDISTANCE(IATOM,JATOM) 27 | END DO 28 | END DO 29 | C 30 | C O________________________________________________________________O 31 | C 32 | END SUBROUTINE SDIST 33 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/shellop.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE SHELLOP 2 | C 3 | C ****************************************************************** 4 | C *** Generate Shell orbital pointer *** 5 | C ****************************************************************** 6 | C 7 | IMPLICIT NONE 8 | C 9 | INCLUDE 'parameter.h' 10 | C 11 | INCLUDE 'molecule.h' 12 | INCLUDE 'moleculeD.h' 13 | C 14 | INTEGER :: IS,MUL,L 15 | C 16 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 17 | C 18 | SLL = 0 19 | SUL = 0 20 | NSPH = 0 21 | C 22 | DO IS=1,NSHL 23 | SLL(IS) = NSPH + 1 24 | L = PSHELL(IS,2) 25 | DO MUL=1,2*L+1 26 | NSPH = NSPH + 1 27 | END DO 28 | SUL(IS) = NSPH 29 | END DO 30 | C 31 | C O________________________________________________________________O 32 | C 33 | END SUBROUTINE SHELLOP 34 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/socint.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE SOCINT(MATRIX,CENTS) 2 | C 3 | C ****************************************************************** 4 | C *** Calculate the one-electron SOC INTegrals *** 5 | C ****************************************************************** 6 | C 7 | C Lit.: S.Obara, A.Saika, J.Chem.Phys. 84, 3963 (1986) 8 | C 9 | C History: - Creation (14.08.03, SC) 10 | C 11 | C List of local dimensions: 12 | C 13 | C List of local variables: 14 | C 15 | C CENTS : Atomic center. 16 | C MATRIX : The integral matrix. 17 | C L{A/B} : Orbital L quantum number. 18 | C 19 | C List of local dynamical fields: 20 | C 21 | C BLOCKS: Diatomic integral shell block. 22 | C 23 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 24 | C 25 | IMPLICIT NONE 26 | C 27 | INCLUDE 'parameter.h' 28 | C 29 | INCLUDE 'fileio.h' 30 | INCLUDE 'molecule.h' 31 | INCLUDE 'moleculeD.h' 32 | C 33 | INTEGER :: IATOM,ISHL,JATOM,JSHL,LA,LB,ISTO,JSTO,IVEC 34 | C 35 | REAL, DIMENSION(3) :: CENTS 36 | REAL, DIMENSION(NSTO,NSTO,3) :: MATRIX 37 | C 38 | INTEGER :: ALLOCATION 39 | REAL, DIMENSION(:,:,:), ALLOCATABLE :: BLOCKS 40 | C 41 | C o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o 42 | C 43 | C ___ Allocate local fields ___ 44 | C 45 | ALLOCATE(BLOCKS(DSHL,DSHL,3),STAT=ALLOCATION) 46 | IF (ALLOCATION /= 0) THEN 47 | WRITE(OUT,*) 'SOCINT: ALLOCATION FAILED' 48 | STOP 49 | END IF 50 | C 51 | C ___ Initialize integral matrix ___ 52 | C 53 | BLOCKS = 0.0 54 | MATRIX = 0.0 55 | C 56 | C ___ Calculate the integral matrix ___ 57 | C 58 | DO 40 IATOM=1,NATOM 59 | DO 30 JATOM=IATOM,NATOM 60 | CALL ATOMDIS(IATOM,JATOM,RAB,RSQAB) 61 | RAC(:) = C(:,IATOM) - CENTS(:) 62 | RBC(:) = C(:,JATOM) - CENTS(:) 63 | DO 20 ISHL=LLS(IATOM),ULS(IATOM) 64 | DO 10 JSHL=MAX(ISHL,LLS(JATOM)),ULS(JATOM) 65 | LA = PSHELL(ISHL,2) 66 | LB = PSHELL(JSHL,2) 67 | CALL RR1SOCIN(LA,LB,ISHL,JSHL,BLOCKS) 68 | CALL BLDIMSO(ISHL,JSHL,NCSTO,MATRIX,BLOCKS,NSTO) 69 | 10 CONTINUE 70 | 20 CONTINUE 71 | 30 CONTINUE 72 | 40 CONTINUE 73 | C 74 | C ___ Antisymmetrize SOC matrix ___ 75 | C 76 | DO ISTO=1,NSTO-1 77 | DO JSTO=ISTO+1,NSTO 78 | MATRIX(JSTO,ISTO,1:3) = -MATRIX(ISTO,JSTO,1:3) 79 | END DO 80 | END DO 81 | C 82 | C ___ Deallocate local fields ___ 83 | C 84 | DEALLOCATE(BLOCKS,STAT=ALLOCATION) 85 | IF (ALLOCATION /= 0) THEN 86 | WRITE(OUT,*) 'SOCINT: DEALLOCATION FAILED' 87 | STOP 88 | END IF 89 | C 90 | C O________________________________________________________________O 91 | C 92 | END SUBROUTINE SOCINT 93 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/socone.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE SOCONE 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'moleculeD.h' 10 | INCLUDE 'molecule.h' 11 | C 12 | INTEGER :: IATOM,ISTO,JSTO,U 13 | REAL :: CPUTOLD 14 | C 15 | INTEGER :: ALLOCATION 16 | REAL, DIMENSION(:,:,:), ALLOCATABLE :: MATRIX,NMATRIX 17 | C 18 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 19 | C 20 | C ___ Allocate local fields ___ 21 | C 22 | ALLOCATE(MATRIX(NSTO,NSTO,3),NMATRIX(NSTO,NSTO,3),STAT=ALLOCATION) 23 | IF (ALLOCATION /= 0) THEN 24 | WRITE(OUT,*) 'SOCONE: ALLOCATION FAILED' 25 | STOP 26 | END IF 27 | C 28 | C ___ Get CPU time ___ 29 | C 30 | CALL CPUTIME 31 | CPUTOLD = CPUT 32 | C 33 | C ___ Calculate SOC matrix ___ 34 | C 35 | NMATRIX = 0.0 36 | DO IATOM=1,NATOM 37 | CALL SOCINT(MATRIX,C(:,IATOM)) 38 | NMATRIX = NMATRIX + ZEFF(IATOM)*MATRIX 39 | END DO 40 | C 41 | C ___ Get CPU time ___ 42 | C 43 | CALL CPUTIME 44 | WRITE(OUT,2000) CPUT - CPUTOLD 45 | C 46 | C ___ Store SOC matrix on tape ___ 47 | C 48 | DO U=1,3 49 | CALL IOSCR(NMATRIX(:,:,U),NSTO**2,'WRITE','ZERO',U) 50 | END DO 51 | C 52 | WRITE(SOCA,999) 53 | DO U=1,3 54 | IF (U == 1) WRITE(SOCA,*) 'X COMPONENT' 55 | IF (U == 2) WRITE(SOCA,*) 'Y COMPONENT' 56 | IF (U == 3) WRITE(SOCA,*) 'Z COMPONENT' 57 | DO ISTO=1,NSTO 58 | DO JSTO=1,NSTO 59 | WRITE(SOCA,1100) JSTO,ORSYM(JSTO), 60 | $ ISTO,ORSYM(ISTO),NMATRIX(JSTO,ISTO,U) 61 | END DO 62 | END DO 63 | END DO 64 | C 65 | C ___ Deallocate local fields ___ 66 | C 67 | DEALLOCATE(MATRIX,NMATRIX,STAT=ALLOCATION) 68 | IF (ALLOCATION /= 0) THEN 69 | WRITE(OUT,*) 'SOCONE: DEALLOCATION FAILED' 70 | STOP 71 | END IF 72 | C 73 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 74 | C 75 | C ___ Format statements ___ 76 | C 77 | 999 FORMAT(//,T2,'ONE-ELECTRON SOC INTEGRALS ', 78 | $ /,T2,45('-')) 79 | 1000 FORMAT(I7,4X,I7,10X,F20.9) 80 | 1100 FORMAT(I5,A5,3X,I5,A5,F20.9) 81 | 2000 FORMAT(//,T2,'ONE-ELECTRON SOC INTEGRALS CALCULATED IN',F12.6, 82 | $ X,'SEC.') 83 | C 84 | C O________________________________________________________________O 85 | C 86 | END SUBROUTINE SOCONE 87 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/sozeff.f: -------------------------------------------------------------------------------- 1 | REAL FUNCTION SOZEFF(ATOM) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'fileio.h' 8 | C 9 | INTEGER, PARAMETER :: MAXAN = 54 10 | C 11 | INTEGER ATOM 12 | INTEGER, DIMENSION(MAXAN) :: NEVAL 13 | C 14 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 15 | C 16 | DATA NEVAL/1,2, 17 | $ 1,2,3,4,5,6,7,8, 18 | $ 1,2,3,4,5,6,7,8, 19 | $ 1,2,3,4,5,6,7,8,9,10,11,12, 20 | $ 3,4,5,6,7,8, 21 | $ 1,2,3,4,5,6,7,8,9,10,11,12, 22 | $ 3,4,5,6,7,8/ 23 | C 24 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 25 | C 26 | IF (ATOM == 1) THEN 27 | SOZEFF = 1.0 28 | ELSE IF (ATOM == 2) THEN 29 | SOZEFF = 2.0 30 | ELSE IF ((ATOM > 2).AND.(ATOM <= 10)) THEN 31 | SOZEFF = (0.2517 + 0.0626*NEVAL(ATOM))*ATOM 32 | ELSE IF ((ATOM > 10).AND.(ATOM <= 18)) THEN 33 | SOZEFF = (0.7213 + 0.0144*NEVAL(ATOM))*ATOM 34 | ELSE IF (((ATOM > 18).AND.(ATOM <= 20)).OR.((ATOM > 30). 35 | $ AND.(ATOM <= 36))) THEN 36 | SOZEFF = (0.8791 + 0.0039*NEVAL(ATOM))*ATOM 37 | ELSE IF (((ATOM > 36).AND.(ATOM <= 38)).OR.((ATOM > 48). 38 | $ AND.(ATOM <= 54))) THEN 39 | SOZEFF = (0.9228 + 0.0017*NEVAL(ATOM))*ATOM 40 | ELSE IF (ATOM == 26) THEN 41 | SOZEFF = 0.583289*ATOM 42 | ELSE IF (ATOM == 77) THEN 43 | SOZEFF = 1234 44 | ELSE IF (ATOM == 30) THEN 45 | SOZEFF = 330 46 | C Zeff taken from J. Phys. Chem. A 1998, 102, 50, 10430–10435: 47 | C First row transition metals. 48 | ELSE IF (ATOM >= 21 .AND. ATOM <= 30) THEN 49 | SOZEFF = ATOM * (0.385 + 0.025 * (NEVAL(ATOM) -2)) 50 | C Second row transition metals. 51 | ELSE IF (ATOM >= 39 .AND. ATOM <= 48) THEN 52 | SOZEFF = ATOM * (4.680 + 0.060 * (NEVAL(ATOM) -2)) 53 | C Third row transition metals. 54 | ELSE IF (ATOM == 72) THEN 55 | SOZEFF = 1025.28 56 | ELSE IF (ATOM == 73) THEN 57 | SOZEFF = 1049.74 58 | ELSE IF (ATOM == 74) THEN 59 | SOZEFF = 1074.48 60 | ELSE IF (ATOM == 75) THEN 61 | SOZEFF = 1099.5 62 | ELSE IF (ATOM == 76) THEN 63 | SOZEFF = 1124.8 64 | ELSE IF (ATOM == 77) THEN 65 | SOZEFF = 1150.38 66 | ELSE IF (ATOM == 78) THEN 67 | SOZEFF = 1176.24 68 | ELSE IF (ATOM == 79) THEN 69 | SOZEFF = 1202.38 70 | ELSE IF (ATOM == 80) THEN 71 | SOZEFF = 1228.8 72 | ELSE 73 | WRITE(OUT,1000) ATOM 74 | STOP 75 | END IF 76 | C 77 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 78 | C 79 | C ___ Format statements ___ 80 | C 81 | 1000 FORMAT(/,T2,'SOZEFF: SOZEFF IS NOT AVAILABLE FOR ATOMIC NUMBER', 82 | $ I5) 83 | C 84 | C O________________________________________________________________O 85 | C 86 | END FUNCTION SOZEFF 87 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/traatb.f: -------------------------------------------------------------------------------- 1 | REAL FUNCTION TRAATB(A,B,DMAT,N) 2 | C 3 | C ***************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INTEGER :: DMAT 8 | INTEGER :: I,J,N 9 | C 10 | REAL, DIMENSION(DMAT,DMAT) :: A,B 11 | C 12 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 13 | C 14 | TRAATB = 0.0 15 | C 16 | DO I=1,N 17 | DO J=I,N 18 | TRAATB = TRAATB + A(I,J)*B(I,J) 19 | END DO 20 | END DO 21 | C 22 | C O________________________________________________________________O 23 | C 24 | END FUNCTION TRAATB 25 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/transc.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE TRANSC 2 | C 3 | C ***************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'math.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | INTEGER :: I,IC,IS,J,K,L,LX,LY,LZ,M,ABM 13 | C 14 | REAL :: FITERM,STERM,TTERM,FOTERM,STOT 15 | C 16 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 17 | C 18 | DO L=0,MXL 19 | IC = 0 20 | DO LX=L,0,-1 21 | DO LY=L-LX,0,-1 22 | LZ = L - LX - LY 23 | IC = IC + 1 24 | DO M=-L,L 25 | ABM = ABS(M) 26 | IS = L + M + 1 27 | IF ((ABM.GT.L).OR.(LZ.LT.0)) GOTO 10 28 | FITERM = SQRT(FAC(2*LX)*FAC(2*LY)*FAC(2*LZ)*FAC(L)* 29 | $ FAC(L-ABM)/(FAC(2*L)*FAC(LX)*FAC(LY)* 30 | $ FAC(LZ)*FAC(L+ABM)))/((2**L)*FAC(L)) 31 | J = (LX + LY - ABM)/2 32 | STOT = 0.0 33 | IF ((2*J).EQ.(LX + LY - ABM)) THEN 34 | DO I=0,(L-ABM)/2 35 | STERM = 0.0 36 | IF ((J.GE.0).AND.(J.LE.I)) THEN 37 | STERM = (FAC(L)/(FAC(I)*FAC(L-I)))* 38 | $ (FAC(2*L-2*I)*((-1)**I)/FAC(L-ABM-2*I))* 39 | $ (FAC(I)/(FAC(J)*FAC(I-J))) 40 | DO K=0,J 41 | TTERM = 0.0 42 | IF (((LX-2*K).GE.0).AND.((LX-2*K).LE.ABM)) THEN 43 | TTERM = (FAC(J)/(FAC(K)*FAC(J-K)))*(FAC(ABM)/ 44 | $ (FAC(LX-2*K)*FAC(ABM+2*K-LX))) 45 | FOTERM = 0.0 46 | IF ((M.EQ.0).AND.((MOD(LX,2).EQ.0))) 47 | $ FOTERM = (-1)**(K - LX/2) 48 | IF (((M.GT.0).AND. 49 | $ (MOD(ABS(ABM-LX),2).EQ.0)).OR. 50 | $ ((M.LT.0).AND.(MOD(ABS(ABM-LX),2).EQ.1))) 51 | $ FOTERM = (-1)**((2*K+ABM-LX)/2)*SQRT(2.0) 52 | STOT = STOT + STERM*TTERM*FOTERM 53 | END IF 54 | END DO 55 | END IF 56 | END DO 57 | END IF 58 | TRMSC(IS,IC,L) = FITERM*STOT 59 | 10 CONTINUE 60 | END DO 61 | END DO 62 | END DO 63 | END DO 64 | C 65 | C O________________________________________________________________O 66 | C 67 | END SUBROUTINE TRANSC 68 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/turbord.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE TURBORD(MATRIX,DMAT,OPTION) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | C 9 | INCLUDE 'fileio.h' 10 | INCLUDE 'molecule.h' 11 | INCLUDE 'moleculeD.h' 12 | C 13 | CHARACTER*(*) :: OPTION 14 | C 15 | INTEGER :: IS,L,IMO,DMAT 16 | INTEGER, DIMENSION(10) :: POINT 17 | C 18 | REAL, DIMENSION(DMAT,DMAT) :: MATRIX,NEWMAT 19 | C 20 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 21 | C 22 | NEWMAT = 0.0 23 | POINT = 0 24 | C 25 | IF (OPTION.EQ.'SPHERICAL') THEN 26 | C 27 | DO IS=1,NSHL 28 | L = PSHELL(IS,2) 29 | IF (L == 0) THEN 30 | DO IMO=1,NSPH 31 | NEWMAT(SLL(IS),IMO) = MATRIX(SLL(IS),IMO) 32 | END DO 33 | ELSE IF (L == 1) THEN 34 | POINT(1) = SLL(IS) 35 | POINT(2) = SLL(IS) + 1 36 | POINT(3) = SUL(IS) 37 | DO IMO=1,NSPH 38 | NEWMAT(POINT(3),IMO) = MATRIX(POINT(1),IMO) 39 | NEWMAT(POINT(1),IMO) = MATRIX(POINT(2),IMO) 40 | NEWMAT(POINT(2),IMO) = MATRIX(POINT(3),IMO) 41 | END DO 42 | ELSE IF (L == 2) THEN 43 | POINT(1) = SLL(IS) 44 | POINT(2) = SLL(IS) + 1 45 | POINT(3) = SLL(IS) + 2 46 | POINT(4) = SLL(IS) + 3 47 | POINT(5) = SUL(IS) 48 | DO IMO=1,NSPH 49 | NEWMAT(POINT(3),IMO) = MATRIX(POINT(1),IMO) 50 | NEWMAT(POINT(4),IMO) = MATRIX(POINT(2),IMO) 51 | NEWMAT(POINT(2),IMO) = MATRIX(POINT(3),IMO) 52 | NEWMAT(POINT(1),IMO) = MATRIX(POINT(4),IMO) 53 | NEWMAT(POINT(5),IMO) = MATRIX(POINT(5),IMO) 54 | END DO 55 | ELSE IF (L == 3) THEN 56 | WRITE(OUT,*) 'F CARTESIAN CONVERSION AOs IS NOT AVAILABLE' 57 | STOP 58 | ELSE 59 | WRITE(OUT,*) 'TURBORD: NO ANGULAR MOMENTUM FOUND' 60 | STOP 61 | END IF 62 | END DO 63 | C 64 | ELSE IF (OPTION == 'CARTESIAN') THEN 65 | C 66 | WRITE(OUT,*) 'CARTESIAN CONVERSION AOs IS NOT AVAILABLE' 67 | STOP 68 | C 69 | ELSE 70 | C 71 | WRITE(OUT,*) 'TURBORD: UNKNOWN OPTION' 72 | STOP 73 | C 74 | END IF 75 | C 76 | MATRIX = NEWMAT 77 | C 78 | C O________________________________________________________________O 79 | C 80 | END SUBROUTINE TURBORD 81 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/ucc.f: -------------------------------------------------------------------------------- 1 | CHARACTER*(*) FUNCTION UCC(STR) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | CHARACTER :: STR*(*) 8 | C 9 | INTEGER :: I 10 | C 11 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 12 | C 13 | UCC = STR 14 | DO I=1,LEN(STR) 15 | IF ((ICHAR(STR(I:I)).GE.97).AND.(ICHAR(STR(I:I)).LE.122)) 16 | $ UCC(I:I) = CHAR(ICHAR(STR(I:I)) - 32) 17 | END DO 18 | C 19 | C O________________________________________________________________O 20 | C 21 | END FUNCTION UCC 22 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/vecfso.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE VECFSO(S,PDEL,U) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'math.h' 9 | C 10 | INTEGER :: U 11 | C 12 | REAL, DIMENSION(3) :: S,PDEL 13 | REAL, DIMENSION(3,3) :: DE 14 | C 15 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 16 | C 17 | CALL VPROD(S,UM(:,1),DE(:,1)) 18 | CALL VPROD(S,UM(:,2),DE(:,2)) 19 | CALL VPROD(S,UM(:,3),DE(:,3)) 20 | C 21 | PDEL(1) = DE(U,1) 22 | PDEL(2) = DE(U,2) 23 | PDEL(3) = DE(U,3) 24 | C 25 | C O________________________________________________________________O 26 | C 27 | END SUBROUTINE VECFSO 28 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/vecfso2.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE VECFSO2(S,DE) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'math.h' 9 | C 10 | REAL, DIMENSION(3) :: S 11 | REAL, DIMENSION(3,3) :: DE,PT 12 | C 13 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 14 | C 15 | CALL VPROD(S,UM(:,1),DE(:,1)) 16 | CALL VPROD(S,UM(:,2),DE(:,2)) 17 | CALL VPROD(S,UM(:,3),DE(:,3)) 18 | C 19 | C O________________________________________________________________O 20 | C 21 | END SUBROUTINE VECFSO2 22 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/vprod.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE VPROD(A,B,C) 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | REAL, DIMENSION(3) :: A,B,C 8 | C 9 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 10 | C 11 | C(1) = A(2)*B(3) - A(3)*B(2) 12 | C(2) = A(3)*B(1) - A(1)*B(3) 13 | C(3) = A(1)*B(2) - A(2)*B(1) 14 | C 15 | C O________________________________________________________________O 16 | C 17 | END SUBROUTINE VPROD 18 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/writout.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE WRITOUT 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | INTEGER :: IATOM,I,ISHELL,IG,NCO 13 | REAL :: TRANS1,TRANS2 14 | C 15 | CHARACTER :: UCC*7 16 | C 17 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 18 | C 19 | WRITE(OUT,1000) CHARGE,MULTF,MULTS,NELEC 20 | C 21 | WRITE(OUT,1100) 22 | WRITE(OUT,2100) 23 | DO IATOM=1,NAT 24 | WRITE(OUT,1200) UCC(ELEMENT(IATOM)(1:2)), 25 | $ (C(I,IATOM)/BOHR,I=1,3), 26 | $ ZATOM(IATOM),ZEFF(IATOM) 27 | END DO 28 | WRITE(OUT,1300) 29 | WRITE(OUT,2100) 30 | DO IATOM=1,NAT 31 | WRITE(OUT,1200) UCC(ELEMENT(IATOM)(1:2)), 32 | $ (C(I,IATOM),I=1,3), 33 | $ ZATOM(IATOM),ZEFF(IATOM) 34 | END DO 35 | C 36 | WRITE(OUT,1400) NAT,NSHL,NGTF,NSTO 37 | WRITE(OUT,"(//,T2,'BASIS SET',/)") 38 | C 39 | C ___ Write basis sets ___ 40 | C 41 | DO IATOM=1,NATOM 42 | WRITE(OUT,"(T2,A2)") UCC(ELEMENT(IATOM)(1:2)) 43 | DO ISHELL=LLS(IATOM),ULS(IATOM) 44 | C print *, "ISHELL", IATOM, ISHELL, LLS(IATOM),ULS(IATOM) 45 | NCO = ULSTO(ISHELL) - LLSTO(ISHELL) + 1 46 | WRITE(OUT,1900) PSHELL(ISHELL,1),PSHELL(ISHELL,2), 47 | $ PSHELL(ISHELL,3),NCO 48 | C print *, "shell", PSHELL(ISHELL,1),PSHELL(ISHELL,2), 49 | C $ PSHELL(ISHELL,3),NCO 50 | DO IG=GLL(ISHELL),GUL(ISHELL) 51 | WRITE(OUT,2000) ZET(IG),GCC(IG) 52 | C print *, "basis", ZET(IG),GCC(IG) 53 | END DO 54 | END DO 55 | END DO 56 | C 57 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 58 | C 59 | C ___ Format statements ___ 60 | C 61 | 1000 FORMAT(/,T2,'MOLECULAR CHARGE = ',I5, 62 | $ /,T2,'MULTIPLICITY OF THE FIRST STATE = ',I5, 63 | $ /,T2,'MULTIPLICITY OF THE SECOND STATE = ',I5, 64 | $ /,T2,'NUMBER OF ELECTRONS = ',I5) 65 | 1100 FORMAT(//,T2,'GEOMETRY IN ANGSTROM',/) 66 | 1200 FORMAT(T3,A2,3X,3F12.6,F6.1,F8.3) 67 | 1300 FORMAT(/,T2,'GEOMETRY IN BOHR',/) 68 | 1400 FORMAT(//,T2,'NUMBER OF ATOMS = ',I6, 69 | $ /,T2,'NUMBER OF SHELLS = ',I6, 70 | $ /,T2,'NUMBER OF GTFs = ',I6, 71 | $ /,T2,'NUMBER OF STOs = ',I6) 72 | 1900 FORMAT(T2,4I5) 73 | 2000 FORMAT(T5,2F20.9) 74 | 2100 FORMAT(T2,'ATOM',10X,'X',11X,'Y',11X,'Z',6X,'Z_A',3X,'Z_eff',/) 75 | C 76 | C O_______________________________________________________________O 77 | C 78 | END SUBROUTINE WRITOUT 79 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/wrthead.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE WRTHEAD 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'fileio.h' 9 | INCLUDE 'molecule.h' 10 | INCLUDE 'moleculeD.h' 11 | C 12 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 13 | C 14 | WRITE(OUT,1000) 15 | C 16 | C ___ Write input header ___ 17 | C 18 | IF (TRANS.EQ.BOHR) THEN 19 | WRITE(OUT,2000) 20 | ELSE IF (TRANS.EQ.1.0) THEN 21 | WRITE(OUT,3000) 22 | END IF 23 | C 24 | IF (GRAMS) THEN 25 | WRITE(OUT,4000) 26 | END IF 27 | C 28 | IF (SROKS) THEN 29 | WRITE(OUT,5000) 30 | ELSE 31 | WRITE(OUT,6000) 32 | END IF 33 | C 34 | IF (SPHEORB) THEN 35 | WRITE(OUT,7000) 'SPHERICAL' 36 | ELSE 37 | WRITE(OUT,7000) 'CARTESIAN' 38 | END IF 39 | C 40 | IF ((ZTYPE == 'ATOM').AND.(.NOT.SOCTWOM)) THEN 41 | WRITE(OUT,8000) 42 | ELSE IF ((ZTYPE == 'ZEFF').AND.(.NOT.SOCTWOM)) THEN 43 | WRITE(OUT,9000) 44 | ELSE IF ((ZTYPE == 'ATOM').AND.(SOCTWOM)) THEN 45 | WRITE(OUT,10000) 46 | END IF 47 | C 48 | IF (LM == 1) THEN 49 | WRITE(OUT,11000) 50 | ELSE IF (LM == 2) THEN 51 | WRITE(OUT,12000) 52 | ELSE IF (LM == 3) THEN 53 | WRITE(OUT,13000) 54 | END IF 55 | C 56 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 57 | C 58 | C ___ Format statements ___ 59 | C 60 | 1000 FORMAT(/,T2,'*** SPIN-ORBIT CALCULATIONS ***') 61 | 2000 FORMAT(/,T2,'GEOMETRY IN ANGSTROM') 62 | 3000 FORMAT(/,T2,'GEOMETRY IN BOHR') 63 | 4000 FORMAT(T2,'GRAM-SCHMIDT ORTHOGONALIZATION') 64 | 5000 FORMAT(T2,'RESTRICTED MOs') 65 | 6000 FORMAT(T2,'UNRESTRICTED MOs') 66 | 7000 FORMAT(T2,'COEFFICIENTS OF ',A9,' MOs') 67 | 8000 FORMAT(T2,'ONE-ELECTRON SOC CALCULATIONS') 68 | 9000 FORMAT(T2,'ONE-ELECTRON SOC CALCULATIONS WITH Z_eff') 69 | 10000 FORMAT(T2,'ONE AND TWO-ELECTRON SOC CALCULATIONS') 70 | 11000 FORMAT(T2,'DIPOLE MOMENT COMPONENTS') 71 | 12000 FORMAT(T2,'DIPOLE AND QUADRUPOLE MOMENT COMPONENTS') 72 | 13000 FORMAT(T2,'DIPOLE, QUADRUPOLE, AND OCTUPOLE MOMENT COMPONENTS') 73 | C 74 | C O________________________________________________________________O 75 | C 76 | END SUBROUTINE WRTHEAD 77 | 78 | -------------------------------------------------------------------------------- /molsoc/molsoc0.1/source/xyzcomp.f: -------------------------------------------------------------------------------- 1 | SUBROUTINE XYZCOMP 2 | C 3 | C ****************************************************************** 4 | C 5 | IMPLICIT NONE 6 | C 7 | INCLUDE 'parameter.h' 8 | INCLUDE 'molecule.h' 9 | INCLUDE 'moleculeD.h' 10 | INCLUDE 'fileio.h' 11 | C 12 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 13 | C 14 | C 15 | ENER(1) = 0.5*ENER(1); ENERD(1) = 0.5*ENERD(1) 16 | ENER(2) = 0.5*ENER(2); ENERD(2) = 0.5*ENERD(2) 17 | ENER(3) = 0.5*ENER(3); ENERD(3) = 0.5*ENERD(3) 18 | C 19 | IF ((MULTF == 1).AND.(MULTS == 1)) THEN 20 | WRITE(OUT,1000) 21 | WRITE(OUT,3000) ENERD(1),ENER(1), 22 | $ ENERD(2),ENER(2), 23 | $ ENERD(3),ENER(3) 24 | C 25 | IF (SOCTWOM) THEN 26 | WRITE(OUT,2000) 27 | WRITE(OUT,3000) ENERTWOAU(1),ENERTWO(1), 28 | $ ENERTWOAU(2),ENERTWO(2), 29 | $ ENERTWOAU(3),ENERTWO(3) 30 | END IF 31 | C 32 | WRITE(OUT,4000) 33 | WRITE(OUT,3000) ENERD(1)+ENERTWOAU(1), 34 | $ ENER(1)+ENERTWO(1), 35 | $ ENERD(2)+ENERTWOAU(2), 36 | $ ENER(2)+ENERTWO(2), 37 | $ ENERD(3)+ENERTWOAU(3), 38 | $ ENER(3)+ENERTWO(3) 39 | C 40 | ELSE 41 | C IF ((MULTF == 1).AND.(MULTS == 1)) GOTO 100 42 | C 43 | C ___ Calculate the matrix elements ___ 44 | C 45 | CALL MATRELEM 46 | C 47 | END IF 48 | 100 CONTINUE 49 | C 50 | C O~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O 51 | C 52 | C ___ Format statements ___ 53 | C 54 | 1000 FORMAT(/,T2,'ONE ELECTRON SOC CONTRIBUTION:') 55 | 2000 FORMAT(/,T2,'TWO ELECTRON SOC CONTRIBUTION:') 56 | 3000 FORMAT(T2,42('-'), 57 | $ /,T2,15X,'A.U.',15X,'CM-1',/, 58 | $ /,T2,'X ',2F20.9, 59 | $ /,T2,'Y ',2F20.9, 60 | $ /,T2,'Z ',2F20.9) 61 | 4000 FORMAT(/,T2,'TOTAL:') 62 | C 63 | C O________________________________________________________________O 64 | C 65 | END SUBROUTINE XYZCOMP 66 | -------------------------------------------------------------------------------- /pysoc/__init__.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from contextlib import ExitStack 3 | import atexit 4 | import importlib_resources 5 | 6 | 7 | # The name of this package. 8 | name = "PySOC" 9 | # Brief description. 10 | description = "PySOC spin-orbit coupling calculations" 11 | # Whether this is a development version. 12 | development = False 13 | # Version information. 14 | major_version = 2 15 | minor_version = 3 16 | revision = 0 17 | version_number = "{}.{}.{}".format(major_version, minor_version, revision) 18 | # The full version number of this package. 19 | version = "{}{}".format(version_number, "-dev" if development else "") 20 | 21 | 22 | # Program date (when we were last updated). 23 | _last_updated_string = "30/05/2024" 24 | last_updated = datetime.strptime(_last_updated_string, "%d/%m/%Y") 25 | 26 | 27 | # The name of the logger that will be used by pysoc. 28 | logger_name = "PySOC" 29 | 30 | 31 | def get_resource(name): 32 | """ 33 | Get a pathlib path object to a package resource. 34 | """ 35 | file_manager = ExitStack() 36 | atexit.register(file_manager.close) 37 | ref = importlib_resources.files('pysoc') / name 38 | return file_manager.enter_context(importlib_resources.as_file(ref)) -------------------------------------------------------------------------------- /pysoc/data/bin/molsoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/pysoc/data/bin/molsoc -------------------------------------------------------------------------------- /pysoc/data/bin/soc_td: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/pysoc/data/bin/soc_td -------------------------------------------------------------------------------- /pysoc/data/parameters/README: -------------------------------------------------------------------------------- 1 | This directory contains GTO fitted basis sets. 2 | 3 | TODO: Understand what this means/add more... 4 | -------------------------------------------------------------------------------- /pysoc/data/parameters/mio-1-1-fit/C.basis: -------------------------------------------------------------------------------- 1 | C 0 2 | S 8 1.0 3 | 4.0667344005E-01 -2.7807816612E+00 4 | 4.9810060409E-01 2.1456966432E+00 5 | 3.4122429648E-01 2.0627744007E+00 6 | 2.5277703994E+01 -2.0915428674E+00 7 | 3.2111859462E+00 -1.1114702555E+00 8 | 8.5727221271E+00 -1.9514366218E+00 9 | 9.0434690939E+01 -1.6683855022E+00 10 | 4.9294763603E+02 -1.1288677925E+00 11 | P 7 1.0 12 | 3.1433633168E-01 2.6279605928E-01 13 | 7.6556158990E-01 3.7120432798E-01 14 | 5.8078342779E-01 3.9855343399E-01 15 | 1.5431070324E+00 1.0260335707E+00 16 | 3.6730788797E+00 1.3018565043E+00 17 | 9.8592577409E+00 1.5925979227E+00 18 | 3.4639456144E+01 1.5356514213E+00 19 | -------------------------------------------------------------------------------- /pysoc/data/parameters/mio-1-1-fit/H.basis: -------------------------------------------------------------------------------- 1 | H 0 2 | S 7 1.0 3 | 3.1057942576E-01 1.1069742110E+00 4 | 4.2054401715E-01 -2.0389805578E+00 5 | 1.4691812568E+00 4.9737343948E-01 6 | 4.8997687604E-01 2.0281238631E+00 7 | 4.2674722880E+00 3.6647285708E-01 8 | 8.2212142463E+01 1.7034748332E-01 9 | 1.5114794189E+01 2.6131371966E-01 10 | -------------------------------------------------------------------------------- /pysoc/data/parameters/mio-1-1-fit/N.basis: -------------------------------------------------------------------------------- 1 | N 0 2 | S 7 1.0 3 | 3.8343102984E-01 7.8328548142E-01 4 | 8.1273142195E-01 1.0005725702E+00 5 | 1.2109558560E+01 -2.4837713786E+00 6 | 4.6563028129E+00 -1.4136495311E+00 7 | 1.2611909783E+02 -2.0769428874E+00 8 | 3.5409427749E+01 -2.6136106080E+00 9 | 6.8452699815E+02 -1.4064055357E+00 10 | P 6 1.0 11 | 3.8878889992E-01 3.1461504873E-01 12 | 7.7529248091E-01 8.5698848129E-01 13 | 1.7596460191E+00 1.4867625190E+00 14 | 4.1970920442E+00 2.0559974064E+00 15 | 1.1673392884E+01 2.5753105477E+00 16 | 4.2822196387E+01 2.5390866767E+00 17 | -------------------------------------------------------------------------------- /pysoc/data/parameters/mio-1-1-fit/O.basis: -------------------------------------------------------------------------------- 1 | O 0 2 | S 9 1.0 3 | 8.5105182213E-01 1.1438658849E+00 4 | 3.9430103449E-01 6.3283392945E-01 5 | 2.8289392845E+00 -2.9724492907E+00 6 | 2.5009290966E+00 2.8919645270E+00 7 | 2.3686387748E+01 -3.0361764535E+00 8 | 9.0147769069E+00 -2.3397561479E+00 9 | 2.4557639599E+02 -2.0754567227E+00 10 | 6.9115451979E+01 -2.7847493342E+00 11 | 1.3302843068E+03 -1.3755702485E+00 12 | P 8 1.0 13 | 3.9014465820E-01 2.7366768847E-01 14 | 1.7102820713E+00 -2.5078639542E-01 15 | 1.8513462432E+00 1.9973556327E+00 16 | 8.1769269092E-01 9.0613096817E-01 17 | 6.6692028367E+00 1.6066723428E+00 18 | 4.0233682935E+00 2.0061864825E+00 19 | 1.4660114630E+01 3.3019438718E+00 20 | 4.9652816307E+01 3.5631576427E+00 21 | -------------------------------------------------------------------------------- /pysoc/data/parameters/mio-1-1-fit/P.basis: -------------------------------------------------------------------------------- 1 | P 0 2 | S 9 1.0 3 | 3.8191988595E-01 6.7256731620E-01 4 | 2.1575619258E-01 5.2293119531E-01 5 | 4.6584260054E+00 -7.3793692298E-01 6 | 1.5570629301E+00 -1.3425321581E+00 7 | 3.8613811414E+00 -1.3851419839E+00 8 | 3.1271216662E+01 2.8231971957E+00 9 | 1.2238610428E+02 4.3778779287E+01 10 | 1.2582343296E+02 -4.0650452299E+01 11 | 3.9069047753E+02 4.0674623813E+00 12 | P 9 1.0 13 | 2.2564161802E-01 2.4967217852E-01 14 | 3.4295502249E-01 8.2522213047E-02 15 | 5.0635138076E-01 4.9688237263E-01 16 | 3.6588962548E+00 -1.0028891021E+00 17 | 2.7433860074E+00 -8.4798654556E-01 18 | 7.1034674396E+00 -3.4109730027E+00 19 | 1.5906569278E+01 -5.8699394197E+00 20 | 1.2984182112E+01 -7.1066968346E-01 21 | 5.2869178857E+01 -1.0858656888E+01 22 | D 6 1.0 23 | 2.1971601526E+00 6.3749823724E-01 24 | 1.8694171293E-01 7.2944693779E-02 25 | 3.6403575024E-01 1.6536681083E-01 26 | 8.3068377214E-01 3.4852338634E-01 27 | 5.3634871855E+00 1.0148030777E+00 28 | 1.5332242343E+01 1.4786445520E+00 29 | -------------------------------------------------------------------------------- /pysoc/data/parameters/mio-1-1-fit/S.basis: -------------------------------------------------------------------------------- 1 | S 0 2 | S 8 1.0 3 | 2.2801528122E-01 4.6643667855E-01 4 | 4.3692862930E-01 8.5000612605E-01 5 | 2.0610754353E+00 -1.7022165277E+00 6 | 5.0938528950E+00 -2.2356941721E+00 7 | 3.5433436207E+01 3.2771426167E+00 8 | 9.8964265215E+01 3.3382744542E+01 9 | 9.6624699276E+01 -2.9092738368E+01 10 | 5.5316367701E+02 4.0823982325E+00 11 | P 8 1.0 12 | 2.2665780164E-01 1.8514956793E-01 13 | 3.9336265457E-01 3.5181491571E-01 14 | 7.1225563200E-01 5.3680513851E-01 15 | 3.5061808912E+00 -1.8026267105E+00 16 | 7.8358774475E+00 -4.1136787440E+00 17 | 2.0656995947E+01 -8.9996274422E+00 18 | 9.4431185247E+00 -1.0285352445E+00 19 | 7.2138290719E+01 -1.2581441992E+01 20 | D 7 1.0 21 | 1.8786756811E-01 6.6406410682E-02 22 | 7.9733694602E-01 3.8919634172E-01 23 | 3.5820480100E-01 1.5947521936E-01 24 | 1.9082996710E+00 7.0137569104E-01 25 | 4.7925523725E+00 1.3810011708E+00 26 | 8.7305655092E+00 2.0772388151E-01 27 | 1.6298133873E+01 2.3014493278E+00 28 | -------------------------------------------------------------------------------- /pysoc/io/__init__.py: -------------------------------------------------------------------------------- 1 | from pysoc.io.molsoc import Molsoc 2 | from .gaussian import Gaussian_parser 3 | from .dftb_plus import DFTB_plus_parser 4 | 5 | def parser_from_program(self, program): 6 | """ 7 | Get an Output_parser class appropriate to a QM program. 8 | 9 | :param program: The name of a supported program (either 'Gaussian' or 'DFTB+'). 10 | """ 11 | if program == "Gaussian": 12 | return Gaussian_parser 13 | elif program == "DFTB+": 14 | return DFTB_plus_parser 15 | else: 16 | # Unrecognised. 17 | raise Exception("Unknown or unrecognised program name '{}'".format(program)) -------------------------------------------------------------------------------- /pysoc/io/file.py: -------------------------------------------------------------------------------- 1 | import os 2 | def read_file(file_name, start_str, num_lines = 1, remaining_fields = 1): 3 | """ 4 | Read a given file and return a subsection of the contained data. 5 | 6 | The data is assumed to be in a tabular form, with each record separated by whitespace. 7 | The start of the tabular data will be the line following the line containing the string start_str. 8 | num_lines of data will then be read and split() 9 | Finally, if remaining_fields is not 0, one more row of data will be read in and then split(), with remaining_fields items from the resulting list being appended to the total data. 10 | The obtained data will then be returned (as a 1D list). 11 | 12 | :param file_name: Name/path to the file to read in. 13 | :param start_str: A string from which reading should start from. The returned data will start from the line after start_str is first encountered. 14 | :param num_lines: The number of complete lines to read. 15 | :param remaining_fields: The number of remaining records to read after num_lines. 16 | :return: The processed data (as a 1D list). 17 | """ 18 | # The data we will return, a 1D list of extracted fields. 19 | data_out = [] 20 | 21 | # Start reading. 22 | with open(file_name, 'r') as file: 23 | 24 | # Read through our file until we encounter our start string. 25 | for line_num, line in enumerate(file): 26 | if start_str in line: 27 | break 28 | 29 | # Now read in our file line-by-line 30 | for line_num, line in enumerate(file): 31 | data_out.extend(line.split()) 32 | 33 | # Stop if we've read enough. 34 | if line_num == (num_lines -1): 35 | break 36 | 37 | # Finally, read one more line if we've been asked to. 38 | if remaining_fields != 0: 39 | for line in file: 40 | data_out.extend(line.split()[0:remaining_fields]) 41 | break 42 | 43 | # All done. 44 | return data_out 45 | 46 | 47 | def write_file(data, file_name, style = "{}"): 48 | """ 49 | Write to a specified data file. 50 | 51 | :param data: The data to write (a 1D list). 52 | :param file_name: The file to write to. 53 | :param style: A formatting string which describes how to write each item in data to the given file. 54 | """ 55 | # Open our file. 56 | with open(file_name, "w") as file: 57 | for line in data: 58 | # Write each line according to the specified line_style. 59 | file.write(style.format(line)) 60 | 61 | 62 | def check_file_exist(*file_names): 63 | """ 64 | Determine whether a (number of) files exists or not. 65 | 66 | :param file_name: List of paths of the files to check. If any of the files do not exist, an exception will be raised. 67 | """ 68 | for file_name in file_names: 69 | if not os.path.isfile(file_name): 70 | # TODO: Better exception type? 71 | raise Exception("Required file '{}' does not exist".format(file_name)) 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /pysoc/program/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gaox-qd/pysoc/1a520c682f4851a8ec6e551a04ec5cc89ebc2894/pysoc/program/__init__.py -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | scipy 2 | periodictable 3 | tabulate 4 | cclib 5 | -------------------------------------------------------------------------------- /soc_td/Makefile: -------------------------------------------------------------------------------- 1 | PROG = soc_td 2 | SRCS = soc_td.f90 init_prep.f90 data_input.f90 prec_mod.f90 soc_mo.f90 dip_mo.f90 basis_match.f90 norm_mo.f90 soc_state.f90 trans_dipole.f90 3 | 4 | OBJS = soc_td.o init_prep.o data_input.o prec_mod.o soc_mo.o dip_mo.o basis_match.o norm_mo.o soc_state.o trans_dipole.o 5 | 6 | #LIBDIR = /opt/intel/composer_xe_2013_sp1.2.144/mkl/lib/intel64 7 | LIBDIR = /opt/intel/oneapi/compiler/2021.1-beta10/linux/lib/x64 8 | INCLUDEDIR = 9 | LIBS = -Wl,--start-group $(LIBDIR)/libmkl_intel_ilp64.a\ 10 | $(LIBDIR)/libmkl_core.a $(LIBDIR)/libmkl_sequential.a\ 11 | -Wl,--end-group\ 12 | -lpthread -lm 13 | LIBS = 14 | 15 | F90 =ifort 16 | #F90 = gfortran 17 | F90FLAGS = -O -heap-arrays 1024 18 | 19 | all: $(PROG) 20 | 21 | $(PROG): $(OBJS) 22 | $(F90) -o $@ $(OBJS) $(LIBS) 23 | 24 | clean: 25 | rm -f $(PROG) $(OBJS) *.mod 26 | 27 | .SUFFIXES: $(SUFFIXES) .f90 28 | .f90.o: 29 | $(F90) $(F90FLAGS) -c $< 30 | 31 | #soc_td.o: prec_mod.o data_input.o init_prep.o 32 | soc_td.o: init_prep.o soc_mo.o dip_mo.o basis_match.o norm_mo.o soc_state.o trans_dipole.o 33 | data_input.o: prec_mod.o 34 | init_prep.o: data_input.o prec_mod.o 35 | soc_mo.o: prec_mod.o data_input.o init_prep.o 36 | dip_mo.o: prec_mod.o data_input.o init_prep.o 37 | basis_match.o: prec_mod.o data_input.o init_prep.o 38 | norm_mo.o: prec_mod.o data_input.o init_prep.o 39 | soc_state.o: prec_mod.o data_input.o init_prep.o soc_mo.o 40 | trans_dipole.o: prec_mod.o data_input.o init_prep.o dip_mo.o 41 | 42 | 43 | -------------------------------------------------------------------------------- /soc_td/data_input.f90: -------------------------------------------------------------------------------- 1 | module data_input 2 | 3 | use prec_mod 4 | implicit none 5 | 6 | !private 7 | 8 | !public :: contrl, soc_ao, ci_coeff, mo_coeff, mo_ene 9 | 10 | type contrl 11 | integer :: n_singl, n_tripl 12 | integer :: num_bov(3), tbcart_bov(3) 13 | integer,allocatable :: root_s(:,:), root_t(:,:) 14 | real(dpr),allocatable :: ene_s(:), ene_t(:) 15 | character(len=10) :: do_s0 16 | character(len=10) :: do_dip 17 | character(len=20) :: qm_flag 18 | real(dpr) :: coeff_thresh 19 | end type 20 | 21 | type ao 22 | integer :: nc, nb 23 | integer, allocatable :: nsh(:) 24 | end type 25 | 26 | type soc_ao 27 | real(dpr),allocatable :: gto(:) 28 | real(dpr),allocatable :: tbgto(:) 29 | end type 30 | 31 | type dip_ao 32 | real(dpr),allocatable :: gto(:) 33 | real(dpr),allocatable :: tbgto(:) 34 | end type 35 | 36 | type overlp_ao 37 | real(dpr),allocatable :: gto(:) !from third party QM code 38 | real(dpr),allocatable :: tbgto(:) !base matching output 39 | real(dpr),allocatable :: molsoc(:) !from MolSOC 40 | real(dpr),allocatable :: molout(:) !base matching output 41 | end type 42 | 43 | type ci_coeff 44 | real(dpr),allocatable :: mix_all(:) 45 | real(dpr),allocatable :: xpy(:) 46 | real(dpr),allocatable :: xmy(:) 47 | end type 48 | 49 | real(dpr),allocatable :: mo_coeff(:) 50 | real(dpr),allocatable :: mo_ene(:) 51 | 52 | end module data_input 53 | 54 | -------------------------------------------------------------------------------- /soc_td/dip_mo.f90: -------------------------------------------------------------------------------- 1 | module dip_mo 2 | 3 | use prec_mod 4 | use data_input 5 | use init_prep 6 | 7 | implicit none 8 | 9 | real(dpr), allocatable :: dip_moint(:,:,:) 10 | 11 | contains 12 | 13 | subroutine cal_dip_moint(aoint_temp, mo_coeff_temp0) 14 | 15 | integer :: i, k 16 | real(dpr) :: aoint_temp(input%num_bov(1),input%num_bov(1),3) 17 | real(dpr) :: mo_coeff_temp0(input%num_bov(1),ndim1) 18 | real(dpr) :: mo_coeff_temp(input%num_bov(1),ndim1) 19 | real(dpr), allocatable :: tp_mo_coeff_temp(:,:) 20 | 21 | allocate(dip_moint(ndim1, ndim1, 3)) 22 | allocate(tp_mo_coeff_temp(ndim1, input%num_bov(1))) 23 | 24 | tp_mo_coeff_temp = transpose(mo_coeff_temp0) 25 | 26 | k = input%num_bov(1) 27 | do i=1, 3 28 | mo_coeff_temp = matmul(aoint_temp(:,:,i), mo_coeff_temp0) 29 | dip_moint(:,:,i) = matmul(tp_mo_coeff_temp, mo_coeff_temp) 30 | print *, "aoint_temp_diag", aoint_temp(k,k,i) 31 | print *, "aoint_temp_symm", aoint_temp(k,k-1,i), aoint_temp(k-1,k,i) 32 | print *, "aoint_temp_size", size(aoint_temp(:,1,i)), size(aoint_temp(:,:,i)) 33 | print *, "dip_moint_diag", dip_moint(1,1,i), dip_moint(ndim1,ndim1,i) 34 | print *, "dip_moint_size", size(dip_moint(:,1,i)), size(dip_moint(:,:,i)) 35 | print *, "dip_moint_symm", dip_moint(ndim1,ndim1-1,i), dip_moint(ndim1-1,ndim1,i) 36 | enddo 37 | dip_moint = au2debye*dip_moint 38 | 39 | deallocate(tp_mo_coeff_temp) 40 | end subroutine cal_dip_moint 41 | 42 | end module dip_mo 43 | -------------------------------------------------------------------------------- /soc_td/norm_mo.f90: -------------------------------------------------------------------------------- 1 | module norm_mo 2 | 3 | use prec_mod 4 | use data_input 5 | use init_prep 6 | 7 | implicit none 8 | 9 | real(dpr), allocatable :: overlap_mo(:,:) 10 | 11 | contains 12 | 13 | subroutine check_norm_mo(overlap_temp, mo_coeff_temp) 14 | 15 | integer :: i, j, k, np 16 | real(dpr) :: overlap_temp(*) 17 | real(dpr) :: mo_coeff_temp(input%num_bov(1),ndim1) 18 | !real(dpr) :: mo_coeff_temp0(input%num_bov(1),ndim1) 19 | real(dpr) :: overlap_direct(ndim1,ndim1) 20 | real(dpr) :: diag_ele 21 | 22 | real(dpr), allocatable :: overlap_matr(:,:) 23 | real(dpr), allocatable :: tp_mo_coeff_temp(:,:) 24 | 25 | print *, "input%num_bov(1),ndim1", input%num_bov(1),ndim1 26 | allocate(overlap_mo(ndim1,ndim1)) 27 | allocate(overlap_matr(input%num_bov(1),input%num_bov(1))) 28 | allocate(tp_mo_coeff_temp(ndim1, input%num_bov(1))) 29 | print *, "hello1, norm_mo.f90" 30 | overlap_mo = 0.0 31 | overlap_matr = 0.0 32 | if (input%qm_flag /= 'tddftb') then 33 | k = input%num_bov(1)**2 34 | overlap_matr = reshape(overlap_temp(1:k), (/input%num_bov(1),input%num_bov(1)/)) 35 | np = 0 36 | do i=1, input%num_bov(1) 37 | do j=1, i 38 | np = np + 1 39 | !print *, "np,j,i", np, j, i 40 | !overlap_matr(i,j) = overlap_temp(np) 41 | !overlap_matr(j,i) = overlap_matr(i,j) 42 | enddo 43 | enddo 44 | else 45 | k = input%num_bov(1)**2 46 | overlap_matr = reshape(overlap_temp(1:k), (/input%num_bov(1),input%num_bov(1)/)) 47 | endif 48 | print *, "hello2, norm_mo.f90" 49 | 50 | !print *, "mo_coeff_temp1", mo_coeff_temp(1,1), mo_coeff_temp(2,1) 51 | !print *, "mo_coeff_temp1", mo_coeff_temp(input%num_bov(1)-1,ndim1), mo_coeff_temp(input%num_bov(1),ndim1) 52 | tp_mo_coeff_temp = transpose(mo_coeff_temp) 53 | !print *, "mo_coeff_temp2", mo_coeff_temp(1,1), mo_coeff_temp(2,1) 54 | !print *, "mo_coeff_temp2", mo_coeff_temp(input%num_bov(1)-1,ndim1), mo_coeff_temp(input%num_bov(1),ndim1) 55 | !print *, "tp_mo_coeff_temp", tp_mo_coeff_temp(1,1), tp_mo_coeff_temp(1,2) 56 | !print *, "tp_mo_coeff_temp", tp_mo_coeff_temp(ndim1,input%num_bov(1)-1), tp_mo_coeff_temp(ndim1, input%num_bov(1)) 57 | !mo_coeff_temp = matmul(overlap_matr, mo_coeff_temp) 58 | tp_mo_coeff_temp = matmul(tp_mo_coeff_temp, overlap_matr) 59 | overlap_mo = matmul(tp_mo_coeff_temp, mo_coeff_temp) 60 | print *, "hello3, norm_mo.f90" 61 | print *, "overlap_ao_diag" , overlap_matr(1,1), overlap_matr(input%num_bov(1),input%num_bov(1)) 62 | print *, "overlap_ao_offdiag" , overlap_matr(1,2), overlap_matr(2,1) 63 | print *, "overlap_mo_diag", overlap_mo(1,1), overlap_mo(ndim1,ndim1) 64 | print *, "overlap_mo_offdiag", overlap_mo(1,2), overlap_mo(2,1) 65 | 66 | do i=1, ndim1 67 | diag_ele = overlap_mo(i,i) - 1.0 68 | if( abs(diag_ele) > 1.0e-3) then 69 | print *, "mo normalization problem, check the MO reading", diag_ele 70 | stop 71 | endif 72 | enddo 73 | 74 | deallocate(overlap_matr, tp_mo_coeff_temp) 75 | 76 | end subroutine check_norm_mo 77 | 78 | end module norm_mo 79 | -------------------------------------------------------------------------------- /soc_td/prec_mod.f90: -------------------------------------------------------------------------------- 1 | !=================================================================================================================================== 2 | ! Date (last update): 15/07/2014 Status: Finished + Tested | 3 | !----------------------------------------------------------------------------------------------------------------------------------- 4 | ! This module explicitly sets up symbolic kind types for most used variables, i.e. integers, reals, complex, logical and | 5 | ! user-defined... | 6 | !--------------------------------------------------------- C 132 ------------------------------------------------------------------- 7 | module prec_mod 8 | implicit none 9 | public 10 | ! SYMBOLIC NAMES FOR KIND TYPES OF INTEGERS: 11 | ! integer, parameter :: i1b = selected_int_kind(2) ! 1-byte 12 | ! integer, parameter :: i2b = selected_int_kind(4) ! 2-bytes 13 | ! integer, parameter :: i4b = selected_int_kind(9) ! 4-bytes 14 | ! SYMBOLIC NAMES FOR KIND TYPES OF REALS: 15 | integer, parameter :: spr = kind(1.0) ! single precision 16 | integer, parameter :: dpr = kind(1.d0) ! double precision 17 | integer, parameter :: qpr = selected_real_kind(2*precision(1.0_dpr)) ! quadruple precision 18 | ! SYMBOLIC NAMES FOR KIND TYPES OF COMPLEX: 19 | integer, parameter :: spc = kind((1.0_spr, 1.0_spr)) ! single precision complex 20 | integer, parameter :: dpc = kind((1.0_dpr, 1.0_dpr)) ! double precision complex 21 | integer, parameter :: qpc = kind((1.0_qpr, 1.0_qpr)) ! quadruple precision complex 22 | ! SYMBOLIC NAME FOR KIND TYPE OF DEFAULT LOGICAL: 23 | ! integer, parameter :: lgc = kind(.true.) 24 | ! USER-DEFINED TYPE OF VARIABLES: 25 | type spin_orb 26 | integer :: numb 27 | character(len=1) :: spin 28 | end type spin_orb 29 | 30 | real(dpr), parameter :: fine_stru = 7.297352568D-3 31 | !au2debye 1a.u.=h_bar**2/(m_e*e) 32 | real(dpr), parameter :: au2debye = 2.54174780119995 33 | !hartree2wavenumbers = 219474.6 34 | real(dpr), parameter :: au2wavnum = 219474.6 35 | real(dpr), parameter :: au2ev = 27.21138505 36 | real(dpr), parameter :: pi = 3.14159265359 37 | real(dpr), parameter :: r_pi = 0.28209479177 !0.5 * 1.0/sqrt(pi) 38 | 39 | end module prec_mod 40 | -------------------------------------------------------------------------------- /soc_td/soc_mo.f90: -------------------------------------------------------------------------------- 1 | module soc_mo 2 | 3 | use prec_mod 4 | use data_input 5 | use init_prep 6 | 7 | implicit none 8 | 9 | real(dpr), allocatable :: soc_moint(:,:,:) 10 | 11 | 12 | contains 13 | 14 | subroutine cal_soc_moint(aoint_temp, mo_coeff_temp0) 15 | 16 | integer :: i, k, j 17 | real(dpr) :: diag_ele 18 | real(dpr) :: aoint_temp(input%num_bov(1),input%num_bov(1),3) 19 | real(dpr) :: mo_coeff_temp0(input%num_bov(1),ndim1) 20 | real(dpr) :: mo_coeff_temp(input%num_bov(1),ndim1) 21 | real(dpr), allocatable :: tp_mo_coeff_temp(:,:) 22 | 23 | print *, "input%num_bov(1), ndim1" , input%num_bov(1), ndim1 24 | print *, "mo_coeff1", mo_coeff_temp0(input%num_bov(1),ndim1) 25 | print *, "mo_coeff2", mo_coeff_temp0(input%num_bov(1),1) 26 | print *, "mo_coeff3", mo_coeff_temp0(1,1) 27 | print *, "mo_coeff4", mo_coeff_temp0(2,1) 28 | !print *, "mo_coeff,2,33", mo_coeff_temp0(2,33) 29 | !print *, "mo_coeff,3,35", mo_coeff_temp0(3,35) 30 | allocate(soc_moint(ndim1, ndim1, 3)) 31 | !allocate(aoint_temp(input%num_bov(1), input%num_bov(1), 3)) 32 | !allocate(mo_coeff_temp(input%num_bov(1), ndim1)) 33 | allocate(tp_mo_coeff_temp(ndim1, input%num_bov(1))) 34 | 35 | !aoint_temp(1:input%num_bov(1),1:input%num_bov(1),1:3) = aoint%gto(:) 36 | !mo_coeff_temp(1,1) = mo_coeff(1) 37 | tp_mo_coeff_temp = transpose(mo_coeff_temp0) 38 | 39 | k = input%num_bov(1) 40 | do i=1, 3 41 | mo_coeff_temp = matmul(aoint_temp(:,:,i), mo_coeff_temp0) 42 | soc_moint(:,:,i) = matmul(tp_mo_coeff_temp, mo_coeff_temp) 43 | print *, "aoint_temp_diag", aoint_temp(k,k,i) 44 | print *, "aoint_temp_symm", aoint_temp(k,k-1,i), aoint_temp(k-1,k,i) 45 | print *, "aoint_temp_size", size(aoint_temp(:,1,i)), size(aoint_temp(:,:,i)) 46 | print *, "soc_moint_diag", soc_moint(ndim1,ndim1,i), soc_moint(ndim1/2,ndim1/2,i) 47 | print *, "soc_moint_size", size(soc_moint(:,1,i)), size(soc_moint(:,:,i)) 48 | print *, "soc_moint_symm", soc_moint(ndim1,ndim1-1,i), soc_moint(ndim1-1,ndim1,i) 49 | enddo 50 | soc_moint = 0.5*fine_stru**2*soc_moint 51 | !print *, "soc_moint(33,35)",soc_moint(33,35,1:3), soc_moint(35,33,1:3) 52 | do k=1, 3 53 | do j=1, ndim1 54 | do i=j, ndim1 55 | if(abs(soc_moint(i,j,k)) > 1.0e-4) then 56 | ! print *, "soc_moint(i,j,k)", soc_moint(i,j,k), i,j,k 57 | ! print *, "soc_moint(j,i,k)", soc_moint(j,i,k), j,i,k 58 | endif 59 | enddo 60 | diag_ele = soc_moint(j,j,k) 61 | if( abs(diag_ele) > 1.0e-5) then 62 | print *, "soc mo integral diagional: ", diag_ele 63 | stop 64 | endif 65 | enddo 66 | enddo 67 | deallocate(tp_mo_coeff_temp) 68 | end subroutine cal_soc_moint 69 | 70 | end module soc_mo 71 | -------------------------------------------------------------------------------- /soc_td/soc_td.f90: -------------------------------------------------------------------------------- 1 | program soc_td 2 | 3 | use init_prep 4 | use soc_mo 5 | use dip_mo 6 | use norm_mo 7 | use basis_match 8 | use soc_state 9 | use trans_dipole 10 | 11 | implicit none 12 | 13 | !read soc_td_input.dat 14 | call read_input() 15 | print *, "input", input%ene_t(:) 16 | print *, "root_s", input%root_s 17 | print *, "root_t", input%root_t 18 | !read basis information 19 | call read_ao_orb() 20 | !soc_int.dat 21 | call read_soc_ao() 22 | !mo_coeff.dat 23 | !mo_ene.dat 24 | call read_mo() 25 | call read_ci_coeff() 26 | !ci_coeff.dat 27 | print *, "ci_size", size(td_coeff%mix_all) 28 | print *, "mo_coeff_i", mo_coeff(1) 29 | print *, "mo_coeff_i", mo_coeff(ndim1*input%num_bov(1)) 30 | 31 | call read_overlp_ao() !from QM code 32 | print *, "hello0" 33 | !call check_norm_mo(overlpint%gto, mo_coeff) 34 | print *, "hello1" 35 | if (input%qm_flag /= 'tddftb') then 36 | !match AO integral(from molsoc) orders with MO coeffs(from QM code) 37 | !dxx,dyy,dzz,dxy,dxz,dyz in Gaussian 38 | !while dxx,dxy,dxz,dyy,dyz,dzz in MolSOC 39 | call basmatch_matr(overlpint%gto, input%num_bov(1), 1) 40 | call check_norm_mo(overlpint%gto, mo_coeff) 41 | call basmatch_matr(aoint%gto, input%num_bov(1), 3) 42 | else 43 | !Cartesian to spherical GTOs for tddftb 44 | call basmatch_tb(aoint%tbgto, input%tbcart_bov(1), 3,& 45 | aoint%gto, input%num_bov(1)) 46 | !convert overlap integral from molsoc, then compare it with that from DFTB+ output(oversqr.dat) 47 | call basmatch_tb(overlpint%molsoc, input%tbcart_bov(1), 1,& 48 | overlpint%molout, input%num_bov(1)) 49 | 50 | endif 51 | !stop 52 | !MO integral for SOC 53 | call cal_soc_moint(aoint%gto, mo_coeff) 54 | 55 | call statint() 56 | !stop 57 | 58 | !transition dipole 59 | if(input%do_dip == "True") then 60 | print *, "calculation of transition dipole" 61 | call read_dip_ao() !from molsoc 62 | if (input%qm_flag /= 'tddftb') then 63 | call basmatch_matr(dipint%gto, ao_orb%nb, 3) !3 means x,y,z 64 | else 65 | call basmatch_tb(dipint%tbgto, input%tbcart_bov(1), 3,& 66 | dipint%gto, input%num_bov(1)) 67 | !checked with Gaussian output 68 | endif 69 | call cal_dip_moint(dipint%gto, mo_coeff) 70 | call dip_state() 71 | deallocate(dip_moint, dip_singl, dip_tripl) 72 | endif 73 | 74 | deallocate(input%root_s,input%ene_s) 75 | deallocate(input%root_t,input%ene_t) 76 | deallocate(soc_statint) 77 | end program 78 | -------------------------------------------------------------------------------- /soc_td/test.f90: -------------------------------------------------------------------------------- 1 | program test 2 | 3 | print *, int(20.0/0.05) 4 | 5 | end program 6 | 7 | --------------------------------------------------------------------------------