56#include "implicit_f.inc"
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)
74 INTEGER :: I,NUPARAM,NIPARAM,NPRONY,NUVAR,IFLAG,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
85 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87 is_encrypted = .false.
88 is_available = .false.
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
109 IF (nprony == 0)
CALL ancmsg(msgid=2026,msgtype=msgerror,
110 . anmode=aninfo_blind_1,i1=mat_id)
112 IF (ishape > 1) ishape = 0
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
129 CALL hm_get_floatv (
'YGscale',ygscale ,is_available,lsubmodel,unitab)
130 IF (ygscale == zero)
THEN
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
143 CALL hm_get_floatv (
'YKscale',ykscale ,is_available,lsubmodel,unitab)
144 IF (ykscale == zero)
THEN
146 ykscale = one * ykscale_unit
151 IF ((fctid_g > 0).AND.(nprony > 0))
THEN
153 . g ,beta ,costfg ,derivg ,ishape ,ginfini )
155 IF ((fctid_k > 0).AND.(kv == zero).AND.(nprony > 0))
THEN
157 . k ,betak ,costfk ,derivk ,ishape ,kinfini )
160 ELSEIF (itab == 2)
THEN
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
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
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
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
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
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
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
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
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 )
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 )
247 IF ((itab /= 0) .AND. (ishape == 1))
THEN
256 nuparam = 4*nprony + 1
257 ALLOCATE (visc%UPARAM(nuparam))
258 ALLOCATE (visc%IPARAM(niparam))
260 visc%NUPARAM = nuparam
261 visc%NIPARAM = niparam
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
272 visc%IPARAM(1) = nprony
273 visc%IPARAM(2) = imod
277 IF (is_encrypted)
THEN
278 WRITE(iout,
'(5X,A,//)')'confidential data
'
284 WRITE(IOUT,1100) KV,NPRONY-ISHAPE
286 WRITE(IOUT,1500) ITAB,ISHAPE
287 IF (ISHAPE == 1) WRITE(IOUT,3000) GINFINI
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,
298 WRITE(IOUT,1200) G(I+ISHAPE),BETA(I+ISHAPE)
301 WRITE(IOUT,1300) NPRONY-ISHAPE
303 WRITE(IOUT,1500) ITAB,ISHAPE
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,
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,
322 WRITE(IOUT,1200) G(I+ISHAPE),BETA(I+ISHAPE)
323 WRITE(IOUT,1400) K(I+ISHAPE),BETAK(I+ISHAPE)
330 & 5X,' prony series model :
' ,/,
331 & 5X,' ---------------------
' ,/)
333 & 5X,'bulk modulus
for visco elastic material . . . . . . . . . . . . . . . =
',1PG20.13/
334 & 5X,'order of prony series . . . . . . . . . . . . . . . . . . . . . . . . =
',I10/)
336 & 5X,' ----------------------------------------------------------------------
'/
337 & 5X,' parameters
for prony
FUNCTION number #
',I10/
338 & 5X,' ----------------------------------------------------------------------
'/)
340 & 5X,'shear relaxation g modulus . . . . . . . . . . . . . . . . . . . . . =
'1PG20.13/
341 & 5X,'beta decay shear modulus . . . . . . . . . . . . . . . . . . . . . . =
',1PG20.13)
343 & 5X,'order of prony series . . . . . . . . . . . . . . . . . . . . . . . . =
',I10//)
345 & 5X,'bulk relaxation k modulus . . . . . . . . . . . . . . . . . . . . . . =
'1PG20.13/
346 & 5X,'betak decay bulk modulus . . . . . . . . . . . . . . . . . . . . . . =
',1PG20.13//)
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
'/)
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/)
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/)
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/)
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
'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/)
385 & 5X,'shear modulus infinite value ginf . . . . . . . . . . . . . . . . . .=
'1PG20.13/)
387 & 5X,'bulk modulus infinite value kinf . . . . . . . . . . . . . . . . . . .=
'1PG20.13/)