diff options
author | Ruben Undheim <ruben.undheim@gmail.com> | 2016-07-05 18:02:38 +0200 |
---|---|---|
committer | Ruben Undheim <ruben.undheim@gmail.com> | 2016-07-05 18:02:38 +0200 |
commit | ef962f6008f25ab7cbd4ca21bcc72b97a1e2d76f (patch) | |
tree | 8149bee93d1a3f91d4503bfb3853adac4af0a85e /CSXCAD/src/CSPropLumpedElement.cpp |
Imported Upstream version 0.0.34
Diffstat (limited to 'CSXCAD/src/CSPropLumpedElement.cpp')
-rw-r--r-- | CSXCAD/src/CSPropLumpedElement.cpp | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/CSXCAD/src/CSPropLumpedElement.cpp b/CSXCAD/src/CSPropLumpedElement.cpp new file mode 100644 index 0000000..f4dc602 --- /dev/null +++ b/CSXCAD/src/CSPropLumpedElement.cpp @@ -0,0 +1,128 @@ +/* +* Copyright (C) 2008-2012 Thorsten Liebig (Thorsten.Liebig@gmx.de) +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published +* by the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "tinyxml.h" + +#include "CSPropLumpedElement.h" + +CSPropLumpedElement::CSPropLumpedElement(ParameterSet* paraSet) : CSProperties(paraSet) {Type=LUMPED_ELEMENT;Init();} +CSPropLumpedElement::CSPropLumpedElement(CSProperties* prop) : CSProperties(prop) {Type=LUMPED_ELEMENT;Init();} +CSPropLumpedElement::CSPropLumpedElement(unsigned int ID, ParameterSet* paraSet) : CSProperties(ID,paraSet) {Type=LUMPED_ELEMENT;Init();} +CSPropLumpedElement::~CSPropLumpedElement() {} + +void CSPropLumpedElement::Init() +{ + m_ny=-1; + m_Caps=true; + m_R.SetValue(NAN); + m_C.SetValue(NAN); + m_L.SetValue(NAN); +} + +bool CSPropLumpedElement::Update(std::string *ErrStr) +{ + int EC=m_R.Evaluate(); + bool bOK=true; + if (EC!=ParameterScalar::NO_ERROR) bOK=false; + if ((EC!=ParameterScalar::NO_ERROR) && (ErrStr!=NULL)) + { + std::stringstream stream; + stream << std::endl << "Error in LumpedElement-Property Resistance-Value"; + ErrStr->append(stream.str()); + PSErrorCode2Msg(EC,ErrStr); + //cout << EC << std::endl; + } + + EC=m_C.Evaluate(); + if (EC!=ParameterScalar::NO_ERROR) bOK=false; + if ((EC!=ParameterScalar::NO_ERROR) && (ErrStr!=NULL)) + { + std::stringstream stream; + stream << std::endl << "Error in LumpedElement-Property Capacitor-Value"; + ErrStr->append(stream.str()); + PSErrorCode2Msg(EC,ErrStr); + //cout << EC << std::endl; + } + + EC=m_L.Evaluate(); + if (EC!=ParameterScalar::NO_ERROR) bOK=false; + if ((EC!=ParameterScalar::NO_ERROR) && (ErrStr!=NULL)) + { + std::stringstream stream; + stream << std::endl << "Error in LumpedElement-Property Inductance-Value"; + ErrStr->append(stream.str()); + PSErrorCode2Msg(EC,ErrStr); + //cout << EC << std::endl; + } + + return bOK & CSProperties::Update(ErrStr); +} + +void CSPropLumpedElement::SetDirection(int ny) +{ + if ((ny<0) || (ny>2)) return; + m_ny = ny; +} + +bool CSPropLumpedElement::Write2XML(TiXmlNode& root, bool parameterised, bool sparse) +{ + if (CSProperties::Write2XML(root,parameterised,sparse)==false) return false; + + TiXmlElement* prop=root.ToElement(); + if (prop==NULL) return false; + + prop->SetAttribute("Direction",m_ny); + prop->SetAttribute("Caps",(int)m_Caps); + + WriteTerm(m_R,*prop,"R",parameterised); + WriteTerm(m_C,*prop,"C",parameterised); + WriteTerm(m_L,*prop,"L",parameterised); + + return true; +} + +bool CSPropLumpedElement::ReadFromXML(TiXmlNode &root) +{ + if (CSProperties::ReadFromXML(root)==false) return false; + + TiXmlElement* prop=root.ToElement(); + if (prop==NULL) return false; + + if (prop->QueryIntAttribute("Direction",&m_ny)!=TIXML_SUCCESS) m_ny=-1; + int caps=0; + if (prop->QueryIntAttribute("Caps",&caps)!=TIXML_SUCCESS) m_Caps=true; + else + m_Caps = (bool)caps; + + if (ReadTerm(m_R,*prop,"R")==false) + m_R.SetValue(NAN); + if (ReadTerm(m_C,*prop,"C")==false) + m_C.SetValue(NAN); + if (ReadTerm(m_L,*prop,"L")==false) + m_L.SetValue(NAN); + return true; +} + +void CSPropLumpedElement::ShowPropertyStatus(std::ostream& stream) +{ + CSProperties::ShowPropertyStatus(stream); + stream << " --- Lumped Element Properties --- " << std::endl; + stream << " Direction: " << m_ny << std::endl; + stream << " Resistance: " << m_R.GetValueString() << std::endl; + stream << " Capacity: " << m_C.GetValueString() << std::endl; + stream << " Inductance: " << m_L.GetValueString() << std::endl; +} |