void FixInsertStream::x_v_omega(int ninsert_this,int &ninserted_this, int &ninserted_spheres_this, double &mass_inserted_this) { ninserted_this = ninserted_spheres_this = 0; mass_inserted_this = 0.; int nins; double pos[3]; ParticleToInsert *pti; double omega_tmp[] = {0.,0.,0.}; // no overlap check // insert with v_normal, no omega if(!check_ol_flag) { for(int itotal = 0; itotal < ninsert_this; itotal++) { pti = fix_distribution->pti_list[ninserted_this]; double rad_to_insert = pti->r_bound_ins; generate_random(pos,rad_to_insert); // could ramdonize vel, omega, quat here nins = pti->set_x_v_omega(pos,v_normal,omega_tmp,quat_insert); ninserted_spheres_this += nins; mass_inserted_this += pti->mass_ins; ninserted_this++; } } // overlap check // account for maxattempt // pti checks against xnear and adds self contributions else { int ntry = 0; int maxtry = ninsert_this * maxattempt; while(ntry < maxtry && ninserted_this < ninsert_this) { pti = fix_distribution->pti_list[ninserted_this]; double rad_to_insert = pti->r_bound_ins; nins = 0; while(nins == 0 && ntry < maxtry) { generate_random(pos,rad_to_insert); // could ramdonize vel, omega, quat here ntry++; nins = pti->check_near_set_x_v_omega(pos,v_normal,omega_tmp,quat_insert,xnear,nspheres_near); } if(nins > 0) { ninserted_spheres_this += nins; mass_inserted_this += pti->mass_ins; ninserted_this++; } } } }
void FixInsertStream::x_v_omega(int ninsert_this_local,int &ninserted_this_local, int &ninserted_spheres_this_local, double &mass_inserted_this_local) { ninserted_this_local = ninserted_spheres_this_local = 0; mass_inserted_this_local = 0.; int nins; double pos[3]; ParticleToInsert *pti; double omega_tmp[] = {0.,0.,0.}; int ntry = 0; int maxtry = ninsert_this_local * maxattempt; // no overlap check // insert with v_normal, no omega if(!check_ol_flag) { for(int itotal = 0; itotal < ninsert_this_local; itotal++) { pti = fix_distribution->pti_list[ninserted_this_local]; double rad_to_insert = pti->r_bound_ins; do { generate_random(pos,rad_to_insert); ntry++; } while(ntry < maxtry && ((!domain->is_in_subdomain(pos)) || (domain->dist_subbox_borders(pos) < rad_to_insert))); // could randomize quat here if(quat_random_) MathExtraLiggghts::random_unit_quat(random,quat_insert); if(ntry < maxtry) { nins = pti->set_x_v_omega(pos,v_normal,omega_tmp,quat_insert); ninserted_spheres_this_local += nins; mass_inserted_this_local += pti->mass_ins; ninserted_this_local++; } } } // overlap check // account for maxattempt // pti checks against xnear and adds self contributions else { while(ntry < maxtry && ninserted_this_local < ninsert_this_local) { pti = fix_distribution->pti_list[ninserted_this_local]; double rad_to_insert = pti->r_bound_ins; nins = 0; while(nins == 0 && ntry < maxtry) { do { generate_random(pos,rad_to_insert); ntry++; } while(ntry < maxtry && ((!domain->is_in_subdomain(pos)) || (domain->dist_subbox_borders(pos) < rad_to_insert))); // could randomize quat here if(quat_random_) MathExtraLiggghts::random_unit_quat(random,quat_insert); if(ntry < maxtry) { nins = pti->check_near_set_x_v_omega(pos,v_normal,omega_tmp,quat_insert,neighList); } } if(nins > 0) { ninserted_spheres_this_local += nins; mass_inserted_this_local += pti->mass_ins; ninserted_this_local++; } } } }
void FixInsertPack::x_v_omega(int ninsert_this_local,int &ninserted_this_local, int &ninserted_spheres_this_local, double &mass_inserted_this_local) { ninserted_this_local = ninserted_spheres_this_local = 0; mass_inserted_this_local = 0.; double pos[3]; ParticleToInsert *pti; int ntry = 0; int maxtry = calc_maxtry(ninsert_this_local); double v_toInsert[3]; vectorZeroize3D(v_toInsert); // no overlap check if(!check_ol_flag) { for(int itotal = 0; itotal < ninsert_this_local; itotal++) { pti = fix_distribution->pti_list[ninserted_this_local]; double rbound = pti->r_bound_ins; if(print_stats_during_flag && (ninsert_this_local >= 10) && (0 == itotal % (ninsert_this_local/10))) fprintf(screen,"insertion: proc %d at %d %%\n",comm->me,10*itotal/(ninsert_this_local/10)); do { if(all_in_flag) ins_region->generate_random_shrinkby_cut(pos,rbound,true); else ins_region->generate_random(pos,true); ntry++; } while(ntry < maxtry && domain->dist_subbox_borders(pos) < rbound); if(ntry == maxtry) break; // randomize vel, omega, quat here vectorCopy3D(v_insert,v_toInsert); // could ramdonize vel, omega, quat here generate_random_velocity(v_toInsert); if(quat_random_) MathExtraLiggghts::random_unit_quat(random,quat_insert); if(pos[0] == 0. && pos[1] == 0. && pos[2] == 0.) error->one(FLERR,"FixInsertPack::x_v_omega() illegal position"); ninserted_spheres_this_local += pti->set_x_v_omega(pos,v_toInsert,omega_insert,quat_insert); mass_inserted_this_local += pti->mass_ins; ninserted_this_local++; } } // overlap check // account for maxattempt // pti checks against xnear and adds self contributions else { while(ntry < maxtry && ninserted_this_local < ninsert_this_local) { pti = fix_distribution->pti_list[ninserted_this_local]; double rbound = pti->r_bound_ins; if(print_stats_during_flag && (ninsert_this_local >= 10) && (0 == ninserted_this_local % (ninsert_this_local/10)) ) fprintf(screen,"insertion: proc %d at %d %%\n",comm->me,10*ninserted_this_local/(ninsert_this_local/10)); int nins = 0; while(nins == 0 && ntry < maxtry) { do { if(all_in_flag) ins_region->generate_random_shrinkby_cut(pos,rbound,true); else ins_region->generate_random(pos,true); ntry++; } while(ntry < maxtry && domain->dist_subbox_borders(pos) < rbound); // randomize vel, omega, quat here vectorCopy3D(v_insert,v_toInsert); // could ramdonize vel, omega, quat here generate_random_velocity(v_toInsert); if(quat_random_) MathExtraLiggghts::random_unit_quat(random,quat_insert); nins = pti->check_near_set_x_v_omega(pos,v_toInsert,omega_insert,quat_insert,neighList); } if(nins > 0) { ninserted_spheres_this_local += nins; mass_inserted_this_local += pti->mass_ins; ninserted_this_local++; } } } }