On Thu, Feb 3, 2011 at 4:51 AM, Julien Derr <[email protected]> wrote:

>
> do you know  what is the proper syntax ?
>

Hey, Julien.

A multi-line string in Python is indicated by an opening and closing set of
three quotes (either single- or double-quotes) [0]. For a good example of
how to use a multi-line string to construct a GmshImporter from a Gmsh
specification, see the examples.diffusion.circle code [1].

The problem with your above code, however, is that the Gmsh specification
you provide only produces one vertex. FiPy can't make a cell from only one
vertex, hence the error. I suggest using Gmsh's graphical user interface to
check that your Gmsh code produces what you expect.

Admittedly, the error you're getting is cryptic, so I'll add some code to
make this situation clearer.

Regards,
James

[0] http://docs.python.org/tutorial/introduction.html#strings
[1]
http://www.matforge.org/fipy/browser/tags/version-2_1_1/examples/diffusion/circle.py


>
>
> Julien
>
>
>
> On Wed, Feb 2, 2011 at 7:32 PM, Jonath
> an Guyer <guyer@nistgov <[email protected]>> wrote:
>
>>
>>
>> On Feb 2, 2011, at 1:00 PM, Daniel Wheeler wrote:
>>
>> >
>> > Hi Julien, I believe it is set up to work in this manner. What's the
>> > error exactly?
>>
>> The problem is that Julien is quoting too much.
>>
>> This is Python code:
>>
>> '''cellSize = %(cellSize)g; radius = %(radius)g; rbis =
>> %(rbis)g; Point(1) = {0, 0, 0, cellSize}; Point(2) = {-radius, 0, 0,
>> cellSize}; Point(3) = {0, radius, 0, cellSize};Point(4) = {radius, 0, 0,
>> cellSize}; Point(5) = {0, -radius, 0, cellSize}; Circle(6) = {2, 1, 3};
>> Circle(7) = {3, 1, 4};Circle(8) = {4, 1, 5}; Circle(9) = {5, 1, 2}; Line
>> Loop(10) = {6, 7, 8, 9};Plane Surface(12) = {10}; ''' % locals()
>>
>> so your current definition of cmdbase results in passing Python code to
>> Gmsh, which it doesn't understand.
>>
>> This part is the Gmsh code:
>>
>> cellSize = %(cellSize)g; radius = %(radius)g; rbis =
>> %(rbis)g; Point(1) = {0, 0, 0, cellSize}; Point(2) = {-radius, 0, 0,
>> cellSize}; Point(3) = {0, radius, 0, cellSize};Point(4) = {radius, 0, 0,
>> cellSize}; Point(5) = {0, -radius, 0, cellSize}; Circle(6) = {2, 1, 3};
>> Circle(7) = {3, 1, 4};Circle(8) = {4, 1, 5}; Circle(9) = {5, 1, 2}; Line
>> Loop(10) = {6, 7, 8, 9};Plane Surface(12) = {10};
>>
>> except that it is taking the values of cellSize, radius, and rbis from
>> your Python script, by substituting the corresponding local variables (" %
>> locals()").
>>
>>
>> So, if you wish, you can do something like
>>
>> cmdbase = '''cellSize = %(cellSize)g; radius = %(radius)g; rbis =
>> %(rbis)g; Point(1) = {0, 0, 0, cellSize}; Point(2) = {-radius, 0, 0,
>> cellSize}; Point(3) = {0, radius, 0, cellSize};Point(4) = {radius, 0, 0,
>> cellSize}; Point(5) = {0, -radius, 0, cellSize}; Circle(6) = {2, 1, 3};
>> Circle(7) = {3, 1, 4};Circle(8) = {4, 1, 5}; Circle(9) = {5, 1, 2}; Line
>> Loop(10) = {6, 7, 8, 9};Plane Surface(12) = {10};'''
>>
>> mesh = GmshImporter2D(cmdbase % locals())
>>
>> or you can skip the substitution altogether ["%(cellSize)g", "%(radius)g",
>> and so on] and just build cmdbase to contain whatever Gmsh script you want
>> and then you would just write:
>>
>> mesh = GmshImporter2D(cmdbase)
>>
>>
>>
>>
>

Reply via email to