/******************************************************* * * DESCRIPTION: QBG resistor class (flow input) * * AUTHOR: Mariana C. D'Abreu * * EMAIL: mdabreu@dc.uba.ar * ********************************************************/ #include "qbg_resistance_fi.h" #include "ini.h" #include "message.h" #include "mainsimu.h" #include "defaults.h" const RealValue QBGResistanceFlowIn::DefaultResistance = 1; /******************************************************************* * Function Name: QBGResistanceFlowIn * Description: constructor ********************************************************************/ QBGResistanceFlowIn::QBGResistanceFlowIn( const string &name ) : Atomic( name ) , f1p( addInputPort( "f1p" ) ) , e1p( addOutputPort( "e1p" ) ) { try { try { // resistance string resistance( MainSimulator::Instance().getParameter( description(), "R" ) ); R = atof( resistance.data() ); } catch ( MException &exc ) { R = DefaultResistance; } if ( R == 0 ) { throw MException( "Invalid Resistance value : " + Value2StrReal( R ) ); } // out file try { outFileName = MainSimulator::Instance().getParameter( description(), "outputFile" ); } catch ( MException &e ) { outFileName = DEFAULT_QBG_OUTFILENAME; } } catch ( MException &e ) { e.print( cerr ); MTHROW( e ) ; } } /******************************************************************* * Function Name: ~QBGResistanceFlowIn * Destructor ********************************************************************/ QBGResistanceFlowIn::~QBGResistanceFlowIn() { outFile.close(); } /******************************************************************* * Function Name: initFunction ********************************************************************/ Model &QBGResistanceFlowIn::initFunction() { flow = 0; effort = 0; effortSent = 0; // out file outFile.open( outFileName.c_str() ); outFile << "\nTime,Flow,Effort"; passivate(); return *this ; } /******************************************************************* * Function Name: externalFunction ********************************************************************/ Model &QBGResistanceFlowIn::externalFunction( const ExternalMessage &msg ) { flow = msg.value(); calculateEffort(); holdIn( active, Time::Zero ); return *this; } /******************************************************************* * Function Name: internalFunction ********************************************************************/ Model &QBGResistanceFlowIn::internalFunction( const InternalMessage & ) { passivate(); return *this ; } /******************************************************************* * Function Name: outputFunction ********************************************************************/ Model &QBGResistanceFlowIn::outputFunction( const InternalMessage &msg ) { if( effort != effortSent ) { sendOutput( msg.time(), e1p, effort ); effortSent = effort; outFile << "\n" << msg.time().asMsecs() << "," << flow << "," << effort; } return *this ; } /******************************************************************* * Function Name: calculateEffort ********************************************************************/ QBGResistanceFlowIn &QBGResistanceFlowIn::calculateEffort() { MASSERT( R != 0 ); // e = f * R effort = flow * R; return *this; }