You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

201 lines
5.6 KiB
Fortran

DOUBLE PRECISION FUNCTION XN(IT,K,X,Y)
SAVE
DOUBLE PRECISION X,Y
!
!......FUNCTION TO DEFINE SHAPE FUNCTION VALUES
!
IF(IT .EQ. 2) THEN
!
!......TRIANGULAR ELEMENT
!
GO TO ( 110,120,130,140,150,160),K
110 XN=(1.-2.*X-2.*Y)*(1.-X-Y)
RETURN
120 XN=4.*X*(1.-X-Y)
RETURN
130 XN=(2.*X-1.)*X
RETURN
140 XN=4.*X*Y
RETURN
150 XN=(2.*Y-1.)*Y
RETURN
160 XN=4.*Y*(1.-X-Y)
RETURN
!
!......QUADRILATERAL ELEMENT
!
ELSEIF(IT .EQ. 1) THEN
GO TO (510,520,530,540,550,560,570,580),K
510 XN=(1.-X)*(1.-Y)*(-X-Y-1.)/4.
RETURN
520 XN=(1.-X*X)*(1.-Y)/2.
RETURN
530 XN=(1.+X)*(1.-Y)*(X-Y-1.)/4.
RETURN
540 XN=(1.+X)*(1.-Y*Y)/2.
RETURN
550 XN=(1.+X)*(1.+Y)*(X+Y-1.)/4.
RETURN
560 XN=(1.-X*X)*(1.+Y)/2.
RETURN
570 XN=(1.-X)*(1.+Y)*(-X+Y-1.)/4.
RETURN
580 XN=(1.-X)*(1.-Y*Y)/2.
ELSE
GO TO (610,620,630,640,650,660,670,680,690),K
610 XN=(1.-X)*(1.-Y)*X*Y/4.
RETURN
620 XN=-Y*(1.-X*X)*(1.-Y)/2.
RETURN
630 XN=-(1.+X)*(1.-Y)*X*Y/4.
RETURN
640 XN=X*(1.+X)*(1.-Y*Y)/2.
RETURN
650 XN=(1.+X)*(1.+Y)*X*Y/4.
RETURN
660 XN=Y*(1.-X*X)*(1.+Y)/2.
RETURN
670 XN=-(1.-X)*(1.+Y)*X*Y/4.
RETURN
680 XN=-X*(1.-X)*(1.-Y*Y)/2.
RETURN
690 XN=(1.+X)*(1.-X)*(1.+Y)*(1.-Y)
RETURN
ENDIF
END
DOUBLE PRECISION FUNCTION DNX(IT,K,X,Y)
SAVE
DOUBLE PRECISION X,Y
!-
!......FUNCTION TO DETERMINE X-DERIVATIVE OF SHAPE FUNCTION
!-
IF(IT .EQ. 2) THEN
!-
!......TRIANGULAR ELEMENT
!-
GO TO (110,120,130,140,150,160),K
110 DNX=-3. +4.*X+4.*Y
RETURN
120 DNX=4.-8.*X-4.*Y
RETURN
130 DNX=4.*X-1.
RETURN
140 DNX=4.*Y
RETURN
150 DNX=0.
RETURN
160 DNX=-4.*Y
RETURN
!-
!......QUADRILATERAL ELEMENT
!-
ELSEIF(IT .EQ. 1) THEN
GO TO (510,520,530,540,550,560,570,580),K
510 DNX=-(1.-Y)*(-2.*X-Y)/4.
RETURN
520 DNX=-X*(1.-Y)
RETURN
530 DNX=(1.-Y)*(2.*X-Y)/4.
RETURN
540 DNX=(1.-Y*Y)/2.
RETURN
550 DNX=(1.+Y)*(2.*X+Y)/4.
RETURN
560 DNX=-X*(1.+Y)
RETURN
570 DNX=-(1.+Y)*(-2.*X+Y)/4.
RETURN
580 DNX=-(1.-Y*Y)/2.
RETURN
ELSE
GO TO (610,620,630,640,650,660,670,680,690),K
610 DNX=(Y-Y**2)*(1.-2.*X)/4.
RETURN
620 DNX= X*(Y-Y**2)
RETURN
630 DNX=-(Y-Y**2)*(1.+2.*X)/4.
RETURN
640 DNX=(1.-Y*Y)/2.*(1.+2.*X)
RETURN
650 DNX=(Y+Y**2)*(1.+2.*X)/4.
RETURN
660 DNX=-X*(Y+Y**2)
RETURN
670 DNX=-(Y+Y**2)*(1.-2.*X)/4.
RETURN
680 DNX=-(1.-Y*Y)/2.*(1.-2.*X)
RETURN
690 DNX=-2.*X*(1.-Y**2)
RETURN
ENDIF
END
DOUBLE PRECISION FUNCTION DNY(IT,K,X,Y)
SAVE
DOUBLE PRECISION X,Y
!-
!
!......FUNCTION TO DETERMINE Y-DERIVATIVE OF SHAPE FUNCTION
!-
IF(IT .EQ. 2) THEN
!-
!......TRIANGULAR ELEMENT
!-
GO TO (110,120,130,140,150,160),K
110 DNY=-3.+4.*X+4.*Y
RETURN
120 DNY=-4.*X
RETURN
130 DNY=0.
RETURN
140 DNY=4.*X
RETURN
150 DNY=4.*Y-1.
RETURN
160 DNY=4.-4.*X-8.*Y
RETURN
!-
!......QUADRILATERAL ELEMENT
!-
ELSEIF(IT .EQ. 1) THEN
GO TO (510,520,530,540,550,560,570,580),K
510 DNY=-(1.-X)*(-2.*Y-X)/4.
RETURN
520 DNY=-(1.-X*X)/2.
RETURN
530 DNY=-(1.+X)*(X-2.*Y)/4.
RETURN
540 DNY=-Y*(1.+X)
RETURN
550 DNY=(1.+X)*(2.*Y+X)/4.
RETURN
560 DNY=(1.-X*X)/2.
RETURN
570 DNY=(1.-X)*(2.*Y-X)/4.
RETURN
580 DNY=-Y*(1.-X)
RETURN
ELSE
GO TO (610,620,630,640,650,660,670,680,690),K
610 DNY=(X-X**2)*(1.-2.*Y)/4.
RETURN
620 DNY=-(1.-X*X)/2.*(1.-2.*Y)
RETURN
630 DNY=-(X+X**2)*(1.-2.*Y)/4.
RETURN
640 DNY=-Y*(X+X**2)
RETURN
650 DNY=(X+X**2)*(1.+2.*Y)/4.
RETURN
660 DNY=(1.-X*X)/2.*(1.+2.*Y)
RETURN
670 DNY=-(X-X**2)*(1.+2.*Y)/4.
RETURN
680 DNY= Y*(X-X**2)
RETURN
690 DNY=-2.*Y*(1.-X**2)
RETURN
ENDIF
END