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