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

Go to the source code of this file.

Functions/Subroutines

subroutine gen3dtemp (iponoel, inoel, iponoelmax, kon, ipkon, lakon, ne, iponor, xnor, knor, t0, t1, thicke, offset, rig, nk, nk_, co, istep, ithermal, vold, mi, t0g, t1g, nam, iamt1)
 

Function/Subroutine Documentation

◆ gen3dtemp()

subroutine gen3dtemp ( integer, dimension(*)  iponoel,
integer, dimension(3,*)  inoel,
integer  iponoelmax,
integer, dimension(*)  kon,
integer, dimension(*)  ipkon,
character*8, dimension(*)  lakon,
integer  ne,
integer, dimension(2,*)  iponor,
real*8, dimension(*)  xnor,
integer, dimension(*)  knor,
real*8, dimension(*)  t0,
real*8, dimension(*)  t1,
real*8, dimension(mi(3),*)  thicke,
real*8, dimension(2,*)  offset,
integer, dimension(*)  rig,
integer  nk,
integer  nk_,
real*8, dimension(3,*)  co,
integer  istep,
integer  ithermal,
real*8, dimension(0:mi(2),*)  vold,
integer, dimension(*)  mi,
real*8, dimension(2,*)  t0g,
real*8, dimension(2,*)  t1g,
integer  nam,
integer, dimension(*)  iamt1 
)
22 !
23 ! maps the temperatures and temperature gradients in 1-D and 2-D
24 ! elements on their expanded counterparts
25 !
26  implicit none
27 !
28  character*8 lakon(*)
29 !
30  integer iponoel(*),inoel(3,*),iponoelmax,kon(*),ipkon(*),ne,
31  & iponor(2,*),knor(*),rig(*),i,i1,nk,nk_,i2,index,ielem,j,
32  & indexe,indexk,k,node,istep,ithermal,mi(*),nam,iamt1(*)
33 !
34  real*8 xnor(*),t0(*),t1(*),thicke(mi(3),*),offset(2,*),co(3,*),
35  & vold(0:mi(2),*),t0g(2,*),t1g(2,*)
36 !
37 ! initial conditions
38 !
39  if(istep.eq.1) then
40  do i=1,iponoelmax
41  i1=i+nk_
42  i2=i+2*nk_
43  index=iponoel(i)
44  do
45  if(index.eq.0) exit
46  ielem=inoel(1,index)
47  j=inoel(2,index)
48  indexe=ipkon(ielem)
49  indexk=iponor(2,indexe+j)
50  if((lakon(ielem)(7:7).eq.'E').or.
51  & (lakon(ielem)(7:7).eq.'A').or.
52  & (lakon(ielem)(7:7).eq.'S')) then
53  do k=1,3
54  node=knor(indexk+k)
55  t0(node)=t0(i)
56  if(ithermal.gt.1) vold(0,node)=t0(node)
57  enddo
58  elseif(lakon(ielem)(7:7).eq.'L') then
59  node=knor(indexk+1)
60  t0(node)=t0(i)
61  & -t0g(1,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
62  if(ithermal.gt.1) vold(0,node)=t0(node)
63  node=knor(indexk+2)
64  t0(node)=t0(i)
65  if(ithermal.gt.1) vold(0,node)=t0(node)
66  node=knor(indexk+3)
67  t0(node)=t0(i)
68  & +t0g(1,i)*thicke(1,indexe+j)*(0.5d0-offset(1,ielem))
69  if(ithermal.gt.1) vold(0,node)=t0(node)
70  elseif(lakon(ielem)(7:7).eq.'B') then
71  node=knor(indexk+1)
72  t0(node)=t0(i)
73  & -t0g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
74  & +t0g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
75  if(ithermal.gt.1) vold(0,node)=t0(node)
76  node=knor(indexk+2)
77  t0(node)=t0(i)
78  & -t0g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
79  & -t0g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
80  if(ithermal.gt.1) vold(0,node)=t0(node)
81  node=knor(indexk+3)
82  t0(node)=t0(i)
83  & +t0g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
84  & -t0g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
85  if(ithermal.gt.1) vold(0,node)=t0(node)
86  node=knor(indexk+4)
87  t0(node)=t0(i)
88  & +t0g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
89  & +t0g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
90  if(ithermal.gt.1) vold(0,node)=t0(node)
91  node=knor(indexk+5)
92  t0(node)=t0(i)
93  & -t0g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
94  if(ithermal.gt.1) vold(0,node)=t0(node)
95  node=knor(indexk+6)
96  t0(node)=t0(i)
97  & -t0g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
98  if(ithermal.gt.1) vold(0,node)=t0(node)
99  node=knor(indexk+7)
100  t0(node)=t0(i)
101  & +t0g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
102  if(ithermal.gt.1) vold(0,node)=t0(node)
103  node=knor(indexk+8)
104  t0(node)=t0(i)
105  & +t0g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
106  if(ithermal.gt.1) vold(0,node)=t0(node)
107  endif
108  if(rig(i).eq.0) exit
109  index=inoel(3,index)
110  enddo
111  enddo
112  endif
113 !
114 ! temperature loading for mechanical calculations
115 !
116  if(ithermal.eq.1) then
117  do i=1,iponoelmax
118  i1=i+nk_
119  i2=i+2*nk_
120  index=iponoel(i)
121  do
122  if(index.eq.0) exit
123  ielem=inoel(1,index)
124  j=inoel(2,index)
125  indexe=ipkon(ielem)
126  indexk=iponor(2,indexe+j)
127  if((lakon(ielem)(7:7).eq.'E').or.
128  & (lakon(ielem)(7:7).eq.'A').or.
129  & (lakon(ielem)(7:7).eq.'S')) then
130  do k=1,3
131  node=knor(indexk+k)
132  t1(node)=t1(i)
133  if(nam.gt.0) iamt1(node)=iamt1(i)
134  enddo
135  elseif(lakon(ielem)(7:7).eq.'L') then
136  node=knor(indexk+1)
137  t1(node)=t1(i)
138  & -t1g(1,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
139  if(nam.gt.0) iamt1(node)=iamt1(i)
140  node=knor(indexk+2)
141  t1(node)=t1(i)
142  if(nam.gt.0) iamt1(node)=iamt1(i)
143  node=knor(indexk+3)
144  t1(node)=t1(i)
145  & +t1g(1,i)*thicke(1,indexe+j)*(0.5d0-offset(1,ielem))
146  if(nam.gt.0) iamt1(node)=iamt1(i)
147  elseif(lakon(ielem)(7:7).eq.'B') then
148  node=knor(indexk+1)
149  t1(node)=t1(i)
150  & -t1g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
151  & +t1g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
152  if(nam.gt.0) iamt1(node)=iamt1(i)
153  node=knor(indexk+2)
154  t1(node)=t1(i)
155  & -t1g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
156  & -t1g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
157  if(nam.gt.0) iamt1(node)=iamt1(i)
158  node=knor(indexk+3)
159  t1(node)=t1(i)
160  & +t1g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
161  & -t1g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
162  if(nam.gt.0) iamt1(node)=iamt1(i)
163  node=knor(indexk+4)
164  t1(node)=t1(i)
165  & +t1g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
166  & +t1g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
167  if(nam.gt.0) iamt1(node)=iamt1(i)
168  node=knor(indexk+5)
169  t1(node)=t1(i)
170  & -t1g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
171  if(nam.gt.0) iamt1(node)=iamt1(i)
172  node=knor(indexk+6)
173  t1(node)=t1(i)
174  & -t1g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
175  if(nam.gt.0) iamt1(node)=iamt1(i)
176  node=knor(indexk+7)
177  t1(node)=t1(i)
178  & +t1g(2,i)*thicke(1,indexe+j)*(0.5d0+offset(1,ielem))
179  if(nam.gt.0) iamt1(node)=iamt1(i)
180  node=knor(indexk+8)
181  t1(node)=t1(i)
182  & +t1g(1,i)*thicke(2,indexe+j)*(0.5d0+offset(2,ielem))
183  if(nam.gt.0) iamt1(node)=iamt1(i)
184  endif
185  if(rig(i).eq.0) exit
186  index=inoel(3,index)
187  enddo
188  enddo
189  endif
190 !
191  return
Hosted by OpenAircraft.com, (Michigan UAV, LLC)