Hi Jon, I have a question somewhat related to my previous inquiries. I'm trying to define 2D diffusion coefficients that vary spatially according to a separate variable. In particular, I want the diffusion strength to exponentially decrease from D0 as a function of local values of varD:
m = Grid2D(nx=nxy, ny=nxy, dx=dxy, dy=dxy) varD = CellVariable(mesh=m, value=someValue) D0 = 5. diffDecay = numerix.exp(-varD.value) eq = (TransientTerm() == DiffusionTerm(coeff=D0*diffDecay)) Solving the equation based on the above script however returns error message: ValueError: operands could not be broadcast together with shapes (nxy**2,) (2,2) ​Earlier, I was able to implement state-dependent convection coefficient by combining m.faceCenters and someVar.faceValue, but somehow I've been unsuccessful trying to resolve the dimensionality issue for the supposedly simpler diffusion coefficients. Any suggestion? Thanks, Yun On Tue, Oct 27, 2015 at 4:55 PM, Yun Tao <[email protected]> wrote: > 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 > -- 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 ]
