initial commit
This commit is contained in:
41
create_annealing1.sh
Executable file
41
create_annealing1.sh
Executable file
@@ -0,0 +1,41 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
get_ini_value() {
|
||||||
|
local file=$1
|
||||||
|
local section=$2
|
||||||
|
local key=$3
|
||||||
|
|
||||||
|
awk -F '=' -v section="$section" -v key="$key" '
|
||||||
|
$0 ~ "\\[" section "\\]" { in_section = 1; next }
|
||||||
|
in_section && $1 ~ "^" key"[[:space:]]*$" {
|
||||||
|
gsub(/[[:space:]]+/, "", $2)
|
||||||
|
print $2
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
$0 ~ /^\[/ { in_section = 0 }
|
||||||
|
' "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
simdir="01_an1"
|
||||||
|
|
||||||
|
|
||||||
|
rm -r "$simdir" 2>/dev/null
|
||||||
|
mkdir "$simdir"
|
||||||
|
|
||||||
|
cp topology.top "$simdir/"
|
||||||
|
../replace_params.sh params.ini topology.top --output "$simdir/topology.top"
|
||||||
|
../replace_params.sh params_an1.ini mdp_parameters.mdp --output "$simdir/mdp_parameters.mdp"
|
||||||
|
../replace_params.sh params.ini "$simdir/mdp_parameters.mdp" --output "$simdir/mdp_parameters.mdp"
|
||||||
|
cp ../run.sh "$simdir/"
|
||||||
|
cp "00_em/out/out.gro" "$simdir/gro_start.gro"
|
||||||
|
|
||||||
|
|
||||||
|
annealing=$(../generate_annealing.py -d 50 -l 50 -u 1000 -s 100 -e 2000)
|
||||||
|
|
||||||
|
annealing=$(../generate_annealing.py -d 30 -l 400 -u 950 -s 50 -e 2000)
|
||||||
|
|
||||||
|
echo "" >> "$simdir/mdp_parameters.mdp"
|
||||||
|
echo "annealing = single" >> "$simdir/mdp_parameters.mdp"
|
||||||
|
echo "$annealing" >> "$simdir/mdp_parameters.mdp"
|
||||||
|
|
||||||
|
|
35
create_emin.sh
Executable file
35
create_emin.sh
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
get_ini_value() {
|
||||||
|
local file=$1
|
||||||
|
local section=$2
|
||||||
|
local key=$3
|
||||||
|
|
||||||
|
awk -F '=' -v section="$section" -v key="$key" '
|
||||||
|
$0 ~ "\\[" section "\\]" { in_section = 1; next }
|
||||||
|
in_section && $1 ~ "^" key"[[:space:]]*$" {
|
||||||
|
gsub(/[[:space:]]+/, "", $2)
|
||||||
|
print $2
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
$0 ~ /^\[/ { in_section = 0 }
|
||||||
|
' "$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
simdir="00_em"
|
||||||
|
|
||||||
|
|
||||||
|
rm -r "$simdir" 2>/dev/null
|
||||||
|
mkdir "$simdir"
|
||||||
|
|
||||||
|
cp topology.top "$simdir/"
|
||||||
|
../replace_params.sh params.ini topology.top --output "$simdir/topology.top"
|
||||||
|
../replace_params.sh params_emin.ini mdp_parameters.mdp --output "$simdir/mdp_parameters.mdp"
|
||||||
|
../replace_params.sh params.ini "$simdir/mdp_parameters.mdp" --output "$simdir/mdp_parameters.mdp"
|
||||||
|
cp ../run.sh "$simdir/"
|
||||||
|
cp "../gro_$(get_ini_value params.ini params model).gro" "$simdir/gro_start.gro"
|
||||||
|
|
||||||
|
echo "emstep = 0.001" >> $simdir/mdp_parameters.mdp
|
||||||
|
|
||||||
|
|
139
create_sim.py
Executable file
139
create_sim.py
Executable file
@@ -0,0 +1,139 @@
|
|||||||
|
#!/usr/bin/python3.12
|
||||||
|
import argparse
|
||||||
|
import configparser
|
||||||
|
import math
|
||||||
|
import os
|
||||||
|
|
||||||
|
def compute_dependent(params):
|
||||||
|
model = params["model"]
|
||||||
|
|
||||||
|
# Charge neutrality
|
||||||
|
params["charge_B"] = round(params["charge"]/2, 5)
|
||||||
|
params["charge_A"] = -2 * params["charge_B"]
|
||||||
|
|
||||||
|
# Relative sigma and epsilon
|
||||||
|
params["sigma_A"] = params["sigma"]
|
||||||
|
params["epsilon_A"] = params["sigma"]
|
||||||
|
sigma_A = params["sigma"]
|
||||||
|
epsilon_A = params["epsilon"]
|
||||||
|
params["sigma_B"] = round(params["sigma_rel"] * sigma_A, 5)
|
||||||
|
params["epsilon_B"] = round(params["epsilon_rel"] * epsilon_A, 5)
|
||||||
|
params["d_AB"] = round(params["r_AB"] * sigma_A, 5)
|
||||||
|
params["d_AM"] = round(params["r_AM"] * sigma_A, 5)
|
||||||
|
|
||||||
|
# Mass: either specified or computed to give τ ≈ 0.1
|
||||||
|
if params["mass"] is None:
|
||||||
|
# Let total mass m = 2 * m_A, solve: τ = σ * sqrt(m/ε) ≈ 0.1
|
||||||
|
tau_target = 0.05 * 10
|
||||||
|
m_total = (tau_target / sigma_A)**2 * epsilon_A
|
||||||
|
m_atom = m_total / 2
|
||||||
|
params["mass"] = round(m_atom, 5)
|
||||||
|
|
||||||
|
|
||||||
|
params["d_BB"] = round(2 * params["d_AB"] * math.sin(math.radians(params["angle_ABA"]) / 2), 5)
|
||||||
|
params["dummy_ab"] = round(params["d_AM"] / (2 * math.cos(math.radians(params["angle_ABA"]) / 2)), 5)
|
||||||
|
|
||||||
|
return params
|
||||||
|
|
||||||
|
def clean_params(params):
|
||||||
|
if params["model"] != "4point":
|
||||||
|
for k in ["r_AM", "d_AM", "d_BB", "dummy_ab"]:
|
||||||
|
params.pop(k)
|
||||||
|
if params["model"] != "3point" and params["model"] != "4point":
|
||||||
|
for k in ["r_AB", "d_AB", "angle_ABA"]:
|
||||||
|
params.pop(k)
|
||||||
|
return params
|
||||||
|
|
||||||
|
def format_directory_name(params):
|
||||||
|
"""Generate a short directory name from active parameters."""
|
||||||
|
keys_order = [
|
||||||
|
("sigma", "s"),
|
||||||
|
("epsilon", "e"),
|
||||||
|
("charge", "q"),
|
||||||
|
("sigma_rel", "sr"),
|
||||||
|
("epsilon_rel", "er"),
|
||||||
|
("r_AB", "d"),
|
||||||
|
("angle_ABA", "a"),
|
||||||
|
("r_AM", "m"),
|
||||||
|
]
|
||||||
|
|
||||||
|
parts = [params["model"]]
|
||||||
|
parts.append(f"P{params['pressure']}")
|
||||||
|
|
||||||
|
for key, prefix in keys_order:
|
||||||
|
if key in params:
|
||||||
|
val = params[key]
|
||||||
|
parts.append(f"{prefix}{val:.5f}".rstrip("0").rstrip("."))
|
||||||
|
|
||||||
|
parts.append(f"v{params['version']}")
|
||||||
|
return "_".join(parts)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="Generate directory and parameter file for A-B molecular systems.")
|
||||||
|
parser.add_argument("--version", type=int, default=1, help="Version identifier for parameter sweep")
|
||||||
|
parser.add_argument("--model", choices=["atomistic", "3point", "4point"], default='atomistic')
|
||||||
|
parser.add_argument("--pressure", type=float, default=1.0)
|
||||||
|
|
||||||
|
|
||||||
|
# Independent parameters
|
||||||
|
parser.add_argument("--sigma", type=float, default=0.3)
|
||||||
|
parser.add_argument("--epsilon", type=float, default=0.8)
|
||||||
|
parser.add_argument("--q", type=float, default=1.0)
|
||||||
|
|
||||||
|
# Relative parameters
|
||||||
|
parser.add_argument("--sigma_rel", type=float, default=0.1)
|
||||||
|
parser.add_argument("--epsilon_rel", type=float, default=0.1)
|
||||||
|
|
||||||
|
# Mass (optional, will be calculated if omitted)
|
||||||
|
parser.add_argument("--mass", type=float, default=None)
|
||||||
|
|
||||||
|
# Geometry for bonded/virtual_site
|
||||||
|
parser.add_argument("--r_AB", type=float, default=0.33334)
|
||||||
|
parser.add_argument("--angle_ABA", type=float, default=109.5) # 104.52
|
||||||
|
parser.add_argument("--r_AM", type=float, default=0.4)
|
||||||
|
|
||||||
|
# Output
|
||||||
|
parser.add_argument("--output", type=str, default="params.ini")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
params = {
|
||||||
|
"version": args.version,
|
||||||
|
"model": args.model,
|
||||||
|
"nmol": 1000,
|
||||||
|
"pressure": args.pressure,
|
||||||
|
"sigma": args.sigma,
|
||||||
|
"sigma_rel": args.sigma_rel,
|
||||||
|
"epsilon": args.epsilon,
|
||||||
|
"epsilon_rel": args.epsilon_rel,
|
||||||
|
"charge": args.q,
|
||||||
|
"mass": args.mass,
|
||||||
|
"r_AB": args.r_AB,
|
||||||
|
"angle_ABA": args.angle_ABA,
|
||||||
|
"r_AM": args.r_AM,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Compute dependent values
|
||||||
|
params = compute_dependent(params)
|
||||||
|
params = clean_params(params)
|
||||||
|
|
||||||
|
dir_name = format_directory_name(params)
|
||||||
|
if os.path.exists(dir_name):
|
||||||
|
print(f"Directory {dir_name} already exists. Aborting.")
|
||||||
|
return
|
||||||
|
os.makedirs(dir_name)
|
||||||
|
|
||||||
|
# Save to file
|
||||||
|
config_path = os.path.join(dir_name, args.output)
|
||||||
|
with open(config_path, "w") as f:
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config["params"] = params
|
||||||
|
config.write(f)
|
||||||
|
|
||||||
|
print(f"Parameter file written to {config_path}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
97
generate_annealing.py
Executable file
97
generate_annealing.py
Executable file
@@ -0,0 +1,97 @@
|
|||||||
|
#!/usr/bin/python3.12
|
||||||
|
import argparse
|
||||||
|
import math
|
||||||
|
|
||||||
|
def round_dynamic(x, rel_tol=1e-3, max_decimals=6, max_negative_decimals=3):
|
||||||
|
"""
|
||||||
|
Dynamically round x so that the relative error is within rel_tol.
|
||||||
|
Supports negative decimals for large values.
|
||||||
|
"""
|
||||||
|
if x == 0:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
# Determine the required number of decimals (can be negative)
|
||||||
|
decimals = -int(math.floor(math.log10(rel_tol * abs(x))))
|
||||||
|
|
||||||
|
# Clamp within allowed range
|
||||||
|
decimals = max(-max_negative_decimals, min(max_decimals, decimals))
|
||||||
|
|
||||||
|
if decimals >= 0:
|
||||||
|
return round(x, decimals)
|
||||||
|
else:
|
||||||
|
# Round to nearest 10^(-decimals)
|
||||||
|
factor = 10 ** (-decimals)
|
||||||
|
return round(x / factor) * factor
|
||||||
|
|
||||||
|
def generate_temperature_list_dynamic(dT=10, Tmin=10, Tmax=5000, rel_tol=5e-3):
|
||||||
|
r = (300 - dT) / 300.0
|
||||||
|
|
||||||
|
temps_down = []
|
||||||
|
T = 300
|
||||||
|
while T > Tmin:
|
||||||
|
T *= r
|
||||||
|
if T < Tmin:
|
||||||
|
break
|
||||||
|
temps_down.append(T)
|
||||||
|
|
||||||
|
inv_r = 1.0 / r
|
||||||
|
temps_up = []
|
||||||
|
T = 300
|
||||||
|
while T < Tmax:
|
||||||
|
T *= inv_r
|
||||||
|
if T > Tmax:
|
||||||
|
break
|
||||||
|
temps_up.append(T)
|
||||||
|
|
||||||
|
all_T = list(reversed(temps_down)) + [300.0] + temps_up
|
||||||
|
|
||||||
|
# Apply dynamic rounding
|
||||||
|
rounded_T = [round_dynamic(t, rel_tol=rel_tol) for t in all_T]
|
||||||
|
|
||||||
|
return rounded_T
|
||||||
|
|
||||||
|
def generate_temperature_list(dT=10, Tmin=10, Tmax=5000, rel_tol=5e-3):
|
||||||
|
dT = (Tmax - Tmin) / 20
|
||||||
|
all_T = [i*dT+Tmin for i in range(21)]
|
||||||
|
|
||||||
|
# Apply dynamic rounding
|
||||||
|
rounded_T = [round_dynamic(t, rel_tol=rel_tol) for t in all_T]
|
||||||
|
|
||||||
|
return rounded_T
|
||||||
|
|
||||||
|
def generate_times_list(npoints, start_time, end_time):
|
||||||
|
if npoints == 1:
|
||||||
|
return [0.0]
|
||||||
|
duration = end_time - start_time
|
||||||
|
interval = duration / (npoints - 1)
|
||||||
|
return [round(start_time + i * interval, 3) for i in range(npoints)]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="Generate annealing times and temperatures for GROMACS.")
|
||||||
|
parser.add_argument("-d", "--dT", type=float, default=20.0, help="Temperature step size")
|
||||||
|
parser.add_argument("-l", "--Tmin", type=float, default=10.0, help="Minimum temperature")
|
||||||
|
parser.add_argument("-u", "--Tmax", type=float, default=5000.0, help="Maximum temperature")
|
||||||
|
parser.add_argument("-r", "--rel_tol", type=float, default=5e-3, help="Relative tolerance for rounding")
|
||||||
|
parser.add_argument("-s", "--start_time", type=float, default=0, help="Start time in fs")
|
||||||
|
parser.add_argument("-e", "--end_time", type=float, required=True, help="End time in fs")
|
||||||
|
parser.add_argument("-c", "--cooling", action='store_true', help="Do cooling instead of heating")
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
#temps = generate_temperature_list_dynamic(args.dT, args.Tmin, args.Tmax, args.rel_tol)
|
||||||
|
temps = generate_temperature_list(args.dT, args.Tmin, args.Tmax, args.rel_tol)
|
||||||
|
if args.cooling:
|
||||||
|
temps = list(reversed(temps))
|
||||||
|
|
||||||
|
if args.start_time > 0:
|
||||||
|
temps = [temps[0]] + temps # hold first temperature
|
||||||
|
times = [0.0] + generate_times_list(len(temps) - 1, args.start_time, args.end_time)
|
||||||
|
else:
|
||||||
|
times = generate_times_list(len(temps), args.start_time, args.end_time)
|
||||||
|
|
||||||
|
print(f"annealing-npoints = {len(times)}")
|
||||||
|
print("annealing-time = " + " ".join(f"{t:.3f}" for t in times))
|
||||||
|
print("annealing-temp = " + " ".join(f"{t:.2f}" for t in temps))
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
57
generate_temperatures.py
Executable file
57
generate_temperatures.py
Executable file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/usr/bin/python3.12
|
||||||
|
import numpy as np
|
||||||
|
import math
|
||||||
|
|
||||||
|
def round_dynamic(x, rel_tol=1e-3, max_decimals=6, max_negative_decimals=3):
|
||||||
|
"""
|
||||||
|
Dynamically round x so that the relative error is within rel_tol.
|
||||||
|
Supports negative decimals for large values.
|
||||||
|
"""
|
||||||
|
if x == 0:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
# Determine the required number of decimals (can be negative)
|
||||||
|
decimals = -int(math.floor(math.log10(rel_tol * abs(x))))
|
||||||
|
|
||||||
|
# Clamp within allowed range
|
||||||
|
decimals = max(-max_negative_decimals, min(max_decimals, decimals))
|
||||||
|
|
||||||
|
if decimals >= 0:
|
||||||
|
return round(x, decimals)
|
||||||
|
else:
|
||||||
|
# Round to nearest 10^(-decimals)
|
||||||
|
factor = 10 ** (-decimals)
|
||||||
|
return round(x / factor) * factor
|
||||||
|
|
||||||
|
def generate_temperature_list_dynamic(dT=10, Tmin=10, Tmax=5000, rel_tol=5e-3):
|
||||||
|
r = (300 - dT) / 300.0
|
||||||
|
|
||||||
|
temps_down = []
|
||||||
|
T = 300
|
||||||
|
while T > Tmin:
|
||||||
|
T *= r
|
||||||
|
if T < Tmin:
|
||||||
|
break
|
||||||
|
temps_down.append(T)
|
||||||
|
|
||||||
|
inv_r = 1.0 / r
|
||||||
|
temps_up = []
|
||||||
|
T = 300
|
||||||
|
while T < Tmax:
|
||||||
|
T *= inv_r
|
||||||
|
if T > Tmax:
|
||||||
|
break
|
||||||
|
temps_up.append(T)
|
||||||
|
|
||||||
|
all_T = np.array(temps_down[::-1] + [300.0] + temps_up)
|
||||||
|
|
||||||
|
# Apply dynamic rounding
|
||||||
|
rounded_T = [round_dynamic(t, rel_tol=rel_tol) for t in all_T]
|
||||||
|
rounded_T = np.unique(rounded_T)
|
||||||
|
|
||||||
|
return rounded_T
|
||||||
|
|
||||||
|
T = generate_temperature_list_dynamic(dT=30, rel_tol=5e-3)
|
||||||
|
print(len(T))
|
||||||
|
print(T)
|
||||||
|
print(np.linspace(0, 100000, len(T), endpoint=True))
|
47
replace_params.sh
Executable file
47
replace_params.sh
Executable file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [[ $# -lt 2 ]]; then
|
||||||
|
echo "Usage: $0 <params.ini> <template> [--output <output_file>]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
PARAMS_FILE="$1"
|
||||||
|
TEMPLATE_FILE="$2"
|
||||||
|
OUTPUT_FILE="${TEMPLATE_FILE}.out"
|
||||||
|
|
||||||
|
# Optional --output <filename>
|
||||||
|
if [[ "$3" == "--output" && -n "$4" ]]; then
|
||||||
|
OUTPUT_FILE="$4"
|
||||||
|
fi
|
||||||
|
|
||||||
|
declare -A PARAMS
|
||||||
|
|
||||||
|
# Load params.ini (ignore [section] headers)
|
||||||
|
while IFS='=' read -r key value; do
|
||||||
|
# Trim whitespace and ignore comments/sections
|
||||||
|
key="${key%%\#*}" # remove inline comments
|
||||||
|
value="${value%%\#*}"
|
||||||
|
key="$(echo "$key" | xargs)" # trim leading/trailing whitespace
|
||||||
|
value="$(echo "$value" | xargs)"
|
||||||
|
[[ -z "$key" || "$key" =~ ^\[.*\]$ ]] && continue
|
||||||
|
|
||||||
|
key_upper=$(echo "$key" | tr '[:lower:]' '[:upper:]')
|
||||||
|
PARAMS["$key_upper"]="$value"
|
||||||
|
done < "$PARAMS_FILE"
|
||||||
|
|
||||||
|
# Read template into a variable
|
||||||
|
template=$(<"$TEMPLATE_FILE")
|
||||||
|
|
||||||
|
# Replace placeholders (only when surrounded by spaces)
|
||||||
|
for key in "${!PARAMS[@]}"; do
|
||||||
|
val="${PARAMS[$key]}"
|
||||||
|
# Use sed to do space-surrounded substitution
|
||||||
|
template=$(echo "$template" | sed -E "s/([[:space:]])$key([[:space:]])/$val/g")
|
||||||
|
done
|
||||||
|
|
||||||
|
# Save to output file
|
||||||
|
echo "$template" > "$OUTPUT_FILE"
|
||||||
|
echo "Wrote output to $OUTPUT_FILE"
|
||||||
|
|
53
run.sh
Executable file
53
run.sh
Executable file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/bin/bash -l
|
||||||
|
|
||||||
|
#SBATCH --partition=normal
|
||||||
|
#SBATCH --ntasks=1
|
||||||
|
#SBATCH --cpus-per-task=8
|
||||||
|
#SBATCH --gres=gpu:1
|
||||||
|
#SBATCH --exclude=linux-05,linux-08,linux-02,linux-03,linux-04,linux-07
|
||||||
|
|
||||||
|
#if [ "$(gmx --version | grep "GROMACS version")" != GROMACS*2025.2* ] ; then
|
||||||
|
# echo "Version loaded is not 2025.2! Exiting!"
|
||||||
|
# exit 1
|
||||||
|
#fi
|
||||||
|
|
||||||
|
if [ -n "$SLURM_CPUS_PER_TASK" ]; then
|
||||||
|
NT="-nt $SLURM_CPUS_PER_TASK"
|
||||||
|
elif [ $(nproc) -lt 9 ] ; then
|
||||||
|
NT="-nt $(nproc)"
|
||||||
|
else
|
||||||
|
NT="-nt 8"
|
||||||
|
fi
|
||||||
|
|
||||||
|
WORKDIR="$(dirname $(readlink -f "$0"))"
|
||||||
|
if [ "${WORKDIR%/*}" = "/var/lib/slurm/slurmd" ] ; then
|
||||||
|
WORKDIR="$(pwd)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$WORKDIR/out"
|
||||||
|
|
||||||
|
export GMX_MAXCONSTRWARN=-1;
|
||||||
|
gmx -nobackup grompp \
|
||||||
|
-f $WORKDIR/mdp_parameters.mdp \
|
||||||
|
-o $WORKDIR/tpr_run.tpr \
|
||||||
|
-c $WORKDIR/gro_start.gro \
|
||||||
|
-r $WORKDIR/gro_start.gro \
|
||||||
|
-p $WORKDIR/topology.top \
|
||||||
|
-po $WORKDIR/out/mdp_mdout.mdp \
|
||||||
|
-maxwarn 6
|
||||||
|
|
||||||
|
if [ $? != 0 ] ; then
|
||||||
|
echo "grompp failed, exiting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
gmx mdrun \
|
||||||
|
-s $WORKDIR/tpr_run.tpr \
|
||||||
|
-o $WORKDIR/out/trr_traj.trr \
|
||||||
|
-c $WORKDIR/out/out.gro \
|
||||||
|
-x $WORKDIR/out/xtc_traj.xtc \
|
||||||
|
-e $WORKDIR/out/edr_energy.edr \
|
||||||
|
-g $WORKDIR/out/log.log \
|
||||||
|
-cpo $WORKDIR/out/state.cpt \
|
||||||
|
-cpi $WORKDIR/out/state.cpt \
|
||||||
|
-cpt 1 -notunepme -v $NT
|
147
setup_sim.sh
Executable file
147
setup_sim.sh
Executable file
@@ -0,0 +1,147 @@
|
|||||||
|
#!/bin/bash -l
|
||||||
|
|
||||||
|
usage() { echo "Usage: $0 [-d basedirectory ]" 1>&2; exit 1; }
|
||||||
|
|
||||||
|
DIRECTORY="."
|
||||||
|
|
||||||
|
while getopts "d:" opt; do
|
||||||
|
case $opt in
|
||||||
|
d )
|
||||||
|
DIRECTORY=$OPTARG
|
||||||
|
;;
|
||||||
|
h )
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
\? )
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
cd $DIRECTORY
|
||||||
|
|
||||||
|
#=====================================================================================
|
||||||
|
cat > mdp_parameters.mdp << EOF
|
||||||
|
integrator = INTEGRATOR
|
||||||
|
dt = 0.001
|
||||||
|
nsteps = NSTEPS
|
||||||
|
nstcomm = 10
|
||||||
|
|
||||||
|
nstlog = NLOG
|
||||||
|
nstcalcenergy = 10
|
||||||
|
nstenergy = NENERGY
|
||||||
|
nstxout-compressed = NSTXOUT
|
||||||
|
compressed-x-precision = 1000
|
||||||
|
energygrps = system
|
||||||
|
|
||||||
|
rlist = 1.2
|
||||||
|
nstlist = 10
|
||||||
|
|
||||||
|
coulombtype = pme
|
||||||
|
rcoulomb = 1.2
|
||||||
|
coulomb-modifier = potential-shift-verlet
|
||||||
|
vdwtype = pme
|
||||||
|
rvdw = 1.2
|
||||||
|
vdw-modifier = potential-shift-verlet
|
||||||
|
fourierspacing = 0.144
|
||||||
|
|
||||||
|
tcoupl = v-rescale
|
||||||
|
tau_t = TAUT
|
||||||
|
gen_vel = yes
|
||||||
|
gen_temp = TEMP
|
||||||
|
ref_t = TEMP
|
||||||
|
tc-grps = system
|
||||||
|
|
||||||
|
pcoupl = PCOUPL
|
||||||
|
tau_p = TAUP
|
||||||
|
ref_p = PRESSURE
|
||||||
|
compressibility = 4.5e-5
|
||||||
|
|
||||||
|
nstpcouple = 10
|
||||||
|
nsttcouple = 10
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
#=====================================================================================
|
||||||
|
cat > params_emin.ini << EOF
|
||||||
|
INTEGRATOR = steep
|
||||||
|
NSTEPS = 10000
|
||||||
|
NLOG = 100
|
||||||
|
NENERGY = 100
|
||||||
|
NSTXOUT = 100
|
||||||
|
TAUT = 1.0
|
||||||
|
TEMP = 300
|
||||||
|
PCOUPL = no
|
||||||
|
TCOUPL = no
|
||||||
|
TAUP = 1.0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > params_an1.ini << EOF
|
||||||
|
INTEGRATOR = md
|
||||||
|
NSTEPS = 2000000
|
||||||
|
NLOG = 1000
|
||||||
|
NENERGY = 100
|
||||||
|
NSTXOUT = 1000
|
||||||
|
TCOUPL = v-rescale
|
||||||
|
TAUT = 0.5
|
||||||
|
TEMP = 10.0
|
||||||
|
PCOUPL = c-rescale
|
||||||
|
TAUP = 1.0
|
||||||
|
EOF
|
||||||
|
|
||||||
|
#=====================================================================================
|
||||||
|
|
||||||
|
cat > topology.top << EOF
|
||||||
|
[ defaults ]
|
||||||
|
; nbfunc comb-rule gen-pairs fudgeLJ fudgeQQ
|
||||||
|
1 2 yes 1.0 1.0
|
||||||
|
|
||||||
|
[atomtypes]
|
||||||
|
;name mass charge ptype sigma epsilon
|
||||||
|
A MASS 0.000 A SIGMA_A EPSILON_A
|
||||||
|
B MASS 0.000 A SIGMA_B EPSILON_B
|
||||||
|
D 0 0.000 D 0.0 0.0
|
||||||
|
|
||||||
|
[moleculetype]
|
||||||
|
; name nrexcl
|
||||||
|
L 1
|
||||||
|
|
||||||
|
[atoms]
|
||||||
|
; nr type resnr residu atom cgnr charge
|
||||||
|
1 A 1 L A 1 0 MASS
|
||||||
|
2 B 1 L B1 1 CHARGE_B MASS
|
||||||
|
3 B 1 L B2 1 CHARGE_B MASS
|
||||||
|
4 D 1 L D 1 CHARGE_A 0.0
|
||||||
|
|
||||||
|
[settles]
|
||||||
|
;i funct doh dhh
|
||||||
|
1 1 D_AB D_BB
|
||||||
|
|
||||||
|
|
||||||
|
[dummies3]
|
||||||
|
; Dummy from funct a b
|
||||||
|
4 1 2 3 1 DUMMY_AB DUMMY_AB
|
||||||
|
|
||||||
|
[exclusions]
|
||||||
|
1 2 3 4
|
||||||
|
2 1 3 4
|
||||||
|
3 1 2 4
|
||||||
|
4 1 2 3
|
||||||
|
|
||||||
|
[system]
|
||||||
|
MODEL
|
||||||
|
|
||||||
|
[molecules]
|
||||||
|
L NMOL
|
||||||
|
EOF
|
||||||
|
|
||||||
|
#=====================================================================================
|
||||||
|
bash ../create_emin.sh
|
||||||
|
bash ../create_annealing1.sh
|
||||||
|
|
||||||
|
|
||||||
|
#=====================================================================================
|
||||||
|
|
||||||
|
echo "finished and simulation directory $DIRECTORY created and filled"
|
||||||
|
ls
|
||||||
|
exit 0
|
4003
templates/4point.gro
Executable file
4003
templates/4point.gro
Executable file
File diff suppressed because it is too large
Load Diff
4003
templates/bak.gro
Executable file
4003
templates/bak.gro
Executable file
File diff suppressed because it is too large
Load Diff
7
templates/single.gro
Executable file
7
templates/single.gro
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
SOL tip4p/2005 t= 8254.00000 step= 4127000
|
||||||
|
4
|
||||||
|
1SOL OW 1 1.982 1.987 2.025
|
||||||
|
1SOL HW1 2 2.020 2.075 2.021
|
||||||
|
1SOL HW2 3 2.006 1.947 1.941
|
||||||
|
1SOL MW 4 1.990 1.993 2.013
|
||||||
|
4.00000 4.00000 4.00000
|
Reference in New Issue
Block a user