I am trying to calculate momentum and heat fluxes in a presence of mean flow. The mean velocity field is estimated using ave/spatial along z direction. In equilibrium I normally calculate fluxes using per atom quantities (e.g. stress/atom virial, KE or PE, …) in spatial bins in z direction.
I don’t know how to correctly subtract a position dependent velocity vector v_mean(z) from instantaneous atom velocities in every bin inside the input file.
This is how the stress and fluxes calculated in equilibrium:
If what you mean is you want to subtract a mean velocity
from every atom which is the mean velocity of the bin
the atom is in (as computed by fix ave/spatial), then
I don't know if you can do that in an input script variable
formula. Fix ave/spatial does allow access to the values
it computes as a global vector (actually array), so you would
need a per-atom variable that converts the atom position
to a bin ID. Then use that variable to index the fix array
in your per-atom formula. But it is tricky to get the bin #
correct, accounting for periodic boundaries, and atoms outside
the box, etc. Fix ave/spatial has logic to do that which you
cannot hope to duplicate in an input script. So if you can't
get it to work satisfactorily, I suggest just post-processing
what you want.
Thanks for the explanation. Considering the post processing as the second option, What do you think about changing the computes (e.g. stress/atom, ke/atom, pe/atom) in the source code (subtracting the mean from v) if I use the global ave/spatial array? Since I need to call the fix ave/spatial first and let it run for a while to collect the average velocities, do I have access to the instantaneous box size in the stress compute for tracking down the atoms?
Thanks for your input,
You can look at compute temp/profile. It calculates
a temperature after subtracting out a spatially averaged