HARM
harm and utilities
 All Data Structures Files Functions Variables Typedefs Macros Pages
Macros | Functions
flux.c File Reference

Routines for computing fluxes except those special routines directly related to FLUXB==FLUXCTSTAG or FLUXCTTOTH. More...

#include "decs.h"
Include dependency graph for flux.c:

Go to the source code of this file.

Macros

#define STOREWAVESPEEDMETHOD   1
 
#define MYCOMPLOOPF3   for(k=-SHIFT3+SHIFTX3DN;k<=N3-1+SHIFT3+SHIFT3+SHIFTX3UP;k++)
 
#define MYCOMPLOOPF2   for(j=-SHIFT2+SHIFTX2DN;j<=N2-1+SHIFT2+SHIFT2+SHIFTX2UP;j++)
 
#define MYCOMPLOOPF1   for(i=-SHIFT1+SHIFTX1DN;i<=N1-1+SHIFT1+SHIFT1+SHIFTX1UP;i++)
 
#define MYCOMPLOOPF   MYCOMPLOOPF3 MYCOMPLOOPF2 MYCOMPLOOPF1
 
#define WHICHEMF   1
 

Functions

int fluxcalc (int stage, int initialstep, int finalstep, FTYPE(*pr)[NSTORE2][NSTORE3][NPR], FTYPE(*pstag)[NSTORE2][NSTORE3][NPR], FTYPE(*pl_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pr_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*vpot)[NSTORE1+SHIFTSTORE1][NSTORE2+SHIFTSTORE2][NSTORE3+SHIFTSTORE3], FTYPE(*F1)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*F2)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*F3)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE *CUf, FTYPE *CUnew, SFTYPE fluxdt, SFTYPE fluxtime, FTYPE *ndt1, FTYPE *ndt2, FTYPE *ndt3)
 see fluxcompute.c for non-computer science, real physics calculations of flux More...
 
int fluxEM2flux4EMF (int *Nvec, FTYPE(*fluxvec[NDIM])[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*fluxvecEM[NDIM])[NSTORE2][NSTORE3][NPR+NSPECIAL])
 
int fluxcalc_flux (int stage, FTYPE(*pr)[NSTORE2][NSTORE3][NPR], FTYPE(*pstag)[NSTORE2][NSTORE3][NPR], FTYPE(*pl_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pr_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], int *Nvec, FTYPE(*dqvec[NDIM])[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*fluxvec[NDIM])[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*fluxvecEM[NDIM])[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE CUf, SFTYPE time, FTYPE *ndtvec[NDIM], struct of_loop *cent2faceloop)
 wrapper for CENT_to_FACE1,2,3 used to compute flux at face More...
 
int fluxcalc_flux_1d (int stage, FTYPE(*pr)[NSTORE2][NSTORE3][NPR], FTYPE(*pstag)[NSTORE2][NSTORE3][NPR], FTYPE(*pl_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pr_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], int dir, SFTYPE time, int is, int ie, int js, int je, int ks, int ke, int idel, int jdel, int kdel, int face, FTYPE(*dq)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*F)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*FEM)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE CUf, FTYPE *ndt, struct of_loop *cent2faceloop, int *didassigngetstatecentdata)
 wrapper for different standard 1-D flux calculators 1-D interpolate and get flux for that direction (assumes purely 1-D Riemann problem) More...
 
int fluxcalc_standard (int stage, FTYPE(*pr)[NSTORE2][NSTORE3][NPR], FTYPE(*pstag)[NSTORE2][NSTORE3][NPR], FTYPE(*pl_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pr_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], int dir, SFTYPE time, int is, int ie, int js, int je, int ks, int ke, int idel, int jdel, int kdel, int face, FTYPE(*dq)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*F)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*FEM)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE CUf, FTYPE *ndt, struct of_loop *cent2faceloop, int *didassigngetstatecentdata)
 original flux calculator that gets F in "dir". At end global pleft,pright,dq also set and if STOREWAVESPEEDS>0 then wavespeeds stored globally More...
 
int fluxcalc_standard_4fluxctstag (int stage, FTYPE(*pr)[NSTORE2][NSTORE3][NPR], FTYPE(*pstag)[NSTORE2][NSTORE3][NPR], FTYPE(*pl_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pr_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], int dir, SFTYPE time, int is, int ie, int js, int je, int ks, int ke, int idel, int jdel, int kdel, int face, FTYPE(*dq)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*F)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*FEM)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE CUf, FTYPE *ndt, struct of_loop *cent2faceloop, int *didassigngetstatecentdata)
 standard (non-field flux) calculation but setup to store results of interpolation so can be used for fluxctstag calculation set pl_ct and pr_ct with FACE interpolations from CENT (including field face from pstagscratch[]) At end global pleft,pright,dq also set and if STOREWAVESPEEDS>0 then wavespeeds stored globally More...
 
int interpolate_prim_cent2face (int stage, int realisinterp, FTYPE(*pr)[NSTORE2][NSTORE3][NPR], FTYPE(*pstag)[NSTORE2][NSTORE3][NPR], FTYPE(*pl_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pr_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], int dir, SFTYPE time, int is, int ie, int js, int je, int ks, int ke, int idel, int jdel, int kdel, int face, FTYPE(*dq)[NSTORE2][NSTORE3][NPR2INTERP], struct of_loop *cent2faceloop)
 normal interpolation of CENT quantities to FACE quantities sets global variables pl_ct and pr_ct to p_l and p_r from interpolations More...
 
void slope_lim (int dointerpolation, int realisinterp, int dir, int idel, int jdel, int kdel, FTYPE(*primreal)[NSTORE2][NSTORE3][NPR], FTYPE(*p2interp)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*dq)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pleft)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pright)[NSTORE2][NSTORE3][NPR2INTERP], struct of_loop *cent2faceloop)
 slope_lim() is provided p2interp and returns pleft/pright More...
 
void slope_lim_cent2face (int dointerpolation, int realisinterp, int dir, int idel, int jdel, int kdel, FTYPE(*primreal)[NSTORE2][NSTORE3][NPR], FTYPE(*p2interp)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*dq)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pleft)[NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pright)[NSTORE2][NSTORE3][NPR2INTERP], struct of_loop *cent2faceloop)
 slope_lim_cent2face() is provided p2interp and returns pleft/pright gets interpolations in expanded region for FLUXRECON && FLUXCTSTAG method if updating quasi-deaveraged field instead of point value More...
 
int fluxcalc_donor (int stage, FTYPE(*pr)[NSTORE2][NSTORE3][NPR], FTYPE(*pstag)[NSTORE2][NSTORE3][NPR], FTYPE(*pl_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*pr_ct)[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP], FTYPE(*vpot)[NSTORE1+SHIFTSTORE1][NSTORE2+SHIFTSTORE2][NSTORE3+SHIFTSTORE3], FTYPE(*F1)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*F2)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE(*F3)[NSTORE2][NSTORE3][NPR+NSPECIAL], FTYPE CUf, FTYPE fluxdt, FTYPE *ndt1, FTYPE *ndt2, FTYPE *ndt3)
 compute donor-based flux, bypassing normal fluxcalc(). More...
 

Detailed Description

Routines for computing fluxes except those special routines directly related to FLUXB==FLUXCTSTAG or FLUXCTTOTH.

OPTMARK: Should redo flux's so that fluxes are accessed by MAC(F1,j,k,i) MAC(F2,k,i,j) MAC(F3,i,j,k) for faster differencing in advance.c Maybe not important

Definition in file flux.c.

Macro Definition Documentation

#define MYCOMPLOOPF   MYCOMPLOOPF3 MYCOMPLOOPF2 MYCOMPLOOPF1
#define MYCOMPLOOPF1   for(i=-SHIFT1+SHIFTX1DN;i<=N1-1+SHIFT1+SHIFT1+SHIFTX1UP;i++)
#define MYCOMPLOOPF2   for(j=-SHIFT2+SHIFTX2DN;j<=N2-1+SHIFT2+SHIFT2+SHIFTX2UP;j++)
#define MYCOMPLOOPF3   for(k=-SHIFT3+SHIFTX3DN;k<=N3-1+SHIFT3+SHIFT3+SHIFTX3UP;k++)
#define STOREWAVESPEEDMETHOD   1

Definition at line 2579 of file flux.c.

#define WHICHEMF   1

Function Documentation

int fluxcalc ( int  stage,
int  initialstep,
int  finalstep,
FTYPE(*)  pr[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pstag[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pl_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pr_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  vpot[NSTORE1+SHIFTSTORE1][NSTORE2+SHIFTSTORE2][NSTORE3+SHIFTSTORE3],
FTYPE(*)  F1[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*)  F2[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*)  F3[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE CUf,
FTYPE CUnew,
SFTYPE  fluxdt,
SFTYPE  fluxtime,
FTYPE ndt1,
FTYPE ndt2,
FTYPE ndt3 
)

see fluxcompute.c for non-computer science, real physics calculations of flux

Definition at line 44 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int fluxcalc_donor ( int  stage,
FTYPE(*)  pr[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pstag[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pl_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pr_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  vpot[NSTORE1+SHIFTSTORE1][NSTORE2+SHIFTSTORE2][NSTORE3+SHIFTSTORE3],
FTYPE(*)  F1[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*)  F2[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*)  F3[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE  CUf,
FTYPE  fluxdt,
FTYPE ndt1,
FTYPE ndt2,
FTYPE ndt3 
)

compute donor-based flux, bypassing normal fluxcalc().

Allows one to check consistency. Or if really want DONOR, then much faster. To use this, remove "_donor" on function name and rename normal function to be with (e.g.) "_normal" on end of function name. compute donor-based flux, bypassing normal fluxcalc(). Allows one to check consistency. Or if really want DONOR, then much faster.

Definition at line 2586 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int fluxcalc_flux ( int  stage,
FTYPE(*)  pr[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pstag[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pl_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pr_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
int *  Nvec,
FTYPE(*[])  NDIM[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*[])  NDIM[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*[])  NDIM[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE  CUf,
SFTYPE  time,
FTYPE ndtvec[NDIM],
struct of_loop cent2faceloop 
)

wrapper for CENT_to_FACE1,2,3 used to compute flux at face

Definition at line 662 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int fluxcalc_flux_1d ( int  stage,
FTYPE(*)  pr[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pstag[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pl_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pr_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
int  dir,
SFTYPE  time,
int  is,
int  ie,
int  js,
int  je,
int  ks,
int  ke,
int  idel,
int  jdel,
int  kdel,
int  face,
FTYPE(*)  dq[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  F[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*)  FEM[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE  CUf,
FTYPE ndt,
struct of_loop cent2faceloop,
int *  didassigngetstatecentdata 
)

wrapper for different standard 1-D flux calculators 1-D interpolate and get flux for that direction (assumes purely 1-D Riemann problem)

Definition at line 805 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int fluxcalc_standard ( int  stage,
FTYPE(*)  pr[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pstag[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pl_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pr_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
int  dir,
SFTYPE  time,
int  is,
int  ie,
int  js,
int  je,
int  ks,
int  ke,
int  idel,
int  jdel,
int  kdel,
int  face,
FTYPE(*)  dq[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  F[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*)  FEM[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE  CUf,
FTYPE ndt,
struct of_loop cent2faceloop,
int *  didassigngetstatecentdata 
)

original flux calculator that gets F in "dir". At end global pleft,pright,dq also set and if STOREWAVESPEEDS>0 then wavespeeds stored globally

Definition at line 940 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int fluxcalc_standard_4fluxctstag ( int  stage,
FTYPE(*)  pr[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pstag[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pl_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pr_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
int  dir,
SFTYPE  time,
int  is,
int  ie,
int  js,
int  je,
int  ks,
int  ke,
int  idel,
int  jdel,
int  kdel,
int  face,
FTYPE(*)  dq[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  F[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*)  FEM[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE  CUf,
FTYPE ndt,
struct of_loop cent2faceloop,
int *  didassigngetstatecentdata 
)

standard (non-field flux) calculation but setup to store results of interpolation so can be used for fluxctstag calculation set pl_ct and pr_ct with FACE interpolations from CENT (including field face from pstagscratch[]) At end global pleft,pright,dq also set and if STOREWAVESPEEDS>0 then wavespeeds stored globally

Definition at line 1283 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

int fluxEM2flux4EMF ( int *  Nvec,
FTYPE(*[])  NDIM[NSTORE2][NSTORE3][NPR+NSPECIAL],
FTYPE(*[])  NDIM[NSTORE2][NSTORE3][NPR+NSPECIAL] 
)

Definition at line 554 of file flux.c.

Here is the caller graph for this function:

int interpolate_prim_cent2face ( int  stage,
int  realisinterp,
FTYPE(*)  pr[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pstag[NSTORE2][NSTORE3][NPR],
FTYPE(*)  pl_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pr_ct[NSTORE1][NSTORE2][NSTORE3][NPR2INTERP],
int  dir,
SFTYPE  time,
int  is,
int  ie,
int  js,
int  je,
int  ks,
int  ke,
int  idel,
int  jdel,
int  kdel,
int  face,
FTYPE(*)  dq[NSTORE2][NSTORE3][NPR2INTERP],
struct of_loop cent2faceloop 
)

normal interpolation of CENT quantities to FACE quantities sets global variables pl_ct and pr_ct to p_l and p_r from interpolations

Definition at line 1518 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void slope_lim ( int  dointerpolation,
int  realisinterp,
int  dir,
int  idel,
int  jdel,
int  kdel,
FTYPE(*)  primreal[NSTORE2][NSTORE3][NPR],
FTYPE(*)  p2interp[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  dq[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pleft[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pright[NSTORE2][NSTORE3][NPR2INTERP],
struct of_loop cent2faceloop 
)

slope_lim() is provided p2interp and returns pleft/pright

|=interface i=zone center of ith zone

| | p2interp(i) | | pl(i)|pr(i) i | | Fl(i)|Fr(i) i | | Ul(i)|Ur(i) i | | |pleft(i) pright(i)| | |F(i) |

Definition at line 2491 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function:

void slope_lim_cent2face ( int  dointerpolation,
int  realisinterp,
int  dir,
int  idel,
int  jdel,
int  kdel,
FTYPE(*)  primreal[NSTORE2][NSTORE3][NPR],
FTYPE(*)  p2interp[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  dq[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pleft[NSTORE2][NSTORE3][NPR2INTERP],
FTYPE(*)  pright[NSTORE2][NSTORE3][NPR2INTERP],
struct of_loop cent2faceloop 
)

slope_lim_cent2face() is provided p2interp and returns pleft/pright gets interpolations in expanded region for FLUXRECON && FLUXCTSTAG method if updating quasi-deaveraged field instead of point value

|=interface i=zone center of ith zone

| | p2interp(i) | | pl(i)|pr(i) i | | Fl(i)|Fr(i) i | | Ul(i)|Ur(i) i | | |pleft(i) pright(i)| | |F(i) |

Definition at line 2533 of file flux.c.

Here is the call graph for this function:

Here is the caller graph for this function: