MCPcopy Create free account
hub / github.com/Kitware/VTK / InterpolateDerivs

Method InterpolateDerivs

Common/DataModel/vtkLagrangeTriangle.cxx:116–198  ·  view source on GitHub ↗

------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

114
115//------------------------------------------------------------------------------
116void vtkLagrangeTriangle::InterpolateDerivs(const double pcoords[3], double* derivs)
117{
118 // Analytic differentiation of the triangle shape functions, as defined in
119 // P. Silvester, "High-Order Polynomial Triangular Finite Elements for
120 // Potential Problems". Int. J. Engng Sci. Vol. 7, pp. 849-861. Pergamon
121 // Press, 1969. The generic method is valid for all orders, but we unroll the
122 // first two orders to reduce computational cost.
123
124 double tau[3] = { pcoords[0], pcoords[1], 1. - pcoords[0] - pcoords[1] };
125
126 vtkIdType n = this->GetOrder();
127
128 if (n == 1)
129 {
130 derivs[0] = -1;
131 derivs[1] = 1;
132 derivs[2] = 0;
133 derivs[3] = -1;
134 derivs[4] = 0;
135 derivs[5] = 1;
136 }
137 else if (n == 2)
138 {
139#ifdef SEVEN_POINT_TRIANGLE
140 if (this->GetPoints()->GetNumberOfPoints() == 7)
141 {
142 double tmr = tau[2] - tau[0];
143 double tms = tau[2] - tau[1];
144 derivs[0] = -1.0 + 3.0 * tau[1] * tmr - 2.0 * tmr + 2.0 * tau[1];
145 derivs[1] = 1.0 + 3.0 * tau[1] * tmr - 2.0 * tmr - 2.0 * tau[1];
146 derivs[2] = 3.0 * tau[1] * tmr;
147 derivs[3] = 4.0 * tmr - 12.0 * tau[1] * tmr;
148 derivs[4] = 4.0 * tau[1] - 12.0 * tau[1] * tmr;
149 derivs[5] = -4.0 * tau[1] - 12.0 * tau[1] * tmr;
150 derivs[6] = 27.0 * tau[1] * tmr;
151 derivs[7] = -1.0 + 3.0 * tau[0] * tms - 2.0 * tms + 2.0 * tau[0];
152 derivs[8] = 3.0 * tau[0] * tms;
153 derivs[9] = 1.0 + 3.0 * tau[0] * tms - 2.0 * tms - 2.0 * tau[0];
154 derivs[10] = -4.0 * tau[0] - 12.0 * tau[0] * tms;
155 derivs[11] = 4.0 * tau[0] - 12.0 * tau[0] * tms;
156 derivs[12] = 4.0 * tms - 12.0 * tau[0] * tms;
157 derivs[13] = 27.0 * tau[0] * tms;
158 return;
159 }
160#endif
161 derivs[0] = 1.0 - 4.0 * tau[2];
162 derivs[1] = 4.0 * tau[0] - 1.0;
163 derivs[2] = 0.0;
164 derivs[3] = 4.0 * (tau[2] - tau[0]);
165 derivs[4] = 4.0 * tau[1];
166 derivs[5] = -4.0 * tau[1];
167 derivs[6] = 1.0 - 4.0 * tau[2];
168 derivs[7] = 0.0;
169 derivs[8] = 4.0 * tau[1] - 1.0;
170 derivs[9] = -4.0 * tau[0];
171 derivs[10] = 4.0 * tau[0];
172 derivs[11] = 4.0 * (tau[2] - tau[1]);
173 }

Callers

nothing calls this directly

Calls 4

ToBarycentricIndexMethod · 0.80
GetOrderMethod · 0.45
GetNumberOfPointsMethod · 0.45
GetPointsMethod · 0.45

Tested by

no test coverage detected