home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / GRAPHICS / PLOT / SURFUTI3.ZIP / FEM2SURF.BAS < prev    next >
Encoding:
BASIC Source File  |  1986-12-07  |  3.4 KB  |  106 lines

  1. 10 ' ***************************************
  2. 20 ' ************ READFEM ******************
  3. 30 ' ***************************************
  4. 40 ' Read Finite Element output data and convert to format for SURFMODL.
  5. 50 ' Copyright 1986 by Kenneth Van Camp
  6. 60 '
  7. 80 DEFINT I-N
  8. 100 MXNODE=1000: MXSURF=500: MXELEM=1000: NN=8: NC=4
  9. 120 DIM XYZ(MXNODE,3), IELEM(MXELEM,NN), NFLAG(MXNODE), N(MXSURF,NC), ISURF(6,4)
  10. 140 'INITIALIZATION
  11. 150 FOR I=1 TO 6
  12. 160   FOR J=1 TO 4
  13. 170     READ ISURF(I,J)
  14. 180   NEXT J
  15. 190 NEXT I
  16. 200 ' DATA FOR SURFACES ON EACH ELEMENT
  17. 210 DATA 1,2,3,4,    8,7,6,5,    2,6,7,3,    3,7,8,4,  4,8,5,1,  1,5,6,2
  18. 220 '
  19. 230 INPUT "Enter file name for FEM data"; IFILE$
  20. 240 'Convert first char to upper case
  21. 250 OPEN "I", #1, IFILE$
  22. 260 '
  23. 270 ' Read the finite element data
  24. 280 '
  25. 290 INPUT #1, NNODE, NELEM
  26. 300 FOR I=1 TO NNODE
  27. 310   INPUT #1, XYZ(I,1), XYZ(I,2), XYZ(I,3)
  28. 320 NEXT I
  29. 330 FOR I=1 TO NELEM
  30. 340   INPUT #1, IELEM(I,1), IELEM(I,2), IELEM(I,3), IELEM(I,4), IELEM(I,5), IELEM(I,6), IELEM(I,7), IELEM(I,8)
  31. 350 NEXT I
  32. 360 CLOSE #1
  33. 370 '
  34. 380 PRINT "Data for";NNODE;"nodes and";NELEM;"elements read."
  35. 390 INPUT "Do you wish to make a slice thru the solid [Y or N]"; A$
  36. 400 IF A$="N" OR A$="n" THEN 540
  37. 410   INPUT "Enter 1, 2 or 3 to cut X, Y or Z plane respectively"; IPLANE
  38. 420   IF IPLANE<0 OR IPLANE>3 THEN 390
  39. 430   INPUT "Cutoff value"; CUTOFF
  40. 440   INPUT "Enter 1 to keep nodes > cutoff or -1 to keep nodes < cutoff"; IORIENT
  41. 450   IF IORIENT<>1 AND IORIENT<>-1 THEN 440
  42. 460   FOR I=1 TO NNODE
  43. 470     IF IORIENT < 0 THEN 500
  44. 480       IF XYZ(I,IPLANE) >= CUTOFF THEN COUNT(I)=0 ELSE COUNT(I)=8
  45. 490       GOTO 520
  46. 500 '   Else
  47. 510       IF XYZ(I,IPLANE) <= CUTOFF THEN COUNT(I)=0 ELSE COUNT(I)=8
  48. 520 '   Endif
  49. 530   NEXT I
  50. 540 'Endif
  51. 550 PRINT "Finding surface nodes ..."
  52. 560 '
  53. 570 'Count the #elements that share each node. If a node is shared by 8
  54. 580 '  or more elements, it is assumed to be an interior node. If it is
  55. 590 '  shared by fewer than 8 elements, it is assumed to be exterior.
  56. 600 '  An exterior surface is one that has all four of its corner nodes
  57. 610 '  on the exterior.
  58. 620 '
  59. 630 FOR I=1 TO NELEM
  60. 640   FOR J=1 TO 8
  61. 650 '    Warning: Degenerate elements will cause a node to be incorrectly
  62. 660 '      considered an interior node!
  63. 670      COUNT(IELEM(I,J)) = COUNT(IELEM(I,J)) + 1
  64. 680   NEXT J
  65. 690 NEXT I
  66. 700 '
  67. 710 PRINT "Finding exterior surfaces ..."
  68. 720 NSURF=0
  69. 730 FOR I=1 TO NELEM
  70. 740   FOR J=1 TO 6
  71. 750     FOR K=1 TO 4
  72. 760       IF COUNT(IELEM(I,ISURF(J,K))) > 7 THEN 830
  73. 770     NEXT K
  74. 780 '   This is an exterior surface
  75. 790     NSURF = NSURF + 1
  76. 800     FOR K=1 TO 4
  77. 810       N(NSURF,K) = ISURF(J,K)
  78. 820     NEXT K
  79. 830   NEXT J
  80. 840 NEXT I
  81. 850 '
  82. 860 'Count the surface nodes
  83. 870 '
  84. 880 NSNODE=0
  85. 890 FOR I=1 TO NNODE
  86. 900   IF COUNT(I) < 8 THEN NSNODE = NSNODE + 1
  87. 910 NEXT I
  88. 920 INPUT "Enter file name for SURFMODL data"; OFILE$
  89. 930 INPUT "Enter title for plot";TITL$
  90. 940 OPEN "O", #1, OFILE$
  91. 950 PRINT#1, TITL$
  92. 955 PRINT #1,4
  93. 960 PRINT #1,1;NSNODE;NSURF;4;1
  94. 970 PRINT #1, 1;0;0;3;.1
  95. 980 FOR I=1 TO NNODE
  96. 990   IF COUNT(I) < 8 THEN PRINT #1, XYZ(I,1); XYZ(I,2); XYZ(I,3)
  97. 1000 NEXT I
  98. 1020 FOR I=1 TO NSURF
  99. 1030   PRINT #1, 4; 1; N(I,1); N(I,2); N(I,3); N(I,4)
  100. 1040 NEXT I
  101. 1060 CLOSE #1
  102. 1065 PRINT "FINISHED CREATING ";OFILE$
  103. 1070 END
  104.  PRINT #1, 4; 1; N(I,1); N(I,2); N(I,3); N(I,4)
  105. 1040 NEXT I
  106. 1060 CLOSE #1