Exemplo n.º 1
0
//-----------------------------------------------------------------------------
void LFCFlux(REAL * Ul, REAL * Ur, REAL * flux)
{
   void RoeAverage(REAL *, REAL *, REAL *);
   UINT i;
   REAL U[NVAR], Fl[NVAR], Fr[NVAR], R[NVAR][NVAR], Ri[NVAR][NVAR], lam[NVAR];
   REAL d, u, p, a;

   EulerFlux(Ul, Fl);
   EulerFlux(Ur, Fr);
   RoeAverage(Ul, Ur, U);
   EigMat(U, R, Ri);
   Multi(Ri, Fl);
   Multi(Ri, Fr);
   Multi(Ri, Ul);
   Multi(Ri, Ur);

   /* Eigenvalues based on Roe-averaged state */
   d = U[0];
   u = U[1] / d;
   p = (GAMMA - 1.0) * (U[2] - 0.5 * d * u * u);
   a = sqrt(GAMMA * p / d);
   lam[0] = fabs(u);
   lam[1] = fabs(u + a);
   lam[2] = fabs(u - a);

   for(i = 0; i < NVAR; i++)
      flux[i] = 0.5 * (Fl[i] + Fr[i] - lam[i] * (Ur[i] - Ul[i]));

   Multi(R, flux);
}
Exemplo n.º 2
0
void Project(CELL * cell)
{
   REAL minmod(REAL, REAL, REAL);
   REAL minmod2(REAL, REAL, REAL, REAL, REAL);
   UINT i, j, k;
   REAL u[NVAR], ux[NVAR], uxb[NVAR], dul[NVAR], dur[NVAR], R[NVAR][NVAR],
      Ri[NVAR][NVAR], fact;

   fact = sqrt(3.0);

   for(i = 1; i < NC - 1; i++) {
      for(j = 0; j < NVAR; j++) {
         dul[j] = cell[i].Un[j][0] - cell[i - 1].Un[j][0];
         dur[j] = cell[i + 1].Un[j][0] - cell[i].Un[j][0];
         u[j] = cell[i].Un[j][0];
         ux[j] = fact * cell[i].Un[j][1];
      }

      EigMat(u, R, Ri);
      Multi(Ri, ux);
      Multi(Ri, dul);
      Multi(Ri, dur);
      for(j = 0; j < NVAR; j++) {
         if(fabs(ux[j]) <= Mfact * cell[i].h * cell[i].h)
            uxb[j] = ux[j];
         else
            uxb[j] = minmod(ux[j], dul[j], dur[j]);
      }
      Multi(R, uxb);

      for(j = 0; j < NVAR; j++) {
         uxb[j] = uxb[j] / fact;
         if(cell[i].Un[j][1] != uxb[j]) {
            cell[i].Un[j][1] = uxb[j];
            for(k = 2; k < cell[i].p; k++)
               cell[i].Un[j][k] = 0.0;
         }

      }
   }
}
CMidiControllerBankFilter::CMidiControllerBankFilter(int Size)
    : m_Handler(Size)
    , m_MultiHandler()
{
    std::shared_ptr<CMultiMidiHandler> Multi(new CMultiMidiHandler());
    for(auto& Handler : m_Handler)
    {
        Handler.reset(new CMidiControllerValueHandler());
        Multi->AddHandler(Handler);
    }
    m_MultiHandler = Multi;
}
Exemplo n.º 4
0
bool CSiteConfig::EditConfig(CInputContext& inputContext)
{
	if (!Initialise())
	{
		return false;
	}

	if (!CreateEditConfig())
	{
		return SetDNALastError("CSiteConfig","EditConfig","Failed to init XML");
	}

	int iSiteId = m_InputContext.GetSiteID();
	if ( m_InputContext.ParamExists("siteId") ) 
	{
		iSiteId = m_InputContext.GetParamInt("siteid");
	}

	CMultiStep Multi(m_InputContext, "SITECONFIG");
	if (!Multi.ProcessInput())
	{
		return SetDNALastError("CSiteConfig","EditConfig","Failed to process input");
	}

	CTDVString sSiteConfig;
	GetSiteConfig(iSiteId,sSiteConfig);

	if ( !sSiteConfig.IsEmpty() )
	{
		//If there is one element named site config ten it is assumed this element 
		//should contain the entire SiteConfig Inner XML.
		bool bPopulateElementFromRoot = false;
		if ( Multi.GetNumberOfElements() == 1 )
		{
			CTDVString sName, sValue;
			if ( Multi.GetElementFromIndex(0,sName,sValue) )
			{
				if ( sName == "SITECONFIG" )
					bPopulateElementFromRoot = true;
			}
		}

		if ( bPopulateElementFromRoot )
		{
			//Populate element with entire contents of Site Config.
			Multi.FillElementFromXML("SITECONFIG",sSiteConfig);
		}
		else
		{
			//No match for element SITECONFIG found at root level so populate elements from XML children
			Multi.FillElementsFromXML(sSiteConfig);
		}
	}

	CTDVString sXML = Multi.GetAsXML();
	AddInside("SITECONFIG-EDIT",sXML);

	//The Current Site should be available in the current site XML or from sitelist.
	//AddInside("SITECONFIG-EDIT", MakeUrlNameXML(NULL,m_InputContext.GetSiteID()));

	return true;
}
Exemplo n.º 5
0
bool CSiteConfig::UpdateConfig(CInputContext& inputContext, bool& bMultiStepReady)
{
	bool bOK = true;
	if (!Initialise())
	{
		return false;
	}

    // Initialise this object's underlying XML structure
	if (!CreateEditConfig())

	{
		SetDNALastError("CSiteConfig","UpdateConfig","Failed to construct XML");
        bOK = false;
	}

	CUser* pViewer = inputContext.GetCurrentUser();
	if (pViewer == NULL || !pViewer->GetIsEditorOnAnySite() )
	{
		SetDNALastError("CSiteConfig","UpdateConfig","You cannot administer a site unless you are logged in as an Editor");
	    bOK = false;
    }

	CMultiStep Multi(m_InputContext, "SITECONFIG");
	if (!Multi.ProcessInput() )
	{
        CopyDNALastError("CSiteConfig",Multi);
        bOK = false;
	}

	CStoredProcedure SP;
	m_InputContext.InitialiseStoredProcedureObject(&SP);


	bMultiStepReady = false;
	if (bOK && Multi.ReadyToUse())
    {
        CTDVString sSiteConfigXML;
        bOK = bOK && Multi.GetAllElementsAsXML(sSiteConfigXML);

		//Ensure Site Config is enclosed in <SITECONFIG> element
		if ( sSiteConfigXML.Left(12) != "<SITECONFIG>" )
		{
			sSiteConfigXML = "<SITECONFIG>" + sSiteConfigXML + "</SITECONFIG>";
	    }

        // Check it can be parsed
	    CXMLTree* pCurrentConfig = CXMLTree::Parse(sSiteConfigXML);
	    if ( pCurrentConfig == NULL )
	    {
		    return SetDNALastError("CSiteConfig","UpdateConfig","Failed to create a tree from the current site config");
	    }

		CTDVString sEditKey;
		m_InputContext.GetParamString("EditKey",sEditKey);

        std::vector<int> vSites;
		pViewer->GetSitesUserIsEditorOf(pViewer->GetUserID(),vSites);

        //Get List of sites to update
        std::vector<int> vSitesToUpdate;
        for ( int i = 0; i < m_InputContext.GetParamCount("siteId"); ++i )
            vSitesToUpdate.push_back( m_InputContext.GetParamInt("siteId",i));

        //Update current site if none specified.
        if ( vSitesToUpdate.size() == 0 )
            vSitesToUpdate.push_back(m_InputContext.GetSiteID());

        // Handle update of multiple sites.
        for ( std::vector<int>::iterator iter = vSitesToUpdate.begin(); iter != vSitesToUpdate.end(); ++iter )
        {
            int iSiteId = *iter; 

            //Check user is superuser / editor on site concerned.
            std::vector<int>::iterator itereditor = std::find(vSites.begin(),vSites.end(), iSiteId);
            if ( pViewer->GetIsSuperuser() || itereditor != vSites.end() )
	        {
	            if ( !SetSiteConfig(&SP,iSiteId,sSiteConfigXML,sEditKey) )
                {
                    AddInside("SITECONFIG-EDIT",GetLastErrorObject());
                }
            }
            else
            {
                CTDVString sShortName;
                m_InputContext.GetShortName(sShortName, iSiteId);
                AddInside("SITECONFIG-EDIT",CreateErrorXMLString("CSiteConfig","NOT-EDITOR","You cannot administer site " +  sShortName + " unless you are logged in as an Editor"));
            }
        }

		bMultiStepReady = bOK;
	}
    //else
    //{
    //    bOK = false;
    //    if ( !ErrorReported() )
    //        SetDNALastError("CSiteConfig","UpdateConfig","Unable to apply edits. The XML maybe poorly formed.");
    //}

    if ( Multi.ErrorReported() )
    {
        CopyDNALastError("CSiteConfig",Multi);
        bOK = false;
    }

	// Add the multistep data, even if an error has occurred
	CTDVString sXML = Multi.GetAsXML();
	AddInside("SITECONFIG-EDIT",sXML);

	return bOK;
}