[Gmsh] Extracting the electric field data
Max Orok
morok at mevex.com
Sun Sep 30 17:29:28 CEST 2018
Hi Mansour,
Typically I use a script to extract all of the data and put in a vector,
etc.
Attached is an example in C++.
Through the GUI, you can use the command
Export -> Post-processing - Gmsh POS [or] Post-processing - Generic TXT
[or the other post processing formats]
For this method, the output files will still have the element data, but
only to tie the values to the right elements.
[image: image.png]
Sincerely,
Max Orok
On Sun, Sep 30, 2018 at 10:11 AM mansour alawi <mansour.alawi at gmail.com>
wrote:
> Dear there,
>
> I have been using GMSH software for quite some time to analyse the outcome
> of brain electric stimulation (TMS) generated by Simnibs software. However,
> recently I'm facing difficulties in extracting the electric field data, in
> other words, I wish to have the results into numbers instead of the colour
> bar as shown in the attachment.
>
> I have tried the export functions. However, the data I get wasn't labelled
> to differentiate the brain structure from the electric field data.
>
> I would like to seek your help in this regard, what function I can use to
> have the electric field data and brain structure data separated and in a
> numerical form not colour bar form.
>
> --
>
> *Best regards *
> *Mansour Ayman Alawi *
>
> _______________________________________________
> gmsh mailing list
> gmsh at onelab.info
> http://onelab.info/mailman/listinfo/gmsh
>
--
Max Orok
Contractor
www.mevex.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://onelab.info/pipermail/gmsh/attachments/20180930/9a74c1b0/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 97165 bytes
Desc: not available
URL: <http://onelab.info/pipermail/gmsh/attachments/20180930/9a74c1b0/attachment-0001.png>
-------------- next part --------------
#include "gmsh.h"
#include <iostream>
#include <sstream>
// WARNING: this script only works for extracting scalar data,
// however, it could be modified for higher orders
// function to extract scalar data from the result vector
inline std::vector<double> unformat_data(std::vector<std::vector<double>> data) {
std::vector<double> unformatted;
for (auto dataIt = data.cbegin(); dataIt != data.cend(); ++dataIt){
unformatted.emplace_back((*dataIt)[0]);
}
return unformatted;
}
int main(void) {
gmsh::initialize();
// open results mesh file
puts("opening file...");
gmsh::open("results.msh");
// get the numbers of all of the views
std::vector<int> viewTags;
gmsh::view::getTags(viewTags);
// gmsh data format variables
std::string dataLabel;
std::vector<std::string> allLabels;
std::vector<int> eltNumbers;
int numComponents;
double viewTime;
std::vector<std::vector<double>> data;
std::vector<std::vector<double>> viewData;
puts("extracting data");
// loop over views and extract element data
// assume that view tags are 0-N
for (auto view : viewTags){
printf("reading view %d\n", view);
gmsh::view::getModelData(view, 0, dataLabel, eltNumbers, data, viewTime, numComponents);
// get the view name in a slightly convoluted way
std::stringstream viewOpt;
viewOpt << "View[" << view << "].Name";
std::string viewName;
gmsh::option::getString(viewOpt.str(), viewName);
allLabels.emplace_back(viewName);
// save the (scalar) data we care about
viewData.emplace_back(unformat_data(data));
}
// print the first few data for each view
for (auto i = 0; i < allLabels.size(); ++i) {
printf("%s\n", allLabels[i].c_str());
for (auto j = 0; j < 10 && j < viewData[i].size(); ++j) {
printf("%f\n", viewData[i][j]);
}
}
gmsh::finalize();
}
More information about the gmsh
mailing list