Documentation

### This is machine translation

Mouseover text to see original. Click the button below to return to the English version of the page.

Note: This page has been translated by MathWorks. Click here to see
To view all translated materials including this page, select Country from the country navigator on the bottom of this page.

# assembleFEMatrices

Assemble finite element matrices

## Syntax

``FEM = assembleFEMatrices(model)``
``FEM = assembleFEMatrices(model,bcmethod)``

## Description

example

````FEM = assembleFEMatrices(model)` returns a structural array containing finite element matrices. Model attributes, such as coefficients, material properties, boundary conditions, and so on, must not depend on time or solution.```

example

````FEM = assembleFEMatrices(model,bcmethod)` assembles finite element matrices and imposes boundary conditions using the method specified by `bcmethod`.```

## Examples

collapse all

Create a PDE model for the Poisson equation on an L-shaped membrane with zero Dirichlet boundary conditions.

```model = createpde(1); geometryFromEdges(model,@lshapeg); specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f',1); applyBoundaryCondition(model,'edge',1:model.Geometry.NumEdges,'u',0);```

Generate a mesh and obtain the default finite element matrices for the problem and mesh.

```generateMesh(model,'Hmax',0.2); FEM = assembleFEMatrices(model)```
```FEM = struct with fields: K: [401x401 double] A: [401x401 double] F: [401x1 double] Q: [401x401 double] G: [401x1 double] H: [80x401 double] R: [80x1 double] M: [401x401 double] ```

Create a PDE model for the Poisson equation on an L-shaped membrane with zero Dirichlet boundary conditions.

```model = createpde(1); geometryFromEdges(model,@lshapeg); specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f',1); applyBoundaryCondition(model,'edge',1:model.Geometry.NumEdges,'u',0);```

Generate a mesh and obtain the `nullspace` finite element matrices for the problem and mesh.

```generateMesh(model,'Hmax',0.2); FEM = assembleFEMatrices(model,'nullspace')```
```FEM = struct with fields: Kc: [321x321 double] Fc: [321x1 double] B: [401x321 double] ud: [401x1 double] M: [321x321 double] ```

Obtain the solution to the PDE.

`u = FEM.B*(FEM.Kc\FEM.Fc) + FEM.ud;`

Compare this result to the solution given by `solvepde`. The two solutions are identical.

```u1 = solvepde(model); norm(u - u1.NodalSolution)```
```ans = 0 ```

Assemble the intermediate finite element matrices for a thermal problem.

Create a transient thermal model and include the geometry of the built-in function `squareg`.

```thermalmodel = createpde('thermal','transient'); geometryFromEdges(thermalmodel,@squareg);```

Plot the geometry with the edge labels.

```pdegplot(thermalmodel,'EdgeLabels','on') xlim([-1.1 1.1]) ylim([-1.1 1.1])``` Specify the thermal conductivity, mass density, and specific heat of the material.

```thermalProperties(thermalmodel,'ThermalConductivity',0.2, ... 'MassDensity',2.7*10^(-6), ... 'SpecificHeat',920); ```

Set the boundary and initial conditions.

```thermalBC(thermalmodel,'Edge',1:4,'Temperature',100); thermalIC(thermalmodel,0,'Face',1);```

Generate a mesh and obtain the default finite element matrices.

```generateMesh(thermalmodel); FEM = assembleFEMatrices(thermalmodel)```
```FEM = struct with fields: K: [1541x1541 double] A: [1541x1541 double] F: [1541x1 double] Q: [1541x1541 double] G: [1541x1 double] H: [144x1541 double] R: [144x1 double] M: [1541x1541 double] ```

## Input Arguments

collapse all

Model object, specified as a `PDEModel` object, `ThermalModel` object, or `StructuralModel` object.

Example: `model = createpde(1)`

Example: `thermalmodel = createpde('thermal','steadystate')`

Example: `structuralmodel = createpde('structural','static-solid')`

Method for including boundary conditions, specified as `'none'`, `'nullspace'`, or `'stiff-spring'`. For more information, see Algorithms.

Example: `FEM = assembleFEMatrices(model,'nullspace')`

Data Types: `char` | `string`

## Output Arguments

collapse all

Finite element matrices, returned as a structural array. The fields in the structural array depend on `bcmethod` as follows:

• If the value is `'none'`, then the fields are `K`, `A`, `F`, `Q`, `G`, `H`, `R`, and `M`.

• If the value is `'nullspace'`, then the fields are `Kc`, `Fc`, `B`, `ud`, and `M`.

• If the value is `'stiff-spring'`, then the fields are `Ks`, `Fs`, and `M`.

For more information, see Algorithms.

## Tips

• The mass matrix `M` is nonzero when the model is time-dependent. By using this matrix, you can solve a model with Rayleigh damping. For an example, see Dynamics of Damped Cantilever Beam.

• For a thermal model, the `m` and `a` coefficients are zeros. The thermal conductivity maps to the `c` coefficient. The product of the mass density and the specific heat maps to the `d` coefficient. The internal heat source maps to the `f` coefficient.

• For a structural model, the `a` coefficient is zero. The Young's modulus and Poisson's ratio map to the `c` coefficient. The mass density maps to the `m` coefficient. The body loads map to the `f` coefficient. When you specify the damping model by using the Rayleigh damping parameters `Alpha` and `Beta`, the discretized damping matrix `C` is computed by using the mass matrix `M` and the stiffness matrix `K` as `C = Alpha*M+Beta*K`.

## Algorithms

The full finite element matrices and vectors are as follows:

• `K` is the stiffness matrix, the integral of the `c` coefficient against the basis functions.

• `M` is the mass matrix, the integral of the `m` or `d` coefficient against the basis functions.

• `A` is the integral of the `a` coefficient against the basis functions.

• `F` is the integral of the `f` coefficient against the basis functions.

• `Q` is the integral of the `q` boundary condition against the basis functions.

• `G` is the integral of the `g` boundary condition against the basis functions.

• The `H` and `R` matrices come directly from the Dirichlet conditions and the mesh.

Given these matrices, the `'nullspace'` technique generates the combined finite element matrices [`Kc`,`Fc`,`B`,`ud`] as follows. The combined stiffness matrix is for the reduced linear system `Kc = K + M + Q`. The corresponding combined load vector is `Fc = F + G`. The `B` matrix spans the null space of the columns of `H` (the Dirichlet condition matrix representing hu = r). The `R` vector represents the Dirichlet conditions in `Hu = R`. The `ud` vector represents the boundary condition solutions for the Dirichlet conditions.

From the `'nullspace'` matrices, you can compute the solution `u` as

`u = B*(Kc\Fc) + ud`.

### Note

Internally, for time-independent problems, `solvepde` uses the `'nullspace'` technique, and calculates solutions using `u = B*(Kc\Fc) + ud`.

The `'stiff-spring'` technique returns a matrix `Ks` and a vector `Fs` that together represent a different type of combined finite element matrices. The approximate solution `u` is `u = Ks\Fs`.

Compared to the `'nullspace'` technique, the `'stiff-spring'` technique generates matrices more quickly, but generally gives less accurate solutions.

## See Also

### Topics

#### Introduced in R2016a

##### Support Get trial now