aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlanfer <lanfer@10716dce-81a3-4424-a2c8-48026a0d3035>2000-05-05 08:45:59 +0000
committerlanfer <lanfer@10716dce-81a3-4424-a2c8-48026a0d3035>2000-05-05 08:45:59 +0000
commit575b95f668a005466d8eeb1ecedc565df3adbb72 (patch)
tree20e8796a2cd20c1150f85bb077cf0c21724e1dde /src
parent5f2680aacf6176e3c2366cbbef82f792de2e1076 (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.c2
-rw-r--r--src/CollectData2D.c115
-rw-r--r--src/GetLocalLine.c6
-rw-r--r--src/Hyperslab.h13
-rw-r--r--src/Misc.c15
-rw-r--r--src/TestSlab2D.c65
-rw-r--r--src/make.code.defn2
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);
diff --git a/src/Misc.c b/src/Misc.c
index 9c77b8c..e5e905c 100644
--- a/src/Misc.c
+++ b/src/Misc.c
@@ -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 =