FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
CHECDB_Material.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  CHECDB_Material Ver.1.0
7 */
8 
9 #include "CHECDB.h"
10 #include "CHECData.h"
11 
12 using namespace std;
13 
15  name[0] = 0;
16 }
17 
19 
21  ItemList.clear();
22  name[0] = 0;
23 }
24 
26  hecd->WriteParameter("II", "ITEM", ID, "SUBITEM", SubItemNumber());
27  vector<CItemRec>::iterator ri;
28 
29  for (ri = RecList.begin(); ri != RecList.end(); ri++) {
30  hecd->ClearDataLineBuffer();
31  vector<double>::iterator pi;
32 
33  for (pi = ri->params.begin(); pi != ri->params.end(); pi++) {
34  hecd->AddDataLineItems("F", *pi);
35  }
36 
37  hecd->WriteDataLine();
38  }
39 }
40 
42  hecd->WriteHeader("!MATERIAL", "SI", "NAME", name, "ITEM", ItemList.size());
43  vector<CItem>::iterator iter;
44 
45  for (iter = ItemList.begin(); iter != ItemList.end(); iter++) {
46  iter->Write(hecd);
47  }
48 }
49 
50 //-----------------------------------------------------------------------------
51 
53  int subitem_n = 0;
54  int rcode[10];
55  int i, n;
56  char line[256];
57  const int max_data_n = 100;
58  double data[max_data_n];
59 
60  if (!hecd->ReadParameter(rcode, "II", "ITEM", &ID, "SUBITEM", &subitem_n))
61  return false;
62 
63  while (1) {
64  if (!hecd->ReadLine(line)) break;
65 
66  if (line[0] == '!') {
67  hecd->PushReadLine(line);
68  break;
69  }
70 
71  n = hecd->ParseDoubleDataArray(line, data);
72 
73  if (n < 0) return false;
74 
75  CItemRec rec;
76 
77  if (n == subitem_n) {
78  rec.last_is_temp = false;
79 
80  } else if (n == subitem_n + 1) {
81  rec.last_is_temp = true;
82 
83  } else {
84  return false;
85  }
86 
87  for (i = 0; i < n; i++) {
88  rec.params.push_back(data[i]);
89  }
90 
91  RecList.push_back(rec);
92  }
93 
94  return true;
95 }
96 
97 bool CHECDB_Material::Read(CHECData *hecd, char *header_line) {
98  int item_n = 0;
99  int rcode[10];
100 
101  if (!hecd->ParseHeader(header_line, rcode, "SI", "NAME", name, "ITEM",
102  &item_n))
103  return false;
104 
105  for (int i = 0; i < item_n; i++) {
106  CItem item;
107 
108  if (!item.Read(hecd)) return false;
109 
110  ItemList.push_back(item);
111  }
112 
113  return true;
114 }
CHECDataBlock
Definition: CHECDataBlock.h:17
CHECDB_Material::~CHECDB_Material
virtual ~CHECDB_Material()
Definition: CHECDB_Material.cpp:18
CHECDB_Material::CItem::CItemRec::params
std::vector< double > params
Definition: CHECDB.h:140
CHECData::ParseHeader
virtual bool ParseHeader(char *header_line, int *rcode, const char *fmt,...)
Definition: CHECData.cpp:506
CHECDB_Material::CItem::Write
void Write(class CHECData *hecd)
Definition: CHECDB_Material.cpp:25
CHECData.h
HECDB_MATERIAL
@ HECDB_MATERIAL
Definition: CHECDB.h:24
CHECData::AddDataLineItems
virtual void AddDataLineItems(const char *fmt,...)
Definition: CHECData.cpp:201
CHECData::WriteParameter
virtual void WriteParameter(const char *fmt="",...)
Definition: CHECData.cpp:113
CHECData::PushReadLine
virtual void PushReadLine(const char *s)
Definition: CHECData.cpp:328
CHECData::ReadLine
virtual bool ReadLine(char *s, int size=256)
Definition: CHECData.cpp:307
CHECDB_Material::CItem::RecList
std::vector< CItemRec > RecList
Definition: CHECDB.h:143
CHECDB_Material::ItemList
std::vector< CItem > ItemList
Definition: CHECDB.h:166
CHECDB.h
CHECDB_Material::CItem
Definition: CHECDB.h:133
CHECDB_Material::Write
virtual void Write(class CHECData *hecd)
Definition: CHECDB_Material.cpp:41
CHECData::ReadParameter
virtual bool ReadParameter(int *rcode, const char *fmt,...)
Definition: CHECData.cpp:525
item_n
#define item_n
CHECDB_Material::Clear
virtual void Clear()
Definition: CHECDB_Material.cpp:20
CHECData::ParseDoubleDataArray
virtual int ParseDoubleDataArray(char *line, double *data)
Definition: CHECData.cpp:603
CHECData::WriteHeader
virtual void WriteHeader(const char *name, const char *fmt="",...)
Definition: CHECData.cpp:68
data
CNFData data
Definition: neu_reporter.cpp:18
CHECDB_Material::CItem::Read
bool Read(class CHECData *hecd)
Definition: CHECDB_Material.cpp:52
CHECData
Definition: CHECData.h:25
CHECDB_Material::CItem::SubItemNumber
int SubItemNumber()
Definition: CHECDB.h:145
CHECDB_Material::CItem::ID
int ID
Definition: CHECDB.h:135
CHECDB_Material::CItem::CItemRec
Definition: CHECDB.h:137
CHECDB_Material::CItem::CItemRec::last_is_temp
bool last_is_temp
Definition: CHECDB.h:139
CHECData::ClearDataLineBuffer
virtual void ClearDataLineBuffer()
Definition: CHECData.cpp:199
CHECDB_Material::name
char name[hec_name_size]
Definition: CHECDB.h:131
CHECData::WriteDataLine
virtual void WriteDataLine()
Definition: CHECData.cpp:234
CHECDB_Material::Read
virtual bool Read(class CHECData *hecd, char *header_line)
Definition: CHECDB_Material.cpp:97
CHECDB_Material::CHECDB_Material
CHECDB_Material()
Definition: CHECDB_Material.cpp:14