82 RealTensorValue I(1, 0, 0, 0, 1, 0, 0, 0, 1);
84 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
90 RealTensorValue Dgb(0.0);
91 std::vector<RealTensorValue> dDgbdeta(
_op_num);
92 std::vector<RankThreeTensor> dDgbdgradeta(
_op_num);
94 for (
unsigned int i = 0; i <
_op_num; ++i)
95 for (
unsigned int j = i + 1; j <
_op_num; ++j)
98 if (ngb.norm() > 1.0e-10)
104 for (
unsigned int a = 0;
a < 3; ++
a)
105 for (
unsigned int b =
a;
b < 3; ++
b)
107 Tgb(
a,
b) = I(
a,
b) - ngb(
a) * ngb(
b);
108 Tgb(
b,
a) = I(
b,
a) - ngb(
b) * ngb(
a);
119 dTgbi(0, 0, 0) = -2.0 * detax * (detay * detay + detaz * detaz) / norm4;
120 dTgbi(1, 0, 0) = dTgbi(0, 1, 0) =
121 (detax * detax * detay - detay * detay * detay - detay * detaz * detaz) / norm4;
122 dTgbi(1, 1, 0) = 2.0 * detax * detay * detay / norm4;
123 dTgbi(2, 0, 0) = dTgbi(0, 2, 0) =
124 (detax * detax * detaz - detay * detay * detaz - detaz * detaz * detaz) / norm4;
125 dTgbi(2, 1, 0) = dTgbi(1, 2, 0) = 2.0 * detax * detay * detaz / norm4;
126 dTgbi(2, 2, 0) = 2.0 * detax * detaz * detaz / norm4;
128 dTgbi(0, 0, 1) = 2.0 * detax * detax * detay / norm4;
129 dTgbi(1, 0, 1) = dTgbi(0, 1, 1) =
130 (-detax * detax * detax + detax * detay * detay - detax * detaz * detaz) / norm4;
131 dTgbi(1, 1, 1) = -2.0 * detay * (detax * detax + detaz * detaz) / norm4;
132 dTgbi(2, 0, 1) = dTgbi(0, 2, 1) = 2.0 * detax * detay * detaz / norm4;
133 dTgbi(2, 1, 1) = dTgbi(1, 2, 1) =
134 (detay * detay * detaz - detax * detax * detaz - detaz * detaz * detaz) / norm4;
135 dTgbi(2, 2, 1) = 2.0 * detay * detaz * detaz / norm4;
138 dTgbi(0, 0, 2) = 2.0 * detax * detax * detaz / norm4;
139 dTgbi(1, 0, 2) = dTgbi(0, 1, 2) = 2.0 * detax * detay * detaz / norm4;
140 dTgbi(1, 1, 2) = 2.0 * detay * detay * detaz / norm4;
141 dTgbi(2, 0, 2) = dTgbi(0, 2, 2) =
142 (detax * detaz * detaz - detax * detax * detax - detay * detay * detax) / norm4;
143 dTgbi(2, 1, 2) = dTgbi(1, 2, 2) =
144 (detay * detaz * detaz - detax * detax * detay - detay * detay * detay) / norm4;
145 dTgbi(2, 2, 2) = -2.0 * detaz * (detax * detax + detay * detay) / norm4;
150 Dgb += (*
_vals[i])[_qp] * (*
_vals[j])[_qp] * Tgb;
151 Dgb += (*
_vals[j])[_qp] * (*
_vals[i])[_qp] * Tgb;
152 dDgbdeta[i] += 2.0 * (*
_vals[j])[_qp] * Tgb;
153 dDgbdeta[j] += 2.0 * (*
_vals[i])[_qp] * Tgb;
154 dDgbdgradeta[i] += 2.0 * (*
_vals[i])[_qp] * (*
_vals[j])[_qp] * dTgbi;
155 dDgbdgradeta[j] += 2.0 * (*
_vals[i])[_qp] * (*
_vals[j])[_qp] * dTgbj;
160 if (
_grad_c[_qp].norm() > 1.0e-10)
164 for (
unsigned int a = 0;
a < 3; ++
a)
165 for (
unsigned int b = 0;
b < 3; ++
b)
167 Ts(
a,
b) = I(
a,
b) - ns(
a) * ns(
b);
171 if (
_grad_c[_qp].norm() > 1.0e-10)
178 dTs(0, 0, 0) = -2.0 * dcx * (dcy * dcy + dcz * dcz) / norm4;
179 dTs(1, 0, 0) = dTs(0, 1, 0) = (dcx * dcx * dcy - dcy * dcy * dcy - dcy * dcz * dcz) / norm4;
180 dTs(1, 1, 0) = 2.0 * dcx * dcy * dcy / norm4;
181 dTs(2, 0, 0) = dTs(0, 2, 0) = (dcx * dcx * dcz - dcy * dcy * dcz - dcz * dcz * dcz) / norm4;
182 dTs(2, 1, 0) = dTs(1, 2, 0) = 2.0 * dcx * dcy * dcz / norm4;
183 dTs(2, 2, 0) = 2.0 * dcx * dcz * dcz / norm4;
186 dTs(0, 0, 1) = 2.0 * dcx * dcx * dcy / norm4;
187 dTs(1, 0, 1) = dTs(0, 1, 1) = (-dcx * dcx * dcx + dcx * dcy * dcy - dcx * dcz * dcz) / norm4;
188 dTs(1, 1, 1) = -2.0 * dcy * (dcx * dcx + dcz * dcz) / norm4;
189 dTs(2, 0, 1) = dTs(0, 2, 1) = 2.0 * dcx * dcy * dcz / norm4;
190 dTs(2, 1, 1) = dTs(1, 2, 1) = (dcy * dcy * dcz - dcx * dcx * dcz - dcz * dcz * dcz) / norm4;
191 dTs(2, 2, 1) = 2.0 * dcy * dcz * dcz / norm4;
194 dTs(0, 0, 2) = 2.0 * dcx * dcx * dcz / norm4;
195 dTs(1, 0, 2) = dTs(0, 1, 2) = 2.0 * dcx * dcy * dcz / norm4;
196 dTs(1, 1, 2) = 2.0 * dcy * dcy * dcz / norm4;
197 dTs(2, 0, 2) = dTs(0, 2, 2) = (dcx * dcz * dcz - dcx * dcx * dcx - dcy * dcy * dcx) / norm4;
198 dTs(2, 1, 2) = dTs(1, 2, 2) = (dcy * dcz * dcz - dcx * dcx * dcy - dcy * dcy * dcy) / norm4;
199 dTs(2, 2, 2) = -2.0 * dcz * (dcx * dcx + dcy * dcy) / norm4;
202 RealTensorValue Dsurf =
c *
c * mc * mc * Ts;
203 RealTensorValue dDsurfdc = (2.0 *
c * mc * mc - 2.0 *
c *
c * mc) * Ts;
208 const Real mult_bulk = 1.0;
209 const Real dmult_bulk = 0.0;
217 for (
unsigned int i = 0; i <
_op_num; ++i)