I've used filled elevation model (with streams removed) to replicate your coefficients:
Keeping in mind that water usually runs downhill :), it is reasonable to expect that all the values in output should be less or equal to the value at start point. I've checked results using difference [Filled]-[ScriptOutput] and found that script (see below) failed (produced slightly negative values) for 2 out of 63414 cells. Both points are sitting on very flat sites next to 'streams'. This is a nature of flow direction algorithm though, called most likely direction guess...
import arcpy, os, traceback, sys, numpy
from arcpy import env
from arcpy.sa import *
env.overwriteOutput = True
arcpy.AddMessage(str(time.ctime()) + " - " + message)
dirArray = arcpy.RasterToNumPyArray(fdir,"","","",-9999)
coefArray = arcpy.RasterToNumPyArray(coeffs,"","","",-9999)
## directions to find cell neighbour
dCol=(1, 1, 0, -1, -1,-1, 0,1)
dRow=(0, -1, -1, -1, 0, 1, 1,1)
dRow=(0, 1, 1, 1, 0, -1, -1,-1)
## main loop
arcpy.SetProgressor("step", "", 0, cellsTotal)
for nRow in range (nRows):
for nCol in range (nCols):
if nC<0 or nC==nCols: break
if nR<0 or nR==nRows: break
myRaster = arcpy.NumPyArrayToRaster(blankArray,origin,cSize,cSize)
message = "\n*** PYTHON ERRORS *** "; showPyMessage()
message = "Python Traceback Info: " + traceback.format_tb(sys.exc_info()); showPyMessage()
message = "Python Error Info: " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"; showPyMessage()
You'll have to replace 3 lines of code, pointing to input flow direction, coefficient and output raster names.
Also note that it is slow, it took 2 minutes to process 234*271 raster on my rather good machine. Script designed to run from Arcmap (User toolbox-Add-Script). If you want it to work stand alone, replace arcpy.AddMessage with print statement. Also progressor statements might not work. Just remove them.
Script can be easily modified for all sort of studies, e.g. avalanche run out distance...
Any questions, let me know. Thanks for good question. What kind of coefficients, please? Roughness?