Aha! That solved it!! Thanks so much, Jon! I'll be sure to look into the subclass declaration of `CellVariable'.
Cheers, Yun On Tue, Oct 27, 2015 at 4:46 PM, Guyer, Jonathan E. Dr. < [email protected]> wrote: > Yun - > > The problem with `update_signal()` is that you overwrite varS each time > you call it, but eq is defined in terms of the first declaration of varS. > > You should get a better result from changing `update_signal()` to > > def update_signal(rate): > ido = np.random.multivariate_normal([55,35+rate], [[0,0],[0,0]], > 100) > ido = np.floor(ido).astype(int) > og = np.zeros((nxy, nxy)) > np.add.at(og, (ido[:,0], ido[:,1]), 1) > dd = fftconvolve(og, ker, mode='same') > return dd.flat > > and then writing in your iteration loop: > > varS.value = update_signal(time*50) > > You could further automate the dependency by declaring a subclass of > `CellVariable` that provides a `_calcValue()` method that performs the work > of `update_signal()`. See fipy/variables/noiseVariable.py for an example. > > > You might get some insight from how we declare a Langevin noise term in > > > http://www.ctcms.nist.gov/fipy/fipy/generated/fipy.variables.html#module-fipy.variables.gaussianNoiseVariable > > > - Jon > > > > On Oct 27, 2015, at 3:48 PM, Yun Tao <[email protected]> wrote: > > > Hi Jonathan, > > > > I finally got a chance to test out the solution. However, it still > doesn't work and I suspect I'm overlooking something relatively. I have > made the following changes: > > > > - inserted time=Variable(): line 25 > > - updated the time-dependent variable varS using time in the while loop: > line 101 > > - updated time.value during the iterations: line 103 > > > > I still do not see changes in either var or varS. My modified code is > attached below -- note that the time-dependency doesn't operate according > to a source term but rather relates to the component inside the convection > term: varS.faceValue. > > > > Is my use of an embedded function update_signal inside the iteration > loop messing things up? > > > > Thanks, > > Yun > > > > On Mon, Oct 19, 2015 at 4:35 PM, Guyer, Jonathan E. Dr. < > [email protected]> wrote: > > You would do this in a similar way to how time-dependent boundary > conditions are illustrated in examples/diffusion/mesh1D.py: > > > > >>> phi = CellVariable(mesh=..., value=...) > > >>> time = Variable() > > >>> source1 = phi * time > > > > or, e.g., > > > > >>> source2 = mesh.x * time > > > > > > Then as you iterate in timesteps, you would update time with: > > > > >>> time.value = time.value + dt > > > > source1 and source2 will automatically reflect the new value of time. > > > > On Oct 12, 2015, at 4:15 PM, Yun Tao <[email protected]> wrote: > > > > > Hi FiPy community, > > > > > > This is a potentially helpful update to a recent question I submitted, > where my goal was to spatially vary the convection strength of a > Fokker-Planck equation for random variable var(x,t) as a simple function of > local signal distribution varS(x,t). Specifically, I wanted to solve for > the transient dynamics of var(x,t), given that, at each location x, its > probability surface is pulled towards a fixed, central point-attractor to a > degree that is proportional to the estimated value of varS(x,t). > > > > > > I like to thank Jon for his tremendous amount of help, from which I > was able to generate a working script on the condition that varS(x,t) is > time-invariant. The code is attached here as signals_static.py. var(x,t) is > plotted over time in the left panel of the animation, and varS(x) is on the > right. The increasing topological distortion shown in the simulation is > consistent with how we expect var(x,t) to behave. > > > > > > My current goal is to solve for var(x,t) on the condition that > varS(x,t) also varies, partially stochastically, over time. Note that this > doesn't involve coupling the Fokker-Plank equation with another > differential equation. I've attempted to do this in the attached script: > signals_dynamic.py. The only addition from the previous script is a "signal > updating function', through which we force the spatial distribution of > varS(x,t) to shift rightward every time step. However, for some reason, > var(x,t) is unresponsive to these changes. > > > > > > Therefore, my question is: how can I base the convection term on a > CellVariable that gets temporally updated outside of the equation > definition? > > > > > > Thanks, > > > Yun > > > > > > On Wed, Aug 26, 2015 at 2:47 PM, Guyer, Jonathan E. Dr. < > [email protected]> wrote: > > > Yun - > > > > > > I've gotten your script to "work" and posted the changes to: > > > > > > https://gist.github.com/guyer/caca956463dfc3835722/revisions > > > > > > The main changes I made were: > > > > > > * to get rid of the intrep2d, as it wasn't working properly > [signal_fct(xf, yf) generates a result of shape > > > (len(xf), len(xf)) instead of (len(xf),).] I was able to get it > working a bit better, but not completely, and I > > > realized that it doesn't really do anything for you that simply > placing your signals in a CellVariable and then > > > letting it calculate its .faceValue doesn't accomplish. > > > > > > * simplify the calculation of faceVelocity (m.faceValues is already a > rank-1 FaceVariable) > > > > > > Although this script functions, I suspect it's not really what you're > looking for. The signals are all extremely localized and faceVelocity is > really not responsive to the density of signals, but just discretely to > whether there's a signal in a given cell. If that's so, I think you'll want > to calculate a density field for the signals, rather than placing them in > discrete locations. > > > > > > - Jon > > > > > > On Aug 19, 2015, at 8:00 PM, Yun Tao <[email protected]> wrote: > > > > > > > Hi FiPy community, > > > > > > > > I'm currently trying to combine the powerful tool of FiPy with > agent-based modeling. The problem I'm trying to solve is this: > > > > > > > > In a 2D landscape scattered with "deterrent point signals", I want > to solve for the transient solution of a convection-diffusion > (Fokker-Planck) equation that increases its advection towards its central > attractor in a way that is proportional to the interpolated density of > local signals. I therefore expect to see gradual deformation, and slowing > down of spread, in the solution boundary as diffusion brings it closer to > clustered signals. > > > > > > > > However, since the point signals are located on mesh cell centers > and the convection coefficient in FiPy requires FaceVariable inputs, there > is a problem with dimensionality I cannot quite understand. How should I > integrate these two processes? > > > > > > > > I've attached my current script, which has the convection term > commented out for now. Left figure is the PDE solution; right figure is the > locations of the signal points. > > > > > > > > Any help would be greatly appreciated. > > > > > > > > Thanks, > > > > Yun > > > > > > > > > > > > -- > > > > Yun Tao > > > > PhD > > > > University of California, Davis > > > > Department of Environmental Science and Policy > > > > One Shields Avenue > > > > Davis, CA 95616 > > > > > <fipy-ibm2_test_forum.py>_______________________________________________ > > > > fipy mailing list > > > > [email protected] > > > > http://www.ctcms.nist.gov/fipy > > > > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy > ] > > > > > > > > > _______________________________________________ > > > fipy mailing list > > > [email protected] > > > http://www.ctcms.nist.gov/fipy > > > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > > > > > > > > > > > -- > > > Yun Tao > > > PhD > > > University of California, Davis > > > Department of Environmental Science and Policy > > > One Shields Avenue > > > Davis, CA 95616 > > > > <signals_static.py><signals_dynamic.py>_______________________________________________ > > > fipy mailing list > > > [email protected] > > > http://www.ctcms.nist.gov/fipy > > > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > > > > > _______________________________________________ > > fipy mailing list > > [email protected] > > http://www.ctcms.nist.gov/fipy > > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > > > > > > > -- > > Yun Tao > > PhD > > University of California, Davis > > Department of Environmental Science and Policy > > One Shields Avenue > > Davis, CA 95616 > > <signals_dynamic2.py>_______________________________________________ > > fipy mailing list > > [email protected] > > http://www.ctcms.nist.gov/fipy > > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > > _______________________________________________ > fipy mailing list > [email protected] > http://www.ctcms.nist.gov/fipy > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > -- Yun Tao PhD University of California, Davis Department of Environmental Science and Policy One Shields Avenue Davis, CA 95616
_______________________________________________ fipy mailing list [email protected] http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
