15int VE_Metis_nodend(
int * nvtxs ,
int * xadj ,
int * adjncy ,
int * vwgt,
int * options ,
int * perm ,
int * iperm ) {
22 char * env_metis_lib_name;
31 if ( env_metis_lib_name = getenv(
"VH_MUMPS_LIBRARY" ) ) {
32 size_t lenv = strlen( env_metis_lib_name );
34 fprintf( stdout ,
"%s @ %d failed : metis library name too long (%s)\n" , basename(__FILE__) , __LINE__ , env_metis_lib_name );
39 memcpy( (
void * ) metis_lib_name , (
void * ) env_metis_lib_name , lenv *
sizeof(
char) );
40 metis_lib_name[ lenv ] =
'\0';
41 fprintf( stdout ,
"%s @ %d input library %s\n" , basename(__FILE__) , __LINE__ , metis_lib_name );
46 strcpy( metis_lib_name ,
"libvh.so" );
55 handle = vhcall_install( metis_lib_name );
56 if (
handle == (vhcall_handle)-1) {
57 perror(
"vhcall_install");
58 fprintf( stdout ,
"%s @ %d failed : can't install library %s\n" , basename(__FILE__) , __LINE__ , metis_lib_name );
59 fprintf( stdout ,
"Please check your LD_LIBRARY_PATH variable\n");
70 symid = vhcall_find(
handle,
"METIS_NodeND");
72 perror(
"vhcall_find");
73 fprintf( stdout ,
"%s @ %d failed : can't find symbol METIS_NodeND\n" , basename(__FILE__) , __LINE__ );
84 ca = vhcall_args_alloc();
86 perror(
"vhcall_args_alloc");
87 fprintf( stdout ,
"%s @ %d failed : unable to allocate function's argument list\n" , basename(__FILE__) , __LINE__ );
98 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 0 , nvtxs ,
sizeof( idx_t ) );
100 perror(
"vhcall_args_set_pointer");
101 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
106 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 1 , xadj , ( *nvtxs + 1 ) *
sizeof( idx_t ) );
108 perror(
"vhcall_args_set_pointer");
109 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
114 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 2 , adjncy , xadj[ *nvtxs ] *
sizeof( idx_t ) );
116 perror(
"vhcall_args_set_pointer");
117 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
128 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 3 , vwgt , len *
sizeof( idx_t ) );
130 perror(
"vhcall_args_set_pointer");
131 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
136 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 4 , options , METIS_NOPTIONS *
sizeof( idx_t ) );
138 perror(
"vhcall_args_set_pointer");
139 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
144 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , 5 , perm , *nvtxs *
sizeof( idx_t ) );
146 perror(
"vhcall_args_set_pointer");
147 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
152 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , 6 , iperm , *nvtxs *
sizeof( idx_t ) );
154 perror(
"vhcall_args_set_pointer");
155 fprintf( stdout ,
"%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
166 ret = vhcall_invoke_with_args( symid , ca , &retval );
168 perror(
"vhcall_invoke_with_args");
169 fprintf( stdout ,
"%s @ %d failed : unable to invoke the symbol from library\n" , basename(__FILE__) , __LINE__ );
180 vhcall_args_free( ca );
188 if ( vhcall_uninstall(
handle ) ) {
189 perror(
"vhcall_uninstall");
190 fprintf( stdout ,
"%s @ %d failed : unable to uninstall the library\n" , basename(__FILE__) , __LINE__ );
195 return( (
int) retval );