diff options
author | lanfer <lanfer@10716dce-81a3-4424-a2c8-48026a0d3035> | 2000-05-05 08:45:59 +0000 |
---|---|---|
committer | lanfer <lanfer@10716dce-81a3-4424-a2c8-48026a0d3035> | 2000-05-05 08:45:59 +0000 |
commit | 575b95f668a005466d8eeb1ecedc565df3adbb72 (patch) | |
tree | 20e8796a2cd20c1150f85bb077cf0c21724e1dde /src | |
parent | 5f2680aacf6176e3c2366cbbef82f792de2e1076 (diff) |
more stuff
git-svn-id: http://svn.cactuscode.org/arrangements/CactusPUGH/PUGHSlab/trunk@11 10716dce-81a3-4424-a2c8-48026a0d3035
Diffstat (limited to 'src')
-rw-r--r-- | src/CollectData1D.c | 2 | ||||
-rw-r--r-- | src/CollectData2D.c | 115 | ||||
-rw-r--r-- | src/GetLocalLine.c | 6 | ||||
-rw-r--r-- | src/Hyperslab.h | 13 | ||||
-rw-r--r-- | src/Misc.c | 15 | ||||
-rw-r--r-- | src/TestSlab2D.c | 65 | ||||
-rw-r--r-- | src/make.code.defn | 2 |
7 files changed, 186 insertions, 32 deletions
diff --git a/src/CollectData1D.c b/src/CollectData1D.c index 1604468..f731743 100644 --- a/src/CollectData1D.c +++ b/src/CollectData1D.c @@ -115,7 +115,7 @@ int CollectLocalData1D(cGH *GH, int vindex, int vtimelvl, int vdim, locstart = (int*)malloc(vdim*sizeof(int)); locend = (int*)malloc(vdim*sizeof(int)); - ierr = GetLocalLine(GH, vdim, S_l, u_l, ds, len_l, + ierr = GetLocalLine(GH, vdim, S_l, u_l, ds[0], len_l, locstart, locend, &nlocpoints); dsize[0]= nlocpoints; diff --git a/src/CollectData2D.c b/src/CollectData2D.c index 4da603c..e2f1dad 100644 --- a/src/CollectData2D.c +++ b/src/CollectData2D.c @@ -1,4 +1,5 @@ + #include <stdio.h> #include <stdlib.h> #include <math.h> @@ -7,41 +8,103 @@ #include "cctk_Parameters.h" #include "cctk_Arguments.h" -/* MPI message tag */ -#define TAGBASE 1234 +#include "Hyperslab.h" +#include "CactusBase/IOUtil/src/ioGH.h" +#include "CactusPUGH/PUGH/src/include/pugh.h" -int CollectData2D(cGH *GH, int vindex, int vtype, int vtypesize,int vtimelvl, - int vdim, int *S_l, int *u1_l, int *u2_l, int *len_l, - int *dsize, void **dptr) -{ - int ierr; +#define MIN(a,b) ((a)<(b) ? (a) : (b)) +#define MAX(a,b) ((a)>(b) ? (a) : (b)) - ierr = CollectLocalData2D(GH, vindex, vtype, vtypesize, vtimelvl, - vdim, S_l, u1_l, u2_l, len_l, - &loc_dptr, &loc_dcount); - +#define MAX_DIM 3 + + +int CollectData2D(cGH *GH, int vindex, int vtimelvl, int vdim, + int *S_s, int *u_l1, int *u_l2, int *ds, + int len_l1, int len_l2, + void **dptr, int *dsize) +{ + return(0); } -int CollectLocalData2D(cGH *GH, int vindex, int vtype, int vtypesize, int vtimelvl, - int vdim, int *S_l, int *u1_l,int *u2_l, int *len_l, - void **loc_dptr, int *dsize) +int CollectLocalData2D(cGH *GH, int vindex, int vtimelvl, int vdim, + int *S_s, int *u_l1, int *u_l2, int *ds, + int len_l1, int len_l2, + void **loc_dptr, int *idx1_dptr, int *idx2_dptr, int *dsize) { + + int tstart[MAX_DIM], end_l1[MAX_DIM], end_l2[MAX_DIM]; + int gridpnt[MAX_DIM],tpnt[MAX_DIM]; + int l1,l2, lmbd_max, lsh_max; + int ierr; + + int locstart2[3],locend2[3],nlocpoints2; + + int gindex,vtype,vtypesize; + int idim,lincount, tmp; + + void *data = CCTK_VarDataPtrI (GH, vtimelvl, vindex); + + int *idx1, *idx2; + CCTK_REAL *real_dptr = (CCTK_REAL *) *loc_dptr; + + vtype = CCTK_VarTypeI(vindex); + vtypesize = CCTK_VarTypeSize(vtype); + + /* Test for orthogonality */ + tmp=0; + for (idim=0;idim<vdim;idim++) + tmp+=u_l1[idim]*u_l2[idim]; + if (tmp!=0) printf("Error: not orthogonal\n"); + + + /* Calculate maximal length of one arm */ + if (len_l1<0) lmbd_max = 10000; + else lmbd_max = len_l1; + + for (idim=0;idim<vdim;idim++) + if (ds[0]!=0) + lmbd_max = MIN(((GH->cctk_gsh[idim]-S_s[idim])/ds[0]),lmbd_max); + + /* Get a max. local size, + int gridpnt to zero, so we can loop up to maxdim */ + for (idim=0;idim<vdim;idim++) + { + lsh_max = MAX(GH->cctk_lsh[idim], lsh_max); + gridpnt[idim]=0; + } - int idim; - int t1,t2,t3; - int gridpnt[3]; + printf("MAX LAMDA: %d ",lmbd_max); + /* We do not know how many points along the l2 arm, take maximum lsh */ + *loc_dptr = malloc(lsh_max*lmbd_max * vtypesize); - ierr = GetLocalLine(GH, vdim, S_l, u1_l, len_l[0], locstart1, locend1, &nlocpoints1); - ierr = GetLocalLine(GH, vdim, S_l, u1_l, len_l[0], locstart2, locend2, &nlocpoints2); + idx1 = (int*)malloc(lsh_max*lmbd_max * vtypesize); + idx2 = (int*)malloc(lsh_max*lmbd_max * vtypesize); - for (l1=0;l1<nlocpoints1;l1++) - for (l2=0;l2<nlocpoints2;l2++) - { - for (idim=0;idim<vdim;idim++) - gridpnt[idim]=S_l[idim]+l1*u1_l[idim]+l2*u2_l[idim]; - real_ptr[l++] = ((CCTK_REAL*) data)[CCTK_GFINDEX3D(GH,gridpnt[0],gridpnt[1],gridpnt[2])]; - } + idx1_dptr = idx1; + /*$idx2 = idx2_dptr;$*/ + + for (l1=0;l1<lmbd_max;l1++) + { + for (idim=0;idim<vdim;idim++) + tpnt[idim] = S_s[idim]+l1*u_l1[idim]; + + GetLocalLine(GH, vdim, tpnt, u_l2, ds[1], len_l2, + locstart2, locend2, &nlocpoints2); + for (l2=0; l2<nlocpoints2; l2++) + { + for (idim=0;idim<vdim;idim++) + gridpnt[idim] = locstart2[idim]+ l2 * u_l2[idim]; + + /*$real_dptr[lincount] =((CCTK_REAL *) data) + [CCTK_GFINDEX3D(GH,gridpnt[0],gridpnt[1],gridpnt[2])];$*/ + idx1_dptr[lincount] = l1; + /*idx2_dptr[lincount] = l2;$*/ + lincount++; + } + } } + + diff --git a/src/GetLocalLine.c b/src/GetLocalLine.c index 7f7d668..9130fb3 100644 --- a/src/GetLocalLine.c +++ b/src/GetLocalLine.c @@ -48,7 +48,7 @@ int IsPointOnProc_REAL(int dim, int *gownership, CCTK_REAL *pnt) } int GetLocalLine(cGH *GH, - int vardim, int *S_l, int *u_l, int *ds, int len_l, + int vardim, int *S_l, int *u_l, int ds, int len_l, int *locstart, int *locend, int *nlocpoints) { /* variables for proc. surfaces */ @@ -307,14 +307,14 @@ int GetLocalLine(cGH *GH, locstart[0],locstart[1],locstart[2], locend[0],locend[1],locend[2],nlocpoints[0]); - for (idim=0;idim<vardim;idim++) + /*$for (idim=0;idim<vardim;idim++) { locstart[idim] -= GH->cctk_lbnd[idim]; locend[idim] -= GH->cctk_lbnd[idim]; } printf(">>>>> LOCAL START/END : (%d %d %d) -> (%d %d %d) = %d\n", locstart[0],locstart[1],locstart[2], - locend[0],locend[1],locend[2],nlocpoints[0]); + locend[0],locend[1],locend[2],nlocpoints[0]);$*/ return(0); diff --git a/src/Hyperslab.h b/src/Hyperslab.h index 599c0c3..3a894e7 100644 --- a/src/Hyperslab.h +++ b/src/Hyperslab.h @@ -8,7 +8,18 @@ int CollectLocalData1D(cGH *GH, int vindex, int vtimelvl, int vdim, int *S_l, int *u_l, int *ds, int len_l, void **loc_dptr, int *dsize); +int CollectData2D(cGH *GH, int vindex, int vtimelvl, int vdim, + int *S_s, int *u_l1, int *u_l2, int *ds, + int len_l1, int len_l2, + void **dptr, int *dsize); + +int CollectLocalData2D(cGH *GH, int vindex, int vtimelvl, int vdim, + int *S_s, int *u_l1, int *u_l2, int *ds, + int len_l1, int len_l2, + void **dptr, int *idx1_ptr, int *idx2_ptr, int *dsize); + int GetLocalLine(cGH *GH, - int vardim, int *S_l, int *u_l, int *ds, int len_l, + int vardim, int *S_l, int *u_l, int ds, int len_l, int *locstart, int *locend, int *nlocpoints); +int IsOnGlobGrid(cGH *GH, int vdim, int *grdpnt); @@ -1,8 +1,23 @@ +#include <stdio.h> +#include <stdlib.h> +#include <math.h> + +#include "cctk.h" #include "CactusPUGH/PUGH/src/include/pugh.h" +int IsOnGlobGrid(cGH *GH, int vdim, int *grdpnt) +{ + int idim, retval=0; + for (idim=0;idim<vdim;idim++) + if ((grdpnt[idim]<0) || (grdpnt[idim]>GH->cctk_gsh[idim])) + retval-=1; + return(retval); +} + + int CCTKtoMPItype(int cctktype) { int mpitype; diff --git a/src/TestSlab2D.c b/src/TestSlab2D.c new file mode 100644 index 0000000..0dbe3de --- /dev/null +++ b/src/TestSlab2D.c @@ -0,0 +1,65 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <math.h> + +#include "cctk.h" +#include "cctk_Parameters.h" +#include "cctk_Arguments.h" + +#include "Hyperslab.h" +#include "CactusPUGH/PUGH/src/include/pugh.h" +#include "CactusBase/IOUtil/src/ioGH.h" + +#define MAX_DIM 3 +#define MAX_FACE 6 +#define EPS 1e-10 +#define BAD -42 + +#define ABS(a) ((a)<0 ? -(a) : (a)) + + +void TestSlab2D(CCTK_ARGUMENTS) { + DECLARE_CCTK_ARGUMENTS + + int gs[3], di1[3], di2[3]; /* global start/direction (2times) */ + int ds[2]; /* downsampling */ + int ls[3], le[3]; /* local start/end */ + int dsize[1]; /* number of points */ + int nprocs,iproc; /* number of procs */ + + int l; + int *index1, *index2; + + int vindex, vdim, vtimelvl; + CCTK_REAL *dptr; + + /*$vindex = CCTK_VarIndex("hyperslab::tz");$*/ + vindex = CCTK_VarIndex("grid::z"); + vtimelvl = CCTK_NumTimeLevelsFromVarI (vindex) - 1; + vdim = CCTK_GroupDimFromVarI(vindex); + + gs[0]=1; + gs[1]=1; + gs[2]=1; + + di1[0]= 0; + di1[1]= 0; + di1[2]= 1; + + di2[0]= 0; + di2[1]= 1; + di2[2]= 0; + + + ds[0]=1; + ds[1]=2; + + printf("Calling CollectData2D \n"); + CollectLocalData2D(cctkGH, vindex, vtimelvl, vdim, + gs, di1, di2, ds, 145, -1, + &dptr, index1, index2, dsize); + + printf("TestSlab: %d %d\n",dsize[0], dsize[2]); + +} diff --git a/src/make.code.defn b/src/make.code.defn index 77b30bc..a86191c 100644 --- a/src/make.code.defn +++ b/src/make.code.defn @@ -2,7 +2,7 @@ # $Header$ # Source files in this directory -SRCS = GetLocalLine.c TestSlab.c CollectData1D.c Misc.c +SRCS = GetLocalLine.c TestSlab.c TestSlab2D.c CollectData1D.c CollectData2D.c Misc.c # Subdirectories containing source files SUBDIRS = |