20{
21 int ret=1,iarg;
22 int64_t symid;
24 vhcall_args *ca;
25 uint64_t retval;
26
27 char * env_metis_lib_name;
29
30
31
32
33
34
35
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 );
40 fflush( stdout );
42 }
43 else {
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 );
47 fflush( stdout );
48 }
49 }
50 else {
51 strcpy( metis_lib_name , "libvh.so" );
52 }
53
54
55
56
57
58
59
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");
65 fflush( stdout );
67 }
68
69
70
71
72
73
74
75 symid = vhcall_find(
handle,
"mumps_symqamd_");
76 if ( symid == -1 ) {
77 fprintf( stdout , "%s @ %d failed : can't find symbol MUMPS_SYMQAMD\n" , basename(__FILE__) , __LINE__ );
78 perror("vhcall_find");
79 fflush( stdout );
81 }
82
83
84
85
86
87
88
89 ca = vhcall_args_alloc();
90 if ( ! ca ) {
91 perror("vhcall_args_alloc");
92 fprintf( stdout , "%s @ %d failed : unable to allocate function's argument list\n" , basename(__FILE__) , __LINE__ );
93 fflush( stdout );
95 }
96
97
98
99
100
101
102 iarg = 0;
103 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &THRESH , sizeof( int ) );
104 if ( ret ) {
105 perror("vhcall_args_set_pointer");
106 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
107 fflush( stdout );
109 }
110
111 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , NDENSE ,
N *
sizeof(
int ) );
112 if ( ret ) {
113 perror("vhcall_args_set_pointer");
114 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
115 fflush( stdout );
117 }
118
119 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &
N ,
sizeof(
int ) );
120 if ( ret ) {
121 perror("vhcall_args_set_pointer");
122 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
123 fflush( stdout );
125 }
126
127 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &TOTEL , sizeof( int ) );
128 if ( ret ) {
129 perror("vhcall_args_set_pointer");
130 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
131 fflush( stdout );
133 }
134
135 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &IWLEN , sizeof( int64_t ) );
136 if ( ret ) {
137 perror("vhcall_args_set_pointer");
138 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
139 fflush( stdout );
141 }
142
143 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , PE ,
N *
sizeof( int64_t ) );
144 if ( ret ) {
145 perror("vhcall_args_set_pointer");
146 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
147 fflush( stdout );
149 }
150
151 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , PFREE , sizeof( int64_t ) );
152 if ( ret ) {
153 perror("vhcall_args_set_pointer");
154 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
155 fflush( stdout );
157 }
158
159 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , LEN ,
N *
sizeof(
int ) );
160 if ( ret ) {
161 perror("vhcall_args_set_pointer");
162 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
163 fflush( stdout );
165 }
166
167 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , IW , IWLEN * sizeof( int ) );
168 if ( ret ) {
169 perror("vhcall_args_set_pointer");
170 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
171 fflush( stdout );
173 }
174
175 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , NV ,
N *
sizeof(
int ) );
176 if ( ret ) {
177 perror("vhcall_args_set_pointer");
178 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
179 fflush( stdout );
181 }
182
183 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , ELEN ,
N *
sizeof(
int ) );
184 if ( ret ) {
185 perror("vhcall_args_set_pointer");
186 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
187 fflush( stdout );
189 }
190
191 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , LAST , TOTEL * sizeof( int ) );
192 if ( ret ) {
193 perror("vhcall_args_set_pointer");
194 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
195 fflush( stdout );
197 }
198
199 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , NCMPA , sizeof( int ) );
200 if ( ret ) {
201 perror("vhcall_args_set_pointer");
202 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
203 fflush( stdout );
205 }
206
207 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , DEGREE ,
N *
sizeof(
int ) );
208 if ( ret ) {
209 perror("vhcall_args_set_pointer");
210 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
211 fflush( stdout );
213 }
214
215 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , HEAD , TOTEL * sizeof( int ) );
216 if ( ret ) {
217 perror("vhcall_args_set_pointer");
218 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
219 fflush( stdout );
221 }
222
223 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , NEXT ,
N *
sizeof(
int ) );
224 if ( ret ) {
225 perror("vhcall_args_set_pointer");
226 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
227 fflush( stdout );
229 }
230
231 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , W ,
N *
sizeof(
int ) );
232 if ( ret ) {
233 perror("vhcall_args_set_pointer");
234 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
235 fflush( stdout );
237 }
238
239 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ ,
PERM ,
N *
sizeof(
int ) );
240 if ( ret ) {
241 perror("vhcall_args_set_pointer");
242 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
243 fflush( stdout );
245 }
246
247 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , LISTVAR_SCHUR , ( SIZE_SCHUR ? SIZE_SCHUR : 1 ) * sizeof( int ) );
248 if ( ret ) {
249 perror("vhcall_args_set_pointer");
250 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
251 fflush( stdout );
253 }
254
255 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , iarg++ , &SIZE_SCHUR , sizeof( int ) );
256 if ( ret ) {
257 perror("vhcall_args_set_pointer");
258 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
259 fflush( stdout );
261 }
262
263 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , iarg++ , &AGG6 , sizeof( int ) );
264 if ( ret ) {
265 perror("vhcall_args_set_pointer");
266 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
267 fflush( stdout );
269 }
270
271 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , iarg++ , PARENT ,
N *
sizeof(
int ) );
272 if ( ret ) {
273 perror("vhcall_args_set_pointer");
274 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
275 fflush( stdout );
277 }
278
279
280
281
282
283
284
285 ret = vhcall_invoke_with_args( symid , ca , &retval );
286 if ( ret ) {
287 perror("vhcall_invoke_with_args");
288 fprintf( stdout , "%s @ %d failed : unable to invoke the symbol from library\n" , basename(__FILE__) , __LINE__ );
289 fflush( stdout );
291 }
292
293
294
295
296
297
298
299 vhcall_args_free( ca );
300
301
302
303
304
305
306
307 if ( vhcall_uninstall(
handle ) ) {
308 perror("vhcall_uninstall");
309 fprintf( stdout , "cvhmetis_nodend failed : unable to uninstall the library\n" , basename(__FILE__) , __LINE__ );
310 fflush( stdout );
312 }
313}