OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
sigeps102.F File Reference
#include "implicit_f.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine sigeps102 (nel, nuparam, uparam, rho0, rho, depsxx, depsyy, depszz, depsxy, depsyz, depszx, sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx, signxx, signyy, signzz, signxy, signyz, signzx, off, psh, pnew, dpdm, ssp, pla, pmin)

Function/Subroutine Documentation

◆ sigeps102()

subroutine sigeps102 ( integer, intent(in) nel,
integer, intent(in) nuparam,
dimension(nuparam), intent(in) uparam,
dimension(nel) rho0,
dimension(nel) rho,
dimension(nel) depsxx,
dimension(nel) depsyy,
dimension(nel) depszz,
dimension(nel) depsxy,
dimension(nel) depsyz,
dimension(nel) depszx,
dimension(nel) sigoxx,
dimension(nel) sigoyy,
dimension(nel) sigozz,
dimension(nel) sigoxy,
dimension(nel) sigoyz,
dimension(nel) sigozx,
dimension(nel) signxx,
dimension(nel) signyy,
dimension(nel) signzz,
dimension(nel) signxy,
dimension(nel) signyz,
dimension(nel) signzx,
dimension(nel) off,
dimension(nel) psh,
dimension(nel) pnew,
dimension(nel) dpdm,
dimension(nel) ssp,
dimension(nel) pla,
intent(in) pmin )

Definition at line 28 of file sigeps102.F.

35C-----------------------------------------------
36C I M P L I C I T T Y P E S
37C-----------------------------------------------
38#include "implicit_f.inc"
39C----------------------------------------------------------------
40C I N P U T A R G U M E N T S
41C----------------------------------------------------------------
42 INTEGER,INTENT(IN) :: NEL,NUPARAM
43 my_real,INTENT(IN) :: uparam(nuparam)
44 my_real,INTENT(IN),DIMENSION(NEL) :: rho, rho0
45 my_real,INTENT(IN),DIMENSION(NEL) :: depsxx, depsyy, depszz, depsxy, depsyz, depszx
46 my_real,INTENT(IN),DIMENSION(NEL) :: sigoxx, sigoyy, sigozz, sigoxy, sigoyz, sigozx
47 my_real,INTENT(INOUT),DIMENSION(NEL) :: signxx, signyy, signzz, signxy, signyz, signzx
48 my_real,INTENT(IN),DIMENSION(NEL) :: pnew, psh
49 my_real,INTENT(IN),DIMENSION(NEL) :: off
50 my_real,INTENT(IN) :: pmin
51 my_real,INTENT(INOUT),DIMENSION(NEL) :: ssp, dpdm, pla
52C----------------------------------------------------------------
53C L O C A L V A R I B L E S
54C----------------------------------------------------------------
55 my_real :: a0,a1,a2,amax
56 my_real :: pold(nel)
57 my_real :: t1(nel),t2(nel),t3(nel),t4(nel),t5(nel),t6(nel)
58 my_real :: ptot,g0(nel),ratio(nel),yield2(nel)
59 my_real :: pstar,g,gg,scrt(nel),aj2(nel),dpla(nel)
60 my_real :: i3(nel),cos3t(nel),sqrt_j2,theta,c,phi,k
61 my_real :: mu(nel),mu2(nel)
62 integer :: I,IFORM
63C----------------------------------------------------------------
64C S o u r c e L i n e s
65C----------------------------------------------------------------
66 c = uparam(1)
67 phi = uparam(2)
68 pstar = uparam(3)
69 a0 = uparam(4)
70 a1 = uparam(5)
71 a2 = uparam(6)
72 amax = uparam(7)
73 g = uparam(8)
74 gg = two*g
75 iform = nint(uparam(9))
76 !----------------------------------------------------------------!
77 ! INIT. !
78 !----------------------------------------------------------------!
79 DO i=1,nel
80 pold(i) = -(sigoxx(i)+sigoyy(i)+sigozz(i))*third
81 scrt(i) = (depsxx(i)+depsyy(i)+depszz(i))*third
82 mu(i) = rho(i)/rho0(i) - one
83 mu2(i) = mu(i) * max(zero,mu(i))
84 ENDDO !next I
85 !----------------------------------------------------------------!
86 ! DEVIATORIC STRESS TENSOR : T(1:6) !
87 !----------------------------------------------------------------!
88 DO i=1,nel
89 t1(i)=sigoxx(i)+pold(i)+gg*(depsxx(i)-scrt(i))
90 t2(i)=sigoyy(i)+pold(i)+gg*(depsyy(i)-scrt(i))
91 t3(i)=sigozz(i)+pold(i)+gg*(depszz(i)-scrt(i))
92 t4(i)=sigoxy(i) + g*depsxy(i)
93 t5(i)=sigoyz(i) + g*depsyz(i)
94 t6(i)=sigozx(i) + g*depszx(i)
95 ENDDO !next I
96 !----------------------------------------------------------------!
97 ! SOUND SPEED (EOS + SHEAR) !
98 !----------------------------------------------------------------!
99 DO i=1,nel
100 dpdm(i) = dpdm(i) + onep333*g
101 ssp(i) = sqrt(abs(dpdm(i))/rho0(i))
102 ENDDO !next I
103 !----------------------------------------------------------------!
104 ! YIELD SURFACE !
105 !----------------------------------------------------------------!
106 DO i=1,nel
107 aj2(i)= half*(t1(i)**2+t2(i)**2+t3(i)**2)+t4(i)**2+t5(i)**2+t6(i)**2
108 ENDDO
109 !----SUBCASE --- ORIGINAL MOHR COULOMB
110 IF(iform==4)THEN
111 k = one/sqrt(three)
112 DO i=1,nel
113 i3(i) = t2(i)*t3(i)*t1(i)-t2(i)*t6(i)*t6(i)-t3(i)*t4(i)*t4(i)-t5(i)*t5(i)*t1(i)+2*t5(i)*t4(i)*t6(i)
114 sqrt_j2 = sqrt(aj2(i))
115 cos3t(i) = nine*i3(i)/two/sqrt(three)/sqrt_j2/sqrt_j2/sqrt_j2
116 theta = acos(max(zero,min(one,cos3t(i))))
117 ptot = pnew(i)+psh(i)
118 g0(i) = -ptot*sin(phi)+sqrt_j2*(cos(theta)-k*sin(theta)*sin(phi))-c*cos(phi)
119 g0(i) = max(zero,g0(i))
120 IF(ptot <= pmin) g0(i) = zero !Drucker-Prager cut-off
121 yield2(i)= aj2(i)-g0(i)
122 ENDDO
123 !----SUBCASE --- FITTED DRUCKER PRAGER FROM MOHR COULOMB PARAMETERS (A0,A1,A2 CALCULATED DURING STARTER)
124 ELSE
125 DO i=1,nel
126 ptot = pnew(i)+psh(i)
127 g0(i) = a0 +a1 *ptot+a2 *ptot*ptot
128 g0(i) = min(amax,g0(i))
129 g0(i) = max(zero,g0(i))
130 IF(ptot <= pmin) g0(i) = zero !Drucker-Prager cut-off
131 IF(ptot <= pstar)g0(i)=zero !tensile cut-off (PSTAR is the root of the yield function)
132 yield2(i)=aj2(i)-g0(i)
133 ENDDO !next I
134 ENDIF
135
136 !----------------------------------------------------------------!
137 ! PROJECTION FACTOR ON YIELD SURFACE !
138 !----------------------------------------------------------------!
139 DO i=1,nel
140 ratio(i)=zero
141 IF(yield2(i)<=zero .AND. g0(i)>zero)THEN
142 ratio(i)=one
143 ELSE
144 ratio(i)=sqrt(g0(i)/(aj2(i)+ em14))
145 ENDIF
146 ENDDO !next I
147 !----------------------------------------------------------------!
148 ! UPDATE DEVIATORIC STRESS TENSOR IN SIG(:,:) !
149 !----------------------------------------------------------------!
150 DO i=1,nel
151 signxx(i)=ratio(i)*t1(i)*off(i) - pnew(i)
152 signyy(i)=ratio(i)*t2(i)*off(i) - pnew(i)
153 signzz(i)=ratio(i)*t3(i)*off(i) - pnew(i)
154 signxy(i)=ratio(i)*t4(i)*off(i)
155 signyz(i)=ratio(i)*t5(i)*off(i)
156 signzx(i)=ratio(i)*t6(i)*off(i)
157 dpla(i) =(one -ratio(i))*sqrt(aj2(i)) / max(em20,three*g)
158 ENDDO !next I
159 pla(1:nel) = pla(1:nel) + dpla(1:nel)
160c-----------
161 RETURN
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21