I had a go at developing a converter that creates ascii or binary vtu files from ascii frd files. The converter uses vtu11 (https://github.com/phmkopp/vtu11) for writing the vtu file. The frd file is mapped (https://github.com/mandreyel/mio) to allow fast access to its contents.
Please feel free to test the converter with your output files and I would appreciate any feedback or notes on any errors with the conversion. For a 3GB frd file the conversion time is 125seconds (approx 2 minutes) on my machine (Intel(R) Xeon(R) Silver 4210 CPU @ 2.20GHz 2.19 GHz (2 processors) - 128GB RAM)
Many thanks @SergioP . I have recompiled using Visual Studio only without the Intel Compiler; it is a bit slower but still works.
I did think about sharing the code but I need to spend some time cleaning it up…many test routines and other bits of code yet to be deleted.
ccx2paraview is actually one of the main tools in my numerical analysis workflow/toolkit along with PrePomax; so thank you for developing and sharing ccx2paraview.
The base for the converter is a rough C++ conversion of the frd reader from PrePomax and I would need some time to clean up the code before sharing. I got it up and running last weekend for my test cases and wanted some feedback from others with there models before trimming it down.
May I ask why you need the mapping? As far as I understand memory mapping is useful for random access on large files. Converting a file should be possible in a “read once from beginning to end while processing the data on-the-fly” fashion. Or do I miss something? I am particularly unfamiliar with VTU, but I do write converters of FE I/O files with focus on performance, so I am really curious about your decision to map the file.
I have a bad habit of trying to peek at my frd files while CalculiX is still running and have at times received a message that a write operation to the frd file could not be performed. With that in mind, I wanted something to grab and create a quick snapshot of the frd file so that the converter can work with it just in case CalculiX may need write access to the file; this was preferred rather than using std::getline to read the files contents line by line, particularly for very large files.
After the mapping, I use std::strtok_r to get the lines of text from the map; this is very similar to using std::getline. It is still a work in progress so I can compile another version using std::getline to see if there is any changes in the total conversion time.