Cloned SEACAS for EXODUS library with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
3.5 KiB

2 years ago
C Copyright(C) 1999-2020 National Technology & Engineering Solutions
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
C NTESS, the U.S. Government retains certain rights in this software.
C
C See packages/seacas/LICENSE for details
subroutine getss(ndbin, numess, idess, neess, ndess, ixeess,
* ixdess, lteess, ltsess, ltssnc, kfacss, a, allone, lessdf,
* *)
integer idess(*), neess(*), ndess(*), ixeess(*), ixdess(*)
integer lteess(*), ltsess(*)
integer ltssnc(*)
real a(*)
logical allone
character*256 STRING
C ... Get the sideset ids
call exgssi(ndbin, idess, ierr)
if (ierr .gt. 0) return 1
isoff = 1
inoff = 1
idoff = 1
allone = .TRUE.
call exgcssc(ndbin, ltssnc, ierr)
if (ierr .gt. 0) then
call exopts (EXVRBS, ierr1)
call exerr('grepos/getss', 'Error from exgssc', ierr)
return 1
end if
C ... Read each sideset
itotdf = 0
do 104 i=1, numess
C ... Get the sideset parameters
call exgsp(ndbin, idess(i), nsides, ndist, ierr)
if (ierr .gt. 0) then
call exopts (EXVRBS, ierr1)
call exerr('grepos/getss', 'Error from exgsp', ierr)
return 1
end if
if (nsides .gt. 0) then
call exgss(ndbin, idess(i), lteess(isoff), ltsess(isoff),
* ierr)
if (ierr .gt. 0) then
call exopts (EXVRBS, ierr1)
call exerr('grepos/getss', 'Error from exgss', ierr)
return 1
end if
end if
C ... Count number of nodes in the node list
incnt = 0
do 102 ii = 0, nsides-1
incnt = incnt + ltssnc(isoff+ii)
102 continue
ixeess(i) = isoff
neess(i) = nsides
ixdess(i) = inoff
ndess(i) = incnt
itotdf = itotdf + incnt
isoff = isoff + nsides
inoff = inoff + incnt
104 continue
call mdlong('FACESS', kfacss, itotdf)
lessdf = itotdf
inoff = 0
do i=1, numess
call exgsp(ndbin, idess(i), nsides, ndist, ierr)
C ... See if the number of distribution factors is 0 or 'incnt'
if (ndist .eq. 0 .or. ndist .ne. ndess(i)) then
C ... Fill in the missing dist factors with '1.0'
do ii = 0, ndess(i)-1
a(kfacss+inoff+ii) = 1.0
end do
else
C ... Read in the existing distribution factors
call exgssd(ndbin, idess(i), a(kfacss+inoff), ierr)
end if
C ... There are distribution factors, but an incorrect number
if (ndist .gt. 0 .and. ndist .ne. ndess(i)) then
write (string, 900) idess(i)
call sqzstr(string, lstr)
call prterr('ERROR',STRING(:LSTR))
write (string, 901) ndist, ndess(i)
call sqzstr(string, lstr)
call prterr('ERROR',STRING(:LSTR))
end if
inoff = inoff + ndess(i)
end do
C... Check whether all distribution factors are constant for each sideset.
lessnl = inoff - 1
if (lessnl .gt. 0) then
value = a(kfacss)
else
value = 1.0
end if
do 105 i=1, lessnl-1
if (a(kfacss+i) .ne. value) then
allone = .FALSE.
go to 106
end if
105 continue
106 continue
return
900 format('Sideset ',i5,' has distribution factor/sideset',
$ ' node count mismatch.')
901 format('Database has ',i7,' df, but ',i7,
* ' sideset nodes. All DF set to 1.0')
end