55 const unsigned n_node =
nnode();
62 unsigned u_nodal_index[6];
63 for(
unsigned i=0;
i<6;++
i)
71 for(
unsigned i=0;
i<2;
i++)
78 bool pressure_dof_is_hanging[n_pres];
84 for(
unsigned l=0;l<n_pres;++l)
86 pressure_dof_is_hanging[l] =
93 for(
unsigned l=0;l<n_pres;++l)
95 pressure_dof_is_hanging[l] =
false;
101 Shape psif(n_node), testf(n_node);
102 DShape dpsifdx(n_node,2), dtestfdx(n_node,2);
105 Shape psip(n_pres), testp(n_pres);
121 int local_eqn = 0, local_unknown = 0;
124 HangInfo *hang_info_pt=0, *hang_info2_pt=0;
127 for(
unsigned ipt=0;ipt<n_intpt;ipt++)
146 const double W = w*J;
170 for(
unsigned l=0;l<n_pres;l++)
173 const double psip_ = psip(l);
176 for(
unsigned i=0;
i<2;
i++)
182 interpolated_p[
i] += p_value*psip_;
190 for(
unsigned l=0;l<n_node;l++)
193 const double psif_ = psif(l);
196 for(
unsigned i=0;
i<2;
i++)
202 for(
unsigned i=0;
i<6;
i++)
205 const double u_value = this->
nodal_value(l,u_nodal_index[
i]);
208 interpolated_u[
i] += u_value*psif_;
214 for(
unsigned j=0;j<2;j++)
216 interpolated_dudx(i,j) += u_value*dpsifdx(l,j);
225 for(
unsigned l=0;l<n_node;l++)
228 for(
unsigned i=0;
i<2;
i++)
257 const double interpolated_ur = base_flow_u[0];
258 const double interpolated_uz = base_flow_u[1];
259 const double interpolated_utheta = base_flow_u[2];
260 const double interpolated_durdr = base_flow_dudx(0,0);
261 const double interpolated_durdz = base_flow_dudx(0,1);
262 const double interpolated_duzdr = base_flow_dudx(1,0);
263 const double interpolated_duzdz = base_flow_dudx(1,1);
264 const double interpolated_duthetadr = base_flow_dudx(2,0);
265 const double interpolated_duthetadz = base_flow_dudx(2,1);
268 const double r = interpolated_x[0];
271 const double interpolated_UC = interpolated_u[0];
272 const double interpolated_US = interpolated_u[1];
273 const double interpolated_WC = interpolated_u[2];
274 const double interpolated_WS = interpolated_u[3];
275 const double interpolated_VC = interpolated_u[4];
276 const double interpolated_VS = interpolated_u[5];
277 const double interpolated_PC = interpolated_p[0];
278 const double interpolated_PS = interpolated_p[1];
281 const double interpolated_dUCdr = interpolated_dudx(0,0);
282 const double interpolated_dUCdz = interpolated_dudx(0,1);
283 const double interpolated_dUSdr = interpolated_dudx(1,0);
284 const double interpolated_dUSdz = interpolated_dudx(1,1);
285 const double interpolated_dWCdr = interpolated_dudx(2,0);
286 const double interpolated_dWCdz = interpolated_dudx(2,1);
287 const double interpolated_dWSdr = interpolated_dudx(3,0);
288 const double interpolated_dWSdz = interpolated_dudx(3,1);
289 const double interpolated_dVCdr = interpolated_dudx(4,0);
290 const double interpolated_dVCdz = interpolated_dudx(4,1);
291 const double interpolated_dVSdr = interpolated_dudx(5,0);
292 const double interpolated_dVSdz = interpolated_dudx(5,1);
299 unsigned n_master = 1;
302 double hang_weight = 1.0;
305 for(
unsigned l=0;l<n_node;l++)
308 const double testf_ = testf(l);
309 const double dtestfdr = dtestfdx(l,0);
310 const double dtestfdz = dtestfdx(l,1);
322 n_master = hang_info_pt->
nmaster();
331 for(
unsigned m=0;m<n_master;m++)
334 for(
unsigned i=0;
i<6;
i++)
375 sum += interpolated_PC*(testf_ + r*dtestfdr)*W*hang_weight;
379 r*(1.0+
Gamma[0])*interpolated_dUCdr*dtestfdr*W*hang_weight;
382 (interpolated_dUCdz +
Gamma[0]*interpolated_dWCdr)
383 *dtestfdz*W*hang_weight;
386 (k*
Gamma[0]*interpolated_dVSdr)
387 - (k*(2.0+
Gamma[0])*interpolated_VS/r)
388 - ((1.0+
Gamma[0]+(k*k))*interpolated_UC/r))
389 *testf_*W*hang_weight;
392 sum -= scaled_re_st*r*dudt[0]*testf_*W*hang_weight;
396 scaled_re*(r*interpolated_ur*interpolated_dUCdr
397 + r*interpolated_durdr*interpolated_UC
398 + k*interpolated_utheta*interpolated_US
399 - 2*interpolated_utheta*interpolated_VC
400 + r*interpolated_uz*interpolated_dUCdz
401 + r*interpolated_durdz*interpolated_WC)
402 *testf_*W*hang_weight;
407 for(
unsigned j=0;j<2;j++)
410 scaled_re_st*r*mesh_velocity[j]
411 *interpolated_dudx(0,j)*testf_*W*hang_weight;
424 sum += interpolated_PS*(testf_ + r*dtestfdr)*W*hang_weight;
428 r*(1.0+
Gamma[0])*interpolated_dUSdr*dtestfdr*W*hang_weight;
431 (interpolated_dUSdz +
Gamma[0]*interpolated_dWSdr)*
432 dtestfdz*W*hang_weight;
434 sum -= visc_ratio*((k*
Gamma[0]*interpolated_dVCdr)
435 - (k*(2.0+
Gamma[0])*interpolated_VC/r)
436 + ((1.0+
Gamma[0]+(k*k))*interpolated_US/r))
437 *testf_*W*hang_weight;
440 sum -= scaled_re_st*r*dudt[1]*testf_*W*hang_weight;
444 scaled_re*(r*interpolated_ur*interpolated_dUSdr
445 + r*interpolated_durdr*interpolated_US
446 - k*interpolated_utheta*interpolated_UC
447 - 2*interpolated_utheta*interpolated_VS
448 + r*interpolated_uz*interpolated_dUSdz
449 + r*interpolated_durdz*interpolated_WS)
450 *testf_*W*hang_weight;
455 for(
unsigned j=0;j<2;j++)
458 scaled_re_st*r*mesh_velocity[j]
459 *interpolated_dudx(1,j)*testf_*W*hang_weight;
472 sum += r*interpolated_PC*dtestfdz*W*hang_weight;
476 (interpolated_dWCdr +
Gamma[1]*interpolated_dUCdz)
477 *dtestfdr*W*hang_weight;
480 (1.0 +
Gamma[1])*interpolated_dWCdz*dtestfdz*W*hang_weight;
483 (
Gamma[1]*interpolated_dVSdz - k*interpolated_WC/r)
484 *testf_*W*hang_weight;
487 sum -= scaled_re_st*r*dudt[2]*testf_*W*hang_weight;
491 scaled_re*(r*interpolated_ur*interpolated_dWCdr
492 + r*interpolated_duzdr*interpolated_UC
493 + k*interpolated_utheta*interpolated_WS
494 + r*interpolated_uz*interpolated_dWCdz
495 + r*interpolated_duzdz*interpolated_WC)
496 *testf_*W*hang_weight;
501 for(
unsigned j=0;j<2;j++)
504 scaled_re_st*r*mesh_velocity[j]
505 *interpolated_dudx(2,j)*testf_*W*hang_weight;
518 sum += r*interpolated_PS*dtestfdz*W*hang_weight;
522 (interpolated_dWSdr +
Gamma[1]*interpolated_dUSdz)
523 *dtestfdr*W*hang_weight;
526 (1.0+
Gamma[1])*interpolated_dWSdz*dtestfdz*W*hang_weight;
529 (
Gamma[1]*interpolated_dVCdz + k*interpolated_WS/r)
530 *testf_*W*hang_weight;
533 sum -= scaled_re_st*r*dudt[3]*testf_*W*hang_weight;
537 scaled_re*(r*interpolated_ur*interpolated_dWSdr
538 + r*interpolated_duzdr*interpolated_US
539 - k*interpolated_utheta*interpolated_WC
540 + r*interpolated_uz*interpolated_dWSdz
541 + r*interpolated_duzdz*interpolated_WS)
542 *testf_*W*hang_weight;
547 for(
unsigned j=0;j<2;j++)
550 scaled_re_st*r*mesh_velocity[j]
551 *interpolated_dudx(3,j)*testf_*W*hang_weight;
564 sum -= k*interpolated_PS*testf_*W*hang_weight;
568 (-r*interpolated_dVCdr
569 - k*
Gamma[0]*interpolated_US
570 +
Gamma[0]*interpolated_VC)*dtestfdr*W*hang_weight;
573 (k*
Gamma[0]*interpolated_WS + r*interpolated_dVCdz)
574 *dtestfdz*W*hang_weight;
577 (
Gamma[0]*interpolated_dVCdr
578 + k*(2.0+
Gamma[0])*interpolated_US/r
579 - (1.0+(k*k)+(k*k*
Gamma[0]))*interpolated_VC/r)
580 *testf_*W*hang_weight;
583 sum -= scaled_re_st*r*dudt[4]*testf_*W*hang_weight;
587 scaled_re*(r*interpolated_ur*interpolated_dVCdr
588 + r*interpolated_duthetadr*interpolated_UC
589 + k*interpolated_utheta*interpolated_VS
590 + interpolated_utheta*interpolated_UC
591 + interpolated_ur*interpolated_VC
592 + r*interpolated_uz*interpolated_dVCdz
593 + r*interpolated_duthetadz*interpolated_WC)
594 *testf_*W*hang_weight;
599 for(
unsigned j=0;j<2;j++)
602 scaled_re_st*r*mesh_velocity[j]
603 *interpolated_dudx(4,j)*testf_*W*hang_weight;
616 sum += k*interpolated_PC*testf_*W*hang_weight;
620 (-r*interpolated_dVSdr
621 + k*
Gamma[0]*interpolated_UC
622 +
Gamma[0]*interpolated_VS)*dtestfdr*W*hang_weight;
625 (k*
Gamma[0]*interpolated_WC - r*interpolated_dVSdz)
626 *dtestfdz*W*hang_weight;
629 (
Gamma[0]*interpolated_dVSdr
630 - k*(2.0+
Gamma[0])*interpolated_UC/r
631 - (1.0+(k*k)+(k*k*
Gamma[0]))*interpolated_VS/r)
632 *testf_*W*hang_weight;
635 sum -= scaled_re_st*r*dudt[5]*testf_*W*hang_weight;
639 scaled_re*(r*interpolated_ur*interpolated_dVSdr
640 + r*interpolated_duthetadr*interpolated_US
641 - k*interpolated_utheta*interpolated_VC
642 + interpolated_utheta*interpolated_US
643 + interpolated_ur*interpolated_VS
644 + r*interpolated_uz*interpolated_dVSdz
645 + r*interpolated_duthetadz*interpolated_WS)
646 *testf_*W*hang_weight;
651 for(
unsigned j=0;j<2;j++)
654 scaled_re_st*r*mesh_velocity[j]
655 *interpolated_dudx(5,j)*testf_*W*hang_weight;
664 residuals[local_eqn] += sum;
672 unsigned n_master2 = 1;
675 double hang_weight2 = 1.0;
678 for(
unsigned l2=0;l2<n_node;l2++)
681 const double psif_ = psif[l2];
682 const double dpsifdr = dpsifdx(l2,0);
683 const double dpsifdz = dpsifdx(l2,1);
695 n_master2 = hang_info2_pt->
nmaster();
704 for(
unsigned m2=0;m2<n_master2;m2++)
707 for(
unsigned i2=0;i2<6;i2++)
721 hang_weight2 = hang_info2_pt->master_weight(m2);
735 if(local_unknown >= 0)
757 mass_matrix(local_eqn,local_unknown) +=
758 scaled_re_st*r*psif_*testf_*W*hang_weight
759 *hang_weight2*hang_weight*hang_weight2;
765 jacobian(local_eqn,local_unknown)
766 -= visc_ratio*r*(1.0+
Gamma[0])*dpsifdr*dtestfdr*W
767 *hang_weight*hang_weight2;
769 jacobian(local_eqn,local_unknown)
770 -= visc_ratio*r*dpsifdz*dtestfdz*W*hang_weight
773 jacobian(local_eqn,local_unknown)
774 -= visc_ratio*(1.0+
Gamma[0]+(k*k))*psif_*testf_*W
775 *hang_weight*hang_weight2/r;
778 jacobian(local_eqn,local_unknown) -=
781 psif_*testf_*W*hang_weight*hang_weight2;
784 jacobian(local_eqn,local_unknown) -=
785 scaled_re*r*(psif_*interpolated_durdr
786 + interpolated_ur*dpsifdr
787 + interpolated_uz*dpsifdz)
788 *testf_*W*hang_weight*hang_weight2;
793 for(
unsigned j=0;j<2;j++)
795 jacobian(local_eqn,local_unknown) +=
796 scaled_re_st*r*mesh_velocity[j]*dpsifdx(l2,j)
797 *testf_*W*hang_weight*hang_weight2;
808 jacobian(local_eqn,local_unknown) -=
809 scaled_re*k*interpolated_utheta*psif_*testf_*W
810 *hang_weight*hang_weight2;
819 jacobian(local_eqn,local_unknown) -=
820 visc_ratio*
Gamma[0]*r*dpsifdr*dtestfdz*W
821 *hang_weight*hang_weight2;
824 jacobian(local_eqn,local_unknown) -=
825 scaled_re*r*interpolated_durdz*psif_*testf_*W
826 *hang_weight*hang_weight2;
841 jacobian(local_eqn,local_unknown) +=
842 scaled_re*2*interpolated_utheta*psif_*testf_*W
843 *hang_weight*hang_weight2;
852 jacobian(local_eqn,local_unknown) += visc_ratio*(
853 (
Gamma[0]*k*dpsifdr) - (k*(2.0+
Gamma[0])*psif_/r))
854 *testf_*W*hang_weight*hang_weight2;
875 jacobian(local_eqn,local_unknown) +=
876 scaled_re*k*interpolated_utheta*psif_*testf_*W
877 *hang_weight*hang_weight2;
888 mass_matrix(local_eqn,local_unknown) +=
889 scaled_re_st*r*psif_*testf_*W
890 *hang_weight*hang_weight2;
896 jacobian(local_eqn,local_unknown)
897 -= visc_ratio*r*(1.0+
Gamma[0])*dpsifdr*dtestfdr*W
898 *hang_weight*hang_weight2;
900 jacobian(local_eqn,local_unknown)
901 -= visc_ratio*r*dpsifdz*dtestfdz*W
902 *hang_weight*hang_weight2;
904 jacobian(local_eqn,local_unknown)
905 -= visc_ratio*(1.0+
Gamma[0]+(k*k))*psif_*testf_*W
906 *hang_weight*hang_weight2/r;
909 jacobian(local_eqn,local_unknown)
912 psif_*testf_*W*hang_weight*hang_weight2;
915 jacobian(local_eqn,local_unknown) -=
916 scaled_re*r*(psif_*interpolated_durdr
917 + interpolated_ur*dpsifdr
918 + interpolated_uz*dpsifdz)
919 *testf_*W*hang_weight*hang_weight2;
924 for(
unsigned j=0;j<2;j++)
926 jacobian(local_eqn,local_unknown) +=
927 scaled_re_st*r*mesh_velocity[j]*dpsifdx(l2,j)
928 *testf_*W*hang_weight*hang_weight2;
945 jacobian(local_eqn,local_unknown) -=
946 visc_ratio*
Gamma[0]*r*dpsifdr*dtestfdz*W
947 *hang_weight*hang_weight2;
950 jacobian(local_eqn,local_unknown) -=
951 scaled_re*r*interpolated_durdz*psif_*testf_*W
952 *hang_weight*hang_weight2;
961 jacobian(local_eqn,local_unknown) -= visc_ratio*(
963 - (k*(2.0+
Gamma[0])*psif_/r))*testf_*W
964 *hang_weight*hang_weight2;
973 jacobian(local_eqn,local_unknown) +=
974 scaled_re*2*interpolated_utheta*psif_*testf_*W
975 *hang_weight*hang_weight2;
996 jacobian(local_eqn,local_unknown) -=
997 visc_ratio*r*
Gamma[1]*dpsifdz*dtestfdr*W
998 *hang_weight*hang_weight2;
1001 jacobian(local_eqn,local_unknown) -=
1002 scaled_re*r*psif_*interpolated_duzdr*testf_*W
1003 *hang_weight*hang_weight2;
1020 mass_matrix(local_eqn,local_unknown) +=
1021 scaled_re_st*r*psif_*testf_*W
1022 *hang_weight*hang_weight2;
1028 jacobian(local_eqn,local_unknown) -=
1029 visc_ratio*r*dpsifdr*dtestfdr*W
1030 *hang_weight*hang_weight2;
1032 jacobian(local_eqn,local_unknown) -=
1033 visc_ratio*r*(1.0+
Gamma[1])*dpsifdz*dtestfdz*W
1034 *hang_weight*hang_weight2;
1036 jacobian(local_eqn,local_unknown) -=
1037 visc_ratio*k*k*psif_*testf_*W
1038 *hang_weight*hang_weight2/r;
1041 jacobian(local_eqn,local_unknown) -=
1044 psif_*testf_*W*hang_weight*hang_weight2;
1047 jacobian(local_eqn,local_unknown) -=
1048 scaled_re*r*(interpolated_ur*dpsifdr
1049 + psif_*interpolated_duzdz
1050 + interpolated_uz*dpsifdz)
1051 *testf_*W*hang_weight*hang_weight2;
1057 for(
unsigned j=0;j<2;j++)
1059 jacobian(local_eqn,local_unknown) +=
1060 scaled_re_st*r*mesh_velocity[j]*dpsifdx(l2,j)
1061 *testf_*W*hang_weight*hang_weight2;
1072 jacobian(local_eqn,local_unknown) -=
1073 scaled_re*k*interpolated_utheta*psif_*testf_*W
1074 *hang_weight*hang_weight2;
1089 jacobian(local_eqn,local_unknown) +=
1090 visc_ratio*
Gamma[1]*k*dpsifdz*testf_*W
1091 *hang_weight*hang_weight2;
1118 jacobian(local_eqn,local_unknown) -=
1119 visc_ratio*r*
Gamma[1]*dpsifdz*dtestfdr*W
1120 *hang_weight*hang_weight2;
1123 jacobian(local_eqn,local_unknown) -=
1124 scaled_re*r*psif_*interpolated_duzdr*testf_*W
1125 *hang_weight*hang_weight2;
1134 jacobian(local_eqn,local_unknown) +=
1135 scaled_re*k*interpolated_utheta*psif_*testf_*W
1136 *hang_weight*hang_weight2;
1147 mass_matrix(local_eqn,local_unknown) +=
1148 scaled_re_st*r*psif_*testf_*W
1149 *hang_weight*hang_weight2;
1155 jacobian(local_eqn,local_unknown) -=
1156 visc_ratio*r*dpsifdr*dtestfdr*W
1157 *hang_weight*hang_weight2;
1159 jacobian(local_eqn,local_unknown) -=
1160 visc_ratio*r*(1.0+
Gamma[1])*dpsifdz*dtestfdz*W
1161 *hang_weight*hang_weight2;
1163 jacobian(local_eqn,local_unknown) -=
1164 visc_ratio*k*k*psif_*testf_*W
1165 *hang_weight*hang_weight2/r;
1168 jacobian(local_eqn,local_unknown) -=
1171 psif_*testf_*W*hang_weight*hang_weight2;
1174 jacobian(local_eqn,local_unknown) -=
1175 scaled_re*r*(interpolated_ur*dpsifdr
1176 + psif_*interpolated_duzdz
1177 + interpolated_uz*dpsifdz)
1178 *testf_*W*hang_weight*hang_weight2;
1184 for(
unsigned j=0;j<2;j++)
1186 jacobian(local_eqn,local_unknown) +=
1187 scaled_re_st*r*mesh_velocity[j]*dpsifdx(l2,j)
1188 *testf_*W*hang_weight*hang_weight2;
1199 jacobian(local_eqn,local_unknown) -=
1200 visc_ratio*
Gamma[1]*k*dpsifdz*testf_*W
1201 *hang_weight*hang_weight2;
1228 jacobian(local_eqn,local_unknown) -=
1229 scaled_re*(r*interpolated_duthetadr
1230 + interpolated_utheta)
1231 *psif_*testf_*W*hang_weight*hang_weight2;
1240 jacobian(local_eqn,local_unknown) +=
1241 visc_ratio*k*psif_*(
1242 ((2.0+
Gamma[0])*testf_/r) - (
Gamma[0]*dtestfdr))
1243 *W*hang_weight*hang_weight2;
1252 jacobian(local_eqn,local_unknown) -=
1253 scaled_re*r*psif_*interpolated_duthetadz*testf_*W
1254 *hang_weight*hang_weight2;
1263 jacobian(local_eqn,local_unknown) -=
1264 visc_ratio*k*
Gamma[0]*psif_*dtestfdz*W
1265 *hang_weight*hang_weight2;
1276 mass_matrix(local_eqn,local_unknown) +=
1277 scaled_re_st*r*psif_*testf_*W
1278 *hang_weight*hang_weight2;
1284 jacobian(local_eqn,local_unknown) +=
1285 visc_ratio*(
Gamma[0]*psif_ - r*dpsifdr)*dtestfdr*W
1286 *hang_weight*hang_weight2;
1288 jacobian(local_eqn,local_unknown) -=
1289 visc_ratio*r*dpsifdz*dtestfdz*W
1290 *hang_weight*hang_weight2;
1292 jacobian(local_eqn,local_unknown) +=
1293 visc_ratio*(
Gamma[0]*dpsifdr
1294 - (1.0+(k*k)+(k*k*
Gamma[0]))*psif_/r)
1295 *testf_*W*hang_weight*hang_weight2;
1298 jacobian(local_eqn,local_unknown) -=
1301 psif_*testf_*W*hang_weight*hang_weight2;
1304 jacobian(local_eqn,local_unknown) -=
1305 scaled_re*(r*interpolated_ur*dpsifdr
1306 + interpolated_ur*psif_
1307 + r*interpolated_uz*dpsifdz)
1308 *testf_*W*hang_weight*hang_weight2;
1313 for(
unsigned j=0;j<2;j++)
1315 jacobian(local_eqn,local_unknown) +=
1316 scaled_re_st*r*mesh_velocity[j]*dpsifdx(l2,j)
1317 *testf_*W*hang_weight*hang_weight2;
1328 jacobian(local_eqn,local_unknown) -=
1329 scaled_re*k*interpolated_utheta*psif_*testf_*W
1330 *hang_weight*hang_weight2;
1351 jacobian(local_eqn,local_unknown) +=
1352 visc_ratio*k*psif_*((
Gamma[0]*dtestfdr)
1353 - ((2.0+
Gamma[0])*testf_/r))
1354 *W*hang_weight*hang_weight2;
1363 jacobian(local_eqn,local_unknown) -=
1364 scaled_re*(r*interpolated_duthetadr
1365 + interpolated_utheta)*psif_*testf_*W
1366 *hang_weight*hang_weight2;
1375 jacobian(local_eqn,local_unknown) +=
1376 visc_ratio*k*
Gamma[0]*psif_*dtestfdz*W
1377 *hang_weight*hang_weight2;
1386 jacobian(local_eqn,local_unknown) -=
1387 scaled_re*r*psif_*interpolated_duthetadz*testf_*W
1388 *hang_weight*hang_weight2;
1397 jacobian(local_eqn,local_unknown) +=
1398 scaled_re*k*interpolated_utheta*psif_*testf_*W
1399 *hang_weight*hang_weight2;
1410 mass_matrix(local_eqn,local_unknown) +=
1411 scaled_re_st*r*psif_*testf_*W
1412 *hang_weight*hang_weight2;
1418 jacobian(local_eqn,local_unknown) +=
1419 visc_ratio*(
Gamma[0]*psif_ - r*dpsifdr)*dtestfdr*W
1420 *hang_weight*hang_weight2;
1422 jacobian(local_eqn,local_unknown) -=
1423 visc_ratio*r*dpsifdz*dtestfdz*W
1424 *hang_weight*hang_weight2;
1426 jacobian(local_eqn,local_unknown) +=
1427 visc_ratio*(
Gamma[0]*dpsifdr
1428 - (1.0+(k*k)+(k*k*
Gamma[0]))*psif_/r)
1429 *testf_*W*hang_weight*hang_weight2;
1432 jacobian(local_eqn,local_unknown) -=
1435 psif_*testf_*W*hang_weight*hang_weight2;
1438 jacobian(local_eqn,local_unknown) -=
1439 scaled_re*(r*interpolated_ur*dpsifdr
1440 + interpolated_ur*psif_
1441 + r*interpolated_uz*dpsifdz)*testf_*W
1442 *hang_weight*hang_weight2;
1447 for(
unsigned j=0;j<2;j++)
1449 jacobian(local_eqn,local_unknown) +=
1450 scaled_re_st*r*mesh_velocity[j]*dpsifdx(l2,j)
1451 *testf_*W*hang_weight*hang_weight2;
1467 for(
unsigned l2=0;l2<n_pres;l2++)
1470 if(pressure_dof_is_hanging[l2])
1477 n_master2 = hang_info2_pt->
nmaster();
1486 for(
unsigned m2=0;m2<n_master2;m2++)
1489 for(
unsigned i2=0;i2<2;i2++)
1495 if(pressure_dof_is_hanging[l2])
1503 hang_weight2 = hang_info2_pt->master_weight(m2);
1512 if(local_unknown >= 0)
1529 jacobian(local_eqn,local_unknown) +=
1530 psip[l2]*(testf_ + r*dtestfdr)*W
1531 *hang_weight*hang_weight2;
1557 jacobian(local_eqn,local_unknown)
1558 += psip[l2]*(testf_ + r*dtestfdr)*W
1559 *hang_weight*hang_weight2;
1577 jacobian(local_eqn,local_unknown) +=
1578 r*psip[l2]*dtestfdz*W*hang_weight*hang_weight2;
1604 jacobian(local_eqn,local_unknown) +=
1605 r*psip[l2]*dtestfdz*W*hang_weight*hang_weight2;
1627 jacobian(local_eqn,local_unknown) -=
1628 k*psip[l2]*testf_*W*hang_weight*hang_weight2;
1646 jacobian(local_eqn,local_unknown) +=
1647 k*psip[l2]*testf_*W*hang_weight*hang_weight2;
1671 for(
unsigned l=0;l<n_pres;l++)
1674 const double testp_ = testp[l];
1677 if(pressure_dof_is_hanging[l])
1683 n_master = hang_info_pt->
nmaster();
1692 for(
unsigned m=0;m<n_master;m++)
1695 for(
unsigned i=0;
i<2;
i++)
1701 if(pressure_dof_is_hanging[l])
1733 residuals[local_eqn] +=
1734 (interpolated_UC + r*interpolated_dUCdr
1735 + k*interpolated_VS + r*interpolated_dWCdz)*testp_*W
1747 residuals[local_eqn] +=
1748 (interpolated_US + r*interpolated_dUSdr
1749 - k*interpolated_VC + r*interpolated_dWSdz)*testp_*W
1761 unsigned n_master2 = 1;
1764 double hang_weight2 = 1.0;
1767 for(
unsigned l2=0;l2<n_node;l2++)
1770 const double psif_ = psif[l2];
1771 const double dpsifdr = dpsifdx(l2,0);
1772 const double dpsifdz = dpsifdx(l2,1);
1778 if(is_node2_hanging)
1784 n_master2 = hang_info2_pt->
nmaster();
1793 for(
unsigned m2=0;m2<n_master2;m2++)
1796 for(
unsigned i2=0;i2<6;i2++)
1802 if(is_node2_hanging)
1810 hang_weight2 = hang_info2_pt->master_weight(m2);
1824 if(local_unknown >= 0)
1842 jacobian(local_eqn,local_unknown) +=
1843 (psif_ + r*dpsifdr)*testp_*W
1844 *hang_weight*hang_weight2;
1858 jacobian(local_eqn,local_unknown) +=
1859 r*dpsifdz*testp_*W*hang_weight*hang_weight2;
1879 jacobian(local_eqn,local_unknown) +=
1880 k*psif_*testp_*W*hang_weight*hang_weight2;
1905 jacobian(local_eqn,local_unknown) +=
1906 (psif_ + r*dpsifdr)*testp_*W
1907 *hang_weight*hang_weight2;
1921 jacobian(local_eqn,local_unknown) +=
1922 r*dpsifdz*testp_*W*hang_weight*hang_weight2;
1930 jacobian(local_eqn,local_unknown) -=
1931 k*psif_*testp_*W*hang_weight*hang_weight2;
int local_hang_eqn(Node *const &node_pt, const unsigned &i)
Access function that returns the local equation number for the hanging node variables (values stored ...
double nodal_position(const unsigned &n, const unsigned &i) const
Return the i-th coordinate at local node n. If the node is hanging, the appropriate interpolation is ...
HangInfo *const & hanging_pt() const
Return pointer to hanging node data (this refers to the geometric hanging node status) (const version...
double & time()
Return current value of continous time.
virtual int p_index_linearised_axi_nst(const unsigned &i) const
Which nodal value represents the pressure?
virtual double dshape_and_dtest_eulerian_at_knot_linearised_axi_nst(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
Compute the shape functions and their derivatives w.r.t. global coordinates at the ipt-th integration...
virtual double p_linearised_axi_nst(const unsigned &n_p, const unsigned &i) const =0
Return the i-th pressure value at local pressure "node" n_p. Uses suitably interpolated value for han...
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
virtual void get_base_flow_dudx(const double &time, const unsigned &ipt, const Vector< double > &x, DenseMatrix< double > &result) const
Calculate the derivatives of the velocity components of the base flow solution w.r.t. global coordinates (r and z) at a given time and Eulerian position.
unsigned nmaster() const
Return the number of master nodes.
const double & density_ratio() const
Density ratio for element: element's density relative to the viscosity used in the definition of the ...
virtual int p_local_eqn(const unsigned &n, const unsigned &i)=0
Access function for the local equation number information for the i-th component of the pressure...
bool is_hanging() const
Test whether the node is geometrically hanging.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
virtual void pshape_linearised_axi_nst(const Vector< double > &s, Shape &psi) const =0
Compute the pressure shape functions at local coordinate s.
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
static Vector< double > Gamma
Vector to decide whether the stress-divergence form is used or not.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
void fill_in_generic_residual_contribution_linearised_axi_nst(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Add element's contribution to the elemental residual vector and/or Jacobian matrix flag=1: compute bo...
double du_dt_linearised_axi_nst(const unsigned &n, const unsigned &i) const
Return the i-th component of du/dt at local node n. Uses suitably interpolated value for hanging node...
bool ALE_is_disabled
Boolean flag to indicate if ALE formulation is disabled when the time-derivatives are computed...
virtual void get_base_flow_u(const double &time, const unsigned &ipt, const Vector< double > &x, Vector< double > &result) const
Calculate the velocity components of the base flow solution at a given time and Eulerian position...
virtual unsigned npres_linearised_axi_nst() const =0
Return the number of pressure degrees of freedom associated with a single pressure component in the e...
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
double nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes...
Class that contains data for hanging nodes.
const int & azimuthal_mode_number() const
Azimuthal mode number k in e^ik(theta) decomposition.
virtual unsigned u_index_linearised_axi_nst(const unsigned &i) const
Return the index at which the i-th unknown velocity component is stored. The default value...
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
double dnodal_position_dt(const unsigned &n, const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt at local node n.
const double & viscosity_ratio() const
Viscosity ratio for element: element's viscosity relative to the viscosity used in the definition of ...
const double & re() const
Reynolds number.
unsigned nnode() const
Return the number of nodes.
virtual Node * pressure_node_pt(const unsigned &n_p)
Pointer to n_p-th pressure node (Default: NULL, indicating that pressure is not based on nodal interp...
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
const double & re_st() const
Product of Reynolds and Strouhal number (=Womersley number)
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node...