[GRASS-user] mapcalc - formula

Hi

I have the following problem: I have the following formula from
http://grass.osgeo.org/gdp/raster/mapcalc-algebra.pdf on page 12.

wasser = wasser+eval(x=elev+wasser,\

if(x>(y=elev[-1,0]+wasser[-1,0]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[-1,0]>x,wasser[-1,0],y-x))+\

if(x>(y=elev[1,0]+wasser[1,0]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[1,0]>x,wasser[1,0],y-x))+\

if(x>(y=elev[0,-1]+wasser[0,-1]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[0,-1]>x,wasser[0,-1],y-x))+\

if(x>(y=elev[0,1]+wasser[0,1]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[0,1]>x,wasser[0,1],y-x))+\

if(x>(y=elev[-1,1]+wasser[-1,1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[-1,1]>x,wasser[-1,1],y-x))+\

if(x>(y=elev[1,1]+wasser[1,1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[1,1]>x,wasser[1,1],y-x))+\

if(x>(y=elev[1,-1]+wasser[1,-1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[1,-1]>x,wasser[1,-1],y-x))+\

if(x>(y=elev[-1,-1]+wasser[-1,-1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[-1,-1]>x,wasser[-1,-1],y-x)))

Now the problem is, that this formula just distribute a given portion of water over the land. So if you have a flat surface, you get values like 0,0000001... But what i want is, that the distribution of the water continues only, if the water has reached a certain level. I have a elev-raster with e range from -4 to 10000 and I would that the distribution only continue, if the water has reached the level 0.
So, does anyone see a possiblilty, how i could do this? Could i perhaps somehow combine the formula above with the formula from r.lake the way I dont add or lose water (formula above) but only continue to distribute when a certain level is reached (formula below)?:

${seedmap} = if( ${dem}, \
if( if( isnull(${seedmap}),0,${seedmap}>0), ${wlevel}-${dem}, \
if( \
  if(isnull(${seedmap}[-1,0]),0, ${seedmap}[-1,0]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[-1,1]),0, ${seedmap}[-1,1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[0,1]), 0, ${seedmap}[0,1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[1,1]), 0, ${seedmap}[1,1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[1,0]), 0, ${seedmap}[1,0]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[1,-1]),0, ${seedmap}[1,-1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[0,-1]),0, ${seedmap}[0,-1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[-1,-1]),0, ${seedmap}[-1,-1]>0 && ${wlevel}>${dem}),\
${wlevel}-${dem}, null() )))

Thanks a lot! And best regards

Martin

Hello,
I have no time to look into this issue right now. Please add a wish
ticket to trac "r.lake should support minimum water column depth" and
describe how it should work.

Thanks,
Maris.

2009/10/19, Martin Schweizer <schweizermartin@students.unibe.ch>:

Hi

I have the following problem: I have the following formula from
http://grass.osgeo.org/gdp/raster/mapcalc-algebra.pdf on page 12.

wasser = wasser+eval(x=elev+wasser,\

if(x>(y=elev[-1,0]+wasser[-1,0]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[-1,0]>x,wasser[-1,0],y-x))+\

if(x>(y=elev[1,0]+wasser[1,0]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[1,0]>x,wasser[1,0],y-x))+\

if(x>(y=elev[0,-1]+wasser[0,-1]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[0,-1]>x,wasser[0,-1],y-x))+\

if(x>(y=elev[0,1]+wasser[0,1]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[0,1]>x,wasser[0,1],y-x))+\

if(x>(y=elev[-1,1]+wasser[-1,1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[-1,1]>x,wasser[-1,1],y-x))+\

if(x>(y=elev[1,1]+wasser[1,1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[1,1]>x,wasser[1,1],y-x))+\

if(x>(y=elev[1,-1]+wasser[1,-1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[1,-1]>x,wasser[1,-1],y-x))+\

if(x>(y=elev[-1,-1]+wasser[-1,-1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[-1,-1]>x,wasser[-1,-1],y-x)))

Now the problem is, that this formula just distribute a given portion of
water over the land. So if you have a flat surface, you get values like
0,0000001... But what i want is, that the distribution of the water
continues only, if the water has reached a certain level. I have a
elev-raster with e range from -4 to 10000 and I would that the distribution
only continue, if the water has reached the level 0.
So, does anyone see a possiblilty, how i could do this? Could i perhaps
somehow combine the formula above with the formula from r.lake the way I
dont add or lose water (formula above) but only continue to distribute when
a certain level is reached (formula below)?:

${seedmap} = if( ${dem}, \
if( if( isnull(${seedmap}),0,${seedmap}>0), ${wlevel}-${dem}, \
if( \
  if(isnull(${seedmap}[-1,0]),0, ${seedmap}[-1,0]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[-1,1]),0, ${seedmap}[-1,1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[0,1]), 0, ${seedmap}[0,1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[1,1]), 0, ${seedmap}[1,1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[1,0]), 0, ${seedmap}[1,0]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[1,-1]),0, ${seedmap}[1,-1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[0,-1]),0, ${seedmap}[0,-1]>0 && ${wlevel}>${dem}) ||\
  if(isnull(${seedmap}[-1,-1]),0, ${seedmap}[-1,-1]>0 && ${wlevel}>${dem}),\
${wlevel}-${dem}, null() )))

Thanks a lot! And best regards

Martin

_______________________________________________
grass-user mailing list
grass-user@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user