vtf-logo

weno/applications/euler/3d/Homogeneous/src/init3.f


c
c
c     =====================================================
      subroutine ic(maxmx,maxmy,maxmz,meqn,mbc,mx,my,mz,
     &     x,y,z,dx,dy,dz,q)
c     =====================================================
      implicit none
c     
      include  "cuser.i"
c     
      integer maxmx, maxmy, maxmz, meqn, mbc, mx, my, mz
      double precision q(meqn, 1-mbc:maxmx+mbc, 1-mbc:maxmy+mbc, 
     &     1-mbc:maxmz+mbc)
      double precision x(1-mbc:maxmx+mbc),y(1-mbc:maxmy+mbc),
     &     z(1-mbc:maxmz+mbc), dx, dy, dz
      
      double precision uq(32,32,32,5)
      integer i, j, k, l
      integer il, jl, kl, ip, jp, kp, im, jm, km
      double precision dxsrc, eta1, eta2, eta3
      character*(128) name
c
c     Homogeneous Turbulence test case

      do 50 k = 1-mbc,maxmz+mbc
         do 50 j = 1-mbc,maxmy+mbc
            do 50 i = 1-mbc,maxmx+mbc
               
               ! --- this insures the any extended bits
               ! --- in the vector of state will start as zero
               do l = 1,meqn
                  q(l,i,j,k) = 0.0d0
               end do
 50         continue
            
      name = 'INIT_DATA/M0.488_Re375_t0.83_32.bin'//CHAR(0)
      call load_binary_file(name, 32, 32, 32, uq)
      
      dxsrc = 6.283185307d0/32

      do 60 k = 1, mz
         kl=z(k)/dxsrc+1
         kp = kl+1
         km = kl-1
         if ( kp .gt. 32 ) kp = 1
         if ( km .lt. 1 ) km = 32

         eta3 = 0.5d0*(z(k)-dxsrc*(kl-0.5d0))

         do 60 j = 1, my
            jl=y(j)/dxsrc+1
            jp = jl+1
            jm = jl-1
            if ( jp .gt. 32 ) jp = 1
            if ( jm .lt. 1 ) jm = 32

            eta2 = 0.5d0*(y(j)-dxsrc*(jl-0.5d0))

            do 60 i = 1, mx

               il=x(i)/dxsrc+1
               ip = il+1
               im = il-1
               if ( ip .gt. 32 ) ip = 1
               if ( im .lt. 1 ) im = 32
               
               eta1 = 0.5d0*(x(i)-dxsrc*(il-0.5d0))

               do l=1,5
                  q(l,i,j,k) = uq(il,jl,kl,l)
     $                 +eta1*(uq(ip,jl,kl,l)-uq(im,jl,kl,l))
     $                 +eta2*(uq(il,jp,kl,l)-uq(il,jm,kl,l))
     $                 +eta3*(uq(il,jl,kp,l)-uq(il,jl,km,l))
               enddo

 60       continue               

      return
      end