예제 #1
0
ComputeUpdateCoefficient::ComputeUpdateCoefficient ( const std::string& name ) :
  solver::Action(name),
  m_tolerance(1e-12)
{
  mark_basic();
  // options
  options().add("time_accurate", true)
    .description("Time Accurate")
    .pretty_name("Time Accurate")
    .mark_basic()
    .add_tag("time_accurate");

  options().add("cfl", 1.)
    .description("Courant Number")
    .pretty_name("CFL")
    .mark_basic()
    .add_tag("cfl");

  options().add(sdm::Tags::update_coeff(), m_update_coeff)
    .description("Update coefficient to multiply with residual")
    .pretty_name("Update Coefficient")
    .link_to(&m_update_coeff);

  options().add(sdm::Tags::wave_speed(), m_wave_speed)
    .description("Wave Speed multiplied divided by characteristic length")
    .pretty_name("Wave Speed")
    .link_to(&m_wave_speed);

  options().add(sdm::Tags::time(), m_time)
    .description("Time Tracking component")
    .pretty_name("Time")
    .link_to(&m_time);

}
예제 #2
0
ActionDirector::ActionDirector ( const std::string& name ) :
  common::ActionDirector(name)
{
  mark_basic();

  // options

  options().add_option(Tags::solver(), m_solver)
      .description("Link to the solver discretizing the problem")
      .pretty_name("Solver")
      .mark_basic()
      .link_to(&m_solver);

  options().add_option("mesh", m_mesh)
      .description("Mesh the Discretization Method will be applied to")
      .pretty_name("Mesh")
      .mark_basic()
      .link_to(&m_mesh);

  options().add_option(Tags::physical_model(), m_physical_model)
      .description("Physical model")
      .pretty_name("Physical Model")
      .mark_basic()
      .link_to(&m_physical_model);

  options().add_option(Tags::time(), m_time)
      .description("Time tracking component")
      .pretty_name("Time")
      .mark_basic()
      .link_to(&m_time);
}
예제 #3
0
IterativeSolver::IterativeSolver ( const std::string& name ) :
  CF::Solver::ActionDirector(name)
{
  mark_basic();

  // properties

  m_properties.add_property( "iteration", Uint(0) );

  // static components

  m_pre_actions  = create_static_component_ptr<CActionDirector>("PreActions");

  m_update = create_static_component_ptr<CActionDirector>("Update");

  m_post_actions = create_static_component_ptr<CActionDirector>("PostActions");

  // dynamic components

  create_component<CCriterionMaxIterations>( "MaxIterations" );

  CComputeLNorm& cnorm = post_actions().create_component<CComputeLNorm>( "ComputeNorm" );
  post_actions().append( cnorm );

  CPeriodicWriteMesh& cwriter = post_actions().create_component<CPeriodicWriteMesh>( "PeriodicWriter" );
  post_actions().append( cwriter );

  cnorm.configure_option("Scale", true);
  cnorm.configure_option("Order", 2u);
}
예제 #4
0
UpdateSolution::UpdateSolution ( const std::string& name ) :
  solver::Action(name)
{
  mark_basic();

  // options

  options().add_option(sdm::Tags::solution(), m_solution)
     .description("Solution to update")
     .pretty_name("Solution")
     .link_to(&m_solution);

  options().add_option(sdm::Tags::update_coeff(), m_update_coeff)
     .description("Update coefficient")
     .pretty_name("Update Coefficient")
     .link_to(&m_update_coeff);

  options().add_option(sdm::Tags::residual(), m_residual)
     .description("Residual")
     .pretty_name("Residual")
     .link_to(&m_residual);
     
  options().add_option(sdm::Tags::jacob_det(), m_jacobian_determinant)
     .description("Jacobian determinant")
     .pretty_name("Jacobian Determinant")
     .link_to(&m_jacobian_determinant);

}
예제 #5
0
IterativeSolver::IterativeSolver ( const std::string& name ) :
  cf3::solver::ActionDirector(name)
{
  mark_basic();

  // properties

  properties().add( "iteration", Uint(0) );

  // static components

  m_pre_actions  = create_static_component<ActionDirector>("PreActions");

  m_update = create_static_component<ActionDirector>("Update");

  m_post_actions = create_static_component<ActionDirector>("PostActions");

  // dynamic components

  create_component<CriterionMaxIterations>( "MaxIterations" );

  ComputeLNorm& cnorm = *post_actions().create_component<ComputeLNorm>( "ComputeNorm" );
  post_actions().create_component<PrintIterationSummary>( "IterationSummary" );
  post_actions().create_component<PeriodicWriteMesh>( "PeriodicWriter" );

  cnorm.options().set("scale", true);
  cnorm.options().set("order", 2u);
}
예제 #6
0
OutputIterationInfo::OutputIterationInfo ( const std::string& name ) :
  Solver::Action(name)
{
  mark_basic();

  // options
  m_options.add_option(OptionComponent<CField>::create(FlowSolver::Tags::residual(), &m_residual))
    ->description("Residual")
    ->pretty_name("Residual");
}
예제 #7
0
FwdEuler::FwdEuler ( const std::string& name ) :
  cf3::solver::Action(name)
{
  mark_basic();

  options().add_option( "cfl", 1.0 )
      .pretty_name("CFL")
      .description("Courant-Fredrichs-Levy stability number");

}
예제 #8
0
InitialConditions::InitialConditions ( const std::string& name ) :
  cf3::solver::ActionDirector(name)
{
  mark_basic();

  // signals

  regist_signal( "create_initial_condition" )
      .connect  ( boost::bind( &InitialConditions::signal_create_initial_condition, this, _1 ) )
      .signature( boost::bind( &InitialConditions::signature_signal_create_initial_condition, this, _1))
      .description("creates an initial condition for the solution")
      .pretty_name("Create Initial Condition");
}
예제 #9
0
ImposeCFL::ImposeCFL ( const std::string& name ) :
  TimeStepComputer(name),
  m_cfl(0.)
{
  mark_basic();
  // options
  options().add("cfl", std::string("1.") )
    .description("Courant Number")
    .pretty_name("CFL")
    .mark_basic()
    .attach_trigger( boost::bind( &ImposeCFL::parse_cfl, this) );
  parse_cfl();
}
예제 #10
0
BoundaryTerm::BoundaryTerm ( const std::string& name ) :
  CF::Solver::Action(name)
{
  mark_basic();

  m_options.add_option(OptionComponent<CField>::create( RDM::Tags::solution(), &m_solution))
      ->pretty_name("Solution Field");

  m_options.add_option(OptionComponent<CField>::create( RDM::Tags::wave_speed(), &m_wave_speed))
      ->pretty_name("Wave Speed Field");

  m_options.add_option(OptionComponent<CField>::create( RDM::Tags::residual(), &m_residual))
      ->pretty_name("Residual Field");
}
예제 #11
0
PrepareMesh::PrepareMesh ( const std::string& name ) :
  cf3::solver::ActionDirector(name)
{
  mark_basic();

  // Build faces and cell2face and face2cell connectivities
  create_component<BuildFaces>("build_inner_faces")->options().configure_option("store_cell2face",true);

  // renumber elements because of the faces (not strictly necessary)
  // create_component<GlobalNumbering>("renumber");
  
  // Create fields specifically for SD
  create_component<CreateSDFields>("create_sfd_fields");
}
예제 #12
0
DomainDiscretization::DomainDiscretization ( const std::string& name ) :
  cf3::solver::ActionDirector(name)
{
  mark_basic();

  // signals

  regist_signal( "create_term" )
      .connect  ( boost::bind( &DomainDiscretization::signal_create_term, this, _1 ) )
      .signature( boost::bind( &DomainDiscretization::signature_signal_create_term, this, _1))
      .description("creates a discretization term for cells")
      .pretty_name("Create Cell Term");

  m_terms = create_static_component<ActionDirector>("Terms");
}
예제 #13
0
BoundaryTerm::BoundaryTerm ( const std::string& name ) :
    cf3::solver::Action(name)
{
    mark_basic();

    options().add(RDM::Tags::solution(), m_solution)
    .pretty_name("Solution Field")
    .link_to(&m_solution);

    options().add(RDM::Tags::wave_speed(), m_wave_speed)
    .pretty_name("Wave Speed Field")
    .link_to(&m_wave_speed);

    options().add(RDM::Tags::residual(), m_residual)
    .pretty_name("Residual Field")
    .link_to(&m_residual);
}
예제 #14
0
BoundaryConditions::BoundaryConditions ( const std::string& name ) :
  cf3::solver::ActionDirector(name)
{
  mark_basic();

  // subcomponents

  m_weak_bcs   = create_static_component<ActionDirector>("WeakBCs");
  m_strong_bcs = create_static_component<ActionDirector>("StrongBCs");

  // signals

  regist_signal( "create_boundary_condition" )
      .connect  ( boost::bind( &BoundaryConditions::signal_create_boundary_condition, this, _1 ) )
      .signature( boost::bind( &BoundaryConditions::signature_signal_create_boundary_condition, this, _1))
      .description("creates a boundary condition for the solution")
      .pretty_name("Create Boundary Condition");
}
예제 #15
0
Term::Term ( const std::string& name ) :
  CF::Solver::Action(name)
{
  mark_basic();

  m_options.add_option(OptionComponent<Field>::create( SFDM::Tags::solution(), &m_solution))
      ->pretty_name("Solution Field");

  m_options.add_option(OptionComponent<Field>::create( SFDM::Tags::wave_speed(), &m_wave_speed))
      ->pretty_name("Wave Speed Field");

  m_options.add_option(OptionComponent<Field>::create( SFDM::Tags::residual(), &m_residual))
      ->pretty_name("Residual Field");

  m_options.add_option(OptionComponent<Field>::create( SFDM::Tags::jacob_det(), &m_jacob_det))
      ->pretty_name("Jacobian Determinant Field");

}
예제 #16
0
UpdateSolution::UpdateSolution ( const std::string& name ) :
  CAction(name)
{
  mark_basic();

  // options

  m_options.add_option(OptionComponent<CField>::create("solution", &m_solution))
      ->description("Solution to update")
      ->pretty_name("Solution");

  m_options.add_option(OptionComponent<CField>::create("update_coeff", &m_update_coeff))
      ->description("Update coefficient")
      ->pretty_name("Update coefficient");

  m_options.add_option(OptionComponent<CField>::create("residual", &m_residual))
      ->description("Residual")
      ->pretty_name("Residual");
}
예제 #17
0
파일: RK.cpp 프로젝트: tbanyai/coolfluid3
RK::RK ( const std::string& name ) :
  cf3::solver::Action(name)
{
  mark_basic();

  // options

  options().add_option(RDM::Tags::solution(), m_solution).link_to(&m_solution);
  options().add_option(RDM::Tags::dual_area(), m_dual_area).link_to(&m_dual_area);
  options().add_option(RDM::Tags::residual(), m_residual).link_to(&m_residual);

  options().add_option( "cfl", 1.0 )
      .pretty_name("CFL")
      .description("Courant-Fredrichs-Levy stability number");

  options().add_option( "rkorder", 1u )
      .pretty_name("RK Order")
      .description("Order of the Runge-Kutta step");

}
예제 #18
0
RK::RK ( const std::string& name ) :
  CF::Solver::Action(name)
{
  mark_basic();

  // options

  options().add_option(
        Common::OptionComponent<Mesh::CField>::create( RDM::Tags::solution(), &m_solution));
  options().add_option(
        Common::OptionComponent<Mesh::CField>::create( RDM::Tags::dual_area(), &m_dual_area));
  options().add_option(
        Common::OptionComponent<Mesh::CField>::create( RDM::Tags::residual(), &m_residual));

  options().add_option< OptionT<Real> >( "cfl", 1.0 )
      ->pretty_name("CFL")
      ->description("Courant-Fredrichs-Levy stability number");

  options().add_option< OptionT<Real> >( "rkorder", 1u )
      ->pretty_name("RK Order")
      ->description("Order of the Runge-Kutta step");

}
예제 #19
0
DomainDiscretization::DomainDiscretization ( const std::string& name ) :
  CF::Solver::ActionDirector(name)
{
  mark_basic();

  // signals

  regist_signal( "create_cell_term" )
      ->connect  ( boost::bind( &DomainDiscretization::signal_create_cell_term, this, _1 ) )
      ->signature( boost::bind( &DomainDiscretization::signature_signal_create_cell_term, this, _1))
      ->description("creates a discretization term for cells")
      ->pretty_name("Create Cell Term");

  regist_signal( "create_face_term" )
      ->connect  ( boost::bind( &DomainDiscretization::signal_create_face_term, this, _1 ) )
      ->signature( boost::bind( &DomainDiscretization::signature_signal_create_face_term, this, _1))
      ->description("creates a discretization term for faces")
      ->pretty_name("Create Cell Term");


  m_face_terms = create_static_component_ptr<CActionDirector>("FaceTerms");
  m_cell_terms = create_static_component_ptr<CActionDirector>("CellTerms");
}