You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
385 lines
13 KiB
385 lines
13 KiB
2 years ago
|
program test
|
||
|
|
||
|
logical ldum, pltgtt, pltstt, pltstv
|
||
|
character*5 oldnod, newnod
|
||
|
|
||
|
call pltint
|
||
|
call pltbgn
|
||
|
|
||
|
penlin = 160.0 !normal line width
|
||
|
ldum = pltstv (2, penlin) !normal line width
|
||
|
ldum = pltgtt (11, pentxt) !normal pen width
|
||
|
ldum = pltgtt (2, x) !character size
|
||
|
vcs = .75*x
|
||
|
ldum = pltstt (2, vcs) !character size
|
||
|
|
||
|
oldnod = '\CDO '
|
||
|
newnod = '\CCI '
|
||
|
xnode = .003
|
||
|
ynode = -(vcs+.003)
|
||
|
xelem = 0.0
|
||
|
yelem = -vcs
|
||
|
|
||
|
rng2d = .160
|
||
|
rng3d = rng2d * (8./7.)
|
||
|
xsft3d = rng3d/6
|
||
|
ysft3d = rng3d/8
|
||
|
|
||
|
r3d = rng3d + xsft3d + xnode+2*vcs*(5./7.)
|
||
|
xbord = (1.0 - 2 * (rng2d + r3d)) / 3.6
|
||
|
xcen2d = xbord + rng2d
|
||
|
xcen3d = 1.0 - (xbord + r3d)
|
||
|
ybord = xbord
|
||
|
ycen3d = .75/2
|
||
|
ycen2d = ycen3d + 2*ysft3d
|
||
|
|
||
|
yfig = 0.0 + ybord
|
||
|
ytitl = .75 - ybord - 1.25*vcs
|
||
|
|
||
|
d call pltvct (1, 0.0, 0.0, 1.0, 0.0)
|
||
|
d call pltvct (1, 1.0, 0.0, 1.0, .75)
|
||
|
d call pltvct (1, 1.0, .75, 0.0, .75)
|
||
|
d call pltvct (1, 0.0, .75, 0.0, 0.0)
|
||
|
|
||
|
C *** 2D 8-node element
|
||
|
|
||
|
xl = xcen2d - rng2d
|
||
|
xh = xcen2d + rng2d
|
||
|
yl = ycen2d - rng2d
|
||
|
yh = ycen2d + rng2d
|
||
|
xm = (xl+xh) / 2
|
||
|
ym = (yl+yh) / 2
|
||
|
|
||
|
C --Plot legend
|
||
|
|
||
|
ldum = pltgtt (6, splin) !line spacing
|
||
|
ymid = (yl - vcs) / 2 + (yfig + 1.25*vcs) / 2
|
||
|
y = ymid + (3*vcs*splin) / 2
|
||
|
call pltxsl ('= Original element', xlen)
|
||
|
xlins = xcen2d - (xlen + 6.0*vcs) / 2
|
||
|
xleg = xlins + 6.0*vcs
|
||
|
xline = xleg - 1.0*vcs
|
||
|
xch = xleg - 1.5*vcs
|
||
|
call option ('old spots', .true., vcs, penlin, pentxt)
|
||
|
call pltxtc (xch, y, '\DO ')
|
||
|
call option ('old spots', .false., vcs, penlin, pentxt)
|
||
|
call pltxts (xleg, y, '= Original node')
|
||
|
call pltxsn (x, y)
|
||
|
call option ('new spots', .true., vcs, penlin, pentxt)
|
||
|
call pltxtc (xch, y, '\CI ')
|
||
|
call option ('new spots', .false., vcs, penlin, pentxt)
|
||
|
call pltxts (xleg, y, '= Generated node')
|
||
|
call pltxsn (x, y)
|
||
|
call option ('old lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xlins, y+vcs/2, xline, y+vcs/2)
|
||
|
call option ('old lines', .false., vcs, penlin, pentxt)
|
||
|
call pltxts (xleg, y, '= Original element')
|
||
|
call pltxsn (x, y)
|
||
|
call option ('new lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xlins, y+vcs/2, xline, y+vcs/2)
|
||
|
call option ('new lines', .false., vcs, penlin, pentxt)
|
||
|
call pltxts (xleg, y, '= New element')
|
||
|
|
||
|
C --Label plot
|
||
|
|
||
|
ldum = pltstt (2, 1.25*vcs) !big letters
|
||
|
call pltxtc (xcen2d, yfig, 'Figure 1a. 2D Transformation')
|
||
|
|
||
|
call pltxtc (xcen2d, ytitl, '8-Node 2D Element =>')
|
||
|
call pltxsn (x, y)
|
||
|
call pltxtc (xcen2d, y, 'Four 4-Node Elements')
|
||
|
ldum = pltstt (2, 1.00*vcs) !normal letters
|
||
|
|
||
|
C --Draw original element
|
||
|
|
||
|
call option ('old lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xl, yl, xh, yl)
|
||
|
call pltvct (1, xh, yl, xh, yh)
|
||
|
call pltvct (1, xh, yh, xl, yh)
|
||
|
call pltvct (1, xl, yh, xl, yl)
|
||
|
call option ('old lines', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Number original nodes
|
||
|
|
||
|
call option ('old nodes', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xl+xnode, yl+ynode, '1')
|
||
|
call pltxts (xh+xnode, yl+ynode, '2')
|
||
|
call pltxts (xh+xnode, yh+ynode, '3')
|
||
|
call pltxts (xl+xnode, yh+ynode, '4')
|
||
|
call pltxts (xm+xnode, yl+ynode, '5')
|
||
|
call pltxts (xh+xnode, ym+ynode, '6')
|
||
|
call pltxts (xm+xnode, yh+ynode, '7')
|
||
|
call pltxts (xl+xnode, ym+ynode, '8')
|
||
|
call option ('old nodes', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
call option ('old spots', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xl, yl, oldnod)
|
||
|
call pltxts (xh, yl, oldnod)
|
||
|
call pltxts (xh, yh, oldnod)
|
||
|
call pltxts (xl, yh, oldnod)
|
||
|
call pltxts (xm, yl, oldnod)
|
||
|
call pltxts (xh, ym, oldnod)
|
||
|
call pltxts (xm, yh, oldnod)
|
||
|
call pltxts (xl, ym, oldnod)
|
||
|
call option ('old spots', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Draw new element
|
||
|
|
||
|
call option ('new lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xl, ym, xh, ym)
|
||
|
call pltvct (1, xm, yl, xm, yh)
|
||
|
call option ('new lines', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Number new nodes
|
||
|
|
||
|
call option ('new nodes', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xm+xnode, ym+ynode, '9')
|
||
|
call option ('new nodes', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
call option ('new spots', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xm, ym, newnod)
|
||
|
call option ('new spots', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Number new elements
|
||
|
|
||
|
call option ('elements', .true., vcs, penlin, pentxt)
|
||
|
xlm = (xl+xm) / 2
|
||
|
xhm = (xh+xm) / 2
|
||
|
ylm = (yl+ym) / 2
|
||
|
yhm = (yh+ym) / 2
|
||
|
call pltxtc (xlm+xelem, ylm+yelem, '1')
|
||
|
call pltxtc (xhm+xelem, ylm+yelem, '2')
|
||
|
call pltxtc (xhm+xelem, yhm+yelem, '3')
|
||
|
call pltxtc (xlm+xelem, yhm+yelem, '4')
|
||
|
call option ('elements', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C *** 3D 8-node element
|
||
|
|
||
|
xl0 = xcen3d - rng3d
|
||
|
xh0 = xcen3d + rng3d
|
||
|
yl0 = ycen3d - rng3d
|
||
|
yh0 = ycen3d + rng3d
|
||
|
xl1 = xl0 - xsft3d
|
||
|
xh1 = xh0 - xsft3d
|
||
|
yl1 = yl0 - ysft3d
|
||
|
yh1 = yh0 - ysft3d
|
||
|
xl2 = xl0 + xsft3d
|
||
|
xh2 = xh0 + xsft3d
|
||
|
yl2 = yl0 + ysft3d
|
||
|
yh2 = yh0 + ysft3d
|
||
|
xm1 = (xl1+xh1) / 2
|
||
|
ym1 = (yl1+yh1) / 2
|
||
|
xm2 = (xl2+xh2) / 2
|
||
|
ym2 = (yl2+yh2) / 2
|
||
|
xm0 = (xl0+xh0) / 2
|
||
|
ym0 = (yl0+yh0) / 2
|
||
|
|
||
|
C --Label plot
|
||
|
|
||
|
ldum = pltstt (2, 1.25*vcs) !big letters
|
||
|
call pltxtc (xcen3d, yfig, 'Figure 1b. 3D Transformation')
|
||
|
|
||
|
call pltxtc (xcen3d, ytitl, '20-Node 3D Element =>')
|
||
|
call pltxsn (x, y)
|
||
|
call pltxtc (xcen3d, y, 'Eight 8-Node Elements')
|
||
|
ldum = pltstt (2, 1.00*vcs) !normal letters
|
||
|
|
||
|
C --Draw original element
|
||
|
|
||
|
call option ('old lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xl1, yl1, xh1, yl1)
|
||
|
call pltvct (1, xh1, yl1, xh1, yh1)
|
||
|
call pltvct (1, xh1, yh1, xl1, yh1)
|
||
|
call pltvct (1, xl1, yh1, xl1, yl1)
|
||
|
call pltvct (1, xh2, yl2, xh2, yh2)
|
||
|
call pltvct (1, xh2, yh2, xl2, yh2)
|
||
|
call pltvct (1, xh1, yl1, xh2, yl2)
|
||
|
call pltvct (1, xh1, yh1, xh2, yh2)
|
||
|
call pltvct (1, xl1, yh1, xl2, yh2)
|
||
|
call option ('old lines', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
call option ('hidden lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xl2, yl2, xh2, yl2)
|
||
|
call pltvct (1, xl2, yh2, xl2, yl2)
|
||
|
call pltvct (1, xl1, yl1, xl2, yl2)
|
||
|
call option ('hidden lines', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Number original nodes
|
||
|
|
||
|
call option ('old nodes', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xl1+xnode, yl1+ynode, '1')
|
||
|
call pltxts (xh1+xnode, yl1+ynode, '2')
|
||
|
call pltxts (xh1+xnode, yh1+ynode, '6')
|
||
|
call pltxts (xl1+xnode, yh1+ynode, '5')
|
||
|
call pltxts (xl2+xnode, yl2+ynode, '4')
|
||
|
call pltxts (xh2+xnode, yl2+ynode, '3')
|
||
|
call pltxts (xh2+xnode, yh2+ynode, '7')
|
||
|
call pltxts (xl2+xnode, yh2+ynode, '8')
|
||
|
call pltxts (xm1+xnode, yl1+ynode, '9')
|
||
|
call pltxts (xh1+xnode, ym1+ynode, '18')
|
||
|
call pltxts (xm1+xnode, yh1+ynode, '13')
|
||
|
call pltxts (xl1+xnode, ym1+ynode, '17')
|
||
|
call pltxts (xm2+xnode, yl2+ynode, '11')
|
||
|
call pltxts (xh2+xnode, ym2+ynode, '19')
|
||
|
call pltxts (xm2+xnode, yh2+ynode, '15')
|
||
|
call pltxts (xl2+xnode, ym2+ynode, '20')
|
||
|
call pltxts (xl0+xnode, yl0+ynode, '12')
|
||
|
call pltxts (xh0+xnode, yl0+ynode, '10')
|
||
|
call pltxts (xh0+xnode, yh0+ynode, '14')
|
||
|
call pltxts (xl0+xnode, yh0+ynode, '16')
|
||
|
call option ('old nodes', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
call option ('old spots', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xl1, yl1, oldnod)
|
||
|
call pltxts (xh1, yl1, oldnod)
|
||
|
call pltxts (xh1, yh1, oldnod)
|
||
|
call pltxts (xl1, yh1, oldnod)
|
||
|
call pltxts (xl2, yl2, oldnod)
|
||
|
call pltxts (xh2, yl2, oldnod)
|
||
|
call pltxts (xh2, yh2, oldnod)
|
||
|
call pltxts (xl2, yh2, oldnod)
|
||
|
call pltxts (xm1, yl1, oldnod)
|
||
|
call pltxts (xh1, ym1, oldnod)
|
||
|
call pltxts (xm1, yh1, oldnod)
|
||
|
call pltxts (xl1, ym1, oldnod)
|
||
|
call pltxts (xm2, yl2, oldnod)
|
||
|
call pltxts (xh2, ym2, oldnod)
|
||
|
call pltxts (xm2, yh2, oldnod)
|
||
|
call pltxts (xl2, ym2, oldnod)
|
||
|
call pltxts (xl0, yl0, oldnod)
|
||
|
call pltxts (xh0, yl0, oldnod)
|
||
|
call pltxts (xh0, yh0, oldnod)
|
||
|
call pltxts (xl0, yh0, oldnod)
|
||
|
call option ('old spots', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Draw new element
|
||
|
|
||
|
call option ('new lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xh0, yl0, xh0, yh0)
|
||
|
call pltvct (1, xh0, yh0, xl0, yh0)
|
||
|
call pltvct (1, xl1, ym1, xh1, ym1)
|
||
|
call pltvct (1, xm1, yl1, xm1, yh1)
|
||
|
call pltvct (1, xh1, ym1, xh2, ym2)
|
||
|
call pltvct (1, xm1, yh1, xm2, yh2)
|
||
|
call option ('new lines', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
call option ('new hidden lines', .true., vcs, penlin, pentxt)
|
||
|
call pltvct (1, xl0, yl0, xh0, yl0)
|
||
|
call pltvct (1, xl0, yh0, xl0, yl0)
|
||
|
call pltvct (1, xl2, ym2, xh2, ym2)
|
||
|
call pltvct (1, xm2, yl2, xm2, yh2)
|
||
|
call pltvct (1, xl0, ym0, xh0, ym0)
|
||
|
call pltvct (1, xm0, yl0, xm0, yh0)
|
||
|
call pltvct (1, xm1, yl1, xm2, yl2)
|
||
|
call pltvct (1, xl1, ym1, xl2, ym2)
|
||
|
call pltvct (1, xm1, ym1, xm2, ym2)
|
||
|
call option ('new hidden lines', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Number new nodes
|
||
|
|
||
|
call option ('new nodes', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xm1+xnode, ym1+ynode, '22')
|
||
|
call pltxts (xm2+xnode, ym2+ynode, '24')
|
||
|
call pltxts (xm0+xnode, ym0+ynode, '27')
|
||
|
call pltxts (xm0+xnode, yl0+ynode, '26')
|
||
|
call pltxts (xh0+xnode, ym0+ynode, '23')
|
||
|
call pltxts (xm0+xnode, yh0+ynode, '25')
|
||
|
call pltxts (xl0+xnode, ym0+ynode, '21')
|
||
|
call option ('new nodes', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
call option ('new spots', .true., vcs, penlin, pentxt)
|
||
|
call pltxts (xm1, ym1, newnod)
|
||
|
call pltxts (xm2, ym2, newnod)
|
||
|
call pltxts (xm0, ym0, newnod)
|
||
|
call pltxts (xm0, yl0, newnod)
|
||
|
call pltxts (xh0, ym0, newnod)
|
||
|
call pltxts (xm0, yh0, newnod)
|
||
|
call pltxts (xl0, ym0, newnod)
|
||
|
call option ('new spots', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
C --Number new elements
|
||
|
|
||
|
call option ('elements', .true., vcs, penlin, pentxt)
|
||
|
x0 = (xl0-xl1) / 2
|
||
|
y0 = (yl0-yl1) / 2
|
||
|
xlm1 = (xl1+xm1) / 2 + x0
|
||
|
xhm1 = (xh1+xm1) / 2 + x0
|
||
|
ylm1 = (yl1+ym1) / 2 + y0
|
||
|
yhm1 = (yh1+ym1) / 2 + y0
|
||
|
xlm2 = (xl2+xm2) / 2 - x0
|
||
|
xhm2 = (xh2+xm2) / 2 - x0
|
||
|
ylm2 = (yl2+ym2) / 2 - y0
|
||
|
yhm2 = (yh2+ym2) / 2 - y0
|
||
|
call pltxtc (xlm1+xelem, ylm1+yelem, '1')
|
||
|
call pltxtc (xhm1+xelem, ylm1+yelem, '2')
|
||
|
call pltxtc (xhm1+xelem, yhm1+yelem, '6')
|
||
|
call pltxtc (xlm1+xelem, yhm1+yelem, '5')
|
||
|
call pltxtc (xlm2+xelem, ylm2+yelem, '4')
|
||
|
call pltxtc (xhm2+xelem, ylm2+yelem, '3')
|
||
|
call pltxtc (xhm2+xelem, yhm2+yelem, '7')
|
||
|
call pltxtc (xlm2+xelem, yhm2+yelem, '8')
|
||
|
call option ('elements', .false., vcs, penlin, pentxt)
|
||
|
|
||
|
call pltend
|
||
|
end
|
||
|
|
||
|
subroutine option (what, ison, vcs, penlin, pentxt)
|
||
|
|
||
|
character*(*) what
|
||
|
logical ison
|
||
|
|
||
|
logical ldum, pltgtt, pltstt, pltstv, pltstd
|
||
|
|
||
|
call pltflu
|
||
|
|
||
|
if (ison) then
|
||
|
if (what .eq. 'old lines') then
|
||
|
call pltstd (1, 7.0)
|
||
|
|
||
|
else if (what .eq. 'hidden lines') then
|
||
|
call pltstd (1, 3.0)
|
||
|
ldum = pltstv (2, .5*penlin) !thin line
|
||
|
|
||
|
else if (what .eq. 'new lines') then
|
||
|
call pltstd (1, 1.0)
|
||
|
ldum = pltstv (1, 4.0) !short dash line
|
||
|
|
||
|
else if (what .eq. 'new hidden lines') then
|
||
|
call pltstd (1, 3.0)
|
||
|
ldum = pltstv (1, 4.0) !short dash line
|
||
|
ldum = pltstv (2, .5*penlin) !thin line
|
||
|
|
||
|
else if (what .eq. 'old nodes') then
|
||
|
call pltstd (1, 7.0)
|
||
|
|
||
|
else if (what .eq. 'old spots') then
|
||
|
call pltstd (1, 7.0)
|
||
|
ldum = pltstt (2, 1.5*vcs) !big letters
|
||
|
|
||
|
else if (what .eq. 'new nodes') then
|
||
|
call pltstd (1, 1.0)
|
||
|
|
||
|
else if (what .eq. 'new spots') then
|
||
|
call pltstd (1, 1.0)
|
||
|
ldum = pltstt (2, 0.75*vcs) !small letters
|
||
|
|
||
|
else if (what .eq. 'elements') then
|
||
|
call pltstd (1, 1.0)
|
||
|
ldum = pltstt (2, 2*vcs) !big letters
|
||
|
|
||
|
else
|
||
|
call pltflu
|
||
|
print *, 'unknown option ', what
|
||
|
end if
|
||
|
|
||
|
else
|
||
|
call pltstd (1, 7.0)
|
||
|
ldum = pltstt (2, vcs) !normal letters
|
||
|
ldum = pltstv (1, 1.0) !solid line
|
||
|
ldum = pltstv (2, penlin) !normal line
|
||
|
ldum = pltstt (11, pentxt) !normal pen
|
||
|
end if
|
||
|
|
||
|
return
|
||
|
end
|