dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #08535
Re: [HG DOLFIN] merge
On to., 2008-07-03 at 08:03 +0100, Garth N. Wells wrote:
>
> DOLFIN wrote:
> > One or more new changesets pushed to the primary dolfin repository.
> > A short summary of the last three changesets is included below.
> >
> > changeset: 4374:6e1db926186ebfe9d9316b729a7d5747be3c5115
> > tag: tip
> > parent: 4373:8f4accd9eb039d0d13412e8d871e7f1bfce896b8
> > parent: 4372:3abbccc877d3bb358c76ef36dbbe252155b88183
> > user: Kent-Andre Mardal <kent-and@xxxxxxxxx>
> > date: Wed Jul 02 16:02:17 2008 +0200
> > files: dolfin/fem/Assembler.cpp dolfin/fem/DirichletBC.cpp site-packages/dolfin/assemble.py
> > description:
> > merge
> >
> >
> > changeset: 4373:8f4accd9eb039d0d13412e8d871e7f1bfce896b8
> > parent: 4369:b272b94b43ae789e2c72c90f6a027ce9fb89f6fc
> > user: Kent-Andre Mardal <kent-and@xxxxxxxxx>
> > date: Wed Jul 02 16:01:09 2008 +0200
> > files: demo/pde/sym-dirichlet-bc/demo.py dolfin/fem/Assembler.cpp dolfin/fem/Assembler.h dolfin/fem/DirichletBC.cpp dolfin/fem/DirichletBC.h dolfin/fem/assemble.cpp dolfin/fem/assemble.h dolfin/la/AssemblyMatrix.cpp dolfin/la/AssemblyMatrix.h dolfin/la/EpetraMatrix.cpp dolfin/la/EpetraMatrix.h dolfin/la/EpetraVector.cpp dolfin/la/EpetraVector.h dolfin/la/GenericMatrix.h dolfin/la/GenericTensor.h dolfin/la/GenericVector.h dolfin/la/Matrix.h dolfin/la/PETScMatrix.cpp dolfin/la/PETScMatrix.h dolfin/la/PETScVector.cpp dolfin/la/PETScVector.h dolfin/la/Scalar.h dolfin/la/Vector.h dolfin/la/uBlasMatrix.h dolfin/la/uBlasVector.cpp dolfin/la/uBlasVector.h dolfin/swig/dolfin_fem_pre.i dolfin/swig/dolfin_headers.i site-packages/dolfin/assemble.py
> > description:
> > implemented symmetric handling of boundary conditions
> >
>
> Great.
>
> I looked at the demo but could see how to specify the method for
> applying boundary conditions. Could you write a short description on how
> to use it and it compares in terms of performance?
>
> Garth
>
Can you explain to me what the different methods do ? I assume you refer
to the topological, geometric, pointwise switch in computeBC (which
is used).
What is done is the following:
After the global matrix is computed, computeBC is used to compute the
boundary conditions.
Then the BC is enforced as follows:
for all element:
get element matrix and element vector
enforce Dirichlet BC locally
symmetrice the element matrix (and update the element rhs) by
partial Gaussian elimination on the element linear system
set the element matrix and element vector into the global matrix
Hence the assembly loop is as follows:
for all elements:
compute cell contributions
for all elements:
compute interior facet contributions
for all elements:
compute exterior facet contributions
for all elements:
enforce symmetric bc
which can be more efficiently done as:
for all elements:
compute cell contributions
compute interior facet contributions
compute exterior facet contributions
enforce symmetric bc
Concerning efficiency the PETSc implemententation may be slow since
MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);
MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);
must be called between each get and set call.
Kent
Follow ups
References