4505
 4506
 4507
 4508
 4509
 4510
 4511
 4512      INTEGER            I, ILOCBLK, ILOCOFF, INB, MYDIST, MYROC, NB,
 4513     $                   NPROCS, SRCPROC
 4514
 4515
 4516
 4517
 4518
 4519
 4520
 4521
 4522
 4523
 4524
 4525
 4526
 4527
 4528
 4529
 4530
 4531
 4532
 4533
 4534
 4535
 4536
 4537
 4538
 4539
 4540
 4541
 4542
 4543
 4544
 4545
 4546
 4547
 4548
 4549
 4550
 4551
 4552
 4553
 4554
 4555
 4556
 4557
 4558
 4559
 4560
 4561
 4562
 4563
 4564
 4565
 4566
 4567
 4568
 4569
 4570
 4571
 4572
 4573
 4574
 4575
 4576
 4577      INTEGER            ITMP, NBLOCKS, PROC
 4578
 4579
 4580
 4581      ilocoff = 0
 4582
 4583      IF( srcproc.LT.0 ) THEN
 4584
 4585         mydist = 0
 4586
 4587         IF( i.LE.inb ) THEN
 4588
 4589            ilocblk = 0
 4590            ilocoff = i - 1
 4591
 4592         ELSE
 4593
 4594            itmp    = i - inb
 4595            nblocks = ( itmp - 1 ) / nb + 1
 4596            ilocblk = nblocks
 4597            ilocoff = itmp - 1 - ( nblocks - 1 ) * nb
 4598
 4599         END IF
 4600
 4601      ELSE
 4602
 4603         proc   = srcproc
 4604         mydist = myroc - proc
 4605         IF( mydist.LT.0 )
 4606     $      mydist = mydist + nprocs
 4607
 4608         IF( i.LE.inb ) THEN
 4609
 4610            ilocblk = 0
 4611            IF( myroc.EQ.proc )
 4612     $         ilocoff = i - 1
 4613
 4614         ELSE
 4615
 4616            itmp    = i - inb
 4617            nblocks = ( itmp - 1 ) / nb + 1
 4618            proc    = proc + nblocks
 4619            proc    = proc - ( proc / nprocs ) * nprocs
 4620            ilocblk = nblocks / nprocs
 4621
 4622            IF( ( ilocblk*nprocs ).LT.( mydist-nblocks ) )
 4623     $         ilocblk = ilocblk + 1
 4624
 4625            IF( myroc.EQ.proc )
 4626     $         ilocoff = itmp - 1 - ( nblocks - 1 ) * nb
 4627
 4628         END IF
 4629
 4630      END IF
 4631
 4632      RETURN
 4633
 4634
 4635