void sol_body_p(float p[3], const struct s_vary *vary, const struct v_body *bp, float dt) { float v[3]; if (bp->mi >= 0) { const struct v_move *mp = vary->mv + bp->mi; const struct b_path *pp = vary->base->pv + mp->pi; const struct b_path *pq = vary->base->pv + pp->pi; float s; if (pp->t == 0.f) s = 1.0e+6f; else if (vary->pv[mp->pi].f) s = (mp->t + dt) / pp->t; else s = mp->t / pp->t; v_sub(v, pq->p, pp->p); v_mad(p, pp->p, v, pp->s ? erp(s) : s); return; } p[0] = 0.0f; p[1] = 0.0f; p[2] = 0.0f; }
void sol_body_e(float e[4], const struct s_vary *vary, const struct v_body *bp, float dt) { if (bp->mj >= 0) { const struct v_move *mp = vary->mv + bp->mj; const struct b_path *pp = vary->base->pv + mp->pi; const struct b_path *pq = vary->base->pv + pp->pi; if (pp->fl & P_ORIENTED || pq->fl & P_ORIENTED) { float s; if (vary->pv[mp->pi].f) s = (mp->t + dt) / pp->t; else s = mp->t / pp->t; q_slerp(e, pp->e, pq->e, pp->s ? erp(s) : s); return; } } e[0] = 1.0f; e[1] = 0.0f; e[2] = 0.0f; e[3] = 0.0f; }
bool AAdapt::STKAdapt<SizeField>::adaptMesh(const Epetra_Vector& sol, const Epetra_Vector& ovlp_sol) { *output_stream_ << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << std::endl; *output_stream_ << "Adapting mesh using AAdapt::STKAdapt method " << std::endl; *output_stream_ << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << std::endl; Albany::AbstractSTKFieldContainer::IntScalarFieldType* proc_rank_field = genericMeshStruct->getFieldContainer()->getProcRankField(); Albany::AbstractSTKFieldContainer::IntScalarFieldType* refine_field = genericMeshStruct->getFieldContainer()->getRefineField(); // Save the current results and close the exodus file // Create a remeshed output file naming convention by adding the remesh_file_index_ ahead of the period std::ostringstream ss; std::string str = base_exo_filename; ss << "_" << remeshFileIndex << "."; str.replace(str.find('.'), 1, ss.str()); *output_stream_ << "Remeshing: renaming output file to - " << str << std::endl; // Open the new exodus file for results stk_discretization->reNameExodusOutput(str); remeshFileIndex++; // printElementData(); SizeField set_ref_field(*eMesh); eMesh->elementOpLoop(set_ref_field, refine_field); // SetUnrefineField set_unref_field(*eMesh); //eMesh.elementOpLoop(set_ref_field, refine_field); // eMesh->save_as("local_tet_N_5_ElementBased_0_.e"); stk_classic::adapt::ElementRefinePredicate erp(0, refine_field, 0.0); stk_classic::adapt::PredicateBasedElementAdapter<stk_classic::adapt::ElementRefinePredicate> breaker(erp, *eMesh, *refinerPattern, proc_rank_field); breaker.setRemoveOldElements(false); breaker.setAlwaysInitializeNodeRegistry(false); for(int ipass = 0; ipass < 3; ipass++) { eMesh->elementOpLoop(set_ref_field, refine_field); #if 0 std::vector<stk_classic::mesh::Entity*> elems; const std::vector<stk_classic::mesh::Bucket*>& buckets = eMesh->get_bulk_data()->buckets(eMesh->element_rank()); for(std::vector<stk_classic::mesh::Bucket*>::const_iterator k = buckets.begin() ; k != buckets.end() ; ++k) { stk_classic::mesh::Bucket& bucket = **k ; const unsigned num_elements_in_bucket = bucket.size(); for(unsigned i_element = 0; i_element < num_elements_in_bucket; i_element++) { stk_classic::mesh::Entity& element = bucket[i_element]; double* f_data = stk_classic::percept::PerceptMesh::field_data_entity(refine_field, element); std::cout << "Element: " << element.identifier() << "Refine field: " << f_data[0] << std::endl; } } #endif // std::cout << "P[" << eMesh->get_rank() << "] ipass= "******"P[" << eMesh->get_rank() << "] done... ipass= "******"local_tet_N_5_ElementBased_1_ipass_"+Teuchos::toString(ipass)+"_.e"); } breaker.deleteParentElements(); // eMesh->save_as("local_tet_N_5_ElementBased_1_.e"); // Throw away all the Albany data structures and re-build them from the mesh if(adapt_params_->get<bool>("Rebalance", false)) genericMeshStruct->rebalanceAdaptedMesh(adapt_params_, epetra_comm_); stk_discretization->updateMesh(); // printElementData(); return true; }