34 SUBROUTINE law76_upd(IOUT ,TITR ,MAT_ID ,NUPARAM ,MATPARAM ,
35 . UPARAM ,NUMTABL ,ITABLE ,TABLE ,NFUNC ,
46#include "implicit_f.inc"
51 INTEGER IOUT,MAT_ID,NUMTABL,NFUNC,NUPARAM
52 INTEGER ,
DIMENSION(NUMTABL) :: ITABLE
53 INTEGER ,
DIMENSION(NFUNC) :: IFUNC
57 CHARACTER(LEN=NCHARTITLE) :: TITR
58 TYPE(matparam_struct_) ,
TARGET :: MATPARAM
59 TYPE(ttable),
DIMENSION(NTABLE) ,
INTENT(INOUT) ,
TARGET :: TABLE
63 INTEGER :: I,J,NDIM,NPT,NEPSP,FUNC_ID,FUNC_T,FUNC_C,FUNC_S,,ICONV,
64 . NPT_TRAC,NPT_COMP,NPT_SHEAR,NPTMAX,,IFX,IFY,,LEN2
65 my_real :: xfac,epdt_min,epdt_max,epdc_min,epdc_max,epds_min,epds_max,
67 my_real ,
DIMENSION(:) ,
ALLOCATABLE
68 TYPE(table_4d_),
DIMENSION(:) ,
POINTER :: TABLE_MAT
84 IF (table(func_id)%Y%VALUES(1) <= 0)
THEN
85 CALL ancmsg(msgid=2063, msgtype=msgerror, anmode=aninfo_blind_1,
89 ELSE IF (minval(table(func_id)%Y%VALUES) <= zero)
THEN
91 CALL ancmsg(msgid=2049, msgtype=msgwarning, anmode=aninfo_blind_1,
102 ndim = table(func_t)%NDIM
104 npt =
SIZE(table(func_t)%X(1)%VALUES)
105 nepsp =
SIZE(table(func_t)%X(2)%VALUES)
106 epdt_min = table(func_t)%X(2)%VALUES(1)*xfac
107 epdt_max = table(func_t)%X(2)%VALUES(nepsp)*xfac
108 uparam(19) = epdt_min
109 uparam(20) = epdt_max
115 IF (xint > zero .and. yint > zero)
THEN
116 CALL ancmsg(msgid=3010, msgtype=msgwarning, anmode=aninfo,
118 . i2 = table(func_t)%NOTABLE,
120 . r1 = table(func_t)%X(2)%VALUES(i)*xfac,
121 . r2 = table(func_t)%X(2)%VALUES(j)*xfac,
130 ndim = table(func_c)%NDIM
132 npt =
SIZE(table(func_c)%X(1)%VALUES)
133 nepsp =
SIZE(table(func_c)%X(2)%VALUES)
134 epdc_min = table(func_c)%X(2)%VALUES(1)*xfac
135 epdc_max = table(func_c)%X(2)%VALUES(nepsp)*xfac
136 uparam(21) = epdc_min
137 uparam(22) = epdc_max
143 IF (xint > zero .and. yint > zero)
THEN
144 CALL ancmsg(msgid=3010, msgtype=msgwarning, anmode=aninfo,
146 . i2 = table(func_t)%NOTABLE,
148 . r1 = table(func_t)%X(2)%VALUES(i)*xfac,
149 . r2 = table(func_t)%X(2)%VALUES(j)*xfac,
159 ndim = table(func_s)%NDIM
161 npt =
SIZE(table(func_s)%X(1)%VALUES)
162 nepsp =
SIZE(table(func_s)%X(2)%VALUES)
163 epds_min = table(func_s)%X(2)%VALUES(1)*xfac
164 epds_max = table(func_s)%X(2)%VALUES(nepsp)*xfac
165 uparam(23) = epds_min
166 uparam(24) = epds_max
172 IF (xint > zero .and. yint > zero)
THEN
173 CALL ancmsg(msgid=3010, msgtype=msgwarning, anmode=aninfo,
175 . i2 = table(func_t)%NOTABLE,
177 . r1 = table(func_t)%X(2)%VALUES(i)*xfac,
178 . r2 = table(func_t)%X(2)%VALUES(j)*xfac,
189 ALLOCATE (matparam%TABLE(numtabl))
190 table_mat => matparam%TABLE(1:numtabl)
191 table_mat(1:numtabl)%NOTABLE = 0
196 table_mat(1)%NOTABLE = func_t
197 ndim = table(func_t)%NDIM
198 table_mat(1)%NDIM = ndim
199 ALLOCATE (table_mat(1)%X(ndim) ,stat=stat)
202 npt =
SIZE(table(func_t)%X(i)%VALUES)
203 ALLOCATE (table_mat(1)%X(i)%VALUES(npt) ,stat=stat)
204 table_mat(1)%X(i)%VALUES(1:npt) = table(func_t)%X(i)%VALUES(1:npt)
208 npt =
SIZE(table(func_t)%X(1)%VALUES)
209 ALLOCATE (table_mat(1)%Y1D(npt) ,stat=stat)
210 table_mat(1)%Y1D(1:npt) = table(func_t)%Y%VALUES(1:npt)
211 ELSE IF (ndim == 2)
THEN
212 npt =
SIZE(table(func_t)%X(1)%VALUES)
213 len2 =
SIZE(table(func_t)%X(2)%VALUES)
214 ALLOCATE (table_mat(1)%Y2D(npt,len2) ,stat=stat)
217 table_mat(1)%Y2D(i,j) = table(func_t)%Y%VALUES((j-1)*npt
227 table_mat(2)%NOTABLE = func_c
228 ndim = table(func_c)%NDIM
229 table_mat(2)%NDIM = ndim
230 ALLOCATE (table_mat(2)%X(ndim) ,stat=stat)
233 npt =
SIZE(table(func_c)%X(i)%VALUES)
234 ALLOCATE (table_mat(2)%X(i)%VALUES(npt) ,stat=stat)
235 table_mat(2)%X(i)%VALUES(1:npt) = table(func_c)%X(i)%VALUES(1:npt)
240 ALLOCATE (table_mat(2)%Y1D(npt) ,stat=stat)
241 table_mat(2)%Y1D(1:npt) = table(func_c)%Y%VALUES(1:npt)
242 ELSE IF (ndim == 2)
THEN
243 npt =
SIZE(table(func_c)%X(1)%VALUES)
244 len2 =
SIZE(table(func_c)%X(2)%VALUES)
245 ALLOCATE (table_mat(2)%Y2D(npt,len2) ,stat=stat)
248 table_mat(2)%Y2D(i,j) = table(func_c)%Y%VALUES((j-1)*npt+i)
258 table_mat(3)%NOTABLE = func_s
259 ndim = table(func_s)%NDIM
260 table_mat(3)%NDIM = ndim
261 ALLOCATE (table_mat(3)%X(ndim) ,stat=stat)
264 npt =
SIZE(table(func_s)%X(i)%VALUES)
265 ALLOCATE (table_mat(3)%X(i)%VALUES(npt) ,stat=stat)
266 table_mat(3)%X(i)%VALUES(1:npt) = table(func_s)%X(i)%VALUES(1:npt)
270 npt =
SIZE(table(func_s)%X(1)%VALUES)
271 ALLOCATE (table_mat(3)%Y1D(npt) ,stat=stat)
272 table_mat(3)%Y1D(1:npt) = table(func_s)%Y%VALUES(1:npt)
273 ELSE IF (ndim == 2)
THEN
274 npt =
SIZE(table(func_s)%X(1)%VALUES)
275 len2 =
SIZE(table(func_s)%X(2)%VALUES)
276 ALLOCATE (table_mat(3)%Y2D(npt,len2) ,stat=stat)
279 table_mat(3)%Y2D(i,j) = table(func_s)%Y%VALUES((j-1)*npt+i)
288 IF (ifun_nup > 0)
THEN
290 ify = npc(ifun_nup + 1)
292 nup =
max(zero,
min(half, nup))
299 table_mat(2)%NOTABLE = 2
300 table_mat(2)%NDIM = ndim
302 npt_trac =
SIZE(table(func_t )%X(1)%VALUES)
303 npt_shear=
SIZE(table(func_s )%X(1)%VALUES)
304 nptmax = npt_trac+npt_shear
306 ALLOCATE(x_comp(nptmax), stat=stat)
307 ALLOCATE(y_comp(nptmax), stat=stat)
308 x_comp(1:nptmax) = zero
309 y_comp(1:nptmax) = zero
311 CALL func_comp(table_mat,ntable ,nptmax ,npt_trac ,npt_shear ,
312 . npt_comp ,x_comp ,y_comp ,nup )
316 ALLOCATE (table_mat(2)%X(ndim) ,stat=stat)
317 ALLOCATE (table_mat(2)%X(1)%VALUES(npt) ,stat=stat)
318 ALLOCATE (table_mat(2)%Y1D(npt) ,stat=stat)
320 table_mat(2)%X(1)%VALUES(1:npt) = x_comp(1:npt)
321 table_mat(2)%Y1D(1:npt) = y_comp(1:npt)
326 DEALLOCATE(x_comp,y_comp)
342 SUBROUTINE func_comp(TABLE ,NTABLE ,NPTMAX ,NPT_TRAC ,NPT_SHEAR ,
343 . NPT_COMP,X_COMP ,Y_COMP ,NUP )
352#include "implicit_f.inc"
356 INTEGER NTABLE,NPTMAX, NPT_TRAC,NPT_SHEAR,NPT_COMP
357 TYPE(TABLE_4D_),
DIMENSION(NTABLE) :: TABLE
359 my_real ,
DIMENSION(NPTMAX) :: x_comp,y_comp
363 INTEGER I,K,J,NT,,FUNC_TRAC,FUNC_SHEAR
365 my_real XI, XJ , NUM, DEN , ,BETAMIN, SCALE_X_S,
366 . aa,bb,cc,delta,x1,x2,xa,xb,y1,y2,yc1,yc2,nupc,nup1,nup2
367 my_real x_t_shear(npt_shear)
368 my_real ,
DIMENSION(NPTMAX) :: slope_trac,slope_shea,y_t, y_s,
alpha,beta
372 nt = table(func_trac)%NDIM
373 ns = table(func_shear)%NDIM
374 scale_x_s = sqrt(three)/(one+nup)
376 x_t_shear(i) = scale_x_s* table(func_shear)%X(1)%VALUES(i)
382 DO WHILE (i <= npt_trac .OR. j <= npt_shear)
383 IF (i <= npt_trac .AND. j <= npt_shear)
THEN
384 xi = table(func_trac )%X(1)%VALUES(i)
388 y_t(k) = table(func_trac )%Y1D(i)
390 y_s(k) = table(func_shear)%Y1D(1) +
391 . (xi - x_t_shear(1) )*
392 . (table(func_shear)%Y1D(2) - table(func_shear)%Y1D(1))/
393 . (x_t_shear(2)- x_t_shear(1))
395 y_s(k) = table(func_shear)%Y1D(j-1) +
396 . (xi - x_t_shear(j-1) )*
397 . (table(func_shear)%Y1D(j) - table(func_shear)%Y1D(j-1))/
398 . (x_t_shear(j)- x_t_shear(j-1))
402 ELSEIF (xj < xi )
THEN
404 y_s(k) = table(func_shear )%Y1D(j)
406 y_t(k) = table(func_trac)%Y1D(1) +
407 . (xj - table(func_trac)%X(1)%VALUES(1) )*
408 . (table(func_trac)%Y1D(2) - table(func_trac)%Y1D(1))/
409 . (table(func_trac)%X(1)%VALUES(2)- table(func_trac)%X(1)%VALUES(1))
411 y_t(k) = table(func_trac)%Y1D(i-1) +
412 . (xj - table(func_trac)%X(1)%VALUES(i-1) )*
413 . (table(func_trac)%Y1D(i) - table(func_trac)%Y1D(i-1))/
414 . (table(func_trac)%X(1)%VALUES(i)- table(func_trac)%X(1)%VALUES(i-1))
419 ELSEIF (xi == xj )
THEN
421 y_t(k) = table(func_trac )%Y1D(i)
422 y_s(k) = table(func_shear )%Y1D(j)
427 ELSEIF (i > npt_trac .AND. j <= npt_shear)
THEN
430 y_s(k) = table(func_shear )%Y1D(j)
431 y_t(k) = table(func_trac)%Y1D(i-2) +
432 . (xj - table(func_trac)%X(1)%VALUES(i-2) )*
433 . (table(func_trac)%Y1D(i-1) - table(func_trac)%Y1D(i-2))/
434 . (table(func_trac)%X(1)%VALUES(i-1)- table(func_trac)%X(1)%VALUES(i-2))
437 ELSEIF (i <= npt_trac .AND. j > npt_shear)
THEN
438 xi=table(func_trac )%X(1)%VALUES(i)
440 y_t(k) = table(func_trac )%Y1D(i)
441 y_s(k) = table(func_shear)%Y1D(j-2) +
442 . (xi - x_t_shear(j-2) )*
443 . (table(func_shear)%Y1D(j-1) - table(func_shear)%Y1D(j-2))/
444 . (x_t_shear(j-1)- x_t_shear(j-2))
455 slope_trac(k) = (y_t(k)-y_t(k-1)) / (x_comp(k)-x_comp(k-1))
456 slope_shea(k) = (y_s(k)-y_s(k-1)) / (x_comp(k)-x_comp(k-1))
457 IF( slope_trac(k)>zero .AND. slope_shea(k)>zero)
THEN
458 alpha(k) = sqrt(three)*half *(slope_trac(k)/slope_shea(k)) * (y_s(k)/y_t(k))**2
463 num = sqrt(three) *alphamax *y_t(k)*y_s(k)
464 den = two * alphamax * y_t(k) - sqrt(three) * y_s(k)
465 y_comp(k) = num /
max(em20, den)
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)