xref: /phasta/phSolver/compressible/timeseries.f (revision 712d3df0b59ebebaaeaea358162c8d2c043c6e08)
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