Foam::tmp<Foam::volVectorField> Foam::wallLubricationModels::TomiyamaWallLubrication::Fi() const { volVectorField Ur(pair_.Ur()); const volVectorField& n(nWall()); const volScalarField& y(yWall()); volScalarField Eo(pair_.Eo()); return ( pos(Eo - 1.0)*neg(Eo - 5.0)*exp(-0.933*Eo + 0.179) + pos(Eo - 5.0)*neg(Eo - 33.0)*(0.00599*Eo - 0.0187) + pos(Eo - 33.0)*0.179 ) *0.5 *pair_.dispersed().d() *( 1/sqr(y) - 1/sqr(D_ - y) ) *pair_.continuous().rho() *magSqr(Ur - (Ur & n)*n) *n; }
Foam::tmp<Foam::volScalarField> Foam::phasePair::EoH1() const { return EoH ( dispersed().d() *cbrt(1 + 0.163*pow(Eo(), 0.757)) ); }
Foam::tmp<Foam::volScalarField> Foam::dragModels::TomiyamaKataokaZunSakaguchi::CdRe() const { volScalarField Re(pair_.Re()); volScalarField Eo(max(pair_.Eo(), residualEo_)); return max ( 24*(1 + 0.15*pow(Re, 0.687))/max(Re, residualRe_), 8*Eo/(3*(Eo + 4.0)) ) *max(pair_.Re(), residualRe_); }
Foam::tmp<Foam::volScalarField> Foam::dragModels::TomiyamaAnalytic::CdRe() const { volScalarField Eo(max(pair_.Eo(), residualEo_)); volScalarField E(max(pair_.E(), residualE_)); volScalarField OmEsq(max(scalar(1) - sqr(E), sqr(residualE_))); volScalarField rtOmEsq(sqrt(OmEsq)); volScalarField F(max(asin(rtOmEsq) - E*rtOmEsq, residualE_)/OmEsq); return (8.0/3.0) *Eo /( Eo*pow(E, 2.0/3.0)/OmEsq + 16*pow(E, 4.0/3.0) ) /sqr(F) *max(pair_.Re(), residualRe_); }
Foam::tmp<Foam::volScalarField> Foam::microDragClosures::IshiiZuber::CdRe() const { volScalarField Re(pair_.Re()); volScalarField Eo(pair_.Eo()); volScalarField mud(pair_.dispersed().mu()); volScalarField muc(pair_.continuous().mu()); volScalarField muStar((mud + 0.4*muc)/(mud + muc)); volScalarField muMix ( muc *pow(max(1 - pair_.dispersed(), scalar(1e-3)), -2.5*muStar) ); volScalarField ReM(Re*muc/muMix); volScalarField CdRe ( pos(1000 - ReM)*24.0*(scalar(1) + 0.15*pow(ReM, 0.687)) + neg(1000 - ReM)*0.44*ReM ); volScalarField F((muc/muMix)*sqrt(1 - pair_.dispersed())); F.max(1e-3); volScalarField Ealpha((1 + 17.67*pow(F, 0.8571428))/(18.67*F)); volScalarField CdReEllipse(Ealpha*0.6666*sqrt(Eo)*Re); return pos(CdReEllipse - CdRe) *min(CdReEllipse, Re*sqr(1 - pair_.dispersed())*2.66667) + neg(CdReEllipse - CdRe)*CdRe; }
int main (int argc, char **argv) { #if defined(_DIST_) CnC::dist_cnc_init< HeatEquation_bl_context > AAA; #endif // CnC::debug::set_num_threads(1); tbb::tick_count t0 = tbb::tick_count::now(); if( argc < 3 ) { std::cerr << "expecting 2 arguments: <file> <blocksize>\n"; exit( 1 ); } global_data d; int& block_size = d.block_size; int& Nx = d.Nx; int& Nt = d.Nt; int& N_bl = d.N_bl; double& Xa = d.Xa; double& Xb = d.Xb; double& T0 = d.T0; double& T1 = d.T1; double& k = d.k; double& hx = d.hx; double& ht = d.ht; block_size = atoi(argv[2]); if(block_size < 1) { std::cerr<<"Bad block size\n"; return 0; } { std::ifstream from(argv[1]); if( ! from ) { std::cerr << "couldn't open " << argv[1] << std::endl; exit( 2 ); } from >> d.Xa >> d.Xb >> d.Nx >> d.T0 >> d.T1 >> d.Nt >> d.k; from.close(); } if( block_size > Nx+1 ) { block_size = Nx+1; } else { Nx = ((Nx+1+block_size-1)/block_size)*block_size-1; } HeatEquation_bl_context c; hx = ( Xb - Xa ) / Nx; ht = ( T1 - T0 ) / Nt; // for ( int i = 0; i < Nx + 1; i++ ) { c.X.put(i,Xa+i*hx); } // for ( int i = 0; i < Nt + 1; i++ ) { c.T.put(i,T0+i*ht); } N_bl = (Nx+1) / block_size; c.gd.put(0,d); for ( int i = 0; i < N_bl; i++ ) { my_array<double> z(block_size); for(int j = 0; j < block_size; j++ ){ double x = calc_x(block_size*i+j,Xa,Xb,Nx); z.data[j] = Analitical( x, T0 ); } c.H.put(Pair(0,i),z); } Pair p; p.It = 1; for ( int j = 0; j < N_bl; j++ ) { p.Jx = j; c.Tag.put( p ); } // Wait for all steps to finish c.wait(); tbb::tick_count t1 = tbb::tick_count::now(); std::cout<<"Time taken: "<< (t1-t0).seconds()<<" \n"; if (argc >= 4){ for (int i = 0; i <= Nt; i++) { for (int j = 0; j < N_bl; j++){ my_array<double> z; c.H.get(Pair(i,j),z); for (int k = j*block_size; k < j*block_size+block_size && k <= Nx; k++){ printf("%.6lf ",double(z.data[k-j*block_size])); } } puts(""); } } Eo(N_bl); Eo(Nt); return 0; }
double PZStability::eval(const arma::vec & x, int mode) { double focktol=ROUGHTOL; // Rotation cutoff double rotcut=10*DBL_EPSILON; if(restr) { rscf_t tmp(rsol); // List of occupieds to check std::vector<size_t> chkorb; if(mode==-1 || mode == 0) { for(size_t o=0;o<oa;o++) chkorb.push_back(o); } // Get rotation matrix arma::cx_mat Rov; if(cancheck) { // ov rotation matrix Rov=ov_rotation(x,false); // Get list of changed occupied orbitals if(mode==1) chkorb=check_ov(Rov.submat(0,oa,oa-1,Rov.n_cols-1),rotcut); } // Do we need to do the reference part? if(chkorb.size() || mode==-1 || mode==0) { if(cancheck) { // Rotate orbitals tmp.cC=tmp.cC*Rov; // Update density matrix tmp.P=2.0*arma::real(tmp.cC.cols(0,oa-1)*arma::trans(tmp.cC.cols(0,oa-1))); } // Dummy occupation vector std::vector<double> occa(oa,2.0); // Build global Fock operator solverp->Fock_RDFT(tmp,occa,method,grid,nlgrid,focktol); // Update reference energy if(mode==-1) ref_E0=tmp.en.E; } else if(mode==1) { // No, we don't. Set energy tmp.en.E=ref_E0; } else { ERROR_INFO(); throw std::runtime_error("Shouldn't be here!\n"); } // Get oo rotation arma::cx_mat Roo; if(oocheck) { Roo=oo_rotation(x,false); if(mode==1) check_oo(chkorb,Roo,rotcut); } else Roo.eye(oa,oa); // Orbital SI energies arma::vec Eo(ref_Eo); // Do we need to do anything for the oo part? if(chkorb.size() || mode == 0 || mode == -1) { // Collect list of changed occupied orbitals arma::uvec orblist(arma::sort(arma::conv_to<arma::uvec>::from(chkorb))); // Transformed oo block arma::cx_mat Ct=tmp.cC.cols(0,oa-1)*Roo; // Dummy matrix arma::cx_mat Rdum=arma::eye(orblist.n_elem,orblist.n_elem)*COMPLEX1; // Build the SI part std::vector<arma::cx_mat> Forb; arma::vec Eorb; solverp->PZSIC_Fock(Forb,Eorb,Ct.cols(orblist),Rdum,method,grid,nlgrid,false); if(mode==1) { for(size_t i=0;i<orblist.n_elem;i++) Eo(orblist(i))=Eorb(i); } else { Eo=Eorb; if(mode==-1) // Update reference ref_Eo=Eorb; } } // Account for spin return tmp.en.E - 2.0*arma::sum(Eo); } else { uscf_t tmp(usol); // List of occupieds to check std::vector<size_t> chkorba, chkorbb; if(mode==-1 || mode==0) { for(size_t o=0;o<oa;o++) chkorba.push_back(o); for(size_t o=0;o<ob;o++) chkorbb.push_back(o); } // Get rotation matrix arma::cx_mat Rova, Rovb; if(cancheck) { // ov rotation matrix Rova=ov_rotation(x,false); Rovb=ov_rotation(x,true); // Get list of changed occupied orbitals if(mode==1) { chkorba=check_ov(Rova.submat(0,oa,oa-1,oa+va-1),rotcut); chkorbb=check_ov(Rovb.submat(0,ob,ob-1,ob+vb-1),rotcut); } } // Do we need to do the reference part? if(chkorba.size() || chkorbb.size() || mode==-1 || mode==0) { if(cancheck) { // Rotate orbitals tmp.cCa=tmp.cCa*Rova; tmp.cCb=tmp.cCb*Rovb; // Update density matrix tmp.Pa=arma::real(tmp.cCa.cols(0,oa-1)*arma::trans(tmp.cCa.cols(0,oa-1))); tmp.Pb=arma::real(tmp.cCb.cols(0,ob-1)*arma::trans(tmp.cCb.cols(0,ob-1))); tmp.P=tmp.Pa+tmp.Pb; } // Dummy occupation vector std::vector<double> occa(oa,1.0); std::vector<double> occb(ob,1.0); // Build global Fock operator solverp->Fock_UDFT(tmp,occa,occb,method,grid,nlgrid,focktol); // Update reference energy if(mode==-1) ref_E0=tmp.en.E; } else if(mode==1) { // No, we don't. Set energy tmp.en.E=ref_E0; } else { ERROR_INFO(); throw std::runtime_error("Shouldn't be here!\n"); } // Get oo rotation arma::cx_mat Rooa, Roob; if(oocheck) { Rooa=oo_rotation(x,false); Roob=oo_rotation(x,true); if(mode==1) { check_oo(chkorba,Rooa,rotcut); check_oo(chkorbb,Roob,rotcut); } } else { Rooa.eye(oa,oa); Roob.eye(ob,ob); } // Orbital SI energies arma::vec Eoa(ref_Eoa), Eob(ref_Eob); // Do we need to do anything for the oo part? if(chkorba.size() || mode == 0 || mode == -1) { // Collect list of changed occupied orbitals arma::uvec orblist(arma::sort(arma::conv_to<arma::uvec>::from(chkorba))); // Transformed oo block arma::cx_mat Ct=tmp.cCa.cols(0,oa-1)*Rooa; // Dummy matrix arma::cx_mat Rdum=arma::eye(orblist.n_elem,orblist.n_elem)*COMPLEX1; // Build the SI part std::vector<arma::cx_mat> Forb; arma::vec Eorb; solverp->PZSIC_Fock(Forb,Eorb,Ct.cols(orblist),Rdum,method,grid,nlgrid,false); // Collect energies if(mode==1) { for(size_t i=0;i<orblist.n_elem;i++) Eoa(orblist(i))=Eorb(i); } else { Eoa=Eorb; if(mode==-1) // Update reference ref_Eoa=Eorb; } } if(chkorbb.size() || mode == 0 || mode == -1) { // Collect list of changed occupied orbitals arma::uvec orblist(arma::sort(arma::conv_to<arma::uvec>::from(chkorbb))); // Transformed oo block arma::cx_mat Ct=tmp.cCb.cols(0,ob-1)*Roob; // Dummy matrix arma::cx_mat Rdum=arma::eye(orblist.n_elem,orblist.n_elem)*COMPLEX1; // Build the SI part std::vector<arma::cx_mat> Forb; arma::vec Eorb; solverp->PZSIC_Fock(Forb,Eorb,Ct.cols(orblist),Rdum,method,grid,nlgrid,false); // Collect energies if(mode==1) { for(size_t i=0;i<orblist.n_elem;i++) Eob(orblist(i))=Eorb(i); } else { Eob=Eorb; if(mode==-1) // Update reference ref_Eob=Eorb; } } // Result is return tmp.en.E-arma::sum(Eoa)-arma::sum(Eob); } }