Skip to content
Snippets Groups Projects
post.f90 42.3 KiB
Newer Older
  • Learn to ignore specific revisions
  •       end do
          write(30,'(a11,i10)') 'POINT_DATA ',surface(is)%nsurface
          write(30,'(a)')'SCALARS z float 1'
          write(30,'(a)')'LOOKUP_TABLE default'
          do i=1,surface(is)%nsurface
             write(30,'(e11.4)') surface(is)%z(i)
          enddo
    if (is.eq.1) then
          write(30,'(a)')'SCALARS erosion_rate float 1'
          write(30,'(a)')'LOOKUP_TABLE default'
          do i=1,surface(is)%nsurface
             write(30,'(e11.4)') -surface(is)%r(i)
          enddo
          write(30,'(a)')'SCALARS rock_uplift float 1'
          write(30,'(a)')'LOOKUP_TABLE default'
          do i=1,surface(is)%nsurface
             write(30,'(e11.4)') surface(is)%w(i)
          enddo
    endif
          write(30,'(a)') 'VECTORS normal float'
          do i=1,surface(is)%nsurface
             write(30,'(3e15.4)') surface(is)%xn(i),surface(is)%yn(i),surface(is)%zn(i)
          end do
          write(30,'(a)') 'VECTORS vel float'
          do i=1,surface(is)%nsurface
             write(30,'(3e15.4)') surface(is)%u(i),surface(is)%v(i),surface(is)%w(i)
          end do
          close(30)
          write(*,*) '--------------------------------------------------------------------------'
          write(*,*)'opla I am done producing norm'//cs//'.vtk' 
       enddo
    end if
    
    !==============================================================================
    !======[produce rivers.vtk file]==============================================
    !==============================================================================
    
    if (output_rivers==1) then
    allocate (donor(surface(1)%nsurface),order(surface(1)%nsurface))
    call rivers (surface(1)%icon,surface(1)%nt,surface(1)%x,surface(1)%y,surface(1)%z, &
                 surface(1)%nsurface,donor,order)
    iordermin=3
    nlinks=0
    do i=1,surface(1)%nsurface
       if (order(i).gt.iordermin.and.donor(i).gt.0) nlinks=nlinks+1
    enddo
          open(unit=30,file='rivers.vtk')
          write(30,'(a)')'# vtk DataFile Version 3.0'
          write(30,'(a)')'rivers'
          write(30,'(a)')'ASCII'
          write(30,'(a)')'DATASET UNSTRUCTURED_GRID'
          write(30,'(a7,i10,a6)')'POINTS ',surface(1)%nsurface,' float'
          do i=1,surface(1)%nsurface
             write(30,'(3f16.11)')surface(1)%x(i),surface(1)%y(i),surface(1)%z(i)+.001
          enddo
          write(30,'(a6, 2I10)') 'CELLS ',nlinks,(1+2)*nlinks
          do i=1,surface(1)%nsurface
             if (order(i).gt.iordermin.and.donor(i).gt.0) write(30,'(9I10)')2,i-1,donor(i)-1
          enddo
          write(30,'(A11, I10)') 'CELL_TYPES ',nlinks
          do i=1,nlinks
             write(30,'(I2)')3 ! octree  (2 nodes)
          end do
          close(30)
          write(*,*) '--------------------------------------------------------------------------'
          write(*,*)'opla I am done producing rivers.vtk' 
    deallocate (donor,order)
    end if
    
    !==============================================================================
    !======[produce regular.vtk file]==============================================
    !==============================================================================
    
    if (output_regular==1) then
    
    allocate (levs(ov%nleaves))
    call octree_find_element_level (ov%octree,ov%noctree,levs,ov%nleaves)
    levmax=maxval(levs)
    
    zmax=maxval(surface(1)%z)
    dz=1.d0/(2.d0**levmax)
    nz=(zmax/dz)+1
    
    allocate (str11(ov%nnode),str12(ov%nnode),str13(ov%nnode), &
              str22(ov%nnode),str23(ov%nnode),str33(ov%nnode),nstrain(ov%nnode))
    
    nstrain=0
    str11=0.;str12=0.;str13=0.
    str22=0.;str23=0.;str33=0.
      do ie=1,ov%nleaves
        if (elvoid(ie).eq.0) then
        do k=1,nne
        i=ov%icon(k,ie)
        str11(i)=str11(i)+strain(1,1,ie)
        str12(i)=str12(i)+strain(1,2,ie)
        str13(i)=str13(i)+strain(1,3,ie)
        str22(i)=str22(i)+strain(2,2,ie)
        str23(i)=str23(i)+strain(2,3,ie)
        str33(i)=str33(i)+strain(3,3,ie)
        nstrain(i)=nstrain(i)+1
        enddo
        endif
      enddo
    do i=1,ov%nnode
      if (nstrain(i).ne.0) then
      str11(i)=str11(i)/nstrain(i)
      str12(i)=str12(i)/nstrain(i)
      str13(i)=str13(i)/nstrain(i)
      str22(i)=str22(i)/nstrain(i)
      str23(i)=str23(i)/nstrain(i)
      str33(i)=str33(i)/nstrain(i)
      endif
    enddo
    
    !print*,minval(str11),maxval(str11)
    !print*,minval(str12),maxval(str12)
    !print*,minval(str13),maxval(str13)
    !print*,minval(str22),maxval(str22)
    !print*,minval(str23),maxval(str23)
    !print*,minval(str33),maxval(str33)
    
    ni=nz*(2**levmax+1)*(2**levmax+1)
    allocate (xi(ni),yi(ni),zi(ni),ui(ni),vi(ni),wi(ni),si(ni),ei(ni),li(ni), &
              s11(ni),s12(ni),s13(ni),s22(ni),s23(ni),s33(ni))
    do k=1,nz
    do j=1,2**levmax+1
    do i=1,2**levmax+1
    ijk=ijk+1
    xi(ijk)=(i-1)*dz
    yi(ijk)=(j-1)*dz
    zi(ijk)=(k-1)*dz
    call octree_interpolate_many (12,ov%octree,ov%noctree,ov%icon,ov%nleaves,ov%nnode, &
                                  xi(ijk),yi(ijk),zi(ijk), &
                                  ov%u,ui(ijk),ov%v,vi(ijk),ov%w,wi(ijk), &
                                  ov%strain,si(ijk),ov_nodee2d,ei(ijk),ov%lsf(1,1),li(ijk), &
                                  str11,s11(ijk),str12,s12(ijk),str13,s13(ijk), &
                                  str22,s22(ijk),str23,s23(ijk),str33,s33(ijk))
    enddo
    enddo
    enddo
    
    !print*,minval(s11),maxval(s11)
    !print*,minval(s12),maxval(s12)
    !print*,minval(s13),maxval(s13)
    !print*,minval(s22),maxval(s22)
    !print*,minval(s23),maxval(s23)
    !print*,minval(s33),maxval(s33)
    
    deallocate (str11,str12,str13,str22,str23,str33,strain)
    
    do i=1,2**levmax+1
    do j=1,2**levmax+1
    do k=1,nz
    ijk=ijk+1
    !  if (li(ijk).gt.0.) then
    !  if (k.eq.1) stop 'error in lsf1'
    !  ui(ijk)=ui(ijk-1)
    !  vi(ijk)=vi(ijk-1)
    !  wi(ijk)=wi(ijk-1)
    !  si(ijk)=si(ijk-1)
    !  ei(ijk)=ei(ijk-1)
    !  endif
    enddo
    enddo
    enddo
    
    allocate (azimuth1(ni),azimuth3(ni),dip1(ni),dip3(ni))
    
    azimuth1=0.d0
    azimuth3=0.d0
    dip1=0.d0
    dip3=0.d0
    
    do i=1,ni
    call PS (s11(i),s22(i),s33(i),s12(i),s23(i),s13(i),l1,l2,l3, &
             n11,n12,n13, &
             n21,n22,n23, &
             n31,n32,n33)
    if (n11.ne.0.d0 .or. n12.ne.0.d0) azimuth1(i)=atan2(n12,n11)
    if (abs(n13).le.1.d0) dip1(i)=asin(n13)
    if (n31.ne.0.d0 .or. n32.ne.0.d0) azimuth3(i)=atan2(n32,n31)
    if (abs(n33).le.1.d0) dip3(i)=asin(n33)
    enddo
    
    con=45.d0/atan(1.d0)
    azimuth1=azimuth1*con
    azimuth3=azimuth3*con
    dip1=dip1*con
    dip3=dip3*con
    
          open(unit=30,file='regular.vtk')
          write(30,'(a)')'# vtk DataFile Version 3.0'
          write(30,'(a)')'regular'
          write(30,'(a)')'ASCII'
          write(30,'(a)')'DATASET STRUCTURED_POINTS'
          write(30,'(a,3i10)') 'DIMENSIONS',2**levmax+1,2**levmax+1,nz
          write(30,'(a,3f16.11)') 'ORIGIN',0.,0.,0.
          write(30,'(a,3f16.11)') 'SPACING',dz,dz,dz
          write(30,'(a11,i10)')'POINT_DATA ',(2**levmax+1)*(2**levmax+1)*nz
          write(30,'(a)')'VECTORS Velocity float'
            do i=1,(2**levmax+1)*(2**levmax+1)*nz
    
            write(30,'(3e15.4)') ui(i),vi(i),wi(i)
    
            enddo
          write(30,'(a)')'SCALARS Strain float 1'
          write(30,'(a)')'LOOKUP_TABLE default'
            do i=1,(2**levmax+1)*(2**levmax+1)*nz
            write(30,'(e11.4)') si(i)
            enddo
          write(30,'(a)')'SCALARS StrainRate float 1'
          write(30,'(a)')'LOOKUP_TABLE default'
            do i=1,(2**levmax+1)*(2**levmax+1)*nz
            write(30,'(e11.4)') ei(i)
            enddo
    !      write(30,'(a)')'SCALARS azimuth_sigma1 float 1'
    !      write(30,'(a)')'LOOKUP_TABLE default'
    !        do i=1,(2**levmax+1)*(2**levmax+1)*nz
    !        write(30,'(e11.4)') azimuth1(i)
    !        enddo
    !      write(30,'(a)')'SCALARS dip_sigma1 float 1'
    !      write(30,'(a)')'LOOKUP_TABLE default'
    !        do i=1,(2**levmax+1)*(2**levmax+1)*nz
    !        write(30,'(e11.4)') dip1(i)
    !        enddo
    !      write(30,'(a)')'SCALARS azimuth_sigma3 float 1'
    !      write(30,'(a)')'LOOKUP_TABLE default'
    !        do i=1,(2**levmax+1)*(2**levmax+1)*nz
    !        write(30,'(e11.4)') azimuth3(i)
    !        enddo
    !      write(30,'(a)')'SCALARS dip_sigma3 float 1'
    !      write(30,'(a)')'LOOKUP_TABLE default'
    !        do i=1,(2**levmax+1)*(2**levmax+1)*nz
    !        write(30,'(e11.4)') dip3(i)
    !        enddo
          write(30,'(a)')'TENSORS StrainDot float'
            do i=1,(2**levmax+1)*(2**levmax+1)*nz
            write(30,'(3e12.4)') s11(i),s12(i),s13(i)
            write(30,'(3e12.4)') s12(i),s22(i),s23(i)
            write(30,'(3e12.4)') s13(i),s23(i),s33(i)
            enddo
          close(30)
    
    deallocate (xi,yi,zi,ui,vi,wi,si,ei,li,s11,s12,s13,s22,s23,s33)
    
    write(*,*) '--------------------------------------------------------------------------'
    write(*,*)'opla I am done producing regular.vtk '
    write(*,*) '--------------------------------------------------------------------------'
    
    endif
    
    
    
    !==============================================================================
    !======[produce zisodisp.vtk file]=============================================
    !==============================================================================
    
    
    if (output_zisodisp==1) then
    
      open(unit=30,file='zisodisp.vtk')
      write(30,'(a)')'# vtk DataFile Version 3.0'
      write(30,'(a)')'zisodisp'
      write(30,'(a)')'ASCII'
      write(30,'(a)')'DATASET UNSTRUCTURED_GRID'
    
      write(30,'(a7,i10,a6)')'POINTS ',int((nb+1)**2.d0),' float'
    
      do j=1,nb+1
        do i=1,nb+1
    
          write(30,'(3f16.11)') (i-1)*dxy,(j-1)*dxy,zisodisp(i,j)
    
        enddo
      enddo
    
      write(30,'(a6, 2I10)') 'CELLS ',int(nb**2.d0),int((4+1)*nb**2.d0)
    
      ptcnt=0
      do j=1,nb
        do i=1,nb
    
          write(30,'(9I10)')4,ptcnt,ptcnt+1,ptcnt+1+(nb+1),ptcnt+(nb+1)
    
          ptcnt=ptcnt+1
        enddo
        ptcnt=ptcnt+1
      enddo
    
      write(30,'(A11, I10)') 'CELL_TYPES ',int(nb**2.d0)
    
      do j=1,nb
        do i=1,nb
          write(30,'(I2)')9 ! VTK quad (4 nodes)
        enddo
      enddo
    
      write(30,'(a11,i10)') 'POINT_DATA ',int((nb+1)**2.d0)
    
      write(30,'(a)')'SCALARS zisodisp float 1'
      write(30,'(a)')'LOOKUP_TABLE default'
      do j=1,nb+1
        do i=1,nb+1
          write(30,'(e11.4)') zisodisp(i,j)
        enddo
      enddo
    
      !write(30,'(a11,i10)') 'POINT_DATA ',int((nb+1)**2.d0)
    
      write(30,'(a)')'SCALARS zisoslx float 1'
      write(30,'(a)')'LOOKUP_TABLE default'
      do j=1,nb+1
        do i=1,nb+1
          if (i==1) then
            write(30,'(e11.4)') (zisodisp(i+1,j)-zisodisp(i,j))/dxy
          elseif (i==nb+1) then
            write(30,'(e11.4)') (zisodisp(i,j)-zisodisp(i-1,j))/dxy
          else
            write(30,'(e11.4)') ((zisodisp(i,j)-zisodisp(i-1,j))/dxy+&
                         (zisodisp(i+1,j)-zisodisp(i,j))/dxy)/2.d0
          endif
        enddo
      enddo
      close(30)
      write(*,*) '--------------------------------------------------------------------------'
      write(*,*)'opla I am done producing zisodisp.vtk' 
    end if
    
    
    write(*,*) '**************************************************************************'