1*17860365SKenneth E. Jansen 2*17860365SKenneth E. Jansen subroutine timeseries(ycl, xl, ien, sgn) 3*17860365SKenneth E. Jansen 4*17860365SKenneth E. Jansen use timedata 5*17860365SKenneth E. Jansen include "common.h" 6*17860365SKenneth E. Jansen 7*17860365SKenneth E. Jansen dimension shape(nshl), ycl(npro,nshl,ndofl), 8*17860365SKenneth E. Jansen & ien(npro,nshl), xl(npro,nenl,nsd), 9*17860365SKenneth E. Jansen & sgn(npro,nshl) 10*17860365SKenneth E. Jansen real*8 al(npro,nenl,nsd), 11*17860365SKenneth E. Jansen & zi0(npro,nsd), detaij(npro), dzi0(npro,nsd), 12*17860365SKenneth E. Jansen & m11(npro), m12(npro), m13(npro), m21(npro), m22(npro), 13*17860365SKenneth E. Jansen & m23(npro), m31(npro), m32(npro), m33(npro), 14*17860365SKenneth E. Jansen & r1(npro), r2(npro), r3(npro), shgradl(nshl,nsd) 15*17860365SKenneth E. Jansen 16*17860365SKenneth E. Jansen real*8 xts1, xts2, xts3 17*17860365SKenneth E. Jansen real*8 soln(ndof) 18*17860365SKenneth E. Jansen integer e, founde 19*17860365SKenneth E. Jansen 20*17860365SKenneth E. Jansen do jj = 1, ntspts 21*17860365SKenneth E. Jansen founde = 0 22*17860365SKenneth E. Jansen if(statptts(jj,1).gt.0) then 23*17860365SKenneth E. Jansen if(statptts(jj,1).eq.iblkts) then 24*17860365SKenneth E. Jansen if(lcsyst.eq.2) then ! hex 25*17860365SKenneth E. Jansen call shphex (ipord, parptts(jj,:),shape(:), 26*17860365SKenneth E. Jansen & shgradl(:,:)) 27*17860365SKenneth E. Jansen elseif(lcsyst.eq.1) then 28*17860365SKenneth E. Jansen call shptet (ipord, parptts(jj,:),shape(:), 29*17860365SKenneth E. Jansen & shgradl(:,:)) 30*17860365SKenneth E. Jansen endif 31*17860365SKenneth E. Jansen founde=statptts(jj,2) 32*17860365SKenneth E. Jansen endif 33*17860365SKenneth E. Jansen else 34*17860365SKenneth E. Jansen xts1 = ptts(jj,1) 35*17860365SKenneth E. Jansen xts2 = ptts(jj,2) 36*17860365SKenneth E. Jansen xts3 = ptts(jj,3) 37*17860365SKenneth E. Jansen 38*17860365SKenneth E. Jansen if(lcsyst.eq.2) then ! hex 39*17860365SKenneth E. Jansen 40*17860365SKenneth E. Jansen call get_a_not_hex(xl,al) ! get mapping poly. coeff. 41*17860365SKenneth E. Jansen 42*17860365SKenneth E. Jansenc... get initial guess for Newton Iteration procedure 43*17860365SKenneth E. Jansen 44*17860365SKenneth E. Jansen detaij(:) = -al(:,2,1)*al(:,3,2)*al(:,4,3) + 45*17860365SKenneth E. Jansen & al(:,2,1)*al(:,4,2)*al(:,3,3) + al(:,2,2)* 46*17860365SKenneth E. Jansen & al(:,3,1)*al(:,4,3) - al(:,2,2)*al(:,4,1)* 47*17860365SKenneth E. Jansen & al(:,3,3) - al(:,2,3)*al(:,3,1)*al(:,4,2)+ 48*17860365SKenneth E. Jansen & al(:,2,3)*al(:,4,1)*al(:,3,2) 49*17860365SKenneth E. Jansen 50*17860365SKenneth E. Jansen detaij = 1./detaij 51*17860365SKenneth E. Jansen 52*17860365SKenneth E. Jansen zi0(:,1) = detaij(:)*((al(:,4,2)*al(:,3,3) 53*17860365SKenneth E. Jansen & - al(:,3,2)*al(:,4,3))*(xts1-al(:,1,1)) + 54*17860365SKenneth E. Jansen & (al(:,3,1)*al(:,4,3) 55*17860365SKenneth E. Jansen & - al(:,4,1)*al(:,3,3))*(xts2-al(:,1,2)) + 56*17860365SKenneth E. Jansen & (al(:,4,1)*al(:,3,2) 57*17860365SKenneth E. Jansen & - al(:,3,1)*al(:,4,2))*(xts3-al(:,1,3))) 58*17860365SKenneth E. Jansen 59*17860365SKenneth E. Jansen 60*17860365SKenneth E. Jansen zi0(:,2) = detaij(:)*((al(:,2,2)*al(:,4,3) 61*17860365SKenneth E. Jansen & - al(:,4,2)*al(:,2,3))*(xts1-al(:,1,1)) + 62*17860365SKenneth E. Jansen & (al(:,4,1)*al(:,2,3) 63*17860365SKenneth E. Jansen & - al(:,2,1)*al(:,4,3))*(xts2-al(:,1,2)) + 64*17860365SKenneth E. Jansen & (al(:,2,1)*al(:,4,2) 65*17860365SKenneth E. Jansen & - al(:,4,1)*al(:,2,2))*(xts3-al(:,1,3))) 66*17860365SKenneth E. Jansen 67*17860365SKenneth E. Jansen zi0(:,3) = detaij(:)*((al(:,3,2)*al(:,2,3) 68*17860365SKenneth E. Jansen & - al(:,2,2)*al(:,3,3))*(xts1-al(:,1,1)) + 69*17860365SKenneth E. Jansen & (al(:,2,1)*al(:,3,3) 70*17860365SKenneth E. Jansen & - al(:,3,1)*al(:,2,3))*(xts2-al(:,1,2)) + 71*17860365SKenneth E. Jansen & (al(:,3,1)*al(:,2,2) 72*17860365SKenneth E. Jansen & - al(:,2,1)*al(:,3,2))*(xts3-al(:,1,3))) 73*17860365SKenneth E. Jansen 74*17860365SKenneth E. Jansen 75*17860365SKenneth E. Jansenc... iterate to convergence 76*17860365SKenneth E. Jansen 77*17860365SKenneth E. Jansen do it = 1, iterat 78*17860365SKenneth E. Jansen 79*17860365SKenneth E. Jansenc... build matrix 80*17860365SKenneth E. Jansen 81*17860365SKenneth E. Jansen m11(:)=al(:,2,1)+al(:,5,1)*zi0(:,2)+al(:,7,1)*zi0(:,3) 82*17860365SKenneth E. Jansen & +al(:,8,1)*zi0(:,2)*zi0(:,3) 83*17860365SKenneth E. Jansen m12(:)=al(:,3,1)+al(:,5,1)*zi0(:,1)+al(:,6,1)*zi0(:,3) 84*17860365SKenneth E. Jansen & +al(:,8,1)*zi0(:,1)*zi0(:,3) 85*17860365SKenneth E. Jansen m13(:)=al(:,4,1)+al(:,6,1)*zi0(:,2)+al(:,7,1)*zi0(:,1) 86*17860365SKenneth E. Jansen & +al(:,8,1)*zi0(:,1)*zi0(:,2) 87*17860365SKenneth E. Jansen 88*17860365SKenneth E. Jansen m21(:)=al(:,2,2)+al(:,5,2)*zi0(:,2)+al(:,7,2)*zi0(:,3) 89*17860365SKenneth E. Jansen & +al(:,8,2)*zi0(:,2)*zi0(:,3) 90*17860365SKenneth E. Jansen m22(:)=al(:,3,2)+al(:,5,2)*zi0(:,1)+al(:,6,2)*zi0(:,3) 91*17860365SKenneth E. Jansen & +al(:,8,2)*zi0(:,1)*zi0(:,3) 92*17860365SKenneth E. Jansen m23(:)=al(:,4,2)+al(:,6,2)*zi0(:,2)+al(:,7,2)*zi0(:,1) 93*17860365SKenneth E. Jansen & +al(:,8,2)*zi0(:,1)*zi0(:,2) 94*17860365SKenneth E. Jansen 95*17860365SKenneth E. Jansen m31(:)=al(:,2,3)+al(:,5,3)*zi0(:,2)+al(:,7,3)*zi0(:,3) 96*17860365SKenneth E. Jansen & +al(:,8,3)*zi0(:,2)*zi0(:,3) 97*17860365SKenneth E. Jansen m32(:)=al(:,3,3)+al(:,5,3)*zi0(:,1)+al(:,6,3)*zi0(:,3) 98*17860365SKenneth E. Jansen & +al(:,8,3)*zi0(:,1)*zi0(:,3) 99*17860365SKenneth E. Jansen m33(:)=al(:,4,3)+al(:,6,3)*zi0(:,2)+al(:,7,3)*zi0(:,1) 100*17860365SKenneth E. Jansen & +al(:,8,3)*zi0(:,1)*zi0(:,2) 101*17860365SKenneth E. Jansen 102*17860365SKenneth E. Jansen 103*17860365SKenneth E. Jansenc... build rhs 104*17860365SKenneth E. Jansen 105*17860365SKenneth E. Jansen r1(:)=al(:,1,1)+al(:,2,1)*zi0(:,1)+al(:,3,1)*zi0(:,2)+ 106*17860365SKenneth E. Jansen & al(:,4,1)*zi0(:,3)+al(:,5,1)*zi0(:,1)*zi0(:,2)+ 107*17860365SKenneth E. Jansen & al(:,6,1)*zi0(:,2)*zi0(:,3)+al(:,7,1)* 108*17860365SKenneth E. Jansen & zi0(:,1)*zi0(:,3)+al(:,8,1)*zi0(:,1)* 109*17860365SKenneth E. Jansen & zi0(:,2)*zi0(:,3) - xts1 110*17860365SKenneth E. Jansen 111*17860365SKenneth E. Jansen r2(:)=al(:,1,2)+al(:,2,2)*zi0(:,1)+al(:,3,2)*zi0(:,2)+ 112*17860365SKenneth E. Jansen & al(:,4,2)*zi0(:,3)+al(:,5,2)*zi0(:,1)*zi0(:,2)+ 113*17860365SKenneth E. Jansen & al(:,6,2)*zi0(:,2)*zi0(:,3)+al(:,7,2)* 114*17860365SKenneth E. Jansen & zi0(:,1)*zi0(:,3)+al(:,8,2)*zi0(:,1)* 115*17860365SKenneth E. Jansen & zi0(:,2)*zi0(:,3) - xts2 116*17860365SKenneth E. Jansen 117*17860365SKenneth E. Jansen r3(:)=al(:,1,3)+al(:,2,3)*zi0(:,1)+al(:,3,3)*zi0(:,2)+ 118*17860365SKenneth E. Jansen & al(:,4,3)*zi0(:,3)+al(:,5,3)*zi0(:,1)*zi0(:,2)+ 119*17860365SKenneth E. Jansen & al(:,6,3)*zi0(:,2)*zi0(:,3)+al(:,7,3)* 120*17860365SKenneth E. Jansen & zi0(:,1)*zi0(:,3)+al(:,8,3)*zi0(:,1)* 121*17860365SKenneth E. Jansen & zi0(:,2)*zi0(:,3) - xts3 122*17860365SKenneth E. Jansen 123*17860365SKenneth E. Jansenc... get solution 124*17860365SKenneth E. Jansen 125*17860365SKenneth E. Jansen detaij = m11*m22*m33-m11*m23*m32-m21*m12*m33+ 126*17860365SKenneth E. Jansen & m21*m13*m32+m31*m12*m23-m31*m13*m22 127*17860365SKenneth E. Jansen 128*17860365SKenneth E. Jansen detaij = 1./detaij 129*17860365SKenneth E. Jansen 130*17860365SKenneth E. Jansen dzi0(:,1) = -detaij(:)*((m22(:)*m33(:)-m23(:)*m32(:))* 131*17860365SKenneth E. Jansen & r1(:) + (m13(:)*m32(:)-m12(:)*m33(:))*r2(:) + 132*17860365SKenneth E. Jansen & (m12(:)*m23(:)-m13(:)*m22(:))*r3(:)) 133*17860365SKenneth E. Jansen dzi0(:,2) = -detaij(:)*((m23(:)*m31(:)-m21(:)*m32(:))* 134*17860365SKenneth E. Jansen & r1(:) + (m11(:)*m33(:)-m13(:)*m31(:))*r2(:) + 135*17860365SKenneth E. Jansen & (m13(:)*m21(:)-m11(:)*m23(:))*r3(:)) 136*17860365SKenneth E. Jansen dzi0(:,3) = -detaij(:)*((m21(:)*m32(:)-m22(:)*m31(:))* 137*17860365SKenneth E. Jansen & r1(:) + (m12(:)*m31(:)-m11(:)*m32(:))*r2(:) + 138*17860365SKenneth E. Jansen & (m11(:)*m22(:)-m12(:)*m21(:))*r3(:)) 139*17860365SKenneth E. Jansen 140*17860365SKenneth E. Jansen zi0(:,:) = zi0(:,:) + dzi0(:,:) 141*17860365SKenneth E. Jansen 142*17860365SKenneth E. Jansen enddo 143*17860365SKenneth E. Jansen 144*17860365SKenneth E. Jansen do e = 1, npro 145*17860365SKenneth E. Jansen if ((abs(zi0(e,1)).lt.(one+tolpt)).and. 146*17860365SKenneth E. Jansen & (abs(zi0(e,2)).lt.(one+tolpt)).and. 147*17860365SKenneth E. Jansen & (abs(zi0(e,3)).lt.(one+tolpt))) then ! got the element 148*17860365SKenneth E. Jansen 149*17860365SKenneth E. Jansen call shphex (ipord, zi0(e,:),shape(:), 150*17860365SKenneth E. Jansen & shgradl(:,:)) 151*17860365SKenneth E. Jansen 152*17860365SKenneth E. Jansen founde=e 153*17860365SKenneth E. Jansen exit 154*17860365SKenneth E. Jansen endif 155*17860365SKenneth E. Jansen 156*17860365SKenneth E. Jansen enddo 157*17860365SKenneth E. Jansen elseif (lcsyst.eq.1) then !tet 158*17860365SKenneth E. Jansen 159*17860365SKenneth E. Jansen call get_a_not_tet(xl,al) 160*17860365SKenneth E. Jansen 161*17860365SKenneth E. Jansenc 162*17860365SKenneth E. Jansenc solve for r, s, t for each elements 163*17860365SKenneth E. Jansenc 164*17860365SKenneth E. Jansen do e = 1, npro 165*17860365SKenneth E. Jansen detaij(e) = al(e,2,1)*(-al(e,3,2)*al(e,4,3) + 166*17860365SKenneth E. Jansen & al(e,4,2)*al(e,3,3)) + al(e,2,2)* 167*17860365SKenneth E. Jansen & (al(e,3,1)*al(e,4,3) - al(e,4,1)* 168*17860365SKenneth E. Jansen & al(e,3,3)) + al(e,2,3)*(-al(e,3,1)*al(e,4,2)+ 169*17860365SKenneth E. Jansen & al(e,4,1)*al(e,3,2)) 170*17860365SKenneth E. Jansen 171*17860365SKenneth E. Jansen detaij(e) = 1./detaij(e) 172*17860365SKenneth E. Jansen 173*17860365SKenneth E. Jansen zi0(e,1) = detaij(e)*((al(e,4,2)*al(e,3,3) 174*17860365SKenneth E. Jansen & - al(e,3,2)*al(e,4,3))*(xts1-al(e,1,1)) + 175*17860365SKenneth E. Jansen & (al(e,3,1)*al(e,4,3) 176*17860365SKenneth E. Jansen & - al(e,4,1)*al(e,3,3))*(xts2-al(e,1,2)) + 177*17860365SKenneth E. Jansen & (al(e,4,1)*al(e,3,2) 178*17860365SKenneth E. Jansen & - al(e,3,1)*al(e,4,2))*(xts3-al(e,1,3))) 179*17860365SKenneth E. Jansen 180*17860365SKenneth E. Jansen zi0(e,2) = detaij(e)*((al(e,2,2)*al(e,4,3) 181*17860365SKenneth E. Jansen & - al(e,4,2)*al(e,2,3))*(xts1-al(e,1,1)) + 182*17860365SKenneth E. Jansen & (al(e,4,1)*al(e,2,3) 183*17860365SKenneth E. Jansen & - al(e,2,1)*al(e,4,3))*(xts2-al(e,1,2)) + 184*17860365SKenneth E. Jansen & (al(e,2,1)*al(e,4,2) 185*17860365SKenneth E. Jansen & - al(e,4,1)*al(e,2,2))*(xts3-al(e,1,3))) 186*17860365SKenneth E. Jansen 187*17860365SKenneth E. Jansen zi0(e,3) = detaij(e)*((al(e,3,2)*al(e,2,3) 188*17860365SKenneth E. Jansen & - al(e,2,2)*al(e,3,3))*(xts1-al(e,1,1)) + 189*17860365SKenneth E. Jansen & (al(e,2,1)*al(e,3,3) 190*17860365SKenneth E. Jansen & - al(e,3,1)*al(e,2,3))*(xts2-al(e,1,2)) + 191*17860365SKenneth E. Jansen & (al(e,3,1)*al(e,2,2) 192*17860365SKenneth E. Jansen & - al(e,2,1)*al(e,3,2))*(xts3-al(e,1,3))) 193*17860365SKenneth E. Jansen 194*17860365SKenneth E. Jansen if ((zi0(e,1)+zi0(e,2)+zi0(e,3)).lt.(one+tolpt).and. 195*17860365SKenneth 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 196*17860365SKenneth E. Jansen & zi0(e,1).gt.(zero-tolpt).and. 197*17860365SKenneth E. Jansen & zi0(e,2).lt.(one +tolpt).and. !should not be necessary 198*17860365SKenneth E. Jansen & zi0(e,2).gt.(zero-tolpt).and. 199*17860365SKenneth E. Jansen & zi0(e,3).lt.(one +tolpt).and. !should not be necessary 200*17860365SKenneth E. Jansen & zi0(e,3).gt.(zero-tolpt)) then 201*17860365SKenneth E. Jansen 202*17860365SKenneth E. Jansen call shptet (ipord, zi0(e,:), shape(:), 203*17860365SKenneth E. Jansen & shgradl(:,:)) 204*17860365SKenneth E. Jansen 205*17860365SKenneth E. Jansen founde=e 206*17860365SKenneth E. Jansen exit 207*17860365SKenneth E. Jansen endif 208*17860365SKenneth E. Jansen enddo 209*17860365SKenneth E. Jansen endif 210*17860365SKenneth E. Jansen 211*17860365SKenneth E. Jansen if(founde.ne.0) then !store values for next time steps 212*17860365SKenneth E. Jansen statptts(jj,1)=iblkts 213*17860365SKenneth E. Jansen statptts(jj,2)=founde 214*17860365SKenneth E. Jansen parptts(jj,:)=zi0(founde,:) 215*17860365SKenneth E. Jansen else 216*17860365SKenneth E. Jansen if(iblkts.eq.nelblk) then !not found in last elm-blk of this part 217*17860365SKenneth E. Jansen statptts(jj,1)=nelblk+1 ! not searched for following steps 218*17860365SKenneth E. Jansen endif 219*17860365SKenneth E. Jansen endif 220*17860365SKenneth E. Jansen endif 221*17860365SKenneth E. Jansen 222*17860365SKenneth E. Jansen if(founde.ne.0) then 223*17860365SKenneth E. Jansen soln(1:ndofl) = zero 224*17860365SKenneth E. Jansen 225*17860365SKenneth E. Jansen do i = 1,nenl 226*17860365SKenneth E. Jansen soln(1:ndofl) = soln(1:ndofl) 227*17860365SKenneth E. Jansen & +ycl(founde,i,1:ndofl)*shape(i) 228*17860365SKenneth E. Jansen enddo 229*17860365SKenneth E. Jansen do i = 1+nenl,nshl 230*17860365SKenneth E. Jansen soln(1:ndofl) = soln(1:ndofl) 231*17860365SKenneth E. Jansen & +ycl(founde,i,1:ndofl)*shape(i)*sgn(founde,i) 232*17860365SKenneth E. Jansen enddo 233*17860365SKenneth E. Jansen 234*17860365SKenneth E. Jansen varts(jj,:) = soln(:) 235*17860365SKenneth E. Jansen endif 236*17860365SKenneth E. Jansen 237*17860365SKenneth E. Jansen enddo 238*17860365SKenneth E. Jansen 239*17860365SKenneth E. Jansen return 240*17860365SKenneth E. Jansen end 241*17860365SKenneth E. Jansen 242