I spent a few hours tonight taking a stab at writing an alternate
version of the cd-mini code, in part to get my head around what
it does (nothing like rewriting code to understand it).

The main changes I took on were:

* converted the 5D arrays to 1D of 1D of 3D arrays which seems to
  match its logical structure better (and similarly, the 4D arrays
  to a 1D of 3D).  This killed performance unless I also made either
  aliases to the inner arrays when I was computing on them for
  awhile or passed them into routines that chewed on them.

* also created routines in order to try and remove the amount of
  redundancy in the code.

I don't feel fully confident that I got everything correct, and
am worried that the correctness check is not tight enough that
it would necessarily catch problems if I did get something right.

It's also almost certain that my variable names could be made better
-- I didn't always know what they were representing, especially as I
was introducing formal argument names for the routines I was
injecting, and would be happy for suggestions for improvement.
Merge pull request #770 from bradcray/cfd-bradc-version

Alternate cfd-mini version


[reviewed by CathieO]

I spent a few hours on the plane last week taking a stab at writing
an alternate version of the cd-mini code, in part to get my head
around what it does (nothing like rewriting code to understand it).

The main changes I took on were:

converted the 5D arrays to 1D of 1D of 3D arrays which seems to
match its logical structure better (and similarly, the 4D arrays
to a 1D of 3D). This killed performance unless I also made either
aliases to the inner arrays when I was computing on them for
awhile or passed them into routines that chewed on them.

also created routines in order to try and remove the amount of
redundancy in the code.

I don't feel fully confident that I got everything correct, and
am worried that the correctness check is not tight enough that
it would necessarily catch problems if I did get something right.

It's also almost certain that my variable names could be made better
-- I didn't always know what they were representing, especially as I
was introducing formal argument names for the routines I was
injecting, and would be happy for suggestions for improvement.

Since the original draft, I've updated the .perfexecopts to match
the newest version in the parent directory.