/[escript]/trunk/doc/user/pycad.tex
ViewVC logotype

Diff of /trunk/doc/user/pycad.tex

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3292 by caltinay, Fri Oct 15 04:02:06 2010 UTC revision 3293 by caltinay, Thu Oct 21 23:18:32 2010 UTC
# Line 11  Line 11 
11  %  %
12  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
13    
14    \chapter{The \pycad Module}\label{PYCAD CHAP}
   
 \chapter{The Module \pycad} \label{PYCAD CHAP}  
   
15    
16  \section{Introduction}  \section{Introduction}
17    
18  \pycad provides a simple way to build a mesh for your finite element  \pycad provides a simple way to build a mesh for your finite element
19  simulation.  You begin by building what we call a \class{Design} using  simulation.  You begin by building what we call a \class{Design} using
20  primitive geometric objects, and then to go on to build a mesh from  primitive geometric objects, and then to go on to build a mesh from
21  this.  The final step of generating the mesh from a \class{Design}  this.  The final step of generating the mesh from a \class{Design}
22  uses freely available mesh generation software, such as \gmshextern.  uses freely available mesh generation software, such as \gmshextern.
23    
24  A \class{Design} is built by defining points, which are used to specify  A \class{Design} is built by defining points, which are used to specify
# Line 32  call a \class{Design}, you can build mes Line 29  call a \class{Design}, you can build mes
29  and 3-D structures.  and 3-D structures.
30    
31  \section{The Unit Square}  \section{The Unit Square}
32  So the simplest geometry is the unit square. First we generate the  So the simplest geometry is the unit square. First we generate the
33  corner points  corner points
34  \begin{python}  \begin{python}
35  from esys.pycad import *  from esys.pycad import *
# Line 48  l12=Line(p1,p2) Line 45  l12=Line(p1,p2)
45  l23=Line(p2,p3)  l23=Line(p2,p3)
46  l30=Line(p3,p0)  l30=Line(p3,p0)
47  \end{python}  \end{python}
48  The lines are put together to form a loop  The lines are put together to form a loop
49  \begin{python}  \begin{python}
50  c=CurveLoop(l01,l12,l23,l30)  c=CurveLoop(l01,l12,l23,l30)
51  \end{python}  \end{python}
52  The orientation of the line defining the \class{CurveLoop} is important. It is assumed that the surrounded  The orientation of the line defining the \class{CurveLoop} is important. It is assumed that the surrounded
53  area is to the left when moving along the lines from their starting points towards the end points. Moreover,  area is to the left when moving along the lines from their starting points towards the end points. Moreover,
54  the line need to form a closed loop.    the line need to form a closed loop.
55    
56  We use the \class{CurveLoop} to define a surface  We use the \class{CurveLoop} to define a surface
57  \begin{python}  \begin{python}
58  s=PlaneSurface(c)  s=PlaneSurface(c)
59  \end{python}  \end{python}
60  Notice there is difference between the \class{CurveLoop} defining the boundary  Notice there is difference between the \class{CurveLoop} defining the boundary
61  of the surface and the actually surface \class{PlaneSurface}. This difference becomes clearer in the next example with a hole. The direction of the lines is important.  of the surface and the actually surface \class{PlaneSurface}. This difference becomes clearer in the next example with a hole. The direction of the lines is important.
62  New we are ready to define the geometry which described by an instance of \class{Design} class:  New we are ready to define the geometry which described by an instance of \class{Design} class:
63  \begin{python}  \begin{python}
64  d=Design(dim=2,element_size=0.05)  d=Design(dim=2,element_size=0.05)
# Line 71  We then add the surface \code{s} to the Line 68  We then add the surface \code{s} to the
68  \begin{python}  \begin{python}
69  d.addItems(s)  d.addItems(s)
70  \end{python}  \end{python}
71  This will automatically import all items used to construct \code{s} into the \class{Design} \code{d}.  This will automatically import all items used to construct \code{s} into the \class{Design} \code{d}.
72  Now we are ready to construct a \finley FEM mesh and then write it to the file \file{quad.fly}:  Now we are ready to construct a \finley FEM mesh and then write it to the file \file{quad.fly}:
73  \begin{python}  \begin{python}
74  from esys.finley import MakeDomain  from esys.finley import MakeDomain
# Line 79  dom=MakeDomain(d) Line 76  dom=MakeDomain(d)
76  dom.write("quad.fly")  dom.write("quad.fly")
77  \end{python}  \end{python}
78  In some cases it is useful to access the script used to generate the geometry. You can specify a specific name  In some cases it is useful to access the script used to generate the geometry. You can specify a specific name
79  for the script file. In our case we use  for the script file. In our case we use
80  \begin{python}  \begin{python}
81  d.setScriptFileName("quad.geo")  d.setScriptFileName("quad.geo")
82  \end{python}  \end{python}
# Line 111  dom=MakeDomain(d) Line 108  dom=MakeDomain(d)
108  dom.write("quad.fly")  dom.write("quad.fly")
109  \end{python}  \end{python}
110  This example is included with the software in  This example is included with the software in
111  \file{quad.py} in the \ExampleDirectory.  \file{quad.py} in the \ExampleDirectory.
112    
113  There are three extra statements which we have not discussed yet: By default the mesh used to subdivide  There are three extra statements which we have not discussed yet: By default the mesh used to subdivide
114  the boundary are not written into the mesh file mainly to reduce the size of the data file. One need to explicitly add the lines to the  \Design which should be present in the mesh data. Here we additionally labeled the  the boundary are not written into the mesh file mainly to reduce the size of the data file. One need to explicitly add the lines to the  \Design which should be present in the mesh data. Here we additionally labeled the
115  lines on the top and the bottom with the name ``top_and_bottom`` and the lines on the left and right hand side  lines on the top and the bottom with the name ``top_and_bottom`` and the lines on the left and right hand side
116  with the name ``sides`` using \class{PropertySet} objects. The labeling is convenient  with the name ``sides`` using \class{PropertySet} objects. The labeling is convenient
117  when using tagging \index{tagging}, see Chapter~\ref{ESCRIPT CHAP}.  when using tagging \index{tagging}, see Chapter~\ref{ESCRIPT CHAP}.
118    
119  \begin{figure}  \begin{figure}
120  \centerline{\includegraphics[width=\figwidth]{quad}}  \centerline{\includegraphics[width=\figwidth]{quad}}
# Line 134  gmsh quad.msh Line 131  gmsh quad.msh
131  You can access error messages from \gmshextern in the \file{.gmsh-errors} in your home directory.  You can access error messages from \gmshextern in the \file{.gmsh-errors} in your home directory.
132  See Figure~\ref{fig:PYCAD 0} for a result.  See Figure~\ref{fig:PYCAD 0} for a result.
133    
134  In most cases it is best practice to generate the mesh and to solve the mathematical  In most cases it is best practice to generate the mesh and to solve the mathematical
135  model in to different scripts. In our example you can read the \finley mesh into your simulation  model in to different scripts. In our example you can read the \finley mesh into your simulation
136  code\footnote{\gmshextern files can be directly read using the \function{ReadGmsh}, see Chapter~\ref{CHAPTER ON FINLEY}} using  code\footnote{\gmshextern files can be directly read using the \function{ReadGmsh}, see Chapter~\ref{CHAPTER ON FINLEY}} using
137  \begin{python}  \begin{python}
# Line 199  domain=MakeDomain(d) Line 196  domain=MakeDomain(d)
196  domain.write("trapezoid.fly")  domain.write("trapezoid.fly")
197  \end{python}  \end{python}
198  This example is included with the software in  This example is included with the software in
199  \file{trapezoid.py} in the \ExampleDirectory.  \file{trapezoid.py} in the \ExampleDirectory.
200    
201  A \code{CurveLoop} is used to connect several lines into a single curve.  A \code{CurveLoop} is used to connect several lines into a single curve.
202  It is used in the example above to create the trapezoidal outline for the grid  It is used in the example above to create the trapezoidal outline for the grid
# Line 235  l32=Line(p3,p2) Line 232  l32=Line(p3,p2)
232  l20=Line(p2,p0)  l20=Line(p2,p0)
233  bottom=PlaneSurface(CurveLoop(l01,l13,l32,l20))  bottom=PlaneSurface(CurveLoop(l01,l13,l32,l20))
234  \end{python}  \end{python}
235  and  and
236  \begin{python}  \begin{python}
237  l45=Line(p4,p5)  l45=Line(p4,p5)
238  l57=Line(p5,p7)  l57=Line(p5,p7)
# Line 243  l76=Line(p7,p6) Line 240  l76=Line(p7,p6)
240  l64=Line(p6,p4)  l64=Line(p6,p4)
241  top=PlaneSurface(CurveLoop(l45,l57,l76,l64))  top=PlaneSurface(CurveLoop(l45,l57,l76,l64))
242  \end{python}  \end{python}
243  To form the front face we introduce the two additional lines connecting the left and right front  To form the front face we introduce the two additional lines connecting the left and right front
244  points of the the \code{top} and \code{bottom} face:  points of the the \code{top} and \code{bottom} face:
245  \begin{python}  \begin{python}
246  l15=Line(p1,p5)  l15=Line(p1,p5)
247  l40=Line(p4,p0)  l40=Line(p4,p0)
248  \end{python}  \end{python}
249  To form the front face we encounter the problem as the line \code{l45} used to define the  To form the front face we encounter the problem as the line \code{l45} used to define the
250  \code{top} face is pointing the wrong direction.  In \pycad you can reversing direction of an  \code{top} face is pointing the wrong direction.  In \pycad you can reversing direction of an
251  object by changing its sign. So we write \code{-l45} to indicate that the direction is to be reversed. With this notation we can write  object by changing its sign. So we write \code{-l45} to indicate that the direction is to be reversed. With this notation we can write
252  \begin{python}  \begin{python}
# Line 270  sl=SurfaceLoop(top,-bottom,front,back,le Line 267  sl=SurfaceLoop(top,-bottom,front,back,le
267  v=Volume(sl)  v=Volume(sl)
268  \end{python}  \end{python}
269  Similar to the definition of a \code{CurvedLoop} the orientation of the surfaces \code{SurfaceLoop} is relevant. In fact the surface normal direction defined by the the right hand rule needs to point outwards as indicated by the surface normals in  Similar to the definition of a \code{CurvedLoop} the orientation of the surfaces \code{SurfaceLoop} is relevant. In fact the surface normal direction defined by the the right hand rule needs to point outwards as indicated by the surface normals in
270  Figure~\ref{fig:PYCAD 2}. As the \code{bottom} face is directed upwards it is inserted with the minus sign  Figure~\ref{fig:PYCAD 2}. As the \code{bottom} face is directed upwards it is inserted with the minus sign
271  into the \code{SurfaceLoop} in order to adjust the orientation of the surface.  into the \code{SurfaceLoop} in order to adjust the orientation of the surface.
272    
273  As in the 2D case, the \class{Design} class is used to define the geometry:  As in the 2D case, the \class{Design} class is used to define the geometry:
274  \begin{python}  \begin{python}
# Line 285  des.addItems(v, top, bottom, back, front Line 282  des.addItems(v, top, bottom, back, front
282  dom=MakeDomain(des)  dom=MakeDomain(des)
283  dom.write("brick.fly")  dom.write("brick.fly")
284  \end{python}  \end{python}
285  Note that the \finley mesh file \file{brick.fly} will contain the  Note that the \finley mesh file \file{brick.fly} will contain the
286  triangles used to define the surfaces as they are added to the \class{Design}.  triangles used to define the surfaces as they are added to the \class{Design}.
287  The example script of the cube is included with the software in  The example script of the cube is included with the software in
288  \file{brick.py} in the \ExampleDirectory.  \file{brick.py} in the \ExampleDirectory.
289    
290  \section{Alternative File Formats}  \section{Alternative File Formats}
291  \code{pycad} supports other file formats in including  \code{pycad} supports other file formats in including
292  I-DEAS universal file, VRML, Nastran and STL. The following example shows how  I-DEAS universal file, VRML, Nastran and STL. The following example shows how
293  to generate the STL file \file{brick.stl}:  to generate the STL file \file{brick.stl}:
294  \begin{python}  \begin{python}
# Line 305  des.setMeshFileName("brick.stl") Line 302  des.setMeshFileName("brick.stl")
302  des.generate()  des.generate()
303  \end{python}  \end{python}
304  The example script of the cube is included with the software in  The example script of the cube is included with the software in
305  \file{brick_stl.py} in the \ExampleDirectory.  \file{brick_stl.py} in the \ExampleDirectory.
306    
307    
308  \begin{figure}  \begin{figure}
309  \centerline{\includegraphics[width=\figwidth]{refine1}}  \centerline{\includegraphics[width=\figwidth]{refine1}}
310  \caption{Local refinement at the origin by  \caption{Local refinement at the origin by
311  \var{local_scale=0.01}  \var{local_scale=0.01}
312  with \var{element_size=0.3} and number of elements on the top set to 10.}  with \var{element_size=0.3} and number of elements on the top set to 10.}
313  \label{fig:PYCAD 5}  \label{fig:PYCAD 5}
314  \end{figure}  \end{figure}
315    
316  \section{Element Sizes}  \section{Element Sizes}
317  The element size used globally is defined by the  The element size used globally is defined by the
318  \code{element_size} argument of the \class{Design}. The mesh generator  \code{element_size} argument of the \class{Design}. The mesh generator
319  will try to use this mesh size everywhere in the geometry. In some cases it can be  will try to use this mesh size everywhere in the geometry. In some cases it can be
320  desirable to use locally a finer mesh. A local refinement can be defined at each  desirable to use locally a finer mesh. A local refinement can be defined at each
321  \class{Point}:  \class{Point}:
322  \begin{python}  \begin{python}
323  p0=Point(0.,0.,0.,local_scale=0.01)  p0=Point(0.,0.,0.,local_scale=0.01)
324  \end{python}  \end{python}
325  Here the mesh generator will create a mesh with an element size which is by the factor \code{0.01}  Here the mesh generator will create a mesh with an element size which is by the factor \code{0.01}
326  times smaller than the global mesh size \code{element_size=0.3}, see Figure~\ref{fig:PYCAD 5}. The point where a refinement is defined must be a point of curve used to define the geometry.  times smaller than the global mesh size \code{element_size=0.3}, see Figure~\ref{fig:PYCAD 5}. The point where a refinement is defined must be a point of curve used to define the geometry.
327    
328  Alternatively, one can define a mesh size along a curve by defining the number of elements to be used to subdivide the curve. For instance, to use $20$ element on line \code{l23} on uses:  Alternatively, one can define a mesh size along a curve by defining the number of elements to be used to subdivide the curve. For instance, to use $20$ element on line \code{l23} on uses:
329  \begin{python}  \begin{python}
330  l23=Line(p2, p3)  l23=Line(p2, p3)
331  l23.setElementDistribution(20)  l23.setElementDistribution(20)
332  \end{python}  \end{python}
333  Setting the number of elements on a curve overwrites the global mesh size \code{element_size}. The result is shown in Figure~\ref{fig:PYCAD 5}.  Setting the number of elements on a curve overwrites the global mesh size \code{element_size}. The result is shown in Figure~\ref{fig:PYCAD 5}.
334    
335  \section{\pycad Classes}  \section{\pycad Classes}
336  \declaremodule{extension}{esys.pycad}  \declaremodule{extension}{esys.pycad}
# Line 456  Defines the number of elements on all li Line 453  Defines the number of elements on all li
453  \end{methoddesc}  \end{methoddesc}
454    
455  \begin{methoddesc}[PlaneSurface]{setRecombination}{\optional{max_deviation=45 * \var{DEG} }}  \begin{methoddesc}[PlaneSurface]{setRecombination}{\optional{max_deviation=45 * \var{DEG} }}
456  the mesh generator will try to recombine triangular elements  the mesh generator will try to recombine triangular elements
457  into quadrilateral elements. \var{max_deviation} (in radians) defines the  into quadrilateral elements. \var{max_deviation} (in radians) defines the
458  maximum deviation of any angle in the quadrilaterals from the right angle.    maximum deviation of any angle in the quadrilaterals from the right angle.
459  Set \var{max_deviation}=\var{None} to remove recombination.  Set \var{max_deviation}=\var{None} to remove recombination.
460  \end{methoddesc}  \end{methoddesc}
461  \begin{methoddesc}[PlaneSurface]{setTransfiniteMeshing}{\optional{orientation="Left"}}  \begin{methoddesc}[PlaneSurface]{setTransfiniteMeshing}{\optional{orientation="Left"}}
462  applies 2D transfinite meshing to the surface.  applies 2D transfinite meshing to the surface.
463  \var{orientation} defines the orientation of triangles. Allowed values  \var{orientation} defines the orientation of triangles. Allowed values
464  are \var{``Left''}, \var{``Right''} or \var{``Alternate''}. The  are \var{``Left''}, \var{``Right''} or \var{``Alternate''}. The
465  boundary of the surface must be defined by three or four lines where an  boundary of the surface must be defined by three or four lines where an
466  element distribution must be defined on all faces where opposite  element distribution must be defined on all faces where opposite
467  faces uses the same element distribution. No holes must be present.  faces uses the same element distribution. No holes must be present.
468  \end{methoddesc}  \end{methoddesc}
469    
# Line 480  surface. Line 477  surface.
477  \end{classdesc}  \end{classdesc}
478    
479  \begin{methoddesc}[RuledSurface]{setRecombination}{\optional{max_deviation=45 * \var{DEG} }}  \begin{methoddesc}[RuledSurface]{setRecombination}{\optional{max_deviation=45 * \var{DEG} }}
480  the mesh generator will try to recombine triangular elements  the mesh generator will try to recombine triangular elements
481  into quadrilateral elements. \var{max_deviation} (in radians) defines the  into quadrilateral elements. \var{max_deviation} (in radians) defines the
482  maximum deviation of any angle in the quadrilaterals from the right angle.    maximum deviation of any angle in the quadrilaterals from the right angle.
483  Set \var{max_deviation}=\var{None} to remove recombination.  Set \var{max_deviation}=\var{None} to remove recombination.
484  \end{methoddesc}  \end{methoddesc}
485    
486  \begin{methoddesc}[RuledSurface]{setTransfiniteMeshing}{\optional{orientation="Left"}}  \begin{methoddesc}[RuledSurface]{setTransfiniteMeshing}{\optional{orientation="Left"}}
487  applies 2D transfinite meshing to the surface.  applies 2D transfinite meshing to the surface.
488  \var{orientation} defines the orientation of triangles. Allowed values  \var{orientation} defines the orientation of triangles. Allowed values
489  are \var{``Left''}, \var{``Right''} or \var{``Alternate''}. The  are \var{``Left''}, \var{``Right''} or \var{``Alternate''}. The
490  boundary of the surface must be defined by three or four lines where an  boundary of the surface must be defined by three or four lines where an
491  element distribution must be defined on all faces where opposite  element distribution must be defined on all faces where opposite
492  faces uses the same element distribution. No holes must be present.  faces uses the same element distribution. No holes must be present.
493  \end{methoddesc}  \end{methoddesc}
494    
# Line 511  Defines the number of elements on all li Line 508  Defines the number of elements on all li
508  \end{methoddesc}  \end{methoddesc}
509    
510  \begin{methoddesc}[Volume]{setRecombination}{\optional{max_deviation=45 * \var{DEG} }}  \begin{methoddesc}[Volume]{setRecombination}{\optional{max_deviation=45 * \var{DEG} }}
511  the mesh generator will try to recombine triangular elements  the mesh generator will try to recombine triangular elements
512  into quadrilateral elements. These meshes are then used to generate the volume mesh if possible.  into quadrilateral elements. These meshes are then used to generate the volume mesh if possible.
513  Together with transfinite meshing one can construct rectanglar meshes.  Together with transfinite meshing one can construct rectanglar meshes.
514  \var{max_deviation} (in radians) defines the maximum deviation of any angle in the quadrilaterals from the right angle.    \var{max_deviation} (in radians) defines the maximum deviation of any angle in the quadrilaterals from the right angle.
515  Set \var{max_deviation}=\var{None} to remove recombination.  Set \var{max_deviation}=\var{None} to remove recombination.
516  \end{methoddesc}  \end{methoddesc}
517    
518  \begin{methoddesc}[Volume]{setTransfiniteMeshing}{\optional{orientation="Left"}}  \begin{methoddesc}[Volume]{setTransfiniteMeshing}{\optional{orientation="Left"}}
519  applies transfinite meshing to the volume and all surfaces (if \var{orientation} is not equal to \var{None})  applies transfinite meshing to the volume and all surfaces (if \var{orientation} is not equal to \var{None})
520  \var{orientation} defines the orientation of triangles. Allowed values  \var{orientation} defines the orientation of triangles. Allowed values
521  are \var{``Left''}, \var{``Right''} or \var{``Alternate''}. The  are \var{``Left''}, \var{``Right''} or \var{``Alternate''}. The
522  boundary of the surface must be defined by three or four lines where an  boundary of the surface must be defined by three or four lines where an
523  element distribution must be defined on all faces where opposite  element distribution must be defined on all faces where opposite
524  faces uses the same element distribution.  faces uses the same element distribution.
525  If \var{orientation} is equal to \var{None} transfinite meshing is not switched on for the surfaces but needs  If \var{orientation} is equal to \var{None} transfinite meshing is not switched on for the surfaces but needs
526  to be set by the user. No holes must be present.  to be set by the user. No holes must be present.
527  \textbf{Warning: The functionality of transfinite meshing without recombination is not entirely clear in \gmshextern.  \textbf{Warning: The functionality of transfinite meshing without recombination is not entirely clear in \gmshextern.
528  So please apply this method with care.}  So please apply this method with care.}
529  \end{methoddesc}  \end{methoddesc}
530    
# Line 541  used to move geometrical objects in the Line 538  used to move geometrical objects in the
538  resize them.  resize them.
539    
540  \begin{classdesc}{Translation}{\optional{b=[0,0,0]}}  \begin{classdesc}{Translation}{\optional{b=[0,0,0]}}
541  defines a translation $x \to x+b$. \var{b} can be any object that can be converted  defines a translation $x \to x+b$. \var{b} can be any object that can be converted
542  into a \numpy object of shape $(3,)$.  into a \numpy object of shape $(3,)$.
543  \end{classdesc}  \end{classdesc}
544                  
545  \begin{classdesc}{Rotation}{\optional{axis=[1,1,1], \optional{ point = [0,0,0], \optional{angle=0*RAD} } } }  \begin{classdesc}{Rotation}{\optional{axis=[1,1,1], \optional{ point = [0,0,0], \optional{angle=0*RAD} } } }
546  defines a rotation by \var{angle} around axis through point \var{point} and direction \var{axis}.  defines a rotation by \var{angle} around axis through point \var{point} and direction \var{axis}.
547  \var{axis} and \var{point} can be any object that can be converted  \var{axis} and \var{point} can be any object that can be converted
548  into a \numpy object of shape $(3,)$.  into a \numpy object of shape $(3,)$.
549  \var{axis} does not have to be normalised but must have positive length. The right hand rule~\cite{RIGHTHANDRULE}  \var{axis} does not have to be normalised but must have positive length. The right hand rule~\cite{RIGHTHANDRULE}
550  applies.  applies.
# Line 555  applies. Line 552  applies.
552    
553    
554  \begin{classdesc}{Dilation}{\optional{factor=1., \optional{centre=[0,0,0]}}}  \begin{classdesc}{Dilation}{\optional{factor=1., \optional{centre=[0,0,0]}}}
555  defines a dilation by the expansion/contraction \var{factor} with  defines a dilation by the expansion/contraction \var{factor} with
556  \var{centre} as the dilation centre.  \var{centre} as the dilation centre.
557  \var{centre} can be any object that can be converted  \var{centre} can be any object that can be converted
558  into a \numpy object of shape $(3,)$.  into a \numpy object of shape $(3,)$.
559  \end{classdesc}  \end{classdesc}
560    
561  \begin{classdesc}{Reflection}{\optional{normal=[1,1,1], \optional{offset=0}}}  \begin{classdesc}{Reflection}{\optional{normal=[1,1,1], \optional{offset=0}}}
562  defines a reflection on a plane defined in normal form $n^t x = d$  defines a reflection on a plane defined in normal form $n^t x = d$
563  where $n$ is the surface normal \var{normal} and $d$ is the plane \var{offset}.  where $n$ is the surface normal \var{normal} and $d$ is the plane \var{offset}.
564  \var{normal} can be any object that can be converted  \var{normal} can be any object that can be converted
565  into a \numpy object of shape $(3,)$.  into a \numpy object of shape $(3,)$.
566  \var{normal} does not have to be normalised but must have positive length.  \var{normal} does not have to be normalised but must have positive length.
567  \end{classdesc}  \end{classdesc}
568    
569  \begin{datadesc}{DEG}  \begin{datadesc}{DEG}
# Line 576  A constant to convert from degrees to an Line 573  A constant to convert from degrees to an
573  \subsection{Properties}  \subsection{Properties}
574    
575  If you are building a larger geometry you may find it convenient to  If you are building a larger geometry you may find it convenient to
576  create it in smaller pieces and then assemble them into the whole.  create it in smaller pieces and then assemble them into the whole.
577  Property sets make this easy, and they allow you to name the smaller  Property sets make this easy, and they allow you to name the smaller
578  pieces for convenience.  pieces for convenience.
579    
# Line 604  in the property set. Line 601  in the property set.
601    
602  \begin{methoddesc}[PropertySet]{getDim}{}  \begin{methoddesc}[PropertySet]{getDim}{}
603  returns the spatial dimension of the items  returns the spatial dimension of the items
604  in the property set.  in the property set.
605  \end{methoddesc}  \end{methoddesc}
606    
607  \begin{methoddesc}[PropertySet]{getName}{}  \begin{methoddesc}[PropertySet]{getName}{}
# Line 616  sets the name. This name should be uniqu Line 613  sets the name. This name should be uniqu
613  \end{methoddesc}  \end{methoddesc}
614    
615  \begin{methoddesc}[PropertySet]{addItem}{*items}  \begin{methoddesc}[PropertySet]{addItem}{*items}
616  adds a tuple of items. They need to be objects of class \ManifoldOneD, \ManifoldTwoD or \ManifoldThreeD.  adds a tuple of items. They need to be objects of class \ManifoldOneD, \ManifoldTwoD or \ManifoldThreeD.
617  \end{methoddesc}  \end{methoddesc}
618    
619  \begin{methoddesc}[PropertySet]{getItems}{}  \begin{methoddesc}[PropertySet]{getItems}{}
# Line 624  returns the list of items Line 621  returns the list of items
621  \end{methoddesc}  \end{methoddesc}
622    
623  \begin{methoddesc}[PropertySet]{clearItems}{}  \begin{methoddesc}[PropertySet]{clearItems}{}
624  clears the list of items  clears the list of items
625  \end{methoddesc}  \end{methoddesc}
626    
627  \begin{methoddesc}[PropertySet]{getTag}{}  \begin{methoddesc}[PropertySet]{getTag}{}
# Line 644  deemed to be desirable in the future. Line 641  deemed to be desirable in the future.
641  \optional{dim=3, \optional{element_size=1., \optional{order=1, \optional{keep_files=False}}}}}  \optional{dim=3, \optional{element_size=1., \optional{order=1, \optional{keep_files=False}}}}}
642  The \class{Design} describes the geometry defined by primitives to be meshed.  The \class{Design} describes the geometry defined by primitives to be meshed.
643  The \var{dim} specifies the spatial dimension. The argument \var{element_size} defines the global  The \var{dim} specifies the spatial dimension. The argument \var{element_size} defines the global
644  element size which is multiplied by the local scale to set the element size at each \Point.  element size which is multiplied by the local scale to set the element size at each \Point.
645  The argument \var{order} defines the element order to be used. If \var{keep_files} is set to  The argument \var{order} defines the element order to be used. If \var{keep_files} is set to
646  \True temporary files a kept otherwise they are removed when the instance of the class is deleted.  \True temporary files a kept otherwise they are removed when the instance of the class is deleted.
647  \end{classdesc}  \end{classdesc}
648    
649    
650  \begin{memberdesc}[Design]{GMSH}  \begin{memberdesc}[Design]{GMSH}
651  gmsh file format~\cite{GMSH}.  gmsh file format~\cite{GMSH}.
652  \end{memberdesc}  \end{memberdesc}
653    
654  \begin{memberdesc}[Design]{IDEAS}  \begin{memberdesc}[Design]{IDEAS}
655  I-DEAS universal file format~\cite{IDEAS}.  I-DEAS universal file format~\cite{IDEAS}.
656  \end{memberdesc}  \end{memberdesc}
657    
658  \begin{memberdesc}[Design]{VRML}  \begin{memberdesc}[Design]{VRML}
659  VRML file format, \cite{VRML}.  VRML file format, \cite{VRML}.
660  \end{memberdesc}  \end{memberdesc}
661    
662  \begin{memberdesc}[Design]{STL}  \begin{memberdesc}[Design]{STL}
663  STL file format~\cite{STL}.  STL file format~\cite{STL}.
664  \end{memberdesc}  \end{memberdesc}
665  \begin{memberdesc}[Design]{NASTRAN}  \begin{memberdesc}[Design]{NASTRAN}
666  NASTRAN  bulk data format~\cite{NASTRAN}.  NASTRAN  bulk data format~\cite{NASTRAN}.
667  \end{memberdesc}  \end{memberdesc}
668    
669  \begin{memberdesc}[Design]{MEDIT}  \begin{memberdesc}[Design]{MEDIT}
670  Medit file format~\cite{MEDIT}.  Medit file format~\cite{MEDIT}.
671  \end{memberdesc}  \end{memberdesc}
672    
673  \begin{memberdesc}[Design]{CGNS}  \begin{memberdesc}[Design]{CGNS}
674  CGNS file format~\cite{CGNS}.  CGNS file format~\cite{CGNS}.
675  \end{memberdesc}  \end{memberdesc}
676    
677  \begin{memberdesc}[Design]{PLOT3D}  \begin{memberdesc}[Design]{PLOT3D}
678  Plot3D file format~\cite{PLOT3D}.    Plot3D file format~\cite{PLOT3D}.
679  \end{memberdesc}  \end{memberdesc}
680    
681    
682  \begin{memberdesc}[Design]{DIFFPACK}  \begin{memberdesc}[Design]{DIFFPACK}
683  Diffpack 3D file format~\cite{DIFFPACK}.  Diffpack 3D file format~\cite{DIFFPACK}.
684  \end{memberdesc}  \end{memberdesc}
685    
686  \begin{memberdesc}[Design]{DELAUNAY}  \begin{memberdesc}[Design]{DELAUNAY}
# Line 720  returns the element order. Line 717  returns the element order.
717  \end{methoddesc}  \end{methoddesc}
718    
719  \begin{methoddesc}[Design]{setElementSize}{\optional{element_size=1}}  \begin{methoddesc}[Design]{setElementSize}{\optional{element_size=1}}
720  set the global element size. The local element size at a point is defined as  set the global element size. The local element size at a point is defined as
721  the global element size multiplied by the local scale. The element size must be positive.  the global element size multiplied by the local scale. The element size must be positive.
722  \end{methoddesc}  \end{methoddesc}
723    
# Line 764  returns the name of the mesh file Line 761  returns the name of the mesh file
761    
762  \begin{methoddesc}[Design]{addItems}{*items}  \begin{methoddesc}[Design]{addItems}{*items}
763  adds the tuple of var{items}. An item can be any primitive or a \class{PropertySet}.  adds the tuple of var{items}. An item can be any primitive or a \class{PropertySet}.
764  \warning{If a \PropertySet is added as an item added object that are not  \warning{If a \PropertySet is added as an item added object that are not
765  part of a \PropertySet are not considered in the messing.    part of a \PropertySet are not considered in the messing.
766  }  }
767  \end{methoddesc}  \end{methoddesc}
768    
# Line 793  returns the gmsh command used to generat Line 790  returns the gmsh command used to generat
790    
791  \begin{methoddesc}[Design]{setOptions}{  \begin{methoddesc}[Design]{setOptions}{
792  \optional{optimize_quality=\True  \optional{optimize_quality=\True
793  \optional{, smoothing=1  \optional{, smoothing=1
794  \optional{, curvature_based_element_size=\False  \optional{, curvature_based_element_size=\False
795  \optional{, algorithm2D=\var{Design.MESHADAPT}  \optional{, algorithm2D=\var{Design.MESHADAPT}
796  \optional{, algorithm3D=\var{Design.FRONTAL}  \optional{, algorithm3D=\var{Design.FRONTAL}
797  \optional{, generate_hexahedra=False}}}}}}}  \optional{, generate_hexahedra=False}}}}}}}
798  sets options for the mesh generator. \var{algorithm2D} sets the 2D meshing algorithm to be used.  sets options for the mesh generator. \var{algorithm2D} sets the 2D meshing algorithm to be used.
799  The algorithm needs to be \var{Design.DELAUNAY}  The algorithm needs to be \var{Design.DELAUNAY}
800  \var{Design.FRONTAL}  \var{Design.FRONTAL}
801  or \var{Design.MESHADAPT}. By default \var{Design.MESHADAPT} is used.  or \var{Design.MESHADAPT}. By default \var{Design.MESHADAPT} is used.
802  \var{algorithm3D} sets the 3D  meshing algorithm to be used.  \var{algorithm3D} sets the 3D  meshing algorithm to be used.
803  The algorithm needs to be \var{Design.DELAUNAY}  The algorithm needs to be \var{Design.DELAUNAY}
804  or \var{Design.FRONTAL}  or \var{Design.FRONTAL}
805  . By default \var{Design.FRONTAL} is used.  . By default \var{Design.FRONTAL} is used.
806  \var{optimize_quality}=\True invokes an optimization of the mesh quality.  \var{optimize_quality}=\True invokes an optimization of the mesh quality.
807  \var{smoothing} sets the number of smoothing steps to be applied to the mesh.    \var{smoothing} sets the number of smoothing steps to be applied to the mesh.
808  \var{curvature_based_element_size}=\True switches on curvature based definition of element size.  \var{curvature_based_element_size}=\True switches on curvature based definition of element size.
809  \var{generate_hexahedra}=\True switches on the usage of quadrilateral/hexahedra elements.  \var{generate_hexahedra}=\True switches on the usage of quadrilateral/hexahedra elements.
810  \end{methoddesc}  \end{methoddesc}

Legend:
Removed from v.3292  
changed lines
  Added in v.3293

  ViewVC Help
Powered by ViewVC 1.1.26