bool SysCADSystemHelper::SysCADSizeDataToSystem(MIPSD &PSD,RioTintoTS::PStreamInfo1 SizInfo) // // Copy SysCAD Sieve Series Data to System // { const int NumSizes = PSD.getSizeCount(); // Size of sieve double *d; d = new double[NumSizes]; double sz; /**** START TEST ****/ double *syscadsz = new double[NumSizes]; for (int i=0;i<(NumSizes);i++) { sz = PSD.getSize(i)*1000.; syscadsz[i] = sz; } delete syscadsz; /**** END TEST *****/ sz = PSD.getSize(NumSizes-1)*1000.; for (int i=0;i<(NumSizes-1);i++) { sz = PSD.getSize(NumSizes-i-2)*1000.; d[i] = sz; } d[NumSizes-1] = 0.0; RioTintoTS::VectorView& sizeData=RioTintoTS::VectorView(d,NumSizes,1); SizInfo->SetSizes( sizeData ); delete d; return(true); }
void CSeperator_EfficiencyCurve::CalculateEfficiencyCurve( MIPSD &in_PSD , double in_D50 , double in_Alpha, double in_Beta, double in_C, double &inout_BetaStar, CArray <double, double&> &out_Eu ) { long l_SizeCount = in_PSD.getSizeCount(); long l_PSDVectorCount = in_PSD.getPSDVectorCount(); // // Calculate BetaStar // inout_BetaStar = CalcBetaStar(in_Alpha, in_Beta ); // // Build probability passing from specified d50, Alpha parameters and PSD size // interval data // out_Eu.SetSize(l_SizeCount); for( int lSzIndex=0; lSzIndex < l_SizeCount; lSzIndex++ ) { const double NominalSize = in_PSD.getDefn().getGeometricMean(lSzIndex); //use geometrical mean const double d = in_Alpha*inout_BetaStar*NominalSize/in_D50; if (d>230.0)//limit of exp() out_Eu[lSzIndex] = 1.0; else { //out_Eu[lSzIndex] = (exp(d)-1.0) / (exp(d) + exp(in_Alpha) - 2.0); //out_Eu[lSzIndex] = 1.0 - in_C*(exp(in_Alpha)-1.0) / (exp(d) + exp(in_Alpha) - 2.0); double num = (1.0+in_Beta*inout_BetaStar*NominalSize/in_D50)*(exp(in_Alpha)-1.0 ); double den = exp(d) + exp(in_Alpha) - 2.0; out_Eu[lSzIndex] = 1.0 - in_C*num/GTZ(den); if (out_Eu[lSzIndex]>1.0) out_Eu[lSzIndex] = 1.0; if (out_Eu[lSzIndex]<0.0) out_Eu[lSzIndex] = 0.0; } } //out_Eu[0] = 0.0; }