Basic functions for producing output files
When Montjoie is included, there are some standalone functions that can be used either to read or write output files, with the following format :
- Matlab (.dat) : format that can be read with function loadND.m, this format is also readable in Python
- Vtk (.vtk) : format that can be read by Paraview
- Medit (.bb) : format that can be read by Medit
A basic example for using these functions is proposed below
// definition of the display grid
GridInterpolationFull<Dimension2>l; grid;
// for instance : 2-D regular grid
Real_wp xmin = -2, xmax = 2, ymin = -2, ymax = 2;
int nbx = 100, nby = 100;
grid.SetPlaneOutput(xmin, xmax, ymin, ymax, nbx, nby);
// if you are unsure about node orderings
// you can compute position of the points of the grid
VectReal_wp teta; VectR2 points2d;
grid.GenerateGridPoints(points2d, teta);
// and use these position to express a function
VectReal_wp val(points2d.GetM()), val2;
for (int i = 0; i < points2d.GetM(); i++)
{
Real_wp x = points2d(i)(0), y = points2d(i)(1);
val(i) = sin(x)*cos(y);
}
// then you can produce a Matlab file with these datas
WriteMatlab(val, grid, "output.dat");
// you can also read datas
// val should be equal to val2 after calling this function
ReadMatlab(val2, grid, "output.dat", false);
// same stuff for vtk format :
val2.Clear();
WriteVtk(val, grid, "output.vtk");
ReadVtk(val2, grid, "output.vtk");
// For vtk outputs, it is also possible to produce outputs on unstructed grid, for example with a mesh :
Mesh<Dimension2> mesh;
mesh.Read("test.mesh");
val.Reallocate(mesh.GetNbVertices());
for (int i = 0; i < val.GetM(); i++)
{
Real_wp x = mesh.Vertex(i)(0), y = mesh.Vertex(i)(1);
val(i) = sin(x)*cos(y);
}
mesh.Write("output.vtk", false, false);
// then you append to the file the datas
ofstream file_out("output.vtk", ios::app);
WriteVtk(val, "u", file_out, false, false);
file_out.close();
An implementation of classes for writing seismogramms with buffering (to prevent from writing on the disk at each iteration) is also proposed by the classes WriteOnTheGoWithBuffer and WriteOnTheGoWithTinyBuffer.
WriteOnTheGoWithBuffer<Real_wp> buffer;
// the second argument is the number of vectors stored in the buffer
buffer.Init("sismo.dat". 100);
VectReal_wp x(N);
for (int nt = 0; nt < nb_iterations; nt++)
{
// evolution of x
// ...
// each time you want to print something on the file, you call AddVect
buffer.AddVect(x);
}
// at the end, buffer is released
buffer.CloseBuffer();
Functions for basic inputs/outputs
| ReadMedit | reads an output file .bb |
| WriteMedit | writes a solution in an output file .bb |
| ReadMeshData | reads an output file .elb |
| WriteMeshData | writes values of a physical index in an output file .elb |
| ReadInputFile | reads a data file |
| getElement_Equation | returns the finite element and equation given in a data file |
| swapEndian | swaps octets of a float, double or integer |
| WriteVtk | writes a vtk output file |
| ReadVtk | reads data from a vtk output file |
| WriteBinaryDoubleOrFloat | writes a vector in double or single precision and in binary format |
| ReadBinaryDoubleOrFloat | reads a vector in double or single precision from a binary file |
| WriteOnTheGo | appends values to an output file |
Methods of class WriteOnTheGoWithTinyBuffer/WriteOnTheGoWithBuffer
| Init | initialisation of the buffer |
| AddTinyVect | adds a vector to the list of vectors to write in the file |
| AddVect | adds a vector to the list of vectors to write in the file |
| CloseBuffer | writes remaining vectors stored in the buffer, and closes the file. |