I hadn't even thought about "network-aware" as part of this whole deal, thanks for making my brain hurt just a *little* more Greg ;^)
I vote for this:
The growth model API is *not* network aware. It is out of scope.
That makes the model API much simpler.
Note, however, that a clever person could still write a network-aware
server application that wraps around the model, accepting connections from clients and marshalling data into the appropriate structures and running the growth model and passing results back to the client.
It may be useful, though, to include a "unique identifier" in to the tree_record structure, to help applications keep track of trees as they move from one data structure to another (even in non-networked mode this could be handy), it's sort of there with the combination of tree/plot ids, but I'm thinking more globally, that this would literally by unique for an entire dataset. An unsigned long would get you enough id's for every tree on 4 million acres at 1000 TPA. Maybe all we need is a stand id to go along with the tree and plot id's.
I'm not a huge fan of making mega-mondo fixed sized arrays either, but I still have a suspicion that we're not talking about kilobytes, but rather a few dozens of bytes, probably insignificant in relation to network bandwidth. And, it's *so* much simpler to copy a data structure with a statement like:
struct1 = struct2 ;
If someone can come up with a data variable in the tree record that may range from 10 to 1000 bytes that the model needs in order to run I could easily be swayed from my current view on this...