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 extrapolateshell_us45(yi,yn,ipkon,inum,kon,lakon, 20 & nfield,nk,ne,mi,ndim,orab,ielorien,co,iorienloc,cflag, 21 & ielmat,thicke,ielprop,prop,i,iflag) 22! 23! extrapolates field values at the integration points to the 24! nodes for user element i of type u1 25! 26! the present routine is called for each user element of type us45; 27! the field yn(j,i) contains at entry the sum of all extrapolations 28! done for component j of the variable to node i (since a node can 29! belong to n elements (not necessarily all of type user element 30! u1) at the end n extrapolated values are available 31! for this node). They are accumulated and at the end divided by n. The 32! value of n is stored in inum(i): it starts at zero and is incremented 33! by one for each extrapolation done to node i. 34! 35! the present routine cannot be used for network elements, only for 36! structural elements 37! 38! INPUT: 39! 40! yi(ndim,mi(1),*) value of the variables at the integration 41! points 42! yn(nfield,*) sum of the extrapolated variables at the nodes 43! from all elements treated previously 44! ipkon(i) points to the location in field kon preceding 45! the topology of element i 46! inum(i) < 0: node i is a network node 47! > 0: node i is a structural node; its value is 48! number of extrapolations performed to this 49! node so far 50! =0: node i is not used 51! kon(*) contains the topology of all elements. The 52! topology of element i starts at kon(ipkon(i)+1) 53! and continues until all nodes are covered. The 54! number of nodes depends on the element label 55! lakon(i) contains the label of element i 56! nfield number of variables to be extrapolated 57! nk maximum node number in the mesh 58! ne maximum element number in the mesh 59! ndim number of variables in the integration point 60! field to be extrapolated 61! orab(7,*) description of all local coordinate systems. 62! (cf. List of variables and their meaning in the 63! User's manual) 64! ielorien(i) orientation in element i 65! co(1..3,i) global coordinates of node i 66! iorienloc 0: extrapolated variables requested in global 67! coordinates 68! 1: extrapolated variables requested in local 69! coordinates 70! cflag (char*1) I: interpolate 3D results onto 1D/2D 71! E: store extrapolated 1D/2D results 72! M: store 1D section forces 73! blank: any other case 74! ielmat(i) material of element i 75! thicke(j,i) thickness of layer j in node i 76! ielprop(i) properties for element i are stored in 77! prop(ielprop(i)+1),prop(ielprop(i)+2),.... 78! (number of properties depends on the type of 79! element) 80! prop property field 81! i number of the element for which the extrapolation 82! is to be performed 83! iflag -1: values for lower surface of shell requested 84! 0: values for midsurface of shell requested 85! +1: values for upper surface of shell requested 86! 87! 88! OUTPUT: 89! 90! yn(nfield,*) value of the variables at the nodes 91! inum(i) < 0: node i is a network node 92! > 0: node i is a structural node; inum(i) 93! should be incremented by 1 if in the 94! call of this routine an extrapolated value 95! was stored for this node 96! =0: node i is not used 97! 98 implicit none 99! 100 character*1 cflag 101 character*8 lakon(*) 102! 103 integer ipkon(*),inum(*),kon(*),mi(*),ne,nfield,nk,i,ndim, 104 & iorienloc,ielorien(mi(3),*),ielmat(mi(3),*),ielprop(*),iflag 105! 106 real*8 yi(ndim,mi(1),*),yn(nfield,*),orab(7,*),co(3,*),prop(*), 107 & thicke(mi(3),*) 108! 109! START OF THIS SUBROUTINE 110! 111 integer indexe,j,k,node 112! 113 if(iorienloc.ne.0) then 114 write(*,*) '*ERROR in extrapolate_u1' 115 write(*,*) ' no local orientation for variables' 116 write(*,*) ' belonging to this type of element' 117 write(*,*) ' allowed' 118 call exit(201) 119 endif 120! 121 if(nfield.eq.6) then 122 indexe=ipkon(i) 123 do j=1,2 124 node=kon(indexe+j) 125 do k=1,nfield 126 yn(k,node)=yn(k,node)+yi(k,1,i) 127 enddo 128 inum(node)=inum(node)+1 129 enddo 130 else 131 write(*,*) '*ERROR in extrapolate_u1' 132 write(*,*) ' extropolation for element of type u1' 133 write(*,*) ' is only coded for fields with 6' 134 write(*,*) ' entries' 135 call exit(201) 136 endif 137! 138! END OF THIS SUBROUTINE 139! 140 return 141 end 142