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
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
|