#include "dump2analysis.h" /* DOCUMENT */ /* -m angle */ /* lammpstrjから3原子の角度分布を計算する */ /* A原子(-a, -x, -s)とB原子(-c, -z, -u)で端の原子を指定する。 */ /* B原子(-b, -y, -t)で中心原子を指定する。 */ /* --rcut_abは角度を計算するA-B原子距離のカッとオフ。 default:2.3 */ /* --rcut_bcは角度を計算するB-C原子距離のカッとオフ。 default:2.3 */ void ErrorAngle(){ printf("Required arguments atoms A, atoms B, and atom C\n"); printf("(-a, -x, -s) atom A\n"); printf("(-b, -y, -t) atom B\n"); printf("(-c, -z, -u) atom B\n"); printf("------------------------------------------------------------\n"); printf("Optional arguments for Gr analysis:\n"); printf("--rcut_ab cut-off for A-B bonds [2.3]\n"); printf("--rcut_bc cut-off for B-C bonds [2.3]\n"); printf("------------------------------------------------------------\n"); printf("Example:\n"); printf("dump2analysis -m angle -x Si -y O -z Si -i hoge.lammpstrj -o hoge.angle\n"); exit(0); } void OutputAngle(PARAM *p, int pairs, double *d, double ave, double std){ FILE *fp; int i, j, bunkatu=1800; /* 180degを1800分割, delta_angle = 0.1; */ double delta_angle, min_angle; int *a; double ang; a = malloc(sizeof(int) * bunkatu); delta_angle = 180.0/(double)bunkatu; min_angle = delta_angle * 0.5; for (i=0; ioutfile, "w"); fprintf(fp, "# Rcut a-b: %lf\n", RCUT_AB); fprintf(fp, "# Rcut b-c: %lf\n", RCUT_BC); fprintf(fp, "# Total pairs: %d\n", pairs); fprintf(fp, "# angle: %lf +/- %lf\n", ave, std); for (i=0; ioutfile); } void EstimateAngle(PARAM *param){ FILE *f; HEAD head; ATOMS a, b, c; /* bが中心元素 */ int i, j, k; int s, pairs=0; double x, y, z; double xa, ya, za; double xb, yb, zb; double ab, norm_a, norm_b, angle; double ra, rb, *d = NULL; double ave = 0.0, std = 0.0; if (ArgCheckInputOutput(param) != 0) ErrorAngle(); SetAtomsSteps(param); if (CheckArgAtomSelect(param) != 7) ErrorAngle(); Allocate(&a, param->atoms); Allocate(&b, param->atoms); Allocate(&c, param->atoms); f = fopen(param->infile, "r"); /* 距離の計算 */ for (s=0; ssteps; s++){ if (s%10 == 0) { printf("Calculating Gr step: %d\r", s); fflush(stdout); } /* 原子の選択 */ GetData(f, param, &head, &a, &b, &c); for(i=0; i