1!$Id:$
2      subroutine shp1dn(s,shp,nel)
3
4!      * * F E A P * * A Finite Element Analysis Program
5
6!....  Copyright (c) 1984-2017: Regents of the University of California
7!                               All rights reserved
8
9!-----[--.----+----.----+----.-----------------------------------------]
10!     Purpose: Compute shape functions and natural derivatives
11!              at natural coordinate s.
12!              Linear (2 nodes) or quadratic (3 nodes) element.
13
14!     Inputs:
15!       s         : natural coordinate
16!       nel       : number of nodes of element
17
18!     Outputs:
19!       shp(2,nel): shape functions and derivatives at s
20!                   shp(1,1 to nel): derivatives of shape functions
21!                   shp(2,1 to nel): shape functions
22!-----[--.----+----.----+----.-----------------------------------------]
23      implicit  none
24
25      integer   nel
26      real*8    s,shp(2,nel)
27
28      save
29
30!     Linear element
31
32      if(nel.eq.2) then
33
34        shp(1,1) = -0.5d0
35        shp(1,2) =  0.5d0
36
37        shp(2,1) =  0.5d0 - 0.5d0*s
38        shp(2,2) =  0.5d0 + 0.5d0*s
39
40!     Quadratic element
41
42      elseif(nel.eq.3) then
43
44        shp(1,1) =  s - 0.5d0
45        shp(1,2) =  s + 0.5d0
46        shp(1,3) = -2.d0*s
47
48        shp(2,1) =  s*(s - 1.d0)*0.5d0
49        shp(2,2) =  s*(s + 1.d0)*0.5d0
50        shp(2,3) =  1.d0 - s*s
51
52!     Cubic element
53
54      elseif(nel.eq.4) then
55
56        shp(1,1) = 0.0625d0*( 1.d0 + 18.d0*s - 27.d0*s*s)
57        shp(1,2) = 0.0625d0*(-1.d0 + 18.d0*s + 27.d0*s*s)
58        shp(1,3) = 0.5625d0*(-3.d0 - 2.d0*s + 9.d0*s*s)
59        shp(1,4) = 0.5625d0*( 3.d0 - 2.d0*s - 9.d0*s*s)
60
61        shp(2,1) = 0.0625d0*(9.d0*s*s - 1.d0)*(1.d0 - 3.d0*s)
62        shp(2,2) = 0.0625d0*(9.d0*s*s - 1.d0)*(1.d0 + 3.d0*s)
63        shp(2,3) = 0.5625d0*(1.d0 - s*s)*(1.d0 - 3.d0*s)
64        shp(2,4) = 0.5625d0*(1.d0 - s*s)*(1.d0 + 3.d0*s)
65
66      endif
67
68      end
69