FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
CNFDB_404.cpp
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2019 FrontISTR Commons
3  * This software is released under the MIT License, see LICENSE.txt
4  *****************************************************************************/
5 /*
6  CNFDB_404 Ver.1.0
7 */
8 
9 // 404 Element
10 
11 #include "CNFData.h"
12 #include "CNFDB_404.h"
13 
14 using namespace std;
15 
17 
19 
21  char buff[256];
22  int i;
24  // #1
25  nfd->ReadLineEx(buff);
26 
27  if (nfd->version >= 8.0) {
28  nfd->ReadRecord(buff, "IIIIIIIBIIIII", &ID, &color, &propID, &type,
31  &formulation2);
32 
33  } else if (nfd->version >= 6.0) {
34  nfd->ReadRecord(buff, "IIIIIIIBIIII", &ID, &color, &propID, &type,
37 
38  } else if (nfd->version >= 5.0) {
39  nfd->ReadRecord(buff, "IIIIIIIBI", &ID, &color, &propID, &type, &topology,
41 
42  } else {
43  nfd->ReadRecord(buff, "IIIIIIIB", &ID, &color, &propID, &type, &topology,
45  }
46 
47  // #2
48  nfd->ReadLineEx(buff);
49  nfd->ReadRecord(buff, "IIIIIIIIII", &node[0], &node[1], &node[2], &node[3],
50  &node[4], &node[5], &node[6], &node[7], &node[8], &node[9]);
51  // #3
52  nfd->ReadLineEx(buff);
53  nfd->ReadRecord(buff, "IIIIIIIIII", &node[10], &node[11], &node[12],
54  &node[13], &node[14], &node[15], &node[16], &node[17],
55  &node[18], &node[19]);
56  // #4
57  nfd->ReadLineEx(buff);
58  nfd->ReadRecord(buff, "FFF", &orient[0], &orient[1], &orient[2]);
59  // #5
60  nfd->ReadLineEx(buff);
61  nfd->ReadRecord(buff, "FFF", &offset1[0], &offset1[1], &offset1[2]);
62  // #6
63  nfd->ReadLineEx(buff);
64  nfd->ReadRecord(buff, "FFF", &offset2[0], &offset2[1], &offset2[2]);
65  // #7
66  nfd->ReadLineEx(buff);
67 
68  if (nfd->version < 4.4) {
69  nfd->ReadRecord(buff, "BBBBBBBBBBBB", &release1[0], &release1[1],
70  &release1[2], &release1[3], &release1[4], &release1[5],
71  &release2[0], &release2[1], &release2[2], &release2[3],
72  &release2[4], &release2[5]);
73 
74  } else {
75  nfd->ReadRecord(buff, "BBBBBBBBBBBBIIII", &release1[0], &release1[1],
76  &release1[2], &release1[3], &release1[4], &release1[5],
77  &release2[0], &release2[1], &release2[2], &release2[3],
78  &release2[4], &release2[5], &list[0], &list[1], &list[2],
79  &list[3]);
80  }
81 
82  // Ver.4.5 ========================
83  if (nfd->version < 4.5) return;
84 
85  int list_n = 0;
86 
87  for (i = 0; i < 4; i++) {
88  if (list[i] != 0) list_n++;
89  }
90 
91  if (list_n == 0) return;
92 
93  for (i = 0; i < list_n; i++) {
94  cref_node_list *node_list = make_ref_node_list(nfd);
95  ref_node_set.push_back(node_list);
96  }
97 }
98 
100  vector<cref_node_list *>::iterator iter;
101 
102  for (iter = ref_node_set.begin(); iter != ref_node_set.end(); iter++) {
103  delete *iter;
104  }
105 
106  ref_node_set.clear();
107 }
108 
110  char buff[256];
111  cref_node ref;
113 
114  while (1) {
115  nfd->ReadLineEx(buff);
116  // check of end
117  char temp[256];
118  strcpy(temp, buff);
119  char *token = strtok(temp, ",\n\r");
120  int id;
121 
122  if (sscanf(token, "%d", &id) != 1) {
123  delete list;
124  throw CNFError(NFE_INVALID_TOKEN, nfd->line, 1);
125  }
126 
127  if (id == -1) break;
128 
129  nfd->ReadRecord(buff, "IIFIIIIII", &ref.NodeID, &ref.faceID, &ref.weight,
130  &ref.dof[1], &ref.dof[2], &ref.dof[3], &ref.dof[4],
131  &ref.dof[5], &ref.dof[6]);
132  list->ref_node.push_back(ref);
133  }
134 
135  return list;
136 }
137 
138 //*****************************************************************************
139 
140 void CNFDB_404::WriteData(class CNFData *nfd, FILE *fp) {
141  // #1
142  if (nfd->version >= 8.0) {
143  nfd->WriteData(fp, "IIIIIIBIIIIIn", ID, color, propID, topology, layer,
146 
147  } else if (nfd->version >= 6.0) {
148  nfd->WriteData(fp, "IIIIIIBIIIIn", ID, color, propID, topology, layer,
151 
152  } else if (nfd->version >= 5.0) {
153  nfd->WriteData(fp, "IIIIIIBIn", ID, color, propID, topology, layer,
155 
156  } else {
157  nfd->WriteData(fp, "IIIIIIBn", ID, color, propID, topology, layer, orientID,
158  matl_orflag);
159  }
160 
161  // #2
162  nfd->WriteData(fp, "IIIIIIIIIIn", node[0], node[1], node[2], node[3], node[4],
163  node[5], node[6], node[7], node[8], node[9]);
164  // #3
165  nfd->WriteData(fp, "IIIIIIIIIIn", node[10], node[11], node[12], node[13],
166  node[14], node[15], node[16], node[17], node[18], node[19]);
167  // #4
168  nfd->WriteData(fp, "FFFn", orient[0], orient[1], orient[2]);
169  // #5
170  nfd->WriteData(fp, "FFFn", offset1[0], offset1[1], offset1[2]);
171  // #6
172  nfd->WriteData(fp, "FFFn", offset2[0], offset2[1], offset2[2]);
173 
174  // #7
175  if (nfd->version < 4.4) {
176  nfd->WriteData(fp, "BBBBBBBBBBBBn", release1[0], release1[1], release1[2],
177  release1[3], release1[4], release1[5], release2[0],
178  release2[1], release2[2], release2[3], release2[4],
179  release2[5]);
180 
181  } else {
182  nfd->WriteData(fp, "BBBBBBBBBBBBIIIIn", release1[0], release1[1],
183  release1[2], release1[3], release1[4], release1[5],
184  release2[0], release2[1], release2[2], release2[3],
185  release2[4], release2[5], list[0], list[1], list[2],
186  list[3]);
187  }
188 
189  // Ver.4.5 ========================
190  if (nfd->version < 4.5) return;
191 
192  std::vector<cref_node_list *>::iterator iter;
193 
194  for (iter = ref_node_set.begin(); iter != ref_node_set.end(); iter++) {
195  write_ref_node_list(nfd, fp, *iter);
196  }
197 }
198 
201  std::vector<cref_node>::iterator iter;
202 
203  for (iter = list->ref_node.begin(); iter != list->ref_node.end(); iter++) {
204  nfd->WriteData(fp, "IIFIIIIIIn", iter->NodeID, iter->faceID, iter->weight,
205  iter->dof[1], iter->dof[2], iter->dof[3], iter->dof[4],
206  iter->dof[5], iter->dof[6]);
207  }
208 
209  nfd->WriteData(fp, "In", -1);
210 }
CNFData::ReadRecord
void ReadRecord(char *buff, const char *fmt,...)
Definition: CNFData.cpp:308
CNFDB_404::formulation2
nf_int formulation2
Definition: CNFDB_404.h:101
CNFDB_404.h
CNFDB_404::type
nf_int type
Definition: CNFDB_404.h:90
CNFDB_404::orientID
nf_int orientID
Definition: CNFDB_404.h:93
CNFDataBlock
Definition: CNFDataBlock.h:24
CNFDB_404::CNFDB_404
CNFDB_404()
Definition: CNFDB_404.cpp:16
CNFDB_404::cref_node_list
Definition: CNFDB_404.h:81
CNFData::line
int line
Definition: CNFData.h:92
CNFDB_404::color
nf_int color
Definition: CNFDB_404.h:88
CNFData.h
CNFData::version
double version
Definition: CNFData.h:48
CNFDB_404::geomID
nf_int geomID
Definition: CNFDB_404.h:96
CNFDB_404::Read
virtual void Read(class CNFData *nfd)
Definition: CNFDB_404.cpp:20
CNFDB_404::topology
nf_int topology
Definition: CNFDB_404.h:91
CNFDB_404::release2
nf_bool release2[6]
Definition: CNFDB_404.h:113
CNFDB_404::propID
nf_int propID
Definition: CNFDB_404.h:89
CNFDB_404::offset1
nf_float offset1[3]
Definition: CNFDB_404.h:107
CNFDB_404::write_ref_node_list
void write_ref_node_list(CNFData *nfd, FILE *fp, cref_node_list *list)
Definition: CNFDB_404.cpp:199
CNFDB_404::cref_node::faceID
nf_int faceID
Definition: CNFDB_404.h:52
CNFData::ReadLineEx
void ReadLineEx(char *buff, int size=255)
Definition: CNFData.cpp:367
CNFData
Definition: CNFData.h:46
CNFDB_404::ID
nf_int ID
Definition: CNFDB_404.h:87
CNFDB_404::offset2
nf_float offset2[3]
Definition: CNFDB_404.h:109
CNFData::WriteData
void WriteData(FILE *fp, const char *fmt,...)
Definition: CNFData.cpp:486
CNFDB_404::list
nf_int list[4]
Definition: CNFDB_404.h:115
CNFDB_404::cref_node::NodeID
nf_int NodeID
Definition: CNFDB_404.h:51
CNFDB_404::node
nf_int node[20]
Definition: CNFDB_404.h:103
CNFDB_404::contactsegment
nf_int contactsegment[2]
Definition: CNFDB_404.h:99
CNFDB_404::cref_node::weight
nf_float weight
Definition: CNFDB_404.h:53
CNFDB_404::clear_ref_node_set
void clear_ref_node_set()
Definition: CNFDB_404.cpp:99
CNFError
Definition: CNFMessage.h:51
CNFDB_404::make_ref_node_list
cref_node_list * make_ref_node_list(CNFData *nfd)
Definition: CNFDB_404.cpp:109
CNFDB_404::~CNFDB_404
virtual ~CNFDB_404()
Definition: CNFDB_404.cpp:18
NFE_INVALID_TOKEN
@ NFE_INVALID_TOKEN
Definition: CNFMessage.h:26
CNFDB_404::cref_node
Definition: CNFDB_404.h:49
CNFDB_404::cref_node::dof
nf_int dof[7]
Definition: CNFDB_404.h:54
CNFDB_404::matl_orflag
nf_bool matl_orflag
Definition: CNFDB_404.h:94
CNFDB_404::ref_node_set
std::vector< cref_node_list * > ref_node_set
Definition: CNFDB_404.h:118
CNFDB_404::formulation
nf_int formulation
Definition: CNFDB_404.h:98
CNFDB_404::orient
nf_float orient[3]
Definition: CNFDB_404.h:105
CNFDB_404::release1
nf_bool release1[6]
Definition: CNFDB_404.h:111
CNFDB_404::WriteData
virtual void WriteData(class CNFData *nfd, FILE *fp)
Definition: CNFDB_404.cpp:140
CNFDB_404::layer
nf_int layer
Definition: CNFDB_404.h:92