├── .devcontainer └── devcontainer.json ├── .github └── workflows │ └── testCompilation.yml ├── .gitignore ├── CITATION.cff ├── CaseStudy_01 ├── Block │ ├── .gitignore │ ├── Makefile │ └── block.f ├── README.md ├── Run │ ├── .gitignore │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── adjust.f │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── ener.f │ ├── eneri.f │ ├── lattice.f │ ├── mc_nvt.f │ ├── mcmove.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ └── toterg.f ├── CaseStudy_04 ├── Block │ ├── .gitignore │ ├── Makefile │ └── block.f ├── Run │ ├── lj.gr │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── conf.inc │ ├── eneri.f │ ├── force.f │ ├── init.f │ ├── lattice.f │ ├── md.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── samp.inc │ ├── sample.f │ ├── sample2.f │ ├── setvel.f │ ├── solve.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ ├── veloc.inc │ └── velocs.f ├── CaseStudy_05 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.prth │ ├── lj.res │ ├── lj.vacf │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── conf.inc │ ├── eneri.f │ ├── force.f │ ├── init.f │ ├── lattice.f │ ├── md.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── samp.inc │ ├── sample.f │ ├── sample2.f │ ├── setvel.f │ ├── solve.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ ├── veloc.inc │ └── velocs.f ├── CaseStudy_06 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.prth │ ├── lj.r2 │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── conf.inc │ ├── eneri.f │ ├── force.f │ ├── init.f │ ├── lattice.f │ ├── md.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── samp.inc │ ├── sample.f │ ├── sample2.f │ ├── setvel.f │ ├── solve.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ ├── veloc.inc │ └── velocs.f ├── CaseStudy_07 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── adjust.f │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── ener.f │ ├── eneri.f │ ├── lattice.f │ ├── mc_npt │ ├── mc_npt.f │ ├── mcmove.f │ ├── mcvol.f │ ├── npt.inc │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ └── toterg.f ├── CaseStudy_08 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── adjust.f │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── ener.f │ ├── eneri.f │ ├── lattice.f │ ├── mc_npt │ ├── mc_npt.f │ ├── mcmove.f │ ├── mcvol.f │ ├── npt.inc │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ └── toterg.f ├── CaseStudy_09 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── adjust.f │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── ener.f │ ├── eneri.f │ ├── grand.inc │ ├── lattice.f │ ├── mc_grand │ ├── mc_grand.f │ ├── mcexch.f │ ├── mcmove.f │ ├── npt.inc │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ └── toterg.f ├── CaseStudy_10 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.prth │ ├── lj.res │ ├── lj.resb │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── conf.inc │ ├── corp.f │ ├── eneri.f │ ├── force.f │ ├── gasdev.f │ ├── init.f │ ├── lattice.f │ ├── md.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── samp.inc │ ├── sample.f │ ├── setvel.f │ ├── solve.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ └── veloc.inc ├── CaseStudy_11 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── conf.inc │ ├── corp.f │ ├── eneri.f │ ├── force.f │ ├── init.f │ ├── lattice.f │ ├── md.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── samp.inc │ ├── sample.f │ ├── setvel.f │ ├── solve.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ └── veloc.inc ├── CaseStudy_12 ├── Run │ ├── harm.conf │ └── run └── Source │ ├── .gitignore │ ├── Harm │ ├── Makefile │ ├── andersen.f │ ├── andersen.inc │ ├── force.f │ ├── gasdev.f │ ├── harm.f │ ├── integrate.f │ ├── nhchain.f │ ├── nosehoover.inc │ ├── nvt.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── toterg.f │ └── tridag.f ├── CaseStudy_13 ├── Run │ ├── harm.conf │ └── run └── Source │ ├── .gitignore │ ├── Harm │ ├── Makefile │ ├── andersen.f │ ├── andersen.inc │ ├── force.f │ ├── gasdev.f │ ├── harm.f │ ├── integrate.f │ ├── nhchain.f │ ├── nosehoover.inc │ ├── nvt.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── toterg.f │ └── tridag.f ├── CaseStudy_14 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── Mc_nvt │ ├── adjust.f │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── data │ ├── distri.f │ ├── ener.f │ ├── eneri.f │ ├── lattice.f │ ├── mc_nvt.f │ ├── mcmove.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ └── widom.f ├── CaseStudy_15 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── Mc_nvt │ ├── adjust.f │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── data │ ├── distri.f │ ├── ener.f │ ├── eneri.f │ ├── lattice.f │ ├── mc_nvt.f │ ├── mcmove.f │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ └── widom.f ├── CaseStudy_16 ├── Block │ ├── .gitignore │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ ├── lj.xy │ └── run └── Source │ ├── .gitignore │ ├── Gibbs │ ├── Makefile │ ├── adjust.f │ ├── chem.inc │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── ener.f │ ├── eneri.f │ ├── gibbs.f │ ├── init_chem.f │ ├── lattice.f │ ├── mcmove.f │ ├── mcswap.f │ ├── mcvol.f │ ├── npt.inc │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ └── toterg.f ├── CaseStudy_17 ├── Block │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── hs.prth │ ├── hs.res │ └── run └── Source │ ├── Makefile │ ├── adjust.f │ ├── cell.f │ ├── conf.inc │ ├── dist2.f │ ├── einst.inc │ ├── eneri.f │ ├── enlat.f │ ├── lattice.f │ ├── mc_nvt │ ├── mc_nvt.f │ ├── mcmove.f │ ├── method.inc │ ├── neigcell.f │ ├── new_nlist.f │ ├── nlist.inc │ ├── parameter.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── setlat.f │ ├── store.f │ ├── system.inc │ └── toterg.f ├── CaseStudy_18 ├── Block │ ├── Makefile │ ├── block │ └── block.f ├── Run │ ├── chain.prth │ ├── chain.res │ └── run └── Source │ ├── .gitignore │ ├── Makefile │ ├── adjust.f │ ├── bondl_g.f │ ├── cbmc.f │ ├── eneri.f │ ├── enerlj.f │ ├── enerr.f │ ├── enint.f │ ├── gauss.f │ ├── grow.f │ ├── init.f │ ├── initlat.f │ ├── mccbmc.f │ ├── mcmove.f │ ├── mcvol.f │ ├── par.inc │ ├── particle.inc │ ├── potential.inc │ ├── potentials.f │ ├── ranf.f │ ├── ranor.f │ ├── rantest.f │ ├── sample.f │ ├── select.f │ ├── store.f │ └── toterg.f ├── CaseStudy_19 ├── Run │ └── run └── Source │ ├── Makefile │ ├── cbmc.f │ ├── grow.f │ ├── initlat.f │ ├── mccbmc.f │ ├── ran_uniform.c │ ├── sample_bond.f │ ├── sample_gyra.f │ ├── select.f │ ├── sphere.f │ ├── sstmm.c │ └── system.inc ├── CaseStudy_20 ├── Run │ └── run └── Source │ ├── Makefile │ ├── backbox.f │ ├── echain.f │ ├── echoice.f │ ├── grow_cbmc.f │ ├── grow_recoil.f │ ├── init.f │ ├── initlat.f │ ├── mccbmc.f │ ├── mcmove.f │ ├── mcrota.f │ ├── open_dir.f │ ├── ran_cone.f │ ├── ran_sphere.f │ ├── ran_uniform.c │ ├── recoil.f │ ├── sample_gyra.f │ ├── sample_rad.f │ ├── select.f │ ├── sstmm.c │ ├── store.f │ ├── system.inc │ ├── toterg.f │ └── ttime.c ├── CaseStudy_21 ├── Run │ └── run └── Source │ ├── Makefile │ ├── force.f │ ├── mcloop.f │ ├── ran_uniform.c │ ├── readdat.f │ ├── sstmm.c │ ├── system.inc │ └── tempering.f ├── CaseStudy_22 ├── Run │ ├── equil.res │ └── run └── Source │ ├── Makefile │ ├── checkdis.f │ ├── force.f │ ├── init.f │ ├── integrate.f │ ├── md.f │ ├── mdloop.f │ ├── ranf.f │ ├── rangauss.f │ ├── ransphere.f │ ├── readdat.f │ ├── shake.f │ ├── system.inc │ └── ttime.c ├── CaseStudy_23 ├── Run │ └── run └── Source │ ├── Makefile │ ├── barrier.f │ ├── force.f │ ├── integrate.f │ ├── mdloop.f │ ├── ran_gauss.f │ ├── ran_uniform.c │ ├── ran_vel.f │ ├── readdat.f │ ├── sample.f │ ├── sstmm.c │ └── system.inc ├── CaseStudy_24 ├── Run │ └── run ├── Source │ ├── Makefile │ ├── convert_num.f │ ├── exitt.f │ ├── force.f │ ├── in_A.f │ ├── in_B.f │ ├── in_Slice.f │ ├── md.f │ ├── movie.f │ ├── order.f │ ├── path.f │ ├── pathensemble.f │ ├── ran_gauss.f │ ├── ran_uniform.c │ ├── readpath.f │ ├── sample_avhb.f │ ├── sample_umbrella.f │ ├── shifting.f │ ├── shooting.f │ ├── sstmm.c │ ├── system.inc │ ├── ttime.c │ └── writepath.f └── Tools │ ├── Makefile │ ├── avhb │ ├── avhb.f │ ├── umbrella │ └── umbrella.f ├── CaseStudy_25 ├── Run │ ├── model1.dat │ ├── model2.dat │ └── run └── Source │ ├── Makefile │ ├── dpd.f │ ├── exitt.f │ ├── force.f │ ├── force_minim.f │ ├── maxarray.inc │ ├── minim.f │ ├── ran_gauss.f │ ├── ran_sphere.f │ ├── ran_uniform.c │ ├── readdat.f │ ├── sample_dens.f │ ├── sample_gyra.f │ ├── selflist.inc │ ├── sstmm.c │ ├── system.inc │ ├── ttime.c │ └── writepdb.f ├── CaseStudy_26 ├── Block │ ├── Makefile │ └── block.f ├── Run │ ├── lj.model │ ├── lj.prth │ ├── lj.res │ └── run └── Source │ ├── Makefile │ ├── adjust.f │ ├── cell.f │ ├── conf.inc │ ├── corp.f │ ├── coru.f │ ├── dist2.f │ ├── ener.f │ ├── eneri.f │ ├── lattice.f │ ├── mc_nvt.f │ ├── mcmove.f │ ├── method.inc │ ├── neigcell.f │ ├── new_nlist.f │ ├── new_vlist.f │ ├── nlist.inc │ ├── parameter.inc │ ├── potential.inc │ ├── ranf.f │ ├── rantest.f │ ├── readdat.f │ ├── sample.f │ ├── store.f │ ├── system.inc │ ├── toterg.f │ └── verlet.inc ├── Dockerfile ├── LICENSE ├── README.md ├── Tools ├── ran_gauss.f ├── ran_sphere.f ├── ran_uniform.c ├── ran_uniform.f └── ran_uniform_SGI.c ├── make.py └── requirements.txt /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu 3 | { 4 | "name": "Ubuntu", 5 | // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile 6 | "dockerFile": "../Dockerfile" 7 | 8 | // Features to add to the dev container. More info: https://containers.dev/features. 9 | // "features": {}, 10 | 11 | // Use 'forwardPorts' to make a list of ports inside the container available locally. 12 | // "forwardPorts": [], 13 | 14 | // Use 'postCreateCommand' to run commands after the container is created. 15 | // "postCreateCommand": "uname -a", 16 | 17 | // Configure tool-specific properties. 18 | // "customizations": {}, 19 | 20 | // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. 21 | // "remoteUser": "root" 22 | } 23 | -------------------------------------------------------------------------------- /.github/workflows/testCompilation.yml: -------------------------------------------------------------------------------- 1 | # Upon commit and PR run python .github/workflows/utils/make.py build_all 2 | # to check if all examples compile 3 | # Install fortran compiler 4 | 5 | name: Test Compilation 6 | 7 | on: 8 | push: 9 | branches: 10 | - main 11 | pull_request: 12 | 13 | jobs: 14 | build: 15 | runs-on: ${{ matrix.os }} 16 | strategy: 17 | matrix: 18 | os: [macos-latest, ubuntu-latest] 19 | steps: 20 | - uses: actions/checkout@v2 21 | - name: Install Fortran compiler ubuntu 22 | if: matrix.os == 'ubuntu-latest' 23 | run: sudo apt-get install gfortran 24 | - name: Install Fortran compiler macos 25 | if: matrix.os == 'macos-latest' 26 | run: brew reinstall gcc 27 | - name: Install Python 28 | uses: actions/setup-python@v1 29 | with: 30 | python-version: "3.x" 31 | - name: Install Python dependencies 32 | run: | 33 | python -m pip install --upgrade pip 34 | pip install -r requirements.txt 35 | - name: Build all 36 | run: python3 make.py build_all 37 | -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | message: "If you use this software, please cite it as below." 2 | authors: 3 | - family-names: Smit 4 | given-names: Berend 5 | orcid: https://orcid.org/0000-0003-4653-8562 6 | - family-names: Frenkel 7 | given-names: Daan 8 | orcid: https://orcid.org/0000-0002-6362-2021 9 | title: "Understanding Molecular Simulations: from Algorithms to Applications, 2nd ed. (Academic Press, San Diego, 2002)" 10 | version: v1.0 11 | date-released: 2023-01-04 12 | -------------------------------------------------------------------------------- /CaseStudy_01/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block -------------------------------------------------------------------------------- /CaseStudy_01/README.md: -------------------------------------------------------------------------------- 1 | # Case Study 1: Equation of State of the Lennard-Jones Fluid - I 2 | 3 | One important application of molecular simulation is computing the phase diagram of a given model system. In several chapters, we discuss some of the techniques that have been developed to study phase transitions, in- cluding direct-coexistence simulations. However, direct-coexistence simu- lations may suffer from hysteresis, which may make them less suited for locating phase transitions. In the present Case Study, we illustrate some of the problems that occur when we use standard Monte Carlo simulation to determine a phase diagram. 4 | -------------------------------------------------------------------------------- /CaseStudy_01/Run/.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | -------------------------------------------------------------------------------- /CaseStudy_01/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 5.0 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_01/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 2 3 | 'energy' 4 | 'press' 5 | -------------------------------------------------------------------------------- /CaseStudy_01/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | cp lj.model fort.25 3 | foreach rho (0.70) 4 | echo " --- rho ${rho} " >> out 5 | echo " --- rho ${rho} " 6 | cat > fort.15 <>& out 19 | cp fort.21 lj.res 20 | cp fort.66 lj.prt 21 | #perform block analysis 22 | cp lj.prth fort.31 23 | mv lj.prt fort.32 24 | ../Block/block >>& out 25 | rm fort.* 26 | end 27 | exit 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/.gitignore: -------------------------------------------------------------------------------- 1 | mc_nvt -------------------------------------------------------------------------------- /CaseStudy_01/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | FUNCTION CORP(R, Rho) 4 | c 5 | c tail correction for the pressure: 6 | c 7 | c CORP (output) tail correction pressure 8 | c R (input) cutoff radius 9 | c Rho (input) density 10 | c 11 | 12 | IMPLICIT NONE 13 | INCLUDE 'potential.inc' 14 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 15 | 16 | sig3 = SIG2*SQRT(SIG2) 17 | ri3 = sig3/(R*R*R) 18 | CORP = 4*PI*EPS4*(Rho**2)*sig3*(2*ri3*ri3*ri3/9-ri3/3) 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | FUNCTION CORU(R, Rho) 3 | c 4 | c tail correction for the energy: 5 | c 6 | c CORU (output) energy tail correction 7 | c R (input) cutoff radius 8 | c Rho (input) density 9 | c 10 | 11 | IMPLICIT NONE 12 | INCLUDE 'potential.inc' 13 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 14 | 15 | sig3 = SIG2*SQRT(SIG2) 16 | ri3 = sig3/(R*R*R) 17 | CORU = 2*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9-ri3/3) 18 | RETURN 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | SUBROUTINE ENER(En, Vir, R2) 3 | c 4 | c calculate energy 5 | c 6 | c En : (output) energy 7 | c Vir: (output) virial 8 | c R2 : (input) distance squared between two particles 9 | c 10 | IMPLICIT NONE 11 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 12 | INCLUDE 'potential.inc' 13 | 14 | IF (R2.LT.RC2) THEN 15 | r2i = SIG2/R2 16 | r6i = r2i*r2i*r2i 17 | IF (SHIFT) THEN 18 | En = EPS4*(r6i*r6i-r6i) - ECUT 19 | ELSE 20 | En = EPS4*(r6i*r6i-r6i) 21 | END IF 22 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 23 | ELSE 24 | En = 0 25 | Vir = 0 26 | END IF 27 | RETURN 28 | END 29 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=10000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc,rc2,ecut 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE SAMPLE(I, En, Vir) 4 | c 5 | c write quantities (pressure and energy) to file 6 | c 7 | c 8 | c Ener (input) : total energy 9 | c Vir (input) : total virial 10 | c 11 | c 12 | IMPLICIT NONE 13 | INCLUDE 'parameter.inc' 14 | INCLUDE 'conf.inc' 15 | INCLUDE 'system.inc' 16 | INCLUDE 'potential.inc' 17 | INTEGER I 18 | DOUBLE PRECISION En, enp, Vir, press, CORP, vol, rho 19 | 20 | IF (NPART.NE.0) THEN 21 | enp = En/DBLE(NPART) 22 | vol = BOX**3 23 | press = (NPART/vol)/BETA + Vir/(3*vol) 24 | rho = NPART/vol 25 | IF (TAILCO) press = press + CORP(RC, rho) 26 | ELSE 27 | enp = 0 28 | press = 0 29 | END IF 30 | WRITE (66, *) I, enp, press 31 | RETURN 32 | END 33 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | SUBROUTINE STORE(Iout, Dr) 3 | c 4 | c writes configuration to disk 5 | c 6 | c Iout (input) file number 7 | c Dr (input) maximum displacement 8 | c 9 | c 10 | IMPLICIT NONE 11 | INCLUDE 'parameter.inc' 12 | INCLUDE 'conf.inc' 13 | INCLUDE 'system.inc' 14 | INTEGER Iout, i 15 | DOUBLE PRECISION Dr 16 | 17 | WRITE (Iout, *) BOX, HBOX 18 | WRITE (Iout, *) NPART 19 | WRITE (Iout, *) Dr 20 | DO i = 1, NPART 21 | WRITE (Iout, *) X(i), Y(i), Z(i) 22 | END DO 23 | REWIND (Iout) 24 | RETURN 25 | END 26 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box,hbox,temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_01/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | SUBROUTINE TOTERG(Ener, Vir) 3 | c 4 | c calculates total energy 5 | c 6 | c Ener (output) : total energy 7 | c Vir (output) : total virial 8 | c 9 | 10 | IMPLICIT NONE 11 | INCLUDE 'parameter.inc' 12 | INCLUDE 'conf.inc' 13 | INCLUDE 'potential.inc' 14 | INCLUDE 'system.inc' 15 | 16 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 17 | INTEGER i, jb 18 | 19 | Ener = 0 20 | Vir = 0 21 | DO i = 1, NPART - 1 22 | xi = X(i) 23 | yi = Y(i) 24 | zi = Z(i) 25 | jb = i + 1 26 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 27 | Ener = Ener + eni 28 | Vir = Vir + viri 29 | END DO 30 | c ---add tail corrections 31 | IF (TAILCO) THEN 32 | rho = NPART/(BOX**3) 33 | Ener = Ener + NPART*CORU(RC, rho) 34 | END IF 35 | RETURN 36 | END 37 | 38 | -------------------------------------------------------------------------------- /CaseStudy_04/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_04/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'tot en' 4 | 'pot en' 5 | 'kin en' 6 | 7 | 8 | -------------------------------------------------------------------------------- /CaseStudy_04/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | foreach temp (0.728) 4 | echo " --- temp ${temp} " 5 | echo " --- temp ${temp} " >> out 6 | cat > fort.15 <> out 20 | cp fort.21 lj.res 21 | mv fort.66 lj.prt 22 | mv fort.33 lj.gr 23 | #perform block analysis 24 | cp lj.prth fort.31 25 | mv lj.prt fort.32 26 | ../Block/block >> out 27 | rm fort.* 28 | end 29 | exit 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/.gitignore: -------------------------------------------------------------------------------- 1 | MD 2 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | DOUBLE PRECISION pi 4 | parameter (npmax=1000) 5 | common/par/pi 6 | c 7 | c npmax : maximum number of particles 8 | c pi : 3.14.. 9 | c -------------------------------------------------------------------------------- /CaseStudy_04/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision ecut,rc2 3 | common/pot1/rc2,ecut 4 | c 5 | c rc : cut-off radius of the potenial 6 | c rc2 : rc * rc 7 | c ecut : energy at cut-off radius 8 | 9 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | SUBROUTINE STORE(Iout) 3 | c 4 | c writes configuration to disk 5 | c 6 | c Iout (input) file number 7 | c 8 | IMPLICIT NONE 9 | INCLUDE 'parameter.inc' 10 | INCLUDE 'conf.inc' 11 | INCLUDE 'veloc.inc' 12 | INCLUDE 'system.inc' 13 | INTEGER Iout, i 14 | 15 | WRITE (Iout, *) BOX, HBOX 16 | WRITE (Iout, *) NPART 17 | DO i = 1, NPART 18 | WRITE (Iout, *) X(i), Y(i), Z(i), VX(i), VY(i), VZ(i) 19 | END DO 20 | REWIND (Iout) 21 | RETURN 22 | END 23 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,hbox 3 | common/sys1/box,hbox 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c 8 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | SUBROUTINE TOTERG(Ener, Vir, Enk) 3 | c 4 | c calculates total energy 5 | c 6 | c Ener (output) : total (potential + kinetic) energy 7 | c Vir (output) : total virial 8 | c Enk (ouput) : total kinetic energy 9 | c 10 | IMPLICIT NONE 11 | INCLUDE 'parameter.inc' 12 | INCLUDE 'conf.inc' 13 | INCLUDE 'veloc.inc' 14 | 15 | DOUBLE PRECISION xi, yi, zi, Ener, eni, viri, Vir, Enk 16 | INTEGER i, jb 17 | 18 | Ener = 0 19 | Vir = 0 20 | Enk = 0 21 | DO i = 1, NPART 22 | xi = X(i) 23 | yi = Y(i) 24 | zi = Z(i) 25 | jb = i + 1 26 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 27 | Ener = Ener + eni 28 | Vir = Vir + viri 29 | Enk = Enk + (VX(i)*VX(i)+VY(i)*VY(i)+VZ(i)*VZ(i)) 30 | END DO 31 | c --kinetic energy 32 | Enk = 0.5D0*Enk 33 | Ener = Ener + Enk 34 | RETURN 35 | END 36 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/veloc.inc: -------------------------------------------------------------------------------- 1 | c veloc.inc 2 | double precision vx,vy,vz 3 | common/confv/vx(npmax),vy(npmax),vz(npmax) 4 | c 5 | c vx(i),vy(i),vz(i) : velocity particle i 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_04/Source/velocs.f: -------------------------------------------------------------------------------- 1 | **==velocs.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | 3 | SUBROUTINE VELOCS(Temp) 4 | c 5 | c 6 | c Simple velocity scaling (only used during equilbration!!!!) 7 | c 8 | c Temp (input) : target velocity 9 | c 10 | 11 | IMPLICIT NONE 12 | INCLUDE 'parameter.inc' 13 | INCLUDE 'conf.inc' 14 | INCLUDE 'veloc.inc' 15 | 16 | DOUBLE PRECISION Temp, v2, f 17 | INTEGER i 18 | 19 | 20 | c --rescale velocities 21 | v2 = 0 22 | DO i = 1, NPART 23 | v2 = v2 + VX(i)*VX(i) + VY(i)*VY(i) + VZ(i)*VZ(i) 24 | END DO 25 | v2 = v2/(3*NPART) 26 | f = SQRT(Temp/v2) 27 | DO i = 1, NPART 28 | VX(i) = VX(i)*f 29 | VY(i) = VY(i)*f 30 | VZ(i) = VZ(i)*f 31 | END DO 32 | RETURN 33 | END 34 | -------------------------------------------------------------------------------- /CaseStudy_05/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block -------------------------------------------------------------------------------- /CaseStudy_05/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_05/Block/block -------------------------------------------------------------------------------- /CaseStudy_05/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'tot en' 4 | 'pot en' 5 | 'kin en' 6 | 7 | 8 | -------------------------------------------------------------------------------- /CaseStudy_05/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | foreach temp (0.728) 4 | echo " --- temp ${temp} " 5 | echo " --- temp ${temp} " >> out 6 | cat > fort.15 <> out 20 | cp fort.21 lj.res 21 | mv fort.66 lj.prt 22 | mv fort.34 lj.vacf 23 | #perform block analysis 24 | cp lj.prth fort.31 25 | mv lj.prt fort.32 26 | ../Block/block >> out 27 | rm fort.* 28 | end 29 | exit 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/.gitignore: -------------------------------------------------------------------------------- 1 | MD 2 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | DOUBLE PRECISION pi 4 | parameter (npmax=1000) 5 | common/par/pi 6 | c 7 | c npmax : maximum number of particles 8 | c pi : 3.14.. 9 | c -------------------------------------------------------------------------------- /CaseStudy_05/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision ecut,rc2 3 | common/pot1/rc2,ecut 4 | c 5 | c rc : cut-off radius of the potenial 6 | c rc2 : rc * rc 7 | c ecut : energy at cut-off radius 8 | 9 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | SUBROUTINE STORE(Iout) 3 | c 4 | c writes configuration to disk 5 | c 6 | c Iout (input) file number 7 | c 8 | IMPLICIT NONE 9 | INCLUDE 'parameter.inc' 10 | INCLUDE 'conf.inc' 11 | INCLUDE 'veloc.inc' 12 | INCLUDE 'system.inc' 13 | INTEGER Iout, i 14 | 15 | WRITE (Iout, *) BOX, HBOX 16 | WRITE (Iout, *) NPART 17 | DO i = 1, NPART 18 | WRITE (Iout, *) X(i), Y(i), Z(i), VX(i), VY(i), VZ(i) 19 | END DO 20 | REWIND (Iout) 21 | RETURN 22 | END 23 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,hbox 3 | common/sys1/box,hbox 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c 8 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | SUBROUTINE TOTERG(Ener, Vir, Enk) 3 | c 4 | c calculates total energy 5 | c 6 | c Ener (output) : total (potential + kinetic) energy 7 | c Vir (output) : total virial 8 | c Enk (ouput) : total kinetic energy 9 | c 10 | IMPLICIT NONE 11 | INCLUDE 'parameter.inc' 12 | INCLUDE 'conf.inc' 13 | INCLUDE 'veloc.inc' 14 | 15 | DOUBLE PRECISION xi, yi, zi, Ener, eni, viri, Vir, Enk 16 | INTEGER i, jb 17 | 18 | Ener = 0 19 | Vir = 0 20 | Enk = 0 21 | DO i = 1, NPART 22 | xi = X(i) 23 | yi = Y(i) 24 | zi = Z(i) 25 | jb = i + 1 26 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 27 | Ener = Ener + eni 28 | Vir = Vir + viri 29 | Enk = Enk + (VX(i)*VX(i)+VY(i)*VY(i)+VZ(i)*VZ(i)) 30 | END DO 31 | c --kinetic energy 32 | Enk = 0.5D0*Enk 33 | Ener = Ener + Enk 34 | RETURN 35 | END 36 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/veloc.inc: -------------------------------------------------------------------------------- 1 | c veloc.inc 2 | double precision vx,vy,vz 3 | common/confv/vx(npmax),vy(npmax),vz(npmax) 4 | c 5 | c vx(i),vy(i),vz(i) : velocity particle i 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_05/Source/velocs.f: -------------------------------------------------------------------------------- 1 | **==velocs.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | 3 | SUBROUTINE VELOCS(Temp) 4 | c 5 | c 6 | c Simple velocity scaling (only used during equilbration!!!!) 7 | c 8 | c Temp (input) : target velocity 9 | c 10 | 11 | IMPLICIT NONE 12 | INCLUDE 'parameter.inc' 13 | INCLUDE 'conf.inc' 14 | INCLUDE 'veloc.inc' 15 | 16 | DOUBLE PRECISION Temp, v2, f 17 | INTEGER i 18 | 19 | 20 | c --rescale velocities 21 | v2 = 0 22 | DO i = 1, NPART 23 | v2 = v2 + VX(i)*VX(i) + VY(i)*VY(i) + VZ(i)*VZ(i) 24 | END DO 25 | v2 = v2/(3*NPART) 26 | f = SQRT(Temp/v2) 27 | DO i = 1, NPART 28 | VX(i) = VX(i)*f 29 | VY(i) = VY(i)*f 30 | VZ(i) = VZ(i)*f 31 | END DO 32 | RETURN 33 | END 34 | -------------------------------------------------------------------------------- /CaseStudy_06/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_06/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_06/Block/block -------------------------------------------------------------------------------- /CaseStudy_06/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'tot en' 4 | 'pot en' 5 | 'kin en' 6 | 7 | 8 | -------------------------------------------------------------------------------- /CaseStudy_06/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | foreach temp (0.728) 4 | echo " --- temp ${temp} " 5 | echo " --- temp ${temp} " >> out 6 | cat > fort.15 <> out 20 | cp fort.21 lj.res 21 | mv fort.66 lj.prt 22 | mv fort.70 lj.r2 23 | #perform block analysis 24 | cp lj.prth fort.31 25 | mv lj.prt fort.32 26 | ../Block/block >> out 27 | rm fort.* 28 | end 29 | exit 30 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/.gitignore: -------------------------------------------------------------------------------- 1 | MD 2 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | DOUBLE PRECISION pi 4 | parameter (npmax=1000) 5 | common/par/pi 6 | c 7 | c npmax : maximum number of particles 8 | c pi : 3.14.. 9 | c -------------------------------------------------------------------------------- /CaseStudy_06/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision ecut,rc2 3 | common/pot1/rc2,ecut 4 | c 5 | c rc : cut-off radius of the potenial 6 | c rc2 : rc * rc 7 | c ecut : energy at cut-off radius 8 | 9 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | SUBROUTINE STORE(Iout) 3 | c 4 | c writes configuration to disk 5 | c 6 | c Iout (input) file number 7 | c 8 | IMPLICIT NONE 9 | INCLUDE 'parameter.inc' 10 | INCLUDE 'conf.inc' 11 | INCLUDE 'veloc.inc' 12 | INCLUDE 'system.inc' 13 | INTEGER Iout, i 14 | 15 | WRITE (Iout, *) BOX, HBOX 16 | WRITE (Iout, *) NPART 17 | DO i = 1, NPART 18 | WRITE (Iout, *) X(i), Y(i), Z(i), VX(i), VY(i), VZ(i) 19 | END DO 20 | REWIND (Iout) 21 | RETURN 22 | END 23 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,hbox 3 | common/sys1/box,hbox 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c 8 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | SUBROUTINE TOTERG(Ener, Vir, Enk) 3 | c 4 | c calculates total energy 5 | c 6 | c Ener (output) : total (potential + kinetic) energy 7 | c Vir (output) : total virial 8 | c Enk (ouput) : total kinetic energy 9 | c 10 | IMPLICIT NONE 11 | INCLUDE 'parameter.inc' 12 | INCLUDE 'conf.inc' 13 | INCLUDE 'veloc.inc' 14 | 15 | DOUBLE PRECISION xi, yi, zi, Ener, eni, viri, Vir, Enk 16 | INTEGER i, jb 17 | 18 | Ener = 0 19 | Vir = 0 20 | Enk = 0 21 | DO i = 1, NPART 22 | xi = X(i) 23 | yi = Y(i) 24 | zi = Z(i) 25 | jb = i + 1 26 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 27 | Ener = Ener + eni 28 | Vir = Vir + viri 29 | Enk = Enk + (VX(i)*VX(i)+VY(i)*VY(i)+VZ(i)*VZ(i)) 30 | END DO 31 | c --kinetic energy 32 | Enk = 0.5D0*Enk 33 | Ener = Ener + Enk 34 | RETURN 35 | END 36 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/veloc.inc: -------------------------------------------------------------------------------- 1 | c veloc.inc 2 | double precision vx,vy,vz 3 | common/confv/vx(npmax),vy(npmax),vz(npmax) 4 | c 5 | c vx(i),vy(i),vz(i) : velocity particle i 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_06/Source/velocs.f: -------------------------------------------------------------------------------- 1 | **==velocs.spg processed by SPAG 4.52O at 15:46 on 28 Mar 1996 2 | 3 | SUBROUTINE VELOCS(Temp) 4 | c 5 | c 6 | c Simple velocity scaling (only used during equilbration!!!!) 7 | c 8 | c Temp (input) : target velocity 9 | c 10 | 11 | IMPLICIT NONE 12 | INCLUDE 'parameter.inc' 13 | INCLUDE 'conf.inc' 14 | INCLUDE 'veloc.inc' 15 | 16 | DOUBLE PRECISION Temp, v2, f 17 | INTEGER i 18 | 19 | 20 | c --rescale velocities 21 | v2 = 0 22 | DO i = 1, NPART 23 | v2 = v2 + VX(i)*VX(i) + VY(i)*VY(i) + VZ(i)*VZ(i) 24 | END DO 25 | v2 = v2/(3*NPART) 26 | f = SQRT(Temp/v2) 27 | DO i = 1, NPART 28 | VX(i) = VX(i)*f 29 | VY(i) = VY(i)*f 30 | VZ(i) = VZ(i)*f 31 | END DO 32 | RETURN 33 | END 34 | -------------------------------------------------------------------------------- /CaseStudy_07/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_07/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_07/Block/block -------------------------------------------------------------------------------- /CaseStudy_07/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 500.0 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_07/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'energy' 4 | 'press' 5 | 'dens' 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_07/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | cp lj.model fort.25 4 | foreach temp (1.15) 5 | echo " --- temp ${temp} " 6 | echo " --- temp ${temp} " >> out 7 | cat > fort.15 <>& out 19 | cp fort.21 lj.res 20 | cp fort.66 lj.prt 21 | #perform block analysis 22 | cp lj.prth fort.31 23 | mv lj.prt fort.32 24 | ../Block/block >>& out 25 | rm fort.* 26 | end 27 | exit 28 | 29 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/.gitignore: -------------------------------------------------------------------------------- 1 | mc_npt 2 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | 3 | FUNCTION CORP(R, Rho) 4 | IMPLICIT NONE 5 | INCLUDE 'potential.inc' 6 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 7 | 8 | sig3 = SIG2*SQRT(SIG2) 9 | ri3 = sig3/(R*R*R) 10 | CORP = 4.D0*PI*EPS4*(Rho**2)*sig3*(2.D0*ri3*ri3*ri3/9.D0-ri3/3.D0) 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | FUNCTION CORU(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORU = 2.D0*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9.D0-ri3/3.D0) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | SUBROUTINE ENER(En, Vir, R2) 3 | c ---calculates energy (en) and virial (vir) for given 4 | c distance squared between (r2) two particles 5 | 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INCLUDE 'potential.inc' 9 | 10 | IF (R2.LE.RC2) THEN 11 | r2i = SIG2/R2 12 | r6i = r2i*r2i*r2i 13 | IF (SHIFT) THEN 14 | En = EPS4*(r6i*r6i-r6i) - ECUT 15 | ELSE 16 | En = EPS4*(r6i*r6i-r6i) 17 | END IF 18 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 19 | ELSE 20 | En = 0.D0 21 | Vir = 0.D0 22 | END IF 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/mc_npt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_07/Source/mc_npt -------------------------------------------------------------------------------- /CaseStudy_07/Source/npt.inc: -------------------------------------------------------------------------------- 1 | c npt.inc 2 | double precision p 3 | common/pressure/p 4 | c 5 | c p : imposed pressure 6 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=10000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc,rc2,ecut 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | 3 | SUBROUTINE SAMPLE(I, En, Vir) 4 | c writes quantities to file 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INCLUDE 'potential.inc' 10 | INTEGER I 11 | DOUBLE PRECISION En, enp, Vir, press, CORP, vol, rho 12 | 13 | IF (NPART.NE.0) THEN 14 | enp = En/DBLE(NPART) 15 | vol = BOX**3 16 | rho = NPART/vol 17 | press = rho/BETA + Vir/(3.D0*vol) 18 | IF (TAILCO) press = press + CORP(RC, rho) 19 | ELSE 20 | rho = 0.D0 21 | enp = 0.D0 22 | press = 0.D0 23 | END IF 24 | WRITE (66, *) I, SNGL(enp), SNGL(press), SNGL(rho) 25 | RETURN 26 | END 27 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | SUBROUTINE STORE(Iout, Dr, Vmax) 3 | c writes configuration to disk 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER Iout, i 9 | DOUBLE PRECISION Dr, Vmax 10 | 11 | WRITE (Iout, *) BOX, HBOX 12 | WRITE (Iout, *) NPART 13 | WRITE (Iout, *) Dr, Vmax 14 | DO i = 1, NPART 15 | WRITE (Iout, *) X(i), Y(i), Z(i) 16 | END DO 17 | REWIND (Iout) 18 | RETURN 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box,hbox,temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_07/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | SUBROUTINE TOTERG(Ener, Vir) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'potential.inc' 8 | INCLUDE 'system.inc' 9 | 10 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 11 | INTEGER i, jb 12 | 13 | Ener = 0 14 | Vir = 0 15 | DO i = 1, NPART - 1 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 21 | Ener = Ener + eni 22 | Vir = Vir + viri 23 | END DO 24 | c ---add tail corrections 25 | IF (TAILCO) THEN 26 | rho = NPART/(BOX**3) 27 | Ener = Ener + NPART*CORU(RC, rho) 28 | END IF 29 | RETURN 30 | END 31 | 32 | -------------------------------------------------------------------------------- /CaseStudy_08/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_08/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_08/Block/block -------------------------------------------------------------------------------- /CaseStudy_08/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 500.0 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_08/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'energy' 4 | 'press' 5 | 'dens' 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_08/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | cp lj.model fort.25 4 | foreach rho (0.8) 5 | echo " --- rho_init ${rho} " 6 | echo " --- rho_init ${rho} " >> out 7 | cat > fort.15 <>& out 19 | cp fort.21 lj.res 20 | cp fort.66 lj.prt 21 | #perform block analysis 22 | cp lj.prth fort.31 23 | mv lj.prt fort.32 24 | ../Block/block >>& out 25 | rm fort.* 26 | end 27 | exit 28 | 29 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/.gitignore: -------------------------------------------------------------------------------- 1 | mc_npt 2 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | 3 | FUNCTION CORP(R, Rho) 4 | IMPLICIT NONE 5 | INCLUDE 'potential.inc' 6 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 7 | 8 | sig3 = SIG2*SQRT(SIG2) 9 | ri3 = sig3/(R*R*R) 10 | CORP = 4.D0*PI*EPS4*(Rho**2)*sig3*(2.D0*ri3*ri3*ri3/9.D0-ri3/3.D0) 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | FUNCTION CORU(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORU = 2.D0*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9.D0-ri3/3.D0) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | SUBROUTINE ENER(En, Vir, R2) 3 | c ---calculates energy (en) and virial (vir) for given 4 | c distance squared between (r2) two particles 5 | 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INCLUDE 'potential.inc' 9 | 10 | IF (R2.LE.RC2) THEN 11 | r2i = SIG2/R2 12 | r6i = r2i*r2i*r2i 13 | IF (SHIFT) THEN 14 | En = EPS4*(r6i*r6i-r6i) - ECUT 15 | ELSE 16 | En = EPS4*(r6i*r6i-r6i) 17 | END IF 18 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 19 | ELSE 20 | En = 0.D0 21 | Vir = 0.D0 22 | END IF 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/mc_npt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_08/Source/mc_npt -------------------------------------------------------------------------------- /CaseStudy_08/Source/npt.inc: -------------------------------------------------------------------------------- 1 | c npt.inc 2 | double precision p 3 | common/pressure/p 4 | c 5 | c p : imposed pressure 6 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=10000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc,rc2,ecut 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | 3 | SUBROUTINE SAMPLE(I, En, Vir) 4 | c writes quantities to file 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INCLUDE 'potential.inc' 10 | INTEGER I 11 | DOUBLE PRECISION En, enp, Vir, press, CORP, vol, rho 12 | 13 | IF (NPART.NE.0) THEN 14 | enp = En/DBLE(NPART) 15 | vol = BOX**3 16 | rho = NPART/vol 17 | press = rho/BETA + Vir/(3.D0*vol) 18 | IF (TAILCO) press = press + CORP(RC, rho) 19 | ELSE 20 | rho = 0.D0 21 | enp = 0.D0 22 | press = 0.D0 23 | END IF 24 | WRITE (66, *) I, SNGL(enp), SNGL(press), SNGL(rho) 25 | RETURN 26 | END 27 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | SUBROUTINE STORE(Iout, Dr, Vmax) 3 | c writes configuration to disk 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER Iout, i 9 | DOUBLE PRECISION Dr, Vmax 10 | 11 | WRITE (Iout, *) BOX, HBOX 12 | WRITE (Iout, *) NPART 13 | WRITE (Iout, *) Dr, Vmax 14 | DO i = 1, NPART 15 | WRITE (Iout, *) X(i), Y(i), Z(i) 16 | END DO 17 | REWIND (Iout) 18 | RETURN 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box,hbox,temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_08/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 10:45 on 5 Jun 1996 2 | SUBROUTINE TOTERG(Ener, Vir) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'potential.inc' 8 | INCLUDE 'system.inc' 9 | 10 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 11 | INTEGER i, jb 12 | 13 | Ener = 0 14 | Vir = 0 15 | DO i = 1, NPART - 1 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 21 | Ener = Ener + eni 22 | Vir = Vir + viri 23 | END DO 24 | c ---add tail corrections 25 | IF (TAILCO) THEN 26 | rho = NPART/(BOX**3) 27 | Ener = Ener + NPART*CORU(RC, rho) 28 | END IF 29 | RETURN 30 | END 31 | 32 | -------------------------------------------------------------------------------- /CaseStudy_09/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_09/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_09/Block/block -------------------------------------------------------------------------------- /CaseStudy_09/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 500.0 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_09/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'energy' 4 | 'press' 5 | 'dens' 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_09/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | cp lj.model fort.25 4 | foreach pid (0.016 ) 5 | echo " --- pid ${pid} " 6 | echo " --- pid ${pid} " >> out 7 | cat > fort.15 <>& out 21 | cp fort.21 lj.res 22 | mv fort.66 lj.prt 23 | #perform block analysis 24 | cp lj.prth fort.31 25 | mv lj.prt fort.32 26 | ../Block/block >>& out 27 | rm fort.* 28 | end 29 | exit 30 | 31 | 32 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/.gitignore: -------------------------------------------------------------------------------- 1 | mc_grand 2 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/adjust.f: -------------------------------------------------------------------------------- 1 | **==adjust.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | SUBROUTINE ADJUST(Attemp, Nacc, Dr) 3 | c adjusts maximum displacement such that 50% of the 4 | c movels will be accepted 5 | IMPLICIT NONE 6 | INCLUDE 'system.inc' 7 | INTEGER Attemp, Nacc, attempp, naccp 8 | DOUBLE PRECISION dro, frac, Dr 9 | SAVE naccp, attempp 10 | 11 | IF (Attemp.EQ.0.OR.attempp.GE.Attemp) THEN 12 | naccp = Nacc 13 | attempp = Attemp 14 | ELSE 15 | frac = DBLE(Nacc-naccp)/DBLE(Attemp-attempp) 16 | dro = Dr 17 | Dr = Dr*ABS(frac/0.5D0) 18 | c ---limit the change: 19 | IF (Dr/dro.GT.1.5D0) Dr = dro*1.5D0 20 | IF (Dr/dro.LT.0.5D0) Dr = dro*0.5D0 21 | IF (Dr.GT.HBOX/2.D0) Dr = HBOX/2.D0 22 | WRITE (6, 99001) Dr, dro, frac, Attemp - attempp, Nacc - naccp 23 | c ---store nacc and attemp for next use 24 | naccp = Nacc 25 | attempp = Attemp 26 | END IF 27 | RETURN 28 | 99001 FORMAT (' Max. displ. set to : ', f6.3, ' (old : ', f6.3, ')', /, 29 | & ' Frac. acc.: ', f4.2, ' attempts: ', i7, ' succes: ', i7) 30 | END 31 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | 3 | FUNCTION CORP(R, Rho) 4 | IMPLICIT NONE 5 | INCLUDE 'potential.inc' 6 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 7 | 8 | sig3 = SIG2*SQRT(SIG2) 9 | ri3 = sig3/(R*R*R) 10 | CORP = 4.D0*PI*EPS4*(Rho**2)*sig3*(2.D0*ri3*ri3*ri3/9.D0-ri3/3.D0) 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | FUNCTION CORU(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORU = 2.D0*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9.D0-ri3/3.D0) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | SUBROUTINE ENER(En, Vir, R2) 3 | c ---calculates energy (en) and virial (vir) for given 4 | c distance squared between (r2) two particles 5 | 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INCLUDE 'potential.inc' 9 | 10 | IF (R2.LE.RC2) THEN 11 | r2i = SIG2/R2 12 | r6i = r2i*r2i*r2i 13 | IF (SHIFT) THEN 14 | En = EPS4*(r6i*r6i-r6i) - ECUT 15 | ELSE 16 | En = EPS4*(r6i*r6i-r6i) 17 | END IF 18 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 19 | ELSE 20 | En = 0.D0 21 | Vir = 0.D0 22 | END IF 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/grand.inc: -------------------------------------------------------------------------------- 1 | double precision zz 2 | common/grand/zz 3 | c 4 | c zz = exp(beta*mu^b)/Lamda^3 : related to chemical potential reservoir 5 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/mc_grand: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_09/Source/mc_grand -------------------------------------------------------------------------------- /CaseStudy_09/Source/npt.inc: -------------------------------------------------------------------------------- 1 | c npt.inc 2 | double precision p 3 | common/pressure/p 4 | c 5 | c p : imposed pressure 6 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=10000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc,rc2,ecut 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | 3 | SUBROUTINE SAMPLE(I, En, Vir) 4 | c writes quantities to file 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INCLUDE 'potential.inc' 10 | INTEGER I 11 | DOUBLE PRECISION En, enp, Vir, press, CORP, vol, rho 12 | 13 | IF (NPART.NE.0) THEN 14 | enp = En/DBLE(NPART) 15 | vol = BOX**3 16 | rho = NPART/vol 17 | press = rho/BETA + Vir/(3.D0*vol) 18 | IF (TAILCO) press = press + CORP(RC, rho) 19 | ELSE 20 | rho = 0.D0 21 | enp = 0.D0 22 | press = 0.D0 23 | END IF 24 | WRITE (66, *) I, SNGL(enp), SNGL(press), SNGL(rho) 25 | RETURN 26 | END 27 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | SUBROUTINE STORE(Iout, Dr) 3 | c 4 | c writes configuration to disk 5 | c 6 | IMPLICIT NONE 7 | INCLUDE 'parameter.inc' 8 | INCLUDE 'conf.inc' 9 | INCLUDE 'system.inc' 10 | INTEGER Iout, i 11 | DOUBLE PRECISION Dr 12 | 13 | WRITE (Iout, *) BOX 14 | WRITE (Iout, *) NPART 15 | WRITE (Iout, *) Dr 16 | DO i = 1, NPART 17 | WRITE (Iout, *) X(i), Y(i), Z(i) 18 | END DO 19 | REWIND (Iout) 20 | RETURN 21 | END 22 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box,hbox,temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_09/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 18:49 on 6 Jun 1996 2 | SUBROUTINE TOTERG(Ener, Vir) 3 | c 4 | c ---calculates total energy and virial 5 | c 6 | IMPLICIT NONE 7 | INCLUDE 'parameter.inc' 8 | INCLUDE 'conf.inc' 9 | INCLUDE 'potential.inc' 10 | INCLUDE 'system.inc' 11 | 12 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 13 | INTEGER i, jb 14 | 15 | Ener = 0 16 | Vir = 0 17 | DO i = 1, NPART - 1 18 | xi = X(i) 19 | yi = Y(i) 20 | zi = Z(i) 21 | jb = i + 1 22 | c ---calculate energy particle i with particel j=jb,naprt 23 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 24 | Ener = Ener + eni 25 | Vir = Vir + viri 26 | END DO 27 | c ---add tail corrections 28 | IF (TAILCO) THEN 29 | rho = NPART/(BOX**3) 30 | Ener = Ener + NPART*CORU(RC, rho) 31 | END IF 32 | RETURN 33 | END 34 | 35 | -------------------------------------------------------------------------------- /CaseStudy_10/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_10/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_10/Block/block -------------------------------------------------------------------------------- /CaseStudy_10/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'temp:' 4 | 'Press:' 5 | 'pot en:' 6 | 7 | 8 | -------------------------------------------------------------------------------- /CaseStudy_10/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | foreach nu (10. ) 4 | echo " --- nu ${nu} " 5 | echo " --- nu ${nu} " >> out 6 | cat > fort.15 <> out 18 | cp fort.21 lj.res 19 | mv fort.66 lj.prt 20 | mv fort.34 lj.vacf.${nu} 21 | mv fort.37 lj.dVelnu${nu} 22 | 23 | #perform block analysis 24 | cp lj.prth fort.31 25 | mv lj.prt fort.32 26 | ../Block/block >> out 27 | rm fort.* 28 | end 29 | exit 30 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/.gitignore: -------------------------------------------------------------------------------- 1 | MD 2 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z,nu 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),nu,npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c nu : parameter Poisson distribution 8 | c npart : actual number of particles 9 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 09:34 on 20 Jun 1996 2 | FUNCTION CORP(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'parameter.inc' 5 | DOUBLE PRECISION ri3, R, CORP, Rho 6 | 7 | ri3 = 1/(R*R*R) 8 | CORP = 4*PI*4*(Rho**2)*(2*ri3*ri3*ri3/9-ri3/3) 9 | RETURN 10 | END 11 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/gasdev.f: -------------------------------------------------------------------------------- 1 | **==gasdev.spg processed by SPAG 4.52O at 09:34 on 20 Jun 1996 2 | DOUBLE PRECISION FUNCTION GASDEV(Sigma, Iseed) 3 | IMPLICIT NONE 4 | c 5 | c normally distributed with variance sigma and mean zero 6 | c 7 | DOUBLE PRECISION r, v1, v2, fac, gset, RANF 8 | DOUBLE PRECISION Sigma 9 | INTEGER iset, Iseed 10 | 11 | SAVE gset, iset 12 | DATA iset/0/ 13 | 100 IF (iset.EQ.0) THEN 14 | v1 = 2.D0*RANF(Iseed) - 1.D0 15 | v2 = 2.D0*RANF(Iseed) - 1.D0 16 | r = v1**2 + v2**2 17 | IF (r.GE.1) GOTO 100 18 | fac = SQRT(-2.D0*LOG(r)/r) 19 | gset = v1*fac 20 | GASDEV = v2*fac 21 | iset = 1 22 | ELSE 23 | GASDEV = gset 24 | iset = 0 25 | END IF 26 | GASDEV = GASDEV*Sigma 27 | RETURN 28 | c-------------------------------------------------------c 29 | END 30 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/lattice.f: -------------------------------------------------------------------------------- 1 | **==lattice.spg processed by SPAG 4.52O at 09:34 on 20 Jun 1996 2 | 3 | SUBROUTINE LATTICE() 4 | c ---place `npart' particles on a lattice with density 'rho' 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INTEGER i, j, k, itel, n 10 | DOUBLE PRECISION del 11 | 12 | del = (BOX**3)**(1.D0/3.D0) 13 | c ---put particels on a simple cubic lattice 14 | WRITE (6, *) ' generate simple cubic lattice' 15 | n = INT(NPART**(1.D0/3.D0)) + 1 16 | IF (n.EQ.0) n = 1 17 | del = del/DBLE(n) 18 | itel = 0 19 | DO i = 0, n - 1 20 | DO j = 0, n - 1 21 | DO k = 0, n - 1 22 | IF (itel.LT.NPART) THEN 23 | itel = itel + 1 24 | X(itel) = k*del 25 | Y(itel) = j*del 26 | Z(itel) = i*del 27 | END IF 28 | END DO 29 | END DO 30 | END DO 31 | WRITE (6, 99001) itel 32 | RETURN 33 | 99001 FORMAT (' Initialisation on lattice: ', /, i10, 34 | & ' particles placed on a lattice') 35 | END 36 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | DOUBLE PRECISION pi 4 | parameter (npmax=1000) 5 | common/par/pi 6 | c 7 | c npmax : maximum number of particles 8 | c pi : 3.1415927... 9 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision ecut,rc2 3 | common/pot1/rc2,ecut 4 | c 5 | c rc : cut-off radius of the potenial 6 | c rc2 : rc * rc 7 | c ecut : energy at cut-off radius 8 | 9 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/samp.inc: -------------------------------------------------------------------------------- 1 | c samp.inc 2 | integer nlmax 3 | parameter (nlmax=500) 4 | INTEGER iout1,igr,iout2,ntvacf,it0,nsamp,itstress0,iout3 5 | common/samp1/nsamp,iout1,igr,iout2,ntvacf,it0 6 | & ,itstress0,iout3 7 | 8 | c nsamp : frequency with which subroutine sample is called 9 | c iout1 : fortran file number output radial distribution function 10 | c igr : sample frequency radial distribution function 11 | c (total sample frequency is: nsamp*igr) 12 | c iout2 : fortran file number output diffusion results 13 | c ntvacf : sample frequency velocity autocorrelation function 14 | c (total sample frequency is: nsamp*ntvacf) 15 | c it0 : frequency for a new t=0 in velocity autocorrelation function 16 | c itstress0: frequency for a new t=0 in stress tensor correlation 17 | c iout3 : fortran file number output stress tensor correlation 18 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 09:34 on 20 Jun 1996 2 | 3 | 4 | SUBROUTINE STORE(Iout) 5 | c writes configuration to disk 6 | IMPLICIT NONE 7 | INCLUDE 'parameter.inc' 8 | INCLUDE 'conf.inc' 9 | INCLUDE 'veloc.inc' 10 | INCLUDE 'system.inc' 11 | INTEGER Iout, i 12 | 13 | WRITE (Iout, *) BOX, HBOX 14 | WRITE (Iout, *) NPART 15 | DO i = 1, NPART 16 | WRITE (Iout, *) X(i), Y(i), Z(i), VX(i), VY(i), VZ(i) 17 | END DO 18 | REWIND (Iout) 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,hbox 3 | common/sys1/box,hbox 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 09:34 on 20 Jun 1996 2 | SUBROUTINE TOTERG(Ener, Vir, Enk) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'veloc.inc' 8 | 9 | DOUBLE PRECISION xi, yi, zi, Ener, eni, viri, Vir, Enk 10 | INTEGER i, jb 11 | 12 | Ener = 0 13 | Vir = 0 14 | Enk = 0 15 | DO i = 1, NPART 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 21 | Ener = Ener + eni 22 | Vir = Vir + viri 23 | Enk = Enk + (VX(i)*VX(i)+VY(i)*VY(i)+VZ(i)*VZ(i)) 24 | END DO 25 | c --kinetic energy 26 | Enk = 0.5D0*Enk 27 | Ener = Ener + Enk 28 | RETURN 29 | END 30 | -------------------------------------------------------------------------------- /CaseStudy_10/Source/veloc.inc: -------------------------------------------------------------------------------- 1 | c veloc.inc 2 | double precision vx,vy,vz 3 | common/confv/vx(npmax),vy(npmax),vz(npmax) 4 | c 5 | c vx(i),vy(i),vz(i) : velocity particle i 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_11/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_11/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_11/Block/block -------------------------------------------------------------------------------- /CaseStudy_11/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 3 3 | 'temp:' 4 | 'Press:' 5 | 'pot en:' 6 | 7 | 8 | -------------------------------------------------------------------------------- /CaseStudy_11/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | foreach q (10.) 4 | echo " --- q ${q} " 5 | echo " --- q ${q} " >> out 6 | cat > fort.15 <> out 18 | cp fort.21 lj.res 19 | mv fort.66 lj.prt 20 | mv fort.34 lj.vacf.${q} 21 | mv fort.36 lj.dTemp 22 | mv fort.37 lj.dVel 23 | mv fort.39 lj.dVel2 24 | 25 | #perform block analysis 26 | cp lj.prth fort.31 27 | mv lj.prt fort.32 28 | ../Block/block >> out 29 | rm fort.* 30 | end 31 | exit 32 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/.gitignore: -------------------------------------------------------------------------------- 1 | MD 2 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z,q,s,ps 3 | integer npart,g 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | common/conf2/q,s,ps,g 6 | c 7 | c x(i),y(i),z(i) : position particle i 8 | c npart : actual number of particles 9 | c q : Nose Hoover Mass 10 | c g : number of degrees of freedom 11 | c s,ps : Nose-Hoover coupling parameter 12 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 11:24 on 20 Jun 1996 2 | FUNCTION CORP(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'parameter.inc' 5 | DOUBLE PRECISION ri3, R, CORP, Rho 6 | 7 | ri3 = 1/(R*R*R) 8 | CORP = 4*PI*4*(Rho**2)*(2*ri3*ri3*ri3/9-ri3/3) 9 | RETURN 10 | END 11 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/lattice.f: -------------------------------------------------------------------------------- 1 | **==lattice.spg processed by SPAG 4.52O at 11:24 on 20 Jun 1996 2 | 3 | SUBROUTINE LATTICE() 4 | c ---place `npart' particles on a lattice with density 'rho' 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INTEGER i, j, k, itel, n 10 | DOUBLE PRECISION del 11 | 12 | del = (BOX**3)**(1.D0/3.D0) 13 | c ---put particels on a simple cubic lattice 14 | WRITE (6, *) ' generate simple cubic lattice' 15 | n = INT(NPART**(1.D0/3.D0)) + 1 16 | IF (n.EQ.0) n = 1 17 | del = del/DBLE(n) 18 | itel = 0 19 | DO i = 0, n - 1 20 | DO j = 0, n - 1 21 | DO k = 0, n - 1 22 | IF (itel.LT.NPART) THEN 23 | itel = itel + 1 24 | X(itel) = k*del 25 | Y(itel) = j*del 26 | Z(itel) = i*del 27 | END IF 28 | END DO 29 | END DO 30 | END DO 31 | WRITE (6, 99001) itel 32 | RETURN 33 | 99001 FORMAT (' Initialisation on lattice: ', /, i10, 34 | & ' particles placed on a lattice') 35 | END 36 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | DOUBLE PRECISION pi 4 | parameter (npmax=1000) 5 | common/par/pi 6 | c 7 | c npmax : maximum number of particles 8 | c pi : 3.1415927... 9 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision ecut,rc2 3 | common/pot1/rc2,ecut 4 | c 5 | c rc : cut-off radius of the potenial 6 | c rc2 : rc * rc 7 | c ecut : energy at cut-off radius 8 | 9 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/samp.inc: -------------------------------------------------------------------------------- 1 | c samp.inc 2 | integer nlmax,ill 3 | parameter (nlmax=500) 4 | INTEGER iout1,igr,iout2,ntvacf,it0,nsamp,itstress0,iout3 5 | common/samp1/nsamp,iout1,igr,iout2,ntvacf,it0 6 | & ,itstress0,iout3 7 | common/live/ill 8 | 9 | c nsamp : frequency with which subroutine sample is called 10 | c iout1 : fortran file number output radial distribution function 11 | c igr : sample frequency radial distribution function 12 | c (total sample frequency is: nsamp*igr) 13 | c iout2 : fortran file number output diffusion results 14 | c ntvacf : sample frequency velocity autocorrelation function 15 | c (total sample frequency is: nsamp*ntvacf) 16 | c it0 : frequency for a new t=0 in velocity autocorrelation function 17 | c itstress0: frequency for a new t=0 in stress tensor correlation 18 | c iout3 : fortran file number output stress tensor correlation 19 | c ill : counter temperature sampling 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 11:24 on 20 Jun 1996 2 | 3 | 4 | SUBROUTINE STORE(Iout) 5 | c writes configuration to disk 6 | IMPLICIT NONE 7 | INCLUDE 'parameter.inc' 8 | INCLUDE 'conf.inc' 9 | INCLUDE 'veloc.inc' 10 | INCLUDE 'system.inc' 11 | INTEGER Iout, i 12 | 13 | WRITE (Iout, *) BOX, HBOX 14 | WRITE (Iout, *) NPART 15 | DO i = 1, NPART 16 | WRITE (Iout, *) X(i), Y(i), Z(i), VX(i), VY(i), VZ(i) 17 | END DO 18 | WRITE (Iout, *) S, PS 19 | REWIND (Iout) 20 | RETURN 21 | END 22 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,hbox 3 | common/sys1/box,hbox 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 11:24 on 20 Jun 1996 2 | SUBROUTINE TOTERG(Ener, Vir, Enk) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'veloc.inc' 8 | 9 | DOUBLE PRECISION xi, yi, zi, Ener, eni, viri, Vir, Enk 10 | INTEGER i, jb 11 | 12 | Ener = 0 13 | Vir = 0 14 | Enk = 0 15 | DO i = 1, NPART 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 21 | Ener = Ener + eni 22 | Vir = Vir + viri 23 | Enk = Enk + (VX(i)*VX(i)+VY(i)*VY(i)+VZ(i)*VZ(i)) 24 | END DO 25 | c --kinetic energy 26 | Enk = 0.5D0*Enk 27 | Ener = Ener + Enk 28 | RETURN 29 | END 30 | -------------------------------------------------------------------------------- /CaseStudy_11/Source/veloc.inc: -------------------------------------------------------------------------------- 1 | c veloc.inc 2 | double precision vx,vy,vz 3 | common/confv/vx(npmax),vy(npmax),vz(npmax) 4 | c 5 | c vx(i),vy(i),vz(i) : velocity particle i 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_12/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | echo " --- start " 4 | cat > fort.15 <>& out 24 | mv fort.21 harm.conf 25 | rm fort.15 26 | 27 | exit 28 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/.gitignore: -------------------------------------------------------------------------------- 1 | Harm 2 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/Harm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_12/Source/Harm -------------------------------------------------------------------------------- /CaseStudy_12/Source/andersen.inc: -------------------------------------------------------------------------------- 1 | c andersen.inc 2 | integer ncoll,iseed 3 | common/andersenc/ncoll,iseed 4 | c 5 | c ncoll : collision frequency Andersen heat bath 6 | c iseed : seed random number generator 7 | c 8 | 9 | 10 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/force.f: -------------------------------------------------------------------------------- 1 | **==force.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE FORCE(Fx, X, En) 3 | c 4 | c Deterime the force: 5 | c Potential U = 0.5 x^2 6 | c 7 | IMPLICIT NONE 8 | DOUBLE PRECISION X, En, Fx 9 | 10 | En = 0.5D0*X*X 11 | Fx = -X 12 | RETURN 13 | END 14 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/gasdev.f: -------------------------------------------------------------------------------- 1 | **==gasdev.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | DOUBLE PRECISION FUNCTION GASDEV(Sigma, Iseed) 3 | IMPLICIT NONE 4 | c 5 | c normally distributed with variance sigma and mean zero 6 | c 7 | DOUBLE PRECISION r, v1, v2, fac, gset, RANF 8 | DOUBLE PRECISION Sigma 9 | INTEGER iset, Iseed 10 | 11 | SAVE gset, iset 12 | DATA iset/0/ 13 | 100 IF (iset.EQ.0) THEN 14 | v1 = 2.D0*RANF(Iseed) - 1.D0 15 | v2 = 2.D0*RANF(Iseed) - 1.D0 16 | r = v1**2 + v2**2 17 | IF (r.GE.1) GOTO 100 18 | fac = SQRT(-2.D0*LOG(r)/r) 19 | gset = v1*fac 20 | GASDEV = v2*fac 21 | iset = 1 22 | ELSE 23 | GASDEV = gset 24 | iset = 0 25 | END IF 26 | GASDEV = GASDEV*Sigma 27 | RETURN 28 | c-------------------------------------------------------c 29 | END 30 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/integrate.f: -------------------------------------------------------------------------------- 1 | **==integrate.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE INTEGRATE(X, Ux, Delt, T, En0) 3 | c 4 | c integrate equations of motion: 5 | c 6 | IMPLICIT NONE 7 | DOUBLE PRECISION X, en, fx, Ux, Delt, T, ent, enk 8 | DOUBLE PRECISION En0 9 | SAVE fx 10 | DATA fx/0.D0/ 11 | 12 | c ---velocity Verlet algorithm 13 | X = X + Delt*Ux + Delt*Delt*fx/2 14 | Ux = Ux + Delt*fx/2 15 | CALL FORCE(fx, X, en) 16 | Ux = Ux + Delt*fx/2 17 | enk = Ux**2/2 18 | 19 | T = T + Delt 20 | ent = en + enk 21 | WRITE (21, '(2(2x,f7.4),2x,e8.2,2(2x,f7.4))') X, Ux, 22 | & ABS((ent-En0)/En0), ent, enk 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/nosehoover.inc: -------------------------------------------------------------------------------- 1 | c nosehoover.inc 2 | integer fh,mmax,m 3 | parameter (mmax=10) 4 | double precision xi,pxi,qh,sc,psc 5 | common/nosehc/xi(mmax),pxi(mmax),qh(mmax),fh,m 6 | common/nosehs/sc(mmax),psc(mmax) 7 | 8 | c xi(nmax) : friction coefficients 9 | c pxi(nmax): derivative friction coefficients 10 | c qh(mmax) : Nose-Hoover masses for the mmax chains 11 | c fh : number of degrees of freedom (see text) 12 | c m : number of Nose-Hoover chains 13 | 14 | c sc(nmax) : Nose's s variable 15 | c psc(nmax): derivative Nose's s variable 16 | c 17 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/nvt.inc: -------------------------------------------------------------------------------- 1 | c nvt.inc 2 | double precision temp 3 | logical nvt 4 | integer metht 5 | common/nvtc/temp,metht,nvt 6 | c 7 | c temp : impost temperature 8 | c metht : method used in simulation: 9 | c 1 : Andersen 10 | c 2 : Nose-Hoover 11 | c NVT : if .true. simulate NVT ensemble 12 | c 13 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE TOTERG(X, Ux, Ent) 3 | c 4 | c Determin total energy: 5 | c 6 | IMPLICIT NONE 7 | DOUBLE PRECISION X, Ux, Ent, en, enk, fx 8 | CALL FORCE(fx, X, en) 9 | enk = 0.5D0*Ux*Ux 10 | Ent = enk + en 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_12/Source/tridag.f: -------------------------------------------------------------------------------- 1 | **==tridag.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE TRIDAG(A, B, C, R, U, N) 3 | IMPLICIT NONE 4 | INTEGER N, NMAx 5 | DOUBLE PRECISION A(N), B(N), C(N), R(N), U(N) 6 | PARAMETER (NMAx=500) 7 | INTEGER j 8 | DOUBLE PRECISION bet, gam(NMAx) 9 | IF (B(1).EQ.0.) THEN 10 | STOP 'tridag: rewrite equations' 11 | END IF 12 | bet = B(1) 13 | U(1) = R(1)/bet 14 | DO j = 2, N 15 | gam(j) = C(j-1)/bet 16 | bet = B(j) - A(j)*gam(j) 17 | IF (bet.EQ.0.) THEN 18 | STOP 'tridag failed' 19 | END IF 20 | U(j) = (R(j)-A(j)*U(j-1))/bet 21 | END DO 22 | DO j = N - 1, 1, -1 23 | U(j) = U(j) - gam(j+1)*U(j+1) 24 | END DO 25 | RETURN 26 | END 27 | C (C) Copr. 1986-92 Numerical Recipes Software +3Y. 28 | -------------------------------------------------------------------------------- /CaseStudy_13/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | echo " --- start " 4 | cat > fort.15 <>& out 24 | mv fort.21 harm.conf 25 | rm fort.15 26 | 27 | exit 28 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/.gitignore: -------------------------------------------------------------------------------- 1 | Harm 2 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/Harm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_13/Source/Harm -------------------------------------------------------------------------------- /CaseStudy_13/Source/andersen.inc: -------------------------------------------------------------------------------- 1 | c andersen.inc 2 | integer ncoll,iseed 3 | common/andersenc/ncoll,iseed 4 | c 5 | c ncoll : collision frequency Andersen heat bath 6 | c iseed : seed random number generator 7 | c 8 | 9 | 10 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/force.f: -------------------------------------------------------------------------------- 1 | **==force.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE FORCE(Fx, X, En) 3 | c 4 | c Deterime the force: 5 | c Potential U = 0.5 x^2 6 | c 7 | IMPLICIT NONE 8 | DOUBLE PRECISION X, En, Fx 9 | 10 | En = 0.5D0*X*X 11 | Fx = -X 12 | RETURN 13 | END 14 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/gasdev.f: -------------------------------------------------------------------------------- 1 | **==gasdev.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | DOUBLE PRECISION FUNCTION GASDEV(Sigma, Iseed) 3 | IMPLICIT NONE 4 | c 5 | c normally distributed with variance sigma and mean zero 6 | c 7 | DOUBLE PRECISION r, v1, v2, fac, gset, RANF 8 | DOUBLE PRECISION Sigma 9 | INTEGER iset, Iseed 10 | 11 | SAVE gset, iset 12 | DATA iset/0/ 13 | 100 IF (iset.EQ.0) THEN 14 | v1 = 2.D0*RANF(Iseed) - 1.D0 15 | v2 = 2.D0*RANF(Iseed) - 1.D0 16 | r = v1**2 + v2**2 17 | IF (r.GE.1) GOTO 100 18 | fac = SQRT(-2.D0*LOG(r)/r) 19 | gset = v1*fac 20 | GASDEV = v2*fac 21 | iset = 1 22 | ELSE 23 | GASDEV = gset 24 | iset = 0 25 | END IF 26 | GASDEV = GASDEV*Sigma 27 | RETURN 28 | c-------------------------------------------------------c 29 | END 30 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/integrate.f: -------------------------------------------------------------------------------- 1 | **==integrate.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE INTEGRATE(X, Ux, Delt, T, En0) 3 | c 4 | c integrate equations of motion: 5 | c 6 | IMPLICIT NONE 7 | DOUBLE PRECISION X, en, fx, Ux, Delt, T, ent, enk 8 | DOUBLE PRECISION En0 9 | SAVE fx 10 | DATA fx/0.D0/ 11 | 12 | c ---velocity Verlet algorithm 13 | X = X + Delt*Ux + Delt*Delt*fx/2 14 | Ux = Ux + Delt*fx/2 15 | CALL FORCE(fx, X, en) 16 | Ux = Ux + Delt*fx/2 17 | enk = Ux**2/2 18 | 19 | T = T + Delt 20 | ent = en + enk 21 | WRITE (21, '(2(2x,f7.4),2x,e8.2,2(2x,f7.4))') X, Ux, 22 | & ABS((ent-En0)/En0), ent, enk 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/nosehoover.inc: -------------------------------------------------------------------------------- 1 | c nosehoover.inc 2 | integer fh,mmax,m 3 | parameter (mmax=10) 4 | double precision xi,pxi,qh,sc,psc 5 | common/nosehc/xi(mmax),pxi(mmax),qh(mmax),fh,m 6 | common/nosehs/sc(mmax),psc(mmax) 7 | 8 | c xi(nmax) : friction coefficients 9 | c pxi(nmax): derivative friction coefficients 10 | c qh(mmax) : Nose-Hoover masses for the mmax chains 11 | c fh : number of degrees of freedom (see text) 12 | c m : number of Nose-Hoover chains 13 | 14 | c sc(nmax) : Nose's s variable 15 | c psc(nmax): derivative Nose's s variable 16 | c 17 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/nvt.inc: -------------------------------------------------------------------------------- 1 | c nvt.inc 2 | double precision temp 3 | logical nvt 4 | integer metht 5 | common/nvtc/temp,metht,nvt 6 | c 7 | c temp : impost temperature 8 | c metht : method used in simulation: 9 | c 1 : Andersen 10 | c 2 : Nose-Hoover 11 | c NVT : if .true. simulate NVT ensemble 12 | c 13 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE TOTERG(X, Ux, Ent) 3 | c 4 | c Determin total energy: 5 | c 6 | IMPLICIT NONE 7 | DOUBLE PRECISION X, Ux, Ent, en, enk, fx 8 | CALL FORCE(fx, X, en) 9 | enk = 0.5D0*Ux*Ux 10 | Ent = enk + en 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_13/Source/tridag.f: -------------------------------------------------------------------------------- 1 | **==tridag.spg processed by SPAG 4.52O at 14:19 on 24 Jun 1996 2 | SUBROUTINE TRIDAG(A, B, C, R, U, N) 3 | IMPLICIT NONE 4 | INTEGER N, NMAx 5 | DOUBLE PRECISION A(N), B(N), C(N), R(N), U(N) 6 | PARAMETER (NMAx=500) 7 | INTEGER j 8 | DOUBLE PRECISION bet, gam(NMAx) 9 | IF (B(1).EQ.0.) THEN 10 | STOP 'tridag: rewrite equations' 11 | END IF 12 | bet = B(1) 13 | U(1) = R(1)/bet 14 | DO j = 2, N 15 | gam(j) = C(j-1)/bet 16 | bet = B(j) - A(j)*gam(j) 17 | IF (bet.EQ.0.) THEN 18 | STOP 'tridag failed' 19 | END IF 20 | U(j) = (R(j)-A(j)*U(j-1))/bet 21 | END DO 22 | DO j = N - 1, 1, -1 23 | U(j) = U(j) - gam(j+1)*U(j+1) 24 | END DO 25 | RETURN 26 | END 27 | C (C) Copr. 1986-92 Numerical Recipes Software +3Y. 28 | -------------------------------------------------------------------------------- /CaseStudy_14/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_14/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_14/Block/block -------------------------------------------------------------------------------- /CaseStudy_14/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 5.0 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_14/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 2 3 | 'energy' 4 | 'press' 5 | -------------------------------------------------------------------------------- /CaseStudy_14/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | cp lj.model fort.25 4 | foreach rho (0.4 ) 5 | echo " --- rho ${rho} " >> out 6 | echo " --- rho ${rho} " 7 | cat > fort.15 <>& out 20 | cp fort.21 lj.res 21 | cp fort.66 lj.prt 22 | #perform block analysis 23 | cp lj.prth fort.31 24 | mv lj.prt fort.32 25 | ../Block/block >>& out 26 | rm fort.* 27 | end 28 | exit 29 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/.gitignore: -------------------------------------------------------------------------------- 1 | Mc_nvt 2 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/Mc_nvt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_14/Source/Mc_nvt -------------------------------------------------------------------------------- /CaseStudy_14/Source/adjust.f: -------------------------------------------------------------------------------- 1 | **==adjust.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE ADJUST(Attemp, Nacc, Dr) 3 | c adjusts maximum displacement such that 50% of the 4 | c movels will be accepted 5 | IMPLICIT NONE 6 | INCLUDE 'system.inc' 7 | INTEGER Attemp, Nacc, attempp, naccp 8 | DOUBLE PRECISION dro, frac, Dr 9 | SAVE naccp, attempp 10 | 11 | IF (Attemp.EQ.0.OR.attempp.GE.Attemp) THEN 12 | naccp = Nacc 13 | attempp = Attemp 14 | ELSE 15 | frac = DBLE(Nacc-naccp)/DBLE(Attemp-attempp) 16 | dro = Dr 17 | Dr = Dr*ABS(frac/0.5D0) 18 | c ---limit the change: 19 | IF (Dr/dro.GT.1.5D0) Dr = dro*1.5D0 20 | IF (Dr/dro.LT.0.5D0) Dr = dro*0.5D0 21 | IF (Dr.GT.HBOX/2.D0) Dr = HBOX/2.D0 22 | WRITE (6, 99001) Dr, dro, frac, Attemp - attempp, Nacc - naccp 23 | c ---store nacc and attemp for next use 24 | naccp = Nacc 25 | attempp = Attemp 26 | END IF 27 | RETURN 28 | 99001 FORMAT (' Max. displ. set to : ', f6.3, ' (old : ', f6.3, ')', /, 29 | & ' Frac. acc.: ', f4.2, ' attempts: ', i7, ' succes: ', i7) 30 | END 31 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | 3 | FUNCTION CORP(R, Rho) 4 | IMPLICIT NONE 5 | INCLUDE 'potential.inc' 6 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 7 | 8 | sig3 = SIG2*SQRT(SIG2) 9 | ri3 = sig3/(R*R*R) 10 | CORP = 4*PI*EPS4*(Rho**2)*sig3*(2*ri3*ri3*ri3/9-ri3/3) 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | FUNCTION CORU(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORU = 2*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9-ri3/3) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/data: -------------------------------------------------------------------------------- 1 | ibeg , nequil , lmax nsamp 2 | 1 0000 100 10 3 | dr 4 | 0.0255 5 | ndispl 6 | 100 7 | npart temp rho 8 | 108 5. 0.55 9 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE ENER(En, Vir, R2) 3 | c 4 | c ---calculate energy 5 | c 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INCLUDE 'potential.inc' 9 | 10 | IF (R2.LT.RC2) THEN 11 | r2i = SIG2/R2 12 | r6i = r2i*r2i*r2i 13 | IF (SHIFT) THEN 14 | En = EPS4*(r6i*r6i-r6i) - ECUT 15 | ELSE 16 | En = EPS4*(r6i*r6i-r6i) 17 | END IF 18 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 19 | ELSE 20 | En = 0 21 | Vir = 0 22 | END IF 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/lattice.f: -------------------------------------------------------------------------------- 1 | **==lattice.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE LATTICE 3 | c ---place `npart' particles on a lattice with density 'rho' 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER i, j, k, itel, n 9 | DOUBLE PRECISION dx, dy, dz, del 10 | 11 | n = INT(NPART**(1./3.)) + 1 12 | IF (n.EQ.0) n = 1 13 | del = BOX/DBLE(n) 14 | itel = 0 15 | dx = -del 16 | DO i = 1, n 17 | dx = dx + del 18 | dy = -del 19 | DO j = 1, n 20 | dy = dy + del 21 | dz = -del 22 | DO k = 1, n 23 | dz = dz + del 24 | IF (itel.LT.NPART) THEN 25 | itel = itel + 1 26 | X(itel) = dx 27 | Y(itel) = dy 28 | Z(itel) = dz 29 | END IF 30 | END DO 31 | END DO 32 | END DO 33 | WRITE (6, 99001) itel 34 | RETURN 35 | 99001 FORMAT (' Initialisation on lattice: ', /, i10, 36 | & ' particles placed on a lattice') 37 | END 38 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=10000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc,rc2,ecut 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE RANTEST(Iseed) 3 | c ---test and initialize the random number generator 4 | IMPLICIT NONE 5 | INTEGER Iseed, i 6 | DOUBLE PRECISION RANF 7 | 8 | CALL RANSET(0) 9 | PRINT *, ' ******** test random numbers ***********' 10 | DO i = 1, 5 11 | PRINT *, ' i,ranf() ', i, RANF() 12 | END DO 13 | RETURN 14 | END 15 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | 3 | SUBROUTINE SAMPLE(I, En, Vir) 4 | c ---write quantities to file 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INCLUDE 'potential.inc' 10 | INTEGER I 11 | DOUBLE PRECISION En, enp, Vir, press, CORP, vol, rho 12 | 13 | IF (NPART.NE.0) THEN 14 | enp = En/DBLE(NPART) 15 | vol = BOX**3 16 | press = (NPART/vol)/BETA + Vir/(3*vol) 17 | rho = NPART/vol 18 | IF (TAILCO) press = press + CORP(RC, rho) 19 | ELSE 20 | enp = 0 21 | press = 0 22 | END IF 23 | WRITE (66, *) I, enp, press 24 | RETURN 25 | END 26 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE STORE(Iout, Dr) 3 | c writes configuration to disk 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER Iout, i 9 | DOUBLE PRECISION Dr 10 | 11 | WRITE (Iout, *) BOX, HBOX 12 | WRITE (Iout, *) NPART 13 | WRITE (Iout, *) Dr 14 | DO i = 1, NPART 15 | WRITE (Iout, *) X(i), Y(i), Z(i) 16 | END DO 17 | REWIND (Iout) 18 | RETURN 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box,hbox,temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_14/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE TOTERG(Ener, Vir) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'potential.inc' 8 | INCLUDE 'system.inc' 9 | 10 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 11 | INTEGER i, jb 12 | 13 | Ener = 0 14 | Vir = 0 15 | DO i = 1, NPART - 1 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 21 | Ener = Ener + eni 22 | Vir = Vir + viri 23 | END DO 24 | c ---add tail corrections 25 | IF (TAILCO) THEN 26 | rho = NPART/(BOX**3) 27 | Ener = Ener + NPART*CORU(RC, rho) 28 | END IF 29 | RETURN 30 | END 31 | -------------------------------------------------------------------------------- /CaseStudy_15/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_15/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_15/Block/block -------------------------------------------------------------------------------- /CaseStudy_15/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 5.0 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_15/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 2 3 | 'energy' 4 | 'press' 5 | -------------------------------------------------------------------------------- /CaseStudy_15/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | set npart = 100 4 | cp lj.model fort.25 5 | foreach rho ( 0.80 ) 6 | # to determine the chemical potential two runs are required 7 | foreach npart ( 108 109 ) 8 | echo " --- rho ${rho} " >> out.${rho} 9 | echo " --- Npart ${npart} " >> out.${rho} 10 | echo " --- rho ${rho} " 11 | cat > fort.15 <>& out 24 | cp fort.21 lj.res 25 | cp fort.66 lj.prt 26 | cp fort.77 lj.fh.${npart}.${rho} 27 | cp fort.78 lj.gh.${npart}.${rho} 28 | #perform block analysis 29 | cp lj.prth fort.31 30 | mv lj.prt fort.32 31 | ../Block/block >>& out 32 | rm fort.* 33 | end 34 | end 35 | exit 36 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/.gitignore: -------------------------------------------------------------------------------- 1 | Mc_nvt 2 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/Mc_nvt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_15/Source/Mc_nvt -------------------------------------------------------------------------------- /CaseStudy_15/Source/adjust.f: -------------------------------------------------------------------------------- 1 | **==adjust.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE ADJUST(Attemp, Nacc, Dr) 3 | c adjusts maximum displacement such that 50% of the 4 | c movels will be accepted 5 | IMPLICIT NONE 6 | INCLUDE 'system.inc' 7 | INTEGER Attemp, Nacc, attempp, naccp 8 | DOUBLE PRECISION dro, frac, Dr 9 | SAVE naccp, attempp 10 | 11 | IF (Attemp.EQ.0.OR.attempp.GE.Attemp) THEN 12 | naccp = Nacc 13 | attempp = Attemp 14 | ELSE 15 | frac = DBLE(Nacc-naccp)/DBLE(Attemp-attempp) 16 | dro = Dr 17 | Dr = Dr*ABS(frac/0.5D0) 18 | c ---limit the change: 19 | IF (Dr/dro.GT.1.5D0) Dr = dro*1.5D0 20 | IF (Dr/dro.LT.0.5D0) Dr = dro*0.5D0 21 | IF (Dr.GT.HBOX/2.D0) Dr = HBOX/2.D0 22 | WRITE (6, 99001) Dr, dro, frac, Attemp - attempp, Nacc - naccp 23 | c ---store nacc and attemp for next use 24 | naccp = Nacc 25 | attempp = Attemp 26 | END IF 27 | RETURN 28 | 99001 FORMAT (' Max. displ. set to : ', f6.3, ' (old : ', f6.3, ')', /, 29 | & ' Frac. acc.: ', f4.2, ' attempts: ', i7, ' succes: ', i7) 30 | END 31 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | 3 | FUNCTION CORP(R, Rho) 4 | IMPLICIT NONE 5 | INCLUDE 'potential.inc' 6 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 7 | 8 | sig3 = SIG2*SQRT(SIG2) 9 | ri3 = sig3/(R*R*R) 10 | CORP = 4*PI*EPS4*(Rho**2)*sig3*(2*ri3*ri3*ri3/9-ri3/3) 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | FUNCTION CORU(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORU = 2*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9-ri3/3) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/data: -------------------------------------------------------------------------------- 1 | ibeg , nequil , lmax nsamp 2 | 1 0000 100 10 3 | dr 4 | 0.0255 5 | ndispl 6 | 100 7 | npart temp rho 8 | 108 5. 0.55 9 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE ENER(En, Vir, R2) 3 | c 4 | c ---calculate energy 5 | c 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INCLUDE 'potential.inc' 9 | 10 | IF (R2.LT.RC2) THEN 11 | r2i = SIG2/R2 12 | r6i = r2i*r2i*r2i 13 | IF (SHIFT) THEN 14 | En = EPS4*(r6i*r6i-r6i) - ECUT 15 | ELSE 16 | En = EPS4*(r6i*r6i-r6i) 17 | END IF 18 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 19 | ELSE 20 | En = 0 21 | Vir = 0 22 | END IF 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/lattice.f: -------------------------------------------------------------------------------- 1 | **==lattice.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE LATTICE 3 | c ---place `npart' particles on a lattice with density 'rho' 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER i, j, k, itel, n 9 | DOUBLE PRECISION dx, dy, dz, del 10 | 11 | n = INT(NPART**(1./3.)) + 1 12 | IF (n.EQ.0) n = 1 13 | del = BOX/DBLE(n) 14 | itel = 0 15 | dx = -del 16 | DO i = 1, n 17 | dx = dx + del 18 | dy = -del 19 | DO j = 1, n 20 | dy = dy + del 21 | dz = -del 22 | DO k = 1, n 23 | dz = dz + del 24 | IF (itel.LT.NPART) THEN 25 | itel = itel + 1 26 | X(itel) = dx 27 | Y(itel) = dy 28 | Z(itel) = dz 29 | END IF 30 | END DO 31 | END DO 32 | END DO 33 | WRITE (6, 99001) itel 34 | RETURN 35 | 99001 FORMAT (' Initialisation on lattice: ', /, i10, 36 | & ' particles placed on a lattice') 37 | END 38 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=10000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc,rc2,ecut 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE RANTEST(Iseed) 3 | c ---test and initialize the random number generator 4 | IMPLICIT NONE 5 | INTEGER Iseed, i 6 | DOUBLE PRECISION RANF 7 | 8 | CALL RANSET(0) 9 | PRINT *, ' ******** test random numbers ***********' 10 | DO i = 1, 5 11 | PRINT *, ' i,ranf() ', i, RANF() 12 | END DO 13 | RETURN 14 | END 15 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | 3 | SUBROUTINE SAMPLE(I, En, Vir) 4 | c ---write quantities to file 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INCLUDE 'potential.inc' 10 | INTEGER I 11 | DOUBLE PRECISION En, enp, Vir, press, CORP, vol, rho 12 | 13 | IF (NPART.NE.0) THEN 14 | enp = En/DBLE(NPART) 15 | vol = BOX**3 16 | press = (NPART/vol)/BETA + Vir/(3*vol) 17 | rho = NPART/vol 18 | IF (TAILCO) press = press + CORP(RC, rho) 19 | ELSE 20 | enp = 0 21 | press = 0 22 | END IF 23 | WRITE (66, *) I, enp, press 24 | RETURN 25 | END 26 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE STORE(Iout, Dr) 3 | c writes configuration to disk 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER Iout, i 9 | DOUBLE PRECISION Dr 10 | 11 | WRITE (Iout, *) BOX, HBOX 12 | WRITE (Iout, *) NPART 13 | WRITE (Iout, *) Dr 14 | DO i = 1, NPART 15 | WRITE (Iout, *) X(i), Y(i), Z(i) 16 | END DO 17 | REWIND (Iout) 18 | RETURN 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box,hbox,temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_15/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 10:35 on 12 Jul 1996 2 | SUBROUTINE TOTERG(Ener, Vir) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'potential.inc' 8 | INCLUDE 'system.inc' 9 | 10 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 11 | INTEGER i, jb 12 | 13 | Ener = 0 14 | Vir = 0 15 | DO i = 1, NPART - 1 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 21 | Ener = Ener + eni 22 | Vir = Vir + viri 23 | END DO 24 | c ---add tail corrections 25 | IF (TAILCO) THEN 26 | rho = NPART/(BOX**3) 27 | Ener = Ener + NPART*CORU(RC, rho) 28 | END IF 29 | RETURN 30 | END 31 | -------------------------------------------------------------------------------- /CaseStudy_16/Block/.gitignore: -------------------------------------------------------------------------------- 1 | block 2 | -------------------------------------------------------------------------------- /CaseStudy_16/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_16/Block/block -------------------------------------------------------------------------------- /CaseStudy_16/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 250000 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_16/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 6 3 | 'en(1)' 4 | 'en(2)' 5 | 'pr(1)' 6 | 'pr(2)' 7 | 'de(1)' 8 | 'de(2)' 9 | 10 | -------------------------------------------------------------------------------- /CaseStudy_16/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | foreach temp (0.8 ) 4 | echo " --- temp ${temp} " 5 | echo " --- temp ${temp} " >> out 6 | cat > fort.15 <>& out 21 | cp fort.21 lj.res 22 | mv fort.66 lj.prt 23 | cat fort.44 >> lj.xy 24 | #perform block analysis 25 | cp lj.prth fort.31 26 | mv lj.prt fort.32 27 | ../Block/block >> out 28 | rm fort.* 29 | end 30 | exit 31 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/.gitignore: -------------------------------------------------------------------------------- 1 | Gibbs 2 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/Gibbs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_16/Source/Gibbs -------------------------------------------------------------------------------- /CaseStudy_16/Source/chem.inc: -------------------------------------------------------------------------------- 1 | c=== chem.inc 2 | DOUBLE PRECISION chp 3 | INTEGER ichp 4 | COMMON/chemp1/chp(2),ichp(2) 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart,id,npbox 4 | common/conf1/x(npmax),y(npmax),z(npmax),id(npmax),npart 5 | common/conf2/npbox(2) 6 | c 7 | c x(i),y(i),z(i) : position particle i 8 | c id(i) : box 1 or 2 9 | c npart : actual number of particles 10 | c npbox(i) : number of particles in box i 11 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 18:10 on 19 Jul 1996 2 | 3 | FUNCTION CORP(R, Rho) 4 | IMPLICIT NONE 5 | INCLUDE 'potential.inc' 6 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 7 | 8 | sig3 = SIG2*SQRT(SIG2) 9 | ri3 = sig3/(R*R*R) 10 | CORP = 4.D0*PI*EPS4*(Rho**2)*sig3*(2.D0*ri3*ri3*ri3/9.D0-ri3/3.D0) 11 | RETURN 12 | END 13 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 18:10 on 19 Jul 1996 2 | FUNCTION CORU(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORU = 2.D0*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9.D0-ri3/3.D0) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 18:10 on 19 Jul 1996 2 | SUBROUTINE ENER(En, Vir, R2, Ib) 3 | c ---calculates energy (en) and virial (vir) for given 4 | c distance squared between (r2) two particles 5 | 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INTEGER Ib 9 | INCLUDE 'potential.inc' 10 | 11 | IF (R2.LE.RC2(Ib)) THEN 12 | r2i = SIG2/R2 13 | r6i = r2i*r2i*r2i 14 | IF (SHIFT) THEN 15 | En = EPS4*(r6i*r6i-r6i) - ECUT(Ib) 16 | ELSE 17 | En = EPS4*(r6i*r6i-r6i) 18 | END IF 19 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 20 | ELSE 21 | En = 0.D0 22 | Vir = 0.D0 23 | END IF 24 | RETURN 25 | END 26 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/init_chem.f: -------------------------------------------------------------------------------- 1 | **==init_chem.spg processed by SPAG 4.52O at 18:10 on 19 Jul 1996 2 | SUBROUTINE INIT_CHEM(Switch) 3 | c ---initialize and calculate chemical potentials 4 | c 5 | IMPLICIT NONE 6 | INTEGER Switch, ib 7 | INCLUDE 'chem.inc' 8 | INCLUDE 'system.inc' 9 | IF (Switch.EQ.0) THEN 10 | c ---initialize 11 | DO ib = 1, 2 12 | CHP(ib) = 0 13 | ICHP(ib) = 0 14 | END DO 15 | ELSE IF (Switch.EQ.2) THEN 16 | c ---print final results 17 | DO ib = 1, 2 18 | IF (ICHP(ib).NE.0) THEN 19 | CHP(ib) = -LOG(CHP(ib)/ICHP(ib))/BETA 20 | END IF 21 | END DO 22 | WRITE (6, 99001) (ICHP(1)+ICHP(2))/2, CHP(1), CHP(2) 23 | ELSE 24 | STOP 'error: init_chem' 25 | END IF 26 | 99001 FORMAT (' chemical potentials : ', /, ' number of samples : ', 27 | & i12, /, ' box 1 ', f7.3, /, ' box 2 ', f7.3, /) 28 | END 29 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/npt.inc: -------------------------------------------------------------------------------- 1 | c npt.inc 2 | double precision p 3 | common/pressure/p 4 | c 5 | c p : imposed pressure 6 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=10000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc(2),rc2(2),ecut(2) 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 18:10 on 19 Jul 1996 2 | 3 | SUBROUTINE SAMPLE(I, En, Vir) 4 | c writes quantities to file 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | INCLUDE 'potential.inc' 10 | INTEGER I, ib 11 | DOUBLE PRECISION En(*), enp(2), Vir(*), press(2), CORP, vol, 12 | & rho(2) 13 | 14 | DO ib = 1, 2 15 | vol = BOX(ib)**3 16 | rho(ib) = NPBOX(ib)/vol 17 | press(ib) = rho(ib)/BETA + Vir(ib)/(3.D0*vol) 18 | IF (TAILCO) press(ib) = press(ib) + CORP(RC(ib), rho(ib)) 19 | IF (NPBOX(ib).NE.0) THEN 20 | enp(ib) = En(ib)/DBLE(NPBOX(ib)) 21 | ELSE 22 | enp(ib) = 0.D0 23 | END IF 24 | END DO 25 | WRITE (66, *) I, SNGL(enp(1)), SNGL(enp(2)), SNGL(press(1)), 26 | & SNGL(press(2)), SNGL(rho(1)), SNGL(rho(2)) 27 | WRITE (44, '(2(i6,f10.2))') NPBOX(1), BOX(1)**3, NPBOX(2), BOX(2) 28 | & **3 29 | RETURN 30 | END 31 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 18:10 on 19 Jul 1996 2 | SUBROUTINE STORE(Iout, Dr, Vmax) 3 | c writes configuration to disk 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER Iout, i 9 | DOUBLE PRECISION Dr, Vmax 10 | 11 | WRITE (Iout, *) BOX(1), HBOX(1), BOX(2), HBOX(2) 12 | WRITE (Iout, *) NPART, NPBOX(1), NPBOX(2) 13 | WRITE (Iout, *) Dr, Vmax 14 | DO i = 1, NPART 15 | WRITE (Iout, *) X(i), Y(i), Z(i), ID(i) 16 | END DO 17 | REWIND (Iout) 18 | RETURN 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box(2),hbox(2),temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_16/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 18:10 on 19 Jul 1996 2 | SUBROUTINE TOTERG(Ener, Vir, Ib) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'potential.inc' 8 | INCLUDE 'system.inc' 9 | 10 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 11 | INTEGER i, jb, Ib 12 | 13 | Ener = 0 14 | Vir = 0 15 | DO i = 1, NPART - 1 16 | IF (ID(i).EQ.Ib) THEN 17 | xi = X(i) 18 | yi = Y(i) 19 | zi = Z(i) 20 | jb = i + 1 21 | CALL ENERI(xi, yi, zi, i, jb, eni, viri, Ib) 22 | Ener = Ener + eni 23 | Vir = Vir + viri 24 | END IF 25 | END DO 26 | c ---add tail corrections 27 | IF (TAILCO) THEN 28 | rho = NPBOX(Ib)/(BOX(Ib)**3) 29 | Ener = Ener + NPBOX(Ib)*CORU(RC(Ib), rho) 30 | END IF 31 | RETURN 32 | END 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /CaseStudy_17/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_17/Block/block -------------------------------------------------------------------------------- /CaseStudy_17/Run/hs.prth: -------------------------------------------------------------------------------- 1 | data 2 | 1 3 | 'enla' 4 | -------------------------------------------------------------------------------- /CaseStudy_17/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | foreach lambda ( 10. ) 4 | echo "#### lambda ${lambda} ###" 5 | echo "#### lambda ${lambda} ###" >> out 6 | cat > fort.15 <>& out 22 | mv fort.66 hs.prt 23 | #perform block analysis 24 | cp hs.prth fort.31 25 | mv hs.prt fort.32 26 | ../Block/block >>& out 27 | rm fort.* 28 | end 29 | exit 30 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/dist2.f: -------------------------------------------------------------------------------- 1 | **==dist2.spg processed by SPAG 4.52O at 16:41 on 22 Jul 1996 2 | FUNCTION DIST2(Xi, Yi, Zi, J) 3 | c calculates the distance between xi and particle j 4 | c particles are not put back to box, 5 | IMPLICIT NONE 6 | INCLUDE 'parameter.inc' 7 | INCLUDE 'conf.inc' 8 | INCLUDE 'system.inc' 9 | DOUBLE PRECISION Xi, Yi, Zi, xr, yr, zr, DIST2 10 | INTEGER J 11 | 12 | xr = Xi - X(J) 13 | xr = xr - BOXX*ANINT(xr/BOXX) 14 | yr = Yi - Y(J) 15 | yr = yr - BOXY*ANINT(yr/BOXY) 16 | zr = Zi - Z(J) 17 | zr = zr - BOXZ*ANINT(zr/BOXZ) 18 | DIST2 = xr*xr + yr*yr + zr*zr 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/einst.inc: -------------------------------------------------------------------------------- 1 | double precision dxcm,dycm,dzcm,x0,y0,z0 2 | common/einst/ x0(npmax),y0(npmax),z0(npmax),dxcm,dycm,dzcm 3 | c 4 | c x0b(i) : lattice point assigned to particle i 5 | c dxcm : difference centre of mass solid and reference lattice 6 | c 7 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/mc_nvt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_17/Source/mc_nvt -------------------------------------------------------------------------------- /CaseStudy_17/Source/method.inc: -------------------------------------------------------------------------------- 1 | c method.inc 2 | logical neighlist 3 | common/method/neighlist 4 | c 5 | c neighlist : if .true. use neighbour list to 6 | c determine energy 7 | 8 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/new_nlist.f: -------------------------------------------------------------------------------- 1 | **==new_nlist.spg processed by SPAG 4.52O at 16:41 on 22 Jul 1996 2 | 3 | SUBROUTINE NEW_NLIST 4 | c makes a noew neigh-bour list using the linked-list 5 | c algorithm 6 | IMPLICIT NONE 7 | INTEGER i, ic, CELL 8 | INCLUDE 'parameter.inc' 9 | INCLUDE 'conf.inc' 10 | INCLUDE 'nlist.inc' 11 | 12 | c ---initialize the head-of-chain 13 | DO ic = 0, NCELT - 1 14 | HOC(ic) = 0 15 | END DO 16 | c ---make linked list: 17 | DO i = 1, NPART 18 | c ---determine celnumber 19 | ic = CELL(X(i), Y(i), Z(i)) 20 | c ---update linked-list and head of chain 21 | LL(i) = HOC(ic) 22 | HOC(ic) = i 23 | END DO 24 | RETURN 25 | END 26 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/nlist.inc: -------------------------------------------------------------------------------- 1 | c nlist.inc 2 | double precision factx,facty,factz 3 | integer ncelx,ncely,ncelz,hoc,ll,celmax,ncelt,neigh 4 | parameter (celmax=10000,neigh=27) 5 | common/nlist1/factx,facty,factz,ncelx,ncely,ncelz,ncelt 6 | common/nlist2/ll(npmax),hoc(0:celmax) 7 | c ll(i) : linked list particle i 8 | c hoc(ic) : head of chain cell ic 9 | c factn : used to find celnumber 10 | c ncel : number of cells in x, y or z direction 11 | c ncelt : total number of cells 12 | c celmax : maximum number of cells (change and 13 | c recompile if larger number is needed) 14 | c neigh : number of cells for interactions (in 15 | c 3-dim per definition 27) 16 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | logical hs 4 | parameter (npmax=10000) 5 | c 6 | c npmax : maximum number of particles 7 | 8 | 9 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 18:54 on 27 Mar 1996 2 | 3 | SUBROUTINE RANTEST(Iseed) 4 | c 5 | c test and initialize the random number generator 6 | c 7 | IMPLICIT NONE 8 | INTEGER Iseed, i 9 | DOUBLE PRECISION RANF 10 | 11 | CALL RANSET(Iseed) 12 | PRINT *, ' ******** test random numbers ***********' 13 | DO i = 1, 5 14 | PRINT *, ' i,ranf() ', i, RANF(Iseed) 15 | END DO 16 | RETURN 17 | END 18 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 16:41 on 22 Jul 1996 2 | SUBROUTINE SAMPLE(I, En, Vir, Enla, Lambda) 3 | c ---write quantities to file 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER I 9 | DOUBLE PRECISION En, enp, Vir, press, Enla, Lambda 10 | 11 | IF (NPART.NE.0) THEN 12 | enp = En/DBLE(NPART) 13 | press = (NPART/VOL)/BETA + Vir/(3.D0*VOL) 14 | ELSE 15 | enp = 0.D0 16 | press = 0.D0 17 | END IF 18 | WRITE (66, *) I, (Enla/Lambda)/NPART 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 16:41 on 22 Jul 1996 2 | 3 | 4 | SUBROUTINE STORE(Iout, Dr) 5 | c writes configuration to disk 6 | IMPLICIT NONE 7 | INCLUDE 'parameter.inc' 8 | INCLUDE 'conf.inc' 9 | INCLUDE 'system.inc' 10 | INTEGER Iout, i 11 | DOUBLE PRECISION Dr 12 | 13 | WRITE (Iout, *) BOXX, BOXY, BOXZ 14 | WRITE (Iout, *) NPART 15 | WRITE (Iout, *) Dr 16 | DO i = 1, NPART 17 | WRITE (Iout, *) X(i), Y(i), Z(i) 18 | END DO 19 | REWIND (Iout) 20 | RETURN 21 | END 22 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision temp,beta,hbox 3 | + ,boxx,boxy,boxz,vol 4 | common/sys1/temp,beta,boxx,boxy,boxz,hbox,vol 5 | c 6 | c boxi : simulation box length i-dim. 7 | c hbox : 0.5 * min(boxx,boxy,boxz) 8 | c temp : temperature 9 | c beta : 1/temp 10 | -------------------------------------------------------------------------------- /CaseStudy_17/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 16:41 on 22 Jul 1996 2 | SUBROUTINE TOTERG(Ener, Vir, Enla, Lambda, Cmc) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | 8 | DOUBLE PRECISION xi, yi, zi, Ener, eni, viri, Vir, Enla, Lambda, 9 | & dum 10 | LOGICAL overlap, Cmc 11 | INTEGER i, jb, idum 12 | 13 | Ener = 0 14 | Vir = 0 15 | DO i = 1, NPART - 1 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(overlap, xi, yi, zi, i, jb, eni, viri) 21 | IF (overlap) THEN 22 | WRITE (6, *) ' overlap toterg particle ', i 23 | STOP 24 | END IF 25 | Ener = Ener + eni 26 | Vir = Vir + viri 27 | END DO 28 | c ---calculate energy with Einstein lattice: 29 | idum = 0 30 | dum = 0.D0 31 | IF (Lambda.GT.0) CALL ENLAT(.FALSE., idum, dum, dum, dum, Enla, 32 | & Lambda, Cmc) 33 | RETURN 34 | END 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /CaseStudy_18/Block/block: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_18/Block/block -------------------------------------------------------------------------------- /CaseStudy_18/Run/chain.prth: -------------------------------------------------------------------------------- 1 | data 2 | 4 3 | 'energy' 4 | 'non-bonded en' 5 | 'press' 6 | 'density' 7 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/.gitignore: -------------------------------------------------------------------------------- 1 | Cbmc 2 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/bondl_g.f: -------------------------------------------------------------------------------- 1 | **==bondl_g.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | SUBROUTINE BONDL_G(L) 3 | c 4 | c ---generate a randon number with distribution: 5 | c l*l*exp(-((l-l0)**2)/(2*sigma**2)) 6 | c sigma=sqrt(1./(2*beta*kv)) 7 | c ---method: Allen and tildesley: pg 349--350 8 | 9 | IMPLICIT NONE 10 | c ---model and system parameters 11 | INCLUDE 'par.inc' 12 | DOUBLE PRECISION L, sigma, a, RANF 13 | LOGICAL ready 14 | 15 | c ---exp[-beta*0.5*kv(l-l0)^2]=exp[-(l-l0)^2/(2 sigma^2)] 16 | sigma = SQRT(1/(BETA*KV)) 17 | c ---assume that probability of generating an l more than 18 | c ----3 times the standard deviations is very small 19 | a = (L0+3*sigma)**2 20 | ready = .FALSE. 21 | DO WHILE (.NOT.ready) 22 | CALL GAUSS(sigma, L0, L) 23 | IF (RANF().LE.(L*L/a)) ready = .TRUE. 24 | END DO 25 | RETURN 26 | END 27 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/enerlj.f: -------------------------------------------------------------------------------- 1 | **==enerlj.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | SUBROUTINE ENERLJ(En, Vir, R2) 3 | c ---calculates energy (en) and virial (vir) for given 4 | c distance squared between (r2) two particles 5 | 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INCLUDE 'potential.inc' 9 | 10 | IF (R2.LE.RC2) THEN 11 | r2i = 1/R2 12 | r6i = r2i*r2i*r2i 13 | IF (SHIft) THEN 14 | En = 4*(r6i*r6i-r6i) - ECUT 15 | ELSE 16 | En = 4*(r6i*r6i-r6i) 17 | END IF 18 | Vir = 48*(r6i*r6i-0.5D0*r6i) 19 | ELSE 20 | En = 0.D0 21 | Vir = 0.D0 22 | END IF 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/enint.f: -------------------------------------------------------------------------------- 1 | **==enint.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | SUBROUTINE ENINT(Xn, Yn, Zn, Evib, Virvib) 3 | IMPLICIT NONE 4 | INCLUDE 'particle.inc' 5 | INTEGER j 6 | DOUBLE PRECISION uvib, r, dx, dy, dz, Evib, Virvib, vir 7 | DOUBLE PRECISION Xn(*), Yn(*), Zn(*) 8 | 9 | Evib = 0 10 | Virvib = 0 11 | DO j = 2, ELL 12 | c ---internal interactions: 13 | dx = Xn(j) - Xn(j-1) 14 | dy = Yn(j) - Yn(j-1) 15 | dz = Zn(j) - Zn(j-1) 16 | r = SQRT(dx*dx+dy*dy+dz*dz) 17 | CALL VIB(uvib, vir, r) 18 | Evib = Evib + uvib 19 | Virvib = Virvib + vir 20 | END DO 21 | RETURN 22 | END 23 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/gauss.f: -------------------------------------------------------------------------------- 1 | **==gauss.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | 3 | SUBROUTINE GAUSS(Sigma, L0, L) 4 | c generates l normally distributed with variance sigma 5 | c and mean l0 6 | c Algorithm based on "gasdev" from 'Numerical recipes' 7 | c pg. 203. 8 | 9 | IMPLICIT NONE 10 | INTEGER iset 11 | DOUBLE PRECISION Sigma, L0, L, RANF, gset, fac, v1, v2, r 12 | SAVE gset, iset 13 | DATA iset/0/ 14 | 100 IF (iset.EQ.0) THEN 15 | v1 = 2*RANF() - 1 16 | v2 = 2*RANF() - 1 17 | r = v1**2 + v2**2 18 | IF (r.GE.1) GOTO 100 19 | fac = SQRT(-2*LOG(r)/r) 20 | gset = v1*fac 21 | L = L0 + Sigma*v2*fac 22 | iset = 1 23 | ELSE 24 | L = L0 + Sigma*gset 25 | iset = 0 26 | END IF 27 | RETURN 28 | END 29 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/par.inc: -------------------------------------------------------------------------------- 1 | double precision kv,beta,box,l0,hbox,p,boxi 2 | common/par/beta,kv,l0,box,hbox,boxi,p 3 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/particle.inc: -------------------------------------------------------------------------------- 1 | integer npmax,ellmax,ell,npart,kmax 2 | parameter (npmax=100,ellmax=400,kmax=100) 3 | double precision x,y,z 4 | common/pos1/ell,npart 5 | common/pos/ x(npmax,ellmax),y(npmax,ellmax),z(npmax,ellmax) 6 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/potential.inc: -------------------------------------------------------------------------------- 1 | logical shift 2 | parameter (shift=.true.) 3 | DOUBLE PRECISION rc2,ecut 4 | common/pot1/rc2,ecut 5 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/potentials.f: -------------------------------------------------------------------------------- 1 | **==vib.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | SUBROUTINE VIB(Uvib, Vir, L) 3 | c ---bond vibration potential 4 | IMPLICIT NONE 5 | DOUBLE PRECISION Uvib, L, Vir 6 | INCLUDE 'par.inc' 7 | Uvib = 0.5D0*KV*(L-L0)**2 8 | Vir = -KV*(L-L0)*L 9 | RETURN 10 | END 11 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/ranor.f: -------------------------------------------------------------------------------- 1 | **==ranor.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | SUBROUTINE RANOR(Bx, By, Bz) 3 | c ---generate vector random on unit sphere 4 | IMPLICIT NONE 5 | DOUBLE PRECISION Bx, By, Bz, RANF, ransq, ranh 6 | 7 | ransq = 2 8 | DO WHILE (ransq.GE.1) 9 | Bx = 1 - 2*RANF() 10 | By = 1 - 2*RANF() 11 | ransq = Bx*Bx + By*By 12 | END DO 13 | ranh = 2*SQRT(1-ransq) 14 | Bx = Bx*ranh 15 | By = By*ranh 16 | Bz = (1-2*ransq) 17 | RETURN 18 | c-----------------------------------------------------------c 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | SUBROUTINE RANTEST(Iseed) 3 | c ---test and initialize the random number generator 4 | IMPLICIT NONE 5 | INTEGER Iseed, i 6 | DOUBLE PRECISION RANF 7 | 8 | CALL RANSET(0) 9 | PRINT *, ' ******** test random numbers ***********' 10 | DO i = 1, 5 11 | PRINT *, ' i,ranf() ', i, RANF() 12 | END DO 13 | RETURN 14 | END 15 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/select.f: -------------------------------------------------------------------------------- 1 | **==select.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | 3 | 4 | SUBROUTINE SELECT(W, Sumw, N) 5 | c ---select a trial position n with probability 6 | c ----p(i) = w(i)/sumw 7 | IMPLICIT NONE 8 | INTEGER N 9 | DOUBLE PRECISION Sumw, cumw, ws, RANF 10 | DOUBLE PRECISION W(*) 11 | 12 | ws = RANF()*Sumw 13 | cumw = W(1) 14 | N = 1 15 | DO WHILE (cumw.LT.ws) 16 | N = N + 1 17 | cumw = cumw + W(N) 18 | END DO 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /CaseStudy_18/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 11:03 on 18 Oct 1996 2 | SUBROUTINE STORE(Iout, Dr, Dv) 3 | c writes configuration to disk 4 | IMPLICIT NONE 5 | INCLUDE 'particle.inc' 6 | INCLUDE 'par.inc' 7 | INTEGER Iout, i, j 8 | DOUBLE PRECISION Dr, Dv 9 | 10 | WRITE (Iout, *) BOX, HBOX 11 | WRITE (Iout, *) NPART, ELL 12 | WRITE (Iout, *) Dr, Dv 13 | DO i = 1, NPART 14 | DO j = 1, ELL 15 | WRITE (Iout, *) X(i, j), Y(i, j), Z(i, j) 16 | END DO 17 | END DO 18 | REWIND (Iout) 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /CaseStudy_19/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | cat > input < outt 11 | 12 | rm input 13 | 14 | exit 15 | -------------------------------------------------------------------------------- /CaseStudy_19/Source/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | CCOMPFLAGS = -O 3 | 4 | FFLAGS = $(FCOMPFLAGS) 5 | CFLAGS = $(CCOMPFLAGS) 6 | LDFLAGS = $(FCOMPFLAGS) 7 | 8 | LD = gfortran 9 | FC = gfortran 10 | CC = cc 11 | 12 | MAKEFILE = Makefile 13 | PROGRAM = cbmc 14 | 15 | INCS = system.inc 16 | 17 | OBJS = cbmc.o \ 18 | grow.o \ 19 | initlat.o \ 20 | mccbmc.o \ 21 | ran_uniform.o \ 22 | sample_bond.o \ 23 | sample_gyra.o \ 24 | select.o \ 25 | sphere.o \ 26 | sstmm.o 27 | 28 | all: $(PROGRAM) 29 | 30 | $(PROGRAM):: $(INCS) 31 | @/bin/rm -f $(OBJS) core 32 | 33 | $(PROGRAM):: $(OBJS) $(MAKEFILE) 34 | @$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) 35 | 36 | clean:; @rm -f $(OBJS) core 37 | -------------------------------------------------------------------------------- /CaseStudy_19/Source/initlat.f: -------------------------------------------------------------------------------- 1 | Subroutine Initlat 2 | Implicit None 3 | 4 | Cccccccccccccccccccccccccccccccccccccccc 5 | C Generate Initial Configuration C 6 | Cccccccccccccccccccccccccccccccccccccccc 7 | 8 | Include 'system.inc' 9 | 10 | Double Precision Bx,By,Bz 11 | Integer I 12 | 13 | X(1) = 0.0d0 14 | Y(1) = 0.0d0 15 | Z(1) = 0.0d0 16 | Utot = 0.0d0 17 | 18 | Do I=2,Ell 19 | Call Sphere(Bx,By,Bz) 20 | 21 | X(I) = X(I-1) + Bx 22 | Y(I) = Y(I-1) + By 23 | Z(I) = Z(I-1) + Bz 24 | 25 | Utot = Utot + 0.5d0*Kv* 26 | & ((Dsqrt((X(I) - X(I-1))**2 + 27 | & (Y(I) - Y(I-1))**2 + 28 | & (Z(I) - Z(I-1))**2) - 1.0d0)**2) 29 | Enddo 30 | 31 | Return 32 | End 33 | -------------------------------------------------------------------------------- /CaseStudy_19/Source/sstmm.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int 4 | sstmm_() 5 | 6 | {time_t ourtime; 7 | time(&ourtime); 8 | return (int)(ourtime&0x00000fff); 9 | } 10 | -------------------------------------------------------------------------------- /CaseStudy_19/Source/system.inc: -------------------------------------------------------------------------------- 1 | Integer Ellmax,Kmax 2 | 3 | Parameter (Ellmax = 1000) 4 | Parameter (Kmax = 1000) 5 | 6 | Integer Ell,Nchoi 7 | Logical Ladvanced 8 | 9 | Double Precision X(Ellmax),Y(Ellmax),Z(Ellmax), 10 | & Beta,Utot,Kv 11 | 12 | Common /Ppar/ Kv,Utot,X,Y,Z,Beta,Ell,Nchoi, 13 | & Ladvanced 14 | -------------------------------------------------------------------------------- /CaseStudy_20/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | # 3 | # Lrecoil = Use Rg Or Cbmc 4 | # Lattice = Generate Fromlattice Or Read From Chain.Res 5 | # Ncycle = Numberof Cycles 6 | # Nrota = Number Of Chain Rotations 7 | # Ndosp = Numberof Displacements 8 | # Ncbmc = Number Of Cbmc Moves 9 | # Ell = Chainlength 10 | # Nchain = Numberof Chains 11 | # Box = Boxsize 12 | # Temp = Temperature 13 | # Nchoi = Number Of Trial Directions 14 | # Ncoil = Recoil Length 15 | # Rc = Cut-Off Radius 16 | # Dx = Maximum Displacement 17 | # Drot = Maximum Rotation Angle 18 | # Bondl = Bondlength 19 | # Thetat = Angle I-J-K 20 | 21 | cat > input < out 37 | 38 | rm input 39 | 40 | exit 41 | -------------------------------------------------------------------------------- /CaseStudy_20/Source/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | CCOMPFLAGS = -O 3 | 4 | FFLAGS = $(FCOMPFLAGS) 5 | CFLAGS = $(CCOMPFLAGS) 6 | LDFLAGS = $(FCOMPFLAGS) 7 | 8 | LD = gfortran 9 | FC = gfortran 10 | CC = cc 11 | 12 | MAKEFILE = Makefile 13 | PROGRAM = recoil 14 | 15 | INCS = system.inc 16 | 17 | OBJS = backbox.o \ 18 | echain.o \ 19 | echoice.o \ 20 | grow_cbmc.o \ 21 | grow_recoil.o \ 22 | init.o \ 23 | initlat.o \ 24 | mccbmc.o \ 25 | mcmove.o \ 26 | mcrota.o \ 27 | open_dir.o \ 28 | ran_cone.o \ 29 | ran_sphere.o \ 30 | ran_uniform.o \ 31 | recoil.o \ 32 | sample_gyra.o \ 33 | sample_rad.o \ 34 | select.o \ 35 | store.o \ 36 | sstmm.o \ 37 | toterg.o \ 38 | ttime.o 39 | 40 | all: $(PROGRAM) 41 | 42 | $(PROGRAM):: $(INCS) 43 | @/bin/rm -f $(OBJS) core 44 | 45 | $(PROGRAM):: $(OBJS) $(MAKEFILE) 46 | @$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) 47 | 48 | clean:; @rm -f $(OBJS) core 49 | -------------------------------------------------------------------------------- /CaseStudy_20/Source/backbox.f: -------------------------------------------------------------------------------- 1 | Subroutine Backbox(Xn,Yn,Zn) 2 | Implicit None 3 | 4 | Cccccccccccccccccccccccccccccccccc 5 | C Put Particle Back In Box C 6 | Cccccccccccccccccccccccccccccccccc 7 | 8 | Include 'system.inc' 9 | 10 | Integer J 11 | Double Precision Bx,By,Bz,Xn(Ellmax),Yn(Ellmax),Zn(Ellmax) 12 | 13 | Bx = Xn(1) 14 | By = Yn(1) 15 | Bz = Zn(1) 16 | 17 | Bx = -Box*(Dble(Idint(Bx*Boxi + 9999.0d0) - 9999)) 18 | By = -Box*(Dble(Idint(By*Boxi + 9999.0d0) - 9999)) 19 | Bz = -Box*(Dble(Idint(Bz*Boxi + 9999.0d0) - 9999)) 20 | 21 | Do J = 1,Ell 22 | Xn(J) = Xn(J) + Bx 23 | Yn(J) = Yn(J) + By 24 | Zn(J) = Zn(J) + Bz 25 | Enddo 26 | 27 | Return 28 | End 29 | -------------------------------------------------------------------------------- /CaseStudy_20/Source/open_dir.f: -------------------------------------------------------------------------------- 1 | Subroutine Open_Dir(Etot,Lopen,P_Open) 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Cccccccccccccccccccccccccccccccccccccccccccccccccc 7 | C Decide If A Bead Is Either Open Or Closed C 8 | C This Is Quite General; In Principle You C 9 | C Are Allowed To Design Your Own Criteria ! C 10 | Cccccccccccccccccccccccccccccccccccccccccccccccccc 11 | 12 | Logical Lopen 13 | Double Precision Etot,P_Open,Ran_Uniform 14 | 15 | P_Open = Min(1.0d0,Dexp(-Beta*Etot)) 16 | Lopen = .False. 17 | 18 | If(RAND().Lt.P_Open) Lopen = .True. 19 | 20 | Return 21 | End 22 | -------------------------------------------------------------------------------- /CaseStudy_20/Source/ran_sphere.f: -------------------------------------------------------------------------------- 1 | Subroutine Ran_Sphere(Bx,By,Bz) 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Ccccccccccccccccccccccccccccccccccccccccccccccccc 7 | C Generate A Random Vector Of Length Bondl C 8 | Ccccccccccccccccccccccccccccccccccccccccccccccccc 9 | 10 | Double Precision Bx,By,Bz,Ran_Uniform,Ransq,Ranh,Def 11 | 12 | 1 Bx = 1.0d0 - 2.0d0*RAND() 13 | By = 1.0d0 - 2.0d0*RAND() 14 | Ransq = Bx*Bx + By*By 15 | 16 | If(Ransq.Ge.1.0d0) Goto 1 17 | 18 | Ranh = 2.0d0*Dsqrt(1.0d0-Ransq) 19 | Bx = Bx*Ranh 20 | By = By*Ranh 21 | Bz = 1.0d0-2.0d0*Ransq 22 | 23 | Def = Bondl/Dsqrt(Bx*Bx + By*By + Bz*Bz) 24 | Bx = Bx*Def 25 | By = By*Def 26 | Bz = Bz*Def 27 | 28 | Return 29 | End 30 | -------------------------------------------------------------------------------- /CaseStudy_20/Source/sstmm.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int 4 | sstmm_() 5 | 6 | {time_t ourtime; 7 | time(&ourtime); 8 | return (int)(ourtime&0x00000fff); 9 | } 10 | -------------------------------------------------------------------------------- /CaseStudy_20/Source/toterg.f: -------------------------------------------------------------------------------- 1 | Subroutine Toterg(Etot) 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Ccccccccccccccccccccccccccccccccccccccccccccccccc 7 | C Calculate The Total Energy Of The System C 8 | Ccccccccccccccccccccccccccccccccccccccccccccccccc 9 | 10 | Integer J,Ichain 11 | 12 | Double Precision Enij,Etot,Xn(Ellmax),Yn(Ellmax),Zn(Ellmax) 13 | 14 | Etot = 0.0d0 15 | 16 | Do Ichain = 1, Nchain 17 | 18 | Do J=1,Ell 19 | Xn(J) = X(J,Ichain) 20 | Yn(J) = Y(J,Ichain) 21 | Zn(J) = Z(J,Ichain) 22 | Enddo 23 | 24 | Call Echain(Xn,Yn,Zn,Ichain,Ichain,Enij) 25 | Etot = Etot + Enij 26 | Enddo 27 | 28 | Return 29 | End 30 | -------------------------------------------------------------------------------- /CaseStudy_20/Source/ttime.c: -------------------------------------------------------------------------------- 1 | /* Return The Number Of Seconds */ 2 | /* This Is Equivalent To Mpi_Wtime Of Lam 6.1 */ 3 | /* Modified By Thijs J.H. Vlugt 22-4-1999 */ 4 | 5 | #include 6 | 7 | double 8 | ttime_() 9 | 10 | { 11 | struct timeval now; 12 | double sec; 13 | 14 | if (gettimeofday(&now, (struct timezone *) 0)) 15 | { 16 | return(0); 17 | } 18 | 19 | sec = (double) now.tv_sec + (double) now.tv_usec / 1000000; 20 | return(sec); 21 | } 22 | -------------------------------------------------------------------------------- /CaseStudy_21/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | # 3 | # Nstep = Number Of Cycles 4 | # Ptemp = Prob. Swap Moves 5 | # Ntemp = Numberof Systems 6 | 7 | cat > fort.21 < out 15 | 16 | rm fort.* 17 | 18 | exit 19 | -------------------------------------------------------------------------------- /CaseStudy_21/Source/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | CCOMPFLAGS = -O 3 | 4 | FFLAGS = $(FCOMPFLAGS) 5 | CFLAGS = $(CCOMPFLAGS) 6 | LDFLAGS = $(FCOMPFLAGS) 7 | 8 | LD = gfortran 9 | FC = gfortran 10 | CC = cc 11 | 12 | MAKEFILE = Makefile 13 | PROGRAM = tempering 14 | 15 | INCS = system.inc 16 | 17 | OBJS = force.o \ 18 | mcloop.o \ 19 | ran_uniform.o \ 20 | readdat.o \ 21 | sstmm.o \ 22 | tempering.o 23 | 24 | all: $(PROGRAM) 25 | 26 | $(PROGRAM):: $(INCS) 27 | @/bin/rm -f $(OBJS) core 28 | 29 | $(PROGRAM):: $(OBJS) $(MAKEFILE) 30 | @$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) 31 | 32 | clean:; @rm -f $(OBJS) core 33 | -------------------------------------------------------------------------------- /CaseStudy_21/Source/force.f: -------------------------------------------------------------------------------- 1 | Subroutine Force(X,U,Lsystem) 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Cccccccccccccccccccccccccccccccccccccccccccccccccccccc 7 | C Calculate The Forces And Potential Energy C 8 | Cccccccccccccccccccccccccccccccccccccccccccccccccccccc 9 | 10 | Double Precision X,U,Amp 11 | Logical Lsystem 12 | 13 | Lsystem = .True. 14 | 15 | If(X.Lt.-2.0d0) Then 16 | Lsystem = .False. 17 | Amp = 0.0d0 18 | Elseif(X.Lt.-1.25d0) Then 19 | Amp = 1.0d0 20 | Elseif(X.Lt.-0.25d0) Then 21 | Amp = 2.0d0 22 | Elseif(X.Lt.0.75d0) Then 23 | Amp = 3.0d0 24 | Elseif(X.Lt.1.75d0) Then 25 | Amp = 4.0d0 26 | Elseif(X.Lt.2.0d0) Then 27 | Amp = 5.0d0 28 | Else 29 | Lsystem = .False. 30 | Amp = 0.0d0 31 | Endif 32 | 33 | U = Amp*(1.0d0 + Dsin(Twopi*X)) 34 | 35 | Return 36 | End 37 | -------------------------------------------------------------------------------- /CaseStudy_21/Source/readdat.f: -------------------------------------------------------------------------------- 1 | Subroutine Readdat 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Cccccccccccccccccccccccccccccccccccccccc 7 | C Read In System Information C 8 | C C 9 | C Nstep = Number Of Cycles C 10 | C Ptemp = Prob. For Swapping C 11 | C Ntemp = Numberof Temperatures C 12 | Cccccccccccccccccccccccccccccccccccccccc 13 | 14 | Double Precision Temp(9),U,Ran_Uniform 15 | Integer I 16 | Logical L 17 | 18 | Read(21,*) 19 | Read(21,*) Nstep,Ptemp,Ntemp 20 | 21 | If(Ntemp.Lt.1.Or.Ntemp.Gt.9) Stop 22 | 23 | Read(21,*) 24 | Read(21,*) (Temp(I),I=1,Ntemp) 25 | 26 | Do I=1,Ntemp 27 | Beta(I) = 1.0d0/Temp(I) 28 | Xold(I) = -1.25d0 + 0.01d0*(RAND()-0.5d0) 29 | 30 | Call Force(Xold(I),U,L) 31 | 32 | Uold(I) = U 33 | Enddo 34 | 35 | Return 36 | End 37 | -------------------------------------------------------------------------------- /CaseStudy_21/Source/sstmm.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int 4 | sstmm_() 5 | 6 | {time_t ourtime; 7 | time(&ourtime); 8 | return (int)(ourtime&0x00000fff); 9 | } 10 | -------------------------------------------------------------------------------- /CaseStudy_21/Source/system.inc: -------------------------------------------------------------------------------- 1 | ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 2 | C System.Inc c 3 | C c 4 | C Information About The System; Various Constants c 5 | ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 6 | 7 | Integer Ntemp,Nstep 8 | 9 | Double Precision Twopi,Xold(9),Uold(9),Ptemp,Beta(9) 10 | 11 | Common /sstmmw/ Twopi,Xold,Uold,Ptemp,Beta,Ntemp,Nstep 12 | -------------------------------------------------------------------------------- /CaseStudy_21/Source/tempering.f: -------------------------------------------------------------------------------- 1 | Program Tempering 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Integer Sstmm 7 | Double Precision M1 8 | 9 | Cccccccccccccccccccccccccccccccccccccccccccccccccc 10 | C Parallel Tempering Of A Single Particle C 11 | C Written By Thijs Vlugt On 6-10-1998 C 12 | Cccccccccccccccccccccccccccccccccccccccccccccccccc 13 | 14 | Twopi = 8.0d0*Datan(1.0d0) 15 | M1 = 0.001d0*Dble(Mod((10+10*Sstmm()),1000)) 16 | 17 | If(M1.Lt.0.001d0) M1 = 0.001d0 18 | If(M1.Gt.0.999d0) M1 = 0.999d0 19 | 20 | Call Genrand(M1) 21 | 22 | Cccccccccccccccccccccccccccccccccccccccccccccccc 23 | C Read Data From Disk C 24 | Cccccccccccccccccccccccccccccccccccccccccccccccc 25 | 26 | Call Readdat 27 | 28 | Cccccccccccccccccccccccccccccccccccccccccccccccc 29 | C Finally, Perform An Md Simulation C 30 | Cccccccccccccccccccccccccccccccccccccccccccccccc 31 | 32 | Call Mcloop 33 | 34 | Cccccccccccccccccccccccccccccccccccccccccccccccc 35 | C End Of The Program C 36 | Cccccccccccccccccccccccccccccccccccccccccccccccc 37 | 38 | Stop 39 | End 40 | -------------------------------------------------------------------------------- /CaseStudy_22/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | # 3 | # Box = Boxlength 4 | # Npart = Number Of Particles 5 | # Nstep = Number Of Timesteps 6 | # Ninit = Number Of Initialization Steps 7 | # Temp = Temperature 8 | # Tstep = Timestep For Integration 9 | # Bondl = Bondlength 10 | # Bondkb = Force Constant 11 | # Nrespa = Number Of Respa Steps 12 | # Lrespa = Do We Use Respa ? 13 | # Lcons = Do We Use Constraints ? 14 | # Linit = Do We Start From Scratch ? 15 | 16 | set BOX = 7.0 17 | set RCUT = 3.0 18 | set RCUT2 = 1.7 19 | set RVER = 0.5 20 | set LAMBDA = 0.3 21 | set NPART = 250 22 | set NSTEP = 50000 23 | set NINIT = 10000 24 | set TEMP = 3.0 25 | set TSTEP = 0.0001 26 | set BONDL = 1.0 27 | set BONDKB = 50000.0 28 | set NRESPA = 5 29 | set LRESPA = .true. 30 | set LCONS = .false. 31 | set LINIT = .false. 32 | 33 | cat > fort.21 < outt 42 | 43 | cp fort.23 equil.res 44 | 45 | exit 46 | -------------------------------------------------------------------------------- /CaseStudy_22/Source/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | 3 | FFLAGS = $(FCOMPFLAGS) 4 | LDFLAGS = $(FCOMPFLAGS) 5 | 6 | LD = gfortran 7 | FC = gfortran 8 | CC = cc 9 | 10 | MAKEFILE = Makefile 11 | PROGRAM = md 12 | 13 | INCS = system.inc 14 | 15 | OBJS = checkdis.o \ 16 | force.o \ 17 | init.o \ 18 | integrate.o \ 19 | md.o \ 20 | mdloop.o \ 21 | ranf.o \ 22 | rangauss.o \ 23 | ransphere.o \ 24 | readdat.o \ 25 | shake.o \ 26 | ttime.o 27 | 28 | all: $(PROGRAM) 29 | 30 | $(PROGRAM):: $(INCS) 31 | @/bin/rm -f $(OBJS) core 32 | 33 | $(PROGRAM):: $(OBJS) $(MAKEFILE) 34 | @$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) 35 | 36 | clean:; @rm -f $(OBJS) core 37 | -------------------------------------------------------------------------------- /CaseStudy_22/Source/md.f: -------------------------------------------------------------------------------- 1 | Program Md 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Cccccccccccccccccccccccccccccccccccccccccccccccc 7 | C Molecular Dynamics Program Of Argon, C 8 | C Written By Thijs Vlugt On 6-10-1998 C 9 | Cccccccccccccccccccccccccccccccccccccccccccccccc 10 | 11 | Cccccccccccccccccccccccccccccccccccccccccccccccc 12 | C Read Data From Disk C 13 | Cccccccccccccccccccccccccccccccccccccccccccccccc 14 | 15 | Call Readdat 16 | 17 | Cccccccccccccccccccccccccccccccccccccccccccccccc 18 | C Generate Initial Coordinates/Velocities C 19 | Cccccccccccccccccccccccccccccccccccccccccccccccc 20 | 21 | Call Init 22 | 23 | Cccccccccccccccccccccccccccccccccccccccccccccccc 24 | C Finally, Perform An Md Simulation C 25 | Cccccccccccccccccccccccccccccccccccccccccccccccc 26 | 27 | Call Mdloop 28 | 29 | Cccccccccccccccccccccccccccccccccccccccccccccccc 30 | C End Of The Program C 31 | Cccccccccccccccccccccccccccccccccccccccccccccccc 32 | 33 | Stop 34 | End 35 | -------------------------------------------------------------------------------- /CaseStudy_22/Source/ranf.f: -------------------------------------------------------------------------------- 1 | Function Ranf() 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Integer Ia,Im,Iq,Ir,Mask,K 7 | Double Precision Ranf,Am 8 | 9 | Parameter (Ia=16807,Im=2147483647, 10 | & Am=1.0d0/2147483647.0d0,Iq=127773,Ir=2836,Mask=123459876) 11 | 12 | 100 Idum = Ieor(Idum,Mask) 13 | K = Idum/Iq 14 | Idum = Ia*(Idum - K*Iq) - Ir*K 15 | If (Idum.Lt.0.0d0) Idum = Idum + Im 16 | Ranf = Am*Idum 17 | Idum = Ieor(Idum,Mask) 18 | 19 | If (Ranf.Lt.0.00000001d0 .Or. Ranf.Gt.0.99999999d0) 20 | & Goto 100 21 | 22 | Return 23 | End 24 | -------------------------------------------------------------------------------- /CaseStudy_22/Source/rangauss.f: -------------------------------------------------------------------------------- 1 | Function Rangauss() 2 | Implicit None 3 | 4 | C Generates Random Numbers From A Gaussian Distribution 5 | 6 | Double Precision Ranf,Rangauss,V1,V2,Rsq 7 | 8 | 100 V1 = 2.0d0*Ranf() - 1.0d0 9 | V2 = 2.0d0*Ranf() - 1.0d0 10 | Rsq = V1*V1 + V2*V2 11 | 12 | If (Rsq.Ge.1.0d0 .Or. Rsq.Le.0.0d0) Goto 100 13 | 14 | Rangauss = V1*Dsqrt( - 2.0d0*Dlog(Rsq)/Rsq) 15 | 16 | Return 17 | End 18 | -------------------------------------------------------------------------------- /CaseStudy_22/Source/ransphere.f: -------------------------------------------------------------------------------- 1 | Subroutine Ransphere(X,Y,Z) 2 | Implicit None 3 | 4 | Double Precision Ran1,Ran2,Ranh,Ransq,X,Y,Z,Ranf 5 | 6 | 100 Ran1 = 2.0d0*Ranf() - 1.0d0 7 | Ran2 = 2.0d0*Ranf() - 1.0d0 8 | Ransq = Ran1*Ran1 + Ran2*Ran2 9 | 10 | If (Ransq.Ge.1.0d0) Goto 100 11 | 12 | Ranh = 2.0d0*Dsqrt(1.0d0 - Ransq) 13 | X = Ran1*Ranh 14 | Y = Ran2*Ranh 15 | Z = 1.0d0 - 2.0d0*Ransq 16 | 17 | Return 18 | End 19 | -------------------------------------------------------------------------------- /CaseStudy_22/Source/ttime.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | double 4 | ttime_() 5 | 6 | { 7 | struct timeval now; 8 | double sec; 9 | 10 | if (gettimeofday(&now, (struct timezone *) 0)) 11 | { 12 | return(0); 13 | } 14 | 15 | sec = (double) now.tv_sec + (double) now.tv_usec / 1000000; 16 | return(sec); 17 | } 18 | -------------------------------------------------------------------------------- /CaseStudy_23/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | 3 | set NCYCLE = 10 4 | set NSTEP = 5000 5 | set TEMP = 0.2d0 6 | set TSTEP = 0.003d0 7 | set QSTAR = 0.5d0 8 | 9 | cat > fort.21 < out 14 | 15 | mv fort.27 kt.t 16 | rm fort.* 17 | 18 | exit 19 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | CCOMPFLAGS = -O 3 | 4 | FFLAGS = $(FCOMPFLAGS) 5 | CFLAGS = $(CCOMPFLAGS) 6 | LDFLAGS = $(FCOMPFLAGS) 7 | 8 | LD = gfortran 9 | FC = gfortran 10 | CC = cc 11 | 12 | MAKEFILE = Makefile 13 | PROGRAM = barrier 14 | 15 | INCS = system.inc 16 | 17 | OBJS = barrier.o \ 18 | force.o \ 19 | integrate.o \ 20 | mdloop.o \ 21 | ran_uniform.o \ 22 | ran_vel.o \ 23 | ran_gauss.o \ 24 | readdat.o \ 25 | sample.o \ 26 | sstmm.o 27 | 28 | all: $(PROGRAM) 29 | 30 | $(PROGRAM):: $(INCS) 31 | @/bin/rm -f $(OBJS) core 32 | 33 | $(PROGRAM):: $(OBJS) $(MAKEFILE) 34 | @$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) 35 | 36 | clean:; @rm -f $(OBJS) core 37 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/barrier.f: -------------------------------------------------------------------------------- 1 | Program Barrier 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Integer Sstmm 7 | Double Precision M1 8 | 9 | Cccccccccccccccccccccccccccccccccccccccccccccccc 10 | C Written By Thijs Vlugt On 6-10-1998 C 11 | Cccccccccccccccccccccccccccccccccccccccccccccccc 12 | 13 | M1 = 0.001d0*Dble(Mod((10+10*Sstmm()),1000)) 14 | 15 | If(M1.Lt.0.001d0) M1 = 0.001d0 16 | If(M1.Gt.0.999d0) M1 = 0.999d0 17 | 18 | Call Genrand(M1) 19 | 20 | Cccccccccccccccccccccccccccccccccccccccccccccccc 21 | C Read Data From Disk C 22 | Cccccccccccccccccccccccccccccccccccccccccccccccc 23 | 24 | Call Readdat 25 | 26 | Cccccccccccccccccccccccccccccccccccccccccccccccc 27 | C Finally, Perform An Md Simulation C 28 | Cccccccccccccccccccccccccccccccccccccccccccccccc 29 | 30 | Call Mdloop 31 | 32 | Cccccccccccccccccccccccccccccccccccccccccccccccc 33 | C End Of The Program C 34 | Cccccccccccccccccccccccccccccccccccccccccccccccc 35 | 36 | Stop 37 | End 38 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/force.f: -------------------------------------------------------------------------------- 1 | Subroutine Force(X,U,F) 2 | Implicit None 3 | 4 | C Calculate The Forces And Potential Energy 5 | 6 | Include 'system.inc' 7 | 8 | Double Precision X,U,F 9 | 10 | U = 0.0d0 11 | F = 0.0d0 12 | 13 | If(X.Ge.0.0d0.And.X.Le.1.0d0) Then 14 | U = 1.0d0 - Dcos(2.0d0*Onepi*X) 15 | F = -2.0d0*Onepi*Dsin(2.0d0*Onepi*X) 16 | Endif 17 | 18 | Return 19 | End 20 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/mdloop.f: -------------------------------------------------------------------------------- 1 | Subroutine Mdloop 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Integer I,J 7 | Double Precision Ran_Vel,A,C1,C2 8 | 9 | Call Sample(1,0) 10 | 11 | C1 = 0.0d0 12 | C2 = 0.0d0 13 | 14 | Do I=1,Ncycle 15 | Do J=1,1000 16 | 17 | Ccccccccccccccccccccccccccccccccccccc 18 | C Generate Initial Coordinates C 19 | C C 20 | C Xpos = Starting Position C 21 | C Vpos = Starting Velocity C 22 | Ccccccccccccccccccccccccccccccccccccc 23 | 24 | Xpos = Qstar 25 | Vpos = Ran_Vel() 26 | Thetan = Vpos 27 | 28 | Call Integrate(A) 29 | 30 | C1 = C1 + A 31 | C2 = C2 + 1.0d0 32 | Enddo 33 | Enddo 34 | 35 | Call Sample(3,0) 36 | 37 | Write(6,*) 'Av. Energy Drift :',C1/C2 38 | 39 | Return 40 | End 41 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/ran_gauss.f: -------------------------------------------------------------------------------- 1 | Function Ran_Gauss() 2 | Implicit None 3 | 4 | Double Precision Ran1,Ran2,Ran_Gauss,Ran_Uniform,Ransq 5 | 6 | 100 Ran1 = 2.0d0*RAND() - 1.0d0 7 | Ran2 = 2.0d0*RAND() - 1.0d0 8 | Ransq = Ran1*Ran1 + Ran2*Ran2 9 | 10 | If (Ransq.Ge.1.0d0 .Or. Ransq.Le.0.0d0) Goto 100 11 | 12 | Ran_Gauss = Ran1*Dsqrt(-2.0d0*Dlog(Ransq)/Ransq) 13 | 14 | Return 15 | End 16 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/ran_vel.f: -------------------------------------------------------------------------------- 1 | Function Ran_Vel() 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Double Precision Ran_Vel,Ran_Gauss 7 | 8 | Ran_Vel = Dsqrt(Temp)*Ran_Gauss() 9 | 10 | Return 11 | End 12 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/sample.f: -------------------------------------------------------------------------------- 1 | Subroutine Sample(Switch,Ttt) 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Integer Maxx,I,Ttt,Switch 7 | Parameter(Maxx=50000) 8 | 9 | Double Precision Kt(Maxx),Ks(Maxx) 10 | Save Kt,Ks 11 | 12 | If (Switch.Eq.1) Then 13 | 14 | C Initialize Everything 15 | 16 | Do I=1,Maxx 17 | Kt(I) = 0.0d0 18 | Ks(I) = 0.0d0 19 | Enddo 20 | 21 | Elseif(Switch.Eq.2) Then 22 | 23 | C Sample Results 24 | 25 | If(Ttt.Le.Maxx) Then 26 | 27 | If(Xpos.Gt.Qstar) Then 28 | Kt(Ttt) = Kt(Ttt) + Thetan 29 | Endif 30 | 31 | Ks(Ttt) = Ks(Ttt) + 1.0d0 32 | Endif 33 | 34 | Else 35 | 36 | C Write Results 37 | 38 | Do I=1,Maxx 39 | If(I.Le.Nstep) Then 40 | 41 | If(Ks(I).Gt.0.5d0) Write(27,*) Dble(I-1),Kt(I)/Ks(I) 42 | 43 | Endif 44 | Enddo 45 | 46 | Endif 47 | 48 | Return 49 | End 50 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/sstmm.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int 4 | sstmm_() 5 | 6 | {time_t ourtime; 7 | time(&ourtime); 8 | return (int)(ourtime&0x00000fff); 9 | } 10 | -------------------------------------------------------------------------------- /CaseStudy_23/Source/system.inc: -------------------------------------------------------------------------------- 1 | C System.Inc 2 | C 3 | C Information About The System; 4 | C 5 | 6 | Integer Ncycle,Nstep 7 | 8 | Double Precision Onepi,Tstep,Temp,Xpos,Vpos,Thetan,Qstar 9 | 10 | Common /Syss/ Onepi,Tstep,Temp,Xpos,Vpos,Thetan,Qstar, 11 | & Ncycle,Nstep 12 | -------------------------------------------------------------------------------- /CaseStudy_24/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | # 3 | # Ncycle = Number Of Cycles 4 | # Ninit = Number Of Initialization Cycles 5 | # Nslice = Pathlength 6 | # Ldisk = Read Configuration From Disk 7 | # Pshift = Probability To Select Of Shifting Move 8 | # Lumbrella = Do We Use Umbrella Sampling 9 | # Lmin = Minimum Order Parameter 10 | # Lmax = Maximum Order Parameter 11 | # Radius = Size Of Regions A And B 12 | # Temp = Temperatue 13 | # Deltap = Momentum Change 14 | # Tstep = Timestep In Md Integration 15 | 16 | set ncycle = 20000 17 | set ninit = 10000 18 | set nslice = 1500 19 | 20 | cat > input < outt 32 | 33 | exit 34 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | CCOMPFLAGS = -O 3 | 4 | FFLAGS = $(FCOMPFLAGS) 5 | CFLAGS = $(CCOMPFLAGS) 6 | LDFLAGS = $(FCOMPFLAGS) 7 | 8 | LD = gfortran 9 | FC = gfortran 10 | CC = cc 11 | 12 | MAKEFILE = Makefile 13 | PROGRAM = path 14 | 15 | INCS = system.inc 16 | 17 | OBJS = convert_num.o \ 18 | exitt.o \ 19 | force.o \ 20 | in_A.o \ 21 | in_B.o \ 22 | in_Slice.o \ 23 | md.o \ 24 | movie.o \ 25 | order.o \ 26 | path.o \ 27 | pathensemble.o \ 28 | ran_gauss.o \ 29 | ran_uniform.o \ 30 | readpath.o \ 31 | sample_avhb.o \ 32 | sample_umbrella.o \ 33 | shifting.o \ 34 | shooting.o \ 35 | sstmm.o \ 36 | ttime.o \ 37 | writepath.o 38 | 39 | all: $(PROGRAM) 40 | 41 | $(PROGRAM):: $(INCS) 42 | @/bin/rm -f $(OBJS) core 43 | 44 | $(PROGRAM):: $(OBJS) $(MAKEFILE) 45 | @$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) 46 | 47 | clean:; @rm -f $(OBJS) core 48 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/convert_num.f: -------------------------------------------------------------------------------- 1 | Subroutine Convert_Num(I,Number) 2 | Implicit None 3 | 4 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 5 | C Convert A Number Between 0 And 999 To A String C 6 | C Add The Number Of The Temperature... C 7 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 8 | 9 | Integer I 10 | Character*3 Num 11 | Character*5 Number 12 | 13 | If(I.Lt.0) Then 14 | Write(6,*) 'I Cannot Be Negative !!!' 15 | Call Exitt(2) 16 | Elseif(I.Lt.10) Then 17 | Num = '00'//Char(48+I) 18 | Elseif(I.Lt.100) Then 19 | Num = '0'//Char(48+(I/10))//Char(48+I-((I/10)*10)) 20 | Elseif(I.Lt.1000) Then 21 | Num = Char(48+(I/100))//Char(48+(I - (100*(I/100)))/10)// 22 | & Char(48+(I - (I/10)*10)) 23 | Else 24 | Num = 'XXX' 25 | Endif 26 | 27 | Number = 'TT'//Num 28 | 29 | Return 30 | End 31 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/exitt.f: -------------------------------------------------------------------------------- 1 | Subroutine Exitt(Swt) 2 | Implicit None 3 | 4 | Ccccccccccccccccccccccccccccc 5 | C End Of The Program C 6 | Ccccccccccccccccccccccccccccc 7 | 8 | Integer Swt 9 | 10 | If (Swt.Ne.2) Then 11 | Write(6,*) 12 | Write(6,*) 'The Program Ended Normally' 13 | Write(6,*) 14 | Else 15 | Write(6,*) 16 | Write(6,*) 'The Program Ended With Errors !!!' 17 | Write(6,*) 18 | Write(6,*) 19 | Endif 20 | 21 | Stop 22 | End 23 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/force.f: -------------------------------------------------------------------------------- 1 | Subroutine Force(X,Y,U,Fx,Fy) 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Ccccccccccccccccccccccccccccccccccccccc 7 | C Energy And Force Calculation C 8 | C See Jcp, 108 (1999), 1964 C 9 | Ccccccccccccccccccccccccccccccccccccccc 10 | 11 | Double Precision X,Y,U,Fx,Fy 12 | 13 | U = Onesixth*((4.0d0*((1.0d0 - X**2 - Y**2)**2)) + 14 | & (2.0d0*((X**2 - 2.0d0)**2)) + 15 | & ((((X+Y)**2) - 1.0d0)**2) + 16 | & ((((X-Y)**2) - 1.0d0)**2) - 2.0d0) 17 | 18 | Fx = Onesixth*((16.0d0*X*(1.0d0-X**2-Y**2)) - 19 | & (8.0d0*X*(X**2 - 2.0d0)) - 20 | & (4.0d0*(X+Y)*((X+Y)**2 - 1.0d0)) - 21 | & (4.0d0*(X-Y)*((X-Y)**2 - 1.0d0))) 22 | 23 | Fy = Onesixth*((16.0d0*Y*(1.0d0-X**2-Y**2)) - 24 | & (4.0d0*(X+Y)*((X+Y)**2 - 1.0d0)) + 25 | & (4.0d0*(X-Y)*((X-Y)**2 - 1.0d0))) 26 | 27 | Return 28 | End 29 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/in_A.f: -------------------------------------------------------------------------------- 1 | Function In_A() 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Cccccccccccccccccccccccccccccccccccccccccccccc 7 | C Check If A Point Of The Path Is In A C 8 | Cccccccccccccccccccccccccccccccccccccccccccccc 9 | 10 | Logical In_A 11 | Double Precision R2 12 | 13 | R2 = (1.0d0 + Rxx)**2 + Ryy**2 14 | 15 | If(R2.Lt.(Radius**2)) Then 16 | In_A = .True. 17 | Else 18 | In_A = .False. 19 | Endif 20 | 21 | Return 22 | End 23 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/in_B.f: -------------------------------------------------------------------------------- 1 | Function In_B() 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Cccccccccccccccccccccccccccccccccccccccccccccc 7 | C Check If A Point Of The Path Is In B C 8 | Cccccccccccccccccccccccccccccccccccccccccccccc 9 | 10 | Logical In_B 11 | Double Precision R2 12 | 13 | R2 = (1.0d0 - Rxx)**2 + Ryy**2 14 | 15 | If(R2.Lt.(Radius**2)) Then 16 | In_B = .True. 17 | Else 18 | In_B = .False. 19 | Endif 20 | 21 | Return 22 | End 23 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/in_Slice.f: -------------------------------------------------------------------------------- 1 | Subroutine In_Slice(Lslice,Myorder) 2 | Implicit None 3 | 4 | CCccccccccccccccccccccccccccccccccccccccccc 5 | C Checks If A Particle Is In A Slice C 6 | C (Umbrella Sampling) C 7 | C C 8 | C The Reaction Coordinate Is The C 9 | C Distance To B (Not A !!!!!) C 10 | Ccccccccccccccccccccccccccccccccccccccccccc 11 | 12 | Include 'system.inc' 13 | 14 | Logical Lslice 15 | Double Precision Myorder,R2 16 | 17 | R2 = (1.0d0 - Rxx)**2 + Ryy**2 18 | 19 | Myorder = 1.0d0 - (Dsqrt(R2)*0.5d0) 20 | 21 | If(Myorder.Gt.Lmin.And.Myorder.Lt.Lmax) Then 22 | Lslice = .True. 23 | Else 24 | Lslice = .False. 25 | Endif 26 | 27 | Return 28 | End 29 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/movie.f: -------------------------------------------------------------------------------- 1 | Subroutine Movie 2 | Implicit None 3 | 4 | Include 'system.inc' 5 | 6 | Ccccccccccccccccccccccccccccccccccccc 7 | C Write A Movie Of The System: C 8 | C A,B And The Branched Atom C 9 | Ccccccccccccccccccccccccccccccccccccc 10 | 11 | Integer Model,Atom,J,Mymodel 12 | Double Precision Dummy 13 | Character*5 Short 14 | Character*14 Name1 15 | 16 | Save Mymodel 17 | Data Mymodel/0/ 18 | 19 | Mymodel = Mymodel + 1 20 | 21 | Call Convert_Num(Mymodel,Short) 22 | 23 | Name1 = 'movie'//short//'.pdb' 24 | 25 | Open(32,File=name1) 26 | 27 | Model = 0 28 | Atom = 0 29 | Dummy = 0.0d0 30 | 31 | Do J=1,Nslice 32 | 33 | Model = Model + 1 34 | 35 | Write(32,'(A,I9)') 'MODEL',Model 36 | 37 | Atom = Atom + 1 38 | 39 | Write(32,'(A,I7,A,I12,4x,3f8.3)') 'ATOM',Atom,' O', 40 | & Atom,5.0d0*Xxold(J),5.0d0*Yyold(J),Dummy 41 | 42 | Write(32,'(A)') 'ENDMDL' 43 | 44 | Enddo 45 | 46 | Close(32) 47 | 48 | Return 49 | End 50 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/order.f: -------------------------------------------------------------------------------- 1 | Subroutine Order(Myorder) 2 | Implicit None 3 | 4 | Ccccccccccccccccccccccccccccccccccccccccccccccccc 5 | C Calculate The Order Paraneter Of A Path C 6 | Ccccccccccccccccccccccccccccccccccccccccccccccccc 7 | 8 | Include 'system.inc' 9 | 10 | Double Precision Myorder(Maxtraject),R2 11 | Integer J 12 | 13 | Do J=1,Nslice 14 | R2 = (1.0d0 - Xxold(J))**2 + Yyold(J)**2 15 | Myorder(J) = 1.0d0 - (Dsqrt(R2)*0.5d0) 16 | Enddo 17 | 18 | Return 19 | End 20 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/ran_gauss.f: -------------------------------------------------------------------------------- 1 | Function Ran_Gauss() 2 | Implicit None 3 | 4 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccc 5 | C Random Number From A Gaussian Distribution C 6 | C Quite Rough, But Good Enough Here.... C 7 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccc 8 | 9 | Integer I 10 | Double Precision Ran_Gauss,Ran_Uniform 11 | 12 | Ran_Gauss = -6.0d0 13 | 14 | Do I=1,12 15 | Ran_Gauss = Ran_Gauss + RAND() 16 | Enddo 17 | 18 | Return 19 | End 20 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/sstmm.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int 4 | sstmm_() 5 | 6 | {time_t ourtime; 7 | time(&ourtime); 8 | return (int)(ourtime&0x00000fff); 9 | } 10 | -------------------------------------------------------------------------------- /CaseStudy_24/Source/ttime.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | double 4 | ttime_() 5 | 6 | { 7 | struct timeval now; 8 | double sec; 9 | 10 | if (gettimeofday(&now, (struct timezone *) 0)) 11 | { 12 | return(0); 13 | } 14 | 15 | sec = (double) now.tv_sec + (double) now.tv_usec / 1000000; 16 | return(sec); 17 | } 18 | -------------------------------------------------------------------------------- /CaseStudy_24/Tools/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | CCOMPFLAGS = -O 3 | 4 | FFLAGS = $(FCOMPFLAGS) 5 | CFLAGS = $(CCOMPFLAGS) 6 | LDFLAGS = $(FCOMPFLAGS) 7 | 8 | LD = gfortran 9 | FC = gfortran 10 | CC = cc 11 | 12 | MAKEFILE = Makefile 13 | PROG1 = avhb 14 | PROG2 = umbrella 15 | OBJS1 = avhb.o 16 | OBJS2 = umbrella.o 17 | 18 | all: $(PROG1) 19 | 20 | $(PROG1):: $(OBJS1) $(OBJS2) $(MAKEFILE) 21 | @$(LD) $(LDFLAGS) $(OBJS1) -o $(PROG1) 22 | @$(LD) $(LDFLAGS) $(OBJS2) -o $(PROG2) 23 | 24 | clean:; @rm -f $(OBJS1) $(OBJS2) core 25 | -------------------------------------------------------------------------------- /CaseStudy_24/Tools/avhb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_24/Tools/avhb -------------------------------------------------------------------------------- /CaseStudy_24/Tools/umbrella: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UnderstandingMolecularSimulation/CaseStudies/37ef456278ca31594646769f6bfbb2f751062f08/CaseStudy_24/Tools/umbrella -------------------------------------------------------------------------------- /CaseStudy_25/Run/model1.dat: -------------------------------------------------------------------------------- 1 | Numcom (Number Of Components) 2 | 2 3 | Nuall Many (Number Of Atoms/Molecule, Number Of Molecules Of This Component) 4 | 1 3000 5 | Typmol (Identity Of The Beads Of This Molecule) 6 | 1 7 | Nuall Many (Number Of Atoms/Molecule, Number Of Molecules Of This Component) 8 | 1 3000 9 | Typmol (Identity Of The Beads Of This Molecule) 10 | 2 11 | -------------------------------------------------------------------------------- /CaseStudy_25/Run/model2.dat: -------------------------------------------------------------------------------- 1 | Numcom (Number Of Components) 2 | 3 3 | Nuall Many (Number Of Atoms/Molecule, Number Of Molecules Of This Component) 4 | 1 3000 5 | Typmol (Identity Of The Beads Of This Molecule) 6 | 1 7 | Nuall Many (Number Of Atoms/Molecule, Number Of Molecules Of This Component) 8 | 1 3000 9 | Typmol (Identity Of The Beads Of This Molecule) 10 | 2 11 | Nuall Many (Number Of Atoms/Molecule, Number Of Molecules Of This Component) 12 | 4 50 13 | Typmol (Identity Of The Beads Of This Molecule) 14 | 1 1 2 2 15 | -------------------------------------------------------------------------------- /CaseStudy_25/Run/run: -------------------------------------------------------------------------------- 1 | #! /bin/csh -f 2 | # 3 | # Dpd Simulations 4 | # 5 | # Nstep = Total Number Of Steps 6 | # Nprint = Output Frequency 7 | # Ninit = How Many Steps Do We Scale The Temperature ? 8 | # Boxlx = Boxsize In X-Direction 9 | # Boxly = Boxsize In Y-Direction 10 | # Boxlz = Boxsize In Z-Direction 11 | # Temp = Temperature 12 | # Bondkb = Spring Constant 13 | # Sigma = Sigma 14 | # Timestep = Timestep Of Integration E.O.M. 15 | # Linit = Do We Generate A New Configuration 16 | # (Otherwise, Read From Disk) 17 | # Ninact = How Many Pair-Pair Interactions 18 | # Niter = Number Of Iterations 19 | # Mymodel = Which Model ? 20 | 21 | set mymodel = 1 22 | 23 | cat > Input < outt 43 | 44 | exit 45 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/Makefile: -------------------------------------------------------------------------------- 1 | FCOMPFLAGS = -O 2 | CCOMPFLAGS = -O 3 | 4 | FFLAGS = $(FCOMPFLAGS) 5 | CFLAGS = $(CCOMPFLAGS) 6 | LDFLAGS = $(FCOMPFLAGS) 7 | 8 | LD = gfortran 9 | FC = gfortran 10 | CC = cc 11 | 12 | MAKEFILE = Makefile 13 | PROGRAM = dpd 14 | 15 | INCS = maxarray.inc selflist.inc system.inc 16 | 17 | OBJS = dpd.o \ 18 | exitt.o \ 19 | force.o \ 20 | force_minim.o \ 21 | minim.o \ 22 | ran_gauss.o \ 23 | ran_sphere.o \ 24 | ran_uniform.o \ 25 | readdat.o \ 26 | sample_dens.o \ 27 | sample_gyra.o \ 28 | sstmm.o \ 29 | ttime.o \ 30 | writepdb.o 31 | 32 | all: $(PROGRAM) 33 | 34 | $(PROGRAM):: $(INCS) 35 | @/bin/rm -f $(OBJS) core 36 | 37 | $(PROGRAM):: $(OBJS) $(MAKEFILE) 38 | @$(LD) $(LDFLAGS) $(OBJS) -o $(PROGRAM) 39 | 40 | clean:; @rm -f $(OBJS) core 41 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/exitt.f: -------------------------------------------------------------------------------- 1 | Subroutine Exitt(Swt) 2 | Implicit None 3 | 4 | Integer Swt 5 | 6 | Write(6,*) 7 | Write(6,*) 8 | 9 | If (Swt.Ne.2) Then 10 | Write(6,*) 'Program Ended Normally' 11 | Else 12 | Write(6,*) '*************************************' 13 | Write(6,*) '* Program Ended With Errors !!! *' 14 | Write(6,*) '*************************************' 15 | Endif 16 | 17 | Write(6,*) 18 | Write(6,*) 19 | 20 | Stop 21 | End 22 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/maxarray.inc: -------------------------------------------------------------------------------- 1 | Cccccccccccccccccccccccccccccc 2 | C Maximum Array Bounds C 3 | Cccccccccccccccccccccccccccccc 4 | 5 | Integer Maxtp,Maxtotal,Maxcell, 6 | & Maxself,Maxcom,Maxslab 7 | 8 | Parameter (Maxtotal = 10000) 9 | Parameter (Maxcom = 3) 10 | Parameter (Maxtp = 3) 11 | Parameter (Maxself = 100000) 12 | Parameter (Maxcell = 2000) 13 | Parameter (Maxslab = 1000) 14 | 15 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/ran_gauss.f: -------------------------------------------------------------------------------- 1 | Function Ran_Gauss() 2 | Implicit None 3 | 4 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccc 5 | C Random Number From A Gaussian Distribution C 6 | C Quite Rough, But Good Enough Here.... C 7 | C C 8 | C See Allen & Tildesly C 9 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccc 10 | 11 | Integer I 12 | Double Precision Ran_Gauss,Ran_Uniform 13 | 14 | Ran_Gauss = -6.0d0 15 | 16 | Do I=1,12 17 | Ran_Gauss = Ran_Gauss + RAND() 18 | Enddo 19 | 20 | Return 21 | End 22 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/ran_sphere.f: -------------------------------------------------------------------------------- 1 | Subroutine Ran_Sphere(X,Y,Z) 2 | Implicit None 3 | 4 | Cccccccccccccccccccccccccccccccccccc 5 | C Random Vector On A Sphere C 6 | Cccccccccccccccccccccccccccccccccccc 7 | 8 | Double Precision Ran1,Ran2,Ranh,Ransq,X,Y,Z,Ran_Uniform 9 | 10 | 100 Ran1 = 2.0d0*RAND() - 1.0d0 11 | Ran2 = 2.0d0*RAND() - 1.0d0 12 | Ransq = Ran1*Ran1 + Ran2*Ran2 13 | 14 | If (Ransq.Ge.1.0d0) Goto 100 15 | 16 | Ranh = 2.0d0*Dsqrt(1.0d0-Ransq) 17 | X = Ran1*Ranh 18 | Y = Ran2*Ranh 19 | Z = 1.0d0 - 2.0d0*Ransq 20 | 21 | Return 22 | End 23 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/selflist.inc: -------------------------------------------------------------------------------- 1 | Ccccccccccccccccccccccccccccccccccccccccccccc 2 | C List Of All Pair-Pair Interactions C 3 | Ccccccccccccccccccccccccccccccccccccccccccccc 4 | 5 | Integer Spi(Maxself),Spj(Maxself),Selflist 6 | Double Precision Sdpx(Maxself),Sdpy(Maxself),Sdpz(Maxself), 7 | & Srsq(Maxself) 8 | 9 | Common /Sefrt/ Sdpx,Sdpy,Sdpz,Srsq,Spi,Spj,Selflist 10 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/sstmm.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int 4 | sstmm_() 5 | 6 | {time_t ourtime; 7 | time(&ourtime); 8 | return (int)(ourtime&0x00000fff); 9 | } 10 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/system.inc: -------------------------------------------------------------------------------- 1 | Cccccccccccccccccccccccccccccc 2 | C System Variables C 3 | Cccccccccccccccccccccccccccccc 4 | 5 | Integer Ncx,Ncy,Ncz,Ncell,Npart,Nspring,Aspring(Maxtotal), 6 | & Molecule,Smolecule(Maxtotal),Tmolecule(Maxtotal), 7 | & Type(Maxtotal),Nstep,Niter,Dcx(14),Dcy(14),Dcz(14), 8 | & Mlll,Nprint,Numcom,Ninit,Nuall(Maxcom) 9 | 10 | Double Precision Xx(Maxtotal),Yy(Maxtotal),Zz(Maxtotal), 11 | & Vx(Maxtotal),Vy(Maxtotal),Vz(Maxtotal),Boxlx,Boxly, 12 | & Boxlz,Hbx,Hby,Hbz,Rlx,Rly,Rlz,Press,Surface,Sigmat, 13 | & Gamma,Timestep,Halftime,Bondkb,Beta,Fx(Maxtotal), 14 | & Fy(Maxtotal),Fz(Maxtotal),Phrep(Maxtp,Maxtp),Upot 15 | 16 | Common /Srt12q/ Xx,Yy,Zz,Vx,Vy,Vz,Boxlx,Boxly,Boxlz,Hbx, 17 | & Hby,Hbz,Rlx,Rly,Rlz,Press,Surface,Sigmat,Gamma, 18 | & Timestep,Halftime,Bondkb,Beta,Fx,Fy,Fz,Phrep 19 | 20 | Common /Srt13q/ Upot,Ncx,Ncy,Ncz,Ncell,Npart,Nspring,Aspring 21 | 22 | Common /Srt14q/ Molecule,Smolecule,Tmolecule,Type,Nstep,Niter, 23 | & Dcx,Dcy,Dcz,Mlll,Nprint,Numcom,Ninit,Nuall 24 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/ttime.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | double 4 | ttime_() 5 | 6 | { 7 | struct timeval now; 8 | double sec; 9 | 10 | if (gettimeofday(&now, (struct timezone *) 0)) 11 | { 12 | return(0); 13 | } 14 | 15 | sec = (double) now.tv_sec + (double) now.tv_usec / 1000000; 16 | return(sec); 17 | } 18 | -------------------------------------------------------------------------------- /CaseStudy_25/Source/writepdb.f: -------------------------------------------------------------------------------- 1 | Subroutine Writepdb 2 | Implicit None 3 | 4 | Cccccccccccccccccccccccccccccccccccccccccccccccccc 5 | C Write Final Configuration Of The System C 6 | Cccccccccccccccccccccccccccccccccccccccccccccccccc 7 | 8 | Include 'maxarray.inc' 9 | Include 'system.inc' 10 | 11 | Integer I 12 | Character*3 Nnn 13 | 14 | I = 1 15 | 16 | Open(21,File="Config.Pdb") 17 | 18 | Write(21,'(A,I9)') 'MODEL',I 19 | 20 | Do I=1,Npart 21 | 22 | If(Type(I).Eq.1) Then 23 | Nnn = ' O' 24 | Else 25 | Nnn = ' N' 26 | Endif 27 | 28 | Write(21,'(A,I7,A,I12,4x,3f8.3)') 'ATOM',I,Nnn, 29 | & I,Xx(I),Yy(I),Zz(I) 30 | Enddo 31 | 32 | Write(21,'(A)') 'ENDMDL' 33 | 34 | Close(21) 35 | 36 | Return 37 | End 38 | -------------------------------------------------------------------------------- /CaseStudy_26/Run/lj.model: -------------------------------------------------------------------------------- 1 | tailco shift 2 | .true. .false. 3 | eps sig mass r.c 4 | 1. 1. 1. 2.5 5 | 6 | 7 | -------------------------------------------------------------------------------- /CaseStudy_26/Run/lj.prth: -------------------------------------------------------------------------------- 1 | data 2 | 2 3 | 'energy' 4 | 'press' 5 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/adjust.f: -------------------------------------------------------------------------------- 1 | **==adjust.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | SUBROUTINE ADJUST(Attemp, Nacc, Dr) 3 | c adjusts maximum displacement such that 50% of the 4 | c movels will be accepted 5 | IMPLICIT NONE 6 | INCLUDE 'system.inc' 7 | INTEGER Attemp, Nacc, attempp, naccp 8 | DOUBLE PRECISION dro, frac, Dr 9 | SAVE naccp, attempp 10 | 11 | IF (Attemp.EQ.0.OR.attempp.GE.Attemp) THEN 12 | naccp = Nacc 13 | attempp = Attemp 14 | ELSE 15 | frac = FLOAT(Nacc-naccp)/FLOAT(Attemp-attempp) 16 | dro = Dr 17 | Dr = Dr*ABS(frac/0.5D0) 18 | c ---limit the change: 19 | IF (Dr/dro.GT.1.5D0) Dr = dro*1.5D0 20 | IF (Dr/dro.LT.0.5D0) Dr = dro*0.5D0 21 | IF (Dr.GT.HBOX/2.D0) Dr = HBOX/2.D0 22 | WRITE (6, 99001) Dr, dro, frac, Attemp - attempp, Nacc - naccp 23 | c ---store nacc and attemp for next use 24 | naccp = Nacc 25 | attempp = Attemp 26 | END IF 27 | RETURN 28 | 99001 FORMAT (' Max. displ. set to : ', f6.3, ' (old : ', f6.3, ')', /, 29 | & ' Frac. acc.: ', f4.2, ' attempts: ', i7, ' succes: ', i7) 30 | END 31 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/cell.f: -------------------------------------------------------------------------------- 1 | **==cell.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | 3 | FUNCTION CELL(X, Y, Z) 4 | c determines cell number for position x,y,z 5 | IMPLICIT NONE 6 | INTEGER ix, iy, iz, CELL 7 | DOUBLE PRECISION X, Y, Z 8 | INCLUDE 'parameter.inc' 9 | INCLUDE 'nlist.inc' 10 | 11 | ix = INT(X*FACTN) 12 | iy = INT(Y*FACTN) 13 | iz = INT(Z*FACTN) 14 | CELL = ix + iy*NCEL + iz*NCEL*NCEL 15 | RETURN 16 | END 17 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/conf.inc: -------------------------------------------------------------------------------- 1 | c conf.inc 2 | double precision x,y,z 3 | integer npart 4 | common/conf1/x(npmax),y(npmax),z(npmax),npart 5 | c 6 | c x(i),y(i),z(i) : position particle i 7 | c npart : actual number of particles 8 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/corp.f: -------------------------------------------------------------------------------- 1 | **==corp.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | FUNCTION CORP(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORP, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORP = 4*PI*EPS4*(Rho**2)*sig3*(2*ri3*ri3*ri3/9-ri3/3) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/coru.f: -------------------------------------------------------------------------------- 1 | **==coru.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | FUNCTION CORU(R, Rho) 3 | IMPLICIT NONE 4 | INCLUDE 'potential.inc' 5 | DOUBLE PRECISION sig3, ri3, R, CORU, Rho 6 | 7 | sig3 = SIG2*SQRT(SIG2) 8 | ri3 = sig3/(R*R*R) 9 | CORU = 2*PI*EPS4*(Rho*sig3)*(ri3*ri3*ri3/9-ri3/3) 10 | RETURN 11 | END 12 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/dist2.f: -------------------------------------------------------------------------------- 1 | **==dist2.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | FUNCTION DIST2(Xi, Yi, Zi, J) 3 | c calculates the distance between xi and particle j 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | DOUBLE PRECISION Xi, Yi, Zi, xr, yr, zr, DIST2 9 | INTEGER J 10 | 11 | 12 | xr = Xi - X(J) 13 | IF (xr.GT.HBOX) THEN 14 | xr = xr - BOX 15 | ELSE IF (xr.LT.-HBOX) THEN 16 | xr = xr + BOX 17 | END IF 18 | yr = Yi - Y(J) 19 | IF (yr.GT.HBOX) THEN 20 | yr = yr - BOX 21 | ELSE IF (yr.LT.-HBOX) THEN 22 | yr = yr + BOX 23 | END IF 24 | zr = Zi - Z(J) 25 | IF (zr.GT.HBOX) THEN 26 | zr = zr - BOX 27 | ELSE IF (zr.LT.-HBOX) THEN 28 | zr = zr + BOX 29 | END IF 30 | DIST2 = xr*xr + yr*yr + zr*zr 31 | RETURN 32 | END 33 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/ener.f: -------------------------------------------------------------------------------- 1 | **==ener.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | SUBROUTINE ENER(En, Vir, R2) 3 | c 4 | c ---calculate energy 5 | c 6 | IMPLICIT NONE 7 | DOUBLE PRECISION R2, r2i, r6i, En, Vir 8 | INCLUDE 'potential.inc' 9 | 10 | IF (R2.LT.RC2) THEN 11 | r2i = SIG2/R2 12 | r6i = r2i*r2i*r2i 13 | IF (SHIFT) THEN 14 | En = EPS4*(r6i*r6i-r6i) - ECUT 15 | ELSE 16 | En = EPS4*(r6i*r6i-r6i) 17 | END IF 18 | Vir = EPS48*(r6i*r6i-0.5D0*r6i) 19 | ELSE 20 | En = 0.D0 21 | Vir = 0.D0 22 | END IF 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/lattice.f: -------------------------------------------------------------------------------- 1 | **==lattice.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | SUBROUTINE LATTICE 3 | c ---place `npart' particles on a lattice with density 'rho' 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER i, j, k, itel, n 9 | DOUBLE PRECISION dx, dy, dz, del 10 | 11 | n = INT(NPART**(1.D0/3.D0)) + 1 12 | IF (n.EQ.0) n = 1 13 | del = BOX/DBLE(n) 14 | itel = 0 15 | dx = -del 16 | DO i = 1, n 17 | dx = dx + del 18 | dy = -del 19 | DO j = 1, n 20 | dy = dy + del 21 | dz = -del 22 | DO k = 1, n 23 | dz = dz + del 24 | IF (itel.LT.NPART) THEN 25 | itel = itel + 1 26 | X(itel) = dx 27 | Y(itel) = dy 28 | Z(itel) = dz 29 | END IF 30 | END DO 31 | END DO 32 | END DO 33 | WRITE (6, 99001) itel 34 | RETURN 35 | 99001 FORMAT (' Initialisation on lattice: ', /, i10, 36 | & ' particles placed on a lattice') 37 | END 38 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/method.inc: -------------------------------------------------------------------------------- 1 | c method.inc 2 | logical neighlist,verletlist 3 | common/method/neighlist,verletlist 4 | c 5 | c neighlist : if .true. use neighbour list to 6 | c determine energy 7 | c verletlist : if .true. use verlet list to 8 | c determine energy 9 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/new_nlist.f: -------------------------------------------------------------------------------- 1 | **==new_nlist.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | 3 | SUBROUTINE NEW_NLIST 4 | c makes a noew neigh-bour list using the linked-list 5 | c algorithm 6 | IMPLICIT NONE 7 | INTEGER i, ic, CELL 8 | INCLUDE 'parameter.inc' 9 | INCLUDE 'conf.inc' 10 | INCLUDE 'nlist.inc' 11 | 12 | c ---initialize the head-of-chain 13 | DO ic = 0, NCELT - 1 14 | HOC(ic) = 0 15 | END DO 16 | c ---make linked list: 17 | DO i = 1, NPART 18 | c ---determine celnumber 19 | ic = CELL(X(i), Y(i), Z(i)) 20 | c ---update linked-list and head of chain 21 | LL(i) = HOC(ic) 22 | HOC(ic) = i 23 | END DO 24 | RETURN 25 | END 26 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/nlist.inc: -------------------------------------------------------------------------------- 1 | c nlist.inc 2 | double precision factn 3 | integer ncel,hoc,ll,celmax,ncelt,neigh 4 | parameter (celmax=10000,neigh=27) 5 | common/nlist1/factn,ncel,ncelt 6 | common/nlist2/ll(npmax),hoc(0:celmax) 7 | c ll(i) : linked list particle i 8 | c hoc(ic) : head of chain cell ic 9 | c factn : used to find celnumber 10 | c ncel : number of cells in x, y or z direction 11 | c ncelt : total number of cells 12 | c celmax : maximum number of cells (change and 13 | c recompile if larger number is needed) 14 | c neigh : number of cells for interactions (in 15 | c 3-dim per definition 27) 16 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/parameter.inc: -------------------------------------------------------------------------------- 1 | c parameters.inc 2 | integer npmax 3 | parameter (npmax=5000) 4 | c 5 | c npmax : maximum number of particles 6 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/potential.inc: -------------------------------------------------------------------------------- 1 | c potential.inc 2 | double precision eps4,sig2,mass,ecut,rc2,pi 3 | $ ,eps48,rc 4 | logical tailco,shift 5 | common/pot1/pi,eps4,eps48,sig2,mass,rc,rc2,ecut 6 | $ ,tailco,shift 7 | c 8 | c pi : pi = 3.14 .. 9 | c eps4 : 4 * epsilon 10 | c eps48 : 48 * epsilon 11 | c (epsilon) : energy parameter Lennard-Jones potential 12 | c sig2 : sigma*sigma 13 | c (sigma) : size parameter Lennard-Jones potenital 14 | c mass : mass of the molecules 15 | c rc : cut-off radius of the potenial 16 | c rc2 : rc * rc 17 | c ecut : energy at cut-off radius 18 | c tailco : .true. apply tail corrections 19 | c shift : .true. shift the potential 20 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/rantest.f: -------------------------------------------------------------------------------- 1 | **==rantest.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | SUBROUTINE RANTEST(Iseed) 3 | c ---test and initialize the random number generator 4 | IMPLICIT NONE 5 | INTEGER Iseed, i 6 | DOUBLE PRECISION RANF 7 | 8 | CALL RANSET(0) 9 | PRINT *, ' ******** test random numbers ***********' 10 | DO i = 1, 5 11 | PRINT *, ' i,ranf() ', i, RANF() 12 | END DO 13 | RETURN 14 | END 15 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/sample.f: -------------------------------------------------------------------------------- 1 | **==sample.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | SUBROUTINE SAMPLE(I, En, Vir) 3 | c ---write quantities to file 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INCLUDE 'potential.inc' 9 | INTEGER I 10 | DOUBLE PRECISION En, enp, Vir, press, CORP, vol, rho 11 | 12 | IF (NPART.NE.0) THEN 13 | enp = En/DBLE(NPART) 14 | vol = BOX**3 15 | press = (NPART/vol)/BETA + Vir/(3*vol) 16 | rho = NPART/vol 17 | IF (TAILCO) press = press + CORP(RC, rho) 18 | ELSE 19 | enp = 0 20 | press = 0 21 | END IF 22 | WRITE (66, *) I, enp, press 23 | RETURN 24 | END 25 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/store.f: -------------------------------------------------------------------------------- 1 | **==store.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | SUBROUTINE STORE(Iout, Dr) 3 | c writes configuration to disk 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'system.inc' 8 | INTEGER Iout, i 9 | DOUBLE PRECISION Dr 10 | 11 | WRITE (Iout, *) BOX, HBOX 12 | WRITE (Iout, *) NPART 13 | WRITE (Iout, *) Dr 14 | DO i = 1, NPART 15 | WRITE (Iout, *) X(i), Y(i), Z(i) 16 | END DO 17 | REWIND (Iout) 18 | RETURN 19 | END 20 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/system.inc: -------------------------------------------------------------------------------- 1 | c system.inc 2 | double precision box,temp,beta,hbox 3 | common/sys1/box,hbox,temp,beta 4 | c 5 | c box : simulation box length 6 | c hbox : 0.5 * box 7 | c temp : temperature 8 | c beta : 1/temp 9 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/toterg.f: -------------------------------------------------------------------------------- 1 | **==toterg.spg processed by SPAG 4.52O at 10:32 on 18 Oct 1996 2 | SUBROUTINE TOTERG(Ener, Vir) 3 | c ---calculates total energy 4 | IMPLICIT NONE 5 | INCLUDE 'parameter.inc' 6 | INCLUDE 'conf.inc' 7 | INCLUDE 'potential.inc' 8 | INCLUDE 'system.inc' 9 | 10 | DOUBLE PRECISION xi, yi, zi, Ener, eni, CORU, viri, Vir, rho 11 | INTEGER i, jb 12 | 13 | Ener = 0 14 | Vir = 0 15 | DO i = 1, NPART - 1 16 | xi = X(i) 17 | yi = Y(i) 18 | zi = Z(i) 19 | jb = i + 1 20 | CALL ENERI(xi, yi, zi, i, jb, eni, viri) 21 | Ener = Ener + eni 22 | Vir = Vir + viri 23 | END DO 24 | c ---add tail corrections 25 | IF (TAILCO) THEN 26 | rho = NPART/(BOX**3) 27 | Ener = Ener + NPART*CORU(RC, rho) 28 | END IF 29 | RETURN 30 | END 31 | 32 | -------------------------------------------------------------------------------- /CaseStudy_26/Source/verlet.inc: -------------------------------------------------------------------------------- 1 | c verlet.inc 2 | double precision xv,yv,zv,rv,rv2,skin,skin2 3 | integer nlist,list 4 | common/verl1/xv(npmax),yv(npmax),zv(npmax),rv,rv2 5 | $ ,skin,skin2 6 | common/verl2/nlist(npmax),list(npmax,npmax) 7 | c 8 | c xv(i),yv(i),zv(i) : position of particle i at the time 9 | c the list was made 10 | c rv : Verlet radius 11 | c rv2=rv*rv 12 | c skin =rv-rc : difference Verlet radius and cut-off 13 | c skin2=skin*skin 14 | c nlist(i) : number of particles in Verlet list 15 | c particle i 16 | c list(i,j) : Verlet-list of particle i 17 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:22.04 2 | 3 | RUN apt-get update && apt install -y gcc gfortran python3 python3-pip git csh 4 | 5 | COPY ./requirements.txt . 6 | RUN pip3 install -r requirements.txt 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2023 Daan Frenkel and Berend Smit 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /Tools/ran_gauss.f: -------------------------------------------------------------------------------- 1 | Function Ran_Gauss() 2 | Implicit None 3 | 4 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 5 | C Random Number From A Gaussian Distribution C 6 | C Mean=0; Sd=1 C 7 | C C 8 | C X + Y*Ran_Gauss() Will Return A Gaussian Distributed C 9 | C Number With Mean=X And Sd=Y C 10 | Ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 11 | 12 | Double Precision Ran1,Ran2,Ran_Gauss,Ran_Uniform,Ransq 13 | 14 | 1 Ran1 = 2.0d0*RAND() - 1.0d0 15 | Ran2 = 2.0d0*RAND() - 1.0d0 16 | Ransq = Ran1*Ran1 + Ran2*Ran2 17 | 18 | If (Ransq.Ge.1.0d0.Or.Ransq.Le.0.0d0) Goto 1 19 | 20 | Ran_Gauss = Ran1*Dsqrt(-2.0d0*Dlog(Ransq)/Ransq) 21 | 22 | Return 23 | End 24 | -------------------------------------------------------------------------------- /Tools/ran_sphere.f: -------------------------------------------------------------------------------- 1 | Subroutine Ran_Sphere(Bx,By,Bz) 2 | Implicit None 3 | 4 | Cccccccccccccccccccccccccccccccccccccccc 5 | C Random Unit Vector On A Spere C 6 | Cccccccccccccccccccccccccccccccccccccccc 7 | 8 | Double Precision Bx,By,Bz,Ran_Uniform,Ransq,Ranh 9 | 10 | 1 Bx = 1.0d0 - 2.0d0*RAND() 11 | By = 1.0d0 - 2.0d0*RAND() 12 | Ransq = Bx*Bx + By*By 13 | 14 | If(Ransq.Ge.1.0d0) Goto 1 15 | 16 | Ranh = 2.0d0*Dsqrt(1.0d0-Ransq) 17 | Bx = Bx*Ranh 18 | By = By*Ranh 19 | Bz = 1.0d0-2.0d0*Ransq 20 | 21 | Return 22 | End 23 | -------------------------------------------------------------------------------- /make.py: -------------------------------------------------------------------------------- 1 | import fire 2 | import subprocess 3 | from glob import glob 4 | import natsort 5 | from pathlib import Path 6 | 7 | def get_all_targets(): 8 | """Get all makefiles. Assumes that it is run from the root of the repository.""" 9 | return natsort.natsorted(list(glob("*/**/Makefile"))) 10 | 11 | def clean_all(): 12 | """Clean all makefiles. 13 | 14 | Example: 15 | >> python make.py clean_all 16 | """ 17 | for makefile in get_all_targets(): 18 | print(f"Cleaning {makefile}...") 19 | subprocess.run(["make", "clean"], cwd=Path(makefile).parent) 20 | 21 | def build_all(): 22 | """Build all makefiles. 23 | 24 | Example: 25 | >> python make.py build_all 26 | """ 27 | for makefile in get_all_targets(): 28 | print(f"Building {makefile}...") 29 | completed_process = subprocess.run(["make"], cwd=Path(makefile).parent) 30 | if completed_process.returncode != 0: 31 | raise Exception(f"Failed to build {makefile}") 32 | 33 | 34 | if __name__ == "__main__": 35 | fire.Fire() -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | fire 2 | natsort --------------------------------------------------------------------------------