├── gui ├── graphspage.qml ├── gui_mcmd_linux ├── gui_mcmd_macos ├── images │ ├── lineedit.png │ ├── mof+co2.png │ ├── badbenzene.png │ └── mof5-hexagonal-angle.png ├── NOTES_TO_SELF ├── qtquickcontrols2.conf ├── qml.qrc ├── Info.plist ├── viz.cpp ├── backend.cpp ├── viz.h ├── backend.h ├── InputLine.qml ├── gui_mcmd.pro ├── main.cpp ├── main_old_copy.qml ├── .qmake.stash ├── fileio.h ├── moc_viz.cpp ├── fileio.cpp └── moc_backend.cpp ├── precompiled ├── mac │ ├── mcmd_mac │ └── mcmd_mac_openmp ├── linux │ ├── mcmd_linux │ ├── mcmd_linux_cuda │ └── mcmd_linux_openmp └── windows │ └── mcmd_windows.exe ├── src ├── cmake_config.h ├── cmake_config.h.in ├── nosehoover.txt ├── usefulmath.cpp ├── rotatepoint.cpp ├── system.cpp ├── mixing.cpp ├── pairs.cpp ├── mc.cpp ├── commy.cpp ├── potential.cpp ├── distance.cpp ├── md.cpp ├── boltzmann.cpp ├── observables.cpp ├── radial_dist.cpp ├── compile.sh └── tt.cpp ├── atomfiles ├── h2o.xyz ├── README.md ├── H2O_4_TIP3P.pdb ├── tetracycline_wonky.xyz ├── acetylene10.pqr ├── Ar100.pdb ├── He100.pdb ├── Kr100.pdb ├── Ne100.pdb └── Rn100.pdb ├── mcmd_top_downloaded_adv_theor_sim_2018-2019.pdf ├── cloc-git.sh ├── examples ├── optimization │ ├── RuBpy │ │ └── mcmd.inp │ ├── tetracycline │ │ └── mcmd.inp │ ├── heme-protein │ │ └── mcmd.inp │ └── BigMOF │ │ └── mcmd.inp ├── single_point │ ├── h2o │ │ └── mcmd.inp │ └── RuBpy │ │ └── mcmd.inp ├── molecular_dynamics │ ├── polarized │ │ ├── h2_nve │ │ │ └── mcmd.inp │ │ ├── h2o_nve_flexible │ │ │ └── mcmd.inp │ │ └── h2o_nvt │ │ │ └── mcmd.inp │ ├── tang_toennies │ │ └── mcmd.inp │ ├── MOF+drug │ │ └── mcmd.inp │ ├── Ar_box │ │ └── mcmd.inp │ ├── multisorb │ │ └── mcmd.inp │ ├── omp │ │ └── mcmd.inp │ ├── cuda │ │ ├── nvt │ │ │ └── mcmd.inp │ │ ├── water_octane_SMALL │ │ │ └── mcmd.inp │ │ └── water_octane_BIG │ │ │ └── mcmd.inp │ ├── flexible_MOF │ │ └── mcmd.inp │ ├── flexible_MOF_input_FF │ │ └── mcmd.inp │ ├── external_force │ │ └── mcmd.inp │ ├── nve │ │ └── mcmd.inp │ ├── nvt │ │ └── mcmd.inp │ ├── uvt │ │ └── mcmd.inp │ └── manual_init_vel │ │ └── mcmd.inp ├── monte_carlo │ ├── tang_toennies │ │ └── mcmd.inp │ ├── npt │ │ └── mcmd.inp │ ├── omp │ │ └── mcmd.inp │ ├── nvt │ │ └── mcmd.inp │ ├── nve │ │ └── mcmd.inp │ ├── uvt │ │ └── mcmd.inp │ ├── multisorb │ │ └── mcmd.inp │ └── nopbc │ │ └── mcmd.inp ├── generate_LAMMPS_input │ └── mcmd.inp ├── scale_charges │ └── mcmd.inp ├── write_xyz_traj │ └── mcmd.inp ├── half_A_matrix │ └── mcmd.inp ├── simulated_annealing │ └── mcmd.inp ├── crystal_fragment_builder │ └── mcmd.inp └── manual_parameters │ └── mcmd.inp ├── gitnotes.txt ├── .gitignore ├── CMakeLists.txt ├── .github └── workflows │ └── cmake.yml └── README.md /gui/graphspage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.4 2 | 3 | 4 | Form { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /gui/gui_mcmd_linux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/gui/gui_mcmd_linux -------------------------------------------------------------------------------- /gui/gui_mcmd_macos: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/gui/gui_mcmd_macos -------------------------------------------------------------------------------- /gui/images/lineedit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/gui/images/lineedit.png -------------------------------------------------------------------------------- /gui/images/mof+co2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/gui/images/mof+co2.png -------------------------------------------------------------------------------- /gui/images/badbenzene.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/gui/images/badbenzene.png -------------------------------------------------------------------------------- /precompiled/mac/mcmd_mac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/precompiled/mac/mcmd_mac -------------------------------------------------------------------------------- /precompiled/linux/mcmd_linux: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/precompiled/linux/mcmd_linux -------------------------------------------------------------------------------- /src/cmake_config.h: -------------------------------------------------------------------------------- 1 | /* #undef OMP */ 2 | /* #undef MPI */ 3 | /* #undef CUDA */ 4 | /* #undef WINDOWS */ 5 | -------------------------------------------------------------------------------- /src/cmake_config.h.in: -------------------------------------------------------------------------------- 1 | #cmakedefine OMP 2 | #cmakedefine MPI 3 | #cmakedefine CUDA 4 | #cmakedefine WINDOWS 5 | -------------------------------------------------------------------------------- /precompiled/linux/mcmd_linux_cuda: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/precompiled/linux/mcmd_linux_cuda -------------------------------------------------------------------------------- /precompiled/mac/mcmd_mac_openmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/precompiled/mac/mcmd_mac_openmp -------------------------------------------------------------------------------- /gui/images/mof5-hexagonal-angle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/gui/images/mof5-hexagonal-angle.png -------------------------------------------------------------------------------- /precompiled/linux/mcmd_linux_openmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/precompiled/linux/mcmd_linux_openmp -------------------------------------------------------------------------------- /precompiled/windows/mcmd_windows.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/precompiled/windows/mcmd_windows.exe -------------------------------------------------------------------------------- /atomfiles/h2o.xyz: -------------------------------------------------------------------------------- 1 | 3 2 | 3 | O 0.0 0.0 0.0 -0.807806 4 | H 0 0.58588 0.75695 0.403903 5 | H 0 0.58588 -0.75695 0.403903 6 | -------------------------------------------------------------------------------- /mcmd_top_downloaded_adv_theor_sim_2018-2019.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/khavernathy/mcmd/HEAD/mcmd_top_downloaded_adv_theor_sim_2018-2019.pdf -------------------------------------------------------------------------------- /gui/NOTES_TO_SELF: -------------------------------------------------------------------------------- 1 | 1) NEVER CHANGE MAKEFILE ON GITHUB. The makefile should be unique for local systems 2 | 3 | 2) 4 | make clean 5 | qmake -config release 6 | make 7 | 8 | 9 | will make a Mac bundle with the app. 10 | 11 | 3) 12 | -------------------------------------------------------------------------------- /cloc-git.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | theurl="https://github.com/khavernathy/mcmd" 4 | 5 | git clone --depth 1 $theurl temp-linecount-repo && 6 | printf "('temp-linecount-repo' will be deleted automatically)\n\n\n" && 7 | cloc temp-linecount-repo && 8 | rm -rf temp-linecount-repo 9 | -------------------------------------------------------------------------------- /examples/optimization/RuBpy/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Optimization of a RuBpy (+2) complex 3 | 4 | mode opt 5 | name rubpy 6 | 7 | bondlength 1.9 8 | opt_error 0.0001 9 | opt_step_limit 10000 10 | opt_mode sd 11 | 12 | 13 | 14 | input_atoms ../../../atomfiles/RuBpy.pdb 15 | -------------------------------------------------------------------------------- /examples/optimization/tetracycline/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Optimization of the drug molecule tetracycline 3 | 4 | 5 | mode opt 6 | name tetra 7 | 8 | bondlength 1.9 9 | opt_error 0.0001 10 | opt_step_limit 10000 11 | opt_mode sd 12 | 13 | 14 | input_atoms_xyz ../../../atomfiles/tetracycline_wonky.xyz 15 | -------------------------------------------------------------------------------- /examples/optimization/heme-protein/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Optimization of a Heme protein 1DVE 3 | ! RAT HEME OXYGENASE-1 4 | 5 | 6 | mode opt 7 | name rat-protein 8 | 9 | bondlength 1.9 10 | opt_error 0.0001 11 | opt_step_limit 10000 12 | opt_mode sd 13 | 14 | 15 | input_atoms_xyz ../../../atomfiles/1dve.xyz 16 | -------------------------------------------------------------------------------- /gui/qtquickcontrols2.conf: -------------------------------------------------------------------------------- 1 | ; This file can be edited to change the style of the application 2 | ; See Styling Qt Quick Controls 2 in the documentation for details: 3 | ; http://doc.qt.io/qt-5/qtquickcontrols2-styles.html 4 | 5 | [Controls] 6 | Style=Default 7 | 8 | [Universal] 9 | Theme=Light 10 | ;Accent=Steel 11 | 12 | [Material] 13 | Theme=Light 14 | ;Accent=BlueGrey 15 | ;Primary=BlueGray 16 | -------------------------------------------------------------------------------- /examples/single_point/h2o/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Single-point energy calculation of a RuBpy complex 3 | ! Note, for single-point energy calculation to work, 4 | ! All atoms must have real periodic-table names 5 | ! e.g. Cu, not CU or Cu2. 6 | 7 | name h2o_singlepoint_ex 8 | mode sp 9 | input_atoms_xyz ../../../atomfiles/h2o.xyz 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/nosehoover.txt: -------------------------------------------------------------------------------- 1 | 2 | velocity verlet for NVT NoseHoover https://www2.ph.ed.ac.uk/~dmarendu/MVP/MVP03.pdf 3 | Q large, thermostat ineffective; Q small, oscillations too big http://www.wag.caltech.edu/home/jsu/UsersGuide/node18.html 4 | Q->inf goes to NVE http://www2.mpip-mainz.mpg.de/~andrienk/journal_club/thermostats.pdf 5 | suggestion for Q http://www.courses.physics.helsinki.fi/fys/moldyn/lectures/L5.pdf 6 | -------------------------------------------------------------------------------- /examples/single_point/RuBpy/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Single-point energy calculation of a RuBpy complex 3 | ! Note, for single-point energy calculation to work, 4 | ! All atoms must have real periodic-table names 5 | ! e.g. Cu, not CU or Cu2. 6 | 7 | name RuBpy_singlepoint_ex 8 | mode sp 9 | input_atoms ../../../atomfiles/RuBpy.pdb 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/polarized/h2_nve/mcmd.inp: -------------------------------------------------------------------------------- 1 | mode md 2 | ensemble NVE 3 | temperature 100 ! (intial temp, not thermostatted. this is NVE) 4 | 5 | sorbate_name h2_bssp 6 | potential_form ljespolar 7 | 8 | carbasis 50 50 50 90 90 90 9 | 10 | md_dt 2 ! femptosec 11 | md_ft 20 ns 12 | 13 | md_mode molecular ! i.e. rigid rotators 14 | md_rotations on 15 | md_translations on 16 | 17 | md_corrtime 1 18 | 19 | input_atoms input.pdb 20 | -------------------------------------------------------------------------------- /examples/optimization/BigMOF/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, 2017, USF 2 | ! Optimization of the unit-cell of 3 | ! NOTT-112, a MOF with a very large 4 | ! unit cell. 5 | 6 | 7 | mode opt 8 | name NOTT-112_periodic 9 | 10 | bondlength 1.9 11 | opt_error 0.0001 12 | opt_step_limit 10000 13 | opt_mode sd 14 | 15 | 16 | 17 | carbasis 47.005 47.005 47.005 90 90 90 18 | 19 | 20 | input_atoms ../../../atomfiles/NOTT-112_elements.pdb 21 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/tang_toennies/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Using the Tang-Toennies potential for MD simulation 3 | ! 10 Aceytlene molecules parameterized using 4 | ! using the Tang-Toennies potential. 5 | 6 | mode md 7 | name tang_toennies_example 8 | ensemble nvt 9 | temperature 298 10 | md_dt 1 11 | md_ft 100 ps 12 | 13 | rd_lrc on 14 | 15 | input_atoms ../../../atomfiles/acetylene10.pqr 16 | potential_form tt 17 | carbasis 60 60 60 90 90 90 18 | -------------------------------------------------------------------------------- /examples/monte_carlo/tang_toennies/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Using the Tang-Toennies potential for MC simulation 3 | ! This is a big box of acetylene molecules parametrized 4 | ! using the Tang-Toennies potential. 5 | 6 | mode mc 7 | name tang_toennies_example 8 | ensemble nvt 9 | temperature 298 10 | steps 1000 11 | mc_corrtime 10 12 | 13 | rd_lrc on 14 | 15 | input_atoms ../../../atomfiles/acetylene.pqr 16 | potential_form ttes 17 | ewald_kmax 4 18 | carbasis 60 60 60 90 90 90 19 | -------------------------------------------------------------------------------- /gui/qml.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | main.qml 4 | qtquickcontrols2.conf 5 | main_old_copy.qml 6 | images/badbenzene.png 7 | backend.cpp 8 | backend.h 9 | fileio.cpp 10 | fileio.h 11 | main.cpp 12 | images/mof5-hexagonal-angle.png 13 | images/lineedit.png 14 | InputLine.qml 15 | 16 | 17 | -------------------------------------------------------------------------------- /gitnotes.txt: -------------------------------------------------------------------------------- 1 | git pull origin dev:dev <-- pull from "dev" into current branch 2 | git branch -D blah <-- delete branch "blah" 3 | git checkout otherb <-- switch to branch "otherb" 4 | git checkout -b newb <-- create and switch to new branch "newb" 5 | git checkout -b newb origin/obranch <-- download remote existing branch "obranch" to new local branch "newb" 6 | 7 | To catch-up with current live-version of a git repo (overwrite your own): 8 | git remote add upstream https://github.com/whoever/whatever.git 9 | git fetch upstream 10 | git checkout master (git checkout dev) for atomify 11 | git rebase upstream/master ( git rebase upstream/dev) for atomify 12 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/MOF+drug/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! MMPF-6, 2x2x2 with a single 2 | ! Bivalirudin molecule in the 3 | ! main pore. NVT flexible MD 4 | ! Douglas Franz 5 | ! Space group, 2018 6 | 7 | basis1 83.93600 0.00000 0.00000 8 | basis2 -41.96800 72.69070 0.00000 9 | basis3 0.00000 0.00000 34.28600 10 | 11 | ! Uncomment this line to parallelize force calculations. 12 | ! omp 16 13 | 14 | potential_form ljes 15 | ewald_kmax 2 16 | 17 | mode md 18 | ensemble nvt 19 | temperature 298 20 | md_dt 1 21 | md_ft 10 ns 22 | md_mode flexible 23 | md_corrtime 20 24 | 25 | thermostat nose-hoover 26 | 27 | 28 | xyz_traj_option on 29 | big_xyz_traj off 30 | 31 | 32 | auto_center on 33 | input_atoms ../../../atomfiles/MMPF-6+Bivalirudin.pdb 34 | 35 | -------------------------------------------------------------------------------- /gui/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrincipalClass 6 | NSApplication 7 | CFBundleIconFile 8 | 9 | CFBundlePackageType 10 | APPL 11 | CFBundleGetInfoString 12 | Created by Qt/QMake 13 | CFBundleSignature 14 | ???? 15 | CFBundleExecutable 16 | gui_mcmd 17 | CFBundleIdentifier 18 | com.yourcompany.${PRODUCT_NAME:rfc1034identifier} 19 | NOTE 20 | This file was generated by Qt/QMake. 21 | 22 | 23 | -------------------------------------------------------------------------------- /atomfiles/README.md: -------------------------------------------------------------------------------- 1 | If you using any of these force-fields in your research, please cite our work! 2 | 3 | Science is hard, and force-fields are often more difficult to produce for complex materials than simply looking up values in a table. 4 | 5 | Thanks :) 6 | 7 | ``` 8 | https://onlinelibrary.wiley.com/doi/full/10.1002/adts.201900113?casa_token=Oq66FnSB9VYAAAAA%3A3g8o048QMb_K1WMxdZp-eK8JKeBL39vCE25_JLY_zjQ06T35beWg6UDrRqiix7YjCGvOmrddWNwrp0Ue 9 | ``` 10 | 11 | ``` 12 | Franz, Douglas M., et al. "MPMC and MCMD: Free High‐Performance Simulation Software for Atomistic Systems." Advanced Theory and Simulations 2.11 (2019): 1900113. 13 | ``` 14 | 15 | ``` 16 | Franz, D. M. et al. MPMC and MCMD: Free High‐Performance Simulation Software for Atomistic Systems. Adv. Theory Sim., 2019. DOI: 10.1002/adts.201900113 17 | ``` 18 | -------------------------------------------------------------------------------- /gui/viz.cpp: -------------------------------------------------------------------------------- 1 | #include "viz.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include "unistd.h" 7 | 8 | #include 9 | #include 10 | #include 11 | using namespace std; 12 | 13 | Viz::Viz(QObject *parent) : 14 | QObject(parent) 15 | { 16 | 17 | } 18 | 19 | void Viz::openVMD(const QString& traj_name, const QString& exe_path) 20 | { 21 | 22 | // try to open VMD 23 | string command = "/usr/local/bin/vmd"; 24 | command += " -pdb " + exe_path.toStdString() + "/" + traj_name.toStdString(); 25 | system(command.c_str()); 26 | qDebug() << "running openVMD() with CLI command = " + QString::fromStdString(command); 27 | 28 | /* other way 29 | QProcess *process = new QProcess(); 30 | QString file = "/usr/local/bin/vmd -pdb" + traj_name; 31 | process->start(file); 32 | */ 33 | } 34 | -------------------------------------------------------------------------------- /atomfiles/H2O_4_TIP3P.pdb: -------------------------------------------------------------------------------- 1 | ATOM 1 HT h2o M 1 -1.752770 7.859250 -4.727420 default 0.4170 2 | ATOM 2 OT h2o M 1 -1.871140 8.575620 -4.113410 default -0.8340 3 | ATOM 3 HT h2o M 1 -1.746980 9.388710 -4.590600 default 0.4170 4 | ATOM 4 HT h2o M 2 -2.090070 6.957620 -4.921120 default 0.4170 5 | ATOM 5 OT h2o M 2 -2.854070 7.014120 -5.484420 default -0.8340 6 | ATOM 6 HT h2o M 2 -3.625470 6.980620 -4.929320 default 0.4170 7 | ATOM 7 HT h2o M 3 -2.665930 6.111700 -3.476070 default 0.4170 8 | ATOM 8 OT h2o M 3 -1.816200 5.786300 -3.199900 default -0.8340 9 | ATOM 9 HT h2o M 3 -1.744820 4.883110 -3.488810 default 0.4170 10 | ATOM 10 HT h2o M 4 -0.068850 6.740530 -2.796270 default 0.4170 11 | ATOM 11 OT h2o M 4 -0.817170 7.262010 -2.527460 default -0.8340 12 | ATOM 12 HT h2o M 4 -1.348260 7.424680 -3.299340 default 0.4170 13 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/Ar_box/mcmd.inp: -------------------------------------------------------------------------------- 1 | # Douglas Franz 2 | # Space group, USF, 2018 3 | # NVE MD: a box of liquid Ar 4 | # 0.844 = rho* (density in LJ reduced units) 5 | # 1.5 = T* (temperature reduced units) 6 | 7 | 8 | mode md 9 | md_mode molecular 10 | md_rotations off # important for monatomic gas 11 | md_dt 1 12 | md_ft 100 ns 13 | md_corrtime 1 ! # output/traj writes every step 14 | 15 | auto_center on 16 | 17 | ensemble nvt 18 | #md_init_vel 0.00000 19 | temperature 80 # will produce boltzmann-distribution of velocities at startup. 20 | thermostat nose-hoover 21 | nh_q_scale 1.5 # tighten the nose-hoover thermostat 22 | 23 | # omp 8 # can use this to parallelize with OpenMP, if compiled with that feature 24 | 25 | input_atoms input.pdb 26 | 27 | sorbate_name Ar_hogan 28 | 29 | radial_dist on 30 | radial_centroid Ar 31 | radial_counterpart Ar 32 | radial_max_dist 8.5125 33 | 34 | 35 | carbasis 17 17 17 90 90 90 36 | 37 | -------------------------------------------------------------------------------- /examples/generate_LAMMPS_input/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! This is an example of running normal Monte Carlo 3 | ! simulation of H2 in a MOF (MOF-5) 4 | ! except, at startup, LAMMPS MD input files 5 | ! will be written 6 | 7 | 8 | name generate_lammps_ex 9 | mode mc 10 | input_atoms input.pdb 11 | 12 | free_volume 11595.4 13 | 14 | potential_form ljes 15 | xyz_traj_option on 16 | sorbate_name h2_bss 17 | fugacity_single h2 18 | 19 | carbasis 25.669 25.669 25.669 90 90 90 20 | 21 | radial_dist off 22 | 23 | ensemble uvt 24 | mc_corrtime 100 25 | finalstep 1000000 26 | temperature 77 27 | pressure 1.0 28 | insert_factor 0.667 29 | displace_factor 2.5 30 | rotate_angle_factor 360.0 31 | 32 | feynman_hibbs on 33 | fh_order 4 34 | 35 | 36 | # THIS 37 | write_lammps on 38 | 39 | 40 | auto_reject_r 1.5 ! more speedup 41 | -------------------------------------------------------------------------------- /gui/backend.cpp: -------------------------------------------------------------------------------- 1 | #include "backend.h" 2 | 3 | BackEnd::BackEnd(QObject *parent) : 4 | QObject(parent) 5 | { 6 | } 7 | 8 | QString BackEnd::userName() 9 | { 10 | return m_userName; 11 | } 12 | 13 | void BackEnd::setUserName(const QString &userName) 14 | { 15 | if (userName == m_userName) 16 | return; 17 | 18 | m_userName = userName; 19 | emit userNameChanged(); 20 | } 21 | 22 | int BackEnd::outputLineNumber() 23 | { 24 | return m_outputLineNumber; 25 | } 26 | 27 | void BackEnd::setOutputLineNumber(const int &outputLineNumber) 28 | { 29 | if (outputLineNumber == m_outputLineNumber) 30 | return; 31 | 32 | m_outputLineNumber = outputLineNumber; 33 | emit outputLineNumberChanged(); 34 | } 35 | 36 | QList BackEnd::Qst() 37 | { 38 | return m_Qst; 39 | } 40 | 41 | void BackEnd::setQst(QList &Qst) 42 | { 43 | if (Qst == m_Qst) 44 | return; 45 | 46 | m_Qst = Qst; 47 | emit QstChanged(); 48 | } 49 | -------------------------------------------------------------------------------- /gui/viz.h: -------------------------------------------------------------------------------- 1 | #ifndef VIZ_H 2 | #define VIZ_H 3 | 4 | #include 5 | 6 | class Viz : public QObject 7 | { 8 | Q_OBJECT 9 | 10 | public: 11 | // objects 12 | Q_PROPERTY(QString traj_name 13 | READ traj_name 14 | WRITE setTrajName 15 | NOTIFY trajNameChanged) 16 | 17 | explicit Viz(QObject *parent = 0); 18 | 19 | // functions 20 | Q_INVOKABLE void openVMD(const QString& data, const QString& data2); 21 | 22 | 23 | // local objects 24 | QString traj_name() { return mTrajName; }; 25 | 26 | 27 | // setting functions 28 | public slots: 29 | void setTrajName(const QString& traj_name) { mTrajName = traj_name; }; 30 | 31 | 32 | // change signals 33 | signals: 34 | void trajNameChanged(const QString& traj_name); 35 | void error(const QString& msg); 36 | 37 | private: 38 | 39 | 40 | public: 41 | QString mTrajName; 42 | 43 | }; 44 | 45 | 46 | 47 | 48 | 49 | 50 | #endif // VIZ_H 51 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/multisorb/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Molcular dynamics example with multiple gases 3 | ! NVT MOF-5 with 5 gases 4 | 5 | name md_multigas_NVT_example 6 | mode md ! mc or md 7 | checkpoints_option off 8 | 9 | input_atoms ../../../atomfiles/MOF-5+co2+h2+ch4+water+ethane.pdb 10 | 11 | potential_form ljes 12 | com_option off ! center of mass 13 | 14 | sorbate_name co2_phast* h2_bssp ch4_9site* h2o ethane 15 | 16 | carbasis 25.669 25.669 25.669 90 90 90 17 | 18 | temperature 295.0 19 | ensemble nvt 20 | 21 | ewald_kmax 3 22 | histogram off 23 | 24 | 25 | ! MOLECULAR DYNAMICS ONLY =============================== 26 | md_pbc on 27 | md_dt 2 ! fs 28 | md_ft 200000 ! fs 29 | md_corrtime 1 ! steps 30 | md_mode molecular 31 | md_rotations on 32 | 33 | 34 | -------------------------------------------------------------------------------- /examples/monte_carlo/npt/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Example of NPT monte carlo (i.e. the box changes volume) 3 | ! good for finding equilibrated density of bulk gases, etc. 4 | ! 100 Helium atoms at ~STP (STP is really 1 bar, not 1 atm) 5 | ! Note the input file He100.pdb takes advantage of the "default" feature 6 | 7 | 8 | name npt_example 9 | mode mc ! mc or md 10 | checkpoints_option off 11 | rd_lrc on 12 | input_atoms ../../../atomfiles/He100.pdb ! PDB ONLY 13 | potential_form lj 14 | 15 | carbasis 150 150 150 90 90 90 16 | 17 | 18 | ! MONTE CARLO ONLY ====================================== 19 | ensemble npt 20 | 21 | mc_corrtime 100 22 | finalstep 5000000 23 | temperature 273.15 !77.0 ! K 24 | pressure 1.0 ! atm 25 | 26 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 27 | rotate_prob 0.5 28 | displace_factor 2.5 29 | rotate_angle_factor 360.0 30 | 31 | histogram off 32 | 33 | ! ======================================================= 34 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/omp/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Identical to Molecular Dynamics Multisorb example 3 | ! Except OpenMP is used with 8 threads 4 | ! to speed up simulation 5 | 6 | omp 8 7 | 8 | name md_multigas_NVT_example 9 | mode md ! mc or md 10 | checkpoints_option off 11 | 12 | input_atoms ../../../atomfiles/MOF-5+co2+h2+ch4+water+ethane.pdb 13 | 14 | potential_form ljes 15 | com_option off ! center of mass 16 | 17 | sorbate_name co2_phast* h2_bssp ch4_9site* h2o ethane 18 | 19 | carbasis 25.669 25.669 25.669 90 90 90 20 | 21 | temperature 295.0 22 | ensemble nvt 23 | 24 | ewald_kmax 3 25 | histogram off 26 | 27 | 28 | ! MOLECULAR DYNAMICS ONLY =============================== 29 | md_pbc on 30 | md_dt 2 ! fs 31 | md_ft 200000 ! fs 32 | md_corrtime 1 ! steps 33 | md_mode molecular 34 | md_rotations on 35 | 36 | 37 | -------------------------------------------------------------------------------- /examples/monte_carlo/omp/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Identical to Monte Carlo NVT example, 3 | ! Except OpenMP is used with 8 threads 4 | ! To speed up simulation 5 | 6 | omp 8 7 | 8 | name mc_nvt_example 9 | mode mc ! mc or md 10 | checkpoints_option off 11 | 12 | input_atoms ../../../atomfiles/NOTT-112+417H2_BSS.pdb 13 | 14 | potential_form ljes 15 | com_option off ! center of mass 16 | 17 | xyz_traj_option on 18 | 19 | sorbate_name h2_bss 20 | 21 | 22 | carbasis 47.005 47.005 47.005 90 90 90 23 | 24 | 25 | ! MONTE CARLO ONLY ====================================== 26 | ensemble nvt 27 | 28 | mc_pbc on 29 | mc_corrtime 1 30 | finalstep 1000 31 | temperature 77.0 !77.0 ! K 32 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 33 | displace_factor 2.5 34 | rotate_angle_factor 360.0 35 | ! ======================================================= 36 | 37 | auto_reject_option on ! saves time 38 | auto_reject_r 1.6 ! angstroms 39 | 40 | charge_sum_check off 41 | 42 | -------------------------------------------------------------------------------- /gui/backend.h: -------------------------------------------------------------------------------- 1 | #ifndef BACKEND_H 2 | #define BACKEND_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | class BackEnd : public QObject 9 | { 10 | Q_OBJECT 11 | Q_PROPERTY(QString userName READ userName WRITE setUserName NOTIFY userNameChanged) 12 | Q_PROPERTY(int outputLineNumber READ outputLineNumber WRITE setOutputLineNumber NOTIFY outputLineNumberChanged) 13 | Q_PROPERTY(QList Qst READ Qst WRITE setQst NOTIFY QstChanged) 14 | 15 | public: 16 | explicit BackEnd(QObject *parent = nullptr); 17 | 18 | QString userName(); 19 | int outputLineNumber(); 20 | QList Qst(); 21 | 22 | void setUserName(const QString &userName); 23 | void setOutputLineNumber(const int &outputLineNumber); 24 | void setQst(QList &Qst); 25 | 26 | signals: 27 | void userNameChanged(); 28 | void outputLineNumberChanged(); 29 | void QstChanged(); 30 | 31 | private: 32 | QString m_userName; 33 | int m_outputLineNumber; 34 | 35 | 36 | public: 37 | QList m_Qst; 38 | }; 39 | 40 | #endif // BACKEND_H 41 | -------------------------------------------------------------------------------- /examples/monte_carlo/nvt/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! NOTT-112 with 417 H2 molecules (BSS model). Very large volume system. 3 | ! Note the use of auto-reject to skip unphysical (unrealistic) moves 4 | 5 | name mc_nvt_example 6 | mode mc ! mc or md 7 | checkpoints_option off 8 | 9 | input_atoms ../../../atomfiles/NOTT-112+417H2_BSS.pdb 10 | 11 | potential_form ljes 12 | com_option off ! center of mass 13 | 14 | xyz_traj_option on 15 | 16 | sorbate_name h2_bss 17 | 18 | 19 | carbasis 47.005 47.005 47.005 90 90 90 20 | 21 | 22 | ! MONTE CARLO ONLY ====================================== 23 | ensemble nvt 24 | 25 | mc_pbc on 26 | mc_corrtime 1 27 | finalstep 1000 28 | temperature 77.0 !77.0 ! K 29 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 30 | displace_factor 2.5 31 | rotate_angle_factor 360.0 32 | ! ======================================================= 33 | 34 | auto_reject_option on ! saves time 35 | auto_reject_r 1.6 ! angstroms 36 | 37 | charge_sum_check off 38 | 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | Testing 3 | build 4 | CTestTestfile.cmake 5 | *.obj 6 | *.i 7 | #md_test 8 | *.agr 9 | frag* 10 | *.py 11 | md_test/h2mof5 12 | md_test/h2mof5/* 13 | frozen* 14 | thermo* 15 | restart* 16 | runlo* 17 | density* 18 | energy* 19 | traj* 20 | radialdist* 21 | *.swp 22 | src/scratc* 23 | a 24 | b 25 | *.dat* 26 | md_test/te 27 | te 28 | #cloc-git.sh 29 | *.tmp 30 | garbage 31 | garbage/* 32 | mof5_77k.dat 33 | blah.* 34 | *.gif 35 | uvt_test/mncopy 36 | dip 37 | callgrin* 38 | *ods 39 | .~lock* 40 | t 41 | mcmd 42 | *.vmd 43 | histogram.dx 44 | dipoles.dat 45 | *.ods 46 | *.par 47 | *.dat 48 | uvt_test/debug 49 | nvt_test/polartest 50 | uvt_test/2* 51 | uvt_test/mof5 52 | uvt_test/rhtrestart 53 | nvt_test/commy 54 | #*.png 55 | mcmd.dSYM 56 | test_zone 57 | test_zone/* 58 | testzone 59 | testzone/* 60 | lammps.* 61 | src/build-* 62 | src/gui/build-* 63 | src/gui/*.o 64 | src/gui/gui_mcmd.pro.user.* 65 | src/buildgui 66 | saved_data 67 | saved_data/* 68 | saved_data* 69 | src/gui/*app 70 | src/gui/Makefile 71 | src/gui/gui_mcmd.pro.user 72 | CMakeCache.txt 73 | CMakeFiles/ 74 | Makefile 75 | cmake_install.cmake 76 | -------------------------------------------------------------------------------- /src/usefulmath.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #define _USE_MATH_DEFINES 3 | #include 4 | #include 5 | 6 | double dddotprod( double * a, double * b ) { 7 | return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; 8 | } 9 | 10 | double iidotprod( int * a, int * b) { 11 | return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; 12 | } 13 | 14 | double * crossprod( double * a, double * b) { 15 | static double output[3]; 16 | 17 | output[0] = a[1]*b[2] - a[2]*b[1]; 18 | output[1] = a[2]*b[0] - a[0]*b[2]; 19 | output[2] = a[0]*b[1] - a[1]*b[0]; 20 | 21 | return output; 22 | } 23 | 24 | // custom erf^-1(x) 25 | // http://stackoverflow.com/questions/27229371/inverse-error-function-in-c 26 | double erfInverse(double x) { 27 | 28 | double tt1, tt2, lnx, sgn; 29 | sgn = (x < 0) ? -1.0 : 1.0; 30 | 31 | x = (1 -x)*(1 + x); 32 | lnx = log(x); 33 | 34 | tt1 = 2/(M_PI*0.147) + 0.5 * lnx; 35 | tt2 = 1/(0.147) * lnx; 36 | 37 | return (sgn*sqrt(-tt1 + sqrt(tt1*tt1 - tt2))); 38 | } 39 | 40 | double factorial(double f) { 41 | if ( f==0 ) 42 | return 1.0; 43 | return(f * factorial(f - 1)); 44 | } 45 | 46 | 47 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/cuda/nvt/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Example using CUDA GPU acceleration for MD force calc's 3 | ! NOTT-112 + hydrogen gas (quite a big system, ~5000 sites) 4 | ! Remember to compile with CUDA if you want to use this 5 | ! e.g. `bash compile.sh gpu` 6 | 7 | 8 | name gpu_md_ex 9 | mode md ! mc or md 10 | cuda on ! cuda activated here 11 | checkpoints_option off 12 | 13 | input_atoms ../../../../atomfiles/NOTT-112+417H2_BSS.pdb ! PDB ONLY 14 | 15 | potential_form ljes !ljespolar 16 | com_option off ! center of mass 17 | 18 | carbasis 47.005 47.005 47.005 90 90 90 19 | 20 | 21 | temperature 295.0 22 | ensemble nvt 23 | 24 | ! MOLECULAR DYNAMICS ONLY =============================== 25 | md_pbc on 26 | md_dt 0.5 ! fs 27 | md_ft 100 ! fs 28 | md_corrtime 20 ! steps 29 | !md_init_vel 0 ! A / fs 30 | md_mode molecular !atomic 31 | md_rotations on 32 | -------------------------------------------------------------------------------- /examples/monte_carlo/nve/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! NVE monte carlo example, a box w/100 He atoms 3 | 4 | name mc_nve_example 5 | mode mc ! mc or md 6 | checkpoints_option off 7 | input_atoms ../../../atomfiles/He100.pdb ! PDB ONLY 8 | potential_form lj 9 | com_option off ! center of mass 10 | 11 | carbasis 150 150 150 90 90 90 12 | histogram off 13 | 14 | 15 | ! radial distribution option 16 | radial_dist on ! turns on/off radial distribution function. off for speed-up 17 | radial_bin_size 0.1 ! in A 18 | radial_max_dist 10.0 ! in A (maybe a good value is 1/2 box length) 19 | radial_centroid He ! element name 20 | radial_counterpart He ! element name to get distance of w/centroid 21 | radial_file radialdist.dat 22 | 23 | 24 | ! MONTE CARLO ONLY ====================================== 25 | ensemble nve 26 | 27 | total_energy -200.0 !! kelvin. the E in NVE. 28 | mc_corrtime 25 29 | finalstep 5000000 30 | temperature 77 31 | pressure 1.0 32 | 33 | displace_factor 2.5 34 | rotate_angle_factor 360.0 35 | ! ======================================================= 36 | -------------------------------------------------------------------------------- /examples/scale_charges/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! NOTT-112 with 417 H2 molecules (BSS model). Very large volume system. 3 | ! Exact same as Monte Carlo NVT example, but 4 | ! with charge-scaling option (here the charges are reduced to 90%) 5 | 6 | name scale_charges_example 7 | mode mc ! mc or md 8 | checkpoints_option off 9 | 10 | input_atoms ../../atomfiles/NOTT-112+417H2_BSS.pdb 11 | 12 | potential_form ljes 13 | com_option off ! center of mass 14 | 15 | xyz_traj_option on 16 | 17 | sorbate_name h2_bss 18 | 19 | 20 | carbasis 47.005 47.005 47.005 90 90 90 21 | 22 | 23 | ! MONTE CARLO ONLY ====================================== 24 | ensemble nvt 25 | 26 | mc_pbc on 27 | mc_corrtime 10 28 | finalstep 1000 29 | temperature 77.0 !77.0 ! K 30 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 31 | displace_factor 2.5 32 | rotate_angle_factor 360.0 33 | ! ======================================================= 34 | 35 | auto_reject_option on ! saves time 36 | auto_reject_r 1.6 ! angstroms 37 | 38 | 39 | scale_charges 0.9 ! will multiply every atomic charge by 0.9 before simulation. 40 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/cuda/water_octane_SMALL/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! This is an analog of the BIG water+octane example 3 | ! Much less expensive (a little less than half system size) 4 | ! To use CUDA MD, make sure you compile with those features 5 | ! e.g. `bash compile.sh gpu` 6 | 7 | 8 | name cuda_md_water_octane_SMALL 9 | mode md ! mc or md 10 | cuda on 11 | checkpoints_option off 12 | 13 | input_atoms input.pqr 14 | 15 | potential_form ljes !ljespolar 16 | ewald_kmax 3 17 | com_option off ! center of mass 18 | 19 | carbasis 50 50 50 90 90 90 20 | histogram off 21 | manual_cutoff 12.0 22 | 23 | temperature 298.0 24 | thermostat nose-hoover 25 | ensemble nvt 26 | 27 | sorbate_name octane h2o_tip3p 28 | 29 | ! MOLECULAR DYNAMICS ONLY =============================== 30 | md_pbc on 31 | md_dt 1 ! fs 32 | md_ft 5 ns 33 | md_corrtime 10 ! steps 34 | !md_init_vel 0 ! A / fs^2 35 | md_mode molecular 36 | md_rotations on 37 | -------------------------------------------------------------------------------- /examples/write_xyz_traj/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Exact same as Monte Carlo uVT example, except 3 | ! we will write an .xyz trajectory for easier VMD vizualization. 4 | ! In the VMD console, you can use 5 | ! `topo readvarxyz traj.xyz` 6 | ! to read a trajectory with changing number of particles. 7 | 8 | 9 | 10 | name mc_uvt_example 11 | mode mc 12 | input_atoms ../../atomfiles/rht-MOF-9.pdb 13 | 14 | free_volume 11595.4 15 | 16 | xyz_traj_option on 17 | output_traj_xyz traj.xyz 18 | big_xyz_traj on 19 | 20 | potential_form ljespolar 21 | sorbate_name h2_bssp 22 | fugacity_single h2 23 | 24 | carbasis 27.934 27.934 41.081 90 90 90 25 | 26 | radial_dist on 27 | radial_centroid CuC CuL N1 HN H2G 28 | radial_counterpart H2G H2G H2G H2G H2G 29 | 30 | ensemble uvt 31 | mc_corrtime 1 32 | finalstep 1000000 33 | temperature 77 34 | pressure 1.0 35 | insert_factor 0.667 36 | displace_factor 2.5 37 | rotate_angle_factor 360.0 38 | 39 | feynman_hibbs on 40 | fh_order 4 41 | 42 | bias_uptake 2.6 wt% ! based on experiment for quicker equilibration 43 | auto_reject_r 1.5 ! more speedup 44 | -------------------------------------------------------------------------------- /examples/half_A_matrix/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! rht-MOF-9 with hydrogen, to simulate H2 loading 3 | ! Note the use of built-in sorbate via sorbate_name 4 | ! this is exactly the same as the MC uVT example, 5 | ! but here we reduce the size of the Thole A matrix by ~1/2 6 | ! this slows performance but conserves memory. 7 | 8 | name half_A_matrix_example 9 | mode mc 10 | input_atoms ../../atomfiles/rht-MOF-9.pdb 11 | 12 | free_volume 11595.4 13 | 14 | potential_form ljespolar 15 | xyz_traj_option off 16 | sorbate_name h2_bssp 17 | fugacity_single h2 18 | 19 | carbasis 27.934 27.934 41.081 90 90 90 20 | 21 | radial_dist on 22 | radial_centroid CuC CuL N1 HN H2G 23 | radial_counterpart H2G H2G H2G H2G H2G 24 | 25 | ensemble uvt 26 | mc_corrtime 100 27 | finalstep 1000000 28 | temperature 77 29 | pressure 1.0 30 | insert_factor 0.667 31 | displace_factor 2.5 32 | rotate_angle_factor 360.0 33 | 34 | feynman_hibbs on 35 | fh_order 4 36 | 37 | bias_uptake 2.6 wt% ! based on experiment for quicker equilibration 38 | auto_reject_r 1.5 ! more speedup 39 | 40 | 41 | !!!! here 42 | full_A_matrix off 43 | -------------------------------------------------------------------------------- /examples/monte_carlo/uvt/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Simulating loading capacity with GCMC. 3 | ! rht-MOF-9 with hydrogen gas 4 | ! Note the use of built-in sorbate via sorbate_name 5 | ! Also, bias_uptake, which speeds up pre-equilibration time 6 | ! Useful, e.g. if experimental loading is known 7 | ! Feynman-Hibbs corrections on b/c H2 has small mass and T is very low. 8 | 9 | 10 | name mc_uvt_example 11 | mode mc 12 | input_atoms ../../../atomfiles/rht-MOF-9.pdb 13 | 14 | free_volume 11595.4 15 | 16 | potential_form ljespolar 17 | xyz_traj_option off 18 | sorbate_name h2_bssp 19 | fugacity_single h2 20 | 21 | carbasis 27.934 27.934 41.081 90 90 90 22 | 23 | radial_dist on 24 | radial_centroid CuC CuL N1 HN H2G 25 | radial_counterpart H2G H2G H2G H2G H2G 26 | 27 | ensemble uvt 28 | mc_corrtime 1 29 | finalstep 1000000 30 | temperature 77 31 | pressure 1.0 32 | insert_factor 0.667 33 | displace_factor 2.5 34 | rotate_angle_factor 360.0 35 | 36 | feynman_hibbs on 37 | fh_order 4 38 | 39 | bias_uptake 2.6 wt% ! based on experiment for quicker equilibration 40 | auto_reject_r 1.5 ! more speedup 41 | -------------------------------------------------------------------------------- /examples/simulated_annealing/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! NOTT-112 with 417 H2 molecules (BSS model). Very large volume system. 3 | ! Simulated annealing is on, so the temperature should decrease as the simulation proceeds. 4 | ! And thus the equilibrium state of the system is being pursued computationally 5 | 6 | name sim_annealing_ex 7 | mode mc ! mc or md 8 | checkpoints_option off 9 | 10 | input_atoms ../../atomfiles/MPM-1-Br+CO2_PHAST.pdb 11 | 12 | potential_form ljes 13 | com_option off ! center of mass 14 | 15 | 16 | simulated_annealing on 17 | simulated_annealing_schedule 0.99997 18 | simulated_annealing_target 4.0 !K 19 | 20 | 21 | carbasis 27.1979 27.1979 30.9998 90 90 120 22 | 23 | ! MONTE CARLO ONLY ====================================== 24 | ensemble nvt 25 | 26 | mc_pbc on 27 | mc_corrtime 500 28 | finalstep 500000 29 | temperature 700 ! K 30 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 31 | displace_factor 2.5 32 | rotate_angle_factor 360.0 33 | ! ======================================================= 34 | 35 | auto_reject_option on ! saves time 36 | auto_reject_r 1.6 ! angstroms 37 | 38 | charge_sum_check on 39 | 40 | -------------------------------------------------------------------------------- /examples/monte_carlo/multisorb/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Multi-sorbate monte carlo example 3 | ! MOF-5 with a bunch of guest molecules (gases) at moderately high pressure 4 | ! and room temperature 5 | 6 | name mc_multisorb_example 7 | mode mc ! mc or md 8 | checkpoints_option off 9 | input_atoms ../../../atomfiles/MOF-5.pdb ! PDB ONLY 10 | sorbate_name co2_phast* h2_bssp ch4_9site* water ethane* 11 | sorbate_fugacities 5.0 5.0 5.0 5.0 5.0 12 | 13 | free_volume 11595.4 ! A^3; for excess adsorption calc. 14 | 15 | potential_form ljespolar 16 | xyz_traj_option on ! use 'topo readvarxyz traj.xyz' to view VMD changing-N traj. 17 | 18 | carbasis 25.669 25.669 25.669 90 90 90 19 | 20 | radial_dist on 21 | radial_centroid OXY COG CoM H2G 22 | radial_counterpart ZN ZN ZN ZN 23 | 24 | histogram off 25 | 26 | ensemble uvt 27 | 28 | mc_corrtime 25 29 | finalstep 5000000 30 | temperature 295.0 ! K 31 | !!!pressure 2.0 ! atm, not needed for multi-sorb or manual fugacity. 32 | 33 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 34 | displace_factor 2.5 35 | rotate_angle_factor 360.0 36 | ! ======================================================= 37 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/cuda/water_octane_BIG/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! This is an example of separation of water and octane via CUDA GPU MD 3 | ! You have to compile the code with cuda enabled 4 | ! e.g. bash compile.sh gpu 5 | ! Even with CUDA this system is quite large, and especially 6 | ! expensive because we are including k-space Ewald forces 7 | ! We recommend trying the _SMALL example first. 8 | ! especially if you're using a GPU for display at the same time 9 | 10 | name cuda_md_gas_water 11 | mode md ! mc or md 12 | cuda on 13 | checkpoints_option off 14 | 15 | input_atoms input.pqr 16 | potential_form ljes !ljespolar 17 | ewald_kmax 3 18 | com_option off ! center of mass 19 | 20 | 21 | carbasis 100 100 100 90 90 90 22 | 23 | histogram off 24 | 25 | manual_cutoff 12.0 ! Angstroms 26 | 27 | temperature 298.0 28 | thermostat nose-hoover 29 | ensemble nvt 30 | 31 | sorbate_name octane h2o_tip3p 32 | 33 | 34 | ! MOLECULAR DYNAMICS ONLY =============================== 35 | md_pbc on 36 | md_dt 2 ! fs 37 | md_ft 5 ns 38 | md_corrtime 10 ! steps 39 | md_mode molecular 40 | md_rotations on 41 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/flexible_MOF/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Flexible MOF dynamics (NVT) 3 | ! Note, this is the same as the multisorb example 4 | ! Except the input MOF has just elemental labels ("C" instead of "C1", e.g.) 5 | 6 | 7 | name md_multigas_NVT_example 8 | mode md ! mc or md 9 | checkpoints_option off 10 | 11 | input_atoms ../../../atomfiles/MOF-5+co2+h2+ch4+water+ethane_flex.pdb 12 | 13 | potential_form ljes 14 | com_option off ! center of mass 15 | 16 | sorbate_name co2_phast* h2_bssp ch4_9site* h2o ethane 17 | 18 | carbasis 25.669 25.669 25.669 90 90 90 19 | 20 | temperature 295.0 21 | ensemble nvt 22 | 23 | ewald_kmax 3 24 | histogram off 25 | 26 | ! ============================================ 27 | ! Here we turn on flexibility for the crystal 28 | flexible_frozen on 29 | ! ============================================= 30 | 31 | ! MOLECULAR DYNAMICS ONLY =============================== 32 | md_pbc on 33 | md_dt 0.2 ! fs 34 | md_ft 200000 ! fs 35 | md_corrtime 1 ! steps 36 | md_mode molecular 37 | md_rotations on 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /gui/InputLine.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.7 2 | 3 | Item { 4 | property string name: "default name" 5 | property string defaultIn: "default value" 6 | height: 30 7 | Text { 8 | id: thetext 9 | text: name 10 | height: 25 11 | width: 100 12 | } 13 | BorderImage { 14 | id: borderim 15 | source: "images/lineedit.png" 16 | border.left: 5; border.top: 5 17 | border.right: 5; border.bottom: 5 18 | anchors.left: thetext.right 19 | width:275 20 | height:25 21 | 22 | TextInput 23 | { 24 | id: editor 25 | 26 | cursorVisible: true; 27 | font.bold: true 28 | color: "#151515"; 29 | selectionColor: "Green" 30 | focus: true 31 | text: defaultIn 32 | 33 | } 34 | } 35 | /* 36 | TextInput { 37 | id: theinput 38 | color: "red" 39 | 40 | anchors.left: thetext.right 41 | width: 275 42 | height: 25 43 | BorderImage { 44 | id: borderthing 45 | width: parent.width 46 | height: parent.height 47 | source: "images/lineedit.png" 48 | border.left: 5; border.top: 5 49 | border.right: 5; border.bottom: 5 50 | } 51 | text: defaultIn 52 | 53 | } 54 | */ 55 | 56 | } 57 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/polarized/h2o_nve_flexible/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! An example of polarized MD; bulk water in a box 3 | ! Polarization is notoriously slower than alternative force fields 4 | ! but has been shown to be necessary for accurate modeling 5 | ! especially for highly inductive intermolecular interactions 6 | 7 | name md_polarized_h2o 8 | mode md ! mc or md 9 | checkpoints_option off 10 | 11 | input_atoms input.pdb 12 | 13 | 14 | 15 | potential_form ljespolar 16 | com_option off ! center of mass 17 | 18 | sorbate_name h2o_pol3 19 | 20 | carbasis 30 30 30 90 90 90 21 | 22 | radial_dist on 23 | radial_centroid OXY 24 | radial_counterpart OXY 25 | radial_bin_size 0.05 26 | radial_max_dist 20 27 | 28 | 29 | ensemble nve 30 | ewald_kmax 4 31 | !!! polar_max_iter 20 ! not using here, but alternative to dipole precision 32 | ! dipole_precision 0.0000001 ! in Debye; 1e-7 is quite precise; dipoles iterate until reached 33 | ! temperature 298 34 | ! thermostat nose-hoover 35 | 36 | 37 | 38 | ! MOLECULAR DYNAMICS ONLY =============================== 39 | md_pbc on 40 | md_dt 1 ! fs 41 | md_ft 10 ns ! fs 42 | md_corrtime 1 ! steps 43 | md_mode flexible 44 | -------------------------------------------------------------------------------- /gui/gui_mcmd.pro: -------------------------------------------------------------------------------- 1 | QT += qml quick printsupport widgets 2 | 3 | CONFIG += c++11 4 | 5 | SOURCES += main.cpp \ 6 | backend.cpp \ 7 | fileio.cpp \ 8 | viz.cpp 9 | 10 | RESOURCES += qml.qrc 11 | 12 | # Additional import path used to resolve QML modules in Qt Creator's code model 13 | QML_IMPORT_PATH = 14 | 15 | # Additional import path used to resolve QML modules just for Qt Quick Designer 16 | QML_DESIGNER_IMPORT_PATH = 17 | 18 | # The following define makes your compiler emit warnings if you use 19 | # any feature of Qt which as been marked deprecated (the exact warnings 20 | # depend on your compiler). Please consult the documentation of the 21 | # deprecated API in order to know how to port your code away from it. 22 | DEFINES += QT_DEPRECATED_WARNINGS 23 | 24 | # You can also make your code fail to compile if you use deprecated APIs. 25 | # In order to do so, uncomment the following line. 26 | # You can also select to disable deprecated APIs only up to a certain version of Qt. 27 | #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 28 | 29 | # Default rules for deployment. 30 | qnx: target.path = /tmp/$${TARGET}/bin 31 | else: unix:!android: target.path = /opt/$${TARGET}/bin 32 | !isEmpty(target.path): INSTALLS += target 33 | 34 | HEADERS += \ 35 | fileio.h \ 36 | backend.h \ 37 | viz.h 38 | 39 | FORMS += 40 | 41 | DISTFILES += \ 42 | garbage 43 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/polarized/h2o_nvt/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! An example of polarized MD; bulk water in a box 3 | ! Polarization is notoriously slower than alternative force fields 4 | ! but has been shown to be necessary for accurate modeling 5 | ! especially for highly inductive intermolecular interactions 6 | 7 | name md_polarized_h2o 8 | mode md ! mc or md 9 | checkpoints_option off 10 | 11 | input_atoms input.pdb 12 | 13 | 14 | 15 | potential_form ljespolar 16 | com_option off ! center of mass 17 | 18 | sorbate_name h2o_pol3 19 | 20 | carbasis 30 30 30 90 90 90 21 | 22 | radial_dist on 23 | radial_centroid OXY 24 | radial_counterpart OXY 25 | radial_bin_size 0.05 26 | radial_max_dist 20 27 | 28 | 29 | ensemble nvt 30 | ewald_kmax 4 31 | !!! polar_max_iter 20 ! not using here, but alternative to dipole precision 32 | dipole_precision 0.0000001 ! in Debye; 1e-7 is quite precise; dipoles iterate until reached 33 | temperature 298 34 | thermostat nose-hoover 35 | 36 | 37 | 38 | ! MOLECULAR DYNAMICS ONLY =============================== 39 | md_pbc on 40 | md_dt 1 ! fs 41 | md_ft 10 ns ! fs 42 | md_corrtime 1 ! steps 43 | md_mode molecular 44 | md_rotations on 45 | md_translations on 46 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/flexible_MOF_input_FF/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Flexible MOF dynamics (NVT) 3 | ! Note, this is the same as the other flexible MOF example 4 | ! except the forcefield for the MOF is now determined by 5 | ! the input crystal structure instead of UFF/UFF4MOF 6 | 7 | 8 | name md_multigas_NVT_example 9 | mode md ! mc or md 10 | checkpoints_option off 11 | 12 | input_atoms ../../../atomfiles/MOF-5+co2+h2+ch4+water+ethane_flex.pdb 13 | 14 | potential_form ljes 15 | com_option off ! center of mass 16 | 17 | sorbate_name co2_phast* h2_bssp ch4_9site* h2o ethane 18 | 19 | carbasis 25.669 25.669 25.669 90 90 90 20 | 21 | temperature 295.0 22 | ensemble nvt 23 | 24 | ewald_kmax 3 25 | histogram off 26 | 27 | ! ============================================ 28 | ! Here we turn on flexibility for the crystal 29 | flexible_frozen on 30 | ! Here we assign the bonds/angles/dihedrals based on 31 | ! the input structure 32 | input_structure_FF on 33 | ! ============================================= 34 | 35 | ! MOLECULAR DYNAMICS ONLY =============================== 36 | md_pbc on 37 | md_dt 0.2 ! fs 38 | md_ft 200000 ! fs 39 | md_corrtime 1 ! steps 40 | md_mode molecular 41 | md_rotations on 42 | 43 | 44 | omp 4 45 | -------------------------------------------------------------------------------- /examples/monte_carlo/nopbc/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! No-PBC monte carlo example. Ru-tris-bipyridine in a MOF cage with 3 | ! free-moving methanol (solvent) molecules 4 | 5 | name nopbc_RuBpy_example 6 | mode mc ! mc or md 7 | checkpoints_option off 8 | ewald_es off 9 | rd_lrc off 10 | input_atoms ../../../atomfiles/USF2-mediumcage+RuBpy_optimized.pdb 11 | potential_form ljes 12 | com_option off ! center of mass 13 | sorbate_name methanol 14 | sorbate_fugacities 1.0 15 | 16 | xyz_traj_option on 17 | 18 | carbasis 25.66200 17.49800 25.66200 90 90 90 19 | 20 | dist_within on 21 | dist_within_target CoM 22 | dist_within_radius 9.01 23 | 24 | ! radial distribution option 25 | radial_dist on ! turns on/off radial distribution function. off for speed-up 26 | radial_bin_size 0.1 ! in A 27 | radial_max_dist 10.0 ! in A (maybe a good value is 1/2 box length) 28 | radial_centroid CoM ! element name 29 | radial_counterpart Zn ! element name to get distance of w/centroid 30 | radial_file radialdist.dat 31 | 32 | 33 | ! MONTE CARLO ONLY ====================================== 34 | ensemble uvt 35 | 36 | mc_pbc off 37 | mc_corrtime 25 38 | finalstep 5000000 39 | temperature 298.0 !77.0 ! K 40 | !!!pressure 1.0 ! atm 41 | 42 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 43 | displace_factor 2.5 44 | rotate_angle_factor 360.0 45 | ! ======================================================= 46 | -------------------------------------------------------------------------------- /gui/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | //#include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | //#include 11 | 12 | #include "backend.h" 13 | #include "fileio.h" 14 | #include "viz.h" 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | 22 | 23 | using namespace std; 24 | 25 | 26 | 27 | int main(int argc, char *argv[]) 28 | { 29 | //printf("Result of pwd: "); 30 | //system("pwd"); 31 | 32 | QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 33 | 34 | //QGuiApplication app(argc, argv); 35 | QApplication app(argc, argv); 36 | qDebug() << "Result of qApp->applicationDirPath(): " << qApp->applicationDirPath(); 37 | 38 | 39 | // c++ classes and corresponding headers for C++ <--> QML comm. 40 | qmlRegisterType("io.qt.examples.backend", 1, 0, "BackEnd"); 41 | qmlRegisterType("FileIO", 1, 0, "FileIO"); 42 | qmlRegisterType("Viz", 1, 0, "Viz"); 43 | //qmlRegisterType("Graphs", 1, 0, "Graphs" ); 44 | 45 | QQmlApplicationEngine engine; 46 | 47 | 48 | // go 49 | engine.load(QUrl(QLatin1String("qrc:/main.qml"))); 50 | 51 | QWindow *window = qobject_cast(engine.rootObjects()[0]); 52 | window->setProperty("exePath", qApp->applicationDirPath()); 53 | 54 | 55 | 56 | if (engine.rootObjects().isEmpty()) 57 | return -1; 58 | return app.exec(); 59 | } 60 | -------------------------------------------------------------------------------- /examples/crystal_fragment_builder/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! This is idenical to the uvt example, except 3 | ! we're building out the crystal system at the beginning 4 | ! and also spitting out some sample fragments of the MOF 5 | ! and also excluding polarization 6 | ! You can, of course, use the fragment builder independent of the crystal builder 7 | ! and vice-versa. 8 | 9 | name crystal_and_frag_builder_example 10 | mode mc 11 | input_atoms ../../atomfiles/rht-MOF-9.pdb 12 | 13 | free_volume 11595.4 14 | 15 | potential_form ljes ! no polar 16 | xyz_traj_option off 17 | sorbate_name h2_bssp 18 | !fugacity_single h2 19 | 20 | carbasis 27.934 27.934 41.081 90 90 90 21 | 22 | !radial_dist on 23 | !radial_centroid CuC CuL N1 HN 24 | !radial_counterpart H2G H2G H2G H2G 25 | 26 | ensemble uvt 27 | mc_corrtime 1 28 | finalstep 1 29 | temperature 77 30 | pressure 1.0 31 | insert_factor 0.667 32 | displace_factor 2.5 33 | rotate_angle_factor 360.0 34 | 35 | !feynman_hibbs on 36 | !fh_order 4 37 | 38 | !bias_uptake 2.6 wt% ! based on experiment for quicker equilibration 39 | !auto_reject_r 1.5 ! more speedup 40 | 41 | 42 | ! these are commands to build the unit cell to 8 times the original volume (2x2x2) 43 | crystalbuild on 44 | crystalbuild_x 2 45 | crystalbuild_y 2 46 | crystalbuild_z 2 47 | 48 | ! this will make up to 17*5 fragments. The program will exclude duplicates. 49 | makefrags 17 50 | atoms_per_frag 75 90 110 150 250 51 | frag_bondlength 1.9 52 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/external_force/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Molcular dynamics using external force 3 | ! The artificial external force is applied at each integration step 4 | ! to push the CO2 molecule through the tight MOF channel 5 | 6 | 7 | name sifsix14cui_co2_md_nvt 8 | mode md ! mc or md 9 | checkpoints_option off 10 | 11 | 12 | input_atoms input.pdb ! PDB ONLY 13 | 14 | potential_form ljes 15 | ewald_kmax 4 16 | com_option off ! center of mass 17 | 18 | basis1 25.77960000000000 0.00000000000000 0.00000000000000 19 | basis2 0.00000000000000 18.50600000000000 0.00000000000000 20 | basis3 -0.01483000000000 0.00000000000000 18.47629000000000 21 | 22 | 23 | 24 | ! radial distribution option 25 | radial_dist on ! turns on/off radial distribution function. off for speedup 26 | radial_bin_size 0.05 ! in A 27 | radial_max_dist 10.0 ! in A (maybe a good value is 1/2 box length) 28 | radial_centroid C2G C2G C2G O2E O2E ! element name 29 | radial_counterpart C2G CU SI CU SI ! element name to get distance of w/centroid 30 | radial_file radialdist.dat 31 | 32 | temperature 298.0 33 | ensemble nvt 34 | external_force 0.5 0 0 1 ! vector in nN, then frequency of the force (every 1 step) 35 | 36 | ! MOLECULAR DYNAMICS ONLY =============================== 37 | md_pbc on 38 | md_dt 0.2 ! fs 39 | md_ft 20 ns 40 | md_corrtime 1 ! steps 41 | md_mode molecular 42 | md_rotations on ! asdf 43 | 44 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/nve/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Molcular dynamics example with a non orthorhombic unit-cell periodic system 3 | ! NVE Neon atoms in MPM-1-Br MOF 4 | ! i.e. total energy should be conserved with minimal error 5 | 6 | name md_NVE_example 7 | mode md ! mc or md 8 | checkpoints_option off 9 | 10 | input_atoms ../../../atomfiles/MPM-1-Br+46Ne.pdb ! PDB ONLY 11 | 12 | potential_form lj 13 | com_option off ! center of mass 14 | 15 | 16 | basis1 27.19800 0.00000 0.00000 17 | basis2 -13.59900 23.55416 0.00000 18 | basis3 0.00000 0.00000 30.99800 19 | 20 | 21 | ! radial distribution option 22 | radial_dist on ! turns on/off radial distribution function. off for speedup 23 | radial_bin_size 0.05 ! in A 24 | radial_max_dist 10.0 ! in A (maybe a good value is 1/2 box length) 25 | radial_centroid Ne ! element name 26 | radial_counterpart Ne ! element name to get distance of w/centroid 27 | radial_file radialdist.dat 28 | 29 | ensemble nve 30 | 31 | ! MOLECULAR DYNAMICS ONLY =============================== 32 | md_pbc on 33 | md_dt 2 ! fs 34 | md_ft 200000 ! fs 35 | md_corrtime 1 ! steps 36 | md_init_vel 0 ! A / fs 37 | md_mode molecular 38 | md_rotations off ! important here, because the movable molecules are monatomic. 39 | 40 | 41 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/nvt/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Molcular dynamics example with a non orthorhombic unit-cell periodic system 3 | ! Neon atoms in MPM-1-Br MOF 4 | ! Similar to NVE example, except Nose-Hoover thermostat is applied for fixed T 5 | 6 | 7 | name md_NVT_example 8 | mode md ! mc or md 9 | checkpoints_option off 10 | 11 | input_atoms ../../../atomfiles/MPM-1-Br+46Ne.pdb ! PDB ONLY 12 | 13 | potential_form lj 14 | com_option off ! center of mass 15 | 16 | 17 | basis1 27.19800 0.00000 0.00000 18 | basis2 -13.59900 23.55416 0.00000 19 | basis3 0.00000 0.00000 30.99800 20 | 21 | 22 | ! radial distribution option 23 | radial_dist on ! turns on/off radial distribution function. off for speedup 24 | radial_bin_size 0.05 ! in A 25 | radial_max_dist 10.0 ! in A (maybe a good value is 1/2 box length) 26 | radial_centroid Ne ! element name 27 | radial_counterpart Ne ! element name to get distance of w/centroid 28 | radial_file radialdist.dat 29 | 30 | temperature 295.0 31 | ensemble nvt 32 | thermostat nose-hoover 33 | 34 | ! MOLECULAR DYNAMICS ONLY =============================== 35 | md_pbc on 36 | md_dt 2 ! fs 37 | md_ft 200000 ! fs 38 | md_corrtime 1 ! steps 39 | md_mode molecular 40 | md_rotations off ! important here, because the movable molecules are monatomic. 41 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/uvt/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Molcular dynamics example with a non orthorhombic unit-cell periodic system 3 | ! CO2+C2H2 in a SIFSIX MOF 4 | ! This is hybrid MC/MD. Molecular dynamics dictates the molecular motion in time 5 | ! but every "md_insert_frequency" timesteps, a Monte-Carlo insert/delete is attempted. 6 | ! May be very useful in tandem with external-force MD to produce an equilibrated, 7 | ! fully saturated porous-material+gas system. 8 | ! Andersen thermostat is recommended over Nose-Hoover for uVT MD. 9 | 10 | name md_uVT_example 11 | mode md ! mc or md 12 | 13 | input_atoms ../../../atomfiles/SIFSIX14Cui.pdb 14 | 15 | potential_form lj !!es 16 | com_option off ! center of mass 17 | xyz_traj_option on 18 | !!checkpoints on 19 | ewald_kmax 3 20 | 21 | basis1 25.77960000000000 0.00000000000000 0.00000000000000 22 | basis2 0.00000000000000 18.50600000000000 0.00000000000000 23 | basis3 -0.01483000000000 0.00000000000000 18.47629000000000 24 | 25 | 26 | temperature 250.0 27 | ensemble uvt 28 | thermostat andersen 29 | 30 | 31 | histogram off 32 | 33 | sorbate_name co2_phast c2h2 34 | user_fugacities 3 3 35 | 36 | ! MOLECULAR DYNAMICS ONLY =============================== 37 | md_pbc on 38 | md_dt 0.5 ! fs 39 | md_ft 2 ns 40 | md_corrtime 100 ! steps 41 | md_insert_frequency 5 ! every x steps, try insert/delete MC style 42 | md_mode molecular 43 | md_rotations on 44 | 45 | 46 | -------------------------------------------------------------------------------- /examples/molecular_dynamics/manual_init_vel/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! Molcular dynamics example with a non orthorhombic unit-cell periodic system 3 | ! Neon atoms in MPM-1-Br MOF 4 | ! Initial velocities defined by user (in A/fs) 5 | ! Same as NVT except velocity setting 6 | ! ***NOTE: The thermostat will be overidden by 7 | ! "md_init_vel" (instead of "temperature") if "nose-hoover" is chosen 8 | 9 | name md_NVT_example 10 | mode md ! mc or md 11 | checkpoints_option off 12 | 13 | input_atoms ../../../atomfiles/MPM-1-Br+46Ne.pdb ! PDB ONLY 14 | 15 | potential_form lj 16 | com_option off ! center of mass 17 | 18 | 19 | basis1 27.19800 0.00000 0.00000 20 | basis2 -13.59900 23.55416 0.00000 21 | basis3 0.00000 0.00000 30.99800 22 | 23 | 24 | ! radial distribution option 25 | radial_dist on ! turns on/off radial distribution function. off for speedup 26 | radial_bin_size 0.05 ! in A 27 | radial_max_dist 10.0 ! in A (maybe a good value is 1/2 box length) 28 | radial_centroid Ne ! element name 29 | radial_counterpart Ne ! element name to get distance of w/centroid 30 | radial_file radialdist.dat 31 | 32 | temperature 295.0 33 | ensemble nvt 34 | thermostat andersen 35 | 36 | ! MOLECULAR DYNAMICS ONLY =============================== 37 | md_pbc on 38 | md_dt 2 ! fs 39 | md_ft 200000 ! fs 40 | md_corrtime 1 ! steps 41 | md_mode molecular 42 | md_rotations off ! important here, because the movable molecules are monatomic. 43 | md_init_vel 0.003 ! A/fs 44 | -------------------------------------------------------------------------------- /src/rotatepoint.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #define _USE_MATH_DEFINES 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | double * rotatePoint(System &system, double x, double y, double z, int plane, double angle) { 11 | 12 | double finalx, finaly, finalz; 13 | // the function takes an ANGLE 0->360, trig functions take rads 14 | angle = angle*M_PI/180.0; 15 | if (plane == 0) { 16 | finalx = x; 17 | finaly = y*cos(angle) -z*sin(angle); 18 | finalz = y*sin(angle) + z*cos(angle); 19 | } else if (plane == 1) { 20 | finalx = x*cos(angle) + z*sin(angle); 21 | finaly = y; 22 | finalz = -x*sin(angle) + z*cos(angle); 23 | } else if (plane == 2) { 24 | finalx = x*cos(angle) - y*sin(angle); 25 | finaly = x*sin(angle) + y*cos(angle); 26 | finalz = z; 27 | } 28 | 29 | static double output[3]; 30 | output[0] = finalx; 31 | output[1] = finaly; 32 | output[2] = finalz; 33 | return output; 34 | } 35 | 36 | double * rotatePointRadians(System &system, double x, double y, double z, int plane, double angle) { 37 | 38 | double finalx, finaly, finalz; 39 | if (plane == 0) { 40 | finalx = x; 41 | finaly = y*cos(angle) -z*sin(angle); 42 | finalz = y*sin(angle) + z*cos(angle); 43 | } else if (plane == 1) { 44 | finalx = x*cos(angle) + z*sin(angle); 45 | finaly = y; 46 | finalz = -x*sin(angle) + z*cos(angle); 47 | } else if (plane == 2) { 48 | finalx = x*cos(angle) - y*sin(angle); 49 | finaly = x*sin(angle) + y*cos(angle); 50 | finalz = z; 51 | } 52 | 53 | static double output[3]; 54 | output[0] = finalx; 55 | output[1] = finaly; 56 | output[2] = finalz; 57 | return output; 58 | } 59 | 60 | -------------------------------------------------------------------------------- /src/system.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | using namespace std; 9 | 10 | class System { 11 | public: 12 | System(); 13 | vector molecules; // added 2-5-17 14 | vector proto; // prototypes (i.e. sorbate molecules which can be moved/inserted/removed 15 | Constants constants; // some variables here are not "constant" but merely store information. 16 | Pbc pbc; 17 | Stats stats; 18 | Last last; // to hold previous values for reversion if needed (checkpointing variables) 19 | 20 | vector> atommap; // index map from [(i,j), atom-atom] notation to [(i,j,k,l) molecule/atom-molecule/atom] 21 | vector>>> pairs; // r 22 | 23 | // histogram stuff 24 | int n_histogram_bins=0; 25 | double hist_resolution=0.7; // default 0.7 A 26 | Grid grids; 27 | FilePointer file_pointers; 28 | 29 | // defines the "previous checkpoint" time object 30 | std::chrono::time_point previous_checkpoint = std::chrono::system_clock::now(); 31 | 32 | // a function for de-bugging. Prints the current datetime and a string of text supplied in code. 33 | void checkpoint(string thetext) { 34 | if (constants.checkpoints_option) { 35 | std::chrono::time_point now = std::chrono::system_clock::now(); 36 | std::time_t thetime = std::chrono::system_clock::to_time_t(now); 37 | double time_elapsed = (std::chrono::duration_cast(now - previous_checkpoint).count()) /1000.0; // in ms 38 | 39 | printf(" ---> %.4f ms from last: %s \n", time_elapsed, thetext.c_str()); 40 | previous_checkpoint = std::chrono::system_clock::now(); 41 | } 42 | } 43 | }; 44 | 45 | System::System() { 46 | } 47 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | project(mcmd) 2 | cmake_minimum_required(VERSION 3.5) 3 | 4 | option(MPI "Use MPI to parallelize the calculations (requires MPI)" OFF) 5 | option(CUDA "Use CUDA to offload force calculations to a GPU (requires CUDA)" OFF) 6 | option(OMP "Use OpenMP to parallelize the calculations (requires OpenMP)" OFF) 7 | option(WINDOWS "Install MCMD on Windows" OFF) 8 | 9 | add_definitions( -D`echo VERSION=\\`git rev-list HEAD|wc -l\\``) 10 | 11 | configure_file ( 12 | "${PROJECT_SOURCE_DIR}/src/cmake_config.h.in" 13 | "${PROJECT_BINARY_DIR}/src/cmake_config.h" 14 | ) 15 | 16 | set(CMAKE_BUILD_TYPE Release) 17 | set(CMAKE_CXX_FLAGS "-lm -I. -Ofast -foptimize-sibling-calls -finline-limit=10000 -fexpensive-optimizations -flto -frename-registers") 18 | set(CMAKE_CXX_STANDARD 11) 19 | set(INCLUDE src/) 20 | 21 | set(SRC 22 | src/main.cpp 23 | ) 24 | 25 | if(MPI) 26 | message("-- MPI Enabled") 27 | find_package(MPI REQUIRED) 28 | if(NOT MPI_C_FOUND) 29 | message(FATAL_ERROR "-- MPI not found! Exiting ...") 30 | endif() 31 | set(INCLUDE ${INCLUDE} ${MPI_C_INCLUDE_PATH}) 32 | set(LIB ${LIB} ${MPI_C_LIBRARIES}) 33 | else() 34 | message("-- MPI Disabled") 35 | endif() 36 | 37 | if(OMP) 38 | message("-- OpenMP Enabled") 39 | find_package(OPENMP REQUIRED) 40 | if(NOT OPENMP_C_FOUND) 41 | message(FATAL_ERROR "-- OpenMP not found! Exiting ...") 42 | endif() 43 | else() 44 | message("-- OpenMP Disabled") 45 | endif() 46 | 47 | if(CUDA) 48 | message("-- CUDA Enabled") 49 | find_package(CUDA REQUIRED) 50 | set(SRC ${SRC} src/polarization_gpu/polar_cuda.cu) 51 | else() 52 | message("-- CUDA Disabled") 53 | endif() 54 | 55 | if(CUDA) 56 | cuda_add_executable(${PROJECT_NAME} ${SRC}) 57 | else() 58 | add_executable(${PROJECT_NAME} ${SRC}) 59 | endif() 60 | 61 | enable_testing() 62 | add_test(NAME optimize_RuBpy 63 | CONFIGURATIONS Release 64 | WORKING_DIRECTORY ../examples/optimization/RuBpy 65 | COMMAND mcmd mcmd.inp) 66 | -------------------------------------------------------------------------------- /.github/workflows/cmake.yml: -------------------------------------------------------------------------------- 1 | name: CMake 2 | 3 | on: [push] 4 | 5 | env: 6 | # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) 7 | BUILD_TYPE: Release 8 | 9 | jobs: 10 | build: 11 | # The CMake configure and build commands are platform agnostic and should work equally 12 | # well on Windows or Mac. You can convert this to a matrix build if you need 13 | # cross-platform coverage. 14 | # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v2 19 | 20 | - name: Create Build Environment 21 | # Some projects don't allow in-source building, so create a separate build directory 22 | # We'll use this as our working directory for all subsequent commands 23 | run: cmake -E make_directory ${{github.workspace}}/build 24 | 25 | - name: Configure CMake 26 | # Use a bash shell so we can use the same syntax for environment variable 27 | # access regardless of the host operating system 28 | shell: bash 29 | working-directory: ${{github.workspace}}/build 30 | # Note the current convention is to use the -S and -B options here to specify source 31 | # and build directories, but this is only available with CMake 3.13 and higher. 32 | # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 33 | run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE 34 | 35 | - name: Build 36 | working-directory: ${{github.workspace}}/build 37 | shell: bash 38 | # Execute the build. You can specify a specific target with "--target " 39 | run: cmake .; make -j1; 40 | 41 | - name: Test 42 | working-directory: ${{github.workspace}}/build 43 | shell: bash 44 | # Execute tests defined by the CMake configuration. 45 | # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail 46 | run: ctest -C $BUILD_TYPE 47 | -------------------------------------------------------------------------------- /gui/main_old_copy.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.6 2 | import QtQuick.Dialogs 1.2 3 | import QtQuick.Controls 1.5 4 | 5 | ApplicationWindow { 6 | visible: true 7 | width: 640 8 | height: 480 9 | title: qsTr("Demo App") 10 | 11 | function openFile(fileUrl) { 12 | var request = new XMLHttpRequest(); 13 | request.open("GET", fileUrl, false); 14 | request.send(null); 15 | return request.responseText; 16 | } 17 | 18 | function saveFile(fileUrl, text) { 19 | var request = new XMLHttpRequest(); 20 | request.open("PUT", fileUrl, false); 21 | request.send(text); 22 | return request.status; 23 | } 24 | 25 | FileDialog { 26 | id: openFileDialog 27 | nameFilters: ["Text files (*.txt)", "All files (*)"] 28 | onAccepted: textEdit.text = openFile(openFileDialog.fileUrl) 29 | } 30 | 31 | FileDialog { 32 | id: saveFileDialog 33 | selectExisting: false 34 | nameFilters: ["Text files (*.txt)", "All files (*)"] 35 | onAccepted: saveFile(saveFileDialog.fileUrl, textEdit.text) 36 | } 37 | 38 | menuBar: MenuBar { 39 | Menu { 40 | title: qsTr("File") 41 | MenuItem { 42 | text: qsTr("&Open") 43 | onTriggered: openFileDialog.open() 44 | } 45 | MenuItem { 46 | text: qsTr("&Save") 47 | onTriggered: saveFileDialog.open() 48 | } 49 | MenuItem { 50 | text: qsTr("Exit") 51 | onTriggered: Qt.quit(); 52 | } 53 | } 54 | } 55 | 56 | TextArea { 57 | id: textEdit 58 | anchors.fill: parent 59 | text: 60 | "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " + 61 | "sed do eiusmod tempor incididunt ut labore et dolore magna " + 62 | "aliqua. Ut enim ad minim veniam, quis nostrud exercitation " + 63 | "ullamco laboris nisi ut aliquip ex ea commodo cosnsequat. "; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/mixing.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | // LENNARD-JONES 12 | // ================================== 13 | // Lorentz-Berthelot 14 | double lj_lb_eps(double e1, double e2) { 15 | if (e1 != e2) return sqrt(e1*e2); 16 | else return e1; 17 | } 18 | double lj_lb_sig(double s1, double s2) { 19 | if (s1 != s2) return 0.5*(s1 + s2); 20 | else return s1; 21 | } 22 | 23 | // W-H and H are not being used now but code is provided for future use. 24 | 25 | // Waldman-Hagler 26 | double lj_wh_sig(double s1, double s2) { 27 | double si6 = s1; 28 | si6 *= si6*si6; 29 | si6 *= si6; 30 | 31 | double sj6 = s2; 32 | sj6 *= sj6*sj6; 33 | sj6 *= sj6; 34 | 35 | return pow(0.5*(si6+sj6), 1./6.); 36 | } 37 | double lj_wh_eps(double e1, double e2, double s1, double s2) { 38 | double si3 = s1*s1*s1; 39 | double sj3 = s2*s2*s2; 40 | double si6 = si3*si3; 41 | double sj6 = sj3*sj3; 42 | 43 | return sqrt(e1*e2) * 2.0*si3*sj3/(si6+sj6); 44 | } 45 | 46 | // Halgren 47 | double lj_h_sig(double s1, double s2) { 48 | double si2 = s1*s1; 49 | double sj2 = s2*s2; 50 | return (si2*s1 + sj2*s2)/(si2 + sj2); 51 | } 52 | double lj_h_eps(double e1, double e2) { 53 | return 4*e1*e2 / pow(sqrt(e1) + sqrt(e2), 2); 54 | } 55 | 56 | 57 | 58 | // TANG TOENNIES 59 | // ======================================= 60 | double tt_sigma(double sigi, double sigj) { 61 | return 0.5*(sigi + sigj); 62 | } 63 | double tt_b(double bi, double bj) { 64 | return 2.0*bi*bj/(bi + bj); 65 | } 66 | double tt_c6(double c6i, double c6j) { 67 | return sqrt(c6i*c6j)*0.021958709/(3.166811429*0.000001); // Convert H*Bohr^6 to K*Angstrom^6, etc 68 | } 69 | double tt_c8(double c8i, double c8j) { 70 | return sqrt(c8i*c8j)*0.0061490647/(3.166811429*0.000001); // Convert H*Bohr^6 to K*Angstrom^6, etc 71 | } 72 | double tt_c10(double c6, double c8) { 73 | if (c6 != 0 && c8 != 0) 74 | return 49./40.*c8*c8/c6; 75 | else 76 | return 0.0; 77 | } 78 | 79 | 80 | -------------------------------------------------------------------------------- /atomfiles/tetracycline_wonky.xyz: -------------------------------------------------------------------------------- 1 | 56 2 | 3 | C 1.978800 2.660100 1.626200 4 | C 2.117200 1.573000 0.650200 5 | C 3.132100 1.086500 0.384200 6 | C 4.488300 1.912600 0.707300 7 | C 5.792400 1.477300 0.541000 8 | C 6.051400 0.212800 0.049000 9 | C 5.001300 -0.633700 -0.174600 10 | C 3.682300 -0.199000 -0.100000 11 | C 2.550800 -1.085500 -0.437300 12 | O 2.633300 -2.108700 -1.072200 13 | C 1.140300 -0.723100 -0.006100 14 | C 0.297900 -1.420200 -0.464200 15 | C -1.131400 -1.153800 -0.076200 16 | C -1.256000 -0.298700 1.191300 17 | H -0.856400 -0.896000 2.010800 18 | C -0.347400 0.911900 0.999400 19 | C 1.302900 0.421000 0.963000 20 | H 1.389500 0.072600 1.955300 21 | C -2.667100 0.120100 1.556000 22 | H -2.621200 0.858100 2.356800 23 | C -3.402000 0.711900 0.490800 24 | C -3.025200 0.378700 -0.908300 25 | C -1.869600 -0.353500 -1.195800 26 | O -1.401100 -0.395300 -2.314700 27 | C -3.803400 1.062200 -2.012600 28 | O -4.592800 0.373400 -2.730700 29 | N -3.641500 2.359700 -2.339200 30 | O -4.464500 1.495800 0.625900 31 | N -3.404900 -1.056600 2.034600 32 | C -2.875300 -1.521500 3.323500 33 | C -4.843400 -0.774000 2.127700 34 | O -1.729500 -2.282500 0.235800 35 | O 0.441000 -2.425400 -1.328800 36 | O 5.251400 -1.876700 -0.757700 37 | O 1.556100 2.117200 -0.688100 38 | H 2.617400 3.491000 1.226200 39 | H 0.955200 3.014300 1.648500 40 | H 2.336500 2.149500 2.570400 41 | H 4.297400 2.903700 1.091500 42 | H 6.612800 2.031200 0.797500 43 | H 7.071300 -0.116500 -0.184100 44 | H -0.590800 1.409100 0.060500 45 | H -0.480000 1.606300 1.829000 46 | H -2.963800 2.891200 -1.892900 47 | H -4.202600 2.762000 -3.020500 48 | H -4.880100 1.913700 -0.140700 49 | H -2.989000 -0.734000 4.068500 50 | H -3.424500 -2.406800 3.644000 51 | H -1.819300 -1.768800 3.214500 52 | H -5.247400 -0.612800 1.128200 53 | H -5.350500 -1.619600 2.592500 54 | H -4.899800 0.120000 2.731300 55 | H -1.900400 -2.986700 -0.618700 56 | H 0.227100 -3.320700 -1.032500 57 | H 5.327600 -2.556400 -0.174100 58 | H 2.083700 2.960000 -1.112000 59 | -------------------------------------------------------------------------------- /examples/manual_parameters/mcmd.inp: -------------------------------------------------------------------------------- 1 | ! Douglas Franz, Space group, USF, 2017 2 | ! example of manually defining RD params for atoms 3 | ! in this input script 4 | ! (instead of the input.pdb file) 5 | 6 | name manual_params_example 7 | mode mc ! mc or md 8 | checkpoints_option off 9 | 10 | input_atoms input.pdb 11 | 12 | potential_form lj 13 | com_option off ! center of mass 14 | 15 | sorbate_name h2_buch 16 | fugacity_single h2 17 | 18 | carbasis 13.2828 13.2828 26.6491 90 90 90 19 | 20 | 21 | ! MONTE CARLO ONLY ====================================== 22 | ensemble uvt 23 | 24 | mc_pbc on 25 | mc_corrtime 100 26 | finalstep 10000 27 | temperature 77.0 !77.0 ! K 28 | insert_factor 0.667 ! uVT: prob to insert/delete in uVT 29 | displace_factor 2.5 30 | rotate_angle_factor 360.0 31 | ! ======================================================= 32 | 33 | auto_reject_option on ! saves time 34 | auto_reject_r 1.6 ! angstroms 35 | 36 | charge_sum_check on 37 | 38 | ! manually defining parameters 39 | 40 | sig_override Zn 2.46155 ! UFF below 41 | sig_override N1 3.66 42 | sig_override N2 3.66 43 | sig_override N3 3.66 44 | sig_override N4 3.66 45 | sig_override N5 3.66 46 | sig_override C1 3.431 47 | sig_override C2 3.431 48 | sig_override H1 2.571 49 | sig_override H2 2.571 50 | sig_override H3 2.571 51 | sig_override H4 2.571 52 | sig_override O1 3.118 53 | sig_override O2 3.118 54 | sig_override C3 3.75 ! this and below are OPLS 55 | sig_override C4 3.55 56 | sig_override C5 3.55 57 | sig_override C6 3.55 58 | sig_override C7 3.55 59 | sig_override H5 2.42 60 | sig_override H6 2.42 61 | sig_override H7 2.42 62 | 63 | eps_override Zn 62.39923 ! UFF .. 64 | eps_override N1 34.72215 65 | eps_override N2 34.72215 66 | eps_override N3 34.72215 67 | eps_override N4 34.72215 68 | eps_override N5 34.72215 69 | eps_override C1 52.84 70 | eps_override C2 52.84 71 | eps_override H1 22.14 72 | eps_override H2 22.14 73 | eps_override H3 22.14 74 | eps_override H4 22.14 75 | eps_override O1 30.19 76 | eps_override O2 30.19 77 | eps_override C3 52.84 ! OPLS .. 78 | eps_override C4 35.25 79 | eps_override C5 35.25 80 | eps_override C6 35.25 81 | eps_override C7 35.25 82 | eps_override H5 15.11 83 | eps_override H6 15.11 84 | eps_override H7 15.11 85 | 86 | 87 | 88 | 89 | -------------------------------------------------------------------------------- /src/pairs.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | using namespace std; 7 | 8 | void make_pairs(System &system) { 9 | int i,j,k,l,p; //,q,r; 10 | int molsize = (int)system.molecules.size(); 11 | int frozenatoms = system.stats.count_frozens; 12 | 13 | if (system.stats.MCstep == 0 || system.constants.ensemble != ENSEMBLE_NVT) { 14 | // (re-)set up sizes for 4D array 15 | system.pairs.resize(molsize); 16 | for (i=0; i 2 | #include 3 | #include 4 | #define _USE_MATH_DEFINES 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "potential.cpp" 10 | #include "rotatepoint.cpp" 11 | #include "boltzmann.cpp" 12 | #include "moves.cpp" 13 | 14 | // PHAST2 NOT INCLUDED YET 15 | 16 | // ================== MAIN MC FUNCTION. HANDLES MOVE TYPES AND BOLTZMANN ACCEPTANCE ================= 17 | // ACCORDING TO DIFFERENT ENSEMBLES 18 | void runMonteCarloStep(System &system) { 19 | system.checkpoint("Entered runMonteCarloStep()."); 20 | system.stats.MCmoveAccepted = false; // reset acceptance checker 21 | 22 | // VOLUME MOVE (only NPT) 23 | if (system.constants.ensemble == ENSEMBLE_NPT) { 24 | double VCP = system.constants.vcp_factor/(double)system.stats.count_movables; // Volume Change Probability 25 | double ranf = getrand(); // between 0 and 1 26 | if (ranf < VCP) { 27 | system.checkpoint("doing a volume change move."); 28 | changeVolumeMove(system); 29 | system.checkpoint("done with volume change move."); 30 | return; // we tried a volume change, so exit MC step. 31 | } 32 | } 33 | 34 | // ADD / REMOVE (only uVT) 35 | // We'll choose 0-0.5 for add; 0.5-1 for remove (equal prob.) 36 | if (system.constants.ensemble == ENSEMBLE_UVT) { 37 | double IRP = system.constants.insert_factor; 38 | double ranf = getrand(); // between 0 and 1 39 | if (ranf < IRP) { 40 | double ranf2 = getrand(); // 0->1 41 | // ADD A MOLECULE 42 | if (ranf2 < 0.5 || system.constants.bias_uptake_switcher) { // this will force insertions and never removes if the bias loading is activated. 43 | system.checkpoint("doing molecule add move."); 44 | addMolecule(system); 45 | system.checkpoint("done with molecule add move."); 46 | } // end add 47 | 48 | else { // REMOVE MOLECULE 49 | system.checkpoint("doing molecule delete move."); 50 | removeMolecule(system); 51 | system.checkpoint("done with molecule delete move."); 52 | } // end add vs. remove 53 | return; // we did the add or remove so exit MC step. 54 | } // end doing an add/remove. 55 | } // end if uVT 56 | 57 | 58 | // DISPLACE / ROTATE :: final default (for all: NPT, uVT, NVT, NVE); NVE has special BoltzFact tho. 59 | // make sure it's a movable molecule 60 | system.checkpoint("NOT volume/add/remove :: Starting displace or rotate.."); 61 | displaceMolecule(system); 62 | system.checkpoint("done with displace/rotate"); 63 | return; // done with move, so exit MC step 64 | } 65 | -------------------------------------------------------------------------------- /gui/.qmake.stash: -------------------------------------------------------------------------------- 1 | QMAKE_MAC_SDK.macosx.Path = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk 2 | QMAKE_MAC_SDK.macosx.PlatformPath = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform 3 | QMAKE_MAC_SDK.macosx.SDKVersion = 10.12 4 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang 5 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_CXX = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ 6 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_FIX_RPATH = \ 7 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/install_name_tool \ 8 | -id 9 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_AR = \ 10 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ar \ 11 | cq 12 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_RANLIB = \ 13 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib \ 14 | -s 15 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ 16 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_LINK_SHLIB = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ 17 | QMAKE_MAC_SDK.macx-clang.macosx.QMAKE_ACTOOL = /Applications/Xcode.app/Contents/Developer/usr/bin/actool 18 | QMAKE_CXX.INCDIRS = \ 19 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 \ 20 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/8.1.0/include \ 21 | /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include \ 22 | /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include 23 | QMAKE_CXX.LIBDIRS = /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/lib 24 | QMAKE_CXX.QT_COMPILER_STDCXX = 199711L 25 | QMAKE_CXX.QMAKE_APPLE_CC = 6000 26 | QMAKE_CXX.QMAKE_APPLE_CLANG_MAJOR_VERSION = 8 27 | QMAKE_CXX.QMAKE_APPLE_CLANG_MINOR_VERSION = 1 28 | QMAKE_CXX.QMAKE_APPLE_CLANG_PATCH_VERSION = 0 29 | QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 4 30 | QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 2 31 | QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 1 32 | QMAKE_CXX.COMPILER_MACROS = \ 33 | QT_COMPILER_STDCXX \ 34 | QMAKE_APPLE_CC \ 35 | QMAKE_APPLE_CLANG_MAJOR_VERSION \ 36 | QMAKE_APPLE_CLANG_MINOR_VERSION \ 37 | QMAKE_APPLE_CLANG_PATCH_VERSION \ 38 | QMAKE_GCC_MAJOR_VERSION \ 39 | QMAKE_GCC_MINOR_VERSION \ 40 | QMAKE_GCC_PATCH_VERSION 41 | QMAKE_XCODE_DEVELOPER_PATH = /Applications/Xcode.app/Contents/Developer 42 | QMAKE_XCODE_VERSION = 8.3.3 43 | -------------------------------------------------------------------------------- /src/commy.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | /* 10 | note: this should not be used for publishable research. 11 | It's just a toy-potential for testing different 12 | mathematical forms 13 | */ 14 | 15 | double commy(System &system) { 16 | // the communist potential from 1961 van der Waals paper 17 | // http://iopscience.iop.org/article/10.1070/PU1961v004n02ABEH003330/meta;jsessionid=F9941A012802331F1E4FF488A0F004A9.c4.iopscience.cld.iop.org 18 | double total_pot=0; 19 | const double cutoff = system.pbc.cutoff; 20 | int i,j,k,l; 21 | double r,sr6,r7; 22 | const double numerator= system.constants.HBARC * -23.0; 23 | const double FourPi = 12.566370614359172; 24 | double polar1, polar2; 25 | double attractive, repulsive; // energies 26 | double eps,sig; 27 | 28 | for (i = 0; i < system.molecules.size(); i++) { 29 | for (j = 0; j < system.molecules[i].atoms.size(); j++) { 30 | for (k = i+1; k < system.molecules.size(); k++) { // so if one frozen molecule, frozen-frozen is ignored. 31 | for (l =0; l < system.molecules[k].atoms.size(); l++) { 32 | 33 | attractive=0; 34 | repulsive=0; 35 | 36 | // do mixing rules 37 | eps = system.molecules[i].atoms[j].eps,sig=system.molecules[i].atoms[j].sig; 38 | if (eps != system.molecules[k].atoms[l].eps) 39 | eps = sqrt(eps * system.molecules[k].atoms[l].eps); 40 | if (sig != system.molecules[k].atoms[l].sig) 41 | sig = 0.5 * (sig + system.molecules[k].atoms[l].sig); 42 | 43 | polar1 = system.molecules[i].atoms[j].polar; 44 | polar2 = system.molecules[k].atoms[l].polar; 45 | 46 | // calculate distance between atoms 47 | double* distances = getDistanceXYZ(system, i, j, k, l); 48 | r = distances[3]; //printf("r %f\n", r); 49 | if (sig != 0 && eps != 0) { 50 | sr6 = sig/r; 51 | sr6 *= sr6; 52 | sr6 *= sr6*sr6; 53 | repulsive = 4.0*eps*(sr6*sr6); 54 | } 55 | 56 | if (polar1 != 0 && polar2 != 0) { 57 | r7= r*r; // r2 58 | r7 *= r7 * r7; // r6 59 | r7 *= r; // r7 60 | attractive = ((numerator/(FourPi*r7)) * polar1 * polar2) / 50; // I'm doing the division here to scale down 61 | } 62 | 63 | if ((r <= cutoff)) { 64 | // communist potential is attractive contribution; using normal LJ repulsion contribution 65 | total_pot += attractive + repulsive; 66 | } 67 | 68 | } // loop l 69 | } // loop k 70 | } //loop j 71 | } // loop i 72 | 73 | return total_pot; 74 | 75 | } 76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /gui/fileio.h: -------------------------------------------------------------------------------- 1 | #ifndef FILEIO_H 2 | #define FILEIO_H 3 | 4 | #include 5 | 6 | class FileIO : public QObject 7 | { 8 | Q_OBJECT 9 | 10 | public: 11 | // objects 12 | Q_PROPERTY(QString source 13 | READ source 14 | WRITE setSource 15 | NOTIFY sourceChanged) 16 | Q_PROPERTY(QString grSource 17 | READ grSource 18 | WRITE setgrSource 19 | NOTIFY grSourceChanged) 20 | Q_PROPERTY(QString inputSource 21 | READ inputSource 22 | WRITE setinputSource 23 | NOTIFY inputSourceChanged) 24 | Q_PROPERTY(int linecount 25 | READ linecount 26 | WRITE setLinecount 27 | NOTIFY linecountChanged) 28 | Q_PROPERTY(QString homeDir 29 | READ homeDir 30 | WRITE setHomeDir 31 | NOTIFY homeDirChanged) 32 | Q_PROPERTY(QString workingDir 33 | READ workingDir 34 | WRITE setWorkingDir 35 | NOTIFY workingDirChanged) 36 | Q_PROPERTY(QString mode 37 | READ mode 38 | WRITE setMode 39 | NOTIFY modeChanged) 40 | Q_PROPERTY(QString jobname 41 | READ jobname 42 | WRITE setJobname 43 | NOTIFY jobnameChanged) 44 | explicit FileIO(QObject *parent = 0); 45 | 46 | // functions 47 | Q_INVOKABLE QString read(const QString& data); 48 | Q_INVOKABLE QString read_gr(const QString& data); 49 | Q_INVOKABLE QString read_input(const QString& data); 50 | Q_INVOKABLE int startSimulation(const QString& data, const QString& data2); 51 | Q_INVOKABLE int killSimulation(const QString& data); 52 | Q_INVOKABLE bool write(const QString& data); 53 | 54 | // local objects 55 | QString source() { return mSource; }; 56 | QString grSource() { return mgrSource; }; 57 | QString inputSource() { return minputSource; }; 58 | int linecount() { return mLinecount; }; 59 | QString homeDir() { return mHomedir; }; 60 | QString workingDir() { return mworkingDir; }; 61 | QString mode() { return mmode; }; 62 | QString jobname() { return mjobname; }; 63 | 64 | // setting functions 65 | public slots: 66 | void setSource(const QString& source) { mSource = source; }; 67 | void setLinecount(int& linecount) { mLinecount = linecount; }; 68 | void setHomeDir(const QString& homeDir) { mHomedir = homeDir; }; 69 | void setgrSource(const QString& grSource) { mgrSource = grSource; }; 70 | void setinputSource(const QString& inputSource) { minputSource = inputSource; }; 71 | void setWorkingDir(const QString& workingDir) { mworkingDir = workingDir; }; 72 | void setMode(const QString& mode) { mmode = mode; }; 73 | void setJobname(const QString& jobname) { mjobname = jobname; }; 74 | 75 | // change signals 76 | signals: 77 | void sourceChanged(const QString& source); 78 | void grSourceChanged(const QString& grSource); 79 | void inputSourceChanged(const QString& inputSource); 80 | void linecountChanged(int& linecount); 81 | void homeDirChanged(const QString& homeDir); 82 | void workingDirChanged(const QString& workingDir); 83 | void modeChanged(const QString& mode); 84 | void jobnameChanged(const QString& jobname); 85 | void error(const QString& msg); 86 | 87 | private: 88 | QString mSource; 89 | QString mgrSource; 90 | QString minputSource; 91 | QString mworkingDir; 92 | QString mmode; // "mc" or "md" 93 | QString mjobname; // the name of the job. 94 | 95 | public: 96 | int mLinecount=0; 97 | QString mHomedir; 98 | }; 99 | 100 | #endif // FILEIO_H 101 | -------------------------------------------------------------------------------- /src/potential.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | //#include "distance.cpp" 10 | #include "mixing.cpp" 11 | #include "lj.cpp" 12 | #include "commy.cpp" 13 | #include "coulombic.cpp" 14 | #include "polar.cpp" 15 | #include "tt.cpp" 16 | #include "pairs.cpp" 17 | 18 | // =================== MAIN FUNCTION ====================== 19 | // ---------------POTENTIAL OF ENTIRE SYSTEM -------------- 20 | 21 | double getTotalPotential(System &system) { 22 | system.checkpoint("started getTotalPotential()"); 23 | int_fast8_t model = system.constants.potential_form; 24 | 25 | // initializers 26 | double total_potential=0; 27 | double total_rd=0.0; 28 | double total_es = 0.0; 29 | double total_polar=0.0; 30 | double total_bonded=0.0; 31 | 32 | system.constants.auto_reject=0; 33 | 34 | // ========================================================================= 35 | if (system.molecules.size() > 0) { // don't bother with 0 molecules! 36 | 37 | // REPULSION DISPERSION. 38 | if (model == POTENTIAL_LJ || model == POTENTIAL_LJES || model == POTENTIAL_LJPOLAR || model == POTENTIAL_LJESPOLAR) { 39 | total_rd = lj(system); 40 | } else if (model == POTENTIAL_COMMY || model == POTENTIAL_COMMYES || model == POTENTIAL_COMMYESPOLAR) { 41 | total_rd = commy(system); 42 | } else if (model == POTENTIAL_TT || model == POTENTIAL_TTES || model == POTENTIAL_TTESPOLAR) { 43 | total_rd = tt(system); 44 | } 45 | 46 | // ELECTROSTATIC 47 | if (model == POTENTIAL_LJES || model == POTENTIAL_LJESPOLAR || model == POTENTIAL_COMMYES || model == POTENTIAL_COMMYESPOLAR || model == POTENTIAL_TTES || model == POTENTIAL_TTESPOLAR) { 48 | 49 | if (system.constants.mode=="md" || (!system.constants.auto_reject_option || !system.constants.auto_reject)) { // these only run if MD, or if no bad contact was discovered in MC 50 | if (system.constants.ewald_es) 51 | total_es = coulombic_ewald(system); // using ewald method for es 52 | else 53 | total_es = coulombic(system); // plain old coloumb 54 | } 55 | } 56 | 57 | // POLARIZATION 58 | if (model == POTENTIAL_LJESPOLAR || model == POTENTIAL_LJPOLAR || model == POTENTIAL_COMMYESPOLAR || model == POTENTIAL_TTESPOLAR) { 59 | 60 | if (system.constants.mode=="md" || (!system.constants.auto_reject_option || !system.constants.auto_reject)) { // these only run if MD, or no bad contact was discovered in MC 61 | 62 | total_polar = polarization(system); 63 | } 64 | 65 | } 66 | 67 | // BONDED TERMS 68 | if (system.constants.flexible_frozen || system.constants.md_mode == MD_FLEXIBLE) { 69 | // bond stretches, angle-bends, torsion 70 | total_bonded = totalBondedEnergy(system); // in K 71 | // LJ intramolecular 72 | if (model == POTENTIAL_LJ || model == POTENTIAL_LJES || model == POTENTIAL_LJPOLAR || model == POTENTIAL_LJESPOLAR) 73 | total_rd += system.stats.UintraLJ.value; // in K 74 | // Coulombic intramolecular 75 | if (model == POTENTIAL_LJES || model == POTENTIAL_LJESPOLAR || model == POTENTIAL_COMMYES || model == POTENTIAL_COMMYESPOLAR || model == POTENTIAL_TTES || model == POTENTIAL_TTESPOLAR) 76 | total_es += system.stats.UintraES.value; // in K 77 | } 78 | 79 | } 80 | // ========================================================================== 81 | 82 | total_potential = total_rd + total_es + total_polar + total_bonded; 83 | 84 | // save values to system vars 85 | system.stats.rd.value = total_rd; 86 | system.stats.es.value = total_es; 87 | system.stats.polar.value = total_polar; 88 | system.stats.bonded.value = total_bonded; 89 | system.stats.potential.value = total_potential; 90 | system.stats.potential_sq.value = total_potential*total_potential; 91 | 92 | system.checkpoint("ended getTotalPotential()"); 93 | return total_potential; 94 | } 95 | -------------------------------------------------------------------------------- /src/distance.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | // by giving molecule/atom IDs 7 | double * getDistanceXYZ(System &system, int i, int j, int k, int l) { 8 | if (system.constants.all_pbc) { 9 | // calculate distance between atoms 10 | double rimg; 11 | double d[3],di[3],img[3],dimg[3]; 12 | int p,q; 13 | double r,r2,ri,ri2; 14 | 15 | // get dx dy dz 16 | for (int n=0; n<3; n++) d[n] = system.molecules[i].atoms[j].pos[n] - system.molecules[k].atoms[l].pos[n]; 17 | 18 | // images from reciprocal basis. 19 | for (p=0; p<3; p++) { 20 | img[p] = 0; 21 | for (q=0; q<3; q++) { 22 | img[p] += system.pbc.reciprocal_basis[q][p]*d[q]; 23 | } 24 | img[p] = rint(img[p]); 25 | } 26 | 27 | // get d_image 28 | for (p=0; p<3; p++) { 29 | di[p]=0; 30 | for (q=0; q<3; q++) { 31 | di[p] += system.pbc.basis[q][p]*img[q]; 32 | } 33 | } 34 | 35 | // correct displacement 36 | for (p=0; p<3; p++) 37 | di[p] = d[p] - di[p]; 38 | 39 | // pythagorean terms 40 | r2=0; 41 | ri2=0; 42 | for (p=0; p<3; p++) { 43 | r2 += d[p]*d[p]; 44 | ri2 += di[p]*di[p]; 45 | } 46 | r = sqrt(r2); 47 | ri = sqrt(ri2); 48 | 49 | if (ri != ri) { 50 | //if (isnan(ri) != 0 ) { 51 | rimg = r; 52 | for (p=0; p<3; p++) 53 | dimg[p] = d[p]; 54 | } else { 55 | rimg = ri; 56 | for (p=0; p<3; p++) 57 | dimg[p] = di[p]; 58 | } 59 | 60 | static double output[4]; 61 | for (p=0; p<3; p++) output[p] = dimg[p]; 62 | output[3] = rimg; 63 | return output; 64 | } 65 | else // NO PBC calculation. 66 | { 67 | // no PBC r 68 | double d[3]; 69 | for (int n=0; n<3; n++) d[n] = system.molecules[i].atoms[j].pos[n] - system.molecules[k].atoms[l].pos[n]; 70 | static double output[4]; 71 | for (int p=0; p<3; p++) output[p] = d[p]; 72 | output[3] = sqrt(dddotprod(d, d)); 73 | return output; 74 | } 75 | } 76 | 77 | // by giving two r vectors. 78 | double * getR(System &system, double * com1, double * com2, int pbcflag) { 79 | if (pbcflag) { 80 | double rimg; 81 | double d[3],di[3],img[3],dimg[3]; 82 | int p,q; 83 | double r,r2,ri,ri2; 84 | 85 | // get dx dy dz 86 | for (int n=0; n<3; n++) d[n] = com1[n] - com2[n]; 87 | 88 | // images from reciprocal basis. 89 | for (p=0; p<3; p++) { 90 | img[p] = 0; 91 | for (q=0; q<3; q++) { 92 | img[p] += system.pbc.reciprocal_basis[q][p]*d[q]; 93 | } 94 | img[p] = rint(img[p]); 95 | } 96 | 97 | // get d_image 98 | for (p=0; p<3; p++) { 99 | di[p]=0; 100 | for (q=0; q<3; q++) { 101 | di[p] += system.pbc.basis[q][p]*img[q]; 102 | } 103 | } 104 | 105 | // correct displacement 106 | for (p=0; p<3; p++) 107 | di[p] = d[p] - di[p]; 108 | 109 | // pythagorean terms 110 | r2=0; 111 | ri2=0; 112 | for (p=0; p<3; p++) { 113 | r2 += d[p]*d[p]; 114 | ri2 += di[p]*di[p]; 115 | } 116 | r = sqrt(r2); 117 | ri = sqrt(ri2); 118 | 119 | if (ri != ri) { 120 | rimg = r; 121 | for (p=0; p<3; p++) 122 | dimg[p] = d[p]; 123 | } else { 124 | rimg = ri; 125 | for (p=0; p<3; p++) 126 | dimg[p] = di[p]; 127 | } 128 | 129 | 130 | static double output[4]; 131 | for (p=0; p<3; p++) output[p] = dimg[p]; 132 | output[3] = rimg; 133 | return output; 134 | 135 | } else { 136 | // no pbc 137 | double d[3]; 138 | for (int n=0; n<3; n++) d[n] = com1[n] - com2[n]; 139 | static double output[4]; 140 | for (int p=0; p<3; p++) output[p] = d[p]; 141 | output[3] = sqrt(dddotprod(d, d)); 142 | return output; 143 | } 144 | } 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /src/md.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #define _USE_MATH_DEFINES 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | // ==================== MOVE ATOMS MD STYLE ========================= 11 | /* THIS IS THE MAIN INTEGRATOR FUNCTION. calculateForces() is called within */ 12 | void integrate(System &system) { 13 | system.checkpoint("started integrate()"); 14 | int i,j,n; 15 | // DEBUG 16 | int_fast8_t debug=0; 17 | if (debug == 1) { 18 | for (j=0; j 2 | #define _USE_MATH_DEFINES 3 | #include 4 | #include 5 | #include 6 | using namespace std; 7 | 8 | 9 | // ================================================================================== 10 | /* THE BOLTZMANN FACTOR FUNCTION */ 11 | // ================================================================================== 12 | double get_boltzmann_factor(System &system, double e_i, double e_f, int_fast8_t movetype) { 13 | double bf, MAXVALUE=1e4; // we won't care about huge bf's for averaging 14 | double energy_delta = e_f - e_i; 15 | double fugacity; 16 | 17 | // determine fugacity 18 | if (system.proto.size() == 1 && system.constants.sorbate_name.size() == 0 && system.constants.fugacity_single == 0) fugacity = system.constants.pres; 19 | else if (system.constants.fugacity_single == 1) fugacity = system.proto[0].fugacity; 20 | else fugacity = system.proto[system.constants.currentprotoid].fugacity; 21 | 22 | // check for N bias (loading bias) 23 | if (system.constants.bias_uptake_switcher) { 24 | if ((double)system.stats.count_movables >= system.constants.bias_uptake) { 25 | //fugacity *= 3; // big, but not too big, for biased insertions 26 | system.constants.bias_uptake_switcher=0; // done biasing if we exceed the bias-N 27 | printf("Loading bias deactivated! (Desired N reached).\n"); 28 | } 29 | } 30 | 31 | if (system.constants.ensemble == ENSEMBLE_UVT) { 32 | if (movetype == MOVETYPE_INSERT) { 33 | bf = system.pbc.volume * fugacity * 34 | system.constants.ATM2REDUCED/(system.constants.temp * 35 | (double)(system.stats.count_movables)) * 36 | exp(-energy_delta/system.constants.temp) * 37 | (double)system.proto.size(); // bias for multisorbate (thus no change for single) 38 | if (bf < MAXVALUE) system.stats.insert_bf_sum += bf; 39 | else system.stats.insert_bf_sum += MAXVALUE; 40 | } 41 | else if (movetype == MOVETYPE_REMOVE) { 42 | bf = system.constants.temp * 43 | ((double)(system.stats.count_movables) + 1.0)/ 44 | (system.pbc.volume* fugacity *system.constants.ATM2REDUCED) * 45 | exp(-energy_delta/system.constants.temp) / 46 | (double)system.proto.size(); // bias for multisorbate (thus no change for single) 47 | if (bf < MAXVALUE) system.stats.remove_bf_sum += bf; 48 | else system.stats.remove_bf_sum += MAXVALUE; 49 | } 50 | else if (movetype == MOVETYPE_DISPLACE) { 51 | bf = exp(-energy_delta/(system.constants.temp)); 52 | if (bf < MAXVALUE) system.stats.displace_bf_sum += bf; 53 | else system.stats.displace_bf_sum += MAXVALUE; 54 | } 55 | } 56 | else if (system.constants.ensemble == ENSEMBLE_NVT) { 57 | if (movetype == MOVETYPE_DISPLACE) { 58 | bf = exp(-energy_delta/(system.constants.temp)); 59 | if (bf < MAXVALUE) system.stats.displace_bf_sum += bf; 60 | else system.stats.displace_bf_sum += MAXVALUE; 61 | } 62 | } 63 | else if (system.constants.ensemble == ENSEMBLE_NPT) { 64 | if (movetype == MOVETYPE_VOLUME) { 65 | // Frenkel Smit p118 66 | bf= exp(-( (energy_delta) 67 | + system.constants.pres * system.constants.ATM2REDUCED * 68 | (system.pbc.volume - system.pbc.old_volume) 69 | - (system.stats.count_movables + 1) * system.constants.temp * 70 | log(system.pbc.volume/system.pbc.old_volume))/system.constants.temp); 71 | 72 | if (bf < MAXVALUE) system.stats.volume_change_bf_sum += bf; 73 | else system.stats.volume_change_bf_sum += MAXVALUE; 74 | } 75 | else if (movetype == MOVETYPE_DISPLACE) { 76 | bf = exp(-energy_delta/system.constants.temp); 77 | if (bf < MAXVALUE) system.stats.displace_bf_sum += bf; 78 | else system.stats.displace_bf_sum += MAXVALUE; 79 | } 80 | } 81 | else if (system.constants.ensemble == ENSEMBLE_NVE) { 82 | if (movetype == MOVETYPE_DISPLACE) { 83 | double exponent = 3.0*system.stats.count_movables/2.0; 84 | bf = pow( 85 | (system.constants.total_energy - e_f), exponent) / 86 | pow( 87 | (system.constants.total_energy - e_i), exponent); 88 | if (bf < MAXVALUE) system.stats.displace_bf_sum += bf; 89 | else system.stats.displace_bf_sum += MAXVALUE; 90 | } 91 | } 92 | 93 | if (bf > MAXVALUE) { 94 | bf = MAXVALUE; 95 | } 96 | else if (std::isinf(bf)) { 97 | printf("GOT INF! bf = %f\n", bf); 98 | } 99 | return bf; 100 | } 101 | -------------------------------------------------------------------------------- /src/observables.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #define _USE_MATH_DEFINES 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | /* these calculations are only a select few 12 | most calculations are performed within averages.cpp 13 | e.g. kinetic energy, diffusion, Cv, etc. 14 | */ 15 | 16 | double calcTemperature(System &system, int * N_local, double * v2_sum) { 17 | // returns the whole system temperature 18 | // get Temperature. Frenkel p64 and p84 19 | // each sorbate has its own contribution to total T, 20 | // scaled by representation N_sorb/N_total 21 | // TODO --- integrate the movable MOF temperature here by its D.O.F. 22 | double T=0; 23 | 24 | if (system.constants.md_mode == MD_MOLECULAR) { 25 | double dof_total = 0; 26 | for (unsigned int z=0; z 2 | #include 3 | #ifdef WINDOWS 4 | #include 5 | #else 6 | #include 7 | #endif 8 | #include 9 | #include 10 | #define _USE_MATH_DEFINES 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | 19 | /* quick function for getting volume of a sphere (for normalization of distribution) */ 20 | double sphere_volume(double r) { 21 | return (4.0/3.0)*M_PI*(r*r*r); 22 | } 23 | 24 | /* THIS FUNCTION SETS UP THE INITIAL VECTOR FOR RADIAL DISTRIBUTION */ 25 | void setupRadialDist(System &system) { 26 | 27 | int num_bins = ceil(system.stats.radial_max_dist / system.stats.radial_bin_size); 28 | printf("The number of radial bins to create is %i\n", num_bins); 29 | printf("The number of different g(r) pair calculations is %i\n", (int)system.stats.radial_centroid.size()); 30 | 31 | vector dummy; // dummy to push into the vector of g(r)'s 32 | 33 | // make vectors to hold each g(r), and fill each with zero in all bins 34 | for (int z=0; z49. 42 | // if dist between 0.0 and 0.2, index 0++, etc. 43 | // ... if dist between 9.8 and 10.0, index 49++. 44 | 45 | return; 46 | } 47 | 48 | 49 | /* THIS FUNCTION WILL BE CALLED EVERY CORRTIME AND WILL ADD TO BINS AS NEEDED */ 50 | void radialDist(System &system) { 51 | const double bin_size = system.stats.radial_bin_size; 52 | const double max_dist = system.stats.radial_max_dist; 53 | 54 | for (int y=0; y<(int)system.stats.radial_bins.size(); y++) { 55 | 56 | string centroid = system.stats.radial_centroid[y]; 57 | string counterpart = system.stats.radial_counterpart[y]; 58 | 59 | // loop through all the atom pairs. Doing intramolecular too b/c MD needs it sometimes. 60 | for (int i=0; i index 0; 0.25/0.2 -> index 1.. 76 | system.stats.radial_bins[y][indexr]++; 77 | } // end dist maximum r = 1 125 | radfile << system.stats.radial_bins[y][i]/(spherev - prevspherev)/sum; //*100; 126 | radfile << "\n"; 127 | prevspherev = spherev; 128 | } 129 | radfile.close(); 130 | 131 | } // end loop y for different g(r)'s 132 | return; 133 | } 134 | 135 | 136 | // this is a special-case g(r) where atoms within a radius from (0,0,0) are counted. 137 | void countAtomInRadius(System &system, string atomname, double radius) { 138 | int count=0; 139 | double r=0; 140 | // loop through all atoms and count the number that are within radius 141 | for (int i=0; iMassively Parallel Monte Carlo (MPMC), another code developed and maintained by our laboratory, led by Brian Space at the University of South Florida, Dept. of Chemistry, Smart Metal-organic Materials Advanced Research and Technology Transfer (SMMARTT). 3 | 4 | ![MCMD simulation screenshot](https://github.com/khavernathy/mcmd/blob/master/gui/images/mof%2Bco2.png) 5 | 6 | # Quick start: 7 | 12 | Using a terminal,
13 |     0. (On Windows only) Get the Linux Subsystem (easier instructions for beginners) (or equivalent software, e.g. CygWin): 14 | 1. Download:
15 | `git clone https://github.com/khavernathy/mcmd` or download .zip file
16 | 17 | 2. Compile:
18 | `cd mcmd`
19 | `cd src`
20 | `bash compile.sh [ options ]`
21 | `cd ..`
22 | `export PATH=$PATH:/path/to/mcmd/`
23 | 24 | 3. Run:
25 | `mcmd mcmd.inp`

26 | 27 | # Update 28 | `cd mcmd`
29 | `git pull`
30 | `cd src`
31 | `bash compile.sh [ options ]`
32 | 33 | # Advanced compilation 34 | Take a look at mcmd/src/compile.sh for different options in compilation (OS-specific, CUDA implementation, OpenMP, optimization on different HPC systems, etc.) 35 | 36 |
37 | 38 | # Docs 39 | You can find details on available options, built-in potentials, etc. on the wiki page: https://github.com/khavernathy/mcmd/wiki 40 | 41 | # Contact 42 | Douglas Franz: douglas.m.franz@gmail.com 43 | University of South Florida 44 | Dept. of Chemistry 45 | 46 | [![MCMD](https://img.youtube.com/vi/rSj4Q_VtO-Y/0.jpg)](https://www.youtube.com/watch?v=rSj4Q_VtO-Y) 47 | 48 | # Features 49 |  -> Monte Carlo simulation in NPT, NVT, NVE, and μVT ensembles.
50 |  -> Molecular Dynamics simulation in NVT, NVE, and μVT ensembles.
51 |  -> A crystal builder to create fully parameterized supercells from unit cells.
52 |  -> A fragment creator based around uniquely named atoms.
53 |  -> A LAMMPS input file exporter.
54 |  -> Trajectories and restart files in various formats.
55 |  -> Automatic radial distribution calculator
56 |  -> Hard-coded molecular models for easy input, including multi-molecule support
57 |  -> Easy system basis parametrization via a, b, c, α, β, γ crystal parameters, or basis vectors
58 |  -> Quick routines for energy/force computation
59 |  -> Simulated annealing
60 |  -> Any periodic cell is supported for both MC and MD; non-periodic systems also supported.
61 |  -> Potentials available are Lennard-Jones (12-6), Tang-Toennies (6-8-10), Ewald electrostatics, and Thole-Applequist polarization.
62 |  -> Built-in force fields from UFF, OPLS, and other sources
63 |  -> Sample inputs are included. The program takes just one argument: the input file (which itself usually points to a file containing starting atoms).
64 | 65 | # What can be obtained from this software 66 | The program outputs several quantities of interest:
67 |  ->Uptake of sorbates in wt%, reduced wt%, cm^3/g, mmol/g and mg/g
68 |  ->Excess adsorption ratio in mg/g
69 |  ->Selectivities for multi-sorbate simulation
70 |  ->Qst (heat of sorption) for sorbate
71 |  ->Sorbate occupation about some site/atom (g(r))
72 |  ->Diffusion coefficient and specific heat
73 |  ->Trajectory and restart files to easily pickup a halted job and visualize simulation
74 |  ->3D histogram data for visualization of sorbate occupation in a material (density visualization).
75 |  ->Induced dipole strengths for polarization simulations
76 | 77 | # Operating System requirements 78 | MCMD works out-of-the-box on
79 |  -> Linux (tested on Ubuntu 16.04)
80 |  -> Mac (tested on OS X El Capitan v10.11.6)
81 |  -> Windows (tested using Cygwin and Windows 7 with gcc 5.4.0 installed)
82 |  -> Raspberry Pi (3, using Raspian OS).

83 | 84 | # Visualization 85 | We recommend Visual Molecular Dynamics (VMD) for data visualization, but the output is compatible with most other software, e.g. Avogadro, Molden, Ovito, etc.
86 | 87 | # Cite MCMD 88 | 89 | Franz, D. M. et al. MPMC and MCMD: Free High‐Performance Simulation Software for Atomistic Systems. Adv. Theory Sim., 2019. DOI: 10.1002/adts.201900113 90 | 91 | # Selected Publications 92 | Below is a list of scientific publications/presentations that have been facilitated by this software. 93 | 94 | 1. Mukherjee, S. et al. Trace CO2 Capture by an Ultramicroporous Physisorbent with Low Water Affinity. Science Advances, 2019. DOI:10.1126/sciadv.aax9171 95 | 96 | 2. Franz, D. M., Forrest, K. A., Pham, T., & Space, B. (2016). Accurate H2 Sorption Modeling in the rht-MOF NOTT-112 Using Explicit Polarization. Crystal Growth & Design, 16(10), 6024-6032. DOI:10.1021/acs.cgd.6b01058 97 | 98 | 3. Mukherjee et al. Halogen‐C2H2 Binding in Ultramicroporous MOFs for Benchmark C2H2/CO2 Separation Selectivity. Chem. Eur. J. 2020. DOI:10.1002/chem.202000008 99 | 100 | 4. Pham, T., Forrest, K. A., Franz, D. M., Guo, Z., Chen, B., & Space, B. (2017). Predictive models of gas sorption in a metal–organic framework with open-metal sites and small pore sizes. Physical Chemistry Chemical Physics, 19(28), 18587-18602. DOI:10.1039/C7CP02767B 101 | 102 | 5. Pham, T., Forrest, K. A., Franz, D. M., & Space, B. (2017). Experimental and theoretical investigations of the gas adsorption sites in rht-metal-organic frameworks. CrystEngComm, 19, 4646-4665. DOI:10.1039/C7CE01032J 103 | 104 | 6. Franz, D. M.; Dyott, Z.; Forrest, K. A.; Hogan, A.; Pham, T.; Space, B. Simulations of hydrogen, carbon dioxide, and small hydrocarbon sorption in a nitrogen-rich rht-metal–organic framework. Phys. Chem. Chem. Phys. 2017. DOI:10.1039/C7CP06885A 105 | 106 | 7. Franz, D. M.; Djulbegovic, M.; Pham, T.; Space, B. Theoretical study of the effect of halogen substitution in molecular porous materials for CO2 and C2H2 sorption. AIMS Materials Science. 2017. DOI:10.3934/matersci.2018.2.226 107 | 108 | 8. Forrest, K. A.; Franz, D. M.; Pham, T. ; Space, B. Investigating C2H2 sorption in a-[M3(O2CH)6] (M = Mg, Mn) Through Theoretical Studies. Cryst. Growth Des. 2018. DOI:10.1021/acs.cgd.8b00770 109 | 110 | 9. Yu et al. Enhanced Gas Uptake in a Microporous Metal–Organic Framework via a Sorbate Induced-Fit Mechanism. J. Amer. Chem. Soc. 2019. DOI:10.1021/jacs.9b07807 111 | 112 | 10. Pal et al. A Microporous Co-MOF for Highly Selective CO2 Sorption in High Loadings Involving Aryl C–H...O=C=O Interactions: Combined Simulation and Breakthrough Studies" ACS Inorganic Chem., 2019. DOI:10.1021/acs.inorgchem.9b01402 113 | 114 | 115 | 116 | 122 | 123 | 126 | -------------------------------------------------------------------------------- /gui/moc_viz.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'viz.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.1) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include "viz.h" 10 | #include 11 | #include 12 | #if !defined(Q_MOC_OUTPUT_REVISION) 13 | #error "The header file 'viz.h' doesn't include ." 14 | #elif Q_MOC_OUTPUT_REVISION != 67 15 | #error "This file was generated using the moc from 5.9.1. It" 16 | #error "cannot be used with the include files from this version of Qt." 17 | #error "(The moc has changed too much.)" 18 | #endif 19 | 20 | QT_BEGIN_MOC_NAMESPACE 21 | QT_WARNING_PUSH 22 | QT_WARNING_DISABLE_DEPRECATED 23 | struct qt_meta_stringdata_Viz_t { 24 | QByteArrayData data[10]; 25 | char stringdata0[72]; 26 | }; 27 | #define QT_MOC_LITERAL(idx, ofs, len) \ 28 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 29 | qptrdiff(offsetof(qt_meta_stringdata_Viz_t, stringdata0) + ofs \ 30 | - idx * sizeof(QByteArrayData)) \ 31 | ) 32 | static const qt_meta_stringdata_Viz_t qt_meta_stringdata_Viz = { 33 | { 34 | QT_MOC_LITERAL(0, 0, 3), // "Viz" 35 | QT_MOC_LITERAL(1, 4, 15), // "trajNameChanged" 36 | QT_MOC_LITERAL(2, 20, 0), // "" 37 | QT_MOC_LITERAL(3, 21, 9), // "traj_name" 38 | QT_MOC_LITERAL(4, 31, 5), // "error" 39 | QT_MOC_LITERAL(5, 37, 3), // "msg" 40 | QT_MOC_LITERAL(6, 41, 11), // "setTrajName" 41 | QT_MOC_LITERAL(7, 53, 7), // "openVMD" 42 | QT_MOC_LITERAL(8, 61, 4), // "data" 43 | QT_MOC_LITERAL(9, 66, 5) // "data2" 44 | 45 | }, 46 | "Viz\0trajNameChanged\0\0traj_name\0error\0" 47 | "msg\0setTrajName\0openVMD\0data\0data2" 48 | }; 49 | #undef QT_MOC_LITERAL 50 | 51 | static const uint qt_meta_data_Viz[] = { 52 | 53 | // content: 54 | 7, // revision 55 | 0, // classname 56 | 0, 0, // classinfo 57 | 4, 14, // methods 58 | 1, 48, // properties 59 | 0, 0, // enums/sets 60 | 0, 0, // constructors 61 | 0, // flags 62 | 2, // signalCount 63 | 64 | // signals: name, argc, parameters, tag, flags 65 | 1, 1, 34, 2, 0x06 /* Public */, 66 | 4, 1, 37, 2, 0x06 /* Public */, 67 | 68 | // slots: name, argc, parameters, tag, flags 69 | 6, 1, 40, 2, 0x0a /* Public */, 70 | 71 | // methods: name, argc, parameters, tag, flags 72 | 7, 2, 43, 2, 0x02 /* Public */, 73 | 74 | // signals: parameters 75 | QMetaType::Void, QMetaType::QString, 3, 76 | QMetaType::Void, QMetaType::QString, 5, 77 | 78 | // slots: parameters 79 | QMetaType::Void, QMetaType::QString, 3, 80 | 81 | // methods: parameters 82 | QMetaType::Void, QMetaType::QString, QMetaType::QString, 8, 9, 83 | 84 | // properties: name, type, flags 85 | 3, QMetaType::QString, 0x00495003, 86 | 87 | // properties: notify_signal_id 88 | 0, 89 | 90 | 0 // eod 91 | }; 92 | 93 | void Viz::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 94 | { 95 | if (_c == QMetaObject::InvokeMetaMethod) { 96 | Viz *_t = static_cast(_o); 97 | Q_UNUSED(_t) 98 | switch (_id) { 99 | case 0: _t->trajNameChanged((*reinterpret_cast< const QString(*)>(_a[1]))); break; 100 | case 1: _t->error((*reinterpret_cast< const QString(*)>(_a[1]))); break; 101 | case 2: _t->setTrajName((*reinterpret_cast< const QString(*)>(_a[1]))); break; 102 | case 3: _t->openVMD((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< const QString(*)>(_a[2]))); break; 103 | default: ; 104 | } 105 | } else if (_c == QMetaObject::IndexOfMethod) { 106 | int *result = reinterpret_cast(_a[0]); 107 | void **func = reinterpret_cast(_a[1]); 108 | { 109 | typedef void (Viz::*_t)(const QString & ); 110 | if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&Viz::trajNameChanged)) { 111 | *result = 0; 112 | return; 113 | } 114 | } 115 | { 116 | typedef void (Viz::*_t)(const QString & ); 117 | if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&Viz::error)) { 118 | *result = 1; 119 | return; 120 | } 121 | } 122 | } 123 | #ifndef QT_NO_PROPERTIES 124 | else if (_c == QMetaObject::ReadProperty) { 125 | Viz *_t = static_cast(_o); 126 | Q_UNUSED(_t) 127 | void *_v = _a[0]; 128 | switch (_id) { 129 | case 0: *reinterpret_cast< QString*>(_v) = _t->traj_name(); break; 130 | default: break; 131 | } 132 | } else if (_c == QMetaObject::WriteProperty) { 133 | Viz *_t = static_cast(_o); 134 | Q_UNUSED(_t) 135 | void *_v = _a[0]; 136 | switch (_id) { 137 | case 0: _t->setTrajName(*reinterpret_cast< QString*>(_v)); break; 138 | default: break; 139 | } 140 | } else if (_c == QMetaObject::ResetProperty) { 141 | } 142 | #endif // QT_NO_PROPERTIES 143 | } 144 | 145 | const QMetaObject Viz::staticMetaObject = { 146 | { &QObject::staticMetaObject, qt_meta_stringdata_Viz.data, 147 | qt_meta_data_Viz, qt_static_metacall, nullptr, nullptr} 148 | }; 149 | 150 | 151 | const QMetaObject *Viz::metaObject() const 152 | { 153 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 154 | } 155 | 156 | void *Viz::qt_metacast(const char *_clname) 157 | { 158 | if (!_clname) return nullptr; 159 | if (!strcmp(_clname, qt_meta_stringdata_Viz.stringdata0)) 160 | return static_cast(const_cast< Viz*>(this)); 161 | return QObject::qt_metacast(_clname); 162 | } 163 | 164 | int Viz::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 165 | { 166 | _id = QObject::qt_metacall(_c, _id, _a); 167 | if (_id < 0) 168 | return _id; 169 | if (_c == QMetaObject::InvokeMetaMethod) { 170 | if (_id < 4) 171 | qt_static_metacall(this, _c, _id, _a); 172 | _id -= 4; 173 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 174 | if (_id < 4) 175 | *reinterpret_cast(_a[0]) = -1; 176 | _id -= 4; 177 | } 178 | #ifndef QT_NO_PROPERTIES 179 | else if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty 180 | || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { 181 | qt_static_metacall(this, _c, _id, _a); 182 | _id -= 1; 183 | } else if (_c == QMetaObject::QueryPropertyDesignable) { 184 | _id -= 1; 185 | } else if (_c == QMetaObject::QueryPropertyScriptable) { 186 | _id -= 1; 187 | } else if (_c == QMetaObject::QueryPropertyStored) { 188 | _id -= 1; 189 | } else if (_c == QMetaObject::QueryPropertyEditable) { 190 | _id -= 1; 191 | } else if (_c == QMetaObject::QueryPropertyUser) { 192 | _id -= 1; 193 | } 194 | #endif // QT_NO_PROPERTIES 195 | return _id; 196 | } 197 | 198 | // SIGNAL 0 199 | void Viz::trajNameChanged(const QString & _t1) 200 | { 201 | void *_a[] = { nullptr, const_cast(reinterpret_cast(&_t1)) }; 202 | QMetaObject::activate(this, &staticMetaObject, 0, _a); 203 | } 204 | 205 | // SIGNAL 1 206 | void Viz::error(const QString & _t1) 207 | { 208 | void *_a[] = { nullptr, const_cast(reinterpret_cast(&_t1)) }; 209 | QMetaObject::activate(this, &staticMetaObject, 1, _a); 210 | } 211 | QT_WARNING_POP 212 | QT_END_MOC_NAMESPACE 213 | -------------------------------------------------------------------------------- /gui/fileio.cpp: -------------------------------------------------------------------------------- 1 | #include "fileio.h" 2 | #include 3 | #include 4 | #include 5 | #include "unistd.h" 6 | 7 | #include 8 | #include 9 | #include 10 | using namespace std; 11 | 12 | FileIO::FileIO(QObject *parent) : 13 | QObject(parent) 14 | { 15 | 16 | } 17 | 18 | QString FileIO::read(const QString& data) 19 | { 20 | mSource = data+"/runlog.log"; 21 | /* 22 | // dynamically find the home directory (based on Linux or Mac) 23 | QString homeDir; 24 | string linuxcheck="/proc/cpuinfo"; 25 | //linux 26 | if (std::ifstream(linuxcheck.c_str())) { 27 | string usfspace = "/home/dfranz"; 28 | string homebox = "/home/khavernathy"; 29 | if (std::ifstream(usfspace.c_str())) { 30 | homeDir = "/home/dfranz"; 31 | } else { 32 | homeDir = "/home/khavernathy"; 33 | } 34 | } else { 35 | // mac 36 | homeDir = "/Users/douglasfranz"; 37 | } 38 | 39 | mSource = homeDir + "/mcmd/testzone/runlog.log"; 40 | */ 41 | 42 | if (mSource.isEmpty()){ 43 | emit error("source is empty"); 44 | return QString(); 45 | } 46 | 47 | QFile file(mSource); 48 | QString fileContent; 49 | if ( file.open(QIODevice::ReadOnly) ) { 50 | QString line; 51 | QTextStream t( &file ); 52 | int recounter=0; 53 | int limit=mLinecount; 54 | bool write = false; 55 | bool firstCheck = false; 56 | if (recounter == 0 && limit == 0) firstCheck = true; 57 | //printf("firstCheck is %i and mLinecount is currently %i\n",firstCheck,mLinecount); 58 | do { 59 | line = t.readLine(); 60 | //if (line.indexOf("MCMD") != -1) printf("recounter %i; lim %i; %s\n", recounter, limit, line.toLatin1().data()); 61 | if (firstCheck) { 62 | write = true; 63 | } else { 64 | if (limit < recounter+1) { 65 | write = true; 66 | } 67 | } 68 | if (write) { 69 | 70 | QString spacer=""; 71 | if (recounter<9) spacer = " | "; 72 | else if (recounter<99) spacer = " | "; 73 | else if (recounter<999) spacer = " | "; 74 | else if (recounter<9999) spacer = " | "; 75 | else if (recounter<99999) spacer = " | "; 76 | else if (recounter<999999) spacer = " | "; 77 | else if (recounter<9999999) spacer = "| "; 78 | 79 | // make sure it's a real line. 80 | if (!line.isNull()) 81 | fileContent += "\n"+QString::number(recounter+1)+spacer+line; 82 | 83 | //fileContent += "\n"+line; 84 | } 85 | recounter++; 86 | 87 | } while (!line.isNull()); 88 | //printf(" ---> TOTAL LINES at %i\n",recounter); 89 | 90 | mLinecount = recounter-1; 91 | 92 | file.close(); 93 | } else { 94 | emit error("Unable to open the runlog file "+mSource); 95 | return QString(); 96 | } 97 | return fileContent; 98 | } 99 | 100 | QString FileIO::read_gr(const QString& data) { 101 | 102 | mgrSource = data + "/radial_distribution.dat0"; 103 | //mgrSource = "/home/khavernathy/mcmd/src/build-gui_mcmd-Desktop_Qt_5_9_1_GCC_64bit-Debug/radial_distribution.dat0"; 104 | //mgrSource = mworkingDir + "/radial_distribution.dat0"; 105 | //mgrSource = qApp->applicationDirPath() + "/radial_distribution.dat0"; 106 | if (mgrSource.isEmpty()){ 107 | emit error("source is empty"); 108 | return QString(); 109 | } 110 | 111 | QFile file(mgrSource); 112 | QString fileContent; 113 | if ( file.open(QIODevice::ReadOnly) ) { 114 | QString line; 115 | QTextStream t( &file ); 116 | do { 117 | line = t.readLine(); 118 | fileContent += line+"\n"; 119 | } while (!line.isNull()); 120 | file.close(); 121 | } else { 122 | emit error("Unable to open the g(r) file "+mgrSource); 123 | return QString(); 124 | } 125 | return fileContent; 126 | } 127 | 128 | QString FileIO::read_input(const QString& data) { 129 | minputSource = data; 130 | minputSource.remove(0,7); // truncate "file://" 131 | 132 | if (minputSource.isEmpty()){ 133 | emit error("source is empty"); 134 | return QString(); 135 | } 136 | 137 | QFile file(minputSource); 138 | QString fileContent; 139 | if ( file.open(QIODevice::ReadOnly) ) { 140 | QString line; 141 | QTextStream t( &file ); 142 | do { 143 | line = t.readLine(); 144 | fileContent += line+"\n"; 145 | } while (!line.isNull()); 146 | file.close(); 147 | } else { 148 | emit error("Unable to open the file"+minputSource); 149 | return QString(); 150 | } 151 | return fileContent; 152 | } 153 | 154 | 155 | bool FileIO::write(const QString& data) 156 | { 157 | if (minputSource.isEmpty()) 158 | return false; 159 | 160 | QFile file(minputSource); 161 | if (!file.open(QFile::WriteOnly | QFile::Truncate)) 162 | return false; 163 | 164 | QTextStream out(&file); 165 | out << data; 166 | 167 | file.close(); 168 | 169 | return true; 170 | } 171 | 172 | int FileIO::startSimulation(const QString& data, const QString& data2) 173 | { 174 | string homeDir; 175 | string linuxcheck="/proc/cpuinfo"; 176 | //linux 177 | if (std::ifstream(linuxcheck.c_str())) { 178 | string usfspace = "/home/dfranz"; 179 | string homebox = "/home/khavernathy"; 180 | if (std::ifstream(usfspace.c_str())) { 181 | homeDir = usfspace; 182 | } else { 183 | homeDir = homebox; 184 | } 185 | } else { 186 | // mac 187 | homeDir = "/Users/douglasfranz"; 188 | } 189 | 190 | //string commandString = homeDir+"/mcmd/mcmd "+homeDir+"/mcmd/testzone/mcmd.inp | tee "+homeDir+"/mcmd/testzone/runlog.log &"; 191 | // dev/null is important to supress MCMD output in Qt Application Output 192 | string filename = data.toStdString(); 193 | string runlogFile = data2.toStdString() + "/runlog.log"; 194 | string placeholder = filename; 195 | 196 | // determine working directory at location of input file. 197 | string delimeter = "/"; 198 | string token; 199 | string workingDir; // = delimeter; // start at root 200 | size_t pos = 0; 201 | while ((pos = placeholder.find(delimeter)) != std::string::npos) { 202 | token = placeholder.substr(0, pos); 203 | //std::cout << token << endl; 204 | workingDir = workingDir + token + delimeter; // build the working dir piece by piece 205 | placeholder.erase(0, pos + delimeter.length()); 206 | } 207 | //std::cout << "final token: " << token << endl; 208 | std::cout << "working dir is " << workingDir << endl; 209 | mworkingDir = QString::fromStdString(workingDir); 210 | 211 | // write it to a runlog in working dir. 212 | string cdString = "cd "+workingDir; 213 | system(cdString.c_str()); 214 | string commandString = homeDir+"/mcmd/mcmd "+filename+" | tee "+runlogFile+" >/dev/null &"; 215 | // RUN MCMD 216 | system(commandString.c_str()); 217 | return 0; 218 | } 219 | 220 | int FileIO::killSimulation(const QString& data) 221 | { 222 | string filename = data.toStdString(); 223 | string commandString = "kill -9 $(ps aux | grep '"+filename+"' | awk {'print $2'})"; 224 | system(commandString.c_str()); 225 | qDebug() << "Tried to kill simulation via: " << QString::fromStdString(commandString); 226 | return 0; 227 | } 228 | -------------------------------------------------------------------------------- /src/compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ######################### 4 | # HOW TO USE THIS SCRIPT 5 | # bash compile.sh [type] [HPC cluster if any] 6 | # 7 | # e.g. 8 | # 9 | # bash compile.sh Defaults to cpu compilation 10 | # bash compile.sh cpu (same result; for a single computer on Mac or Linux or RaspPi) 11 | # bash compile.sh cpu linux (optimized for linux (ONLY)) 12 | # bash compile.sh cpu windows (for use on Windows ONLY -- you must have gcc installed, e.g. through Cygwin) 13 | # note -- to install on windows through the command line, 14 | # run the following commands: 15 | # "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\vsdevcmd" 16 | # cl /EHsc main.cpp /D "WINDOWS" /Fe..\mcmd 17 | # this will write a windows executable called mcmd.exe in the main directory 18 | # bash compile.sh cpu debug (same but with errors/warnings) 19 | # bash compile.sh cpu circe (for CIRCE (HPC at USF)) 20 | # bash compile.sh cpu bridges (for bridges (HPC at UPitt) 21 | 22 | # bash compile.sh icpu bridges (for bridges Intel compilation (seems slower than gcc)) 23 | 24 | # bash compile.sh cmake (compile serial version using cmake. Not recommended for best performance.) 25 | 26 | # bash compile.sh gpu (for a single computer with CUDA compatible GPU installed). 27 | # bash compile.sh gpu debug (for GPU compilation with errors) 28 | # bash compile.sh gpu circe (CUDA GPU on circe HPC) 29 | # bash compile.sh gpu windows (CUDA GPU on Windows machine) 30 | 31 | # bash compile.sh omp (for OpenMP implementation) 32 | # bash compile.sh omp linux (same, optimized for Linux) 33 | 34 | # bash compile.sh mpi (for MPI implementation, not yet functional) 35 | 36 | 37 | ########################## 38 | 39 | 40 | DEFAULT="cpu" 41 | 42 | if [ $# -eq 0 ]; then # IF NO ARGUMENT GIVEN 43 | option=$DEFAULT # MANUAL OPTION (only reads if no argument given) 44 | elif [ $1 == "cpu" ]; then 45 | option="cpu" 46 | elif [ $1 == "gpu" ]; then 47 | option="gpu"; 48 | elif [ $1 == "mpi" ]; then 49 | option="mpi" 50 | elif [ $1 == "omp" ]; then 51 | option="omp" 52 | elif [ $1 == "cmake" ]; then 53 | option="cmake" 54 | else 55 | echo "Invalid options detected. Not compiling. Read the header comments for compilation examples." 56 | fi 57 | 58 | if [[ "$option" == "cpu" ]]; then 59 | # THIS IS FOR SERIAL COMPILATION (1 CPU ONLY, NO GPU) 60 | echo "Doing serial GCC (1 processor) compilation for CPU" 61 | if [[ "$2" == "circe" ]]; then 62 | echo "... for CIRCE cluster environment."; 63 | module purge 64 | module load compilers/gcc/6.2.0 65 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -foptimize-sibling-calls -finline-limit=10000 -fexpensive-optimizations -flto -frename-registers 66 | elif [[ "$2" == "bridges" ]]; then 67 | echo "... for Bridges cluster environment."; 68 | module purge 69 | module load gcc/6.3.0 70 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -foptimize-sibling-calls -finline-limit=10000 -fexpensive-optimizations -flto -march=native -frename-registers 71 | elif [[ "$2" == "debug" ]]; then 72 | echo "... in debug mode (with errors/warnings"; 73 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -Werror -Wall -ggdb; 74 | elif [[ "$2" == "linux" ]]; then 75 | echo "... optimized for linux." 76 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -foptimize-sibling-calls -finline-limit=10000 -fexpensive-optimizations -flto -march=native -frename-registers 77 | elif [[ "$2" == "O3" ]]; then 78 | echo "... optimized at -O3." 79 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -O3 80 | elif [[ "$2" == "windows" ]]; then 81 | echo "... for Windows OS."; 82 | echo "Note: to install in the Windows command line, use the following commands:" 83 | echo "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\Tools\\vsdevcmd" 84 | echo "cl /EHsc main.cpp /D \"WINDOWS\" /Fe..\\mcmd" 85 | echo "" 86 | echo "==================================================" 87 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -D WINDOWS 88 | else 89 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast; 90 | fi 91 | ###################################################################### 92 | elif [[ "$option" == "gpu" ]]; then 93 | # GPU compilation enabled 94 | echo "Doing serial GCC (1 processor) compilation including CUDA GPU routines" 95 | if [[ "$2" == "circe" ]]; then 96 | echo "... for CIRCE cluster environment."; 97 | module purge 98 | module load compilers/gcc/4.9.4 # CUDA 7.5 not compatible with gcc > 5.0 99 | module load apps/cuda/7.5 100 | nvcc -x cu main.cpp -std=c++11 -D_MWAITXINTRIN_H_INCLUDED -D_FORCE_INLINES -D__STRICT_ANSI__ -D CUDA -O3 -o ../mcmd 101 | elif [[ "$2" == "debug" ]]; then 102 | echo "... in debug mode (with errors/warnings)"; 103 | nvcc -x cu main.cpp -std=c++11 -D_MWAITXINTRIN_H_INCLUDED -D_FORCE_INLINES -D__STRICT_ANSI__ -D CUDA -G -g -O3 -o ../mcmd 104 | elif [[ "$2" == "windows" ]]; then 105 | echo "... for Windows OS." 106 | nvcc -x cu main.cpp -std=c++11 -D_MWAITXINTRIN_H_INCLUDED -D_FORCE_INLINES -D__STRICT_ANSI__ -D CUDA -O3 -D WINDOWS -o ../mcmd 107 | else 108 | nvcc -x cu main.cpp -std=c++11 -D_MWAITXINTRIN_H_INCLUDED -D_FORCE_INLINES -D__STRICT_ANSI__ -D CUDA -O3 -o ../mcmd 109 | fi 110 | ######################################################################## 111 | elif [[ "$option" == "icpu" ]]; then 112 | # CPU compilation using Intel 113 | echo "Doing serial Intel (1 proc.) compilation for CPU" 114 | if [[ "$2" == "bridges" ]]; then 115 | echo "... for Bridges cluster environment"; 116 | module purge 117 | module load icc/16.0.3 118 | icpc --std=c++11 -fast -unroll-aggressive -Ofast -o ../mcmd main.cpp 119 | else 120 | icpc --std=c++11 -fast -unroll-aggressive -Ofast -o ../mcmd main.cpp 121 | fi 122 | ####################################################################### 123 | elif [[ "$option" == "cmake" ]]; then 124 | # cmake serial compilation 125 | echo "Using cmake to compile MCMD." 126 | cd .. 127 | cmake . -DCMAKE_BUILD_TYPE=Release 128 | make -j12 129 | cd src 130 | ####################################################################### 131 | elif [[ "$option" == "mpi" ]]; then 132 | # MPI compilation 133 | echo "MPI is not implemented in MCMD as of now." 134 | #echo "Doing MPI compilation (for parallel implementation)" 135 | #mpic++ main.cpp -lm -o ../mcmd -I. -std=c++11 -D MPI -Ofast 136 | ####################################################################### 137 | elif [[ "$option" == "omp" ]]; then 138 | # OpenMP compilation 139 | #echo "OpenMP is not implemented in MCMD as of now." 140 | echo "Doing OpenMP compilation" 141 | if [[ "$2" == "linux" ]]; then 142 | echo "... for linux." 143 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -foptimize-sibling-calls -finline-limit=10000 -fexpensive-optimizations -flto -march=native -frename-registers -fopenmp -D OMP 144 | elif [[ "$2" == "circe" ]]; then 145 | echo "... for CIRCE cluster environment."; 146 | module purge 147 | module load compilers/gcc/6.2.0 148 | g++ main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -foptimize-sibling-calls -finline-limit=10000 -fexpensive-optimizations -flto -frename-registers -fopenmp -D OMP 149 | else 150 | /usr/local/bin/g++-4.9 main.cpp -lm -o ../mcmd -I. -std=c++11 -Ofast -fopenmp -D OMP 151 | fi 152 | fi 153 | 154 | echo "" 155 | echo "" 156 | echo "... done. As long as you see no compilation errors above, you're good to go." 157 | echo "... If you did, check the contents of compile.sh for examples" 158 | echo "... or contact us by making an Issue on GitHub: https://github.com/khavernathy/mcmd/issues" 159 | echo "... Stay awesome and have a nice day. :-)" 160 | -------------------------------------------------------------------------------- /gui/moc_backend.cpp: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | ** Meta object code from reading C++ file 'backend.h' 3 | ** 4 | ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.9.1) 5 | ** 6 | ** WARNING! All changes made in this file will be lost! 7 | *****************************************************************************/ 8 | 9 | #include "backend.h" 10 | #include 11 | #include 12 | #include 13 | #if !defined(Q_MOC_OUTPUT_REVISION) 14 | #error "The header file 'backend.h' doesn't include ." 15 | #elif Q_MOC_OUTPUT_REVISION != 67 16 | #error "This file was generated using the moc from 5.9.1. It" 17 | #error "cannot be used with the include files from this version of Qt." 18 | #error "(The moc has changed too much.)" 19 | #endif 20 | 21 | QT_BEGIN_MOC_NAMESPACE 22 | QT_WARNING_PUSH 23 | QT_WARNING_DISABLE_DEPRECATED 24 | struct qt_meta_stringdata_BackEnd_t { 25 | QByteArrayData data[9]; 26 | char stringdata0[103]; 27 | }; 28 | #define QT_MOC_LITERAL(idx, ofs, len) \ 29 | Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ 30 | qptrdiff(offsetof(qt_meta_stringdata_BackEnd_t, stringdata0) + ofs \ 31 | - idx * sizeof(QByteArrayData)) \ 32 | ) 33 | static const qt_meta_stringdata_BackEnd_t qt_meta_stringdata_BackEnd = { 34 | { 35 | QT_MOC_LITERAL(0, 0, 7), // "BackEnd" 36 | QT_MOC_LITERAL(1, 8, 15), // "userNameChanged" 37 | QT_MOC_LITERAL(2, 24, 0), // "" 38 | QT_MOC_LITERAL(3, 25, 23), // "outputLineNumberChanged" 39 | QT_MOC_LITERAL(4, 49, 10), // "QstChanged" 40 | QT_MOC_LITERAL(5, 60, 8), // "userName" 41 | QT_MOC_LITERAL(6, 69, 16), // "outputLineNumber" 42 | QT_MOC_LITERAL(7, 86, 3), // "Qst" 43 | QT_MOC_LITERAL(8, 90, 12) // "QList" 44 | 45 | }, 46 | "BackEnd\0userNameChanged\0\0" 47 | "outputLineNumberChanged\0QstChanged\0" 48 | "userName\0outputLineNumber\0Qst\0" 49 | "QList" 50 | }; 51 | #undef QT_MOC_LITERAL 52 | 53 | static const uint qt_meta_data_BackEnd[] = { 54 | 55 | // content: 56 | 7, // revision 57 | 0, // classname 58 | 0, 0, // classinfo 59 | 3, 14, // methods 60 | 3, 32, // properties 61 | 0, 0, // enums/sets 62 | 0, 0, // constructors 63 | 0, // flags 64 | 3, // signalCount 65 | 66 | // signals: name, argc, parameters, tag, flags 67 | 1, 0, 29, 2, 0x06 /* Public */, 68 | 3, 0, 30, 2, 0x06 /* Public */, 69 | 4, 0, 31, 2, 0x06 /* Public */, 70 | 71 | // signals: parameters 72 | QMetaType::Void, 73 | QMetaType::Void, 74 | QMetaType::Void, 75 | 76 | // properties: name, type, flags 77 | 5, QMetaType::QString, 0x00495103, 78 | 6, QMetaType::Int, 0x00495103, 79 | 7, 0x80000000 | 8, 0x0049510b, 80 | 81 | // properties: notify_signal_id 82 | 0, 83 | 1, 84 | 2, 85 | 86 | 0 // eod 87 | }; 88 | 89 | void BackEnd::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 90 | { 91 | if (_c == QMetaObject::InvokeMetaMethod) { 92 | BackEnd *_t = static_cast(_o); 93 | Q_UNUSED(_t) 94 | switch (_id) { 95 | case 0: _t->userNameChanged(); break; 96 | case 1: _t->outputLineNumberChanged(); break; 97 | case 2: _t->QstChanged(); break; 98 | default: ; 99 | } 100 | } else if (_c == QMetaObject::IndexOfMethod) { 101 | int *result = reinterpret_cast(_a[0]); 102 | void **func = reinterpret_cast(_a[1]); 103 | { 104 | typedef void (BackEnd::*_t)(); 105 | if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&BackEnd::userNameChanged)) { 106 | *result = 0; 107 | return; 108 | } 109 | } 110 | { 111 | typedef void (BackEnd::*_t)(); 112 | if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&BackEnd::outputLineNumberChanged)) { 113 | *result = 1; 114 | return; 115 | } 116 | } 117 | { 118 | typedef void (BackEnd::*_t)(); 119 | if (*reinterpret_cast<_t *>(func) == static_cast<_t>(&BackEnd::QstChanged)) { 120 | *result = 2; 121 | return; 122 | } 123 | } 124 | } else if (_c == QMetaObject::RegisterPropertyMetaType) { 125 | switch (_id) { 126 | default: *reinterpret_cast(_a[0]) = -1; break; 127 | case 2: 128 | *reinterpret_cast(_a[0]) = qRegisterMetaType< QList >(); break; 129 | } 130 | } 131 | 132 | #ifndef QT_NO_PROPERTIES 133 | else if (_c == QMetaObject::ReadProperty) { 134 | BackEnd *_t = static_cast(_o); 135 | Q_UNUSED(_t) 136 | void *_v = _a[0]; 137 | switch (_id) { 138 | case 0: *reinterpret_cast< QString*>(_v) = _t->userName(); break; 139 | case 1: *reinterpret_cast< int*>(_v) = _t->outputLineNumber(); break; 140 | case 2: *reinterpret_cast< QList*>(_v) = _t->Qst(); break; 141 | default: break; 142 | } 143 | } else if (_c == QMetaObject::WriteProperty) { 144 | BackEnd *_t = static_cast(_o); 145 | Q_UNUSED(_t) 146 | void *_v = _a[0]; 147 | switch (_id) { 148 | case 0: _t->setUserName(*reinterpret_cast< QString*>(_v)); break; 149 | case 1: _t->setOutputLineNumber(*reinterpret_cast< int*>(_v)); break; 150 | case 2: _t->setQst(*reinterpret_cast< QList*>(_v)); break; 151 | default: break; 152 | } 153 | } else if (_c == QMetaObject::ResetProperty) { 154 | } 155 | #endif // QT_NO_PROPERTIES 156 | } 157 | 158 | const QMetaObject BackEnd::staticMetaObject = { 159 | { &QObject::staticMetaObject, qt_meta_stringdata_BackEnd.data, 160 | qt_meta_data_BackEnd, qt_static_metacall, nullptr, nullptr} 161 | }; 162 | 163 | 164 | const QMetaObject *BackEnd::metaObject() const 165 | { 166 | return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; 167 | } 168 | 169 | void *BackEnd::qt_metacast(const char *_clname) 170 | { 171 | if (!_clname) return nullptr; 172 | if (!strcmp(_clname, qt_meta_stringdata_BackEnd.stringdata0)) 173 | return static_cast(const_cast< BackEnd*>(this)); 174 | return QObject::qt_metacast(_clname); 175 | } 176 | 177 | int BackEnd::qt_metacall(QMetaObject::Call _c, int _id, void **_a) 178 | { 179 | _id = QObject::qt_metacall(_c, _id, _a); 180 | if (_id < 0) 181 | return _id; 182 | if (_c == QMetaObject::InvokeMetaMethod) { 183 | if (_id < 3) 184 | qt_static_metacall(this, _c, _id, _a); 185 | _id -= 3; 186 | } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) { 187 | if (_id < 3) 188 | *reinterpret_cast(_a[0]) = -1; 189 | _id -= 3; 190 | } 191 | #ifndef QT_NO_PROPERTIES 192 | else if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty 193 | || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { 194 | qt_static_metacall(this, _c, _id, _a); 195 | _id -= 3; 196 | } else if (_c == QMetaObject::QueryPropertyDesignable) { 197 | _id -= 3; 198 | } else if (_c == QMetaObject::QueryPropertyScriptable) { 199 | _id -= 3; 200 | } else if (_c == QMetaObject::QueryPropertyStored) { 201 | _id -= 3; 202 | } else if (_c == QMetaObject::QueryPropertyEditable) { 203 | _id -= 3; 204 | } else if (_c == QMetaObject::QueryPropertyUser) { 205 | _id -= 3; 206 | } 207 | #endif // QT_NO_PROPERTIES 208 | return _id; 209 | } 210 | 211 | // SIGNAL 0 212 | void BackEnd::userNameChanged() 213 | { 214 | QMetaObject::activate(this, &staticMetaObject, 0, nullptr); 215 | } 216 | 217 | // SIGNAL 1 218 | void BackEnd::outputLineNumberChanged() 219 | { 220 | QMetaObject::activate(this, &staticMetaObject, 1, nullptr); 221 | } 222 | 223 | // SIGNAL 2 224 | void BackEnd::QstChanged() 225 | { 226 | QMetaObject::activate(this, &staticMetaObject, 2, nullptr); 227 | } 228 | QT_WARNING_POP 229 | QT_END_MOC_NAMESPACE 230 | -------------------------------------------------------------------------------- /src/tt.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | using namespace std; 10 | 11 | /* POTENTIAL ENERGY STUFF */ 12 | // Credit to Adam Hogan for originally coding this 13 | // algorithm in MPMC. 14 | 15 | // Long range energy for a pair 16 | double tt_lrc(System &system, double c6, double c8, double c10) { 17 | const double rc = system.pbc.cutoff; 18 | const double rc2 = rc*rc; 19 | const double rc5 = rc2*rc2*rc; 20 | return -4.0*M_PI*(c6/(3.0*rc*rc2) + c8/(5.0*rc5) + c10/(7.0*rc5*rc2))/system.pbc.volume; 21 | } 22 | 23 | // self energy for an atom 24 | double tt_self(System &system, int i, int j) { 25 | const double rc = system.pbc.cutoff; 26 | const double rc2 = rc*rc; 27 | const double rc5 = rc2*rc2*rc; 28 | const double c6 = system.molecules[i].atoms[j].c6; 29 | const double c8 = system.molecules[i].atoms[j].c8; 30 | const double c10 = system.molecules[i].atoms[j].c10; 31 | return -4.0*M_PI*(c6/(3.0*rc2*rc) + c8/(5.0*rc5) + c10/(7.0*rc5*rc2))/system.pbc.volume; 32 | } 33 | 34 | // f_2n(bR) damping function in the paper. 35 | double tt_damp(int n, double br) { 36 | double sum=0; 37 | int i; 38 | for (i=0; i<=n; i++) 39 | sum += pow(br,i)/factorial(i); 40 | 41 | const double result = 1.0 - exp(-br)*sum; 42 | 43 | if (result>0.000000001) 44 | return result; 45 | else 46 | return 0.0; 47 | } 48 | 49 | /* the Tang-Toennies potential for the entire system */ 50 | double tt(System &system) { 51 | double potential=0, repulsive=0, attractive = 0; 52 | double c6,c8,c10,sig,b; // for the pair itself. 53 | 54 | // energy from atom pairs 55 | for (int i=0; i n=11 161 | if (n==0) { 162 | A = (d-n)*pow(b,n)/factorial(n); 163 | B = 0; 164 | } else if (n==d+1) { 165 | A = 0; 166 | B = pow(b,n)/factorial(n-1); 167 | } else { 168 | A = (d-n)*pow(b,n)/factorial(n); 169 | B = pow(b,n)/factorial(n-1); 170 | } 171 | innersum += (A+B)*ir_array[d+1-n]; // so for n=0 and 10-damping, the last term in sum, we take ir_array[11] = r^-11 172 | } 173 | sum += innersum*ctmp*distances[q]*exp(-b*r)/r; 174 | 175 | } // end damping functions 176 | holder += sum; 177 | 178 | 179 | // Apply Newton pair for this dimension 180 | system.molecules[i].atoms[j].force[q] += holder; 181 | system.molecules[k].atoms[l].force[q] -= holder; 182 | } // end 3D 183 | 184 | }// end if not intramolec. 185 | }// end l 186 | }// end k 187 | }// end j 188 | }// end i 189 | 190 | return; 191 | } 192 | 193 | 194 | 195 | 196 | -------------------------------------------------------------------------------- /atomfiles/Ar100.pdb: -------------------------------------------------------------------------------- 1 | ATOM 1 Ar He1 M 1 -68.429 -24.252 42.149 default 0.00000 default default default 2 | ATOM 2 Ar He1 M 2 -55.901 40.931 -8.004 default 0.00000 default default default 3 | ATOM 3 Ar He1 M 3 33.052 6.010 18.474 default 0.00000 default default default 4 | ATOM 4 Ar He1 M 4 -4.055 -100.954 -8.661 default 0.00000 default default default 5 | ATOM 5 Ar He1 M 5 75.670 13.555 35.774 default 0.00000 default default default 6 | ATOM 6 Ar He1 M 6 76.719 -4.928 2.690 default 0.00000 default default default 7 | ATOM 7 Ar He1 M 7 28.906 99.725 28.064 default 0.00000 default default default 8 | ATOM 8 Ar He1 M 8 103.505 60.842 10.873 default 0.00000 default default default 9 | ATOM 9 Ar He1 M 9 17.635 11.736 -6.920 default 0.00000 default default default 10 | ATOM 10 Ar He1 M 10 -52.818 -91.397 11.704 default 0.00000 default default default 11 | ATOM 11 Ar He1 M 11 -58.342 -52.027 111.504 default 0.00000 default default default 12 | ATOM 12 Ar He1 M 12 -26.004 28.000 7.922 default 0.00000 default default default 13 | ATOM 13 Ar He1 M 13 100.074 -20.322 -49.314 default 0.00000 default default default 14 | ATOM 14 Ar He1 M 14 19.048 9.645 39.673 default 0.00000 default default default 15 | ATOM 15 Ar He1 M 15 44.303 15.853 51.919 default 0.00000 default default default 16 | ATOM 16 Ar He1 M 16 -59.033 31.623 39.679 default 0.00000 default default default 17 | ATOM 17 Ar He1 M 17 -12.143 6.831 -60.638 default 0.00000 default default default 18 | ATOM 18 Ar He1 M 18 1.776 87.724 -73.315 default 0.00000 default default default 19 | ATOM 19 Ar He1 M 19 -131.951 -106.762 38.894 default 0.00000 default default default 20 | ATOM 20 Ar He1 M 20 -61.667 91.082 78.013 default 0.00000 default default default 21 | ATOM 21 Ar He1 M 21 -16.953 7.385 10.231 default 0.00000 default default default 22 | ATOM 22 Ar He1 M 22 87.374 38.312 -37.504 default 0.00000 default default default 23 | ATOM 23 Ar He1 M 23 102.294 -74.261 -8.256 default 0.00000 default default default 24 | ATOM 24 Ar He1 M 24 79.145 39.163 -109.245 default 0.00000 default default default 25 | ATOM 25 Ar He1 M 25 -51.672 61.311 39.442 default 0.00000 default default default 26 | ATOM 26 Ar He1 M 26 -80.563 67.036 18.198 default 0.00000 default default default 27 | ATOM 27 Ar He1 M 27 106.041 2.298 -30.410 default 0.00000 default default default 28 | ATOM 28 Ar He1 M 28 -6.125 -108.557 79.165 default 0.00000 default default default 29 | ATOM 29 Ar He1 M 29 33.155 -40.501 64.061 default 0.00000 default default default 30 | ATOM 30 Ar He1 M 30 -56.560 103.926 -75.472 default 0.00000 default default default 31 | ATOM 31 Ar He1 M 31 -75.531 -5.284 11.100 default 0.00000 default default default 32 | ATOM 32 Ar He1 M 32 -100.848 -71.865 -0.755 default 0.00000 default default default 33 | ATOM 33 Ar He1 M 33 24.316 -111.199 -44.868 default 0.00000 default default default 34 | ATOM 34 Ar He1 M 34 84.295 -58.527 -59.614 default 0.00000 default default default 35 | ATOM 35 Ar He1 M 35 1.278 -83.560 35.896 default 0.00000 default default default 36 | ATOM 36 Ar He1 M 36 2.740 86.527 -52.732 default 0.00000 default default default 37 | ATOM 37 Ar He1 M 37 79.026 68.013 67.212 default 0.00000 default default default 38 | ATOM 38 Ar He1 M 38 108.516 -2.441 46.110 default 0.00000 default default default 39 | ATOM 39 Ar He1 M 39 58.816 -50.045 -68.944 default 0.00000 default default default 40 | ATOM 40 Ar He1 M 40 39.580 18.253 12.115 default 0.00000 default default default 41 | ATOM 41 Ar He1 M 41 -109.153 -12.872 59.504 default 0.00000 default default default 42 | ATOM 42 Ar He1 M 42 28.496 2.674 77.901 default 0.00000 default default default 43 | ATOM 43 Ar He1 M 43 96.629 69.996 44.154 default 0.00000 default default default 44 | ATOM 44 Ar He1 M 44 78.828 -13.541 -16.913 default 0.00000 default default default 45 | ATOM 45 Ar He1 M 45 102.002 0.308 83.772 default 0.00000 default default default 46 | ATOM 46 Ar He1 M 46 -32.187 -98.819 -57.697 default 0.00000 default default default 47 | ATOM 47 Ar He1 M 47 7.311 73.041 -67.028 default 0.00000 default default default 48 | ATOM 48 Ar He1 M 48 -47.959 -10.601 -78.038 default 0.00000 default default default 49 | ATOM 49 Ar He1 M 49 87.032 -22.132 31.351 default 0.00000 default default default 50 | ATOM 50 Ar He1 M 50 -21.036 21.489 -74.826 default 0.00000 default default default 51 | ATOM 51 Ar He1 M 51 -114.013 80.788 10.842 default 0.00000 default default default 52 | ATOM 52 Ar He1 M 52 102.942 -58.901 -3.281 default 0.00000 default default default 53 | ATOM 53 Ar He1 M 53 -5.236 -38.544 -106.906 default 0.00000 default default default 54 | ATOM 54 Ar He1 M 54 15.271 -22.626 107.733 default 0.00000 default default default 55 | ATOM 55 Ar He1 M 55 -51.531 -56.837 -90.256 default 0.00000 default default default 56 | ATOM 56 Ar He1 M 56 76.999 -13.808 54.271 default 0.00000 default default default 57 | ATOM 57 Ar He1 M 57 51.534 -87.149 -42.058 default 0.00000 default default default 58 | ATOM 58 Ar He1 M 58 100.437 -51.335 132.366 default 0.00000 default default default 59 | ATOM 59 Ar He1 M 59 40.596 -12.726 -64.677 default 0.00000 default default default 60 | ATOM 60 Ar He1 M 60 -32.729 23.908 -90.172 default 0.00000 default default default 61 | ATOM 61 Ar He1 M 61 -143.860 -32.460 -110.246 default 0.00000 default default default 62 | ATOM 62 Ar He1 M 62 -1.503 -49.255 -108.164 default 0.00000 default default default 63 | ATOM 63 Ar He1 M 63 -3.408 76.200 -7.956 default 0.00000 default default default 64 | ATOM 64 Ar He1 M 64 -51.301 74.295 69.989 default 0.00000 default default default 65 | ATOM 65 Ar He1 M 65 87.055 -90.968 -64.294 default 0.00000 default default default 66 | ATOM 66 Ar He1 M 66 -89.173 48.198 -8.162 default 0.00000 default default default 67 | ATOM 67 Ar He1 M 67 46.523 76.972 106.425 default 0.00000 default default default 68 | ATOM 68 Ar He1 M 68 45.321 -77.405 -25.712 default 0.00000 default default default 69 | ATOM 69 Ar He1 M 69 50.654 -61.174 109.357 default 0.00000 default default default 70 | ATOM 70 Ar He1 M 70 89.117 -7.537 -15.428 default 0.00000 default default default 71 | ATOM 71 Ar He1 M 71 -7.498 -18.922 76.711 default 0.00000 default default default 72 | ATOM 72 Ar He1 M 72 13.009 -10.838 54.639 default 0.00000 default default default 73 | ATOM 73 Ar He1 M 73 99.699 101.138 -38.538 default 0.00000 default default default 74 | ATOM 74 Ar He1 M 74 -21.531 -50.930 -18.061 default 0.00000 default default default 75 | ATOM 75 Ar He1 M 75 4.114 56.456 7.374 default 0.00000 default default default 76 | ATOM 76 Ar He1 M 76 65.374 -9.508 -65.979 default 0.00000 default default default 77 | ATOM 77 Ar He1 M 77 -62.637 15.760 -30.284 default 0.00000 default default default 78 | ATOM 78 Ar He1 M 78 -20.738 98.274 -63.612 default 0.00000 default default default 79 | ATOM 79 Ar He1 M 79 92.099 -9.657 108.426 default 0.00000 default default default 80 | ATOM 80 Ar He1 M 80 112.229 -112.337 -78.285 default 0.00000 default default default 81 | ATOM 81 Ar He1 M 81 -43.783 -51.292 -28.463 default 0.00000 default default default 82 | ATOM 82 Ar He1 M 82 50.467 -52.252 101.225 default 0.00000 default default default 83 | ATOM 83 Ar He1 M 83 26.702 6.593 -106.052 default 0.00000 default default default 84 | ATOM 84 Ar He1 M 84 98.344 74.519 -78.378 default 0.00000 default default default 85 | ATOM 85 Ar He1 M 85 22.398 35.735 74.848 default 0.00000 default default default 86 | ATOM 86 Ar He1 M 86 -75.032 -52.711 -26.193 default 0.00000 default default default 87 | ATOM 87 Ar He1 M 87 102.667 61.877 53.361 default 0.00000 default default default 88 | ATOM 88 Ar He1 M 88 -74.774 45.026 81.829 default 0.00000 default default default 89 | ATOM 89 Ar He1 M 89 30.380 101.730 54.303 default 0.00000 default default default 90 | ATOM 90 Ar He1 M 90 25.892 -74.465 44.914 default 0.00000 default default default 91 | ATOM 91 Ar He1 M 91 -108.844 -75.435 19.849 default 0.00000 default default default 92 | ATOM 92 Ar He1 M 92 151.942 -73.841 -10.588 default 0.00000 default default default 93 | ATOM 93 Ar He1 M 93 77.875 10.284 -35.027 default 0.00000 default default default 94 | ATOM 94 Ar He1 M 94 102.200 3.754 -40.701 default 0.00000 default default default 95 | ATOM 95 Ar He1 M 95 -59.253 21.093 18.693 default 0.00000 default default default 96 | ATOM 96 Ar He1 M 96 -42.992 42.372 -1.484 default 0.00000 default default default 97 | ATOM 97 Ar He1 M 97 -109.346 -86.193 -64.872 default 0.00000 default default default 98 | ATOM 98 Ar He1 M 98 104.774 54.347 2.182 default 0.00000 default default default 99 | ATOM 99 Ar He1 M 99 65.614 13.605 -90.437 default 0.00000 default default default 100 | ATOM 100 Ar He1 M 100 9.666 -46.516 85.224 default 0.00000 default default default 101 | -------------------------------------------------------------------------------- /atomfiles/He100.pdb: -------------------------------------------------------------------------------- 1 | ATOM 1 He He1 M 1 -68.429 -24.252 42.149 default 0.00000 default default default 2 | ATOM 2 He He1 M 2 -55.901 40.931 -8.004 default 0.00000 default default default 3 | ATOM 3 He He1 M 3 33.052 6.010 18.474 default 0.00000 default default default 4 | ATOM 4 He He1 M 4 -4.055 -100.954 -8.661 default 0.00000 default default default 5 | ATOM 5 He He1 M 5 75.670 13.555 35.774 default 0.00000 default default default 6 | ATOM 6 He He1 M 6 76.719 -4.928 2.690 default 0.00000 default default default 7 | ATOM 7 He He1 M 7 28.906 99.725 28.064 default 0.00000 default default default 8 | ATOM 8 He He1 M 8 103.505 60.842 10.873 default 0.00000 default default default 9 | ATOM 9 He He1 M 9 17.635 11.736 -6.920 default 0.00000 default default default 10 | ATOM 10 He He1 M 10 -52.818 -91.397 11.704 default 0.00000 default default default 11 | ATOM 11 He He1 M 11 -58.342 -52.027 111.504 default 0.00000 default default default 12 | ATOM 12 He He1 M 12 -26.004 28.000 7.922 default 0.00000 default default default 13 | ATOM 13 He He1 M 13 100.074 -20.322 -49.314 default 0.00000 default default default 14 | ATOM 14 He He1 M 14 19.048 9.645 39.673 default 0.00000 default default default 15 | ATOM 15 He He1 M 15 44.303 15.853 51.919 default 0.00000 default default default 16 | ATOM 16 He He1 M 16 -59.033 31.623 39.679 default 0.00000 default default default 17 | ATOM 17 He He1 M 17 -12.143 6.831 -60.638 default 0.00000 default default default 18 | ATOM 18 He He1 M 18 1.776 87.724 -73.315 default 0.00000 default default default 19 | ATOM 19 He He1 M 19 -131.951 -106.762 38.894 default 0.00000 default default default 20 | ATOM 20 He He1 M 20 -61.667 91.082 78.013 default 0.00000 default default default 21 | ATOM 21 He He1 M 21 -16.953 7.385 10.231 default 0.00000 default default default 22 | ATOM 22 He He1 M 22 87.374 38.312 -37.504 default 0.00000 default default default 23 | ATOM 23 He He1 M 23 102.294 -74.261 -8.256 default 0.00000 default default default 24 | ATOM 24 He He1 M 24 79.145 39.163 -109.245 default 0.00000 default default default 25 | ATOM 25 He He1 M 25 -51.672 61.311 39.442 default 0.00000 default default default 26 | ATOM 26 He He1 M 26 -80.563 67.036 18.198 default 0.00000 default default default 27 | ATOM 27 He He1 M 27 106.041 2.298 -30.410 default 0.00000 default default default 28 | ATOM 28 He He1 M 28 -6.125 -108.557 79.165 default 0.00000 default default default 29 | ATOM 29 He He1 M 29 33.155 -40.501 64.061 default 0.00000 default default default 30 | ATOM 30 He He1 M 30 -56.560 103.926 -75.472 default 0.00000 default default default 31 | ATOM 31 He He1 M 31 -75.531 -5.284 11.100 default 0.00000 default default default 32 | ATOM 32 He He1 M 32 -100.848 -71.865 -0.755 default 0.00000 default default default 33 | ATOM 33 He He1 M 33 24.316 -111.199 -44.868 default 0.00000 default default default 34 | ATOM 34 He He1 M 34 84.295 -58.527 -59.614 default 0.00000 default default default 35 | ATOM 35 He He1 M 35 1.278 -83.560 35.896 default 0.00000 default default default 36 | ATOM 36 He He1 M 36 2.740 86.527 -52.732 default 0.00000 default default default 37 | ATOM 37 He He1 M 37 79.026 68.013 67.212 default 0.00000 default default default 38 | ATOM 38 He He1 M 38 108.516 -2.441 46.110 default 0.00000 default default default 39 | ATOM 39 He He1 M 39 58.816 -50.045 -68.944 default 0.00000 default default default 40 | ATOM 40 He He1 M 40 39.580 18.253 12.115 default 0.00000 default default default 41 | ATOM 41 He He1 M 41 -109.153 -12.872 59.504 default 0.00000 default default default 42 | ATOM 42 He He1 M 42 28.496 2.674 77.901 default 0.00000 default default default 43 | ATOM 43 He He1 M 43 96.629 69.996 44.154 default 0.00000 default default default 44 | ATOM 44 He He1 M 44 78.828 -13.541 -16.913 default 0.00000 default default default 45 | ATOM 45 He He1 M 45 102.002 0.308 83.772 default 0.00000 default default default 46 | ATOM 46 He He1 M 46 -32.187 -98.819 -57.697 default 0.00000 default default default 47 | ATOM 47 He He1 M 47 7.311 73.041 -67.028 default 0.00000 default default default 48 | ATOM 48 He He1 M 48 -47.959 -10.601 -78.038 default 0.00000 default default default 49 | ATOM 49 He He1 M 49 87.032 -22.132 31.351 default 0.00000 default default default 50 | ATOM 50 He He1 M 50 -21.036 21.489 -74.826 default 0.00000 default default default 51 | ATOM 51 He He1 M 51 -114.013 80.788 10.842 default 0.00000 default default default 52 | ATOM 52 He He1 M 52 102.942 -58.901 -3.281 default 0.00000 default default default 53 | ATOM 53 He He1 M 53 -5.236 -38.544 -106.906 default 0.00000 default default default 54 | ATOM 54 He He1 M 54 15.271 -22.626 107.733 default 0.00000 default default default 55 | ATOM 55 He He1 M 55 -51.531 -56.837 -90.256 default 0.00000 default default default 56 | ATOM 56 He He1 M 56 76.999 -13.808 54.271 default 0.00000 default default default 57 | ATOM 57 He He1 M 57 51.534 -87.149 -42.058 default 0.00000 default default default 58 | ATOM 58 He He1 M 58 100.437 -51.335 132.366 default 0.00000 default default default 59 | ATOM 59 He He1 M 59 40.596 -12.726 -64.677 default 0.00000 default default default 60 | ATOM 60 He He1 M 60 -32.729 23.908 -90.172 default 0.00000 default default default 61 | ATOM 61 He He1 M 61 -143.860 -32.460 -110.246 default 0.00000 default default default 62 | ATOM 62 He He1 M 62 -1.503 -49.255 -108.164 default 0.00000 default default default 63 | ATOM 63 He He1 M 63 -3.408 76.200 -7.956 default 0.00000 default default default 64 | ATOM 64 He He1 M 64 -51.301 74.295 69.989 default 0.00000 default default default 65 | ATOM 65 He He1 M 65 87.055 -90.968 -64.294 default 0.00000 default default default 66 | ATOM 66 He He1 M 66 -89.173 48.198 -8.162 default 0.00000 default default default 67 | ATOM 67 He He1 M 67 46.523 76.972 106.425 default 0.00000 default default default 68 | ATOM 68 He He1 M 68 45.321 -77.405 -25.712 default 0.00000 default default default 69 | ATOM 69 He He1 M 69 50.654 -61.174 109.357 default 0.00000 default default default 70 | ATOM 70 He He1 M 70 89.117 -7.537 -15.428 default 0.00000 default default default 71 | ATOM 71 He He1 M 71 -7.498 -18.922 76.711 default 0.00000 default default default 72 | ATOM 72 He He1 M 72 13.009 -10.838 54.639 default 0.00000 default default default 73 | ATOM 73 He He1 M 73 99.699 101.138 -38.538 default 0.00000 default default default 74 | ATOM 74 He He1 M 74 -21.531 -50.930 -18.061 default 0.00000 default default default 75 | ATOM 75 He He1 M 75 4.114 56.456 7.374 default 0.00000 default default default 76 | ATOM 76 He He1 M 76 65.374 -9.508 -65.979 default 0.00000 default default default 77 | ATOM 77 He He1 M 77 -62.637 15.760 -30.284 default 0.00000 default default default 78 | ATOM 78 He He1 M 78 -20.738 98.274 -63.612 default 0.00000 default default default 79 | ATOM 79 He He1 M 79 92.099 -9.657 108.426 default 0.00000 default default default 80 | ATOM 80 He He1 M 80 112.229 -112.337 -78.285 default 0.00000 default default default 81 | ATOM 81 He He1 M 81 -43.783 -51.292 -28.463 default 0.00000 default default default 82 | ATOM 82 He He1 M 82 50.467 -52.252 101.225 default 0.00000 default default default 83 | ATOM 83 He He1 M 83 26.702 6.593 -106.052 default 0.00000 default default default 84 | ATOM 84 He He1 M 84 98.344 74.519 -78.378 default 0.00000 default default default 85 | ATOM 85 He He1 M 85 22.398 35.735 74.848 default 0.00000 default default default 86 | ATOM 86 He He1 M 86 -75.032 -52.711 -26.193 default 0.00000 default default default 87 | ATOM 87 He He1 M 87 102.667 61.877 53.361 default 0.00000 default default default 88 | ATOM 88 He He1 M 88 -74.774 45.026 81.829 default 0.00000 default default default 89 | ATOM 89 He He1 M 89 30.380 101.730 54.303 default 0.00000 default default default 90 | ATOM 90 He He1 M 90 25.892 -74.465 44.914 default 0.00000 default default default 91 | ATOM 91 He He1 M 91 -108.844 -75.435 19.849 default 0.00000 default default default 92 | ATOM 92 He He1 M 92 151.942 -73.841 -10.588 default 0.00000 default default default 93 | ATOM 93 He He1 M 93 77.875 10.284 -35.027 default 0.00000 default default default 94 | ATOM 94 He He1 M 94 102.200 3.754 -40.701 default 0.00000 default default default 95 | ATOM 95 He He1 M 95 -59.253 21.093 18.693 default 0.00000 default default default 96 | ATOM 96 He He1 M 96 -42.992 42.372 -1.484 default 0.00000 default default default 97 | ATOM 97 He He1 M 97 -109.346 -86.193 -64.872 default 0.00000 default default default 98 | ATOM 98 He He1 M 98 104.774 54.347 2.182 default 0.00000 default default default 99 | ATOM 99 He He1 M 99 65.614 13.605 -90.437 default 0.00000 default default default 100 | ATOM 100 He He1 M 100 9.666 -46.516 85.224 default 0.00000 default default default 101 | -------------------------------------------------------------------------------- /atomfiles/Kr100.pdb: -------------------------------------------------------------------------------- 1 | ATOM 1 Kr He1 M 1 -68.429 -24.252 42.149 default 0.00000 default default default 2 | ATOM 2 Kr He1 M 2 -55.901 40.931 -8.004 default 0.00000 default default default 3 | ATOM 3 Kr He1 M 3 33.052 6.010 18.474 default 0.00000 default default default 4 | ATOM 4 Kr He1 M 4 -4.055 -100.954 -8.661 default 0.00000 default default default 5 | ATOM 5 Kr He1 M 5 75.670 13.555 35.774 default 0.00000 default default default 6 | ATOM 6 Kr He1 M 6 76.719 -4.928 2.690 default 0.00000 default default default 7 | ATOM 7 Kr He1 M 7 28.906 99.725 28.064 default 0.00000 default default default 8 | ATOM 8 Kr He1 M 8 103.505 60.842 10.873 default 0.00000 default default default 9 | ATOM 9 Kr He1 M 9 17.635 11.736 -6.920 default 0.00000 default default default 10 | ATOM 10 Kr He1 M 10 -52.818 -91.397 11.704 default 0.00000 default default default 11 | ATOM 11 Kr He1 M 11 -58.342 -52.027 111.504 default 0.00000 default default default 12 | ATOM 12 Kr He1 M 12 -26.004 28.000 7.922 default 0.00000 default default default 13 | ATOM 13 Kr He1 M 13 100.074 -20.322 -49.314 default 0.00000 default default default 14 | ATOM 14 Kr He1 M 14 19.048 9.645 39.673 default 0.00000 default default default 15 | ATOM 15 Kr He1 M 15 44.303 15.853 51.919 default 0.00000 default default default 16 | ATOM 16 Kr He1 M 16 -59.033 31.623 39.679 default 0.00000 default default default 17 | ATOM 17 Kr He1 M 17 -12.143 6.831 -60.638 default 0.00000 default default default 18 | ATOM 18 Kr He1 M 18 1.776 87.724 -73.315 default 0.00000 default default default 19 | ATOM 19 Kr He1 M 19 -131.951 -106.762 38.894 default 0.00000 default default default 20 | ATOM 20 Kr He1 M 20 -61.667 91.082 78.013 default 0.00000 default default default 21 | ATOM 21 Kr He1 M 21 -16.953 7.385 10.231 default 0.00000 default default default 22 | ATOM 22 Kr He1 M 22 87.374 38.312 -37.504 default 0.00000 default default default 23 | ATOM 23 Kr He1 M 23 102.294 -74.261 -8.256 default 0.00000 default default default 24 | ATOM 24 Kr He1 M 24 79.145 39.163 -109.245 default 0.00000 default default default 25 | ATOM 25 Kr He1 M 25 -51.672 61.311 39.442 default 0.00000 default default default 26 | ATOM 26 Kr He1 M 26 -80.563 67.036 18.198 default 0.00000 default default default 27 | ATOM 27 Kr He1 M 27 106.041 2.298 -30.410 default 0.00000 default default default 28 | ATOM 28 Kr He1 M 28 -6.125 -108.557 79.165 default 0.00000 default default default 29 | ATOM 29 Kr He1 M 29 33.155 -40.501 64.061 default 0.00000 default default default 30 | ATOM 30 Kr He1 M 30 -56.560 103.926 -75.472 default 0.00000 default default default 31 | ATOM 31 Kr He1 M 31 -75.531 -5.284 11.100 default 0.00000 default default default 32 | ATOM 32 Kr He1 M 32 -100.848 -71.865 -0.755 default 0.00000 default default default 33 | ATOM 33 Kr He1 M 33 24.316 -111.199 -44.868 default 0.00000 default default default 34 | ATOM 34 Kr He1 M 34 84.295 -58.527 -59.614 default 0.00000 default default default 35 | ATOM 35 Kr He1 M 35 1.278 -83.560 35.896 default 0.00000 default default default 36 | ATOM 36 Kr He1 M 36 2.740 86.527 -52.732 default 0.00000 default default default 37 | ATOM 37 Kr He1 M 37 79.026 68.013 67.212 default 0.00000 default default default 38 | ATOM 38 Kr He1 M 38 108.516 -2.441 46.110 default 0.00000 default default default 39 | ATOM 39 Kr He1 M 39 58.816 -50.045 -68.944 default 0.00000 default default default 40 | ATOM 40 Kr He1 M 40 39.580 18.253 12.115 default 0.00000 default default default 41 | ATOM 41 Kr He1 M 41 -109.153 -12.872 59.504 default 0.00000 default default default 42 | ATOM 42 Kr He1 M 42 28.496 2.674 77.901 default 0.00000 default default default 43 | ATOM 43 Kr He1 M 43 96.629 69.996 44.154 default 0.00000 default default default 44 | ATOM 44 Kr He1 M 44 78.828 -13.541 -16.913 default 0.00000 default default default 45 | ATOM 45 Kr He1 M 45 102.002 0.308 83.772 default 0.00000 default default default 46 | ATOM 46 Kr He1 M 46 -32.187 -98.819 -57.697 default 0.00000 default default default 47 | ATOM 47 Kr He1 M 47 7.311 73.041 -67.028 default 0.00000 default default default 48 | ATOM 48 Kr He1 M 48 -47.959 -10.601 -78.038 default 0.00000 default default default 49 | ATOM 49 Kr He1 M 49 87.032 -22.132 31.351 default 0.00000 default default default 50 | ATOM 50 Kr He1 M 50 -21.036 21.489 -74.826 default 0.00000 default default default 51 | ATOM 51 Kr He1 M 51 -114.013 80.788 10.842 default 0.00000 default default default 52 | ATOM 52 Kr He1 M 52 102.942 -58.901 -3.281 default 0.00000 default default default 53 | ATOM 53 Kr He1 M 53 -5.236 -38.544 -106.906 default 0.00000 default default default 54 | ATOM 54 Kr He1 M 54 15.271 -22.626 107.733 default 0.00000 default default default 55 | ATOM 55 Kr He1 M 55 -51.531 -56.837 -90.256 default 0.00000 default default default 56 | ATOM 56 Kr He1 M 56 76.999 -13.808 54.271 default 0.00000 default default default 57 | ATOM 57 Kr He1 M 57 51.534 -87.149 -42.058 default 0.00000 default default default 58 | ATOM 58 Kr He1 M 58 100.437 -51.335 132.366 default 0.00000 default default default 59 | ATOM 59 Kr He1 M 59 40.596 -12.726 -64.677 default 0.00000 default default default 60 | ATOM 60 Kr He1 M 60 -32.729 23.908 -90.172 default 0.00000 default default default 61 | ATOM 61 Kr He1 M 61 -143.860 -32.460 -110.246 default 0.00000 default default default 62 | ATOM 62 Kr He1 M 62 -1.503 -49.255 -108.164 default 0.00000 default default default 63 | ATOM 63 Kr He1 M 63 -3.408 76.200 -7.956 default 0.00000 default default default 64 | ATOM 64 Kr He1 M 64 -51.301 74.295 69.989 default 0.00000 default default default 65 | ATOM 65 Kr He1 M 65 87.055 -90.968 -64.294 default 0.00000 default default default 66 | ATOM 66 Kr He1 M 66 -89.173 48.198 -8.162 default 0.00000 default default default 67 | ATOM 67 Kr He1 M 67 46.523 76.972 106.425 default 0.00000 default default default 68 | ATOM 68 Kr He1 M 68 45.321 -77.405 -25.712 default 0.00000 default default default 69 | ATOM 69 Kr He1 M 69 50.654 -61.174 109.357 default 0.00000 default default default 70 | ATOM 70 Kr He1 M 70 89.117 -7.537 -15.428 default 0.00000 default default default 71 | ATOM 71 Kr He1 M 71 -7.498 -18.922 76.711 default 0.00000 default default default 72 | ATOM 72 Kr He1 M 72 13.009 -10.838 54.639 default 0.00000 default default default 73 | ATOM 73 Kr He1 M 73 99.699 101.138 -38.538 default 0.00000 default default default 74 | ATOM 74 Kr He1 M 74 -21.531 -50.930 -18.061 default 0.00000 default default default 75 | ATOM 75 Kr He1 M 75 4.114 56.456 7.374 default 0.00000 default default default 76 | ATOM 76 Kr He1 M 76 65.374 -9.508 -65.979 default 0.00000 default default default 77 | ATOM 77 Kr He1 M 77 -62.637 15.760 -30.284 default 0.00000 default default default 78 | ATOM 78 Kr He1 M 78 -20.738 98.274 -63.612 default 0.00000 default default default 79 | ATOM 79 Kr He1 M 79 92.099 -9.657 108.426 default 0.00000 default default default 80 | ATOM 80 Kr He1 M 80 112.229 -112.337 -78.285 default 0.00000 default default default 81 | ATOM 81 Kr He1 M 81 -43.783 -51.292 -28.463 default 0.00000 default default default 82 | ATOM 82 Kr He1 M 82 50.467 -52.252 101.225 default 0.00000 default default default 83 | ATOM 83 Kr He1 M 83 26.702 6.593 -106.052 default 0.00000 default default default 84 | ATOM 84 Kr He1 M 84 98.344 74.519 -78.378 default 0.00000 default default default 85 | ATOM 85 Kr He1 M 85 22.398 35.735 74.848 default 0.00000 default default default 86 | ATOM 86 Kr He1 M 86 -75.032 -52.711 -26.193 default 0.00000 default default default 87 | ATOM 87 Kr He1 M 87 102.667 61.877 53.361 default 0.00000 default default default 88 | ATOM 88 Kr He1 M 88 -74.774 45.026 81.829 default 0.00000 default default default 89 | ATOM 89 Kr He1 M 89 30.380 101.730 54.303 default 0.00000 default default default 90 | ATOM 90 Kr He1 M 90 25.892 -74.465 44.914 default 0.00000 default default default 91 | ATOM 91 Kr He1 M 91 -108.844 -75.435 19.849 default 0.00000 default default default 92 | ATOM 92 Kr He1 M 92 151.942 -73.841 -10.588 default 0.00000 default default default 93 | ATOM 93 Kr He1 M 93 77.875 10.284 -35.027 default 0.00000 default default default 94 | ATOM 94 Kr He1 M 94 102.200 3.754 -40.701 default 0.00000 default default default 95 | ATOM 95 Kr He1 M 95 -59.253 21.093 18.693 default 0.00000 default default default 96 | ATOM 96 Kr He1 M 96 -42.992 42.372 -1.484 default 0.00000 default default default 97 | ATOM 97 Kr He1 M 97 -109.346 -86.193 -64.872 default 0.00000 default default default 98 | ATOM 98 Kr He1 M 98 104.774 54.347 2.182 default 0.00000 default default default 99 | ATOM 99 Kr He1 M 99 65.614 13.605 -90.437 default 0.00000 default default default 100 | ATOM 100 Kr He1 M 100 9.666 -46.516 85.224 default 0.00000 default default default 101 | -------------------------------------------------------------------------------- /atomfiles/Ne100.pdb: -------------------------------------------------------------------------------- 1 | ATOM 1 Ne He1 M 1 -68.429 -24.252 42.149 default 0.00000 default default default 2 | ATOM 2 Ne He1 M 2 -55.901 40.931 -8.004 default 0.00000 default default default 3 | ATOM 3 Ne He1 M 3 33.052 6.010 18.474 default 0.00000 default default default 4 | ATOM 4 Ne He1 M 4 -4.055 -100.954 -8.661 default 0.00000 default default default 5 | ATOM 5 Ne He1 M 5 75.670 13.555 35.774 default 0.00000 default default default 6 | ATOM 6 Ne He1 M 6 76.719 -4.928 2.690 default 0.00000 default default default 7 | ATOM 7 Ne He1 M 7 28.906 99.725 28.064 default 0.00000 default default default 8 | ATOM 8 Ne He1 M 8 103.505 60.842 10.873 default 0.00000 default default default 9 | ATOM 9 Ne He1 M 9 17.635 11.736 -6.920 default 0.00000 default default default 10 | ATOM 10 Ne He1 M 10 -52.818 -91.397 11.704 default 0.00000 default default default 11 | ATOM 11 Ne He1 M 11 -58.342 -52.027 111.504 default 0.00000 default default default 12 | ATOM 12 Ne He1 M 12 -26.004 28.000 7.922 default 0.00000 default default default 13 | ATOM 13 Ne He1 M 13 100.074 -20.322 -49.314 default 0.00000 default default default 14 | ATOM 14 Ne He1 M 14 19.048 9.645 39.673 default 0.00000 default default default 15 | ATOM 15 Ne He1 M 15 44.303 15.853 51.919 default 0.00000 default default default 16 | ATOM 16 Ne He1 M 16 -59.033 31.623 39.679 default 0.00000 default default default 17 | ATOM 17 Ne He1 M 17 -12.143 6.831 -60.638 default 0.00000 default default default 18 | ATOM 18 Ne He1 M 18 1.776 87.724 -73.315 default 0.00000 default default default 19 | ATOM 19 Ne He1 M 19 -131.951 -106.762 38.894 default 0.00000 default default default 20 | ATOM 20 Ne He1 M 20 -61.667 91.082 78.013 default 0.00000 default default default 21 | ATOM 21 Ne He1 M 21 -16.953 7.385 10.231 default 0.00000 default default default 22 | ATOM 22 Ne He1 M 22 87.374 38.312 -37.504 default 0.00000 default default default 23 | ATOM 23 Ne He1 M 23 102.294 -74.261 -8.256 default 0.00000 default default default 24 | ATOM 24 Ne He1 M 24 79.145 39.163 -109.245 default 0.00000 default default default 25 | ATOM 25 Ne He1 M 25 -51.672 61.311 39.442 default 0.00000 default default default 26 | ATOM 26 Ne He1 M 26 -80.563 67.036 18.198 default 0.00000 default default default 27 | ATOM 27 Ne He1 M 27 106.041 2.298 -30.410 default 0.00000 default default default 28 | ATOM 28 Ne He1 M 28 -6.125 -108.557 79.165 default 0.00000 default default default 29 | ATOM 29 Ne He1 M 29 33.155 -40.501 64.061 default 0.00000 default default default 30 | ATOM 30 Ne He1 M 30 -56.560 103.926 -75.472 default 0.00000 default default default 31 | ATOM 31 Ne He1 M 31 -75.531 -5.284 11.100 default 0.00000 default default default 32 | ATOM 32 Ne He1 M 32 -100.848 -71.865 -0.755 default 0.00000 default default default 33 | ATOM 33 Ne He1 M 33 24.316 -111.199 -44.868 default 0.00000 default default default 34 | ATOM 34 Ne He1 M 34 84.295 -58.527 -59.614 default 0.00000 default default default 35 | ATOM 35 Ne He1 M 35 1.278 -83.560 35.896 default 0.00000 default default default 36 | ATOM 36 Ne He1 M 36 2.740 86.527 -52.732 default 0.00000 default default default 37 | ATOM 37 Ne He1 M 37 79.026 68.013 67.212 default 0.00000 default default default 38 | ATOM 38 Ne He1 M 38 108.516 -2.441 46.110 default 0.00000 default default default 39 | ATOM 39 Ne He1 M 39 58.816 -50.045 -68.944 default 0.00000 default default default 40 | ATOM 40 Ne He1 M 40 39.580 18.253 12.115 default 0.00000 default default default 41 | ATOM 41 Ne He1 M 41 -109.153 -12.872 59.504 default 0.00000 default default default 42 | ATOM 42 Ne He1 M 42 28.496 2.674 77.901 default 0.00000 default default default 43 | ATOM 43 Ne He1 M 43 96.629 69.996 44.154 default 0.00000 default default default 44 | ATOM 44 Ne He1 M 44 78.828 -13.541 -16.913 default 0.00000 default default default 45 | ATOM 45 Ne He1 M 45 102.002 0.308 83.772 default 0.00000 default default default 46 | ATOM 46 Ne He1 M 46 -32.187 -98.819 -57.697 default 0.00000 default default default 47 | ATOM 47 Ne He1 M 47 7.311 73.041 -67.028 default 0.00000 default default default 48 | ATOM 48 Ne He1 M 48 -47.959 -10.601 -78.038 default 0.00000 default default default 49 | ATOM 49 Ne He1 M 49 87.032 -22.132 31.351 default 0.00000 default default default 50 | ATOM 50 Ne He1 M 50 -21.036 21.489 -74.826 default 0.00000 default default default 51 | ATOM 51 Ne He1 M 51 -114.013 80.788 10.842 default 0.00000 default default default 52 | ATOM 52 Ne He1 M 52 102.942 -58.901 -3.281 default 0.00000 default default default 53 | ATOM 53 Ne He1 M 53 -5.236 -38.544 -106.906 default 0.00000 default default default 54 | ATOM 54 Ne He1 M 54 15.271 -22.626 107.733 default 0.00000 default default default 55 | ATOM 55 Ne He1 M 55 -51.531 -56.837 -90.256 default 0.00000 default default default 56 | ATOM 56 Ne He1 M 56 76.999 -13.808 54.271 default 0.00000 default default default 57 | ATOM 57 Ne He1 M 57 51.534 -87.149 -42.058 default 0.00000 default default default 58 | ATOM 58 Ne He1 M 58 100.437 -51.335 132.366 default 0.00000 default default default 59 | ATOM 59 Ne He1 M 59 40.596 -12.726 -64.677 default 0.00000 default default default 60 | ATOM 60 Ne He1 M 60 -32.729 23.908 -90.172 default 0.00000 default default default 61 | ATOM 61 Ne He1 M 61 -143.860 -32.460 -110.246 default 0.00000 default default default 62 | ATOM 62 Ne He1 M 62 -1.503 -49.255 -108.164 default 0.00000 default default default 63 | ATOM 63 Ne He1 M 63 -3.408 76.200 -7.956 default 0.00000 default default default 64 | ATOM 64 Ne He1 M 64 -51.301 74.295 69.989 default 0.00000 default default default 65 | ATOM 65 Ne He1 M 65 87.055 -90.968 -64.294 default 0.00000 default default default 66 | ATOM 66 Ne He1 M 66 -89.173 48.198 -8.162 default 0.00000 default default default 67 | ATOM 67 Ne He1 M 67 46.523 76.972 106.425 default 0.00000 default default default 68 | ATOM 68 Ne He1 M 68 45.321 -77.405 -25.712 default 0.00000 default default default 69 | ATOM 69 Ne He1 M 69 50.654 -61.174 109.357 default 0.00000 default default default 70 | ATOM 70 Ne He1 M 70 89.117 -7.537 -15.428 default 0.00000 default default default 71 | ATOM 71 Ne He1 M 71 -7.498 -18.922 76.711 default 0.00000 default default default 72 | ATOM 72 Ne He1 M 72 13.009 -10.838 54.639 default 0.00000 default default default 73 | ATOM 73 Ne He1 M 73 99.699 101.138 -38.538 default 0.00000 default default default 74 | ATOM 74 Ne He1 M 74 -21.531 -50.930 -18.061 default 0.00000 default default default 75 | ATOM 75 Ne He1 M 75 4.114 56.456 7.374 default 0.00000 default default default 76 | ATOM 76 Ne He1 M 76 65.374 -9.508 -65.979 default 0.00000 default default default 77 | ATOM 77 Ne He1 M 77 -62.637 15.760 -30.284 default 0.00000 default default default 78 | ATOM 78 Ne He1 M 78 -20.738 98.274 -63.612 default 0.00000 default default default 79 | ATOM 79 Ne He1 M 79 92.099 -9.657 108.426 default 0.00000 default default default 80 | ATOM 80 Ne He1 M 80 112.229 -112.337 -78.285 default 0.00000 default default default 81 | ATOM 81 Ne He1 M 81 -43.783 -51.292 -28.463 default 0.00000 default default default 82 | ATOM 82 Ne He1 M 82 50.467 -52.252 101.225 default 0.00000 default default default 83 | ATOM 83 Ne He1 M 83 26.702 6.593 -106.052 default 0.00000 default default default 84 | ATOM 84 Ne He1 M 84 98.344 74.519 -78.378 default 0.00000 default default default 85 | ATOM 85 Ne He1 M 85 22.398 35.735 74.848 default 0.00000 default default default 86 | ATOM 86 Ne He1 M 86 -75.032 -52.711 -26.193 default 0.00000 default default default 87 | ATOM 87 Ne He1 M 87 102.667 61.877 53.361 default 0.00000 default default default 88 | ATOM 88 Ne He1 M 88 -74.774 45.026 81.829 default 0.00000 default default default 89 | ATOM 89 Ne He1 M 89 30.380 101.730 54.303 default 0.00000 default default default 90 | ATOM 90 Ne He1 M 90 25.892 -74.465 44.914 default 0.00000 default default default 91 | ATOM 91 Ne He1 M 91 -108.844 -75.435 19.849 default 0.00000 default default default 92 | ATOM 92 Ne He1 M 92 151.942 -73.841 -10.588 default 0.00000 default default default 93 | ATOM 93 Ne He1 M 93 77.875 10.284 -35.027 default 0.00000 default default default 94 | ATOM 94 Ne He1 M 94 102.200 3.754 -40.701 default 0.00000 default default default 95 | ATOM 95 Ne He1 M 95 -59.253 21.093 18.693 default 0.00000 default default default 96 | ATOM 96 Ne He1 M 96 -42.992 42.372 -1.484 default 0.00000 default default default 97 | ATOM 97 Ne He1 M 97 -109.346 -86.193 -64.872 default 0.00000 default default default 98 | ATOM 98 Ne He1 M 98 104.774 54.347 2.182 default 0.00000 default default default 99 | ATOM 99 Ne He1 M 99 65.614 13.605 -90.437 default 0.00000 default default default 100 | ATOM 100 Ne He1 M 100 9.666 -46.516 85.224 default 0.00000 default default default 101 | -------------------------------------------------------------------------------- /atomfiles/Rn100.pdb: -------------------------------------------------------------------------------- 1 | ATOM 1 Rn He1 M 1 -68.429 -24.252 42.149 default 0.00000 default default default 2 | ATOM 2 Rn He1 M 2 -55.901 40.931 -8.004 default 0.00000 default default default 3 | ATOM 3 Rn He1 M 3 33.052 6.010 18.474 default 0.00000 default default default 4 | ATOM 4 Rn He1 M 4 -4.055 -100.954 -8.661 default 0.00000 default default default 5 | ATOM 5 Rn He1 M 5 75.670 13.555 35.774 default 0.00000 default default default 6 | ATOM 6 Rn He1 M 6 76.719 -4.928 2.690 default 0.00000 default default default 7 | ATOM 7 Rn He1 M 7 28.906 99.725 28.064 default 0.00000 default default default 8 | ATOM 8 Rn He1 M 8 103.505 60.842 10.873 default 0.00000 default default default 9 | ATOM 9 Rn He1 M 9 17.635 11.736 -6.920 default 0.00000 default default default 10 | ATOM 10 Rn He1 M 10 -52.818 -91.397 11.704 default 0.00000 default default default 11 | ATOM 11 Rn He1 M 11 -58.342 -52.027 111.504 default 0.00000 default default default 12 | ATOM 12 Rn He1 M 12 -26.004 28.000 7.922 default 0.00000 default default default 13 | ATOM 13 Rn He1 M 13 100.074 -20.322 -49.314 default 0.00000 default default default 14 | ATOM 14 Rn He1 M 14 19.048 9.645 39.673 default 0.00000 default default default 15 | ATOM 15 Rn He1 M 15 44.303 15.853 51.919 default 0.00000 default default default 16 | ATOM 16 Rn He1 M 16 -59.033 31.623 39.679 default 0.00000 default default default 17 | ATOM 17 Rn He1 M 17 -12.143 6.831 -60.638 default 0.00000 default default default 18 | ATOM 18 Rn He1 M 18 1.776 87.724 -73.315 default 0.00000 default default default 19 | ATOM 19 Rn He1 M 19 -131.951 -106.762 38.894 default 0.00000 default default default 20 | ATOM 20 Rn He1 M 20 -61.667 91.082 78.013 default 0.00000 default default default 21 | ATOM 21 Rn He1 M 21 -16.953 7.385 10.231 default 0.00000 default default default 22 | ATOM 22 Rn He1 M 22 87.374 38.312 -37.504 default 0.00000 default default default 23 | ATOM 23 Rn He1 M 23 102.294 -74.261 -8.256 default 0.00000 default default default 24 | ATOM 24 Rn He1 M 24 79.145 39.163 -109.245 default 0.00000 default default default 25 | ATOM 25 Rn He1 M 25 -51.672 61.311 39.442 default 0.00000 default default default 26 | ATOM 26 Rn He1 M 26 -80.563 67.036 18.198 default 0.00000 default default default 27 | ATOM 27 Rn He1 M 27 106.041 2.298 -30.410 default 0.00000 default default default 28 | ATOM 28 Rn He1 M 28 -6.125 -108.557 79.165 default 0.00000 default default default 29 | ATOM 29 Rn He1 M 29 33.155 -40.501 64.061 default 0.00000 default default default 30 | ATOM 30 Rn He1 M 30 -56.560 103.926 -75.472 default 0.00000 default default default 31 | ATOM 31 Rn He1 M 31 -75.531 -5.284 11.100 default 0.00000 default default default 32 | ATOM 32 Rn He1 M 32 -100.848 -71.865 -0.755 default 0.00000 default default default 33 | ATOM 33 Rn He1 M 33 24.316 -111.199 -44.868 default 0.00000 default default default 34 | ATOM 34 Rn He1 M 34 84.295 -58.527 -59.614 default 0.00000 default default default 35 | ATOM 35 Rn He1 M 35 1.278 -83.560 35.896 default 0.00000 default default default 36 | ATOM 36 Rn He1 M 36 2.740 86.527 -52.732 default 0.00000 default default default 37 | ATOM 37 Rn He1 M 37 79.026 68.013 67.212 default 0.00000 default default default 38 | ATOM 38 Rn He1 M 38 108.516 -2.441 46.110 default 0.00000 default default default 39 | ATOM 39 Rn He1 M 39 58.816 -50.045 -68.944 default 0.00000 default default default 40 | ATOM 40 Rn He1 M 40 39.580 18.253 12.115 default 0.00000 default default default 41 | ATOM 41 Rn He1 M 41 -109.153 -12.872 59.504 default 0.00000 default default default 42 | ATOM 42 Rn He1 M 42 28.496 2.674 77.901 default 0.00000 default default default 43 | ATOM 43 Rn He1 M 43 96.629 69.996 44.154 default 0.00000 default default default 44 | ATOM 44 Rn He1 M 44 78.828 -13.541 -16.913 default 0.00000 default default default 45 | ATOM 45 Rn He1 M 45 102.002 0.308 83.772 default 0.00000 default default default 46 | ATOM 46 Rn He1 M 46 -32.187 -98.819 -57.697 default 0.00000 default default default 47 | ATOM 47 Rn He1 M 47 7.311 73.041 -67.028 default 0.00000 default default default 48 | ATOM 48 Rn He1 M 48 -47.959 -10.601 -78.038 default 0.00000 default default default 49 | ATOM 49 Rn He1 M 49 87.032 -22.132 31.351 default 0.00000 default default default 50 | ATOM 50 Rn He1 M 50 -21.036 21.489 -74.826 default 0.00000 default default default 51 | ATOM 51 Rn He1 M 51 -114.013 80.788 10.842 default 0.00000 default default default 52 | ATOM 52 Rn He1 M 52 102.942 -58.901 -3.281 default 0.00000 default default default 53 | ATOM 53 Rn He1 M 53 -5.236 -38.544 -106.906 default 0.00000 default default default 54 | ATOM 54 Rn He1 M 54 15.271 -22.626 107.733 default 0.00000 default default default 55 | ATOM 55 Rn He1 M 55 -51.531 -56.837 -90.256 default 0.00000 default default default 56 | ATOM 56 Rn He1 M 56 76.999 -13.808 54.271 default 0.00000 default default default 57 | ATOM 57 Rn He1 M 57 51.534 -87.149 -42.058 default 0.00000 default default default 58 | ATOM 58 Rn He1 M 58 100.437 -51.335 132.366 default 0.00000 default default default 59 | ATOM 59 Rn He1 M 59 40.596 -12.726 -64.677 default 0.00000 default default default 60 | ATOM 60 Rn He1 M 60 -32.729 23.908 -90.172 default 0.00000 default default default 61 | ATOM 61 Rn He1 M 61 -143.860 -32.460 -110.246 default 0.00000 default default default 62 | ATOM 62 Rn He1 M 62 -1.503 -49.255 -108.164 default 0.00000 default default default 63 | ATOM 63 Rn He1 M 63 -3.408 76.200 -7.956 default 0.00000 default default default 64 | ATOM 64 Rn He1 M 64 -51.301 74.295 69.989 default 0.00000 default default default 65 | ATOM 65 Rn He1 M 65 87.055 -90.968 -64.294 default 0.00000 default default default 66 | ATOM 66 Rn He1 M 66 -89.173 48.198 -8.162 default 0.00000 default default default 67 | ATOM 67 Rn He1 M 67 46.523 76.972 106.425 default 0.00000 default default default 68 | ATOM 68 Rn He1 M 68 45.321 -77.405 -25.712 default 0.00000 default default default 69 | ATOM 69 Rn He1 M 69 50.654 -61.174 109.357 default 0.00000 default default default 70 | ATOM 70 Rn He1 M 70 89.117 -7.537 -15.428 default 0.00000 default default default 71 | ATOM 71 Rn He1 M 71 -7.498 -18.922 76.711 default 0.00000 default default default 72 | ATOM 72 Rn He1 M 72 13.009 -10.838 54.639 default 0.00000 default default default 73 | ATOM 73 Rn He1 M 73 99.699 101.138 -38.538 default 0.00000 default default default 74 | ATOM 74 Rn He1 M 74 -21.531 -50.930 -18.061 default 0.00000 default default default 75 | ATOM 75 Rn He1 M 75 4.114 56.456 7.374 default 0.00000 default default default 76 | ATOM 76 Rn He1 M 76 65.374 -9.508 -65.979 default 0.00000 default default default 77 | ATOM 77 Rn He1 M 77 -62.637 15.760 -30.284 default 0.00000 default default default 78 | ATOM 78 Rn He1 M 78 -20.738 98.274 -63.612 default 0.00000 default default default 79 | ATOM 79 Rn He1 M 79 92.099 -9.657 108.426 default 0.00000 default default default 80 | ATOM 80 Rn He1 M 80 112.229 -112.337 -78.285 default 0.00000 default default default 81 | ATOM 81 Rn He1 M 81 -43.783 -51.292 -28.463 default 0.00000 default default default 82 | ATOM 82 Rn He1 M 82 50.467 -52.252 101.225 default 0.00000 default default default 83 | ATOM 83 Rn He1 M 83 26.702 6.593 -106.052 default 0.00000 default default default 84 | ATOM 84 Rn He1 M 84 98.344 74.519 -78.378 default 0.00000 default default default 85 | ATOM 85 Rn He1 M 85 22.398 35.735 74.848 default 0.00000 default default default 86 | ATOM 86 Rn He1 M 86 -75.032 -52.711 -26.193 default 0.00000 default default default 87 | ATOM 87 Rn He1 M 87 102.667 61.877 53.361 default 0.00000 default default default 88 | ATOM 88 Rn He1 M 88 -74.774 45.026 81.829 default 0.00000 default default default 89 | ATOM 89 Rn He1 M 89 30.380 101.730 54.303 default 0.00000 default default default 90 | ATOM 90 Rn He1 M 90 25.892 -74.465 44.914 default 0.00000 default default default 91 | ATOM 91 Rn He1 M 91 -108.844 -75.435 19.849 default 0.00000 default default default 92 | ATOM 92 Rn He1 M 92 151.942 -73.841 -10.588 default 0.00000 default default default 93 | ATOM 93 Rn He1 M 93 77.875 10.284 -35.027 default 0.00000 default default default 94 | ATOM 94 Rn He1 M 94 102.200 3.754 -40.701 default 0.00000 default default default 95 | ATOM 95 Rn He1 M 95 -59.253 21.093 18.693 default 0.00000 default default default 96 | ATOM 96 Rn He1 M 96 -42.992 42.372 -1.484 default 0.00000 default default default 97 | ATOM 97 Rn He1 M 97 -109.346 -86.193 -64.872 default 0.00000 default default default 98 | ATOM 98 Rn He1 M 98 104.774 54.347 2.182 default 0.00000 default default default 99 | ATOM 99 Rn He1 M 99 65.614 13.605 -90.437 default 0.00000 default default default 100 | ATOM 100 Rn He1 M 100 9.666 -46.516 85.224 default 0.00000 default default default 101 | --------------------------------------------------------------------------------