Have you tried the crater() function in Wilbur? It generates perfectly round craters, but applying it to an existing random field with a multiply operation will give you something like what you describe (see attachment). If you want the rim distance to wander a bit then I'd have to put back in the fbm function that you could use to modify the crater function argument.

Internally, the crater() function looks like

if (arg <= RimDist)

return pow((sin(1.5*M_PI+arg/RimDist*M_PI)+1)*0.5,BowlSteep)*(RimHeight-BowlBase)+BowlBase;

else

return (1-(arg-RimDist)/(1-RimDist))*RimHeight;

A wilbur function that does the same should look like

if (le(arg,RimDist),pow((sin(1.5*pi+arg/RimDist*pi)+1)*0.5,BowlSteep)*(RimHeight-BowlBase)+BowlBase,(1-(arg-RimDist)/(1-RimDist))*RimHeight)

with appropriate expressions substituted for the named arguments (for example, arg replaced with r/4, RimDist replaced with 0.5, and so on).