The thermophysical model itself is instantiated in the second typedef in the source code. See figure for the inheritance structure. The TM here stands for the transport model, i.e. the sutherlandTransportsensibleInternalEnergyhConstThermoperfectGasspecie, which is defined with the first typedef. Also note that in the solver, the variable used for thermo object is just of type psiThermo, but after some digging, one would discover, that the variable is in fact of type hePsiThermopureMixturesutherlandTransportsensibleInternalEnergyhConstThermoperfectGasspecie. Reason for this is simple, the thermo object has to respect the type that was chosen in the thermophysicalProperties, but in the solver, you need to work with one type. So looking at figure , the branch with psiThermo works as interface or a “handle”, whereas the branch with mixture type is the part where the heavy lifting is done.
Figure: inheritance diagram of basic thermo classes