Read the Cap'n'Proto buffer from disk.
196{
197 LOG_SCOPE("read_from_file()", "RBEIMEvaluationDeserialization");
198
199 int fd = open(path.c_str(), O_RDONLY);
200 libmesh_error_msg_if(!fd, "Couldn't open the buffer file: " + path);
201
202
203 capnp::ReaderOptions reader_options;
204 reader_options.traversalLimitInWords = std::numeric_limits<uint64_t>::max();
205
206 std::unique_ptr<capnp::InputStreamMessageReader> message;
207 libmesh_try
208 {
209 if(use_packing)
210 message = std::make_unique<capnp::PackedFdMessageReader>(fd, reader_options);
211 else
212 message = std::make_unique<capnp::StreamFdMessageReader>(fd, reader_options);
213 }
214 libmesh_catch(...)
215 {
216 libmesh_error_msg("Failed to open capnp buffer");
217 }
218
219#ifndef LIBMESH_USE_COMPLEX_NUMBERS
220 RBData::RBEIMEvaluationReal::Reader rb_eim_eval_reader =
221 message->getRoot<RBData::RBEIMEvaluationReal>();
222#else
223 RBData::RBEIMEvaluationComplex::Reader rb_eim_eval_reader =
224 message->getRoot<RBData::RBEIMEvaluationComplex>();
225#endif
226
228 rb_eim_eval_reader);
229
230 int error = close(fd);
231 libmesh_error_msg_if(error, "Error closing a read-only file descriptor: " + path);
232}
void load_rb_eim_evaluation_data(RBEIMEvaluation &rb_eim_eval, RBEIMEvaluationReaderNumber &rb_eim_eval_reader)
Load an EIM RB evaluation from a corresponding reader structure in the buffer.