FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
CNFDB_506.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_506 Ver.1.0
7 */
8 
9 // 506 Constraints
10 
11 #include "CNFData.h"
12 #include "CNFDB_506.h"
13 
14 using namespace std;
15 
17 
19  char buff[256];
20  // #1
21  nfd->ReadLineEx(buff);
22  nfd->ReadRecord(buff, "I", &setID);
23  // #2
24  nfd->ReadLineEx(buff);
25  nfd->ReadStr(buff, title, sizeof(title));
26  // for nodes
28  // for points
30  // for curves
32  // for surfaces
34  // for equations
36  int eq_n = const_equations.size();
37 
38  if (eq_n == 0) return;
39 
40  // for number of coefficiency in equation
41  read_num_co(nfd, eq_n, num_co);
42  // for num_co records
43  read_num_co_list(nfd, eq_n, num_co_list);
44 }
45 
46 void CNFDB_506::read_const_item(CNFData *nfd, std::vector<cconst_item> &list) {
47  char buff[256];
48  cconst_item item;
49  list.clear();
50 
51  while (1) {
52  nfd->ReadLineEx(buff);
53  nfd->ReadRecord(buff, "IIIBBBBBBB", &item.ID, &item.color, &item.layer,
54  &item.DOF[0], &item.DOF[1], &item.DOF[2], &item.DOF[3],
55  &item.DOF[4], &item.DOF[5], &item.ex_geom);
56 
57  if (item.ID == -1) break;
58 
59  list.push_back(item);
60  }
61 }
62 
63 void CNFDB_506::read_const_eq(CNFData *nfd, std::vector<cconst_eq> &list) {
64  char buff[256];
65  cconst_eq item;
66  list.clear();
67 
68  while (1) {
69  nfd->ReadLineEx(buff);
70  nfd->ReadRecord(buff, "III", &item.ID, &item.color, &item.layer);
71 
72  if (item.ID == -1) break;
73 
74  list.push_back(item);
75  }
76 }
77 
78 void CNFDB_506::read_num_co(CNFData *nfd, int eq_n, std::vector<nf_int> &list) {
79  char buff[256];
80  nf_int x;
81  list.clear();
82 
83  for (int i = 0; i < eq_n; i++) {
84  nfd->ReadLineEx(buff);
85  nfd->ReadRecord(buff, "I", &x);
86  list.push_back(x);
87  }
88 }
89 
91  std::vector<cnum_co_rec> &list) {
92  char buff[256];
93  cnum_co_rec item;
94  list.clear();
95 
96  for (int i = 0; i < eq_n; i++) {
97  nfd->ReadLineEx(buff);
98  nfd->ReadRecord(buff, "IIF", &item.eqn_nodeID, &item.eqn_dof, &item.coeff);
99  list.push_back(item);
100  }
101 }
102 
103 //*****************************************************************************
104 
105 void CNFDB_506::WriteData(class CNFData *nfd, FILE *fp) {
106  // #1
107  nfd->WriteData(fp, "In", setID);
108  // #2
109  nfd->WriteStr(fp, title);
110  // for nodes
111  write_const_item(nfd, fp, const_nodes);
112  // for points
113  write_const_item(nfd, fp, const_points);
114  // for curves
115  write_const_item(nfd, fp, const_curves);
116  // for surfaces
118  // for equations
120  int eq_n = const_equations.size();
121 
122  if (eq_n == 0) return;
123 
124  // for number of coefficiency in equation
125  write_num_co(nfd, fp, num_co);
126  // for num_co records
127  write_num_co_list(nfd, fp, num_co_list);
128 }
129 
131  std::vector<CNFDB_506::cconst_item> &list) {
132  vector<cconst_item>::iterator iter;
133 
134  for (iter = list.begin(); iter != list.end(); iter++) {
135  nfd->WriteData(fp, "IIIBBBBBBBn", iter->ID, iter->color, iter->layer,
136  iter->DOF[0], iter->DOF[1], iter->DOF[2], iter->DOF[3],
137  iter->DOF[4], iter->DOF[5], iter->ex_geom);
138  }
139 
140  nfd->WriteData(fp, "IIIBBBBBBBn", -1, -1, -1, 0, 0, 0, 0, 0, 0, 0);
141 }
142 
143 void CNFDB_506::write_const_eq(CNFData *nfd, FILE *fp,
144  std::vector<CNFDB_506::cconst_eq> &list) {
145  vector<cconst_eq>::iterator iter;
146 
147  for (iter = list.begin(); iter != list.end(); iter++) {
148  nfd->WriteData(fp, "IIIn", iter->ID, iter->color, iter->layer);
149  }
150 
151  nfd->WriteData(fp, "IIIn", -1, -1, -1);
152 }
153 
154 void CNFDB_506::write_num_co(CNFData *nfd, FILE *fp,
155  std::vector<nf_int> &list) {
156  vector<nf_int>::iterator iter;
157 
158  for (iter = list.begin(); iter != list.end(); iter++) {
159  nfd->WriteData(fp, "In", *iter);
160  }
161 }
162 
164  std::vector<CNFDB_506::cnum_co_rec> &list) {
165  vector<cnum_co_rec>::iterator iter;
166 
167  for (iter = list.begin(); iter != list.end(); iter++) {
168  nfd->WriteData(fp, "IIFn", iter->eqn_nodeID, iter->eqn_dof, iter->coeff);
169  }
170 }
CNFDB_506::cconst_item
Definition: CNFDB_506.h:29
CNFDB_506::cconst_item::ex_geom
nf_bool ex_geom
Definition: CNFDB_506.h:35
CNFData::ReadRecord
void ReadRecord(char *buff, const char *fmt,...)
Definition: CNFData.cpp:308
CNFDB_506::CNFDB_506
CNFDB_506()
Definition: CNFDB_506.cpp:16
CNFDB_506::cnum_co_rec::coeff
nf_float coeff
Definition: CNFDB_506.h:70
CNFDB_506::write_const_item
void write_const_item(class CNFData *nfd, FILE *fp, std::vector< cconst_item > &list)
Definition: CNFDB_506.cpp:130
CNFDB_506::cconst_item::ID
nf_int ID
Definition: CNFDB_506.h:31
CNFDB_506::const_surfaces
std::vector< cconst_item > const_surfaces
Definition: CNFDB_506.h:84
CNFDB_506::Read
virtual void Read(class CNFData *nfd)
Definition: CNFDB_506.cpp:18
CNFDataBlock
Definition: CNFDataBlock.h:24
CNFDB_506::cnum_co_rec::eqn_dof
nf_int eqn_dof
Definition: CNFDB_506.h:69
CNFData::WriteStr
void WriteStr(FILE *fp, const char *s)
Definition: CNFData.cpp:452
CNFDB_506.h
CNFDB_506::cconst_eq
Definition: CNFDB_506.h:60
CNFData.h
CNFDB_506::read_const_item
void read_const_item(class CNFData *nfd, std::vector< cconst_item > &list)
Definition: CNFDB_506.cpp:46
CNFDB_506::num_co
std::vector< nf_int > num_co
Definition: CNFDB_506.h:86
CNFDB_506::cconst_item::DOF
nf_bool DOF[6]
Definition: CNFDB_506.h:34
CNFDB_506::cnum_co_rec
Definition: CNFDB_506.h:66
CNFDB_506::title
nf_char title[26]
Definition: CNFDB_506.h:76
CNFDB_506::read_num_co
void read_num_co(class CNFData *nfd, int eq_n, std::vector< nf_int > &list)
Definition: CNFDB_506.cpp:78
CNFDB_506::write_num_co_list
void write_num_co_list(class CNFData *nfd, FILE *fp, std::vector< cnum_co_rec > &list)
Definition: CNFDB_506.cpp:163
CNFDB_506::cconst_eq::color
nf_int color
Definition: CNFDB_506.h:63
CNFDB_506::cconst_item::layer
nf_int layer
Definition: CNFDB_506.h:33
CNFDB_506::const_curves
std::vector< cconst_item > const_curves
Definition: CNFDB_506.h:82
CNFData::ReadLineEx
void ReadLineEx(char *buff, int size=255)
Definition: CNFData.cpp:367
CNFData
Definition: CNFData.h:46
CNFDB_506::cnum_co_rec::eqn_nodeID
nf_int eqn_nodeID
Definition: CNFDB_506.h:68
CNFData::WriteData
void WriteData(FILE *fp, const char *fmt,...)
Definition: CNFData.cpp:486
CNFData::ReadStr
void ReadStr(char *buff, char *s, int size)
Definition: CNFData.cpp:373
CNFDB_506::const_points
std::vector< cconst_item > const_points
Definition: CNFDB_506.h:80
CNFDB_506::read_const_eq
void read_const_eq(class CNFData *nfd, std::vector< cconst_eq > &list)
Definition: CNFDB_506.cpp:63
CNFDB_506::setID
nf_int setID
Definition: CNFDB_506.h:74
CNFDB_506::read_num_co_list
void read_num_co_list(class CNFData *nfd, int eq_n, std::vector< cnum_co_rec > &list)
Definition: CNFDB_506.cpp:90
CNFDB_506::write_num_co
void write_num_co(class CNFData *nfd, FILE *fp, std::vector< nf_int > &list)
Definition: CNFDB_506.cpp:154
CNFDB_506::const_nodes
std::vector< cconst_item > const_nodes
Definition: CNFDB_506.h:78
CNFDB_506::write_const_eq
void write_const_eq(class CNFData *nfd, FILE *fp, std::vector< cconst_eq > &list)
Definition: CNFDB_506.cpp:143
CNFDB_506::const_equations
std::vector< cconst_eq > const_equations
Definition: CNFDB_506.h:88
nf_int
int nf_int
Definition: CNFDataBlock.h:19
CNFDB_506::WriteData
virtual void WriteData(class CNFData *nfd, FILE *fp)
Definition: CNFDB_506.cpp:105
CNFDB_506::cconst_eq::layer
nf_int layer
Definition: CNFDB_506.h:64
CNFDB_506::cconst_item::color
nf_int color
Definition: CNFDB_506.h:32
CNFDB_506::num_co_list
std::vector< cnum_co_rec > num_co_list
Definition: CNFDB_506.h:90
CNFDB_506::cconst_eq::ID
nf_int ID
Definition: CNFDB_506.h:62