예제 #1
0
파일: polyobj.c 프로젝트: paud/d2x-xl
void _CDECL_ free_polygon_models (void)
{
    int i;

    LogErr ("unloading poly models\n");
    for (i = 0; i < gameData.models.nPolyModels; i++) {
        FreeModel (gameData.models.polyModels + i);
        FreeModel (gameData.models.defPolyModels + i);
    }
}
예제 #2
0
/*** Liberación de recursos ***/
void Free( void )
{
    
    
    //Espada
    FreeModel( &modeloEspada );

    
    //HUD
    glDeleteTextures( 1, &mapTex );
    glDeleteTextures( 1, &dotTex );
    glDeleteTextures( 1, &UnderwaterTex );
    glDeleteTextures(1, &water);
    glDeleteTextures(1, &hudNull);
    glDeleteTextures(1, &oxBar);
    
    //Terreno
    FreeTerrain(&terrain);

    
    //Agua
   // FreeTerrain(&agua);

    
    //Skybox
    FreeSkybox(&skybox);
    
    // Último
    FreeOpenAL();
    FreeOpenGL();
    
}
void IFaceposerModels::CloseAllModels( void )
{
	int c = Count();
	for ( int i = c - 1; i >= 0; i-- )
	{
		FreeModel( i );
	}
}
XLMachineLearningLibliear::~XLMachineLearningLibliear()
{
	for(std::vector<XLMachineLearningLibliear::feature*>::const_iterator it = ProblemX.begin() ; it != ProblemX.end() ; ++it )
	{
		delete [] *it;
	}
	FreeModel();
}
예제 #5
0
md2model::~md2model()
{
	FreeModel();
	int i;
	for (i=0;i<mdl.header.num_frames;++i) {
		delete [] vertData[i];
	}
	delete [] animVerts;
}
예제 #6
0
파일: obj.c 프로젝트: echo0101/Island
/**
 * Load an OBJ model from file, in two passes.
 */
int
ReadOBJModel (const char *filename, struct obj_model_t *mdl)
{
  FILE *fp;

  fp = fopen (filename, "r");
  if (!fp)
    {
      fprintf (stderr, "Error: couldn't open \"%s\"!\n", filename);
      return 0;
    }

  /* reset model data */
  memset (mdl, 0, sizeof (struct obj_model_t));

  /* first pass: read model info */
  if (!FirstPass (fp, mdl))
    {
      fclose (fp);
      return 0;
    }

  rewind (fp);

  /* memory allocation */
  if (!MallocModel (mdl))
    {
      fclose (fp);
      FreeModel (mdl);
      return 0;
    }

  /* second pass: read model data */
  if (!SecondPass (fp, mdl))
    {
      fclose (fp);
      FreeModel (mdl);
      return 0;
    }

  fclose (fp);
  return 1;
}
예제 #7
0
/*
================
idCollisionModelManagerLocal::WriteCollisionModelForMapEntity
================
*/
bool idCollisionModelManagerLocal::WriteCollisionModelForMapEntity( const idMapEntity *mapEnt, const char *filename, const bool testTraceModel )
{
	idFile		*fp;
	idStr		name;
	cm_model_t *model;
	
	SetupHash();
	model = CollisionModelForMapEntity( mapEnt );
	model->name = filename;
	
	name = filename;
	name.SetFileExtension( CM_FILE_EXT );
	
	common->Printf( "writing %s\n", name.c_str() );
	fp = fileSystem->OpenFileWrite( name, "fs_devpath" );
	
	if( !fp )
	{
		common->Printf( "idCollisionModelManagerLocal::WriteCollisionModelForMapEntity: Error opening file %s\n", name.c_str() );
		FreeModel( model );
		return false;
	}
	
	// write file id and version
	fp->WriteFloatString( "%s \"%s\"\n\n", CM_FILEID, CM_FILEVERSION );
	
	// write the map file crc
	fp->WriteFloatString( "%u\n\n", 0 );
	
	// write the collision model
	WriteCollisionModel( fp, model );
	
	fileSystem->CloseFile( fp );
	
	if( testTraceModel )
	{
		idTraceModel trm;
		TrmFromModel( model, trm );
	}
	FreeModel( model );
	
	return true;
}
예제 #8
0
/**
 * Load an OBJ model from file, in two passes.
 */
int  LoadOBJ::ReadOBJModel (const char *filename)
{
	FILE *fp;
	
	fp = fopen (filename, "r");
	if (!fp)
    {
		fprintf (stderr, "Error: couldn't open \"%s\"!\n", filename);
		return 0;
    }
    //std::cout << "premem" << std::endl;
	/* reset model data */
	memset (&mdl, 0, sizeof (struct obj_model_t));
    //std::cout << "memorioainitializado" << std::endl;
	/* first pass: read model info */
	if (!FirstPass (fp))
    {
		fclose (fp);
		return 0;
    }
	
	rewind (fp);
	
	/* memory allocation */
	if (!MallocModel ())
    {
		fclose (fp);
		FreeModel ();
		return 0;
    }
	
	/* second pass: read model data */
	if (!SecondPass (fp))
    {
		fclose (fp);
		FreeModel ();
		return 0;
    }
	
	fclose (fp);
	return 1;
}
예제 #9
0
    REPEAT(MAX_MODELS, i)
    {
        Model* model = &world->models[i];
        if(model->active)
        {
            Error("Model #%d (%p) was still active when the world was destroyed.",
                  i, model);
            FreeModel(model);
        }

        FreeShaderVariableSet(world->drawEntries[i].generatedVariableSet);
    }
/*
================
idCollisionModelManagerLocal::GenerateCollisionMapForModel
================
*/
void idCollisionModelManagerLocal::GenerateCollisionMapForModel( const char *filename ) {
	idFile *fp;
	idStr name;
	cm_model_t *model;

	SetupHash();
	model = LoadRenderModel( filename );
	if(!model) {
		common->Warning("GenerateCollisionMapForModel: failed to generate CM for %s\n", filename);
		return;
	}
	model->name = filename;

	name = filename;
	name.SetFileExtension( CM_FILE_EXT );

	common->Printf( "writing %s\n", name.c_str() );
	fp = fileSystem->OpenFileWrite( name, "fs_devpath" );
	if ( !fp ) {
		common->Printf( "idCollisionModelManagerLocal::WriteCollisionModelForMapEntity: Error opening file %s\n", name.c_str() );
		FreeModel( model );
		return;
	}

	// write file id and version
	fp->WriteFloatString( "%s \"%s\"\n\n", CM_FILEID, CM_FILEVERSION );
	// write the map file crc
	fp->WriteFloatString( "%u\n\n", 0 );

	// write the collision model
	WriteCollisionModel( fp, model );

	fileSystem->CloseFile( fp );

	FreeModel( model );

	
}
//学習します。
bool XLMachineLearningLibliear::Train()
{
	int maxindex = 0;
	for(std::vector<feature*>::const_iterator it = ProblemX.begin() ; it != ProblemX.end() ; ++it )
	{
		for(feature* nodes = *it; nodes->index != -1 ; ++nodes )
		{
			maxindex = max(nodes->index,maxindex);
		}
	}

	struct problem prob;
	prob.bias = -1;				//バイアス?初期化するときの引数で与えるらしいが・・・
	prob.l = ProblemY.size();	//行数
	prob.n = maxindex;	//一番でかい素性番号
	prob.y = &ProblemY[0];
	prob.x = (::feature_node**) ((feature*) &ProblemX[0]);

	struct parameter param;
	param.solver_type = L2R_L2LOSS_SVC_DUAL;
	param.C = 1;
	param.nr_weight = 0;
	param.weight_label = NULL;
	param.weight = NULL;

	{
		if(param.solver_type == L2R_LR || param.solver_type == L2R_L2LOSS_SVC)
			param.eps = 0.01;
		else if(param.solver_type == L2R_L2LOSS_SVC_DUAL || param.solver_type == L2R_L1LOSS_SVC_DUAL || param.solver_type == MCSVM_CS || param.solver_type == L2R_LR_DUAL)
			param.eps = 0.1;
		else if(param.solver_type == L1R_L2LOSS_SVC || param.solver_type == L1R_LR)
			param.eps = 0.01;
	}

	FreeModel();
	this->Model = train(&prob,&param);
	return this->Model != NULL;
}
예제 #12
0
void
cleanup (obj_model_t objfile)
{
  FreeModel (&objfile);
}
bool XLMachineLearningLibliear::LoadModel(const std::string& filename)
{
	FreeModel();
	this->Model = load_model(filename.c_str());
	return true;
}
예제 #14
0
파일: cp-offline.cpp 프로젝트: fated/libcp
int main(int argc, char *argv[]) {
  char train_file_name[256];
  char test_file_name[256];
  char output_file_name[256];
  char model_file_name[256];
  struct Problem *train, *test;
  struct Model *model;
  int num_correct = 0, num_empty = 0, num_multi = 0, num_incl = 0;
  double avg_conf = 0, avg_cred = 0;
  const char *error_message;

  ParseCommandLine(argc, argv, train_file_name, test_file_name, output_file_name, model_file_name);
  error_message = CheckParameter(&param);

  if (error_message != NULL) {
    std::cerr << error_message << std::endl;
    exit(EXIT_FAILURE);
  }

  train = ReadProblem(train_file_name);
  test = ReadProblem(test_file_name);

  std::ofstream output_file(output_file_name);
  if (!output_file.is_open()) {
    std::cerr << "Unable to open output file: " << output_file_name << std::endl;
    exit(EXIT_FAILURE);
  }

  std::chrono::time_point<std::chrono::steady_clock> start_time = std::chrono::high_resolution_clock::now();

  if (param.load_model == 1) {
    model = LoadModel(model_file_name);
    if (model == NULL) {
      exit(EXIT_FAILURE);
    }
  } else {
    model = TrainCP(train, &param);
  }

  if (param.save_model == 1) {
    if (SaveModel(model_file_name, model) != 0) {
      std::cerr << "Unable to save model file" << std::endl;
    }
  }

  for (int i = 0; i < test->num_ex; ++i) {
    double conf, cred;
    std::vector<int> predict_label;

    predict_label = PredictCP(train, model, test->x[i], conf, cred);

    avg_conf += conf;
    avg_cred += cred;

    output_file << std::resetiosflags(std::ios::fixed) << test->y[i] << ' ' << predict_label[0] << ' '
                << std::setiosflags(std::ios::fixed) << conf << ' ' << cred;
    if (predict_label[0] == test->y[i]) {
      ++num_correct;
    }

    if (predict_label.size() == 1) {
      ++num_empty;
      output_file << " Empty\n";
    } else {
      output_file << " set:";
      for (size_t j = 1; j < predict_label.size(); ++j) {
        output_file << ' ' << predict_label[j];
        if (predict_label[j] == test->y[i]) {
          ++num_incl;
        }
      }
      if (predict_label.size() > 2) {
        ++num_multi;
        output_file << " Multi\n";
      } else {
        output_file << " Single\n";
      }
    }
    std::vector<int>().swap(predict_label);
  }
  avg_conf /= test->num_ex;
  avg_cred /= test->num_ex;

  std::chrono::time_point<std::chrono::steady_clock> end_time = std::chrono::high_resolution_clock::now();

  std::cout << "Simple Accuracy: " << 100.0*num_correct/test->num_ex << '%'
            << " (" << num_correct << '/' << test->num_ex << ") "
            << "Mean Confidence: " << std::fixed << std::setprecision(4) << 100*avg_conf << "%, "
            << "Mean Credibility: " << 100*avg_cred << "%\n";
  std::cout << "Accuracy: " << 100.0*num_incl/test->num_ex << '%'
            << " (" << num_incl << '/' << test->num_ex << ") "
            << "Multi Prediction: " << std::fixed << std::setprecision(4) << 100.0*num_multi/test->num_ex << "%, "
            << "Empty Prediction: " << 100.0*num_empty/test->num_ex << "%\n";
  output_file.close();

  std::cout << "Time cost: " << std::chrono::duration_cast<std::chrono::milliseconds>(end_time - start_time).count()/1000.0 << " s\n";

  FreeProblem(train);
  FreeProblem(test);
  FreeModel(model);
  FreeParam(&param);

  return 0;
}
bool StudioModel::PostLoadModel( char *modelname )
{
	// preload textures
	if (m_pstudiohdr->numtextures == 0)
	{
		char texturename[256];

		strcpy( texturename, modelname );
		strcpy( &texturename[strlen(texturename) - 4], "T.mdl" );

		m_ptexturehdr = LoadModel( texturename );
		if (!m_ptexturehdr)
		{
			FreeModel ();
			return false;
		}
		m_owntexmodel = true;
	}
	else
	{
		m_ptexturehdr = m_pstudiohdr;
		m_owntexmodel = false;
	}

	// preload animations
	if (m_pstudiohdr->numseqgroups > 1)
	{
		for (int i = 1; i < m_pstudiohdr->numseqgroups; i++)
		{
			char seqgroupname[256];

			strcpy( seqgroupname, modelname );
			sprintf( &seqgroupname[strlen(seqgroupname) - 4], "%02d.mdl", i );

			m_panimhdr[i] = LoadModel( seqgroupname );
			if (!m_panimhdr[i])
			{
				FreeModel ();
				return false;
			}
		}
	}

	SetSequence (0);
	SetController (0, 0.0f);
	SetController (1, 0.0f);
	SetController (2, 0.0f);
	SetController (3, 0.0f);
	SetMouth (0.0f);

	int n;
	for (n = 0; n < m_pstudiohdr->numbodyparts; n++)
		SetBodygroup (n, 0);

	SetSkin (0);
/*
	vec3_t mins, maxs;
	ExtractBbox (mins, maxs);
	if (mins[2] < 5.0f)
		m_origin[2] = -mins[2];
*/
	return true;
}
예제 #16
0
파일: Rechenraum.cpp 프로젝트: nixz/covise
int rechenraum::compute(const char *)
{

    coDoPolygons *poly;
    int i;

    char name[256];

//   fprintf(stderr, "rechenraum::compute(const char *) entering... \n");

#ifdef USE_STARTFILE
    char buf[256];
    Covise::getname(buf, startFile->getValue());
//   fprintf(stderr, "rechenraum::param = ReadGeometry(%s) ...", buf);
#endif
    if (model != NULL)
        FreeModel(model);
    model = AllocModel();

#ifdef USE_STARTFILE
    ReadStartfile(buf, model);
#else
    GetParamsFromControlPanel(model);
#endif

    if (!model)
    {
        sendError("Please select a parameter file first!!");
        return FAIL;
    }

    //// Cover plugin information object is created here
    createFeedbackObjects();

    /////////////////////////////
    // create geometry for COVISE
    if ((ci = CreateGeometry4Covise(model)))
    {
        //      fprintf(stderr, "rechenraum::compute(const char *): Geometry created\n");

        poly = new coDoPolygons(surface->getObjName(),
                                ci->p->nump,
                                ci->p->x, ci->p->y, ci->p->z,
                                ci->vx->num, ci->vx->list,
                                ci->pol->num, ci->pol->list);
        poly->addAttribute("MATERIAL", "metal metal.30");
        poly->addAttribute("vertexOrder", "1");
        surface->setCurrentObject(poly);
    }
    else
        fprintf(stderr, "Error in CreateGeometry4Covise (%s, %d)\n", __FILE__, __LINE__);

    //////////////// This creates the volume grid ////////////////////

    ////////////////////////
    // if button is pushed --> create computation grid
    if (p_makeGrid->getValue())
    {
        int size[2];

        if (p_lockmakeGrid->getValue() == 0)
            p_makeGrid->setValue(0); // push off button

        if (model == NULL)
        {
            sendError("Cannot create grid because model is NULL!");
            return (1);
        }
        model->spacing = p_gridSpacing->getValue();
        model->BCFile = p_BCFile->getValue();

        if ((rg = CreateRechGrid(model)) == NULL)
        {
            fprintf(stderr, "Error in CreateRechGrid!\n");
            return -1;
        }

        rg->bc_inval = 100;
        rg->bc_outval = 200;

        //      fprintf(stderr, "rechenraum: Grid created\n");

        coDoUnstructuredGrid *unsGrd = new coDoUnstructuredGrid(grid->getObjName(), // name of USG object
                                                                rg->e->nume, // number of elements
                                                                8 * rg->e->nume, // number of connectivities
                                                                rg->p->nump, // number of coordinates
                                                                1); // does type list exist?

        int *elem, *conn, *type;
        float *xc, *yc, *zc;
        unsGrd->getAddresses(&elem, &conn, &xc, &yc, &zc);
        unsGrd->getTypeList(&type);

        //      printf("nelem  = %d\n", rg->e->nume);
        //      printf("nconn  = %d\n", 8*rg->e->nume);
        //      printf("nccord = %d\n", rg->p->nump);

        int **GgridConn = rg->e->e;
        for (i = 0; i < rg->e->nume; i++)
        {
            *elem = 8 * i;
            elem++;

            *conn = (*GgridConn)[0];
            conn++;
            *conn = (*GgridConn)[1];
            conn++;
            *conn = (*GgridConn)[2];
            conn++;
            *conn = (*GgridConn)[3];
            conn++;
            *conn = (*GgridConn)[4];
            conn++;
            *conn = (*GgridConn)[5];
            conn++;
            *conn = (*GgridConn)[6];
            conn++;
            *conn = (*GgridConn)[7];
            conn++;

            *type = TYPE_HEXAGON;
            type++;

            GgridConn++;
        }

        // copy geometry coordinates to unsgrd
        memcpy(xc, rg->p->x, rg->p->nump * sizeof(float));
        memcpy(yc, rg->p->y, rg->p->nump * sizeof(float));
        memcpy(zc, rg->p->z, rg->p->nump * sizeof(float));

        // no blades
        // no periodic mesh
        // no rotating mesh
        // ...
        unsGrd->addAttribute("number_of_blades", "0");
        unsGrd->addAttribute("periodic", "0");
        unsGrd->addAttribute("rotating", "0");
        unsGrd->addAttribute("revolutions", "0");
        unsGrd->addAttribute("walltext", "");
        unsGrd->addAttribute("periotext", "");

        // set out port
        grid->setCurrentObject(unsGrd);

        // boundary condition lists
        // 1. Cells at walls
        poly = new coDoPolygons(bcwall->getObjName(),
                                rg->p->nump,
                                rg->p->x, rg->p->y, rg->p->z,
                                rg->bcwall->num, rg->bcwall->list,
                                rg->bcwallpol->num, rg->bcwallpol->list);
        //poly->addAttribute("MATERIAL","metal metal.30");
        poly->addAttribute("vertexOrder", "1");
        bcwall->setCurrentObject(poly);

        // 2. Cells at outlet
        poly = new coDoPolygons(bcout->getObjName(),
                                rg->p->nump,
                                rg->p->x, rg->p->y, rg->p->z,
                                rg->bcout->num, rg->bcout->list,
                                rg->bcoutpol->num, rg->bcoutpol->list);
        //poly->addAttribute("MATERIAL","metal metal.30");
        poly->addAttribute("vertexOrder", "1");
        bcout->setCurrentObject(poly);

        // 3. Cells at inlet
        poly = new coDoPolygons(bcin->getObjName(),
                                rg->p->nump,
                                rg->p->x, rg->p->y, rg->p->z,
                                rg->bcin->num, rg->bcin->list,
                                rg->bcinpol->num, rg->bcinpol->list);
        //poly->addAttribute("MATERIAL","metal metal.30");
        poly->addAttribute("vertexOrder", "1");
        bcin->setCurrentObject(poly);

        /*
std::vector<int> checkbcs_vl;
std::vector<int> checkbcs_pl;  
for (i=0;i<rg->bcinpol->num;i++)
{
   if (rg->bcin_type[i]==107)
   {
      fprintf(stderr,"%d: %d %d %d %d %d\n",i,rg->bcin->list[4*i+0],rg->bcin->list[4*i+1],rg->bcin->list[4*i+2],rg->bcin->list[4*i+3],rg->bcin_type[i]);
      checkbcs_pl.push_back(checkbcs_vl.size());
      checkbcs_vl.push_back(rg->bcin->list[4*i+0]);
      checkbcs_vl.push_back(rg->bcin->list[4*i+1]);
      checkbcs_vl.push_back(rg->bcin->list[4*i+2]);
      checkbcs_vl.push_back(rg->bcin->list[4*i+3]);
   }
}
poly = new coDoPolygons(bccheck->getObjName(),
                        rg->p->nump,
                        rg->p->x, rg->p->y, rg->p->z,                       
                        checkbcs_vl.size(), &checkbcs_vl[0],
                        checkbcs_pl.size(), &checkbcs_pl[0]);
bccheck->setCurrentObject(poly);
*/

        // we had several additional info, we should send to the
        // Domaindecomposition:
        //   0. number of columns per info
        //   1. type of node
        //   2. type of element
        //   3. list of nodes with bc (a node may appear more than one time)
        //   4. corresponding type to 3.
        //   5. wall
        //   6. balance
        //   7. pressure
        //   8. NULL

        coDistributedObject *partObj[10];
        int *data;
        float *bPtr;
        const char *basename = boco->getObjName();

        //   0. number of columns per info
        sprintf(name, "%s_colinfo", basename);
        size[0] = 6;
        size[1] = 0;
        coDoIntArr *colInfo = new coDoIntArr(name, 1, size);
        data = colInfo->getAddress();
        data[0] = RG_COL_NODE; // (=2)
        data[1] = RG_COL_ELEM; // (=2)
        data[2] = RG_COL_DIRICLET; // (=2)
        data[3] = RG_COL_WALL; // (=6)
        data[4] = RG_COL_BALANCE; // (=6)
        data[5] = RG_COL_PRESS; // (=6)
        partObj[0] = colInfo;

        //   1. type of node
        sprintf(name, "%s_nodeinfo", basename);
        size[0] = RG_COL_NODE;
        size[1] = rg->p->nump;
        coDoIntArr *nodeInfo = new coDoIntArr(name, 2, size);
        data = nodeInfo->getAddress();
        for (i = 0; i < rg->p->nump; i++)
        {
            *data++ = i + 1; // may be, that we later do it really correct
            *data++ = 0; // same comment ;-)
        }
        partObj[1] = nodeInfo;

        //   2. type of element
        sprintf(name, "%s_eleminfo", basename);
        size[0] = 2;
        size[1] = rg->e->nume * RG_COL_ELEM; // uwe: hier wird 4*nume allociert aber nur 2*nume mit Werten gefuellt
        coDoIntArr *elemInfo = new coDoIntArr(name, 2, size);
        data = elemInfo->getAddress();
        for (i = 0; i < rg->e->nume; i++)
        {
            *data++ = i + 1; // may be, that we later do it really corect
            *data++ = 0; // same comment ;-)
        }
        partObj[2] = elemInfo;

        //   3. list of nodes with bc (a node may appear more than one time)
        //      and its types
        sprintf(name, "%s_diricletNodes", basename);
        int num_diriclet = rg->bcin_nodes.size();

        size[0] = RG_COL_DIRICLET;
        size[1] = 5 * (num_diriclet);
        coDoIntArr *diricletNodes = new coDoIntArr(name, 2, size);
        data = diricletNodes->getAddress();

        //   4. corresponding value to 3.
        sprintf(name, "%s_diricletValue", basename);
        coDoFloat *diricletValues = new coDoFloat(name, 5 * num_diriclet);
        diricletValues->getAddress(&bPtr);

        for (i = 0; i < rg->bcin_nodes.size(); i++)
        {
            *data++ = rg->bcin_nodes[i] + 1; // node-number
            *data++ = 1; // type of node
            *bPtr++ = rg->bcin_velos[5 * i + 0]; // u

            *data++ = rg->bcin_nodes[i] + 1; // node-number
            *data++ = 2; // type of node
            *bPtr++ = rg->bcin_velos[5 * i + 1]; // v

            *data++ = rg->bcin_nodes[i] + 1; // node-number
            *data++ = 3; // type of node
            *bPtr++ = rg->bcin_velos[5 * i + 2]; // w

            *data++ = rg->bcin_nodes[i] + 1; // node-number
            *data++ = 4; // type of node
            *bPtr++ = rg->bcin_velos[5 * i + 4]; // epsilon

            *data++ = rg->bcin_nodes[i] + 1; // node-number
            *data++ = 5; // type of node
            *bPtr++ = rg->bcin_velos[5 * i + 3]; // k

            //*data++ = rg->bcin_nodes->list[i]+1;     // node-number
            //*data++ = 6;                             // type of node
            //*bPtr++ = 0.0;                           // temperature = 0.
        }

        partObj[3] = diricletNodes;
        partObj[4] = diricletValues;

        //   5. wall
        sprintf(name, "%s_wallValue", basename);
        coDoFloat *wallValues = new coDoFloat(name, rg->bcwallvol->num);
        wallValues->getAddress(&bPtr);
        size[0] = RG_COL_WALL;
        size[1] = rg->bcwallpol->num;
        sprintf(name, "%s_wall", basename);
        coDoIntArr *faces = new coDoIntArr(name, 2, size);
        data = faces->getAddress();
        for (i = 0; i < rg->bcwallpol->num; i++) // Achtung bcwall->pol->num != bcwall->vol->num
        {
            *data++ = rg->bcwall->list[4 * i + 0] + 1;
            *data++ = rg->bcwall->list[4 * i + 1] + 1;
            *data++ = rg->bcwall->list[4 * i + 2] + 1;
            *data++ = rg->bcwall->list[4 * i + 3] + 1;
            *data++ = rg->bcwallvol->list[i] + 1;
            *data++ = 55; // wall: moving | standing. here: always standing!
            *data++ = 0;
        }
        partObj[5] = faces;

        //   6. balance
        sprintf(name, "%s_balance", basename);
        size[0] = RG_COL_BALANCE;
        size[1] = rg->bcinvol.size() + rg->bcoutvol->num;

        coDoIntArr *balance = new coDoIntArr(name, 2, size);
        data = balance->getAddress();
        for (i = 0; i < rg->bcinvol.size(); i++)
        {
            /*
   if (rg->bcin_type[i]==107)
   {
      fprintf(stderr,"balance107 %d: %d %d %d %d %d\n",i,rg->bcin->list[4*i+0],rg->bcin->list[4*i+1],rg->bcin->list[4*i+2],rg->bcin->list[4*i+3],rg->bcin_type[i]);
   }
*/
            *data++ = rg->bcin->list[4 * i + 0] + 1;
            *data++ = rg->bcin->list[4 * i + 1] + 1;
            *data++ = rg->bcin->list[4 * i + 2] + 1;
            *data++ = rg->bcin->list[4 * i + 3] + 1;
            *data++ = rg->bcinvol[i] + 1;
            //*data++ = rg->bc_inval;
            *data++ = rg->bcin_type[i];
            *data++ = 0;
        }

        for (i = 0; i < rg->bcoutvol->num; i++)
        {
            *data++ = rg->bcout->list[4 * i + 0] + 1;
            *data++ = rg->bcout->list[4 * i + 1] + 1;
            *data++ = rg->bcout->list[4 * i + 2] + 1;
            *data++ = rg->bcout->list[4 * i + 3] + 1;
            *data++ = rg->bcoutvol->list[i] + 1;
            //*data++ = rg->bc_outval;
            *data++ = rg->bcout_type[i];
            *data++ = 0;
        }
        partObj[6] = balance;

        //  7. pressure bc: outlet elements
        sprintf(name, "%s_pressElems", basename);
        size[0] = 6;
        size[1] = 0;
        coDoIntArr *pressElems = new coDoIntArr(name, 2, size);
        data = pressElems->getAddress();

        //  8. pressure bc: value for outlet elements
        sprintf(name, "%s_pressVal", basename);
        coDoFloat *pressValues
            = new coDoFloat(name, 0);
        pressValues->getAddress(&bPtr);

        partObj[7] = pressElems;
        partObj[8] = NULL;

        coDoSet *set = new coDoSet((char *)basename, (coDistributedObject **)partObj);

        boco->setCurrentObject(set);

        float *xinp = new float[rg->bcin_nodes.size()];
        float *yinp = new float[rg->bcin_nodes.size()];
        float *zinp = new float[rg->bcin_nodes.size()];
        for (i = 0; i < rg->bcin_nodes.size(); i++)
        {
            xinp[i] = rg->p->x[rg->bcin_nodes[i]];
            yinp[i] = rg->p->y[rg->bcin_nodes[i]];
            zinp[i] = rg->p->z[rg->bcin_nodes[i]];
        }
        coDoPoints *in_points;
        in_points = new coDoPoints(inpoints->getObjName(), rg->bcin_nodes.size(), xinp, yinp, zinp);
        inpoints->setCurrentObject(in_points);

        coDoFloat *in_types;
        in_types = new coDoFloat(intypes->getObjName(), rg->bcin_type2.size(), &rg->bcin_type2[0]);
        intypes->setCurrentObject(in_types);

        /*
      float *xairp = new float[rg->bcair_nodes->num];
      float *yairp = new float[rg->bcair_nodes->num];
      float *zairp = new float[rg->bcair_nodes->num];
      for (i=0;i<rg->bcair_nodes->num;i++)
      {
         xairp[i]=rg->p->x[rg->bcair_nodes->list[i]];
         yairp[i]=rg->p->y[rg->bcair_nodes->list[i]];
         zairp[i]=rg->p->z[rg->bcair_nodes->list[i]];
      }

      coDoPoints *air_points;
      air_points = new coDoPoints(airpoints->getObjName(), rg->bcair_nodes->num, xairp, yairp, zairp);
      airpoints->setCurrentObject(air_points);

      float *xvenp = new float[rg->bcven_nodes->num];
      float *yvenp = new float[rg->bcven_nodes->num];
      float *zvenp = new float[rg->bcven_nodes->num];
      for (i=0;i<rg->bcven_nodes->num;i++)
      {
         xvenp[i]=rg->p->x[rg->bcven_nodes->list[i]];
         yvenp[i]=rg->p->y[rg->bcven_nodes->list[i]];
         zvenp[i]=rg->p->z[rg->bcven_nodes->list[i]];
      }
      coDoPoints *ven_points;
      ven_points = new coDoPoints(venpoints->getObjName(), rg->bcven_nodes->num, xvenp, yvenp, zvenp);
      venpoints->setCurrentObject(ven_points);
*/
        const char *geofile = p_geofile->getValue();
        const char *rbfile = p_rbfile->getValue();

        if (p_createGeoRbFile->getValue())
        {
            CreateGeoRbFile(rg, geofile, rbfile);
        }
    }

    ///////////////////////// Free everything ////////////////////////////////

    return SUCCESS;
}
ISimpleSubtractorImpl::~ISimpleSubtractorImpl()
{
	FreeModel();
}
예제 #18
0
파일: obj.c 프로젝트: echo0101/Island
void
cleanup ()
{
  FreeModel (&objfile);
}