Konstantin8105/f4go

View on GitHub
testdata/feappv-master/iga/program/nsurfpres2d.funused

Summary

Maintainability
Test Coverage
!$Id:$
      subroutine nsurfpres2d(knots,nsides,lknot,lside,nblk,npre,
     &                       nblksd, blk,neps)

!      * * F E A P * * A Finite Element Analysis Program

!      Copyright (c) 1984-2018: Regents of the University of California
!                               All rights reserved

!-----[--.----+----.----+----.-----------------------------------------]
!      Purpose:  2-d  Surface pressure computation for 3D NURBS Block

!      Inputs:
!        fac    - Face number: '1:6' for Pressure  Surface

!      Outputs:
!        neps   - Number of 2D Pressure Surface Facets
!-----[--.----+----.----+----.-----------------------------------------]
      implicit   none

      include   'cnurb.h'
      include   'igdata.h'
      include   'sdata.h'

      include   'pointer.h'
      include   'comblk.h'

      integer    blk, fac, neps

      integer    kno1,lek1,ord1,len1
      integer    kno2,lek2,ord2,len2
      integer    kno3,lek3,ord3,len3,sid3

      logical    setvar, palloc
      integer    i, j, ii, jj, i1, j1, l1, l2, k, ic
      integer    nsides(dsideig,*), lknot(0:4,*),  lside(2,*)
      integer    nblk(14,*), nblksd(dblokig,*)
      integer    ktlen(2),ktdiv1(4,kdiv),ktdiv2(4,kdiv), pko(2)
      integer    pp,qq
      integer,   allocatable :: psides(:,:)
      real*8     knots(dknotig,*), npre(4,*)
      real*8     pres
      integer    pfac, ptyp, propno

      save

!     Extract pressure values

      pfac   = nint(npre(1,blk))
      pres   = npre(2,blk)
      propno = nint(npre(3,blk))
      ptyp   = nint(npre(4,blk))

      write(*,*) 'PFAC:',pfac,pres,propno,ptyp

      fac    = pfac

!     Extract data for knot vectors on  block

      kno1 = nblk(6,blk)     ! Knot 1 on block
      lek1 = lknot(1,kno1)
      ord1 = lknot(2,kno1)
      len1 = lknot(3,kno1)

      kno2 = nblk(7,blk)     ! Knot 2 on block
      lek2 = lknot(1,kno2)
      ord2 = lknot(2,kno2)
      len2 = lknot(3,kno2)

      sid3 = nblksd(1,blk)
      kno3 = lside(2,sid3)   ! Knot 3 on block
      lek3 = lknot(1,kno3)
      ord3 = lknot(2,kno3)
      len3 = lside(1,sid3)

!     Faces 1 or 4

      if(fac.eq.1 .or. fac.eq.4) then

        pko(1) = kno2
        pko(2) = kno3

        l1 = len2
        l2 = len3

        allocate(psides(l1,l2))

        do j = 1,len3
          if(fac.eq.1) then
            jj = len1
          else
            jj = 1
          endif
          do i = 1,len2
            psides(i,j) = nsides(j,nblksd(jj,blk))
            jj = jj + len1
          end do ! i
        end do ! j

!     Faces 2 or 5

      elseif(fac.eq.2 .or. fac.eq.5) then

        pko(1) = kno3
        pko(2) = kno1

        l1 = len3
        l2 = len1

        allocate(psides(l1,l2))

        if(fac.eq.2) then
          jj = len1*len2 - len2 + 1
        else
          jj = 1
        endif
        do j = 1,len1
          do i = 1,len3
            psides(i,j) = nsides(i,nblksd(jj,blk))
          end do ! i
          jj = jj + 1
        end do ! j

!     Faces 3 or 6

      elseif(fac.eq.3 .or. fac.eq.6) then
        pko(1) = kno1
        pko(2) = kno2
        if(fac.eq.3) then
          ii = len3
        else
          ii = 1
        endif
        l1 = len1
        l2 = len2
        allocate(psides(l1,l2))
        jj = 1
        do j = 1,len2
          do i = 1,len1
            psides(i,j) = nsides(ii,nblksd(jj,blk))
            jj = jj + 1
          end do ! i
        end do ! j
      else
        write(*,*) 'WARNING!!!'
        write(*,*) 'Wrong Face number:',fac
        write(*,*) 'Surface input nfac = 1 to 6'
        write(*,*) 'Correct your input Contact data & retray'
        call plstop(.true.)
      endif

!     Set order of knots

      pp    = lknot(2,pko(1))+1
      qq    = lknot(2,pko(2))+1

!     Set element properties in each direction

      call pknotel(knots,lknot,pko(1),ktlen(1),ktdiv1,1)
      call pknotel(knots,lknot,pko(2),ktlen(2),ktdiv2,1)

!     Allocate storage for surface data

      setvar = palloc(317,'UNUR4',2*ktlen(1)*ktlen(2),1)
      setvar = palloc(318,'NPREL',pp*qq*ktlen(1)*ktlen(2),1)

      neps = 0
      k    = 0
      do j1 = 1,ktlen(2)
        do i1 = 1,ktlen(1)
          neps = neps + 1
          mr(np(317)+2*neps-2) = ktdiv1(1,i1)
          mr(np(317)+2*neps-1) = ktdiv2(1,j1)
          ic   = 0
          do j = ktdiv2(3,j1),ktdiv2(4,j1)
            do i = ktdiv1(3,i1),ktdiv1(4,i1)
              mr(np(318)+k) = psides(i,j)    ! Save facet data
              k             = k + 1
              ic            = ic + 1
            end do ! i
          end do ! j
        end do ! i1
      end do ! j1

      deallocate(psides)

      end