Subject: [FFC-dev] Jump across an interface

From: Jehanzeb Hameed <[email-masked]>
Date: Wed, 24 Jun 2009 00:43:35 -0500

Hello,

Is it possible to define jump over sub-domains (instead of just over
interior faces). Here is what I am trying to do. I have a domain, with
two subdomains. The subdomains are not disjoint, and have a common
interface (say ds(0) ). Now, I want to define a integral over ds(0)
for the jump in a variable (i.e. I'd like (jump(v), jump(u), ds(0)) .

I want to use lagrange (continuous) over each subdomain, with jump
just across the interface. Can this be done in ffc (or ufl).

Thanks,
-Jehanzeb

---

From: Anders Logg <[email-masked]>
Date: Mon, 6 Jul 2009 17:07:08 +0200

> just across the interface. Can this be done in ffc (or ufl).

You should be able to define a MeshFunction over interior facets to
mark the interface. Then define an integral over that interface. See
one of the sub domain demos in DOLFIN. Note that you need to define
the interface, rather than the two sub domains.

-- 
Anders

---

From: Jehanzeb Hameed <[email-masked]>
Date: Mon, 6 Jul 2009 20:47:47 -0500

I am not sure if I follow you. Maybe I wasnt clear enough in defining
my problem, so I'll take another stab at explaing it.

Say we have a mesh of N points. Mesh has two subdomains (numbered 0
and 1), with an interface between the two. Say  Subdomain_0 has N_0
nodes, sudomain 1 has N_1 nodes, and interface has N_interface nodes.
Then note that:

N = N_0 + N_1 - N_interface  (since interface nodes were counted twice
, once each in N_0 and N_1)

Now, say I have a continuous lagrange function u_0 on sudomain_0 and
u_1 on subdomain_1. For P1 degree 1 elements, the degree of freedoms
for these variables will be N_0 and N_1 . Now, I want to define an
integral like (u_0 - u_1, v_0 - v_1) on the interface. The resulting
linear system should have dimensions (N_0 + N_1)*(N_0 + N_1).

With this setup, how can I define that integral over the interface? I
can split up the mesh into two submeshes, but then function space
takes in one mesh in its initialization.

If I split up the mesh into two, and treat it as one mesh, the
interface will appear twice as external faces on the two meshes
(treated as disjoint parts on one mesh by dolfin), and its not clear
how to define that integral.

If I dont split up the mesh, then I cant see how to define continuous
Lagrange elements on just part of a mesh.

-Jehanzeb

On Mon, Jul 6, 2009 at 10:07 AM, Anders Logg<[email-masked]> wrote:
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.9 (GNU/Linux)
>
> iEYEARECAAYFAkpSExwACgkQTuwUCDsYZdHthgCfTVmtnGzgeZpECTYhURg5w08n
> JEcAnjcmCMQ93eZsxDkoz+LnrtfOMnpb
> =Ncc7
> -----END PGP SIGNATURE-----
>
> _______________________________________________
> FFC-dev mailing list
> [email-masked]
> http://www.fenics.org/mailman/listinfo/ffc-dev
>
>

---

From: Anders Logg <[email-masked]>
Date: Tue, 7 Jul 2009 09:06:41 +0200

> takes in one mesh in its initialization.

Use one single mesh and define the integral over the interface using
the standard dS and jump(), but when you assemble make sure to use the
argument interior_facet_domains. You need to create a
MeshFunction<uint> over interior facets to specify which facets are
part of the interface.

-- 
Anders

---

From: Jehanzeb Hameed <[email-masked]>
Date: Tue, 7 Jul 2009 17:53:47 -0500

> MeshFunction<uint> over interior facets to specify which facets are

Can you please tell me what the individual values for MeshFunction
should be like? E.g., say I can mark facets corresponding to
interface, will these be 1 in the mesh_function, and other facets set
to 0 ? I tried looking at the source code for assembler, which had
this line corresponding to interior_facet_domains, but I couldnt
understand what exactly it is doing:

if (domain < ufc.form.num_interior_facet_integrals())
       integral = ufc.interior_facet_integrals[domain];

Also, by standard dS, I take it you mean no integrals over subdomains
in the definition of the form (i.e. no dS1 etc).

I appreciate your patient answering of my questions,

Thanks,
-Jehanzeb