コード例 #1
0
ファイル: CPlotXY.cpp プロジェクト: Ivor23/coolfluid3
void CPlotXY::convergence_history( SignalArgs & args )
{
  if( is_not_null(m_data.get()) )
  {
    SignalFrame reply = args.create_reply( uri() );
    SignalFrame& options = reply.map( Protocol::Tags::key_options() );
//    std::vector<Real> data(8000);
    CTable<Real>& table = *m_data.get();
    std::vector<std::string> labels =
        list_of<std::string>("x")("y")("z")("u")("v")("w")("p")("t");

    add_multi_array_in(options.main_map, "Table", m_data->array(), ";", labels);

//    for(Uint row = 0 ; row < 1000 ; ++row)
//    {
//      for(Uint col = 0 ; col < 8 ; ++col)
//        data[ (row * 8) + col ] = table[row][col];
//    }

//    XmlNode node = options.add("Table", data, " ; ");

//    node.set_attribute("dimensions", "8");
  }
  else
    throw SetupError( FromHere(), "Data to plot not setup" );
}
コード例 #2
0
ファイル: LocalDispatcher.cpp プロジェクト: Ivor23/coolfluid3
void LocalDispatcher::dispatch_signal(const std::string & target, const URI & receiver,
                                      SignalArgs & args)
{
  Component & comp = Core::instance().root().access_component( receiver );
  args.options().flush();
  comp.call_signal( target, args );
}
コード例 #3
0
void C3DViewBuilder::signature_create_3dview(SignalArgs &args)
{
  SignalFrame& options = args.map( Protocol::Tags::key_options() );

  options.set_option("3DView name", common::class_name<std::string>(), std::string(), "Name for the new 3DView");
  options.set_option("Parent", common::class_name<URI>(), Core::instance().root().uri().path(), "Parent of the new component");
}
コード例 #4
0
ファイル: ShockTube.cpp プロジェクト: andrealani/coolfluid3
void ShockTube::signature_create_model( SignalArgs& args )
{
  SignalFrame& p = args.map( Protocol::Tags::key_options() );

  p.set_option<std::string>("model_name", "shocktube" , "Name for created model" );
  p.set_option<Uint>("nb_cells",  100u , "Number of Cells to be generated");
  p.set_option<Uint>("dimension", 1u , "Dimension of the problem");
}
コード例 #5
0
void BoundaryConditions::signal_create_function_bc ( SignalArgs& node )
{
  SignalOptions options( node );

  SignalFrame reply = node.create_reply(uri());
  SignalOptions reply_options(reply);
  reply_options.add_option("created_component", add_function_bc(options.value<std::string>("region_name"), options.value<std::string>("variable_name"))->uri());
}
コード例 #6
0
ファイル: LSSAction.cpp プロジェクト: SimonMarie/coolfluid3
void LSSAction::signal_create_lss(SignalArgs& node)
{
  SignalOptions options(node);
  LSS::System& lss = create_lss(options.option("matrix_builder").value<std::string>());

  SignalFrame reply = node.create_reply(uri());
  SignalOptions reply_options(reply);
  reply_options.add("created_component", lss.uri());
}
コード例 #7
0
void NetworkQueue::dispatch_signal( const std::string & target,
                                    const URI & receiver,
                                    SignalArgs &args )
{
  args.options().flush();
  Transaction * transaction = send( args, LOW );

  if( is_not_null(transaction) )
    transaction->from_script = true;
}
コード例 #8
0
ファイル: TreeThread.cpp プロジェクト: BijanZarif/coolfluid3
void TreeThread::new_signal( SignalArgs & args)
{
  const char * tag = Protocol::Tags::node_frame();

  if( args.node.is_valid() )
  {
    SignalFrame real_frame;


    if( args.has_reply() )
      real_frame = args.get_reply();
    else
      real_frame = args;

    std::string type = real_frame.node.attribute_value("target");
    std::string receiver = real_frame.node.attribute_value("receiver");

    try
    {
      Handle< Component > real_root = root();

      if(real_root->uri().path() == URI(receiver).path())
        root()->call_signal(type, real_frame);
      else
        real_root->access_component(receiver)->call_signal(type, real_frame);
    }
    catch(cf3::common::Exception & cfe)
    {
      NLog::global()->add_exception(/*QString("%1 %2").arg(type.c_str()).arg(receiver.c_str()) +  */cfe.what());
    }
    catch(std::exception & stde)
    {
      NLog::global()->add_exception(stde.what());
    }
    catch(...)
    {
      CFerror << "Unknown exception thrown during execution of action [" << type
              << "] on component " << " [" << receiver << "]." << CFendl;
    }

  }
}
コード例 #9
0
ファイル: N3DView.cpp プロジェクト: Ivor23/coolfluid3
void N3DView::launch_pvserver( SignalArgs& node ){
  SignalFrame& options = node.map( Protocol::Tags::key_options() );

  std::vector<std::string> data = options.get_array<std::string>("infoServer");

  std::string host = data[0];
  std::string port = data[1];

  TabBuilder::instance()->getWidget<Widget3D>(as_ptr<CNode>())
      ->connectToServer(host.c_str(), port.c_str());

}
コード例 #10
0
ファイル: Link.cpp プロジェクト: BijanZarif/coolfluid3
void Link::change_link( SignalArgs & args )
{
  SignalOptions options( args );
  SignalFrame reply = args.create_reply();

  std::string path = options.value<std::string>("target_path");
  Handle<Component> target = access_component(path);

  link_to (*target);

  reply.map("options").set_option("target_path", class_name<std::string>(), path);
}
コード例 #11
0
ファイル: CLink.cpp プロジェクト: andrealani/coolfluid3
void CLink::change_link( SignalArgs & args )
{
  SignalOptions options( args );
  SignalFrame reply = args.create_reply();

  std::string path = options.value<std::string>("target_path");
  Component::Ptr target = m_root.lock()->access_component_ptr(path);

  link_to (target);

  reply.map("options").set_option("target_path", path);
}
コード例 #12
0
void SignalManager::signalSignature(SignalArgs & args)
{
  if(m_waitingForSignature)
  {
    URI path = m_node->realComponent()->uri();
    ActionInfo & info = m_signals[m_currentAction];
    const char * tag = Protocol::Tags::key_options();

    m_frame = SignalFrame(info.name.toStdString(), path, path);
    SignalFrame& options = m_frame.map( Protocol::Tags::key_options() );

    if( args.has_map(tag) )
      args.map(tag).main_map.content.deep_copy( options.main_map.content );

    try
    {
      SignatureDialog * sg = new SignatureDialog();

      connect(sg, SIGNAL(finished(int)), this, SLOT(dialogFinished(int)));

      sg->show(options.main_map.content, m_currentAction->text());
    }
    catch( Exception & e)
    {
      NLog::globalLog()->addException(e.what());
    }
    catch( ... )
    {
      NLog::globalLog()->addException("Unknown exception caught");
    }



    m_waitingForSignature = false;
  }

}
コード例 #13
0
void InitialConditions::signal_create_initial_condition(SignalArgs& args)
{
  SignalOptions options(args);
  Handle<common::Action> ic;
  if(options.check("builder_name"))
  {
    ic = create_initial_condition(options["field_tag"].value<std::string>(), options["builder_name"].value<std::string>());
  }
  else
  {
    ic = create_initial_condition(options["field_tag"].value<std::string>());
  }

  SignalFrame reply = args.create_reply(uri());
  SignalOptions reply_options(reply);
  reply_options.add("created_component", ic->uri());
}
コード例 #14
0
ファイル: N3DView.cpp プロジェクト: Ivor23/coolfluid3
void N3DView::send_server_info_to_client( SignalArgs& node ){
  SignalFrame& options = node.map( Protocol::Tags::key_options() );

  std::vector<std::string> data = options.get_array<std::string>("pathinfo");

  std::string path = data[0];
  std::string name = data[1];

  std::vector<QString> path_list(1);
  path_list[0] = QString(path.c_str());

  std::vector<QString> name_list(1);
  name_list[0] = QString(name.c_str());

  TabBuilder::instance()->getWidget<Widget3D>(as_ptr<CNode>())
      ->loadPaths(path_list, name_list);

}
コード例 #15
0
void RemoteDispatcher::send_next_signal( SignalArgs & args )
{
  if( m_running )
  {
    SignalOptions & options = args.options();
    std::string frameid = options.value<std::string>( "frameid" );

    if( m_currentFrameId == frameid )
    {
      if ( m_nextIndex <= m_pendingSignals.count() )
      {
        bool success = options.value<bool>( "success" );

        if( !success )
        {
          std::string message = options.value<std::string>( "message" );
          QString msg("Error while running the script. The following error occured : %1"
                      "\n When executing the signal \n%2");

          std::string str;
          to_string( m_pendingSignals[m_nextIndex-1].node, str );

          NLog::global()->add_exception( msg.arg(message.c_str()).arg(str.c_str()) );

          m_running = false;
          emit finished();
        }
        else
        {
          NLog::global()->add_message( QString("Frame %1 was ack'ed").arg(frameid.c_str()) );
          send_signal( m_nextIndex );
          m_nextIndex++;
        }
      }
      else
      {
        m_running = false;
        //      m_connectionManager->manage_connection("ack")->disconnect();
        NLog::global()->add_message("Script is finished");
        emit finished();
      }
    }
  }
}
コード例 #16
0
ファイル: NPlotXY.cpp プロジェクト: xyuan/coolfluid3
void NPlotXY::convergence_history ( SignalArgs& node )
{
  SignalFrame& options = node.map( Protocol::Tags::key_options() );

  PlotDataPtr array( new PlotData() );
  std::vector<std::string> labels;

  get_multi_array(options.main_map, "Table", *array, labels);

  int nbRows = array->size();
  int nbCols = (*array)[0].size();
  std::vector<QString> fct_label(labels.size() + 1);

  fct_label[0] = "#";

  for(int i = 0 ; i < labels.size() ; ++i)
    fct_label[i+1] = labels[i].c_str();


  // Store last dimension, then first, then middle
  PlotData::size_type ordering[] = {0, 1};
  // Store the first dimension(dimension 0) in descending order
  bool ascending[] = {true, true};

  PlotDataPtr plot( new PlotData(boost::extents[nbRows][nbCols+1],
                  boost::general_storage_order<2>(ordering, ascending)) );

  for(PlotData::index row = 0;row<nbRows;++row)
  {
    (*plot)[row][0] = row;
  }

  for(PlotData::index row = 0; row != nbRows; ++row)
  {
    for(PlotData::index col = 0; col != nbCols; ++col)
      (*plot)[row][col+1] = (*array)[row][col];
  }

  TabBuilder::instance()->widget<Graph>(handle<CNode>())->set_xy_data(plot, fct_label);
}
コード例 #17
0
void InitialConditions::signal_create_initial_condition ( SignalArgs& args )
{
  SignalOptions options( args );

  std::string name = options.value<std::string>("name");

  std::vector<URI> regions;
  if( options.check("regions") )
  {
    regions = options.array<URI>("regions");
  }
  else // if user did not specify, then use the whole topology (all regions)
  {
    regions = solver().options().option("regions").value< std::vector<common::URI> >();
  }

  solver::Action& created_component = create_initial_condition(name,regions);

  SignalFrame reply = args.create_reply(uri());
  SignalOptions reply_options(reply);
  reply_options.add_option("created_component", created_component.uri());
}
コード例 #18
0
void TCPConnection::prepare_write_buffers( SignalArgs & args,
                                           std::vector<asio::const_buffer> & buffers )
{
  cf3_assert( args.node.is_valid() );

  // prepare the outgoing data: flush to XML and convert to string
  args.flush_maps();
  XML::to_string( *args.xml_doc.get(), m_outgoing_data );

  // create the header on HEADER_LENGTH characters
  std::ostringstream header_stream;

  header_stream << std::setw(HEADER_LENGTH) << m_outgoing_data.length();

  m_outgoing_header = header_stream.str();

  // write header and data to buffers and then on the socket
  buffers.push_back( asio::buffer(m_outgoing_header) );
  buffers.push_back( asio::buffer(m_outgoing_data) );

//  std::cout << "[" << m_outgoing_header << "]" << std::endl;
//  std::cout << m_outgoing_data.size() << " => " << m_outgoing_data << std::endl;
}
コード例 #19
0
ファイル: ShockTube.cpp プロジェクト: andrealani/coolfluid3
void ShockTube::signal_create_model ( SignalArgs& args )
{
  SignalFrame& p = args.map( Protocol::Tags::key_options() );

  ////////////////////////////////////////////////////////////////////////////////
  // Create Model
  ////////////////////////////////////////////////////////////////////////////////

  std::string name  = p.get_option<std::string>("model_name");
  CFinfo << "Creating model " << name << CFendl;
  CModelUnsteady& model = *Common::Core::instance().root().create_component_ptr<CModelUnsteady>( name );

  ////////////////////////////////////////////////////////////////////////////////
  // Create Physics
  ////////////////////////////////////////////////////////////////////////////////

  CFinfo << "Creating physics" << CFendl;
  Physics::PhysModel& physics = model.create_physics("physics");
  physics.configure_option( "Dimensions", p.get_option<Uint>("dimension") );

  ////////////////////////////////////////////////////////////////////////////////
  // Create tools
  ////////////////////////////////////////////////////////////////////////////////

  CMeshTransformer& finite_volume_transformer = model.tools().create_component<CMeshTransformer>("FiniteVolumeTransformer");
  finite_volume_transformer.create_component_ptr<CBuildFaces>     ("1_build_faces")->mark_basic();
  finite_volume_transformer.create_component_ptr<BuildGhostStates>("2_build_ghoststates")->mark_basic();
  finite_volume_transformer.create_component_ptr<CreateSpaceP0>   ("3_create_space_P0")->mark_basic();
  finite_volume_transformer.create_component_ptr<CBuildVolume>    ("4_build_volume_field")->mark_basic();

  ////////////////////////////////////////////////////////////////////////////////
  // Generate mesh
  ////////////////////////////////////////////////////////////////////////////////

  CFinfo << "Creating domain" << CFendl;
  CDomain& domain = model.create_domain("domain");
  CMesh::Ptr mesh_ptr;
  CFinfo << "  Generating mesh with " << p.get_option<Uint>("nb_cells") << " cells per dimension" <<CFendl;
  switch (p.get_option<Uint>("dimension"))
  {
    case 1:
      mesh_ptr = domain.create_component_ptr<CMesh>("line");
      CSimpleMeshGenerator::create_line(*mesh_ptr, 10. , p.get_option<Uint>("nb_cells"));
      break;
    case 2:
      mesh_ptr = domain.create_component_ptr<CMesh>("square");
      CSimpleMeshGenerator::create_rectangle(*mesh_ptr, 10. , 10. , p.get_option<Uint>("nb_cells"),  p.get_option<Uint>("nb_cells"));
      break;
    default:
      throw NotSupported(FromHere(),"Only 1D or 2D dimension supported");
  }
  CMesh& mesh = *mesh_ptr;
  CFinfo << "  Transforming mesh for finite volume: " << finite_volume_transformer.tree();
  finite_volume_transformer.transform(mesh);

  ////////////////////////////////////////////////////////////////////////////////
  // Create Solver / Discretization
  ////////////////////////////////////////////////////////////////////////////////

  CFinfo << "Creating FiniteVolumeSolver" << CFendl;
  FiniteVolumeSolver& solver = model.create_solver("CF.FVM.Core.FiniteVolumeSolver").as_type<FiniteVolumeSolver>();
  solver.configure_option("physical_model",physics.uri());
  solver.configure_option("domain",domain.uri());
  solver.configure_option_recursively("ctime",model.as_type<CModelUnsteady>().time().uri());
  solver.configure_option_recursively("time_accurate",true);

  ////////////////////////////////////////////////////////////////////////////////
  // Initial condition
  ////////////////////////////////////////////////////////////////////////////////

  CFinfo << "Setting initial condition" << CFendl;
  CInitFieldFunction& init_solution = model.tools().create_component<CInitFieldFunction>("init_solution");
  init_solution.configure_option("field",find_component_with_tag(mesh,"solution").uri());

  const Real r_L = 4.696;             const Real r_R = 1.408;
  const Real p_L = 404400;            const Real p_R = 101100;
  const Real u_L = 0.;                const Real u_R = 0.;
  const Real v_L = 0.;                const Real v_R = 0.;
  const Real g=1.4;

  if (physics.ndim() == 1)
  {
    RealVector3 left, right;
    left  << r_L , r_L*u_L , p_L/(g-1) + 0.5*r_L*u_L*u_L;
    right << r_R , r_R*u_R , p_R/(g-1) + 0.5*r_R*u_R*u_R;
    std::vector<std::string> function(3);
    for (Uint i=0; i<function.size(); ++i)
      function[i]="if(x<=5,"+to_str(left[i])+","+to_str(right[i])+")";
    init_solution.configure_option("functions",function);
  }
  else if (physics.ndim() == 2)
  {
    RealVector4 left, right;
    left  << r_L , r_L*u_L , r_L*v_L, p_L/(g-1) + 0.5*r_L*(u_L*u_L+v_L*v_L);
    right << r_R , r_R*u_R , r_R*v_R, p_R/(g-1) + 0.5*r_R*(u_R*u_R+v_R*v_R);
    std::vector<std::string> function(4);
    for (Uint i=0; i<function.size(); ++i)
      function[i]="if(x<=5&y<=5,"+to_str(left[i])+","+to_str(right[i])+")";
    init_solution.configure_option("functions",function);
  }
  else
    throw NotSupported (FromHere(), "more than 2 dimensions not supported");

  init_solution.transform(mesh);

  ////////////////////////////////////////////////////////////////////////////////
  // Boundary conditions
  ////////////////////////////////////////////////////////////////////////////////

  CFinfo << "Setting Reflective Boundary conditions" << CFendl;
  if (physics.ndim() == 1)
  {
    solver.create_bc("inlet",   find_component_recursively_with_name<CRegion>(mesh.topology(),"xneg"),   "CF.FVM.Core.BCReflectCons1D");
    solver.create_bc("outlet",   find_component_recursively_with_name<CRegion>(mesh.topology(),"xpos"),   "CF.FVM.Core.BCReflectCons1D");
  }
  else if (physics.ndim() == 2)
  {
    solver.create_bc("top",   find_component_recursively_with_name<CRegion>(mesh.topology(),"top"),   "CF.FVM.Core.BCReflectCons2D");
    solver.create_bc("bottom",find_component_recursively_with_name<CRegion>(mesh.topology(),"bottom"),"CF.FVM.Core.BCReflectCons2D");
    solver.create_bc("left",  find_component_recursively_with_name<CRegion>(mesh.topology(),"left"),  "CF.FVM.Core.BCReflectCons2D");
    solver.create_bc("right", find_component_recursively_with_name<CRegion>(mesh.topology(),"right"), "CF.FVM.Core.BCReflectCons2D");
  }
  else
    throw NotSupported (FromHere(), "more than 2 dimensions not supported");

  ////////////////////////////////////////////////////////////////////////////////
  // Writer
  ////////////////////////////////////////////////////////////////////////////////

  CMeshWriter::Ptr writer = build_component_abstract_type<CMeshWriter>("CF.Mesh.Gmsh.CWriter","mesh_writer");
  model.tools().add_component(writer);
  writer->configure_option("fields",std::vector<URI>(1,find_component_with_tag(mesh,"solution").uri()));
  writer->configure_option("file",URI(model.name()+".msh"));
  writer->configure_option("mesh",mesh.uri());

}
コード例 #20
0
ファイル: CJournal.cpp プロジェクト: Ivor23/coolfluid3
void CJournal::list_journal ( SignalArgs & args )
{
  SignalFrame reply = args.create_reply( uri() );

  copy_node(m_signals_map.content, reply.main_map.content);
}