40 . ELBUF_TAB,SKIN_SCALAR, IPARG ,IXS ,X ,PM ,
41 4 IPARTS ,IGEO ,IXS10 ,IXS16 , IXS20 ,
42 5 IS_WRITTEN_SKIN ,H3D_PART,INFO1 ,KEYWORD ,NSKIN ,
43 6 IAD_ELEM ,FR_ELEM , WEIGHT , TAG_SKINS6,
52 use element_mod ,
only : nixs
56#include "implicit_f.inc"
68 . skin_scalar(*),pm(npropm,*), x(3,*),tf(*)
69 INTEGER IPARG(NPARG,*),
70 . IXS(NIXS,*),IPARTS(*),
71 . IXS10(6,*) ,IXS16(8,*) ,IXS20(12,*) ,
72 . igeo(npropgi,*),is_written_skin(*),npf(*),
73 . h3d_part(*),info1,nskin,tag_skins6(*),iad_elem(2,*),fr_elem(*),weight(*)
74 TYPE (ELBUF_STRUCT_),
DIMENSION(NGROUP),
TARGET :: ELBUF_TAB
75 CHARACTER(LEN=NCHARLINE100)::KEYWORD
76 TYPE (MATPARAM_STRUCT_) ,
DIMENSION(NUMMAT) ,
INTENT(IN) :: MAT_PARAM
83 INTEGER,
DIMENSION(:),
ALLOCATABLE :: ITAGPS,TAG_SKIN_ND
85 . ,
DIMENSION(:,:),
ALLOCATABLE :: aflu, vflu,t6gps
86 INTEGER FACES(4,6),NS,K1,PWR(7),LL
87 DATA pwr/1,2,4,8,16,32,64/
96 ALLOCATE(aflu(3,numnod),vflu(3,numnod),t6gps(6,numnod))
97 ALLOCATE(itagps(numnod),tag_skin_nd(numnod))
107 IF(mod(ll,pwr(jj+1))/pwr(jj) /= 0)cycle
109 ns=ixs(faces(k1,jj)+1,i)
114 IF (keyword ==
'FLDZ/OUTER' .OR. keyword ==
'FLDF/OUTER')
THEN
116 . ixs ,ixs10 ,ixs16 ,ixs20 ,x ,
117 . itagps ,pm ,tag_skin_nd )
119 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
127 IF (itagps(n)>0) t6gps(1:3,n)=vflu(1:3,n)/itagps(n)
131 IF (itagps(n)>0) t6gps(4:6,n)=half*aflu(1:3,n)/itagps(n)
136 . skin_scalar,tag_skins6,t6gps,x ,
137 . npf,tf,h3d_part,is_written_skin,
138 . keyword,nskin,mat_param)
140 DEALLOCATE(aflu,vflu,t6gps,itagps,tag_skin_nd)
153 1 NEL ,NUPARAM ,NFUNC ,IFUNC ,
154 2 NPF ,TF ,UPARAM ,EPS3 ,FLD_IDX ,
155 3 NIPARAM ,IPARAM ,PLA )
161#include "implicit_f.inc"
178 INTEGER,
INTENT(IN) :: NEL,NUPARAM,NFUNC,NIPARAM
179 INTEGER ,
DIMENSION(NFUNC) :: IFUNC
180 INTEGER,
DIMENSION(NIPARAM),
INTENT(IN) :: IPARAM
181 my_real ,
DIMENSION(3,NEL),
INTENT(IN) :: EPS3
182 my_real,
DIMENSION(NUPARAM) :: UPARAM
183 my_real ,
DIMENSION(NEL),
INTENT(IN) :: PLA
187 my_real ,
DIMENSION(NEL),
INTENT(INOUT) :: fld_idx
192 my_real FINTER , FINTERFLD ,TF(*)
204 INTEGER :: I,II,IENG,LENF,IMARGIN
205 my_real :: RANI,R1,R2,S1,S2,SS,Q,DYDX,E12,FACT_MARGIN,FACT_LOOSEMETAL
206 my_real ,
ALLOCATABLE,
DIMENSION(:) :: XF
207 my_real ,
DIMENSION(NEL) :: EMAJ,EMIN,EM,BETA
211 FACT_MARGIN = uparam(1)
213 fact_loosemetal = uparam(4)
223 s1 = half*(eps3(1,i) + eps3(2,i))
224 s2 = half*(eps3(1,i) - eps3(2,i))
225 q = sqrt(s2**2 + e12**2)
228 IF (emin(i) >= emaj(i))
THEN
233 beta(i) = emin(i)/
max(emaj(i),em20)
242 lenf = npf(ifunc(1)+ 1) - npf(ifunc(1))
245 xf(i) = log(tf(ii + i-1) + one)
249 em(i) = finterfld(emin(i),lenf,xf)
257 em(i) = finter(ifunc(1),emin(i),npf,tf,dydx)
260 ELSEIF (ieng == 2)
THEN
262 em(i) = finter(ifunc(1),beta(i),npf,tf,dydx)
274 IF (imargin == 3)
THEN
276 IF (emaj(i) >= em(i))
THEN
278 ELSEIF (emaj(i) >= em(i)*(one - fact_margin))
THEN
280 ELSEIF (emaj(i)**2 + emin(i)**2 < r1**2)
THEN
282 ELSEIF (emaj(i) >= abs(emin(i)))
THEN
284 ELSEIF (emaj(i) >= r2*abs(emin(i)))
THEN
292 IF (emaj(i) >= em(i))
THEN
294 ELSEIF (emaj(i) >= em(i) - fact_margin)
THEN
296 ELSEIF (emaj(i)**2 + emin(i)**2 < r1**2)
THEN
298 ELSEIF (emaj(i) >= abs(emin(i)))
THEN
300 ELSEIF (emaj(i) >= r2*abs(emin(i)))
THEN
308 IF (imargin == 3)
THEN
310 IF (pla(i) >= em(i))
THEN
312 ELSEIF (pla(i) >= em(i)*(one - fact_margin))
THEN
314 ELSEIF (pla(i)**2 + beta(i)**2 < r1**2)
THEN
316 ELSEIF (pla(i) >= abs(beta(i)))
THEN
318 ELSEIF (pla(i) >= r2*abs(beta(i)))
THEN
326 IF (pla(i) >= em(i))
THEN
328 ELSEIF (pla(i) >= em(i) - fact_margin)
THEN
330 ELSEIF (pla(i)**2 + beta(i)**2 < r1**2)
THEN
332 ELSEIF (pla(i) >= abs(beta(i)))
THEN
334 ELSEIF (pla(i) >= r2*abs(beta(i)))
THEN
354 1 NEL ,NUPARAM ,NFUNC ,IFUNC ,
355 2 NPF ,TF ,UPARAM ,EPS3 ,DAM,
356 3 NIPARAM ,IPARAM ,PLA )
362#include "implicit_f.inc"
382 INTEGER,
INTENT(IN) :: NEL,NUPARAM,,NIPARAM
383 INTEGER ,
DIMENSION(NFUNC) :: IFUNC
384 INTEGER,
DIMENSION(NIPARAM),
INTENT(IN) :: IPARAM
385 my_real ,
DIMENSION(3,NEL),
INTENT(IN) :: EPS3
386 my_real,
DIMENSION(NUPARAM) :: UPARAM
387 my_real ,
DIMENSION(NEL),
INTENT(IN) :: PLA
391 my_real ,
DIMENSION(NEL),
INTENT(OUT) :: DAM
396 my_real finter , finterfld ,tf(*)
408 INTEGER :: I,II,IENG,LENF,IMARGIN
409 my_real :: RANI,S1,S2,SS,Q,DYDX,E12,FACT_MARGIN,FACT_LOOSEMETAL
410 my_real ,
ALLOCATABLE,
DIMENSION(:) :: XF
411 my_real ,
DIMENSION(NEL) :: EMAJ,EMIN,EM,BETA
415 FACT_MARGIN = uparam(1)
417 fact_loosemetal = uparam(4)
427 s1 = half*(eps3(1,i) + eps3(2,i))
428 s2 = half*(eps3(1,i) - eps3(2,i))
429 q = sqrt(s2**2 + e12**2)
432 IF (emin(i) >= emaj(i))
THEN
437 beta(i) = emin(i)/
max(emaj(i),em20)
443 ! -> engineering strains input
446 lenf = npf(ifunc(1)+ 1) - npf(ifunc(1))
449 xf(i) = log(tf(ii + i-1) + one)
453 em(i) = finterfld(emin(i),lenf,xf)
454 dam(i) = emaj(i) / em(i)
463 em(i) = finter(ifunc(1),emin(i),npf,tf,dydx)
464 dam(i) = emaj(i) / em(i)
467 ELSEIF (ieng == 2)
THEN
469 em(i) = finter(ifunc(1),beta(i),npf,tf,dydx)
470 dam(i) = pla(i) / em(i)
subroutine h3d_sol_skin_scalar1(elbuf_tab, iparg, iparts, ixs, ixs10, skin_scalar, tag_skins6, t6gps, x, npf, tf, h3d_part, is_written_skin, keyword, nskin, mat_param)
subroutine h3d_sol_skin_scalar(elbuf_tab, skin_scalar, iparg, ixs, x, pm, iparts, igeo, ixs10, ixs16, ixs20, is_written_skin, h3d_part, info1, keyword, nskin, iad_elem, fr_elem, weight, tag_skins6, npf, tf, mat_param)