FrontISTR 5.2.0
Large-scale structural analysis program with finit element method
Loading...
Searching...
No Matches
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
14using 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,
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++) {
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
140void 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,
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}
@ NFE_INVALID_TOKEN
Definition: CNFMessage.h:23
nf_int type
Definition: CNFDB_404.h:87
cref_node_list * make_ref_node_list(CNFData *nfd)
Definition: CNFDB_404.cpp:109
nf_bool release2[6]
Definition: CNFDB_404.h:110
virtual ~CNFDB_404()
Definition: CNFDB_404.cpp:18
nf_float offset2[3]
Definition: CNFDB_404.h:106
nf_bool release1[6]
Definition: CNFDB_404.h:108
nf_int layer
Definition: CNFDB_404.h:89
nf_int orientID
Definition: CNFDB_404.h:90
nf_int formulation
Definition: CNFDB_404.h:95
nf_int contactsegment[2]
Definition: CNFDB_404.h:96
nf_int color
Definition: CNFDB_404.h:85
nf_float orient[3]
Definition: CNFDB_404.h:102
virtual void Read(class CNFData *nfd)
Definition: CNFDB_404.cpp:20
nf_int formulation2
Definition: CNFDB_404.h:98
nf_int topology
Definition: CNFDB_404.h:88
nf_bool matl_orflag
Definition: CNFDB_404.h:91
nf_int ID
Definition: CNFDB_404.h:84
std::vector< cref_node_list * > ref_node_set
Definition: CNFDB_404.h:115
nf_int geomID
Definition: CNFDB_404.h:93
nf_int list[4]
Definition: CNFDB_404.h:112
nf_int propID
Definition: CNFDB_404.h:86
nf_float offset1[3]
Definition: CNFDB_404.h:104
nf_int node[20]
Definition: CNFDB_404.h:100
void clear_ref_node_set()
Definition: CNFDB_404.cpp:99
virtual void WriteData(class CNFData *nfd, FILE *fp)
Definition: CNFDB_404.cpp:140
void write_ref_node_list(CNFData *nfd, FILE *fp, cref_node_list *list)
Definition: CNFDB_404.cpp:199
void ReadLineEx(char *buff, int size=255)
Definition: CNFData.cpp:367
double version
Definition: CNFData.h:48
int line
Definition: CNFData.h:92
void WriteData(FILE *fp, const char *fmt,...)
Definition: CNFData.cpp:486
void ReadRecord(char *buff, const char *fmt,...)
Definition: CNFData.cpp:308
struct result_list * node_list