44
45
46
47 USE visc_param_mod
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "units_c.inc"
61
62
63
64 INTEGER ,INTENT(IN) :: IVISC
65 INTEGER ,INTENT(IN) :: NTABLE
66 INTEGER ,INTENT(IN) :: MAT_ID
67 TYPE (VISC_PARAM_) ,INTENT(INOUT) :: VISC
68 TYPE (UNIT_TYPE_) ,INTENT(IN) :: UNITAB
69 TYPE (SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
70 TYPE (TTABLE) ,INTENT(INOUT) :: TABLE(NTABLE)
71
72
73
74 INTEGER :: I,NUPARAM,NIPARAM,NPRONY,NUVAR,IMOD,ITAB,ISHAPE,
75 . FctID_G,FctID_K,FctID_Gs,FctID_Ks,FctID_Gl,FctID_Kl
76 my_real :: g(100),beta(100),k(100),betak(100)
77 my_real :: kv,costfg,costfk,derivg,derivk,ginfini,kinfini,
78 . xgscale,xkscale,xgscale_unit,xkscale_unit,
79 . ygscale,ykscale,ygscale_unit,ykscale_unit,
80 . xgs_scale,ygs_scale,xgs_scale_unit,ygs_scale_unit,
81 . xgl_scale,ygl_scale,xgl_scale_unit,ygl_scale_unit,
82 . xks_scale,yks_scale,xks_scale_unit,yks_scale_unit,
83 . xkl_scale,ykl_scale,xkl_scale_unit,ykl_scale_unit
84
85 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
86
87 is_encrypted = .false.
88 is_available = .false.
89
91
92 visc%ILAW = ivisc
93
94
95 g(1:100) = zero
96 beta(1:100) = zero
97 k(1:100) = zero
98 betak(1:100) = zero
99
100
101
102
103 CALL hm_get_intv (
'Model_Order' ,nprony ,is_available,lsubmodel)
104 CALL hm_get_floatv (
'MAT_K' ,kv ,is_available,lsubmodel,unitab)
105 CALL hm_get_intv (
'MAT_Itab' ,itab ,is_available,lsubmodel)
106 IF (itab > 2) itab = 0
107 CALL hm_get_intv (
'MAT_Ishape' ,ishape ,is_available,lsubmodel)
108
109 IF (nprony == 0)
CALL ancmsg(msgid=2026,msgtype=msgerror,
110 . anmode=aninfo_blind_1,i1=mat_id)
111
112 IF (ishape > 1) ishape = 0
113
114
115
116
117
118
119 IF (itab == 1) THEN
120
121
122
123 CALL hm_get_intv (
'Fct_G' ,fctid_g,is_available,lsubmodel)
124 CALL hm_get_floatv (
'XGscale',xgscale,is_available,lsubmodel,unitab)
125 IF (xgscale == zero) THEN
127 xgscale = one * xgscale_unit
128 ENDIF
129 CALL hm_get_floatv (
'YGscale',ygscale ,is_available,lsubmodel,unitab)
130 IF (ygscale == zero) THEN
132 ygscale = one * ygscale_unit
133 ENDIF
134
135
136
137 CALL hm_get_intv (
'Fct_K' ,fctid_k,is_available,lsubmodel)
138 CALL hm_get_floatv (
'XKscale',xkscale,is_available,lsubmodel,unitab)
139 IF (xkscale == zero) THEN
141 xkscale = one * xkscale_unit
142 ENDIF
143 CALL hm_get_floatv (
'YKscale',ykscale ,is_available,lsubmodel,unitab)
144 IF (ykscale == zero) THEN
146 ykscale = one * ykscale_unit
147 ENDIF
148
149
150
151 IF ((fctid_g > 0).AND.(nprony > 0)) THEN
153 . g ,beta ,costfg ,derivg ,ishape ,ginfini )
154 ENDIF
155 IF ((fctid_k > 0).AND.(kv == zero).AND.(nprony > 0)) THEN
157 . k ,betak ,costfk ,derivk ,ishape ,kinfini )
158 ENDIF
159
160 ELSEIF (itab == 2) THEN
161
162
163
164 CALL hm_get_intv (
'Fct_Gs' ,fctid_gs ,is_available,lsubmodel)
165 CALL hm_get_floatv (
'XGs_scale' ,xgs_scale ,is_available,lsubmodel,unitab)
166 IF (xgs_scale == zero) THEN
167 CALL hm_get_floatv_dim(
'XGs_scale',xgs_scale_unit,is_available, lsubmodel, unitab)
168 xgs_scale = one * xgs_scale_unit
169 ENDIF
170 CALL hm_get_floatv (
'YGs_scale' ,ygs_scale ,is_available,lsubmodel,unitab)
171 IF (ygs_scale == zero) THEN
172 CALL hm_get_floatv_dim(
'YGs_scale',ygs_scale_unit,is_available, lsubmodel, unitab
173 ygs_scale = one * ygs_scale_unit
174 ENDIF
175
176
177
178 CALL hm_get_intv (
'Fct_Gl' ,fctid_gl ,is_available,lsubmodel)
179 CALL hm_get_floatv (
'XGl_scale' ,xgl_scale ,is_available,lsubmodel,unitab)
180 IF (xgl_scale == zero) THEN
181 CALL hm_get_floatv_dim(
'XGl_scale',xgl_scale_unit,is_available, lsubmodel, unitab)
182 xgl_scale = one * xgl_scale_unit
183 ENDIF
184 CALL hm_get_floatv (
'YGl_scale' ,ygl_scale ,is_available,lsubmodel,unitab)
185 IF (ygl_scale == zero) THEN
186 CALL hm_get_floatv_dim(
'YGl_scale',ygl_scale_unit,is_available, lsubmodel, unitab)
187 ygl_scale = one * ygl_scale_unit
188 ENDIF
189
190
191
192 CALL hm_get_intv (
'Fct_Ks' ,fctid_ks ,is_available,lsubmodel)
193 CALL hm_get_floatv (
'XKs_scale' ,xks_scale ,is_available,lsubmodel,unitab)
194 IF (xks_scale == zero) THEN
195 CALL hm_get_floatv_dim(
'XKs_scale',xks_scale_unit,is_available, lsubmodel, unitab)
196 xks_scale = one * xks_scale_unit
197 ENDIF
198 CALL hm_get_floatv (
'YKs_scale' ,yks_scale ,is_available,lsubmodel,unitab)
199 IF (yks_scale == zero) THEN
200 CALL hm_get_floatv_dim(
'YKs_scale',yks_scale_unit,is_available, lsubmodel, unitab)
201 yks_scale = one * yks_scale_unit
202 ENDIF
203
204
205
206 CALL hm_get_intv (
'Fct_Kl' ,fctid_kl ,is_available,lsubmodel)
207 CALL hm_get_floatv (
'XKl_scale' ,xkl_scale ,is_available,lsubmodel,unitab)
208 IF (xkl_scale == zero) THEN
209 CALL hm_get_floatv_dim(
'XKl_scale',xkl_scale_unit,is_available, lsubmodel, unitab)
210 xkl_scale = one * xkl_scale_unit
211 ENDIF
212 CALL hm_get_floatv (
'YKl_scale' ,ykl_scale ,is_available,lsubmodel,unitab)
213 IF (ykl_scale == zero) THEN
214 CALL hm_get_floatv_dim(
'YKl_scale',ykl_scale_unit,is_available, lsubmodel, unitab)
215 ykl_scale = one * ykl_scale_unit
216 ENDIF
217
218
219
220 IF ((fctid_gs > 0).AND.(fctid_gl > 0).AND.(nprony > 0)) THEN
222 . fctid_gl ,xgl_scale,ygl_scale,g ,beta ,costfg ,
223 . derivg ,ishape ,ginfini )
224 ENDIF
225 IF ((fctid_ks > 0).AND.(fctid_kl > 0).AND.(nprony > 0).AND.(kv == zero)) THEN
227 . fctid_kl ,xkl_scale,ykl_scale,k ,betak ,costfk ,
228 . derivk ,ishape ,kinfini )
229 ENDIF
230
231
232
233
234 ELSE
235 ishape = 0
236 IF(nprony > 0) THEN
237 DO i=1,nprony
242 ENDDO
243 ENDIF
244 ENDIF
245
246
247 IF ((itab /= 0) .AND. (ishape == 1)) THEN
248 nprony = nprony + 1
249 ENDIF
250
251
252
253
254 nuvar = 7*nprony
255 niparam = 2
256 nuparam = 4*nprony + 1
257 ALLOCATE (visc%UPARAM(nuparam))
258 ALLOCATE (visc%IPARAM(niparam))
259 visc%NUVAR = nuvar
260 visc%NUPARAM = nuparam
261 visc%NIPARAM = niparam
262
263 imod = 0
264 visc%UPARAM(1) = kv
265 DO i=1,nprony
266 visc%UPARAM(1 + i) = g(i)
267 visc%UPARAM(1 + nprony + i) = beta(i)
268 visc%UPARAM(1 + 2*nprony + i) = k(i)
269 visc%UPARAM(1 + 3*nprony + i) = betak(i)
270 IF (k(i) > zero) imod = 1
271 ENDDO
272 visc%IPARAM(1) = nprony
273 visc%IPARAM(2) = imod
274
275
276
277 IF (is_encrypted)THEN
278 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
279 ELSE
280
281 IF(nprony > 0) THEN
282 WRITE(iout,1000)
283 IF(imod == 0) THEN
284 WRITE(iout,1100) kv,nprony-ishape
285 IF (itab > 0) THEN
286 WRITE(iout,1500) itab,ishape
287 IF (ishape == 1) WRITE(iout,3000) ginfini
288 IF (itab == 1) THEN
289 WRITE(iout,1600) fctid_g,xgscale,ygscale,costfg,derivg
290 ELSEIF (itab == 2) THEN
291 WRITE(iout,2000) fctid_gs,xgs_scale,ygs_scale,
292 . fctid_gl,xgl_scale,ygl_scale,
293 . costfg,derivg
294 ENDIF
295 ENDIF
296 DO i=1,nprony-ishape
297 WRITE(iout,1150) i
298 WRITE(iout,1200) g(i+ishape),beta(i+ishape)
299 ENDDO
300 ELSE
301 WRITE(iout,1300) nprony-ishape
302 IF (itab > 0) THEN
303 WRITE(iout,1500) itab,ishape
304 IF (itab == 1) THEN
305 IF (ishape == 1) WRITE(iout,3000) ginfini
306 WRITE(iout,1600) fctid_g,xgscale,ygscale,costfg,derivg
307 IF (ishape == 1) WRITE(iout,3500) kinfini
308 WRITE(iout,1800) fctid_k,xkscale,ykscale,costfk,derivk
309 ELSEIF (itab == 2) THEN
310 IF (ishape == 1) WRITE(iout,3000) ginfini
311 WRITE(iout,2000) fctid_gs,xgs_scale,ygs_scale,
312 . fctid_gl,xgl_scale,ygl_scale,
313 . costfg,derivg
314 IF (ishape == 1) WRITE(iout,3500) kinfini
315 WRITE(iout,2500) fctid_ks,xks_scale,yks_scale,
316 . fctid_kl,xkl_scale,ykl_scale,
317 . costfk,derivk
318 ENDIF
319 ENDIF
320 DO i=1,nprony-ishape
321 WRITE(iout,1150) i
322 WRITE(iout,1200) g(i+ishape),beta(i+ishape)
323 WRITE(iout,1400) k(i+ishape),betak(i+ishape)
324 ENDDO
325 ENDIF
326 ENDIF
327 ENDIF
328
329 1000 FORMAT(
330 & 5x,' PRONY SERIES MODEL :' ,/,
331 & 5x,' --------------------- ' ,/)
332 1100 FORMAT(
333 & 5x,'BULK MODULUS FOR VISCO ELASTIC MATERIAL . . . . . . . . . . . . . . . =',1pg20.13/
334 & 5x,'ORDER OF PRONY SERIES . . . . . . . . . . . . . . . . . . . . . . . . =',i10/)
335 1150 FORMAT(
336 & 5x,' ----------------------------------------------------------------------'/
337 & 5x,' PARAMETERS FOR PRONY FUNCTION NUMBER #',i10/
338 & 5x,' ----------------------------------------------------------------------'/)
339 1200 FORMAT(
340 & 5x,'SHEAR RELAXATION G MODULUS . . . . . . . . . . . . . . . . . . . . . = '1pg20.13/
341 & 5x,'BETA DECAY SHEAR MODULUS . . . . . . . . . . . . . . . . . . . . . . =',1pg20.13)
342 1300 FORMAT(
343 & 5x,'ORDER OF PRONY SERIES . . . . . . . . . . . . . . . . . . . . . . . . =',i10//)
344 1400 FORMAT(
345 & 5x,'BULK RELAXATION K MODULUS . . . . . . . . . . . . . . . . . . . . . . = '1pg20.13/
346 & 5x,'BETAK DECAY BULK MODULUS . . . . . . . . . . . . . . . . . . . . . . =',1pg20.13//)
347 1500 FORMAT(
348 & 5x,'TABULATED PRONY SERIES FLAG . . . . . . . . . . . . . . . . . . . . .=',i10/
349 & 5x,' ITAB=1 FITTING FROM MODULUS VS TIME CURVES'/
350 & 5x,' ITAB=2 FITTING FROM STORAGE AND LOSS MODULI VS FREQUENCY CURVES'/
351 & 5x,'SHAPE PRONY SERIES FLAG . . . . . . . . . . . . . . . . . . . . . . .=',i10/
352 & 5x,' ISHAPE=0 WITHOUT INFINITE MODULUS (DEFAULT)'/
353 & 5x,' ISHAPE=1 WITH INFINITE MODULUS'/)
354 1600 FORMAT(
355 & 5x,'LEAST SQUARE FITTING FROM SHEAR MODULUS G FUNCTION ID. . . . . . . . .= 'i10/
356 & 5x,'TIME SCALE FACTOR FOR SHEAR MODULUS . . . . . . . . . . . . . . . . .= '1pg20.13/
357 & 5x,'SCALE FACTOR FOR SHEAR MODULUS . . . . . . . . . . . . . . . . . . . .= '1pg20.13/
358 & 5x,'FINAL COST FUNCTION VALUE . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/
359 & 5x,'FINAL DERIVATIVE VALUE . . . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/)
360 1800 FORMAT(
361 & 5x,'LEAST SQUARE FITTING FROM BULK MODULUS K FUNCTION ID . . . . . . . . .= 'i10/
362 & 5x,'TIME SCALE FACTOR FOR BULK MODULUS . . . . . . . . . . . . . . . . . .= '1pg20.13/
363 & 5x,'SCALE FACTOR FOR BULK MODULUS . . . . . . . . . . . . . . . . . . . .= '1pg20.13/
364 & 5x,'FINAL COST FUNCTION VALUE . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/
365 & 5x,'FINAL DERIVATIVE VALUE . . . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/)
366 2000 FORMAT(
367 & 5x,'LEAST SQUARE FITTING FROM STORAGE SHEAR MODULUS GL FUNCTION ID . . . .= 'i10/
368 & 5x,'FREQUENCY SCALE FACTOR FOR STORAGE SHEAR MODULUS . . . . . . . . . . .= '1pg20.13/
369 & 5x,'SCALE FACTOR FOR STORAGE SHEAR MODULUS . . . . . . . . . . . . . . . .= '1pg20.13/
370 & 5x,'LEAST SQUARE FITTING FROM LOSS SHEAR MODULUS GS FUNCTION ID . . . . .= 'i10/
371 & 5x,'FREQUENCY SCALE FACTOR FOR LOSS SHEAR MODULUS . . . . . . . . . . . .= '1pg20.13/
372 & 5x,'SCALE FACTOR FOR LOSS SHEAR MODULUS FUNCTION . . . . . . . . . . . . .= '1pg20.13/
373 & 5x,'FINAL COST FUNCTION VALUE . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/
374 & 5x,'FINAL DERIVATIVE VALUE . . . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/)
375 2500 FORMAT(
376 & 5x,'LEAST SQUARE FITTING FROM STORAGE BULK MODULUS KL FUNCTION ID . . . .= 'i10/
377 & 5x,'FREQUENCY SCALE FACTOR FOR STORAGE BULK MODULUS . . . . . . . . . . .= '1pg20.13/
378 & 5x,'SCALE FACTOR FOR STORAGE BULK MODULUS . . . . . . . . . . . . . . . .= '1pg20.13/
379 & 5x,'LEAST SQUARE FITTING FROM LOSS BULK MODULUS GS FUNCTION ID . . . . . .= 'i10/
380 & 5x,'FREQUENCY SCALE FACTOR FOR LOSS BULK MODULUS . . . . . . . . . . . . .= '1pg20.13/
381 & 5x,'SCALE FACTOR FOR LOSS BULK MODULUS FUNCTION . . . . . . . . . . . . .= '1pg20.13/
382 & 5x,'FINAL COST FUNCTION VALUE . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/
383 & 5x,'FINAL DERIVATIVE VALUE . . . . . . . . . . . . . . . . . . . . . . . .= '1pg20.13/)
384 3000 FORMAT(
385 & 5x,'SHEAR MODULUS INFINITE VALUE GINF . . . . . . . . . . . . . . . . . .= '1pg20.13/)
386 3500 FORMAT(
387 & 5x,'BULK MODULUS INFINITE VALUE KINF . . . . . . . . . . . . . . . . . . .= '1pg20.13/)
388
389 RETURN
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine lm_least_square_prony(mat_id, nprony, table, fct_id, xgscale, ygscale, g, beta, cost, deriv, ishape, ginfini)
subroutine lm_least_square_prony_2(mat_id, nprony, table, fct_ids, xgs_scale, ygs_scale, fct_idl, xgl_scale, ygl_scale, g, beta, cost, deriv, ishape, ginfini)
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)