Real GapConductance::h_conduction() { _gap_thermal_conductivity[_qp] = gapK(); return _gap_thermal_conductivity[_qp] / gapLength(_gap_geometry_type, _radius, _r1, _r2, _min_gap, _max_gap); }
Real GapHeatTransfer::computeQpOffDiagJacobian(unsigned jvar) { computeGapValues(); if (!_has_info) return 0.0; unsigned int coupled_component; bool active = false; for (coupled_component = 0; coupled_component < _disp_vars.size(); ++coupled_component) if (jvar == _disp_vars[coupled_component]) { active = true; break; } Real dRdx = 0.0; if (active) { // Compute dR/du_[xyz] // Residual is based on // h_gap = h_conduction() + h_contact() + h_radiation(); // grad_t = (_u[_qp] - _gap_temp) * h_gap; // So we need // (_u[_qp] - _gap_temp) * (dh_gap/du_[xyz]); // Assuming dh_contact/du_[xyz] = dh_radiation/du_[xyz] = 0, // we need dh_conduction/du_[xyz] // Given // h_conduction = gapK / gapLength, then // dh_conduction/du_[xyz] = -gapK/gapLength^2 * dgapLength/du_[xyz] // Given // gapLength = ((u_x-m_x)^2+(u_y-m_y)^2+(u_z-m_z)^2)^1/2 // where m_[xyz] is the master coordinate, then // dGapLength/du_[xyz] = 1/2*((u_x-m_x)^2+(u_y-m_y)^2+(u_z-m_z)^2)^(-1/2)*2*(u_[xyz]-m_[xyz]) // = (u_[xyz]-m_[xyz])/gapLength // This is the normal vector. const Real gapL = gapLength(); // THIS IS NOT THE NORMAL WE NEED. // WE NEED THE NORMAL FROM THE CONSTRAINT, THE NORMAL FROM THE // MASTER SURFACE. HOWEVER, THIS IS TRICKY SINCE THE NORMAL // FROM THE MASTER SURFACE WAS COMPUTED FOR A POINT ASSOCIATED // WITH A SLAVE NODE. NOW WE ARE AT A SLAVE INTEGRATION POINT. // // HOW DO WE GET THE NORMAL WE NEED? // // Until we have the normal we need, // we'll hope that the one we have is close to the negative of the one we need. const Point & normal(_normals[_qp]); const Real dgap = dgapLength(-normal(coupled_component)); dRdx = -(_u[_qp] - _gap_temp) * _edge_multiplier * _gap_conductance[_qp] / gapL * dgap; } return _test[_i][_qp] * dRdx * _phi[_j][_qp]; }
Real GapHeatTransfer::dgapLength(Real normalComponent) const { const Real gap_L = gapLength(); Real dgap = 0.0; if (_min_gap <= gap_L && gap_L <= _max_gap) dgap = normalComponent; return dgap; }
Real GapConductance::h_conduction() { return gapK() / gapLength(_gap_geometry_type, _radius, _r1, _r2, _min_gap, _max_gap); }
Real GapConductance::h_conduction() { return gapK()/gapLength(-(_gap_distance), _min_gap, _max_gap); }