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
SPLIB.tar |
Library contains routines to be
be used for a variety of spectral transform functions. (Fortran90)
Date posted: 2/23/2007 |