From - Fri Dec 4 08:05:39 1998 Received: from cliffy.statsci.com (root@cliffy.statsci.com [206.63.206.72]) by server.divms.uiowa.edu with id MAA14931 for ; Thu, 3 Dec 1998 12:28:13 -0600 (CST) Received: from adlib2 (adlib2 [206.63.206.104]) by cliffy.statsci.com (8.8.8/8.8.8/Hub) with SMTP id KAA28911; Thu, 3 Dec 1998 10:28:02 -0800 Message-Id: <3.0.5.32.19981203102809.01371ec0@mailhost.statsci.com> X-Sender: johnc@mailhost.statsci.com X-Mailer: QUALCOMM Windows Eudora Pro Version 3.0.5 (32) Date: Thu, 03 Dec 1998 10:28:09 -0800 To: David Stewart From: John Cornelison Subject: Re: VStudio version of Meschach Library available?! Cc: Zbigniew Leyk In-Reply-To: <36669B2E.809B959C@math.uiowa.edu> References: <3.0.5.32.19981202145120.0106bec0@mailhost.statsci.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" X-Mozilla-Status: 8013 X-Mozilla-Status2: 00000000 Thanks for the fast reply. I'll send you another note once it's working. It now compiles fine into a .DLL with the following mods (hacks?!): The largest problem was figuring out to not include some of the miscellaneous source files that are used for QA & utility & legacy support. Once I read the makefile it was easy to set up. I'll send you the necessary project files once I complete things. As far as coding goes, in machine.h, right near the end, I've added: #ifndef WIN32 #define LIBEXPORT #else /* Comment out the following line if NOT building Meschach.DLL! */ /* TODO: Eventually this should be defined on the compile line only when building the DLL */ #define DLLCREATION #ifdef DLLCREATION /* Including code is internal to the DLL */ #define MLibImport _declspec(dllexport) #define MLibExport _declspec(dllimport) #define LIBEXPORT MLibImport #else /* Including code is external to the DLL */ #define MLibImport _declspec(dllimport) #define MLibExport _declspec(dllexport) #define LIBEXPORT MLibExport #endif #ifdef WORDS_BIGENDIAN /* Win32 is always little endian */ #undef WORDS_BIGENDIAN #endif #ifdef HUGE_VAL /* HUGE_VAL later defined in math.h */ #undef HUGE_VAL #endif #if defined(_DEBUG) && defined(_MSC_VER) /* WARNING: Disabling the many "signed/unsigned mismatch" warnings so others stand out! */ /* These happen when comparing an unsigned int with a regular signed int but should be fixed! */ #pragma warning(disable:4018) #endif #endif /* WIN32 */ The only significant thing here is to explicitly define what routines are being exported (or imported) from the DLL. This is done with Microsoft's delightful _declspec(dllexport) & _declspec(dllimport) expressions. Next I had to go through all function declarations & insert the LIBEXPORT define. Ideally this should ONLY be done for routines that are made publicly available from the library, i.e., not utility routines for internal use only, but I put it in all the declarations in sparse.h; err.h; iter.h; matrix.h; sparse2.h; meminfo.h. I left the complex libraries for another day. A sample of this is from the matrix.h file: /* miscellaneous functions */ #ifndef ANSI_C extern double LIBEXPORT square(), cube(), mrand(); extern void LIBEXPORT smrand(), mrandlist(); extern void LIBEXPORT m_dump(), px_dump(), v_dump(), iv_dump(); extern MAT LIBEXPORT *band2mat(); extern BAND LIBEXPORT *mat2band(); #else double LIBEXPORT square(double x), /* returns x^2 */ cube(double x), /* returns x^3 */ mrand(void); /* returns random # in [0,1) */ void LIBEXPORT smrand(int seed), /* seeds mrand() */ mrandlist(Real *x, int len); /* generates len random numbers */ void LIBEXPORT m_dump(FILE *fp,MAT *a), px_dump(FILE *,PERM *px), v_dump(FILE *fp,VEC *x), iv_dump(FILE *fp, IVEC *ix); MAT LIBEXPORT *band2mat(BAND *bA, MAT *A); BAND LIBEXPORT *mat2band(MAT *A, int lb,int ub, BAND *bA); #endif It is sort of ugly, and I probably messed up all your formatting but it at least works and won't break things on other platforms. The only warnings that now appear during a full compilation (again, I've left out all the z*.c routines) are: Deleting intermediate files and output files for project 'Meschach - Win32 Debug'. --------------------Configuration: Meschach - Win32 Debug-------------------- Compiling... bdfactor.c bkpfacto.c chfactor.c copy.c err.c D:\Meschach\Source\err.c(328) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(int )' D:\Meschach\Source\err.c(337) : warning C4113: 'void (__cdecl *)()' differs in parameter lists from 'void (__cdecl *)(int )' fft.c givens.c hessen.c hsehldr.c init.c iter0.c iternsym.c itersym.c D:\Meschach\Source\itersym.c(424) : warning C4113: 'int (__cdecl *)()' differs in parameter lists from 'int (__cdecl *)(const void *,const void *)' ivecop.c lufactor.c machine.c matlab.c matop.c matrixio.c meminfo.c memory.c memstat.c mfunc.c D:\Meschach\Source\mfunc.c(174) : warning C4244: '=' : conversion from 'double ' to 'int ', possible loss of data norm.c otherio.c pxop.c qrfactor.c schur.c D:\Meschach\Source\schur.c(158) : warning C4101: 't' : unreferenced local variable solve.c sparse.c sparseio.c spbkp.c D:\Meschach\Source\spbkp.c(1244) : warning C4113: 'int (__cdecl *)()' differs in parameter lists from 'int (__cdecl *)(const void *,const void *)' spchfctr.c splufctr.c sprow.c spswap.c submat.c svd.c symmeig.c update.c vecop.c version.c Linking... Creating library Debug/Meschach.lib and object Debug/Meschach.exp Creating browse info file... Meschach.dll - 0 error(s), 6 warning(s) At 08:07 AM 12/3/98 -0600, David Stewart wrote: >John Cornelison wrote: >> >> Hi, I'm starting to get the library to work in the Win32 environment and >> was curious if you are aware of anyone else that may have done this already. >> >> Specifically I'd appreciate pointers to anyone that has wrapped this into a >> Visual Studio project. I know Visual Studio is super platform specific so >> is not something you are likely to promote, but knowing about this would >> save us some time. >> >> Also I understand from the readme that you have an electronic form of the >> manual I can ask for. If easy, I would appreciate a copy of that. We are >> using the sparse matrix processing functionality for a small research >> project we're considering and getting improvements of many magnitudes over >> our previous techniques. >> >> Thanks in advance for doing all this incredible work! >> >> -John > >You can get a **partial** on-line manual via > > http://www.math.uiowa.edu/~dstewart/meschach/ > >However, this doesn't include the sparse matrix stuff. >There have been some others who have worked on MS-DOS ports of >Meschach. However, I haven't been keeping up with the status of these >efforts. And I ceratinly haven't heard of anyone using it in >Visual Studio. Zbigniew and I are glad to hear of another happy >user though! > >Neither Zbigniew nor I have had much time to devote to Meschach >in the past few years, which has (unfortunately) stalled its >development... You should also look for matrix re-ordering techniques >(I have some code for the Gibbs-Poole-Stockmeyer method for >Meschach, if you would like that. Someone else developed it, >so I can't say much regarding it; the algorithm is not the best >matrix re-ordering technique for general sparse matrices, but >it definitely better than standard orderings for most problems.) Sure, if convenient, I would appreciate getting this. >Also: please note the new email addresses! > > -- David Stewart Thanks again for developing the library! ---------------------------------------------------------------------------- http://www.MathSoft.com, Data Analysis Products Division 1700 Westlake Av N, Suite 500, Seattle, WA 98109-3012 206.283.8802x243, 283.8691fax, johnc@statsci.com, NIC JHC7 ----------------------------------------------------------------------------