NCEPLIBS-sp  2.3.3
sptrand.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine sptrand (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDMN, GRIDXN, GRIDXS, GRIDYN, GRIDYS, IDIR)
 THIS SUBPROGRAM PERFORMS A SPHERICAL TRANSFORM BETWEEN SPECTRAL COEFFICIENTS OF SCALAR FIELDS AND THEIR MEANS AND GRADIENTS ON A GLOBAL CYLINDRICAL GRID. More...
 

Detailed Description

Perform a gradient spherical transform

Author
IREDELL
Date
96-02-29

Definition in file sptrand.f.

Function/Subroutine Documentation

◆ sptrand()

subroutine sptrand (   IROMB,
  MAXWV,
  IDRT,
  IMAX,
  JMAX,
  KMAX,
  IPRIME,
  ISKIP,
  JNSKIP,
  JSSKIP,
  KWSKIP,
  KGSKIP,
  JBEG,
  JEND,
  JCPU,
real, dimension(*)  WAVE,
real, dimension(kmax)  GRIDMN,
real, dimension(*)  GRIDXN,
real, dimension(*)  GRIDXS,
real, dimension(*)  GRIDYN,
real, dimension(*)  GRIDYS,
  IDIR 
)

THIS SUBPROGRAM 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.

PROGRAM HISTORY LOG:

  • 96-02-29 IREDELL
  • 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
Parameters
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
[out]WAVE- REAL (*) WAVE FIELDS IF IDIR>0
[out]GRIDMN- REAL (KMAX) GLOBAL MEANS IF IDIR<0
[out]GRIDXN- REAL (*) N.H. X-GRADIENTS (STARTING AT JBEG) IF IDIR<0
[out]GRIDXS- REAL (*) S.H. X-GRADIENTS (STARTING AT JBEG) IF IDIR<0 [GRIDX=(D(WAVE)/DLAM)/(CLAT*RERTH)]
[out]GRIDYN- REAL (*) N.H. Y-GRADIENTS (STARTING AT JBEG) IF IDIR<0
[out]GRIDYS- REAL (*) S.H. Y-GRADIENTS (STARTING AT JBEG) IF IDIR<0 [GRIDY=(D(WAVE)/DPHI)/RERTH]
IDIR- INTEGER TRANSFORM FLAG (IDIR>0 FOR WAVE TO GRID, IDIR<0 FOR GRID TO WAVE)

SUBPROGRAMS CALLED:

  • SPWGET GET WAVE-SPACE CONSTANTS
  • SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
  • SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM

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

Definition at line 87 of file sptrand.f.