inline void from_json(const json_t &noise, Relaxation &error) { if (JSON::check_key("relaxation_rate", noise)) { double rate = noise["relaxation_rate"]; rvector_t pops{1.}; if (JSON::check_key("thermal_populations", noise)) { const json_t &node = noise["thermal_populations"]; if (node.is_number()) pops[0] = node.get<double>(); else pops = node.get<rvector_t>(); } error = Relaxation(rate, pops); } else error = Relaxation(); }
void MOCSteady::CheckFlow(double dOld, double &dNew) { BOOL bOk = FALSE; BOOL bAbs = CheckAbs(dOld,dNew,m_FlowAbsTol); //0,绝对公差; BOOL bRel = CheckRel(dOld,dNew,m_FlowRelTol); //1, 相对公差; Relaxation(dOld,dNew,m_FlowRelaxation); //使用松弛因子; switch(m_PresTolType) { case 0: bOk = bAbs; break; case 1: bOk = bRel; break; case 2: bOk = (bAbs || bRel); break; case 3: bOk = (bAbs && bRel); break; default: ASSERT(FALSE); break; } if(!bOk) m_bOk = bOk; }
void MOCSteady::CheckPress(double dOld, double &dNew) { BOOL bOk = FALSE; BOOL bAbs = CheckAbs(dOld,dNew,m_PresAbsTol); BOOL bRel = CheckRel(dOld,dNew,m_PresRelTol); Relaxation(dOld,dNew,m_PresRelaxation); switch(m_FlowTolType) { case 0: bOk = bAbs; break; case 1: bOk = bRel; break; case 2: bOk = (bAbs || bRel); break; case 3: bOk = (bAbs && bRel); break; default: ASSERT(FALSE); break; } if(!bOk) m_bOk = bOk; }