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/refine2.c

85 lines
1.7 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>
int refine(double* array, long nx, long ny, long nz, long rx, long ry, long rz, double* r)
{
long x, y, z, cur, cura, curnextlayerx, curlayery, curnextlayery, curlayerz, curnextlayerz;
// double* r=(double*)malloc(sizeof(double)*nx*rx*ny*ry*nz*rz);
// if(r==(double*)NULL) return NULL;
cur=0;
cura=0;
int i, rxint=(int)rx;
clock_t t1, t2;
t1=clock();
for(z=0;z<nz;z++)
{
curlayerz=cur;
curnextlayerz=cur+rz*ny*ry*nx*rx;
for(y=0;y<ny;y++)
{
curlayery=cur;
curnextlayery=cur+ry*nx*rx;
for(x=0;x<nx;x++)
{
/*for(i=0;i<rxint;i++)
r[cur++]=array[cura];
cura++;*/
curnextlayerx=cur+rx;
r[cur++]=array[cura++];
while(cur<curnextlayerx)
r[cur++]=r[cur-2];
}
while(cur<curnextlayery)
r[cur++]=r[curlayery++];
}
while(cur<curnextlayerz)
r[cur++]=r[curlayerz++];
}
t2=clock();
printf("%lf seconds.\n", ((double)(t2-t1))/CLOCKS_PER_SEC);
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;
}