Read the Cap'n'Proto buffer from disk.
138{
139 LOG_SCOPE("read_from_file()", "TransientRBEvaluationDeserialization");
140
141 int fd = open(path.c_str(), O_RDONLY);
142 libmesh_error_msg_if(!fd, "Couldn't open the buffer file: " + path);
143
144
145 capnp::ReaderOptions reader_options;
146 reader_options.traversalLimitInWords = std::numeric_limits<uint64_t>::max();
147
148 std::unique_ptr<capnp::InputStreamMessageReader> message;
149 libmesh_try
150 {
151 if(use_packing)
152 message = std::make_unique<capnp::PackedFdMessageReader>(fd, reader_options);
153 else
154 message = std::make_unique<capnp::StreamFdMessageReader>(fd, reader_options);
155 }
156 libmesh_catch(...)
157 {
158 libmesh_error_msg("Failed to open capnp buffer");
159 }
160
161#ifndef LIBMESH_USE_COMPLEX_NUMBERS
162 RBData::TransientRBEvaluationReal::Reader trans_rb_eval_reader =
163 message->getRoot<RBData::TransientRBEvaluationReal>();
164 RBData::RBEvaluationReal::Reader rb_eval_reader =
165 trans_rb_eval_reader.getRbEvaluation();
166#else
167 RBData::TransientRBEvaluationComplex::Reader trans_rb_eval_reader =
168 message->getRoot<RBData::TransientRBEvaluationComplex>();
169 RBData::RBEvaluationComplex::Reader rb_eval_reader =
170 trans_rb_eval_reader.getRbEvaluation();
171#endif
172
174 rb_eval_reader,
175 trans_rb_eval_reader,
176 read_error_bound_data);
177
178 int error = close(fd);
179 libmesh_error_msg_if(error, "Error closing a read-only file descriptor: " + path);
180}
void load_transient_rb_evaluation_data(TransientRBEvaluation &trans_rb_eval, RBEvaluationReaderNumber &rb_evaluation_reader, TransRBEvaluationReaderNumber &trans_rb_eval_reader, bool read_error_bound_data)
Load an RB evaluation from a corresponding reader structure in the buffer.