HARM
harm and utilities
 All Data Structures Files Functions Variables Typedefs Macros Pages
Macros
global.loops.manypoints.h File Reference

Multi-point loop related definitions/macros. More...

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define USE_MEMCPY   1
 MOST GENERAL LOOP copy. More...
 
#define GENFORALL(iter, src, dest, numelem)   memcpy(dest, src, numelem*sizeof(src[0]))
 applies to continugous memory regions (i.e. feed single pointer for source, size of data to copy in its own dimensions) More...
 
#define GENFORALLOVERLAP(iter, src, dest, numelem)   memmove(dest, src, numelem*sizeof(src[0]))
 
#define LOOPF3   for(k=INFULL3;k<=OUTFULL3;k++)
 Many-point loops (but not computational) More...
 
#define LOOPF2   for(j=INFULL2;j<=OUTFULL2;j++)
 
#define LOOPF1   for(i=INFULL1;i<=OUTFULL1;i++)
 
#define LOOPFPM3   for(k=INFULL3-SHIFT3;k<=OUTFULL3+SHIFT3;k++)
 only used to initialize emf[] More...
 
#define LOOPFPM2   for(j=INFULL2-SHIFT2;j<=OUTFULL2+SHIFT2;j++)
 
#define LOOPFPM1   for(i=INFULL1-SHIFT1;i<=OUTFULL1+SHIFT1;i++)
 
#define LOOPFP13   for(k=INFULL3;k<=OUTFULLP13;k++)
 full loop + 1 on outer edge for emf or corner quantities More...
 
#define LOOPFP12   for(j=INFULL2;j<=OUTFULLP12;j++)
 
#define LOOPFP11   for(i=INFULL1;i<=OUTFULLP11;i++)
 
#define LOOPH3   for(k=INHALF3;k<=OUTHALF3;k++)
 full loop + 1 (shift away from boundary) on inner edge for comptuing emf or corner quantities More...
 
#define LOOPH2   for(j=INHALF2;j<=OUTHALF2;j++)
 
#define LOOPH1   for(i=INHALF1;i<=OUTHALF1;i++)
 
#define LOOPP13   for(k=INP13;k<=OUTP13;k++)
 
#define LOOPP12   for(j=INP12;j<=OUTP12;j++)
 
#define LOOPP11   for(i=INP11;i<=OUTP11;i++)
 
#define LOOPN3   for(k=0;k<=N3-1;k++)
 
#define LOOPN2   for(j=0;j<=N2-1;j++)
 
#define LOOPN1   for(i=0;i<=N1-1;i++)
 
#define LOOPFMHP3   for(k=INFULL3;k<=OUTHALF3;k++)
 
#define LOOPFMHP2   for(j=INFULL2;j<=OUTHALF2;j++)
 
#define LOOPFMHP1   for(i=INFULL1;i<=OUTHALF1;i++)
 
#define LOOPHMFP3   for(k=INHALF3;k<=OUTFULL3;k++)
 
#define LOOPHMFP2   for(j=INHALF2;j<=OUTFULL2;j++)
 
#define LOOPHMFP1   for(i=INHALF1;i<=OUTFULL1;i++)
 
#define LOOPHP3   for(k=0;k<=OUTHALF3;k++)
 
#define LOOPHP2   for(j=0;j<=OUTHALF2;j++)
 
#define LOOPHP1   for(i=0;i<=OUTHALF1;i++)
 
#define LOOPINT3   for(k=intix3;k<intox3;k++)
 
#define LOOPINT2   for(j=intix2;j<intox2;j++)
 
#define LOOPINT1   for(i=intix1;i<intox1;i++)
 
#define SUPERGENLOOP1(i, istart, istop, di)   for((i)=(istart);(di>0 ? (i)<=(istop) : (i)>=(istop)); (i)+=(di))
 SUPERGEN and GEN are super general and general, but still to be used with only spatial arrays related to spatial (N1,N2,N3) directions in i,j,k. More...
 
#define SUPERGENLOOP2(j, jstart, jstop, dj)   for((j)=(jstart);(dj>0 ? (j)<=(jstop) : (j)>=(jstop)); (j)+=(dj))
 
#define SUPERGENLOOP3(k, kstart, kstop, dk)   for((k)=(kstart);(dk>0 ? (k)<=(kstop) : (k)>=(kstop)); (k)+=(dk))
 
#define GENLOOP1(i, istart, istop)   SUPERGENLOOP1(i,istart,istop,1)
 
#define GENLOOP2(j, jstart, jstop)   SUPERGENLOOP2(j,jstart,jstop,1)
 
#define GENLOOP3(k, kstart, kstop)   SUPERGENLOOP3(k,kstart,kstop,1)
 
#define ZSLOOP1(istart, istop)   SUPERGENLOOP1(i,istart,istop,1)
 
#define ZSLOOP2(jstart, jstop)   SUPERGENLOOP2(j,jstart,jstop,1)
 
#define ZSLOOP3(kstart, kstop)   SUPERGENLOOP3(k,kstart,kstop,1)
 
#define LOOPC3   LOOPN3
 
#define LOOPC2   LOOPN2
 
#define LOOPC1   LOOPN1
 
#define SUPERGENLOOP(i, j, k, istart, istop, jstart, jstop, kstart, kstop, di, dj, dk)   LOOPORDER1(SUPERGENLOOP1(i,istart,istop,di),SUPERGENLOOP2(j,jstart,jstop,dj),SUPERGENLOOP3(k,kstart,kstop,dk)) LOOPORDER2(SUPERGENLOOP1(i,istart,istop,di),SUPERGENLOOP2(j,jstart,jstop,dj),SUPERGENLOOP3(k,kstart,kstop,dk)) LOOPORDER3(SUPERGENLOOP1(i,istart,istop,di),SUPERGENLOOP2(j,jstart,jstop,dj),SUPERGENLOOP3(k,kstart,kstop,dk))
 below are different ways of combining each spatial direction More...
 
#define GENLOOP(i, j, k, istart, istop, jstart, jstop, kstart, kstop)   LOOPORDER1(GENLOOP1(i,istart,istop),GENLOOP2(j,jstart,jstop),GENLOOP3(k,kstart,kstop)) LOOPORDER2(GENLOOP1(i,istart,istop),GENLOOP2(j,jstart,jstop),GENLOOP3(k,kstart,kstop)) LOOPORDER3(GENLOOP1(i,istart,istop),GENLOOP2(j,jstart,jstop),GENLOOP3(k,kstart,kstop))
 general loop for any indicies More...
 
#define ZSLOOP(istart, istop, jstart, jstop, kstart, kstop)   LOOPORDER1(ZSLOOP1(istart,istop),ZSLOOP2(jstart,jstop),ZSLOOP3(kstart,kstop)) LOOPORDER2(ZSLOOP1(istart,istop),ZSLOOP2(jstart,jstop),ZSLOOP3(kstart,kstop)) LOOPORDER3(ZSLOOP1(istart,istop),ZSLOOP2(jstart,jstop),ZSLOOP3(kstart,kstop))
 general loop, but assumes i,j,k used More...
 
#define LOOPF   LOOPORDER1(LOOPF1,LOOPF2,LOOPF3) LOOPORDER2(LOOPF1,LOOPF2,LOOPF3) LOOPORDER3(LOOPF1,LOOPF2,LOOPF3)
 below used for initialization and such, not a computational issue More...
 
#define LOOPFPM   LOOPORDER1(LOOPF1,LOOPFPM2,LOOPFPM3) LOOPORDER2(LOOPFPM1,LOOPFPM2,LOOPFPM3) LOOPORDER3(LOOPFPM1,LOOPFPM2,LOOPFPM3)
 
#define FULLLOOPPM   LOOPFPM
 
#define LOOPF_12   LOOPORDER1(LOOPF1,LOOPF2,) LOOPORDER2(LOOPF1,LOOPF2,) LOOPORDER3(LOOPF1,LOOPF2,)
 
#define LOOPF_13   LOOPORDER1(LOOPF1,,LOOPF3) LOOPORDER2(LOOPF1,,LOOPF3) LOOPORDER3(LOOPF1,,LOOPF3)
 
#define LOOPF_23   LOOPORDER1(,LOOPF2,LOOPF3) LOOPORDER2(,LOOPF2,LOOPF3) LOOPORDER3(,LOOPF2,LOOPF3)
 
#define LOOPH   LOOPORDER1(LOOPH1,LOOPH2,LOOPH3) LOOPORDER2(LOOPH1,LOOPH2,LOOPH3) LOOPORDER3(LOOPH1,LOOPH2,LOOPH3)
 
#define LOOPP1   LOOPORDER1(LOOPP11,LOOPP12,LOOPP13) LOOPORDER2(LOOPP11,LOOPP12,LOOPP13) LOOPORDER3(LOOPP11,LOOPP12,LOOPP13)
 
#define LOOP   LOOPORDER1(LOOPN1,LOOPN2,LOOPN3) LOOPORDER2(LOOPN1,LOOPN2,LOOPN3) LOOPORDER3(LOOPN1,LOOPN2,LOOPN3)
 
#define LOOPFMHP   LOOPORDER1(LOOPFMHP1,LOOPFMHP2,LOOPFMHP3) LOOPORDER2(LOOPFMHP1,LOOPFMHP2,LOOPFMHP3) LOOPORDER3(LOOPFMHP1,LOOPFMHP2,LOOPFMHP3)
 
#define LOOPHMFP   LOOPORDER1(LOOPHMFP1,LOOPHMFP2,LOOPHMFP3) LOOPORDER2(LOOPHMFP1,LOOPHMFP2,LOOPHMFP3) LOOPORDER3(LOOPHMFP1,LOOPHMFP2,LOOPHMFP3)
 
#define LOOPHP   LOOPORDER1(LOOPHP1,LOOPHP2,LOOPHP3) LOOPORDER2(LOOPHP1,LOOPHP2,LOOPHP3) LOOPORDER3(LOOPHP1,LOOPHP2,LOOPHP3)
 
#define LOOPC   LOOPORDER1(LOOPC1,LOOPC2,LOOPC3) LOOPORDER2(LOOPC1,LOOPC2,LOOPC3) LOOPORDER3(LOOPC1,LOOPC2,LOOPC3)
 
#define FULLLOOP   LOOPF
 
#define FULLLOOPP1   LOOPORDER1(LOOPFP11,LOOPFP12,LOOPFP13) LOOPORDER2(LOOPFP11,LOOPFP12,LOOPFP13) LOOPORDER3(LOOPFP11,LOOPFP12,LOOPFP13)
 larger loop than full for cornered quantities such as emf defined on corners that need to be initialized for boundary condition reasons More...
 
#define LOOPDIVB   LOOPORDER1(LOOPC1,LOOPC2,LOOPC3) LOOPORDER2(LOOPC1,LOOPC2,LOOPC3) LOOPORDER3(LOOPC1,LOOPC2,LOOPC3)
 divb loop (for diagnostics only) More...
 
#define LOOPFC   LOOPF
 below are not original multi-D combindations, just renamings that have no control over order of dimensions More...
 
#define LOOPHC   LOOPH
 
#define LOOPFMHPC   LOOPFMHP
 
#define LOOPHMFPC   LOOPHMFP
 
#define LOOPHPC   LOOPHP
 
#define ZLOOP   ZSLOOP(0,N1-1,0,N2-1,0,N3-1)
 

Detailed Description

Multi-point loop related definitions/macros.

LOOPS (not computational, but not per-point. So still over i,j,k but diagnostic or other).

Definition in file global.loops.manypoints.h.

Macro Definition Documentation

#define FULLLOOP   LOOPF

Definition at line 165 of file global.loops.manypoints.h.

larger loop than full for cornered quantities such as emf defined on corners that need to be initialized for boundary condition reasons

Definition at line 167 of file global.loops.manypoints.h.

#define FULLLOOPPM   LOOPFPM

Definition at line 153 of file global.loops.manypoints.h.

#define GENFORALL (   iter,
  src,
  dest,
  numelem 
)    memcpy(dest, src, numelem*sizeof(src[0]))

applies to continugous memory regions (i.e. feed single pointer for source, size of data to copy in its own dimensions)

Definition at line 24 of file global.loops.manypoints.h.

#define GENFORALLOVERLAP (   iter,
  src,
  dest,
  numelem 
)    memmove(dest, src, numelem*sizeof(src[0]))

Definition at line 25 of file global.loops.manypoints.h.

#define GENLOOP (   i,
  j,
  k,
  istart,
  istop,
  jstart,
  jstop,
  kstart,
  kstop 
)    LOOPORDER1(GENLOOP1(i,istart,istop),GENLOOP2(j,jstart,jstop),GENLOOP3(k,kstart,kstop)) LOOPORDER2(GENLOOP1(i,istart,istop),GENLOOP2(j,jstart,jstop),GENLOOP3(k,kstart,kstop)) LOOPORDER3(GENLOOP1(i,istart,istop),GENLOOP2(j,jstart,jstop),GENLOOP3(k,kstart,kstop))

general loop for any indicies

Definition at line 145 of file global.loops.manypoints.h.

#define GENLOOP1 (   i,
  istart,
  istop 
)    SUPERGENLOOP1(i,istart,istop,1)

Definition at line 117 of file global.loops.manypoints.h.

#define GENLOOP2 (   j,
  jstart,
  jstop 
)    SUPERGENLOOP2(j,jstart,jstop,1)

Definition at line 118 of file global.loops.manypoints.h.

#define GENLOOP3 (   k,
  kstart,
  kstop 
)    SUPERGENLOOP3(k,kstart,kstop,1)

Definition at line 119 of file global.loops.manypoints.h.

Definition at line 160 of file global.loops.manypoints.h.

Definition at line 164 of file global.loops.manypoints.h.

#define LOOPC1   LOOPN1

Definition at line 127 of file global.loops.manypoints.h.

#define LOOPC2   LOOPN2

Definition at line 126 of file global.loops.manypoints.h.

#define LOOPC3   LOOPN3

Definition at line 125 of file global.loops.manypoints.h.

divb loop (for diagnostics only)

boundary zones may not require divb=0 since proxy for flux

Definition at line 171 of file global.loops.manypoints.h.

below used for initialization and such, not a computational issue

Definition at line 149 of file global.loops.manypoints.h.

#define LOOPF1   for(i=INFULL1;i<=OUTFULL1;i++)

Definition at line 57 of file global.loops.manypoints.h.

#define LOOPF2   for(j=INFULL2;j<=OUTFULL2;j++)

Definition at line 56 of file global.loops.manypoints.h.

#define LOOPF3   for(k=INFULL3;k<=OUTFULL3;k++)

Many-point loops (but not computational)

below are each per-spatial-dimension loops used later to contruct a multi-dimensionan loop of any orderthese loops used for general purposes

Definition at line 55 of file global.loops.manypoints.h.

Definition at line 155 of file global.loops.manypoints.h.

Definition at line 156 of file global.loops.manypoints.h.

Definition at line 157 of file global.loops.manypoints.h.

#define LOOPFC   LOOPF

below are not original multi-D combindations, just renamings that have no control over order of dimensions

Definition at line 186 of file global.loops.manypoints.h.

Definition at line 161 of file global.loops.manypoints.h.

#define LOOPFMHP1   for(i=INFULL1;i<=OUTHALF1;i++)

Definition at line 95 of file global.loops.manypoints.h.

#define LOOPFMHP2   for(j=INFULL2;j<=OUTHALF2;j++)

Definition at line 94 of file global.loops.manypoints.h.

#define LOOPFMHP3   for(k=INFULL3;k<=OUTHALF3;k++)

Definition at line 93 of file global.loops.manypoints.h.

#define LOOPFMHPC   LOOPFMHP

Definition at line 188 of file global.loops.manypoints.h.

#define LOOPFP11   for(i=INFULL1;i<=OUTFULLP11;i++)

Definition at line 68 of file global.loops.manypoints.h.

#define LOOPFP12   for(j=INFULL2;j<=OUTFULLP12;j++)

Definition at line 67 of file global.loops.manypoints.h.

#define LOOPFP13   for(k=INFULL3;k<=OUTFULLP13;k++)

full loop + 1 on outer edge for emf or corner quantities

Definition at line 66 of file global.loops.manypoints.h.

Definition at line 151 of file global.loops.manypoints.h.

#define LOOPFPM1   for(i=INFULL1-SHIFT1;i<=OUTFULL1+SHIFT1;i++)

Definition at line 62 of file global.loops.manypoints.h.

#define LOOPFPM2   for(j=INFULL2-SHIFT2;j<=OUTFULL2+SHIFT2;j++)

Definition at line 61 of file global.loops.manypoints.h.

#define LOOPFPM3   for(k=INFULL3-SHIFT3;k<=OUTFULL3+SHIFT3;k++)

only used to initialize emf[]

Definition at line 60 of file global.loops.manypoints.h.

Definition at line 158 of file global.loops.manypoints.h.

#define LOOPH1   for(i=INHALF1;i<=OUTHALF1;i++)

Definition at line 83 of file global.loops.manypoints.h.

#define LOOPH2   for(j=INHALF2;j<=OUTHALF2;j++)

Definition at line 82 of file global.loops.manypoints.h.

#define LOOPH3   for(k=INHALF3;k<=OUTHALF3;k++)

full loop + 1 (shift away from boundary) on inner edge for comptuing emf or corner quantities

Definition at line 81 of file global.loops.manypoints.h.

#define LOOPHC   LOOPH

Definition at line 187 of file global.loops.manypoints.h.

Definition at line 162 of file global.loops.manypoints.h.

#define LOOPHMFP1   for(i=INHALF1;i<=OUTFULL1;i++)

Definition at line 99 of file global.loops.manypoints.h.

#define LOOPHMFP2   for(j=INHALF2;j<=OUTFULL2;j++)

Definition at line 98 of file global.loops.manypoints.h.

#define LOOPHMFP3   for(k=INHALF3;k<=OUTFULL3;k++)

Definition at line 97 of file global.loops.manypoints.h.

#define LOOPHMFPC   LOOPHMFP

Definition at line 189 of file global.loops.manypoints.h.

Definition at line 163 of file global.loops.manypoints.h.

#define LOOPHP1   for(i=0;i<=OUTHALF1;i++)

Definition at line 103 of file global.loops.manypoints.h.

#define LOOPHP2   for(j=0;j<=OUTHALF2;j++)

Definition at line 102 of file global.loops.manypoints.h.

#define LOOPHP3   for(k=0;k<=OUTHALF3;k++)

Definition at line 101 of file global.loops.manypoints.h.

#define LOOPHPC   LOOPHP

Definition at line 190 of file global.loops.manypoints.h.

#define LOOPINT1   for(i=intix1;i<intox1;i++)

Definition at line 107 of file global.loops.manypoints.h.

#define LOOPINT2   for(j=intix2;j<intox2;j++)

Definition at line 106 of file global.loops.manypoints.h.

#define LOOPINT3   for(k=intix3;k<intox3;k++)

Definition at line 105 of file global.loops.manypoints.h.

#define LOOPN1   for(i=0;i<=N1-1;i++)

Definition at line 91 of file global.loops.manypoints.h.

#define LOOPN2   for(j=0;j<=N2-1;j++)

Definition at line 90 of file global.loops.manypoints.h.

#define LOOPN3   for(k=0;k<=N3-1;k++)

Definition at line 89 of file global.loops.manypoints.h.

Definition at line 159 of file global.loops.manypoints.h.

#define LOOPP11   for(i=INP11;i<=OUTP11;i++)

Definition at line 87 of file global.loops.manypoints.h.

#define LOOPP12   for(j=INP12;j<=OUTP12;j++)

Definition at line 86 of file global.loops.manypoints.h.

#define LOOPP13   for(k=INP13;k<=OUTP13;k++)

Definition at line 85 of file global.loops.manypoints.h.

#define SUPERGENLOOP (   i,
  j,
  k,
  istart,
  istop,
  jstart,
  jstop,
  kstart,
  kstop,
  di,
  dj,
  dk 
)    LOOPORDER1(SUPERGENLOOP1(i,istart,istop,di),SUPERGENLOOP2(j,jstart,jstop,dj),SUPERGENLOOP3(k,kstart,kstop,dk)) LOOPORDER2(SUPERGENLOOP1(i,istart,istop,di),SUPERGENLOOP2(j,jstart,jstop,dj),SUPERGENLOOP3(k,kstart,kstop,dk)) LOOPORDER3(SUPERGENLOOP1(i,istart,istop,di),SUPERGENLOOP2(j,jstart,jstop,dj),SUPERGENLOOP3(k,kstart,kstop,dk))

below are different ways of combining each spatial direction

general loop for any indicies

Definition at line 143 of file global.loops.manypoints.h.

#define SUPERGENLOOP1 (   i,
  istart,
  istop,
  di 
)    for((i)=(istart);(di>0 ? (i)<=(istop) : (i)>=(istop)); (i)+=(di))

SUPERGEN and GEN are super general and general, but still to be used with only spatial arrays related to spatial (N1,N2,N3) directions in i,j,k.

Can create non-spatial general loop if required PACKLOOP() in boundmpi.c and PACKLOOP_INT() boundmpiint.c uses these correctly since refer to i,j,k in correct order SUPERGENLOOP() as used in interpline.c is correct since always refer to i,j,k in correct order GENLOOP() in diag.c correctly uses i,j,k in order

Definition at line 113 of file global.loops.manypoints.h.

#define SUPERGENLOOP2 (   j,
  jstart,
  jstop,
  dj 
)    for((j)=(jstart);(dj>0 ? (j)<=(jstop) : (j)>=(jstop)); (j)+=(dj))

Definition at line 114 of file global.loops.manypoints.h.

#define SUPERGENLOOP3 (   k,
  kstart,
  kstop,
  dk 
)    for((k)=(kstart);(dk>0 ? (k)<=(kstop) : (k)>=(kstop)); (k)+=(dk))

Definition at line 115 of file global.loops.manypoints.h.

#define USE_MEMCPY   1

MOST GENERAL LOOP copy.

While fast, does not allow for control over loop order in memory.Sasha's dad and google say memcopy() and memmove() can be much faster than loop if compiler doesn't recognize this optimization. So best to force it in simple cases

Definition at line 19 of file global.loops.manypoints.h.

#define ZLOOP   ZSLOOP(0,N1-1,0,N2-1,0,N3-1)

Definition at line 191 of file global.loops.manypoints.h.

#define ZSLOOP (   istart,
  istop,
  jstart,
  jstop,
  kstart,
  kstop 
)    LOOPORDER1(ZSLOOP1(istart,istop),ZSLOOP2(jstart,jstop),ZSLOOP3(kstart,kstop)) LOOPORDER2(ZSLOOP1(istart,istop),ZSLOOP2(jstart,jstop),ZSLOOP3(kstart,kstop)) LOOPORDER3(ZSLOOP1(istart,istop),ZSLOOP2(jstart,jstop),ZSLOOP3(kstart,kstop))

general loop, but assumes i,j,k used

Definition at line 147 of file global.loops.manypoints.h.

#define ZSLOOP1 (   istart,
  istop 
)    SUPERGENLOOP1(i,istart,istop,1)

Definition at line 121 of file global.loops.manypoints.h.

#define ZSLOOP2 (   jstart,
  jstop 
)    SUPERGENLOOP2(j,jstart,jstop,1)

Definition at line 122 of file global.loops.manypoints.h.

#define ZSLOOP3 (   kstart,
  kstop 
)    SUPERGENLOOP3(k,kstart,kstop,1)

Definition at line 123 of file global.loops.manypoints.h.