16 int64_t * PE , int64_t * PFREE ,
int * LEN ,
int * IW ,
int * NV ,
17 int * ELEN ,
int * LAST ,
int * NCMPA ,
int * DEGREE ,
int * HEAD ,
18 int * NEXT ,
int * W ,
int *
PERM ,
int * LISTVAR_SCHUR ,
int SIZE_SCHUR ,
19 int AGG6 ,
int * PARENT )
27 char * env_metis_lib_name;
36 if ( env_metis_lib_name = getenv(
"VH_MUMPS_LIBRARY" ) ) {
37 size_t lenv = strlen( env_metis_lib_name );
39 fprintf( stdout ,
"%s @ %d failed : metis library name too long (%s)\n" , basename(__FILE__) , __LINE__ , env_metis_lib_name );
44 memcpy( (
void * ) metis_lib_name , (
void * ) env_metis_lib_name , lenv *
sizeof(
char) );
45 metis_lib_name[ lenv ] =
'\0';
46 fprintf( stdout ,
"%s @ %d input library %s\n" , basename(__FILE__) , __LINE__ , metis_lib_name );
51 strcpy( metis_lib_name ,
"libvh.so" );
60 handle = vhcall_install( metis_lib_name );
61 if (
handle == (vhcall_handle)-1) {
62 perror(
"vhcall_install");
63 fprintf( stdout ,
"%s @ %d failed : can't install library %s\n" , basename(__FILE__) , __LINE__ , metis_lib_name );
64 fprintf( stdout ,
"Please check your LD_LIBRARY_PATH variable\n");
75 symid = vhcall_find(
handle,
"mumps_symqamd_");
77 fprintf( stdout ,
"%s @ %d failed : can't find symbol MUMPS_SYMQAMD\n" , basename(__FILE__) , __LINE__ );
78 perror(
"vhcall_find");
89 ca = vhcall_args_alloc();
91 perror(
"vhcall_args_alloc");
92 fprintf( stdout ,
"%s @ %d failed : unable to allocate function's argument list\n" , basename(__FILE__) , __LINE__ );
103 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &THRESH ,
sizeof(
int ) );
105 perror(
"vhcall_args_set_pointer");
106 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
111 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , NDENSE ,
N *
sizeof(
int ) );
113 perror(
"vhcall_args_set_pointer");
114 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
119 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &
N ,
sizeof(
int ) );
121 perror(
"vhcall_args_set_pointer");
122 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
127 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &TOTEL ,
sizeof(
int ) );
129 perror(
"vhcall_args_set_pointer");
130 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
135 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &IWLEN ,
sizeof( int64_t ) );
137 perror(
"vhcall_args_set_pointer");
138 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
143 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , PE ,
N *
sizeof( int64_t ) );
145 perror(
"vhcall_args_set_pointer");
146 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
151 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , PFREE ,
sizeof( int64_t ) );
153 perror(
"vhcall_args_set_pointer");
154 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
159 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , LEN ,
N *
sizeof(
int ) );
161 perror(
"vhcall_args_set_pointer");
162 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
167 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , IW , IWLEN *
sizeof(
int ) );
169 perror(
"vhcall_args_set_pointer");
170 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
175 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , NV ,
N *
sizeof(
int ) );
177 perror(
"vhcall_args_set_pointer");
178 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
183 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , ELEN ,
N *
sizeof(
int ) );
185 perror(
"vhcall_args_set_pointer");
186 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
191 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , LAST , TOTEL *
sizeof(
int ) );
193 perror(
"vhcall_args_set_pointer");
194 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
199 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , NCMPA ,
sizeof(
int ) );
201 perror(
"vhcall_args_set_pointer");
202 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
207 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , DEGREE ,
N *
sizeof(
int ) );
209 perror(
"vhcall_args_set_pointer");
210 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
215 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , HEAD , TOTEL *
sizeof(
int ) );
217 perror(
"vhcall_args_set_pointer");
218 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
223 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , NEXT ,
N *
sizeof(
int ) );
225 perror(
"vhcall_args_set_pointer");
226 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
231 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , W ,
N *
sizeof(
int ) );
233 perror(
"vhcall_args_set_pointer");
234 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
239 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ ,
PERM ,
N *
sizeof(
int ) );
241 perror(
"vhcall_args_set_pointer");
242 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
247 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , LISTVAR_SCHUR , ( SIZE_SCHUR ? SIZE_SCHUR : 1 ) *
sizeof(
int ) );
249 perror(
"vhcall_args_set_pointer");
250 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
255 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , &SIZE_SCHUR ,
sizeof(
int ) );
257 perror(
"vhcall_args_set_pointer");
258 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
263 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &AGG6 ,
sizeof(
int ) );
265 perror(
"vhcall_args_set_pointer");
266 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
271 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , PARENT ,
N *
sizeof(
int ) );
273 perror(
"vhcall_args_set_pointer");
274 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
285 ret = vhcall_invoke_with_args( symid , ca , &retval );
287 perror(
"vhcall_invoke_with_args");
288 fprintf( stdout ,
"%s @ %d failed : unable to invoke the symbol from library\n" , basename(__FILE__) , __LINE__ );
299 vhcall_args_free( ca );
307 if ( vhcall_uninstall(
handle ) ) {
308 perror(
"vhcall_uninstall");
309 fprintf( stdout ,
"cvhmetis_nodend failed : unable to uninstall the library\n" , basename(__FILE__) , __LINE__ );