Skip to content

Commit

Permalink
Merge pull request CEED#1330 from CEED/jrwrigh/fluids_physical_grad
Browse files Browse the repository at this point in the history
fluids: Add StatePhysicalGradientFromReference util
  • Loading branch information
jrwrigh authored Oct 8, 2023
2 parents 2bc6469 + 9b6a821 commit 851646d
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 97 deletions.
2 changes: 1 addition & 1 deletion examples/fluids/blasius.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ bc_wall: 3
wall_comps: 1,2,3
bc_inflow: 6
bc_outflow: 5,4
g: 0,0,0
gravity: 0,0,0

stg:
use: false
Expand Down
64 changes: 22 additions & 42 deletions examples/fluids/qfunctions/freestream_bc.h
Original file line number Diff line number Diff line change
Expand Up @@ -477,10 +477,10 @@ CEED_QFUNCTION_HELPER CeedScalar Softplus_fwd(CeedScalar x, CeedScalar dx, CeedS
// skipping this feature and just allowing recirculation.
CEED_QFUNCTION_HELPER int RiemannOutflow(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out, StateVariable state_var) {
// Inputs
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q) = in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand Down Expand Up @@ -509,12 +509,7 @@ CEED_QFUNCTION_HELPER int RiemannOutflow(void *ctx, CeedInt Q, const CeedScalar
State s_ext = StateFromPrimitive(gas, y_ext, x_i);

State grad_s[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi[5];
for (CeedInt j = 0; j < 5; j++) dqi[j] = Grad_q[0][j][i] * dXdx[0][k] + Grad_q[1][j][i] * dXdx[1][k];
dx_i[k] = 1.;
grad_s[k] = StateFromQ_fwd(gas, s_int, dqi, x_i, dx_i, state_var);
}
StatePhysicalGradientFromReference_Boundary(Q, i, gas, s_int, x_i, state_var, Grad_q, dXdx, false, grad_s);

CeedScalar strain_rate[6], kmstress[6], stress[3][3], Fe[3];
KMStrainRate_State(grad_s, strain_rate);
Expand Down Expand Up @@ -550,11 +545,11 @@ CEED_QFUNCTION(RiemannOutflow_Prim)(void *ctx, CeedInt Q, const CeedScalar *cons
CEED_QFUNCTION_HELPER int RiemannOutflow_Jacobian(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out,
StateVariable state_var) {
// Inputs
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data_sur) = in[4];
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq) = in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data_sur) = in[4];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand Down Expand Up @@ -596,12 +591,7 @@ CEED_QFUNCTION_HELPER int RiemannOutflow_Jacobian(void *ctx, CeedInt Q, const Ce
State ds_ext = StateFromPrimitive_fwd(gas, s_ext, dy_ext, x_i, dx_i);

State grad_ds[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi_j[5];
for (CeedInt j = 0; j < 5; j++) dqi_j[j] = Grad_dq[0][j][i] * dXdx[0][k] + Grad_dq[1][j][i] * dXdx[1][k];
dx_i[k] = 1.;
grad_ds[k] = StateFromQ_fwd(gas, s_int, dqi_j, x_i, dx_i, state_var);
}
StatePhysicalGradientFromReference_Boundary(Q, i, gas, s_int, x_i, state_var, Grad_dq, dXdx, false, grad_ds);

CeedScalar dstrain_rate[6], dkmstress[6], stress[3][3], dstress[3][3], dFe[3];
KMStrainRate_State(grad_ds, dstrain_rate);
Expand Down Expand Up @@ -637,10 +627,10 @@ CEED_QFUNCTION(RiemannOutflow_Jacobian_Prim)(void *ctx, CeedInt Q, const CeedSca
// *****************************************************************************
CEED_QFUNCTION_HELPER int PressureOutflow(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out, StateVariable state_var) {
// Inputs
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q) = in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand All @@ -664,12 +654,7 @@ CEED_QFUNCTION_HELPER int PressureOutflow(void *ctx, CeedInt Q, const CeedScalar
wdetJb *= is_implicit ? -1. : 1.;

State grad_s[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi[5];
for (CeedInt j = 0; j < 5; j++) dqi[j] = Grad_q[0][j][i] * dXdx[0][k] + Grad_q[1][j][i] * dXdx[1][k];
dx_i[k] = 1.;
grad_s[k] = StateFromQ_fwd(gas, s, dqi, x_i, dx_i, state_var);
}
StatePhysicalGradientFromReference_Boundary(Q, i, gas, s, x_i, state_var, Grad_q, dXdx, false, grad_s);

CeedScalar strain_rate[6], kmstress[6], stress[3][3], Fe[3];
KMStrainRate_State(grad_s, strain_rate);
Expand Down Expand Up @@ -706,11 +691,11 @@ CEED_QFUNCTION(PressureOutflow_Prim)(void *ctx, CeedInt Q, const CeedScalar *con
CEED_QFUNCTION_HELPER int PressureOutflow_Jacobian(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out,
StateVariable state_var) {
// Inputs
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data_sur) = in[4];
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq) = in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data_sur) = in[4];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand All @@ -737,12 +722,7 @@ CEED_QFUNCTION_HELPER int PressureOutflow_Jacobian(void *ctx, CeedInt Q, const C
ds.Y.pressure = 0.;

State grad_ds[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi_j[5];
for (CeedInt j = 0; j < 5; j++) dqi_j[j] = Grad_dq[0][j][i] * dXdx[0][k] + Grad_dq[1][j][i] * dXdx[1][k];
dx_i[k] = 1.;
grad_ds[k] = StateFromQ_fwd(gas, s, dqi_j, x_i, dx_i, state_var);
}
StatePhysicalGradientFromReference_Boundary(Q, i, gas, s, x_i, state_var, Grad_dq, dXdx, false, grad_ds);

CeedScalar dstrain_rate[6], dkmstress[6], stress[3][3], dstress[3][3], dFe[3];
KMStrainRate_State(grad_ds, dstrain_rate);
Expand Down
82 changes: 28 additions & 54 deletions examples/fluids/qfunctions/newtonian.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,10 @@ CEED_QFUNCTION(ICsNewtonianIG_Conserv)(void *ctx, CeedInt Q, const CeedScalar *c
// *****************************************************************************
CEED_QFUNCTION(RHSFunction_Newtonian)(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out) {
// Inputs
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q) = in[1];
const CeedScalar(*q_data) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand All @@ -134,12 +134,7 @@ CEED_QFUNCTION(RHSFunction_Newtonian)(void *ctx, CeedInt Q, const CeedScalar *co
State s = StateFromU(context, U, x_i);

State grad_s[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dU[5];
for (CeedInt j = 0; j < 5; j++) dU[j] = Grad_q[0][j][i] * dXdx[0][k] + Grad_q[1][j][i] * dXdx[1][k] + Grad_q[2][j][i] * dXdx[2][k];
dx_i[k] = 1.;
grad_s[k] = StateFromU_fwd(context, s, dU, x_i, dx_i);
}
StatePhysicalGradientFromReference(Q, i, context, s, x_i, STATEVAR_CONSERVATIVE, Grad_q, dXdx, false, grad_s);

CeedScalar strain_rate[6], kmstress[6], stress[3][3], Fe[3];
KMStrainRate_State(grad_s, strain_rate);
Expand Down Expand Up @@ -184,11 +179,11 @@ CEED_QFUNCTION(RHSFunction_Newtonian)(void *ctx, CeedInt Q, const CeedScalar *co
// *****************************************************************************
CEED_QFUNCTION_HELPER int IFunction_Newtonian(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out, StateVariable state_var) {
// Inputs
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_dot)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[2];
const CeedScalar(*q_data) = in[3];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[4];
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q) = in[1];
const CeedScalar(*q_dot)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[2];
const CeedScalar(*q_data) = in[3];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[4];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand All @@ -210,14 +205,7 @@ CEED_QFUNCTION_HELPER int IFunction_Newtonian(void *ctx, CeedInt Q, const CeedSc
CeedScalar wdetJ, dXdx[3][3];
QdataUnpack_3D(Q, i, q_data, &wdetJ, dXdx);
State grad_s[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi[5];
for (CeedInt j = 0; j < 5; j++) {
dqi[j] = Grad_q[0][j][i] * dXdx[0][k] + Grad_q[1][j][i] * dXdx[1][k] + Grad_q[2][j][i] * dXdx[2][k];
}
dx_i[k] = 1.;
grad_s[k] = StateFromQ_fwd(context, s, dqi, x_i, dx_i, state_var);
}
StatePhysicalGradientFromReference(Q, i, context, s, x_i, state_var, Grad_q, dXdx, false, grad_s);

CeedScalar strain_rate[6], kmstress[6], stress[3][3], Fe[3];
KMStrainRate_State(grad_s, strain_rate);
Expand Down Expand Up @@ -284,11 +272,11 @@ CEED_QFUNCTION(IFunction_Newtonian_Prim)(void *ctx, CeedInt Q, const CeedScalar
// *****************************************************************************
CEED_QFUNCTION_HELPER int IJacobian_Newtonian(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out, StateVariable state_var) {
// Inputs
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data) = in[4];
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq) = in[1];
const CeedScalar(*q_data) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data) = in[4];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand All @@ -315,11 +303,7 @@ CEED_QFUNCTION_HELPER int IJacobian_Newtonian(void *ctx, CeedInt Q, const CeedSc
State ds = StateFromQ_fwd(context, s, dqi, x_i, dx0, state_var);

State grad_ds[3];
for (int k = 0; k < 3; k++) {
CeedScalar dqi_j[5];
for (int j = 0; j < 5; j++) dqi_j[j] = Grad_dq[0][j][i] * dXdx[0][k] + Grad_dq[1][j][i] * dXdx[1][k] + Grad_dq[2][j][i] * dXdx[2][k];
grad_ds[k] = StateFromQ_fwd(context, s, dqi_j, x_i, dx0, state_var);
}
StatePhysicalGradientFromReference(Q, i, context, s, x_i, state_var, Grad_dq, dXdx, true, grad_ds);

CeedScalar dstrain_rate[6], dkmstress[6], stress[3][3], dstress[3][3], dFe[3];
KMStrainRate_State(grad_ds, dstrain_rate);
Expand Down Expand Up @@ -375,10 +359,10 @@ CEED_QFUNCTION(IJacobian_Newtonian_Prim)(void *ctx, CeedInt Q, const CeedScalar
// Compute boundary integral (ie. for strongly set inflows)
// *****************************************************************************
CEED_QFUNCTION_HELPER int BoundaryIntegral(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out, StateVariable state_var) {
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*q)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_q) = in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];

CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
CeedScalar(*jac_data_sur) = out[1];
Expand All @@ -396,12 +380,7 @@ CEED_QFUNCTION_HELPER int BoundaryIntegral(void *ctx, CeedInt Q, const CeedScala
wdetJb *= is_implicit ? -1. : 1.;

State grad_s[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi[5];
for (CeedInt j = 0; j < 5; j++) dqi[j] = Grad_q[0][j][i] * dXdx[0][k] + Grad_q[1][j][i] * dXdx[1][k];
dx_i[k] = 1.;
grad_s[k] = StateFromQ_fwd(context, s, dqi, x_i, dx_i, state_var);
}
StatePhysicalGradientFromReference_Boundary(Q, i, context, s, x_i, state_var, Grad_q, dXdx, false, grad_s);

CeedScalar strain_rate[6], kmstress[6], stress[3][3], Fe[3];
KMStrainRate_State(grad_s, strain_rate);
Expand Down Expand Up @@ -437,11 +416,11 @@ CEED_QFUNCTION(BoundaryIntegral_Prim)(void *ctx, CeedInt Q, const CeedScalar *co
CEED_QFUNCTION_HELPER int BoundaryIntegral_Jacobian(void *ctx, CeedInt Q, const CeedScalar *const *in, CeedScalar *const *out,
StateVariable state_var) {
// Inputs
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq)[5][CEED_Q_VLA] = (const CeedScalar(*)[5][CEED_Q_VLA])in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data_sur) = in[4];
const CeedScalar(*dq)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[0];
const CeedScalar(*Grad_dq) = in[1];
const CeedScalar(*q_data_sur) = in[2];
const CeedScalar(*x)[CEED_Q_VLA] = (const CeedScalar(*)[CEED_Q_VLA])in[3];
const CeedScalar(*jac_data_sur) = in[4];

// Outputs
CeedScalar(*v)[CEED_Q_VLA] = (CeedScalar(*)[CEED_Q_VLA])out[0];
Expand All @@ -465,12 +444,7 @@ CEED_QFUNCTION_HELPER int BoundaryIntegral_Jacobian(void *ctx, CeedInt Q, const
State ds = StateFromQ_fwd(context, s, dqi, x_i, dx_i, state_var);

State grad_ds[3];
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi_j[5];
for (CeedInt j = 0; j < 5; j++) dqi_j[j] = Grad_dq[0][j][i] * dXdx[0][k] + Grad_dq[1][j][i] * dXdx[1][k];
dx_i[k] = 1.;
grad_ds[k] = StateFromQ_fwd(context, s, dqi_j, x_i, dx_i, state_var);
}
StatePhysicalGradientFromReference_Boundary(Q, i, context, s, x_i, state_var, Grad_dq, dXdx, false, grad_ds);

CeedScalar dstrain_rate[6], dkmstress[6], stress[3][3], dstress[3][3], dFe[3];
KMStrainRate_State(grad_ds, dstrain_rate);
Expand Down
27 changes: 27 additions & 0 deletions examples/fluids/qfunctions/newtonian_state.h
Original file line number Diff line number Diff line change
Expand Up @@ -404,4 +404,31 @@ CEED_QFUNCTION_HELPER void Vorticity(const State grad_s[3], CeedScalar vorticity
Curl3(grad_velocity, vorticity);
}

CEED_QFUNCTION_HELPER void StatePhysicalGradientFromReference(CeedInt Q, CeedInt i, NewtonianIdealGasContext gas, State s, const CeedScalar x_i[3],
StateVariable state_var, const CeedScalar *grad_q, const CeedScalar dXdx[3][3],
bool zero_dx, State grad_s[3]) {
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi[5];
for (CeedInt j = 0; j < 5; j++) {
dqi[j] =
grad_q[(Q * 5) * 0 + Q * j + i] * dXdx[0][k] + grad_q[(Q * 5) * 1 + Q * j + i] * dXdx[1][k] + grad_q[(Q * 5) * 2 + Q * j + i] * dXdx[2][k];
}
dx_i[k] = zero_dx ? 0. : 1.;
grad_s[k] = StateFromQ_fwd(gas, s, dqi, x_i, dx_i, state_var);
}
}

CEED_QFUNCTION_HELPER void StatePhysicalGradientFromReference_Boundary(CeedInt Q, CeedInt i, NewtonianIdealGasContext gas, State s,
const CeedScalar x_i[3], StateVariable state_var, const CeedScalar *grad_q,
const CeedScalar dXdx[2][3], bool zero_dx, State grad_s[3]) {
for (CeedInt k = 0; k < 3; k++) {
CeedScalar dx_i[3] = {0}, dqi[5];
for (CeedInt j = 0; j < 5; j++) {
dqi[j] = grad_q[(Q * 5) * 0 + Q * j + i] * dXdx[0][k] + grad_q[(Q * 5) * 1 + Q * j + i] * dXdx[1][k];
}
dx_i[k] = zero_dx ? 0. : 1.;
grad_s[k] = StateFromQ_fwd(gas, s, dqi, x_i, dx_i, state_var);
}
}

#endif // newtonian_state_h

0 comments on commit 851646d

Please sign in to comment.