FEAP User Forum
FEAP => Programming => Topic started by: jonwong on July 31, 2012, 10:33:01 PM
-
Hi-
I have developed a sparse matrix vector multiplication algorithm that requires reordering the columns and rows of A, the elements of x and the elements in y in the problem A*x = y. The reordering is necessary for the particular GPU architecture this method is aimed at. Basically the rows of A are rearranged yielding A'*x=y'. However x is no longer consistently number in accordance with y', so the columns of A' and the elements of x are rearranged such that A''*x'=y', where the x' and y' numbering is consistent.
Currently, I am using custom usolve and uasble routines for a full matrix and I am using whatever numbering FEAP gives me. I wanted to know how one would go about reordering the ids in FEAP, in such a way so that FEAP will return x'. However, if possible, I would like to avoid modifying my imposed boundary conditions for the mesh, as the displacement boundary conditions are non-trivially defined. Basically I wanted to know if there is a good way to go about doing this without having to change the input file, as I would like to compare it to serial and parallel version of FEAP.
Thanks,
-Jon
-
Equation renumbering is handled by a nodal renumbering array mr(np(89)). Search for [opti] in pmacr3.f and you will find the code sequence that executes the renumbering, the resetting of the equation numbers etc.
-
Thanks I will look into this. I haven't looked at the code in detail yet, but does FEAP renumber nodes when displacement conditions are changed at subsequent timesteps? I see there are calls to optid() and psetid is subsequently called.