Caltech Summer Undergraduate Research Fellowship (SURF) 2026 Host Lab: Fong Lab, Caltech Student: Defne Nihal Ertugrul
This project uses classical molecular dynamics (MD) to disentangle the enthalpic (ΔH) and entropic (ΔS) contributions to the adsorption free energy (ΔG = ΔH − TΔS) of monovalent (Na⁺) and divalent (Ca²⁺) cations at a charged planar electrode in explicit water.
Three primary systems are studied:
| System | Electrolyte | Purpose |
|---|---|---|
| Monovalent | NaCl only | Baseline for Na⁺ adsorption thermodynamics |
| Divalent | CaCl₂ only | Baseline for Ca²⁺ adsorption thermodynamics |
| Mixed | NaCl + CaCl₂ | Competitive adsorption between Na⁺ and Ca²⁺ |
Each system is simulated at a baseline temperature (T₀ ≈ 298 K) and an elevated temperature (T₀ + 40 K) so that the temperature dependence of the adsorption free energy can be used to decompose ΔG into ΔH and ΔS via a finite difference van 't Hoff analysis.
SURF2026/
├── README.md
├── .gitignore
├── environment.yml # Conda environment for Python analysis
│
├── setup/ # System construction (Weeks 1–2)
│ ├── packmol/ # Packmol input files (.inp)
│ ├── moltemplate/ # Moltemplate .lt topology files
│ └── forcefields/ # SPC/E water, Joung–Cheatham ions, etc.
│
├── simulations/ # LAMMPS input decks (Weeks 3–6)
│ ├── monovalent/ # NaCl-only systems
│ ├── divalent/ # CaCl2-only systems
│ └── mixed/ # NaCl + CaCl2 competitive systems
│
├── hpc_scripts/ # Purdue Anvil Slurm job scripts
│ └── submit_anvil.slurm
│
├── analysis/ # Post-processing (Weeks 6–9)
│ ├── scripts/
│ │ └── analyze_hydration.py # RDF + coordination-number skeleton
│ ├── notebooks/ # Jupyter notebooks for exploratory analysis
│ └── results/ # Plots, CSVs (small files only)
│
├── visualization/ # Weeks 7–9
│ ├── vmd/ # .tcl scripts: PBC wrap, representations
│ └── ovito/ # OVITO Python modifiers
│
├── data_management/ # Automated Anvil ↔ macOS backups
│ ├── rclone_backup.sh
│ └── com.defne.surf.backup.plist # macOS launchd agent
│
└── docs/ # Weekly reports, figures, final poster
The directory layout mirrors the 10 week SURF workflow:
| Weeks | Stage | Directories |
|---|---|---|
| 1/2 | Literature + system building | setup/, docs/ |
| 3/4 | Equilibration + validation | simulations/, hpc_scripts/ |
| 5/6 | Production runs (2 T, 3 sys) | simulations/, hpc_scripts/ |
| 6/8 | Structural analysis | analysis/, visualization/ |
| 8/9 | Thermodynamic decomposition | analysis/notebooks/ |
| 10 | Poster + final report | docs/ |
conda env create -f environment.yml
conda activate surf2026module load gcc/11 openmpi/4 lammps/2Aug2023See hpc_scripts/submit_anvil.slurm for a ready to edit Slurm template.
- Build the simulation box with Packmol (water + electrodes + ions) and assign force field parameters with Moltemplate.
- Minimize and equilibrate in LAMMPS: NVT → NPT → NVT with the charged walls held rigid.
- Production NVT runs at T₀ and T₀ + 40 K for each of the three electrolyte compositions.
- Sync trajectories from Anvil to local storage nightly via
data_management/rclone_backup.sh(scheduled by launchd). - Analyze with
analysis/scripts/analyze_hydration.pyusing MDAnalysis: ion density profiles, RDFs, hydration shell coordination numbers, and ion clustering statistics. - Decompose ΔG(T) → ΔH, ΔS via two temperature finite difference.
- Visualize in VMD (custom
.tclPBC wrap scripts) and OVITO.
- LAMMPS input decks are version controlled; trajectory outputs are not
(see
.gitignore). Raw trajectories live on Anvil scratch and are mirrored via rclone. - Random seeds for
velocity createandfix langevinare recorded in each input deck. - Module and compiler versions are logged at the top of every Slurm job
via
module list.
Supported by the Caltech SURF program and the Fong Lab. Computations performed on Purdue Anvil via ACCESS.