//----------------------------------------------------------------------------- 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); }
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; }
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; }
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; }