DualReal SinglePhaseFluidProperties::v_from_p_T(const DualReal & p, const DualReal & T) const { Real rawv = 0; Real rawp = p.value(); Real rawT = T.value(); Real dvdp = 0; Real dvdT = 0; v_from_p_T(rawp, rawT, rawv, dvdp, dvdT); DualReal result = rawv; for (size_t i = 0; i < p.derivatives().size(); i++) result.derivatives()[i] = p.derivatives()[i] * dvdp + T.derivatives()[i] * dvdT; return result; }
DualReal SinglePhaseFluidProperties::vaporTemperature(const DualReal & p) const { Real T = 0.0; Real pressure = p.value(); Real dTdp = 0.0; vaporTemperature(pressure, T, dTdp); DualReal result = T; for (std::size_t i = 0; i < p.derivatives().size(); ++i) result.derivatives()[i] = p.derivatives()[i] * dTdp; return result; }
DualReal SinglePhaseFluidProperties::vaporPressure(const DualReal & T) const { Real p = 0.0; Real temperature = T.value(); Real dpdT = 0.0; vaporPressure(temperature, p, dpdT); DualReal result = p; for (std::size_t i = 0; i < T.derivatives().size(); ++i) result.derivatives()[i] = T.derivatives()[i] * dpdT; return result; }
DualReal SinglePhaseFluidProperties::T_from_p_h(const DualReal & p, const DualReal & h) const { Real T = 0.0; Real pressure = p.value(); Real enthalpy = h.value(); Real dT_dp = 0.0; Real dT_dh = 0.0; T_from_p_h(pressure, enthalpy, T, dT_dp, dT_dh); DualReal result = T; for (size_t i = 0; i < p.derivatives().size(); ++i) result.derivatives()[i] = p.derivatives()[i] * dT_dp + h.derivatives()[i] * dT_dh; return result; }
DualReal SinglePhaseFluidProperties::e_from_p_T(const DualReal & p, const DualReal & T) const { Real e = 0.0; Real pressure = p.value(); Real temperature = T.value(); Real de_dp = 0.0; Real de_dT = 0.0; e_from_p_T(pressure, temperature, e, de_dp, de_dT); DualReal result = e; for (size_t i = 0; i < p.derivatives().size(); ++i) result.derivatives()[i] = p.derivatives()[i] * de_dp + T.derivatives()[i] * de_dT; return result; }
void ADIntegratedBCTempl<T, compute_stage>::computeJacobianBlock(MooseVariableFEBase & jvar) { auto jvar_num = jvar.number(); if (jvar_num == _var.number()) computeJacobian(); else { DenseMatrix<Number> & ke = _assembly.jacobianBlock(_var.number(), jvar_num); if (jvar.phiFaceSize() != ke.n()) return; size_t ad_offset = jvar_num * _sys.getMaxVarNDofsPerElem(); for (_i = 0; _i < _test.size(); _i++) for (_qp = 0; _qp < _qrule->n_points(); _qp++) { DualReal residual = _ad_JxW[_qp] * _coord[_qp] * computeQpResidual(); for (_j = 0; _j < jvar.phiFaceSize(); _j++) ke(_i, _j) += residual.derivatives()[ad_offset + _j]; } } }