1044
1045
1046
1047#include "implicit_f.inc"
1048
1049
1050
1051#include "mvsiz_p.inc"
1052
1053
1054
1055 INTEGER LLT
1056
1058 . dxdr(mvsiz), dydr(mvsiz), dzdr(mvsiz),
1059 . dxds(mvsiz), dyds(mvsiz), dzds(mvsiz),
1060 . dxdt(mvsiz), dydt(mvsiz), dzdt(mvsiz),
1061 . drdx(mvsiz), dsdx(mvsiz), dtdx(mvsiz),
1062 . drdy(mvsiz), dsdy(mvsiz), dtdy(mvsiz),
1063 . drdz(mvsiz), dsdz(mvsiz), dtdz(mvsiz),
1064 . xx(mvsiz,21) ,yy(mvsiz,21),zz(mvsiz,21),
1065 . ni(mvsiz,21) ,rr(mvsiz) ,ss(mvsiz) ,tt(mvsiz)
1066
1067
1068
1069 INTEGER I
1071 . dnidr(20),dnids(20),dnidt(20),
1072 . d, det(mvsiz)
1074 . u_m_r,u_p_r,u_m_s,u_p_s,u_m_t,u_p_t,
1075 . ums_umt,ums_upt,ups_umt,ups_upt,
1076 . umr_ums,umr_ups,upr_ums,upr_ups,
1077 . umt_umr,umt_upr,upt_umr,upt_upr,
1078 . a,r05,s05,t05
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150 DO i=1,llt
1151 r05 = half*rr(i)
1152 s05 = half*ss(i)
1153 t05 = half*tt(i)
1154
1155 u_m_r = half - r05
1156 u_p_r = half + r05
1157
1158 u_m_s = half - s05
1159 u_p_s = half + s05
1160
1161 u_m_t = half - t05
1162 u_p_t = half + t05
1163
1164 ums_umt = u_m_s * u_m_t
1165 ums_upt = u_m_s * u_p_t
1166 ups_umt = u_p_s * u_m_t
1167 ups_upt = u_p_s * u_p_t
1168
1169 umr_ums = u_m_r * u_m_s
1170 umr_ups = u_m_r * u_p_s
1171 upr_ums = u_p_r * u_m_s
1172 upr_ups = u_p_r * u_p_s
1173
1174 umt_umr = u_m_t * u_m_r
1175 umt_upr = u_m_t * u_p_r
1176 upt_umr = u_p_t * u_m_r
1177 upt_upr = u_p_t * u_p_r
1178
1179
1180
1181
1182 ni(i,1) = u_m_r * ums_umt * (-rr(i)-ss(i)-tt(i)-two)
1183 ni(i,2) = u_m_r * ums_upt * (-rr(i)-ss(i)+tt(i)-two)
1184 ni(i,3) = u_p_r * ums_upt * ( rr(i)-ss(i)+tt(i)-two)
1185 ni(i,4) = u_p_r * ums_umt * ( rr(i)-ss(i)-tt(i)-two)
1186 ni(i,5) = u_m_r * ups_umt * (-rr(i)+ss(i)-tt(i)-two)
1187 ni(i,6) = u_m_r * ups_upt * (-rr(i)+ss(i)+tt(i)-two)
1188 ni(i,7) = u_p_r * ups_upt * ( rr(i)+ss(i)+tt(i)-two)
1189 ni(i,8) = u_p_r * ups_umt * ( rr(i)+ss(i)-tt(i)-two)
1190
1191 dnidr(1) = -ums_umt * (u_m_s + u_m_t - rr(i) -three_half)
1192 dnidr(2) = -ums_upt * (u_m_s + u_p_t - rr(i) -three_half)
1193 dnidr(3) = ums_upt * (u_m_s + u_p_t + rr(i) -three_half)
1194 dnidr(4) = ums_umt * (u_m_s + u_m_t + rr(i) -three_half)
1195 dnidr(5) = -ups_umt * (u_p_s + u_m_t - rr(i) -three_half)
1196 dnidr(6) = -ups_upt * (u_p_s + u_p_t - rr(i) -three_half)
1197 dnidr(7) = ups_upt * (u_p_s + u_p_t + rr(i) -three_half)
1198 dnidr(8) = ups_umt * (u_p_s + u_m_t + rr(i) -three_half)
1199
1200 dnids(1) = -umt_umr * (u_m_r + u_m_t - ss(i) -three_half)
1201 dnids(2) = -upt_umr * (u_m_r + u_p_t - ss(i) -three_half)
1202 dnids(3) = -upt_upr * (u_p_r + u_p_t - ss(i) -three_half)
1203 dnids(4) = -umt_upr * (u_p_r + u_m_t - ss(i) -three_half)
1204 dnids(5) = umt_umr * (u_m_r + u_m_t + ss(i) -three_half)
1205 dnids(6) = upt_umr * (u_m_r + u_p_t + ss(i) -three_half)
1206 dnids(7) = upt_upr * (u_p_r + u_p_t + ss(i) -three_half)
1207 dnids(8) = umt_upr * (u_p_r + u_m_t + ss(i) -three_half)
1208
1209 dnidt(1) = -umr_ums * (u_m_r + u_m_s - tt(i) -three_half)
1210 dnidt(2) = umr_ums * (u_m_r + u_m_s + tt(i) -three_half)
1211 dnidt(3) = upr_ums * (u_p_r + u_m_s + tt(i) -three_half)
1212 dnidt(4) = -upr_ums * (u_p_r + u_m_s - tt(i) -three_half)
1213 dnidt(5) = -umr_ups * (u_m_r + u_p_s - tt(i) -three_half)
1214 dnidt(6) = umr_ups * (u_m_r + u_p_s + tt(i) -three_half)
1215 dnidt(7) = upr_ups * (u_p_r + u_p_s + tt(i) -three_half)
1216 dnidt(8) = -upr_ups * (u_p_r + u_p_s - tt(i) -three_half)
1217
1218 a = (one-rr(i)*rr(i))
1219 ni(i,10) = a * ums_upt
1220 ni(i,12) = a * ums_umt
1221 ni(i,18) = a * ups_upt
1222 ni(i,20) = a * ups_umt
1223
1224 a = half*a
1225 dnidt(10) = a * u_m_s
1226 dnidt(18) = a * u_p_s
1227 dnidt(12) = -dnidt(10)
1228 dnidt(20) = -dnidt(18)
1229
1230 dnids(18) = a * u_p_t
1231 dnids(20) = a * u_m_t
1232 dnids(10) = -dnids(18)
1233 dnids(12) = -dnids(20)
1234
1235 a = -two*rr(i)
1236 dnidr(10) = a * ums_upt
1237 dnidr(12) = a * ums_umt
1238 dnidr(18) = a * ups_upt
1239 dnidr(20) = a * ups_umt
1240
1241 a = (one-ss(i)*ss(i))
1242 ni(i,13) = a * umt_umr
1243 ni(i,14) = a * upt_umr
1244 ni(i,15) = a * upt_upr
1245 ni(i,16) = a * umt_upr
1246
1247 a = half*a
1248 dnidr(15) = a * u_p_t
1249 dnidr(16) = a * u_m_t
1250 dnidr(13) = -dnidr(16)
1251 dnidr(14) = -dnidr(15)
1252
1253 dnidt(14) = a * u_m_r
1254 dnidt(15) = a * u_p_r
1255 dnidt(13) = -dnidt(14)
1256 dnidt(16) = -dnidt(15)
1257
1258 a = -two*ss(i)
1259 dnids(13) = a * umt_umr
1260 dnids(14) = a * upt_umr
1261 dnids(15) = a * upt_upr
1262 dnids(16) = a * umt_upr
1263
1264 a = (one-tt(i)*tt(i))
1265 ni(i,9) = a * umr_ums
1266 ni(i,11) = a * upr_ums
1267 ni(i,17) = a * umr_ups
1268 ni(i,19) = a * upr_ups
1269
1270 ni(i,21) = -one
1271
1272 a = half*a
1273 dnidr(11) = a * u_m_s
1274 dnidr(19) = a * u_p_s
1275 dnidr(9) = -dnidr(11)
1276 dnidr(17) = -dnidr(19)
1277
1278 dnids(17) = a * u_m_r
1279 dnids(19) = a * u_p_r
1280 dnids(9) = -dnids(17)
1281 dnids(11) = -dnids(19)
1282
1283 a = -two*tt(i)
1284 dnidt(9) = a * umr_ums
1285 dnidt(11) = a * upr_ums
1286 dnidt(17) = a * umr_ups
1287 dnidt(19) = a * upr_ups
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298 dxdr(i) = dnidr(1)*xx(i,1) + dnidr(2)*xx(i,2) + dnidr(3)*xx(i,3)
1299 + + dnidr(4)*xx(i,4) + dnidr(5)*xx(i,5) + dnidr(6)*xx(i,6)
1300 + + dnidr(7)*xx(i,7) + dnidr(8)*xx(i,8)
1301 + + dnidr(9)*xx(i,9) + dnidr(10)*xx(i,10) + dnidr(11)*xx(i,11)
1302 + + dnidr(12)*xx(i,12) + dnidr(13)*xx(i,13) + dnidr(14)*xx(i,14)
1303 + + dnidr(15)*xx(i,15) + dnidr(16)*xx(i,16) + dnidr(17)*xx(i,17)
1304 + + dnidr(18)*xx(i,18) + dnidr(19)*xx(i,19) + dnidr(20)*xx(i,20)
1305
1306 dxds(i) = dnids(1)*xx(i,1) + dnids(2)*xx(i,2) + dnids(3)*xx(i,3)
1307 + + dnids(4)*xx(i,4) + dnids(5)*xx(i,5) + dnids(6)*xx(i,6)
1308 + + dnids(7)*xx(i,7) + dnids(8)*xx(i,8)
1309 + + dnids(9)*xx(i,9) + dnids(10)*xx(i,10) + dnids(11)*xx(i,11)
1310 + + dnids(12)*xx(i,12) + dnids(13)*xx(i,13) + dnids(14)*xx(i,14)
1311 + + dnids(15)*xx(i,15) + dnids(16)*xx(i,16) + dnids(17)*xx(i,17)
1312 + + dnids(18)*xx(i,18) + dnids(19)*xx(i,19) + dnids(20)*xx(i,20)
1313
1314 dxdt(i) = dnidt(1)*xx(i,1) + dnidt(2)*xx(i,2) + dnidt(3)*xx(i,3)
1315 + + dnidt(4)*xx(i,4) + dnidt(5)*xx(i,5) + dnidt(6)*xx(i,6)
1316 + + dnidt(7)*xx(i,7) + dnidt(8)*xx(i,8)
1317 + + dnidt(9)*xx(i,9) + dnidt(10)*xx(i,10) + dnidt(11)*xx(i,11)
1318 + + dnidt(12)*xx(i,12) + dnidt(13)*xx(i,13) + dnidt(14)*xx(i,14)
1319 + + dnidt(15)*xx(i,15) + dnidt(16)*xx(i,16) + dnidt(17)*xx(i,17)
1320 + + dnidt(18)*xx(i,18) + dnidt(19)*xx(i,19) + dnidt(20)*xx(i,20)
1321
1322
1323
1324 dydr(i) = dnidr(1)*yy(i,1) + dnidr(2)*yy(i,2) + dnidr(3)*yy(i,3)
1325 + + dnidr(4)*yy(i,4) + dnidr(5)*yy(i,5) + dnidr(6)*yy(i,6)
1326 + + dnidr(7)*yy(i,7) + dnidr(8)*yy(i,8)
1327 + + dnidr(9)*yy(i,9) + dnidr(10)*yy(i,10) + dnidr(11)*yy(i,11)
1328 + + dnidr(12)*yy(i,12) + dnidr(13)*yy(i,13) + dnidr(14)*yy(i,14)
1329 + + dnidr(15)*yy(i,15) + dnidr(16)*yy(i,16) + dnidr(17)*yy(i,17)
1330 + + dnidr(18)*yy(i,18) + dnidr(19)*yy(i,19) + dnidr(20)*yy(i,20)
1331
1332 dyds(i) = dnids(1)*yy(i,1) + dnids(2)*yy(i,2) + dnids(3)*yy(i,3)
1333 + + dnids(4)*yy(i,4) + dnids(5)*yy(i,5) + dnids(6)*yy(i,6)
1334 + + dnids(7)*yy(i,7) + dnids(8)*yy(i,8)
1335 + + dnids(9)*yy(i,9) + dnids(10)*yy(i,10) + dnids(11)*yy(i,11)
1336 + + dnids(12)*yy(i,12) + dnids(13)*yy(i,13) + dnids(14)*yy(i,14)
1337 + + dnids(15)*yy(i,15) + dnids(16)*yy(i,16) + dnids(17)*yy(i,17)
1338 + + dnids(18)*yy(i,18) + dnids(19)*yy(i,19) + dnids(20)*yy(i,20)
1339
1340 dydt(i) = dnidt(1)*yy(i,1) + dnidt(2)*yy(i,2) + dnidt(3)*yy(i,3)
1341 + + dnidt(4)*yy(i,4) + dnidt(5)*yy(i,5) + dnidt(6)*yy(i,
1342 + + dnidt(7)*yy(i,7) + dnidt(8)*yy(i,8)
1343 + + dnidt(9)*yy(i,9) + dnidt(10)*yy(i,10) + dnidt(11)*yy(i,11)
1344 + + dnidt(12)*yy(i,12) + dnidt(13)*yy(i,13) + dnidt(14)*yy(i,14)
1345 + + dnidt(15)*yy(i,15) + dnidt(16)*yy(i,16) + dnidt(17)*yy(i,17)
1346 + + dnidt(18)*yy(i,18) + dnidt(19)*yy(i,19) + dnidt(20)*yy(i,20)
1347
1348
1349
1350 dzdr(i) = dnidr(1)*zz(i,1) + dnidr(2)*zz(i,2) + dnidr(3)*zz(i,3)
1351 + + dnidr(4)*zz(i,4) + dnidr(5)*zz(i,5) + dnidr(6)*zz(i,6)
1352 + + dnidr(7)*zz(i,7) + dnidr(8)*zz(i,8)
1353 + + dnidr(9)*zz(i,9) + dnidr(10)*zz(i,10) + dnidr(11)*zz(i,11)
1354 + + dnidr(12)*zz(i,12) + dnidr(13)*zz(i,13) + dnidr(14)*zz(i,14)
1355 + + dnidr(15)*zz(i,15) + dnidr(16)*zz(i,16) + dnidr(17)*zz(i,17)
1356 + + dnidr(18)*zz(i,18) + dnidr(19)*zz(i,19) + dnidr(20)*zz(i,20)
1357
1358 dzds(i) = dnids(1)*zz(i,1) + dnids(2)*zz(i,2) + dnids(3)*zz(i,3)
1359 + + dnids(4)*zz(i,4) + dnids(5)*zz(i,5) + dnids(6)*zz(i,6)
1360 + + dnids(7)*zz(i,7) + dnids(8)*zz(i,8)
1361 + + dnids(9)*zz(i,9) + dnids(10)*zz(i,10) + dnids(11)*zz(i,11)
1362 + + dnids(12)*zz(i,12) + dnids(13)*zz(i,13) + dnids(14)*zz(i,14)
1363 + + dnids(15)*zz(i,15) + dnids(16)*zz(i,16) + dnids(17)*zz(i,17)
1364 + + dnids(18)*zz(i,18) + dnids(19)*zz(i,19) + dnids(20)*zz(i,20)
1365
1366 dzdt(i) = dnidt(1)*zz(i,1) + dnidt(2)*zz(i,2) + dnidt(3)*zz(i,3)
1367 + + dnidt(4)*zz(i,4) + dnidt(5)*zz(i,5) + dnidt(6)*zz(i,6)
1368 + + dnidt(7)*zz(i,7) + dnidt(8)*zz(i,8)
1369 + + dnidt(9)*zz(i,9) + dnidt(10)*zz(i,10) + dnidt(11)*zz(i,11)
1370 + + dnidt(12)*zz(i,12) + dnidt(13)*zz(i,13) + dnidt(14)*zz(i,14)
1371 + + dnidt(15)*zz(i,15) + dnidt(16)*zz(i,16) + dnidt(17)*zz(i,17)
1372 + + dnidt(18)*zz(i,18) + dnidt(19)*zz(i,19) + dnidt(20)*zz(i,20)
1373
1374
1375
1376
1377 drdx(i)=dyds(i)*dzdt(i)-dzds(i)*dydt(i)
1378 drdy(i)=dzds(i)*dxdt(i)-dxds(i)*dzdt(i)
1379 drdz(i)=dxds(i)*dydt(i)-dyds(i)*dxdt(i)
1380
1381 dsdz(i)=dxdt(i)*dydr(i)-dydt(i)*dxdr(i)
1382 dsdy(i)=dzdt(i)*dxdr(i)-dxdt(i)*dzdr(i)
1383 dsdx(i)=dydt(i)*dzdr(i)-dzdt(i)*dydr(i)
1384
1385 dtdx(i)=dydr(i)*dzds(i)-dzdr(i)*dyds(i)
1386 dtdy(i)=dzdr(i)*dxds(i)-dxdr(i)*dzds(i)
1387 dtdz(i)=dxdr(i)*dyds(i)-dydr(i)*dxds(i)
1388
1389 det(i) = dxdr(i) * drdx(i)
1390 . + dydr(i) * drdy(i)
1391 . + dzdr(i) * drdz(i)
1392
1393
1394
1395
1396
1397
1398
1399 ENDDO
1400
1401 DO i=1,llt
1402
1403
1404
1405
1406 d = one/det(i)
1407 drdx(i)=d*drdx(i)
1408 dsdx(i)=d*dsdx(i)
1409 dtdx(i)=d*dtdx(i)
1410
1411 drdy(i)=d*drdy(i)
1412 dsdy(i)=d*dsdy(i)
1413 dtdy(i)=d*dtdy(i)
1414
1415 drdz(i)=d*drdz(i)
1416 dsdz(i)=d*dsdz(i)
1417 dtdz(i)=d*dtdz(i)
1418
1419
1420
1421
1422
1423
1424 ENDDO
1425
1426 RETURN