Files
dump2sq/output.c
T
2022-08-31 19:16:58 +09:00

168 lines
4.8 KiB
C

#include "dump2sq.h"
/* ####################################################################### */
/* ヘッダーの出力 */
/* ####################################################################### */
void OutputHead(COMMAND *com, HEAD *head, TYPE *type, FILE *f, char *x_string){
int i;
/* ヘッダ */
fprintf(f, "#");
for (i=0; i<80; i++) fprintf(f, "-");
fprintf(f, "\n");
fprintf(f, "# Input file: %s\n", com->infile);
fprintf(f, "# R min: %g\n", com->GRmin);
fprintf(f, "# R max: %g\n", com->GRmax);
fprintf(f, "# R delta: %g\n", com->GRdel);
fprintf(f, "# Q min: %g\n", com->SQmin);
fprintf(f, "# Q max: %g\n", com->SQmax);
fprintf(f, "# Q delta: %g\n", com->SQdel);
fprintf(f, "# Total steps: %d\n", com->total_step);
fprintf(f, "#");
for (i=0; i<80; i++) fprintf(f, "-");
fprintf(f, "\n");
fprintf(f, "# Box length: (%g %g %g)\n", head->lx, head->ly, head->lz);
fprintf(f, "# Box angle: (%g %g %g)\n", head->alpha, head->beta, head->gamma);
fprintf(f, "# Atomic number: %d\n", head->atoms);
fprintf(f, "# Number of density: %g\n", head->rho);
fprintf(f, "# ALL ATOMIC TYPE\n");
for (i=0; i<type->types; i++){
fprintf(f, "# %4s: %d\n", type->elem[i], type->ids[i]);
}
fprintf(f, "#");
for (i=0; i<80; i++) fprintf(f, "-");
fprintf(f, "\n");
fprintf(f, "# ALL ATOMIC PAIR\n");
for (i=0; i<type->pairs; i++){
fprintf(f, "# %2d: %-15s\n", i+1, type->elemij[i]);
}
/* 1行 */
fprintf(f, "#");
for (i=0; i<80; i++) fprintf(f, "-");
fprintf(f, "\n");
fprintf(f, "# %12s", x_string);
for (i=0; i<type->pairs; i++){
fprintf(f, "%15s", type->elemij[i]);
}
}
/* ####################################################################### */
/* ファイルに出力 */
/* ####################################################################### */
void OutputCN(COMMAND *com, HEAD *head, TYPE *type, DATASET *cn){
int i, j;
FILE *f;
char outfile[1030];
double **cn_;
cn_ = malloc(sizeof(double*) * cn->n);
for (i=0; i<cn->n; i++) cn_[i] = malloc(sizeof(double) * cn->m);
for (j=0; j<cn->m; j++) cn_[0][j] = cn->y[0][j];
for (i=1; i<cn->n; i++){
for (j=0; j<cn->m; j++){
cn_[i][j] = cn_[i-1][j] + cn->y[i][j];
}
}
sprintf(outfile, "%s.cn", com->outbase);
f = fopen(outfile, "w");
fprintf(f, "# Numebr of Coordination\n");
/* ヘッダ */
OutputHead(com, head, type, f, "r");
fprintf(f, "%15s\n", "Total");
for (i=0; i<cn->n; i++){
fprintf(f, "%24.16e", cn->x[i]);
for (j=0; j<cn->m; j++) {
fprintf(f, " %24.16e", cn_[i][j]);
}
fprintf(f, "\n");
}
printf("%s was generated.\n", outfile);
fclose(f);
}
void OutputGr(COMMAND *com, HEAD *head, TYPE *type, DATASET *gr){
int i, j;
FILE *f;
char outfile[1030];
sprintf(outfile, "%s.gr", com->outbase);
f = fopen(outfile, "w");
fprintf(f, "# Radial distribution function\n");
/* ヘッダ */
OutputHead(com, head, type, f, "r");
fprintf(f, "%15s\n", "Total");
for (i=0; i<gr->n; i++){
fprintf(f, "%24.16e", gr->x[i]);
for (j=0; j<gr->m; j++) {
fprintf(f, " %24.16e", gr->y[i][j]);
}
fprintf(f, "\n");
}
printf("%s was generated.\n", outfile);
fclose(f);
}
/* ####################################################################### */
/* ファイルに出力 */
/* ####################################################################### */
void OutputSQ(COMMAND *com, HEAD *head, TYPE *type, DATASET *sq){
int i, j;
char outfile[1030];
FILE *f;
sprintf(outfile, "%s.sq", com->outbase);
f = fopen(outfile, "w");
/* S(q)データ */
fprintf(f, "# XRD and ND S(Q)\n");
OutputHead(com, head, type, f, "Q");
fprintf(f, "%15s", "Sq-XRD");
fprintf(f, "%15s", "Sq-ND");
fprintf(f, "\n");
/* データ */
for (i=0; i<sq->n; i++){
fprintf(f, "%24.16e", sq->x[i]);
for (j=0; j<sq->m; j++){
fprintf(f, " %24.16e", sq->y[i][j]);
}
fprintf(f, "\n");
}
printf("%s was generated.\n", outfile);
fclose(f);
}
void OutputCoeff(COMMAND *com, HEAD *head, TYPE *type, DATASET *sq){
int i, j;
FILE *f;
char outfile[1030];
sprintf(outfile, "%s.coeff", com->outbase);
f = fopen(outfile, "w");
fprintf(f, "# Neutron scattering length\n");
fprintf(f, "# see: https://www.ncnr.nist.gov/resources/n-lengths/\n");
for (i=0; i<type->types; i++){
fprintf(f, "%s %lf\n", type->elem[i], type->NDcoeff[i]);
}
printf("\n");
fprintf(f, "# X-ray scattering factor\n");
fprintf(f, "# see: xcoeff on https://www.szfki.hu/~nphys/rmc++/downloads.html\n");
fprintf(f, " %12s", "Q");
for (i=0; i<type->types; i++){
fprintf(f, " %12s", type->elem[i]);
}
fprintf(f, "\n");
for (i=0; i<sq->n; i++){
fprintf(f, " %24.16e", sq->x[i]);
for (j=0; j<type->types; j++){
fprintf(f, " %24.16e", type->XRDcoeff[i][j]);
}
fprintf(f, "\n");
}
fclose(f);
printf("%s was generated.\n", outfile);
}