18 #if(MERGEDC2EA2CMETHOD)
19 #define LINETYPEDEFINESOTHER FTYPE a_youtpolycoef[NPR2INTERP][MAXSPACEORDER][NBIGM];
20 #error "SUPERGODMARK: Should only need this if doing more than 3 point stencil -- fix"
22 #define LINETYPEDEFINESOTHER FTYPE a_youtpolycoef[1][1][1]; //VS complained about defining zero-size object
27 #define LINETYPEDEFINES1 \
30 int is,ie,js,je,ks,ke; \
31 int preforder, whichreduce; \
34 extern void pass_1d_line_weno(int whichquantity, int dir, int do_weight_or_recon, int recontype, int whichreduce, int preforder, int pl, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE *stiffindicator, FTYPE (*Vline)[NBIGM], FTYPE (*Pline)[NBIGM], FTYPE (*df)[NBIGM], FTYPE (*dP)[NBIGM], FTYPE (*etai)[NBIGM], FTYPE (*monoindicator)[NBIGM], FTYPE (*yprim)[2][NBIGM], FTYPE (*ystencilvar)[NBIGM], FTYPE (*yin)[NBIGM], FTYPE (*yout)[NBIGM], FTYPE (*youtpolycoef)[NBIGM], struct of_trueijkp *trueijkp); \
35 extern void pass_1d_line_paraline(int whichquantity, int dir, int do_weight_or_recon, int recontype, int whichreduce, int preforder, int pl, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE *stiffindicator, FTYPE (*Vline)[NBIGM], FTYPE (*Pline)[NBIGM], FTYPE (*df)[NBIGM], FTYPE (*dP)[NBIGM], FTYPE (*etai)[NBIGM], FTYPE (*monoindicator)[NBIGM], FTYPE (*yprim)[2][NBIGM], FTYPE (*ystencilvar)[NBIGM], FTYPE (*yin)[NBIGM], FTYPE (*yout)[NBIGM], FTYPE (*youtpolycoef)[NBIGM], struct of_trueijkp *trueijkp); \
36 extern void pass_1d_line_multipl_weno(int MULTIPLTYPE, int whichquantity, int dir, int do_weight_or_recon, int recontype, int whichreduce, int preforder, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE *stiffindicator, FTYPE (*Vline)[NBIGM], FTYPE (*Pline)[NBIGM], FTYPE (*df)[NUMDFS][NBIGM], FTYPE (*dP)[NBIGM], FTYPE (*etai)[NUMTRUEEOMSETS][NBIGM], FTYPE (*monoindicator)[NUMMONOINDICATORS][NBIGM], FTYPE (*yprim)[2][NBIGM], FTYPE (*ystecilvar)[2][NBIGM], FTYPE (*yin)[2][NBIGM], FTYPE (*yout)[2][NBIGM], FTYPE (*youtpolycoef)[MAXSPACEORDER][NBIGM], struct of_trueijkp *trueijkp); \
37 extern void pass_1d_line_multipl_paraline(int MULTIPLTYPE, int whichquantity, int dir, int do_weight_or_recon, int recontype, int whichreduce, int preforder, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE *stiffindicator, FTYPE (*Vline)[NBIGM], FTYPE (*Pline)[NBIGM], FTYPE (*df)[NUMDFS][NBIGM], FTYPE (*dP)[NBIGM], FTYPE (*etai)[NUMTRUEEOMSETS][NBIGM], FTYPE (*monoindicator)[NUMMONOINDICATORS][NBIGM], FTYPE (*yprim)[2][NBIGM], FTYPE (*ystecilvar)[2][NBIGM], FTYPE (*yin)[2][NBIGM], FTYPE (*yout)[2][NBIGM], FTYPE (*youtpolycoef)[MAXSPACEORDER][NBIGM], struct of_trueijkp *trueijkp); \
40 int nprlocalstart,nprlocalend; \
41 int nprlocallist[MAXNPR]; \
44 int stencilvarisnull; \
45 int doingweno; // last thing has no semicolon
49 #define GEN3MAC(numypl,pl,numywhich,which,numyi,i) (i + numyi*which + numyi*numywhich*pl)
52 #define GEN2MAC(numypl,pl,numyi,i) (i + numyi*pl)
54 #define GEN1MAC(numyi,i) (i)
57 #define YINOUTMAC(numypl,pl,numywhich,which,numyi,i) GEN3MAC(numypl,pl,numywhich,which,numyi,i)
64 #define LINETYPEDEFINESMEMORY \
65 FTYPE a_yin[NPR2INTERP][2][NBIGM]; \
66 FTYPE a_yout[NPR2INTERP][2][NBIGM]; \
68 FTYPE a_shockindicator[NUMTRUEEOMSETS][NBIGM]; \
69 FTYPE a_stiffindicator[NBIGM]; \
71 FTYPE a_yprim[NPR2INTERP][2][NBIGM]; \
72 FTYPE a_ystencilvar[NPR2INTERP][2][NBIGM]; \
73 FTYPE a_df[NPR2INTERP][NUMDFS][NBIGM]; \
74 FTYPE a_dfformono[NPR2INTERP][NUMDFS][NBIGM]; \
75 FTYPE a_drho[NUMDFS][NBIGM]; \
76 FTYPE a_dP[NUMDFS][NBIGM]; \
77 FTYPE a_etai[NPR2INTERP][NUMTRUEEOMSETS][NBIGM]; \
78 FTYPE a_Pline[NUMTRUEEOMSETS][NBIGM]; \
79 FTYPE a_Vline[NUMTRUEEOMSETS][NBIGM]; \
81 FTYPE a_monoindicator[NPR2INTERP][NUMMONOINDICATORS][NBIGM]; \
82 int a_minorder[NBIGM]; \
83 int a_maxorder[NBIGM];
89 #define LINETYPEDEFINEPOINTERS \
90 FTYPE (*yin)[2][NBIGM]; \
91 FTYPE (*yout)[2][NBIGM]; \
93 FTYPE (*shockindicator)[NBIGM]; \
94 FTYPE *stiffindicator; \
96 FTYPE (*yprim)[2][NBIGM]; \
97 FTYPE (*ystencilvar)[2][NBIGM]; \
98 FTYPE (*df)[NUMDFS][NBIGM]; \
99 FTYPE (*dfformono)[NUMDFS][NBIGM]; \
100 FTYPE (*drho)[NBIGM]; \
101 FTYPE (*dP)[NBIGM]; \
102 FTYPE (*etai)[NUMTRUEEOMSETS][NBIGM]; \
103 FTYPE (*Pline)[NBIGM]; \
104 FTYPE (*Vline)[NBIGM]; \
106 FTYPE (*monoindicator)[NUMMONOINDICATORS][NBIGM]; \
109 FTYPE (*youtpolycoef)[MAXSPACEORDER][NBIGM];
115 #define LINETYPEDEFINES2 \
122 struct of_trueijkp trueijkp; \
123 extern int choose_limiter(int dir, int i, int j, int k, int pl); \
124 extern void compute_monotonicity_line(int recontype, int whichreduce, int preforder, int pl, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE (*df)[NBIGM], FTYPE (*monoindicator)[NBIGM] , FTYPE *yin, FTYPE (*yout)[NBIGM], FTYPE (*youtpolycoef)[NBIGM]); \
125 extern void compute_monotonicity_line_multipl(int stencilvarisnull, int MULTIPLTYPE, int whichquantity, int dir, int do_weight_or_recon, int recontype, int whichreduce, int preforder, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE *stiffindicator, FTYPE (*Vline)[NBIGM], FTYPE (*Pline)[NBIGM], FTYPE (*df)[NUMDFS][NBIGM], FTYPE (*dP)[NBIGM], FTYPE (*etai)[NUMTRUEEOMSETS][NBIGM], FTYPE (*monoindicator)[NUMMONOINDICATORS][NBIGM], FTYPE (*yprim)[2][NBIGM], FTYPE (*ystencilvar)[2][NBIGM], FTYPE (*yin)[2][NBIGM], FTYPE (*yout)[2][NBIGM], FTYPE (*youtpolycoef)[MAXSPACEORDER][NBIGM]); \
126 extern void compute_monotonicity_line_indicatoronly(int recontype, int whichreduce, int preforder, int pl, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE (*df)[NBIGM], FTYPE (*monoindicator)[NBIGM] , FTYPE *yin, FTYPE (*yout)[NBIGM], FTYPE (*youtpolycoef)[NBIGM]); \
127 extern void compute_monotonicity_line_valueonly(int recontype, int whichreduce, int preforder, int pl, int bs, int ps, int pe, int be, int *minorder, int *maxorder, int *shift, FTYPE (*shockindicator)[NBIGM], FTYPE (*df)[NBIGM], FTYPE (*monoindicator)[NBIGM] , FTYPE *yin, FTYPE (*yout)[NBIGM], FTYPE (*youtpolycoef)[NBIGM])
135 #define LINETYPESHIFTS \
136 {yin =(FTYPE (*)[2][NBIGM]) (&(a_yin[0][0][NBIGBND])); \
137 yout=(FTYPE (*)[2][NBIGM]) (&(a_yout[0][0][NBIGBND])); \
139 shockindicator=(FTYPE (*)[NBIGM]) (&(a_shockindicator[0][NBIGBND])); \
140 stiffindicator=(FTYPE (*)) (&(a_stiffindicator[NBIGBND])); \
142 yprim =(FTYPE (*)[2][NBIGM]) (&(a_yprim[0][0][NBIGBND])); \
143 ystencilvar =(FTYPE (*)[2][NBIGM]) (&(a_ystencilvar[0][0][NBIGBND])); \
144 df=(FTYPE (*)[NUMDFS][NBIGM]) (&(a_df[0][0][NBIGBND])); \
145 dfformono=(FTYPE (*)[NUMDFS][NBIGM]) (&(a_dfformono[0][0][NBIGBND])); \
146 drho=(FTYPE (*)[NBIGM]) (&(a_drho[0][NBIGBND])); \
147 dP=(FTYPE (*)[NBIGM]) (&(a_dP[0][NBIGBND])); \
148 etai=(FTYPE (*)[NUMTRUEEOMSETS][NBIGM]) (&(a_etai[0][0][NBIGBND])); \
149 Pline=(FTYPE (*)[NBIGM]) (&(a_Pline[0][NBIGBND])); \
150 Vline=(FTYPE (*)[NBIGM]) (&(a_Vline[0][NBIGBND])); \
151 shift=(int (*)) (&(a_shift[NBIGBND])); \
152 monoindicator=(FTYPE (*)[NUMMONOINDICATORS][NBIGM]) (&(a_monoindicator[0][0][NBIGBND])); \
153 minorder=(int (*)) (&(a_minorder[NBIGBND])); \
154 maxorder=(int (*)) (&(a_maxorder[NBIGBND])); \
155 youtpolycoef=(FTYPE (*)[MAXSPACEORDER][NBIGM]) (&(a_youtpolycoef[0][0][NBIGBND]));}
159 #define LINETYPEPOINTERSFUNCTIONDECLARE \
160 FTYPE (*yin)[2][NBIGM], \
161 FTYPE (*yout)[2][NBIGM], \
163 FTYPE (*shockindicator)[NBIGM], \
164 FTYPE *stiffindicator, \
166 FTYPE (*yprim)[2][NBIGM], \
167 FTYPE (*ystencilvar)[2][NBIGM], \
168 FTYPE (*df)[NUMDFS][NBIGM], \
169 FTYPE (*dfformono)[NUMDFS][NBIGM], \
170 FTYPE (*drho)[NBIGM], \
171 FTYPE (*dP)[NBIGM], \
172 FTYPE (*etai)[NUMTRUEEOMSETS][NBIGM], \
173 FTYPE (*Pline)[NBIGM], \
174 FTYPE (*Vline)[NBIGM], \
176 FTYPE (*monoindicator)[NUMMONOINDICATORS][NBIGM], \
179 FTYPE (*youtpolycoef)[MAXSPACEORDER][NBIGM]
184 #define LINETYPEPOINTERSPASSFUNCTIONARG \
216 int realisinterp,
int whichprimtype,
int interporflux,
217 int nprlocalstart,
int nprlocalend,
int *nprlocallist,
int numprims,
219 int is,
int ie,
int js,
int je,
int ks,
int ke,
int di,
int dj,
int dk,
int bs,
int ps,
int pe,
int be,
220 int recontype,
int doingweno,
221 void (*
pass_1d_line)(
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[
NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[NBIGM],
FTYPE (*monoindicator)[NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystencilvar)[NBIGM],
FTYPE (*yin)[NBIGM],
FTYPE (*yout)[NBIGM],
FTYPE (*youtpolycoef)[NBIGM],
struct of_trueijkp *trueijkp),
222 void (*
pass_1d_line_multipl)(
int MULTIPLTYPE,
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM],
FTYPE (*monoindicator)[
NUMMONOINDICATORS][NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystecilvar)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*yout)[2][NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][NBIGM],
struct of_trueijkp *trueijkp),
223 int stencilvarisnull,
int preforder,
int whichreduce,
224 int idel,
int jdel,
int kdel,
231 int realisinterp,
int whichprimtype,
int interporflux,
232 int nprlocalstart,
int nprlocalend,
int *nprlocallist,
int numprims,
234 int is,
int ie,
int js,
int je,
int ks,
int ke,
int di,
int dj,
int dk,
int bs,
int ps,
int pe,
int be,
235 int recontype,
int doingweno,
236 void (*
pass_1d_line)(
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[NBIGM],
FTYPE (*monoindicator)[NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystencilvar)[NBIGM],
FTYPE (*yin)[NBIGM],
FTYPE (*yout)[NBIGM],
FTYPE (*youtpolycoef)[NBIGM],
struct of_trueijkp *trueijkp),
237 void (*
pass_1d_line_multipl)(
int MULTIPLTYPE,
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM],
FTYPE (*monoindicator)[
NUMMONOINDICATORS][NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystecilvar)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*yout)[2][NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][NBIGM],
struct of_trueijkp *trueijkp),
238 int stencilvarisnull,
int preforder,
int whichreduce,
239 int idel,
int jdel,
int kdel,
246 int realisinterp,
int whichprimtype,
int interporflux,
247 int nprlocalstart,
int nprlocalend,
int *nprlocallist,
int numprims,
249 int is,
int ie,
int js,
int je,
int ks,
int ke,
int di,
int dj,
int dk,
int bs,
int ps,
int pe,
int be,
250 int recontype,
int doingweno,
251 void (*
pass_1d_line)(
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[NBIGM],
FTYPE (*monoindicator)[NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystencilvar)[NBIGM],
FTYPE (*yin)[NBIGM],
FTYPE (*yout)[NBIGM],
FTYPE (*youtpolycoef)[NBIGM],
struct of_trueijkp *trueijkp),
252 void (*
pass_1d_line_multipl)(
int MULTIPLTYPE,
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM],
FTYPE (*monoindicator)[
NUMMONOINDICATORS][NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystecilvar)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*yout)[2][NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][NBIGM],
struct of_trueijkp *trueijkp),
253 int stencilvarisnull,
int preforder,
int whichreduce,
254 int weightsplittype,
int whichquantity,
255 int idel,
int jdel,
int kdel,
259 static void assign_eno_result(
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yout)[NBIGM],
FTYPE (*result0)[
NSTORE2][
NSTORE3][NPR],
FTYPE (*result1)[
NSTORE2][
NSTORE3][NPR]);
263 static void get_1d_line_c2e_multipl(
int whichquantity,
int dir,
int interporflux,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE (*yin)[2][NBIGM],
struct of_trueijkp *trueijkp);
264 static void get_1d_line_c2e(
int dir,
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*p2interp)[
NSTORE2][
NSTORE3][NPR2INTERP],
FTYPE *yin,
struct of_trueijkp *trueijkp);
265 static void get_1d_line_shockarray(
int dir,
int interporflux,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*shockarray)[
NSTORE1][
NSTORE2][
NSTORE3],
FTYPE (*shockindicator)[NBIGM],
struct of_trueijkp *trueijkp);
268 static void assign_eno_result_c2e_multipl(
int whichprimtype,
int interporflux,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yout)[2][NBIGM],
FTYPE (*result0)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*result1)[
NSTORE2][NSTORE3][NPR2INTERP]);
269 static void assign_eno_result_c2e(
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yout)[NBIGM],
FTYPE (*result0)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*result1)[
NSTORE2][NSTORE3][NPR2INTERP]);
271 static void get_1d_line_c2e_gammaeffhydro(
int dir,
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*p2interp)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE *yin,
struct of_trueijkp *trueijkp);
274 static void get_df_line_gen_new(
int realisinterp,
int doingweno,
int whichprimtype,
int interporflux,
int recontype,
int dir,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*yprim)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (**drhoptr)[NBIGM],
FTYPE (**dPptr)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp);
275 static void get_df_line_paraline(
int realisinterp,
int doingweno,
int whichprimtype,
int interporflux,
int recontype,
int dir,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*yprim)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (**drhoptr)[NBIGM],
FTYPE (**dPptr)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp);
276 static int compute_df_line(
int doingweno,
int interporflux,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE *yin,
FTYPE (*df)[NBIGM]);
277 static int compute_df_line_paraline(
int doingweno,
int interporflux,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE *yin,
FTYPE (*df)[NBIGM]);
278 static int compute_df_line_new(
int doingweno,
int whichprimtype,
int interporflux,
int recontype,
int dir,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*yprim)[2][NBIGM],
FTYPE *df,
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp);
279 static int compute_df_line_formono(
int doingweno,
int interporflux,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE *yin,
FTYPE (*df)[NBIGM]);
280 static void get_1d_line(
int dir,
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*p2interpm)[
NSTORE2][NSTORE3][NPR],
FTYPE (*p2interpp)[
NSTORE2][NSTORE3][NPR],
FTYPE (*yin)[NBIGM],
struct of_trueijkp *trueijkp);
281 static int get_V_and_P(
int whichprimtype,
int interporflux,
int dir,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yin)[2][NBIGM],
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp);
282 static int get_shock_indicator(
int whichprimtype,
int interporflux,
int dir,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yin)[2][NBIGM],
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*shockindicator)[NBIGM],
struct of_trueijkp *trueijkp);
283 static int get_contact_indicator(
int realisinterp,
int whichprimtype,
int interporflux,
int dir,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yin)[2][NBIGM],
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM]);
284 static void causal_shift_order(
int whichquantitiy,
int interporflux,
int dir,
int preforder,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
int *shift,
int *minorder,
int *maxorder);
287 static void set_preforder(
int dir,
int interporflux,
int *preforder,
int*whichreduce);
289 static void (*
pass_1d_line)(
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[
NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[
NBIGM],
FTYPE (*Pline)[
NBIGM],
FTYPE (*df)[
NBIGM],
FTYPE (*dP)[
NBIGM],
FTYPE (*etai)[
NBIGM],
FTYPE (*monoindicator)[
NBIGM],
FTYPE (*yprim)[2][
NBIGM],
FTYPE (*ystencilvar)[
NBIGM],
FTYPE (*yin)[
NBIGM],
FTYPE (*yout)[
NBIGM],
FTYPE (*youtpolycoef)[
NBIGM],
struct of_trueijkp *trueijkp);
290 static void (*
pass_1d_line_multipl)(
int MULTIPLTYPE,
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[
NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[
NBIGM],
FTYPE (*Pline)[
NBIGM],
FTYPE (*df)[
NUMDFS][
NBIGM],
FTYPE (*dP)[
NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][
NBIGM],
FTYPE (*monoindicator)[
NUMMONOINDICATORS][
NBIGM],
FTYPE (*yprim)[2][
NBIGM],
FTYPE (*ystecilvar)[2][
NBIGM],
FTYPE (*yin)[2][
NBIGM],
FTYPE (*yout)[2][
NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][
NBIGM],
struct of_trueijkp *trueijkp);
293 static void set_interp_loop(
int withshifts,
int interporflux,
int dir,
int loc,
int continuous,
int *intdir,
int *is,
int *ie,
int *js,
int *je,
int *ks,
int *ke,
int *di,
int *dj,
int *dk,
int *bs,
int *ps,
int *pe,
int *be);
294 static void set_interp_loop_expanded(
int withshifts,
int interporflux,
int dir,
int loc,
int continuous,
int *intdir,
int *is,
int *ie,
int *js,
int *je,
int *ks,
int *ke,
int *di,
int *dj,
int *dk,
int *bs,
int *ps,
int *pe,
int *be);
302 void slope_lim_linetype_c2e(
int realisinterp,
int whichprimtype,
int interporflux,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][NSTORE3][NPR],
FTYPE (*stencilvar)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*p2interp)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*pleft)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*pright)[
NSTORE2][NSTORE3][NPR2INTERP])
324 setup_nprlocalist(whichprimtype,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
338 set_interp_loop_gen(withshifts, interporflux, dir, loc, continuous, &intdir, &is, &ie, &js, &je, &ks, &ke, &di, &dj, &dk, &bs, &ps, &pe, &be);
372 dualfprintf(
fail_file,
"No such defined pass_1d_line for lim[dir=%d]=%d\n",dir,
lim[dir]);
382 if(stencilvar==NULL) stencilvarisnull=1;
383 else stencilvarisnull=0;
406 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOMINTERP
423 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
428 #if(STORESHOCKINDICATOR)
433 realisinterp, whichprimtype, interporflux,
434 nprlocalstart, nprlocalend, nprlocallist, numprims,
436 is, ie, js, je, ks, ke, di, dj, dk, bs, ps, pe, be,
437 recontype, doingweno,
439 stencilvarisnull, preforder, whichreduce,
441 primreal, stencilvar, p2interp, pleft, pright);
446 realisinterp, whichprimtype, interporflux,
447 nprlocalstart, nprlocalend, nprlocallist, numprims,
449 is, ie, js, je, ks, ke, di, dj, dk, bs, ps, pe, be,
450 recontype, doingweno,
452 stencilvarisnull, preforder, whichreduce,
454 primreal, stencilvar, p2interp, pleft, pright);
470 int realisinterp,
int whichprimtype,
int interporflux,
471 int nprlocalstart,
int nprlocalend,
int *nprlocallist,
int numprims,
473 int is,
int ie,
int js,
int je,
int ks,
int ke,
int di,
int dj,
int dk,
int bs,
int ps,
int pe,
int be,
474 int recontype,
int doingweno,
475 void (*
pass_1d_line)(
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[NBIGM],
FTYPE (*monoindicator)[NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystencilvar)[NBIGM],
FTYPE (*yin)[NBIGM],
FTYPE (*yout)[NBIGM],
FTYPE (*youtpolycoef)[NBIGM],
struct of_trueijkp *trueijkp),
476 void (*
pass_1d_line_multipl)(
int MULTIPLTYPE,
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM],
FTYPE (*monoindicator)[
NUMMONOINDICATORS][NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystecilvar)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*yout)[2][NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][NBIGM],
struct of_trueijkp *trueijkp),
477 int stencilvarisnull,
int preforder,
int whichreduce,
478 int idel,
int jdel,
int kdel,
506 causal_shift_order(whichprimtype, interporflux, dir, preforder, bs, ps, pe, be, i, j, k, idel, jdel ,kdel, shift, minorder, maxorder);
519 get_1d_line_c2e_multipl(
ENOPRIMITIVE, dir, interporflux, bs, ps, pe, be, i, j, k, p2interp, yin, &trueijkp);
523 #if(STORESHOCKINDICATOR==0)
524 dualfprintf(
fail_file,
"If using simple c2e method, need to set STORESHOCKINDICATOR=1\n");
528 get_1d_line_shockarray(dir, interporflux, bs, ps, pe, be, i, j, k,
GLOBALPOINT(shockindicatorarray), shockindicator,&trueijkp);
533 #if(CONTACTINDICATOR)
534 dualfprintf(
fail_file,
"If using simple c2e method with contacts, need to setup flux.c's compute_and_store_fluxstatecent().\n");
546 if(!stencilvarisnull){
547 get_1d_line_c2e_multipl(
ENOPRIMITIVE, dir, interporflux, bs, ps, pe, be, i, j, k, stencilvar, ystencilvar,&trueijkp);
552 NUMPRIMLOOP(pliter,pl)
for(yiter=bs;yiter<=be;yiter++) ystencilvar[pl][0][yiter]=yin[pl][0][yiter];
565 get_df_line_gen_new(realisinterp, doingweno,whichprimtype,interporflux,recontype,dir,whichreduce,preforder, bs, ps, pe, be, minorder, maxorder, shift, yprim, yin, df, &drho, &dP,stiffindicator,Vline,Pline,&trueijkp);
568 get_df_line_paraline(realisinterp, doingweno,whichprimtype,interporflux,recontype,dir,whichreduce,preforder, bs, ps, pe, be, minorder, maxorder, shift, yprim, yin, df, &drho, &dP,stiffindicator,Vline,Pline,&trueijkp);
582 if(!stencilvarisnull){
584 NUMPRIMLOOP(pliter,pl)
compute_df_line_formono(doingweno,interporflux, recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], dfformono[pl]);
589 NUMPRIMLOOP(pliter,pl)
for(yiter=bs;yiter<=be;yiter++)
for(dfiter=0;dfiter<
NUMDFS;dfiter++) dfformono[pl][dfiter][yiter]=df[pl][dfiter][yiter];
600 if(stencilvar==NULL){
601 NUMPRIMLOOP(pliter,pl) compute_monotonicity_line(recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, dfformono[pl], monoindicator[pl], yin[pl][0], yout[pl], youtpolycoef[pl]);
605 NUMPRIMLOOP(pliter,pl) compute_monotonicity_line_indicatoronly(recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, dfformono[pl], monoindicator[pl], ystencilvar[pl][0], yout[pl], youtpolycoef[pl]);
607 NUMPRIMLOOP(pliter,pl) compute_monotonicity_line_valueonly(recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, dfformono[pl], monoindicator[pl], yin[pl][0], yout[pl], youtpolycoef[pl]);
621 pass_1d_line_multipl(
DO_SPLITC2E,
ENOPRIMITIVE, dir,
ALL_CALC, recontype, whichreduce, preforder, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, stiffindicator, Vline, Pline, df, dP, etai, monoindicator, yprim, ystencilvar, yin, yout, youtpolycoef,&trueijkp);
630 assign_eno_result_c2e_multipl(
ENOPRIMITIVE, recontype, bs, ps, pe, be, i, j, k, idel, jdel, kdel, yout, pleft, pright);
641 int realisinterp,
int whichprimtype,
int interporflux,
642 int nprlocalstart,
int nprlocalend,
int *nprlocallist,
int numprims,
644 int is,
int ie,
int js,
int je,
int ks,
int ke,
int di,
int dj,
int dk,
int bs,
int ps,
int pe,
int be,
645 int recontype,
int doingweno,
646 void (*
pass_1d_line)(
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[NBIGM],
FTYPE (*monoindicator)[NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystencilvar)[NBIGM],
FTYPE (*yin)[NBIGM],
FTYPE (*yout)[NBIGM],
FTYPE (*youtpolycoef)[NBIGM],
struct of_trueijkp *trueijkp),
647 void (*
pass_1d_line_multipl)(
int MULTIPLTYPE,
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM],
FTYPE (*monoindicator)[
NUMMONOINDICATORS][NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystecilvar)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*yout)[2][NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][NBIGM],
struct of_trueijkp *trueijkp),
648 int stencilvarisnull,
int preforder,
int whichreduce,
649 int idel,
int jdel,
int kdel,
677 causal_shift_order(whichprimtype, interporflux, dir, preforder, bs, ps, pe, be, i, j, k, idel, jdel ,kdel, shift, minorder, maxorder);
693 NUMPRIMLOOP(pliter,pl)
get_1d_line_c2e(dir, interporflux, pl, bs, ps, pe, be, i, j, k, primreal, yin[pl][0],&trueijkp);
700 get_1d_line_c2e_multipl(
ENOPRIMITIVE, dir, interporflux, bs, ps, pe, be, i, j, k, p2interp, yin, &trueijkp);
705 PALLREALLOOP(pl)
get_1d_line_c2e(dir, interporflux, pl, bs, ps, pe, be, i, j, k, primreal, yprim[pl][0],&trueijkp);
709 get_1d_line_c2e(dir, interporflux,
RHO, bs, ps, pe, be, i, j, k, primreal, yprim[
RHO][0],&trueijkp);
710 get_1d_line_c2e(dir, interporflux,
UU, bs, ps, pe, be, i, j, k, primreal, yprim[
UU][0],&trueijkp);
715 get_1d_line_c2e_gammaeffhydro(dir, interporflux, VSQ, bs, ps, pe, be, i, j, k, idel, jdel, kdel, p2interp, yprim[VSQ][0],&trueijkp);
727 get_1d_line_c2e_multipl(
ENOPRIMITIVE, dir, interporflux, bs, ps, pe, be, i, j, k, p2interp, yin, &trueijkp);
738 if(!stencilvarisnull){
739 get_1d_line_c2e_multipl(
ENOPRIMITIVE, dir, interporflux, bs, ps, pe, be, i, j, k, stencilvar, ystencilvar,&trueijkp);
744 NUMPRIMLOOP(pliter,pl)
for(yiter=bs;yiter<=be;yiter++) ystencilvar[pl][0][yiter]=yin[pl][0][yiter];
757 get_df_line_gen_new(realisinterp, doingweno,whichprimtype,interporflux,recontype,dir,whichreduce,preforder, bs, ps, pe, be, minorder, maxorder, shift, yprim, yin, df, &drho, &dP,stiffindicator,Vline,Pline,&trueijkp);
760 get_df_line_paraline(realisinterp, doingweno,whichprimtype,interporflux,recontype,dir,whichreduce,preforder, bs, ps, pe, be, minorder, maxorder, shift, yprim, yin, df, &drho, &dP,stiffindicator,Vline,Pline,&trueijkp);
773 if(!stencilvarisnull){
775 NUMPRIMLOOP(pliter,pl)
compute_df_line_formono(doingweno,interporflux, recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], dfformono[pl]);
780 NUMPRIMLOOP(pliter,pl)
for(yiter=bs;yiter<=be;yiter++)
for(dfiter=0;dfiter<
NUMDFS;dfiter++) dfformono[pl][dfiter][yiter]=df[pl][dfiter][yiter];
792 get_V_and_P(whichprimtype, interporflux, dir, bs, ps, pe, be, i, j, k, idel, jdel, kdel, yprim, Vline, Pline,&trueijkp);
805 get_shock_indicator(whichprimtype, interporflux, dir, bs, ps, pe, be, i, j, k, idel, jdel ,kdel, yprim, Vline, Pline, shockindicator,&trueijkp);
816 get_contact_indicator(realisinterp, whichprimtype, interporflux, dir, bs, ps, pe, be, i, j, k, idel, jdel ,kdel, yin, Vline, Pline, etai);
830 if(stencilvar==NULL){
831 NUMPRIMLOOP(pliter,pl) compute_monotonicity_line(recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, dfformono[pl], monoindicator[pl], yin[pl][0], yout[pl], youtpolycoef[pl]);
835 NUMPRIMLOOP(pliter,pl) compute_monotonicity_line_indicatoronly(recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, dfformono[pl], monoindicator[pl], ystencilvar[pl][0], yout[pl], youtpolycoef[pl]);
837 NUMPRIMLOOP(pliter,pl) compute_monotonicity_line_valueonly(recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, dfformono[pl], monoindicator[pl], yin[pl][0], yout[pl], youtpolycoef[pl]);
851 pass_1d_line_multipl(
DO_SPLITC2E,
ENOPRIMITIVE, dir,
ALL_CALC, recontype, whichreduce, preforder, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, stiffindicator, Vline, Pline, df, dP, etai, monoindicator, yprim, ystencilvar, yin, yout, youtpolycoef,&trueijkp);
860 assign_eno_result_c2e_multipl(
ENOPRIMITIVE, recontype, bs, ps, pe, be, i, j, k, idel, jdel, kdel, yout, pleft, pright);
876 void slope_lim_linetype(
int whichquantity,
int interporflux,
int dir,
int idel,
int jdel,
int kdel,
FTYPE (*primreal)[
NSTORE2][NSTORE3][NPR],
FTYPE (*stencilvar)[
NSTORE2][NSTORE3][NPR],
FTYPE (*p2interpm)[
NSTORE2][NSTORE3][NPR],
FTYPE (*p2interpp)[
NSTORE2][NSTORE3][NPR],
FTYPE (*pleft)[
NSTORE2][NSTORE3][NPR],
FTYPE (*pright)[
NSTORE2][NSTORE3][NPR])
878 int whichprimtype=whichquantity;
893 setup_nprlocalist(whichprimtype,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
897 if(interporflux==
ENOINTERPTYPE) set_normal_realisinterp(&realisinterp);
921 set_interp_loop_gen(withshifts,interporflux, dir, continuous, loc, &intdir, &is, &ie, &js, &je, &ks, &ke, &di, &dj, &dk, &bs, &ps, &pe, &be);
968 if(stencilvar==NULL) stencilvarisnull=1;
969 else stencilvarisnull=0;
978 higherorder_set(whichquantity, recontype, &weightsplittype);
1000 #pragma omp parallel OPENMPGLOBALPRIVATEFORSTATEANDGEOMINTERP
1017 #pragma omp for schedule(OPENMPSCHEDULE(),OPENMPCHUNKSIZE(blocksize))
1024 realisinterp, whichprimtype, interporflux,
1025 nprlocalstart, nprlocalend, nprlocallist, numprims,
1027 is, ie, js, je, ks, ke, di, dj, dk, bs, ps, pe, be,
1028 recontype, doingweno,
1030 stencilvarisnull, preforder, whichreduce,
1031 weightsplittype, whichquantity,
1033 primreal, stencilvar, p2interpm, p2interpp, pleft, pright);
1051 int i,
int j,
int k,
1052 int realisinterp,
int whichprimtype,
int interporflux,
1053 int nprlocalstart,
int nprlocalend,
int *nprlocallist,
int numprims,
1054 int dir,
int intdir,
1055 int is,
int ie,
int js,
int je,
int ks,
int ke,
int di,
int dj,
int dk,
int bs,
int ps,
int pe,
int be,
1056 int recontype,
int doingweno,
1057 void (*
pass_1d_line)(
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[NBIGM],
FTYPE (*monoindicator)[NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystencilvar)[NBIGM],
FTYPE (*yin)[NBIGM],
FTYPE (*yout)[NBIGM],
FTYPE (*youtpolycoef)[NBIGM],
struct of_trueijkp *trueijkp),
1058 void (*
pass_1d_line_multipl)(
int MULTIPLTYPE,
int whichquantity,
int dir,
int do_weight_or_recon,
int recontype,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*shockindicator)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (*dP)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM],
FTYPE (*monoindicator)[
NUMMONOINDICATORS][NBIGM],
FTYPE (*yprim)[2][NBIGM],
FTYPE (*ystecilvar)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*yout)[2][NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][NBIGM],
struct of_trueijkp *trueijkp),
1059 int stencilvarisnull,
int preforder,
int whichreduce,
1060 int weightsplittype,
int whichquantity,
1061 int idel,
int jdel,
int kdel,
1064 extern int apply_bc_line(
int nprlocalstart,
int nprlocalend,
int*nprlocallist,
int doinverse,
int iter,
int recontype,
int bs,
int be,
FTYPE (*yin)[2][NBIGM],
FTYPE (*yout)[2][NBIGM],
FTYPE (*youtpolycoef)[
MAXSPACEORDER][NBIGM]);
1080 dualfprintf(
fail_file,
"Cannot do weightsplittype==CONSTANT_ALL_WEIGHTS if DOMONOINTERP==%d\n",
DOMONOINTERP);
1087 NUMPRIMLOOP(pliter,pl)
get_1d_line(dir, interporflux, pl, bs, ps, pe, be, i, j, k, p2interpm, p2interpp, yin[pl],&trueijkp);
1090 apply_bc_line(nprlocalstart,nprlocalend,nprlocallist,0,trueijkp.
iter,recontype,bs,be,yin,NULL,NULL);
1094 for(monoi=bs;monoi<=be;monoi++){
1102 compute_monotonicity_line_valueonly(recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, df[pl], monoindicator[pl], yin[pl][0], yout[pl], youtpolycoef[pl]);
1120 causal_shift_order(whichquantity, interporflux, dir, preforder, bs, ps, pe, be, i, j, k, idel, jdel ,kdel, shift, minorder, maxorder);
1135 NUMPRIMLOOP(pliter,pl)
get_1d_line(dir, interporflux, pl, bs, ps, pe, be, i, j, k, primreal, NULL, yin[pl],&trueijkp);
1141 NUMPRIMLOOP(pliter,pl)
get_1d_line(dir, interporflux, pl, bs, ps, pe, be, i, j, k, p2interpm, p2interpp, yin[pl],&trueijkp);
1146 PALLREALLOOP(pl)
get_1d_line(dir, interporflux, pl, bs, ps, pe, be, i, j, k, primreal, NULL, yprim[pl],&trueijkp);
1150 get_1d_line(dir, interporflux,
RHO, bs, ps, pe, be, i, j, k, primreal, NULL, yprim[
RHO],&trueijkp);
1151 get_1d_line(dir, interporflux,
UU, bs, ps, pe, be, i, j, k, primreal, NULL, yprim[
UU],&trueijkp);
1162 NUMPRIMLOOP(pliter,pl)
get_1d_line(dir, interporflux, pl, bs, ps, pe, be, i, j, k, p2interpm, p2interpp, yin[pl],&trueijkp);
1172 if(!stencilvarisnull){
1173 NUMPRIMLOOP(pliter,pl)
get_1d_line(dir, interporflux, pl, bs, ps, pe, be, i, j, k, stencilvar, stencilvar, ystencilvar[pl],&trueijkp);
1177 NUMPRIMLOOP(pliter,pl)
for(yiter=bs;yiter<=be;yiter++){
1178 ystencilvar[pl][0][yiter]=yin[pl][0][yiter];
1179 ystencilvar[pl][1][yiter]=yin[pl][1][yiter];
1186 apply_bc_line(nprlocalstart,nprlocalend,nprlocallist,0,trueijkp.
iter,recontype,bs,be,yin,NULL,NULL);
1196 get_df_line_gen_new(realisinterp, doingweno,whichprimtype,interporflux,recontype,dir,whichreduce,preforder, bs, ps, pe, be, minorder, maxorder, shift, yprim, yin, df, &drho, &dP,stiffindicator,Vline,Pline,&trueijkp);
1205 if(!stencilvarisnull){
1207 NUMPRIMLOOP(pliter,pl)
compute_df_line_formono(doingweno,interporflux, recontype, whichreduce, preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, ystencilvar[pl][0], dfformono[pl]);
1212 NUMPRIMLOOP(pliter,pl)
for(yiter=bs;yiter<=be;yiter++)
for(dfiter=0;dfiter<
NUMDFS;dfiter++) dfformono[pl][dfiter][yiter]=df[pl][dfiter][yiter];
1224 get_V_and_P(whichprimtype, interporflux, dir, bs, ps, pe, be, i, j, k, idel, jdel, kdel, yprim, Vline, Pline,&trueijkp);
1236 get_shock_indicator(whichprimtype, interporflux, dir, bs, ps, pe, be, i, j, k, idel, jdel ,kdel, yprim, Vline, Pline, shockindicator,&trueijkp);
1246 get_contact_indicator(realisinterp, whichprimtype, interporflux, dir, bs, ps, pe, be, i, j, k, idel, jdel ,kdel, yin, Vline, Pline, etai);
1261 compute_monotonicity_line_multipl(stencilvarisnull,weightsplittype,whichquantity,dir,
ALL_CALC,recontype, whichreduce, preforder, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, stiffindicator, Vline, Pline, dfformono, dP, etai, monoindicator, yprim, ystencilvar, yin, yout, youtpolycoef);
1271 if(recontype==
CVT_C2E && (monoindicator[pl][0][0]!=monoindicator[pl][0][0+
N1*idel+
N2*jdel+
N3*kdel] || monoindicator[pl][1][0]!=monoindicator[pl][1][0+
N1*idel+
N2*jdel+
N3*kdel] || monoindicator[pl][2][0]!=monoindicator[pl][2][0+
N1*idel+
N2*jdel+
N3*kdel])
1273 (monoindicator[pl][0][0]!=monoindicator[pl][0][0+
N1*idel+
N2*jdel+
N3*kdel] || monoindicator[pl][1][0]!=monoindicator[pl][1][0+
N1*idel+
N2*jdel+
N3*kdel])
1275 dualfprintf(
fail_file,
"Detected asymmetry: recontype=%d dir=%d ps=%d pe=%d\n",recontype,dir,ps,pe);
1276 dualfprintf(
fail_file,
"i=%d j=%d k=%d di=%d dj=%d dk=%d\n",i,j,k,di,dj,dk);
1277 dualfprintf(
fail_file,
"%21.15g %21.15g %21.15g %21.15g %21.15g %21.15g\n",monoindicator[pl][0][0],monoindicator[pl][0][0+
N1*idel+
N2*jdel+
N3*kdel], monoindicator[pl][1][0],monoindicator[pl][1][0+
N1*idel+
N2*jdel+
N3*kdel],monoindicator[pl][2][0],monoindicator[pl][2][0+
N1*idel+
N2*jdel+
N3*kdel]);
1295 pass_1d_line_multipl(weightsplittype, whichquantity, dir,
ALL_CALC, recontype, whichreduce, preforder, bs, ps, pe, be, minorder, maxorder, shift, shockindicator, stiffindicator, Vline, Pline, df, dP, etai, monoindicator, yprim, ystencilvar, yin, yout, youtpolycoef,&trueijkp);
1299 apply_bc_line(nprlocalstart,nprlocalend,nprlocallist,1,trueijkp.
iter,recontype,bs,be,yin,yout,youtpolycoef);
1322 if(crapdebug==0 || crapdebug==1 || pl!=3 )
assign_eno_result(recontype, pl, bs, ps, pe, be, i, j, k, idel, jdel, kdel, yout[pl], pleft, pright);
1323 else dualfprintf(
fail_file,
"crapdebug=%d\n",crapdebug);
1326 assign_eno_result(recontype, pl, bs, ps, pe, be, i, j, k, idel, jdel, kdel, yout[pl], pleft, pright);
1354 dualfprintf(
fail_file,
"No such interporflux=%d\n", interporflux);
1365 static void set_preforder(
int dir,
int interporflux,
int *preforder,
int*whichreduce)
1416 static void get_df_line_gen(
int realisinterp,
int doingweno,
int whichprimtype,
int interporflux,
int recontype,
int dir,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*yprim)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (**drhoptr)[NBIGM],
FTYPE (**dPptr)[NBIGM],
FTYPE *stiffindicator)
1419 int nprlocalstart,nprlocalend;
1420 int nprlocallist[MAXNPR];
1431 setup_nprlocalist(whichprimtype,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
1440 NUMPRIMLOOP(pliter,pl)
compute_df_line(doingweno,interporflux,recontype, whichreduce,preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], df[pl]);
1452 compute_df_line(doingweno,interporflux,recontype, whichreduce,preforder,
RHO, bs, ps, pe, be, minorder, maxorder, shift, yprim[
RHO][0], *drhoptr);
1453 compute_df_line(doingweno,interporflux,recontype, whichreduce,preforder,
UU, bs, ps, pe, be, minorder, maxorder, shift, yprim[
UU][0], *dPptr);
1456 NUMPRIMLOOP(pliter,pl)
compute_df_line(doingweno,interporflux,recontype, whichreduce,preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], df[pl]);
1463 NUMPRIMLOOP(pliter,pl)
compute_df_line(doingweno,interporflux,recontype, whichreduce,preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], df[pl]);
1475 static void get_df_line_gen_new(
int realisinterp,
int doingweno,
int whichprimtype,
int interporflux,
int recontype,
int dir,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*yprim)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (**drhoptr)[NBIGM],
FTYPE (**dPptr)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp)
1478 int nprlocalstart,nprlocalend;
1479 int nprlocallist[MAXNPR];
1492 setup_nprlocalist(whichprimtype,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
1504 NUMPRIMLOOP(pliter,pl)
compute_df_line(doingweno,interporflux,recontype,whichreduce,preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], df[pl]);
1507 if(doingweno)
compute_df_line_new(doingweno, whichprimtype, interporflux, recontype, dir, whichreduce,preforder, bs, ps, pe, be, minorder, maxorder, shift, yprim, (*dPptr)[0], stiffindicator, Vline, Pline,trueijkp);
1521 NUMPRIMLOOP(pliter,pl)
compute_df_line(doingweno,interporflux,recontype,whichreduce,preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], df[pl]);
1524 compute_df_line(doingweno,interporflux,recontype,whichreduce,preforder,
RHO, bs, ps, pe, be, minorder, maxorder, shift, yprim[
RHO][0], *drhoptr);
1526 if(doingweno)
compute_df_line_new(doingweno,whichprimtype,interporflux,recontype,dir, whichreduce,preforder, bs, ps, pe, be, minorder, maxorder, shift, yprim, (*dPptr)[0], stiffindicator, Vline, Pline,trueijkp);
1533 NUMPRIMLOOP(pliter,pl)
compute_df_line(doingweno,interporflux,recontype,whichreduce,preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], df[pl]);
1541 static void get_df_line_paraline(
int realisinterp,
int doingweno,
int whichprimtype,
int interporflux,
int recontype,
int dir,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*yprim)[2][NBIGM],
FTYPE (*yin)[2][NBIGM],
FTYPE (*df)[
NUMDFS][NBIGM],
FTYPE (**drhoptr)[NBIGM],
FTYPE (**dPptr)[NBIGM],
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp)
1544 int nprlocalstart,nprlocalend;
1545 int nprlocallist[MAXNPR];
1558 setup_nprlocalist(whichprimtype,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
1564 NUMPRIMLOOP(pliter,pl)
compute_df_line_paraline(doingweno,interporflux,recontype,whichreduce,preforder, pl, bs, ps, pe, be, minorder, maxorder, shift, yin[pl][0], df[pl]);
1575 void set_interp_loop_gen(
int withshifts,
int interporflux,
int dir,
int loc,
int continuous,
int *intdir,
int *is,
int *ie,
int *js,
int *je,
int *ks,
int *ke,
int *di,
int *dj,
int *dk,
int *bs,
int *ps,
int *pe,
int *be)
1580 set_interp_loop_expanded(withshifts, interporflux, dir, loc, continuous, intdir, is, ie, js, je, ks, ke, di, dj, dk, bs, ps, pe, be);
1585 set_interp_loop(withshifts, interporflux, dir, loc, continuous, intdir, is, ie, js, je, ks, ke, di, dj, dk, bs, ps, pe, be);
1596 static void set_interp_loop(
int withshifts,
int interporflux,
int dir,
int loc,
int continuous,
int *intdir,
int *is,
int *ie,
int *js,
int *je,
int *ks,
int *ke,
int *di,
int *dj,
int *dk,
int *bs,
int *ps,
int *pe,
int *be)
1789 static void set_interp_loop_expanded(
int withshifts,
int interporflux,
int dir,
int loc,
int continuous,
int *intdir,
int *is,
int *ie,
int *js,
int *je,
int *ks,
int *ke,
int *di,
int *dj,
int *dk,
int *bs,
int *ps,
int *pe,
int *be)
1791 int dir_exception[
NDIM];
1811 dualfprintf(
fail_file,
"No such method with interporflux=%d and dir=%d\n",interporflux,dir);
1833 if( ( (!dir_exception[1]) && (dir==1) ) || (interporflux==
ENOFLUXAVG1TYPE) ){
1883 *bs=myUconsloop[
FIS];
1884 *be=myUconsloop[
FIE];
1901 *ps=myUconsloop[
FIS];
1902 *pe=myUconsloop[
FIE];
1917 *ps=myUconsloop[
FIS];
1918 *pe=myUconsloop[
FIE];
1922 *js=myUconsloop[
FJS];
1927 *js=myUconsloop[
FJS];
1928 *je=myUconsloop[
FJE];
1935 *ks=myUconsloop[
FKS];
1940 *ks=myUconsloop[
FKS];
1941 *ke=myUconsloop[
FKE];
1973 else if( ( (!dir_exception[2]) && (dir==2) ) || (interporflux==
ENOFLUXAVG2TYPE) ){
2018 *bs=myUconsloop[
FJS];
2019 *be=myUconsloop[
FJE];
2035 *ps=myUconsloop[
FJS];
2036 *pe=myUconsloop[
FJE];
2050 *ps=myUconsloop[
FJS];
2051 *pe=myUconsloop[
FJE];
2055 *is=myUconsloop[
FIS];
2059 *is=myUconsloop[
FIS];
2060 *ie=myUconsloop[
FIE];
2068 *ks=myUconsloop[
FKS];
2073 *ks=myUconsloop[
FKS];
2074 *ke=myUconsloop[
FKE];
2106 else if( ( (!dir_exception[3]) && (dir==3) ) || (interporflux==
ENOFLUXAVG3TYPE) ){
2155 *bs=myUconsloop[
FKS];
2156 *be=myUconsloop[
FKE];
2172 *ps=myUconsloop[
FKS];
2173 *pe=myUconsloop[
FKE];
2188 *ps=myUconsloop[
FKS];
2189 *pe=myUconsloop[
FKE];
2193 *is=myUconsloop[
FIS];
2198 *is=myUconsloop[
FIS];
2199 *ie=myUconsloop[
FIE];
2206 *js=myUconsloop[
FJS];
2210 *js=myUconsloop[
FJS];
2211 *je=myUconsloop[
FJE];
2248 static void get_1d_line_c2e_multipl(
int whichquantity,
int dir,
int interporflux,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*p2interp)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*yin)[2][NBIGM],
struct of_trueijkp *trueijkp)
2251 int nprlocalstart,nprlocalend;
2252 int nprlocallist[MAXNPR];
2262 int is2,ie2,js2,je2,ks2,ke2;
2263 int dir_exception[
NDIM];
2273 setup_nprlocalist(whichquantity,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
2290 trueijkp->
j=js2=je2=
j;
2292 trueijkp->
k=ks2=ke2=
k;
2301 trueijkp->
i=is2=ie2=
i;
2308 trueijkp->
k=ks2=ke2=
k;
2316 trueijkp->
i=is2=ie2=
i;
2318 trueijkp->
j=js2=je2=
j;
2330 dualfprintf(
fail_file,
"No such dir=%d in get_1d_line_c2e_multipl()\n",dir);
2336 dualfprintf(
fail_file,
"Reinvestigate why ENO needs this\n");
2342 yin[pl][0][yiniter] = 0;
2350 SUPERGENLOOP(i2,j2,k2,is2,ie2,js2,je2,ks2,ke2,di2,dj2,dk2){
2352 yin[pl][0][yiniter]=
MACP0A1(p2interp,i2,j2,k2,pl);
2359 dualfprintf(
fail_file,
"get_1d_line_c2e_multipl only handles interporflux==ENOINTERPTYPE or ENOINTERPTYPE4EMF\n");
2369 static void get_1d_line_c2e(
int dir,
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*p2interp)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE *yin,
struct of_trueijkp *trueijkp)
2374 int is2,ie2,js2,je2,ks2,ke2;
2375 int dir_exception[
NDIM];
2391 trueijkp->
j=js2=je2=
j;
2393 trueijkp->
k=ks2=ke2=
k;
2402 trueijkp->
i=is2=ie2=
i;
2409 trueijkp->
k=ks2=ke2=
k;
2417 trueijkp->
i=is2=ie2=
i;
2419 trueijkp->
j=js2=je2=
j;
2431 dualfprintf(
fail_file,
"No such dir=%d in get_1d_line_c2e()\n",dir);
2437 dualfprintf(
fail_file,
"Reinvestigate why ENO needs this\n");
2449 SUPERGENLOOP(i2,j2,k2,is2,ie2,js2,je2,ks2,ke2,di2,dj2,dk2){
2451 yin[yiniter]=
MACP0A1(p2interp,i2,j2,k2,pl);
2456 dualfprintf(
fail_file,
"get_1d_line_c2e only handles interporflux==ENOINTERPTYPE or ENOINTERPTYPE4EMF\n");
2465 void get_1d_line_c2e_gammaeffhydro(
int dir,
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*p2interp)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE *yin,
struct of_trueijkp *trueijkp)
2467 int num,locali,localj,localk,localloc;
2471 int is2,ie2,js2,je2,ks2,ke2;
2472 int dir_exception[
NDIM];
2490 trueijkp->
j=js2=je2=
j;
2492 trueijkp->
k=ks2=ke2=
k;
2501 trueijkp->
i=is2=ie2=
i;
2508 trueijkp->
k=ks2=ke2=
k;
2516 trueijkp->
i=is2=ie2=
i;
2518 trueijkp->
j=js2=je2=
j;
2531 dualfprintf(
fail_file,
"Reinvestigate why ENO needs this\n");
2543 SUPERGENLOOP(i2,j2,k2,is2,ie2,js2,je2,ks2,ke2,di2,dj2,dk2){
2545 num=i2*idel+j2*jdel+k2*kdel;
2547 locali=trueijkp->
i+di2*num;
2548 localj=trueijkp->
j+dj2*num;
2549 localk=trueijkp->
k+dk2*num;
2550 localloc=trueijkp->
p;
2552 gamma =
MACP0A1(p2interp,i2,j2,k2,VSQ);
2555 p = pressure_rho0_u_simple(locali,localj,localk,localloc, rho, u );
2559 yin[yiniter]= gamma * ( fabs(rho) + fabs(u) + fabs(p) ) / ( fabs(rho) +
SQRTMINNUMREPRESENT );
2564 dualfprintf(
fail_file,
"get_1d_line_c2e only handles interporflux==ENOINTERPTYPE or ENOINTERPTYPE4EMF\n");
2574 static void get_1d_line(
int dir,
int interporflux,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*p2interpm)[
NSTORE2][NSTORE3][NPR],
FTYPE (*p2interpp)[
NSTORE2][NSTORE3][NPR],
FTYPE (*yin)[NBIGM],
struct of_trueijkp *trueijkp)
2579 int is2,ie2,js2,je2,ks2,ke2;
2580 int dir_exception[
NDIM];
2588 dualfprintf(
fail_file,
"No such method with interporflux=%d and dir=%d\n",interporflux,dir);
2600 if( ( (!dir_exception[1]) && (dir==1) ) || (interporflux==
ENOFLUXAVG1TYPE) ){
2609 trueijkp->
j=js2=je2=
j;
2611 trueijkp->
k=ks2=ke2=
k;
2618 else if( ( (!dir_exception[2]) && (dir==2) ) || (interporflux==
ENOFLUXAVG2TYPE) ){
2622 trueijkp->
i=is2=ie2=
i;
2629 trueijkp->
k=ks2=ke2=
k;
2635 else if( ( (!dir_exception[3]) && (dir==3) ) || (interporflux==
ENOFLUXAVG3TYPE) ){
2639 trueijkp->
i=is2=ie2=
i;
2641 trueijkp->
j=js2=je2=
j;
2655 dualfprintf(
fail_file,
"Reinvestigate why ENO needs this\n");
2660 yin[0][yiniter] = yin[1][yiniter] = 0;
2668 SUPERGENLOOP(i2,j2,k2,is2,ie2,js2,je2,ks2,ke2,di2,dj2,dk2){
2670 yin[0][yiniter]=
MACP0A1(p2interpm,i2,j2,k2,pl);
2676 SUPERGENLOOP(i2,j2,k2,is2,ie2,js2,je2,ks2,ke2,di2,dj2,dk2){
2678 yin[0][yiniter]=
MACP0A1(p2interpm,i2,j2,k2,pl);
2679 if(p2interpp!=NULL) yin[1][yiniter]=
MACP0A1(p2interpp,i2,j2,k2,pl);
2698 static void get_1d_line_shockarray(
int dir,
int interporflux,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
FTYPE (*shockarray)[
NSTORE1][
NSTORE2][NSTORE3],
FTYPE (*shockindicator)[NBIGM],
struct of_trueijkp *trueijkp)
2703 int is2,ie2,js2,je2,ks2,ke2;
2704 int dir_exception[
NDIM];
2712 dualfprintf(
fail_file,
"No such method with interporflux=%d and dir=%d\n",interporflux,dir);
2724 if( ( (!dir_exception[1]) && (dir==1) ) || (interporflux==
ENOFLUXAVG1TYPE) ){
2733 trueijkp->
j=js2=je2=
j;
2735 trueijkp->
k=ks2=ke2=
k;
2742 else if( ( (!dir_exception[2]) && (dir==2) ) || (interporflux==
ENOFLUXAVG2TYPE) ){
2746 trueijkp->
i=is2=ie2=
i;
2753 trueijkp->
k=ks2=ke2=
k;
2759 else if( ( (!dir_exception[3]) && (dir==3) ) || (interporflux==
ENOFLUXAVG3TYPE) ){
2763 trueijkp->
i=is2=ie2=
i;
2765 trueijkp->
j=js2=je2=
j;
2779 SUPERGENLOOP(i2,j2,k2,is2,ie2,js2,je2,ks2,ke2,di2,dj2,dk2){
2784 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)//KORAL
2801 static void causal_shift_order(
int whichprimtype,
int interporflux,
int dir,
int preforder,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
int *shift,
int *minorder,
int *maxorder)
2804 int is3,ie3,js3,je3,ks3,ke3;
2808 FTYPE wspeed0l,wspeed0r,wspeed1l,wspeed1r;
2809 FTYPE wspeed0ll,wspeed1ll;
2811 FTYPE localspeed[2];
2814 int dir_exception[
NDIM];
2821 dualfprintf(
fail_file,
"No such method with interporflux=%d and dir=%d\n",interporflux,dir);
2829 if( ( (!dir_exception[1]) && (dir==1) ) || (interporflux==
ENOFLUXAVG1TYPE) ){
2841 else if( ( (!dir_exception[2]) && (dir==2) ) || (interporflux==
ENOFLUXAVG2TYPE) ){
2853 else if( ( (!dir_exception[3]) && (dir==3) ) || (interporflux==
ENOFLUXAVG3TYPE) ){
2868 #if( (STOREWAVESPEEDS==1)&& ((VCHARTYPE==LOCALVCHAR)||(VCHARTYPE==VERYLOCALVCHAR) ) )
2882 SUPERGENLOOP(i3,j3,k3,is3,ie3,js3,je3,ks3,ke3,di3,dj3,dk3){
2886 temporder=preforder;
2909 localspeed[0]=
min(wspeed0l,wspeed0r);
2910 localspeed[1]=
max(wspeed1l,wspeed1r);
2934 localspeed[0]=wspeed0l;
2935 localspeed[1]=wspeed1l;
2941 shifttemp=-((temporder+1)/2)-(temporder+1)*(
FTYPE)(localspeed[0]/(localspeed[1]-localspeed[0]+
SMALL));
2942 if(shifttemp>(temporder+1)/2) shifttemp=(temporder+1)/2;
2943 if(shifttemp<-((temporder+1)/2)) shifttemp=-((temporder+1)/2);
2949 maxorder[yiniter]=temporder;
2950 shift[yiniter]=shifttemp;
2956 SUPERGENLOOP(i3,j3,k3,is3,ie3,js3,je3,ks3,ke3,di3,dj3,dk3){
2958 maxorder[yiniter]=preforder;
2970 static int get_V_and_P(
int whichprimtype,
int interporflux,
int dir,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yrealin)[2][NBIGM],
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp)
2972 int num,locali,localj,localk,localloc;
2975 int is3,ie3,js3,je3,ks3,ke3;
2978 FTYPE *yrealpl[MAXNPR];
2980 int startorderi,endorderi;
2982 int nprlocalstart,nprlocalend;
2983 int nprlocallist[MAXNPR];
2987 FTYPE myprim[MAXNPR],bsq;
2992 struct of_geom *ptrgeom=&geomdontuse;
3002 setup_nprlocalist(whichprimtype,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
3048 dualfprintf(
fail_file,
"No such dir=%d in get_V_and_P()\n",dir);
3053 di=(trueijkp->
iter==1);
3054 dj=(trueijkp->
iter==2);
3055 dk=(trueijkp->
iter==3);
3059 SUPERGENLOOP(i3,j3,k3,is3,ie3,js3,je3,ks3,ke3,di3,dj3,dk3){
3061 num=iii=i3*idel+j3*jdel+k3*kdel;
3065 locali=trueijkp->
i+di*num;
3066 localj=trueijkp->
j+dj*num;
3067 localk=trueijkp->
k+dk*num;
3068 localloc=trueijkp->
p;
3070 #if(PLINEWITHFIELD || VLINEWITHGDETRHO)
3082 #if(VLINEWITHGDETRHO==0)
3083 Vline[
EOMSETMHD][yiniter]=yrealin[
UU+dir][0][iii];
3089 Vline[
EOMSETMHD][yiniter]=(ptrgeom->gdet)*yrealin[
RHO][0][num]*(qptr->
ucon[dir]);
3092 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
3093 #if(VLINEWITHGDETRHO==0)
3094 Vline[
EOMSETRAD][yiniter]=yrealin[PRAD0+dir][0][iii];
3096 Vline[
EOMSETRAD][yiniter]=(ptrgeom->gdet)*yrealin[PRAD0][0][num]*(qptr->
uradcon[dir]);
3105 #if(PLINEWITHFIELD==0)
3115 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE) // KORAL
3119 calc_tautot(myprim, ptrgeom, NULL, tautot, &tautotmax);
3120 Pline[
EOMSETRAD][yiniter]=(4.0/3.0-1.0)*yrealin[PRAD0][0][num];
3138 static int get_shock_indicator(
int whichprimtype,
int interporflux,
int dir,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yprim)[2][NBIGM],
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*shockindicator)[NBIGM],
struct of_trueijkp *trueijkp)
3141 int is3,ie3,js3,je3,ks3,ke3;
3147 int startorderi,endorderi;
3152 int nprlocalstart,nprlocalend;
3153 int nprlocallist[MAXNPR];
3156 int num,locali,localj,localk,localloc;
3215 dualfprintf(
fail_file,
"No such interporflux=%d in get_shock_indicator()\n",interporflux);
3224 dualfprintf(
fail_file,
"MAXBND should be 4 for shockindicator???\n");
3230 startorderi = - (7)/2;
3231 endorderi = - startorderi;
3234 ypl[plpl] = yinterplistpl[plpl] - startorderi;
3239 di=(trueijkp->
iter==1);
3240 dj=(trueijkp->
iter==2);
3241 dk=(trueijkp->
iter==3);
3244 SUPERGENLOOP(i3,j3,k3,is3,ie3,js3,je3,ks3,ke3,di3,dj3,dk3){
3250 for(l=startorderi;l<=endorderi;l++){
3251 ypl[plpl][l]=yprim[plpl][0][i3*idel+j3*jdel+k3*kdel + l];
3260 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
3265 #if(0 && FLUXDUMP) // DEBUG: (turn off FLUXDUMP in flux.c)
3268 num=i3*idel+j3*jdel+k3*kdel;
3269 locali=trueijkp->
i+di*num;
3270 localj=trueijkp->
j+dj*num;
3271 localk=trueijkp->
k+dk*num;
3272 localloc=trueijkp->
p;
3274 GLOBALMACP0A1(fluxdump,locali,localj,localk,4*NPR + (dir-1)*NPR*5 + NPR*0 +
RHO)=shockindicator[
EOMSETMHD][yiniter];
3289 static int get_contact_indicator(
int realisinterp,
int whichprimtype,
int interporflux,
int dir,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yin)[2][NBIGM],
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
FTYPE (*etai)[
NUMTRUEEOMSETS][NBIGM])
3292 int is3,ie3,js3,je3,ks3,ke3;
3297 int startorderi,endorderi;
3301 int nprlocalstart,nprlocalend;
3302 int nprlocallist[MAXNPR];
3316 setup_nprlocalist(whichprimtype,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
3363 dualfprintf(
fail_file,
"No such interporflux=%d in get_contact_indicator()\n",interporflux);
3372 dualfprintf(
fail_file,
"MAXBND should be 4 for contactindicator???\n");
3376 startorderi = - (7)/2;
3377 endorderi = - startorderi;
3381 ypl[plpl] = yinterplistpl[plpl] - startorderi;
3385 SUPERGENLOOP(i3,j3,k3,is3,ie3,js3,je3,ks3,ke3,di3,dj3,dk3){
3390 if(plpl==
RHO && realisinterp){
3392 for(l=startorderi;l<=endorderi;l++){
3393 ypl[plpl][l]=yin[plpl][0][i3*idel+j3*jdel+k3*kdel + l];
3397 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
3403 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
3423 static int compute_df_line(
int doingweno,
int interporflux,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE *yin,
FTYPE (*df)[NBIGM])
3438 dualfprintf(
fail_file,
"paraline requires NUMDFS=4 while set to %d\n",
NUMDFS);
3442 dualfprintf(
fail_file,
"MONO requires NUMDFS=5 while set to %d\n",
NUMDFS);
3449 #if(NUMDFS>DFONESIDED)
3453 for(i=bs+1;i<=be;i++) df[
DFONESIDED][i] = yin[i]-yin[i-1];
3460 for(i=bs+1;i<=be-1;i++) df[
DFCENT][i] = 0.5*(yin[i+1]-yin[i-1]);
3464 #if(NUMDFS>DFCENT2APART)
3466 for(i=bs+2;i<=be-2;i++) df[
DFCENT2APART][i] = 0.25*(yin[i+2]-yin[i-2]);
3469 #if(NUMDFS>DF2OFONESIDED)
3478 for(i=bs+1;i<=be-1;i++){
3483 #if(NUMDFS>DF2OFMONO)
3499 static int compute_df_line_paraline(
int doingweno,
int interporflux,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE *yin,
FTYPE (*df)[NBIGM])
3514 dualfprintf(
fail_file,
"paraline requires NUMDFS=4 while set to %d\n",
NUMDFS);
3519 #if(NUMDFS>DFONESIDED)
3523 for(i=bs+1;i<=be;i++) df[
DFONESIDED][i] = yin[i]-yin[i-1];
3530 for(i=bs+1;i<=be-1;i++) df[
DFCENT][i] = 0.5*(yin[i+1]-yin[i-1]);
3538 for(i=bs+1;i<=be-1;i++){
3543 #if(NUMDFS>DF2OFMONO)
3558 static int compute_df_line_formono(
int doingweno,
int interporflux,
int recontype,
int whichreduce,
int preforder,
int pl,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE *yin,
FTYPE (*df)[NBIGM])
3564 #if(NUMDFS>DFONESIDED)
3568 for(i=bs+1;i<=be;i++) df[
DFONESIDED][i] = yin[i]-yin[i-1];
3571 dualfprintf(
fail_file,
"Need NUMDFS=%d bigger for SMONO to be used1\n",
NUMDFS);
3575 #if(NUMDFS>DF2OFONESIDED)
3580 dualfprintf(
fail_file,
"Need NUMDFS=%d bigger for SMONO to be used2\n",
NUMDFS);
3593 int compute_df_line_new(
int doingweno,
int whichprimtype,
int interporflux,
int recontype,
int dir,
int whichreduce,
int preforder,
int bs,
int ps,
int pe,
int be,
int *minorder,
int *maxorder,
int *shift,
FTYPE (*yprim)[2][NBIGM],
FTYPE *df,
FTYPE *stiffindicator,
FTYPE (*Vline)[NBIGM],
FTYPE (*Pline)[NBIGM],
struct of_trueijkp *trueijkp)
3596 int num,locali,localj,localk,localloc;
3599 FTYPE myprim[MAXNPR];
3600 FTYPE mypriml[MAXNPR];
3601 FTYPE myprimr[MAXNPR];
3602 FTYPE myPgas,myPtot;
3608 FTYPE par,parl,parr;
3609 FTYPE uparl,uparr,upar;
3610 FTYPE veffl,veffr,veff;
3611 int nprlocalstart,nprlocalend;
3612 int nprlocallist[MAXNPR];
3615 FTYPE stifffactor,stifffactor1,stifffactor2;
3627 struct of_geom *ptrgeom=&geomdontuse;
3634 dualfprintf(
fail_file,
"Shouldn't be in compute_df_line_new if not doing WENO\n");
3650 bsqline=(
FTYPE (*)) (&(a_bsqline[NBIGBND]));
3651 parline=(
FTYPE (*)) (&(a_parline[NBIGBND]));
3652 uparline=(
FTYPE (*)) (&(a_uparline[NBIGBND]));
3653 veffline=(
FTYPE (*)) (&(a_veffline[NBIGBND]));
3657 di=(trueijkp->
iter==1);
3658 dj=(trueijkp->
iter==2);
3659 dk=(trueijkp->
iter==3);
3662 for(num=bs;num<=be;num++){
3666 locali=trueijkp->
i+di*num;
3667 localj=trueijkp->
j+dj*num;
3668 localk=trueijkp->
k+dk*num;
3669 localloc=trueijkp->
p;
3685 Pgasline[num]=pressure_rho0_u_simple(locali,localj,localk,localloc,myprim[
RHO],myprim[
UU]);
3687 #if(VLINEWITHGDETRHO==0)
3692 Vline[
EOMSETMHD][num]=(ptrgeom->gdet)*yprim[RHO][0][num]*(qptr->
ucon[dir]);
3695 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE)
3696 #if(VLINEWITHGDETRHO==0)
3699 Vline[
EOMSETRAD][num]=(ptrgeom->gdet)*yprim[PRAD0][0][num]*(qptr->
uradcon[dir]);
3707 myPgas = Pgasline[num];
3708 myPtot = myPgas + 0.5*bsq;
3712 #if(RADSHOCKFLAT&&EOMRADTYPE!=EOMRADNONE) // KORAL
3716 calc_tautot(myprim, ptrgeom, NULL, tautot, &tautotmax);
3717 Pline[
EOMSETRAD][num]=(4.0/3.0-1.0)*yprim[PRAD0][0][num];
3723 bsqline[num]=fabs(bsq);
3732 uparline[num] = fabs( (myprim[UU] + myPgas + bsq )*( fabs(qptr->
ucon[dir]) *qptr->
ucov[
TT]) + myPtot + btt );
3744 for(num=bs;num<=be;num++){
3753 stifffactor =
max(
max(fabs(bsq/myprim[
RHO]),fabs(bsq/myprim[
UU])),fabs(par));
3756 stiffindicator[num] =
max(
min(stifffactor-2.0,1.0),0.0);
3767 for(num=bs+1;num<=be-1;num++){
3773 parl=parline[num-1];
3774 parr=parline[num+1];
3776 uparl=uparline[num-1];
3777 uparr=uparline[num+1];
3779 veffl=veffline[num-1];
3780 veffr=veffline[num+1];
3800 df[num] = ( fabs(myprim[
RHO]*(veffr-veffl)*(veffr-veffl)) + fabs(uparr-uparl) ) / ( fabs(myprim[
RHO]*par) + fabs(upar) +
SMALL );
3817 stifffactor = fabs(par);
3819 stifffactor1 =
max(
min(stifffactor-2.0,1.0),0.0);
3822 stifffactor2 =
max(
min(fabs(df[num])*30.0,1.0),0.0);
3825 stiffindicator[num]=
max(
min(
max(stifffactor1,stifffactor2),1.0),0.0);
3833 #if(0 && FLUXDUMP) // DEBUG: (turn off FLUXDUMP in flux.c)
3836 locali=trueijkp->
i+di*num;
3837 localj=trueijkp->
j+dj*num;
3838 localk=trueijkp->
k+dk*num;
3839 localloc=trueijkp->
p;
3841 GLOBALMACP0A1(fluxdump,locali,localj,localk,4*NPR + (dir-1)*NPR*5 + NPR*0 +
RHO)=stifffactor;
3842 GLOBALMACP0A1(fluxdump,locali,localj,localk,4*NPR + (dir-1)*NPR*5 + NPR*0 +
UU)=stiffindicator[num];
3843 GLOBALMACP0A1(fluxdump,locali,localj,localk,4*NPR + (dir-1)*NPR*5 + NPR*0 +
U1)=veff;
3864 static void assign_eno_result_c2e_multipl(
int whichquantity,
int recontype,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yout)[2][NBIGM],
FTYPE (*result0)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*result1)[
NSTORE2][NSTORE3][NPR2INTERP])
3867 int nprlocalstart,nprlocalend;
3868 int nprlocallist[MAXNPR];
3885 setup_nprlocalist(whichquantity,&nprlocalstart,&nprlocalend,nprlocallist,&numprims);
3898 for(l=ps;l<=pe;l++){
3907 for(l=ps;l<=pe;l++){
3916 for(l=ps;l<=pe;l++){
3923 dualfprintf(
fail_file,
"No such idel=%d jdel=%d kdel=%d in assign_eno_result_c2e()\n",idel,jdel,kdel);
3929 dualfprintf(
fail_file,
"assign_eno_result_c2e only handles recontype==CVT_C2E\n");
3939 static void assign_eno_result_c2e(
int recontype,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yout)[NBIGM],
FTYPE (*result0)[
NSTORE2][NSTORE3][NPR2INTERP],
FTYPE (*result1)[
NSTORE2][NSTORE3][NPR2INTERP])
3950 for(l=ps;l<=pe;l++){
3952 MACP0A1(result0,ii,jj,kk,pl) = yout[0][l];
3953 MACP0A1(result1,ii,jj,kk,pl) = yout[1][l];
3959 for(l=ps;l<=pe;l++){
3961 MACP0A1(result0,ii,jj,kk,pl) = yout[0][l];
3962 MACP0A1(result1,ii,jj,kk,pl) = yout[1][l];
3968 for(l=ps;l<=pe;l++){
3970 MACP0A1(result0,ii,jj,kk,pl) = yout[0][l];
3971 MACP0A1(result1,ii,jj,kk,pl) = yout[1][l];
3975 dualfprintf(
fail_file,
"No such idel=%d jdel=%d kdel=%d in assign_eno_result_c2e()\n",idel,jdel,kdel);
3981 dualfprintf(
fail_file,
"assign_eno_result_c2e only handles recontype==CVT_C2E\n");
3990 static void assign_eno_result(
int recontype,
int pl,
int bs,
int ps,
int pe,
int be,
int i,
int j,
int k,
int idel,
int jdel,
int kdel,
FTYPE (*yout)[NBIGM],
FTYPE (*result0)[
NSTORE2][NSTORE3][NPR],
FTYPE (*result1)[
NSTORE2][NSTORE3][NPR])
3997 for(l=ps;l<=pe;l++){
3998 MACP0A1(result0,i+l*idel,j+l*jdel,k+l*kdel,pl) = yout[0][l];
3999 MACP0A1(result1,i+l*idel,j+l*jdel,k+l*kdel,pl) = yout[1][l];
4003 for(l=ps;l<=pe;l++){
4010 if(crapdebug==0)
MACP0A1(result0,i+l*idel,j+l*jdel,k+l*kdel,pl) = yout[0][l];
4012 if(pl!=3)
MACP0A1(result0,i+l*idel,j+l*jdel,k+l*kdel,pl) = yout[0][l];
4017 dualfprintf(
fail_file,
"OUT OF BOUNDS\n");
4022 if(crapdebug && pl==3){
4023 dualfprintf(
fail_file,
"ti=%d tj=%d tk=%d :: i=%d j=%d k=%d l=%d idel=%d jdel=%d kdel=%d pl=%d\n",i+l*idel,j+l*jdel,k+l*kdel,i,j,k,l,idel,jdel,kdel,pl);