From 4d75e0702d05686bd170861a171b92881b84d341 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Fri, 1 Sep 2006 01:56:26 +0000 Subject: [PATCH] add CBAR for lines in BDF --- Geo/GModelIO.cpp | 29 +++++++++++++++++++---------- Geo/MElement.cpp | 7 +++++-- Geo/MElement.h | 2 +- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Geo/GModelIO.cpp b/Geo/GModelIO.cpp index 3a1ad70efc..95c5454532 100644 --- a/Geo/GModelIO.cpp +++ b/Geo/GModelIO.cpp @@ -1,4 +1,4 @@ -// $Id: GModelIO.cpp,v 1.35 2006-09-01 01:34:27 geuzaine Exp $ +// $Id: GModelIO.cpp,v 1.36 2006-09-01 01:56:26 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -1404,8 +1404,8 @@ static int readElementBDF(FILE *fp, char *buffer, unsigned int numNodes, } } - if(vals.size() != numNodes + 2){ - Msg(GERROR, "Wrong number of nodes %d for element", vals.size() - 2); + if(vals.size() < numNodes + 2){ + Msg(GERROR, "Missing nodes for element (%d < numNodes)", vals.size() - 2); return 0; } @@ -1430,7 +1430,7 @@ int GModel::readBDF(const std::string &name) bool comma = false; std::map<int, MVertex*> vertices; - std::map<int, std::vector<MElement*> > elements[5]; + std::map<int, std::vector<MElement*> > elements[6]; while(!feof(fp)) { if(!fgets(buffer, sizeof(buffer), fp)) break; @@ -1451,39 +1451,44 @@ int GModel::readBDF(const std::string &name) sscanf(&buffer[5], "%d , %d , %lf, %lf , %lf", &num, &dummy, &x, &y, &z); vertices[num] = new MVertex(x, y, z); } + else if(!strncmp(buffer, "CBAR", 4)){ + if(readElementBDF(fp, &buffer[4], 2, &num, ®ion, n)) + elements[0][region].push_back + (new MLine(vertices[n[0]], vertices[n[1]], num)); + } else if(!strncmp(buffer, "CTRIA3", 6)){ if(readElementBDF(fp, &buffer[6], 3, &num, ®ion, n)) - elements[0][region].push_back + elements[1][region].push_back (new MTriangle(vertices[n[0]], vertices[n[1]], vertices[n[2]], num)); } else if(!strncmp(buffer, "CTRIA6", 6)){ if(readElementBDF(fp, &buffer[6], 6, &num, ®ion, n)) - elements[0][region].push_back + elements[1][region].push_back (new MTriangle2(vertices[n[0]], vertices[n[1]], vertices[n[2]], vertices[n[3]], vertices[n[4]], vertices[n[5]], num)); } else if(!strncmp(buffer, "CQUAD4", 6)){ if(readElementBDF(fp, &buffer[6], 4, &num, ®ion, n)) - elements[1][region].push_back + elements[2][region].push_back (new MQuadrangle(vertices[n[0]], vertices[n[1]], vertices[n[2]], vertices[n[3]], num)); } else if(!strncmp(buffer, "CTETRA", 6)){ if(readElementBDF(fp, &buffer[6], 4, &num, ®ion, n)) - elements[2][region].push_back + elements[3][region].push_back (new MTetrahedron(vertices[n[0]], vertices[n[1]], vertices[n[2]], vertices[n[3]], num)); } else if(!strncmp(buffer, "CHEXA", 5)){ if(readElementBDF(fp, &buffer[5], 8, &num, ®ion, n)) - elements[3][region].push_back + elements[4][region].push_back (new MHexahedron(vertices[n[0]], vertices[n[1]], vertices[n[2]], vertices[n[3]], vertices[n[4]], vertices[n[5]], vertices[n[6]], vertices[n[7]], num)); } else if(!strncmp(buffer, "CPENTA", 6)){ if(readElementBDF(fp, &buffer[6], 6, &num, ®ion, n)) - elements[4][region].push_back + elements[5][region].push_back (new MPrism(vertices[n[0]], vertices[n[1]], vertices[n[2]], vertices[n[3]], vertices[n[4]], vertices[n[5]], num)); } @@ -1524,6 +1529,10 @@ int GModel::writeBDF(const std::string &name, double scalingFactor) for(unsigned int i = 0; i < (*it)->mesh_vertices.size(); i++) (*it)->mesh_vertices[i]->writeBDF(fp, scalingFactor); + for(eiter it = firstEdge(); it != lastEdge(); ++it){ + for(unsigned int i = 0; i < (*it)->lines.size(); i++) + (*it)->lines[i]->writeBDF(fp, (*it)->tag()); + } for(fiter it = firstFace(); it != lastFace(); ++it){ for(unsigned int i = 0; i < (*it)->triangles.size(); i++) (*it)->triangles[i]->writeBDF(fp, (*it)->tag()); diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp index 74cc6f7206..b3474ed8f5 100644 --- a/Geo/MElement.cpp +++ b/Geo/MElement.cpp @@ -1,4 +1,4 @@ -// $Id: MElement.cpp,v 1.12 2006-08-31 21:29:18 geuzaine Exp $ +// $Id: MElement.cpp,v 1.13 2006-09-01 01:56:26 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -284,8 +284,11 @@ void MElement::writeBDF(FILE *fp, int elementary) char *str = getStringForBDF(); if(str){ fprintf(fp, "%s,%d,%d", str, _num, elementary); - for(int i = 0; i < getNumVertices(); i++) + int n = getNumVertices(); + for(int i = 0; i < n; i++) fprintf(fp, ",%d", getVertex(i)->getNum()); + if(n == 2) // CBAR + fprintf(fp, ",1.,1.,1."); fprintf(fp, "\n"); } } diff --git a/Geo/MElement.h b/Geo/MElement.h index d42e1a58ed..dd146319d2 100644 --- a/Geo/MElement.h +++ b/Geo/MElement.h @@ -170,7 +170,7 @@ class MLine : public MElement { int getTypeForMSH(){ return LGN1; } int getTypeForUNV(){ return 21; } // BEAM char *getStringForPOS(){ return "SL"; } - char *getStringForBDF(){ return 0; } + char *getStringForBDF(){ return "CBAR"; } }; class MLine2 : public MLine { -- GitLab