117860365SKenneth E. Jansen 217860365SKenneth E. Jansen subroutine timeseries(ycl, xl, ien, sgn) 317860365SKenneth E. Jansen 4*0d32f9a8SKenneth E. Jansen use timedataC 517860365SKenneth E. Jansen include "common.h" 617860365SKenneth E. Jansen 717860365SKenneth E. Jansen dimension shape(nshl), ycl(npro,nshl,ndofl), 817860365SKenneth E. Jansen & ien(npro,nshl), xl(npro,nenl,nsd), 917860365SKenneth E. Jansen & sgn(npro,nshl) 1017860365SKenneth E. Jansen real*8 al(npro,nenl,nsd), 1117860365SKenneth E. Jansen & zi0(npro,nsd), detaij(npro), dzi0(npro,nsd), 1217860365SKenneth E. Jansen & m11(npro), m12(npro), m13(npro), m21(npro), m22(npro), 1317860365SKenneth E. Jansen & m23(npro), m31(npro), m32(npro), m33(npro), 1417860365SKenneth E. Jansen & r1(npro), r2(npro), r3(npro), shgradl(nshl,nsd) 1517860365SKenneth E. Jansen 1617860365SKenneth E. Jansen real*8 xts1, xts2, xts3 1717860365SKenneth E. Jansen real*8 soln(ndof) 1817860365SKenneth E. Jansen integer e, founde 1917860365SKenneth E. Jansen 2017860365SKenneth E. Jansen do jj = 1, ntspts 2117860365SKenneth E. Jansen founde = 0 2217860365SKenneth E. Jansen if(statptts(jj,1).gt.0) then 2317860365SKenneth E. Jansen if(statptts(jj,1).eq.iblkts) then 2417860365SKenneth E. Jansen if(lcsyst.eq.2) then ! hex 2517860365SKenneth E. Jansen call shphex (ipord, parptts(jj,:),shape(:), 2617860365SKenneth E. Jansen & shgradl(:,:)) 2717860365SKenneth E. Jansen elseif(lcsyst.eq.1) then 2817860365SKenneth E. Jansen call shptet (ipord, parptts(jj,:),shape(:), 2917860365SKenneth E. Jansen & shgradl(:,:)) 3017860365SKenneth E. Jansen endif 3117860365SKenneth E. Jansen founde=statptts(jj,2) 3217860365SKenneth E. Jansen endif 3317860365SKenneth E. Jansen else 3417860365SKenneth E. Jansen xts1 = ptts(jj,1) 3517860365SKenneth E. Jansen xts2 = ptts(jj,2) 3617860365SKenneth E. Jansen xts3 = ptts(jj,3) 3717860365SKenneth E. Jansen 3817860365SKenneth E. Jansen if(lcsyst.eq.2) then ! hex 3917860365SKenneth E. Jansen 4017860365SKenneth E. Jansen call get_a_not_hex(xl,al) ! get mapping poly. coeff. 4117860365SKenneth E. Jansen 4217860365SKenneth E. Jansenc... get initial guess for Newton Iteration procedure 4317860365SKenneth E. Jansen 4417860365SKenneth E. Jansen detaij(:) = -al(:,2,1)*al(:,3,2)*al(:,4,3) + 4517860365SKenneth E. Jansen & al(:,2,1)*al(:,4,2)*al(:,3,3) + al(:,2,2)* 4617860365SKenneth E. Jansen & al(:,3,1)*al(:,4,3) - al(:,2,2)*al(:,4,1)* 4717860365SKenneth E. Jansen & al(:,3,3) - al(:,2,3)*al(:,3,1)*al(:,4,2)+ 4817860365SKenneth E. Jansen & al(:,2,3)*al(:,4,1)*al(:,3,2) 4917860365SKenneth E. Jansen 5017860365SKenneth E. Jansen detaij = 1./detaij 5117860365SKenneth E. Jansen 5217860365SKenneth E. Jansen zi0(:,1) = detaij(:)*((al(:,4,2)*al(:,3,3) 5317860365SKenneth E. Jansen & - al(:,3,2)*al(:,4,3))*(xts1-al(:,1,1)) + 5417860365SKenneth E. Jansen & (al(:,3,1)*al(:,4,3) 5517860365SKenneth E. Jansen & - al(:,4,1)*al(:,3,3))*(xts2-al(:,1,2)) + 5617860365SKenneth E. Jansen & (al(:,4,1)*al(:,3,2) 5717860365SKenneth E. Jansen & - al(:,3,1)*al(:,4,2))*(xts3-al(:,1,3))) 5817860365SKenneth E. Jansen 5917860365SKenneth E. Jansen 6017860365SKenneth E. Jansen zi0(:,2) = detaij(:)*((al(:,2,2)*al(:,4,3) 6117860365SKenneth E. Jansen & - al(:,4,2)*al(:,2,3))*(xts1-al(:,1,1)) + 6217860365SKenneth E. Jansen & (al(:,4,1)*al(:,2,3) 6317860365SKenneth E. Jansen & - al(:,2,1)*al(:,4,3))*(xts2-al(:,1,2)) + 6417860365SKenneth E. Jansen & (al(:,2,1)*al(:,4,2) 6517860365SKenneth E. Jansen & - al(:,4,1)*al(:,2,2))*(xts3-al(:,1,3))) 6617860365SKenneth E. Jansen 6717860365SKenneth E. Jansen zi0(:,3) = detaij(:)*((al(:,3,2)*al(:,2,3) 6817860365SKenneth E. Jansen & - al(:,2,2)*al(:,3,3))*(xts1-al(:,1,1)) + 6917860365SKenneth E. Jansen & (al(:,2,1)*al(:,3,3) 7017860365SKenneth E. Jansen & - al(:,3,1)*al(:,2,3))*(xts2-al(:,1,2)) + 7117860365SKenneth E. Jansen & (al(:,3,1)*al(:,2,2) 7217860365SKenneth E. Jansen & - al(:,2,1)*al(:,3,2))*(xts3-al(:,1,3))) 7317860365SKenneth E. Jansen 7417860365SKenneth E. Jansen 7517860365SKenneth E. Jansenc... iterate to convergence 7617860365SKenneth E. Jansen 7717860365SKenneth E. Jansen do it = 1, iterat 7817860365SKenneth E. Jansen 7917860365SKenneth E. Jansenc... build matrix 8017860365SKenneth E. Jansen 8117860365SKenneth E. Jansen m11(:)=al(:,2,1)+al(:,5,1)*zi0(:,2)+al(:,7,1)*zi0(:,3) 8217860365SKenneth E. Jansen & +al(:,8,1)*zi0(:,2)*zi0(:,3) 8317860365SKenneth E. Jansen m12(:)=al(:,3,1)+al(:,5,1)*zi0(:,1)+al(:,6,1)*zi0(:,3) 8417860365SKenneth E. Jansen & +al(:,8,1)*zi0(:,1)*zi0(:,3) 8517860365SKenneth E. Jansen m13(:)=al(:,4,1)+al(:,6,1)*zi0(:,2)+al(:,7,1)*zi0(:,1) 8617860365SKenneth E. Jansen & +al(:,8,1)*zi0(:,1)*zi0(:,2) 8717860365SKenneth E. Jansen 8817860365SKenneth E. Jansen m21(:)=al(:,2,2)+al(:,5,2)*zi0(:,2)+al(:,7,2)*zi0(:,3) 8917860365SKenneth E. Jansen & +al(:,8,2)*zi0(:,2)*zi0(:,3) 9017860365SKenneth E. Jansen m22(:)=al(:,3,2)+al(:,5,2)*zi0(:,1)+al(:,6,2)*zi0(:,3) 9117860365SKenneth E. Jansen & +al(:,8,2)*zi0(:,1)*zi0(:,3) 9217860365SKenneth E. Jansen m23(:)=al(:,4,2)+al(:,6,2)*zi0(:,2)+al(:,7,2)*zi0(:,1) 9317860365SKenneth E. Jansen & +al(:,8,2)*zi0(:,1)*zi0(:,2) 9417860365SKenneth E. Jansen 9517860365SKenneth E. Jansen m31(:)=al(:,2,3)+al(:,5,3)*zi0(:,2)+al(:,7,3)*zi0(:,3) 9617860365SKenneth E. Jansen & +al(:,8,3)*zi0(:,2)*zi0(:,3) 9717860365SKenneth E. Jansen m32(:)=al(:,3,3)+al(:,5,3)*zi0(:,1)+al(:,6,3)*zi0(:,3) 9817860365SKenneth E. Jansen & +al(:,8,3)*zi0(:,1)*zi0(:,3) 9917860365SKenneth E. Jansen m33(:)=al(:,4,3)+al(:,6,3)*zi0(:,2)+al(:,7,3)*zi0(:,1) 10017860365SKenneth E. Jansen & +al(:,8,3)*zi0(:,1)*zi0(:,2) 10117860365SKenneth E. Jansen 10217860365SKenneth E. Jansen 10317860365SKenneth E. Jansenc... build rhs 10417860365SKenneth E. Jansen 10517860365SKenneth E. Jansen r1(:)=al(:,1,1)+al(:,2,1)*zi0(:,1)+al(:,3,1)*zi0(:,2)+ 10617860365SKenneth E. Jansen & al(:,4,1)*zi0(:,3)+al(:,5,1)*zi0(:,1)*zi0(:,2)+ 10717860365SKenneth E. Jansen & al(:,6,1)*zi0(:,2)*zi0(:,3)+al(:,7,1)* 10817860365SKenneth E. Jansen & zi0(:,1)*zi0(:,3)+al(:,8,1)*zi0(:,1)* 10917860365SKenneth E. Jansen & zi0(:,2)*zi0(:,3) - xts1 11017860365SKenneth E. Jansen 11117860365SKenneth E. Jansen r2(:)=al(:,1,2)+al(:,2,2)*zi0(:,1)+al(:,3,2)*zi0(:,2)+ 11217860365SKenneth E. Jansen & al(:,4,2)*zi0(:,3)+al(:,5,2)*zi0(:,1)*zi0(:,2)+ 11317860365SKenneth E. Jansen & al(:,6,2)*zi0(:,2)*zi0(:,3)+al(:,7,2)* 11417860365SKenneth E. Jansen & zi0(:,1)*zi0(:,3)+al(:,8,2)*zi0(:,1)* 11517860365SKenneth E. Jansen & zi0(:,2)*zi0(:,3) - xts2 11617860365SKenneth E. Jansen 11717860365SKenneth E. Jansen r3(:)=al(:,1,3)+al(:,2,3)*zi0(:,1)+al(:,3,3)*zi0(:,2)+ 11817860365SKenneth E. Jansen & al(:,4,3)*zi0(:,3)+al(:,5,3)*zi0(:,1)*zi0(:,2)+ 11917860365SKenneth E. Jansen & al(:,6,3)*zi0(:,2)*zi0(:,3)+al(:,7,3)* 12017860365SKenneth E. Jansen & zi0(:,1)*zi0(:,3)+al(:,8,3)*zi0(:,1)* 12117860365SKenneth E. Jansen & zi0(:,2)*zi0(:,3) - xts3 12217860365SKenneth E. Jansen 12317860365SKenneth E. Jansenc... get solution 12417860365SKenneth E. Jansen 12517860365SKenneth E. Jansen detaij = m11*m22*m33-m11*m23*m32-m21*m12*m33+ 12617860365SKenneth E. Jansen & m21*m13*m32+m31*m12*m23-m31*m13*m22 12717860365SKenneth E. Jansen 12817860365SKenneth E. Jansen detaij = 1./detaij 12917860365SKenneth E. Jansen 13017860365SKenneth E. Jansen dzi0(:,1) = -detaij(:)*((m22(:)*m33(:)-m23(:)*m32(:))* 13117860365SKenneth E. Jansen & r1(:) + (m13(:)*m32(:)-m12(:)*m33(:))*r2(:) + 13217860365SKenneth E. Jansen & (m12(:)*m23(:)-m13(:)*m22(:))*r3(:)) 13317860365SKenneth E. Jansen dzi0(:,2) = -detaij(:)*((m23(:)*m31(:)-m21(:)*m32(:))* 13417860365SKenneth E. Jansen & r1(:) + (m11(:)*m33(:)-m13(:)*m31(:))*r2(:) + 13517860365SKenneth E. Jansen & (m13(:)*m21(:)-m11(:)*m23(:))*r3(:)) 13617860365SKenneth E. Jansen dzi0(:,3) = -detaij(:)*((m21(:)*m32(:)-m22(:)*m31(:))* 13717860365SKenneth E. Jansen & r1(:) + (m12(:)*m31(:)-m11(:)*m32(:))*r2(:) + 13817860365SKenneth E. Jansen & (m11(:)*m22(:)-m12(:)*m21(:))*r3(:)) 13917860365SKenneth E. Jansen 14017860365SKenneth E. Jansen zi0(:,:) = zi0(:,:) + dzi0(:,:) 14117860365SKenneth E. Jansen 14217860365SKenneth E. Jansen enddo 14317860365SKenneth E. Jansen 14417860365SKenneth E. Jansen do e = 1, npro 14517860365SKenneth E. Jansen if ((abs(zi0(e,1)).lt.(one+tolpt)).and. 14617860365SKenneth E. Jansen & (abs(zi0(e,2)).lt.(one+tolpt)).and. 14717860365SKenneth E. Jansen & (abs(zi0(e,3)).lt.(one+tolpt))) then ! got the element 14817860365SKenneth E. Jansen 14917860365SKenneth E. Jansen call shphex (ipord, zi0(e,:),shape(:), 15017860365SKenneth E. Jansen & shgradl(:,:)) 15117860365SKenneth E. Jansen 15217860365SKenneth E. Jansen founde=e 15317860365SKenneth E. Jansen exit 15417860365SKenneth E. Jansen endif 15517860365SKenneth E. Jansen 15617860365SKenneth E. Jansen enddo 15717860365SKenneth E. Jansen elseif (lcsyst.eq.1) then !tet 15817860365SKenneth E. Jansen 15917860365SKenneth E. Jansen call get_a_not_tet(xl,al) 16017860365SKenneth E. Jansen 16117860365SKenneth E. Jansenc 16217860365SKenneth E. Jansenc solve for r, s, t for each elements 16317860365SKenneth E. Jansenc 16417860365SKenneth E. Jansen do e = 1, npro 16517860365SKenneth E. Jansen detaij(e) = al(e,2,1)*(-al(e,3,2)*al(e,4,3) + 16617860365SKenneth E. Jansen & al(e,4,2)*al(e,3,3)) + al(e,2,2)* 16717860365SKenneth E. Jansen & (al(e,3,1)*al(e,4,3) - al(e,4,1)* 16817860365SKenneth E. Jansen & al(e,3,3)) + al(e,2,3)*(-al(e,3,1)*al(e,4,2)+ 16917860365SKenneth E. Jansen & al(e,4,1)*al(e,3,2)) 17017860365SKenneth E. Jansen 17117860365SKenneth E. Jansen detaij(e) = 1./detaij(e) 17217860365SKenneth E. Jansen 17317860365SKenneth E. Jansen zi0(e,1) = detaij(e)*((al(e,4,2)*al(e,3,3) 17417860365SKenneth E. Jansen & - al(e,3,2)*al(e,4,3))*(xts1-al(e,1,1)) + 17517860365SKenneth E. Jansen & (al(e,3,1)*al(e,4,3) 17617860365SKenneth E. Jansen & - al(e,4,1)*al(e,3,3))*(xts2-al(e,1,2)) + 17717860365SKenneth E. Jansen & (al(e,4,1)*al(e,3,2) 17817860365SKenneth E. Jansen & - al(e,3,1)*al(e,4,2))*(xts3-al(e,1,3))) 17917860365SKenneth E. Jansen 18017860365SKenneth E. Jansen zi0(e,2) = detaij(e)*((al(e,2,2)*al(e,4,3) 18117860365SKenneth E. Jansen & - al(e,4,2)*al(e,2,3))*(xts1-al(e,1,1)) + 18217860365SKenneth E. Jansen & (al(e,4,1)*al(e,2,3) 18317860365SKenneth E. Jansen & - al(e,2,1)*al(e,4,3))*(xts2-al(e,1,2)) + 18417860365SKenneth E. Jansen & (al(e,2,1)*al(e,4,2) 18517860365SKenneth E. Jansen & - al(e,4,1)*al(e,2,2))*(xts3-al(e,1,3))) 18617860365SKenneth E. Jansen 18717860365SKenneth E. Jansen zi0(e,3) = detaij(e)*((al(e,3,2)*al(e,2,3) 18817860365SKenneth E. Jansen & - al(e,2,2)*al(e,3,3))*(xts1-al(e,1,1)) + 18917860365SKenneth E. Jansen & (al(e,2,1)*al(e,3,3) 19017860365SKenneth E. Jansen & - al(e,3,1)*al(e,2,3))*(xts2-al(e,1,2)) + 19117860365SKenneth E. Jansen & (al(e,3,1)*al(e,2,2) 19217860365SKenneth E. Jansen & - al(e,2,1)*al(e,3,2))*(xts3-al(e,1,3))) 19317860365SKenneth E. Jansen 19417860365SKenneth E. Jansen if ((zi0(e,1)+zi0(e,2)+zi0(e,3)).lt.(one+tolpt).and. 19517860365SKenneth E. Jansen & zi0(e,1).lt.(one +tolpt).and. !should not be necessary; the limit in the tet is already defined by the previous line 19617860365SKenneth E. Jansen & zi0(e,1).gt.(zero-tolpt).and. 19717860365SKenneth E. Jansen & zi0(e,2).lt.(one +tolpt).and. !should not be necessary 19817860365SKenneth E. Jansen & zi0(e,2).gt.(zero-tolpt).and. 19917860365SKenneth E. Jansen & zi0(e,3).lt.(one +tolpt).and. !should not be necessary 20017860365SKenneth E. Jansen & zi0(e,3).gt.(zero-tolpt)) then 20117860365SKenneth E. Jansen 20217860365SKenneth E. Jansen call shptet (ipord, zi0(e,:), shape(:), 20317860365SKenneth E. Jansen & shgradl(:,:)) 20417860365SKenneth E. Jansen 20517860365SKenneth E. Jansen founde=e 20617860365SKenneth E. Jansen exit 20717860365SKenneth E. Jansen endif 20817860365SKenneth E. Jansen enddo 20917860365SKenneth E. Jansen endif 21017860365SKenneth E. Jansen 21117860365SKenneth E. Jansen if(founde.ne.0) then !store values for next time steps 21217860365SKenneth E. Jansen statptts(jj,1)=iblkts 21317860365SKenneth E. Jansen statptts(jj,2)=founde 21417860365SKenneth E. Jansen parptts(jj,:)=zi0(founde,:) 21517860365SKenneth E. Jansen else 21617860365SKenneth E. Jansen if(iblkts.eq.nelblk) then !not found in last elm-blk of this part 21717860365SKenneth E. Jansen statptts(jj,1)=nelblk+1 ! not searched for following steps 21817860365SKenneth E. Jansen endif 21917860365SKenneth E. Jansen endif 22017860365SKenneth E. Jansen endif 22117860365SKenneth E. Jansen 22217860365SKenneth E. Jansen if(founde.ne.0) then 22317860365SKenneth E. Jansen soln(1:ndofl) = zero 22417860365SKenneth E. Jansen 22517860365SKenneth E. Jansen do i = 1,nenl 22617860365SKenneth E. Jansen soln(1:ndofl) = soln(1:ndofl) 22717860365SKenneth E. Jansen & +ycl(founde,i,1:ndofl)*shape(i) 22817860365SKenneth E. Jansen enddo 22917860365SKenneth E. Jansen do i = 1+nenl,nshl 23017860365SKenneth E. Jansen soln(1:ndofl) = soln(1:ndofl) 23117860365SKenneth E. Jansen & +ycl(founde,i,1:ndofl)*shape(i)*sgn(founde,i) 23217860365SKenneth E. Jansen enddo 23317860365SKenneth E. Jansen 23417860365SKenneth E. Jansen varts(jj,:) = soln(:) 23517860365SKenneth E. Jansen endif 23617860365SKenneth E. Jansen 23717860365SKenneth E. Jansen enddo 23817860365SKenneth E. Jansen 23917860365SKenneth E. Jansen return 24017860365SKenneth E. Jansen end 24117860365SKenneth E. Jansen 242