BLL2PS
The BLL2PS routine interpolates a budget-type scalar field from
a global latitude-longitude cylindrical grid (including the
poles) to a matched pair of Polar Stereographic grids centered
on the respective poles, where the orientation longitude
of the Southern Hemisphere grid is 180 degrees opposite
that of the Northern Hemisphere grid. This interpolation
is designed to approximate an area-average conserving
interpolation from fine to coarse resolution but to become
a bilinear interpolation from coarse to fine resolution.
This is accomplished by bilinearly interpolating to a much
finer Polar Stereographic grid and then area-averaging to
the output grid. The current configuration interpolates
to an extravagant 121 points in every output grid box.
This routine also would interpolate associated bitmaps.
This routine is configured only for (i,j,k) order grids.
This routine is fully vectorized and multitasked.
USAGE: CALL BLL2PS(IBM,IM,JM,KM,NPS,KB,TRUE,XMESH,ORIENT,
LB,B,LBN,BN,LBS,BS)
Input argument list:
IBM - INTEGER BITMAP IDENTIFIER
(0 FOR NO BITMAP, 1 TO INTERPOLATE BITMAP)
IM - INTEGER NUMBER OF INPUT LONGITUDES
JM - INTEGER NUMBER OF INPUT LATITUDES
KM - INTEGER NUMBER OF FIELDS TO INTERPOLATE
NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
(CENTER POINTS ARE THE POLE POINTS)
KB - INTEGER SKIP NUMBER BETWEEN INPUT FIELDS
TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
(SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
LB - LOGICAL (IM,JM,KM) BITMAP IF IBM=1
B - REAL (IM,JM,KM) SCALAR FIELD TO INTERPOLATE
Output argument list:
LBN - LOGICAL (NPS,NPS,KM) NORTHERN PS BITMAP IF IBM=1
BN - REAL (IM,JM,KM) INTERPOLATED NORTHERN PS FIELD
LBN - LOGICAL (NPS,NPS,KM) SOUTHERN PS BITMAP IF IBM=1
BN - REAL (IM,JM,KM) INTERPOLATED SOUTHERN PS FIELD
REMARKS: FORTRAN 90 EXTENSIONS ARE USED.
NCPUS
The NCPUS function designates the number of processors
over which to parallelize.
USAGE: NC=NCPUS()
Output arguments:
NCPUS INTEGER NUMBER OF CPUS
SPANALY
The SPANALY routine analyzes spectral coefficients from Fourier
coefficients for a latitude pair (Northern and Southern
Hemispheres). Vector components are multiplied by cosine
of latitude.
USAGE: CALL SPANALY(I,M,IM,IX,NC,NCTOP,KM,WGT,CLAT,PLN,PLNTOP,MP,
F,SPC,SPCTOP)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
IM - INTEGER EVEN NUMBER OF FOURIER COEFFICIENTS
IX - INTEGER DIMENSION OF FOURIER COEFFICIENTS (IX>=IM+2)
NC - INTEGER DIMENSION OF SPECTRAL COEFFICIENTS
(NC>=(M+1)*((I+1)*M+2))
NCTOP - INTEGER DIMENSION OF SPECTRAL COEFFICIENTS OVER TOP
(NCTOP>=2*(M+1))
KM - INTEGER NUMBER OF FIELDS
WGT - REAL GAUSSIAN WEIGHT
CLAT - REAL COSINE OF LATITUDE
PLN - REAL ((M+1)*((I+1)*M+2)/2) LEGENDRE POLYNOMIALS
PLNTOP - REAL (M+1) LEGENDRE POLYNOMIAL OVER TOP
MP - INTEGER (KM) IDENTIFIERS (0 FOR SCALAR, 1 FOR VECTOR)
F - REAL (IX,2,KM) FOURIER COEFFICIENTS COMBINED
SPC - REAL (NC,KM) SPECTRAL COEFFICIENTS
SPCTOP - REAL (NCTOP,KM) SPECTRAL COEFFICIENTS OVER TOP
Output argument list:
SPC - REAL (NC,KM) SPECTRAL COEFFICIENTS
SPCTOP - REAL (NCTOP,KM) SPECTRAL COEFFICIENTS OVER TOP
SPDZ2UV
The SPDZ2UV routine computes the wind components from divergence
and vorticity in spectral space.
Subprogram SPEPS should be called already.
If l is the zonal wavenumber, n is the total wavenumber,
eps(l,n)=sqrt((n**2-l**2)/(4*n**2-1)) and a is earth radius,
then the zonal wind component u is computed as
U(L,N)=-I*L/(N*(N+1))*A*D(L,N)
+EPS(L,N+1)/(N+1)*A*Z(L,N+1)-EPS(L,N)/N*A*Z(L,N-1)
and the meridional wind component v is computed as
V(L,N)=-I*L/(N*(N+1))*A*Z(L,N)
-EPS(L,N+1)/(N+1)*A*D(L,N+1)+EPS(L,N)/N*A*D(L,N-1)
Where d is divergence and z is vorticity.
u and v are weighted by the cosine of latitude.
extra terms are computed over top of the spectral domain.
advantage is taken of the fact that eps(l,l)=0
in order to vectorize over the entire spectral domain.
USAGE: CALL SPDZ2UV(I,M,ENN1,ELONN1,EON,EONTOP,D,Z,U,V,UTOP,VTOP)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
ENN1 - REAL ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
ELONN1 - REAL ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
EON - REAL ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
EONTOP - REAL (M+1) EPSILON/N*A OVER TOP
D - REAL ((M+1)*((I+1)*M+2)) DIVERGENCE
Z - REAL ((M+1)*((I+1)*M+2)) VORTICITY
Output argument list:
U - REAL ((M+1)*((I+1)*M+2)) ZONAL WIND (TIMES COSLAT)
V - REAL ((M+1)*((I+1)*M+2)) MERID WIND (TIMES COSLAT)
UTOP - REAL (2*(M+1)) ZONAL WIND (TIMES COSLAT) OVER TOP
VTOP - REAL (2*(M+1)) MERID WIND (TIMES COSLAT) OVER TOP
SPEPS
The SPEPS routine computes constant fields indexed in the
spectral domain in "IBM order" (zonal wavenumber is the
slower index).
If l is the zonal wavenumber and n is the total wavenumber
and a is the earth radius, then the fields returned are:
(1) Normalizing factor epsilon=sqrt((n**2-l**2)/(4*n**2-1))
(2) Laplacian factor n*(n+1)/a**2
(3) Zonal derivative/laplacian factor l/(n*(n+1))*a
(4) Meridional derivative/laplacian factor epsilon/n*a
USAGE: CALL SPEPS(I,M,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
Output argument list:
EPS - REAL ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
EPSTOP - REAL (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
ENN1 - REAL ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
ELONN1 - REAL ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
EON - REAL ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
EONTOP - REAL (M+1) EPSILON/N*A OVER TOP
SPFFT
The SPFFT routine performs multiple fast fourier transforms
between complex amplitudes in Fourier space and real values
in cyclic physical space.
Subprogram SPFFT must be invoked first with idir=0
to initialize trigonemetric data. Use subprogram SPFFT1
to perform an FFT without previous initialization.
This version invokes the IBM ESSL FFT.
USAGE: CALL SPFFT(IMAX,INCW,INCG,KMAX,W,G,IDIR)
Input argument list:
IMAX - INTEGER NUMBER OF VALUES IN THE CYCLIC PHYSICAL SPACE
(SEE LIMITATIONS ON IMAX IN REMARKS BELOW.)
INCW - INTEGER FIRST DIMENSION OF THE COMPLEX AMPLITUDE ARRAY
(INCW >= IMAX/2+1)
INCG - INTEGER FIRST DIMENSION OF THE REAL VALUE ARRAY
(INCG >= IMAX)
KMAX - INTEGER NUMBER OF TRANSFORMS TO PERFORM
W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR>0
G - REAL(INCG,KMAX) REAL VALUES IF IDIR<0
IDIR - INTEGER DIRECTION FLAG
IDIR=0 TO INITIALIZE INTERNAL TRIGONOMETRIC DATA
IDIR>0 TO TRANSFORM FROM FOURIER TO PHYSICAL SPACE
IDIR<0 TO TRANSFORM FROM PHYSICAL TO FOURIER SPACE
Output argument list:
W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR<0
G - REAL(INCG,KMAX) REAL VALUES IF IDIR>0
SPFFT1
The SPFFT1 routine performs multiple fast Fourier transforms
between complex amplitudes in Fourier space and real values
in cyclic physical space.
Subprogram spfft1 initializes trigonometric data each call.
use subprogram spfft to save time and initialize once.
This version invokes the IBM ESSL FFT.
USAGE: CALL SPFFT1(IMAX,INCW,INCG,KMAX,W,G,IDIR)
INPUT ARGUMENT LIST:
IMAX - INTEGER NUMBER OF VALUES IN THE CYCLIC PHYSICAL SPACE
(SEE LIMITATIONS ON IMAX IN REMARKS BELOW.)
INCW - INTEGER FIRST DIMENSION OF THE COMPLEX AMPLITUDE ARRAY
(INCW >= IMAX/2+1)
INCG - INTEGER FIRST DIMENSION OF THE REAL VALUE ARRAY
(INCG >= IMAX)
KMAX - INTEGER NUMBER OF TRANSFORMS TO PERFORM
W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR>0
G - REAL(INCG,KMAX) REAL VALUES IF IDIR<0
IDIR - INTEGER DIRECTION FLAG
IDIR>0 TO TRANSFORM FROM FOURIER TO PHYSICAL SPACE
IDIR<0 TO TRANSFORM FROM PHYSICAL TO FOURIER SPACE
OUTPUT ARGUMENT LIST:
W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR<0
G - REAL(INCG,KMAX) REAL VALUES IF IDIR>0
SPFFTE
The SPFFTE routine performs multiple fast Fourier transforms
between complex amplitudes in Fourier space and real values
in cyclic physical space.
Subprogram SPFFTE must be invoked first with idir=0
to initialize trigonemetric data. Use subprogram SPFFT1
to perform an FFT without previous initialization.
This version invokes the IBM ESSL FFT.
USAGE: CALL SPFFTE(IMAX,INCW,INCG,KMAX,W,G,IDIR,AFFT)
Input argument list:
IMAX - INTEGER NUMBER OF VALUES IN THE CYCLIC PHYSICAL SPACE
(SEE LIMITATIONS ON IMAX IN REMARKS BELOW.)
INCW - INTEGER FIRST DIMENSION OF THE COMPLEX AMPLITUDE ARRAY
(INCW >= IMAX/2+1)
INCG - INTEGER FIRST DIMENSION OF THE REAL VALUE ARRAY
(INCG >= IMAX)
KMAX - INTEGER NUMBER OF TRANSFORMS TO PERFORM
W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR>0
G - REAL(INCG,KMAX) REAL VALUES IF IDIR<0
IDIR - INTEGER DIRECTION FLAG
IDIR=0 TO INITIALIZE TRIGONOMETRIC DATA
IDIR>0 TO TRANSFORM FROM FOURIER TO PHYSICAL SPACE
IDIR<0 TO TRANSFORM FROM PHYSICAL TO FOURIER SPACE
AFFT REAL(8) (50000+4*IMAX) AUXILIARY ARRAY IF IDIR<>0
Output argument list:
W - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES IF IDIR<0
G - REAL(INCG,KMAX) REAL VALUES IF IDIR>0
AFFT REAL(8) (50000+4*IMAX) AUXILIARY ARRAY IF IDIR=0
SPFFTPT
The SPFFTPT routine computes a slow Fourier Transform
from Fourier space to a set of gridpoints.
USAGE: CALL SPFFTPT(M,N,INCW,INCG,KMAX,RLON,W,G)
Input argument list:
M - INTEGER FOURIER WAVENUMBER TRUNCATION
N - INTEGER NUMBER OF GRIDPOINTS
INCW - INTEGER FIRST DIMENSION OF THE COMPLEX AMPLITUDE ARRAY
(INCW >= M+1)
INCG - INTEGER FIRST DIMENSION OF THE GRIDPOINT ARRAY
(INCG >= N)
KMAX - INTEGER NUMBER OF FOURIER FIELDS
RLON - REAL(N) GRID LONGITUDES IN DEGREES
W - COMPLEX(INCW,KMAX) FOURIER AMPLITUDES
Output argument list:
G - REAL(INCG,KMAX) GRIDPOINT VALUES
SPGRADQ
The SPGRADQ routine computes the horizontal vector gradient of
a scalar field in spectral space.
Subprogram SPEPS should be called already.
If l is the zonal wavenumber, n is the total wavenumber,
eps(l,n)=sqrt((n**2-l**2)/(4*n**2-1)) and a is earth radius,
then the zonal gradient of q(l,n) is simply i*l/a*q(l,n)
while the Meridional Gradient of q(l,n) is computed as
eps(l,n+1)*(n+2)/a*q(l,n+1)-eps(l,n+1)*(n-1)/a*q(l,n-1).
extra terms are computed over top of the spectral domain.
Advantage is taken of the fact that eps(l,l)=0 in
order to vectorize over the entire spectral domain.
USAGE: CALL SPGRADQ(I,M,ENN1,ELONN1,EON,EONTOP,Q,QDX,QDY,QDYTOP)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
ENN1 - REAL ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
ELONN1 - REAL ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
EON - REAL ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
EONTOP - REAL (M+1) EPSILON/N*A OVER TOP
Q - REAL ((M+1)*((I+1)*M+2)) SCALAR FIELD
Output argument list:
QDX - REAL ((M+1)*((I+1)*M+2)) ZONAL GRADIENT (TIMES COSLAT)
QDY - REAL ((M+1)*((I+1)*M+2)) MERID GRADIENT (TIMES COSLAT)
QDYTOP - REAL (2*(M+1)) MERID GRADIENT (TIMES COSLAT) OVER TOP
SPGRADX
The SPGRADX routine computes the x-gradient of fields
in complex Fourier space.
In this case, the wavenumber 1 amplitudes are used
WX=CONJG(W)*L/RERTH
where l is the wavenumber and rerth is the earth radius,
So that the result is the x-gradient of the pseudo-vector.
The x-gradient of a scalar field W is:
WX=CONJG(W)*L/(RERTH*CLAT)
Where clat is the cosine of latitude.
At the pole this is undefined, so the way to get
The x-gradient at the pole is by passing both
The weighted wavenumber 0 and the unweighted wavenumber 1
amplitudes at the pole and setting MP=10.
In this case, the wavenumber 1 amplitudes are used
to compute the x-gradient and then zeroed out.
Input argument list:
M - INTEGER FOURIER WAVENUMBER TRUNCATION
INCW - INTEGER FIRST DIMENSION OF THE COMPLEX AMPLITUDE ARRAY
(INCW >= M+1)
KMAX - INTEGER NUMBER OF FOURIER FIELDS
MP - INTEGER (KM) IDENTIFIERS
(0 OR 10 FOR SCALAR, 1 FOR VECTOR)
CLAT - REAL COSINE OF LATITUDE
W - COMPLEX(INCW,KMAX) FOURIER AMPLITUDES
Output argument list:
W - COMPLEX(INCW,KMAX) FOURIER AMPLITUDES
CORRECTED WHEN MP=10 AND CLAT=0
WX - COMPLEX(INCW,KMAX) COMPLEX AMPLITUDES OF X-GRADIENTS
SPGRADY
The SPGRADY routine computes the horizontal vector y-gradient
of a scalar field in spectral space.
Subprogram speps should be called already.
If L is the zonal wavenumber, N is the total wavenumber,
EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) and a is earth radius,
then the meridional gradient of Q(L,N) is computed as
EPS(L,N+1)*(N+2)/A*Q(L,N+1)-EPS(L,N+1)*(N-1)/A*Q(L,N-1).
Extra terms are computed over top of the spectral domain.
advantage is taken of the fact that EPS(L,L)=0
In order to vectorize over the entire spectral domain.
USAGE: CALL SPGRADY(I,M,ENN1,EON,EONTOP,Q,QDY,QDYTOP)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
ENN1 - REAL ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
EON - REAL ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
EONTOP - REAL (M+1) EPSILON/N*A OVER TOP
Q - REAL ((M+1)*((I+1)*M+2)) SCALAR FIELD
Output argument list:
QDY - REAL ((M+1)*((I+1)*M+2)) MERID GRADIENT (TIMES COSLAT)
QDYTOP - REAL (2*(M+1)) MERID GRADIENT (TIMES COSLAT) OVER TOP
SPLAPLAC
The SPLAPLAC routine computes the Laplacian or the inverse Laplacian
of a scalar field in spectral space.
Subprogram speps should be called already.
The Laplacian of q(l,n) is simply -n*(n+1)/a**2*q(l,n)
USAGE: CALL SPLAPLAC(I,M,ENN1,Q,QD2,IDIR)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
ENN1 - REAL ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
Q - IF IDIR > 0, REAL ((M+1)*((I+1)*M+2)) SCALAR FIELD
QD2 - IF IDIR < 0, REAL ((M+1)*((I+1)*M+2)) LAPLACIAN
IDIR - INTEGER FLAG
IDIR > 0 TO TAKE LAPLACIAN
IDIR < 0 TO TAKE INVERSE LAPLACIAN
Output argument list:
Q - IF IDIR < 0, REAL ((M+1)*((I+1)*M+2)) SCALAR FIELD
(Q(0,0) IS NOT COMPUTED)
QD2 - IF IDIR > 0, REAL ((M+1)*((I+1)*M+2)) LAPLACIAN
SPLAT
The SPLAT routine computes cosines of colatitude and gaussian weights
for one of the following specific global sets of latitudes.
Gaussian latitudes (idrt=4)
Equally-Spaced latitudes including poles (idrt=0)
Equally-Spaced latitudes excluding poles (idrt=256)
The Gaussian latitudes are located at the zeroes of the
legendre polynomial of the given order. These latitudes
are efficient for reversible transforms from spectral space.
(about twice as many equally-spaced latitudes are needed.)
The weights for the equally-spaced latitudes are based on
Ellsaesser (Jan,1966). (No weight is given the pole point.)
note that when analyzing grid to spectral in latitude pairs,
If an equator point exists, its weight should be halved.
This version invokes the IBM ESSL Matrix Solver.
USAGE: CALL SPLAT(IDRT,JMAX,SLAT,WLAT)
Input argument list:
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
JMAX - INTEGER NUMBER OF LATITUDES.
Output argument list:
SLAT - REAL (JMAX) SINES OF LATITUDE.
WLAT - REAL (JMAX) GAUSSIAN WEIGHTS.
SPLEGEND
The SPLEGEND routine evaluates the Orthonormal associated
legendre Polynomials in the spectral domain at a
given latitude.
Subprogram SPLEGEND should be called already.
If l is the zonal wavenumber, n is the total wavenumber,
and eps(l,n)=sqrt((n**2-l**2)/(4*n**2-1)) then
The following bootstrapping formulas are used:
pln(0,0)=sqrt(0.5)
pln(l,l)=pln(l-1,l-1)*clat*sqrt(float(2*l+1)/float(2*l))
pln(l,n)=(slat*pln(l,n-1)-eps(l,n-1)*pln(l,n-2))/eps(l,n)
Synthesis at the pole needs only two zonal wavenumbers.
Scalar fields are synthesized with zonal wavenumber 0 while
vector fields are synthesized with zonal wavenumber 1.
(Thus polar vector fields are implicitly divided by clat.)
The following bootstrapping formulas are used at the pole:
pln(0,0)=sqrt(0.5)
pln(1,1)=sqrt(0.75)
pln(l,n)=(pln(l,n-1)-eps(l,n-1)*pln(l,n-2))/eps(l,n)
USAGE: CALL SPLEGEND(I,M,SLAT,CLAT,EPS,EPSTOP,PLN,PLNTOP)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
SLAT - REAL SINE OF LATITUDE
CLAT - REAL COSINE OF LATITUDE
EPS - REAL ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
EPSTOP - REAL (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
Output argument list:
PLN - REAL ((M+1)*((I+1)*M+2)/2) LEGENDRE POLYNOMIAL
PLNTOP - REAL (M+1) LEGENDRE POLYNOMIAL OVER TOP
SPPAD
The SPPAD routine pads or truncates a spectral field.
USAGE: CALL SPPAD(I1,M1,Q1,I2,M2,Q2)
Input argument list:
I1 - INTEGER INPUT SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M1 - INTEGER INPUT SPECTRAL TRUNCATION
Q1 - REAL ((M+1)*((I+1)*M+2)) INPUT FIELD
I2 - INTEGER OUTPUT SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M2 - INTEGER OUTPUT SPECTRAL TRUNCATION
Output argument list:
Q2 - REAL ((M+1)*((I+1)*M+2)) OUTPUT FIELD
SPSYNTH
The SPSYNTH routine synthesizes Fourier coefficients from
spectral coefficients for a latitude pair (Northern and
Southern Hemispheres). Vector components are divided by
cosine of latitude.
USAGE: CALL SPSYNTH(I,M,IM,IX,NC,NCTOP,KM,CLAT,PLN,PLNTOP,MP,
SPC,SPCTOP,F)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
IM - INTEGER EVEN NUMBER OF FOURIER COEFFICIENTS
IX - INTEGER DIMENSION OF FOURIER COEFFICIENTS (IX>=IM+2)
NC - INTEGER DIMENSION OF SPECTRAL COEFFICIENTS
(NC>=(M+1)*((I+1)*M+2))
NCTOP - INTEGER DIMENSION OF SPECTRAL COEFFICIENTS OVER TOP
(NCTOP>=2*(M+1))
KM - INTEGER NUMBER OF FIELDS
CLAT - REAL COSINE OF LATITUDE
PLN - REAL ((M+1)*((I+1)*M+2)/2) LEGENDRE POLYNOMIAL
PLNTOP - REAL (M+1) LEGENDRE POLYNOMIAL OVER TOP
SPC - REAL (NC,KM) SPECTRAL COEFFICIENTS
SPCTOP - REAL (NCTOP,KM) SPECTRAL COEFFICIENTS OVER TOP
MP - INTEGER (KM) IDENTIFIERS (0 FOR SCALAR, 1 FOR VECTOR)
Output argument list:
F - REAL (IX,2,KM) FOURIER COEFFICIENTS FOR LATITUDE PAIR
SPTEZ
The SPTEZ routine performs a Spherical transform between
spectral coefficients of a scalar quantity and a field
on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave field is in sequential 'IBM order'.
The grid field is indexed East to West, then North to South.
For more flexibility and efficiency, call SPTRAN.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTEZ(IROMB,MAXWV,IDRT,IMAX,JMAX,WAVE,GRID,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
WAVE - REAL (2*MX) WAVE FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRID - REAL (IMAX,JMAX) GRID FIELD (E->W,N->S) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVE - REAL (2*MX) WAVE FIELD IF IDIR<0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRID - REAL (IMAX,JMAX) GRID FIELD (E->W,N->S) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTEZD
The SPTEZD routine performs a spherical transform
between spectral coefficients of a scalar field
and its mean and gradient on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave field is in sequential 'IBM order'.
The grid fiels is indexed East to West, then North to South.
For more flexibility and efficiency, call SPTRAN.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTEZD(IROMB,MAXWV,IDRT,IMAX,JMAX,
WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
WAVE - REAL (*) WAVE FIELD IF IDIR>0
GRIDMN - REAL GLOBAL MEAN IF IDIR<0
GRIDX - REAL (IMAX,JMAX) GRID X-GRADIENTS (E->W,N->S) IF IDIR<0
GRIDY - REAL (IMAX,JMAX) GRID Y-GRADIENTS (E->W,N->S) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVE - REAL (*) WAVE FIELD IF IDIR<0
GRIDMN - REAL GLOBAL MEAN IF IDIR>0
GRIDX - REAL (IMAX,JMAX) GRID X-GRADIENTS (E->W,N->S) IF IDIR>0
GRIDY - REAL (IMAX,JMAX) GRID Y-GRADIENTS (E->W,N->S) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTEZM
The SPTEZM routine performs spherical transforms
between spectral coefficients of scalar quantities
and fields on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
wave fields are in sequential 'IBM order'.
Grid fields are indexed East to West, Then North to South.
For more flexibility and efficiency, call SPTRAN.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTEZM(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,WAVE,GRID,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES
JMAX - INTEGER NUMBER OF LATITUDES
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM
WAVE - REAL (2*MX,KMAX) WAVE FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRID - REAL (IMAX,JMAX,KMAX) GRID FIELD (E->W,N->S) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVE - REAL (2*MX,KMAX) WAVE FIELD IF IDIR<0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRID - REAL (IMAX,JMAX,KMAX) GRID FIELD (E->W,N->S) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTEZMD
The SPTEZMD routine performs spherical transforms
between spectral coefficients of scalar fields
and their means and gradients on a global cylindrical
grid. The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave fields are in sequential 'IBM order'.
The grid fields are indexed East to West, then North to South.
For more flexibility and efficiency, call SPTRAN.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTEZMD(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
WAVE - REAL (MX,KMAX) WAVE FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)
GRIDMN - REAL (KMAX) GLOBAL MEAN IF IDIR<0
GRIDX - REAL (IMAX,JMAX,KMAX) GRID X-GRADIENTS (E->W,N->S) IF IDIR<0
GRIDY - REAL (IMAX,JMAX,KMAX) GRID Y-GRADIENTS (E->W,N->S) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVE - REAL (MX,KMAX) WAVE FIELD IF IDIR<0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)
GRIDMN - REAL (KMAX) GLOBAL MEAN IF IDIR>0
GRIDX - REAL (IMAX,JMAX,KMAX) GRID X-GRADIENTS (E->W,N->S) IF IDIR>0
GRIDY - REAL (IMAX,JMAX,KMAX) GRID Y-GRADIENTS (E->W,N->S) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTEZMV
The SPTEZMV routine performs Spherical transforms
between spectral coefficients of divergence and curl
and vector fields on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
wave fields are in sequential 'IBM order'.
Grid fields are indexed East to West, then North to South.
For more flexibility and efficiency, call SPTRAN.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTEZMV(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES
JMAX - INTEGER NUMBER OF LATITUDES
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM
WAVED - REAL (2*MX,KMAX) WAVE DIVERGENCE FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
WAVEZ - REAL (2*MX,KMAX) WAVE VORTICITY FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRIDU - REAL (IMAX,JMAX,KMAX) GRID U-WIND (E->W,N->S) IF IDIR<0
GRIDV - REAL (IMAX,JMAX,KMAX) GRID V-WIND (E->W,N->S) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVED - REAL (2*MX,KMAX) WAVE DIVERGENCE FIELD IF IDIR<0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
WAVEZ - REAL (2*MX,KMAX) WAVE VORTICITY FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRIDU - REAL (IMAX,JMAX,KMAX) GRID U-WIND (E->W,N->S) IF IDIR>0
GRIDV - REAL (IMAX,JMAX,KMAX) GRID V-WIND (E->W,N->S) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTEZV
The SPTEZV routine performs a Spherical transform
between spectral coefficients of divergence and curl
and a vector field on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave field is in sequential 'IBM order'.
The grid fiels is indexed East to West, then North to South.
For more flexibility and efficiency, call SPTRAN.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTEZV(IROMB,MAXWV,IDRT,IMAX,JMAX,
WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
WAVED - REAL (2*MX) WAVE DIVERGENCE FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
WAVEZ - REAL (2*MX) WAVE VORTICITY FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRIDU - REAL (IMAX,JMAX) GRID U-WIND (E->W,N->S) IF IDIR<0
GRIDV - REAL (IMAX,JMAX) GRID V-WIND (E->W,N->S) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVED - REAL (2*MX) WAVE DIVERGENCE FIELD IF IDIR<0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
WAVEZ - REAL (2*MX) WAVE VORTICITY FIELD IF IDIR>0
WHERE MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
GRIDU - REAL (IMAX,JMAX) GRID U-WIND (E->W,N->S) IF IDIR>0
GRIDV - REAL (IMAX,JMAX) GRID V-WIND (E->W,N->S) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTGPM
The SPTGPM routine performs a spherical transform
from spectral coefficients of scalar quantities
to scalar fields on a Mercator grid.
The wave-space can be either Triangular or Rhomboidal.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The Mercator grid is identified by the location
of its first point and by its respective increments.
The transforms are all multiprocessed over sector points.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPM(IROMB,MAXWV,KMAX,MI,MJ,
KWSKIP,KGSKIP,NISKIP,NJSKIP,
RLAT1,RLON1,DLAT,DLON,WAVE,GM)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO MI*MJ IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO MI IF NJSKIP=0)
RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
(IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
THE LATITUDE INCREMENT DLAT IS DETERMINED AS
DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
WAVE - REAL (*) WAVE FIELDS
Output arguments:
GM - REAL (*) MERCATOR FIELDS
SPTGPMD
The SPTGPMD routine performs a Spherical transform
from spectral coefficients of scalar fields
to gradient fields on a Mercator grid.
The wave-space can be either Triangular or Rhomboidal.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The Mercator grid is identified by the location
of its first point and by its respective increments.
The transforms are all multiprocessed over sector points.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPMD(IROMB,MAXWV,KMAX,MI,MJ,
KWSKIP,KGSKIP,NISKIP,NJSKIP,
RLAT1,RLON1,DLAT,DLON,WAVE,XM,YM)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO MI*MJ IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO MI IF NJSKIP=0)
RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
(IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
THE LATITUDE INCREMENT DLAT IS DETERMINED AS
DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
WAVE - REAL (*) WAVE FIELDS
Output arguments:
XM - REAL (*) MERCATOR X-GRADIENTS
YM - REAL (*) MERCATOR Y-GRADIENTS
SPTGPMV
The SPTGPMV routine performs a Spherical transform
from spectral coefficients of divergences and curls
to vector fields on a Mercator grid.
The wave-space can be either Triangular or Rhomboidal.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The Mercator grid is identified by the location
of its first point and by its respective increments.
The transforms are all multiprocessed over sector points.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPMV(IROMB,MAXWV,KMAX,MI,MJ,
KWSKIP,KGSKIP,NISKIP,NJSKIP,
RLAT1,RLON1,DLAT,DLON,WAVED,WAVEZ,UM,VM)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO MI*MJ IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO MI IF NJSKIP=0)
RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
(IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
THE LATITUDE INCREMENT DLAT IS DETERMINED AS
DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
WAVED - REAL (*) WAVE DIVERGENCE FIELDS
WAVEZ - REAL (*) WAVE VORTICITY FIELDS
Output arguments:
UM - REAL (*) MERCATOR U-WINDS
VM - REAL (*) MERCATOR V-WINDS
SPTGPS
The SPTGPS routine performs a Spherical transform
from spectral coefficients of scalar quantities
to scalar fields on a pair of Polar Stereographic grids.
The wave-space can be either Triangular or Rhomboidal.
The wave and grid fields may have general indexing,
But each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The two square Polar Stereographic grids are centered
on the respective poles, with the orientation longitude
of the Southern Hemisphere grid 180 degrees opposite
that of the Northern Hemisphere grid.
The transform is made efficient \ 4 | 5 /
by combining points in eight sectors \ | /
of each Polar Stereographic grid, 3 \ | / 6
numbered as in the diagram at right. \|/
The pole and the sector boundaries ----+----
are treated specially in the code. /|\
unfortunately, this approach induces 2 / | \ 7
some hairy indexing and code loquacity, / | \
For which the developer apologizes. / 1 | 8 \
The transforms are all multiprocessed over sector points.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPS(IROMB,MAXWV,KMAX,NPS,
KWSKIP,KGSKIP,NISKIP,NJSKIP,
TRUE,XMESH,ORIENT,WAVE,GN,GS)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO NPS*NPS IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO NPS IF NJSKIP=0)
TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
(SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
WAVE - REAL (*) WAVE FIELDS
Output arguments:
GN - REAL (*) NORTHERN POLAR STEREOGRAPHIC FIELDS
GS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC FIELDS
SPTGPSD
The SPTGPSD routine performs a Spherical transform
from spectral coefficients of scalar fields
to gradient fields on a pair of Polar Stereographic grids.
The wave-space can be either Triangular or Rhomboidal.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The two square Polar Stereographic grids are centered
on the respective poles, with the orientation longitude
of the Southern Hemisphere grid 180 degrees opposite
that of the Northern Hemisphere grid.
The vectors are automatically rotated to be resolved
relative to the respective Polar Stereographic grids.
The transform is made efficient \ 4 | 5 /
by combining points in eight sectors \ | /
of each Polar Stereographic grid, 3 \ | / 6
numbered as in the diagram at right. \|/
The pole and the sector boundaries ----+----
are treated specially in the code. /|\
unfortunately, this approach induces 2 / | \ 7
some hairy indexing and code loquacity, / | \
For which the developer apologizes. / 1 | 8 \
The transforms are all multiprocessed over sector points.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPSD(IROMB,MAXWV,KMAX,NPS,
KWSKIP,KGSKIP,NISKIP,NJSKIP,
TRUE,XMESH,ORIENT,WAVE,XP,YP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO NPS*NPS IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO NPS IF NJSKIP=0)
TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
(SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
WAVE - REAL (*) WAVE FIELDS
Output arguments:
XN - REAL (*) NORTHERN POLAR STEREOGRAPHIC X-GRADIENTS
YN - REAL (*) NORTHERN POLAR STEREOGRAPHIC Y-GRADIENTS
XS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC X-GRADIENTS
YS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC Y-GRADIENTS
SPTGPSV
The SPTGPSV routine performs a Spherical transform
from spectral coefficients of divergences and curls
to vector fields on a pair of Polar Stereographic grids.
The wave-space can be either Triangular or Rhomboidal.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The two square Polar Stereographic grids are centered
on the respective poles, with the orientation longitude
of the Southern Hemisphere grid 180 degrees opposite
that of the Northern Hemisphere grid.
The vectors are automatically rotated to be resolved
relative to the respective Polar Stereographic grids.
The transform is made efficient \ 4 | 5 /
by combining points in eight sectors \ | /
of each Polar Stereographic grid, 3 \ | / 6
numbered as in the diagram at right. \|/
The pole and the sector boundaries ----+----
are treated specially in the code. /|\
unfortunately, this approach induces 2 / | \ 7
some hairy indexing and code loquacity, / | \
For which the developer apologizes. / 1 | 8 \
The transforms are all multiprocessed over sector points.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPSV(IROMB,MAXWV,KMAX,NPS,
KWSKIP,KGSKIP,NISKIP,NJSKIP,
TRUE,XMESH,ORIENT,WAVED,WAVEZ,UN,VN,US,VS)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO NPS*NPS IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO NPS IF NJSKIP=0)
TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
(SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
WAVED - REAL (*) WAVE DIVERGENCE FIELDS
WAVEZ - REAL (*) WAVE VORTICITY FIELDS
Output arguments:
UN - REAL (*) NORTHERN POLAR STEREOGRAPHIC U-WINDS
VN - REAL (*) NORTHERN POLAR STEREOGRAPHIC V-WINDS
US - REAL (*) SOUTHERN POLAR STEREOGRAPHIC U-WINDS
VS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC V-WINDS
SPTGPT
The SPTGPT routine performs a spherical transform
from spectral coefficients of scalar quantities
to specified sets of station points on the globe.
The wave-space can be either Triangular or Rhomboidal.
The wave and point fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The transforms are all multiprocessed over stations.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPT(IROMB,MAXWV,KMAX,NMAX,
KWSKIP,KGSKIP,NRSKIP,NGSKIP,
RLAT,RLON,WAVE,GP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
(DEFAULTS TO NMAX IF KGSKIP=0)
NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
(DEFAULTS TO 1 IF NRSKIP=0)
NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
(DEFAULTS TO 1 IF NGSKIP=0)
RLAT - REAL (*) STATION LATITUDES IN DEGREES
RLON - REAL (*) STATION LONGITUDES IN DEGREES
WAVE - REAL (*) WAVE FIELDS
Output arguments:
GP - REAL (*) STATION POINT SETS
SPTGPTD
The SPTGPTD routine performs a spherical transform
from spectral coefficients of scalar fields
to specified sets of station point gradients on the globe.
The wave-space can be either Triangular or Rhomboidal.
The wave and point fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The transforms are all multiprocessed over stations.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPTD(IROMB,MAXWV,KMAX,NMAX,
KWSKIP,KGSKIP,NRSKIP,NGSKIP,
RLAT,RLON,WAVE,XP,YP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
(DEFAULTS TO NMAX IF KGSKIP=0)
NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
(DEFAULTS TO 1 IF NRSKIP=0)
NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
(DEFAULTS TO 1 IF NGSKIP=0)
RLAT - REAL (*) STATION LATITUDES IN DEGREES
RLON - REAL (*) STATION LONGITUDES IN DEGREES
WAVE - REAL (*) WAVE FIELDS
Output arguments:
XP - REAL (*) STATION POINT X-GRADIENT SETS
YP - REAL (*) STATION POINT Y-GRADIENT SETS
SPTGPTSD
The SPTGPTSD routine performs a Spherical transform
From Spectral coefficients of scalar quantities
to specified sets of station point values
and their gradients on the globe.
The wave-space can be either Triangular or Rhomboidal.
The wave and point fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The transforms are all multiprocessed over stations.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPTSD(IROMB,MAXWV,KMAX,NMAX,
KWSKIP,KGSKIP,NRSKIP,NGSKIP,
RLAT,RLON,WAVE,GP,XP,YP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
(DEFAULTS TO NMAX IF KGSKIP=0)
NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
(DEFAULTS TO 1 IF NRSKIP=0)
NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
(DEFAULTS TO 1 IF NGSKIP=0)
RLAT - REAL (*) STATION LATITUDES IN DEGREES
RLON - REAL (*) STATION LONGITUDES IN DEGREES
WAVE - REAL (*) WAVE FIELDS
Output arguments:
GP - REAL (*) STATION POINT SETS
XP - REAL (*) STATION POINT X-GRADIENT SETS
YP - REAL (*) STATION POINT Y-GRADIENT SETS
SPTGPTV
The SPTGPTV routine performs a spherical transform
from spectral coefficients of divergences and curls
to specified sets of station point vectors on the globe.
The wave-space can be either Triangular or Rhomboidal.
The wave and point fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The transforms are all multiprocessed over stations.
transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPTV(IROMB,MAXWV,KMAX,NMAX,
KWSKIP,KGSKIP,NRSKIP,NGSKIP,
RLAT,RLON,WAVED,WAVEZ,UP,VP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
(DEFAULTS TO NMAX IF KGSKIP=0)
NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
(DEFAULTS TO 1 IF NRSKIP=0)
NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
(DEFAULTS TO 1 IF NGSKIP=0)
RLAT - REAL (*) STATION LATITUDES IN DEGREES
RLON - REAL (*) STATION LONGITUDES IN DEGREES
WAVED - REAL (*) WAVE DIVERGENCE FIELDS
WAVEZ - REAL (*) WAVE VORTICITY FIELDS
Output arguments:
UP - REAL (*) STATION POINT U-WIND SETS
VP - REAL (*) STATION POINT V-WIND SETS
SPTGPTVD
The SPTGPTVD routine performs a Spherical Transform
from Spectral coefficients of divergences and curls
to specified sets of station point vectors and their
gradients on the globe.
DP=(D(UP)/DLON+D(VP*CLAT)/DLAT)/(R*CLAT)
ZP=(D(VP)/DLON-D(UP*CLAT)/DLAT)/(R*CLAT)
UXP=D(UP*CLAT)/DLON/(R*CLAT)
VXP=D(VP*CLAT)/DLON/(R*CLAT)
UYP=D(UP*CLAT)/DLAT/R
VYP=D(VP*CLAT)/DLAT/R
The wave-space can be either Triangular or Rhomboidal.
The wave and point fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
The Transforms are all multiprocessed over stations.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTGPTVD(IROMB,MAXWV,KMAX,NMAX,
KWSKIP,KGSKIP,NRSKIP,NGSKIP,
RLAT,RLON,WAVED,WAVEZ,
DP,ZP,UP,VP,UXP,VXP,UYP,VYP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
(DEFAULTS TO NMAX IF KGSKIP=0)
NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
(DEFAULTS TO 1 IF NRSKIP=0)
NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
(DEFAULTS TO 1 IF NGSKIP=0)
RLAT - REAL (*) STATION LATITUDES IN DEGREES
RLON - REAL (*) STATION LONGITUDES IN DEGREES
WAVED - REAL (*) WAVE DIVERGENCE FIELDS
WAVEZ - REAL (*) WAVE VORTICITY FIELDS
Output arguments:
DP - REAL (*) STATION POINT DIVERGENCE SETS
ZP - REAL (*) STATION POINT VORTICITY SETS
UP - REAL (*) STATION POINT U-WIND SETS
VP - REAL (*) STATION POINT V-WIND SETS
UXP - REAL (*) STATION POINT U-WIND X-GRADIENT SETS
VXP - REAL (*) STATION POINT V-WIND X-GRADIENT SETS
UYP - REAL (*) STATION POINT U-WIND Y-GRADIENT SETS
VYP - REAL (*) STATION POINT V-WIND Y-GRADIENT SETS
SPTRAN
The SPTRAN routine performs a spherical transform
between spectral coefficients of scalar quantities
and fields on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
Transforms are done in latitude pairs for efficiency;
Thus grid arrays for each hemisphere must be passed.
If so requested, just a subset of the latitude pairs
may be transformed in each invocation of the subprogram.
The transforms are all multiprocessed over latitude except
The transform from Fourier to spectral is multiprocessed
over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRAN(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
JBEG,JEND,JCPU,
WAVE,GRIDN,GRIDS,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IPRIME - INTEGER LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
ISKIP - INTEGER SKIP NUMBER BETWEEN LONGITUDES
(DEFAULTS TO 1 IF ISKIP=0)
JNSKIP - INTEGER SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
(DEFAULTS TO IMAX IF JNSKIP=0)
JSSKIP - INTEGER SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
(DEFAULTS TO -IMAX IF JSSKIP=0)
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO IMAX*JMAX IF KGSKIP=0)
JBEG - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
(DEFAULTS TO 1 IF JBEG=0)
(IF JBEG=0 AND IDIR<0, WAVE IS ZEROED BEFORE TRANSFORM)
JEND - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM
(DEFAULTS TO (JMAX+1)/2 IF JEND=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
WAVE - REAL (*) WAVE FIELDS IF IDIR>0
GRIDN - REAL (*) N.H. GRID FIELDS (STARTING AT JBEG) IF IDIR<0
GRIDS - REAL (*) S.H. GRID FIELDS (STARTING AT JBEG) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVE - REAL (*) WAVE FIELDS IF IDIR<0
GRIDN - REAL (*) N.H. GRID FIELDS (STARTING AT JBEG) IF IDIR>0
GRIDS - REAL (*) S.H. GRID FIELDS (STARTING AT JBEG) IF IDIR>0
SPTRAND
The SPTRAND routine performs a spherical transform
between spectral coefficients of scalar fields
and their means and gradients on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
Transforms are done in latitude pairs for efficiency;
thus grid arrays for each hemisphere must be passed.
If so requested, just a subset of the latitude pairs
may be transformed in each invocation of the subprogram.
The transforms are all multiprocessed over latitude except
The transform from Fourier to spectral is multiprocessed
over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRAND(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
JBEG,JEND,JCPU,
WAVE,GRIDMN,GRIDXN,GRIDXS,GRIDYN,GRIDYS,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IPRIME - INTEGER LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
ISKIP - INTEGER SKIP NUMBER BETWEEN LONGITUDES
(DEFAULTS TO 1 IF ISKIP=0)
JNSKIP - INTEGER SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
(DEFAULTS TO IMAX IF JNSKIP=0)
JSSKIP - INTEGER SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
(DEFAULTS TO -IMAX IF JSSKIP=0)
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO IMAX*JMAX IF KGSKIP=0)
JBEG - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
(DEFAULTS TO 1 IF JBEG=0)
(IF JBEG=0 AND IDIR<0, WAVE IS ZEROED BEFORE TRANSFORM)
JEND - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM
(DEFAULTS TO (JMAX+1)/2 IF JEND=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
WAVE - REAL (*) WAVE FIELDS IF IDIR>0
GRIDMN - REAL (KMAX) GLOBAL MEANS IF IDIR<0
GRIDXN - REAL (*) N.H. X-GRADIENTS (STARTING AT JBEG) IF IDIR<0
GRIDXS - REAL (*) S.H. X-GRADIENTS (STARTING AT JBEG) IF IDIR<0
GRIDYN - REAL (*) N.H. Y-GRADIENTS (STARTING AT JBEG) IF IDIR<0
GRIDYS - REAL (*) S.H. Y-GRADIENTS (STARTING AT JBEG) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVE - REAL (*) WAVE FIELDS IF IDIR<0
GRIDMN - REAL (KMAX) GLOBAL MEANS IF IDIR>0
GRIDXN - REAL (*) N.H. X-GRADIENTS (STARTING AT JBEG) IF IDIR>0
GRIDXS - REAL (*) S.H. X-GRADIENTS (STARTING AT JBEG) IF IDIR>0
[GRIDX=(D(WAVE)/DLAM)/(CLAT*RERTH)]
GRIDYN - REAL (*) N.H. Y-GRADIENTS (STARTING AT JBEG) IF IDIR>0
GRIDYS - REAL (*) S.H. Y-GRADIENTS (STARTING AT JBEG) IF IDIR>0
[GRIDY=(D(WAVE)/DPHI)/RERTH]
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRANF
The SPTRANF routine performs a spherical transform
between spectral coefficients of scalar quantities
and fields on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
Transforms are done in latitude pairs for efficiency;
Thus grid arrays for each hemisphere must be passed.
If so requested, just a subset of the latitude pairs
may be transformed in each invocation of the subprogram.
The transforms are all multiprocessed over latitude except
The transform from Fourier to spectral is multiprocessed
over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRANF(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
IP,IS,JN,JS,KW,KG,JB,JE,JC,
WAVE,GRIDN,GRIDS,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IP - INTEGER LONGITUDE INDEX FOR THE PRIME MERIDIAN
IS - INTEGER SKIP NUMBER BETWEEN LONGITUDES
JN - INTEGER SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
JS - INTEGER SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
KW - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
KG - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
JB - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
JE - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM
JC - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
WAVE - REAL (*) WAVE FIELDS IF IDIR>0
GRIDN - REAL (*) N.H. GRID FIELDS (STARTING AT JB) IF IDIR<0
GRIDS - REAL (*) S.H. GRID FIELDS (STARTING AT JB) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVE - REAL (*) WAVE FIELDS IF IDIR<0
GRIDN - REAL (*) N.H. GRID FIELDS (STARTING AT JB) IF IDIR>0
GRIDS - REAL (*) S.H. GRID FIELDS (STARTING AT JB) IF IDIR>0
SPTRANF0
The SPTRANF0 routine performs an initialization for
Subprogram SPTRANF. Use this subprogram outside
the SPTRANF family context at your own risk.
USAGE: CALL SPTRANF0(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES
JMAX - INTEGER NUMBER OF LATITUDES
JB - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
JE - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM
Output arguments:
EPS - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EPSTOP - REAL (MAXWV+1)
ENN1 - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
ELONN1 - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EON - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EONTOP - REAL (MAXWV+1)
AFFT - REAL(8) (50000+4*IMAX) AUXILIARY ARRAY IF IDIR=0
CLAT - REAL (JB:JE) COSINES OF LATITUDE
SLAT - REAL (JB:JE) SINES OF LATITUDE
WLAT - REAL (JB:JE) GAUSSIAN WEIGHTS
PLN - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
LEGENDRE POLYNOMIALS
PLNTOP - REAL (MAXWV+1,JB:JE) LEGENDRE POLYNOMIAL OVER TOP
SPTRANF1
The SPTRANF1 routine performs an single latitude transform for
subprogram SPTRANF. Use this subprogram outside
the SPTRANF family context at your own risk.
USAGE: CALL SPTRANF1(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP,MP,
W,WTOP,G,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES
JMAX - INTEGER NUMBER OF LATITUDES
JB - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
JE - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM
EPS - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EPSTOP - REAL (MAXWV+1)
ENN1 - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
ELONN1 - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EON - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EONTOP - REAL (MAXWV+1)
CLAT - REAL (JB:JE) COSINES OF LATITUDE
SLAT - REAL (JB:JE) SINES OF LATITUDE
WLAT - REAL (JB:JE) GAUSSIAN WEIGHTS
AFFT - REAL(8) (50000+4*IMAX) AUXILIARY ARRAY IF IDIR=0
PLN - REAL ((M+1)*((I+1)*M+2)/2,JB:JE) LEGENDRE POLYNOMIALS
PLNTOP - REAL (M+1,JB:JE) LEGENDRE POLYNOMIAL OVER TOP
MP - INTEGER IDENTIFIER (0 FOR SCALAR, 1 FOR VECTOR)
W - REAL (*) WAVE FIELD IF IDIR>0
WTOP - REAL (*) WAVE FIELD OVER TOP IF IDIR>0
G - REAL (IMAX,2,JB:JE) GRID FIELD IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
W - REAL (*) WAVE FIELD IF IDIR<0
WTOP - REAL (*) WAVE FIELD OVER TOP IF IDIR<0
G - REAL (IMAX,2,JB:JE) GRID FIELD IF IDIR>0
SPTRANFV
The SPTRANFV routine performs a spherical transform
between spectral coefficients of divergences and curls
and vector fields on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
Transforms are done in latitude pairs for efficiency;
Thus grid arrays for each hemisphere must be passed.
If so requested, just a subset of the latitude pairs
may be transformed in each invocation of the subprogram.
The transforms are all multiprocessed over latitude except
the transform from Fourier to spectral is multiprocessed
over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRANFV(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
IP,IS,JN,JS,KW,KG,JB,JE,JC,
WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IP - INTEGER LONGITUDE INDEX FOR THE PRIME MERIDIAN
IS - INTEGER SKIP NUMBER BETWEEN LONGITUDES
JN - INTEGER SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
JS - INTEGER SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
KW - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
KG - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
JB - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
JE - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM
JC - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
WAVED - REAL (*) WAVE DIVERGENCE FIELDS IF IDIR>0
WAVEZ - REAL (*) WAVE VORTICITY FIELDS IF IDIR>0
GRIDUN - REAL (*) N.H. GRID U-WINDS (STARTING AT JB) IF IDIR<0
GRIDUS - REAL (*) S.H. GRID U-WINDS (STARTING AT JB) IF IDIR<0
GRIDVN - REAL (*) N.H. GRID V-WINDS (STARTING AT JB) IF IDIR<0
GRIDVS - REAL (*) S.H. GRID V-WINDS (STARTING AT JB) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVED - REAL (*) WAVE DIVERGENCE FIELDS IF IDIR<0
[WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
WAVEZ - REAL (*) WAVE VORTICITY FIELDS IF IDIR<0
C [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
C GRIDUN - REAL (*) N.H. GRID U-WINDS (STARTING AT JB) IF IDIR>0
GRIDUS - REAL (*) S.H. GRID U-WINDS (STARTING AT JB) IF IDIR>0
GRIDVN - REAL (*) N.H. GRID V-WINDS (STARTING AT JB) IF IDIR>0
GRIDVS - REAL (*) S.H. GRID V-WINDS (STARTING AT JB) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRANV
The SPTRANV routine performs a spherical transform
between spectral coefficients of divergences and curls
and vector fields on a global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The wave and grid fields may have general indexing,
but each wave field is in sequential 'IBM order',
i.e. with zonal wavenumber as the slower index.
Transforms are done in latitude pairs for efficiency;
Thus grid arrays for each hemisphere must be passed.
If so requested, just a subset of the latitude pairs
may be transformed in each invocation of the subprogram.
The transforms are all multiprocessed over latitude except
The transform from Fourier to spectral is multiprocessed
over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRANV(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
JBEG,JEND,JCPU,
WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRT - INTEGER GRID IDENTIFIER
(IDRT=4 FOR GAUSSIAN GRID,
IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAX - INTEGER EVEN NUMBER OF LONGITUDES.
JMAX - INTEGER NUMBER OF LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IPRIME - INTEGER LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
ISKIP - INTEGER SKIP NUMBER BETWEEN LONGITUDES
(DEFAULTS TO 1 IF ISKIP=0)
JNSKIP - INTEGER SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
(DEFAULTS TO IMAX IF JNSKIP=0)
JSSKIP - INTEGER SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
(DEFAULTS TO -IMAX IF JSSKIP=0)
KWSKIP - INTEGER SKIP NUMBER BETWEEN WAVE FIELDS
(DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO IMAX*JMAX IF KGSKIP=0)
JBEG - INTEGER LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
(DEFAULTS TO 1 IF JBEG=0)
(IF JBEG=0 AND IDIR<0, WAVE IS ZEROED BEFORE TRANSFORM)
JEND - INTEGER LATITUDE INDEX (FROM POLE) TO END TRANSFORM
(DEFAULTS TO (JMAX+1)/2 IF JEND=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
WAVED - REAL (*) WAVE DIVERGENCE FIELDS IF IDIR>0
WAVEZ - REAL (*) WAVE VORTICITY FIELDS IF IDIR>0
GRIDUN - REAL (*) N.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
GRIDUS - REAL (*) S.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
GRIDVN - REAL (*) N.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
GRIDVS - REAL (*) S.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
IDIR - INTEGER TRANSFORM FLAG
(IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)
Output arguments:
WAVED - REAL (*) WAVE DIVERGENCE FIELDS IF IDIR<0
[WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
WAVEZ - REAL (*) WAVE VORTICITY FIELDS IF IDIR<0
[WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
GRIDUN - REAL (*) N.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR>0
GRIDUS - REAL (*) S.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR>0
GRIDVN - REAL (*) N.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR>0
GRIDVS - REAL (*) S.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR>0
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUN
The SPTRUN routine spectrally truncates scalar fields
on a global cylindrical grid, returning the fields
to a possibly different global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
either grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUN(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,IDRTO,IMAXO,JMAXO,
KMAX,IPRIME,ISKIPI,JSKIPI,KSKIPI,
ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDI,GRIDO)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
IDRTO - INTEGER OUTPUT GRID IDENTIFIER
(IDRTO=4 FOR GAUSSIAN GRID,
IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPO=0)
JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXO IF JSKIPO=0)
KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
(DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
GRIDI - REAL (*) INPUT GRID FIELDS
Output arguments:
GRIDO - REAL (*) OUTPUT GRID FIELDS
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUND
The SPTRUND routine spectrally truncates scalar fields
on a global cylindrical grid, returning their means and
gradients to a possibly different global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
Either grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
Over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUND(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
IDRTO,IMAXO,JMAXO,KMAX,
IPRIME,ISKIPI,JSKIPI,KSKIPI,
ISKIPO,JSKIPO,KSKIPO,JCPU,GRID,
GRIDMN,GRIDX,GRIDY)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
IDRTO - INTEGER OUTPUT GRID IDENTIFIER
(IDRTO=4 FOR GAUSSIAN GRID,
IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPO=0)
JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXO IF JSKIPO=0)
KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
(DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
GRID - REAL (*) INPUT GRID FIELDS
Output arguments:
GRIDMN - REAL (KMAX) OUTPUT GLOBAL MEANS
GRIDX - REAL (*) OUTPUT X-GRADIENTS
GRIDY - REAL (*) OUTPUT Y-GRADIENTS
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNG
The SPTRUNG routine spectrally truncates scalar fields
on a global cylindrical grid, returning the fields
to specified sets of station points on the globe.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid and point fields may have general indexing.
The transforms are all multiprocessed.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNG(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDI,GP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
(DEFAULTS TO NMAX IF KGSKIP=0)
NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
(DEFAULTS TO 1 IF NRSKIP=0)
NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
(DEFAULTS TO 1 IF NGSKIP=0)
RLAT - REAL (*) STATION LATITUDES IN DEGREES
RLON - REAL (*) STATION LONGITUDES IN DEGREES
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
GRIDI - REAL (*) INPUT GRID FIELDS
Output arguments:
GP - REAL (*) STATION POINT SETS
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNGV
The SPTRUNGV routine spectrally truncates vectors fields
on a global cylindrical grid, returning the fields
to specified sets of station points on the globe.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid and point fields may have general indexing.
The transforms are all multiprocessed.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNGV(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDUI,GRIDVI,
LUV,UP,VP,LDZ,DP,ZP,LPS,PP,SP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
(DEFAULTS TO NMAX IF KGSKIP=0)
NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
(DEFAULTS TO 1 IF NRSKIP=0)
NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
(DEFAULTS TO 1 IF NGSKIP=0)
RLAT - REAL (*) STATION LATITUDES IN DEGREES
RLON - REAL (*) STATION LONGITUDES IN DEGREES
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
GRIDUI - REAL (*) INPUT GRID U-WINDS
GRIDVI - REAL (*) INPUT GRID V-WINDS
LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
Output arguments:
UP - REAL (*) STATION U-WINDS IF LUV
VP - REAL (*) STATION V-WINDS IF LUV
DP - REAL (*) STATION DIVERGENCES IF LDZ
ZP - REAL (*) STATION VORTICITIES IF LDZ
PP - REAL (*) STATION POTENTIALS IF LPS
SP - REAL (*) STATION STREAMFCNS IF LPS
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNL
The SPTRUNL routine spectrally truncates scalar fields
on a global cylindrical grid, returning their LaplaciaN
or Inverse to a possibly different global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
either grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNL(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
IDRTO,IMAXO,JMAXO,KMAX,
IPRIME,ISKIPI,JSKIPI,KSKIPI,
ISKIPO,JSKIPO,KSKIPO,JCPU,IDIR,GRIDI,GRIDO)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
IDRTO - INTEGER OUTPUT GRID IDENTIFIER
(IDRTO=4 FOR GAUSSIAN GRID,
IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPO=0)
JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXO IF JSKIPO=0)
KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
(DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
IDIR - INTEGER FLAG
IDIR > 0 TO TAKE LAPLACIAN
IDIR < 0 TO TAKE INVERSE LAPLACIAN
GRIDI - REAL (*) INPUT GRID FIELDS
Output arguments:
GRIDO - REAL (*) OUTPUT GRID FIELDS
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNM
The SPTRUNM routine spectrally truncates scalar fields
on a global cylindrical grid, returning the fields
to a Mercator grid.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNM(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
GRIDI,GM)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO NPS*NPS IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO NPS IF NJSKIP=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
(IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
THE LATITUDE INCREMENT DLAT IS DETERMINED AS
DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
GRIDI - REAL (*) INPUT GRID FIELDS
Output arguments:
GM - REAL (*) MERCATOR FIELDS
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNMV
The SPTRUNMV routine spectrally truncates vector fields
on a global cylindrical grid, returning the fields
to a Mercator grid.
The wave-space can be either triangular or rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNMV(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
GRIDUI,GRIDVI,LUV,UM,VM,LDZ,DM,ZM,LPS,PM,SM)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO MI*MJ IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO MI IF NJSKIP=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
(IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
THE LATITUDE INCREMENT DLAT IS DETERMINED AS
DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
GRIDUI - REAL (*) INPUT GRID U-WINDS
GRIDVI - REAL (*) INPUT GRID V-WINDS
LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
Output arguments:
UM - REAL (*) MERCATOR U-WINDS IF LUV
VM - REAL (*) MERCATOR V-WINDS IF LUV
DM - REAL (*) MERCATOR DIVERGENCES IF LDZ
ZM - REAL (*) MERCATOR VORTICITIES IF LDZ
PM - REAL (*) MERCATOR POTENTIALS IF LPS
SM - REAL (*) MERCATOR STREAMFCNS IF LPS
REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNS
The SPTRUNS routine spectrally truncates scalar fields
on a global cylindrical grid, returning the fields
to specific pairs of Polar Stereographic scalar fields.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNS(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
GRIDI,GN,GS)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO NPS*NPS IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO NPS IF NJSKIP=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
(SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
GRIDI - REAL (*) INPUT GRID FIELDS
Output arguments:
GN - REAL (*) NORTHERN POLAR STEREOGRAPHIC FIELDS
GS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC FIELDS
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNSV
The SPTRUNSV routine spectrally truncates vector fields
on a global cylindrical grid, returning the fields
to specific pairs of Polar Stereographic scalar fields.
The wave-space can be either Triangular or Rhomboidal.
The grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNSV(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
GRIDUI,GRIDVI,
LUV,UN,VN,US,VS,LDZ,DN,ZN,DS,ZS,
LPS,PN,SN,PS,SS)
INPUT ARGUMENTS:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
(DEFAULTS TO NPS*NPS IF KGSKIP=0)
NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
(DEFAULTS TO 1 IF NISKIP=0)
NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
(DEFAULTS TO NPS IF NJSKIP=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
(SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
GRIDUI - REAL (*) INPUT GRID U-WINDS
GRIDVI - REAL (*) INPUT GRID V-WINDS
LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
Output arguments:
UN - REAL (*) NORTHERN PS U-WINDS IF LUV
VN - REAL (*) NORTHERN PS V-WINDS IF LUV
US - REAL (*) SOUTHERN PS U-WINDS IF LUV
VS - REAL (*) SOUTHERN PS V-WINDS IF LUV
DN - REAL (*) NORTHERN DIVERGENCES IF LDZ
ZN - REAL (*) NORTHERN VORTICITIES IF LDZ
DS - REAL (*) SOUTHERN DIVERGENCES IF LDZ
ZS - REAL (*) SOUTHERN VORTICITIES IF LDZ
PN - REAL (*) NORTHERN POTENTIALS IF LPS
SN - REAL (*) NORTHERN STREAMFCNS IF LPS
PS - REAL (*) SOUTHERN POTENTIALS IF LPS
SS - REAL (*) SOUTHERN STREAMFCNS IF LPS
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPTRUNV
The SPTRUNV routine spectrally truncates vector fields
on a global cylindrical grid, returning the fields
to a possibly different global cylindrical grid.
The wave-space can be either Triangular or Rhomboidal.
either grid-space can be either an equally-spaced grid
(with or without pole points) or a Gaussian grid.
The grid fields may have general indexing.
The transforms are all multiprocessed.
over zonal wavenumber to ensure reproducibility.
Transform several fields at a time to improve vectorization.
Subprogram can be called from a multiprocessing environment.
USAGE: CALL SPTRUNV(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
IDRTO,IMAXO,JMAXO,KMAX,
IPRIME,ISKIPI,JSKIPI,KSKIPI,
ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDUI,GRIDVI,
LUV,GRIDUO,GRIDVO,LDZ,GRIDDO,GRIDZO,
LPS,GRIDPO,GRIDSO)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
IDRTI - INTEGER INPUT GRID IDENTIFIER
(IDRTI=4 FOR GAUSSIAN GRID,
IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
IDRTO - INTEGER OUTPUT GRID IDENTIFIER
(IDRTO=4 FOR GAUSSIAN GRID,
IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
(DEFAULTS TO 1 IF IPRIME=0)
(OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPI=0)
JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXI IF JSKIPI=0)
KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
(DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
(DEFAULTS TO 1 IF ISKIPO=0)
JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
(DEFAULTS TO -IMAXO IF JSKIPO=0)
KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
(DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
(DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
GRIDUI - REAL (*) INPUT GRID U-WINDS
GRIDVI - REAL (*) INPUT GRID V-WINDS
LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
Output arguments:
GRIDUO - REAL (*) OUTPUT U-WINDS IF LUV
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
GRIDVO - REAL (*) OUTPUT V-WINDS IF LUV
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
GRIDDO - REAL (*) OUTPUT DIVERGENCES IF LDZ
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
GRIDZO - REAL (*) OUTPUT VORTICITIES IF LDZ
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
GRIDPO - REAL (*) OUTPUT POTENTIALS IF LPS
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
GRIDSO - REAL (*) OUTPUT STREAMFCNS IF LPS
(MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
REMARKS:
MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
DIMENSION LINEAR QUADRATIC
----------------------- --------- -------------
IMAX 2*MAXWV+2 3*MAXWV/2*2+2
JMAX (IDRT=4,IROMB=0) 1*MAXWV+1 3*MAXWV/2+1
JMAX (IDRT=4,IROMB=1) 2*MAXWV+1 5*MAXWV/2+1
JMAX (IDRT=0,IROMB=0) 2*MAXWV+3 3*MAXWV/2*2+3
JMAX (IDRT=0,IROMB=1) 4*MAXWV+3 5*MAXWV/2*2+3
JMAX (IDRT=256,IROMB=0) 2*MAXWV+1 3*MAXWV/2*2+1
JMAX (IDRT=256,IROMB=1) 4*MAXWV+1 5*MAXWV/2*2+1
SPUV2DZ
The SPUV2DZ routine computes the divergence and vorticity from
wind components in spectral space.
Subprogram SPEPS should be called already.
If l is the zonal wavenumber, n is the total wavenumber,
eps(l,n)=sqrt((n**2-l**2)/(4*n**2-1)) and a is earth radius,
then the divergence d is computed as
d(l,n)=i*l*a*u(l,n)
+eps(l,n+1)*n*a*v(l,n+1)-eps(l,n)*(n+1)*a*v(l,n-1)
and the vorticity z is computed as
z(l,n)=i*l*a*v(l,n)
-eps(l,n+1)*n*a*u(l,n+1)+eps(l,n)*(n+1)*a*u(l,n-1)
where u is the zonal wind and v is the meridional wind.
u and v are weighted by the secant of latitude.
Extra terms are used over top of the spectral domain.
Advantage is taken of the fact that eps(l,l)=0
in order to vectorize over the entire spectraL domain.
USAGE: CALL SPUV2DZ(I,M,ENN1,ELONN1,EON,EONTOP,U,V,UTOP,VTOP,D,Z)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
ENN1 - REAL ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
ELONN1 - REAL ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
EON - REAL ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
EONTOP - REAL (M+1) EPSILON/N*A OVER TOP
U - REAL ((M+1)*((I+1)*M+2)) ZONAL WIND (OVER COSLAT)
V - REAL ((M+1)*((I+1)*M+2)) MERID WIND (OVER COSLAT)
UTOP - REAL (2*(M+1)) ZONAL WIND (OVER COSLAT) OVER TOP
VTOP - REAL (2*(M+1)) MERID WIND (OVER COSLAT) OVER TOP
Output argument list:
D - REAL ((M+1)*((I+1)*M+2)) DIVERGENCE
Z - REAL ((M+1)*((I+1)*M+2)) VORTICITY
SPVAR
The SPVAR routine computes the variances by total
wavenumber of a scalar field in spectral space.
USAGE: CALL SPVAR(I,M,Q,QVAR)
Input argument list:
I - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
M - INTEGER SPECTRAL TRUNCATION
Q - REAL ((M+1)*((I+1)*M+2)) SCALAR FIELD
Output argument list:
QVAR - REAL (0:(I+1)*M) VARIANCES
SPWGET
The SPWGET routine gets wave-space constants.
USAGE: CALL SPWGET(IROMB,MAXWV,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
Input arguments:
IROMB - INTEGER SPECTRAL DOMAIN SHAPE
(0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
MAXWV - INTEGER SPECTRAL TRUNCATION
Output arguments:
EPS - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EPSTOP - REAL (MAXWV+1)
ENN1 - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
ELONN1 - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EON - REAL ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
EONTOP - REAL (MAXWV+1)
SPLIB.tar |
Library contains routines to be
be used for a variety of spectral transform functions. (Fortran90)
Date posted: 9/05/2012 |