273{
274
275
276
277
294 MUMPS_INT *irhs_sparse, *irhs_ptr, *isol_loc, *irhs_loc;
295 MUMPS_INT irn_avail, jcn_avail, a_avail, rhs_avail, redrhs_avail;
296
297
298
299
300 MUMPS_INT irn_loc_avail, jcn_loc_avail, a_loc_avail;
301 MUMPS_INT eltptr_avail, eltvar_avail, a_elt_avail;
304 MUMPS_INT irhs_ptr_avail, rhs_sparse_avail, sol_loc_avail, rhs_loc_avail;
305 MUMPS_INT irhs_sparse_avail, isol_loc_avail, irhs_loc_avail;
311
315
322 int i;
325 idummyp = &idummy;
326 cdummyp = &cdummy;
327 rdummyp = &rdummy;
328
329
330
331
334
335 if ( mumps_par->job == -1 )
336 {
337 mumps_par->irn=0; mumps_par->jcn=0; mumps_par->a=0; mumps_par->rhs=0; mumps_par->wk_user=0;
338 mumps_par->redrhs=0;
339 mumps_par->eltptr=0; mumps_par->eltvar=0; mumps_par->a_elt=0; mumps_par->blkptr=0; mumps_par->blkvar=0; mumps_par->perm_in=0; mumps_par->sym_perm=0; mumps_par->uns_perm=0; mumps_par->irn_loc=0;mumps_par->jcn_loc=0;mumps_par->a_loc=0; mumps_par->listvar_schur=0;mumps_par->schur=0;mumps_par->mapping=0;mumps_par->pivnul_list=0;mumps_par->colsca=0;mumps_par->colsca_from_mumps=0;mumps_par->rowsca=0;mumps_par->rowsca_from_mumps=0; mumps_par->rhs_sparse=0; mumps_par->irhs_sparse=0; mumps_par->sol_loc=0; mumps_par->rhs_loc=0; mumps_par->irhs_ptr=0; mumps_par->isol_loc=0; mumps_par->irhs_loc=0;
340 strcpy(mumps_par->ooc_tmpdir,"NAME_NOT_INITIALIZED");
341 strcpy(mumps_par->ooc_prefix,"NAME_NOT_INITIALIZED");
342 strcpy(mumps_par->write_problem,"NAME_NOT_INITIALIZED");
343 strcpy(mumps_par->save_dir,"NAME_NOT_INITIALIZED");
344 strcpy(mumps_par->save_prefix,"NAME_NOT_INITIALIZED");
347
348
349
350 mumps_par->n=0; mumps_par->nblk=0; mumps_par->nz=0; mumps_par->nnz=0; mumps_par->nz_loc=0; mumps_par->nnz_loc=0; mumps_par->nelt=0;mumps_par->instance_number=0;mumps_par->deficiency=0;mumps_par->lwk_user=0;mumps_par->size_schur=0;mumps_par->lrhs=0; mumps_par->lredrhs=0; mumps_par->nrhs=0; mumps_par->nz_rhs=0; mumps_par->lsol_loc=0; mumps_par->nloc_rhs=0; mumps_par->lrhs_loc=0;
351 mumps_par->schur_mloc=0; mumps_par->schur_nloc=0; mumps_par->schur_lld=0; mumps_par->mblock=0; mumps_par->nblock=0; mumps_par->nprow=0; mumps_par->npcol=0;
352 }
353 ooc_tmpdirlen=(int)strlen(mumps_par->ooc_tmpdir);
354 ooc_prefixlen=(int)strlen(mumps_par->ooc_prefix);
355 write_problemlen=(int)strlen(mumps_par->write_problem);
356 save_dirlen =(int)strlen(mumps_par->save_dir);
357 save_prefixlen=(int)strlen(mumps_par->save_prefix);
358
359
360
361
362
363 if(ooc_tmpdirlen > 255){
364 ooc_tmpdirlen=255;
365 }
366 if(ooc_prefixlen > 63){
367 ooc_prefixlen=63;
368 }
369 if(write_problemlen > 255){
370 write_problemlen=255;
371 }
372 if(save_dirlen > 255){
373 save_dirlen=255;
374 }
375 if(save_prefixlen > 255){
376 save_prefixlen=255;
377 }
378
379
380
381
382#define EXTRACT_POINTERS(component,dummypointer) \
383 if ( mumps_par-> component == 0) \
384 { component = dummypointer; \
385 component ## _avail = no; } \
386 else \
387 { component = mumps_par-> component; \
388 component ## _avail = yes; }
389
390
391
392
393
394
412
413 if ( mumps_par->rowsca != 0 && mumps_par->rowsca_from_mumps == 0 )
414 {
415
416 rowsca = mumps_par-> rowsca;
417 rowsca_avail = yes;
418 }
419 else
420 {
421
422
423
424
425
426 rowsca = rdummyp;
427 rowsca_avail = no;
428 }
429 if ( mumps_par->colsca != 0 && mumps_par->colsca_from_mumps == 0 )
430
431 {
432 colsca = mumps_par-> colsca;
433 colsca_avail = yes;
434 }
435 else
436 {
437
438
439
440
441
442 colsca = rdummyp;
443 colsca_avail = no;
444 }
452
453
454
455
456
457
458
459 icntl = mumps_par->icntl;
460 cntl = mumps_par->cntl;
461 keep = mumps_par->keep;
462 dkeep = mumps_par->dkeep;
463 keep8 = mumps_par->keep8;
464 info = mumps_par->info;
465 infog = mumps_par->infog;
466 rinfo = mumps_par->rinfo;
467 rinfog = mumps_par->rinfog;
468 for(i=0;i<ooc_tmpdirlen;i++){
469 ooc_tmpdir[i]=(int)mumps_par->ooc_tmpdir[i];
470 }
471 for(i=0;i<ooc_prefixlen;i++){
472 ooc_prefix[i]=(int)mumps_par->ooc_prefix[i];
473 }
474 for(i=0;i<write_problemlen;i++){
475 write_problem[i]=(int)mumps_par->write_problem[i];
476 }
477 for(i=0;i<save_dirlen;i++){
478 save_dir[i]=(int)mumps_par->save_dir[i];
479 }
480 for(i=0;i<save_prefixlen;i++){
481 save_prefix[i]=(int)mumps_par->save_prefix[i];
482 }
483 metis_options = mumps_par->metis_options;
484
485 MUMPS_F77(&(mumps_par->job), &(mumps_par->sym), &(mumps_par->par), &(mumps_par->comm_fortran),
486 &(mumps_par->n), &(mumps_par->nblk), icntl, cntl, keep, dkeep, keep8,
487 &(mumps_par->nz), &(mumps_par->nnz), irn, &irn_avail, jcn, &jcn_avail, a, &a_avail,
488 &(mumps_par->nz_loc), &(mumps_par->nnz_loc), irn_loc, &irn_loc_avail, jcn_loc, &jcn_loc_avail,
489 a_loc, &a_loc_avail,
490 &(mumps_par->nelt), eltptr, &eltptr_avail, eltvar, &eltvar_avail, a_elt, &a_elt_avail, blkptr, &blkptr_avail, blkvar, &blkvar_avail,
491 perm_in, &perm_in_avail,
492 rhs, &rhs_avail, redrhs, &redrhs_avail, info, rinfo, infog, rinfog,
493 &(mumps_par->deficiency), &(mumps_par->lwk_user), &(mumps_par->size_schur), listvar_schur, &listvar_schur_avail, schur,
494 &schur_avail, wk_user, &wk_user_avail, colsca, &colsca_avail, rowsca, &rowsca_avail,
495 &(mumps_par->instance_number), &(mumps_par->nrhs), &(mumps_par->lrhs),
496 &(mumps_par->lredrhs),
497 rhs_sparse, &rhs_sparse_avail, sol_loc, &sol_loc_avail, rhs_loc, &rhs_loc_avail, irhs_sparse,
498 &irhs_sparse_avail, irhs_ptr, &irhs_ptr_avail, isol_loc,
499 &isol_loc_avail, irhs_loc, &irhs_loc_avail, &(mumps_par->nz_rhs), &(mumps_par->lsol_loc), &(mumps_par->lrhs_loc), &(mumps_par->nloc_rhs)
500 , &(mumps_par->schur_mloc)
501 , &(mumps_par->schur_nloc)
502 , &(mumps_par->schur_lld)
503 , &(mumps_par->mblock)
504 , &(mumps_par->nblock)
505 , &(mumps_par->nprow)
506 , &(mumps_par->npcol)
507 , ooc_tmpdir
508 , ooc_prefix
509 , write_problem
510 , save_dir
511 , save_prefix
512 , &ooc_tmpdirlen
513 , &ooc_prefixlen
514 , &write_problemlen
515 , &save_dirlen
516 , &save_prefixlen
517 , metis_options
518 );
519
520
521
522 if ( mumps_par->job == -1 )
523 {
524 mumps_par->keep[499]=1;
525 }
526
527
528
529
532
535
536
537
538
539
540
541
542
543
544
545 if (rowsca_avail == no) {
548
549 mumps_par->rowsca_from_mumps=1;
550 }
551 }
552 if (colsca_avail == no) {
555
556 mumps_par->colsca_from_mumps=1;
557 }
558 }
559
560
561
562 for(i=0;i<ooc_tmpdirlen;i++){
563 mumps_par->ooc_tmpdir[i]=(char)ooc_tmpdir[i];
564 }
565 mumps_par->ooc_tmpdir[ooc_tmpdirlen]='\0';
566 for(i=0;i<ooc_prefixlen;i++){
567 mumps_par->ooc_prefix[i]=(char)ooc_prefix[i];
568 }
569 mumps_par->ooc_prefix[ooc_prefixlen]='\0';
570}
#define MUMPS_VERSION_MAX_LEN
#define EXTRACT_POINTERS(component, dummypointer)
MUMPS_INT * mumps_get_mapping()
MUMPS_INT * mumps_get_uns_perm()
MUMPS_INT * mumps_get_sym_perm()
MUMPS_INT * mumps_get_pivnul_list()