Sei sulla pagina 1di 6

subroutine strain_calc (node,etaJ1,psij1,zeta1,LISTELE,nele,nnodes,displacement_

u,element,da,GWeight)
INTEGER, DIMENSION(:,:), ALLOCATABLE :: PATCH
Integer m,No_Elem_patch,CENTRE_NODE,SCPOINT(5),NO_Patch,TT,D_f,WW,p,il,kk,a,ll,i
,j,k,e,ii,jj,L,nnodes,nele,element(nele,4),n(4),LISTELE(nele),ELEMN(nnodes,nele)
real GWeight(15),da(6,6),displacement_u(3*nnodes),node(nnodes,3)
real disp_x(4),disp_y(4),disp_z(4),displacement_elem(3,4),etaJ1(15),psij1(15),ze
ta1(15)
real PSIJ,etaj,zeta,xx(nnodes),yy(nnodes),zz(nnodes),xe(4),ye(4),ze(4),COORD(3,4
),dNdxi(4,3),dNdxi_2(3,4),dxdxi(3,3),ad(3,3),jcob,Jacinv(3,3),dNd_x(4,3)
real Bj(6,3,4),NJdxdy(3,4),NJXY(12),sn(4),strainx,strainy,strainz,strainxy,strai
nyz,strainzx,Strain_Final(6),stress(nnodes,3)
real DNDzeta(4),DNDPSI(4),DNDETA(4),strain_e(6)
real pratio,E1,E_mod,Ke(12,12),dvol, mu,nu,C(3,3,3,3),X_stress(nele),y_stress(ne
le),z_stress(nele),stress_x(nnodes),stress_y(nnodes),stress_z(nnodes),z_strain(n
ele),z_strain1(nnodes)
real AQ(4,4),XSUM,YSUM,ZSUM,QQ(1,4),Trial_stress(nele,4),Stress_new1(3,4),Stress
_new(12),disp(12),stress1(3,3),strain1(3,3)
REAL temp_vec(4),strain_e1(3,3),dtm,devol,NJdpsieta(3,4),GWeight2(1,15),SN2(1,4)
,counter(nnodes),xg,dt(nnodes),st(nnodes,6),BDX(4),BDY(4),BDZ(4),SOLNX(4),SOLNY(
4),SOLNZ(4),STRESSN(3),QQ1(4)
integer Ref_elemz,temp_elem(4),var1
integer xx1(4),yy1(4),zz1(4),ux(4),uy(4),uz(4)
open(444,file='stress.dat')
open(445,file='stress1.dat')
!open(446,file='stress2.dat')
dxdxi=0.0
dNd_x=0.0
stress=0.0
st=0.0
xx=node(:,1)
yy=node(:,2)
zz=node(:,3)
counter=0.0
pratio=0.2
E_mod=10
mu=2.7
nu=0.2
D_f=3
NO_Patch=0.0
!do i = 1,3
!
do j = 1,3
!
do k = 1,3
!
do l = 1,3
!
if (i==j.and.k==l) then
!
C(i,j,k,l)=C(i,j,k,l) + 2.*mu*nu/(1.-2.*nu);
!
endif
!
if (i==k .and.j==l)then
!
C(i,j,k,l)=C(i,j,k,l) + mu;
!
endif
!
if (i==l.and. j==k)then
!
C(i,j,k,l)=C(i,j,k,l) + mu;

!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!

endif
enddo
enddo
enddo
enddo
PSIJ1(1)=0
PSIJ1(2)=0
PSIJ1(3)=0
PSIJ1(4)=1
ETAJ1(1)=1
ETAJ1(2)=0
ETAJ1(3)=0
ETAJ1(4)=0
ZETA1(1)=0
ZETA1(2)=1
ZETA1(3)=0
ZETA1(4)=0

L=0.0
do i=1,nnodes
do j=1,nele
do k=1,4
If((ELEMENT(j,k).EQ.i)) THEN
L=L+1
ELEMN(i,1)= L ! ELEMN(i,1)+1
ELEMN(i,L+1)= j
END IF
END DO
END DO
!if (L==4) then
!end if
L=0
END DO
print*,NO_Patch
L=0
ALLOCATE(PATCH(NO_Patch,nele))
Do J=1,TOTAL_NODE ! GENERATION OF LIST OF PATCHES AND CORRESPONDING ELEMENTS
IF ( ELEMN(J,1)== 4) THEN ! 4 IMPLIES THE NODE SELCTED IS A CORNER NODE
L=L+1
PATCH(L,1)= J
PATCH(L,2:5)= ELEMN(J,2:5)
END IF

END DO
DO i=1,NO_PATCH
Aq=0
Bdx=0
Bdy=0
Bdz=0
! BOUND_NODES_PATCH= 0
! COUNT_BNODE=0
CENTRE_NODE=PATCH(i,1) !centre node of the patch
NO_ELEM_PATCH= L !PATCH(i,3) ! number of elements in a patch
!!! SUPERCONVERGENT POINT ALLOCATION
SCPOINT(1)= CENTRE_NODE
SCPOINT(2)=element(patch(i,2),2)
SCPOINT(3)=element(patch(i,3),3)
SCPOINT(4)=element(patch(i,4),1)
SCPOINT(5)=element(patch(i,5),4)
Do z=1,No_Elem_patch
Ref_elemz=Patch(i,z+1)
temp_elem=element( Ref_elemz,:)
var1 =Ref_elemz
Do m=1,4
xe(m)=-xx(CENTRE_NODE)+ xx(Element(var1,m))
ux(m)=displacement_u( 3*Element(var1,m) -2)! -displacement(2*CENTRE_NO
DE -1)
uy(m)=displacement_u( 3*Element(var1,m)-1) ! -displacement(2*CENTRE_NO
DE )
uz(m)=displacement_u( 3*Element(var1,m)) ! -displacement(2*CENTRE_NODE
)
ye(m)=- yy(CENTRE_NODE)+yy(Element(var1,m))
ze(m)=- zz(CENTRE_NODE)+zz(Element(var1,m))
END DO ! End loop for m
COORD(1,1)= xe(1)
COORD(1,2)= xe(2)
COORD(1,3)=
xe(3)
COORD(1,4)=
xe(4)
COORD(2,1)=
ye(1)
COORD(2,2)= ye(2)
COORD(2,3)=

ye(3)

COORD(2,4)= ye(4)
COORD(3,1)=
COORD(3,2)=

ze(1)
ze(2)

COORD(3,3)= ze(3)
COORD(3,4)=

ze(4)

do r=1,15
PSIJ=PSIJ1(r)
ETAJ=ETAJ1(r)
ZETA=ZETA1(r)
SN(1)=
SN(2)=
SN(3)=
SN(4)=

1-PSIJ-ETAJ-ZETA
PSIJ
ETAJ
ZETA

! DEFINING DERIVATIVES OF SHAPE FUNCTIONS FOR QUAD ELEMENTS


dNdxi(1,1) = -1
dNdxi(1,2) = -1
dNdxi(1,3) = -1
dNdxi(2,1) = 1
dNdxi(3,2) = 1
dNdxi(4,3) = 1
dNdxi_2=TRANSPOSE(dNdxi)
!**********************
dxdxi = 0.
do ii = 1,3
do jj = 1,3
do a = 1,4
dxdxi(ii,jj) = dxdxi(ii,jj) + coord(ii,a)*dNdxi(a,jj)
enddo
enddo
enddo
!**************************************
! Adjoint to jacobian ***********************
ad(1,1)
ad(1,2)
ad(1,3)
ad(2,1)
ad(2,2)
ad(2,3)
ad(3,1)
ad(3,2)
ad(3,3)

=
=
=
=
=
=
=
=
=

dxdxi(2,2)*dxdxi(3,3)-dxdxi(2,3)*dxdxi(3,2)
dxdxi(1,3)*dxdxi(3,2)-dxdxi(1,2)*dxdxi(3,3)
dxdxi(1,2)*dxdxi(2,3)-dxdxi(1,3)*dxdxi(2,2)
dxdxi(2,3)*dxdxi(3,1)-dxdxi(2,1)*dxdxi(3,3)
dxdxi(1,1)*dxdxi(3,3)-dxdxi(1,3)*dxdxi(3,1)
dxdxi(1,3)*dxdxi(2,1)-dxdxi(1,1)*dxdxi(2,3)
dxdxi(2,1)*dxdxi(3,2)-dxdxi(2,2)*dxdxi(3,1)
dxdxi(1,2)*dxdxi(3,1)-dxdxi(1,1)*dxdxi(3,2)
dxdxi(1,1)*dxdxi(2,2)-dxdxi(1,2)*dxdxi(2,1)

! determinant of jacobian
jcob = dxdxi(1,1)*ad(1,1)+dxdxi(1,2)*ad(2,1)+dxdxi(1,3)*ad(3,1)
dtm = dxdxi(1,1)*(dxdxi(2,2)*dxdxi(3,3)-dxdxi(3,2)*dxdxi(2,3)) &
- dxdxi(1,2)*(dxdxi(2,1)*dxdxi(3,3)-dxdxi(2,3)*dxdxi(3,1)) &
+ dxdxi(1,3)*(dxdxi(2,1)*dxdxi(3,2)-dxdxi(3,1)*dxdxi(2,2))
!jacobian inverse
do ii = 1,3

do jj = 1,3
Jacinv(ii,jj) = ad(ii,jj)/jcob
end do
end do
dNd_x = 0.0
do a = 1,4
do ii = 1,3
do j = 1,3
dNd_x(a,ii) = dNd_x(a,ii) + dNdxi(a,j)*Jacinv(j,ii)
enddo
enddo
enddo
NJdxdy=transpose(dNd_x)
strain_e(1)= DOT_Product(ux,dNdxi_2(1,:))
strain_e(2)= DOT_Product(uy,dNdxi_2(2,:))
strain_e(3)= DOT_Product(uz,dNdxi_2(3,:))
strain_e(4)= DOT_Product(ux,dNdxi_2(2,:))+DOT_Product(uy,dNdxi_2(1,:))
strain_e(5)= DOT_Product(uy,dNdxi_2(3,:))+DOT_Product(uz,dNdxi_2(2,:))
strain_e(6)= DOT_Product(uz,dNdxi_2(1,:))+DOT_Product(ux,dNdxi_2(3,:))
Xsum=DOT_PRODUCT(SN,Xe)
Ysum=DOT_PRODUCT(SN,Ye)
Zsum=DOT_PRODUCT(SN,ze)
QQ=reshape((/1.0,Xsum,Ysum,zsum/),(/1,4/))
Aq=Aq+matmul(transpose(QQ),QQ)
Do ww=1,4
Bdx(ww)=bdx(ww) +QQ(1,ww)*Dot_product(Da(1,:), strain_e)
Bdy(ww)=bdy(ww) +QQ(1,ww)*Dot_product(Da(2,:), strain_e)
Bdz(ww)=bdz(ww) +QQ(1,ww)*Dot_product(Da(3,:),strain_e)
end do
End do
End do

!! TOTAL VALUE OF Aq,Bdx,Bdy FOR EACH ELEMENT ENDS HERE

End do ! TOTAL VALUE OF Aq,Bdx,Bdy FOR A PATCH ENDS HERE


CALL
CALL
CALL
DO

DLSLRG
DLSLRG
DLSLRG
II=1,5

(4, Aq, 4, bdx, 1, solnx)


(4, Aq, 4, bdy, 1, solny)
(4, Aq, 4, bdxdy, 1, solnz)
! FIVE SUPER CONVERGENT POINTS

COUNTER(SCPOINT(II))= COUNTER(SCPOINT(II)) + 1

TEMPX= -xx(SCPOINT(1))+xx(SCPOINT(II)) ! THIS IS FOR CENTERING OF NODES


TEMPY= -yy(SCPOINT(1))+yy(SCPOINT(II)) ! THIS IS FOR CENTERING OF NODES

TEMPz= -zz(SCPOINT(1))+zz(SCPOINT(II))
STRESSN=0.0
temp_vec=

reshape((/1.0,tempx,tempy,tempz/),(/4/))

STRESSN(1)=DOT_PRODUCT( temp_vec,SOLNX)
STRESSN(2)=DOT_PRODUCT( temp_vec,SOLNY)
STRESSN(3)=DOT_PRODUCT( temp_vec,SOLNz)
STRESS(SCPOINT(II),1)=( STRESSN(1) +STRESS(SCPOINT(II),1) )
STRESS(SCPOINT(II),2)=( STRESSN(2) +STRESS(SCPOINT(II),2))
STRESS(SCPOINT(II),3)=( STRESSN(3) +STRESS(SCPOINT(II),3))

END DO ! 5 CONVERGENT POINT LOOP FINISHES

do i=1,nnodes
write(444,*)node(i,1),node(i,2),node(i,3),stress(i,3)/(counter(i)*6895*1E-10)
enddo
close(444)

Return
End

Potrebbero piacerti anche