#$b001
TEXT(TRANSFER_BETWEEN_TWO_SHAPES : B539
TITLE
display
This Q1 demonstrates the use of the "Transfer" feature of
the GSET command. This feature is used for creating smooth
transitions between regions of different shape.
In this example it is used to create a circle-to-square
transition.
The commands for creating the circle and the square are the
same as in case 538. They will therefore not be dwelt on at
length.
Set the grid type to BFC by the command:
CT1=BFC=T
#$b002
Please enter circle radius (default 1.m):
REAL(RADIUS,ROOT,SIDE)
READVDU(radius,real,1.0)
Enter length of square side (default 0.5m)
READVDU(side,real,0.5)
INTEGER(NAB,NBC)
root=0.707*radius
The input data to be used in this example are therefore:
MESG( radius=:radius:
MESG( root =:root:
MESG( side =:side:
where root is defined as 0.707*radius
-- Create a circle --
Define points A,B,C and D by the following command:
Point A positioned at (0,-root,root)
GSET(P,A,0,-root,root)
GSET(P,A,0,-root,root)
Point B positioned at (0,root,root)
GSET(P,B,0,root,root)
GSET(P,B,0,root,root)
GSET(P,C,0,root,-root)
Point C positioned at (0,root,-root)
GSET(P,C,0,root,-root)
Point D positioned at (0,-root,-root)
CT1=GSET(P,D,0,-root,-root)
#$b003
*
Draw four arc lines (AB,BC,CD,DA) from A to D
to create a circle.
Lines AB&CD must have equal number of cells, as
well as lines BC&DA. Power is set to 1.0, ie. cells
are uniformly distributed.
Enter number of cells for AB(&CD) lines (default 10)
readvdu(nab,int,10)
Arc AB (A-B) goes through point (0,0,radius)
GSET(L,AB,A,B,nab,1.0,ARC,0,0,radius)
GSET(L,AB,A,B,NAB,1.0,ARC,0,0,RADIUS)
Enter number of cells for BC(&DA) lines (default 5)
readvdu(nbc,int,5)
Arc BC (B-C) goes through point (0,radius,0)
GSET(L,BC,B,C,nbc,1.0,ARC,0,radius,0)
GSET(L,BC,B,C,NBC,1.0,ARC,0,RADIUS,0)
Arc CD (C-D) goes through point (0,0,-radius)
GSET(L,CD,C,D,nab,1.0,ARC,0,0,-RADIUS)
GSET(L,CD,C,D,NAB,1.0,ARC,0,0,-RADIUS)
Arc DA (D-A) goes through point (0,-radius,0)
CT1=GSET(L,DA,D,A,nbc,1.0,ARC,0,-radius,0)
#$b003
Define frame ABCD (circle) which has corner points
A,B,C,D by the command:
CT1=GSET(F,ABCD,A,-,B,-,C,-,D,-)
#$b003
#$021
!!!! The following is a point of difference from case 538
in which the square and the circle were just 1 I-interval
apart. !!!!
Please enter number of cells for I direction (default 10)
readvdu(nx,int,10)
Set the BFC grid dimension as nx x nab x nbc cells with
reference length radius+side x side x side by the command:
CT1=GSET(D,:nx:,:nab:,:nbc:,:radius+side:,:side:,:side:)
#$b003
*
it1=nx+1
it1
MESG( Match grid plane I:it1: on frame ABCD using the
Laplace method with 10 iterations by the command:
lflag=t
CT1=GSET(M,ABCD,+J-K,:it1:,1,:nbc:+1,LAP10)
#$B004
lflag=f
-- Create a square --
Define points E,F,G and H by the following commands:
Point E positioned at (-side,-side/2,side/2)
GSET(P,E,-SIDE,-SIDE/2,SIDE/2)
GSET(P,E,-side,-side/2,side/2)
Point F positioned at (-side,side/2,side/2)
GSET(P,F,-side,side/2,side/2)
GSET(P,F,-SIDE,SIDE/2,SIDE/2)
GSET(P,G,-SIDE,SIDE/2,-SIDE/2)
Point G positioned at (-side,side/2,-side/2)
GSET(P,G,-side,side/2,-side/2)
Point H positioned at (-side,-side/2,-side/2)
CT1=GSET(P,H,-side,-side/2,-side/2)
#$b003
*
Draw four lines (EF,FG,GH,HE) from E to H
to create a square. Lines EF&GH have nab uniformly
distributed cells each and lines FG&HE have nbc
uniformly distributed cells each; they have to
match number of cells on the circle.
The commands are:
GSET(L,EF,E,F,nab,1.0)
GSET(L,EF,E,F,NAB,1.0)
GSET(L,FG,F,G,nbc,1.0)
GSET(L,FG,F,G,NBC,1.0)
GSET(L,GH,G,H,nab,1.0)
GSET(L,GH,G,H,NAB,1.0)
CT1=GSET(L,HE,H,E,nbc,1.0)
#$b003
*
Define frame EFGH (square) which has corner points
E,F,G,H by the command:
CT1=GSET(F,EFGH,E,-,F,-,G,-,H,-)
#$b003
*
Match grid plane I1 on frame EFGH using the trans-finite
method of interpolation by the command:
CT1=GSET(M,EFGH,+J-K,1,1,nbc+1,TRANS)
#$B004
*
it1=nx+1
!!!! This where the "transfer feature" is employed !!!!
---------------------------------------------
Use Transfer command to connect smoothly circle (plane I:it1:)
and square (plane I1). Include all internal planes and use
power-law distribution for them.
Enter power (default 1.5); for symmetric-law precede number
with S.
READVDU(PWR,CHAR,1.5)
The PIL command for effecting the transfer is:
CT1=GSET(T,I1,F,I:it1:,1,nab,1,nbc,:pwr:)
#$B004
enddis