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
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:

APPENDIX III
USM3D/TetrUSS Files Format
-
-
-
- proj_name.fandm
-
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