toolsを整理した。cn2Iqとcn2Iq.pyを追加した。
This commit is contained in:
+129
@@ -0,0 +1,129 @@
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "string.h"
|
||||
#include "math.h"
|
||||
|
||||
typedef struct{
|
||||
int m; /* 行 */
|
||||
int n; /* 列 */
|
||||
double *x;
|
||||
double **y;
|
||||
}DATA;
|
||||
|
||||
void Init(FILE *cn, FILE *coeff, DATA *rdata, DATA *qdata,
|
||||
DATA *cdata){
|
||||
char buf[1024];
|
||||
int i;
|
||||
int rsize, qsize, pairsize;
|
||||
|
||||
while (fgets(buf, sizeof(buf), cn)){
|
||||
if (buf[0] != '#') break;
|
||||
}
|
||||
rsize = 1;
|
||||
while (fgets(buf, sizeof(buf), cn)){
|
||||
rsize++;
|
||||
}
|
||||
fgets(buf, sizeof(buf), coeff);
|
||||
sscanf(buf, "%d", &qsize);
|
||||
fgets(buf, sizeof(buf), coeff);
|
||||
sscanf(buf, "%d", &pairsize);
|
||||
|
||||
rdata->m = rsize;
|
||||
rdata->n = pairsize;
|
||||
rdata->x = malloc(rsize * sizeof(double));
|
||||
rdata->y = malloc(rsize * sizeof(double*));
|
||||
for (i=0; i<rsize; i++) {
|
||||
rdata->y[i] = malloc(pairsize * sizeof(double));
|
||||
}
|
||||
qdata->m = qsize;
|
||||
qdata->n = pairsize;
|
||||
qdata->x = malloc(qsize * sizeof(double));
|
||||
qdata->y = malloc(qsize * sizeof(double*));
|
||||
cdata->m = qsize;
|
||||
cdata->n = pairsize;
|
||||
cdata->x = malloc(qsize * sizeof(double));
|
||||
cdata->y = malloc(qsize * sizeof(double*));
|
||||
for (i=0; i<qsize; i++) {
|
||||
qdata->y[i] = malloc(pairsize * sizeof(double));
|
||||
cdata->y[i] = malloc(pairsize * sizeof(double));
|
||||
}
|
||||
rewind(cn);
|
||||
rewind(coeff);
|
||||
}
|
||||
|
||||
void SetData(FILE *cn, FILE *coeff, DATA *rdata, DATA *cdata){
|
||||
int i, j;
|
||||
char buf[1024];
|
||||
char *tok;
|
||||
|
||||
while (fgets(buf, sizeof(buf), cn)){
|
||||
if (buf[0] != '#') break;
|
||||
}
|
||||
for (i=0; i<rdata->m; i++){
|
||||
tok = strtok(buf, " "); // 半角スペース区切りでパース
|
||||
rdata->x[i] = atof(tok);
|
||||
for (j=0; j<rdata->n; j++) {
|
||||
tok = strtok(NULL, " ");
|
||||
rdata->y[i][j] = atof(tok);
|
||||
}
|
||||
fgets(buf, sizeof(buf), cn);
|
||||
}
|
||||
/* 積算配位数からC(r)に変換 */
|
||||
for (i=rdata->m-1; i>0; i--){
|
||||
for (j=0; j<rdata->n; j++){
|
||||
rdata->y[i][j] = rdata->y[i][j] - rdata->y[i-1][j];
|
||||
}
|
||||
}
|
||||
/* 原子散乱因子 */
|
||||
for (i=0; i<3; i++){
|
||||
fgets(buf, sizeof(buf), coeff);
|
||||
}
|
||||
for (i=0; i<cdata->m; i++){
|
||||
tok = strtok(buf, " "); // 半角スペース区切りでパース
|
||||
cdata->x[i] = atof(tok);
|
||||
for (j=0; j<cdata->n; j++) {
|
||||
tok = strtok(NULL, " ");
|
||||
cdata->y[i][j] = atof(tok);
|
||||
}
|
||||
fgets(buf, sizeof(buf), coeff);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int argn, char **argv){
|
||||
FILE *cn, *coeff;
|
||||
DATA rdata, qdata, cdata;
|
||||
int i, j, k;
|
||||
double q, r;
|
||||
double Rc;
|
||||
|
||||
cn = fopen(argv[1], "r");
|
||||
coeff = fopen(argv[2], "r");
|
||||
Init(cn, coeff, &rdata, &cdata, &qdata);
|
||||
SetData(cn, coeff, &rdata, &cdata);
|
||||
for (i=0; i<cdata.m; i++) {
|
||||
qdata.x[i] = cdata.x[i];
|
||||
for (j=0; j<cdata.n; j++) {
|
||||
qdata.y[i][j] = 0.0;
|
||||
}
|
||||
}
|
||||
Rc = rdata.x[rdata.m-1];
|
||||
|
||||
#pragma omp parallel for private(j, k, q, r)
|
||||
for (i=0; i<cdata.m; i++){
|
||||
for (j=0; j<cdata.n; j++){
|
||||
for (k=0; k<rdata.m; k++){
|
||||
q = cdata.x[i];
|
||||
r = rdata.x[k];
|
||||
qdata.y[i][j] = qdata.y[i][j] + rdata.y[k][j] * cdata.y[i][j] * sin(q*r)/q/r
|
||||
* sin(M_PI*r/Rc)/(M_PI*r/Rc);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i=0; i<qdata.m; i++){
|
||||
for (j=0; j<qdata.n; j++){
|
||||
printf("%24.16e", qdata.y[i][j]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
Executable
+1150
File diff suppressed because it is too large
Load Diff
Executable
+1071
File diff suppressed because it is too large
Load Diff
Executable
+1183
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user