WG: [Coin-ipopt] Matlab interface

jens.pettersson at se.abb.com jens.pettersson at se.abb.com
Tue Jun 21 03:25:32 EDT 2005

I dont think it is the C_out routine that causes the problems because when 
I debug the Ipopt.dll, it crashes on the first occurece of any "write".
I tested by inserting this line in the head of IPOPT.F :

write(line,*) 'Test'

which gives the funny error:
First-chance exception at 0x01d37ff5 (Ipopt.dll) in matlab.exe: 
Access violation reading location 0x00000000.


Message from Andreas Waechter <andreasw at watson.ibm.com> received on 
2005-06-20 17:18

2005-06-20 17:18

Andreas Waechter <andreasw at watson.ibm.com>

        To:     Jens Pettersson/SECRC/ABB at ABB_SECRC
        cc:     hauan at cmu.edu, <Claas.Michalik at rwth-aachen.de>, 
<coin-ipopt at list.coin-or.org>
        Subject:        Re: WG: [Coin-ipopt] Matlab interface


At some earlier point, a colleague had written a MEX interface for Ipopt
(years back...) and we ran into the same problem.

If I remember correctly, the problem is that under Windows the MEX
"executable" cannot write to standard output directly.  Instead some
Matlab-provided function must be used (something like mexPrintf?).

Because of those problems, all output of Ipopt to standard out is directed
through the subroutine "C_OUT" (see COIN/Ipopt/IPOPT/ipopt/c_out.f).  In
principle, the only change necessary to fix the problem you describe, all
that has to be done is to replace the line containing "WRITE(*,8000)" by
some appropriate call to a Matlab function.

Since mexPrintf expects a C-style string, this probably has to go through
a C-wrapper function, i.e., instead of those "WRITE(*,8000)" statement a C
function is called that then transfers the Fortran-style string (without
'\0') to a C-style string (adding '\n\0' at the end, after copying!!!) and
then calling mexPrintf from C.  Here, the lines with WRITE(*,8000) only in
them (no LINES argument) are responsible for printing empty lines.

I hope that all output to files is still working, so that it is really
only C_OUT that has to be adapted.


On Mon, 20 Jun 2005 jens.pettersson at se.abb.com wrote:

> Hi Steinar,
>  to cut a long story short:
> I managed to compile and create a mex-Dll using MSVC .NET and your 
> It is also possible to call this dll from Matlab but for some reasons it
> crashes in the Ipopt-dll.
> I debugged to find the error and it seams that the crash occurs when the
> first "write" commando is excecuted. I tested by manually comment away 
> write commando whcih caused the latest crash but then it only crashed on
> the next one, etc.
> Is there any one who knows why the seemingly inocent write- comando in
> Fortran does not work with mex-files??
> Also, I mean that the code is full with "write":s so there is not point 
> commenting away all af them.... ??
> //Jens

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.coin-or.org/pipermail/ipopt/attachments/20050621/c4f8bebd/attachment-0045.html 

More information about the Coin-ipopt mailing list