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