interpolateDisplacement

Interpolate displacement at arbitrary spatial locations

Syntax

``intrpDisp = interpolateDisplacement(structuralresults,xq,yq)``
``intrpDisp = interpolateDisplacement(structuralresults,xq,yq,zq)``
``intrpDisp = interpolateDisplacement(structuralresults,querypoints)``

Description

````intrpDisp = interpolateDisplacement(structuralresults,xq,yq)` returns the interpolated displacement values at the 2-D points specified in `xq` and `yq`. For transient and frequency response structural problems, `interpolateDisplacement` returns the interpolated displacement values for all time or frequency steps, respectively.```

example

````intrpDisp = interpolateDisplacement(structuralresults,xq,yq,zq)` uses 3-D points specified in `xq`, `yq`, and `zq`.```

example

````intrpDisp = interpolateDisplacement(structuralresults,querypoints)` uses points specified in `querypoints`.```

example

Examples

collapse all

Create an `femodel` object for static structural analysis and include a unit square geometry.

```model = femodel(AnalysisType="structuralStatic", ... Geometry=@squareg);```

Switch the type of the model to plane-strain.

`model.PlanarType = "planeStrain";`

Plot the geometry.

```pdegplot(model.Geometry,EdgeLabels="on") xlim([-1.1 1.1]) ylim([-1.1 1.1])```

Specify Young's modulus and Poisson's ratio.

```model.MaterialProperties = ... materialProperties(PoissonsRatio=0.3, ... YoungsModulus=210E3);```

Specify the x-component of the enforced displacement for edge 1.

`model.EdgeBC(1) = edgeBC(XDisplacement=0.001);`

Specify that edge 3 is a fixed boundary.

`model.EdgeBC(3) = edgeBC(Constraint="fixed");`

Generate a mesh and solve the problem.

```model = generateMesh(model); R = solve(model);```

Create a grid and interpolate the x- and y-components of the displacement to the grid.

```v = linspace(-1,1,21); [X,Y] = meshgrid(v); intrpDisp = interpolateDisplacement(R,X,Y);```

Reshape the displacement components to the shape of the grid. Plot the displacement.

```ux = reshape(intrpDisp.ux,size(X)); uy = reshape(intrpDisp.uy,size(Y)); quiver(X,Y,ux,uy)```

Analyze a bimetallic cable under tension, and interpolate the displacement on a cross-section of the cable.

Create and plot a geometry representing a bimetallic cable.

```gm = multicylinder([0.01,0.015],0.05); pdegplot(gm,FaceLabels="on", ... CellLabels="on", ... FaceAlpha=0.5)```

Create an `femodel` object for static structural analysis and include the geometry into the model.

```model = femodel(AnalysisType="structuralStatic", ... Geometry=gm);```

Specify Young's modulus and Poisson's ratio for each metal.

```model.MaterialProperties(1) = ... materialProperties(YoungsModulus=110E9, ... PoissonsRatio=0.28); model.MaterialProperties(2) = ... materialProperties(YoungsModulus=210E9, ... PoissonsRatio=0.3);```

Specify that faces 1 and 4 are fixed boundaries.

`model.FaceBC([1 4]) = faceBC(Constraint="fixed");`

Specify the surface traction for faces 2 and 5.

`model.FaceLoad([2 5]) = faceLoad(SurfaceTraction=[0;0;100]);`

Generate a mesh and solve the problem.

```model = generateMesh(model); R = solve(model)```
```R = StaticStructuralResults with properties: Displacement: [1x1 FEStruct] Strain: [1x1 FEStruct] Stress: [1x1 FEStruct] VonMisesStress: [23098x1 double] Mesh: [1x1 FEMesh] ```

Define coordinates of a midspan cross-section of the cable.

```[X,Y] = meshgrid(linspace(-0.015,0.015,50)); Z = ones(size(X))*0.025;```

Interpolate the displacement and plot the result.

```intrpDisp = interpolateDisplacement(R,X,Y,Z); surf(X,Y,reshape(intrpDisp.uz,size(X)))```

Alternatively, you can specify the grid by using a matrix of query points.

```querypoints = [X(:),Y(:),Z(:)]'; intrpDisp = interpolateDisplacement(R,querypoints); surf(X,Y,reshape(intrpDisp.uz,size(X)))```

Interpolate the displacement at the geometric center of a beam under a harmonic excitation.

Create and plot a beam geometry.

```gm = multicuboid(0.06,0.005,0.01); pdegplot(gm,FaceLabels="on",FaceAlpha=0.5) view(50,20)```

Create an `femodel` object for transient structural analysis and include the geometry into the model.

```model = femodel(AnalysisType="structuralTransient", ... Geometry=gm);```

Specify Young's modulus, Poisson's ratio, and the mass density of the material.

```model.MaterialProperties = ... materialProperties(YoungsModulus=210E9, ... PoissonsRatio=0.3, ... MassDensity=7800);```

Fix one end of the beam.

`model.FaceBC(5) = faceBC(Constraint="fixed");`

Apply a sinusoidal displacement along the `y`-direction on the end opposite the fixed end of the beam.

```yDisplacementFunc = ... @(location,state) ones(size(location.y))*1E-4*sin(50*state.time); model.FaceBC(3) = faceBC(YDisplacement=yDisplacementFunc);```

Generate a mesh.

`model = generateMesh(model,Hmax=0.01);`

Specify the zero initial displacement and velocity.

`model.CellIC = cellIC(Displacement=[0;0;0],Velocity=[0;0;0]);`

Solve the problem.

```tlist = 0:0.002:0.2; R = solve(model,tlist);```

Interpolate the displacement at the geometric center of the beam.

```coordsMidSpan = [0;0;0.005]; intrpDisp = interpolateDisplacement(R,coordsMidSpan);```

Plot the `y`-component of displacement of the geometric center of the beam.

```figure plot(R.SolutionTimes,intrpDisp.uy) title("y-Displacement of the Geometric Center of the Beam")```

Input Arguments

collapse all

Solution of the structural analysis problem, specified as a `StaticStructuralResults`, `TransientStructuralResults`, or `FrequencyStructuralResults` object. Create `structuralresults` by using the `solve` function. For `TransientStructuralResults` and `FrequencyStructuralResults` objects, `interpolateDisplacement` returns the interpolated displacement values for all time and frequency steps, respectively.

x-coordinate query points, specified as a real array. `interpolateDisplacement` evaluates the displacements at the 2-D coordinate points `[xq(i),yq(i)]` or at the 3-D coordinate points `[xq(i),yq(i),zq(i)]`. Therefore, `xq`, `yq`, and (if present) `zq` must have the same number of entries.

`interpolateDisplacement` converts query points to column vectors `xq(:)`, `yq(:)`, and (if present) `zq(:)`. The function returns displacements as an `FEStruct` object with the properties containing vectors of the same size as these column vectors. To ensure that the dimensions of the returned solution are consistent with the dimensions of the original query points, use the `reshape` function. For example, use ```intrpDisp = reshape(intrpDisp.ux,size(xq))```.

Data Types: `double`

y-coordinate query points, specified as a real array. `interpolateDisplacement` evaluates the displacements at the 2-D coordinate points `[xq(i),yq(i)]` or at the 3-D coordinate points `[xq(i),yq(i),zq(i)]`. Therefore, `xq`, `yq`, and (if present) `zq` must have the same number of entries. Internally, `interpolateDisplacement` converts query points to the column vector `yq(:)`.

Data Types: `double`

z-coordinate query points, specified as a real array. `interpolateDisplacement` evaluates the displacements at the 3-D coordinate points `[xq(i),yq(i),zq(i)]`. Therefore, `xq`, `yq`, and `zq` must have the same number of entries. Internally, `interpolateDisplacement` converts query points to the column vector `zq(:)`.

Data Types: `double`

Query points, specified as a real matrix with either two rows for 2-D geometry or three rows for 3-D geometry. `interpolateDisplacement` evaluates the displacements at the coordinate points `querypoints(:,i)`, so each column of `querypoints` contains exactly one 2-D or 3-D query point.

Example: For 2-D geometry, ```querypoints = [0.5,0.5,0.75,0.75; 1,2,0,0.5]```

Data Types: `double`

Output Arguments

collapse all

Displacements at the query points, returned as an `FEStruct` object with the properties representing spatial components of displacement at the query points. For query points that are outside the geometry, `intrpDisp` returns `NaN`. Properties of an `FEStruct` object are read-only.

Version History

Introduced in R2017b

expand all