1 /*****************************************************************************
2  * Copyright (c) 2019 FrontISTR Commons
3  * This software is released under the MIT License, see LICENSE.txt
4  *****************************************************************************/
5 /*
6   CFSTRDB_Solution Ver.1.0
7 */
8 
9 #include "CFSTRDB.h"
10 #include "CHECData.h"
11 
12 using namespace std;
13 using namespace hecd_util;
14 
CFSTRDB_Solution()15 CFSTRDB_Solution::CFSTRDB_Solution()
16     : CFSTRDataBlock(FSTRDB_SOLUTION), type(TYPE_STATIC) {}
17 
~CFSTRDB_Solution()18 CFSTRDB_Solution::~CFSTRDB_Solution() { Clear(); }
19 
Clear()20 void CFSTRDB_Solution::Clear() { type = TYPE_STATIC; }
21 
Write(CHECData * hecd)22 void CFSTRDB_Solution::Write(CHECData *hecd) {
23   if (type == TYPE_UNKNOWN) return;
24 
25   switch (type) {
26     case TYPE_STATIC:
27       hecd->WriteHeader("!SOLUTION", "S", "TYPE", "STATIC");
28       break;
29 
30     case TYPE_HEAT:
31       hecd->WriteHeader("!SOLUTION", "S", "TYPE", "HEAT");
32       break;
33 
34     case TYPE_EIGEN:
35       hecd->WriteHeader("!SOLUTION", "S", "TYPE", "EIGEN");
36       break;
37 
38     default:
39       assert(0);
40   }
41 }
42 
Read(CHECData * hecd,char * header_line)43 bool CFSTRDB_Solution::Read(CHECData *hecd, char *header_line) {
44   int rcode[5];
45   char s[256];
46   char type_s[256];
47 
48   if (!hecd->ParseHeader(header_line, rcode, "S", "TYPE", s)) return false;
49 
50   cleanup_token(s, type_s);
51   toupper(type_s);
52 
53   if (strcmp(type_s, "STATIC") == 0) {
54     type = TYPE_STATIC;
55 
56   } else if (strcmp(type_s, "HEAT") == 0) {
57     type = TYPE_HEAT;
58 
59   } else if (strcmp(type_s, "EIGEN") == 0) {
60     type = TYPE_EIGEN;
61 
62   } else
63     return false;
64 
65   return true;
66 }
67