FrontISTR 5.2.0
Large-scale structural analysis program with finit element method
Loading...
Searching...
No Matches
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
12using 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
97bool 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}
@ HECDB_MATERIAL
Definition: CHECDB.h:21
std::vector< double > params
Definition: CHECDB.h:140
bool Read(class CHECData *hecd)
std::vector< CItemRec > RecList
Definition: CHECDB.h:143
void Write(class CHECData *hecd)
virtual void Write(class CHECData *hecd)
virtual void Clear()
virtual ~CHECDB_Material()
std::vector< CItem > ItemList
Definition: CHECDB.h:166
virtual bool Read(class CHECData *hecd, char *header_line)
char name[hec_name_size]
Definition: CHECDB.h:131
virtual void WriteDataLine()
Definition: CHECData.cpp:234
virtual void WriteParameter(const char *fmt="",...)
Definition: CHECData.cpp:113
virtual int ParseDoubleDataArray(char *line, double *data)
Definition: CHECData.cpp:603
virtual bool ParseHeader(char *header_line, int *rcode, const char *fmt,...)
Definition: CHECData.cpp:506
virtual bool ReadLine(char *s, int size=256)
Definition: CHECData.cpp:307
virtual bool ReadParameter(int *rcode, const char *fmt,...)
Definition: CHECData.cpp:525
virtual void WriteHeader(const char *name, const char *fmt="",...)
Definition: CHECData.cpp:68
virtual void ClearDataLineBuffer()
Definition: CHECData.cpp:199
virtual void AddDataLineItems(const char *fmt,...)
Definition: CHECData.cpp:201
virtual void PushReadLine(const char *s)
Definition: CHECData.cpp:328
#define item_n
CNFData data