I have a requirement to get input from a web app UI, send this input to the server who will run an algorithm on it. The web server will send back the output of the algorithm the the UI. Is an HTTP POST method appropriate for this type of interaction since I'm not technically creating any data?
Let's look at this from the perspective of the Algorithm Service - It is being asked to supply a result (output of the algorithm).
As long as the answer is idempotent - meaning that for the same inputs, we get the same output and that there are no intended side effects that are expected, and the input parameters are few and simple values, then I would choose GET, in part because it is more RESTful, which makes any operations level monitoring easier in production, but also testing is more accessible - anyone can use it directly with a web browser.
If the function is not idempotent, or if the input parameters for the algorithm is complex, then POST becomes a better choice.
Finally, how important is this decision? Which factors matter the most in the decision? Usability by the users? observability of live behaviours? Simplicity in writing the code? Hackability of the interface for use by other applications?
It depends on the input - if the input is short (e.g. less than around 50 - 100 characters) and not expected to contain anything too secret or sensitive, and the algorithm is deterministic, and the algorithm has no side effects that the user needs to care about, then a GET request would be appropriate, with the input used as part of the URI.
This has some advantages over POST. It can be executed (and tested) simply by following a link, or by typing an address into a browser address bar, and is easier to cache.