# deriveWSS3D Subroutine

## public recursive subroutine deriveWSS3D(fun, varSys, elempos, time, tree, nElems, nDofs, res)

Calculate the wall shear stress (WSS) of a given element with the given input

The wall shear stress is shear stress exerted on the wall. Since it is well known that shear stress gets its maximum value on the wall, here we can directly calculate the principle stress of the stress tensor instead of multiplying the stress tensor by normal vector of the plane. The principle stresses are just the eigenvalues of the stress tensor. To get those eigenvalues, we need solve the characteristic equation:\n ${\tau}^3 + a_{2}{\tau}^2 + a_1{\tau} + a_0 = 0$ where $a_2 = \tau_{ii}$ $a_1 = (\tau_{ii}\tau_{jj} - \tau_{ij}\tau_{ji}) / 2$ $a_0 = det(\tau_{ij})$. Here Einstein notation is used.

### Arguments

TypeIntentOptionalAttributesName
class(tem_varSys_op_type), intent(in) :: fun

Description of the method to obtain the variables, here some preset values might be stored, like the space time function to use or the required variables.

type(tem_varSys_type), intent(in) :: varSys

The variable system to obtain the variable from.

integer, intent(in) :: elempos(:)

Position of the TreeID of the element to get the variable for in the global treeID list.

type(tem_time_type), intent(in) :: time

Point in time at which to evaluate the variable.

type(treelmesh_type), intent(in) :: tree

global treelm mesh info

integer, intent(in) :: nElems

Number of values to obtain for this variable (vectorized access).

integer, intent(in) :: nDofs

Number of degrees of freedom within an element.

real(kind=rk), intent(out) :: res(:)

Resulting values for the requested variable.

Linearized array dimension: (n requested entries) x (nComponents of this variable) x (nDegrees of freedom) Access: (iElem-1)fun%nComponentsnDofs + (iDof-1)*fun%nComponents + iComp

## Variables

TypeVisibilityAttributesNameInitial
integer, private :: iElem
integer, private :: shear_pos
real(kind=rk), private :: shear(6*nElems)