質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

オープンソースのC++のファイルを使いたい

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 409

Tubasa1995

score 47

問題

オープンソースのC++のファイルを使いたいのですが,よく分かりません.
ネットで見つけたオープンソースのC++のコードがあるのですが,今までほとんどプログラムを触ったことがなくどうすれば良いのかわかりません.
ここからダウンロードしました. http://www.sandia.gov/UQToolkit

ソースコード

/// \file generate_quad.cpp 
/// \author K. Sargsyan 2013 - 
/// \brief Command-line utility to generate quadrature points

#include <unistd.h>
#include "quad.h"
#include "tools.h"
#include "arrayio.h"

using namespace std;

/// default value of parameter (level for sparse quadrature, or number of grid points for full quadrature)
#define PARAM 3            
/// default data dimensionality
#define DIM 2             
/// default sparseness type (full or sparse)
#define FSTYPE "sparse"  
/// default quadrature type
#define QUADTYPE "CC"    
/// default alpha parameter for chaos
#define ALPHA 0.0      
/// default beta parameter for chaos  
#define BETA 1.0       
/// default domain file
#define DOMAIN_FILE "param_domain.dat" 
/// default verbosity
#define VERBOSITY 1

/******************************************************************************/
/// \brief Displays information about this program
int usage(){
  printf("usage: generate_quad [-h] [-r] [-d<ndim>] [-g<quadType>] [-x<fsType>] [-p<param>] [-a<alpha>] [-b<beta>] [-s<domain_file>] [-v <verb>]\n");
  printf(" -h                 : print out this help message \n");
  printf(" -r                 :  use if building the next quadrature level on top of existing rule\n");
  printf(" -d <ndim>          : define the data dimensionality (default=%d) \n",DIM);
  printf(" -g <quadType>      : define the quad type, implemented 'CC','CCO','NC','NCO','LU','HG','JB','GLG','SW','pdf'.  (default=%s) \n",QUADTYPE);
  printf(" -x <fsType>        : define 'full' or 'sparse'  (default=%s) \n",FSTYPE);
  printf(" -p <param>         : define the level or nquad parameter(default=%d) \n",PARAM);
  printf(" -a <alpha>         : define the alpha parameter of the quadrature (default=%lg) \n",ALPHA);
  printf(" -b <beta>          : define the beta parameter of the quadrature (default=%lg) \n",BETA);
  printf(" -s <domain_file>   : define the domain file for compact-support quadratures (default=%s) \n",DOMAIN_FILE);    
  printf(" -v <verb>          : define verbosity 0-no output/1-output info (default=%d) \n",VERBOSITY);
  printf("================================================================================\n");
  printf("Input  :  If -r flagged, files qdpts.dat, wghts.dat, indices.dat required as quadrature will be built on top of them\n");
  printf("Output : qdpts.dat, wghts.dat, indices.dat - quadrature points, weights, and indices w.r.t. default quadrature domain\n");
  printf("         xqdpts.dat, xwghts.dat            - quadrature points and weights w.r.t. given physical domain for compact domains,\n");
  printf("                                             if the domain is given by -s\n");
  printf("         *_new.dat                         - newly generated points/weights; if -r is not flagged these are the same as all points/wghts)\n");
  printf("--------------------------------------------------------------------------------\n");
  printf("Comments: -r flag may be activated only after a run with the SAME parameters, otherwise incremental addition does not make sense!\n");
  printf("================================================================================\n");
  exit(0);
  return 0;
}
/******************************************************************************/



///  Main program: Generates various kinds of quadrature points and weights
int main (int argc, char *argv[]) 
{
  /// Set the default values
  int    verb     = VERBOSITY ;
  int    ndim     = DIM ;
  char*  quadType = (char *) QUADTYPE;
  char*  fsType   = (char *) FSTYPE ; 
  int    param    = PARAM ;
  double alpha    = ALPHA;
  double beta     = BETA;
  char*  domain_file = (char *) DOMAIN_FILE; 

  /// Read the user input
  int c;

  bool rflag=false;
  bool aflag=false;
  bool bflag=false;
  bool sflag=false;

  while ((c=getopt(argc,(char **)argv,"hrd:g:x:p:a:b:s:v:"))!=-1){
    switch (c) {
    case 'h':
      usage();
      break;
    case 'r':
      rflag=true;
      break;
    case 'd':
      ndim = strtol(optarg, (char **)NULL,0);    
      break;
    case 'g':
      quadType = optarg;
      break;
    case 'x':
      fsType = optarg;
      break;
    case 'p':
      param = strtol(optarg, (char **)NULL,0);    
      break;
    case 'a':
      aflag=true;
      alpha = strtod(optarg, (char **)NULL);    
      break;
    case 'b':
      bflag=true;
      beta = strtod(optarg, (char **)NULL);    
      break;
    case 's':
      sflag=true;
      domain_file = optarg;
      break;
    case 'v':
      verb =  strtol(optarg, (char **)NULL,0);
      break;
    default :
      break;
    }
  }

  /// Print the input information on screen 
  if ( verb > 0 ) {
    fprintf(stdout,"generate_quad() : parameters ================================= \n");
    fprintf(stdout," ndim     = %d \n",ndim);
    fprintf(stdout," quadType = %s \n",quadType);   
    fprintf(stdout," fsType   = %s \n",fsType);  
    fprintf(stdout," param    = %d \n",param);
    if (aflag)
      fprintf(stdout," alpha    = %lg \n",alpha);
    if (bflag)
      fprintf(stdout," beta     = %lg \n",beta);
    if (rflag)
      fprintf(stdout,"generate_quad() : building on top of existing quad points\n");
    if (sflag)
      fprintf(stdout,"generate_quad() : domain file %s is provided\n",domain_file);
  }
  /*----------------------------------------------------------------------------*/ 

  /// Parameter sanity checks
  if (rflag && string(fsType)=="full")
      throw Tantrum("Incremental addition makes sense only in the sparse mode!");
  if (sflag && string(quadType)!="CC" 
            && string(quadType)!="CCO" 
            && string(quadType)!="NC" 
            && string(quadType)!="NCO" 
            && string(quadType)!="LU" 
            && string(quadType)!="JB") 
      throw Tantrum("Input domain should be provided only for compact-support quadratures!");


  /// Declare the quadrature rule object
  Array1D<string> quadtypes(ndim,string(quadType));

  Array1D<double> alphas(ndim,alpha);
  Array1D<double> betas(ndim,beta);
  Array1D<int> params(ndim,param);

  Quad spRule(quadtypes,fsType,params,alphas, betas);
  spRule.SetVerbosity(verb);

  // Declare arrays
  Array1D<int> newPtInd;
  Array2D<double> qdpts;
  Array1D<double> wghts;

  spRule.SetRule();

  // DEBUG
  //Array1D<int> ind;
  //spRule.compressRule(ind); 

  /// Extract the properties of the rule
  spRule.GetRule(qdpts,wghts);
  int nQdpts=qdpts.XSize();


  /// Write-out to files
  write_datafile(qdpts,"qdpts.dat");
  write_datafile_1d(wghts,"wghts.dat");

  /// Scale if domain is provided
  if (sflag){
    /// Set the domain
    Array1D<double> aa(ndim,-1.e0);
    Array1D<double> bb(ndim,1.e0);
    Array2D<double> aabb(ndim,2,0.e0);

    if(ifstream(domain_file)){
      read_datafile(aabb,domain_file);
      for (int i=0;i<ndim;i++){
        aa(i)=aabb(i,0);
        bb(i)=aabb(i,1);
      }
    }

    Array2D<double> xqdpts(nQdpts,ndim);
    //   Array2D<double> xqdpts_new(nNewQdpts,ndim);
    Array1D<double> xwghts(nQdpts);
    //    Array1D<double> xwghts_new(nNewQdpts);

    // Scale points according to the given domain
    for(int it=0;it<nQdpts;it++){
      double prod=1.;
      for(int id=0;id<ndim;id++){
        xqdpts(it,id)=(bb(id)+aa(id))/2.+qdpts(it,id)*(bb(id)-aa(id))/2.;
        prod*= ( (bb(id)-aa(id))/2. );
      }
      xwghts(it)=wghts(it)*prod;
    }

    // /// Scale weights according to the given domain
    // for(int iq=0;iq<nNewQdpts;iq++){
    //   double prod=1.;
    //   for(int id=0;id<ndim;id++){
    //     xqdpts_new(iq,id)=(bb(id)+aa(id))/2.+qdpts_new(iq,id)*(bb(id)-aa(id))/2.;
    //     prod*= ( (bb(id)-aa(id))/2. );
    //   }
    //   xwghts_new(iq)=wghts_new(iq)*prod;
    // }

    /// Write-out to files
    write_datafile(xqdpts,"xqdpts.dat");
    write_datafile_1d(xwghts,"xwghts.dat");
    // write_datafile(xqdpts_new,"xqdpts_new.dat");
    // write_datafile_1d(xwghts_new,"xwghts_new.dat");

  }

  if ( verb > 0 ) {
    //fprintf(stdout,"generate_quad() : generated %d new quadrature points\n",nNewQdpts);
    fprintf(stdout,"generate_quad() : total number of quadrature points: %d\n",nQdpts);
    fprintf(stdout,"generate_quad() : done ========================================\n");
  }

  return 0;
}

エラーの表示

LNK2019    未解決の外部シンボル _main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました。    

LNK1120    1 件の未解決の外部参照

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • tiitoi

    2018/11/07 20:48

    説明不足ですいません。コードを囲うというのはそういう意味ではなく、markdown 記法でコードをマークアップしてくださいということです。https://qiita.com/Qiita/items/c686397e4a0f4f11683d#code---%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E6%8C%BF%E5%85%A5 を参考にしてください。

    キャンセル

  • kazto

    2018/11/07 21:54

    コンパイルした際のコマンドラインを追記お願いします。

    キャンセル

  • Tubasa1995

    2018/11/07 23:25

    すいません。C++について素人なのですが、Visual Studioを使って、リビルドしてデバックなしで実行をしただけなんです。

    キャンセル

回答 2

checkベストアンサー

+1

#include <unistd.h>

どうもVisual Studioをお使いのようですが、これを見る限りlink以前にコンパイルが通っていないと思うのですが・・・。

ちなみにVisual Studio付属の環境でunistd.hを使うのは困難かなと思われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

ソフトウェアがどのライセンスに基づいて公開されているのかを探してライセンス条項を確認してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る