peBool proVertBuff::Create(const char* technique, PRO_PRIMITIVE primitive, peInt size) { m_Primitive = primitive; m_Technique = GetTechnique(technique); m_VertSize = GetTechniqueSize(m_Technique); m_VertFormat = GetTechniqueFormat(m_Technique); m_Size = size; m_MemoryYield = GetYield(m_Primitive, m_Size); if( FAILED( g_pAppDef->d3dDevice->CreateVertexBuffer(m_Size*m_VertSize, 0, m_VertFormat, D3DPOOL_DEFAULT, &m_pVertBuffDef->m_vertBuffD3D, NULL) ) ) { assert(0); return false; } return true; }
// Solve numerically for lambda // Subclasses can override for analytical solution if possible double SLMaterial::SolveForLambdaBracketed(MPMBase *mptr,int np,double strial,Tensor *stk,double Gred, double psKred,double Ptrial,double delTime,HardeningAlpha *a,void *properties,int offset) const { if(np==PLANE_STRESS_MPM) { // not allowed return 0.; } else { // solve - sqrt(2/3)GetYield(alpha+dalpha,dalpha) + strial - 2 GRed sqrt(3/2)dalpha = 0 SLProperties *p = (SLProperties *)properties; double rho = parent->GetRho(mptr); // test lower limit a->dalpha = delTime*p->epdotmin; a->alpint = mptr->GetHistoryDble(0,offset) + a->dalpha; p->isConstantYT = true; p->constantYT = YTmin; double gmin = strial - 2.*Gred*a->dalpha/SQRT_TWOTHIRDS - SQRT_TWOTHIRDS*GetYield(mptr,np,delTime,a,p); if(gmin<0.) { // low strain rate answer between 0 and epdotmin double lambdak = HardeningLawBase::SolveForLambda(mptr,np,strial,stk,Gred,psKred,1.,delTime,a,p,offset); //cout << "# low strain rate condition " << lambdak << " should be below " << delTime*epdotmin/SQRT_TWOTHIRDS << endl; p->isConstantYT = false; mptr->SetHistoryDble(YT_HISTORY,p->currentYTred*rho*1.e-6,offset); mptr->SetHistoryDble(EPDOT_HISTORY,SQRT_TWOTHIRDS*lambdak/delTime,offset); return lambdak; } // test upper limit a->dalpha = delTime*p->epdotmax; a->alpint = mptr->GetHistoryDble(0,offset) + a->dalpha; p->constantYT=YPred; double gmax = strial - 2.*Gred*a->dalpha/SQRT_TWOTHIRDS - SQRT_TWOTHIRDS*GetYield(mptr,np,delTime,a,p); if(gmax>0.) { // high string rate answer for rate higher than epmax double lambdak=HardeningLawBase::SolveForLambda(mptr,np,strial,stk,Gred,psKred,1.,delTime,a,p,offset); //cout << "# high strain rate condition " << lambdak << " should be above " << delTime*epdotmax/SQRT_TWOTHIRDS << endl; p->isConstantYT = false; mptr->SetHistoryDble(YT_HISTORY,p->currentYTred*rho*1.e-6,offset); mptr->SetHistoryDble(EPDOT_HISTORY,SQRT_TWOTHIRDS*lambdak/delTime,offset); return lambdak; } p->isConstantYT=false; // Newton method in ln epdot space p->currentYTred=fmax(YTmin,mptr->GetHistoryDble(YT_HISTORY,offset)*1.e6/rho); double epdot=GetEpdot(p->currentYTred,p->TwoUkkT); double logepdot = log(epdot); a->dalpha = epdot*delTime; a->alpint = mptr->GetHistoryDble(0,offset) + a->dalpha; int step=1; while(true) { // update iterative variables (alpha, dalpha) double glam = -SQRT_TWOTHIRDS*GetYield(mptr,np,delTime,a,p) + strial - 2.*Gred*a->dalpha/SQRT_TWOTHIRDS; double slope = -2.*Gred*a->dalpha/SQRT_TWOTHIRDS - GetKPrime(mptr,np,delTime,a,p); double delLogepdot = -glam/slope; logepdot += delLogepdot; // check for convergence a->dalpha = exp(logepdot)*delTime; a->alpint = mptr->GetHistoryDble(0,offset) + a->dalpha; if(step>20 || fabs(delLogepdot)<0.0001) break; step++; } // set history when done mptr->SetHistoryDble(YT_HISTORY,p->currentYTred*rho*1.e-6,offset); mptr->SetHistoryDble(EPDOT_HISTORY,a->dalpha/delTime,offset); return a->dalpha/SQRT_TWOTHIRDS; } }
//------------------------------------------------------------------------------ // PrintYields //------------------------------------------------------------------------------ void PrintYields(float cut) { if (cut < 0) cut = _cut; if (_verbosity > 0) printf("\n"); printf(" [PrintYields] MVA cut = %.2f\n", cut); if (_verbosity > 0) printf("\n"); float nsignal; float errsignal; GetYield(_signal, nsignal, errsignal, cut); float ndata = 0.0; float errdata = 0.0; if(_systematic == "nominal") GetYield("01_Data", ndata, errdata, cut); //float nexpected = 0; //nexpected += GetYield("14_HZ", cut); //nexpected += GetYield("06_WW", cut); //nexpected += GetYield("02_WZTo3LNu", cut); //nexpected += GetYield("03_ZZ", cut); //nexpected += GetYield("11_Wg", cut); //nexpected += GetYield("07_ZJets", cut); //nexpected += GetYield("09_TTV", cut); //nexpected += GetYield("04_TTTo2L2Nu", cut); //nexpected += GetYield("05_ST", cut); //nexpected += GetYield("00_Fakes", cut); float yield00 = 0.0; float err00 = 0.0; if(_systematic == "nominal") GetYield("00_Fakes" , yield00, err00, cut ); float yield02; float err02; GetYield("02_WZTo3LNu" , yield02, err02, cut ); float yield03; float err03; GetYield("03_ZZ" , yield03, err03, cut ); float yield04; float err04; GetYield("04_TTTo2L2Nu", yield04, err04, cut ); float yield05; float err05; GetYield("05_ST" , yield05, err05, cut ); float yield06; float err06; GetYield("06_WW" , yield06, err06, cut ); float yield07; float err07; GetYield("07_ZJets" , yield07, err07, cut ); float yield09; float err09; GetYield("09_TTV" , yield09, err09, cut ); float yield11; float err11; GetYield("11_Wg" , yield11, err11, cut ); float yield14; float err14; GetYield("14_HZ" , yield14, err14, cut ); if (_verbosity > 0) { printf("--------------------------------\n"); PrintYield("signal", nsignal); PrintYield("data", ndata); //PrintYield("expected", nexpected); printf("\n"); } _yields.open(Form("yields/%s_%s.dat", _signal.Data(), _systematic.Data() )); if( _systematic != "stat" ){ _yields << Form( "%f \n", ndata ); _yields << Form( "%f \n", nsignal); _yields << Form( "%f \n", yield00); _yields << Form( "%f \n", yield02); _yields << Form( "%f \n", yield03); _yields << Form( "%f \n", yield04); _yields << Form( "%f \n", yield05); _yields << Form( "%f \n", yield06); _yields << Form( "%f \n", yield07); _yields << Form( "%f \n", yield09); _yields << Form( "%f \n", yield11); _yields << Form( "%f \n", yield14); } else{ _yields << Form( "%f \n", errdata ); _yields << Form( "%f \n", errsignal); _yields << Form( "%f \n", err00); _yields << Form( "%f \n", err02); _yields << Form( "%f \n", err03); _yields << Form( "%f \n", err04); _yields << Form( "%f \n", err05); _yields << Form( "%f \n", err06); _yields << Form( "%f \n", err07); _yields << Form( "%f \n", err09); _yields << Form( "%f \n", err11); _yields << Form( "%f \n", err14); } _yields.close(); }