changa  3.5
 All Classes Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
moments.h
1 #ifndef MOMENTS_INCLUDED
2 #define MOMENTS_INCLUDED
3 
4 #if defined(__cplusplus)
5 extern "C" {
6 #endif
7 
8 #include "cosmoType.h"
9 
10 /*************************************************
11  *
12  * The precision of the non-scaled moments (MOMR,
13  * MOMC, and LOCR) are to always be double (or better) to
14  * prevent known over/underflow issues.
15  * This is the meaning of momFloat.
16  *
17  * Do not change this
18  *
19  *************************************************/
20 #ifdef QUAD
21 typedef long double momFloat;
22 #define sqrt(x) sqrtl(x)
23 #else
24 typedef double momFloat;
25 #endif
26 
30 typedef struct momReduced {
31  momFloat m;
32  momFloat xx,yy,xy,xz,yz;
33  momFloat xxx,xyy,xxy,yyy,xxz,yyz,xyz;
34  momFloat xxxx,xyyy,xxxy,yyyy,xxxz,yyyz,xxyy,xxyz,xyyz;
35  } MOMR;
36 
40 typedef struct momComplete {
41  momFloat m;
42  momFloat xx,yy,xy,xz,yz;
43  momFloat xxx,xyy,xxy,yyy,xxz,yyz,xyz;
44  momFloat xxxx,xyyy,xxxy,yyyy,xxxz,yyyz,xxyy,xxyz,xyyz;
45  momFloat zz;
46  momFloat xzz,yzz,zzz;
47  momFloat xxzz,xyzz,xzzz,yyzz,yzzz,zzzz;
48  } MOMC;
49 
54 typedef struct locReduced {
55  momFloat m;
56  momFloat x,y,z;
57  momFloat xx,xy,yy,xz,yz;
58  momFloat xxx,xxy,xyy,yyy,xxz,xyz,yyz;
59  momFloat xxxx,xxxy,xxyy,xyyy,yyyy,xxxz,xxyz,xyyz,yyyz;
60  momFloat xxxxx,xxxxy,xxxyy,xxyyy,xyyyy,yyyyy,xxxxz,xxxyz,xxyyz,xyyyz,yyyyz;
61  } LOCR;
62 
63 /*
64 ** The next set of data structures are intended specifically for use with float
65 ** precision. These moments are usually scaled to a characteristic size of the
66 ** cell or volume. The convention is to use the scaling factor u for the multipole
67 ** moments and scaling factor v for the local expansion.
68 */
69 typedef struct fmomReduced {
70  cosmoType m;
71  cosmoType xx, yy, xy, xz, yz;
72  cosmoType xxx, xyy, xxy, yyy, xxz, yyz, xyz;
73  cosmoType xxxx, xyyy, xxxy, yyyy, xxxz, yyyz, xxyy, xxyz, xyyz;
74  } FMOMR;
75 
76 typedef struct flocReduced {
77  cosmoType m;
78  cosmoType x, y, z;
79  cosmoType xx, yy, xy, xz, yz;
80  cosmoType xxx, xyy, xxy, yyy, xxz, yyz, xyz;
81  cosmoType xxxx, xyyy, xxxy, yyyy, xxxz, yyyz, xxyy, xxyz, xyyz;
82  cosmoType xxxxx, xyyyy, xxxxy, yyyyy, xxxxz, yyyyz, xxxyy, xxyyy, xxxyz,
83  xyyyz, xxyyz;
84  } FLOCR;
85 
86 void momClearMomr(MOMR *mr);
87 void momClearFmomr(FMOMR *l);
88 void momAddMomc(MOMC *,MOMC *);
89 void momAddMomr(MOMR *,MOMR *);
90 void momAddFmomr(FMOMR *mr,FMOMR *ma);
91 void momScaledAddFmomr(FMOMR *mr, cosmoType ur, FMOMR *ma, cosmoType ua);
92 void momRescaleFmomr(FMOMR *mr, cosmoType unew, cosmoType uold);
93 void momMulAddMomc(MOMC *,momFloat,MOMC *);
94 void momMulAddMomr(MOMR *,momFloat,MOMR *);
95 void momMulAddFmomr(FMOMR *mr, cosmoType ur, cosmoType m, FMOMR *ma,
96  cosmoType ua);
97 void momSubMomc(MOMC *,MOMC *);
98 void momSubMomr(MOMR *,MOMR *);
99 void momScaledSubFmomr(FMOMR *mr, cosmoType ur, FMOMR *ma, cosmoType ua);
100 void momMakeMomc(MOMC *,momFloat,momFloat,momFloat,momFloat);
101 cosmoType momMakeFmomr(FMOMR *mr, cosmoType m, cosmoType u, cosmoType x,
102  cosmoType y, cosmoType z);
103 momFloat momMakeMomr(MOMR *,momFloat,momFloat,momFloat,momFloat);
104 void momOldMakeMomr(MOMR *,momFloat,momFloat,momFloat,momFloat);
105 void momShiftMomc(MOMC *,momFloat,momFloat,momFloat);
106 void momShiftMomr(MOMR *,momFloat,momFloat,momFloat);
107 void momShiftFmomr(FMOMR *m, cosmoType u, cosmoType x, cosmoType y,
108  cosmoType z);
109 double momShiftLocr(LOCR *,momFloat,momFloat,momFloat);
110 void momReduceMomc(MOMC *,MOMR *);
111 void momEvalMomr(MOMR *,momFloat,momFloat,momFloat,momFloat,
112  momFloat *,momFloat *,momFloat *,momFloat *);
113 void momEvalFmomrcm(FMOMR *m, cosmoType u, cosmoType dir, cosmoType x,
114  cosmoType y, cosmoType z, cosmoType *fPot, cosmoType *ax,
115  cosmoType *ay, cosmoType *az, cosmoType *magai);
116 void momMomr2Momc(MOMR *,MOMC *);
117 void momFmomr2Momc(FMOMR *ma,MOMC *mc);
118 void momPrintMomc(MOMC *);
119 void momPrintMomr(MOMR *);
120 
121 void momClearLocr(LOCR *);
122 double momLocrAddMomr5(LOCR *,MOMR *,momFloat,momFloat,momFloat,momFloat,double *,double *,double *);
123 double momFlocrAddFmomr5cm(FLOCR *l, cosmoType v, FMOMR *m, cosmoType u,
124  cosmoType dir, cosmoType x, cosmoType y, cosmoType z,
125  cosmoType *tax, cosmoType *tay, cosmoType *taz);
126 void momEvalLocr(LOCR *,momFloat,momFloat,momFloat,
127  momFloat *,momFloat *,momFloat *,momFloat *);
128 double momLocrAddMomr(LOCR *,MOMR *,momFloat,momFloat,momFloat,momFloat);
129 #if defined(__cplusplus)
130 }
131 #endif
132 #endif
moment tensor components for reduced multipoles.
Definition: moments.h:30
moment tensor components for complete multipoles.
Definition: moments.h:40
Definition: moments.h:69
moment tensor components for reduced local expansion. note that we have the 5th-order terms here now!...
Definition: moments.h:54
Definition: moments.h:76