19{
20 int ret=1;
21 int64_t symid;
23 vhcall_args *ca;
24 uint64_t retval;
25
26 char * env_metis_lib_name;
28
29
30
31
32
33
34
35 if ( env_metis_lib_name = getenv( "VH_MUMPS_LIBRARY" ) ) {
36 size_t lenv = strlen( env_metis_lib_name );
38 fprintf( stdout , "%s @ %d failed : metis library name too long (%s)\n" , basename(__FILE__) , __LINE__ , env_metis_lib_name );
39 fflush( stdout );
41 }
42 else {
43 memcpy( ( void * ) metis_lib_name , ( void * ) env_metis_lib_name , lenv * sizeof( char) );
44 metis_lib_name[ lenv ] = '\0';
45 fprintf( stdout , "%s @ %d input library %s\n" , basename(__FILE__) , __LINE__ , metis_lib_name );
46 fflush( stdout );
47 }
48 }
49 else {
50 strcpy( metis_lib_name , "libvh.so" );
51 }
52
53
54
55
56
57
58
59 handle = vhcall_install( metis_lib_name );
60 if (
handle == (vhcall_handle)-1) {
61 perror("vhcall_install");
62 fprintf( stdout , "%s @ %d failed : can't install library %s\n" , basename(__FILE__) , __LINE__ , metis_lib_name );
63 fprintf( stdout , "Please check your LD_LIBRARY_PATH variable\n");
64 fflush( stdout );
66 }
67
68
69
70
71
72
73
74 symid = vhcall_find(
handle,
"mumps_ana_h_");
75 if ( symid == -1 ) {
76 fprintf( stdout , "%s @ %d failed : can't find symbol MUMPS_ANA_H\n" , basename(__FILE__) , __LINE__ );
77 perror("vhcall_find");
78 fflush( stdout );
80 }
81
82
83
84
85
86
87
88 ca = vhcall_args_alloc();
89 if ( ! ca ) {
90 perror("vhcall_args_alloc");
91 fprintf( stdout , "%s @ %d failed : unable to allocate function's argument list\n" , basename(__FILE__) , __LINE__ );
92 fflush( stdout );
94 }
95
96
97
98
99
100
101
102 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 0 , &TOTEL , sizeof( int ) );
103 if ( ret ) {
104 perror("vhcall_args_set_pointer");
105 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
106 fflush( stdout );
108 }
109
110 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 1 , &COMPUTE_PERM , sizeof( bool ) );
111 if ( ret ) {
112 perror("vhcall_args_set_pointer");
113 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
114 fflush( stdout );
116 }
117
118 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 2 , &
N ,
sizeof(
int ) );
119 if ( ret ) {
120 perror("vhcall_args_set_pointer");
121 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
122 fflush( stdout );
124 }
125
126 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_IN , 3 , &IWLEN , sizeof( int64_t ) );
127 if ( ret ) {
128 perror("vhcall_args_set_pointer");
129 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
130 fflush( stdout );
132 }
133
134 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , 4 , PE ,
N *
sizeof( int64_t ) );
135 if ( ret ) {
136 perror("vhcall_args_set_pointer");
137 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
138 fflush( stdout );
140 }
141
142 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , 5 , PFREE , sizeof( int64_t ) );
143 if ( ret ) {
144 perror("vhcall_args_set_pointer");
145 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
146 fflush( stdout );
148 }
149
150 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , 6 , LEN ,
N *
sizeof(
int ) );
151 if ( ret ) {
152 perror("vhcall_args_set_pointer");
153 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
154 fflush( stdout );
156 }
157
158 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , 7 , IW , IWLEN * sizeof( int ) );
159 if ( ret ) {
160 perror("vhcall_args_set_pointer");
161 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
162 fflush( stdout );
164 }
165
166 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT , 8 , NV ,
N *
sizeof(
int ) );
167 if ( ret ) {
168 perror("vhcall_args_set_pointer");
169 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
170 fflush( stdout );
172 }
173
174 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT , 9 , ELEN ,
N *
sizeof(
int ) );
175 if ( ret ) {
176 perror("vhcall_args_set_pointer");
177 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
178 fflush( stdout );
180 }
181
182 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT ,10 , LAST ,
N *
sizeof(
int ) );
183 if ( ret ) {
184 perror("vhcall_args_set_pointer");
185 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
186 fflush( stdout );
188 }
189
190 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT ,11 , NCMPA , sizeof( int ) );
191 if ( ret ) {
192 perror("vhcall_args_set_pointer");
193 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
194 fflush( stdout );
196 }
197
198 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT ,12 , DEGREE ,
N *
sizeof(
int ) );
199 if ( ret ) {
200 perror("vhcall_args_set_pointer");
201 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
202 fflush( stdout );
204 }
205
206 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT ,13 , HEAD , TOTEL * sizeof( int ) );
207 if ( ret ) {
208 perror("vhcall_args_set_pointer");
209 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
210 fflush( stdout );
212 }
213
214 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT ,14 , NEXT ,
N *
sizeof(
int ) );
215 if ( ret ) {
216 perror("vhcall_args_set_pointer");
217 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
218 fflush( stdout );
220 }
221
222 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_INOUT ,15 , W ,
N *
sizeof(
int ) );
223 if ( ret ) {
224 perror("vhcall_args_set_pointer");
225 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
226 fflush( stdout );
228 }
229
230 ret = vhcall_args_set_pointer( ca , VHCALL_INTENT_OUT ,16 , PARENT ,
N *
sizeof(
int ) );
231 if ( ret ) {
232 perror("vhcall_args_set_pointer");
233 fprintf( stdout , "%s @ %d failed : unable to set argument.\n" , basename(__FILE__) , __LINE__ );
234 fflush( stdout );
236 }
237
238
239
240
241
242
243
244 ret = vhcall_invoke_with_args( symid , ca , &retval );
245 if ( ret ) {
246 perror("vhcall_invoke_with_args");
247 fprintf( stdout , "%s @ %d failed : unable to invoke the symbol from library\n" , basename(__FILE__) , __LINE__ );
248 fflush( stdout );
250 }
251
252
253
254
255
256
257
258 vhcall_args_free( ca );
259
260
261
262
263
264
265
266 if ( vhcall_uninstall(
handle ) ) {
267 perror("vhcall_uninstall");
268 fprintf( stdout , "cvhmetis_nodend failed : unable to uninstall the library\n" , basename(__FILE__) , __LINE__ );
269 fflush( stdout );
271 }
272}
#define NECVH_MAX_LIBNAME