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

Go to the source code of this file.

Functions/Subroutines

subroutine changesolidsections (inpc, textpart, set, istartset, iendset, ialset, nset, ielmat, matname, nmat, ielorien, orname, norien, lakon, thicke, kon, ipkon, irstrt, istep, istat, n, iline, ipol, inl, ipoinp, inp, cs, mcs, iaxial, ipoinpc, mi, nelcon)
 

Function/Subroutine Documentation

◆ changesolidsections()

subroutine changesolidsections ( character*1, dimension(*)  inpc,
character*132, dimension(16)  textpart,
character*81, dimension(*)  set,
integer, dimension(*)  istartset,
integer, dimension(*)  iendset,
integer, dimension(*)  ialset,
integer  nset,
integer, dimension(mi(3),*)  ielmat,
character*80, dimension(*)  matname,
integer  nmat,
integer, dimension(mi(3),*)  ielorien,
character*80, dimension(*)  orname,
integer  norien,
character*8, dimension(*)  lakon,
real*8, dimension(mi(3),*)  thicke,
integer, dimension(*)  kon,
integer, dimension(*)  ipkon,
integer  irstrt,
integer  istep,
integer  istat,
integer  n,
integer  iline,
integer  ipol,
integer  inl,
integer, dimension(2,*)  ipoinp,
integer, dimension(3,*)  inp,
real*8, dimension(17,*)  cs,
integer  mcs,
integer  iaxial,
integer, dimension(0:*)  ipoinpc,
integer, dimension(*)  mi,
integer, dimension(2,*)  nelcon 
)
23 !
24 ! reading the input deck: *CHANGE SOLID SECTION
25 !
26  implicit none
27 !
28  character*1 inpc(*)
29  character*8 lakon(*)
30  character*80 matname(*),orname(*),material,orientation
31  character*81 set(*),elset
32  character*132 textpart(16)
33 !
34  integer mi(*),istartset(*),iendset(*),ialset(*),ielmat(mi(3),*),
35  & ielorien(mi(3),*),kon(*),ipkon(*),indexe,irstrt,nset,nmat,
36  & norien,nelcon(2,*),
37  & istep,istat,n,key,i,j,k,l,imaterial,iorientation,ipos,
38  & iline,ipol,inl,ipoinp(2,*),inp(3,*),mcs,iaxial,ipoinpc(0:*)
39 !
40  real*8 thicke(mi(3),*),thickness,pi,cs(17,*)
41 !
42  if(istep.eq.0) then
43  write(*,*) '*ERROR reading *CHANGE SOLID SECTION:'
44  write(*,*) ' *CHANGE SOLID SECTION should'
45  write(*,*) ' be placed within a step definition'
46  call exit(201)
47  endif
48 !
49  pi=4.d0*datan(1.d0)
50 !
51  orientation='
52  & '
53  elset='
54  & '
55  ipos=0
56 !
57  do i=2,n
58  if(textpart(i)(1:9).eq.'MATERIAL=') then
59  material=textpart(i)(10:89)
60  elseif(textpart(i)(1:12).eq.'ORIENTATION=') then
61  orientation=textpart(i)(13:92)
62  elseif(textpart(i)(1:6).eq.'ELSET=') then
63  elset=textpart(i)(7:86)
64  elset(81:81)=' '
65  ipos=index(elset,' ')
66  elset(ipos:ipos)='E'
67  else
68  write(*,*) '*WARNING reading *CHANGE SOLID SECTION:'
69  write(*,*) ' parameter not recognized:'
70  write(*,*) ' ',
71  & textpart(i)(1:index(textpart(i),' ')-1)
72  call inputwarning(inpc,ipoinpc,iline,
73  &"*CHANGE SOLID SECTIONQ%")
74  endif
75  enddo
76 !
77 ! check for the existence of the set,the material and orientation
78 !
79  do i=1,nmat
80  if(matname(i).eq.material) exit
81  enddo
82  if(i.gt.nmat) then
83  do i=1,nmat
84  if(matname(i)(1:11).eq.'ANISO_CREEP') then
85  if(matname(i)(12:20).eq.material(1:9)) exit
86  elseif(matname(i)(1:10).eq.'ANISO_PLAS') then
87  if(matname(i)(11:20).eq.material(1:10)) exit
88  endif
89  enddo
90  endif
91  if(i.gt.nmat) then
92  write(*,*)
93  & '*ERROR reading *CHANGE SOLID SECTION: nonexistent material'
94  write(*,*) ' '
95  call inputerror(inpc,ipoinpc,iline,
96  &"*CHANGE SOLID SECTION%")
97  call exit(201)
98  endif
99  imaterial=i
100 !
101  if(orientation.eq.' ') then
102  iorientation=0
103  elseif(nelcon(1,i).eq.2) then
104  write(*,*) '*INFO reading *SOLID SECTION: an orientation'
105  write(*,*) ' is for isotropic materials irrelevant'
106  call inputinfo(inpc,ipoinpc,iline,
107  &"*SOLID SECTION%")
108  iorientation=0
109  else
110  do i=1,norien
111  if(orname(i).eq.orientation) exit
112  enddo
113  if(i.gt.norien) then
114  write(*,*) '*ERROR reading *CHANGE SOLID SECTION:'
115  write(*,*) ' nonexistent orientation'
116  write(*,*) ' '
117  call inputerror(inpc,ipoinpc,iline,
118  &"*CHANGE SOLID SECTION%")
119  call exit(201)
120  endif
121  iorientation=i
122  endif
123 !
124  if(ipos.eq.0) then
125  write(*,*)
126  & '*ERROR reading *CHANGE SOLID SECTION: no element set ',elset
127  write(*,*) ' was been defined. '
128  call inputerror(inpc,ipoinpc,iline,
129  &"*CHANGE SOLID SECTION%")
130  call exit(201)
131  endif
132  do i=1,nset
133  if(set(i).eq.elset) exit
134  enddo
135  if(i.gt.nset) then
136  elset(ipos:ipos)=' '
137  write(*,*) '*ERROR reading *CHANGE SOLID SECTION:'
138  write(*,*) ' element set ',elset
139  write(*,*) ' has not yet been defined. '
140  call inputerror(inpc,ipoinpc,iline,
141  &"*CHANGE SOLID SECTION%")
142  call exit(201)
143  endif
144 !
145 ! assigning the elements of the set the appropriate material
146 ! and orientation number
147 !
148  do j=istartset(i),iendset(i)
149  if(ialset(j).gt.0) then
150  if((lakon(ialset(j))(1:1).eq.'B').or.
151  & (lakon(ialset(j))(1:1).eq.'S')) then
152  write(*,*) '*ERROR reading *CHANGE SOLID SECTION:'
153  write(*,*) ' *CHANGE SOLID SECTION can'
154  write(*,*) ' not be used for beam or shell elements
155  &'
156  write(*,*) ' Faulty element: ',ialset(j)
157  call exit(201)
158  endif
159  ielmat(1,ialset(j))=imaterial
160  if(norien.gt.0) ielorien(1,ialset(j))=iorientation
161  else
162  k=ialset(j-2)
163  do
164  k=k-ialset(j)
165  if(k.ge.ialset(j-1)) exit
166  if((lakon(k)(1:1).eq.'B').or.
167  & (lakon(k)(1:1).eq.'S')) then
168  write(*,*) '*ERROR reading *CHANGE SOLID SECTION:'
169  write(*,*) ' *CHANGE SOLID SECTION can'
170  write(*,*) ' not be used for beam or shell eleme
171  &nts'
172  write(*,*) ' Faulty element: ',k
173  call exit(201)
174  endif
175  ielmat(1,k)=imaterial
176  if(norien.gt.0) ielorien(1,k)=iorientation
177  enddo
178  endif
179  enddo
180 !
181  call getnewline(inpc,textpart,istat,n,key,iline,ipol,inl,
182  & ipoinp,inp,ipoinpc)
183 !
184 ! assigning a thickness to plane stress elements and an angle to
185 ! axisymmetric elements
186 !
187  if(key.eq.0) then
188  write(*,*) '*ERROR reading *CHANGE SOLID SECTION'
189  write(*,*) ' no second line allowed'
190  call inputerror(inpc,ipoinpc,iline,
191  &"*CHANGE SOLID SECTION%")
192  endif
193 !
194  return
subroutine inputwarning(inpc, ipoinpc, iline, text)
Definition: inputwarning.f:20
subroutine inputinfo(inpc, ipoinpc, iline, text)
Definition: inputinfo.f:20
subroutine getnewline(inpc, textpart, istat, n, key, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: getnewline.f:21
subroutine inputerror(inpc, ipoinpc, iline, text)
Definition: inputerror.f:20
subroutine thickness(dgdx, nobject, nodedesiboun, ndesiboun, objectset, xo, yo, zo, x, y, z, nx, ny, nz, co, ifree, ndesia, ndesib, iobject, ndesi, dgdxglob, nk)
Definition: thickness.f:22
Hosted by OpenAircraft.com, (Michigan UAV, LLC)