#include "dump2analysis.h" /* DOCUMENT */ /* -m cube_jump */ /* lammpstrjから指定したjump距離のグリッドデータ(cubeファイル)を作成する。 */ /* cubeファイルは、VESTAやVMDでisosurfaceやvolumes urfaceで可視化できる。 */ /* cubeファイルは、原子座標は全ステップの平均座標としている。 */ /* jumpを評価するステップはtauで与える */ /* x, y, zのvexcel分割数はnx, ny, nzで与える */ void ErrorCube_Jump(){ printf("Required arguments atoms A\n"); printf("(-a, -x, -s) atom A\n"); printf("------------------------------------------------------------\n"); printf("Optional arguments for cube analysis:\n"); printf("--nx numebr boxcel on X [100]\n"); printf("--ny numebr boxcel on X [100]\n"); printf("--nz numebr boxcel on X [100]\n"); printf("--tau jump period [1]\n"); printf("------------------------------------------------------------\n"); printf("Example:\n"); printf("dump2analysis -m cube -x Li --cube_type 2 -i hoge.lammpstrj -o hoge.msd\n"); exit(0); } void EstimateCube_Jump(PARAM *param){ int i, j, k; int ix, iy, iz; FILE *f; HEAD *head; ATOMS a; int ***rho; double ***jump; double da, db, dc; double dx, dy, dz, r; double **xx, **yy, **zz; double **fx, **fy, **fz; /* メモリ確保 */ rho = malloc(sizeof(int**) * NZ); jump = malloc(sizeof(double**) * NZ); for (i=0; iAid[0]-1); /* 現在のステップ */ /* steps * atoms * (x, y, z)のメモリ取得 */ xx = malloc(sizeof(double*) * param->steps); yy = malloc(sizeof(double*) * param->steps); zz = malloc(sizeof(double*) * param->steps); fx = malloc(sizeof(double*) * param->steps); fy = malloc(sizeof(double*) * param->steps); fz = malloc(sizeof(double*) * param->steps); for(i=0; isteps; i++){ xx[i] = malloc(sizeof(double) * a.atoms); yy[i] = malloc(sizeof(double) * a.atoms); zz[i] = malloc(sizeof(double) * a.atoms); fx[i] = malloc(sizeof(double) * a.atoms); fy[i] = malloc(sizeof(double) * a.atoms); fz[i] = malloc(sizeof(double) * a.atoms); } /* ヘッダ用のメモリ取得 */ head = malloc(sizeof(HEAD) * param->steps); /* ファイルオープン */ f = fopen(param->infile, "r"); /* 分率座標を全ステップで取得する xx, yy, zz*/ printf("Loading data...\n"); for (i=0; isteps; i++){ GetData(f, param, &head[i], &a, NULL, NULL); for (j=0; jsteps, a.atoms, fx, fy, fz); /* fx, fy, fzから絶対座標を生成 */ for (i=0; isteps; i++){ for (j=0; jsteps - TAU; i++){ printf("\rCalculating step: %d/%d", i, param->steps); fflush(stdout); for (j=0; j