FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
FSTRDB_util.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  Utility for CFSTRDB Ver.1.0
7 */
8 
9 #include <string.h>
10 #include <ctype.h>
11 #include "CFSTRDB.h"
12 #include "hecd_util.h"
13 
14 using namespace hecd_util;
15 
16 CHECDataBlock *CreateFSTRDataBlock(const char *header_name) {
17  char name[80];
18  char *np = name;
19  char *p = (char *)header_name;
20 
21  if (*p == '!') p++;
22 
23  *np = (char)toupper(*p);
24  p++;
25  np++;
26 
27  while (*p) {
28  *np = (char)tolower(*p);
29  p++;
30  np++;
31  }
32 
33  *np = 0;
34 #define GENERATE_CODE(x) \
35  else if (strcmp(#x, name) == 0) { \
36  return new CFSTRDB_##x(); \
37  }
38 
39  if (false)
40  ; // dummy
41 
42  GENERATE_CODE(Solution)
43  GENERATE_CODE(Solver)
44  GENERATE_CODE(Write)
45  GENERATE_CODE(Echo)
46  GENERATE_CODE(Step)
47  GENERATE_CODE(Static)
48  GENERATE_CODE(Boundary)
49  GENERATE_CODE(CLoad)
50  GENERATE_CODE(DLoad)
51  GENERATE_CODE(Temperature)
52  GENERATE_CODE(Reftemp)
53  GENERATE_CODE(Eigen)
54  GENERATE_CODE(Heat)
55  GENERATE_CODE(Fixtemp)
56  GENERATE_CODE(CFlux)
57  GENERATE_CODE(DFlux)
58  GENERATE_CODE(SFlux)
59  GENERATE_CODE(Film)
60  GENERATE_CODE(SFilm)
61  GENERATE_CODE(Radiate)
62  GENERATE_CODE(SRadiate)
63 #undef GENERATE_CODE
64  return 0;
65 }
66 
67 bool IsFSTRDataBlockName(const char *name) {
68  char s[256];
69 
70  if (name[0] == '!')
71  toupper(&name[1], s);
72 
73  else
74  toupper(name, s);
75 
76 #define GENERATE_CODE(x) \
77  else if (strcmp(#x, name) == 0) { \
78  return true; \
79  }
80 
81  if (false)
82  ; // dummy
83 
84  GENERATE_CODE(SOLUTION)
85  GENERATE_CODE(SOLVER)
86  GENERATE_CODE(WRITE)
88  GENERATE_CODE(STEP)
89  GENERATE_CODE(STATIC)
91  GENERATE_CODE(CLOAD)
92  GENERATE_CODE(DLOAD)
93  GENERATE_CODE(TEMPERATURE)
94  GENERATE_CODE(REFTEMP)
95  GENERATE_CODE(EIGEN)
96  GENERATE_CODE(HEAT)
97  GENERATE_CODE(FIXTEMP)
98  GENERATE_CODE(CFLUX)
99  GENERATE_CODE(DFLUX)
100  GENERATE_CODE(SFLUX)
101  GENERATE_CODE(FILM)
102  GENERATE_CODE(SFILM)
103  GENERATE_CODE(RADIATE)
104  GENERATE_CODE(SRADIATE)
105 #undef GENERATE_CODE
106  return false;
107 }
CHECDataBlock
Definition: CHECDataBlock.h:17
hecd_util::toupper
void toupper(char *s)
Definition: hecd_util.cpp:40
CFSTRDB.h
hecd_util::tolower
void tolower(char *s)
Definition: hecd_util.cpp:59
ECHO
#define ECHO
Definition: hecmw_ablex.c:1727
IsFSTRDataBlockName
bool IsFSTRDataBlockName(const char *name)
Definition: FSTRDB_util.cpp:67
hecd_util.h
CreateFSTRDataBlock
CHECDataBlock * CreateFSTRDataBlock(const char *header_name)
Definition: FSTRDB_util.cpp:16
hecd_util
Definition: hecd_util.cpp:11
GENERATE_CODE
#define GENERATE_CODE(x)
BOUNDARY
#define BOUNDARY
Definition: hecmw_partition.c:42