Two words:
Pressurized water.
Calculate the floor space of your soon to be growing area. Multiply that by 2. That is how much water you want your "instaflood" reservoir (directly above the grow chamber, emptied with hatch cover attached to lever.) To hold.
For instance, say you want to flood a 100x100 room to 2 deep. That's 10,000 water at 1/7 depth. We want 2/7 to ensure equal and uniform coverage. So, we want 20,000 water. We divide this by however many zlevels deep we want our pressurized deluge system to be. (The more zlevels, the more pressure, th faster it will flood the room) let's say we want 5 z levels. That's 4000 per level. We divide that by 7. That gives us the number of tiles in area each reservoir level needs to be. This comes out to approx 23x23 tiles. (This errs on the light side to avoid having a grow chamber that won't dry.)
Fill the reservoir using a direct connection to a river, brook, or aquifer, with a shutoff floodgate.
Open the shutoff gate, and fill the reservoir. When it is full, close the shutoff. Open the hatch. Pressurized water will blast into the growing room at a frightful rate. When the reservoir has emptied, close the hatch, and reset.
For optimal tree growing, I have found repeat flooding is necessary. Trees grow painfully slow on "dusting of mud" tiles, and grow noticably faster on "pile of mud" tiles.
You only get that from repeat flooding after complete drying.
With some clever engineering, you can use the same reservoir to muddy multiple stacked growing rooms, by channeling out the 'splash point', and building walls around it. The water will safely be directed into the next floor down, and the process can be repeated as many growing chambers deep as needed.