40
41
42
45 USE sensor_mod
46 USE matparam_def_mod
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "param_c.inc"
56#include "tabsiz_c.inc"
57
58
59
60 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
61 INTEGER ,INTENT(IN) :: MAT_ID,NFUNC,NFUNL
62 INTEGER ,DIMENSION(NFUNC) ,INTENT(IN) :: FUNC_ID
63 INTEGER ,DIMENSION(NFUNC+NFUNL) ,INTENT(INOUT) :: IFUNC
64 INTEGER ,DIMENSION(SNPC) ,INTENT(IN) :: NPC
65 my_real ,
DIMENSION(STF) ,
INTENT(IN) :: pld
66 my_real ,
DIMENSION(NPROPM) ,
INTENT(OUT) :: pm
67 TYPE (SENSORS_) ,INTENT(IN) :: SENSORS
68 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MAT_PARAM
69
70
71
72 INTEGER I,K,FUNC,FUND,UNLOAD,PN,IOK,ISENS,SENS_ID
73 my_real kc,kt,kcmax,ktmax,kfc,kft,gmax,deri,stiff,stiffmin,stiffini,
74 . stiffmax,stiffavg,xint1,yint1,xint2,yint2,fac,fac1,fac2,gfrot,gsh
75
76
77
78
79 IF (nfunl > 0) THEN
81 ENDIF
82
83
84
85
86 sens_id = mat_param%IPARAM(2)
87 isens = 0
88 IF (sens_id > 0 ) THEN
89 DO i=1,sensors%NSENSOR
90 IF (sens_id == sensors%SENSOR_TAB(i)%SENS_ID) THEN
91 isens = i
92 EXIT
93 END IF
94 ENDDO
95 IF (isens == 0) THEN
96 CALL ancmsg(msgid=1240,anmode=aninfo,msgtype=msgwarning,
97 . i1=mat_id,c1=titr,i2=isens)
98 END IF
99 ENDIF
100 mat_param%IPARAM(2) = isens
101
102 kc = zero
103 kt = zero
104 kfc = zero
105 kft = zero
106 kcmax= zero
107 ktmax= zero
108 gmax = zero
109
110
111
112 func = ifunc(1)
113 IF (func > 0 ) THEN
114
115 fac = mat_param%UPARAM(28)
116 CALL func_slope(func,fac,npc,pld,stiffmin,stiffmax,stiffini,stiffavg)
117
118 IF (stiffmin <= zero) THEN
120 . msgtype=msgerror,
121 . anmode=aninfo_blind_2,
122 . i1=mat_id,
123 . i2=func_id(ifunc(1)),
124 . c1=titr)
125 ENDIF
126 kc =
max(kc ,stiffmax)
127 kfc =
max(kfc,stiffini)
128 kcmax = kc
129 mat_param%UPARAM(40) = stiffini
130
131 ENDIF
132
133
134
135 func = ifunc(2)
136 IF (func > 0 ) THEN
137 fac = mat_param%UPARAM(29)
138 CALL func_slope(func,fac,npc,pld,stiffmin,stiffmax,stiffini,stiffavg)
139
140 IF (stiffmin <= zero) THEN
142 . msgtype=msgerror,
143 . anmode=aninfo_blind_2,
144 . i1=mat_id,
145 . i2=func_id(ifunc(2)),
146 . c1=titr)
147 ENDIF
148 kt =
max(kt ,stiffmax)
149 kft =
max(kft,stiffini)
150 ktmax = kt
151 mat_param%UPARAM(41) = stiffini
152 ENDIF
153
154
155
156 func = ifunc(3)
157 IF (func > 0 ) THEN
158 fac = mat_param%UPARAM(30)
159 CALL func_slope(func,fac,npc,pld,stiffmin,stiffmax,stiffini,stiffavg)
160
161 IF (stiffmin <= zero) THEN
163 . msgtype=msgerror,
164 . anmode=aninfo_blind_2,
165 . i1=mat_id,
166 . i2=func_id(ifunc(3)),
167 . c1=titr)
168 ENDIF
169 gmax =
max(gmax,stiffmax)
170 gfrot = stiffini
171 gsh = stiffini
172 IF (mat_param%UPARAM(21) == zero) mat_param%UPARAM(21) = gfrot
173 IF (mat_param%UPARAM(32) == zero) mat_param%UPARAM(32) = gsh
174
175 ENDIF
176
177 unload = mat_param%IPARAM(1)
178
179 IF (unload == 1) THEN
180
181
182
183
184 func = ifunc(4)
185 IF (func > 0 )THEN
186 fac = mat_param%UPARAM(33)
187 CALL func_slope(func,fac,npc,pld,stiffmin,stiffmax,stiffini,stiffavg)
188 kcmax =
max(kcmax,stiffmax)
189
190 IF (stiffmin <= zero) THEN
192 . msgtype=msgerror,
193 . anmode=aninfo_blind_2,
194 . i1=mat_id,
195 . i2=func_id(ifunc(4)),
196 . c1=titr)
197 ENDIF
198 ENDIF
199
200
201
202 func = ifunc(5)
203 IF (func > 0 )THEN
204 fac = mat_param%UPARAM(34)
205 CALL func_slope(func,fac,npc,pld,stiffmin,stiffmax,stiffini,stiffavg)
206 ktmax =
max(ktmax,stiffmax)
207
208 IF (stiffmin <= zero) THEN
210 . msgtype=msgerror,
211 . anmode=aninfo_blind_2,
212 . i1=mat_id,
213 . i2=func_id(ifunc(5)),
214 . c1=titr)
215 ENDIF
216 ENDIF
217
218
219
220 func = ifunc(6)
221 IF (func > 0 )THEN
222 fac = mat_param%UPARAM(42)
223 CALL func_slope(func,fac,npc,pld,stiffmin,stiffmax,stiffini,stiffavg)
224 gmax =
max(gmax,stiffmax)
225
226 IF (stiffmin <= zero) THEN
228 . msgtype=msgerror,
229 . anmode=aninfo_blind_2,
230 . i1=mat_id,
231 . i2=func_id(ifunc(6)),
232 . c1=titr)
233 ENDIF
234 ENDIF
235
236
237
238 func = ifunc(1)
239 fund = ifunc(4)
240
241 IF (func == 0) THEN
242 mat_param%UPARAM(36) = infinity
243 mat_param%UPARAM(37) = infinity
244 ELSEIF (func == fund) THEN
245 pn = npc(func+1)
246 mat_param%UPARAM(36) = pld(pn - 2)
247 mat_param%UPARAM(37) = pld(pn - 1)
248 ELSE
249 fac1 = mat_param%UPARAM(28)
250 fac2 = mat_param%UPARAM(33)
252 . fac2 ,npc ,pld ,xint1 ,yint1 )
253 IF (xint1 == zero .or. yint1 == zero) THEN
254 CALL ancmsg(msgid=1716 ,msgtype=msgerror,anmode=aninfo_blind_2,
255 . i1 = mat_id,
256 . i2 = func_id(func),
257 . i3 = func_id(fund),
258 . c1 = titr )
259 ENDIF
260 mat_param%UPARAM(36) = xint1
261 mat_param%UPARAM(37) = yint1
262 ENDIF
263
264
265
266 func = ifunc(2)
267 fund = ifunc(5)
268
269 IF (func == 0) THEN
270 mat_param%UPARAM(38) = infinity
271 mat_param%UPARAM(39) = infinity
272 ELSEIF (func == fund) THEN
273 pn = npc(func+1)
274 mat_param%UPARAM(38) = pld(pn - 2)
275 mat_param%UPARAM(39) = pld(pn - 1)
276 ELSE
277 fac1 = mat_param%UPARAM(29)
278 fac2 = mat_param%UPARAM(34)
280 . fac2 ,npc ,pld ,xint2 ,yint2 )
281 IF (xint1 == zero .or. yint1 == zero) THEN
282 CALL ancmsg(msgid=1716 ,msgtype=msgerror,anmode=aninfo_blind_2,
283 . i1 = mat_id,
284 . i2 = func_id(func),
285 . i3 = func_id(fund),
286 . c1 = titr )
287 ENDIF
288 mat_param%UPARAM(38) = xint2
289 mat_param%UPARAM(39) = yint2
290 ENDIF
291
292
293
294 func = ifunc(3)
295 fund = ifunc(6)
296
297 IF (func /= fund) THEN
298 fac1 = mat_param%UPARAM(30)
299 fac2 = mat_param%UPARAM(42)
301 . titr ,mat_id ,func ,fund ,fac1 ,fac2 ,
302 . npc ,pld ,xint1 ,yint1 ,xint2 ,yint2 )
303
304 IF ((xint1 == zero .or. yint1 == zero .or.
305 . xint2 == zero .or. yint2 == zero) .or.
306 . xint1 * xint2 > 0) THEN
307 CALL ancmsg(msgid=1716 ,msgtype=msgerror,anmode=aninfo_blind_2
308 . i1 = mat_id,
309 . i2 = func_id(func),
310 . i3 = func_id(fund),
311 . c1 = titr )
312 ENDIF
313
314 mat_param%UPARAM(43) = xint1
315 mat_param%UPARAM(44) = yint1
316 mat_param%UPARAM(45) = xint2
317 mat_param%UPARAM(46) = yint2
318 ELSEIF (func > 0) THEN
319 pn = npc(func)
320 mat_param%UPARAM(43) = pld(pn)
321 mat_param%UPARAM(44) = pld(pn+1)
322 pn = npc(func+1)
323 mat_param%UPARAM(45) = pld(pn - 2)
324 mat_param%UPARAM(46) = pld(pn - 1)
325 ENDIF
326
327 ENDIF
328
329 IF (kcmax > 0 ) kcmax = kcmax * two
330 IF (ktmax > 0 ) ktmax = ktmax * two
331 IF (gmax > 0 ) gmax = gmax * two
332 kcmax =
max(mat_param%UPARAM(9) , kcmax)
333 ktmax =
max(mat_param%UPARAM(10), ktmax)
334 gmax =
max(mat_param%UPARAM(14), gmax)
335 kcmax =
max(mat_param%UPARAM(9) , kcmax)
336 ktmax =
max(mat_param%UPARAM(10), ktmax)
337 gmax =
max(mat_param%UPARAM(14), gmax)
338 mat_param%UPARAM(9) = kcmax
339 mat_param%UPARAM(10) = ktmax
340 mat_param%UPARAM(14) = gmax
341
342 stiff =
max(kcmax,ktmax)
343
344 pm(20) = stiff
345 pm(21) = zero
346 pm(22) = stiff*half
347 pm(24) = stiff
348
349 stiffavg =
max(kc,kt)
350 IF ( stiffavg > zero) pm(23) = em01*stiffavg
351
352 RETURN
subroutine func_inters(titr, mat_id, func1, func2, fac1, fac2, npc, pld, xint, yint)
subroutine func_inters_shear(titr, mat_id, func, fund, fac1, fac2, npc, pld, xint1, yint1, xint2, yint2)
subroutine func_slope(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
subroutine matfun_usr2sys(titr, mat_id, nfunc, ifunc, func_id)
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)