15 {
16 int ret=1;
17 int64_t symid;
19 vhcall_args *ca;
20 uint64_t retval = -1;
21
22 char * env_metis_lib_name;
24
25
26
27
28
29
30
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 );
35 fflush( stdout );
37 }
38 else {
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 );
42 fflush( stdout );
43 }
44 }
45 else {
46 strcpy( metis_lib_name , "libvh.so" );
47 }
48
49
50
51
52
53
54
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");
60 fflush( stdout );
62 }
63
64
65
66
67
68
69
70 symid = vhcall_find(
handle,
"METIS_NodeND");
71 if ( symid == -1 ) {
72 perror("vhcall_find");
73 fprintf( stdout , "%s @ %d failed : can't find symbol METIS_NodeND\n" , basename(__FILE__) , __LINE__ );
74 fflush( stdout );
76 }
77
78
79
80
81
82
83
84 ca = vhcall_args_alloc();
85 if (! ca) {
86 perror("vhcall_args_alloc");
87 fprintf( stdout , "%s @ %d failed : unable to allocate function's argument list\n" , basename(__FILE__) , __LINE__ );
88 fflush( stdout );
90 }
91
92
93
94
95
96
97
98 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 0 , nvtxs , sizeof( idx_t ) );
99 if ( ret ) {
100 perror("vhcall_args_set_pointer");
101 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
102 fflush( stdout );
104 }
105
106 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 1 , xadj , ( *nvtxs + 1 ) * sizeof( idx_t ) );
107 if ( ret ) {
108 perror("vhcall_args_set_pointer");
109 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
110 fflush( stdout );
112 }
113
114 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 2 , adjncy , xadj[ *nvtxs ] * sizeof( idx_t ) );
115 if ( ret ) {
116 perror("vhcall_args_set_pointer");
117 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
118 fflush( stdout );
120 }
121
122 int len;
123 if ( vwgt )
124 len = *nvtxs;
125 else
126 len = 0;
127
128 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 3 , vwgt , len * sizeof( idx_t ) );
129 if ( ret ) {
130 perror("vhcall_args_set_pointer");
131 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
132 fflush( stdout );
134 }
135
136 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 4 , options , METIS_NOPTIONS * sizeof( idx_t ) );
137 if ( ret ) {
138 perror("vhcall_args_set_pointer");
139 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
140 fflush( stdout );
142 }
143
144 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , 5 , perm , *nvtxs * sizeof( idx_t ) );
145 if ( ret ) {
146 perror("vhcall_args_set_pointer");
147 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
148 fflush( stdout );
150 }
151
152 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , 6 , iperm , *nvtxs * sizeof( idx_t ) );
153 if ( ret ) {
154 perror("vhcall_args_set_pointer");
155 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
156 fflush( stdout );
158 }
159
160
161
162
163
164
165
166 ret = vhcall_invoke_with_args( symid , ca , &retval );
167 if ( ret ) {
168 perror("vhcall_invoke_with_args");
169 fprintf( stdout , "%s @ %d failed : unable to invoke the symbol from library\n" , basename(__FILE__) , __LINE__ );
170 fflush( stdout );
172 }
173
174
175
176
177
178
179
180 vhcall_args_free( ca );
181
182
183
184
185
186
187
188 if ( vhcall_uninstall(
handle ) ) {
189 perror("vhcall_uninstall");
190 fprintf( stdout , "%s @ %d failed : unable to uninstall the library\n" , basename(__FILE__) , __LINE__ );
191 fflush( stdout );
193 }
194
195 return( (int) retval );
196}
#define NECVH_MAX_LIBNAME