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
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1167
1168
1169
1170#include "implicit_f.inc"
1171
1172
1173
1174#include "param_c.inc"
1175#include "com04_c.inc"
1176
1177
1178
1179 CHARACTER(LEN = nchartitle), INTENT(IN) :: TITLE
1180 INTEGER, INTENT(IN) :: IVOLU(NIMV), ITAB(*),ITYPE, IXC(NIXC, NUMELC), IXTG(NIXTG, NUMELTG)
1182 TYPE(SURF_), INTENT(INOUT) :: SURF
1183 TYPE(MONVOL_STRUCT_), INTENT(INOUT) :: T_MONVOLN
1184
1185
1186
1187 INTEGER NSEG,ISH34,JJ,II(4),KK, IELEM_ADJ,IDX,IDX_A,IDX_B,IPAIR,NPAIR,LL
1188 INTEGER IDX1,IDX2
1189 INTEGER NEDG, SUM_ADJ
1190
1191 INTEGER, ALLOCATABLE,DIMENSION(:) :: PATHS, SIZES, CHECK_FLAG_ELEM, NB_ADJ,IAD_ADJ, LIST_ADJ_TAB
1192 INTEGER,ALLOCATABLE,DIMENSION(:) :: db_reversed, db_path
1193 INTEGER, DIMENSION(:), ALLOCATABLE :: PAIR_LIST, NB_PAIR_BY_EDGE
1194 INTEGER :: NB_NOEUD, NB_ARC, NB_COMP_CONNEXE, SUM_SIZES
1195 INTEGER(8) :: graph_ptr
1196 INTEGER :: IELEM,ICOMP, EDGES_A(5),EDGES_B(5), NB_REVERSED
1197 INTEGER :: NPT_A, NPT_B, IELEM1, IELEM2, ELTYP1, ELTYP2, NB_COMMON_NODE,
1198 . NODELIST1(4), NODELIST2(4), ELEM1ID, ELEM2ID, ELEMTG, ELEMC, IELEMTG, IELEMC
1199 LOGICAL :: lFOUND, lFOUND_ADJ
1200 INTEGER :: NB_DUPLICATED_ELTS
1201 INTEGER, DIMENSION(:), ALLOCATABLE :: DUPLICATED_ELTS
1202 CHARACTER(LEN=1024) :: FILENAME
1203 INTEGER(8) :: duplicate_ptr
1204 LOGICAL debug_output
1205 INTEGER :: NTRI, NB_CON
1206 INTEGER, DIMENSION(:), ALLOCATABLE :: IAD_COMP_CONNEX
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219 graph_ptr = 0
1220 nseg = surf%NSEG
1221 ntri = t_monvoln%NB_FILL_TRI
1222 t_monvoln%OK_REORIENT = .true.
1223
1224
1225
1226
1227
1228 IF (.NOT. t_monvoln%EDGES_BUILT) THEN
1230 ENDIF
1231 nedg = t_monvoln%NEDGE
1232
1233
1234
1235
1236
1237 nb_duplicated_elts = 0
1238 duplicate_ptr = 0
1239 CALL tab1_init(duplicate_ptr)
1240 DO jj = 1, nedg
1241 nb_con = t_monvoln%IAD_EDGE_ELEM(jj + 1) - t_monvoln%IAD_EDGE_ELEM(jj)
1242 IF (nb_con > 2) THEN
1243
1244 DO ielem1 = t_monvoln%IAD_EDGE_ELEM(jj), t_monvoln%IAD_EDGE_ELEM(jj + 1) - 1
1245 IF (t_monvoln%EDGE_ELEM(ielem1) /= 0) THEN
1246 DO ielem2 = t_monvoln%IAD_EDGE_ELEM(jj), t_monvoln%IAD_EDGE_ELEM(jj + 1) -1
1247 IF (ielem1 /= ielem2) THEN
1248 elem1id = t_monvoln%EDGE_ELEM(ielem1)
1249 elem2id = t_monvoln%EDGE_ELEM(ielem2)
1250 IF (elem1id * elem2id == 0) THEN
1251
1252
1253 cycle
1254 ENDIF
1255 eltyp1 = surf%ELTYP(elem1id)
1256 eltyp2 = surf%ELTYP(elem2id)
1257 IF (eltyp1 == eltyp2) THEN
1258 IF (eltyp1 == 7) THEN
1259
1260 nb_common_node = 0
1261 nodelist1(1:4) = (/0, ixtg(2:4,surf%ELEM(elem1id))/)
1262 nodelist2(1:4) = (/0, ixtg(2:4,surf%ELEM(elem2id))/)
1263 DO kk = 2, 4
1264 DO ll = 2, 4
1265 IF (nodelist1(kk) == nodelist2(ll)) THEN
1266 nb_common_node = nb_common_node + 1
1267 EXIT
1268 ENDIF
1269 ENDDO
1270 ENDDO
1271 IF (nb_common_node == 3) THEN
1272
1273 t_monvoln%EDGE_ELEM(ielem2) = 0
1274 nb_duplicated_elts = nb_duplicated_elts + 1
1275 CALL tab1_append(duplicate_ptr, elem1id)
1276 CALL tab1_append(duplicate_ptr, elem2id)
1277 ENDIF
1278 ENDIF
1279 ELSEIF (eltyp1 == 3) THEN
1280
1281 nb_common_node = 0
1282 nodelist1(1:4) = (/ixc(2:5,surf%ELEM(elem1id))/)
1283 nodelist2(1:4) = (/ixc(2:5,surf%ELEM(elem2id))/)
1284 DO kk = 1, 4
1285 DO ll = 1, 4
1286 IF (nodelist1(kk) == nodelist2(ll)) THEN
1287 nb_common_node = nb_common_node + 1
1288 EXIT
1289 ENDIF
1290 ENDDO
1291 ENDDO
1292 IF (nb_common_node == 4) THEN
1293
1294 t_monvoln%EDGE_ELEM(ielem2) = 0
1295 nb_duplicated_elts = nb_duplicated_elts + 1
1296 CALL tab1_append(duplicate_ptr, elem1id)
1297 CALL tab1_append(duplicate_ptr, elem2id)
1298 ENDIF
1299 ELSE
1300
1301 ielemtg = ielem2
1302 elemtg = elem2id
1303 ielemc = ielem1
1304 elemc = elem1id
1305 IF (eltyp1 == 7) THEN
1306 ielemtg = ielem1
1307 elemtg = elem1id
1308 ielemc = ielem2
1309 elemc = elem2id
1310 ENDIF
1311 nb_common_node = 0
1312 nodelist1(1:4) = (/0, ixtg(2:4,surf%ELEM(elemtg))/)
1313 nodelist2(1:4) = (/ixc(2:5,surf%ELEM(elemc))/)
1314 DO kk = 2, 4
1315 DO ll = 1, 4
1316 IF (nodelist1(kk) == nodelist2(ll)) THEN
1317 nb_common_node = nb_common_node + 1
1318 EXIT
1319 ENDIF
1320 ENDDO
1321 ENDDO
1322 IF (nb_common_node == 3) THEN
1323
1324 t_monvoln%EDGE_ELEM(ielemtg) = 0
1325 nb_duplicated_elts = nb_duplicated_elts + 1
1326 CALL tab1_append(duplicate_ptr, elemc)
1327 CALL tab1_append(duplicate_ptr, ielemtg)
1328 ENDIF
1329 ENDIF
1330 ENDIF
1331 ENDDO
1332 ENDIF
1333 ENDDO
1334 ENDIF
1335 ENDDO
1336
1337
1338
1339
1340
1341 ALLOCATE(nb_pair_by_edge(nedg))
1342 DO jj = 1, nedg
1343 nb_pair_by_edge(jj) = 0
1344 DO kk = t_monvoln%IAD_EDGE_ELEM(jj), t_monvoln%IAD_EDGE_ELEM(jj + 1) - 1
1345 IF (t_monvoln%EDGE_ELEM(kk) /= 0) THEN
1346 nb_pair_by_edge(jj) = nb_pair_by_edge(jj) + 1
1347 ENDIF
1348 ENDDO
1349 nb_pair_by_edge(jj) = (nb_pair_by_edge(jj) - 1) * nb_pair_by_edge(jj) / 2
1350 IF (nb_pair_by_edge(jj) > 1) THEN
1351 t_monvoln%OK_REORIENT = .false.
1352 ENDIF
1353 ENDDO
1354 npair = sum(nb_pair_by_edge)
1355 ALLOCATE(pair_list(2 * npair))
1356 ipair = 0
1357 DO jj = 1, nedg
1358 nb_con = t_monvoln%IAD_EDGE_ELEM(jj + 1) - t_monvoln%IAD_EDGE_ELEM(jj)
1359 DO kk = 1, nb_con
1360 DO ll = kk + 1, nb_con
1361 elem1id = t_monvoln%EDGE_ELEM(t_monvoln%IAD_EDGE_ELEM(jj) + kk - 1)
1362 elem2id = t_monvoln%EDGE_ELEM(t_monvoln%IAD_EDGE_ELEM(jj) + ll - 1)
1363 IF (elem1id .NE.0 .AND. elem2id .NE. 0) THEN
1364 pair_list(ipair + 1) = elem1id - 1
1365 pair_list(ipair + 2) = elem2id - 1
1366 ipair = ipair + 2
1367 ENDIF
1368 ENDDO
1369 ENDDO
1370 ENDDO
1371
1372
1373
1374
1375
1376
1377 nb_noeud=nseg+ntri
1378 nb_arc=npair
1379 nb_comp_connexe = 0
1380 CALL graph_build_path(nb_noeud, nb_arc, pair_list, nb_comp_connexe, graph_ptr)
1381
1382
1383
1384
1385
1386
1387 IF(.NOT.ALLOCATED(sizes))ALLOCATE(sizes(0:nb_comp_connexe))
1388 ALLOCATE(iad_comp_connex(nb_comp_connexe+1))
1389 CALL graph_get_sizes(graph_ptr, sizes(1))
1390 sum_sizes=sum(sizes(1:nb_comp_connexe),1)
1391 sizes(0)=0
1392 iad_comp_connex(1) = 1
1393 DO jj = 2, nb_comp_connexe + 1
1394 iad_comp_connex(jj) = iad_comp_connex(jj - 1) + sizes(jj - 1)
1395 ENDDO
1396 IF(.NOT.ALLOCATED(paths))ALLOCATE(paths(sum_sizes))
1397 CALL graph_get_path(graph_ptr, paths)
1398
1399
1400
1401
1402 debug_output=.false.
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464 IF(.NOT.ALLOCATED(nb_adj))ALLOCATE(nb_adj(nseg+ntri))
1465 IF(.NOT.ALLOCATED(iad_adj))ALLOCATE(iad_adj(nseg+ntri+1))
1466 CALL graph_get_nb_adj(graph_ptr, nb_adj)
1467 sum_adj=sum(nb_adj)
1468 iad_adj(1)=1
1469 DO kk=2,nseg+ntri+1
1470 iad_adj(kk)=iad_adj(kk-1)+nb_adj(kk-1)
1471 ENDDO
1472 IF(.NOT.ALLOCATED(list_adj_tab))ALLOCATE(list_adj_tab(sum_adj))
1473 CALL graph_get_adj(graph_ptr, list_adj_tab)
1474 DO kk=1,sum_adj
1475 list_adj_tab(kk)=list_adj_tab(kk)+1
1476 ENDDO
1477
1478
1479
1480
1481 debug_output=.false.
1482 if(debug_output)then
1483 nseg=surf%NSEG
1484 WRITE(filename, "(A,I0,A)") "surfmesh_before_",t_monvoln%ID,"_0000.rad"
1485 OPEN(unit = 210486, file = trim(filename), form ='formatted')
1486 WRITE(210486, '(A)') "#RADIOSS STARTER"
1487 WRITE(210486, '(A)') "/BEGIN"
1488 WRITE(210486, '(A)') "ORIENTED_SURFACE "
1489 WRITE(210486, '(A)') " 100 0"
1490 WRITE(210486, '(A)') " g mm ms"
1491 WRITE(210486, '(A)') " g mm ms"
1492 WRITE(210486, "(A5)") "/NODE"
1493 DO kk = 1, numnod
1494 WRITE(210486, "(I10, 1PG20.13, 1PG20.13, 1PG20.13)") itab(kk),x(1, kk), x(2, kk), x(3, kk)
1495 ENDDO
1496 DO kk = 1, nseg
1497 ii(1:4) = surf%NODES(kk,1:4)
1498 ish34 = surf%ELTYP(kk)
1499 IF (ish34 == 3) THEN
1500 WRITE(210486, "(A6)") "/SHELL"
1501 WRITE(210486, '(I10,I10,I10,I10,I10)') ixc(7,surf%ELEM(kk)), itab(ii(1)), itab(ii(2)),itab(ii(3)), itab(ii(4))
1502 ENDIF
1503 ENDDO
1504 DO kk = 1, nseg
1505 ii(1:4) = surf%NODES(kk,1:4)
1506 ish34 = surf%ELTYP(kk)
1507 IF (ish34 == 7) THEN
1508 WRITE(210486, "(A5)") "/SH3N"
1509 WRITE(210486, '(I10,I10,I10,I10)') ixtg(6,surf%ELEM(kk)), itab(ii(1)), itab(ii(2)),itab(ii(3))
1510 ENDIF
1511 ENDDO
1512 IF (t_monvoln%NB_FILL_TRI > 0) THEN
1513 WRITE(210486, "(A5)") "/SH3N"
1514 ENDIF
1515 DO kk = 1, t_monvoln%NB_FILL_TRI
1516 WRITE(210486, '(I10,I10,I10,I10)') kk + nseg, itab(t_monvoln%FILL_TRI(3 * (kk - 1) + 1)),
1517 . itab(t_monvoln%FILL_TRI(3 * (kk - 1) + 2)), itab(t_monvoln%FILL_TRI(3 * (kk - 1) + 3))
1518 ENDDO
1519 CLOSE (210486)
1520 endif
1521
1522
1523
1524
1525
1526 IF(.NOT.ALLOCATED(check_flag_elem))ALLOCATE(check_flag_elem(nseg+ntri))
1527 check_flag_elem(:)=0
1528
1529 IF (t_monvoln%OK_REORIENT) THEN
1530 DO icomp=1,nb_comp_connexe
1531
1532
1533 jj = 1 + paths(iad_comp_connex(icomp))
1534
1535 check_flag_elem(jj)=1
1536 nb_reversed = 0
1537
1538 DO ielem=iad_comp_connex(icomp) + 1, iad_comp_connex(icomp + 1) - 1
1539
1540
1541 jj=1+paths(ielem)
1542
1543 IF (jj <= nseg) THEN
1544 ii(1:4) = surf%NODES(jj,1:4)
1545 ish34 = surf%ELTYP(jj)
1546 IF(ish34==3.AND.ii(3)/=ii(4))THEN
1547 edges_a(1:5)=(/ ii(1:4), ii(1) /)
1548 npt_a=4
1549 ELSE
1550 edges_a(1:5)=(/ ii(1:3), ii(1), 0 /)
1551 npt_a=3
1552 ENDIF
1553 ELSE
1554 ii(1:3) = t_monvoln%FILL_TRI(3 * (jj - nseg - 1) + 1 : 3 * (jj - nseg - 1) + 3)
1555 ii(4) = ii(3)
1556 edges_a(1:5) = (/ ii(1:3), ii(1), 0 /)
1557 npt_a = 3
1558 ENDIF
1559
1560
1561
1562 idx1 = iad_adj(jj)
1563 idx2 = iad_adj(jj+1)-1
1564 lfound_adj = .false.
1565 DO kk=idx1,idx2
1566 ielem_adj = list_adj_tab(kk)
1567 IF(check_flag_elem(ielem_adj) /= 0 )THEN
1568 lfound_adj = .true.
1569 EXIT
1570 ENDIF
1571 ENDDO
1572 IF(.NOT. lfound_adj)THEN
1573 print *, "**error when forcing monvol surface orientation"
1575 return;
1576 ENDIF
1577 kk = ielem_adj
1578
1579
1580
1581 IF (kk <= nseg) THEN
1582 ii(1:4) = surf%NODES(kk,1:4)
1583 ish34 = surf%ELTYP(kk)
1584 IF(ish34==3.AND.ii(3)/=ii(4))THEN
1585 edges_b(1:5)=(/ ii(1:4), ii(1) /)
1586 npt_b=4
1587 ELSE
1588 edges_b(1:5)=(/ ii(1:3), ii(1), 0 /)
1589 npt_b=3
1590 ENDIF
1591 ELSE
1592 ii(1:3) = t_monvoln%FILL_TRI(3 * (kk - nseg - 1) + 1 : 3 * (kk - nseg - 1) + 3)
1593 ii(4) = ii(3)
1594 edges_b(1:5) = (/ ii(1:3), ii(1), 0 /)
1595 npt_b = 3
1596 ENDIF
1597
1598
1599 lfound = .false.
1600 DO idx_a=1,npt_a
1601 DO idx_b=1,npt_b
1602 IF(edges_b(idx_b)==edges_a(idx_a))THEN
1603 IF(edges_b(idx_b+1)==edges_a(idx_a+1))THEN
1604 lfound = .true.
1605 EXIT
1606 ENDIF
1607 ENDIF
1608 ENDDO
1609 IF(lfound)EXIT
1610 ENDDO
1611
1612
1613 IF(lfound)THEN
1614 IF (jj <= nseg) THEN
1615 ii(1:4) = surf%NODES(jj,1:4)
1616 IF(npt_a == 4)THEN
1617 surf%NODES(jj,1:4)=(/ ii(1), ii(4), ii(3), ii(2) /)
1618 ELSE
1619 surf%NODES(jj,1:4)=(/ ii(2), ii(1), ii(3), ii(4) /)
1620 ENDIF
1621 ELSE
1622 ii(1:3) = t_monvoln%FILL_TRI(3 * (jj - nseg - 1) + 1 : 3 * (jj - nseg - 1) + 3)
1623 ii(4) = ii(3)
1624 t_monvoln%FILL_TRI(3 * (jj - nseg - 1) + 1 : 3 * (jj - nseg - 1) + 3) = (/ ii(2), ii(1), ii(3) /)
1625 ENDIF
1626
1627 nb_reversed = nb_reversed + 1
1628 check_flag_elem(jj)=-1
1629 ENDIF
1630
1631
1632 check_flag_elem(jj)=1
1633 IF(lfound)check_flag_elem(jj)=-1
1634
1635 ENDDO
1636 ENDDO
1637 ELSE
1638 CALL ancmsg(msgid = 1882, anmode = aninfo, msgtype = msgwarning,
1639 . i1 = t_monvoln%ID, c1 = t_monvoln%TITLE)
1640 ENDIF
1641
1642
1643
1644
1645 ALLOCATE(duplicated_elts(nb_duplicated_elts * 2))
1646 CALL tab1_get(duplicate_ptr, duplicated_elts)
1647 DO jj = 1, nb_duplicated_elts
1648 elem1id = surf%ELEM(duplicated_elts(2 * (jj - 1) + 1))
1649 elem2id = surf%ELEM(duplicated_elts(2 * (jj - 1) + 2))
1650
1651 eltyp1 = surf%ELTYP(duplicated_elts(2 * (jj - 1) + 1))
1652 eltyp2 = surf%ELTYP(duplicated_elts(2 * (jj - 1) + 2))
1653 IF (eltyp1 == eltyp2) THEN
1654 ii(1:4) = surf%NODES(elem1id, 1:4)
1655 IF (eltyp1 == 7) THEN
1656
1657 surf%NODES(elem2id, 1:4) = (/ ii(2), ii(1), ii(3), ii(4) /)
1658 ELSE
1659
1660 surf%NODES(elem2id, 1:4) = (/ ii(1), ii(4), ii(3), ii(2) /)
1661 ENDIF
1662 ELSE
1663
1664 ii(1:4) = surf%NODES(elem2id,1:4)
1665 edges_a(1:5) = (/ ii(1:3), ii(1), 0 /)
1666 npt_a = 3
1667 ii(1:4) = surf%NODES(elem1id,1:4)
1668 edges_b(1:5) = (/ ii(1:4), ii(1) /)
1669 npt_b = 4
1670
1671 lfound = .false.
1672 DO idx_a=1,npt_a
1673 DO idx_b=1,npt_b
1674 IF(edges_b(idx_b)==edges_a(idx_a))THEN
1675 IF(edges_b(idx_b+1)==edges_a(idx_a+1))THEN
1676 lfound = .true.
1677 EXIT
1678 ENDIF
1679 ENDIF
1680 ENDDO
1681 IF(lfound)EXIT
1682 ENDDO
1683 IF(lfound)THEN
1684 ii(1:4) = surf%NODES(elem2id, 1:4)
1685 IF(npt_a == 4)THEN
1686 surf%NODES(elem2id,1:4)=(/ ii(1), ii(4), ii(3), ii(2) /)
1687 ELSE
1688 surf%NODES(elem2id,1:4)=(/ ii(2), ii(1), ii(3), ii(4) /)
1689 ENDIF
1690 ENDIF
1691 ENDIF
1692 ENDDO
1693 CALL tab1_free_memory(duplicate_ptr)
1694
1695
1696
1697
1698
1699 debug_output=.false.
1700 if(debug_output)then
1701 icomp=1
1702 ALLOCATE(db_path(sizes(icomp)))
1703 do ielem=1,sizes(icomp)
1704 jj=1+paths(ielem)
1705 ii(1:4) = surf%NODES(jj,1:4)
1706 ish34 = surf%ELTYP(jj)
1707 IF(ish34==3.AND.ii(3)/=ii(4))THEN
1708 db_path(jj) = ixc(7,surf%ELEM((jj)))
1709 else
1710 db_path(jj) = ixtg(6,surf%ELEM((jj)))
1711 endif
1712 enddo
1713 print *,"____________________________________________________"
1714 print *, "there are ",sizes(icomp)," elements along the path"
1715 print *, db_path(1:sizes(icomp))
1716 print *,"____________________________________________________"
1717 deallocate(db_path)
1718 endif
1719
1720 debug_output=.false.
1721 if(debug_output)then
1722
1723 idx=0
1724 ALLOCATE(db_reversed(sizes(icomp)))
1725 do ielem=1,sizes(icomp)
1726 jj=1+paths(ielem)
1727 ii(1:4) = surf%NODES(jj,1:4)
1728 ish34 = surf%ELTYP(jj)
1729 IF(check_flag_elem(jj)==-1)THEN
1730 idx=idx+1
1731 IF(ish34==3.AND.ii(3)/=ii(4))THEN
1732 db_reversed(idx) = ixc(7,surf%ELEM((jj)))
1733 else
1734 db_reversed(idx) = ixtg(6,surf%ELEM((jj)))
1735 endif
1736 ENDIF
1737 enddo
1738 print *, "there were ",nb_reversed," element(s) reversed along the path"
1739 print *, db_reversed(1:nb_reversed)
1740 print *,"____________________________________________________"
1741 DEALLOCATE(db_reversed)
1742 endif
1743
1744
1745
1746
1747 IF(ALLOCATED(nb_adj))DEALLOCATE(nb_adj)
1748 IF(ALLOCATED(iad_adj))DEALLOCATE(iad_adj)
1749 IF(ALLOCATED(check_flag_elem))DEALLOCATE(check_flag_elem)
1750 IF(ALLOCATED(list_adj_tab))DEALLOCATE(list_adj_tab)
1751 IF(ALLOCATED(paths))DEALLOCATE(paths)
1752 IF(ALLOCATED(sizes))DEALLOCATE(sizes)
1753 IF(ALLOCATED(duplicated_elts)) DEALLOCATE(duplicated_elts)
1754 IF(ALLOCATED(pair_list)) DEALLOCATE(pair_list)
1755 IF(ALLOCATED(nb_pair_by_edge)) DEALLOCATE(nb_pair_by_edge)
1756 IF (ALLOCATED(iad_comp_connex)) DEALLOCATE(iad_comp_connex)
1757 CALL graph_free_memory(graph_ptr)
1758
1759
subroutine monvol_build_edges(t_monvoln, surf)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)