← Back to team overview

dolfin team mailing list archive

Re: VTK and discontinuous elements

 

Fixed. Check that it works.

Minh, thanks for the patch.

/Anders

On Tue, Oct 10, 2006 at 05:21:32PM +0200, Dag Lindbo wrote:
> It works fine! (I have not tried with tetrahedral elements) //Dag
> 
> > Dag, can you confirm that this works for you as well?
> >
> > If so, I will add it.
> >
> > Thanks
> > /Anders
> >
> > On Tue, Oct 10, 2006 at 11:37:23AM +0200, Minh Do Quang wrote:
> >> Hi,
> >>
> >> I did some changes in OpenDXFile.cpp in order to work with triangles.
> >> Let's see the attachment for both source code and the DX net file.
> >>
> >> Regards,
> >> / Minh
> >>
> >> Dag Lindbo wrote:
> >>
> >> >Hi all,
> >> >
> >> >Am I right to conclude that Paraview will fail to produce a sensible
> >> >visualization of a function on a discontinuous Lagrange element of
> >> order >
> >> >0? I guess this has to do with how the degrees of freedom are placed on
> >> >such an element. Anyway, it's not very important for me to do these
> >> >visualizations - but if someone has a neat way to do it I would be glad
> >> to
> >> >hear.
> >> >
> >> >By the way, is there a particular reason for only supporting
> >> tetrahedral
> >> >cells in the OpenDX output format? If not, I might get around to
> >> extending
> >> >to triangles (since I really like DX).
> >> >
> >> >Best regards,
> >> >Dag Lindbo
> >> >
> >> >_______________________________________________
> >> >DOLFIN-dev mailing list
> >> >DOLFIN-dev@xxxxxxxxxx
> >> >http://www.fenics.org/mailman/listinfo/dolfin-dev
> >> >
> >> >
> >>
> >>
> >
> >> // Copyright (C) 2003-2006 Johan Hoffman and Anders Logg.
> >> // Licensed under the GNU GPL Version 2.
> >> //
> >> // Modified by Minh Do-Quang 2006
> >> //
> >> // First added:  2003-07-15
> >> // Last changed: 2006-09-15
> >>
> >> #include <stdio.h>
> >> #include <dolfin/ParameterSystem.h>
> >> #include <dolfin/Mesh.h>
> >> #include <dolfin/Function.h>
> >> #include <dolfin/dolfin_log.h>
> >> #include <dolfin/OpenDXFile.h>
> >>
> >> using namespace dolfin;
> >>
> >> //-?---------------------------------------------------------------------------
> >> OpenDXFile::OpenDXFile(const std::string filename) :
> >>   GenericFile(filename),
> >>   save_each_mesh(dolfin::get("save each mesh")),
> >>   event_saving_mesh("Saving mesh to OpenDX file."),
> >>   event_saving_function("Saving function to OpenDX file.")
> >> {
> >>   type = "OpenDX";
> >>   series_pos = 0;
> >> }
> >> //-?---------------------------------------------------------------------------
> >> OpenDXFile::~OpenDXFile()
> >> {
> >>   // Do nothing
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::operator<<(Mesh& mesh)
> >> {
> >>   event_saving_mesh();
> >>
> >>   // Open file
> >>   FILE* fp = fopen(filename.c_str(), "r+");
> >>   fseek(fp, 0L, SEEK_END);
> >>
> >>   // Write header first time
> >>   if ( ftell(fp) == 0 )
> >>     writeHeader(fp);
> >>
> >>   // Write mesh
> >>   writeMesh(fp, mesh);
> >>
> >>   // Write mesh data
> >>   writeMeshData(fp, mesh);
> >>
> >>   // Close file
> >>   fclose(fp);
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::operator<<(Function& u)
> >> {
> >>   event_saving_function();
> >>
> >>   // Open file
> >>   FILE* fp = fopen(filename.c_str(), "r+");
> >>   fseek(fp, 0L, SEEK_END);
> >>
> >>   // Remove previous time series
> >>   if ( frames.size() > 0 )
> >>     removeSeries(fp);
> >>
> >>   // Write header first time
> >>   if ( ftell(fp) == 0 )
> >>     writeHeader(fp);
> >>
> >>   // Write mesh
> >>   if ( frames.size() == 0 || save_each_mesh )
> >>     writeMesh(fp, u.mesh());
> >>
> >>   // Write function
> >>   writeFunction(fp, u);
> >>
> >>   // Write time series
> >>   writeSeries(fp, u);
> >>
> >>   // Close file
> >>   fclose(fp);
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::writeHeader(FILE* fp)
> >> {
> >>   fprintf(fp,"# Output from DOLFIN version %s.\n", DOLFIN_VERSION);
> >>   fprintf(fp,"# Format intended for use with OpenDX (Data
> >> Explorer).\n");
> >>   fprintf(fp,"#\n");
> >>   fprintf(fp,"\n");
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::writeMesh(FILE* fp, Mesh& mesh)
> >> {
> >>   int meshdim, celldim;
> >>   if( mesh.type() == Mesh::tetrahedra ) {
> >>     meshdim = 3;
> >>     celldim = 4;
> >>   } else {
> >>     meshdim = 2;
> >>     celldim = 3;
> >>   }
> >>
> >>   // Write vertices
> >>   fprintf(fp, "# A list of all vertex positions\n");
> >>   fprintf(fp, "object \"vertices %d\" class array type float rank 1
> >> shape %d items %d lsb binary data follows\n",
> >> 	    (int)frames.size(), meshdim, mesh.numVertices());
> >>
> >>   for (VertexIterator n(mesh); !n.end(); ++n)
> >>   {
> >>     Point p = n->coord();
> >>
> >>     float x = (float) p.x;
> >>     float y = (float) p.y;
> >>     float z = (float) p.z;
> >>
> >>     fwrite(&x, sizeof(float), 1, fp);
> >>     fwrite(&y, sizeof(float), 1, fp);
> >>     if ( mesh.type() == Mesh::tetrahedra )
> >>       fwrite(&z, sizeof(float), 1, fp);
> >>   }
> >>   fprintf(fp,"\n\n");
> >>
> >>   // Write cells
> >>   fprintf(fp, "# A list of all cells (connections)\n");
> >>   fprintf(fp, "object \"cells %d\" class array type int rank 1 shape %d
> >> items %d lsb binary data follows\n",
> >> 	  (int)frames.size(), celldim, mesh.numCells());
> >>
> >>   for (CellIterator c(mesh); !c.end(); ++c)
> >>   {
> >>     for (VertexIterator n(c); !n.end(); ++n)
> >>     {
> >>       int id  = n->id();
> >>       fwrite(&id, sizeof(int), 1, fp);
> >>     }
> >>   }
> >>   fprintf(fp, "\n");
> >>   if ( mesh.type() == Mesh::tetrahedra )
> >>     fprintf(fp, "attribute \"element type\" string \"tetrahedra\"\n");
> >>   else if ( mesh.type() == Mesh::triangles )
> >>     fprintf(fp, "attribute \"element type\" string \"triangles\"\n");
> >>   fprintf(fp, "attribute \"ref\" string \"positions\"\n");
> >>   fprintf(fp, "\n");
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::writeMeshData(FILE* fp, Mesh& mesh)
> >> {
> >>   // Write data for a given mesh to create an object that can be
> >> visualized
> >>   // when no data is associated with the mesh. This is necessary when we
> >> only
> >>   // want to save the mesh.
> >>
> >>   // Check that we don't try to write mesh data at the same time as we
> >>   // write a time series
> >>   cout << "writeMeshData "<<frames.size()<<endl;
> >>   if ( frames.size() > 0 )
> >>     dolfin_error("Mesh data and time series cannot be mixed for OpenDX
> >> file format.");
> >>
> >>   // Write data (cell diameter)
> >>   fprintf(fp,"# Cell diameter\n");
> >>   fprintf(fp,"object \"diameter\" class array type float rank 0 items %d
> >> lsb binary data follows\n",
> >> 	  mesh.numCells());
> >>
> >>   for (CellIterator c(mesh); !c.end(); ++c)
> >>   {
> >>     float value = static_cast<float>(c->diameter());
> >>     fwrite(&value, sizeof(float), 1, fp);
> >>   }
> >>   fprintf(fp, "\n");
> >>   fprintf(fp, "attribute \"dep\" string \"connections\"\n");
> >>   fprintf(fp, "\n");
> >>
> >>   // Write the mesh
> >>   fprintf(fp, "# The mesh\n");
> >>   fprintf(fp, "object \"Mesh\" class field\n");
> >>   fprintf(fp, "component \"positions\" value \"vertices 0\"\n");
> >>   fprintf(fp, "component \"connections\" value \"cells 0\"\n");
> >>   fprintf(fp, "component \"data\" value \"diameter\"\n");
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::writeFunction(FILE* fp, Function& u)
> >> {
> >>   // Write header for object
> >>   fprintf(fp,"# Values for [%s] at nodal points, frame %d\n",
> >> u.label().c_str(), (int)frames.size());
> >>   fprintf(fp,"object \"data %d\" class array type float rank 1 shape %d
> >> items %d lsb binary data follows\n",
> >> 	  (int)frames.size(), u.vectordim(), u.mesh().numVertices());
> >>
> >>   // Write data
> >>   for (VertexIterator n(u.mesh()); !n.end(); ++n)
> >>   {
> >>     for(unsigned int i=0; i<u.vectordim(); i++) {
> >>       float value = static_cast<float>(u(*n, i));
> >>       fwrite(&value, sizeof(float), 1, fp);
> >>     }
> >>   }
> >>   fprintf(fp,"\n");
> >>   fprintf(fp,"attribute \"dep\" string \"positions\"\n\n");
> >>
> >>   // Write field
> >>   fprintf(fp,"# Field for [%s], frame %d\n", u.label().c_str(),
> >> (int)frames.size());
> >>   fprintf(fp,"object \"field %d\" class field\n", (int)frames.size());
> >>   if ( save_each_mesh )
> >>     fprintf(fp,"component \"positions\" value \"vertices %d\"\n",
> >> (int)frames.size());
> >>   else
> >>     fprintf(fp,"component \"positions\" value \"vertices 0\"\n");
> >>   if ( save_each_mesh )
> >>     fprintf(fp,"component \"connections\" value \"cells %d\"\n",
> >> (int)frames.size());
> >>   else
> >>     fprintf(fp,"component \"connections\" value \"cells 0\"\n");
> >>   fprintf(fp,"component \"data\" value \"data %d\"\n\n",
> >> (int)frames.size());
> >>
> >>   // Add the new frame
> >>   Frame frame(u.time());
> >>   frames.push_back(frame);
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::writeSeries(FILE* fp, Function& u)
> >> {
> >>   // Get position in file at start of series
> >>   series_pos = ftell(fp);
> >>
> >>   // Write the time series
> >>   fprintf(fp,"# Time series for [%s]\n", u.label().c_str());
> >>   fprintf(fp,"object \"Time series\" class series\n");
> >>
> >>   for (unsigned int i = 0; i < frames.size(); i++)
> >>   {
> >>     fprintf(fp,"member %u value \"field %u\" position %f\n",
> >> 	    i, i, frames[i].time);
> >>   }
> >>
> >>   fprintf(fp,"\n");
> >> }
> >> //-?---------------------------------------------------------------------------
> >> void OpenDXFile::removeSeries(FILE* fp)
> >> {
> >>   // Remove the previous series (the new one will be placed at the end).
> >>   // This makes sure that we have a valid dx-file even if we kill the
> >>   // program after a few frames. Note that if someone puts a "#"
> >>   // inside a comment we are in trouble.
> >>
> >>   fseek(fp, series_pos, SEEK_SET);
> >>   fflush(fp);
> >> }
> >> //-?---------------------------------------------------------------------------
> >> // OpenDXFile::Frame
> >> //-?---------------------------------------------------------------------------
> >> OpenDXFile::Frame::Frame(real time) : time(time)
> >> {
> >>   // Do nothing
> >> }
> >> //-?---------------------------------------------------------------------------
> >> OpenDXFile::Frame::~Frame()
> >> {
> >>   // Do nothing
> >> }
> >>
> >
> >> //
> >> // time: Fri Sep 15 17:50:13 2006
> >> //
> >> // version: 3.2.0 (format), 4.4.0 (DX)
> >> //
> >> //
> >> // MODULE main
> >> // workspace: width = 389, height = 294
> >> // layout: snap = 0, width = 50, height = 50, align = NN
> >> //
> >> macro main(
> >> ) -> (
> >> ) {
> >>     //
> >>     // node Import[1]: x = 24, y = 23, inputs = 6, label = Import
> >>     // input[1]: defaulting = 0, visible = 1, type = 32, value =
> >> "poisson.dx"
> >>     // input[2]: defaulting = 0, visible = 1, type = 32, value = "field
> >> 0"
> >>     //
> >> main_Import_1_out_1 =
> >>     Import(
> >>     main_Import_1_in_1,
> >>     main_Import_1_in_2,
> >>     main_Import_1_in_3,
> >>     main_Import_1_in_4,
> >>     main_Import_1_in_5,
> >>     main_Import_1_in_6
> >>     ) [instance: 1, cache: 1];
> >>     //
> >>     // node AutoColor[1]: x = 174, y = 232, inputs = 10, label =
> >> AutoColor
> >>     //
> >> main_AutoColor_1_out_1,
> >> main_AutoColor_1_out_2 =
> >>     AutoColor(
> >>     main_Import_1_out_1,
> >>     main_AutoColor_1_in_2,
> >>     main_AutoColor_1_in_3,
> >>     main_AutoColor_1_in_4,
> >>     main_AutoColor_1_in_5,
> >>     main_AutoColor_1_in_6,
> >>     main_AutoColor_1_in_7,
> >>     main_AutoColor_1_in_8,
> >>     main_AutoColor_1_in_9,
> >>     main_AutoColor_1_in_10
> >>     ) [instance: 1, cache: 1];
> >>     //
> >>     // node Image[1]: x = 311, y = 218, inputs = 49, label = Image
> >>     // input[1]: defaulting = 0, visible = 0, type = 32, value =
> >> "Image_1"
> >>     // input[4]: defaulting = 0, visible = 0, type = 1, value = 1
> >>     // input[5]: defaulting = 0, visible = 0, type = 8, value = [0.5 0.5
> >> 0]
> >>     // input[6]: defaulting = 0, visible = 0, type = 8, value = [0.5 0.5
> >> 3.55379]
> >>     // input[7]: defaulting = 0, visible = 0, type = 5, value = 1.90447
> >>     // input[8]: defaulting = 0, visible = 0, type = 1, value = 640
> >>     // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.75
> >>     // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0]
> >>     // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0
> >>     // input[12]: defaulting = 0, visible = 0, type = 1, value = 0
> >>     // input[14]: defaulting = 0, visible = 0, type = 1, value = 1
> >>     // input[15]: defaulting = 1, visible = 0, type = 32, value = "none"
> >>     // input[16]: defaulting = 1, visible = 0, type = 32, value = "none"
> >>     // input[17]: defaulting = 1, visible = 0, type = 1, value = 1
> >>     // input[18]: defaulting = 1, visible = 0, type = 1, value = 1
> >>     // input[19]: defaulting = 0, visible = 0, type = 1, value = 0
> >>     // input[29]: defaulting = 1, visible = 0, type = 3, value = 0
> >>     // depth: value = 24
> >>     // window: position = (0.5419,0.4650), size = 0.4088x0.4350
> >>     // internal caching: 1
> >>     // interaction mode = NONE
> >>     //
> >> main_Image_1_out_1,
> >> main_Image_1_out_2,
> >> main_Image_1_out_3 =
> >>     Image(
> >>     main_Image_1_in_1,
> >>     main_AutoColor_1_out_1,
> >>     main_Image_1_in_3,
> >>     main_Image_1_in_4,
> >>     main_Image_1_in_5,
> >>     main_Image_1_in_6,
> >>     main_Image_1_in_7,
> >>     main_Image_1_in_8,
> >>     main_Image_1_in_9,
> >>     main_Image_1_in_10,
> >>     main_Image_1_in_11,
> >>     main_Image_1_in_12,
> >>     main_Image_1_in_13,
> >>     main_Image_1_in_14,
> >>     main_Image_1_in_15,
> >>     main_Image_1_in_16,
> >>     main_Image_1_in_17,
> >>     main_Image_1_in_18,
> >>     main_Image_1_in_19,
> >>     main_Image_1_in_20,
> >>     main_Image_1_in_21,
> >>     main_Image_1_in_22,
> >>     main_Image_1_in_23,
> >>     main_Image_1_in_24,
> >>     main_Image_1_in_25,
> >>     main_Image_1_in_26,
> >>     main_Image_1_in_27,
> >>     main_Image_1_in_28,
> >>     main_Image_1_in_29,
> >>     main_Image_1_in_30,
> >>     main_Image_1_in_31,
> >>     main_Image_1_in_32,
> >>     main_Image_1_in_33,
> >>     main_Image_1_in_34,
> >>     main_Image_1_in_35,
> >>     main_Image_1_in_36,
> >>     main_Image_1_in_37,
> >>     main_Image_1_in_38,
> >>     main_Image_1_in_39,
> >>     main_Image_1_in_40,
> >>     main_Image_1_in_41,
> >>     main_Image_1_in_42,
> >>     main_Image_1_in_43,
> >>     main_Image_1_in_44,
> >>     main_Image_1_in_45,
> >>     main_Image_1_in_46,
> >>     main_Image_1_in_47,
> >>     main_Image_1_in_48,
> >>     main_Image_1_in_49
> >>     ) [instance: 1, cache: 1];
> >>     //
> >>     // node Print[1]: x = 33, y = 119, inputs = 3, label = Print
> >>     // input[2]: defaulting = 0, visible = 1, type = 32, value = "o"
> >>     //
> >>     Print(
> >>     main_Import_1_out_1,
> >>     main_Print_1_in_2,
> >>     main_Print_1_in_3
> >>     ) [instance: 1, cache: 1];
> >>     //
> >>     // node Select[1]: x = 154, y = 106, inputs = 3, label = Select
> >>     // input[2]: defaulting = 0, visible = 1, type = 32, value = "field
> >> 0"
> >>     //
> >> main_Select_1_out_1 =
> >>     Select(
> >>     main_Import_1_out_1,
> >>     main_Select_1_in_2,
> >>     main_Select_1_in_3
> >>     ) [instance: 1, cache: 1];
> >>     //
> >>     // node ShowConnections[1]: x = 256, y = 79, inputs = 1, label =
> >> ShowConnections
> >>     //
> >> main_ShowConnections_1_out_1 =
> >>     ShowConnections(
> >>     main_Import_1_out_1
> >>     ) [instance: 1, cache: 1];
> >> // network: end of macro body
> >> CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2);
> >> }
> >> main_Import_1_in_1 = "poisson.dx";
> >> main_Import_1_in_2 = "field 0";
> >> main_Import_1_in_3 = NULL;
> >> main_Import_1_in_4 = NULL;
> >> main_Import_1_in_5 = NULL;
> >> main_Import_1_in_6 = NULL;
> >> main_Import_1_out_1 = NULL;
> >> main_AutoColor_1_in_2 = NULL;
> >> main_AutoColor_1_in_3 = NULL;
> >> main_AutoColor_1_in_4 = NULL;
> >> main_AutoColor_1_in_5 = NULL;
> >> main_AutoColor_1_in_6 = NULL;
> >> main_AutoColor_1_in_7 = NULL;
> >> main_AutoColor_1_in_8 = NULL;
> >> main_AutoColor_1_in_9 = NULL;
> >> main_AutoColor_1_in_10 = NULL;
> >> main_AutoColor_1_out_1 = NULL;
> >> macro Image(
> >>         id,
> >>         object,
> >>         where,
> >>         useVector,
> >>         to,
> >>         from,
> >>         width,
> >>         resolution,
> >>         aspect,
> >>         up,
> >>         viewAngle,
> >>         perspective,
> >>         options,
> >>         buttonState = 1,
> >>         buttonUpApprox = "none",
> >>         buttonDownApprox = "none",
> >>         buttonUpDensity = 1,
> >>         buttonDownDensity = 1,
> >>         renderMode = 0,
> >>         defaultCamera,
> >>         reset,
> >>         backgroundColor,
> >>         throttle,
> >>         RECenable = 0,
> >>         RECfile,
> >>         RECformat,
> >>         RECresolution,
> >>         RECaspect,
> >>         AAenable = 0,
> >>         AAlabels,
> >>         AAticks,
> >>         AAcorners,
> >>         AAframe,
> >>         AAadjust,
> >>         AAcursor,
> >>         AAgrid,
> >>         AAcolors,
> >>         AAannotation,
> >>         AAlabelscale,
> >>         AAfont,
> >>         interactionMode,
> >>         title,
> >>         AAxTickLocs,
> >>         AAyTickLocs,
> >>         AAzTickLocs,
> >>         AAxTickLabels,
> >>         AAyTickLabels,
> >>         AAzTickLabels,
> >>         webOptions) -> (
> >>         object,
> >>         camera,
> >>         where)
> >> {
> >>     ImageMessage(
> >>         id,
> >>         backgroundColor,
> >>         throttle,
> >>         RECenable,
> >>         RECfile,
> >>         RECformat,
> >>         RECresolution,
> >>         RECaspect,
> >>         AAenable,
> >>         AAlabels,
> >>         AAticks,
> >>         AAcorners,
> >>         AAframe,
> >>         AAadjust,
> >>         AAcursor,
> >>         AAgrid,
> >>         AAcolors,
> >>         AAannotation,
> >>         AAlabelscale,
> >>         AAfont,
> >>         AAxTickLocs,
> >>         AAyTickLocs,
> >>         AAzTickLocs,
> >>         AAxTickLabels,
> >>         AAyTickLabels,
> >>         AAzTickLabels,
> >>         interactionMode,
> >>         title,
> >>         renderMode,
> >>         buttonUpApprox,
> >>         buttonDownApprox,
> >>         buttonUpDensity,
> >>         buttonDownDensity) [instance: 1, cache: 1];
> >>     autoCamera =
> >>         AutoCamera(
> >>             object,
> >>             "front",
> >>             object,
> >>             resolution,
> >>             aspect,
> >>             [0,1,0],
> >>             perspective,
> >>             viewAngle,
> >>             backgroundColor) [instance: 1, cache: 1];
> >>     realCamera =
> >>         Camera(
> >>             to,
> >>             from,
> >>             width,
> >>             resolution,
> >>             aspect,
> >>             up,
> >>             perspective,
> >>             viewAngle,
> >>             backgroundColor) [instance: 1, cache: 1];
> >>     coloredDefaultCamera =
> >> 	 UpdateCamera(defaultCamera,
> >>             background=backgroundColor) [instance: 1, cache: 1];
> >>     nullDefaultCamera =
> >>         Inquire(defaultCamera,
> >>             "is null + 1") [instance: 1, cache: 1];
> >>     resetCamera =
> >>         Switch(
> >>             nullDefaultCamera,
> >>             coloredDefaultCamera,
> >>             autoCamera) [instance: 1, cache: 1];
> >>     resetNull =
> >>         Inquire(
> >>             reset,
> >>             "is null + 1") [instance: 2, cache: 1];
> >>     reset =
> >>         Switch(
> >>             resetNull,
> >>             reset,
> >>             0) [instance: 2, cache: 1];
> >>     whichCamera =
> >>         Compute(
> >>             "($0 != 0 || $1 == 0) ? 1 : 2",
> >>             reset,
> >>             useVector) [instance: 1, cache: 1];
> >>     camera = Switch(
> >>             whichCamera,
> >>             resetCamera,
> >>             realCamera) [instance: 3, cache: 1];
> >>     AAobject =
> >>         AutoAxes(
> >>             object,
> >>             camera,
> >>             AAlabels,
> >>             AAticks,
> >>             AAcorners,
> >>             AAframe,
> >>             AAadjust,
> >>             AAcursor,
> >>             AAgrid,
> >>             AAcolors,
> >>             AAannotation,
> >>             AAlabelscale,
> >>             AAfont,
> >>             AAxTickLocs,
> >>             AAyTickLocs,
> >>             AAzTickLocs,
> >>             AAxTickLabels,
> >>             AAyTickLabels,
> >>             AAzTickLabels) [instance: 1, cache: 1];
> >>     switchAAenable = Compute("$0+1",
> >> 	     AAenable) [instance: 2, cache: 1];
> >>     object = Switch(
> >> 	     switchAAenable,
> >> 	     object,
> >> 	     AAobject) [instance:4, cache: 1];
> >>     SWapproximation_options =
> >>         Switch(
> >>             buttonState,
> >>             buttonUpApprox,
> >>             buttonDownApprox) [instance: 5, cache: 1];
> >>     SWdensity_options =
> >>         Switch(
> >>             buttonState,
> >>             buttonUpDensity,
> >>             buttonDownDensity) [instance: 6, cache: 1];
> >>     HWapproximation_options =
> >>         Format(
> >>             "%s,%s",
> >>             buttonDownApprox,
> >>             buttonUpApprox) [instance: 1, cache: 1];
> >>     HWdensity_options =
> >>         Format(
> >>             "%d,%d",
> >>             buttonDownDensity,
> >>             buttonUpDensity) [instance: 2, cache: 1];
> >>     switchRenderMode = Compute(
> >> 	     "$0+1",
> >> 	     renderMode) [instance: 3, cache: 1];
> >>     approximation_options = Switch(
> >> 	     switchRenderMode,
> >>             SWapproximation_options,
> >> 	     HWapproximation_options) [instance: 7, cache: 1];
> >>     density_options = Switch(
> >> 	     switchRenderMode,
> >>             SWdensity_options,
> >>             HWdensity_options) [instance: 8, cache: 1];
> >>     renderModeString = Switch(
> >>             switchRenderMode,
> >>             "software",
> >>             "hardware")[instance: 9, cache: 1];
> >>     object_tag = Inquire(
> >>             object,
> >>             "object tag")[instance: 3, cache: 1];
> >>     annoted_object =
> >>         Options(
> >>             object,
> >>             "send boxes",
> >>             0,
> >>             "cache",
> >>             1,
> >>             "object tag",
> >>             object_tag,
> >>             "ddcamera",
> >>             whichCamera,
> >>             "rendering approximation",
> >>             approximation_options,
> >>             "render every",
> >>             density_options,
> >>             "button state",
> >>             buttonState,
> >>             "rendering mode",
> >>             renderModeString) [instance: 1, cache: 1];
> >>     RECresNull =
> >>         Inquire(
> >>             RECresolution,
> >>             "is null + 1") [instance: 4, cache: 1];
> >>     ImageResolution =
> >>         Inquire(
> >>             camera,
> >>             "camera resolution") [instance: 5, cache: 1];
> >>     RECresolution =
> >>         Switch(
> >>             RECresNull,
> >>             RECresolution,
> >>             ImageResolution) [instance: 10, cache: 1];
> >>     RECaspectNull =
> >>         Inquire(
> >>             RECaspect,
> >>             "is null + 1") [instance: 6, cache: 1];
> >>     ImageAspect =
> >>         Inquire(
> >>             camera,
> >>             "camera aspect") [instance: 7, cache: 1];
> >>     RECaspect =
> >>         Switch(
> >>             RECaspectNull,
> >>             RECaspect,
> >>             ImageAspect) [instance: 11, cache: 1];
> >>     switchRECenable = Compute(
> >>           "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3)
> >> : 4",
> >>             RECenable,
> >>             switchRenderMode,
> >>             RECresolution,
> >>             ImageResolution,
> >>             RECaspect,
> >> 	     ImageAspect) [instance: 4, cache: 1];
> >>     NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject =
> >> Route(switchRECenable, annoted_object);
> >>     Display(
> >>         NoRECobject,
> >>         camera,
> >>         where,
> >>         throttle) [instance: 1, cache: 1];
> >>     image =
> >>         Render(
> >>             RECNoRerenderObject,
> >>             camera) [instance: 1, cache: 1];
> >>     Display(
> >>         image,
> >>         NULL,
> >>         where,
> >>         throttle) [instance: 2, cache: 1];
> >>     WriteImage(
> >>         image,
> >>         RECfile,
> >>         RECformat) [instance: 1, cache: 1];
> >>     rec_where = Display(
> >>         RECNoRerHW,
> >>         camera,
> >>         where,
> >>         throttle) [instance: 1, cache: 0];
> >>     rec_image = ReadImageWindow(
> >>         rec_where) [instance: 1, cache: 1];
> >>     WriteImage(
> >>         rec_image,
> >>         RECfile,
> >>         RECformat) [instance: 1, cache: 1];
> >>     RECupdateCamera =
> >> 	UpdateCamera(
> >> 	    camera,
> >> 	    resolution=RECresolution,
> >> 	    aspect=RECaspect) [instance: 2, cache: 1];
> >>     Display(
> >>         RECRerenderObject,
> >>         camera,
> >>         where,
> >>         throttle) [instance: 1, cache: 1];
> >>     RECRerenderObject =
> >> 	ScaleScreen(
> >> 	    RECRerenderObject,
> >> 	    NULL,
> >> 	    RECresolution,
> >> 	    camera) [instance: 1, cache: 1];
> >>     image =
> >>         Render(
> >>             RECRerenderObject,
> >>             RECupdateCamera) [instance: 2, cache: 1];
> >>     WriteImage(
> >>         image,
> >>         RECfile,
> >>         RECformat) [instance: 2, cache: 1];
> >> }
> >> main_Image_1_in_1 = "Image_1";
> >> main_Image_1_in_3 = "X24,,";
> >> main_Image_1_in_4 = 1;
> >> main_Image_1_in_5 = [0.5 0.5 0];
> >> main_Image_1_in_6 = [0.5 0.5 3.55379];
> >> main_Image_1_in_7 = 1.90447;
> >> main_Image_1_in_8 = 640;
> >> main_Image_1_in_9 = 0.75;
> >> main_Image_1_in_10 = [0 1 0];
> >> main_Image_1_in_11 = NULL;
> >> main_Image_1_in_12 = 0;
> >> main_Image_1_in_13 = NULL;
> >> main_Image_1_in_14 = 1;
> >> main_Image_1_in_15 = NULL;
> >> main_Image_1_in_16 = NULL;
> >> main_Image_1_in_17 = NULL;
> >> main_Image_1_in_18 = NULL;
> >> main_Image_1_in_19 = 0;
> >> main_Image_1_in_20 = NULL;
> >> main_Image_1_in_21 = NULL;
> >> main_Image_1_in_22 = NULL;
> >> main_Image_1_in_23 = NULL;
> >> main_Image_1_in_25 = NULL;
> >> main_Image_1_in_26 = NULL;
> >> main_Image_1_in_27 = NULL;
> >> main_Image_1_in_28 = NULL;
> >> main_Image_1_in_29 = NULL;
> >> main_Image_1_in_30 = NULL;
> >> main_Image_1_in_31 = NULL;
> >> main_Image_1_in_32 = NULL;
> >> main_Image_1_in_33 = NULL;
> >> main_Image_1_in_34 = NULL;
> >> main_Image_1_in_35 = NULL;
> >> main_Image_1_in_36 = NULL;
> >> main_Image_1_in_37 = NULL;
> >> main_Image_1_in_38 = NULL;
> >> main_Image_1_in_39 = NULL;
> >> main_Image_1_in_40 = NULL;
> >> main_Image_1_in_41 = NULL;
> >> main_Image_1_in_42 = NULL;
> >> main_Image_1_in_43 = NULL;
> >> main_Image_1_in_44 = NULL;
> >> main_Image_1_in_45 = NULL;
> >> main_Image_1_in_46 = NULL;
> >> main_Image_1_in_47 = NULL;
> >> main_Image_1_in_48 = NULL;
> >> main_Image_1_in_49 = NULL;
> >> main_Print_1_in_2 = "o";
> >> main_Print_1_in_3 = NULL;
> >> main_Select_1_in_2 = "field 0";
> >> main_Select_1_in_3 = NULL;
> >> Executive("product version 4 4 0");
> >> $sync
> >> main();
> >>
> >
> >> _______________________________________________
> >> DOLFIN-dev mailing list
> >> DOLFIN-dev@xxxxxxxxxx
> >> http://www.fenics.org/mailman/listinfo/dolfin-dev
> >
> > _______________________________________________
> > DOLFIN-dev mailing list
> > DOLFIN-dev@xxxxxxxxxx
> > http://www.fenics.org/mailman/listinfo/dolfin-dev
> >
> 
> 
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev


References