------------------------------------------------------------------------------
| 114 | |
| 115 | //------------------------------------------------------------------------------ |
| 116 | void 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 | } |
nothing calls this directly
no test coverage detected