Yes, why not. Could you send a sample output in the xy format? -- Anders
On Wed, Sep 08, 2010 at 06:11:22PM +0100, [email protected] wrote: > Hi, > > Is it possible to consider a new output format for 1D problems? > I'm using it for some time and now I've updated it to dolfin-0.9.9. > > The solutions file contain a list of x y coordinates. > (analogous to the xyz format) > It could be used directly with Xgraphic (wich is part of Xd3d), gnuplot or > with simple python/matplotlib scripts for instance. > > Hope it works. > > Nuno Lopes > > # Bazaar merge directive format 2 (Bazaar 0.90) > # revision_id: n...@an9-20100908165948-xqvxgx0834mlrkpt > # target_branch: bzr+ssh://bazaar.launchpad.net/~dolfin-\ > # core/dolfin/main/ > # testament_sha1: 1a4383b33310156a890260ef4c35ceba6d7930e8 > # timestamp: 2010-09-08 18:01:16 +0100 > # base_revision_id: [email protected] > # > # Begin patch > === modified file 'dolfin/io/File.cpp' > --- dolfin/io/File.cpp 2010-09-06 15:19:48 +0000 > +++ dolfin/io/File.cpp 2010-09-08 16:59:48 +0000 > @@ -9,19 +9,20 @@ > // Modified by Ola Skavhaug 2009. > // > // First added: 2002-11-12 > -// Last changed: 2010-09-06 > +// Last changed: 2010-09-08 > > +#include <boost/filesystem.hpp> > #include <fstream> > -#include <boost/filesystem.hpp> > +#include <dolfin/main/MPI.h> > +#include <dolfin/log/dolfin_log.h> > #include <dolfin/function/Function.h> > -#include <dolfin/log/dolfin_log.h> > -#include <dolfin/main/MPI.h> > #include "File.h" > #include "XMLFile.h" > #include "PythonFile.h" > #include "VTKFile.h" > #include "RAWFile.h" > #include "XYZFile.h" > +#include "XYFile.h" > #include "BinaryFile.h" > > using namespace dolfin; > @@ -34,14 +35,11 @@ > const std::string extension = boost::filesystem::extension(path); > > // Create directory if we have a parent path > - if (path.has_parent_path()) > + if ( path.has_parent_path() ) > { > const boost::filesystem::path directory = path.parent_path(); > - if (!boost::filesystem::is_directory(directory)) > - { > - cout << "Creating directory \"" << directory.string() << "\"." << endl; > - boost::filesystem::create_directories(directory); > - } > + cout << "Creating directory \"" << directory.string() << "\"." << endl; > + boost::filesystem::create_directories(directory); > } > > // Choose format based on extension > @@ -64,6 +62,8 @@ > file.reset(new RAWFile(filename)); > else if (extension == ".xyz") > file.reset(new XYZFile(filename)); > + else if (extension == ".xy") > + file.reset(new XYFile(filename)); > else if (extension == ".bin") > file.reset(new BinaryFile(filename)); > else > @@ -89,6 +89,9 @@ > case xyz: > file.reset(new XYZFile(filename)); > break; > + case xy: > + file.reset(new XYFile(filename)); > + break; > case binary: > file.reset(new BinaryFile(filename)); > break; > > === modified file 'dolfin/io/File.h' > --- dolfin/io/File.h 2010-08-26 21:44:34 +0000 > +++ dolfin/io/File.h 2010-09-08 16:59:48 +0000 > @@ -7,7 +7,7 @@ > // Modified by Ola Skavhaug 2009 > // > // First added: 2002-11-12 > -// Last changed: 2010-02-10 > +// Last changed: 2010-09-08 > > #ifndef __FILE_H > #define __FILE_H > @@ -33,7 +33,7 @@ > public: > > /// File formats > - enum Type {xml, vtk, python, raw, xyz, binary}; > + enum Type {xml, vtk, python, raw, xyz, xy, binary}; > > /// Create a file with given name > File(const std::string filename, std::string encoding = "ascii"); > > === added file 'dolfin/io/XYFile.cpp' > --- dolfin/io/XYFile.cpp 1970-01-01 00:00:00 +0000 > +++ dolfin/io/XYFile.cpp 2010-09-08 16:59:48 +0000 > @@ -0,0 +1,143 @@ > +// Copyright (C) 2005-2007 Garth N.Wells. > +// Licensed under the GNU LGPL Version 2.1. > +// > +// Modified by Nuno Lopes 2010. > +// > +// First added: 2010-09-08 > + > +#include <sstream> > +#include <fstream> > +#include <dolfin/fem/FiniteElement.h> > +#include <dolfin/mesh/Mesh.h> > +#include <dolfin/mesh/MeshFunction.h> > +#include <dolfin/mesh/Vertex.h> > +#include <dolfin/mesh/Cell.h> > +#include <dolfin/function/Function.h> > +#include <dolfin/function/FunctionSpace.h> > +#include <dolfin/la/Vector.h> > +#include "XYFile.h" > + > +using namespace dolfin; > + > +//---------------------------------------------------------------------------- > +XYFile::XYFile(const std::string filename) : GenericFile(filename) > +{ > + type = "XY"; > +} > +//---------------------------------------------------------------------------- > +XYFile::~XYFile() > +{ > + // Do nothing > +} > +//---------------------------------------------------------------------------- > +void XYFile::operator<<(const Function& u) > +{ > + // Update xy file name and clear file > + xy_name_update(counter); > + > + // Write results > + results_write(u); > + > + // Increase the number of times we have saved the function > + counter++; > + > + cout << "Saved function " << u.name() << " (" << u.label() > + << ") to file " << filename << " in xgraphic xy format." << endl; > +} > +//---------------------------------------------------------------------------- > +void XYFile::results_write(const Function& u) const > +{ > + // Open file > + std::ofstream fp(xy_filename.c_str(), std::ios_base::app); > + if (!fp) > + error("Unable to open file %s", filename.c_str()); > + > + const uint rank = u.function_space().element().value_rank(); > + if(rank > 1) > + error("Only scalar functions can be saved in xy format."); > + > + // Get number of components > + uint dim = 1; > + for (uint i = 0; i < rank; i++) > + dim *= u.function_space().element().value_dimension(i); > + > + const Mesh& mesh = u.function_space().mesh(); > + > + // Allocate memory for function values at vertices > + const uint size = mesh.num_vertices()*dim; > + Array<double> values(size); > + > + // Get function values at vertices > + u.compute_vertex_values(values,mesh); > + > + // Write function data at mesh vertices > + > + if ( dim > 1 ) > + error("Cannot handle XY file for non-scalar functions. "); > + > + > + > + std::ostringstream ss; > + ss << std::scientific; > + for (VertexIterator vertex(mesh); !vertex.end(); ++vertex) > + { > + ss.str(""); > + ss<<vertex->x(0)<<" "<< values[ vertex->index()]; > + ss<<std::endl; > + fp<<ss.str( ); > + } > +} > +//---------------------------------------------------------------------------- > +void XYFile::xy_name_update(int counter) > +{ > + std::string filestart, extension; > + std::ostringstream fileid, newfilename; > + > + fileid.fill('0'); > + fileid.width(6); > + > + filestart.assign(filename, 0, filename.find(".")); > + extension.assign(filename, filename.find("."), filename.size()); > + > + fileid << counter; > + newfilename << filestart << fileid.str() << ".xy"; > + > + xy_filename = newfilename.str(); > + > + // Make sure file is empty > + FILE* fp = fopen(xy_filename.c_str(), "w"); > + if (!fp) > + error("Unable to open file %s", filename.c_str()); > + fclose(fp); > +} > +//---------------------------------------------------------------------------- > +template<class T> > +void XYFile::mesh_function_write(T& meshfunction) > +{ > + // Update xy file name and clear file > + xy_name_update(counter); > + > + Mesh& mesh = meshfunction.mesh(); > + > + if( meshfunction.dim() != mesh.topology().dim() ) > + error("XY output of mesh functions is implemenetd for cell-based > functions only."); > + > + // Open file > + std::ofstream fp(xy_filename.c_str(), std::ios_base::app); > + > + fp<<mesh.num_cells( ) <<std::endl; > + for (CellIterator cell(mesh); !cell.end(); ++cell) > + fp << meshfunction.get( cell->index() ) << std::endl; > + > + // Close file > + fp.close(); > + > + // Increase the number of times we have saved the mesh function > + counter++; > + > + cout << "saved mesh function " << counter << " times." << endl; > + > + cout << "Saved mesh function " << mesh.name() << " (" << mesh.label() > + << ") to file " << filename << " in XY format." << endl; > +} > +//---------------------------------------------------------------------------- > > === added file 'dolfin/io/XYFile.h' > --- dolfin/io/XYFile.h 1970-01-01 00:00:00 +0000 > +++ dolfin/io/XYFile.h 2010-09-08 16:59:48 +0000 > @@ -0,0 +1,45 @@ > +// Copyright (C) 2005-2007 Garth N.Wells. > +// Licensed under the GNU LGPL Version 2.1. > +// > +// Modified by Nuno Lopes 2010. > +// > +// First added: 2010-02-17 > + > +#ifndef __XY_FILE_H > +#define __XY_FILE_H > + > +#include <fstream> > +#include "GenericFile.h" > + > +namespace dolfin > +{ > + > + class XYFile : public GenericFile > + { > + public: > + > + /// Simple and light file format for use with Xd3d. Supports > + /// scalar solution on 2D convex domains. The files only have a > + /// list of xy coordinates 'x , u(x)=y' > + > + XYFile(const std::string filename); > + ~XYFile(); > + > + void operator<< (const Function& u); > + > + private: > + > + void results_write(const Function& u) const; > + void xy_name_update(const int counter); > + > + template<class T> > + void mesh_function_write(T& meshfunction); > + > + // raw filename > + std::string xy_filename; > + > + }; > + > +} > + > +#endif > > # Begin bundle > IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWfjaqNUABrtfgEwQe////3/n > z+6////7YA29r5WttCNnVx3NUAjV0tbtXbYUXaba0MrYbWOgHCSRJhA0U8ym0TZTTEGIIaMammjN > QBoBoyCUQExNAIJiano0o/VD1PRGmg0NAaAADQHMJoyNDQyGEaGQ00aADEZMgGEAwCQohqaaqH5J > 6NAp41T1NpB+VHojJp6j1Gg00A9TRppocwmjI0NDIYRoZDTRoAMRkyAYQDAJEghMEaRkJk1N6k8n > lDUyGpoeU8k009Q0yaaaGmlKpJNcxzZQjSPW0Hcw/7n3bKz8acvVG2b1+tqn8Sh/B2djl50oTzPq > xY0ldJRM1+2GCkRwuijRiiKik9c6ms/cRZXkG2sYZUIx5sKXDoUK1MXdTgZha20XMJN94cceJYTI > OqrRba3WfPjHLdiSAqxKuIXWU87qTIpVzr0QXXRfC5sOlhTRfc9fahJFUJHEXxJB0NIl5tMeEZEa > 905ncykIbYdfAKmxfmWT6pYwz0H5Zn6cwleH3nUNNoGzXt0/FE4cuWnGeTGI9eTGHOTHL0o5Blpq > MTibikjtwsm5y40L5UpKcTWsnGHXZBB1RtTe7/DRDKM/PTZIsohSZm5MKdz9M711PgzsGzIMDUcu > u4PQMNydrQyNpE9bEW5p9IpdhD/DWE3zX11tFTyWEu6Q2/d0WQ15Pc1P4Y8rChDWEtXhTM5WZTCM > 3S4zN5B+GFMRhZvep6mFxahBrX9FTSUJnFWWuTz1LB+1JMxkrnMG2PPbasQapnHmLB7mrvb5xXG+ > GZkOgdTnRJhpa7VhttsGsUXbgPLuzPZZcGF293Y2+7LU3G6FEGpWFk4bZzGgx4yyQESY01jusaQl > sBmtKDKEyms8IN/TfEp1FZa4OiVJY9WUE2TYdA71lBx+nw8J7+8ILm2uNvptvPOeAeG8IppZq/HD > ySMhsz5dRZYVPGlb3SypFBwxpwxtoTGfOCIND7zrC7bbXD5L5drRLaNH+12d2T3ULtjjzte3RZDs > 6zdnMxlVq8eyEaMZFpG2y6NC+MIM9VnEd869bRnC3UV5MnPOsnh6RrAbAmNHDGIqgLGLRzntGZPP > N3nO+Nm15ObD5ItjVto04Ysm98Vee5dIB4QW5cEpagrYcUzyvg8M13kS2CVnSmXeaGNZ74cDgYtB > o0sBIAXcCiIzx2hns7Z9gDt3jR4KIzEywsbdgYaOcij7jhhs0onzuE+pX57lYhULkHDwsnP77b99 > Hi9WE5S9oQXLnMo5p/TcU3HkSQfMHcMbGDBsZDB/ByShSC3PNQZPnlsTEZZhI+HWcLxQ0m0n6fTK > Qh9ocAGSQhgcGkKEbDpyAgjFMwqqKMApygveVyoCVys1ZY0nIqUN5KzupbRAcoSV1GeYrVpvoFgK > iIN863nacfB0QLVA/C8CEcSJRWUbjdGks+8na8UirZRA7BSrJnmy3FLuQZAFxvlR3TvJTHv3Z8cw > LyUEZBumPNZrHkTvDbf4aZVQir2Jv3v92+JaKOEFE0I0+bcWXm+0w8Wqow3VtiuAEW0MsKpWyyvK > 86i96ah4WFTuDMOYG2tYlBRzN3LrM4RRgIzkLI3sY9FkZE7LHdSbRtDHUmhqA9Wu9Vw3M0bJ7AMO > xgi58sHS0FR6N0S8aYbXvGXII4cVMx6NHISOidTiII5ZGVVH9ZQc3aMrYK9LzQxIFBQDNxhKJENg > HQMNJkRbw49uQD6xex2cqj8zItM0kVAMrS0z5APIlmnk59VcVQywJDfFQhoxbxjEqIM2CuYPNKai > g6tolSZBhOKji21izYTQTKAPUAgLwhqaCWKlo0kZw6nsvpAwMCpXlC4DYua4gtcZDSDpK8wSA1iO > 7GkqAua+dLoJGwqxmkKsY85ps+UC6ZZv3+PIMizHRVXbVcWSY2NoZPFbcYlvcJuObdF8yqlE4RKS > KzE4scVRglQLYMhtRvtI645kw45r+6pzzCm856pqapr3qLi675VxiGHNj+wEulpNHxGLUxBbZLtL > 6N6DEdfhCDxjbXliPQz72cFu802DOgWoGrvc0ePRtnZxPZgGePiLFWpYULD5qFERG0zMmZl08hct > OhT80z9mZjn+mztQ2WZGRixuE99wsMLmYbzYvT/Kqauyp2qqDFpjDuGfHnh/VShToe+MPMVIWY0G > seEA3iV+x5AGJwNeHH+SRqdWz0FJEViEzYz0o7CDiHPCBzCs5xSQFF2ooHidsyxXWdaLheo6HBvj > x5o5jeN47JC0Y5DUlEWy70rVB067/ElOR8HEu32AVCjWlCDjtX+0KaFyKB54oeAzGs8z4ASieBWU > SvFLE3HlNEwRQ8UVEziSpcRbiFU9WwVR67PQHaBJulNJuGUeZC+Qhl7StPIcBzyBRUbSiHtPTip6 > PLzWqRPKAdEloCnMoBoZkEOaHBOlCPIkKDYWRXr8exjrwyizNASyPwECu8USAoggbnBmTAMa6mpC > oUaSW1FyGQeiAhkkwe2QR5FTfe/gO+CBwPEMzJie5QSQ3MdULhEtQNuXcJlYZY7RiQG2pC1+2KzE > w1hFRRbKD2Y+FoMbYgroQ6kQ/buiW8x1rv8AOZNQoEtOUvAp/LL1UJ7zu55Bax9v9Ck5TgZHK4vq > VHQeMrzHBSpVEDGogoFGBMTGgoyBhwA8p3ae7o5lLwLeFnhL6vX5tk9Bo1kjQICXIq6MiOLmFqUq > hPp8QFRhkfpAVGK3Q5DiYtEs2Xq4tpsmtSDrqMhf2qmu9zjSPR0jeByt2u8OuCcu5DSRcer5aDGe > 1W3l0MZ2No7Oxc0hevRWc63ECb8rWh23K1HyF6GNFMlZC8pz6ymuak41kkvcNDaBtIqpAzQ4ZmdE > mjHYZIDkmOizbFPxocajVhyFOklB2MuGcl0lghRJy6NEoFkHWDRdo+Ekh0nzhcC8Pi46MbGRNUJA > tu5cEJnVGXjsAK4QvqMIP+dhoWTA+hGRksyYYAWOgPf2BwgXFr9KLZU+jtwGCp1HfTRmQyMbUD4p > RoOgKiIqsRjC9VorzzsM+CNpTF4XF56UlXKGhMfp01Yhs711kQOnjvgMGLbQNuyGCOTlmk0Qz6Jm > XQcgi5HxYNoGgYNDEMTSQYJWR9uNgugbIC3YZICh2JeUhx8OWhZMMsOrL2BHHhf4Bei9MBsY0mJt > oJmwLzUfOlNbSx0cL7CVbNYXjGbbW72gIJqz3VJWQVVncGJWBwft5w2InMJAiMQ9PEwWa5GaRbEI > OAwSvGKGFBonefZSaEu8Sg6lqnUXY//NZ6+fZ04e7Wa+cFatT1BRAZAW9CzVJhA7C5OUlMws6AJK > aQGyyxpqEtx/ngSODLw0gVxFp6g07fgC15W2RCxWOsoFBtNg6SgNUGHyjo0KiQ6oUiTaPUVRnNBB > BA4Q45gWaA/M1JJUUiwaXKZBIDQ4oYZ81tTMsDnMFNBQZ5XAX+xwMlpDDkbVwYYigKCiC8BhGBeQ > q/AoXXI1nO9iEHhp6gKUGT2DrKJiBPb8riA0CXy+eO9ZJamCxeTQj0W0JBUS85jM2vOXsW3zlVDK > tRRDEb3IC8ji0YHMql5GZLZmCwLy8YMbB3++CW1Hsrgw80CcWcTtDUj3nAzQcCYU4KcsjWVGHisM > Fl7AVsjeRqJfHwBSWLMBsZFI4QwGhpQUa6gHDhTS7/Pj4NcqYBCmK7HYSvKqoJQW+V5mG1ORaCW1 > hLKWw5kYsoKECdYF8s9SPFnS0mlQBjRmQSWbba6W0zpqPslDP1MoCbgmRVDuLrgnp62ux7rbdVx4 > nIavK1Qk1azQJIvP7BdoWmxttGPT49QbA4spgTUZr1/XJlJk7xYEiMGGg6hbYMR9nYbUtaqgvb3i > qang60oDZsOBB/Qw1hk9AxR7x9kXwfOkpjCZaikxlsTURMoxk5I7gIkFWJbZNjBg2pxFtlDThYrk > tz9hdgBmB1wYz6XQWvfKKouotpTuFo0C9VA3UJs2pQWtt2EkkRdlEQoFlzakdbS8a/gBroaXIFWx > mfkDxZBiKAPaDBjTaCp+CwA7Qr67SvXUM1lBiUV2UabkGCl9z4fbbJOnOHkSzDyBX3gpl/mdvzKp > Ra4vR+c19bNGHEEyvAF7fp/XgCqCqjvxI9bL0wn79rcvRoeb0psfyQ2fltnJzZ9oEjpaDzphd8e4 > 7xzt4+WTr4AMBmvMDMMyTRNPm/4u5IpwoSHxtVGq > _______________________________________________ > Mailing list: https://launchpad.net/~dolfin > Post to : [email protected] > Unsubscribe : https://launchpad.net/~dolfin > More help : https://help.launchpad.net/ListHelp -- Anders _______________________________________________ Mailing list: https://launchpad.net/~dolfin Post to : [email protected] Unsubscribe : https://launchpad.net/~dolfin More help : https://help.launchpad.net/ListHelp

