Author Topic: Element matrix compression  (Read 5197 times)

wklausler

  • Jr. Member
  • **
  • Posts: 27
Element matrix compression
« on: September 17, 2020, 07:25:21 AM »
Hello,

In parFEAP 8.4, the stiffness assembly process is a bit different from that of serial FEAP. In serial FEAP, the element matrix is calculated and then added to the global matrix, with local components corresponding to given displacements being ignored. In parFEAP, the element matrix is "compressed" in routines pmodify.f and pcompress.f, in which unnecessary components are deleted, before being added to the stiffness matrix via Petsc. What is the purpose of this compression? As far as I can tell, parFEAP assembly could be done in the same straightforward way as in serial FEAP. Any insight is appreciated.

Best regards,
wklausler

Prof. S. Govindjee

  • Administrator
  • FEAP Guru
  • *****
  • Posts: 1165
Re: Element matrix compression
« Reply #1 on: September 17, 2020, 01:58:44 PM »
I went back and had a look at the code.  Looking at it and thinking back to when we wrote it, the idea was the following:  If a processor owns the row associated with a dof then it should assemble it.  If the processor does not own the row for a dof that it just processed then we want to compress that away in order to minimize communication (at the expense of two processors computing the same thing).

wklausler

  • Jr. Member
  • **
  • Posts: 27
Re: Element matrix compression
« Reply #2 on: September 20, 2020, 11:55:06 PM »
Yes, this is one reason to exclude certain rows of the element matrix from assembly (another being dirichlet BCs). However, why are the arrays LD and S compressed? The assembly loops in uasble.F could just as easily skip undesired local matrix entries. The reason for the additional effort in pcompress.f is what is unclear to me.