dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #21224
Re: Hierarchical wrapping troubles
-
To:
dolfin@xxxxxxxxxxxxxxxxxxx
-
From:
"Garth N. Wells" <gnw20@xxxxxxxxx>
-
Date:
Thu, 03 Feb 2011 17:48:33 +0000
-
In-reply-to:
<AANLkTi=Cyu9oa+EXiNam+_R-zSMXk9WwSQMcS5y-gt65@mail.gmail.com>
-
User-agent:
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101208 Thunderbird/3.1.7
On 03/02/11 17:42, Johannes Ring wrote:
> On Wed, Feb 2, 2011 at 7:18 PM, Johan Hake <johan.hake@xxxxxxxxx> wrote:
>> On Wednesday February 2 2011 07:57:10 Garth N. Wells wrote:
>>> On 02/02/11 15:46, Johan Hake wrote:
>>>> On Wednesday February 2 2011 02:31:02 Johannes Ring wrote:
>>>>> On Wed, Feb 2, 2011 at 12:39 AM, Anders Logg <logg@xxxxxxxxx> wrote:
>>>>>> On Tue, Feb 01, 2011 at 11:35:28PM +0000, Garth N. Wells wrote:
>>>>>>> On 01/02/11 23:19, Johan Hake wrote:
>>>>>>>> On Tuesday February 1 2011 15:14:21 Anders Logg wrote:
>>>>>>>>> On Tue, Feb 01, 2011 at 03:12:05PM -0800, Johan Hake wrote:
>>>>>>>>>> On Tuesday February 1 2011 14:53:55 Anders Logg wrote:
>>>>>>>>>>> Something seems to go wrong with the Hierarchical Python wrappers.
>>>>>>>>>>>
>>>>>>>>>>> C++ program:
>>>>>>>>>>> UnitSquare mesh(3, 3);
>>>>>>>>>>> mesh._debug();
>>>>>>>>>>>
>>>>>>>>>>> Output:
>>>>>>>>>>>
>>>>>>>>>>> Debugging hierarchical object.
>>>>>>>>>>>
>>>>>>>>>>> has_parent() = 0
>>>>>>>>>>> _parent.get() = 0
>>>>>>>>>>> _parent.count() = 0
>>>>>>>>>>> has_child() = 0
>>>>>>>>>>> _child.get() = 0
>>>>>>>>>>> _child.count() = 0
>>>>>>>>>>>
>>>>>>>>>>> Debugging hierarchical object.
>>>>>>>>>>>
>>>>>>>>>>> has_parent() = 0
>>>>>>>>>>> _parent.get() = 0
>>>>>>>>>>> _parent.count() = 0
>>>>>>>>>>> has_child() = 0
>>>>>>>>>>> _child.get() = 0
>>>>>>>>>>> _child.count() = 0
>>>>>>>>>>>
>>>>>>>>>>> Python program:
>>>>>>>>>>> mesh = UnitSquare(3, 3)
>>>>>>>>>>> mesh._debug()
>>>>>>>>>>>
>>>>>>>>>>> Debugging hierarchical object.
>>>>>>>>>>>
>>>>>>>>>>> has_parent() = 0
>>>>>>>>>>> _parent.get() = 0
>>>>>>>>>>> _parent.count() = 0
>>>>>>>>>>> has_child() = 0
>>>>>>>>>>> _child.get() = 0
>>>>>>>>>>> _child.count() = 0
>>>>>>>>>>>
>>>>>>>>>>> Debugging hierarchical object.
>>>>>>>>>>>
>>>>>>>>>>> has_parent() = 1
>>>>>>>>>>> _parent.get() = cbd47290
>>>>>>>>>>> _parent.count() = -878438560
>>>>>>>>>>> has_child() = 1
>>>>>>>>>>> _child.get() = cbd47290
>>>>>>>>>>> _child.count() = -878438560
>>>>>>>>>>>
>>>>>>>>>>> The first call to Hierarchical::_debug is made from the
>>>>>>>>>>> constructor of Hierarchical and is correct in both C++ and
>>>>>>>>>>> Python, but then the Python object seems to lose contact with the
>>>>>>>>>>> reality.
>>>>>>>>>>
>>>>>>>>>> Yes quite so...
>>>>>>>>>>
>>>>>>>>>> I changed locally to swig 2.0 and the problem went away. shared_ptr
>>>>>>>>>> support has been rewritten in 2.0. I might be able to hack the
>>>>>>>>>> interface of Hierarchical in a similar manner as I did for
>>>>>>>>>> Variables. Just implementing the interface again in the C++ layer.
>>>>>>>>>>
>>>>>>>>>> But I am not sure. The shared_ptr part of the SWIG interface starts
>>>>>>>>>> to be quite complex now with supporting SWIG version 1.3.37 to
>>>>>>>>>> 1.3.40 and 2.0
>>>>>>>>>>
>>>>>>>>>> Maybe we should force SWIG 2.0?
>>>>>>>>>
>>>>>>>>> Is that possible? It's not in Ubuntu yet, or is it?
>>>>>>>
>>>>>>> It's in 11.04
>>>>>>>
>>>>>>> Swig is super easy to install.
>>>>>>
>>>>>> If we can include SWIG installation in Dorsal and Johannes is able to
>>>>>> make packages that rely on SWIG 2.0 then we might as well move to 2.0
>>>>>> to save us (mainly Johan) a lot of trouble.
>>>>>
>>>>> I tried to build UFC and DOLFIN in Debian unstable with the swig2.0
>>>>> package (same package as in Ubuntu 11.04). One problem is that this
>>>>> package does not contain /usr/bin/swig but only /usr/bin/swig2.0. I
>>>>> fixed this by setting -DSWIG_EXECUTABLE:FILEPATH=/usr/bin/swig2.0 when
>>>>> building UFC and DOLFIN, but running the poisson Python demo failed
>>>>> because Instant was unable to find swig. The reason for naming the
>>>>> binary "swig2.0" is probably that SWIG 1.3 is still the default in
>>>>> Debian (and Ubuntu).
>>>>
>>>> Ok then it might be difficult. We could maybe add some funcitonality to
>>>> instant to define what executable it shold look for?
>>>
>>> We should definitely have that - DOLFIN should be able to pass the Swig
>>> executable name and path. I've already seen that having two versions of
>>> Swig installed is problematic.
>>
>> Ok, then we need some hierachical setting of what swig excecutable it should
>> look for. As I am compiling swig from source, which gives me a plain 'swig'
>> excecutable I would not like DOLFIN to use this and not swig2.0.
>>
>> I can see if I can implement this. We can add something like:
>>
>> parameters["jit_compilation"]["swig_executable"] = "swig2.0"
>> parameters["jit_compilation"]["swig_version"] = "2.0.0"
>>
>> If swig2.0 is not found we look for swig. I think we can do this from dolfin
>> (using instant). When we have found the correct swig executable we cache it
>> and use it when we call instant.
>>
>> I am not sure how setting the path will work. If we include it I think it
>> should be optional. So that just looking in the path after the excecutable
>> should be the default option.
>
> FYI: I just thought of another problem with moving to SWIG 2.0. The
> Trilinos package in Debian and Ubuntu is not built with SWIG 2.0. This
> means that I must build the DOLFIN package without support for
> Trilinos.
>
I wouldn't bother about this - the Debian/Ubuntu PETSc and Trilinos
packages are not great.
Also, Trilinos 10.8 will require Swig 2.0.
Garth
> Johannes
>
> _______________________________________________
> Mailing list: https://launchpad.net/~dolfin
> Post to : dolfin@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~dolfin
> More help : https://help.launchpad.net/ListHelp
Follow ups
References