Supposedly working autotest for upwinding.

This commit is contained in:
Miikka Vaisala
2019-08-07 18:57:53 +08:00
parent 065f20819f
commit 738b2abaf3

View File

@@ -43,6 +43,9 @@ typedef struct {
ModelScalar value; ModelScalar value;
ModelVector gradient; ModelVector gradient;
ModelMatrix hessian; ModelMatrix hessian;
#if LUPWD
ModelVector upwind;
#endif
} ModelScalarData; } ModelScalarData;
typedef struct { typedef struct {
@@ -332,6 +335,12 @@ compute_gradient(const int i, const int j, const int k, const ModelScalar* arr)
return (ModelVector){derx(i, j, k, arr), dery(i, j, k, arr), derz(i, j, k, arr)}; return (ModelVector){derx(i, j, k, arr), dery(i, j, k, arr), derz(i, j, k, arr)};
} }
static inline ModelVector
compute_upwind(const int i, const int j, const int k, const ModelScalar* arr)
{
return (ModelVector){der6x_upwd(i, j, k, arr), der6y_upwd(i, j, k, arr), der6z_upwd(i, j, k, arr)};
}
static inline ModelMatrix static inline ModelMatrix
compute_hessian(const int i, const int j, const int k, const ModelScalar* arr) compute_hessian(const int i, const int j, const int k, const ModelScalar* arr)
{ {
@@ -356,6 +365,10 @@ read_data(const int i, const int j, const int k, ModelScalar* buf[], const int h
// diagonals with all arrays // diagonals with all arrays
data.hessian = compute_hessian(i, j, k, buf[handle]); data.hessian = compute_hessian(i, j, k, buf[handle]);
#if LUPWD
data.upwind = compute_upwind(i, j, k, buf[handle]);
#endif
return data; return data;
} }
@@ -559,7 +572,7 @@ upwd_der6(const ModelVectorData& uu, const ModelScalarData& lnrho)
ModelScalar uux = fabs(value(uu).x); ModelScalar uux = fabs(value(uu).x);
ModelScalar uuy = fabs(value(uu).y); ModelScalar uuy = fabs(value(uu).y);
ModelScalar uuz = fabs(value(uu).z); ModelScalar uuz = fabs(value(uu).z);
return uux*der6x_upwd(lnrho) + uuy*der6y_upwd(lnrho) + uuz*der6z_upwd(lnrho); return uux*lnrho.upwind.x + uuy*lnrho.upwind.y + uuz*lnrho.upwind.z;
} }
#endif #endif