@@ -414,10 +414,10 @@ class MpiGrid2D : public MpiGrid2DBase
414414#endif
415415
416416#ifdef HAS_SCALAPACK
417- int zero = 0 ;
418417 int one = 1 ;
419- int ictxt;
420- chase::linalg::scalapackpp::blacs_get_ (&zero, &zero, &ictxt);
418+ // Create BLACS contexts bound to the user communicator `comm_`
419+ // instead of relying on the global BLACS system context.
420+ int ictxt = chase::linalg::scalapackpp::Csys2blacs_handle (comm_);
421421 colComm1D_ctxt_ = ictxt;
422422 int userMap[dims_[0 ]];
423423 if (MajorOrder == GridMajor::ColMajor)
@@ -435,23 +435,24 @@ class MpiGrid2D : public MpiGrid2DBase
435435 }
436436 }
437437
438- chase::linalg::scalapackpp::blacs_gridmap_ (&colComm1D_ctxt_, userMap,
439- &dims_[0 ], &dims_[0 ], &one);
440-
441- int ictxt_2;
442- chase::linalg::scalapackpp::blacs_get_ (&zero, &zero, &ictxt_2);
438+ // 1D column communicator context (dims_[0] x 1 grid) using C BLACS
439+ chase::linalg::scalapackpp::Cblacs_gridmap (
440+ &colComm1D_ctxt_, userMap, dims_[0 ], dims_[0 ], 1 );
441+
442+ // 2D BLACS grid context over the same communicator
443+ int ictxt_2 = chase::linalg::scalapackpp::Csys2blacs_handle (comm_);
443444 comm2D_ctxt_ = ictxt_2;
444445 if (MajorOrder == GridMajor::RowMajor)
445446 {
446447 char major = ' R' ;
447- chase::linalg::scalapackpp::blacs_gridinit_ (&comm2D_ctxt_, &major,
448- & dims_[0 ], & dims_[1 ]);
448+ chase::linalg::scalapackpp::Cblacs_gridinit (&comm2D_ctxt_, &major,
449+ dims_[0 ], dims_[1 ]);
449450 }
450451 else
451452 {
452453 char major = ' C' ;
453- chase::linalg::scalapackpp::blacs_gridinit_ (&comm2D_ctxt_, &major,
454- & dims_[0 ], & dims_[1 ]);
454+ chase::linalg::scalapackpp::Cblacs_gridinit (&comm2D_ctxt_, &major,
455+ dims_[0 ], dims_[1 ]);
455456 }
456457#endif
457458 }
0 commit comments