42 #include <lifev/one_d_fsi/solver/OneDFSIFluxNonLinear.hpp> 59 return ( M_physicsPtr->data()->alpha ( iNode ) * Q * Q / A +
60 M_physicsPtr->data()->beta0 ( iNode ) * M_physicsPtr->data()->beta1 ( iNode ) *
61 M_physicsPtr->data()->area0 ( iNode ) / ( ( M_physicsPtr->data()->beta1 ( iNode ) + 1 ) *
62 M_physicsPtr->data()->densityRho() ) * ( OneDFSI::pow15 ( A / M_physicsPtr->data()->area0 ( iNode ),
63 M_physicsPtr->data()->beta1 ( iNode ) + 1 ) - 1 ) ) *
64 M_physicsPtr->data()->robertsonCorrection();
67 ERROR_MSG (
"The flux function has only 2 components.");
75 if ( row == 0 && column == 0 )
80 if ( row == 0 && column == 1 )
85 if ( row == 1 && column == 0 )
87 return ( M_physicsPtr->data()->beta0 ( iNode ) *
88 M_physicsPtr->data()->beta1 ( iNode ) /
89 M_physicsPtr->data()->densityRho() * OneDFSI::pow05 ( A / M_physicsPtr->data()->area0 ( iNode ),
90 M_physicsPtr->data()->beta1 ( iNode ) ) -
91 M_physicsPtr->data()->alpha ( iNode ) * Q * Q / A / A ) *
92 M_physicsPtr->data()->robertsonCorrection();
94 if ( row == 1 && column == 1 )
96 return M_physicsPtr->data()->robertsonCorrection() * 2 * M_physicsPtr->data()->alpha ( iNode ) * Q / A;
99 ERROR_MSG (
"Flux's differential function has only 4 components.");
107 container2D_Type& eigenvalues,
108 container2D_Type& leftEigenvector1,
109 container2D_Type& leftEigenvector2,
110 const UInt& iNode )
const 112 #ifdef HAVE_LIFEV_DEBUG 113 debugStream (6312) <<
"[OneDFSIModel_Flux_NonLinear]::jacobian_EigenValues_Vectors\n";
117 celerity = std::sqrt ( M_physicsPtr->data()->alpha ( iNode ) * (
118 M_physicsPtr->data()->alpha ( iNode ) - 1) * Q * Q / ( A * A ) +
119 M_physicsPtr->data()->beta0 ( iNode ) *
120 M_physicsPtr->data()->beta1 ( iNode ) /
121 M_physicsPtr->data()->densityRho() * OneDFSI::pow05 ( A / M_physicsPtr->data()->area0 ( iNode ),
122 M_physicsPtr->data()->beta1 ( iNode ) ) );
124 eigenvalues[0] = M_physicsPtr->data()->alpha ( iNode ) * Q / A + celerity;
125 eigenvalues[1] = M_physicsPtr->data()->alpha ( iNode ) * Q / A - celerity;
127 leftEigenvector1[0] = - eigenvalues[1] / A;
128 leftEigenvector1[1] = 1. / A;
129 leftEigenvector2[0] = - eigenvalues[0] / A;
130 leftEigenvector2[1] = 1. / A;
136 container2D_Type& deltaEigenvalues,
137 container2D_Type& deltaLeftEigenvector1,
138 container2D_Type& deltaLeftEigenvector2,
139 const UInt& iNode )
const 143 Real AoverA0 ( A / M_physicsPtr->data()->area0 ( iNode ) );
144 Real C ( OneDFSI::pow05 ( AoverA0, M_physicsPtr->data()->beta1 ( iNode ) ) / M_physicsPtr->data()->densityRho() );
146 deltaCelerity = 0.5 / std::sqrt ( M_physicsPtr->data()->alpha ( iNode ) * (
147 M_physicsPtr->data()->alpha ( iNode ) - 1) * Q * Q / ( A * A ) +
148 M_physicsPtr->data()->beta0 ( iNode ) *
149 M_physicsPtr->data()->beta1 ( iNode ) * C ) * ( C * (
150 M_physicsPtr->data()->beta1 ( iNode ) *
151 M_physicsPtr->data()->dBeta0dz ( iNode ) -
152 M_physicsPtr->data()->beta0 ( iNode ) *
153 M_physicsPtr->data()->beta1 ( iNode ) *
154 M_physicsPtr->data()->beta1 ( iNode ) /
155 M_physicsPtr->data()->area0 ( iNode ) *
156 M_physicsPtr->data()->dArea0dz ( iNode ) +
157 M_physicsPtr->data()->beta0 ( iNode ) * ( 1 +
158 M_physicsPtr->data()->beta0 ( iNode ) * std::log ( AoverA0 ) ) *
159 M_physicsPtr->data()->dBeta1dz ( iNode ) ) + ( 2 *
160 M_physicsPtr->data()->alpha ( iNode ) - 1 ) * Q * Q / ( A * A ) *
161 M_physicsPtr->data()->dAlphadz ( iNode ) );
163 deltaEigenvalues[0] = M_physicsPtr->data()->dAlphadz ( iNode ) * Q / A + deltaCelerity;
164 deltaEigenvalues[1] = M_physicsPtr->data()->dAlphadz ( iNode ) * Q / A - deltaCelerity;
166 deltaLeftEigenvector1[0] = - deltaEigenvalues[1] / A;
167 deltaLeftEigenvector1[1] = 0;
168 deltaLeftEigenvector2[0] = - deltaEigenvalues[0] / A;
169 deltaLeftEigenvector2[1] = 0;
void eigenValuesEigenVectors(const Real &A, const Real &Q, container2D_Type &eigenvalues, container2D_Type &leftEigenvector1, container2D_Type &leftEigenvector2, const UInt &iNode) const
Eigenvalues and eigenvectors of the Jacobian matrix.
Real dFdU(const Real &A, const Real &Q, const ID &row, const ID &column, const UInt &iNode) const
Evaluate the derivative of the flux term.
void updateInverseJacobian(const UInt &iQuadPt)
void deltaEigenValuesEigenVectors(const Real &A, const Real &Q, container2D_Type &deltaEigenvalues, container2D_Type &deltaLeftEigenvector1, container2D_Type &deltaLeftEigenvector2, const UInt &iNode) const
Derivatives of the eigenvalues and eigenvectors of the derivative of the Jacobian matrix...
OneDFSIFluxNonLinear - Class containing the non-linear flux term of the 1D hyperbolic problem...
double Real
Generic real data.
Real flux(const Real &A, const Real &Q, const ID &row, const UInt &iNode) const
Evaluate the flux term.
uint32_type UInt
generic unsigned integer (used mainly for addressing)