You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
simulacion-permeabilidad/fftma_module/ref/refine.c

97 lines
1.8 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
int refine(double* array, long nx, long ny, long nz, int rx, int ry, int rz, double* r)//////, FILE* pf)
{
long x, y, z, curr=0, cura=0, curraux=0, currnext=0, curraux2=0, currnext2=0;
int i, j, k;
///////double* r=(double*)malloc(sizeof(double)*nz*nx*ny*rz*rx*ry);
///////if(r==(double*)NULL) puts("not enough memory output");
/////////////////npywheader(rx*nx, ry*ny, rz*nz, pf);
clock_t t1, t2;
t1=clock();
for(z=0;z<nz;z++)
{
curraux2=curr;
currnext2=curr+rz*ny*ry*nx*rx;
////////////////curr=0;
for(y=0;y<ny;y++)
{
curraux=curr;
currnext=curr+ry*nx*rx;
for(x=0;x<nx;x++)
{
for(i=0;i<rx;i++)
r[curr++]=array[cura];
cura++;
}
for(curr;curr<currnext;curr++)
r[curr]=r[curraux++];
}
for(curr;curr<currnext2;curr++)
r[curr]=r[curraux2++];
//////////////////fwrite(r, sizeof(double), nx*ny*rx*ry, pf);
}
t2=clock();
printf("%lf seconds.\n", ((double)(t2-t1))/CLOCKS_PER_SEC);
free(r);
return 0;
}
int main(int argc, char** argv)
{
long i, j, k, nx, ny, nz, rx, ry, rz;
double* a;
double* r;
if(argc!=7) return -1;
nx=atol(argv[1]);
ny=atol(argv[2]);
nz=atol(argv[3]);
rx=atol(argv[4]);
ry=atol(argv[5]);
rz=atol(argv[6]);
a=(double*)malloc(sizeof(double)*nx*ny*nz);
if(a==(double*)NULL) return -1;
for(i=0;i<nx*ny*nz;i++)
a[i]=(double)i;
r=(double*)malloc(sizeof(double)*nx*rx*ny*ry*nz*rz);
if(r==(double*)NULL) return -1;
refine(a, nx, ny, nz, rx, ry, rz, r);
/*
for(i=0;i<nx*rx*ny*ry*nz*rz;i++)
printf("%lf ", r[i]);
puts("\n");
for(k=0;k<rz*nz;k++){
for(j=0;j<ry*ny;j++){
for(i=0;i<rx*nx;i++)
printf("%lf ", r[k*ny*ry*nx*rx+j*nx*rx+i]);
puts("\n");}
puts("\n\n\n");}
*/
return 0;
}