/***********************************************************************
*
* ELMER, A Computational Fluid Dynamics Program.
*
* Copyright 1st April 1995 - , Center for Scientific Computing,
* Finland.
*
* All rights reserved. No part of this program may be used,
* reproduced or transmitted in any form or by any means
* without the written permission of CSC.
*
* Address: Center for Scientific Computing
* Tietotie 6, P.O. BOX 405
* 02101 Espoo, Finland
* Tel. +358 0 457 2001
* Telefax: +358 0 457 2302
* EMail: Jari.Jarvinen@csc.fi
************************************************************************/
/***********************************************************************
Program: ELMER Front
Module: ecif_bodyelement1D.cpp
Language: C++
Date: 01.10.98
Version: 1.00
Author(s): Martti Verho
Revisions:
Abstract: Implementation
************************************************************************/
#include "ecif_body.h"
#include "ecif_bodyElement1D.h"
#include "ecif_control.h"
#include "ecif_geometry.h"
#include "ecif_parameter.h"
#include "ecif_renderer.h"
extern Control* theControlCenter;
//Initialize static class variables.
int BodyElement1D::last_tag = 0;
// Constructors.
BodyElement1D::BodyElement1D()
: BodyElement()
{
init();
update();
}
BodyElement1D::BodyElement1D(int int_tag)
: BodyElement(int_tag)
{
checkLastTag();
init();
update();
}
//-Create element from point
BodyElement1D::BodyElement1D(int int_tag, GcPoint* p)
: BodyElement(int_tag)
{
init();
ptrGmtr = new GcPoint(p);
update();
}
//-Create element from point
BodyElement1D::BodyElement1D(GcPoint* p)
: BodyElement()
{
tag = newTag();
init();
ptrGmtr = new GcPoint(p);
update();
}
BodyElement1D::BodyElement1D(ecif_Element_X& tx)
: BodyElement(tx)
{
if ( tag == NO_INDEX ) {
tag = newTag();
}
checkLastTag();
init();
ptrGmtr = new GcPoint(tx.components[0]->geometry.vertex->point);
update();
}
BodyElement1D::BodyElement1D(ecif_Vertex_X& tx)
: BodyElement(tx)
{
checkLastTag();
init();
ptrGmtr = new GcPoint(tx.point);
update();
}
BodyElement1D::~BodyElement1D()
{
delete ptrGmtr;
delete gridHData;
}
void BodyElement1D::draw(Renderer* renderer, flagName geometry_type, int body_id)
{
if ( drawMode == DM_HIDDEN && drawState != DS_SELECTED ) return;
// We draw vertices in 3D only when they are selected
if ( model->getDimension() == ECIF_3D &&
drawState != DS_SELECTED
) {
return;
}
renderer->name_save(id);
ptrGmtr->draw(renderer, drawMode, drawState);
renderer->name_delete(id);
}
// Method creates a new 1D vertex-type from a vertex.
BodyElement*
BodyElement1D::createElement(int nof_vertices, int* vertex_ids, ecif_geometryType gt)
{
return NULL;
}
int
BodyElement1D::findMeshBorderNodes(int buf_size, int* ids_buffer)
{
if ( nodeId != NO_INDEX ) {
// In 1D this is really easy!
ids_buffer[0] = nodeId;
return 1;
} else {
return 0;
}
}
int
BodyElement1D::getMeshElementId(int index)
{
if ( index != 0 ) {
return NO_INDEX;
} else {
return nodeId;
}
}
void
BodyElement1D::init(char* be_name)
{
model->addModelObject(this, OT_VERTEX);
nodeId = NO_INDEX;
if (be_name != NULL) {
initName(be_name);
}
nofCurrentMeshHSources = 0;
}
void
BodyElement1D::initClass(Model* model)
{
BodyElement1D::last_tag = 0;
}
void
BodyElement1D::initLabelData()
{
if ( ptrGmtr == NULL )
return;
if ( labelData == NULL ) {
labelData = new LabelData;
labelData->label = NULL;
}
// Make an id-string.
ostrstream id_str;
id_str << 'V' << Tag() << ends;
update_dyna_string(labelData->label, id_str.str());
//---Get 'nice' position for the id-label
ptrGmtr->getLabelPoint(labelData->position);
}
#if 0
// Do nothing! (vertices are output as table)
ostream&
BodyElement1D::output_emf(ostream& out, short indent_size, short indent_level, bool isOnSymmAxis)
{
return out;
}
#endif
// Output vertex for Elmer Mesh input file (mif-file)
//
ostream&
BodyElement1D::output_mif(ostream& out)
{
Point3 p;
((GcPoint*)ptrGmtr)->getPoint(p);
int mesh_index = model->getCurrentMeshIndex();
//---Tag and boundary tag
out << "NodeId: " << tag << " " << boundaryTag;
//---Possible mesh-density value
char type;
int nof_values;
double values[4];
if ( getMeshDensityValues(mesh_index, type, nof_values, values) &&
nof_values == 1 &&
values[0] > 0
) {
out << " " << type << ": " << values[0];
}
//---Coordinates (x,y)
out << " " << p[0] << " " << p[1];
out << endl;
return out;
}
syntax highlighted by Code2HTML, v. 0.9.1