Exemple #1
2
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;
}
Exemple #2
0
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;

}