A program i made in a couple of days to test pygame & improve my Python skills.
Link to the code: https://github.com/SudoOmbro/OmbroBox
It's quite slow and inefficent, but it implements:
Sand & Water Physics
Buoyancy
Heath transfer
Status changes (ice to water to vapor)
Interactions between tiles are achieved through some kind of component system built with python's multiple inheritance paradigm.