//删除协议上下文
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));
}
Example #2
0
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()
    {

    }

}
Example #3
0
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()
    {
    }

}