I'm not sure; Daniel might have a better idea.

One thing you can do to manage this (if the anisotropic diffusion is necessary) 
is change 2c) to:

   c) eq1 = fp.DiffusionTerm(coeff=S * [[[1., 0], [0., 0.]]]) == f(w, a)     # 
matrix co-oeff has now been simplified by using a single facevariable whose 
values are appropriately zeroed out in the 2D grid



> On Sep 12, 2016, at 4:34 PM, Gopalakrishnan, Krishnakumar 
> <krishnaku...@imperial.ac.uk> wrote:
> 
> Dear all, 
> 
> We have a question regarding the original posting to this list (below)
> 
> To recap and quickly summarise, we have
> 1.  a 1D elliptic PDE which is defined along the x-axis (at the top of a 2D 
> grid) and 
> 2.  a standard diffusion PDE, which is restricted to diffuse only along the 
> y-axis. 
> 
> The BC of the "vertically diffusing PDE" depends on the values of the axial 
> PDE solution along the top of the mesh. 
> 
> This question is based on Jon's gist code 'crazycoupling2.ipynb' here, 
> https://gist.github.com/guyer/bb199559c00f6047d466daa18554d83d  .
> 
> For the axial (elliptic) PDE, to confine the direction of solution,  in Input 
> cell 33 of the jupyter notebook, we can see that the following has been 
> defined. 
> 
> eq1 = fp.DiffusionTerm(coeff=[[[S, 0.], [0., 0.]]]) == f(w, a)
> 
> 
> Is defining coeff=[[[S, 0.], [0., 0.]]]) the only way to achieve this effect 
> ?  I am asking because, we have a high-order tensor coefficient which is 
> dependent spatially upon the mesh's x- co-ordinates (as x**2.0), and thus the 
> value S is not a simple scalar anymore. 
> 
> Does the following (simpler) approach work and produce an identical result ?  
> 
> 1. declare S as a rank-1 faceVariable in the 2D mesh, initialised to zero in 
> all faces
> 2. Selectively set S only at the vertical faces bordering the top-cells of 
> the grid using the construct, 
>    a) x = mesh.cellCenters[0]  , Y = mesh.faceCenters[1]
>    b) S.setValue(x**2.0, where = (Y == 1.0 - 0.5*dy)) ,  where 1.0 is the 
> height of the mesh, and dy is the constant inter-nodal spacing.  
>    c) eq1 = fp.DiffusionTerm(coeff=S) == f(w, a)     # matrix co-oeff has now 
> been simplified by using a single facevariable whose values are appropriately 
> zeroed out in the 2D grid
> 
> 
> In effect, my question is that, if the diffusion coefficient along all other 
> faces is set to zero, do we still need the coeff=[[[S, 0.], [0., 0.]]]) in 
> order to restrict the PDE to the axial direction ?
> 
> 
> Best Regards
> 
> Ian and Krishna 
> 
> 
> 
> 
> 
> -----Original Message-----
> From: fipy-boun...@nist.gov [mailto:fipy-boun...@nist.gov] On Behalf Of 
> Guyer, Jonathan E. Dr. (Fed)
> Sent: Thursday, July 14, 2016 5:26 PM
> To: FIPY <FIPY@nist.gov>
> Subject: Re: Coupling Boundary Condition of one PDE with source term of 
> another PDE
> 
> My gut reaction is that the second implementation is probably better, as it 
> should be possible to make things more implicit and coupled, even though 
> you're "wasting" calculation of PDE1 over most of the 2D domain where you 
> don't care about it.
> 
>> On Jul 14, 2016, at 11:18 AM, Guyer, Jonathan E. Dr. (Fed) 
>> <jonathan.gu...@nist.gov> wrote:
>> 
>>> What’s the best way to implement this problem in FiPy?
>> 
>> Don't!
>> 
>> 
>> Assuming you won't take that advise, I've posted a couple of attempts at 
>> this problem at:
>> 
>> https://gist.github.com/guyer/bb199559c00f6047d466daa18554d83d
>> 
>> 
>> 
>>> On Jul 9, 2016, at 1:37 PM, Gopalakrishnan, Krishnakumar 
>>> <k.gopalakrishna...@imperial.ac.uk> wrote:
>>> 
>>> Hi,
>>> 
>>> **We’re sorry, the previous posting omitted the complete definition of the 
>>> boundary condition for the 2nd PDE, and also a couple of typos are fixed 
>>> below. 
>>> 
>>> We have a system of equations, wherein the BC of one PDE couples with the 
>>> source term of another PDE.
>>> 
>>> We have a regular 2D unit grid in x and y.
>>> 
>>> There are two PDEs to be solved:
>>> a)    The first PDE (elliptic diffusion problem) is defined only at y = 1, 
>>> acting along the x-axis (i.e. it acts in the x-direction and only along the 
>>> top of the cartesian grid). This x-axis is discretized with a fixed 
>>> grid-spacing, generating a finite number of nodes. Let this set of 
>>> nodes/co-ordinates be represented by ‘X’.
>>> b)   The second PDE is a time-varying diffusion problem. This is defined 
>>> only along the y-axis, but for all x-nodes (i.e. for all ‘X’), where the 
>>> 1st PDE is being solved.
>>> 
>>> Mathematically (plain-text version) : 
>>> 
>>> PDE1: divergence(S * grad(a)) =  f(w,a)
>>> BC1:  a = 0 , at x = 0     (dirichelet)
>>> BC2:   d_a/dx = 1 at x = 1  (Neumann) 
>>> 
>>> D = faceVariable(rank=2, value = 1.0)       # Rank 2 tensor for anisotropic 
>>> diffusion  (i.e. allowed only along the y-axis)
>>> 
>>> PDE2: partial_B/partial_t = divergence( [[[0, 0], [0, D]]] * grad(B) )
>>> BC1:  B = 0, at y = 0 at all ‘X’ (dirichelet), i.e. along the bottom face
>>> BC2:  d_B/dy = g(w,a) (Neumann) at y =1, i.e. along the top face of the grid
>>> 
>>> f and g are linear functions in ‘w(x,y,t)’ and ‘a(x,y,t)’. B is defined in 
>>> the 2D grid as ‘B(x,y,t)’.
>>> 
>>> Importantly, w = B at y = 1, for all ‘X’; i.e., the BC2 of the 2nd PDE 
>>> couples with the Implicit Source Term of the 1st PDE along the top face of 
>>> the Cartesian mesh.
>>> 
>>> What’s the best way to implement this problem in FiPy?
>>> 
>>> Best Regards,
>>> 
>>> Krishna
> 
> _______________________________________________
> fipy mailing list
> fipy@nist.gov
> http://www.ctcms.nist.gov/fipy
>  [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]


_______________________________________________
fipy mailing list
fipy@nist.gov
http://www.ctcms.nist.gov/fipy
  [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]

Reply via email to