//删除协议上下文 void IAppInterface::DeleteProtocolContext(ProtocolContext *context) { //释放protocol实例 IProtocolFactory *factory = GetProtocolFactory(); if(context->protocol != NULL) factory->DeleteProtocol(context->protocol_type, context->protocol); IMemory *memory = GetMemory(); assert(context!=NULL); context->~ProtocolContext(); memory->Free((void*)context, sizeof(ProtocolContext)); }
namespace Nektar { std::string ProtocolS1S2::className = GetProtocolFactory().RegisterCreatorFunction( "ProtocolS1S2", ProtocolS1S2::create, "S1S2 stimulus protocol."); /** * @class ProtocolS1S2 * * The Stimuli class and derived classes implement a range of stimuli. * The stimulus contains input stimuli that can be applied throughout the * domain, on specified regions determined by the derived classes of Stimulus, * at specified frequencies determined by the derived classes of Protocol. * */ /** * Protocol base class constructor. */ ProtocolS1S2::ProtocolS1S2(const LibUtilities::SessionReaderSharedPtr& pSession,const TiXmlElement* pXml) : Protocol(pSession, pXml) { m_session = pSession; if (!pXml) { return; } const TiXmlElement *pXmlparameter; //Declaring variable called pxml... // See if we have parameters defined. They are optional so we go on if not. //member variables m_* defined in ProtocolS1S2.h pXmlparameter = pXml->FirstChildElement("START"); m_start = atof(pXmlparameter->GetText()); //text value within px1, convert to a floating pt and save in m_px1 pXmlparameter = pXml->FirstChildElement("DURATION"); m_dur = atof(pXmlparameter->GetText()); pXmlparameter = pXml->FirstChildElement("S1CYCLELENGTH"); m_s1cyclelength = atof(pXmlparameter->GetText()); pXmlparameter = pXml->FirstChildElement("NUM_S1"); m_num_s1 = atof(pXmlparameter->GetText()); pXmlparameter = pXml->FirstChildElement("S2CYCLELENGTH"); m_s2cyclelength = atof(pXmlparameter->GetText()); m_s2start = m_s1cyclelength*(m_num_s1-1)+m_s2cyclelength+m_start; } /** * Initialise the protocol. Allocate workspace and variable storage. */ void ProtocolS1S2::Initialise() { } NekDouble ProtocolS1S2::v_GetAmplitude(const NekDouble time) { // Number of complete S1 intervals NekDouble a = floor((time-m_start)/m_s1cyclelength); // Time since start of most recent S1 interval NekDouble time1 = time - a * m_s1cyclelength - m_start; // S1 if( (time1 > 0) && (a < m_num_s1) && (time1 < m_dur)) { return 1.0; } // S2 if ((time > m_s2start) && (time < m_s2start + m_dur)) { return 1.0; } return 0.0; } void ProtocolS1S2::v_GenerateSummary(SolverUtils::SummaryList& s) { } void ProtocolS1S2::v_SetInitialConditions() { } }
namespace Nektar { std::string ProtocolS1::className = GetProtocolFactory().RegisterCreatorFunction( "ProtocolS1", ProtocolS1::create, "S1 stimulus protocol."); /** * @class ProtocolS1 * * The Stimuli class and derived classes implement a range of stimuli. * The stimulus contains input stimuli that can be applied throughout the * domain, on specified regions determined by the derived classes of * Stimulus, at specified frequencies determined by the derived classes of * Protocol. */ /** * Protocol base class constructor. */ ProtocolS1::ProtocolS1( const LibUtilities::SessionReaderSharedPtr& pSession, const TiXmlElement* pXml) : Protocol(pSession, pXml) { m_session = pSession; if (!pXml) { return; } // Declare temporary XML element pointer const TiXmlElement *pXmlparameter; // Read each variable, extract text and convert to floating-point pXmlparameter = pXml->FirstChildElement("START"); m_start = atof(pXmlparameter->GetText()); pXmlparameter = pXml->FirstChildElement("DURATION"); m_dur = atof(pXmlparameter->GetText()); pXmlparameter = pXml->FirstChildElement("S1CYCLELENGTH"); m_s1cyclelength = atof(pXmlparameter->GetText()); pXmlparameter = pXml->FirstChildElement("NUM_S1"); m_num_s1 = atof(pXmlparameter->GetText()); } /** * Initialise the protocol. Allocate workspace and variable storage. */ void ProtocolS1::Initialise() { } /** * */ NekDouble ProtocolS1::v_GetAmplitude(const NekDouble time) { // Number of complete S1 intervals NekDouble a = floor((time-m_start)/m_s1cyclelength); // Time since start of most recent S1 interval NekDouble time1 = time - a * m_s1cyclelength - m_start; if( (time1 > 0) && (a < m_num_s1) && (time1 < m_dur) ) { return 1.0; } return 0.0; } /** * */ void ProtocolS1::v_GenerateSummary(SolverUtils::SummaryList& s) { } /** * */ void ProtocolS1::v_SetInitialConditions() { } }