changa 3.5
Loading...
Searching...
No Matches
moments.h
1#ifndef MOMENTS_INCLUDED
2#define MOMENTS_INCLUDED
3
4#if defined(__cplusplus)
5extern "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
21typedef long double momFloat;
22#define sqrt(x) sqrtl(x)
23#else
24typedef double momFloat;
25#endif
26
30typedef 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
40typedef 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
54typedef 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*/
69typedef 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
76typedef 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
86void momClearMomr(MOMR *mr);
87void momClearFmomr(FMOMR *l);
88void momAddMomc(MOMC *,MOMC *);
89void momAddMomr(MOMR *,MOMR *);
90void momAddFmomr(FMOMR *mr,FMOMR *ma);
91void momScaledAddFmomr(FMOMR *mr, cosmoType ur, FMOMR *ma, cosmoType ua);
92void momRescaleFmomr(FMOMR *mr, cosmoType unew, cosmoType uold);
93void momMulAddMomc(MOMC *,momFloat,MOMC *);
94void momMulAddMomr(MOMR *,momFloat,MOMR *);
95void momMulAddFmomr(FMOMR *mr, cosmoType ur, cosmoType m, FMOMR *ma,
96 cosmoType ua);
97void momSubMomc(MOMC *,MOMC *);
98void momSubMomr(MOMR *,MOMR *);
99void momScaledSubFmomr(FMOMR *mr, cosmoType ur, FMOMR *ma, cosmoType ua);
100void momMakeMomc(MOMC *,momFloat,momFloat,momFloat,momFloat);
101cosmoType momMakeFmomr(FMOMR *mr, cosmoType m, cosmoType u, cosmoType x,
102 cosmoType y, cosmoType z);
103momFloat momMakeMomr(MOMR *,momFloat,momFloat,momFloat,momFloat);
104void momOldMakeMomr(MOMR *,momFloat,momFloat,momFloat,momFloat);
105void momShiftMomc(MOMC *,momFloat,momFloat,momFloat);
106void momShiftMomr(MOMR *,momFloat,momFloat,momFloat);
107void momShiftFmomr(FMOMR *m, cosmoType u, cosmoType x, cosmoType y,
108 cosmoType z);
109double momShiftLocr(LOCR *,momFloat,momFloat,momFloat);
110void momReduceMomc(MOMC *,MOMR *);
111void momEvalMomr(MOMR *,momFloat,momFloat,momFloat,momFloat,
112 momFloat *,momFloat *,momFloat *,momFloat *);
113void 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);
116void momMomr2Momc(MOMR *,MOMC *);
117void momFmomr2Momc(FMOMR *ma,MOMC *mc);
118void momPrintMomc(MOMC *);
119void momPrintMomr(MOMR *);
120
121void momClearLocr(LOCR *);
122double momLocrAddMomr5(LOCR *,MOMR *,momFloat,momFloat,momFloat,momFloat,double *,double *,double *);
123double 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);
126void momEvalLocr(LOCR *,momFloat,momFloat,momFloat,
127 momFloat *,momFloat *,momFloat *,momFloat *);
128double momLocrAddMomr(LOCR *,MOMR *,momFloat,momFloat,momFloat,momFloat);
129#if defined(__cplusplus)
130}
131#endif
132#endif
Definition moments.h:76
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
moment tensor components for complete multipoles.
Definition moments.h:40
moment tensor components for reduced multipoles.
Definition moments.h:30