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.
85 lines
1.7 KiB
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;
|
|
}
|