Thanks very much! That works great for me.

Best, 

Isaac 
Le mardi 6 mai 2025 à 16:01:43 UTC+2, Guyer, Jonathan E. Dr. (Fed) a écrit :

> Isaac -
>
> What you've set up is an
> [internal fixed gradient](
> https://pages.nist.gov/fipy/en/latest/USAGE.html#internal-fixed-gradient)
> whereas your boundary condition defines a fixed flux.
> I see that we don't actually cover this case, but it's actually easier to 
> set up than fixed gradient IMO,
> because the finite volume method naturally works with fluxes via the 
> divergence theorem.
>
> First, you'll want to turn off diffusion at your boundary:
>
> ```diff
> D0 = 1
> D = FaceVariable(mesh=mesh, value=D0)
> +D.setValue(0., where=internal_boundary_mask)
> ```
>
> Next , you need to specify the orientation of your flux.
> `mesh.faceNormals` defines the orientation of faces *when pointing from 
> cell 0 to cell 1*.
> This is useful for FiPy internally, but cell 0 vs cell 1 doesn't mean much 
> to humans.
>
> Instead, we can take advantage of the knowledge you have about what's 
> inside and outside
> your domains of interest. By taking the gradient of your mask (after 
> converting it from Boolean) 
> and normalizing it by the distance between adjacent cells, we obtain a 
> unit vector that points in
> (or out) of the domain of interest:
>
> ```diff
> +solid_mask_var = CellVariable(mesh=mesh, value=solid_mask_flat * 1.)
> +boundary_normals = solid_mask_var.faceGrad * mesh._cellDistances
>
> +flux = 1.
> +boundary_flux = internal_boundary_mask * flux * boundary_normals
> ```
>
> Finally, add the divergence of this boundary flux as a source term:
>
> ```diff
> -gradient = - 1 / D0 
> -
> -largeValue = 1e10
>
>
> eq = (TransientTerm() == DiffusionTerm(coeff=D)
> - + DiffusionTerm(coeff=largeValue * internal_boundary_mask)
> - - ImplicitSourceTerm((internal_boundary_mask * largeValue * gradient
> - * mesh.faceNormals).divergence))
> -
> + + boundary_flux.divergence)
> ```
>
> For anything further, please start a GitHub Discussion: 
> https://github.com/usnistgov/fipy/discussions
> It's a much easier environment for talking about math and code than this 
> mailing list.
>
> ________________________________________
> From: fi...@list.nist.gov <fi...@list.nist.gov> on behalf of Isaac Paten <
> isaac...@gmail.com>
> Sent: Saturday, May 3, 2025 07:49
> To: FIPY
> Subject: [fipy] Setting internal "constant flux" boundary conditions 
> correctly
>
> Hi,
>
> I am trying to solve a diffusion equation using FiPy, with a constant flux 
> condition on internal boundaries - I have attached both a pdf describing 
> the equation, and also a file with a MWE of my code.
>
> I am using a 2D geometry with two phases, labelled 0 and 1. Phase 1 is a 
> square immersed in phase 0. I only need to solve the equation in phase 1, 
> and the constant-flux BC exists only on the faces between cells labelled 0 
> and 1.
>
> I do not get any errors when I run the code, but the solution is 0 
> everywhere, so something is going wrong. The definition of my internal 
> boundary seems ok (I plotted it). Is there something wrong with the way I 
> am inputting the implicit source term?
>
> Thanks,
>
> Isaac
>
> --
> To unsubscribe from this group, send email to fipy+uns...@list.nist.gov
>
> View this message at https://list.nist.gov/fipy
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to fipy+uns...@list.nist.gov<mailto:fipy+uns...@list.nist.gov>.
>

-- 
To unsubscribe from this group, send email to fipy+unsubscr...@list.nist.gov

View this message at https://list.nist.gov/fipy
To unsubscribe from this group and stop receiving emails from it, send an email 
to fipy+unsubscr...@list.nist.gov.

Reply via email to