CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
addimdnodedload.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine addimdnodedload (nelemload, sideload, ipkon, kon, lakon, iload, imdnode, nmdnode, ikmpc, ilmpc, ipompc, nodempc, nmpc, imddof, nmddof, nactdof, mi, imdmpc, nmdmpc, imdboun, nmdboun, ikboun, nboun, ilboun, ithermal)
 

Function/Subroutine Documentation

◆ addimdnodedload()

subroutine addimdnodedload ( integer, dimension(2,*)  nelemload,
character*20, dimension(*)  sideload,
integer, dimension(*)  ipkon,
integer, dimension(*)  kon,
character*8, dimension(*)  lakon,
integer  iload,
integer, dimension(*)  imdnode,
integer  nmdnode,
integer, dimension(*)  ikmpc,
integer, dimension(*)  ilmpc,
integer, dimension(*)  ipompc,
integer, dimension(3,*)  nodempc,
integer  nmpc,
integer, dimension(*)  imddof,
integer  nmddof,
integer, dimension(0:mi(2),*)  nactdof,
integer, dimension(*)  mi,
integer, dimension(*)  imdmpc,
integer  nmdmpc,
integer, dimension(*)  imdboun,
integer  nmdboun,
integer, dimension(*)  ikboun,
integer  nboun,
integer, dimension(*)  ilboun,
integer  ithermal 
)
23 !
24 ! adds the nodes belonging to a user-defined facial load to imdnode
25 ! (needed in dyna.c and steadystate.c)
26 !
27  implicit none
28 !
29  character*8 lakon(*),lakonl
30  character*20 sideload(*)
31 !
32  integer nelemload(2,*),ipkon(*),kon(*),iload,ii,nopes,node,
33  & indexe,
34  & ifaceq(8,6),ifacew(8,5),ifacet(6,4),ig,ielem,nope,imdnode(*),
35  & nmdnode,ikmpc(*),
36  & ilmpc(*),ipompc(*),nodempc(3,*),nmpc,imddof(*),nmddof,
37  & mi(*),nactdof(0:mi(2),*),imdmpc(*),nmdmpc,imdboun(*),nmdboun,
38  & ikboun(*),nboun,ilboun(*),ithermal,k
39 !
40  data ifaceq /4,3,2,1,11,10,9,12,
41  & 5,6,7,8,13,14,15,16,
42  & 1,2,6,5,9,18,13,17,
43  & 2,3,7,6,10,19,14,18,
44  & 3,4,8,7,11,20,15,19,
45  & 4,1,5,8,12,17,16,20/
46  data ifacet /1,3,2,7,6,5,
47  & 1,2,4,5,9,8,
48  & 2,3,4,6,10,9,
49  & 1,4,3,8,10,7/
50  data ifacew /1,3,2,9,8,7,0,0,
51  & 4,5,6,10,11,12,0,0,
52  & 1,2,5,4,7,14,10,13,
53  & 2,3,6,5,8,15,11,14,
54  & 4,6,3,1,12,15,9,13/
55 !
56  ielem=nelemload(1,iload)
57  lakonl=lakon(ielem)
58  indexe=ipkon(ielem)
59 !
60  if((sideload(iload)(1:1).eq.'P').and.
61  & (sideload(iload)(3:4).eq.'NU')) then
62  read(sideload(iload)(2:2),'(i1)') ig
63 !
64 ! surface pressure: number of nodes belonging to the face
65 !
66  if(lakonl(4:4).eq.'2') then
67  nopes=8
68  elseif(lakonl(4:4).eq.'8') then
69  nopes=4
70  elseif(lakonl(4:5).eq.'10') then
71  nopes=6
72  elseif(lakonl(4:4).eq.'4') then
73  nopes=3
74  elseif(lakonl(4:5).eq.'15') then
75  if(ig.le.2) then
76  nopes=6
77  else
78  nopes=8
79  endif
80  elseif(lakonl(4:4).eq.'6') then
81  if(ig.le.2) then
82  nopes=3
83  else
84  nopes=4
85  endif
86  endif
87 !
88  do ii=1,nopes
89  if((lakonl(4:4).eq.'2').or.(lakonl(4:4).eq.'8')) then
90  node=kon(indexe+ifaceq(ii,ig))
91  elseif((lakonl(4:5).eq.'10').or.(lakonl(4:4).eq.'4')) then
92  node=kon(indexe+ifacet(ii,ig))
93  elseif((lakonl(4:5).eq.'15').or.(lakonl(4:4).eq.'6')) then
94  node=kon(indexe+ifacew(ii,ig))
95  endif
96 !
97 ! user-defined load
98 !
99  if(sideload(iload)(3:4).eq.'NU') then
100  call addimd(imdnode,nmdnode,node)
101 !
102 ! add the degrees of freedom corresponding to the node
103 !
104  if(ithermal.ne.2) then
105  do k=1,3
106  call addimdnodedof(node,k,ikmpc,ilmpc,ipompc,
107  & nodempc,nmpc,imdnode,nmdnode,imddof,nmddof,
108  & nactdof,mi,imdmpc,nmdmpc,imdboun,nmdboun,
109  & ikboun,nboun,ilboun)
110  enddo
111  else
112  k=0
113  call addimdnodedof(node,k,ikmpc,ilmpc,ipompc,
114  & nodempc,nmpc,imdnode,nmdnode,imddof,nmddof,
115  & nactdof,mi,imdmpc,nmdmpc,imdboun,nmdboun,ikboun,
116  & nboun,ilboun)
117  endif
118  endif
119 !
120  enddo
121  elseif(sideload(iload)(1:1).eq.'B') then
122 !
123 ! volumetric load; number of nodes in the element
124 !
125  if(lakonl(4:4).eq.'2') then
126  nope=20
127  elseif(lakonl(4:4).eq.'8') then
128  nope=8
129  elseif(lakonl(4:5).eq.'10') then
130  nope=10
131  elseif(lakonl(4:4).eq.'4') then
132  nope=4
133  elseif(lakonl(4:5).eq.'15') then
134  nope=15
135  elseif(lakonl(4:4).eq.'6') then
136  nope=6
137  endif
138 !
139  do ii=1,nope
140  node=kon(indexe+ii)
141 !
142 ! user-defined load
143 !
144  if(sideload(iload)(3:4).eq.'NU') then
145  call addimd(imdnode,nmdnode,node)
146 !
147 ! add the degrees of freedom corresponding to the node
148 !
149  if(ithermal.ne.2) then
150  do k=1,3
151  call addimdnodedof(node,k,ikmpc,ilmpc,ipompc,
152  & nodempc,nmpc,imdnode,nmdnode,imddof,nmddof,
153  & nactdof,mi,imdmpc,nmdmpc,imdboun,nmdboun,
154  & ikboun,nboun,ilboun)
155  enddo
156  else
157  k=0
158  call addimdnodedof(node,k,ikmpc,ilmpc,ipompc,
159  & nodempc,nmpc,imdnode,nmdnode,imddof,nmddof,
160  & nactdof,mi,imdmpc,nmdmpc,imdboun,nmdboun,ikboun,
161  & nboun,ilboun)
162  endif
163  endif
164  enddo
165 !
166  endif
167 !
168  return
subroutine addimdnodedof(node, k, ikmpc, ilmpc, ipompc, nodempc, nmpc, imdnode, nmdnode, imddof, nmddof, nactdof, mi, imdmpc, nmdmpc, imdboun, nmdboun, ikboun, nboun, ilboun)
Definition: addimdnodedof.f:22
subroutine addimd(imd, nmd, node)
Definition: addimd.f:20
Hosted by OpenAircraft.com, (Michigan UAV, LLC)