// multithread cpu entry point
std::vector<double> montecarlo(double *D, int dim, double* node_coord, int nof_nodes,
                               std::shared_ptr<const dolfin::Expression> f, std::shared_ptr< const dolfin::Expression> q,
                               const int walks, const double btol, const int threads, const enum impl_t impl)
{
    std::vector<double> est;

    if (dim == 2) {
        struct pdd_prm<2> pp;
        pp.max_nof_threads = threads;
        pp.D[0] = D[0];
        pp.D[1] = D[1];
        pp.nof_walks = walks;
        pp.btol = btol;
        pp.impl = impl;
        Pdd<2> pdd(pp,f,q);
        est = pdd.pdd(nof_nodes,node_coord);
    }
    else {
        struct pdd_prm<3> pp;
        pp.max_nof_threads = threads;
        pp.D[0] = D[0];
        pp.D[1] = D[1];
        pp.D[2] = D[2];
        pp.nof_walks = walks;
        pp.btol = btol;
        pp.impl = impl;
        Pdd<3> pdd(pp,f,q);
        est = pdd.pdd(nof_nodes,node_coord);
    }

    return est;
}
double spec_template::calculate_metropolis_ratio_eta_theta(matrix *Lprop, vector<double> *thetaprop)
{
    // written by Dr. Jie Hao, Dr William Astle
	//prior
    vector<double> pdd((*thetaprop).size(),0);
    vector<double> pdd2(theta_draw.size(),0);
    vector<double> mvpd(L[0].size(),0);
    vector<double> mvpd2(L[0].size(),0);
    
    vector<double> vec(pars.p,0);
    vector<double> vecprop(vec);
    
    VVproddot(thetaprop, &psi_draw, &pdd);
    VVproddot(&theta_draw, &psi_draw, &pdd2);
    
    double logratio =-0.5*lambda_draw*(VVprod(&pdd,thetaprop) -VVprod(&pdd2,&theta_draw));
    
    //likelihood
    MVprod(&L, &beta_draw, &mvpd);
    MVprod(Lprop, &beta_draw, &mvpd2);

    for (unsigned int i = 0; i < L[0].size(); i++)
    {
      vec[i] = dataWy[i]-theta_draw[i]-mvpd[i]; 
      vecprop[i] = dataWy[i]-(*thetaprop)[i]-mvpd2[i];
    }
    
    logratio = logratio-0.5*(VVprod(&vecprop, &vecprop)-VVprod(&vec, &vec))*lambda_draw;
    logratio = logratio/Temp;
    return logratio;
}
示例#3
0
 pdd center(pdd p0, pdd p1, pdd p2) {
   pdd a = p1-p0;
   pdd b = p2-p0;
   double c1=abs2(a)*0.5;
   double c2=abs2(b)*0.5;
   double d = a % b;
   double x = p0.x + (c1 * b.y - c2 * a.y) / d;
   double y = p0.y + (a.x * c2 - b.x * c1) / d;
   return pdd(x,y);
 }
示例#4
0
void PropertyDataDlgHelper::InputPropertyDataDlg( const AcDbObjectId& objId, const AcStringArray& fields, const CString& func )
{
	if( objId.isNull() ) return;
	if( fields.isEmpty() ) return;

	// 切换资源
	CAcModuleResourceOverride myResources;
	if (_T("参与评价的煤量") == func)
	{
		GasWidthCaculDlg gaswidthdlg;
		gaswidthdlg.setMineGE(objId);
		int ret = gaswidthdlg.DoModal();
		if (IDCANCEL == ret) return;
	}

	if (_T("邻近层瓦斯涌出量") == func)
	{
		if(!AddNearByFields(objId,func)) return;
	}

	if(_T("工作面瓦斯抽采率") == func)
	{
		CString strGD,strVD,strGDold,strVDold;
		DataHelper::GetPropertyData(objId,_T("瓦斯绝对涌出量"),strGD);
		DataHelper::GetPropertyData(objId,_T("风排瓦斯量"),strVD);
		DataHelper::GetPropertyData(objId,_T("当月工作面月平均瓦斯抽采量"),strGDold);
		DataHelper::GetPropertyData(objId,_T("当月工作面风排瓦斯量"),strVDold);
		double ret = _tstof(strGD) - _tstof(strVD);
		CString strRet;
		strRet.Format(_T("%.2lf"),ret);
		if(_tstof(strGDold) <= 0 && ret >= 0)
			DataHelper::SetPropertyData(objId,_T("当月工作面月平均瓦斯抽采量"),strRet);
		if(_tstof(strVDold) <= 0)
			DataHelper::SetPropertyData(objId,_T("当月工作面风排瓦斯量"),strVD);
	}

	//if (_T("管路阻力") == func)
	//{
	//	ValueHelper::setGasAirValue(objId);
	//}

	//if(_T("通过瓦斯抽采量计算") == func || _T("通过残余瓦斯压力反算") == func)
	//{
	//	WcyPropertyDlg pdd(NULL,func);
	//	pdd.showAllData( true );
	//	pdd.setMineGE( objId );
	//	int len = fields.length();
	//	for( int i = 0; i < len; i++ )
	//	{
	//		pdd.addField( fields[i].kACharPtr() );
	//		//acutPrintf(_T("\n字段:%s"),fields[i].kACharPtr());
	//	}
	//	pdd.DoModal();
	//}
	//else
	//{
		PropertyDataDlg pdd(NULL,func);
		pdd.showAllData( true );
		pdd.setMineGE( objId );
		int len = fields.length();
		for( int i = 0; i < len; i++ )
		{
			pdd.addField( fields[i].kACharPtr() );
			//acutPrintf(_T("\n字段:%s"),fields[i].kACharPtr());
		}
		pdd.DoModal();
	//}
}