Go to the NASA 
                        Website TetrUSS:       
			 USM3D; Skip Navigation
TetrUSS Software Components Application Gallery Supported Platforms Request TetrUSS TetrUSS Team Publications Test Cases Links


Home
Introduction
Overview
Boundary Conditions
Input Files
Running USM3Dns
Using AeroDB
Test Cases
Utilities
Ongoing / Future Work
FAQs
References

APPENDICES


APPENDIX I

USM3D Coordinate System Convention

It is important to construct the computational grid in the correct coordinate system in order for alpha, beta, and the force & moments to be interpreted correctly.

  • The required coordinate system is:

    • x - longitudinal body axis  (positive in downstream direction)
    • y - spanwise or lateral body axis (positive to pilots right if computing lateral/directional coefficients on full configuration. Else y-direction is not important.)
    • z - vertical direction in body axis  (positive upward)

    Force & Moment sign conventions:

    • Alpha (x-z plane)            -   Positive nose up
    • Beta (y-z plane)             -    Positive for yaw to the left
    • Pitching moment (x-z plane)    -   Positive pitch up
    • Rolling moment (y-z plane)     -   Positive roll right
    • Yawing moment (x-y plane)    -   Positive yaw right


    APPENDIX II

    USM3D Nondimensionalization Scheme

    The flow solver employs following scheme for the nondimensionalization of various parameters of interest.

    Considering the convention used for the coordinate system in USM3Dns and the nondimensionalization scheme described above, the freestream and other relevant quantities assume the following nondimensional values/form.

    where:

    Sutherland's law for the molecular viscosity mentioned above is given by:

NASA Official Responsible For Content: Dr. Neal T. Frink
Site Curator: Dr. Neal T. Frink
Last Updated: August 8, 2003

Feedback on Langley Products and Services

APPENDIX III

USM3D/TetrUSS Files Format

  1. proj_name.cogsg

  2. proj_name.bc

  3. proj_name.mapbc

  4. proj_name.fandm
  5. proj_name.urest

1. proj_name.cogsg

created by VGRID/POSTGRID: grid coordinates and connectivity file


parameter(mp=***, me=***)
integer int(me,4)
real*8 crd(mp,3),tc

lcg = 10
open(lcg,file='proj_name.cogsg',form='unformatted',status='old')

write(lcg)inew,ne,np,nb,npv,nev,tc,((int(ie,in),ie=1,ne),in=1,4)
write(lcg)(crd(ip,1),ip=1,np),(crd(ip,2),ip=1,np),(crd(ip,3),ip=1,np)
555 continue

close(lcg)

where:

inew = a dummy variable (= 0)
ne = total number of cells (tetrahedra)
np = total number of grid points (including nb)
nb = number of grid points on the boundaries
npv = number of grid points in the viscous layer (for Euler grids = 0)
nev = number of cells in the viscous layers (for Euler grids = 0)
tc = a dummy variable
int = connectivity array
crd = coordinates array

NOTE: Sequence of point numbers in (crd(..),ip=1,np) are important
1. Refer to VGRID Ref Manual for patch description.
(http://ad-www.larc.nasa.gov/cab/People/SP/Web/manual.pdf)
2. Boundary points are written first
a. Points at corners of 3- and 4-sided patches listed first
b. Points on patch edges follow second
c. Points interior to patches follow third
3. Remaining interior volume grid points are listed next.

2. proj_name.bc

created by VGRID: patch/surface-triangle file

parameter(mbf=***)
integer kfac2(mf),kfac3(mf)
integer kfac4(mf),kfac5(mf)

lmbc = 10
open(unit=lbc,file='proj_name.bc',form='formatted')
rewind lbc

write(lbc,91)nbf,nb1,npatch,igrid
write(lbc,*)'Triangle Surface Patch Nodes'
do iff=1,nbf
write(lbc,93)ifc,kfac2(iff),kfac3(iff),kfac4(iff),kfac5(iff)
enddo
91format(4i8)
93format(5i8)

close(lbc)

where:

nbf = number of boundary triangular faces
nb1 = number of surface grid points along patch boundaries
(sum of NOTE 2a and 2b for project.cogsg description)
npatch = number of surface patches
igrid = 1 for inviscid grids; 2 for viscous grids
kfac2(iff) = surface patch number
kfac3(iff) = node 1 of face iff
kfac4(iff) = node 2 of face iff
kfac5(iff) = node 3 of face iff

3. proj_name.mapbc

created by GridTool: Patch/flow-boundary-condition file


parameter(mpatch=***)
integer bcpch(mpatch)
character*1 text(80)

lmbc = 10
open(lmbc,file='proj_name.mapbc',form='formatted')
rewind lmbc

write(lmbc,900)text
write(lmbc,900)text
write(lmbc,900)text
write(lmbc,900)text
do ipatch=1,npatch
write(lmbc,*)ipatch,bcpch(ipatch)
enddo
900format(80a1)

close(lmbc)

where:
npatch = number of surface patches defining the geometry
bcpch = flow boundary condition assigned to each surface patch

4. proj_name.fandm

parameter (mcomp=***,mpatch=***)
integer ncomp,imoving,irefq,nc,jpatch(mpatch,mcomp)
real*8 srefc,crefc,brefc,xmcc,ymcc,zmcc
character*80 comp_name

lcfm = 10
open(lcfm,file='proj_name.fandm',form='formatted')
rewind lcfm

write(lcfm,*)ncomp
do ncmp = 1,ncomp
write(lcfm,*)'comp_name'
if (irefq.eq.-1) then
write(lcfm,*)irefq
else
write(lcfm,*)srefc,crefc,brefc,xmcc,ymcc,zmcc
endif
write(lcfm,*)imoving
write(lcfm,*)nc,(jpatch(jc),jc=1,nc)
enddo

close(lcfm)

where:

ncomp = number of separate components on which forces and moments to be computed
comp_name = a string for component name
imoving = flag to indicate whether a component is in motion (imoving=1) or static (imoving=0)
irefq = flag to indicate whether component-specific reference quantities specified (irefq=1) or not (irefq=0)
srefc,crefc,brefc = component-specific reference area, reference chord, and reference span. Not needed for irefq = 0. USM3D will use reference quantities specified in the control input file
xmcc,ymcc,zmcc = component-specific moment reference center. Not needed for irefq = 0. USM3D will use reference quantities specified in the control input file
nc = number of patches constituting each of the ncomp components
jpatch = an array of patch indices for nc number of patches constituting each of the ncomp components

5. proj_name.urest

created by USM3D: Solution restart file

parameter(mp=***, mbp=***, mf=***, mbf=***, me=***, mit=***)
real*8 version
real*8 q(me,5),factor(me),tnu(me),smag(ne)
real*8 qnm1(me,5),tnunm1(me)
real*8 vc(me),vcn(me)
real*8 qb(mbf,5),qgh(mbf,5)
real*8 cf(mbp)
real*8 rsid(mt),cll(mt),cdd(mt),cdv(mt),cmm(mt),ctim(mt),cfl(mt)
real*8 rmstnu(mt),runst(mt),timeunst(mt),bdyang(mt)
real*8 pintavg(4),yintake(4,90),zintake(4,90)
real*8 xndorg(mp),yndorg(mp),zndorg(mp),xnd(mp),ynd(mp),znd(mp)
real*8 qnavg(mp,5),qnaux(mp,5)
real*8 avgtime,avgbgnt,avgbgni
real*8 clavg,cdavg,cdvavg,cmavg,floresavg,trbresavg

open(unit=lrf,file='proj_name.urest',status='unknown',form='unformatted')
rewind lrf

write(lrf) version
write(lrf) xmach,ncell,nnode,nface,nbndr,nfbnd,nt,iordflg,
& nswitch,ntUN,ntustart,mtaccflg3,mvgrdflg1,mvgrdflg2,
& mauxflg,tbgnmvgrd

c write q(ncell,5)
do j = 1, 5
write(lrf) (q(nc,j),nc=1,ncell)
end do

c write factor(ncell)
write(lrf) (factor(nc),nc=1,ncell)

c write tnu(nc) and smag(nc)
if(ivisc.gt.1)then
write(lrf) (tnu(nc),nc=1,ncdim)

#if defined(NEW_SMAG)
write(lrf) (smag(nc),nc=1,ncdim)
#endif
endif

c segment for time-accurate/moving grid simulation
IF(mtaccflg3.eq.1)THEN
c write qnm1(ncell,5)
do j = 1, 5
write(lrf) (qnm1(nc,j),nc=1,ncell)
end do
c write tnunm1(ncell)
write(lrf) (tnunm1(nc),nc=1,ncell)
ENDIF
cwrite latest volumes 'vc'
IF(mvgrdflg1.eq.1)THEN
write(lrf) (vc(nc),nc=1,ncell)
ENDIF
cwrite volumes 'vcn'
IF(mvgrdflg2.eq.1)THEN
write(lrf) (vcn(nc),nc=1,ncell)
ENDIF
c ((qb(nf,l), nf=1,nfbnd),l=1,5),
do j = 1, 5
write(lrf) (qb(nc,j),nc=1,nfbnd)
end do
c ((qgh(nf,l),nf=1,nfbnd),l=1,5),
do j = 1, 5
write(lrf) (qgh(nc,j),nc=1,nfbnd)
end do
c (cf(n),n=1,nbndr)
write(lrf) (cf(nc),nc=1,nbndr)

write(lrf) (rsid(n),n=1,nt),(cll(n),n=1,nt),(cdd(n),n=1,nt),
. (cdv(n),n=1,nt),(cmm(n),n=1,nt),(ctim(n),n=1,nt),
. (cfl(n),n=1,nt),(rmstnu(n),n=1,nt),
. (runst(n),n=1,nt),(timeunst(n),n=1,nt),
. (bdyang(n),n=1,nt),
. (pintavg(n),n=1,4)
#if defined(SINKBC1)
. ,((yintake(n,i),n=1,4),i=1,90),
. ((zintake(n,i),n=1,4),i=1,90)
#endif
if(mvgrdflg1.eq.1)then
c (xndorg(n),n=1,nnode)
write(lrf) (xndorg(nc),nc=1,nnode)
c (yndorg(n),n=1,nnode)
write(lrf) (yndorg(nc),nc=1,nnode)
c (zndorg(n),n=1,nnode)
write(lrf) (zndorg(nc),nc=1,nnode)
c (xnd(n),n=1,nnode)
write(lrf) (xnd(nc),nc=1,nnode)
c (ynd(n),n=1,nnode)
write(lrf) (ynd(nc),nc=1,nnode)
c (znd(n),n=1,nnode)
write(lrf) (znd(nc),nc=1,nnode)
endif

#if defined(RUNAVG)
write(lrf)avgtime,avgbgnt,avgbgni,clavg,cdavg,cdvavg,cmavg,
. floresavg,trbresavg
c ((qnavg(n,l),n=1,nnode),l=1,5),
do j = 1, 5
write(lrf) (qnavg(nc,j),nc=1,nnode)
end do
#endif
if(mauxflg.eq.1)then
c write time-averaged auxiliary variables

c eddy viscosity, qnaux(*,3)
write(lrf) (qnaux(nc,3),nc=1,nndim)
c vorticity, qnaux(*,4)
write(lrf) (qnavg(nc,4),nc=1,nndim)
endif

close(lrf)

where:

version = version number of USM3D
xmach = freestream Mach number
ncell = number of tetrahedral cells in the grid
nnode = number of grid nnodes
nface = total number of triangular faces in the grid
nbndim = number of grid nodes on the boundary surfaces in the grid
nfbnd = number of triangular faces on the boundary surfaces in the grid
nt = current iteration counter
iordflg = flag to indicate spatial accuracy of the calculations
nswitch = flag designating iteration at which spatial order of accuracy changes from first to second
ntUN = number of completed physical time steps
ntustart = iteration at which time-accurate computations were started
mtaccflg3 = flag to designate type of time-accurate algorithm used for solution
mvgrdflag1,mvgrdflg2 = flags to designate type of time-accurate algorithm used for moving-body solution
mauxflg = flag to designate whether auxiliary solution variables computed
tbgnmvgrd = nondimensional time at which body motion is first started
q,qnm1 = cell-centered solution variable arrays
factor = array specifying local spatial accuracy of each cell
tnu,tnunm1 = arrays for cell-centered values of the Spalart-Allmaras turbulence model variable
smag = array for vorticity magnitude at cell centers
vc,vcn = cell volumes
qb = solution variables at the boundary triangles
qgh = solution variables at the ghost cells attached to boundary triangles
cf = skin friction magnitude at the boundary nodes
rsid = array for iteration history of mean flow residuals
cll = array for iteration history of lift coefficient
cdd = array for iteration history of drag coefficient
cdv = array for iteration history of viscous drag coefficient
cmm = array for iteration history of pitching moment coefficient
cfl = array for iteration history of CFL number
rmstnu = array for iteration history of turbulence model residual
runst = array for iteration history of mean flow residuals for time-accurate computations
timeunst = array for iteration history of physical time steps for time-accurate computations
bdyang = array for iteration history of body angle for moving-body under 1 degree-of-freedom
pintavg,yintake,zintake = arrays related to engine intake boundary condition with specified mass flow
xndorg,yndorg,zndorg = grid coordinate arrays corresponding to the original position of the body at the beginning of computations
xnd,ynd,znd = grid coordinate arrays corresponding to the original position of the body at the beginning of computations
avgtime = time span over which time-averaged solution computed
avgbgnt,avgbgni = time and iteration at which computation of time-averaged solution started
clavg,cdavf,cdvavg,cmavg = time-averaged values of lift,drag,viscous drag, and pitching moment coefficients, respectively
floresavg,trbresavg = time-averaged values of logarithm of mean flow equations and turbulence model equation residual drop, respectively
qnavg = time-averaged solution values at grid nodes
qnaux = time-averaged auxiliary solution variable values at grid nodes