IOSS 2.0

Iovs_DatabaseIO.h
Go to the documentation of this file.
1 /*
2 * Copyright(C) 1999-2017 National Technology & Engineering Solutions
3 * of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
4 * NTESS, the U.S. Government retains certain rights in this software.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met:
9 *
10 * * Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 *
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 *
18 * * Neither the name of NTESS nor the names of its
19 * contributors may be used to endorse or promote products derived
20 * from this software without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
25 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
26 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
28 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
32 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 */
34 /*--------------------------------------------------------------------*/
35 /* Copyright 2000-2010 NTESS. */
36 /* Under the terms of Contract DE-AC04-94AL85000, there is a */
37 /* non-exclusive license for use of this work by or on behalf */
38 /* of the U.S. Government. Export of this program may require */
39 /* a license from the United States Government. */
40 /*--------------------------------------------------------------------*/
41
42 // -*- Mode: c++ -*-
43 #ifndef SIERRA_Iovs_DatabaseIO_h
44 #define SIERRA_Iovs_DatabaseIO_h
45
46 #include <Ioss_CodeTypes.h>
47 #include <Ioss_DBUsage.h>
48 #include <Ioss_DatabaseIO.h>
49 #include <Ioss_EntityType.h>
50 #include <Ioss_Field.h>
51 #include <Ioss_Map.h>
52 #include <Ioss_Utils.h>
53
54 #include <algorithm>
55 #include <ctime>
56 #include <map>
57 #include <set>
58 #include <sstream>
59 #include <string>
60 #include <vector>
61
62 class ParaViewCatalystIossAdapterBase;
63
64 /** \brief A namespace for the visualization database format.
65 */
66 namespace Iovs {
67
68 typedef std::set<std::pair<int64_t, int64_t>> EntityIdSet;
69
70 class DatabaseIO : public Ioss::DatabaseIO
71 {
72 public:
73 DatabaseIO(Ioss::Region *region, const std::string &filename, Ioss::DatabaseUsage db_usage,
74 MPI_Comm communicator, const Ioss::PropertyManager &props);
75 ~DatabaseIO() override;
76
77 // Check capabilities of input/output database... Returns an
78 // unsigned int with the supported Ioss::EntityTypes or'ed
79 // together. If "return_value & Ioss::EntityType" is set, then the
80 // database supports that type (e.g. return_value & Ioss::FACESET)
81 unsigned entity_field_support() const override
82 {
83 return Ioss::NODEBLOCK | Ioss::ELEMENTBLOCK | Ioss::NODESET | Ioss::SIDESET | Ioss::SIDEBLOCK;
84 }
85
86 static int parseCatalystFile(const std::string &filepath, std::string &json_result);
87
88 int int_byte_size_db() const override { return int_byte_size_api(); }
89
90 private:
91 bool begin__(Ioss::State state) override;
92 bool end__(Ioss::State state) override;
93
94 bool begin_state__(Ioss::Region *region, int state, double time) override;
95 bool end_state__(Ioss::Region *region, int state, double time) override;
96
97 void read_meta_data__() override;
98
99 // For the time being, treat vis as write only. Consider glue pipelines.
100 int64_t get_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data,
101 size_t data_size) const override
102 {
103 return 0;
104 }
105 int64_t get_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data,
106 size_t data_size) const override
107 {
108 return 0;
109 }
110 int64_t get_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data,
111 size_t data_size) const override
112 {
113 return 0;
114 }
115 int64_t get_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data,
116 size_t data_size) const override
117 {
118 return 0;
119 }
120 int64_t get_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data,
121 size_t data_size) const override
122 {
123 return 0;
124 }
125 int64_t get_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field, void *data,
126 size_t data_size) const override
127 {
128 return 0;
129 }
130 int64_t get_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data,
131 size_t data_size) const override
132 {
133 return 0;
134 }
135 int64_t get_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data,
136 size_t data_size) const override
137 {
138 return 0;
139 }
140 int64_t get_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data,
141 size_t data_size) const override
142 {
143 return 0;
144 }
145 int64_t get_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data,
146 size_t data_size) const override
147 {
148 return 0;
149 }
150 int64_t get_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data,
151 size_t data_size) const override
152 {
153 return 0;
154 }
155 int64_t get_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data,
156 size_t data_size) const override
157 {
158 return 0;
159 }
160
161 int64_t get_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field,
162 void *data, size_t data_size) const override
163 {
164 return 0;
165 }
166
167 int64_t put_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data,
168 size_t data_size) const override;
169
170 int64_t put_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data,
171 size_t data_size) const override;
172 int64_t put_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data,
173 size_t data_size) const override
174 {
175 return 0;
176 }
177 int64_t put_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data,
178 size_t data_size) const override
179 {
180 return 0;
181 }
182 int64_t put_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data,
183 size_t data_size) const override;
184 int64_t put_field_internal(const Ioss::SideBlock *eb, const Ioss::Field &field, void *data,
185 size_t data_size) const override;
186
187 int64_t put_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data,
188 size_t data_size) const override;
189 int64_t put_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data,
190 size_t data_size) const override
191 {
192 return 0;
193 }
194 int64_t put_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data,
195 size_t data_size) const override
196 {
197 return 0;
198 }
199 int64_t put_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data,
200 size_t data_size) const override
201 {
202 return 0;
203 }
204 int64_t put_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data,
205 size_t data_size) const override;
206 int64_t put_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data,
207 size_t data_size) const override
208 {
209 return 0;
210 }
211 int64_t put_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field,
212 void *data, size_t data_size) const override
213 {
214 return 0;
215 }
216
217 void write_meta_data();
218
219 static ParaViewCatalystIossAdapterBase *
220 load_plugin_library(const std::string &plugin_name, const std::string &plugin_library_name);
221
222 static std::string create_output_file_path(const std::string & input_deck_name,
223 const Ioss::PropertyManager &properties);
224 // static bool plugin_library_exists(const std::string &plugin_name);
225
226 int64_t handle_node_ids(void *ids, int64_t num_to_get);
227 int64_t handle_element_ids(const Ioss::ElementBlock *eb, void *ids, size_t num_to_get);
228
229 const Ioss::Map &get_node_map() const;
230 const Ioss::Map &get_element_map() const;
231
232 DatabaseIO(); // Do not implement
233 DatabaseIO(const DatabaseIO &); // Do not implement
234 DatabaseIO &operator=(const DatabaseIO &); // Do not implement
235
236 bool isInput;
237 bool singleProcOnly; // True if history or heartbeat which is only written from proc 0...
238 bool doLogging; // True if logging field input/output
239
240 std::string databaseTitle;
241 static std::string paraview_script_filename;
242 std::string catalyst_block_file_name;
243 std::string paraview_json_parse;
244 std::string sierra_input_deck_name;
245 std::string catalyst_output_directory;
246 std::string paraview_script_extra_filename;
247 int enableLogging;
248 int debugLevel;
249 int underscoreVectors;
250 int applyDisplacements;
251 int createSideSets;
252 int createNodeSets;
253 static int useCount;
254 static int uniqueID;
255
256 int nodeBlockCount;
257 int elementBlockCount;
258
259 // Handle to the ParaView Catalyst dynamic library
260 // that is loaded via Ioss user plugin at runtime.
261 ParaViewCatalystIossAdapterBase *pvcsa;
262 mutable bool globalNodeAndElementIDsCreated;
263 void create_global_node_and_element_ids() const;
264 mutable EntityIdSet ids_;
265 };
266 } // namespace Iovs
267
268 #endif
Iovs::EntityIdSet
std::set< std::pair< int64_t, int64_t > > EntityIdSet
Definition: Iovs_DatabaseIO.h:68
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::NodeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:105
Ioss_CodeTypes.h
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::NodeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:130
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:110
Iovs::DatabaseIO::entity_field_support
unsigned entity_field_support() const override
Definition: Iovs_DatabaseIO.h:81
Iovs::DatabaseIO::sierra_input_deck_name
std::string sierra_input_deck_name
Definition: Iovs_DatabaseIO.h:244
Ioss::SIDESET
Definition: Ioss_EntityType.h:48
Iovs::DatabaseIO::uniqueID
static int uniqueID
Definition: Iovs_DatabaseIO.h:254
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::ElementBlock *eb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:120
Iovs::DatabaseIO::singleProcOnly
bool singleProcOnly
Definition: Iovs_DatabaseIO.h:237
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:194
Iovs::DatabaseIO::globalNodeAndElementIDsCreated
bool globalNodeAndElementIDsCreated
Definition: Iovs_DatabaseIO.h:262
Ioss::DatabaseIO
An input or output Database.
Definition: Ioss_DatabaseIO.h:80
Ioss_DBUsage.h
Iovs::DatabaseIO::debugLevel
int debugLevel
Definition: Iovs_DatabaseIO.h:248
Iovs::DatabaseIO::create_output_file_path
static std::string create_output_file_path(const std::string &input_deck_name, const Ioss::PropertyManager &properties)
Definition: Iovs_DatabaseIO.C:231
Ioss::NodeSet
A collection of nodes.
Definition: Ioss_NodeSet.h:53
Ioss::FaceBlock
A collection of element faces with the same topology.
Definition: Ioss_FaceBlock.h:53
Iovs::DatabaseIO::nodeBlockCount
int nodeBlockCount
Definition: Iovs_DatabaseIO.h:256
Ioss::FaceSet
A collection of element faces.
Definition: Ioss_FaceSet.h:54
Ioss::ELEMENTBLOCK
Definition: Ioss_EntityType.h:43
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:161
Iovs::DatabaseIO::parseCatalystFile
static int parseCatalystFile(const std::string &filepath, std::string &json_result)
Definition: Iovs_DatabaseIO.C:409
Ioss::EdgeSet
A collection of element edges.
Definition: Ioss_EdgeSet.h:54
Iovs::DatabaseIO
Definition: Iovs_DatabaseIO.h:70
Iovs::DatabaseIO::useCount
static int useCount
Definition: Iovs_DatabaseIO.h:253
Iovs::DatabaseIO::load_plugin_library
static ParaViewCatalystIossAdapterBase * load_plugin_library(const std::string &plugin_name, const std::string &plugin_library_name)
Definition: Iovs_DatabaseIO.C:245
Ioss_Map.h
Iovs::DatabaseIO::pvcsa
ParaViewCatalystIossAdapterBase * pvcsa
Definition: Iovs_DatabaseIO.h:261
Ioss::SideBlock
A collection of element sides having the same topology.
Definition: Ioss_SideBlock.h:61
Iovs::DatabaseIO::catalyst_block_file_name
std::string catalyst_block_file_name
Definition: Iovs_DatabaseIO.h:242
Iovs::DatabaseIO::write_meta_data
void write_meta_data()
Definition: Iovs_DatabaseIO.C:738
Iovs::DatabaseIO::create_global_node_and_element_ids
void create_global_node_and_element_ids() const
Definition: Iovs_DatabaseIO.C:425
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:177
Iovs::DatabaseIO::doLogging
bool doLogging
Definition: Iovs_DatabaseIO.h:238
Ioss_DatabaseIO.h
Iovs::DatabaseIO::enableLogging
int enableLogging
Definition: Iovs_DatabaseIO.h:247
Ioss::State
State
Access states for a database.
Definition: Ioss_State.h:42
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:189
Iovs::DatabaseIO::catalyst_output_directory
std::string catalyst_output_directory
Definition: Iovs_DatabaseIO.h:245
Iovs::DatabaseIO::ids_
EntityIdSet ids_
Definition: Iovs_DatabaseIO.h:264
Ioss::SIDEBLOCK
Definition: Ioss_EntityType.h:51
Ioss::ElementBlock
A collection of elements having the same topology.
Definition: Ioss_ElementBlock.h:48
Iovs::DatabaseIO::paraview_script_filename
static std::string paraview_script_filename
Definition: Iovs_DatabaseIO.h:241
Iovs::DatabaseIO::createSideSets
int createSideSets
Definition: Iovs_DatabaseIO.h:251
Ioss::StructuredBlock
A structured zone – i,j,k.
Definition: Ioss_StructuredBlock.h:103
Ioss::DatabaseIO::int_byte_size_api
int int_byte_size_api() const
Returns 4 or 8.
Definition: Ioss_DatabaseIO.C:225
Ioss::DatabaseIO::properties
Ioss::PropertyManager properties
Definition: Ioss_DatabaseIO.h:516
Ioss::ElementSet
A collection of elements.
Definition: Ioss_ElementSet.h:54
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.C:451
Ioss::DatabaseUsage
DatabaseUsage
Specifies how an Ioss::DatabaseIO object will be used.
Definition: Ioss_DBUsage.h:40
Iovs::DatabaseIO::underscoreVectors
int underscoreVectors
Definition: Iovs_DatabaseIO.h:249
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::EdgeBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:172
Ioss_Utils.h
Iovs::DatabaseIO::get_element_map
const Ioss::Map & get_element_map() const
Definition: Iovs_DatabaseIO.C:957
Ioss::NodeBlock
A collection of all nodes in the region.
Definition: Ioss_NodeBlock.h:53
Iovs::DatabaseIO::~DatabaseIO
~DatabaseIO() override
Definition: Iovs_DatabaseIO.C:208
Iovs::DatabaseIO::isInput
bool isInput
Definition: Iovs_DatabaseIO.h:236
Iovs::DatabaseIO::applyDisplacements
int applyDisplacements
Definition: Iovs_DatabaseIO.h:250
Iovs
A namespace for the visualization database format.
Definition: Iovs_DatabaseIO.C:101
Ioss::NODEBLOCK
Definition: Ioss_EntityType.h:40
Ioss::Map
Definition: Ioss_Map.h:52
Ioss::CommSet
Definition: Ioss_CommSet.h:51
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::FaceBlock *nb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:115
Iovs::DatabaseIO::paraview_json_parse
std::string paraview_json_parse
Definition: Iovs_DatabaseIO.h:243
Iovs::DatabaseIO::handle_element_ids
int64_t handle_element_ids(const Ioss::ElementBlock *eb, void *ids, size_t num_to_get)
Definition: Iovs_DatabaseIO.C:929
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:155
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::EdgeSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:135
Ioss_Field.h
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::StructuredBlock *sb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:211
Iovs::DatabaseIO::paraview_script_extra_filename
std::string paraview_script_extra_filename
Definition: Iovs_DatabaseIO.h:246
anonymous_namespace{cth_pressure_map.C}::data
std::vector< char > data
Definition: cth_pressure_map.C:73
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:199
Ioss::Region
A grouping entity that contains other grouping entities.
Definition: Ioss_Region.h:98
Ioss::SideSet
A collection of element sides.
Definition: Ioss_SideSet.h:59
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::ElementSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:145
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::SideBlock *fb, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:125
Ioss::Field
Holds metadata for bulk data associated with a GroupingEntity.
Definition: Ioss_Field.h:47
Iovs::DatabaseIO::elementBlockCount
int elementBlockCount
Definition: Iovs_DatabaseIO.h:257
Iovs::DatabaseIO::put_field_internal
int64_t put_field_internal(const Ioss::CommSet *cs, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:206
MPI_Comm
int MPI_Comm
Definition: Ioss_CodeTypes.h:80
Iovs::DatabaseIO::end_state__
bool end_state__(Ioss::Region *region, int state, double time) override
Definition: Iovs_DatabaseIO.C:375
Iovs::DatabaseIO::get_node_map
const Ioss::Map & get_node_map() const
Definition: Iovs_DatabaseIO.C:938
Ioss::NODESET
Definition: Ioss_EntityType.h:44
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::FaceSet *ns, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:140
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::Region *reg, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:100
Ioss::PropertyManager
A collection of Ioss::Property objects.
Definition: Ioss_PropertyManager.h:49
Iovs::DatabaseIO::operator=
DatabaseIO & operator=(const DatabaseIO &)
Iovs::DatabaseIO::int_byte_size_db
int int_byte_size_db() const override
Definition: Iovs_DatabaseIO.h:88
Iovs::DatabaseIO::get_field_internal
int64_t get_field_internal(const Ioss::SideSet *fs, const Ioss::Field &field, void *data, size_t data_size) const override
Definition: Iovs_DatabaseIO.h:150
Iovs::DatabaseIO::end__
bool end__(Ioss::State state) override
Definition: Iovs_DatabaseIO.C:336
Iovs::DatabaseIO::DatabaseIO
DatabaseIO()
Ioss::EdgeBlock
A collection of element edges with the same topology.
Definition: Ioss_EdgeBlock.h:53
Iovs::DatabaseIO::begin__
bool begin__(Ioss::State state) override
Definition: Iovs_DatabaseIO.C:294
Ioss_EntityType.h
Iovs::DatabaseIO::databaseTitle
std::string databaseTitle
Definition: Iovs_DatabaseIO.h:240
Iovs::DatabaseIO::createNodeSets
int createNodeSets
Definition: Iovs_DatabaseIO.h:252
Iovs::DatabaseIO::read_meta_data__
void read_meta_data__() override
Definition: Iovs_DatabaseIO.C:407
Iovs::DatabaseIO::begin_state__
bool begin_state__(Ioss::Region *region, int state, double time) override
Definition: Iovs_DatabaseIO.C:360
Iovs::DatabaseIO::handle_node_ids
int64_t handle_node_ids(void *ids, int64_t num_to_get)
Definition: Iovs_DatabaseIO.C:794