1!
2!     CalculiX - A 3-dimensional finite element program
3!              Copyright (C) 1998-2021 Guido Dhondt
4!
5!     This program is free software; you can redistribute it and/or
6!     modify it under the terms of the GNU General Public License as
7!     published by the Free Software Foundation(version 2);
8!
9!
10!     This program is distributed in the hope that it will be useful,
11!     but WITHOUT ANY WARRANTY; without even the implied warranty of
12!     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13!     GNU General Public License for more details.
14!
15!     You should have received a copy of the GNU General Public License
16!     along with this program; if not, write to the Free Software
17!     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18!
19      subroutine extrapolate_us3(yi,yn,ipkon,inum,kon,lakon,nfield,nk,
20     &  ne,mi,ndim,orab,ielorien,co,iorienloc,cflag,
21     &  vold,force,ielmat,thicke,ielprop,prop,i)
22!
23!     extrapolates field values at the integration points to the
24!     nodes for user element i of type us3
25!
26!     the present routine is called for each user element of type us3;
27!     routine to calculate inum(i) for nodes i belonging to shell
28!     elements of type us3. This guarantees that the coordinates and
29!     fields such as U, S or SNEG are stored for these nodes in the
30!     frd-file.
31!
32!     In this routine no extrapolation is done. For 'true' shell elements
33!     the extrapolation is done in extrapolateshell_us3.f
34!
35!     INPUT:
36!
37!     yi(ndim,mi(1),*)   value of the variables at the integration
38!                        points
39!     yn(nfield,*)       sum of the extrapolated variables at the nodes
40!                        from all elements treated previously
41!     ipkon(i)           points to the location in field kon preceding
42!                        the topology of element i
43!     inum(i)            < 0: node i is a network node
44!                        > 0: node i is a structural node; its value is
45!                             number of extrapolations performed to this
46!                             node so far
47!                        =0: node i is not used
48!     kon(*)             contains the topology of all elements. The
49!                        topology of element i starts at kon(ipkon(i)+1)
50!                        and continues until all nodes are covered. The
51!                        number of nodes depends on the element label
52!     lakon(i)           contains the label of element i
53!     nfield             number of variables to be extrapolated
54!     nk                 maximum node number in the mesh
55!     ne                 maximum element number in the mesh
56!     ndim               number of variables in the integration point
57!                        field to be extrapolated
58!     orab(7,*)          description of all local coordinate systems.
59!                        (cf. List of variables and their meaning in the
60!                        User's manual)
61!     ielorien(i)        orientation in element i
62!     co(1..3,i)         global coordinates of node i
63!     iorienloc          0: extrapolated variables requested in global
64!                           coordinates
65!                        1: extrapolated variables requested in local
66!                           coordinates
67!     cflag (char*1)     I: interpolate 3D results onto 1D/2D
68!                        E: store extrapolated 1D/2D results
69!                        M: store 1D section forces
70!                        blank: any other case
71!     vold(j,i)          value of variable j in node i at the end
72!                        of the previous iteration
73!     force              logical variable; if true the values to
74!                        be extrapolated are force values; important for
75!                        interpolation from 3D expanded structures on the
76!                        original 1D/2D structure: forces across the
77!                        expansion have to be summed, not interpolated
78!     ielmat(i)          material of element i
79!     thicke(j,i)        thickness of layer j in node i
80!     ielprop(i)         properties for element i are stored in
81!                        prop(ielprop(i)+1),prop(ielprop(i)+2),....
82!                        (number of properties depends on the type of
83!                        element)
84!     prop               property field
85!     i                  number of the element for which the extrapolation
86!                        is to be performed
87!
88!     OUTPUT:
89!
90!     inum(i)            < 0: node i is a network node
91!                        > 0: node i is a structural node; inum(i)
92!                             should be incremented by 1 if in the
93!                             call of this routine an extrapolated value
94!                             was stored for this node
95!                        =0: node i is not used
96!
97      implicit none
98!
99      logical force
100!
101      character*1 cflag
102      character*8 lakon(*)
103!
104      integer ipkon(*),inum(*),kon(*),mi(*),ne,nfield,nk,i,ndim,
105     &  iorienloc,ielorien(mi(3),*),ielmat(mi(3),*),ielprop(*)
106!
107      real*8 yi(ndim,mi(1),*),yn(nfield,*),orab(7,*),co(3,*),prop(*),
108     &  vold(0:mi(2),*),thicke(mi(3),*)
109!
110      integer indexe,j,k,node
111!
112      indexe=ipkon(i)
113      do j=1,3
114        node=kon(indexe+j)
115        inum(node)=inum(node)+1
116      enddo
117!
118      return
119      end
120