How can i create a realistic water material with foam in cycles for a water simulation
Use a float particle. Create an object like box > Go to physics tab select fluid, then apply fluid type as particles > check float (Note: there are 3 types  Drops, Float and Tracer) you'll probably need Drops and Floats, but will do float first and the rest I leave to you... The box that you added will be our emitter when you bake the domain make sure under the fluid particles that the value generate = 1.000 then tracer is equal to the number of particle count. Make sure before you bake that the cache location of the domain and the fluid particles are the same then bake... Then you'll see the emitter after baking. > Go to particles Tab you'll see Fluid Particles > select it and go to object place and add another object onto it make sure that the object's scale is a bit too small so it will appear realistic probably an icosphere with 1 iteration these method will definitely slow down your system if the object scale is quite too big. You can bring down the display to 10% just for viewing purpose not a 100% this method can be used for post bake... Result: Foam or particles will appear on your fluid when the fluis is disrupted or in motion then particles die if fluid is at rest... Hope this help... If you want to add another particles just use the same method just use a different count value in the fluid generate... (Note: Drops particles create splashes when fluid is at a peak, Tracer leaves trace like a raindrop on a glass it also leaves traces on the domain... P.S to make your fluid look good select domain > go to Fluid boundary > add subdivisions probably 2 smoothing 0 Or crank up final resolution to 200-400 for better fluid result..