diff --git a/annotated.html b/annotated.html index 7bfc9a79..1dc211a6 100644 --- a/annotated.html +++ b/annotated.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Data Types List @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,68 +76,74 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
Data Types List
+
Data Types List
Here are the data types with brief descriptions:
[detail level 12]
- - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - - - + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - +
 Nbicubic_interp_modBicubic interpolation routines for scalars and vectors
 Cinterpolate_bicubic
 Nbilinear_interp_modBilinear interpolation routines for scalars and vectors
 Cinterpolate_bilinear
 Nbudget_interp_modBudget interpolation routines for scalars and vectors
 Cinterpolate_budget
 Ngdswzd_modDriver module for gdswzd routines
 Cgdswzd
 Nip_equid_cylind_grid_modEquidistant cylindrical grib decoder and grid coordinate transformations
 Cip_equid_cylind_grid
 Nip_gaussian_grid_modGaussian grid coordinate transformations
 Cip_gaussian_grid
 Nip_grid_descriptor_modUsers derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions
 Cgrib1_descriptorDescriptor representing a grib1 grib descriptor section (GDS) with an integer array
 Mbicubic_interp_modBicubic interpolation routines for scalars and vectors
 Cinterpolate_bicubic
 Mbilinear_interp_modBilinear interpolation routines for scalars and vectors
 Cinterpolate_bilinear
 Mbudget_interp_modBudget interpolation routines for scalars and vectors
 Cinterpolate_budget
 Mgdswzd_modDriver module for gdswzd routines
 Cgdswzd
 Mip_equid_cylind_grid_modEquidistant cylindrical grib decoder and grid coordinate transformations
 Cip_equid_cylind_grid
 Mip_gaussian_grid_modGaussian grid coordinate transformations
 Cip_gaussian_grid
 Mip_grid_descriptor_modUsers derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions
 Cgrib1_descriptorDescriptor representing a grib1 grib descriptor section (GDS) with an integer array
 Cgrib2_descriptorGrib-2 descriptor containing a grib2 GDT represented by an integer array
 Cinit_descriptor
 Cinit_descriptor
 Cip_grid_descriptorAbstract descriptor object which represents a grib1 or grib2 descriptor
 Coperator(==)
 Nip_grid_factory_modRoutines for creating an ip_grid given a Grib descriptor
 Cinit_grid
 Nip_grid_modAbstract ip_grid type
 Cgdswzd_interface
 Coperator(==)
 Mip_grid_factory_modRoutines for creating an ip_grid given a Grib descriptor
 Cinit_grid
 Mip_grid_modAbstract ip_grid type
 Cgdswzd_interface
 Cinit_grib1_interface
 Cinit_grib2_interface
 Cinit_grib2_interface
 Cip_gridAbstract grid that holds fields and methods common to all grids
 Coperator(==)Check equality
 Nip_lambert_conf_grid_modLambert conformal grib decoder and grid coordinate transformations
 Cip_lambert_conf_grid
 Nip_mercator_grid_modGDS wizard for mercator cylindrical
 Cip_mercator_grid
 Nip_polar_stereo_grid_modGDS wizard for polar stereographic azimuthal
 Cip_polar_stereo_grid
 Nip_rot_equid_cylind_egrid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E
 Cip_rot_equid_cylind_egrid
 Nip_rot_equid_cylind_grid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D
 Cip_rot_equid_cylind_grid
 Nip_station_points_grid_modInterpolate gridded data to a series of station points
 Cip_station_points_grid
 Nipolates_modTop-level driver for scalar interpolation interpolation routine ipolates()
 Cipolates
 Nipolatev_modTop-level driver for vector interpolation interpolation routine ipolatev()
 Cipolatev
 Nneighbor_budget_interp_modInterpolate scalar fields (neighbor)
 Cinterpolate_neighbor_budget
 Nneighbor_interp_modInterpolate scalar fields (neighbor)
 Cinterpolate_neighbor
 Nspectral_interp_modInterpolate spectral
 Cinterpolate_spectral
 Coperator(==)Check equality
 Mip_lambert_conf_grid_modLambert conformal grib decoder and grid coordinate transformations
 Cip_lambert_conf_grid
 Mip_mercator_grid_modGDS wizard for mercator cylindrical
 Cip_mercator_grid
 Mip_polar_stereo_grid_modGDS wizard for polar stereographic azimuthal
 Cip_polar_stereo_grid
 Mip_rot_equid_cylind_egrid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E
 Cip_rot_equid_cylind_egrid
 Mip_rot_equid_cylind_grid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D
 Cip_rot_equid_cylind_grid
 Mip_station_points_grid_modInterpolate gridded data to a series of station points
 Cip_station_points_grid
 Mipolates_modTop-level driver for scalar interpolation interpolation routine ipolates()
 Cipolates
 Mipolatev_modTop-level driver for vector interpolation interpolation routine ipolatev()
 Cipolatev
 Mneighbor_budget_interp_modInterpolate scalar fields (neighbor)
 Cinterpolate_neighbor_budget
 Mneighbor_interp_modInterpolate scalar fields (neighbor)
 Cinterpolate_neighbor
 Mspectral_interp_modInterpolate spectral
 Cinterpolate_spectral
 Cpolates4
 Cpolatev4
 Cpolatev4
@@ -145,7 +151,7 @@ diff --git a/bc_sd.png b/bc_sd.png new file mode 100644 index 00000000..31ca888d Binary files /dev/null and b/bc_sd.png differ diff --git a/bicubic__interp__mod_8F90.html b/bicubic__interp__mod_8F90.html index 1ae3ce7b..0ea5b350 100644 --- a/bicubic__interp__mod_8F90.html +++ b/bicubic__interp__mod_8F90.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: bicubic_interp_mod.F90 File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,9 +76,16 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -86,8 +93,7 @@ Data Types | Modules | Functions/Subroutines
-
-
bicubic_interp_mod.F90 File Reference
+
bicubic_interp_mod.F90 File Reference
@@ -96,24 +102,24 @@

Go to the source code of this file.

-

+

Data Types

interface  bicubic_interp_mod::interpolate_bicubic
 
- - +

+

Modules

module  bicubic_interp_mod
module  bicubic_interp_mod
 Bicubic interpolation routines for scalars and vectors.
 
- - - - - - + + + + +

+

Functions/Subroutines

subroutine bicubic_interp_mod::interpolate_bicubic_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
 This subprogram performs bicubic interpolation from any grid to any grid for scalar fields. More...
 
subroutine bicubic_interp_mod::interpolate_bicubic_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs bicubic interpolation from any grid to any grid for vector fields. More...
subroutine bicubic_interp_mod::interpolate_bicubic_scalar (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
 This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.
 
subroutine bicubic_interp_mod::interpolate_bicubic_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs bicubic interpolation from any grid to any grid for vector fields.
 

Detailed Description

@@ -127,7 +133,7 @@ diff --git a/bicubic__interp__mod_8F90.js b/bicubic__interp__mod_8F90.js index 6b9a6998..01a17b24 100644 --- a/bicubic__interp__mod_8F90.js +++ b/bicubic__interp__mod_8F90.js @@ -1,6 +1,6 @@ var bicubic__interp__mod_8F90 = [ - [ "interpolate_bicubic", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html", "interfacebicubic__interp__mod_1_1interpolate__bicubic" ], - [ "interpolate_bicubic_scalar", "bicubic__interp__mod_8F90.html#a54a442e47f1be9511c1684a337d7e2d1", null ], + [ "bicubic_interp_mod::interpolate_bicubic", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html", "interfacebicubic__interp__mod_1_1interpolate__bicubic" ], + [ "interpolate_bicubic_scalar", "bicubic__interp__mod_8F90.html#ae1f0be5780050bc527b1628d8c79fef5", null ], [ "interpolate_bicubic_vector", "bicubic__interp__mod_8F90.html#a9d27db7d350fc2699aaf5057c3b53d16", null ] ]; \ No newline at end of file diff --git a/bicubic__interp__mod_8F90_source.html b/bicubic__interp__mod_8F90_source.html index b31c8184..ecd72a2f 100644 --- a/bicubic__interp__mod_8F90_source.html +++ b/bicubic__interp__mod_8F90_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: bicubic_interp_mod.F90 Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,489 +81,501 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
bicubic_interp_mod.F90
+
bicubic_interp_mod.F90
-Go to the documentation of this file.
1 
-
4 
- -
9  use gdswzd_mod
-
10  use polfix_mod
-
11  use ip_grids_mod
-
12  implicit none
-
13 
-
14  private
-
15  public :: interpolate_bicubic
-
16 
- -
18  module procedure interpolate_bicubic_scalar
-
19  module procedure interpolate_bicubic_vector
-
20  end interface interpolate_bicubic
-
21 
-
22  ! Smallest positive real value (use for equality comparisons)
-
23  REAL :: TINYREAL=tiny(1.0)
-
24 
-
25 contains
-
26 
-
80  SUBROUTINE interpolate_bicubic_scalar(IPOPT,grid_in,grid_out, &
-
81  MI,MO,KM,IBI,LI,GI, &
-
82  NO,RLAT,RLON,IBO,LO,GO,IRET)
-
83  class(ip_grid), intent(in) :: grid_in, grid_out
-
84  INTEGER, INTENT(IN ) :: IPOPT(20)
-
85  INTEGER, INTENT(IN ) :: MI,MO,KM
-
86  INTEGER, INTENT(IN ) :: IBI(KM)
-
87  INTEGER, INTENT(INOUT) :: NO
-
88  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
-
89  !
-
90  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
-
91  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
-
92  !
-
93  REAL, INTENT(IN ) :: GI(MI,KM)
-
94  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
-
95  REAL, INTENT( OUT) :: GO(MO,KM)
-
96  !
-
97  REAL, PARAMETER :: FILL=-9999.
-
98  !
-
99  INTEGER :: IJX(4),IJY(4)
-
100  INTEGER :: MCON,MP,N,I,J,K
-
101  INTEGER :: NK,NV
-
102  LOGICAL :: SAME_GRIDI, SAME_GRIDO
-
103  !
-
104  REAL :: PMP,XIJ,YIJ,XF,YF
-
105  REAL :: G,W,GMIN,GMAX
-
106  REAL :: WX(4),WY(4)
-
107  REAL :: XPTS(MO),YPTS(MO)
-
108  logical :: to_station_points
-
109 
-
110  ! Save coeffecients between calls and only compute if grids have changed
-
111  REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
-
112  REAL, ALLOCATABLE,SAVE :: WXY(:,:,:)
-
113  INTEGER, SAVE :: NOX=-1,iretx=-1
-
114  INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:),NC(:)
-
115  class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
-
116 
-
117  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
118  ! SET PARAMETERS
-
119  iret=0
-
120  mcon=ipopt(1)
-
121  mp=ipopt(2)
-
122  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
-
123  IF(mp.LT.0.OR.mp.GT.100) iret=32
-
124  pmp=mp*0.01
-
125 
-
126  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
-
127  allocate(prev_grid_in, source = grid_in)
-
128  allocate(prev_grid_out, source = grid_out)
-
129 
-
130  same_gridi = .false.
-
131  same_grido = .false.
-
132  else
-
133  same_gridi = grid_in == prev_grid_in
-
134  same_grido = grid_out == prev_grid_out
-
135 
-
136  if (.not. same_gridi .or. .not. same_grido) then
-
137  deallocate(prev_grid_in)
-
138  deallocate(prev_grid_out)
-
139 
-
140  allocate(prev_grid_in, source = grid_in)
-
141  allocate(prev_grid_out, source = grid_out)
-
142  end if
-
143  end if
-
144 
-
145  select type(grid_out)
-
146  type is(ip_station_points_grid)
-
147  to_station_points = .true.
-
148  class default
-
149  to_station_points = .false.
-
150  end select
-
151 
-
152  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
153  ! SAVE OR SKIP WEIGHT COMPUTATION
-
154  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
-
155  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
156  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
-
157  CALL gdswzd(grid_out,0,mo,fill,xpts,ypts,rlon,rlat,no)
-
158  IF(no.EQ.0) iret=3
-
159  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
160  ! LOCATE INPUT POINTS
-
161  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
-
162  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
-
163  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
164  ! ALLOCATE AND SAVE GRID DATA
-
165  IF(nox.NE.no) THEN
-
166  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,nc,nxy,wxy)
-
167  ALLOCATE(rlatx(no),rlonx(no),nc(no),nxy(4,4,no),wxy(4,4,no))
-
168  nox=no
-
169  ENDIF
-
170  iretx=iret
-
171  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
172  ! COMPUTE WEIGHTS
-
173  IF(iret.EQ.0) THEN
-
174  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY) SCHEDULE(STATIC)
-
175  DO n=1,no
-
176  rlonx(n)=rlon(n)
-
177  rlatx(n)=rlat(n)
-
178  xij=xpts(n)
-
179  yij=ypts(n)
-
180  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
-
181  ijx(1:4)=floor(xij-1)+(/0,1,2,3/)
-
182  ijy(1:4)=floor(yij-1)+(/0,1,2,3/)
-
183  xf=xij-ijx(2)
-
184  yf=yij-ijy(2)
-
185  DO j=1,4
-
186  DO i=1,4
-
187  nxy(i,j,n) = grid_in%field_pos(ijx(i), ijy(j))
-
188  ENDDO
-
189  ENDDO
-
190  IF(minval(nxy(1:4,1:4,n)).GT.0) THEN
-
191  ! BICUBIC WHERE 16-POINT STENCIL IS AVAILABLE
-
192  nc(n)=1
-
193  wx(1)=xf*(1-xf)*(2-xf)/(-6.)
-
194  wx(2)=(xf+1)*(1-xf)*(2-xf)/2.
-
195  wx(3)=(xf+1)*xf*(2-xf)/2.
-
196  wx(4)=(xf+1)*xf*(1-xf)/(-6.)
-
197  wy(1)=yf*(1-yf)*(2-yf)/(-6.)
-
198  wy(2)=(yf+1)*(1-yf)*(2-yf)/2.
-
199  wy(3)=(yf+1)*yf*(2-yf)/2.
-
200  wy(4)=(yf+1)*yf*(1-yf)/(-6.)
-
201  ELSE
-
202  ! BILINEAR ELSEWHERE NEAR THE EDGE OF THE GRID
-
203  nc(n)=2
-
204  wx(1)=0
-
205  wx(2)=(1-xf)
-
206  wx(3)=xf
-
207  wx(4)=0
-
208  wy(1)=0
-
209  wy(2)=(1-yf)
-
210  wy(3)=yf
-
211  wy(4)=0
-
212  ENDIF
-
213  DO j=1,4
-
214  DO i=1,4
-
215  wxy(i,j,n)=wx(i)*wy(j)
-
216  ENDDO
-
217  ENDDO
-
218  ELSE
-
219  nc(n)=0
-
220  ENDIF
-
221  ENDDO
-
222  ENDIF
-
223  ENDIF
-
224  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
225  ! INTERPOLATE OVER ALL FIELDS
-
226  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
-
227  IF(.not. to_station_points) THEN
-
228  no=nox
-
229  DO n=1,no
-
230  rlon(n)=rlonx(n)
-
231  rlat(n)=rlatx(n)
-
232  ENDDO
-
233  ENDIF
-
234  !$OMP PARALLEL DO PRIVATE(NK,K,N,G,W,GMIN,GMAX,J,I) SCHEDULE(STATIC)
-
235  DO nk=1,no*km
-
236  k=(nk-1)/no+1
-
237  n=nk-no*(k-1)
-
238  IF(nc(n).GT.0) THEN
-
239  g=0
-
240  w=0
-
241  IF(mcon.GT.0) gmin=huge(gmin)
-
242  IF(mcon.GT.0) gmax=-huge(gmax)
-
243  DO j=nc(n),5-nc(n)
-
244  DO i=nc(n),5-nc(n)
-
245  IF(nxy(i,j,n).GT.0)THEN
-
246  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k))THEN
-
247  g=g+wxy(i,j,n)*gi(nxy(i,j,n),k)
-
248  w=w+wxy(i,j,n)
-
249  IF(mcon.GT.0) gmin=min(gmin,gi(nxy(i,j,n),k))
-
250  IF(mcon.GT.0) gmax=max(gmax,gi(nxy(i,j,n),k))
-
251  ENDIF
-
252  ENDIF
-
253  ENDDO
-
254  ENDDO
-
255  lo(n,k)=w.GE.pmp
-
256  IF(lo(n,k)) THEN
-
257  go(n,k)=g/w
-
258  IF(mcon.GT.0) go(n,k)=min(max(go(n,k),gmin),gmax)
-
259  ELSE
-
260  go(n,k)=0.
-
261  ENDIF
-
262  ELSE
-
263  lo(n,k)=.false.
-
264  go(n,k)=0.
-
265  ENDIF
-
266  ENDDO
-
267  DO k=1,km
-
268  ibo(k)=ibi(k)
-
269  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
-
270  ENDDO
-
271  select type(grid_out)
-
272  type is(ip_equid_cylind_grid)
-
273  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
-
274  end select
-
275  ELSE
-
276  IF(iret.EQ.0) iret=iretx
-
277  IF(.not. to_station_points) no=0
-
278  ENDIF
-
279  end subroutine interpolate_bicubic_scalar
-
280 
-
338  subroutine interpolate_bicubic_vector(ipopt, grid_in, grid_out, &
-
339  mi, mo, km, ibi, li, ui, vi, &
-
340  no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
-
341  class(ip_grid), intent(in) :: grid_in, grid_out
-
342  INTEGER, INTENT(IN ) :: IPOPT(20)
-
343  INTEGER, INTENT(IN ) :: IBI(KM),MI,MO,KM
-
344  INTEGER, INTENT(INOUT) :: NO
-
345  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
-
346  !
-
347  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
-
348  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
-
349  !
-
350  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
-
351  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO),CROT(MO),SROT(MO)
-
352  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
-
353  !
-
354  REAL, PARAMETER :: FILL=-9999.
-
355  !
-
356  INTEGER :: IJX(4),IJY(4)
-
357  INTEGER :: MCON,MP,N,I,J,K,NK,NV
-
358  !
-
359  LOGICAL :: SAME_GRIDI,SAME_GRIDO
-
360  !
-
361  REAL :: CM,SM,UROT,VROT
-
362  REAL :: PMP,XIJ,YIJ,XF,YF
-
363  REAL :: U,V,W,UMIN,UMAX,VMIN,VMAX
-
364  REAL :: XPTS(MO),YPTS(MO)
-
365  REAL :: WX(4),WY(4)
-
366  REAL :: XPTI(MI),YPTI(MI),RLOI(MI),RLAI(MI)
-
367  REAL :: CROI(MI),SROI(MI)
-
368 
-
369  logical :: to_station_points
-
370 
-
371  ! Save coeffecients between calls and only compute if grids have changed
-
372  REAL, ALLOCATABLE, SAVE :: RLATX(:),RLONX(:),CROTX(:),SROTX(:)
-
373  REAL, ALLOCATABLE, SAVE :: WXY(:,:,:),CXY(:,:,:),SXY(:,:,:)
-
374  INTEGER, SAVE :: NOX=-1,iretx=-1
-
375  INTEGER, ALLOCATABLE, SAVE :: NXY(:,:,:),NC(:)
-
376  class(ip_grid), allocatable, save :: prev_grid_in, prev_grid_out
-
377  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
378  ! SET PARAMETERS
-
379  iret=0
-
380  mcon=ipopt(1)
-
381  mp=ipopt(2)
-
382  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
-
383  IF(mp.LT.0.OR.mp.GT.100) iret=32
-
384  pmp=mp*0.01
-
385 
-
386 
-
387  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
-
388  allocate(prev_grid_in, source = grid_in)
-
389  allocate(prev_grid_out, source = grid_out)
-
390 
-
391  same_gridi = .false.
-
392  same_grido = .false.
-
393  else
-
394  same_gridi = grid_in == prev_grid_in
-
395  same_grido = grid_out == prev_grid_out
-
396 
-
397  if (.not. same_gridi .or. .not. same_grido) then
-
398  deallocate(prev_grid_in)
-
399  deallocate(prev_grid_out)
-
400 
-
401  allocate(prev_grid_in, source = grid_in)
-
402  allocate(prev_grid_out, source = grid_out)
-
403  end if
-
404  end if
-
405 
-
406  select type(grid_out)
-
407  type is(ip_station_points_grid)
-
408  to_station_points = .true.
-
409  class default
-
410  to_station_points = .false.
-
411  end select
-
412 
-
413  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
414  ! SAVE OR SKIP WEIGHT COMPUTATION
-
415  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
-
416  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
417  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
-
418  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
-
419  IF(no.EQ.0) iret=3
-
420  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
421  ! LOCATE INPUT POINTS
-
422  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
-
423  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
-
424  CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
-
425  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
426  ! ALLOCATE AND SAVE GRID DATA
-
427  IF(nox.NE.no) THEN
-
428  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,crotx,srotx,nc,nxy,wxy,cxy,sxy)
-
429  ALLOCATE(rlatx(no),rlonx(no),crotx(no),srotx(no),nc(no), &
-
430  nxy(4,4,no),wxy(4,4,no),cxy(4,4,no),sxy(4,4,no))
-
431  nox=no
-
432  ENDIF
-
433  iretx=iret
-
434  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
435  ! COMPUTE WEIGHTS
-
436  IF(iret.EQ.0) THEN
-
437  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY,CM,SM) SCHEDULE(STATIC)
-
438  DO n=1,no
-
439  rlonx(n)=rlon(n)
-
440  rlatx(n)=rlat(n)
-
441  crotx(n)=crot(n)
-
442  srotx(n)=srot(n)
-
443  xij=xpts(n)
-
444  yij=ypts(n)
-
445  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
-
446  ijx(1:4)=floor(xij-1)+(/0,1,2,3/)
-
447  ijy(1:4)=floor(yij-1)+(/0,1,2,3/)
-
448  xf=xij-ijx(2)
-
449  yf=yij-ijy(2)
-
450  DO j=1,4
-
451  DO i=1,4
-
452  nxy(i,j,n) = grid_in%field_pos(ijx(i), ijy(j))
-
453  ENDDO
-
454  ENDDO
-
455  IF(minval(nxy(1:4,1:4,n)).GT.0) THEN
-
456  ! BICUBIC WHERE 16-POINT STENCIL IS AVAILABLE
-
457  nc(n)=1
-
458  wx(1)=xf*(1-xf)*(2-xf)/(-6.)
-
459  wx(2)=(xf+1)*(1-xf)*(2-xf)/2.
-
460  wx(3)=(xf+1)*xf*(2-xf)/2.
-
461  wx(4)=(xf+1)*xf*(1-xf)/(-6.)
-
462  wy(1)=yf*(1-yf)*(2-yf)/(-6.)
-
463  wy(2)=(yf+1)*(1-yf)*(2-yf)/2.
-
464  wy(3)=(yf+1)*yf*(2-yf)/2.
-
465  wy(4)=(yf+1)*yf*(1-yf)/(-6.)
-
466  ELSE
-
467  ! BILINEAR ELSEWHERE NEAR THE EDGE OF THE GRID
-
468  nc(n)=2
-
469  wx(1)=0
-
470  wx(2)=(1-xf)
-
471  wx(3)=xf
-
472  wx(4)=0
-
473  wy(1)=0
-
474  wy(2)=(1-yf)
-
475  wy(3)=yf
-
476  wy(4)=0
-
477  ENDIF
-
478  DO j=1,4
-
479  DO i=1,4
-
480  wxy(i,j,n)=wx(i)*wy(j)
-
481  IF(nxy(i,j,n).GT.0) THEN
-
482  CALL movect(rlai(nxy(i,j,n)),rloi(nxy(i,j,n)), &
-
483  rlat(n),rlon(n),cm,sm)
-
484  cxy(i,j,n)=cm*croi(nxy(i,j,n))+sm*sroi(nxy(i,j,n))
-
485  sxy(i,j,n)=sm*croi(nxy(i,j,n))-cm*sroi(nxy(i,j,n))
-
486  ENDIF
-
487  ENDDO
-
488  ENDDO
-
489  ELSE
-
490  nc(n)=0
-
491  ENDIF
-
492  ENDDO
-
493  ENDIF
-
494  ENDIF
-
495  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
496  ! INTERPOLATE OVER ALL FIELDS
-
497  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
-
498  IF(.not. to_station_points) THEN
-
499  no=nox
-
500  DO n=1,no
-
501  rlon(n)=rlonx(n)
-
502  rlat(n)=rlatx(n)
-
503  crot(n)=crotx(n)
-
504  srot(n)=srotx(n)
-
505  ENDDO
-
506  ENDIF
-
507  !$OMP PARALLEL DO PRIVATE(NK,K,N,U,V,W,UMIN,UMAX,VMIN,VMAX,UROT,VROT,J,I) SCHEDULE(STATIC)
-
508  DO nk=1,no*km
-
509  k=(nk-1)/no+1
-
510  n=nk-no*(k-1)
-
511  IF(nc(n).GT.0) THEN
-
512  u=0
-
513  v=0
-
514  w=0
-
515  IF(mcon.GT.0) umin=huge(umin)
-
516  IF(mcon.GT.0) umax=-huge(umax)
-
517  IF(mcon.GT.0) vmin=huge(vmin)
-
518  IF(mcon.GT.0) vmax=-huge(vmax)
-
519  DO j=nc(n),5-nc(n)
-
520  DO i=nc(n),5-nc(n)
-
521  IF(nxy(i,j,n).GT.0) THEN
-
522  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
-
523  urot=cxy(i,j,n)*ui(nxy(i,j,n),k)-sxy(i,j,n)*vi(nxy(i,j,n),k)
-
524  vrot=sxy(i,j,n)*ui(nxy(i,j,n),k)+cxy(i,j,n)*vi(nxy(i,j,n),k)
-
525  u=u+wxy(i,j,n)*urot
-
526  v=v+wxy(i,j,n)*vrot
-
527  w=w+wxy(i,j,n)
-
528  IF(mcon.GT.0) umin=min(umin,urot)
-
529  IF(mcon.GT.0) umax=max(umax,urot)
-
530  IF(mcon.GT.0) vmin=min(vmin,vrot)
-
531  IF(mcon.GT.0) vmax=max(vmax,vrot)
-
532  ENDIF
-
533  ENDIF
-
534  ENDDO
-
535  ENDDO
-
536  lo(n,k)=w.GE.pmp
-
537  IF(lo(n,k)) THEN
-
538  urot=crot(n)*u-srot(n)*v
-
539  vrot=srot(n)*u+crot(n)*v
-
540  uo(n,k)=urot/w
-
541  vo(n,k)=vrot/w
-
542  IF(mcon.GT.0) uo(n,k)=min(max(uo(n,k),umin),umax)
-
543  IF(mcon.GT.0) vo(n,k)=min(max(vo(n,k),vmin),vmax)
-
544  ELSE
-
545  uo(n,k)=0.
-
546  vo(n,k)=0.
-
547  ENDIF
-
548  ELSE
-
549  lo(n,k)=.false.
-
550  uo(n,k)=0.
-
551  vo(n,k)=0.
-
552  ENDIF
-
553  ENDDO
-
554  DO k=1,km
-
555  ibo(k)=ibi(k)
-
556  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
-
557  ENDDO
-
558  select type(grid_out)
-
559  type is(ip_equid_cylind_grid)
-
560  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
-
561  end select
-
562  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
563  ELSE
-
564  IF(iret.EQ.0) iret=iretx
-
565  IF(.not. to_station_points) no=0
-
566  ENDIF
-
567  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
568  end subroutine interpolate_bicubic_vector
-
569 
-
570 end module bicubic_interp_mod
- - -
subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
Definition: movect.F90:26
-
Bicubic interpolation routines for scalars and vectors.
-
subroutine interpolate_bicubic_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.
-
subroutine interpolate_bicubic_vector(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
This subprogram performs bicubic interpolation from any grid to any grid for vector fields.
-
Driver module for gdswzd routines.
Definition: gdswzd_mod.F90:25
-
Re-export the individual grids.
Definition: ip_grids_mod.F90:7
-
Make multiple pole scalar values consistent.
Definition: polfix_mod.F90:7
-
subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
Make multiple pole scalar values consistent.
Definition: polfix_mod.F90:30
-
subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
Make multiple pole vector values consistent,.
Definition: polfix_mod.F90:125
+Go to the documentation of this file.
1
+
4
+ +
9 use gdswzd_mod
+
10 use polfix_mod
+
11 use ip_grids_mod
+
12 implicit none
+
13
+
14 private
+
15 public :: interpolate_bicubic
+
16
+
+ +
18 module procedure interpolate_bicubic_scalar
+
19 module procedure interpolate_bicubic_vector
+
+
20 end interface interpolate_bicubic
+
21
+
22 ! Smallest positive real value (use for equality comparisons)
+
23 REAL :: TINYREAL=tiny(1.0)
+
24
+
25contains
+
26
+
+
80 SUBROUTINE interpolate_bicubic_scalar(IPOPT,grid_in,grid_out, &
+
81 MI,MO,KM,IBI,LI,GI, &
+
82 NO,RLAT,RLON,IBO,LO,GO,IRET)
+
83 class(ip_grid), intent(in) :: grid_in, grid_out
+
84 INTEGER, INTENT(IN ) :: IPOPT(20)
+
85 INTEGER, INTENT(IN ) :: MI,MO,KM
+
86 INTEGER, INTENT(IN ) :: IBI(KM)
+
87 INTEGER, INTENT(INOUT) :: NO
+
88 INTEGER, INTENT( OUT) :: IRET, IBO(KM)
+
89 !
+
90 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
+
91 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
+
92 !
+
93 REAL, INTENT(IN ) :: GI(MI,KM)
+
94 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
+
95 REAL, INTENT( OUT) :: GO(MO,KM)
+
96 !
+
97 REAL, PARAMETER :: FILL=-9999.
+
98 !
+
99 INTEGER :: IJX(4),IJY(4)
+
100 INTEGER :: MCON,MP,N,I,J,K
+
101 INTEGER :: NK,NV
+
102 LOGICAL :: SAME_GRIDI, SAME_GRIDO
+
103 !
+
104 REAL :: PMP,XIJ,YIJ,XF,YF
+
105 REAL :: G,W,GMIN,GMAX
+
106 REAL :: WX(4),WY(4)
+
107 REAL :: XPTS(MO),YPTS(MO)
+
108 logical :: to_station_points
+
109
+
110 ! Save coeffecients between calls and only compute if grids have changed
+
111 REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
+
112 REAL, ALLOCATABLE,SAVE :: WXY(:,:,:)
+
113 INTEGER, SAVE :: NOX=-1,iretx=-1
+
114 INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:),NC(:)
+
115 class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
+
116
+
117 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
118 ! SET PARAMETERS
+
119 iret=0
+
120 mcon=ipopt(1)
+
121 mp=ipopt(2)
+
122 IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
+
123 IF(mp.LT.0.OR.mp.GT.100) iret=32
+
124 pmp=mp*0.01
+
125
+
126 if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
+
127 allocate(prev_grid_in, source = grid_in)
+
128 allocate(prev_grid_out, source = grid_out)
+
129
+
130 same_gridi = .false.
+
131 same_grido = .false.
+
132 else
+
133 same_gridi = grid_in == prev_grid_in
+
134 same_grido = grid_out == prev_grid_out
+
135
+
136 if (.not. same_gridi .or. .not. same_grido) then
+
137 deallocate(prev_grid_in)
+
138 deallocate(prev_grid_out)
+
139
+
140 allocate(prev_grid_in, source = grid_in)
+
141 allocate(prev_grid_out, source = grid_out)
+
142 end if
+
143 end if
+
144
+
145 select type(grid_out)
+
146 type is(ip_station_points_grid)
+
147 to_station_points = .true.
+
148 class default
+
149 to_station_points = .false.
+
150 end select
+
151
+
152 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
153 ! SAVE OR SKIP WEIGHT COMPUTATION
+
154 IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
+
155 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
156 ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
+
157 CALL gdswzd(grid_out,0,mo,fill,xpts,ypts,rlon,rlat,no)
+
158 IF(no.EQ.0) iret=3
+
159 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
160 ! LOCATE INPUT POINTS
+
161 CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
+
162 IF(iret.EQ.0.AND.nv.EQ.0) iret=2
+
163 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
164 ! ALLOCATE AND SAVE GRID DATA
+
165 IF(nox.NE.no) THEN
+
166 IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,nc,nxy,wxy)
+
167 ALLOCATE(rlatx(no),rlonx(no),nc(no),nxy(4,4,no),wxy(4,4,no))
+
168 nox=no
+
169 ENDIF
+
170 iretx=iret
+
171 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
172 ! COMPUTE WEIGHTS
+
173 IF(iret.EQ.0) THEN
+
174 !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY) SCHEDULE(STATIC)
+
175 DO n=1,no
+
176 rlonx(n)=rlon(n)
+
177 rlatx(n)=rlat(n)
+
178 xij=xpts(n)
+
179 yij=ypts(n)
+
180 IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
+
181 ijx(1:4)=floor(xij-1)+(/0,1,2,3/)
+
182 ijy(1:4)=floor(yij-1)+(/0,1,2,3/)
+
183 xf=xij-ijx(2)
+
184 yf=yij-ijy(2)
+
185 DO j=1,4
+
186 DO i=1,4
+
187 nxy(i,j,n) = grid_in%field_pos(ijx(i), ijy(j))
+
188 ENDDO
+
189 ENDDO
+
190 IF(minval(nxy(1:4,1:4,n)).GT.0) THEN
+
191 ! BICUBIC WHERE 16-POINT STENCIL IS AVAILABLE
+
192 nc(n)=1
+
193 wx(1)=xf*(1-xf)*(2-xf)/(-6.)
+
194 wx(2)=(xf+1)*(1-xf)*(2-xf)/2.
+
195 wx(3)=(xf+1)*xf*(2-xf)/2.
+
196 wx(4)=(xf+1)*xf*(1-xf)/(-6.)
+
197 wy(1)=yf*(1-yf)*(2-yf)/(-6.)
+
198 wy(2)=(yf+1)*(1-yf)*(2-yf)/2.
+
199 wy(3)=(yf+1)*yf*(2-yf)/2.
+
200 wy(4)=(yf+1)*yf*(1-yf)/(-6.)
+
201 ELSE
+
202 ! BILINEAR ELSEWHERE NEAR THE EDGE OF THE GRID
+
203 nc(n)=2
+
204 wx(1)=0
+
205 wx(2)=(1-xf)
+
206 wx(3)=xf
+
207 wx(4)=0
+
208 wy(1)=0
+
209 wy(2)=(1-yf)
+
210 wy(3)=yf
+
211 wy(4)=0
+
212 ENDIF
+
213 DO j=1,4
+
214 DO i=1,4
+
215 wxy(i,j,n)=wx(i)*wy(j)
+
216 ENDDO
+
217 ENDDO
+
218 ELSE
+
219 nc(n)=0
+
220 ENDIF
+
221 ENDDO
+
222 ENDIF
+
223 ENDIF
+
224 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
225 ! INTERPOLATE OVER ALL FIELDS
+
226 IF(iret.EQ.0.AND.iretx.EQ.0) THEN
+
227 IF(.not. to_station_points) THEN
+
228 no=nox
+
229 DO n=1,no
+
230 rlon(n)=rlonx(n)
+
231 rlat(n)=rlatx(n)
+
232 ENDDO
+
233 ENDIF
+
234 !$OMP PARALLEL DO PRIVATE(NK,K,N,G,W,GMIN,GMAX,J,I) SCHEDULE(STATIC)
+
235 DO nk=1,no*km
+
236 k=(nk-1)/no+1
+
237 n=nk-no*(k-1)
+
238 IF(nc(n).GT.0) THEN
+
239 g=0
+
240 w=0
+
241 IF(mcon.GT.0) gmin=huge(gmin)
+
242 IF(mcon.GT.0) gmax=-huge(gmax)
+
243 DO j=nc(n),5-nc(n)
+
244 DO i=nc(n),5-nc(n)
+
245 IF(nxy(i,j,n).GT.0)THEN
+
246 IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k))THEN
+
247 g=g+wxy(i,j,n)*gi(nxy(i,j,n),k)
+
248 w=w+wxy(i,j,n)
+
249 IF(mcon.GT.0) gmin=min(gmin,gi(nxy(i,j,n),k))
+
250 IF(mcon.GT.0) gmax=max(gmax,gi(nxy(i,j,n),k))
+
251 ENDIF
+
252 ENDIF
+
253 ENDDO
+
254 ENDDO
+
255 lo(n,k)=w.GE.pmp
+
256 IF(lo(n,k)) THEN
+
257 go(n,k)=g/w
+
258 IF(mcon.GT.0) go(n,k)=min(max(go(n,k),gmin),gmax)
+
259 ELSE
+
260 go(n,k)=0.
+
261 ENDIF
+
262 ELSE
+
263 lo(n,k)=.false.
+
264 go(n,k)=0.
+
265 ENDIF
+
266 ENDDO
+
267 DO k=1,km
+
268 ibo(k)=ibi(k)
+
269 IF(.NOT.all(lo(1:no,k))) ibo(k)=1
+
270 ENDDO
+
271 select type(grid_out)
+
272 type is(ip_equid_cylind_grid)
+
273 CALL polfixs(no,mo,km,rlat,ibo,lo,go)
+
274 end select
+
275 ELSE
+
276 IF(iret.EQ.0) iret=iretx
+
277 IF(.not. to_station_points) no=0
+
278 ENDIF
+
+
279 end subroutine interpolate_bicubic_scalar
+
280
+
+
338 subroutine interpolate_bicubic_vector(ipopt, grid_in, grid_out, &
+
339 mi, mo, km, ibi, li, ui, vi, &
+
340 no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
+
341 class(ip_grid), intent(in) :: grid_in, grid_out
+
342 INTEGER, INTENT(IN ) :: IPOPT(20)
+
343 INTEGER, INTENT(IN ) :: IBI(KM),MI,MO,KM
+
344 INTEGER, INTENT(INOUT) :: NO
+
345 INTEGER, INTENT( OUT) :: IRET, IBO(KM)
+
346 !
+
347 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
+
348 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
+
349 !
+
350 REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
+
351 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO),CROT(MO),SROT(MO)
+
352 REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
+
353 !
+
354 REAL, PARAMETER :: FILL=-9999.
+
355 !
+
356 INTEGER :: IJX(4),IJY(4)
+
357 INTEGER :: MCON,MP,N,I,J,K,NK,NV
+
358 !
+
359 LOGICAL :: SAME_GRIDI,SAME_GRIDO
+
360 !
+
361 REAL :: CM,SM,UROT,VROT
+
362 REAL :: PMP,XIJ,YIJ,XF,YF
+
363 REAL :: U,V,W,UMIN,UMAX,VMIN,VMAX
+
364 REAL :: XPTS(MO),YPTS(MO)
+
365 REAL :: WX(4),WY(4)
+
366 REAL :: XPTI(MI),YPTI(MI),RLOI(MI),RLAI(MI)
+
367 REAL :: CROI(MI),SROI(MI)
+
368
+
369 logical :: to_station_points
+
370
+
371 ! Save coeffecients between calls and only compute if grids have changed
+
372 REAL, ALLOCATABLE, SAVE :: RLATX(:),RLONX(:),CROTX(:),SROTX(:)
+
373 REAL, ALLOCATABLE, SAVE :: WXY(:,:,:),CXY(:,:,:),SXY(:,:,:)
+
374 INTEGER, SAVE :: NOX=-1,iretx=-1
+
375 INTEGER, ALLOCATABLE, SAVE :: NXY(:,:,:),NC(:)
+
376 class(ip_grid), allocatable, save :: prev_grid_in, prev_grid_out
+
377 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
378 ! SET PARAMETERS
+
379 iret=0
+
380 mcon=ipopt(1)
+
381 mp=ipopt(2)
+
382 IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
+
383 IF(mp.LT.0.OR.mp.GT.100) iret=32
+
384 pmp=mp*0.01
+
385
+
386
+
387 if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
+
388 allocate(prev_grid_in, source = grid_in)
+
389 allocate(prev_grid_out, source = grid_out)
+
390
+
391 same_gridi = .false.
+
392 same_grido = .false.
+
393 else
+
394 same_gridi = grid_in == prev_grid_in
+
395 same_grido = grid_out == prev_grid_out
+
396
+
397 if (.not. same_gridi .or. .not. same_grido) then
+
398 deallocate(prev_grid_in)
+
399 deallocate(prev_grid_out)
+
400
+
401 allocate(prev_grid_in, source = grid_in)
+
402 allocate(prev_grid_out, source = grid_out)
+
403 end if
+
404 end if
+
405
+
406 select type(grid_out)
+
407 type is(ip_station_points_grid)
+
408 to_station_points = .true.
+
409 class default
+
410 to_station_points = .false.
+
411 end select
+
412
+
413 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
414 ! SAVE OR SKIP WEIGHT COMPUTATION
+
415 IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
+
416 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
417 ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
+
418 CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
+
419 IF(no.EQ.0) iret=3
+
420 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
421 ! LOCATE INPUT POINTS
+
422 CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
+
423 IF(iret.EQ.0.AND.nv.EQ.0) iret=2
+
424 CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
+
425 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
426 ! ALLOCATE AND SAVE GRID DATA
+
427 IF(nox.NE.no) THEN
+
428 IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,crotx,srotx,nc,nxy,wxy,cxy,sxy)
+
429 ALLOCATE(rlatx(no),rlonx(no),crotx(no),srotx(no),nc(no), &
+
430 nxy(4,4,no),wxy(4,4,no),cxy(4,4,no),sxy(4,4,no))
+
431 nox=no
+
432 ENDIF
+
433 iretx=iret
+
434 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
435 ! COMPUTE WEIGHTS
+
436 IF(iret.EQ.0) THEN
+
437 !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY,CM,SM) SCHEDULE(STATIC)
+
438 DO n=1,no
+
439 rlonx(n)=rlon(n)
+
440 rlatx(n)=rlat(n)
+
441 crotx(n)=crot(n)
+
442 srotx(n)=srot(n)
+
443 xij=xpts(n)
+
444 yij=ypts(n)
+
445 IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
+
446 ijx(1:4)=floor(xij-1)+(/0,1,2,3/)
+
447 ijy(1:4)=floor(yij-1)+(/0,1,2,3/)
+
448 xf=xij-ijx(2)
+
449 yf=yij-ijy(2)
+
450 DO j=1,4
+
451 DO i=1,4
+
452 nxy(i,j,n) = grid_in%field_pos(ijx(i), ijy(j))
+
453 ENDDO
+
454 ENDDO
+
455 IF(minval(nxy(1:4,1:4,n)).GT.0) THEN
+
456 ! BICUBIC WHERE 16-POINT STENCIL IS AVAILABLE
+
457 nc(n)=1
+
458 wx(1)=xf*(1-xf)*(2-xf)/(-6.)
+
459 wx(2)=(xf+1)*(1-xf)*(2-xf)/2.
+
460 wx(3)=(xf+1)*xf*(2-xf)/2.
+
461 wx(4)=(xf+1)*xf*(1-xf)/(-6.)
+
462 wy(1)=yf*(1-yf)*(2-yf)/(-6.)
+
463 wy(2)=(yf+1)*(1-yf)*(2-yf)/2.
+
464 wy(3)=(yf+1)*yf*(2-yf)/2.
+
465 wy(4)=(yf+1)*yf*(1-yf)/(-6.)
+
466 ELSE
+
467 ! BILINEAR ELSEWHERE NEAR THE EDGE OF THE GRID
+
468 nc(n)=2
+
469 wx(1)=0
+
470 wx(2)=(1-xf)
+
471 wx(3)=xf
+
472 wx(4)=0
+
473 wy(1)=0
+
474 wy(2)=(1-yf)
+
475 wy(3)=yf
+
476 wy(4)=0
+
477 ENDIF
+
478 DO j=1,4
+
479 DO i=1,4
+
480 wxy(i,j,n)=wx(i)*wy(j)
+
481 IF(nxy(i,j,n).GT.0) THEN
+
482 CALL movect(rlai(nxy(i,j,n)),rloi(nxy(i,j,n)), &
+
483 rlat(n),rlon(n),cm,sm)
+
484 cxy(i,j,n)=cm*croi(nxy(i,j,n))+sm*sroi(nxy(i,j,n))
+
485 sxy(i,j,n)=sm*croi(nxy(i,j,n))-cm*sroi(nxy(i,j,n))
+
486 ENDIF
+
487 ENDDO
+
488 ENDDO
+
489 ELSE
+
490 nc(n)=0
+
491 ENDIF
+
492 ENDDO
+
493 ENDIF
+
494 ENDIF
+
495 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
496 ! INTERPOLATE OVER ALL FIELDS
+
497 IF(iret.EQ.0.AND.iretx.EQ.0) THEN
+
498 IF(.not. to_station_points) THEN
+
499 no=nox
+
500 DO n=1,no
+
501 rlon(n)=rlonx(n)
+
502 rlat(n)=rlatx(n)
+
503 crot(n)=crotx(n)
+
504 srot(n)=srotx(n)
+
505 ENDDO
+
506 ENDIF
+
507 !$OMP PARALLEL DO PRIVATE(NK,K,N,U,V,W,UMIN,UMAX,VMIN,VMAX,UROT,VROT,J,I) SCHEDULE(STATIC)
+
508 DO nk=1,no*km
+
509 k=(nk-1)/no+1
+
510 n=nk-no*(k-1)
+
511 IF(nc(n).GT.0) THEN
+
512 u=0
+
513 v=0
+
514 w=0
+
515 IF(mcon.GT.0) umin=huge(umin)
+
516 IF(mcon.GT.0) umax=-huge(umax)
+
517 IF(mcon.GT.0) vmin=huge(vmin)
+
518 IF(mcon.GT.0) vmax=-huge(vmax)
+
519 DO j=nc(n),5-nc(n)
+
520 DO i=nc(n),5-nc(n)
+
521 IF(nxy(i,j,n).GT.0) THEN
+
522 IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
+
523 urot=cxy(i,j,n)*ui(nxy(i,j,n),k)-sxy(i,j,n)*vi(nxy(i,j,n),k)
+
524 vrot=sxy(i,j,n)*ui(nxy(i,j,n),k)+cxy(i,j,n)*vi(nxy(i,j,n),k)
+
525 u=u+wxy(i,j,n)*urot
+
526 v=v+wxy(i,j,n)*vrot
+
527 w=w+wxy(i,j,n)
+
528 IF(mcon.GT.0) umin=min(umin,urot)
+
529 IF(mcon.GT.0) umax=max(umax,urot)
+
530 IF(mcon.GT.0) vmin=min(vmin,vrot)
+
531 IF(mcon.GT.0) vmax=max(vmax,vrot)
+
532 ENDIF
+
533 ENDIF
+
534 ENDDO
+
535 ENDDO
+
536 lo(n,k)=w.GE.pmp
+
537 IF(lo(n,k)) THEN
+
538 urot=crot(n)*u-srot(n)*v
+
539 vrot=srot(n)*u+crot(n)*v
+
540 uo(n,k)=urot/w
+
541 vo(n,k)=vrot/w
+
542 IF(mcon.GT.0) uo(n,k)=min(max(uo(n,k),umin),umax)
+
543 IF(mcon.GT.0) vo(n,k)=min(max(vo(n,k),vmin),vmax)
+
544 ELSE
+
545 uo(n,k)=0.
+
546 vo(n,k)=0.
+
547 ENDIF
+
548 ELSE
+
549 lo(n,k)=.false.
+
550 uo(n,k)=0.
+
551 vo(n,k)=0.
+
552 ENDIF
+
553 ENDDO
+
554 DO k=1,km
+
555 ibo(k)=ibi(k)
+
556 IF(.NOT.all(lo(1:no,k))) ibo(k)=1
+
557 ENDDO
+
558 select type(grid_out)
+
559 type is(ip_equid_cylind_grid)
+
560 CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
+
561 end select
+
562 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
563 ELSE
+
564 IF(iret.EQ.0) iret=iretx
+
565 IF(.not. to_station_points) no=0
+
566 ENDIF
+
567 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
568 end subroutine interpolate_bicubic_vector
+
569
+
570end module bicubic_interp_mod
+ + +
subroutine movect(flat, flon, tlat, tlon, crot, srot)
This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
Definition movect.F90:26
+
Bicubic interpolation routines for scalars and vectors.
+
subroutine interpolate_bicubic_vector(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
This subprogram performs bicubic interpolation from any grid to any grid for vector fields.
+
subroutine interpolate_bicubic_scalar(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.
+
Driver module for gdswzd routines.
+
Re-export the individual grids.
+
Make multiple pole scalar values consistent.
Definition polfix_mod.F90:7
+
subroutine, public polfixs(nm, nx, km, rlat, ib, lo, go)
Make multiple pole scalar values consistent.
+
subroutine, public polfixv(nm, nx, km, rlat, rlon, ib, lo, uo, vo)
Make multiple pole vector values consistent,.
diff --git a/bilinear__interp__mod_8F90.html b/bilinear__interp__mod_8F90.html index f289e4f4..84a98309 100644 --- a/bilinear__interp__mod_8F90.html +++ b/bilinear__interp__mod_8F90.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: bilinear_interp_mod.F90 File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,9 +76,16 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -86,8 +93,7 @@ Data Types | Modules | Functions/Subroutines
-
-
bilinear_interp_mod.F90 File Reference
+
bilinear_interp_mod.F90 File Reference
@@ -96,25 +102,25 @@

Go to the source code of this file.

-

+

Data Types

interface  bilinear_interp_mod::interpolate_bilinear
 
- - +

+

Modules

module  bilinear_interp_mod
module  bilinear_interp_mod
 Bilinear interpolation routines for scalars and vectors.
 
- - - - - - - + + + + + +

+

Functions/Subroutines

subroutine bilinear_interp_mod::interpolate_bilinear_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
 This subprogram performs bilinear interpolation from any grid to any grid for scalar fields. More...
 
subroutine bilinear_interp_mod::interpolate_bilinear_vector (ipopt, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
 This subprogram performs bilinear interpolation from any grid to any grid for vector fields. More...
 
subroutine bilinear_interp_mod::interpolate_bilinear_scalar (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
 This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.
 
subroutine bilinear_interp_mod::interpolate_bilinear_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs bilinear interpolation from any grid to any grid for vector fields.
 

Detailed Description

Bilinear interpolation routines for scalars and vectors.

@@ -127,7 +133,7 @@ diff --git a/bilinear__interp__mod_8F90.js b/bilinear__interp__mod_8F90.js index 27b7b9c0..915178cc 100644 --- a/bilinear__interp__mod_8F90.js +++ b/bilinear__interp__mod_8F90.js @@ -1,6 +1,6 @@ var bilinear__interp__mod_8F90 = [ - [ "interpolate_bilinear", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html", "interfacebilinear__interp__mod_1_1interpolate__bilinear" ], - [ "interpolate_bilinear_scalar", "bilinear__interp__mod_8F90.html#a34d2eea4682104097dccf3e7ab6a9398", null ], - [ "interpolate_bilinear_vector", "bilinear__interp__mod_8F90.html#abc218f8774d2af09299eb299d6f38e04", null ] + [ "bilinear_interp_mod::interpolate_bilinear", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html", "interfacebilinear__interp__mod_1_1interpolate__bilinear" ], + [ "interpolate_bilinear_scalar", "bilinear__interp__mod_8F90.html#a3aac4f2311edefcd9d3a54f7fe64bcf6", null ], + [ "interpolate_bilinear_vector", "bilinear__interp__mod_8F90.html#ae3caf32c6b95b5c00f26da3601ceef93", null ] ]; \ No newline at end of file diff --git a/bilinear__interp__mod_8F90_source.html b/bilinear__interp__mod_8F90_source.html index 810f6f11..44468298 100644 --- a/bilinear__interp__mod_8F90_source.html +++ b/bilinear__interp__mod_8F90_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: bilinear_interp_mod.F90 Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,458 +81,470 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
bilinear_interp_mod.F90
+
bilinear_interp_mod.F90
-Go to the documentation of this file.
1 
-
4 
- -
9  use gdswzd_mod
-
10  use ip_grids_mod
- - -
13  use polfix_mod
-
14  implicit none
-
15 
-
16  private
-
17  public :: interpolate_bilinear
-
18 
- -
20  module procedure interpolate_bilinear_scalar
-
21  module procedure interpolate_bilinear_vector
-
22  end interface interpolate_bilinear
-
23 
-
24  ! Smallest positive real value (use for equality comparisons)
-
25  REAL :: TINYREAL=tiny(1.0)
-
26 
-
27 contains
-
28 
-
72  subroutine interpolate_bilinear_scalar(IPOPT,grid_in,grid_out,MI,MO,KM,IBI,LI,GI,NO,RLAT,RLON,IBO,LO,GO,IRET)
-
73  class(ip_grid), intent(in) :: grid_in, grid_out
-
74  INTEGER, INTENT(IN ) :: IPOPT(20)
-
75  INTEGER, INTENT(IN ) :: MI,MO,KM
-
76  INTEGER, INTENT(IN ) :: IBI(KM)
-
77  INTEGER, INTENT(INOUT) :: NO
-
78  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
-
79  !
-
80  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
-
81  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
-
82  !
-
83  REAL, INTENT(IN ) :: GI(MI,KM)
-
84  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
-
85  REAL, INTENT( OUT) :: GO(MO,KM)
-
86  !
-
87  REAL, PARAMETER :: FILL=-9999.
-
88  !
-
89  INTEGER :: IJX(2),IJY(2)
-
90  INTEGER :: MP,N,I,J,K
-
91  INTEGER :: NK,NV
-
92  INTEGER :: MSPIRAL,I1,J1,IXS,JXS
-
93  INTEGER :: MX,KXS,KXT,IX,JX,NX
-
94  !
-
95  LOGICAL :: SAME_GRIDI, SAME_GRIDO
-
96  !
-
97  REAL :: WX(2),WY(2)
-
98  REAL :: XPTS(MO),YPTS(MO)
-
99  REAL :: PMP,XIJ,YIJ,XF,YF,G,W
-
100 
-
101  logical :: to_station_points
-
102 
-
103  ! Save coeffecients between calls and only compute if grids have changed
-
104  INTEGER, SAVE :: NOX=-1,iretx=-1
-
105  INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:)
-
106  REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
-
107  REAL, ALLOCATABLE,SAVE :: WXY(:,:,:)
-
108  class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
-
109 
-
110  iret=0
-
111  mp=ipopt(1)
-
112  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
-
113  IF(mp.LT.0.OR.mp.GT.100) iret=32
-
114  pmp=mp*0.01
-
115  mspiral=max(ipopt(2),0)
-
116 
-
117  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
-
118  allocate(prev_grid_in, source = grid_in)
-
119  allocate(prev_grid_out, source = grid_out)
-
120 
-
121  same_gridi = .false.
-
122  same_grido = .false.
-
123  else
-
124  same_gridi = grid_in == prev_grid_in
-
125  same_grido = grid_out == prev_grid_out
-
126 
-
127  if (.not. same_gridi .or. .not. same_grido) then
-
128  deallocate(prev_grid_in)
-
129  deallocate(prev_grid_out)
-
130 
-
131  allocate(prev_grid_in, source = grid_in)
-
132  allocate(prev_grid_out, source = grid_out)
-
133  end if
-
134  end if
-
135 
-
136  select type(grid_out)
-
137  type is(ip_station_points_grid)
-
138  to_station_points = .true.
-
139  class default
-
140  to_station_points = .false.
-
141  end select
-
142 
-
143  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
144  ! SAVE OR SKIP WEIGHT COMPUTATION
-
145  IF(iret==0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
-
146  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
147  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
-
148  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
-
149  IF(no.EQ.0) iret=3
-
150  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
151  ! LOCATE INPUT POINTS
-
152  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
-
153  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
-
154  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
155  ! ALLOCATE AND SAVE GRID DATA
-
156  IF(nox.NE.no) THEN
-
157  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,nxy,wxy)
-
158  ALLOCATE(rlatx(no),rlonx(no),nxy(2,2,no),wxy(2,2,no))
-
159  nox=no
-
160  ENDIF
-
161  iretx=iret
-
162  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
163  ! COMPUTE WEIGHTS
-
164  IF(iret.EQ.0) THEN
-
165  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY) SCHEDULE(STATIC)
-
166  DO n=1,no
-
167  rlonx(n)=rlon(n)
-
168  rlatx(n)=rlat(n)
-
169  xij=xpts(n)
-
170  yij=ypts(n)
-
171  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
-
172  ijx(1:2)=floor(xij)+(/0,1/)
-
173  ijy(1:2)=floor(yij)+(/0,1/)
-
174  xf=xij-ijx(1)
-
175  yf=yij-ijy(1)
-
176  wx(1)=(1-xf)
-
177  wx(2)=xf
-
178  wy(1)=(1-yf)
-
179  wy(2)=yf
-
180  DO j=1,2
-
181  DO i=1,2
-
182  nxy(i,j,n)=grid_in%field_pos(ijx(i), ijy(j))
-
183  wxy(i,j,n)=wx(i)*wy(j)
-
184  ENDDO
-
185  ENDDO
-
186  ELSE
-
187  nxy(:,:,n)=0
-
188  ENDIF
-
189  ENDDO
-
190  ENDIF
-
191  ENDIF
-
192  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
193  ! INTERPOLATE OVER ALL FIELDS
-
194  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
-
195  IF(.not. to_station_points) THEN
-
196  no=nox
-
197  DO n=1,no
-
198  rlon(n)=rlonx(n)
-
199  rlat(n)=rlatx(n)
-
200  ENDDO
-
201  ENDIF
-
202  !$OMP PARALLEL DO &
-
203  !$OMP PRIVATE(NK,K,N,G,W,J,I) &
-
204  !$OMP PRIVATE(I1,J1,IXS,JXS,MX,KXS,KXT,IX,JX,NX) SCHEDULE(STATIC)
-
205  DO nk=1,no*km
-
206  k=(nk-1)/no+1
-
207  n=nk-no*(k-1)
-
208  g=0
-
209  w=0
-
210  DO j=1,2
-
211  DO i=1,2
-
212  IF(nxy(i,j,n).GT.0)THEN
-
213  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
-
214  g=g+wxy(i,j,n)*gi(nxy(i,j,n),k)
-
215  w=w+wxy(i,j,n)
-
216  ENDIF
-
217  ENDIF
-
218  ENDDO
-
219  ENDDO
-
220  lo(n,k)=w.GE.pmp
-
221  IF(lo(n,k)) THEN
-
222  go(n,k)=g/w
-
223  ELSEIF(mspiral.GT.0.AND.abs(xpts(n)-fill).GT.tinyreal.AND.abs(ypts(n)-fill).GT.tinyreal) THEN
-
224  i1=nint(xpts(n))
-
225  j1=nint(ypts(n))
-
226  ixs=int(sign(1.,xpts(n)-i1))
-
227  jxs=int(sign(1.,ypts(n)-j1))
-
228  spiral : DO mx=1,mspiral**2
-
229  kxs=int(sqrt(4*mx-2.5))
-
230  kxt=mx-(kxs**2/4+1)
-
231  SELECT CASE(mod(kxs,4))
-
232  CASE(1)
-
233  ix=i1-ixs*(kxs/4-kxt)
-
234  jx=j1-jxs*kxs/4
-
235  CASE(2)
-
236  ix=i1+ixs*(1+kxs/4)
-
237  jx=j1-jxs*(kxs/4-kxt)
-
238  CASE(3)
-
239  ix=i1+ixs*(1+kxs/4-kxt)
-
240  jx=j1+jxs*(1+kxs/4)
-
241  CASE DEFAULT
-
242  ix=i1-ixs*kxs/4
-
243  jx=j1+jxs*(kxs/4-kxt)
-
244  END SELECT
-
245  nx=grid_in%field_pos(ix, jx)
-
246  IF(nx.GT.0.)THEN
-
247  IF(li(nx,k).OR.ibi(k).EQ.0)THEN
-
248  go(n,k)=gi(nx,k)
-
249  lo(n,k)=.true.
-
250  EXIT spiral
-
251  ENDIF
-
252  ENDIF
-
253  ENDDO spiral
-
254  IF(.NOT.lo(n,k))THEN
-
255  ibo(k)=1
-
256  go(n,k)=0.
-
257  ENDIF
-
258  ELSE
-
259  go(n,k)=0.
-
260  ENDIF
-
261  ENDDO
-
262  DO k=1,km
-
263  ibo(k)=ibi(k)
-
264  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
-
265  ENDDO
-
266  select type(grid_out)
-
267  type is(ip_equid_cylind_grid)
-
268  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
-
269  end select
-
270  ELSE
-
271  IF(iret.EQ.0) iret=iretx
-
272  IF(.not. to_station_points) no=0
-
273  ENDIF
-
274 
-
275  end subroutine interpolate_bilinear_scalar
-
276 
-
329  SUBROUTINE interpolate_bilinear_vector(ipopt,grid_in,grid_out, &
-
330  MI,MO,KM,IBI,LI,UI,VI, &
-
331  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
-
332  class(ip_grid), intent(in) :: grid_in, grid_out
-
333  INTEGER, INTENT(IN ) :: IPOPT(20),IBI(KM),MI,MO,KM
-
334  INTEGER, INTENT(INOUT) :: NO
-
335  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
-
336  !
-
337  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
-
338  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
-
339  !
-
340  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
-
341  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO),CROT(MO),SROT(MO)
-
342  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
-
343  !
-
344  REAL, PARAMETER :: FILL=-9999.
-
345  !
-
346  INTEGER :: IJX(2),IJY(2)
-
347  INTEGER :: MP,N,I,J,K,NK,NV
-
348  !
-
349  LOGICAL :: SAME_GRIDI, SAME_GRIDO
-
350  !
-
351  REAL :: CM,SM,UROT,VROT
-
352  REAL :: PMP,XIJ,YIJ,XF,YF,U,V,W
-
353  REAL :: XPTS(MO),YPTS(MO)
-
354  REAL :: WX(2),WY(2)
-
355  REAL :: XPTI(MI),YPTI(MI)
-
356  REAL :: RLOI(MI),RLAI(MI)
-
357  REAL :: CROI(MI),SROI(MI)
-
358 
-
359  logical :: to_station_points
-
360 
-
361  ! Save coeffecients between calls and only compute if grids have changed
-
362  INTEGER, SAVE :: NOX=-1,iretx=-1
-
363  INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:)
-
364  REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
-
365  REAL, ALLOCATABLE,SAVE :: CROTX(:),SROTX(:)
-
366  REAL, ALLOCATABLE,SAVE :: WXY(:,:,:),CXY(:,:,:),SXY(:,:,:)
-
367  class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
-
368 
-
369  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
370  ! SET PARAMETERS
-
371  iret=0
-
372  mp=ipopt(1)
-
373  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
-
374  IF(mp.LT.0.OR.mp.GT.100) iret=32
-
375  pmp=mp*0.01
-
376 
-
377  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
-
378  allocate(prev_grid_in, source = grid_in)
-
379  allocate(prev_grid_out, source = grid_out)
-
380 
-
381  same_gridi = .false.
-
382  same_grido = .false.
-
383  else
-
384  same_gridi = grid_in == prev_grid_in
-
385  same_grido = grid_out == prev_grid_out
-
386 
-
387  if (.not. same_gridi .or. .not. same_grido) then
-
388  deallocate(prev_grid_in)
-
389  deallocate(prev_grid_out)
-
390 
-
391  allocate(prev_grid_in, source = grid_in)
-
392  allocate(prev_grid_out, source = grid_out)
-
393  end if
-
394  end if
-
395 
-
396  select type(grid_out)
-
397  type is(ip_station_points_grid)
-
398  to_station_points = .true.
-
399  class default
-
400  to_station_points = .false.
-
401  end select
-
402 
-
403  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
404  ! SAVE OR SKIP WEIGHT COMPUTATION
-
405  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
-
406  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
407  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
-
408  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
-
409  IF(no.EQ.0) iret=3
-
410  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
411  ! LOCATE INPUT POINTS
-
412  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
-
413  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
-
414  CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
-
415  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
416  ! ALLOCATE AND SAVE GRID DATA
-
417  IF(nox.NE.no) THEN
-
418  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,crotx,srotx,nxy,wxy,cxy,sxy)
-
419  ALLOCATE(rlatx(no),rlonx(no),crotx(no),srotx(no), &
-
420  nxy(2,2,no),wxy(2,2,no),cxy(2,2,no),sxy(2,2,no))
-
421  nox=no
-
422  ENDIF
-
423  iretx=iret
-
424  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
425  ! COMPUTE WEIGHTS
-
426  IF(iret.EQ.0) THEN
-
427  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY,CM,SM) SCHEDULE(STATIC)
-
428  DO n=1,no
-
429  rlonx(n)=rlon(n)
-
430  rlatx(n)=rlat(n)
-
431  crotx(n)=crot(n)
-
432  srotx(n)=srot(n)
-
433  xij=xpts(n)
-
434  yij=ypts(n)
-
435  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
-
436  ijx(1:2)=floor(xij)+(/0,1/)
-
437  ijy(1:2)=floor(yij)+(/0,1/)
-
438  xf=xij-ijx(1)
-
439  yf=yij-ijy(1)
-
440  wx(1)=(1-xf)
-
441  wx(2)=xf
-
442  wy(1)=(1-yf)
-
443  wy(2)=yf
-
444  DO j=1,2
-
445  DO i=1,2
-
446  nxy(i, j, n) = grid_in%field_pos(ijx(i), ijy(j))
-
447  wxy(i,j,n)=wx(i)*wy(j)
-
448  IF(nxy(i,j,n).GT.0) THEN
-
449  CALL movect(rlai(nxy(i,j,n)),rloi(nxy(i,j,n)), &
-
450  rlat(n),rlon(n),cm,sm)
-
451  cxy(i,j,n)=cm*croi(nxy(i,j,n))+sm*sroi(nxy(i,j,n))
-
452  sxy(i,j,n)=sm*croi(nxy(i,j,n))-cm*sroi(nxy(i,j,n))
-
453  ENDIF
-
454  ENDDO
-
455  ENDDO
-
456  ELSE
-
457  nxy(:,:,n)=0
-
458  ENDIF
-
459  ENDDO
-
460  ENDIF ! IS IRET 0?
-
461  ENDIF
-
462  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
463  ! INTERPOLATE OVER ALL FIELDS
-
464  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
-
465  IF(.not. to_station_points) THEN
-
466  no=nox
-
467  DO n=1,no
-
468  rlon(n)=rlonx(n)
-
469  rlat(n)=rlatx(n)
-
470  crot(n)=crotx(n)
-
471  srot(n)=srotx(n)
-
472  ENDDO
-
473  ENDIF
-
474  !$OMP PARALLEL DO PRIVATE(NK,K,N,U,V,W,UROT,VROT,J,I) SCHEDULE(STATIC)
-
475  DO nk=1,no*km
-
476  k=(nk-1)/no+1
-
477  n=nk-no*(k-1)
-
478  u=0
-
479  v=0
-
480  w=0
-
481  DO j=1,2
-
482  DO i=1,2
-
483  IF(nxy(i,j,n).GT.0) THEN
-
484  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
-
485  urot=cxy(i,j,n)*ui(nxy(i,j,n),k)-sxy(i,j,n)*vi(nxy(i,j,n),k)
-
486  vrot=sxy(i,j,n)*ui(nxy(i,j,n),k)+cxy(i,j,n)*vi(nxy(i,j,n),k)
-
487  u=u+wxy(i,j,n)*urot
-
488  v=v+wxy(i,j,n)*vrot
-
489  w=w+wxy(i,j,n)
-
490  ENDIF
-
491  ENDIF
-
492  ENDDO
-
493  ENDDO
-
494  lo(n,k)=w.GE.pmp
-
495  IF(lo(n,k)) THEN
-
496  urot=crot(n)*u-srot(n)*v
-
497  vrot=srot(n)*u+crot(n)*v
-
498  uo(n,k)=urot/w
-
499  vo(n,k)=vrot/w
-
500  ELSE
-
501  uo(n,k)=0.
-
502  vo(n,k)=0.
-
503  ENDIF
-
504  ENDDO ! NK LOOP
-
505  DO k=1,km
-
506  ibo(k)=ibi(k)
-
507  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
-
508  ENDDO
-
509 
-
510  select type(grid_out)
-
511  type is(ip_equid_cylind_grid)
-
512  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
-
513  end select
-
514 
-
515  ELSE
-
516  IF(iret.EQ.0) iret=iretx
-
517  IF(.not. to_station_points) no=0
-
518  ENDIF
-
519  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
520  END SUBROUTINE interpolate_bilinear_vector
-
521 
-
522 end module bilinear_interp_mod
- - -
subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
Definition: movect.F90:26
-
Bilinear interpolation routines for scalars and vectors.
-
subroutine interpolate_bilinear_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.
-
subroutine interpolate_bilinear_vector(ipopt, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
This subprogram performs bilinear interpolation from any grid to any grid for vector fields.
-
Driver module for gdswzd routines.
Definition: gdswzd_mod.F90:25
-
Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
-
Routines for creating an ip_grid given a Grib descriptor.
-
Re-export the individual grids.
Definition: ip_grids_mod.F90:7
-
Make multiple pole scalar values consistent.
Definition: polfix_mod.F90:7
-
subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
Make multiple pole scalar values consistent.
Definition: polfix_mod.F90:30
-
subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
Make multiple pole vector values consistent,.
Definition: polfix_mod.F90:125
+Go to the documentation of this file.
1
+
4
+ +
9 use gdswzd_mod
+
10 use ip_grids_mod
+ + +
13 use polfix_mod
+
14 implicit none
+
15
+
16 private
+
17 public :: interpolate_bilinear
+
18
+
+ +
20 module procedure interpolate_bilinear_scalar
+
21 module procedure interpolate_bilinear_vector
+
+
22 end interface interpolate_bilinear
+
23
+
24 ! Smallest positive real value (use for equality comparisons)
+
25 REAL :: TINYREAL=tiny(1.0)
+
26
+
27contains
+
28
+
+
72 subroutine interpolate_bilinear_scalar(IPOPT,grid_in,grid_out,MI,MO,KM,IBI,LI,GI,NO,RLAT,RLON,IBO,LO,GO,IRET)
+
73 class(ip_grid), intent(in) :: grid_in, grid_out
+
74 INTEGER, INTENT(IN ) :: IPOPT(20)
+
75 INTEGER, INTENT(IN ) :: MI,MO,KM
+
76 INTEGER, INTENT(IN ) :: IBI(KM)
+
77 INTEGER, INTENT(INOUT) :: NO
+
78 INTEGER, INTENT( OUT) :: IRET, IBO(KM)
+
79 !
+
80 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
+
81 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
+
82 !
+
83 REAL, INTENT(IN ) :: GI(MI,KM)
+
84 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
+
85 REAL, INTENT( OUT) :: GO(MO,KM)
+
86 !
+
87 REAL, PARAMETER :: FILL=-9999.
+
88 !
+
89 INTEGER :: IJX(2),IJY(2)
+
90 INTEGER :: MP,N,I,J,K
+
91 INTEGER :: NK,NV
+
92 INTEGER :: MSPIRAL,I1,J1,IXS,JXS
+
93 INTEGER :: MX,KXS,KXT,IX,JX,NX
+
94 !
+
95 LOGICAL :: SAME_GRIDI, SAME_GRIDO
+
96 !
+
97 REAL :: WX(2),WY(2)
+
98 REAL :: XPTS(MO),YPTS(MO)
+
99 REAL :: PMP,XIJ,YIJ,XF,YF,G,W
+
100
+
101 logical :: to_station_points
+
102
+
103 ! Save coeffecients between calls and only compute if grids have changed
+
104 INTEGER, SAVE :: NOX=-1,iretx=-1
+
105 INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:)
+
106 REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
+
107 REAL, ALLOCATABLE,SAVE :: WXY(:,:,:)
+
108 class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
+
109
+
110 iret=0
+
111 mp=ipopt(1)
+
112 IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
+
113 IF(mp.LT.0.OR.mp.GT.100) iret=32
+
114 pmp=mp*0.01
+
115 mspiral=max(ipopt(2),0)
+
116
+
117 if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
+
118 allocate(prev_grid_in, source = grid_in)
+
119 allocate(prev_grid_out, source = grid_out)
+
120
+
121 same_gridi = .false.
+
122 same_grido = .false.
+
123 else
+
124 same_gridi = grid_in == prev_grid_in
+
125 same_grido = grid_out == prev_grid_out
+
126
+
127 if (.not. same_gridi .or. .not. same_grido) then
+
128 deallocate(prev_grid_in)
+
129 deallocate(prev_grid_out)
+
130
+
131 allocate(prev_grid_in, source = grid_in)
+
132 allocate(prev_grid_out, source = grid_out)
+
133 end if
+
134 end if
+
135
+
136 select type(grid_out)
+
137 type is(ip_station_points_grid)
+
138 to_station_points = .true.
+
139 class default
+
140 to_station_points = .false.
+
141 end select
+
142
+
143 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
144 ! SAVE OR SKIP WEIGHT COMPUTATION
+
145 IF(iret==0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
+
146 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
147 ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
+
148 CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
+
149 IF(no.EQ.0) iret=3
+
150 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
151 ! LOCATE INPUT POINTS
+
152 CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
+
153 IF(iret.EQ.0.AND.nv.EQ.0) iret=2
+
154 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
155 ! ALLOCATE AND SAVE GRID DATA
+
156 IF(nox.NE.no) THEN
+
157 IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,nxy,wxy)
+
158 ALLOCATE(rlatx(no),rlonx(no),nxy(2,2,no),wxy(2,2,no))
+
159 nox=no
+
160 ENDIF
+
161 iretx=iret
+
162 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
163 ! COMPUTE WEIGHTS
+
164 IF(iret.EQ.0) THEN
+
165 !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY) SCHEDULE(STATIC)
+
166 DO n=1,no
+
167 rlonx(n)=rlon(n)
+
168 rlatx(n)=rlat(n)
+
169 xij=xpts(n)
+
170 yij=ypts(n)
+
171 IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
+
172 ijx(1:2)=floor(xij)+(/0,1/)
+
173 ijy(1:2)=floor(yij)+(/0,1/)
+
174 xf=xij-ijx(1)
+
175 yf=yij-ijy(1)
+
176 wx(1)=(1-xf)
+
177 wx(2)=xf
+
178 wy(1)=(1-yf)
+
179 wy(2)=yf
+
180 DO j=1,2
+
181 DO i=1,2
+
182 nxy(i,j,n)=grid_in%field_pos(ijx(i), ijy(j))
+
183 wxy(i,j,n)=wx(i)*wy(j)
+
184 ENDDO
+
185 ENDDO
+
186 ELSE
+
187 nxy(:,:,n)=0
+
188 ENDIF
+
189 ENDDO
+
190 ENDIF
+
191 ENDIF
+
192 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
193 ! INTERPOLATE OVER ALL FIELDS
+
194 IF(iret.EQ.0.AND.iretx.EQ.0) THEN
+
195 IF(.not. to_station_points) THEN
+
196 no=nox
+
197 DO n=1,no
+
198 rlon(n)=rlonx(n)
+
199 rlat(n)=rlatx(n)
+
200 ENDDO
+
201 ENDIF
+
202 !$OMP PARALLEL DO &
+
203 !$OMP PRIVATE(NK,K,N,G,W,J,I) &
+
204 !$OMP PRIVATE(I1,J1,IXS,JXS,MX,KXS,KXT,IX,JX,NX) SCHEDULE(STATIC)
+
205 DO nk=1,no*km
+
206 k=(nk-1)/no+1
+
207 n=nk-no*(k-1)
+
208 g=0
+
209 w=0
+
210 DO j=1,2
+
211 DO i=1,2
+
212 IF(nxy(i,j,n).GT.0)THEN
+
213 IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
+
214 g=g+wxy(i,j,n)*gi(nxy(i,j,n),k)
+
215 w=w+wxy(i,j,n)
+
216 ENDIF
+
217 ENDIF
+
218 ENDDO
+
219 ENDDO
+
220 lo(n,k)=w.GE.pmp
+
221 IF(lo(n,k)) THEN
+
222 go(n,k)=g/w
+
223 ELSEIF(mspiral.GT.0.AND.abs(xpts(n)-fill).GT.tinyreal.AND.abs(ypts(n)-fill).GT.tinyreal) THEN
+
224 i1=nint(xpts(n))
+
225 j1=nint(ypts(n))
+
226 ixs=int(sign(1.,xpts(n)-i1))
+
227 jxs=int(sign(1.,ypts(n)-j1))
+
228 spiral : DO mx=1,mspiral**2
+
229 kxs=int(sqrt(4*mx-2.5))
+
230 kxt=mx-(kxs**2/4+1)
+
231 SELECT CASE(mod(kxs,4))
+
232 CASE(1)
+
233 ix=i1-ixs*(kxs/4-kxt)
+
234 jx=j1-jxs*kxs/4
+
235 CASE(2)
+
236 ix=i1+ixs*(1+kxs/4)
+
237 jx=j1-jxs*(kxs/4-kxt)
+
238 CASE(3)
+
239 ix=i1+ixs*(1+kxs/4-kxt)
+
240 jx=j1+jxs*(1+kxs/4)
+
241 CASE DEFAULT
+
242 ix=i1-ixs*kxs/4
+
243 jx=j1+jxs*(kxs/4-kxt)
+
244 END SELECT
+
245 nx=grid_in%field_pos(ix, jx)
+
246 IF(nx.GT.0.)THEN
+
247 IF(li(nx,k).OR.ibi(k).EQ.0)THEN
+
248 go(n,k)=gi(nx,k)
+
249 lo(n,k)=.true.
+
250 EXIT spiral
+
251 ENDIF
+
252 ENDIF
+
253 ENDDO spiral
+
254 IF(.NOT.lo(n,k))THEN
+
255 ibo(k)=1
+
256 go(n,k)=0.
+
257 ENDIF
+
258 ELSE
+
259 go(n,k)=0.
+
260 ENDIF
+
261 ENDDO
+
262 DO k=1,km
+
263 ibo(k)=ibi(k)
+
264 IF(.NOT.all(lo(1:no,k))) ibo(k)=1
+
265 ENDDO
+
266 select type(grid_out)
+
267 type is(ip_equid_cylind_grid)
+
268 CALL polfixs(no,mo,km,rlat,ibo,lo,go)
+
269 end select
+
270 ELSE
+
271 IF(iret.EQ.0) iret=iretx
+
272 IF(.not. to_station_points) no=0
+
273 ENDIF
+
274
+
+
275 end subroutine interpolate_bilinear_scalar
+
276
+
+
329 SUBROUTINE interpolate_bilinear_vector(ipopt,grid_in,grid_out, &
+
330 MI,MO,KM,IBI,LI,UI,VI, &
+
331 NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
+
332 class(ip_grid), intent(in) :: grid_in, grid_out
+
333 INTEGER, INTENT(IN ) :: IPOPT(20),IBI(KM),MI,MO,KM
+
334 INTEGER, INTENT(INOUT) :: NO
+
335 INTEGER, INTENT( OUT) :: IRET, IBO(KM)
+
336 !
+
337 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
+
338 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
+
339 !
+
340 REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
+
341 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO),CROT(MO),SROT(MO)
+
342 REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
+
343 !
+
344 REAL, PARAMETER :: FILL=-9999.
+
345 !
+
346 INTEGER :: IJX(2),IJY(2)
+
347 INTEGER :: MP,N,I,J,K,NK,NV
+
348 !
+
349 LOGICAL :: SAME_GRIDI, SAME_GRIDO
+
350 !
+
351 REAL :: CM,SM,UROT,VROT
+
352 REAL :: PMP,XIJ,YIJ,XF,YF,U,V,W
+
353 REAL :: XPTS(MO),YPTS(MO)
+
354 REAL :: WX(2),WY(2)
+
355 REAL :: XPTI(MI),YPTI(MI)
+
356 REAL :: RLOI(MI),RLAI(MI)
+
357 REAL :: CROI(MI),SROI(MI)
+
358
+
359 logical :: to_station_points
+
360
+
361 ! Save coeffecients between calls and only compute if grids have changed
+
362 INTEGER, SAVE :: NOX=-1,iretx=-1
+
363 INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:)
+
364 REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
+
365 REAL, ALLOCATABLE,SAVE :: CROTX(:),SROTX(:)
+
366 REAL, ALLOCATABLE,SAVE :: WXY(:,:,:),CXY(:,:,:),SXY(:,:,:)
+
367 class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
+
368
+
369 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
370 ! SET PARAMETERS
+
371 iret=0
+
372 mp=ipopt(1)
+
373 IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
+
374 IF(mp.LT.0.OR.mp.GT.100) iret=32
+
375 pmp=mp*0.01
+
376
+
377 if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
+
378 allocate(prev_grid_in, source = grid_in)
+
379 allocate(prev_grid_out, source = grid_out)
+
380
+
381 same_gridi = .false.
+
382 same_grido = .false.
+
383 else
+
384 same_gridi = grid_in == prev_grid_in
+
385 same_grido = grid_out == prev_grid_out
+
386
+
387 if (.not. same_gridi .or. .not. same_grido) then
+
388 deallocate(prev_grid_in)
+
389 deallocate(prev_grid_out)
+
390
+
391 allocate(prev_grid_in, source = grid_in)
+
392 allocate(prev_grid_out, source = grid_out)
+
393 end if
+
394 end if
+
395
+
396 select type(grid_out)
+
397 type is(ip_station_points_grid)
+
398 to_station_points = .true.
+
399 class default
+
400 to_station_points = .false.
+
401 end select
+
402
+
403 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
404 ! SAVE OR SKIP WEIGHT COMPUTATION
+
405 IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
+
406 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
407 ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
+
408 CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
+
409 IF(no.EQ.0) iret=3
+
410 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
411 ! LOCATE INPUT POINTS
+
412 CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
+
413 IF(iret.EQ.0.AND.nv.EQ.0) iret=2
+
414 CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
+
415 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
416 ! ALLOCATE AND SAVE GRID DATA
+
417 IF(nox.NE.no) THEN
+
418 IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,crotx,srotx,nxy,wxy,cxy,sxy)
+
419 ALLOCATE(rlatx(no),rlonx(no),crotx(no),srotx(no), &
+
420 nxy(2,2,no),wxy(2,2,no),cxy(2,2,no),sxy(2,2,no))
+
421 nox=no
+
422 ENDIF
+
423 iretx=iret
+
424 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
425 ! COMPUTE WEIGHTS
+
426 IF(iret.EQ.0) THEN
+
427 !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY,CM,SM) SCHEDULE(STATIC)
+
428 DO n=1,no
+
429 rlonx(n)=rlon(n)
+
430 rlatx(n)=rlat(n)
+
431 crotx(n)=crot(n)
+
432 srotx(n)=srot(n)
+
433 xij=xpts(n)
+
434 yij=ypts(n)
+
435 IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
+
436 ijx(1:2)=floor(xij)+(/0,1/)
+
437 ijy(1:2)=floor(yij)+(/0,1/)
+
438 xf=xij-ijx(1)
+
439 yf=yij-ijy(1)
+
440 wx(1)=(1-xf)
+
441 wx(2)=xf
+
442 wy(1)=(1-yf)
+
443 wy(2)=yf
+
444 DO j=1,2
+
445 DO i=1,2
+
446 nxy(i, j, n) = grid_in%field_pos(ijx(i), ijy(j))
+
447 wxy(i,j,n)=wx(i)*wy(j)
+
448 IF(nxy(i,j,n).GT.0) THEN
+
449 CALL movect(rlai(nxy(i,j,n)),rloi(nxy(i,j,n)), &
+
450 rlat(n),rlon(n),cm,sm)
+
451 cxy(i,j,n)=cm*croi(nxy(i,j,n))+sm*sroi(nxy(i,j,n))
+
452 sxy(i,j,n)=sm*croi(nxy(i,j,n))-cm*sroi(nxy(i,j,n))
+
453 ENDIF
+
454 ENDDO
+
455 ENDDO
+
456 ELSE
+
457 nxy(:,:,n)=0
+
458 ENDIF
+
459 ENDDO
+
460 ENDIF ! IS IRET 0?
+
461 ENDIF
+
462 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
463 ! INTERPOLATE OVER ALL FIELDS
+
464 IF(iret.EQ.0.AND.iretx.EQ.0) THEN
+
465 IF(.not. to_station_points) THEN
+
466 no=nox
+
467 DO n=1,no
+
468 rlon(n)=rlonx(n)
+
469 rlat(n)=rlatx(n)
+
470 crot(n)=crotx(n)
+
471 srot(n)=srotx(n)
+
472 ENDDO
+
473 ENDIF
+
474 !$OMP PARALLEL DO PRIVATE(NK,K,N,U,V,W,UROT,VROT,J,I) SCHEDULE(STATIC)
+
475 DO nk=1,no*km
+
476 k=(nk-1)/no+1
+
477 n=nk-no*(k-1)
+
478 u=0
+
479 v=0
+
480 w=0
+
481 DO j=1,2
+
482 DO i=1,2
+
483 IF(nxy(i,j,n).GT.0) THEN
+
484 IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
+
485 urot=cxy(i,j,n)*ui(nxy(i,j,n),k)-sxy(i,j,n)*vi(nxy(i,j,n),k)
+
486 vrot=sxy(i,j,n)*ui(nxy(i,j,n),k)+cxy(i,j,n)*vi(nxy(i,j,n),k)
+
487 u=u+wxy(i,j,n)*urot
+
488 v=v+wxy(i,j,n)*vrot
+
489 w=w+wxy(i,j,n)
+
490 ENDIF
+
491 ENDIF
+
492 ENDDO
+
493 ENDDO
+
494 lo(n,k)=w.GE.pmp
+
495 IF(lo(n,k)) THEN
+
496 urot=crot(n)*u-srot(n)*v
+
497 vrot=srot(n)*u+crot(n)*v
+
498 uo(n,k)=urot/w
+
499 vo(n,k)=vrot/w
+
500 ELSE
+
501 uo(n,k)=0.
+
502 vo(n,k)=0.
+
503 ENDIF
+
504 ENDDO ! NK LOOP
+
505 DO k=1,km
+
506 ibo(k)=ibi(k)
+
507 IF(.NOT.all(lo(1:no,k))) ibo(k)=1
+
508 ENDDO
+
509
+
510 select type(grid_out)
+
511 type is(ip_equid_cylind_grid)
+
512 CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
+
513 end select
+
514
+
515 ELSE
+
516 IF(iret.EQ.0) iret=iretx
+
517 IF(.not. to_station_points) no=0
+
518 ENDIF
+
519 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
520 END SUBROUTINE interpolate_bilinear_vector
+
521
+
522end module bilinear_interp_mod
+ + +
subroutine movect(flat, flon, tlat, tlon, crot, srot)
This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
Definition movect.F90:26
+
Bilinear interpolation routines for scalars and vectors.
+
subroutine interpolate_bilinear_scalar(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.
+
subroutine interpolate_bilinear_vector(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
This subprogram performs bilinear interpolation from any grid to any grid for vector fields.
+
Driver module for gdswzd routines.
+
Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
+
Routines for creating an ip_grid given a Grib descriptor.
+
Re-export the individual grids.
+
Make multiple pole scalar values consistent.
Definition polfix_mod.F90:7
+
subroutine, public polfixs(nm, nx, km, rlat, ib, lo, go)
Make multiple pole scalar values consistent.
+
subroutine, public polfixv(nm, nx, km, rlat, rlon, ib, lo, uo, vo)
Make multiple pole vector values consistent,.
diff --git a/budget__interp__mod_8F90.html b/budget__interp__mod_8F90.html index 932a1ffd..91d3c923 100644 --- a/budget__interp__mod_8F90.html +++ b/budget__interp__mod_8F90.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: budget_interp_mod.F90 File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,9 +76,16 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -86,8 +93,7 @@ Data Types | Modules | Functions/Subroutines
-
-
budget_interp_mod.F90 File Reference
+
budget_interp_mod.F90 File Reference
@@ -96,25 +102,25 @@

Go to the source code of this file.

-

+

Data Types

interface  budget_interp_mod::interpolate_budget
 
- - +

+

Modules

module  budget_interp_mod
module  budget_interp_mod
 Budget interpolation routines for scalars and vectors.
 
- - - - - - - + + + + + +

+

Functions/Subroutines

subroutine budget_interp_mod::interpolate_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
 Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields. More...
 
subroutine budget_interp_mod::interpolate_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
 This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields. More...
 
subroutine budget_interp_mod::interpolate_budget_scalar (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
 Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields.
 
subroutine budget_interp_mod::interpolate_budget_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields.
 

Detailed Description

Budget interpolation routines for scalars and vectors.

@@ -128,7 +134,7 @@ diff --git a/budget__interp__mod_8F90.js b/budget__interp__mod_8F90.js index 44bc00ff..f149d12d 100644 --- a/budget__interp__mod_8F90.js +++ b/budget__interp__mod_8F90.js @@ -1,6 +1,6 @@ var budget__interp__mod_8F90 = [ - [ "interpolate_budget", "interfacebudget__interp__mod_1_1interpolate__budget.html", "interfacebudget__interp__mod_1_1interpolate__budget" ], - [ "interpolate_budget_scalar", "budget__interp__mod_8F90.html#a09bd6535b0c2e1022cfde39c39d14466", null ], - [ "interpolate_budget_vector", "budget__interp__mod_8F90.html#abc99486ee9c0091c1514af6114d4e803", null ] + [ "budget_interp_mod::interpolate_budget", "interfacebudget__interp__mod_1_1interpolate__budget.html", "interfacebudget__interp__mod_1_1interpolate__budget" ], + [ "interpolate_budget_scalar", "budget__interp__mod_8F90.html#a2a478f58c561eefcbb50497ed7855508", null ], + [ "interpolate_budget_vector", "budget__interp__mod_8F90.html#ae66f4257d43d6500cbd43b6dbf2b914a", null ] ]; \ No newline at end of file diff --git a/budget__interp__mod_8F90_source.html b/budget__interp__mod_8F90_source.html index b4cc3add..0244781b 100644 --- a/budget__interp__mod_8F90_source.html +++ b/budget__interp__mod_8F90_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: budget_interp_mod.F90 Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,610 +81,622 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
budget_interp_mod.F90
+
budget_interp_mod.F90
-Go to the documentation of this file.
1 
-
5 
- -
11  use gdswzd_mod
-
12  use polfix_mod
-
13  use ip_grids_mod
- - -
16  implicit none
-
17 
-
18  private
-
19  public :: interpolate_budget
-
20 
- -
22  module procedure interpolate_budget_scalar
-
23  module procedure interpolate_budget_vector
-
24  end interface interpolate_budget
-
25 
-
26  ! Smallest positive real value (use for equality comparisons)
-
27  REAL :: TINYREAL=tiny(1.0)
-
28 
-
29 contains
-
30 
-
94  SUBROUTINE interpolate_budget_scalar(IPOPT,grid_in,grid_out, &
-
95  MI,MO,KM,IBI,LI,GI, &
-
96  NO,RLAT,RLON,IBO,LO,GO,IRET)
-
97  class(ip_grid), intent(in) :: grid_in, grid_out
-
98  INTEGER, INTENT(IN ) :: IBI(KM), IPOPT(20)
-
99  INTEGER, INTENT(IN ) :: KM, MI, MO
-
100  INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
-
101  !
-
102  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
-
103  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
-
104  !
-
105  REAL, INTENT(IN ) :: GI(MI,KM)
-
106  REAL, INTENT(INOUT) :: RLAT(MO), RLON(MO)
-
107  REAL, INTENT( OUT) :: GO(MO,KM)
-
108  !
-
109  REAL, PARAMETER :: FILL=-9999.
-
110  !
-
111  INTEGER :: I1, J1, I2, J2, IB, JB
-
112  INTEGER :: IX, JX, IXS, JXS
-
113  INTEGER :: K, KXS, KXT
-
114  INTEGER :: LB, LSW, MP, MSPIRAL, MX
-
115  INTEGER :: N, NB, NB1, NB2, NB3, NB4, NV, NX
-
116  INTEGER :: N11(MO),N21(MO),N12(MO),N22(MO)
-
117  !
-
118  REAL :: GB, LAT(1), LON(1)
-
119  REAL :: PMP, RB2, RLOB(MO), RLAB(MO), WB
-
120  REAL :: W11(MO), W21(MO), W12(MO), W22(MO)
-
121  REAL :: WO(MO,KM), XF, YF, XI, YI, XX, YY
-
122  REAL :: XPTS(MO),YPTS(MO),XPTB(MO),YPTB(MO)
-
123  REAL :: XXX(1), YYY(1)
-
124 
-
125  logical :: to_station_points
-
126 
-
127  class(ip_grid), allocatable :: grid_out2
-
128 
-
129  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
130  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
-
131  ! DO SUBSECTION OF GRID IF KGDSO(1) IS SUBTRACTED FROM 255.
-
132  iret=0
-
133 
-
134  select type(grid_out)
-
135  type is(ip_station_points_grid)
-
136  to_station_points = .true.
-
137  allocate(grid_out2, source = grid_out)
-
138  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no)
-
139  IF(no.EQ.0) iret=3
-
140  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
-
141  IF(nv.EQ.0) iret=2
-
142  class default
-
143  to_station_points = .false.
-
144  allocate(grid_out2, source = grid_out)
-
145  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no)
-
146  IF(no.EQ.0) iret=3
-
147  end select
-
148 
-
149  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
150  ! SET PARAMETERS
-
151  IF(ipopt(1).GT.16) iret=32
-
152  mspiral=max(ipopt(20),1)
-
153  nb1=ipopt(1)
-
154  IF(nb1.EQ.-1) nb1=2
-
155  IF(iret.EQ.0.AND.nb1.LT.0) iret=32
-
156  lsw=1
-
157  IF(ipopt(2).EQ.-2) lsw=2
-
158  IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
-
159  IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
-
160  mp=ipopt(3+ipopt(1))
-
161  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
-
162  IF(mp.LT.0.OR.mp.GT.100) iret=32
-
163  pmp=mp*0.01
-
164  IF(iret.EQ.0) THEN
-
165  nb2=2*nb1+1
-
166  rb2=1./nb2
-
167  nb3=nb2*nb2
-
168  nb4=nb3
-
169  IF(lsw.EQ.2) THEN
-
170  rb2=1./(nb1+1)
-
171  nb4=(nb1+1)**4
-
172  ELSEIF(lsw.EQ.1) THEN
-
173  nb4=ipopt(2)
-
174  DO ib=1,nb1
-
175  nb4=nb4+8*ib*ipopt(2+ib)
-
176  ENDDO
-
177  ENDIF
-
178  ELSE
-
179  nb3=0
-
180  nb4=1
-
181  ENDIF
-
182  DO k=1,km
-
183  DO n=1,no
-
184  go(n,k)=0.
-
185  wo(n,k)=0.
-
186  ENDDO
-
187  ENDDO
-
188  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
189  ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
-
190  DO nb=1,nb3
-
191  ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS
-
192  jb=(nb-1)/nb2-nb1
-
193  ib=nb-(jb+nb1)*nb2-nb1-1
-
194  lb=max(abs(ib),abs(jb))
-
195  wb=1
-
196  IF(lsw.EQ.2) THEN
-
197  wb=(nb1+1-abs(ib))*(nb1+1-abs(jb))
-
198  ELSEIF(lsw.EQ.1) THEN
-
199  wb=ipopt(2+lb)
-
200  ENDIF
-
201  IF(abs(wb).GT.tinyreal) THEN
-
202  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
-
203  DO n=1,no
-
204  xptb(n)=xpts(n)+ib*rb2
-
205  yptb(n)=ypts(n)+jb*rb2
-
206  ENDDO
-
207  !$OMP END PARALLEL DO
-
208  if(to_station_points)then
-
209  CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
-
210  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
-
211  else
-
212  CALL gdswzd(grid_out2, 1,no,fill,xptb,yptb,rlob,rlab,nv)
-
213  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
-
214  endif
-
215  IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
-
216  !$OMP PARALLEL DO PRIVATE(N,XI,YI,I1,I2,J1,J2,XF,YF) SCHEDULE(STATIC)
-
217  DO n=1,no
-
218  xi=xptb(n)
-
219  yi=yptb(n)
-
220  IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
-
221  i1=int(xi)
-
222  i2=i1+1
-
223  j1=int(yi)
-
224  j2=j1+1
-
225  xf=xi-i1
-
226  yf=yi-j1
-
227  n11(n)=grid_in%field_pos(i1, j1)
-
228  n21(n)=grid_in%field_pos(i2, j1)
-
229  n12(n)=grid_in%field_pos(i1, j2)
-
230  n22(n)=grid_in%field_pos(i2, j2)
-
231  IF(min(n11(n),n21(n),n12(n),n22(n)).GT.0) THEN
-
232  w11(n)=(1-xf)*(1-yf)
-
233  w21(n)=xf*(1-yf)
-
234  w12(n)=(1-xf)*yf
-
235  w22(n)=xf*yf
-
236  ELSE
-
237  n11(n)=0
-
238  n21(n)=0
-
239  n12(n)=0
-
240  n22(n)=0
-
241  ENDIF
-
242  ELSE
-
243  n11(n)=0
-
244  n21(n)=0
-
245  n12(n)=0
-
246  n22(n)=0
-
247  ENDIF
-
248  ENDDO
-
249  !$OMP END PARALLEL DO
-
250  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
251  ! INTERPOLATE WITH OR WITHOUT BITMAPS
-
252  !$OMP PARALLEL DO PRIVATE(K,N,GB) SCHEDULE(STATIC)
-
253  DO k=1,km
-
254  DO n=1,no
-
255  IF(n11(n).GT.0) THEN
-
256  IF(ibi(k).EQ.0) THEN
-
257  gb=w11(n)*gi(n11(n),k)+w21(n)*gi(n21(n),k) &
-
258  +w12(n)*gi(n12(n),k)+w22(n)*gi(n22(n),k)
-
259  go(n,k)=go(n,k)+wb*gb
-
260  wo(n,k)=wo(n,k)+wb
-
261  ELSE
-
262  IF(li(n11(n),k)) THEN
-
263  go(n,k)=go(n,k)+wb*w11(n)*gi(n11(n),k)
-
264  wo(n,k)=wo(n,k)+wb*w11(n)
-
265  ENDIF
-
266  IF(li(n21(n),k)) THEN
-
267  go(n,k)=go(n,k)+wb*w21(n)*gi(n21(n),k)
-
268  wo(n,k)=wo(n,k)+wb*w21(n)
-
269  ENDIF
-
270  IF(li(n12(n),k)) THEN
-
271  go(n,k)=go(n,k)+wb*w12(n)*gi(n12(n),k)
-
272  wo(n,k)=wo(n,k)+wb*w12(n)
-
273  ENDIF
-
274  IF(li(n22(n),k)) THEN
-
275  go(n,k)=go(n,k)+wb*w22(n)*gi(n22(n),k)
-
276  wo(n,k)=wo(n,k)+wb*w22(n)
-
277  ENDIF
-
278  ENDIF
-
279  ENDIF
-
280  ENDDO
-
281  ENDDO
-
282  !$OMP END PARALLEL DO
-
283  ENDIF
-
284  ENDDO ! sub-grid points
-
285  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
286  ! COMPUTE OUTPUT BITMAPS AND FIELDS
-
287  ! KM is often 1 .. do not do OMP PARALLEL DO here
-
288  km_loop : DO k=1,km
-
289  ibo(k)=ibi(k)
-
290  !$OMP PARALLEL DO PRIVATE(N,LAT,LON,XXX,YYY,NV,XX,YY,IXS,JXS,MX,KXS,KXT,IX,JX,NX) SCHEDULE(STATIC)
-
291  n_loop : DO n=1,no
-
292  lo(n,k)=wo(n,k).GE.pmp*nb4
-
293  IF(lo(n,k)) THEN
-
294  go(n,k)=go(n,k)/wo(n,k)
-
295  ELSEIF (mspiral.GT.1) THEN
-
296  lat(1)=rlat(n)
-
297  lon(1)=rlon(n)
-
298  CALL gdswzd(grid_in,-1,1,fill,xxx,yyy,lon,lat,nv)
-
299  xx=xxx(1)
-
300  yy=yyy(1)
-
301  IF(nv.EQ.1)THEN
-
302  i1=nint(xx)
-
303  j1=nint(yy)
-
304  ixs=int(sign(1.,xx-i1))
-
305  jxs=int(sign(1.,yy-j1))
-
306  spiral_loop : DO mx=2,mspiral**2
-
307  kxs=int(sqrt(4*mx-2.5))
-
308  kxt=mx-(kxs**2/4+1)
-
309  SELECT CASE(mod(kxs,4))
-
310  CASE(1)
-
311  ix=i1-ixs*(kxs/4-kxt)
-
312  jx=j1-jxs*kxs/4
-
313  CASE(2)
-
314  ix=i1+ixs*(1+kxs/4)
-
315  jx=j1-jxs*(kxs/4-kxt)
-
316  CASE(3)
-
317  ix=i1+ixs*(1+kxs/4-kxt)
-
318  jx=j1+jxs*(1+kxs/4)
-
319  CASE DEFAULT
-
320  ix=i1-ixs*kxs/4
-
321  jx=j1+jxs*(kxs/4-kxt)
-
322  END SELECT
-
323  nx=grid_in%field_pos(ix, jx)
-
324  IF(nx.GT.0.)THEN
-
325  IF(li(nx,k).OR.ibi(k).EQ.0) THEN
-
326  go(n,k)=gi(nx,k)
-
327  lo(n,k)=.true.
-
328  cycle n_loop
-
329  ENDIF
-
330  ENDIF
-
331  ENDDO spiral_loop
-
332  ibo(k)=1
-
333  go(n,k)=0.
-
334  ELSE
-
335  ibo(k)=1
-
336  go(n,k)=0.
-
337  ENDIF
-
338  ELSE ! no spiral search option
-
339  ibo(k)=1
-
340  go(n,k)=0.
-
341  ENDIF
-
342  ENDDO n_loop
-
343  !$OMP END PARALLEL DO
-
344  ENDDO km_loop
-
345 
-
346  select type(grid_out2)
-
347  type is(ip_equid_cylind_grid)
-
348  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
-
349  end select
-
350  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
351  END SUBROUTINE interpolate_budget_scalar
-
352 
-
423  SUBROUTINE interpolate_budget_vector(IPOPT,grid_in,grid_out, &
-
424  MI,MO,KM,IBI,LI,UI,VI, &
-
425  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
-
426  class(ip_grid), intent(in) :: grid_in, grid_out
-
427  INTEGER, INTENT(IN ) :: IPOPT(20), IBI(KM)
-
428  INTEGER, INTENT(IN ) :: KM, MI, MO
-
429  INTEGER, INTENT( OUT) :: IRET, NO, IBO(KM)
-
430  !
-
431  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
-
432  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
-
433  !
-
434  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
-
435  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
-
436  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
-
437  REAL, INTENT( OUT) :: CROT(MO),SROT(MO)
-
438  !
-
439  REAL, PARAMETER :: FILL=-9999.
-
440  !
-
441  INTEGER :: I1,I2,J1,J2,IB,JB,LSW,MP
-
442  INTEGER :: K,LB,N,NB,NB1,NB2,NB3,NB4,NV
-
443  INTEGER :: N11(MO),N21(MO),N12(MO),N22(MO)
-
444  !
-
445  LOGICAL :: SAME_GRID
-
446  !
-
447  REAL :: CM11,SM11,CM12,SM12
-
448  REAL :: CM21,SM21,CM22,SM22
-
449  REAL :: PMP,RB2
-
450  REAL :: C11(MO),C21(MO),C12(MO),C22(MO)
-
451  REAL :: S11(MO),S21(MO),S12(MO),S22(MO)
-
452  REAL :: W11(MO),W21(MO),W12(MO),W22(MO)
-
453  REAL :: UB,VB,WB,UROT,VROT
-
454  REAL :: U11,V11,U21,V21,U12,V12,U22,V22
-
455  REAL :: WI1,WJ1,WI2,WJ2
-
456  REAL :: WO(MO,KM),XI,YI
-
457  REAL :: XPTS(MO),YPTS(MO)
-
458  REAL :: XPTB(MO),YPTB(MO),RLOB(MO),RLAB(MO)
-
459 
-
460  logical :: to_station_points
-
461 
-
462  class(ip_grid), allocatable :: grid_out2
-
463 
-
464  ! Save coeffecients between calls and only compute if grids have changed
-
465  INTEGER, SAVE :: MIX=-1
-
466  REAL, ALLOCATABLE, SAVE :: CROI(:),SROI(:)
-
467  REAL, ALLOCATABLE, SAVE :: XPTI(:),YPTI(:),RLOI(:),RLAI(:)
-
468 
-
469  class(ip_grid), allocatable, save :: prev_grid_in
-
470 
-
471  iret=0
-
472 
-
473  ! Negative grid number means interpolate to subgrid
-
474  ! The type of the subgrid is calculated by 255 +
-
475  select type(grid_out)
-
476  type is(ip_station_points_grid)
-
477  to_station_points = .true.
-
478  allocate(grid_out2, source = grid_out)
-
479  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
-
480  IF(no.EQ.0) iret=3
-
481  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv,crot,srot)
-
482  IF(nv.EQ.0) iret=2
-
483  class default
-
484  to_station_points = .false.
-
485  allocate(grid_out2, source = grid_out)
-
486  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
-
487  end select
-
488 
-
489  if (.not. allocated(prev_grid_in)) then
-
490  allocate(prev_grid_in, source = grid_in)
-
491 
-
492  same_grid = .false.
-
493  else
-
494  same_grid = grid_in == prev_grid_in
-
495 
-
496  if (.not. same_grid) then
-
497  deallocate(prev_grid_in)
-
498  allocate(prev_grid_in, source = grid_in)
-
499  end if
-
500  end if
-
501 
-
502  IF(.NOT.same_grid) THEN
-
503  IF(mix.NE.mi) THEN
-
504  IF(mix.GE.0) DEALLOCATE(xpti,ypti,rloi,rlai,croi,sroi)
-
505  ALLOCATE(xpti(mi),ypti(mi),rloi(mi),rlai(mi),croi(mi),sroi(mi))
-
506  mix=mi
-
507  ENDIF
-
508  CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
-
509  ENDIF
-
510 
-
511  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
512  ! SET PARAMETERS
-
513  nb1=ipopt(1)
-
514  IF(nb1.EQ.-1) nb1=2
-
515  IF(iret.EQ.0.AND.nb1.LT.0) iret=32
-
516  lsw=1
-
517  IF(ipopt(2).EQ.-2) lsw=2
-
518  IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
-
519  IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
-
520  mp=ipopt(3+ipopt(1))
-
521  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
-
522  IF(mp.LT.0.OR.mp.GT.100) iret=32
-
523  pmp=mp*0.01
-
524  IF(iret.EQ.0) THEN
-
525  nb2=2*nb1+1
-
526  rb2=1./nb2
-
527  nb3=nb2*nb2
-
528  nb4=nb3
-
529  IF(lsw.EQ.2) THEN
-
530  rb2=1./(nb1+1)
-
531  nb4=(nb1+1)**4
-
532  ELSEIF(lsw.EQ.1) THEN
-
533  nb4=ipopt(2)
-
534  DO ib=1,nb1
-
535  nb4=nb4+8*ib*ipopt(2+ib)
-
536  ENDDO
-
537  ENDIF
-
538  ELSE
-
539  nb3=0
-
540  nb4=1
-
541  ENDIF
-
542  DO k=1,km
-
543  DO n=1,no
-
544  uo(n,k)=0
-
545  vo(n,k)=0
-
546  wo(n,k)=0.
-
547  ENDDO
-
548  ENDDO
-
549  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
550  ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
-
551  DO nb=1,nb3
-
552  ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS AND ROTATIONS
-
553  jb=(nb-1)/nb2-nb1
-
554  ib=nb-(jb+nb1)*nb2-nb1-1
-
555  lb=max(abs(ib),abs(jb))
-
556  wb=1
-
557  IF(ipopt(2).EQ.-2) THEN
-
558  wb=(nb1+1-abs(ib))*(nb1+1-abs(jb))
-
559  ELSEIF(ipopt(2).NE.-1) THEN
-
560  wb=ipopt(2+lb)
-
561  ENDIF
-
562  IF(abs(wb).GT.tinyreal) THEN
-
563  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
-
564  DO n=1,no
-
565  xptb(n)=xpts(n)+ib*rb2
-
566  yptb(n)=ypts(n)+jb*rb2
-
567  ENDDO
-
568  !$OMP END PARALLEL DO
-
569  if(to_station_points)then
-
570  CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
-
571  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
-
572  else
-
573  CALL gdswzd(grid_out2, 1,no,fill,xptb,yptb,rlob,rlab,nv)
-
574  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
-
575  endif
-
576  IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
-
577  !$OMP PARALLEL DO PRIVATE(N,XI,YI,I1,I2,WI1,WI2,J1,J2,WJ1,WJ2,CM11,CM21,CM12,CM22,SM11,SM21,SM12,SM22) &
-
578  !$OMP SCHEDULE(STATIC)
-
579  DO n=1,no
-
580  xi=xptb(n)
-
581  yi=yptb(n)
-
582  IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
-
583  i1=int(xi)
-
584  i2=i1+1
-
585  wi2=xi-i1
-
586  wi1=1-wi2
-
587  j1=int(yi)
-
588  j2=j1+1
-
589  wj2=yi-j1
-
590  wj1=1-wj2
-
591  n11(n) = grid_in%field_pos(i1,j1)
-
592  n21(n) = grid_in%field_pos(i2, j1)
-
593  n12(n) = grid_in%field_pos(i1, j2)
-
594  n22(n) = grid_in%field_pos(i2, j2)
-
595  IF(min(n11(n),n21(n),n12(n),n22(n)).GT.0) THEN
-
596  w11(n)=wi1*wj1
-
597  w21(n)=wi2*wj1
-
598  w12(n)=wi1*wj2
-
599  w22(n)=wi2*wj2
-
600  CALL movect(rlai(n11(n)),rloi(n11(n)),rlat(n),rlon(n),cm11,sm11)
-
601  CALL movect(rlai(n21(n)),rloi(n21(n)),rlat(n),rlon(n),cm21,sm21)
-
602  CALL movect(rlai(n12(n)),rloi(n12(n)),rlat(n),rlon(n),cm12,sm12)
-
603  CALL movect(rlai(n22(n)),rloi(n22(n)),rlat(n),rlon(n),cm22,sm22)
-
604  c11(n)=cm11*croi(n11(n))+sm11*sroi(n11(n))
-
605  s11(n)=sm11*croi(n11(n))-cm11*sroi(n11(n))
-
606  c21(n)=cm21*croi(n21(n))+sm21*sroi(n21(n))
-
607  s21(n)=sm21*croi(n21(n))-cm21*sroi(n21(n))
-
608  c12(n)=cm12*croi(n12(n))+sm12*sroi(n12(n))
-
609  s12(n)=sm12*croi(n12(n))-cm12*sroi(n12(n))
-
610  c22(n)=cm22*croi(n22(n))+sm22*sroi(n22(n))
-
611  s22(n)=sm22*croi(n22(n))-cm22*sroi(n22(n))
-
612  ELSE
-
613  n11(n)=0
-
614  n21(n)=0
-
615  n12(n)=0
-
616  n22(n)=0
-
617  ENDIF
-
618  ELSE
-
619  n11(n)=0
-
620  n21(n)=0
-
621  n12(n)=0
-
622  n22(n)=0
-
623  ENDIF
-
624  ENDDO
-
625  !$OMP END PARALLEL DO
-
626  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
627  ! INTERPOLATE WITH OR WITHOUT BITMAPS
-
628  ! KM IS OFTEN 1 .. DO NO PUT OMP PARALLEL DO HERE
-
629  DO k=1,km
-
630  !$OMP PARALLEL DO PRIVATE(N,U11,U12,U21,U22,UB,V11,V12,V21,V22,VB) SCHEDULE(STATIC)
-
631  DO n=1,no
-
632  IF(n11(n).GT.0) THEN
-
633  IF(ibi(k).EQ.0) THEN
-
634  u11=c11(n)*ui(n11(n),k)-s11(n)*vi(n11(n),k)
-
635  v11=s11(n)*ui(n11(n),k)+c11(n)*vi(n11(n),k)
-
636  u21=c21(n)*ui(n21(n),k)-s21(n)*vi(n21(n),k)
-
637  v21=s21(n)*ui(n21(n),k)+c21(n)*vi(n21(n),k)
-
638  u12=c12(n)*ui(n12(n),k)-s12(n)*vi(n12(n),k)
-
639  v12=s12(n)*ui(n12(n),k)+c12(n)*vi(n12(n),k)
-
640  u22=c22(n)*ui(n22(n),k)-s22(n)*vi(n22(n),k)
-
641  v22=s22(n)*ui(n22(n),k)+c22(n)*vi(n22(n),k)
-
642  ub=w11(n)*u11+w21(n)*u21+w12(n)*u12+w22(n)*u22
-
643  vb=w11(n)*v11+w21(n)*v21+w12(n)*v12+w22(n)*v22
-
644  uo(n,k)=uo(n,k)+wb*ub
-
645  vo(n,k)=vo(n,k)+wb*vb
-
646  wo(n,k)=wo(n,k)+wb
-
647  ELSE
-
648  IF(li(n11(n),k)) THEN
-
649  u11=c11(n)*ui(n11(n),k)-s11(n)*vi(n11(n),k)
-
650  v11=s11(n)*ui(n11(n),k)+c11(n)*vi(n11(n),k)
-
651  uo(n,k)=uo(n,k)+wb*w11(n)*u11
-
652  vo(n,k)=vo(n,k)+wb*w11(n)*v11
-
653  wo(n,k)=wo(n,k)+wb*w11(n)
-
654  ENDIF
-
655  IF(li(n21(n),k)) THEN
-
656  u21=c21(n)*ui(n21(n),k)-s21(n)*vi(n21(n),k)
-
657  v21=s21(n)*ui(n21(n),k)+c21(n)*vi(n21(n),k)
-
658  uo(n,k)=uo(n,k)+wb*w21(n)*u21
-
659  vo(n,k)=vo(n,k)+wb*w21(n)*v21
-
660  wo(n,k)=wo(n,k)+wb*w21(n)
-
661  ENDIF
-
662  IF(li(n12(n),k)) THEN
-
663  u12=c12(n)*ui(n12(n),k)-s12(n)*vi(n12(n),k)
-
664  v12=s12(n)*ui(n12(n),k)+c12(n)*vi(n12(n),k)
-
665  uo(n,k)=uo(n,k)+wb*w12(n)*u12
-
666  vo(n,k)=vo(n,k)+wb*w12(n)*v12
-
667  wo(n,k)=wo(n,k)+wb*w12(n)
-
668  ENDIF
-
669  IF(li(n22(n),k)) THEN
-
670  u22=c22(n)*ui(n22(n),k)-s22(n)*vi(n22(n),k)
-
671  v22=s22(n)*ui(n22(n),k)+c22(n)*vi(n22(n),k)
-
672  uo(n,k)=uo(n,k)+wb*w22(n)*u22
-
673  vo(n,k)=vo(n,k)+wb*w22(n)*v22
-
674  wo(n,k)=wo(n,k)+wb*w22(n)
-
675  ENDIF
-
676  ENDIF
-
677  ENDIF
-
678  ENDDO
-
679  !$OMP END PARALLEL DO
-
680  ENDDO
-
681  ENDIF
-
682  ENDDO
-
683  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
684  ! COMPUTE OUTPUT BITMAPS AND FIELDS
-
685  ! KM is often 1, do not put OMP PARALLEL here
-
686  DO k=1,km
-
687  ibo(k)=ibi(k)
-
688  !$OMP PARALLEL DO PRIVATE(N,UROT,VROT) SCHEDULE(STATIC)
-
689  DO n=1,no
-
690  lo(n,k)=wo(n,k).GE.pmp*nb4
-
691  IF(lo(n,k)) THEN
-
692  uo(n,k)=uo(n,k)/wo(n,k)
-
693  vo(n,k)=vo(n,k)/wo(n,k)
-
694  urot=crot(n)*uo(n,k)-srot(n)*vo(n,k)
-
695  vrot=srot(n)*uo(n,k)+crot(n)*vo(n,k)
-
696  uo(n,k)=urot
-
697  vo(n,k)=vrot
-
698  ELSE
-
699  ibo(k)=1
-
700  uo(n,k)=0.
-
701  vo(n,k)=0.
-
702  ENDIF
-
703  ENDDO
-
704  !$OMP END PARALLEL DO
-
705  ENDDO
-
706 
-
707  select type(grid_out2)
-
708  type is(ip_equid_cylind_grid)
-
709  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
-
710  end select
-
711  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
712  END SUBROUTINE interpolate_budget_vector
-
713 
-
714 end module budget_interp_mod
- - -
subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
Definition: movect.F90:26
-
Budget interpolation routines for scalars and vectors.
-
subroutine interpolate_budget_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
Performs budget interpolation from any grid to any grid (or to random station points) for scalar fiel...
-
subroutine interpolate_budget_vector(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
This subprogram performs budget interpolation from any grid to any grid (or to random station points)...
-
Driver module for gdswzd routines.
Definition: gdswzd_mod.F90:25
-
Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
-
Routines for creating an ip_grid given a Grib descriptor.
-
Re-export the individual grids.
Definition: ip_grids_mod.F90:7
-
Make multiple pole scalar values consistent.
Definition: polfix_mod.F90:7
-
subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
Make multiple pole scalar values consistent.
Definition: polfix_mod.F90:30
-
subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
Make multiple pole vector values consistent,.
Definition: polfix_mod.F90:125
+Go to the documentation of this file.
1
+
5
+ +
11 use gdswzd_mod
+
12 use polfix_mod
+
13 use ip_grids_mod
+ + +
16 implicit none
+
17
+
18 private
+
19 public :: interpolate_budget
+
20
+
+ +
22 module procedure interpolate_budget_scalar
+
23 module procedure interpolate_budget_vector
+
+
24 end interface interpolate_budget
+
25
+
26 ! Smallest positive real value (use for equality comparisons)
+
27 REAL :: TINYREAL=tiny(1.0)
+
28
+
29contains
+
30
+
+
94 SUBROUTINE interpolate_budget_scalar(IPOPT,grid_in,grid_out, &
+
95 MI,MO,KM,IBI,LI,GI, &
+
96 NO,RLAT,RLON,IBO,LO,GO,IRET)
+
97 class(ip_grid), intent(in) :: grid_in, grid_out
+
98 INTEGER, INTENT(IN ) :: IBI(KM), IPOPT(20)
+
99 INTEGER, INTENT(IN ) :: KM, MI, MO
+
100 INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
+
101 !
+
102 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
+
103 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
+
104 !
+
105 REAL, INTENT(IN ) :: GI(MI,KM)
+
106 REAL, INTENT(INOUT) :: RLAT(MO), RLON(MO)
+
107 REAL, INTENT( OUT) :: GO(MO,KM)
+
108 !
+
109 REAL, PARAMETER :: FILL=-9999.
+
110 !
+
111 INTEGER :: I1, J1, I2, J2, IB, JB
+
112 INTEGER :: IX, JX, IXS, JXS
+
113 INTEGER :: K, KXS, KXT
+
114 INTEGER :: LB, LSW, MP, MSPIRAL, MX
+
115 INTEGER :: N, NB, NB1, NB2, NB3, NB4, NV, NX
+
116 INTEGER :: N11(MO),N21(MO),N12(MO),N22(MO)
+
117 !
+
118 REAL :: GB, LAT(1), LON(1)
+
119 REAL :: PMP, RB2, RLOB(MO), RLAB(MO), WB
+
120 REAL :: W11(MO), W21(MO), W12(MO), W22(MO)
+
121 REAL :: WO(MO,KM), XF, YF, XI, YI, XX, YY
+
122 REAL :: XPTS(MO),YPTS(MO),XPTB(MO),YPTB(MO)
+
123 REAL :: XXX(1), YYY(1)
+
124
+
125 logical :: to_station_points
+
126
+
127 class(ip_grid), allocatable :: grid_out2
+
128
+
129 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
130 ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
+
131 ! DO SUBSECTION OF GRID IF KGDSO(1) IS SUBTRACTED FROM 255.
+
132 iret=0
+
133
+
134 select type(grid_out)
+
135 type is(ip_station_points_grid)
+
136 to_station_points = .true.
+
137 allocate(grid_out2, source = grid_out)
+
138 CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no)
+
139 IF(no.EQ.0) iret=3
+
140 CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
+
141 IF(nv.EQ.0) iret=2
+
142 class default
+
143 to_station_points = .false.
+
144 allocate(grid_out2, source = grid_out)
+
145 CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no)
+
146 IF(no.EQ.0) iret=3
+
147 end select
+
148
+
149 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
150 ! SET PARAMETERS
+
151 IF(ipopt(1).GT.16) iret=32
+
152 mspiral=max(ipopt(20),1)
+
153 nb1=ipopt(1)
+
154 IF(nb1.EQ.-1) nb1=2
+
155 IF(iret.EQ.0.AND.nb1.LT.0) iret=32
+
156 lsw=1
+
157 IF(ipopt(2).EQ.-2) lsw=2
+
158 IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
+
159 IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
+
160 mp=ipopt(3+ipopt(1))
+
161 IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
+
162 IF(mp.LT.0.OR.mp.GT.100) iret=32
+
163 pmp=mp*0.01
+
164 IF(iret.EQ.0) THEN
+
165 nb2=2*nb1+1
+
166 rb2=1./nb2
+
167 nb3=nb2*nb2
+
168 nb4=nb3
+
169 IF(lsw.EQ.2) THEN
+
170 rb2=1./(nb1+1)
+
171 nb4=(nb1+1)**4
+
172 ELSEIF(lsw.EQ.1) THEN
+
173 nb4=ipopt(2)
+
174 DO ib=1,nb1
+
175 nb4=nb4+8*ib*ipopt(2+ib)
+
176 ENDDO
+
177 ENDIF
+
178 ELSE
+
179 nb3=0
+
180 nb4=1
+
181 ENDIF
+
182 DO k=1,km
+
183 DO n=1,no
+
184 go(n,k)=0.
+
185 wo(n,k)=0.
+
186 ENDDO
+
187 ENDDO
+
188 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
189 ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
+
190 DO nb=1,nb3
+
191 ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS
+
192 jb=(nb-1)/nb2-nb1
+
193 ib=nb-(jb+nb1)*nb2-nb1-1
+
194 lb=max(abs(ib),abs(jb))
+
195 wb=1
+
196 IF(lsw.EQ.2) THEN
+
197 wb=(nb1+1-abs(ib))*(nb1+1-abs(jb))
+
198 ELSEIF(lsw.EQ.1) THEN
+
199 wb=ipopt(2+lb)
+
200 ENDIF
+
201 IF(abs(wb).GT.tinyreal) THEN
+
202 !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
+
203 DO n=1,no
+
204 xptb(n)=xpts(n)+ib*rb2
+
205 yptb(n)=ypts(n)+jb*rb2
+
206 ENDDO
+
207 !$OMP END PARALLEL DO
+
208 if(to_station_points)then
+
209 CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
+
210 CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
+
211 else
+
212 CALL gdswzd(grid_out2, 1,no,fill,xptb,yptb,rlob,rlab,nv)
+
213 CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
+
214 endif
+
215 IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
+
216 !$OMP PARALLEL DO PRIVATE(N,XI,YI,I1,I2,J1,J2,XF,YF) SCHEDULE(STATIC)
+
217 DO n=1,no
+
218 xi=xptb(n)
+
219 yi=yptb(n)
+
220 IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
+
221 i1=int(xi)
+
222 i2=i1+1
+
223 j1=int(yi)
+
224 j2=j1+1
+
225 xf=xi-i1
+
226 yf=yi-j1
+
227 n11(n)=grid_in%field_pos(i1, j1)
+
228 n21(n)=grid_in%field_pos(i2, j1)
+
229 n12(n)=grid_in%field_pos(i1, j2)
+
230 n22(n)=grid_in%field_pos(i2, j2)
+
231 IF(min(n11(n),n21(n),n12(n),n22(n)).GT.0) THEN
+
232 w11(n)=(1-xf)*(1-yf)
+
233 w21(n)=xf*(1-yf)
+
234 w12(n)=(1-xf)*yf
+
235 w22(n)=xf*yf
+
236 ELSE
+
237 n11(n)=0
+
238 n21(n)=0
+
239 n12(n)=0
+
240 n22(n)=0
+
241 ENDIF
+
242 ELSE
+
243 n11(n)=0
+
244 n21(n)=0
+
245 n12(n)=0
+
246 n22(n)=0
+
247 ENDIF
+
248 ENDDO
+
249 !$OMP END PARALLEL DO
+
250 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
251 ! INTERPOLATE WITH OR WITHOUT BITMAPS
+
252 !$OMP PARALLEL DO PRIVATE(K,N,GB) SCHEDULE(STATIC)
+
253 DO k=1,km
+
254 DO n=1,no
+
255 IF(n11(n).GT.0) THEN
+
256 IF(ibi(k).EQ.0) THEN
+
257 gb=w11(n)*gi(n11(n),k)+w21(n)*gi(n21(n),k) &
+
258 +w12(n)*gi(n12(n),k)+w22(n)*gi(n22(n),k)
+
259 go(n,k)=go(n,k)+wb*gb
+
260 wo(n,k)=wo(n,k)+wb
+
261 ELSE
+
262 IF(li(n11(n),k)) THEN
+
263 go(n,k)=go(n,k)+wb*w11(n)*gi(n11(n),k)
+
264 wo(n,k)=wo(n,k)+wb*w11(n)
+
265 ENDIF
+
266 IF(li(n21(n),k)) THEN
+
267 go(n,k)=go(n,k)+wb*w21(n)*gi(n21(n),k)
+
268 wo(n,k)=wo(n,k)+wb*w21(n)
+
269 ENDIF
+
270 IF(li(n12(n),k)) THEN
+
271 go(n,k)=go(n,k)+wb*w12(n)*gi(n12(n),k)
+
272 wo(n,k)=wo(n,k)+wb*w12(n)
+
273 ENDIF
+
274 IF(li(n22(n),k)) THEN
+
275 go(n,k)=go(n,k)+wb*w22(n)*gi(n22(n),k)
+
276 wo(n,k)=wo(n,k)+wb*w22(n)
+
277 ENDIF
+
278 ENDIF
+
279 ENDIF
+
280 ENDDO
+
281 ENDDO
+
282 !$OMP END PARALLEL DO
+
283 ENDIF
+
284 ENDDO ! sub-grid points
+
285 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
286 ! COMPUTE OUTPUT BITMAPS AND FIELDS
+
287 ! KM is often 1 .. do not do OMP PARALLEL DO here
+
288 km_loop : DO k=1,km
+
289 ibo(k)=ibi(k)
+
290 !$OMP PARALLEL DO PRIVATE(N,LAT,LON,XXX,YYY,NV,XX,YY,IXS,JXS,MX,KXS,KXT,IX,JX,NX) SCHEDULE(STATIC)
+
291 n_loop : DO n=1,no
+
292 lo(n,k)=wo(n,k).GE.pmp*nb4
+
293 IF(lo(n,k)) THEN
+
294 go(n,k)=go(n,k)/wo(n,k)
+
295 ELSEIF (mspiral.GT.1) THEN
+
296 lat(1)=rlat(n)
+
297 lon(1)=rlon(n)
+
298 CALL gdswzd(grid_in,-1,1,fill,xxx,yyy,lon,lat,nv)
+
299 xx=xxx(1)
+
300 yy=yyy(1)
+
301 IF(nv.EQ.1)THEN
+
302 i1=nint(xx)
+
303 j1=nint(yy)
+
304 ixs=int(sign(1.,xx-i1))
+
305 jxs=int(sign(1.,yy-j1))
+
306 spiral_loop : DO mx=2,mspiral**2
+
307 kxs=int(sqrt(4*mx-2.5))
+
308 kxt=mx-(kxs**2/4+1)
+
309 SELECT CASE(mod(kxs,4))
+
310 CASE(1)
+
311 ix=i1-ixs*(kxs/4-kxt)
+
312 jx=j1-jxs*kxs/4
+
313 CASE(2)
+
314 ix=i1+ixs*(1+kxs/4)
+
315 jx=j1-jxs*(kxs/4-kxt)
+
316 CASE(3)
+
317 ix=i1+ixs*(1+kxs/4-kxt)
+
318 jx=j1+jxs*(1+kxs/4)
+
319 CASE DEFAULT
+
320 ix=i1-ixs*kxs/4
+
321 jx=j1+jxs*(kxs/4-kxt)
+
322 END SELECT
+
323 nx=grid_in%field_pos(ix, jx)
+
324 IF(nx.GT.0.)THEN
+
325 IF(li(nx,k).OR.ibi(k).EQ.0) THEN
+
326 go(n,k)=gi(nx,k)
+
327 lo(n,k)=.true.
+
328 cycle n_loop
+
329 ENDIF
+
330 ENDIF
+
331 ENDDO spiral_loop
+
332 ibo(k)=1
+
333 go(n,k)=0.
+
334 ELSE
+
335 ibo(k)=1
+
336 go(n,k)=0.
+
337 ENDIF
+
338 ELSE ! no spiral search option
+
339 ibo(k)=1
+
340 go(n,k)=0.
+
341 ENDIF
+
342 ENDDO n_loop
+
343 !$OMP END PARALLEL DO
+
344 ENDDO km_loop
+
345
+
346 select type(grid_out2)
+
347 type is(ip_equid_cylind_grid)
+
348 CALL polfixs(no,mo,km,rlat,ibo,lo,go)
+
349 end select
+
350 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
351 END SUBROUTINE interpolate_budget_scalar
+
352
+
+
423 SUBROUTINE interpolate_budget_vector(IPOPT,grid_in,grid_out, &
+
424 MI,MO,KM,IBI,LI,UI,VI, &
+
425 NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
+
426 class(ip_grid), intent(in) :: grid_in, grid_out
+
427 INTEGER, INTENT(IN ) :: IPOPT(20), IBI(KM)
+
428 INTEGER, INTENT(IN ) :: KM, MI, MO
+
429 INTEGER, INTENT( OUT) :: IRET, NO, IBO(KM)
+
430 !
+
431 LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
+
432 LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
+
433 !
+
434 REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
+
435 REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
+
436 REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
+
437 REAL, INTENT( OUT) :: CROT(MO),SROT(MO)
+
438 !
+
439 REAL, PARAMETER :: FILL=-9999.
+
440 !
+
441 INTEGER :: I1,I2,J1,J2,IB,JB,LSW,MP
+
442 INTEGER :: K,LB,N,NB,NB1,NB2,NB3,NB4,NV
+
443 INTEGER :: N11(MO),N21(MO),N12(MO),N22(MO)
+
444 !
+
445 LOGICAL :: SAME_GRID
+
446 !
+
447 REAL :: CM11,SM11,CM12,SM12
+
448 REAL :: CM21,SM21,CM22,SM22
+
449 REAL :: PMP,RB2
+
450 REAL :: C11(MO),C21(MO),C12(MO),C22(MO)
+
451 REAL :: S11(MO),S21(MO),S12(MO),S22(MO)
+
452 REAL :: W11(MO),W21(MO),W12(MO),W22(MO)
+
453 REAL :: UB,VB,WB,UROT,VROT
+
454 REAL :: U11,V11,U21,V21,U12,V12,U22,V22
+
455 REAL :: WI1,WJ1,WI2,WJ2
+
456 REAL :: WO(MO,KM),XI,YI
+
457 REAL :: XPTS(MO),YPTS(MO)
+
458 REAL :: XPTB(MO),YPTB(MO),RLOB(MO),RLAB(MO)
+
459
+
460 logical :: to_station_points
+
461
+
462 class(ip_grid), allocatable :: grid_out2
+
463
+
464 ! Save coeffecients between calls and only compute if grids have changed
+
465 INTEGER, SAVE :: MIX=-1
+
466 REAL, ALLOCATABLE, SAVE :: CROI(:),SROI(:)
+
467 REAL, ALLOCATABLE, SAVE :: XPTI(:),YPTI(:),RLOI(:),RLAI(:)
+
468
+
469 class(ip_grid), allocatable, save :: prev_grid_in
+
470
+
471 iret=0
+
472
+
473 ! Negative grid number means interpolate to subgrid
+
474 ! The type of the subgrid is calculated by 255 +
+
475 select type(grid_out)
+
476 type is(ip_station_points_grid)
+
477 to_station_points = .true.
+
478 allocate(grid_out2, source = grid_out)
+
479 CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
+
480 IF(no.EQ.0) iret=3
+
481 CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv,crot,srot)
+
482 IF(nv.EQ.0) iret=2
+
483 class default
+
484 to_station_points = .false.
+
485 allocate(grid_out2, source = grid_out)
+
486 CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
+
487 end select
+
488
+
489 if (.not. allocated(prev_grid_in)) then
+
490 allocate(prev_grid_in, source = grid_in)
+
491
+
492 same_grid = .false.
+
493 else
+
494 same_grid = grid_in == prev_grid_in
+
495
+
496 if (.not. same_grid) then
+
497 deallocate(prev_grid_in)
+
498 allocate(prev_grid_in, source = grid_in)
+
499 end if
+
500 end if
+
501
+
502 IF(.NOT.same_grid) THEN
+
503 IF(mix.NE.mi) THEN
+
504 IF(mix.GE.0) DEALLOCATE(xpti,ypti,rloi,rlai,croi,sroi)
+
505 ALLOCATE(xpti(mi),ypti(mi),rloi(mi),rlai(mi),croi(mi),sroi(mi))
+
506 mix=mi
+
507 ENDIF
+
508 CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
+
509 ENDIF
+
510
+
511 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
512 ! SET PARAMETERS
+
513 nb1=ipopt(1)
+
514 IF(nb1.EQ.-1) nb1=2
+
515 IF(iret.EQ.0.AND.nb1.LT.0) iret=32
+
516 lsw=1
+
517 IF(ipopt(2).EQ.-2) lsw=2
+
518 IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
+
519 IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
+
520 mp=ipopt(3+ipopt(1))
+
521 IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
+
522 IF(mp.LT.0.OR.mp.GT.100) iret=32
+
523 pmp=mp*0.01
+
524 IF(iret.EQ.0) THEN
+
525 nb2=2*nb1+1
+
526 rb2=1./nb2
+
527 nb3=nb2*nb2
+
528 nb4=nb3
+
529 IF(lsw.EQ.2) THEN
+
530 rb2=1./(nb1+1)
+
531 nb4=(nb1+1)**4
+
532 ELSEIF(lsw.EQ.1) THEN
+
533 nb4=ipopt(2)
+
534 DO ib=1,nb1
+
535 nb4=nb4+8*ib*ipopt(2+ib)
+
536 ENDDO
+
537 ENDIF
+
538 ELSE
+
539 nb3=0
+
540 nb4=1
+
541 ENDIF
+
542 DO k=1,km
+
543 DO n=1,no
+
544 uo(n,k)=0
+
545 vo(n,k)=0
+
546 wo(n,k)=0.
+
547 ENDDO
+
548 ENDDO
+
549 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
550 ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
+
551 DO nb=1,nb3
+
552 ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS AND ROTATIONS
+
553 jb=(nb-1)/nb2-nb1
+
554 ib=nb-(jb+nb1)*nb2-nb1-1
+
555 lb=max(abs(ib),abs(jb))
+
556 wb=1
+
557 IF(ipopt(2).EQ.-2) THEN
+
558 wb=(nb1+1-abs(ib))*(nb1+1-abs(jb))
+
559 ELSEIF(ipopt(2).NE.-1) THEN
+
560 wb=ipopt(2+lb)
+
561 ENDIF
+
562 IF(abs(wb).GT.tinyreal) THEN
+
563 !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
+
564 DO n=1,no
+
565 xptb(n)=xpts(n)+ib*rb2
+
566 yptb(n)=ypts(n)+jb*rb2
+
567 ENDDO
+
568 !$OMP END PARALLEL DO
+
569 if(to_station_points)then
+
570 CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
+
571 CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
+
572 else
+
573 CALL gdswzd(grid_out2, 1,no,fill,xptb,yptb,rlob,rlab,nv)
+
574 CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
+
575 endif
+
576 IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
+
577 !$OMP PARALLEL DO PRIVATE(N,XI,YI,I1,I2,WI1,WI2,J1,J2,WJ1,WJ2,CM11,CM21,CM12,CM22,SM11,SM21,SM12,SM22) &
+
578 !$OMP SCHEDULE(STATIC)
+
579 DO n=1,no
+
580 xi=xptb(n)
+
581 yi=yptb(n)
+
582 IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
+
583 i1=int(xi)
+
584 i2=i1+1
+
585 wi2=xi-i1
+
586 wi1=1-wi2
+
587 j1=int(yi)
+
588 j2=j1+1
+
589 wj2=yi-j1
+
590 wj1=1-wj2
+
591 n11(n) = grid_in%field_pos(i1,j1)
+
592 n21(n) = grid_in%field_pos(i2, j1)
+
593 n12(n) = grid_in%field_pos(i1, j2)
+
594 n22(n) = grid_in%field_pos(i2, j2)
+
595 IF(min(n11(n),n21(n),n12(n),n22(n)).GT.0) THEN
+
596 w11(n)=wi1*wj1
+
597 w21(n)=wi2*wj1
+
598 w12(n)=wi1*wj2
+
599 w22(n)=wi2*wj2
+
600 CALL movect(rlai(n11(n)),rloi(n11(n)),rlat(n),rlon(n),cm11,sm11)
+
601 CALL movect(rlai(n21(n)),rloi(n21(n)),rlat(n),rlon(n),cm21,sm21)
+
602 CALL movect(rlai(n12(n)),rloi(n12(n)),rlat(n),rlon(n),cm12,sm12)
+
603 CALL movect(rlai(n22(n)),rloi(n22(n)),rlat(n),rlon(n),cm22,sm22)
+
604 c11(n)=cm11*croi(n11(n))+sm11*sroi(n11(n))
+
605 s11(n)=sm11*croi(n11(n))-cm11*sroi(n11(n))
+
606 c21(n)=cm21*croi(n21(n))+sm21*sroi(n21(n))
+
607 s21(n)=sm21*croi(n21(n))-cm21*sroi(n21(n))
+
608 c12(n)=cm12*croi(n12(n))+sm12*sroi(n12(n))
+
609 s12(n)=sm12*croi(n12(n))-cm12*sroi(n12(n))
+
610 c22(n)=cm22*croi(n22(n))+sm22*sroi(n22(n))
+
611 s22(n)=sm22*croi(n22(n))-cm22*sroi(n22(n))
+
612 ELSE
+
613 n11(n)=0
+
614 n21(n)=0
+
615 n12(n)=0
+
616 n22(n)=0
+
617 ENDIF
+
618 ELSE
+
619 n11(n)=0
+
620 n21(n)=0
+
621 n12(n)=0
+
622 n22(n)=0
+
623 ENDIF
+
624 ENDDO
+
625 !$OMP END PARALLEL DO
+
626 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
627 ! INTERPOLATE WITH OR WITHOUT BITMAPS
+
628 ! KM IS OFTEN 1 .. DO NO PUT OMP PARALLEL DO HERE
+
629 DO k=1,km
+
630 !$OMP PARALLEL DO PRIVATE(N,U11,U12,U21,U22,UB,V11,V12,V21,V22,VB) SCHEDULE(STATIC)
+
631 DO n=1,no
+
632 IF(n11(n).GT.0) THEN
+
633 IF(ibi(k).EQ.0) THEN
+
634 u11=c11(n)*ui(n11(n),k)-s11(n)*vi(n11(n),k)
+
635 v11=s11(n)*ui(n11(n),k)+c11(n)*vi(n11(n),k)
+
636 u21=c21(n)*ui(n21(n),k)-s21(n)*vi(n21(n),k)
+
637 v21=s21(n)*ui(n21(n),k)+c21(n)*vi(n21(n),k)
+
638 u12=c12(n)*ui(n12(n),k)-s12(n)*vi(n12(n),k)
+
639 v12=s12(n)*ui(n12(n),k)+c12(n)*vi(n12(n),k)
+
640 u22=c22(n)*ui(n22(n),k)-s22(n)*vi(n22(n),k)
+
641 v22=s22(n)*ui(n22(n),k)+c22(n)*vi(n22(n),k)
+
642 ub=w11(n)*u11+w21(n)*u21+w12(n)*u12+w22(n)*u22
+
643 vb=w11(n)*v11+w21(n)*v21+w12(n)*v12+w22(n)*v22
+
644 uo(n,k)=uo(n,k)+wb*ub
+
645 vo(n,k)=vo(n,k)+wb*vb
+
646 wo(n,k)=wo(n,k)+wb
+
647 ELSE
+
648 IF(li(n11(n),k)) THEN
+
649 u11=c11(n)*ui(n11(n),k)-s11(n)*vi(n11(n),k)
+
650 v11=s11(n)*ui(n11(n),k)+c11(n)*vi(n11(n),k)
+
651 uo(n,k)=uo(n,k)+wb*w11(n)*u11
+
652 vo(n,k)=vo(n,k)+wb*w11(n)*v11
+
653 wo(n,k)=wo(n,k)+wb*w11(n)
+
654 ENDIF
+
655 IF(li(n21(n),k)) THEN
+
656 u21=c21(n)*ui(n21(n),k)-s21(n)*vi(n21(n),k)
+
657 v21=s21(n)*ui(n21(n),k)+c21(n)*vi(n21(n),k)
+
658 uo(n,k)=uo(n,k)+wb*w21(n)*u21
+
659 vo(n,k)=vo(n,k)+wb*w21(n)*v21
+
660 wo(n,k)=wo(n,k)+wb*w21(n)
+
661 ENDIF
+
662 IF(li(n12(n),k)) THEN
+
663 u12=c12(n)*ui(n12(n),k)-s12(n)*vi(n12(n),k)
+
664 v12=s12(n)*ui(n12(n),k)+c12(n)*vi(n12(n),k)
+
665 uo(n,k)=uo(n,k)+wb*w12(n)*u12
+
666 vo(n,k)=vo(n,k)+wb*w12(n)*v12
+
667 wo(n,k)=wo(n,k)+wb*w12(n)
+
668 ENDIF
+
669 IF(li(n22(n),k)) THEN
+
670 u22=c22(n)*ui(n22(n),k)-s22(n)*vi(n22(n),k)
+
671 v22=s22(n)*ui(n22(n),k)+c22(n)*vi(n22(n),k)
+
672 uo(n,k)=uo(n,k)+wb*w22(n)*u22
+
673 vo(n,k)=vo(n,k)+wb*w22(n)*v22
+
674 wo(n,k)=wo(n,k)+wb*w22(n)
+
675 ENDIF
+
676 ENDIF
+
677 ENDIF
+
678 ENDDO
+
679 !$OMP END PARALLEL DO
+
680 ENDDO
+
681 ENDIF
+
682 ENDDO
+
683 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
684 ! COMPUTE OUTPUT BITMAPS AND FIELDS
+
685 ! KM is often 1, do not put OMP PARALLEL here
+
686 DO k=1,km
+
687 ibo(k)=ibi(k)
+
688 !$OMP PARALLEL DO PRIVATE(N,UROT,VROT) SCHEDULE(STATIC)
+
689 DO n=1,no
+
690 lo(n,k)=wo(n,k).GE.pmp*nb4
+
691 IF(lo(n,k)) THEN
+
692 uo(n,k)=uo(n,k)/wo(n,k)
+
693 vo(n,k)=vo(n,k)/wo(n,k)
+
694 urot=crot(n)*uo(n,k)-srot(n)*vo(n,k)
+
695 vrot=srot(n)*uo(n,k)+crot(n)*vo(n,k)
+
696 uo(n,k)=urot
+
697 vo(n,k)=vrot
+
698 ELSE
+
699 ibo(k)=1
+
700 uo(n,k)=0.
+
701 vo(n,k)=0.
+
702 ENDIF
+
703 ENDDO
+
704 !$OMP END PARALLEL DO
+
705 ENDDO
+
706
+
707 select type(grid_out2)
+
708 type is(ip_equid_cylind_grid)
+
709 CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
+
710 end select
+
711 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
712 END SUBROUTINE interpolate_budget_vector
+
713
+
714end module budget_interp_mod
+ + +
subroutine movect(flat, flon, tlat, tlon, crot, srot)
This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
Definition movect.F90:26
+
Budget interpolation routines for scalars and vectors.
+
subroutine interpolate_budget_scalar(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
Performs budget interpolation from any grid to any grid (or to random station points) for scalar fiel...
+
subroutine interpolate_budget_vector(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
This subprogram performs budget interpolation from any grid to any grid (or to random station points)...
+
Driver module for gdswzd routines.
+
Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
+
Routines for creating an ip_grid given a Grib descriptor.
+
Re-export the individual grids.
+
Make multiple pole scalar values consistent.
Definition polfix_mod.F90:7
+
subroutine, public polfixs(nm, nx, km, rlat, ib, lo, go)
Make multiple pole scalar values consistent.
+
subroutine, public polfixv(nm, nx, km, rlat, rlon, ib, lo, uo, vo)
Make multiple pole vector values consistent,.
diff --git a/classes.html b/classes.html index b64bf5d2..36cd1a8e 100644 --- a/classes.html +++ b/classes.html @@ -1,11 +1,11 @@ - + - - + + -NCEPLIBS-ip: Data Types +NCEPLIBS-ip: Data Type Index @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,29 +76,35 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
Data Types
+
Data Type Index
G | I | O | P
-
G
+
G
gdswzd (gdswzd_mod)
gdswzd_interface (ip_grid_mod)
grib1_descriptor (ip_grid_descriptor_mod)
grib2_descriptor (ip_grid_descriptor_mod)
-
I
+
I
init_descriptor (ip_grid_descriptor_mod)
init_grib1_interface (ip_grid_mod)
init_grib2_interface (ip_grid_mod)
init_grid (ip_grid_factory_mod)
interpolate_bicubic (bicubic_interp_mod)
interpolate_bilinear (bilinear_interp_mod)
interpolate_budget (budget_interp_mod)
interpolate_neighbor (neighbor_interp_mod)
interpolate_neighbor_budget (neighbor_budget_interp_mod)
interpolate_spectral (spectral_interp_mod)
ip_equid_cylind_grid (ip_equid_cylind_grid_mod)
ip_gaussian_grid (ip_gaussian_grid_mod)
ip_grid (ip_grid_mod)
ip_grid_descriptor (ip_grid_descriptor_mod)
ip_lambert_conf_grid (ip_lambert_conf_grid_mod)
ip_mercator_grid (ip_mercator_grid_mod)
ip_polar_stereo_grid (ip_polar_stereo_grid_mod)
ip_rot_equid_cylind_egrid (ip_rot_equid_cylind_egrid_mod)
ip_rot_equid_cylind_grid (ip_rot_equid_cylind_grid_mod)
ip_station_points_grid (ip_station_points_grid_mod)
ipolates (ipolates_mod)
ipolatev (ipolatev_mod)
-
O
+
O
operator(==) (ip_grid_descriptor_mod)
operator(==) (ip_grid_mod)
-
P
+
P
polates4 (spectral_interp_mod)
polatev4 (spectral_interp_mod)
@@ -106,7 +112,7 @@ diff --git a/dir_49e56c817e5e54854c35e136979f97ca.html b/dir_49e56c817e5e54854c35e136979f97ca.html index ad5da577..87b7ee88 100644 --- a/dir_49e56c817e5e54854c35e136979f97ca.html +++ b/dir_49e56c817e5e54854c35e136979f97ca.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: docs Directory Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,14 +76,20 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
docs Directory Reference
+
docs Directory Reference
@@ -92,7 +98,7 @@ diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html index b4bd3e34..2c915805 100644 --- a/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: src Directory Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,284 +76,292 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
src Directory Reference
+
src Directory Reference
- - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - +

+

Files

file  bicubic_interp_mod.F90 [code]
 bicubic_interp_mod.F90
 Bicubic interpolation routines for scalars and vectors.
 
file  bilinear_interp_mod.F90 [code]
 bilinear_interp_mod.F90
 Bilinear interpolation routines for scalars and vectors.
 
file  budget_interp_mod.F90 [code]
 budget_interp_mod.F90
 Budget interpolation routines for scalars and vectors.
 
file  earth_radius_mod.F90 [code]
 earth_radius_mod.F90
 Determine earth radius and shape.
 
file  fftpack.F [code]
 fftpack.F
 A concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code.
 
file  gdswzd_c.F90 [code]
 gdswzd_c.F90
 C wrapper for routine gdswzd().
 
file  gdswzd_mod.F90 [code]
 gdswzd_mod.F90
 Driver module for gdswzd routines.
 
file  ip_constants_mod.F90 [code]
 ip_constants_mod.F90
 Constants for use in NCEPLIBS-ip.
 
file  ip_equid_cylind_grid_mod.F90 [code]
 ip_equid_cylind_grid_mod.F90
 Equidistant cylindrical grib decoder and grid coordinate transformations.
 
file  ip_gaussian_grid_mod.F90 [code]
 ip_gaussian_grid_mod.F90
 Gaussian grid coordinate transformations.
 
file  ip_grid_descriptor_mod.F90 [code]
 ip_grid_descriptor_mod.F90
 Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
 
file  ip_grid_factory_mod.F90 [code]
 ip_grid_factory_mod.F90
 Routines for creating an ip_grid given a Grib descriptor.
 
file  ip_grid_mod.F90 [code]
 ip_grid_mod.F90
 Abstract ip_grid type.
 
file  ip_grids_mod.F90 [code]
 ip_grids_mod.F90
 Re-export the individual grids.
 
file  ip_interpolators_mod.F90 [code]
 ip_interpolators_mod.F90
 Top-level module to export interpolation routines and constants.
 
file  ip_lambert_conf_grid_mod.F90 [code]
 ip_lambert_conf_grid_mod.F90
 GDS wizard for lambert conformal conical.
 
file  ip_mercator_grid_mod.F90 [code]
 ip_mercator_grid_mod.F90
 GDS wizard for mercator cylindrical.
 
file  ip_mod.F90 [code]
 ip_mod.F90
 Top-level module for the ip library.
 
file  ip_polar_stereo_grid_mod.F90 [code]
 ip_polar_stereo_grid_mod.F90
 GDS wizard for polar stereographic azimuthal.
 
file  ip_rot_equid_cylind_egrid_mod.F90 [code]
 ip_rot_equid_cylind_egrid_mod.F90
 Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.
 
file  ip_rot_equid_cylind_grid_mod.F90 [code]
 ip_rot_equid_cylind_grid_mod.F90
 Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D.
 
file  ip_station_points_grid_mod.F90 [code]
 ip_station_points_grid_mod.F90
 Interpolate gridded data to a series of station points.
 
file  iplib_4.h [code]
 C interface to gdswzd() and gdswzd_grib1() functions for '4' library build.
 iplib_4.h
 C interface to gdswzd() and gdswzd_grib1() functions for '4' library build.
 
file  iplib_8.h [code]
 C interface to gdswzd() and gdswzd_grib1() functions for '8' library build.
 iplib_8.h
 C interface to gdswzd() and gdswzd_grib1() functions for '8' library build.
 
file  iplib_d.h [code]
 C interface to gdswzd() and gdswzd_grib1() functions for 'd' library build.
 iplib_d.h
 C interface to gdswzd() and gdswzd_grib1() functions for 'd' library build.
 
file  ipolates.F90 [code]
 ipolates.F90
 Top-level driver for scalar interpolation routine ipolates().
 
file  ipolatev.F90 [code]
 ipolatev.F90
 Top-level driver for vector interpolation routine ipolates.
 
file  ipxetas.F90 [code]
 ipxetas.F90
 Expand or contract eta grids using linear interpolation.
 
file  ipxwafs.F90 [code]
 ipxwafs.F90
 Expand or contract wafs grids.
 
file  ipxwafs2.F90 [code]
 ipxwafs2.F90
 Expand or contract wafs grids using linear interpolation and account for bitmapped data.
 
file  ipxwafs3.F90 [code]
 ipxwafs3.F90
 Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data.
 
file  movect.F90 [code]
 movect.F90
 Move a vector along a great circle.
 
file  ncpus.F [code]
 ncpus.F
 Set number of cpus.
 
file  neighbor_budget_interp_mod.F90 [code]
 neighbor_budget_interp_mod.F90
 Interpolate scalar and vector fields with neighbor budget interpolation.
 
file  neighbor_interp_mod.F90 [code]
 neighbor_interp_mod.F90
 Interpolate scalar and vector fields with neighbor interpolation.
 
file  polfix_mod.F90 [code]
 polfix_mod.F90
 Make multiple pole scalar values consistent.
 
file  spanaly.f [code]
 sp_mod.F
 
 spanaly.f
 Analyze spectral from Fourier.
 
file  spdz2uv.f [code]
 spdz2uv.f
 Compute winds from divergence and vorticity.
 
file  spectral_interp_mod.F90 [code]
 spectral_interp_mod.F90
 Interpolate spectral.
 
file  speps.f [code]
 speps.f
 Compute utility spectral fields.
 
file  spfft.f [code]
 spfft.f
 Perform multiple fast fourier transforms.
 
file  spfft1.f [code]
 spfft1.f
 Perform multiple fast Fourier transforms.
 
file  spffte.f [code]
 spffte.f
 Perform multiple fast Fourier transforms.
 
file  spfftpt.f [code]
 spfftpt.f
 Compute fourier transform to gridpoints.
 
file  spgradq.f [code]
 spgradq.f
 Compute gradient in spectral space.
 
file  spgradx.f [code]
 spgradx.f
 Compute x-gradient in Fourier space.
 
file  spgrady.f [code]
 spgrady.f
 Compute y-gradient in spectral space.
 
file  splaplac.f [code]
 splaplac.f
 Compute laplacian in spectral space.
 
file  splat.F [code]
 splat.F
 Computes cosines of colatitude and Gaussian weights for sets of latitudes.
 
file  splegend.f [code]
 splegend.f
 Compute Legendre polynomials.
 
file  sppad.f [code]
 sppad.f
 Pad or truncate a spectral field.
 
file  spsynth.f [code]
 spsynth.f
 Synthesize Fourier coefficients from spectral coefficients.
 
file  sptez.f [code]
 sptez.f
 Perform a simple scalar spherical transform.
 
file  sptezd.f [code]
 sptezd.f
 Perform a simple gradient spherical transform.
 
file  sptezm.f [code]
 sptezm.f
 Perform simple scalar spherical transforms.
 
file  sptezmd.f [code]
 sptezmd.f
 Perform simple gradient spherical transforms.
 
file  sptezmv.f [code]
 sptezmv.f
 Perform simple vector spherical transforms.
 
file  sptezv.f [code]
 sptezv.f
 Perform a simple vector spherical transform.
 
file  sptgpm.f [code]
 sptgpm.f
 Transform spectral scalar to Mercator.
 
file  sptgpmd.f [code]
 sptgpmd.f
 Transform spectral to Mercator gradients.
 
file  sptgpmv.f [code]
 sptgpmv.f
 Transform spectral vector to Mercator.
 
file  sptgps.f [code]
 sptgps.f
 Transform spectral scalar to polar stereo.
 
file  sptgpsd.f [code]
 sptgpsd.f
 Transform spectral to polar stereographic gradients.
 
file  sptgpsv.f [code]
 sptgpsv.f
 Transform spectral vector to polar stereo.
 
file  sptgpt.f [code]
 sptgpt.f
 Transform spectral scalar to station points.
 
file  sptgptd.f [code]
 sptgptd.f
 Transform spectral to station point gradients.
 
file  sptgptsd.f [code]
 sptgptsd.f
 Transform spectral scalar to station points.
 
file  sptgptv.f [code]
 sptgptv.f
 Transform spectral vector to station points.
 
file  sptgptvd.f [code]
 sptgptvd.f
 Transform spectral vector to station points.
 
file  sptran.f [code]
 sptran.f
 Perform a scalar spherical transform.
 
file  sptrand.f [code]
 sptrand.f
 Perform a gradient spherical transform.
 
file  sptranf.f [code]
 sptranf.f
 Perform a scalar spherical transform.
 
file  sptranf0.f [code]
 sptranf0.f
 Sptranf spectral initialization.
 
file  sptranf1.f [code]
 sptranf1.f
 Sptranf spectral transform.
 
file  sptranfv.f [code]
 sptranfv.f
 Perform a vector spherical transform.
 
file  sptranv.f [code]
 sptranv.f
 Perform a vector spherical transform.
 
file  sptrun.f [code]
 sptrun.f
 Truncate gridded scalar fields.
 
file  sptrund.f [code]
 sptrund.f
 Spectrally truncate to gradients.
 
file  sptrung.f [code]
 sptrung.f
 Spectrally interpolate scalars to stations.
 
file  sptrungv.f [code]
 sptrungv.f
 Spectrally interpolate vectors to stations.
 
file  sptrunl.f [code]
 sptrunl.f
 Spectrally truncate to laplacian.
 
file  sptrunm.f [code]
 sptrunm.f
 Spectrally interpolate scalars to Mercator.
 
file  sptrunmv.f [code]
 sptrunmv.f
 Spectrally interpolate vectors to Mercator.
 
file  sptruns.f [code]
 sptruns.f
 Spectrally interpolate scalars to polar stereo.
 
file  sptrunsv.f [code]
 sptrunsv.f
 Spectrally interpolate vectors to polar stereo.
 
file  sptrunv.f [code]
 sptrunv.f
 Spectrally truncate gridded vector fields.
 
file  spuv2dz.f [code]
 spuv2dz.f
 Compute divergence and vorticity from winds.
 
file  spvar.f [code]
 spvar.f
 Compute variance by total wavenumber.
 
file  spwget.f [code]
 spwget.f
 Get wave-space constants.
 
@@ -363,7 +371,7 @@ diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/dir_68267d1309a1af8e8297ef4c3efbcdba.js new file mode 100644 index 00000000..9353b538 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -0,0 +1,93 @@ +var dir_68267d1309a1af8e8297ef4c3efbcdba = +[ + [ "bicubic_interp_mod.F90", "bicubic__interp__mod_8F90.html", "bicubic__interp__mod_8F90" ], + [ "bilinear_interp_mod.F90", "bilinear__interp__mod_8F90.html", "bilinear__interp__mod_8F90" ], + [ "budget_interp_mod.F90", "budget__interp__mod_8F90.html", "budget__interp__mod_8F90" ], + [ "earth_radius_mod.F90", "earth__radius__mod_8F90.html", "earth__radius__mod_8F90" ], + [ "fftpack.F", "fftpack_8F.html", "fftpack_8F" ], + [ "gdswzd_c.F90", "gdswzd__c_8F90.html", "gdswzd__c_8F90" ], + [ "gdswzd_mod.F90", "gdswzd__mod_8F90.html", "gdswzd__mod_8F90" ], + [ "ip_constants_mod.F90", "ip__constants__mod_8F90.html", "ip__constants__mod_8F90" ], + [ "ip_equid_cylind_grid_mod.F90", "ip__equid__cylind__grid__mod_8F90.html", "ip__equid__cylind__grid__mod_8F90" ], + [ "ip_gaussian_grid_mod.F90", "ip__gaussian__grid__mod_8F90.html", "ip__gaussian__grid__mod_8F90" ], + [ "ip_grid_descriptor_mod.F90", "ip__grid__descriptor__mod_8F90.html", "ip__grid__descriptor__mod_8F90" ], + [ "ip_grid_factory_mod.F90", "ip__grid__factory__mod_8F90.html", "ip__grid__factory__mod_8F90" ], + [ "ip_grid_mod.F90", "ip__grid__mod_8F90.html", "ip__grid__mod_8F90" ], + [ "ip_grids_mod.F90", "ip__grids__mod_8F90.html", null ], + [ "ip_interpolators_mod.F90", "ip__interpolators__mod_8F90.html", "ip__interpolators__mod_8F90" ], + [ "ip_lambert_conf_grid_mod.F90", "ip__lambert__conf__grid__mod_8F90.html", "ip__lambert__conf__grid__mod_8F90" ], + [ "ip_mercator_grid_mod.F90", "ip__mercator__grid__mod_8F90.html", "ip__mercator__grid__mod_8F90" ], + [ "ip_mod.F90", "ip__mod_8F90.html", null ], + [ "ip_polar_stereo_grid_mod.F90", "ip__polar__stereo__grid__mod_8F90.html", "ip__polar__stereo__grid__mod_8F90" ], + [ "ip_rot_equid_cylind_egrid_mod.F90", "ip__rot__equid__cylind__egrid__mod_8F90.html", "ip__rot__equid__cylind__egrid__mod_8F90" ], + [ "ip_rot_equid_cylind_grid_mod.F90", "ip__rot__equid__cylind__grid__mod_8F90.html", "ip__rot__equid__cylind__grid__mod_8F90" ], + [ "ip_station_points_grid_mod.F90", "ip__station__points__grid__mod_8F90.html", "ip__station__points__grid__mod_8F90" ], + [ "iplib_4.h", "iplib__4_8h.html", "iplib__4_8h" ], + [ "iplib_8.h", "iplib__8_8h.html", "iplib__8_8h" ], + [ "iplib_d.h", "iplib__d_8h.html", "iplib__d_8h" ], + [ "ipolates.F90", "ipolates_8F90.html", "ipolates_8F90" ], + [ "ipolatev.F90", "ipolatev_8F90.html", "ipolatev_8F90" ], + [ "ipxetas.F90", "ipxetas_8F90.html", "ipxetas_8F90" ], + [ "ipxwafs.F90", "ipxwafs_8F90.html", "ipxwafs_8F90" ], + [ "ipxwafs2.F90", "ipxwafs2_8F90.html", "ipxwafs2_8F90" ], + [ "ipxwafs3.F90", "ipxwafs3_8F90.html", "ipxwafs3_8F90" ], + [ "movect.F90", "movect_8F90.html", "movect_8F90" ], + [ "ncpus.F", "ncpus_8F.html", "ncpus_8F" ], + [ "neighbor_budget_interp_mod.F90", "neighbor__budget__interp__mod_8F90.html", "neighbor__budget__interp__mod_8F90" ], + [ "neighbor_interp_mod.F90", "neighbor__interp__mod_8F90.html", "neighbor__interp__mod_8F90" ], + [ "polfix_mod.F90", "polfix__mod_8F90.html", "polfix__mod_8F90" ], + [ "sp_mod.F", "sp__mod_8F_source.html", null ], + [ "spanaly.f", "spanaly_8f.html", "spanaly_8f" ], + [ "spdz2uv.f", "spdz2uv_8f.html", "spdz2uv_8f" ], + [ "spectral_interp_mod.F90", "spectral__interp__mod_8F90.html", "spectral__interp__mod_8F90" ], + [ "speps.f", "speps_8f.html", "speps_8f" ], + [ "spfft.f", "spfft_8f.html", "spfft_8f" ], + [ "spfft1.f", "spfft1_8f.html", "spfft1_8f" ], + [ "spffte.f", "spffte_8f.html", "spffte_8f" ], + [ "spfftpt.f", "spfftpt_8f.html", "spfftpt_8f" ], + [ "spgradq.f", "spgradq_8f.html", "spgradq_8f" ], + [ "spgradx.f", "spgradx_8f.html", "spgradx_8f" ], + [ "spgrady.f", "spgrady_8f.html", "spgrady_8f" ], + [ "splaplac.f", "splaplac_8f.html", "splaplac_8f" ], + [ "splat.F", "splat_8F.html", "splat_8F" ], + [ "splegend.f", "splegend_8f.html", "splegend_8f" ], + [ "sppad.f", "sppad_8f.html", "sppad_8f" ], + [ "spsynth.f", "spsynth_8f.html", "spsynth_8f" ], + [ "sptez.f", "sptez_8f.html", "sptez_8f" ], + [ "sptezd.f", "sptezd_8f.html", "sptezd_8f" ], + [ "sptezm.f", "sptezm_8f.html", "sptezm_8f" ], + [ "sptezmd.f", "sptezmd_8f.html", "sptezmd_8f" ], + [ "sptezmv.f", "sptezmv_8f.html", "sptezmv_8f" ], + [ "sptezv.f", "sptezv_8f.html", "sptezv_8f" ], + [ "sptgpm.f", "sptgpm_8f.html", "sptgpm_8f" ], + [ "sptgpmd.f", "sptgpmd_8f.html", "sptgpmd_8f" ], + [ "sptgpmv.f", "sptgpmv_8f.html", "sptgpmv_8f" ], + [ "sptgps.f", "sptgps_8f.html", "sptgps_8f" ], + [ "sptgpsd.f", "sptgpsd_8f.html", "sptgpsd_8f" ], + [ "sptgpsv.f", "sptgpsv_8f.html", "sptgpsv_8f" ], + [ "sptgpt.f", "sptgpt_8f.html", "sptgpt_8f" ], + [ "sptgptd.f", "sptgptd_8f.html", "sptgptd_8f" ], + [ "sptgptsd.f", "sptgptsd_8f.html", "sptgptsd_8f" ], + [ "sptgptv.f", "sptgptv_8f.html", "sptgptv_8f" ], + [ "sptgptvd.f", "sptgptvd_8f.html", "sptgptvd_8f" ], + [ "sptran.f", "sptran_8f.html", "sptran_8f" ], + [ "sptrand.f", "sptrand_8f.html", "sptrand_8f" ], + [ "sptranf.f", "sptranf_8f.html", "sptranf_8f" ], + [ "sptranf0.f", "sptranf0_8f.html", "sptranf0_8f" ], + [ "sptranf1.f", "sptranf1_8f.html", "sptranf1_8f" ], + [ "sptranfv.f", "sptranfv_8f.html", "sptranfv_8f" ], + [ "sptranv.f", "sptranv_8f.html", "sptranv_8f" ], + [ "sptrun.f", "sptrun_8f.html", "sptrun_8f" ], + [ "sptrund.f", "sptrund_8f.html", "sptrund_8f" ], + [ "sptrung.f", "sptrung_8f.html", "sptrung_8f" ], + [ "sptrungv.f", "sptrungv_8f.html", "sptrungv_8f" ], + [ "sptrunl.f", "sptrunl_8f.html", "sptrunl_8f" ], + [ "sptrunm.f", "sptrunm_8f.html", "sptrunm_8f" ], + [ "sptrunmv.f", "sptrunmv_8f.html", "sptrunmv_8f" ], + [ "sptruns.f", "sptruns_8f.html", "sptruns_8f" ], + [ "sptrunsv.f", "sptrunsv_8f.html", "sptrunsv_8f" ], + [ "sptrunv.f", "sptrunv_8f.html", "sptrunv_8f" ], + [ "spuv2dz.f", "spuv2dz_8f.html", "spuv2dz_8f" ], + [ "spvar.f", "spvar_8f.html", "spvar_8f" ], + [ "spwget.f", "spwget_8f.html", "spwget_8f" ] +]; \ No newline at end of file diff --git a/doc.svg b/doc.svg new file mode 100644 index 00000000..0b928a53 --- /dev/null +++ b/doc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docd.svg b/docd.svg new file mode 100644 index 00000000..ac18b275 --- /dev/null +++ b/docd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/docs(7).zip b/docs(7).zip new file mode 100644 index 00000000..5b3c0113 Binary files /dev/null and b/docs(7).zip differ diff --git a/doxygen.css b/doxygen.css index ffbff022..009a9b55 100644 --- a/doxygen.css +++ b/doxygen.css @@ -1,29 +1,378 @@ -/* The standard CSS for doxygen 1.9.1 */ - -body, table, div, p, dl { - font: 400 14px/22px Roboto,sans-serif; +/* The standard CSS for doxygen 1.9.8*/ + +html { +/* page base colors */ +--page-background-color: white; +--page-foreground-color: black; +--page-link-color: #3D578C; +--page-visited-link-color: #4665A2; + +/* index */ +--index-odd-item-bg-color: #F8F9FC; +--index-even-item-bg-color: white; +--index-header-color: black; +--index-separator-color: #A0A0A0; + +/* header */ +--header-background-color: #F9FAFC; +--header-separator-color: #C4CFE5; +--header-gradient-image: url('nav_h.png'); +--group-header-separator-color: #879ECB; +--group-header-color: #354C7B; +--inherit-header-color: gray; + +--footer-foreground-color: #2A3D61; +--footer-logo-width: 104px; +--citation-label-color: #334975; +--glow-color: cyan; + +--title-background-color: white; +--title-separator-color: #5373B4; +--directory-separator-color: #9CAFD4; +--separator-color: #4A6AAA; + +--blockquote-background-color: #F7F8FB; +--blockquote-border-color: #9CAFD4; + +--scrollbar-thumb-color: #9CAFD4; +--scrollbar-background-color: #F9FAFC; + +--icon-background-color: #728DC1; +--icon-foreground-color: white; +--icon-doc-image: url('doc.svg'); +--icon-folder-open-image: url('folderopen.svg'); +--icon-folder-closed-image: url('folderclosed.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #F9FAFC; +--memdecl-separator-color: #DEE4F0; +--memdecl-foreground-color: #555; +--memdecl-template-color: #4665A2; + +/* detailed member list */ +--memdef-border-color: #A8B8D9; +--memdef-title-background-color: #E2E8F2; +--memdef-title-gradient-image: url('nav_f.png'); +--memdef-proto-background-color: #DFE5F1; +--memdef-proto-text-color: #253555; +--memdef-proto-text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--memdef-doc-background-color: white; +--memdef-param-name-color: #602020; +--memdef-template-color: #4665A2; + +/* tables */ +--table-cell-border-color: #2D4068; +--table-header-background-color: #374F7F; +--table-header-foreground-color: #FFFFFF; + +/* labels */ +--label-background-color: #728DC1; +--label-left-top-border-color: #5373B4; +--label-right-bottom-border-color: #C4CFE5; +--label-foreground-color: white; + +/** navigation bar/tree/menu */ +--nav-background-color: #F9FAFC; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_b.png'); +--nav-gradient-hover-image: url('tab_h.png'); +--nav-gradient-active-image: url('tab_a.png'); +--nav-gradient-active-image-parent: url("../tab_a.png"); +--nav-separator-image: url('tab_s.png'); +--nav-breadcrumb-image: url('bc_s.png'); +--nav-breadcrumb-border-color: #C2CDE4; +--nav-splitbar-image: url('splitbar.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #283A5D; +--nav-text-hover-color: white; +--nav-text-active-color: white; +--nav-text-normal-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #364D7C; +--nav-menu-background-color: white; +--nav-menu-foreground-color: #555555; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.5); +--nav-arrow-color: #9CAFD4; +--nav-arrow-selected-color: #9CAFD4; + +/* table of contents */ +--toc-background-color: #F4F6FA; +--toc-border-color: #D8DFEE; +--toc-header-color: #4665A2; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: white; +--search-foreground-color: #909090; +--search-magnification-image: url('mag.svg'); +--search-magnification-select-image: url('mag_sel.svg'); +--search-active-color: black; +--search-filter-background-color: #F9FAFC; +--search-filter-foreground-color: black; +--search-filter-border-color: #90A5CE; +--search-filter-highlight-text-color: white; +--search-filter-highlight-bg-color: #3D578C; +--search-results-foreground-color: #425E97; +--search-results-background-color: #EEF1F7; +--search-results-border-color: black; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #555; + +/** code fragments */ +--code-keyword-color: #008000; +--code-type-keyword-color: #604020; +--code-flow-keyword-color: #E08000; +--code-comment-color: #800000; +--code-preprocessor-color: #806020; +--code-string-literal-color: #002080; +--code-char-literal-color: #008080; +--code-xml-cdata-color: black; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #000000; +--code-vhdl-keyword-color: #700070; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #4665A2; +--code-external-link-color: #4665A2; +--fragment-foreground-color: black; +--fragment-background-color: #FBFCFD; +--fragment-border-color: #C4CFE5; +--fragment-lineno-border-color: #00FF00; +--fragment-lineno-background-color: #E8E8E8; +--fragment-lineno-foreground-color: black; +--fragment-lineno-link-fg-color: #4665A2; +--fragment-lineno-link-bg-color: #D8D8D8; +--fragment-lineno-link-hover-fg-color: #4665A2; +--fragment-lineno-link-hover-bg-color: #C8C8C8; +--tooltip-foreground-color: black; +--tooltip-background-color: white; +--tooltip-border-color: gray; +--tooltip-doc-color: grey; +--tooltip-declaration-color: #006318; +--tooltip-link-color: #4665A2; +--tooltip-shadow: 1px 1px 7px gray; +--fold-line-color: #808080; +--fold-minus-image: url('minus.svg'); +--fold-plus-image: url('plus.svg'); +--fold-minus-image-relpath: url('../../minus.svg'); +--fold-plus-image-relpath: url('../../plus.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +} + +@media (prefers-color-scheme: dark) { + html:not(.dark-mode) { + color-scheme: dark; + +/* page base colors */ +--page-background-color: black; +--page-foreground-color: #C9D1D9; +--page-link-color: #90A5CE; +--page-visited-link-color: #A3B4D7; + +/* index */ +--index-odd-item-bg-color: #0B101A; +--index-even-item-bg-color: black; +--index-header-color: #C4CFE5; +--index-separator-color: #334975; + +/* header */ +--header-background-color: #070B11; +--header-separator-color: #141C2E; +--header-gradient-image: url('nav_hd.png'); +--group-header-separator-color: #283A5D; +--group-header-color: #90A5CE; +--inherit-header-color: #A0A0A0; + +--footer-foreground-color: #5B7AB7; +--footer-logo-width: 60px; +--citation-label-color: #90A5CE; +--glow-color: cyan; + +--title-background-color: #090D16; +--title-separator-color: #354C79; +--directory-separator-color: #283A5D; +--separator-color: #283A5D; + +--blockquote-background-color: #101826; +--blockquote-border-color: #283A5D; + +--scrollbar-thumb-color: #283A5D; +--scrollbar-background-color: #070B11; + +--icon-background-color: #334975; +--icon-foreground-color: #C4CFE5; +--icon-doc-image: url('docd.svg'); +--icon-folder-open-image: url('folderopend.svg'); +--icon-folder-closed-image: url('folderclosedd.svg'); + +/* brief member declaration list */ +--memdecl-background-color: #0B101A; +--memdecl-separator-color: #2C3F65; +--memdecl-foreground-color: #BBB; +--memdecl-template-color: #7C95C6; + +/* detailed member list */ +--memdef-border-color: #233250; +--memdef-title-background-color: #1B2840; +--memdef-title-gradient-image: url('nav_fd.png'); +--memdef-proto-background-color: #19243A; +--memdef-proto-text-color: #9DB0D4; +--memdef-proto-text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.9); +--memdef-doc-background-color: black; +--memdef-param-name-color: #D28757; +--memdef-template-color: #7C95C6; + +/* tables */ +--table-cell-border-color: #283A5D; +--table-header-background-color: #283A5D; +--table-header-foreground-color: #C4CFE5; + +/* labels */ +--label-background-color: #354C7B; +--label-left-top-border-color: #4665A2; +--label-right-bottom-border-color: #283A5D; +--label-foreground-color: #CCCCCC; + +/** navigation bar/tree/menu */ +--nav-background-color: #101826; +--nav-foreground-color: #364D7C; +--nav-gradient-image: url('tab_bd.png'); +--nav-gradient-hover-image: url('tab_hd.png'); +--nav-gradient-active-image: url('tab_ad.png'); +--nav-gradient-active-image-parent: url("../tab_ad.png"); +--nav-separator-image: url('tab_sd.png'); +--nav-breadcrumb-image: url('bc_sd.png'); +--nav-breadcrumb-border-color: #2A3D61; +--nav-splitbar-image: url('splitbard.png'); +--nav-font-size-level1: 13px; +--nav-font-size-level2: 10px; +--nav-font-size-level3: 9px; +--nav-text-normal-color: #B6C4DF; +--nav-text-hover-color: #DCE2EF; +--nav-text-active-color: #DCE2EF; +--nav-text-normal-shadow: 0px 1px 1px black; +--nav-text-hover-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-text-active-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +--nav-menu-button-color: #B6C4DF; +--nav-menu-background-color: #05070C; +--nav-menu-foreground-color: #BBBBBB; +--nav-menu-toggle-color: rgba(255, 255, 255, 0.2); +--nav-arrow-color: #334975; +--nav-arrow-selected-color: #90A5CE; + +/* table of contents */ +--toc-background-color: #151E30; +--toc-border-color: #202E4A; +--toc-header-color: #A3B4D7; +--toc-down-arrow-image: url("data:image/svg+xml;utf8,&%238595;"); + +/** search field */ +--search-background-color: black; +--search-foreground-color: #C5C5C5; +--search-magnification-image: url('mag_d.svg'); +--search-magnification-select-image: url('mag_seld.svg'); +--search-active-color: #C5C5C5; +--search-filter-background-color: #101826; +--search-filter-foreground-color: #90A5CE; +--search-filter-border-color: #7C95C6; +--search-filter-highlight-text-color: #BCC9E2; +--search-filter-highlight-bg-color: #283A5D; +--search-results-background-color: #101826; +--search-results-foreground-color: #90A5CE; +--search-results-border-color: #7C95C6; +--search-box-shadow: inset 0.5px 0.5px 3px 0px #2F436C; + +/** code fragments */ +--code-keyword-color: #CC99CD; +--code-type-keyword-color: #AB99CD; +--code-flow-keyword-color: #E08000; +--code-comment-color: #717790; +--code-preprocessor-color: #65CABE; +--code-string-literal-color: #7EC699; +--code-char-literal-color: #00E0F0; +--code-xml-cdata-color: #C9D1D9; +--code-vhdl-digit-color: #FF00FF; +--code-vhdl-char-color: #C0C0C0; +--code-vhdl-keyword-color: #CF53C9; +--code-vhdl-logic-color: #FF0000; +--code-link-color: #79C0FF; +--code-external-link-color: #79C0FF; +--fragment-foreground-color: #C9D1D9; +--fragment-background-color: black; +--fragment-border-color: #30363D; +--fragment-lineno-border-color: #30363D; +--fragment-lineno-background-color: black; +--fragment-lineno-foreground-color: #6E7681; +--fragment-lineno-link-fg-color: #6E7681; +--fragment-lineno-link-bg-color: #303030; +--fragment-lineno-link-hover-fg-color: #8E96A1; +--fragment-lineno-link-hover-bg-color: #505050; +--tooltip-foreground-color: #C9D1D9; +--tooltip-background-color: #202020; +--tooltip-border-color: #C9D1D9; +--tooltip-doc-color: #D9E1E9; +--tooltip-declaration-color: #20C348; +--tooltip-link-color: #79C0FF; +--tooltip-shadow: none; +--fold-line-color: #808080; +--fold-minus-image: url('minusd.svg'); +--fold-plus-image: url('plusd.svg'); +--fold-minus-image-relpath: url('../../minusd.svg'); +--fold-plus-image-relpath: url('../../plusd.svg'); + +/** font-family */ +--font-family-normal: Roboto,sans-serif; +--font-family-monospace: 'JetBrains Mono',Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace,fixed; +--font-family-nav: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +--font-family-title: Tahoma,Arial,sans-serif; +--font-family-toc: Verdana,'DejaVu Sans',Geneva,sans-serif; +--font-family-search: Arial,Verdana,sans-serif; +--font-family-icon: Arial,Helvetica; +--font-family-tooltip: Roboto,sans-serif; + +}} +body { + background-color: var(--page-background-color); + color: var(--page-foreground-color); } -p.reference, p.definition { - font: 400 14px/22px Roboto,sans-serif; +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 22px; } /* @group Heading Levels */ -h1.groupheader { - font-size: 150%; -} - .title { - font: 400 14px/28px Roboto,sans-serif; + font-weight: 400; + font-size: 14px; + font-family: var(--font-family-normal); + line-height: 28px; font-size: 150%; font-weight: bold; margin: 10px 2px; } +h1.groupheader { + font-size: 150%; +} + h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; + border-bottom: 1px solid var(--group-header-separator-color); + color: var(--group-header-color); font-size: 150%; font-weight: normal; margin-top: 1.75em; @@ -46,22 +395,13 @@ h1, h2, h3, h4, h5, h6 { } h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; + text-shadow: 0 0 15px var(--glow-color); } dt { font-weight: bold; } -ul.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; - column-count: 3; -} - p.startli, p.startdd { margin-top: 2px; } @@ -113,7 +453,6 @@ h3.version { } div.navtab { - border-right: 1px solid #A3B4D7; padding-right: 15px; text-align: right; line-height: 110%; @@ -127,16 +466,17 @@ td.navtab { padding-right: 6px; padding-left: 6px; } + td.navtabHL { - background-image: url('tab_a.png'); + background-image: var(--nav-gradient-active-image); background-repeat:repeat-x; padding-right: 6px; padding-left: 6px; } td.navtabHL a, td.navtabHL a:visited { - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); } a.navtab { @@ -148,7 +488,13 @@ div.qindex{ width: 100%; line-height: 140%; font-size: 130%; - color: #A0A0A0; + color: var(--index-separator-color); +} + +#main-menu a:focus { + outline: auto; + z-index: 10; + position: relative; } dt.alphachar{ @@ -157,7 +503,7 @@ dt.alphachar{ } .alphachar a{ - color: black; + color: var(--index-header-color); } .alphachar a:hover, .alphachar a:visited{ @@ -176,8 +522,12 @@ dt.alphachar{ line-height: 1.15em; } +.classindex dl.even { + background-color: var(--index-even-item-bg-color); +} + .classindex dl.odd { - background-color: #F8F9FC; + background-color: var(--index-odd-item-bg-color); } @media(min-width: 1120px) { @@ -196,23 +546,19 @@ dt.alphachar{ /* @group Link Styling */ a { - color: #3D578C; + color: var(--page-link-color); font-weight: normal; text-decoration: none; } .contents a:visited { - color: #4665A2; + color: var(--page-visited-link-color); } a:hover { text-decoration: underline; } -.contents a.qindexHL:visited { - color: #FFFFFF; -} - a.el { font-weight: bold; } @@ -221,12 +567,39 @@ a.elRef { } a.code, a.code:visited, a.line, a.line:visited { - color: #4665A2; + color: var(--code-link-color); } a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { - color: #4665A2; -} + color: var(--code-external-link-color); +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } /* @end */ @@ -235,7 +608,17 @@ dl.el { } ul { - overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ + overflow: visible; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + list-style-type: none; } #side-nav ul { @@ -254,30 +637,32 @@ ul { } pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; + border: 1px solid var(--fragment-border-color); + background-color: var(--fragment-background-color); + color: var(--fragment-foreground-color); padding: 4px 6px; margin: 4px 8px 4px 2px; overflow: auto; word-wrap: break-word; font-size: 9pt; line-height: 125%; - font-family: monospace, fixed; + font-family: var(--font-family-monospace); font-size: 105%; } div.fragment { - padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ - margin: 4px 8px 4px 2px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: var(--fragment-foreground-color); + background-color: var(--fragment-background-color); + border: 1px solid var(--fragment-border-color); } div.line { - font-family: monospace, fixed; + font-family: var(--font-family-monospace); font-size: 13px; min-height: 13px; - line-height: 1.0; + line-height: 1.2; text-wrap: unrestricted; white-space: -moz-pre-wrap; /* Moz */ white-space: -pre-wrap; /* Opera 4-6 */ @@ -306,24 +691,40 @@ div.line:after { } div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; + background-color: var(--glow-color); + box-shadow: 0 0 10px var(--glow-color); } +span.fold { + margin-left: 5px; + margin-right: 1px; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; + display: inline-block; + width: 12px; + height: 12px; + background-repeat:no-repeat; + background-position:center; +} span.lineno { padding-right: 4px; + margin-right: 9px; text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; + border-right: 2px solid var(--fragment-lineno-border-color); + color: var(--fragment-lineno-foreground-color); + background-color: var(--fragment-lineno-background-color); white-space: pre; } -span.lineno a { - background-color: #D8D8D8; +span.lineno a, span.lineno a:visited { + color: var(--fragment-lineno-link-fg-color); + background-color: var(--fragment-lineno-link-bg-color); } span.lineno a:hover { - background-color: #C8C8C8; + color: var(--fragment-lineno-link-hover-fg-color); + background-color: var(--fragment-lineno-link-hover-bg-color); } .lineno { @@ -335,24 +736,6 @@ span.lineno a:hover { user-select: none; } -div.ah, span.ah { - background-color: black; - font-weight: bold; - color: #FFFFFF; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); -} - div.classindex ul { list-style: none; padding-left: 0; @@ -374,8 +757,7 @@ div.groupText { } body { - background-color: white; - color: black; + color: var(--page-foreground-color); margin: 0; } @@ -385,29 +767,15 @@ div.contents { margin-right: 8px; } -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; +p.formulaDsp { + text-align: center; } -tr.memlist { - background-color: #EEF1F7; +img.dark-mode-visible { + display: none; } - -p.formulaDsp { - text-align: center; +img.light-mode-visible { + display: none; } img.formulaDsp { @@ -437,89 +805,74 @@ address.footer { img.footer { border: 0px; vertical-align: middle; + width: var(--footer-logo-width); +} + +.compoundTemplParams { + color: var(--memdecl-template-color); + font-size: 80%; + line-height: 120%; } /* @group Code Colorization */ span.keyword { - color: #008000 + color: var(--code-keyword-color); } span.keywordtype { - color: #604020 + color: var(--code-type-keyword-color); } span.keywordflow { - color: #e08000 + color: var(--code-flow-keyword-color); } span.comment { - color: #800000 + color: var(--code-comment-color); } span.preprocessor { - color: #806020 + color: var(--code-preprocessor-color); } span.stringliteral { - color: #002080 + color: var(--code-string-literal-color); } span.charliteral { - color: #008080 + color: var(--code-char-literal-color); +} + +span.xmlcdata { + color: var(--code-xml-cdata-color); } span.vhdldigit { - color: #ff00ff + color: var(--code-vhdl-digit-color); } span.vhdlchar { - color: #000000 + color: var(--code-vhdl-char-color); } span.vhdlkeyword { - color: #700070 + color: var(--code-vhdl-keyword-color); } span.vhdllogic { - color: #ff0000 + color: var(--code-vhdl-logic-color); } blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; + background-color: var(--blockquote-background-color); + border-left: 2px solid var(--blockquote-border-color); margin: 0 24px 0 4px; padding: 0 12px 0 16px; } -blockquote.DocNodeRTL { - border-left: 0; - border-right: 2px solid #9CAFD4; - margin: 0 4px 0 24px; - padding: 0 16px 0 12px; -} - /* @end */ -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - td.tiny { font-size: 75%; } @@ -527,18 +880,19 @@ td.tiny { .dirtab { padding: 4px; border-collapse: collapse; - border: 1px solid #A3B4D7; + border: 1px solid var(--table-cell-border-color); } th.dirtab { - background: #EBEFF6; + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); font-weight: bold; } hr { height: 0px; border: none; - border-top: 1px solid #4A6AAA; + border-top: 1px solid var(--separator-color); } hr.footer { @@ -566,14 +920,14 @@ table.memberdecls { } .memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; + background-color: var(--glow-color); + box-shadow: 0 0 15px var(--glow-color); } .mdescLeft, .mdescRight, .memItemLeft, .memItemRight, .memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; + background-color: var(--memdecl-background-color); border: none; margin: 4px; padding: 1px 0 0 8px; @@ -581,11 +935,11 @@ table.memberdecls { .mdescLeft, .mdescRight { padding: 0px 8px 4px 8px; - color: #555; + color: var(--memdecl-foreground-color); } .memSeparator { - border-bottom: 1px solid #DEE4F0; + border-bottom: 1px solid var(--memdecl-separator-color); line-height: 1px; margin: 0px; padding: 0px; @@ -600,7 +954,7 @@ table.memberdecls { } .memTemplParams { - color: #4665A2; + color: var(--memdecl-template-color); white-space: nowrap; font-size: 80%; } @@ -613,15 +967,15 @@ table.memberdecls { .memtitle { padding: 8px; - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); border-top-right-radius: 4px; border-top-left-radius: 4px; margin-bottom: -1px; - background-image: url('nav_f.png'); + background-image: var(--memdef-title-gradient-image); background-repeat: repeat-x; - background-color: #E2E8F2; + background-color: var(--memdef-title-background-color); line-height: 1.25; font-weight: 300; float:left; @@ -636,20 +990,11 @@ table.memberdecls { .memtemplate { font-size: 80%; - color: #4665A2; + color: var(--memdef-template-color); font-weight: normal; margin-left: 9px; } -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - .mempage { width: 100%; } @@ -668,7 +1013,7 @@ table.memberdecls { } .memitem.glow { - box-shadow: 0 0 15px cyan; + box-shadow: 0 0 15px var(--glow-color); } .memname { @@ -681,41 +1026,32 @@ table.memberdecls { } .memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; + border-top: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); padding: 6px 0px 6px 0px; - color: #253555; + color: var(--memdef-proto-text-color); font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-color: #DFE5F1; - /* opera specific markup */ + text-shadow: var(--memdef-proto-text-shadow); + background-color: var(--memdef-proto-background-color); box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); border-top-right-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - } .overload { - font-family: "courier new",courier,monospace; + font-family: var(--font-family-monospace); font-size: 65%; } .memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; + border-bottom: 1px solid var(--memdef-border-color); + border-left: 1px solid var(--memdef-border-color); + border-right: 1px solid var(--memdef-border-color); padding: 6px 10px 2px 10px; - background-color: #FBFCFD; border-top-width: 0; background-image:url('nav_g.png'); background-repeat:repeat-x; - background-color: #FFFFFF; + background-color: var(--memdef-doc-background-color); /* opera specific markup */ border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; @@ -748,7 +1084,7 @@ dl.reflist dd { } .paramname { - color: #602020; + color: var(--memdef-param-name-color); white-space: nowrap; } .paramname em { @@ -761,20 +1097,20 @@ dl.reflist dd { .params, .retval, .exception, .tparams { margin-left: 0px; padding-left: 0px; -} +} .params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { font-weight: bold; vertical-align: top; } - + .params .paramtype, .tparams .paramtype { font-style: italic; vertical-align: top; -} - +} + .params .paramdir, .tparams .paramdir { - font-family: "courier new",courier,monospace; + font-family: var(--font-family-monospace); vertical-align: top; } @@ -798,13 +1134,13 @@ span.mlabels { } span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; + background-color: var(--label-background-color); + border-top:1px solid var(--label-left-top-border-color); + border-left:1px solid var(--label-left-top-border-color); + border-right:1px solid var(--label-right-bottom-border-color); + border-bottom:1px solid var(--label-right-bottom-border-color); text-shadow: none; - color: white; + color: var(--label-foreground-color); margin-right: 4px; padding: 2px 3px; border-radius: 3px; @@ -821,8 +1157,8 @@ span.mlabel { div.directory { margin: 10px 0px; - border-top: 1px solid #9CAFD4; - border-bottom: 1px solid #9CAFD4; + border-top: 1px solid var(--directory-separator-color); + border-bottom: 1px solid var(--directory-separator-color); width: 100%; } @@ -858,9 +1194,14 @@ div.directory { border-left: 1px solid rgba(0,0,0,0.05); } +.directory tr.odd { + padding-left: 6px; + background-color: var(--index-odd-item-bg-color); +} + .directory tr.even { padding-left: 6px; - background-color: #F7F8FB; + background-color: var(--index-even-item-bg-color); } .directory img { @@ -878,11 +1219,11 @@ div.directory { cursor: pointer; padding-left: 2px; padding-right: 2px; - color: #3D578C; + color: var(--page-link-color); } .arrow { - color: #9CAFD4; + color: var(--nav-arrow-color); -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; @@ -896,14 +1237,15 @@ div.directory { } .icon { - font-family: Arial, Helvetica; + font-family: var(--font-family-icon); + line-height: normal; font-weight: bold; font-size: 12px; height: 14px; width: 16px; display: inline-block; - background-color: #728DC1; - color: white; + background-color: var(--icon-background-color); + color: var(--icon-foreground-color); text-align: center; border-radius: 4px; margin-left: 2px; @@ -920,8 +1262,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderopen.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-open-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -931,8 +1272,7 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('folderclosed.png'); - background-position: 0px -4px; + background-image:var(--icon-folder-closed-image); background-repeat: repeat-y; vertical-align:top; display: inline-block; @@ -942,17 +1282,13 @@ div.directory { width: 24px; height: 18px; margin-bottom: 4px; - background-image:url('doc.png'); + background-image:var(--icon-doc-image); background-position: 0px -4px; background-repeat: repeat-y; vertical-align:top; display: inline-block; } -table.directory { - font: 400 14px Roboto,sans-serif; -} - /* @end */ div.dynheader { @@ -967,7 +1303,7 @@ div.dynheader { address { font-style: normal; - color: #2A3D61; + color: var(--footer-foreground-color); } table.doxtable caption { @@ -981,28 +1317,23 @@ table.doxtable { } table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; + border: 1px solid var(--table-cell-border-color); padding: 3px 7px 2px; } table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); font-size: 110%; padding-bottom: 4px; padding-top: 5px; } table.fieldtable { - /*width: 100%;*/ margin-bottom: 10px; - border: 1px solid #A8B8D9; + border: 1px solid var(--memdef-border-color); border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); } @@ -1012,8 +1343,8 @@ table.fieldtable { .fieldtable td.fieldtype, .fieldtable td.fieldname { white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; + border-right: 1px solid var(--memdef-border-color); + border-bottom: 1px solid var(--memdef-border-color); vertical-align: top; } @@ -1022,14 +1353,13 @@ table.fieldtable { } .fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ + border-bottom: 1px solid var(--memdef-border-color); } .fieldtable td.fielddoc p:first-child { margin-top: 0px; -} - +} + .fieldtable td.fielddoc p:last-child { margin-bottom: 2px; } @@ -1039,22 +1369,18 @@ table.fieldtable { } .fieldtable th { - background-image:url('nav_f.png'); + background-image: var(--memdef-title-gradient-image); background-repeat:repeat-x; - background-color: #E2E8F2; + background-color: var(--memdef-title-background-color); font-size: 90%; - color: #253555; + color: var(--memdef-proto-text-color); padding-bottom: 4px; padding-top: 5px; text-align:left; font-weight: 400; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; + border-bottom: 1px solid var(--memdef-border-color); } @@ -1062,7 +1388,7 @@ table.fieldtable { top: 0px; left: 10px; height: 36px; - background-image: url('tab_b.png'); + background-image: var(--nav-gradient-image); z-index: 101; overflow: hidden; font-size: 13px; @@ -1071,13 +1397,13 @@ table.fieldtable { .navpath ul { font-size: 11px; - background-image:url('tab_b.png'); + background-image: var(--nav-gradient-image); background-repeat:repeat-x; background-position: 0 -5px; height:30px; line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; + color:var(--nav-text-normal-color); + border:solid 1px var(--nav-breadcrumb-border-color); overflow:hidden; margin:0px; padding:0px; @@ -1089,10 +1415,10 @@ table.fieldtable { float:left; padding-left:10px; padding-right:15px; - background-image:url('bc_s.png'); + background-image:var(--nav-breadcrumb-image); background-repeat:no-repeat; background-position:right; - color:#364D7C; + color: var(--nav-foreground-color); } .navpath li.navelem a @@ -1101,15 +1427,16 @@ table.fieldtable { display:block; text-decoration: none; outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; + color: var(--nav-text-normal-color); + font-family: var(--font-family-nav); + text-shadow: var(--nav-text-normal-shadow); + text-decoration: none; } .navpath li.navelem a:hover { - color:#6884BD; + color: var(--nav-text-hover-color); + text-shadow: var(--nav-text-hover-shadow); } .navpath li.footer @@ -1121,7 +1448,7 @@ table.fieldtable { background-image:none; background-repeat:no-repeat; background-position:right; - color:#364D7C; + color: var(--footer-foreground-color); font-size: 8pt; } @@ -1133,7 +1460,7 @@ div.summary padding-right: 5px; width: 50%; text-align: right; -} +} div.summary a { @@ -1148,7 +1475,7 @@ table.classindex margin-right: 3%; width: 94%; border: 0; - border-spacing: 0; + border-spacing: 0; padding: 0; } @@ -1166,11 +1493,11 @@ div.ingroups a div.header { - background-image:url('nav_h.png'); + background-image: var(--header-gradient-image); background-repeat:repeat-x; - background-color: #F9FAFC; + background-color: var(--header-background-color); margin: 0px; - border-bottom: 1px solid #C4CFE5; + border-bottom: 1px solid var(--header-separator-color); } div.headertitle @@ -1193,11 +1520,6 @@ dl.section { padding-left: 0px; } -dl.section.DocNodeRTL { - margin-right: 0px; - padding-right: 0px; -} - dl.note { margin-left: -7px; padding-left: 3px; @@ -1205,16 +1527,6 @@ dl.note { border-color: #D0C000; } -dl.note.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #D0C000; -} - dl.warning, dl.attention { margin-left: -7px; padding-left: 3px; @@ -1222,16 +1534,6 @@ dl.warning, dl.attention { border-color: #FF0000; } -dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #FF0000; -} - dl.pre, dl.post, dl.invariant { margin-left: -7px; padding-left: 3px; @@ -1239,16 +1541,6 @@ dl.pre, dl.post, dl.invariant { border-color: #00D000; } -dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00D000; -} - dl.deprecated { margin-left: -7px; padding-left: 3px; @@ -1256,16 +1548,6 @@ dl.deprecated { border-color: #505050; } -dl.deprecated.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #505050; -} - dl.todo { margin-left: -7px; padding-left: 3px; @@ -1273,16 +1555,6 @@ dl.todo { border-color: #00C0E0; } -dl.todo.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #00C0E0; -} - dl.test { margin-left: -7px; padding-left: 3px; @@ -1290,16 +1562,6 @@ dl.test { border-color: #3030E0; } -dl.test.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #3030E0; -} - dl.bug { margin-left: -7px; padding-left: 3px; @@ -1307,21 +1569,16 @@ dl.bug { border-color: #C08050; } -dl.bug.DocNodeRTL { - margin-left: 0; - padding-left: 0; - border-left: 0; - margin-right: -7px; - padding-right: 3px; - border-right: 4px solid; - border-color: #C08050; -} - dl.section dd { margin-bottom: 6px; } +#projectrow +{ + height: 56px; +} + #projectlogo { text-align: center; @@ -1337,25 +1594,29 @@ dl.section dd { #projectalign { vertical-align: middle; + padding-left: 0.5em; } #projectname { - font: 300% Tahoma, Arial,sans-serif; + font-size: 200%; + font-family: var(--font-family-title); margin: 0px; padding: 2px 0px; } - + #projectbrief { - font: 120% Tahoma, Arial,sans-serif; + font-size: 90%; + font-family: var(--font-family-title); margin: 0px; padding: 0px; } #projectnumber { - font: 50% Tahoma, Arial,sans-serif; + font-size: 50%; + font-family: 50% var(--font-family-title); margin: 0px; padding: 0px; } @@ -1365,7 +1626,8 @@ dl.section dd { padding: 0px; margin: 0px; width: 100%; - border-bottom: 1px solid #5373B4; + border-bottom: 1px solid var(--title-separator-color); + background-color: var(--title-background-color); } .image @@ -1398,17 +1660,12 @@ dl.section dd { font-weight: bold; } -div.zoom -{ - border: 1px solid #90A5CE; -} - dl.citelist { margin-bottom:50px; } dl.citelist dt { - color:#334975; + color:var(--citation-label-color); float:left; font-weight:bold; margin-right:10px; @@ -1424,8 +1681,8 @@ dl.citelist dd { div.toc { padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; + background-color: var(--toc-background-color); + border: 1px solid var(--toc-border-color); border-radius: 7px 7px 7px 7px; float: right; height: auto; @@ -1433,28 +1690,17 @@ div.toc { width: 200px; } -.PageDocRTL-title div.toc { - float: left !important; - text-align: right; -} - div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + background: var(--toc-down-arrow-image) no-repeat scroll 0 5px transparent; + font: 10px/1.2 var(--font-family-toc); margin-top: 5px; padding-left: 10px; padding-top: 2px; } -.PageDocRTL-title div.toc li { - background-position-x: right !important; - padding-left: 0 !important; - padding-right: 10px; -} - div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; + font: bold 12px/1.2 var(--font-family-toc); + color: var(--toc-header-color); border-bottom: 0 none; margin: 0; } @@ -1463,7 +1709,7 @@ div.toc ul { list-style: none outside none; border: medium none; padding: 0px; -} +} div.toc li.level1 { margin-left: 0px; @@ -1474,11 +1720,11 @@ div.toc li.level2 { } div.toc li.level3 { - margin-left: 30px; + margin-left: 15px; } div.toc li.level4 { - margin-left: 45px; + margin-left: 15px; } span.emoji { @@ -1487,29 +1733,13 @@ span.emoji { */ } -.PageDocRTL-title div.toc li.level1 { - margin-left: 0 !important; - margin-right: 0; -} - -.PageDocRTL-title div.toc li.level2 { - margin-left: 0 !important; - margin-right: 15px; -} - -.PageDocRTL-title div.toc li.level3 { - margin-left: 0 !important; - margin-right: 30px; -} - -.PageDocRTL-title div.toc li.level4 { - margin-left: 0 !important; - margin-right: 45px; +span.obfuscator { + display: none; } .inherit_header { font-weight: bold; - color: gray; + color: var(--inherit-header-color); cursor: pointer; -webkit-touch-callout: none; -webkit-user-select: none; @@ -1541,11 +1771,12 @@ tr.heading h2 { #powerTip { cursor: default; - white-space: nowrap; - background-color: white; - border: 1px solid gray; + /*white-space: nowrap;*/ + color: var(--tooltip-foreground-color); + background-color: var(--tooltip-background-color); + border: 1px solid var(--tooltip-border-color); border-radius: 4px 4px 4px 4px; - box-shadow: 1px 1px 7px gray; + box-shadow: var(--tooltip-shadow); display: none; font-size: smaller; max-width: 80%; @@ -1556,7 +1787,7 @@ tr.heading h2 { } #powerTip div.ttdoc { - color: grey; + color: var(--tooltip-doc-color); font-style: italic; } @@ -1564,18 +1795,24 @@ tr.heading h2 { font-weight: bold; } +#powerTip a { + color: var(--tooltip-link-color); +} + #powerTip div.ttname { font-weight: bold; } #powerTip div.ttdeci { - color: #006318; + color: var(--tooltip-declaration-color); } #powerTip div { margin: 0px; padding: 0px; - font: 12px/16px Roboto,sans-serif; + font-size: 12px; + font-family: var(--font-family-tooltip); + line-height: 16px; } #powerTip:before, #powerTip:after { @@ -1620,12 +1857,12 @@ tr.heading h2 { } #powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { - border-top-color: #FFFFFF; + border-top-color: var(--tooltip-background-color); border-width: 10px; margin: 0px -10px; } -#powerTip.n:before { - border-top-color: #808080; +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: var(--tooltip-border-color); border-width: 11px; margin: 0px -11px; } @@ -1648,13 +1885,13 @@ tr.heading h2 { } #powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { - border-bottom-color: #FFFFFF; + border-bottom-color: var(--tooltip-background-color); border-width: 10px; margin: 0px -10px; } #powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { - border-bottom-color: #808080; + border-bottom-color: var(--tooltip-border-color); border-width: 11px; margin: 0px -11px; } @@ -1675,13 +1912,13 @@ tr.heading h2 { left: 100%; } #powerTip.e:after { - border-left-color: #FFFFFF; + border-left-color: var(--tooltip-border-color); border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.e:before { - border-left-color: #808080; + border-left-color: var(--tooltip-border-color); border-width: 11px; top: 50%; margin-top: -11px; @@ -1691,13 +1928,13 @@ tr.heading h2 { right: 100%; } #powerTip.w:after { - border-right-color: #FFFFFF; + border-right-color: var(--tooltip-border-color); border-width: 10px; top: 50%; margin-top: -10px; } #powerTip.w:before { - border-right-color: #808080; + border-right-color: var(--tooltip-border-color); border-width: 11px; top: 50%; margin-top: -11px; @@ -1731,7 +1968,7 @@ table.markdownTable { } table.markdownTable td, table.markdownTable th { - border: 1px solid #2D4068; + border: 1px solid var(--table-cell-border-color); padding: 3px 7px 2px; } @@ -1739,8 +1976,8 @@ table.markdownTable tr { } th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { - background-color: #374F7F; - color: #FFFFFF; + background-color: var(--table-header-background-color); + color: var(--table-header-foreground-color); font-size: 110%; padding-bottom: 4px; padding-top: 5px; @@ -1758,36 +1995,51 @@ th.markdownTableHeadCenter, td.markdownTableBodyCenter { text-align: center } -.DocNodeRTL { - text-align: right; - direction: rtl; +tt, code, kbd, samp +{ + display: inline-block; } +/* @end */ -.DocNodeLTR { - text-align: left; - direction: ltr; +u { + text-decoration: underline; } -table.DocNodeRTL { - width: auto; - margin-right: 0; - margin-left: auto; +details>summary { + list-style-type: none; } -table.DocNodeLTR { - width: auto; - margin-right: auto; - margin-left: 0; +details > summary::-webkit-details-marker { + display: none; } -tt, code, kbd, samp -{ - display: inline-block; - direction:ltr; +details>summary::before { + content: "\25ba"; + padding-right:4px; + font-size: 80%; } -/* @end */ -u { - text-decoration: underline; +details[open]>summary::before { + content: "\25bc"; + padding-right:4px; + font-size: 80%; +} + +body { + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-background-color); +} + +::-webkit-scrollbar { + background-color: var(--scrollbar-background-color); + height: 12px; + width: 12px; +} +::-webkit-scrollbar-thumb { + border-radius: 6px; + box-shadow: inset 0 0 12px 12px var(--scrollbar-thumb-color); + border: solid 2px transparent; +} +::-webkit-scrollbar-corner { + background-color: var(--scrollbar-background-color); } diff --git a/doxygen.svg b/doxygen.svg index d42dad52..79a76354 100644 --- a/doxygen.svg +++ b/doxygen.svg @@ -1,4 +1,6 @@ + @@ -17,7 +19,7 @@ - + diff --git a/dynsections.js b/dynsections.js index 88f2c27e..9b281563 100644 --- a/dynsections.js +++ b/dynsections.js @@ -47,6 +47,8 @@ function updateStripes() { $('table.directory tr'). removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); } function toggleLevel(level) @@ -118,11 +120,80 @@ function toggleInherit(id) $(img).attr('src',src.substring(0,src.length-10)+'open.png'); } } -/* @license-end */ +var opened=true; +// in case HTML_COLORSTYLE is LIGHT or DARK the vars will be replaced, so we write them out explicitly and use double quotes +var plusImg = [ "var(--fold-plus-image)", "var(--fold-plus-image-relpath)" ]; +var minusImg = [ "var(--fold-minus-image)", "var(--fold-minus-image-relpath)" ]; + +// toggle all folding blocks +function codefold_toggle_all(relPath) { + if (opened) { + $('#fold_all').css('background-image',plusImg[relPath]); + $('div[id^=foldopen]').hide(); + $('div[id^=foldclosed]').show(); + } else { + $('#fold_all').css('background-image',minusImg[relPath]); + $('div[id^=foldopen]').show(); + $('div[id^=foldclosed]').hide(); + } + opened=!opened; +} + +// toggle single folding block +function codefold_toggle(id) { + $('#foldopen'+id).toggle(); + $('#foldclosed'+id).toggle(); +} +function init_codefold(relPath) { + $('span[class=lineno]').css( + {'padding-right':'4px', + 'margin-right':'2px', + 'display':'inline-block', + 'width':'54px', + 'background':'linear-gradient(var(--fold-line-color),var(--fold-line-color)) no-repeat 46px/2px 100%' + }); + // add global toggle to first line + $('span[class=lineno]:first').append(''); + // add vertical lines to other rows + $('span[class=lineno]').not(':eq(0)').append(''); + // add toggle controls to lines with fold divs + $('div[class=foldopen]').each(function() { + // extract specific id to use + var id = $(this).attr('id').replace('foldopen',''); + // extract start and end foldable fragment attributes + var start = $(this).attr('data-start'); + var end = $(this).attr('data-end'); + // replace normal fold span with controls for the first line of a foldable fragment + $(this).find('span[class=fold]:first').replaceWith(''); + // append div for folded (closed) representation + $(this).after(''); + // extract the first line from the "open" section to represent closed content + var line = $(this).children().first().clone(); + // remove any glow that might still be active on the original line + $(line).removeClass('glow'); + if (start) { + // if line already ends with a start marker (e.g. trailing {), remove it + $(line).html($(line).html().replace(new RegExp('\\s*'+start+'\\s*$','g'),'')); + } + // replace minus with plus symbol + $(line).find('span[class=fold]').css('background-image',plusImg[relPath]); + // append ellipsis + $(line).append(' '+start+''+end); + // insert constructed line into closed div + $('#foldclosed'+id).html(line); + }); +} + +/* @license-end */ $(document).ready(function() { $('.code,.codeRef').each(function() { $(this).data('powertip',$('#a'+$(this).attr('href').replace(/.*\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html()); + $.fn.powerTip.smartPlacementLists.s = [ 's', 'n', 'ne', 'se' ]; $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true }); }); }); diff --git a/earth__radius__mod_8F90.html b/earth__radius__mod_8F90.html index 455d429f..7761c908 100644 --- a/earth__radius__mod_8F90.html +++ b/earth__radius__mod_8F90.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: earth_radius_mod.F90 File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,17 +76,23 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Modules | Functions/Subroutines
-
-
earth_radius_mod.F90 File Reference
+
earth_radius_mod.F90 File Reference
@@ -95,17 +101,17 @@

Go to the source code of this file.

- - +

+

Modules

module  earth_radius_mod
module  earth_radius_mod
 Determine earth radius and shape.
 
- - - - + + +

+

Functions/Subroutines

subroutine, public earth_radius_mod::earth_radius (IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
 Determine earth radius and shape. More...
 
subroutine, public earth_radius_mod::earth_radius (igdtmpl, igdtlen, radius, eccen_squared)
 Determine earth radius and shape.
 

Detailed Description

Determine earth radius and shape.

@@ -119,7 +125,7 @@ diff --git a/earth__radius__mod_8F90.js b/earth__radius__mod_8F90.js index bc2c8f77..fc1f7242 100644 --- a/earth__radius__mod_8F90.js +++ b/earth__radius__mod_8F90.js @@ -1,4 +1,4 @@ var earth__radius__mod_8F90 = [ - [ "earth_radius", "earth__radius__mod_8F90.html#a810f60db1a1faff0d6f59937a8207a54", null ] + [ "earth_radius", "earth__radius__mod_8F90.html#aa15e37724d67d8072f3960d910909129", null ] ]; \ No newline at end of file diff --git a/earth__radius__mod_8F90_source.html b/earth__radius__mod_8F90_source.html index 209f1e37..b3064fba 100644 --- a/earth__radius__mod_8F90_source.html +++ b/earth__radius__mod_8F90_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: earth_radius_mod.F90 Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,92 +81,100 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
earth_radius_mod.F90
+
earth_radius_mod.F90
-Go to the documentation of this file.
1 
-
4 
- -
8  implicit none
-
9 
-
10  private
-
11  public :: earth_radius
-
12 
-
13 contains
-
14 
-
40  SUBROUTINE earth_radius(IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
-
41  IMPLICIT NONE
-
42 
-
43  INTEGER, INTENT(IN ) :: igdtlen
-
44  INTEGER, INTENT(IN ) :: igdtmpl(igdtlen)
-
45 
-
46  REAL, INTENT( OUT) :: eccen_squared
-
47  REAL, INTENT( OUT) :: radius
-
48 
-
49  REAL :: flat
-
50  REAL :: major_axis, minor_axis
-
51 
-
52  SELECT CASE (igdtmpl(1))
-
53  CASE (0)
-
54  radius = 6367470.0
-
55  eccen_squared = 0.0
-
56  CASE (1) ! USER SPECIFIED SPHERICAL
-
57  radius = float(igdtmpl(3))/float(10**igdtmpl(2))
-
58  eccen_squared = 0.0
-
59  CASE (2) ! IAU 1965
-
60  radius = 6378160.0 ! SEMI MAJOR AXIS
-
61  flat = 1.0/297.0 ! FLATTENING
-
62  eccen_squared = (2.0*flat) - (flat**2)
-
63  CASE (3) ! USER SPECIFIED ELLIPTICAL (KM)
-
64  major_axis = float(igdtmpl(5))/float(10**igdtmpl(4))
-
65  major_axis = major_axis * 1000.0
-
66  minor_axis = float(igdtmpl(7))/float(10**igdtmpl(6))
-
67  minor_axis = minor_axis * 1000.0
-
68  eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
-
69  radius = major_axis
-
70  CASE (4) ! IAG-GRS80 MODEL
-
71  radius = 6378137.0 ! SEMI MAJOR AXIS
-
72  flat = 1.0/298.2572 ! FLATTENING
-
73  eccen_squared = (2.0*flat) - (flat**2)
-
74  CASE (5) ! WGS84 DATUM
-
75  radius = 6378137.0 ! SEMI MAJOR AXIS
-
76  eccen_squared = 0.00669437999013
-
77  CASE (6)
-
78  radius = 6371229.0
-
79  eccen_squared = 0.0
-
80  CASE (7) ! USER SPECIFIED ELLIPTICAL (M)
-
81  major_axis = float(igdtmpl(5))/float(10**igdtmpl(4))
-
82  minor_axis = float(igdtmpl(7))/float(10**igdtmpl(6))
-
83  eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
-
84  radius = major_axis
-
85  CASE (8)
-
86  radius = 6371200.0
-
87  eccen_squared = 0.0
-
88  CASE DEFAULT
-
89  radius = -9999.
-
90  eccen_squared = -9999.
-
91  END SELECT
-
92  !
-
93  RETURN
-
94  !
-
95  END SUBROUTINE earth_radius
-
96 end module earth_radius_mod
-
Determine earth radius and shape.
-
subroutine, public earth_radius(IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
Determine earth radius and shape.
+Go to the documentation of this file.
1
+
4
+ +
8 implicit none
+
9
+
10 private
+
11 public :: earth_radius
+
12
+
13contains
+
14
+
+
40 SUBROUTINE earth_radius(IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
+
41 IMPLICIT NONE
+
42
+
43 INTEGER, INTENT(IN ) :: igdtlen
+
44 INTEGER, INTENT(IN ) :: igdtmpl(igdtlen)
+
45
+
46 REAL, INTENT( OUT) :: eccen_squared
+
47 REAL, INTENT( OUT) :: radius
+
48
+
49 REAL :: flat
+
50 REAL :: major_axis, minor_axis
+
51
+
52 SELECT CASE (igdtmpl(1))
+
53 CASE (0)
+
54 radius = 6367470.0
+
55 eccen_squared = 0.0
+
56 CASE (1) ! USER SPECIFIED SPHERICAL
+
57 radius = float(igdtmpl(3))/float(10**igdtmpl(2))
+
58 eccen_squared = 0.0
+
59 CASE (2) ! IAU 1965
+
60 radius = 6378160.0 ! SEMI MAJOR AXIS
+
61 flat = 1.0/297.0 ! FLATTENING
+
62 eccen_squared = (2.0*flat) - (flat**2)
+
63 CASE (3) ! USER SPECIFIED ELLIPTICAL (KM)
+
64 major_axis = float(igdtmpl(5))/float(10**igdtmpl(4))
+
65 major_axis = major_axis * 1000.0
+
66 minor_axis = float(igdtmpl(7))/float(10**igdtmpl(6))
+
67 minor_axis = minor_axis * 1000.0
+
68 eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
+
69 radius = major_axis
+
70 CASE (4) ! IAG-GRS80 MODEL
+
71 radius = 6378137.0 ! SEMI MAJOR AXIS
+
72 flat = 1.0/298.2572 ! FLATTENING
+
73 eccen_squared = (2.0*flat) - (flat**2)
+
74 CASE (5) ! WGS84 DATUM
+
75 radius = 6378137.0 ! SEMI MAJOR AXIS
+
76 eccen_squared = 0.00669437999013
+
77 CASE (6)
+
78 radius = 6371229.0
+
79 eccen_squared = 0.0
+
80 CASE (7) ! USER SPECIFIED ELLIPTICAL (M)
+
81 major_axis = float(igdtmpl(5))/float(10**igdtmpl(4))
+
82 minor_axis = float(igdtmpl(7))/float(10**igdtmpl(6))
+
83 eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
+
84 radius = major_axis
+
85 CASE (8)
+
86 radius = 6371200.0
+
87 eccen_squared = 0.0
+
88 CASE DEFAULT
+
89 radius = -9999.
+
90 eccen_squared = -9999.
+
91 END SELECT
+
92 !
+
93 RETURN
+
94 !
+
+
95 END SUBROUTINE earth_radius
+
96end module earth_radius_mod
+
Determine earth radius and shape.
+
subroutine, public earth_radius(igdtmpl, igdtlen, radius, eccen_squared)
Determine earth radius and shape.
diff --git a/fftpack_8F.html b/fftpack_8F.html index 2627441e..6eeac11c 100644 --- a/fftpack_8F.html +++ b/fftpack_8F.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: fftpack.F File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
fftpack.F File Reference
+
fftpack.F File Reference
@@ -94,74 +100,74 @@

Go to the source code of this file.

- - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + +

+

Functions/Subroutines

subroutine csfft (isign, n, scale, x, y, table, work, isys)
 csfft More...
subroutine csfft (isign, n, scale, x, y, table, work, isys)
 csfft
 
subroutine dcrft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 dcrft More...
subroutine dcrft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 dcrft
 
subroutine drcft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 drcft More...
subroutine drcft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 drcft
 
subroutine radb2 (IDO, L1, CC, CH, WA1)
 RADB2. More...
 
subroutine radb3 (IDO, L1, CC, CH, WA1, WA2)
 RADB3
- More...
 
subroutine radb4 (IDO, L1, CC, CH, WA1, WA2, WA3)
 RADB4. More...
 
subroutine radb5 (IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
 RADB5. More...
 
subroutine radbg (IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
 RADBG. More...
 
subroutine radf2 (IDO, L1, CC, CH, WA1)
 RADBG. More...
 
subroutine radf3 (IDO, L1, CC, CH, WA1, WA2)
 RADF3. More...
 
subroutine radf4 (IDO, L1, CC, CH, WA1, WA2, WA3)
 RADF4. More...
 
subroutine radf5 (IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
 RADF5. More...
 
subroutine radfg (IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
 RADFG. More...
 
subroutine rfftb (N, R, WSAVE)
 RFFTB. More...
 
subroutine rfftb1 (N, C, CH, WA, IFAC)
 RFFTB1. More...
 
subroutine rfftf (N, R, WSAVE)
 RFFTF. More...
 
subroutine rfftf1 (N, C, CH, WA, IFAC)
 RFFTF1. More...
 
subroutine rffti (N, WSAVE)
 RFFTI. More...
 
subroutine rffti1 (N, WA, IFAC)
 RFFTI1. More...
 
subroutine scfft (isign, n, scale, x, y, table, work, isys)
 scfft More...
subroutine radb2 (ido, l1, cc, ch, wa1)
 RADB2.
 
subroutine radb3 (ido, l1, cc, ch, wa1, wa2)
 RADB3
+
 
subroutine radb4 (ido, l1, cc, ch, wa1, wa2, wa3)
 RADB4.
 
subroutine radb5 (ido, l1, cc, ch, wa1, wa2, wa3, wa4)
 RADB5.
 
subroutine radbg (ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa)
 RADBG.
 
subroutine radf2 (ido, l1, cc, ch, wa1)
 RADBG.
 
subroutine radf3 (ido, l1, cc, ch, wa1, wa2)
 RADF3.
 
subroutine radf4 (ido, l1, cc, ch, wa1, wa2, wa3)
 RADF4.
 
subroutine radf5 (ido, l1, cc, ch, wa1, wa2, wa3, wa4)
 RADF5.
 
subroutine radfg (ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa)
 RADFG.
 
subroutine rfftb (n, r, wsave)
 RFFTB.
 
subroutine rfftb1 (n, c, ch, wa, ifac)
 RFFTB1.
 
subroutine rfftf (n, r, wsave)
 RFFTF.
 
subroutine rfftf1 (n, c, ch, wa, ifac)
 RFFTF1.
 
subroutine rffti (n, wsave)
 RFFTI.
 
subroutine rffti1 (n, wa, ifac)
 RFFTI1.
 
subroutine scfft (isign, n, scale, x, y, table, work, isys)
 scfft
 
subroutine scrft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 scrft More...
subroutine scrft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 scrft
 
subroutine srcft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 srcft More...
subroutine srcft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
 srcft
 

Detailed Description

@@ -175,8 +181,8 @@

Definition in file fftpack.F.

Function/Subroutine Documentation

- -

◆ csfft()

+ +

◆ csfft()

@@ -259,8 +265,8 @@

-

◆ dcrft()

+ +

◆ dcrft()

@@ -394,8 +400,8 @@

-

◆ drcft()

+ +

◆ drcft()

@@ -529,8 +535,8 @@

-

◆ radb2()

+ +

◆ radb2()

@@ -539,31 +545,31 @@

subroutine radb2 (   - IDO, + ido,   - L1, + l1, dimension(ido,2,l1)  - CC, + cc, dimension(ido,l1,2)  - CH, + ch, dimension(*)  - WA1  + wa1  @@ -592,8 +598,8 @@

-

◆ radb3()

+ +

◆ radb3()

@@ -602,37 +608,37 @@

subroutine radb3 (   - IDO, + ido,   - L1, + l1, dimension(ido,3,l1)  - CC, + cc, dimension(ido,l1,3)  - CH, + ch, dimension(*)  - WA1, + wa1, dimension(*)  - WA2  + wa2  @@ -663,8 +669,8 @@

-

◆ radb4()

+ +

◆ radb4()

@@ -673,43 +679,43 @@

subroutine radb4 (   - IDO, + ido,   - L1, + l1, dimension(ido,4,l1)  - CC, + cc, dimension(ido,l1,4)  - CH, + ch, dimension(*)  - WA1, + wa1, dimension(*)  - WA2, + wa2, dimension(*)  - WA3  + wa3  @@ -740,8 +746,8 @@

-

◆ radb5()

+ +

◆ radb5()

@@ -750,49 +756,49 @@

subroutine radb5 (   - IDO, + ido,   - L1, + l1, dimension(ido,5,l1)  - CC, + cc, dimension(ido,l1,5)  - CH, + ch, dimension(*)  - WA1, + wa1, dimension(*)  - WA2, + wa2, dimension(*)  - WA3, + wa3, dimension(*)  - WA4  + wa4  @@ -824,8 +830,8 @@

-

◆ radbg()

+ +

◆ radbg()

@@ -834,61 +840,61 @@

subroutine radbg (   - IDO, + ido,   - IP, + ip,   - L1, + l1,   - IDL1, + idl1, dimension(ido,ip,l1)  - CC, + cc, dimension(ido,l1,ip)  - C1, + c1, dimension(idl1,ip)  - C2, + c2, dimension(ido,l1,ip)  - CH, + ch, dimension(idl1,ip)  - CH2, + ch2, dimension(*)  - WA  + wa  @@ -922,8 +928,8 @@

-

◆ radf2()

+ +

◆ radf2()

@@ -932,31 +938,31 @@

subroutine radf2 (   - IDO, + ido,   - L1, + l1, dimension(ido,l1,2)  - CC, + cc, dimension(ido,2,l1)  - CH, + ch, dimension(*)  - WA1  + wa1  @@ -985,8 +991,8 @@

-

◆ radf3()

+ +

◆ radf3()

@@ -995,37 +1001,37 @@

subroutine radf3 (   - IDO, + ido,   - L1, + l1, dimension(ido,l1,3)  - CC, + cc, dimension(ido,3,l1)  - CH, + ch, dimension(*)  - WA1, + wa1, dimension(*)  - WA2  + wa2  @@ -1055,8 +1061,8 @@

-

◆ radf4()

+ +

◆ radf4()

@@ -1065,43 +1071,43 @@

subroutine radf4 (   - IDO, + ido,   - L1, + l1, dimension(ido,l1,4)  - CC, + cc, dimension(ido,4,l1)  - CH, + ch, dimension(*)  - WA1, + wa1, dimension(*)  - WA2, + wa2, dimension(*)  - WA3  + wa3  @@ -1132,8 +1138,8 @@

-

◆ radf5()

+ +

◆ radf5()

@@ -1142,49 +1148,49 @@

subroutine radf5 (   - IDO, + ido,   - L1, + l1, dimension(ido,l1,5)  - CC, + cc, dimension(ido,5,l1)  - CH, + ch, dimension(*)  - WA1, + wa1, dimension(*)  - WA2, + wa2, dimension(*)  - WA3, + wa3, dimension(*)  - WA4  + wa4  @@ -1216,8 +1222,8 @@

-

◆ radfg()

+ +

◆ radfg()

@@ -1226,61 +1232,61 @@

subroutine radfg (   - IDO, + ido,   - IP, + ip,   - L1, + l1,   - IDL1, + idl1, dimension(ido,ip,l1)  - CC, + cc, dimension(ido,l1,ip)  - C1, + c1, dimension(idl1,ip)  - C2, + c2, dimension(ido,l1,ip)  - CH, + ch, dimension(idl1,ip)  - CH2, + ch2, dimension(*)  - WA  + wa  @@ -1314,8 +1320,8 @@

-

◆ rfftb()

+ +

◆ rfftb()

@@ -1324,19 +1330,19 @@

subroutine rfftb (   - N, + n, dimension(*)  - R, + r, dimension(*)  - WSAVE  + wsave  @@ -1365,8 +1371,8 @@

-

◆ rfftb1()

+ +

◆ rfftb1()

@@ -1375,31 +1381,31 @@

subroutine rfftb1 (   - N, + n, real, dimension(*)  - C, + c, real, dimension(*)  - CH, + ch, real, dimension(*)  - WA, + wa, real, dimension(*)  - IFAC  + ifac  @@ -1430,8 +1436,8 @@

-

◆ rfftf()

+ +

◆ rfftf()

@@ -1440,19 +1446,19 @@

subroutine rfftf (   - N, + n, dimension(*)  - R, + r, dimension(*)  - WSAVE  + wsave  @@ -1481,8 +1487,8 @@

-

◆ rfftf1()

+ +

◆ rfftf1()

@@ -1491,31 +1497,31 @@

subroutine rfftf1 (   - N, + n, real, dimension(*)  - C, + c, real, dimension(*)  - CH, + ch, real, dimension(*)  - WA, + wa, real, dimension(*)  - IFAC  + ifac  @@ -1546,8 +1552,8 @@

-

◆ rffti()

+ +

◆ rffti()

@@ -1556,13 +1562,13 @@

subroutine rffti (   - N, + n, dimension(*)  - WSAVE  + wsave  @@ -1590,8 +1596,8 @@

-

◆ rffti1()

+ +

◆ rffti1()

@@ -1600,19 +1606,19 @@

subroutine rffti1 (   - N, + n, real, dimension(*)  - WA, + wa, real, dimension(*)  - IFAC  + ifac  @@ -1639,8 +1645,8 @@

-

◆ scfft()

+ +

◆ scfft()

@@ -1723,8 +1729,8 @@

-

◆ scrft()

+ +

◆ scrft()

@@ -1858,8 +1864,8 @@

-

◆ srcft()

+ +

◆ srcft()

@@ -1999,7 +2005,7 @@

diff --git a/fftpack_8F.js b/fftpack_8F.js index 98c5a031..221ffcb9 100644 --- a/fftpack_8F.js +++ b/fftpack_8F.js @@ -3,22 +3,22 @@ var fftpack_8F = [ "csfft", "fftpack_8F.html#ad261879c88a7f040e43f1549e65f36e5", null ], [ "dcrft", "fftpack_8F.html#a713ef445886ad8dc8b16692c6075d225", null ], [ "drcft", "fftpack_8F.html#a55b05419c0d3bb0595b34c8cacf93be8", null ], - [ "radb2", "fftpack_8F.html#ae63abe3a02989ed4fbd60b50bc0c6dda", null ], - [ "radb3", "fftpack_8F.html#a6129001ac4cdf5d5a345edc2822d8014", null ], - [ "radb4", "fftpack_8F.html#a3b5aab129020968eaf92f2e6ca0785ef", null ], - [ "radb5", "fftpack_8F.html#a2b6492f922cbee03af5b89d52356abf1", null ], - [ "radbg", "fftpack_8F.html#af5a2521b66fece6cc768206c1df0d20b", null ], - [ "radf2", "fftpack_8F.html#a70e2420dd5bee9e41eb6c15bbad5eef6", null ], - [ "radf3", "fftpack_8F.html#a51374398f8edd5701987ce483c739592", null ], - [ "radf4", "fftpack_8F.html#ae9910ca606fd0cdb03b5b3b98533f486", null ], - [ "radf5", "fftpack_8F.html#a6d852c36924b038f77a24b8e22205add", null ], - [ "radfg", "fftpack_8F.html#ad5dbca6bb6ee7c0a86a1e140627de1b2", null ], - [ "rfftb", "fftpack_8F.html#a79ba25d1f342858b0faa3c3e3585ec88", null ], - [ "rfftb1", "fftpack_8F.html#afa735c298a72dd1c13ab1c45e737c066", null ], - [ "rfftf", "fftpack_8F.html#afbb5dc9c70ebe24759d5ffec1d3e42e2", null ], - [ "rfftf1", "fftpack_8F.html#acdf9efa42dc73f90af444ee0da649a09", null ], - [ "rffti", "fftpack_8F.html#a50f1237ff5990436609962c0eae406db", null ], - [ "rffti1", "fftpack_8F.html#ae3569ef7a371390f6bf38417865ef71b", null ], + [ "radb2", "fftpack_8F.html#ab6b183d050ed7a278e3d5d1b1df2a518", null ], + [ "radb3", "fftpack_8F.html#aa93bf6f642853a3350a9144cb1013f4c", null ], + [ "radb4", "fftpack_8F.html#af12eda15b4d802900d798b8be5cb0c11", null ], + [ "radb5", "fftpack_8F.html#a9d1d044f44ab9483c9d25fcaa9d9fa82", null ], + [ "radbg", "fftpack_8F.html#a068ff557b7f9a3ecca681d4946c0838c", null ], + [ "radf2", "fftpack_8F.html#a9dab9f8bdb8c20a1c0ab784960ad74cf", null ], + [ "radf3", "fftpack_8F.html#a8ace8115be26d3b5d69396a61c35bcba", null ], + [ "radf4", "fftpack_8F.html#a73c8f3eae90cf8e31e79e896190e6af6", null ], + [ "radf5", "fftpack_8F.html#a015879940c807ba1108d3f5c6273f357", null ], + [ "radfg", "fftpack_8F.html#a9b1a1683452238fd9720e8316b2064cc", null ], + [ "rfftb", "fftpack_8F.html#a36dbe2e8cdb99b5c43e8810f95c87c2a", null ], + [ "rfftb1", "fftpack_8F.html#a5176a5d29194d5bc9125da338ad86cec", null ], + [ "rfftf", "fftpack_8F.html#a88b14ae8b7022a3596e1a1fb5e109d8a", null ], + [ "rfftf1", "fftpack_8F.html#a695a5d7f2d8296ee0c1862da42d96879", null ], + [ "rffti", "fftpack_8F.html#add6f83f2c4ac91b29547511c4eed0836", null ], + [ "rffti1", "fftpack_8F.html#a12282309a28f39ee005339825ae90adb", null ], [ "scfft", "fftpack_8F.html#a369071ea2d380c9d91ba36d1bf375e33", null ], [ "scrft", "fftpack_8F.html#ac69cbd64be972c20a4424f5327fb4b36", null ], [ "srcft", "fftpack_8F.html#acf248c4f27a9fa81cffdfded50eee742", null ] diff --git a/fftpack_8F_source.html b/fftpack_8F_source.html index 4c82f5e5..9a441dc2 100644 --- a/fftpack_8F_source.html +++ b/fftpack_8F_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: fftpack.F Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,1422 +81,1472 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
fftpack.F
+
fftpack.F
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief A concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code.
-
3 C>
-
4 C> FFTPACK is a package of Fortran subprograms for the fast Fourier
-
5 C> transform of periodic and other symmetric sequences. It includes
-
6 C> complex, real, sine, cosine, and quarter-wave transforms.
-
7 C>
-
8 C>Reference:
-
9 C>- P.N. Swarztrauber, Vectorizing the FFTs, in Parallel Computations
-
10 C>(G. Rodrigue, ed.), Academic Press, 1982, pp. 51--83.
-
11 C>
-
12 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
13 
-
14 C> dcrft
-
15 C>
-
16 C> @param init
-
17 C> @param x
-
18 C> @param ldx
-
19 C> @param y
-
20 C> @param ldy
-
21 C> @param n
-
22 C> @param m
-
23 C> @param isign
-
24 C> @param scale
-
25 C> @param table
-
26 C> @param n1
-
27 C> @param wrk
-
28 C> @param n2
-
29 C> @param z
-
30 C> @param nz
-
31 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
32  SUBROUTINE dcrft(init,x,ldx,y,ldy,n,m,isign,scale,
-
33  & table,n1,wrk,n2,z,nz)
-
34 
-
35  implicit none
-
36  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
-
37  real x(2*ldx,*),y(ldy,*),scale,table(44002),wrk(*)
-
38  real, optional :: z
-
39  integer, optional :: nz
-
40 
-
41  IF (init.ne.0) THEN
-
42  CALL rffti(n,table)
-
43  ELSE
-
44 !OCL NOVREC
-
45  DO j=1,m
-
46  y(1,j)=x(1,j)
-
47  DO i=2,n
-
48  y(i,j)=x(i+1,j)
-
49  ENDDO
-
50  CALL rfftb(n,y(1,j),table)
-
51  DO i=1,n
-
52  y(i,j)=scale*y(i,j)
-
53  ENDDO
-
54  ENDDO
-
55  ENDIF
-
56 
-
57  RETURN
-
58  END
-
59 
-
60 C> scrft
-
61 C>
-
62 C> @param init
-
63 C> @param x
-
64 C> @param ldx
-
65 C> @param y
-
66 C> @param ldy
-
67 C> @param n
-
68 C> @param m
-
69 C> @param isign
-
70 C> @param scale
-
71 C> @param table
-
72 C> @param n1
-
73 C> @param wrk
-
74 C> @param n2
-
75 C> @param z
-
76 C> @param nz
-
77 C>
-
78 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
79 
-
80  SUBROUTINE scrft(init,x,ldx,y,ldy,n,m,isign,scale,
-
81  & table,n1,wrk,n2,z,nz)
-
82 
-
83  implicit none
-
84  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
-
85  real x(2*ldx,*),y(ldy,*),scale,table(44002),wrk(*)
-
86  real, optional :: z
-
87  integer, optional :: nz
-
88 
-
89  IF (init.ne.0) THEN
-
90  CALL rffti(n,table)
-
91  ELSE
-
92 !OCL NOVREC
-
93  DO j=1,m
-
94  y(1,j)=x(1,j)
-
95  DO i=2,n
-
96  y(i,j)=x(i+1,j)
-
97  ENDDO
-
98  CALL rfftb(n,y(1,j),table)
-
99  DO i=1,n
-
100  y(i,j)=scale*y(i,j)
-
101  ENDDO
-
102  ENDDO
-
103  ENDIF
-
104 
-
105  RETURN
-
106  END
-
107 
-
108 C> csfft
-
109 C>
-
110 C> @param isign
-
111 C> @param n
-
112 C> @param scale
-
113 C> @param x
-
114 C> @param y
-
115 C> @param table
-
116 C> @param work
-
117 C> @param isys
-
118 C>
-
119 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
120  SUBROUTINE csfft(isign,n,scale,x,y,table,work,isys)
-
121 
-
122  implicit none
-
123  integer isign,n,isys,i
-
124  real scale,x(*),y(*),table(*),work(*)
-
125 
-
126  IF (isign.eq.0) THEN
-
127  CALL rffti(n,table)
-
128  ENDIF
-
129  IF (isign.eq.1) THEN
-
130  y(1)=x(1)
-
131  DO i=2,n
-
132  y(i)=x(i+1)
-
133  ENDDO
-
134  CALL rfftb(n,y,table)
-
135  DO i=1,n
-
136  y(i)=scale*y(i)
-
137  ENDDO
-
138  ENDIF
-
139 
-
140  RETURN
-
141  END
-
142 
-
143 C> drcft
-
144 C>
-
145 C> @param init
-
146 C> @param x
-
147 C> @param ldx
-
148 C> @param y
-
149 C> @param ldy
-
150 C> @param n
-
151 C> @param m
-
152 C> @param isign
-
153 C> @param scale
-
154 C> @param table
-
155 C> @param n1
-
156 C> @param wrk
-
157 C> @param n2
-
158 C> @param z
-
159 C> @param nz
-
160 C>
-
161 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
162  SUBROUTINE drcft(init,x,ldx,y,ldy,n,m,isign,scale,
-
163  & table,n1,wrk,n2,z,nz)
-
164 
-
165  implicit none
-
166  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
-
167  real x(ldx,*),y(2*ldy,*),scale,table(44002),wrk(*)
-
168  real, optional :: z
-
169  integer, optional :: nz
-
170 
-
171  IF (init.ne.0) THEN
-
172  CALL rffti(n,table)
-
173  ELSE
-
174  DO j=1,m
-
175  DO i=1,n
-
176  y(i,j)=x(i,j)
-
177  ENDDO
-
178  CALL rfftf(n,y(1,j),table)
-
179  DO i=1,n
-
180  y(i,j)=scale*y(i,j)
-
181  ENDDO
-
182  DO i=n,2,-1
-
183  y(i+1,j)=y(i,j)
-
184  ENDDO
-
185  y(2,j)=0.
-
186 C 01/17/2013 vvvvvvvvvvvvv E.Mirvis added ver 2.0.1 by S.Moorthi request. No +|- demo.
-
187  y(n+2,j) = 0.
-
188  ENDDO
-
189  ENDIF
-
190 
-
191  RETURN
-
192  END
-
193 
-
194 C> srcft
-
195 C>
-
196 C> @param init
-
197 C> @param x
-
198 C> @param ldx
-
199 C> @param y
-
200 C> @param ldy
-
201 C> @param n
-
202 C> @param m
-
203 C> @param isign
-
204 C> @param scale
-
205 C> @param table
-
206 C> @param n1
-
207 C> @param wrk
-
208 C> @param n2
-
209 C> @param z
-
210 C> @param nz
-
211 C>
-
212 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
213  SUBROUTINE srcft(init,x,ldx,y,ldy,n,m,isign,scale,
-
214  & table,n1,wrk,n2,z,nz)
-
215 
-
216  implicit none
-
217  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
-
218  real x(ldx,*),y(2*ldy,*),scale,table(44002),wrk(*)
-
219  real, optional :: z
-
220  integer, optional :: nz
-
221 
-
222  IF (init.ne.0) THEN
-
223  CALL rffti(n,table)
-
224  ELSE
-
225  DO j=1,m
-
226  DO i=1,n
-
227  y(i,j)=x(i,j)
-
228  ENDDO
-
229  CALL rfftf(n,y(1,j),table)
-
230  DO i=1,n
-
231  y(i,j)=scale*y(i,j)
-
232  ENDDO
-
233  DO i=n,2,-1
-
234  y(i+1,j)=y(i,j)
-
235  ENDDO
-
236  y(2,j)=0.
-
237  y(n+2,j) = 0.
-
238 C 01/17/2013 ^^^^^^^^^^E.Mirvis added ver 2.0.1 by S.Moorthi request. No +|- demo.
-
239  ENDDO
-
240  ENDIF
-
241 
-
242  RETURN
-
243  END
-
244 
-
245 C> scfft
-
246 C>
-
247 C> @param isign
-
248 C> @param n
-
249 C> @param scale
-
250 C> @param x
-
251 C> @param y
-
252 C> @param table
-
253 C> @param work
-
254 C> @param isys
-
255 C>
-
256 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
257  SUBROUTINE scfft(isign,n,scale,x,y,table,work,isys)
-
258 
-
259  implicit none
-
260  integer isign,n,isys,i
-
261  real scale,x(*),y(*),table(*),work(*)
-
262 
-
263  IF (isign.eq.0) THEN
-
264  CALL rffti(n,table)
-
265  ENDIF
-
266  IF (isign.eq.-1) THEN
-
267  DO i=1,n
-
268  y(i)=x(i)
-
269  ENDDO
-
270  CALL rfftf(n,y,table)
-
271  DO i=1,n
-
272  y(i)=scale*y(i)
-
273  ENDDO
-
274  DO i=n,2,-1
-
275  y(i+1)=y(i)
-
276  ENDDO
-
277  y(2)=0.
-
278  ENDIF
-
279 
-
280  RETURN
-
281  END
-
282 
-
283 C> RFFTF
-
284 C>
-
285 C> @param N
-
286 C> @param R
-
287 C> @param WSAVE
-
288 C>
-
289 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
290  SUBROUTINE rfftf (N,R,WSAVE)
-
291  dimension r(*) ,wsave(*)
-
292  IF (n .EQ. 1) RETURN
-
293  CALL rfftf1 (n,r,wsave,wsave(n+1),wsave(2*n+1))
-
294  RETURN
-
295  END
-
296 
-
297 C> RFFTB
-
298 C>
-
299 C> @param N
-
300 C> @param R
-
301 C> @param WSAVE
-
302 C>
-
303 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
304  SUBROUTINE rfftb (N,R,WSAVE)
-
305  dimension r(*) ,wsave(*)
-
306  IF (n .EQ. 1) RETURN
-
307  CALL rfftb1 (n,r,wsave,wsave(n+1),wsave(2*n+1))
-
308  RETURN
-
309  END
-
310 
-
311 C> RFFTI
-
312 C>
-
313 C> @param N
-
314 C> @param WSAVE
-
315 C>
-
316 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
317  SUBROUTINE rffti (N,WSAVE)
-
318  dimension wsave(*)
-
319  IF (n .EQ. 1) RETURN
-
320  CALL rffti1 (n,wsave(n+1),wsave(2*n+1))
-
321  RETURN
-
322  END
-
323 
-
324 C> RFFTB1
-
325 C>
-
326 C> @param N
-
327 C> @param C
-
328 C> @param CH
-
329 C> @param WA
-
330 C> @param IFAC
-
331 C>
-
332 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
333  SUBROUTINE rfftb1 (N,C,CH,WA,IFAC)
-
334  REAL CH(*) ,C(*) ,WA(*) ,IFAC(*)
-
335  NF = int(ifac(2))
-
336  na = 0
-
337  l1 = 1
-
338  iw = 1
-
339  DO 116 k1=1,nf
-
340  ip = int(ifac(k1+2))
-
341  l2 = ip*l1
-
342  ido = n/l2
-
343  idl1 = ido*l1
-
344  IF (ip .NE. 4) GO TO 103
-
345  ix2 = iw+ido
-
346  ix3 = ix2+ido
-
347  IF (na .NE. 0) GO TO 101
-
348  CALL radb4 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3))
-
349  GO TO 102
-
350  101 CALL radb4 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3))
-
351  102 na = 1-na
-
352  GO TO 115
-
353  103 IF (ip .NE. 2) GO TO 106
-
354  IF (na .NE. 0) GO TO 104
-
355  CALL radb2 (ido,l1,c,ch,wa(iw))
-
356  GO TO 105
-
357  104 CALL radb2 (ido,l1,ch,c,wa(iw))
-
358  105 na = 1-na
-
359  GO TO 115
-
360  106 IF (ip .NE. 3) GO TO 109
-
361  ix2 = iw+ido
-
362  IF (na .NE. 0) GO TO 107
-
363  CALL radb3 (ido,l1,c,ch,wa(iw),wa(ix2))
-
364  GO TO 108
-
365  107 CALL radb3 (ido,l1,ch,c,wa(iw),wa(ix2))
-
366  108 na = 1-na
-
367  GO TO 115
-
368  109 IF (ip .NE. 5) GO TO 112
-
369  ix2 = iw+ido
-
370  ix3 = ix2+ido
-
371  ix4 = ix3+ido
-
372  IF (na .NE. 0) GO TO 110
-
373  CALL radb5 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4))
-
374  GO TO 111
-
375  110 CALL radb5 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4))
-
376  111 na = 1-na
-
377  GO TO 115
-
378  112 IF (na .NE. 0) GO TO 113
-
379  CALL radbg (ido,ip,l1,idl1,c,c,c,ch,ch,wa(iw))
-
380  GO TO 114
-
381  113 CALL radbg (ido,ip,l1,idl1,ch,ch,ch,c,c,wa(iw))
-
382  114 IF (ido .EQ. 1) na = 1-na
-
383  115 l1 = l2
-
384  iw = iw+(ip-1)*ido
-
385  116 CONTINUE
-
386  IF (na .EQ. 0) RETURN
-
387  DO 117 i=1,n
-
388  c(i) = ch(i)
-
389  117 CONTINUE
-
390  RETURN
-
391  END
-
392 
-
393 C> RFFTF1
-
394 C>
-
395 C> @param N
-
396 C> @param C
-
397 C> @param CH
-
398 C> @param WA
-
399 C> @param IFAC
-
400 C>
-
401 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
402  SUBROUTINE rfftf1 (N,C,CH,WA,IFAC)
-
403  REAL CH(*) ,C(*) ,WA(*) ,IFAC(*)
-
404  NF = int(ifac(2))
-
405  na = 1
-
406  l2 = n
-
407  iw = n
-
408  DO 111 k1=1,nf
-
409  kh = nf-k1
-
410  ip = int(ifac(kh+3))
-
411  l1 = l2/ip
-
412  ido = n/l2
-
413  idl1 = ido*l1
-
414  iw = iw-(ip-1)*ido
-
415  na = 1-na
-
416  IF (ip .NE. 4) GO TO 102
-
417  ix2 = iw+ido
-
418  ix3 = ix2+ido
-
419  IF (na .NE. 0) GO TO 101
-
420  CALL radf4 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3))
-
421  GO TO 110
-
422  101 CALL radf4 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3))
-
423  GO TO 110
-
424  102 IF (ip .NE. 2) GO TO 104
-
425  IF (na .NE. 0) GO TO 103
-
426  CALL radf2 (ido,l1,c,ch,wa(iw))
-
427  GO TO 110
-
428  103 CALL radf2 (ido,l1,ch,c,wa(iw))
-
429  GO TO 110
-
430  104 IF (ip .NE. 3) GO TO 106
-
431  ix2 = iw+ido
-
432  IF (na .NE. 0) GO TO 105
-
433  CALL radf3 (ido,l1,c,ch,wa(iw),wa(ix2))
-
434  GO TO 110
-
435  105 CALL radf3 (ido,l1,ch,c,wa(iw),wa(ix2))
-
436  GO TO 110
-
437  106 IF (ip .NE. 5) GO TO 108
-
438  ix2 = iw+ido
-
439  ix3 = ix2+ido
-
440  ix4 = ix3+ido
-
441  IF (na .NE. 0) GO TO 107
-
442  CALL radf5 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4))
-
443  GO TO 110
-
444  107 CALL radf5 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4))
-
445  GO TO 110
-
446  108 IF (ido .EQ. 1) na = 1-na
-
447  IF (na .NE. 0) GO TO 109
-
448  CALL radfg (ido,ip,l1,idl1,c,c,c,ch,ch,wa(iw))
-
449  na = 1
-
450  GO TO 110
-
451  109 CALL radfg (ido,ip,l1,idl1,ch,ch,ch,c,c,wa(iw))
-
452  na = 0
-
453  110 l2 = l1
-
454  111 CONTINUE
-
455  IF (na .EQ. 1) RETURN
-
456  DO 112 i=1,n
-
457  c(i) = ch(i)
-
458  112 CONTINUE
-
459  RETURN
-
460  END
-
461 
-
462 C> RFFTI1
-
463 C>
-
464 C> @param N
-
465 C> @param WA
-
466 C> @param IFAC
-
467 C>
-
468 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
469  SUBROUTINE rffti1 (N,WA,IFAC)
-
470  REAL WA(*) ,IFAC(*) ,NTRYH(4)
-
471  DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/4,2,3,5/
-
472  NL = n
-
473  nf = 0
-
474  j = 0
-
475  101 j = j+1
-
476  IF ((j-4).LE.0) THEN
-
477  GO TO 102
-
478  ELSE
-
479  GO TO 103
-
480  ENDIF
-
481  102 ntry = int(ntryh(j))
-
482  GO TO 104
-
483  103 ntry = ntry+2
-
484  104 nq = nl/ntry
-
485  nr = nl-ntry*nq
-
486  IF (nr.EQ.0) THEN
-
487  GO TO 105
-
488  ELSE
-
489  GO TO 101
-
490  ENDIF
-
491  105 nf = nf+1
-
492  ifac(nf+2) = ntry
-
493  nl = nq
-
494  IF (ntry .NE. 2) GO TO 107
-
495  IF (nf .EQ. 1) GO TO 107
-
496  DO 106 i=2,nf
-
497  ib = nf-i+2
-
498  ifac(ib+2) = ifac(ib+1)
-
499  106 CONTINUE
-
500  ifac(3) = 2
-
501  107 IF (nl .NE. 1) GO TO 104
-
502  ifac(1) = n
-
503  ifac(2) = nf
-
504  tpi = 6.28318530717959
-
505  argh = tpi/float(n)
-
506  is = 0
-
507  nfm1 = nf-1
-
508  l1 = 1
-
509  IF (nfm1 .EQ. 0) RETURN
-
510 !OCL NOVREC
-
511  DO 110 k1=1,nfm1
-
512  ip = int(ifac(k1+2))
-
513  ld = 0
-
514  l2 = l1*ip
-
515  ido = n/l2
-
516  ipm = ip-1
-
517  DO 109 j=1,ipm
-
518  ld = ld+l1
-
519  i = is
-
520  argld = float(ld)*argh
-
521  fi = 0
-
522 !OCL SCALAR
-
523  DO 108 ii=3,ido,2
-
524  i = i+2
-
525  fi = fi+1
-
526  arg = fi*argld
-
527  wa(i-1) = cos(arg)
-
528  wa(i) = sin(arg)
-
529  108 CONTINUE
-
530  is = is+ido
-
531  109 CONTINUE
-
532  l1 = l2
-
533  110 CONTINUE
-
534  RETURN
-
535  END
-
536 
-
537 C> RADB2
-
538 C>
-
539 C> @param IDO
-
540 C> @param L1
-
541 C> @param CC
-
542 C> @param CH
-
543 C> @param WA1
-
544 C>
-
545 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
546  SUBROUTINE radb2 (IDO,L1,CC,CH,WA1)
-
547  dimension cc(ido,2,l1) ,ch(ido,l1,2) ,
-
548  1 wa1(*)
-
549  DO 101 k=1,l1
-
550  ch(1,k,1) = cc(1,1,k)+cc(ido,2,k)
-
551  ch(1,k,2) = cc(1,1,k)-cc(ido,2,k)
-
552  101 CONTINUE
-
553  IF (ido.LT.2) THEN
-
554  GO TO 107
-
555  ELSEIF (ido.EQ.2) THEN
-
556  GO TO 105
-
557  ELSE
-
558  GO TO 102
-
559  ENDIF
-
560  102 idp2 = ido+2
-
561 !OCL NOVREC
-
562  DO 104 k=1,l1
-
563  DO 103 i=3,ido,2
-
564  ic = idp2-i
-
565  ch(i-1,k,1) = cc(i-1,1,k)+cc(ic-1,2,k)
-
566  tr2 = cc(i-1,1,k)-cc(ic-1,2,k)
-
567  ch(i,k,1) = cc(i,1,k)-cc(ic,2,k)
-
568  ti2 = cc(i,1,k)+cc(ic,2,k)
-
569  ch(i-1,k,2) = wa1(i-2)*tr2-wa1(i-1)*ti2
-
570  ch(i,k,2) = wa1(i-2)*ti2+wa1(i-1)*tr2
-
571  103 CONTINUE
-
572  104 CONTINUE
-
573  IF (mod(ido,2) .EQ. 1) RETURN
-
574  105 DO 106 k=1,l1
-
575  ch(ido,k,1) = cc(ido,1,k)+cc(ido,1,k)
-
576  ch(ido,k,2) = -(cc(1,2,k)+cc(1,2,k))
-
577  106 CONTINUE
-
578  107 RETURN
-
579  END
-
580 
-
581 C> RADB3
-
582 C>
-
583 C> @param IDO
-
584 C> @param L1
-
585 C> @param CC
-
586 C> @param CH
-
587 C> @param WA1
-
588 C> @param WA2
-
589 C>
-
590 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
591  SUBROUTINE radb3 (IDO,L1,CC,CH,WA1,WA2)
-
592  dimension cc(ido,3,l1) ,ch(ido,l1,3) ,
-
593  1 wa1(*) ,wa2(*)
-
594  DATA taur,taui /-.5,.866025403784439/
-
595  DO 101 k=1,l1
-
596  tr2 = cc(ido,2,k)+cc(ido,2,k)
-
597  cr2 = cc(1,1,k)+taur*tr2
-
598  ch(1,k,1) = cc(1,1,k)+tr2
-
599  ci3 = taui*(cc(1,3,k)+cc(1,3,k))
-
600  ch(1,k,2) = cr2-ci3
-
601  ch(1,k,3) = cr2+ci3
-
602  101 CONTINUE
-
603  IF (ido .EQ. 1) RETURN
-
604  idp2 = ido+2
-
605 !OCL NOVREC
-
606  DO 103 k=1,l1
-
607  DO 102 i=3,ido,2
-
608  ic = idp2-i
-
609  tr2 = cc(i-1,3,k)+cc(ic-1,2,k)
-
610  cr2 = cc(i-1,1,k)+taur*tr2
-
611  ch(i-1,k,1) = cc(i-1,1,k)+tr2
-
612  ti2 = cc(i,3,k)-cc(ic,2,k)
-
613  ci2 = cc(i,1,k)+taur*ti2
-
614  ch(i,k,1) = cc(i,1,k)+ti2
-
615  cr3 = taui*(cc(i-1,3,k)-cc(ic-1,2,k))
-
616  ci3 = taui*(cc(i,3,k)+cc(ic,2,k))
-
617  dr2 = cr2-ci3
-
618  dr3 = cr2+ci3
-
619  di2 = ci2+cr3
-
620  di3 = ci2-cr3
-
621  ch(i-1,k,2) = wa1(i-2)*dr2-wa1(i-1)*di2
-
622  ch(i,k,2) = wa1(i-2)*di2+wa1(i-1)*dr2
-
623  ch(i-1,k,3) = wa2(i-2)*dr3-wa2(i-1)*di3
-
624  ch(i,k,3) = wa2(i-2)*di3+wa2(i-1)*dr3
-
625  102 CONTINUE
-
626  103 CONTINUE
-
627  RETURN
-
628  END
-
629 
-
630 C> RADB4
-
631 C>
-
632 C> @param IDO
-
633 C> @param L1
-
634 C> @param CC
-
635 C> @param CH
-
636 C> @param WA1
-
637 C> @param WA2
-
638 C> @param WA3
-
639 C>
-
640 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
641  SUBROUTINE radb4 (IDO,L1,CC,CH,WA1,WA2,WA3)
-
642  dimension cc(ido,4,l1) ,ch(ido,l1,4) ,
-
643  1 wa1(*) ,wa2(*) ,wa3(*)
-
644  DATA sqrt2 /1.414213562373095/
-
645  DO 101 k=1,l1
-
646  tr1 = cc(1,1,k)-cc(ido,4,k)
-
647  tr2 = cc(1,1,k)+cc(ido,4,k)
-
648  tr3 = cc(ido,2,k)+cc(ido,2,k)
-
649  tr4 = cc(1,3,k)+cc(1,3,k)
-
650  ch(1,k,1) = tr2+tr3
-
651  ch(1,k,2) = tr1-tr4
-
652  ch(1,k,3) = tr2-tr3
-
653  ch(1,k,4) = tr1+tr4
-
654  101 CONTINUE
-
655  IF (ido.LT.2) THEN
-
656  GO TO 107
-
657  ELSEIF (ido.EQ.2) THEN
-
658  GO TO 105
-
659  ELSE
-
660  GO TO 102
-
661  ENDIF
-
662  102 idp2 = ido+2
-
663 !OCL NOVREC
-
664  DO 104 k=1,l1
-
665  DO 103 i=3,ido,2
-
666  ic = idp2-i
-
667  ti1 = cc(i,1,k)+cc(ic,4,k)
-
668  ti2 = cc(i,1,k)-cc(ic,4,k)
-
669  ti3 = cc(i,3,k)-cc(ic,2,k)
-
670  tr4 = cc(i,3,k)+cc(ic,2,k)
-
671  tr1 = cc(i-1,1,k)-cc(ic-1,4,k)
-
672  tr2 = cc(i-1,1,k)+cc(ic-1,4,k)
-
673  ti4 = cc(i-1,3,k)-cc(ic-1,2,k)
-
674  tr3 = cc(i-1,3,k)+cc(ic-1,2,k)
-
675  ch(i-1,k,1) = tr2+tr3
-
676  cr3 = tr2-tr3
-
677  ch(i,k,1) = ti2+ti3
-
678  ci3 = ti2-ti3
-
679  cr2 = tr1-tr4
-
680  cr4 = tr1+tr4
-
681  ci2 = ti1+ti4
-
682  ci4 = ti1-ti4
-
683  ch(i-1,k,2) = wa1(i-2)*cr2-wa1(i-1)*ci2
-
684  ch(i,k,2) = wa1(i-2)*ci2+wa1(i-1)*cr2
-
685  ch(i-1,k,3) = wa2(i-2)*cr3-wa2(i-1)*ci3
-
686  ch(i,k,3) = wa2(i-2)*ci3+wa2(i-1)*cr3
-
687  ch(i-1,k,4) = wa3(i-2)*cr4-wa3(i-1)*ci4
-
688  ch(i,k,4) = wa3(i-2)*ci4+wa3(i-1)*cr4
-
689  103 CONTINUE
-
690  104 CONTINUE
-
691  IF (mod(ido,2) .EQ. 1) RETURN
-
692  105 CONTINUE
-
693  DO 106 k=1,l1
-
694  ti1 = cc(1,2,k)+cc(1,4,k)
-
695  ti2 = cc(1,4,k)-cc(1,2,k)
-
696  tr1 = cc(ido,1,k)-cc(ido,3,k)
-
697  tr2 = cc(ido,1,k)+cc(ido,3,k)
-
698  ch(ido,k,1) = tr2+tr2
-
699  ch(ido,k,2) = sqrt2*(tr1-ti1)
-
700  ch(ido,k,3) = ti2+ti2
-
701  ch(ido,k,4) = -sqrt2*(tr1+ti1)
-
702  106 CONTINUE
-
703  107 RETURN
-
704  END
-
705 
-
706 C> RADB5
-
707 C>
-
708 C> @param IDO
-
709 C> @param L1
-
710 C> @param CC
-
711 C> @param CH
-
712 C> @param WA1
-
713 C> @param WA2
-
714 C> @param WA3
-
715 C> @param WA4
-
716 C>
-
717 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
718  SUBROUTINE radb5 (IDO,L1,CC,CH,WA1,WA2,WA3,WA4)
-
719  dimension cc(ido,5,l1) ,ch(ido,l1,5) ,
-
720  1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*)
-
721  DATA tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154,
-
722  1-.809016994374947,.587785252292473/
-
723  DO 101 k=1,l1
-
724  ti5 = cc(1,3,k)+cc(1,3,k)
-
725  ti4 = cc(1,5,k)+cc(1,5,k)
-
726  tr2 = cc(ido,2,k)+cc(ido,2,k)
-
727  tr3 = cc(ido,4,k)+cc(ido,4,k)
-
728  ch(1,k,1) = cc(1,1,k)+tr2+tr3
-
729  cr2 = cc(1,1,k)+tr11*tr2+tr12*tr3
-
730  cr3 = cc(1,1,k)+tr12*tr2+tr11*tr3
-
731  ci5 = ti11*ti5+ti12*ti4
-
732  ci4 = ti12*ti5-ti11*ti4
-
733  ch(1,k,2) = cr2-ci5
-
734  ch(1,k,3) = cr3-ci4
-
735  ch(1,k,4) = cr3+ci4
-
736  ch(1,k,5) = cr2+ci5
-
737  101 CONTINUE
-
738  IF (ido .EQ. 1) RETURN
-
739  idp2 = ido+2
-
740  DO 103 k=1,l1
-
741  DO 102 i=3,ido,2
-
742  ic = idp2-i
-
743  ti5 = cc(i,3,k)+cc(ic,2,k)
-
744  ti2 = cc(i,3,k)-cc(ic,2,k)
-
745  ti4 = cc(i,5,k)+cc(ic,4,k)
-
746  ti3 = cc(i,5,k)-cc(ic,4,k)
-
747  tr5 = cc(i-1,3,k)-cc(ic-1,2,k)
-
748  tr2 = cc(i-1,3,k)+cc(ic-1,2,k)
-
749  tr4 = cc(i-1,5,k)-cc(ic-1,4,k)
-
750  tr3 = cc(i-1,5,k)+cc(ic-1,4,k)
-
751  ch(i-1,k,1) = cc(i-1,1,k)+tr2+tr3
-
752  ch(i,k,1) = cc(i,1,k)+ti2+ti3
-
753  cr2 = cc(i-1,1,k)+tr11*tr2+tr12*tr3
-
754  ci2 = cc(i,1,k)+tr11*ti2+tr12*ti3
-
755  cr3 = cc(i-1,1,k)+tr12*tr2+tr11*tr3
-
756  ci3 = cc(i,1,k)+tr12*ti2+tr11*ti3
-
757  cr5 = ti11*tr5+ti12*tr4
-
758  ci5 = ti11*ti5+ti12*ti4
-
759  cr4 = ti12*tr5-ti11*tr4
-
760  ci4 = ti12*ti5-ti11*ti4
-
761  dr3 = cr3-ci4
-
762  dr4 = cr3+ci4
-
763  di3 = ci3+cr4
-
764  di4 = ci3-cr4
-
765  dr5 = cr2+ci5
-
766  dr2 = cr2-ci5
-
767  di5 = ci2-cr5
-
768  di2 = ci2+cr5
-
769  ch(i-1,k,2) = wa1(i-2)*dr2-wa1(i-1)*di2
-
770  ch(i,k,2) = wa1(i-2)*di2+wa1(i-1)*dr2
-
771  ch(i-1,k,3) = wa2(i-2)*dr3-wa2(i-1)*di3
-
772  ch(i,k,3) = wa2(i-2)*di3+wa2(i-1)*dr3
-
773  ch(i-1,k,4) = wa3(i-2)*dr4-wa3(i-1)*di4
-
774  ch(i,k,4) = wa3(i-2)*di4+wa3(i-1)*dr4
-
775  ch(i-1,k,5) = wa4(i-2)*dr5-wa4(i-1)*di5
-
776  ch(i,k,5) = wa4(i-2)*di5+wa4(i-1)*dr5
-
777  102 CONTINUE
-
778  103 CONTINUE
-
779  RETURN
-
780  END
-
781 
-
782 C> RADBG
-
783 C>
-
784 C> @param IDO
-
785 C> @param IP
-
786 C> @param L1
-
787 C> @param IDL1
-
788 C> @param CC
-
789 C> @param C1
-
790 C> @param C2
-
791 C> @param CH
-
792 C> @param CH2
-
793 C> @param WA
-
794 C>
-
795 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
796  SUBROUTINE radbg (IDO,IP,L1,IDL1,CC,C1,C2,CH,CH2,WA)
-
797  dimension ch(ido,l1,ip) ,cc(ido,ip,l1) ,
-
798  1 c1(ido,l1,ip) ,c2(idl1,ip),
-
799  2 ch2(idl1,ip) ,wa(*)
-
800  DATA tpi/6.28318530717959/
-
801  arg = tpi/float(ip)
-
802  dcp = cos(arg)
-
803  dsp = sin(arg)
-
804  idp2 = ido+2
-
805  nbd = (ido-1)/2
-
806  ipp2 = ip+2
-
807  ipph = (ip+1)/2
-
808  IF (ido .LT. l1) GO TO 103
-
809  DO 102 k=1,l1
-
810  DO 101 i=1,ido
-
811  ch(i,k,1) = cc(i,1,k)
-
812  101 CONTINUE
-
813  102 CONTINUE
-
814  GO TO 106
-
815  103 DO 105 i=1,ido
-
816  DO 104 k=1,l1
-
817  ch(i,k,1) = cc(i,1,k)
-
818  104 CONTINUE
-
819  105 CONTINUE
-
820 !OCL NOVREC
-
821  106 DO 108 j=2,ipph
-
822  jc = ipp2-j
-
823  j2 = j+j
-
824  DO 107 k=1,l1
-
825  ch(1,k,j) = cc(ido,j2-2,k)+cc(ido,j2-2,k)
-
826  ch(1,k,jc) = cc(1,j2-1,k)+cc(1,j2-1,k)
-
827  107 CONTINUE
-
828  108 CONTINUE
-
829  IF (ido .EQ. 1) GO TO 116
-
830  IF (nbd .LT. l1) GO TO 112
-
831 !OCL NOVREC
-
832  DO 111 j=2,ipph
-
833  jc = ipp2-j
-
834  DO 110 k=1,l1
-
835  DO 109 i=3,ido,2
-
836  ic = idp2-i
-
837  ch(i-1,k,j) = cc(i-1,2*j-1,k)+cc(ic-1,2*j-2,k)
-
838  ch(i-1,k,jc) = cc(i-1,2*j-1,k)-cc(ic-1,2*j-2,k)
-
839  ch(i,k,j) = cc(i,2*j-1,k)-cc(ic,2*j-2,k)
-
840  ch(i,k,jc) = cc(i,2*j-1,k)+cc(ic,2*j-2,k)
-
841  109 CONTINUE
-
842  110 CONTINUE
-
843  111 CONTINUE
-
844  GO TO 116
-
845  112 DO 115 j=2,ipph
-
846  jc = ipp2-j
-
847  DO 114 i=3,ido,2
-
848  ic = idp2-i
-
849  DO 113 k=1,l1
-
850  ch(i-1,k,j) = cc(i-1,2*j-1,k)+cc(ic-1,2*j-2,k)
-
851  ch(i-1,k,jc) = cc(i-1,2*j-1,k)-cc(ic-1,2*j-2,k)
-
852  ch(i,k,j) = cc(i,2*j-1,k)-cc(ic,2*j-2,k)
-
853  ch(i,k,jc) = cc(i,2*j-1,k)+cc(ic,2*j-2,k)
-
854  113 CONTINUE
-
855  114 CONTINUE
-
856  115 CONTINUE
-
857  116 ar1 = 1.
-
858  ai1 = 0.
-
859 !OCL NOVREC
-
860  DO 120 l=2,ipph
-
861  lc = ipp2-l
-
862  ar1h = dcp*ar1-dsp*ai1
-
863  ai1 = dcp*ai1+dsp*ar1
-
864  ar1 = ar1h
-
865  DO 117 ik=1,idl1
-
866  c2(ik,l) = ch2(ik,1)+ar1*ch2(ik,2)
-
867  c2(ik,lc) = ai1*ch2(ik,ip)
-
868  117 CONTINUE
-
869  dc2 = ar1
-
870  ds2 = ai1
-
871  ar2 = ar1
-
872  ai2 = ai1
-
873 !OCL NOVREC
-
874  DO 119 j=3,ipph
-
875  jc = ipp2-j
-
876  ar2h = dc2*ar2-ds2*ai2
-
877  ai2 = dc2*ai2+ds2*ar2
-
878  ar2 = ar2h
-
879  DO 118 ik=1,idl1
-
880  c2(ik,l) = c2(ik,l)+ar2*ch2(ik,j)
-
881  c2(ik,lc) = c2(ik,lc)+ai2*ch2(ik,jc)
-
882  118 CONTINUE
-
883  119 CONTINUE
-
884  120 CONTINUE
-
885 !OCL NOVREC
-
886  DO 122 j=2,ipph
-
887  DO 121 ik=1,idl1
-
888  ch2(ik,1) = ch2(ik,1)+ch2(ik,j)
-
889  121 CONTINUE
-
890  122 CONTINUE
-
891 !OCL NOVREC
-
892  DO 124 j=2,ipph
-
893  jc = ipp2-j
-
894  DO 123 k=1,l1
-
895  ch(1,k,j) = c1(1,k,j)-c1(1,k,jc)
-
896  ch(1,k,jc) = c1(1,k,j)+c1(1,k,jc)
-
897  123 CONTINUE
-
898  124 CONTINUE
-
899  IF (ido .EQ. 1) GO TO 132
-
900  IF (nbd .LT. l1) GO TO 128
-
901 !OCL NOVREC
-
902  DO 127 j=2,ipph
-
903  jc = ipp2-j
-
904  DO 126 k=1,l1
-
905  DO 125 i=3,ido,2
-
906  ch(i-1,k,j) = c1(i-1,k,j)-c1(i,k,jc)
-
907  ch(i-1,k,jc) = c1(i-1,k,j)+c1(i,k,jc)
-
908  ch(i,k,j) = c1(i,k,j)+c1(i-1,k,jc)
-
909  ch(i,k,jc) = c1(i,k,j)-c1(i-1,k,jc)
-
910  125 CONTINUE
-
911  126 CONTINUE
-
912  127 CONTINUE
-
913  GO TO 132
-
914  128 DO 131 j=2,ipph
-
915  jc = ipp2-j
-
916  DO 130 i=3,ido,2
-
917  DO 129 k=1,l1
-
918  ch(i-1,k,j) = c1(i-1,k,j)-c1(i,k,jc)
-
919  ch(i-1,k,jc) = c1(i-1,k,j)+c1(i,k,jc)
-
920  ch(i,k,j) = c1(i,k,j)+c1(i-1,k,jc)
-
921  ch(i,k,jc) = c1(i,k,j)-c1(i-1,k,jc)
-
922  129 CONTINUE
-
923  130 CONTINUE
-
924  131 CONTINUE
-
925  132 CONTINUE
-
926  IF (ido .EQ. 1) RETURN
-
927  DO 133 ik=1,idl1
-
928  c2(ik,1) = ch2(ik,1)
-
929  133 CONTINUE
-
930  DO 135 j=2,ip
-
931  DO 134 k=1,l1
-
932  c1(1,k,j) = ch(1,k,j)
-
933  134 CONTINUE
-
934  135 CONTINUE
-
935  IF (nbd .GT. l1) GO TO 139
-
936  is = -ido
-
937  DO 138 j=2,ip
-
938  is = is+ido
-
939  idij = is
-
940  DO 137 i=3,ido,2
-
941  idij = idij+2
-
942  DO 136 k=1,l1
-
943  c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j)
-
944  c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j)
-
945  136 CONTINUE
-
946  137 CONTINUE
-
947  138 CONTINUE
-
948  GO TO 143
-
949  139 is = -ido
-
950 !OCL NOVREC
-
951  DO 142 j=2,ip
-
952  is = is+ido
-
953  DO 141 k=1,l1
-
954  idij = is
-
955  DO 140 i=3,ido,2
-
956  idij = idij+2
-
957  c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j)
-
958  c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j)
-
959  140 CONTINUE
-
960  141 CONTINUE
-
961  142 CONTINUE
-
962  143 RETURN
-
963  END
-
964 
-
965 C> RADBG
-
966 C>
-
967 C> @param IDO
-
968 C> @param L1
-
969 C> @param CC
-
970 C> @param CH
-
971 C> @param WA1
-
972 C>
-
973 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
974  SUBROUTINE radf2 (IDO,L1,CC,CH,WA1)
-
975  dimension ch(ido,2,l1) ,cc(ido,l1,2) ,
-
976  1 wa1(*)
-
977  DO 101 k=1,l1
-
978  ch(1,1,k) = cc(1,k,1)+cc(1,k,2)
-
979  ch(ido,2,k) = cc(1,k,1)-cc(1,k,2)
-
980  101 CONTINUE
-
981  IF (ido.LT.2) THEN
-
982  GO TO 107
-
983  ELSEIF (ido.EQ.2) THEN
-
984  GO TO 105
-
985  ELSE
-
986  GO TO 102
-
987  ENDIF
-
988  102 idp2 = ido+2
-
989  DO 104 k=1,l1
-
990  DO 103 i=3,ido,2
-
991  ic = idp2-i
-
992  tr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
-
993  ti2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
-
994  ch(i,1,k) = cc(i,k,1)+ti2
-
995  ch(ic,2,k) = ti2-cc(i,k,1)
-
996  ch(i-1,1,k) = cc(i-1,k,1)+tr2
-
997  ch(ic-1,2,k) = cc(i-1,k,1)-tr2
-
998  103 CONTINUE
-
999  104 CONTINUE
-
1000  IF (mod(ido,2) .EQ. 1) RETURN
-
1001  105 DO 106 k=1,l1
-
1002  ch(1,2,k) = -cc(ido,k,2)
-
1003  ch(ido,1,k) = cc(ido,k,1)
-
1004  106 CONTINUE
-
1005  107 RETURN
-
1006  END
-
1007 
-
1008 C> RADF3
-
1009 C>
-
1010 C> @param IDO
-
1011 C> @param L1
-
1012 C> @param CC
-
1013 C> @param CH
-
1014 C> @param WA1
-
1015 C> @param WA2
-
1016 C>
-
1017 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
1018  SUBROUTINE radf3 (IDO,L1,CC,CH,WA1,WA2)
-
1019  dimension ch(ido,3,l1) ,cc(ido,l1,3) ,
-
1020  1 wa1(*) ,wa2(*)
-
1021  DATA taur,taui /-.5,.866025403784439/
-
1022  DO 101 k=1,l1
-
1023  cr2 = cc(1,k,2)+cc(1,k,3)
-
1024  ch(1,1,k) = cc(1,k,1)+cr2
-
1025  ch(1,3,k) = taui*(cc(1,k,3)-cc(1,k,2))
-
1026  ch(ido,2,k) = cc(1,k,1)+taur*cr2
-
1027  101 CONTINUE
-
1028  IF (ido .EQ. 1) RETURN
-
1029  idp2 = ido+2
-
1030  DO 103 k=1,l1
-
1031  DO 102 i=3,ido,2
-
1032  ic = idp2-i
-
1033  dr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
-
1034  di2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
-
1035  dr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
-
1036  di3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
-
1037  cr2 = dr2+dr3
-
1038  ci2 = di2+di3
-
1039  ch(i-1,1,k) = cc(i-1,k,1)+cr2
-
1040  ch(i,1,k) = cc(i,k,1)+ci2
-
1041  tr2 = cc(i-1,k,1)+taur*cr2
-
1042  ti2 = cc(i,k,1)+taur*ci2
-
1043  tr3 = taui*(di2-di3)
-
1044  ti3 = taui*(dr3-dr2)
-
1045  ch(i-1,3,k) = tr2+tr3
-
1046  ch(ic-1,2,k) = tr2-tr3
-
1047  ch(i,3,k) = ti2+ti3
-
1048  ch(ic,2,k) = ti3-ti2
-
1049  102 CONTINUE
-
1050  103 CONTINUE
-
1051  RETURN
-
1052  END
-
1053 
-
1054 C> RADF4
-
1055 C>
-
1056 C> @param IDO
-
1057 C> @param L1
-
1058 C> @param CC
-
1059 C> @param CH
-
1060 C> @param WA1
-
1061 C> @param WA2
-
1062 C> @param WA3
-
1063 C>
-
1064 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
1065  SUBROUTINE radf4 (IDO,L1,CC,CH,WA1,WA2,WA3)
-
1066  dimension cc(ido,l1,4) ,ch(ido,4,l1) ,
-
1067  1 wa1(*) ,wa2(*) ,wa3(*)
-
1068  DATA hsqt2 /.7071067811865475/
-
1069  DO 101 k=1,l1
-
1070  tr1 = cc(1,k,2)+cc(1,k,4)
-
1071  tr2 = cc(1,k,1)+cc(1,k,3)
-
1072  ch(1,1,k) = tr1+tr2
-
1073  ch(ido,4,k) = tr2-tr1
-
1074  ch(ido,2,k) = cc(1,k,1)-cc(1,k,3)
-
1075  ch(1,3,k) = cc(1,k,4)-cc(1,k,2)
-
1076  101 CONTINUE
-
1077  IF (ido.LT.2) THEN
-
1078  GO TO 107
-
1079  ELSEIF (ido.EQ.2) THEN
-
1080  GO TO 105
-
1081  ELSE
-
1082  GO TO 102
-
1083  ENDIF
-
1084  102 idp2 = ido+2
-
1085 !OCL NOVREC
-
1086  DO 104 k=1,l1
-
1087  DO 103 i=3,ido,2
-
1088  ic = idp2-i
-
1089  cr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
-
1090  ci2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
-
1091  cr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
-
1092  ci3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
-
1093  cr4 = wa3(i-2)*cc(i-1,k,4)+wa3(i-1)*cc(i,k,4)
-
1094  ci4 = wa3(i-2)*cc(i,k,4)-wa3(i-1)*cc(i-1,k,4)
-
1095  tr1 = cr2+cr4
-
1096  tr4 = cr4-cr2
-
1097  ti1 = ci2+ci4
-
1098  ti4 = ci2-ci4
-
1099  ti2 = cc(i,k,1)+ci3
-
1100  ti3 = cc(i,k,1)-ci3
-
1101  tr2 = cc(i-1,k,1)+cr3
-
1102  tr3 = cc(i-1,k,1)-cr3
-
1103  ch(i-1,1,k) = tr1+tr2
-
1104  ch(ic-1,4,k) = tr2-tr1
-
1105  ch(i,1,k) = ti1+ti2
-
1106  ch(ic,4,k) = ti1-ti2
-
1107  ch(i-1,3,k) = ti4+tr3
-
1108  ch(ic-1,2,k) = tr3-ti4
-
1109  ch(i,3,k) = tr4+ti3
-
1110  ch(ic,2,k) = tr4-ti3
-
1111  103 CONTINUE
-
1112  104 CONTINUE
-
1113  IF (mod(ido,2) .EQ. 1) RETURN
-
1114  105 CONTINUE
-
1115  DO 106 k=1,l1
-
1116  ti1 = -hsqt2*(cc(ido,k,2)+cc(ido,k,4))
-
1117  tr1 = hsqt2*(cc(ido,k,2)-cc(ido,k,4))
-
1118  ch(ido,1,k) = tr1+cc(ido,k,1)
-
1119  ch(ido,3,k) = cc(ido,k,1)-tr1
-
1120  ch(1,2,k) = ti1-cc(ido,k,3)
-
1121  ch(1,4,k) = ti1+cc(ido,k,3)
-
1122  106 CONTINUE
-
1123  107 RETURN
-
1124  END
-
1125 
-
1126 C> RADF5
-
1127 C>
-
1128 C> @param IDO
-
1129 C> @param L1
-
1130 C> @param CC
-
1131 C> @param CH
-
1132 C> @param WA1
-
1133 C> @param WA2
-
1134 C> @param WA3
-
1135 C> @param WA4
-
1136 C>
-
1137 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
1138  SUBROUTINE radf5 (IDO,L1,CC,CH,WA1,WA2,WA3,WA4)
-
1139  dimension cc(ido,l1,5) ,ch(ido,5,l1) ,
-
1140  1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*)
-
1141  DATA tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154,
-
1142  1-.809016994374947,.587785252292473/
-
1143  DO 101 k=1,l1
-
1144  cr2 = cc(1,k,5)+cc(1,k,2)
-
1145  ci5 = cc(1,k,5)-cc(1,k,2)
-
1146  cr3 = cc(1,k,4)+cc(1,k,3)
-
1147  ci4 = cc(1,k,4)-cc(1,k,3)
-
1148  ch(1,1,k) = cc(1,k,1)+cr2+cr3
-
1149  ch(ido,2,k) = cc(1,k,1)+tr11*cr2+tr12*cr3
-
1150  ch(1,3,k) = ti11*ci5+ti12*ci4
-
1151  ch(ido,4,k) = cc(1,k,1)+tr12*cr2+tr11*cr3
-
1152  ch(1,5,k) = ti12*ci5-ti11*ci4
-
1153  101 CONTINUE
-
1154  IF (ido .EQ. 1) RETURN
-
1155  idp2 = ido+2
-
1156  DO 103 k=1,l1
-
1157  DO 102 i=3,ido,2
-
1158  ic = idp2-i
-
1159  dr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
-
1160  di2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
-
1161  dr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
-
1162  di3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
-
1163  dr4 = wa3(i-2)*cc(i-1,k,4)+wa3(i-1)*cc(i,k,4)
-
1164  di4 = wa3(i-2)*cc(i,k,4)-wa3(i-1)*cc(i-1,k,4)
-
1165  dr5 = wa4(i-2)*cc(i-1,k,5)+wa4(i-1)*cc(i,k,5)
-
1166  di5 = wa4(i-2)*cc(i,k,5)-wa4(i-1)*cc(i-1,k,5)
-
1167  cr2 = dr2+dr5
-
1168  ci5 = dr5-dr2
-
1169  cr5 = di2-di5
-
1170  ci2 = di2+di5
-
1171  cr3 = dr3+dr4
-
1172  ci4 = dr4-dr3
-
1173  cr4 = di3-di4
-
1174  ci3 = di3+di4
-
1175  ch(i-1,1,k) = cc(i-1,k,1)+cr2+cr3
-
1176  ch(i,1,k) = cc(i,k,1)+ci2+ci3
-
1177  tr2 = cc(i-1,k,1)+tr11*cr2+tr12*cr3
-
1178  ti2 = cc(i,k,1)+tr11*ci2+tr12*ci3
-
1179  tr3 = cc(i-1,k,1)+tr12*cr2+tr11*cr3
-
1180  ti3 = cc(i,k,1)+tr12*ci2+tr11*ci3
-
1181  tr5 = ti11*cr5+ti12*cr4
-
1182  ti5 = ti11*ci5+ti12*ci4
-
1183  tr4 = ti12*cr5-ti11*cr4
-
1184  ti4 = ti12*ci5-ti11*ci4
-
1185  ch(i-1,3,k) = tr2+tr5
-
1186  ch(ic-1,2,k) = tr2-tr5
-
1187  ch(i,3,k) = ti2+ti5
-
1188  ch(ic,2,k) = ti5-ti2
-
1189  ch(i-1,5,k) = tr3+tr4
-
1190  ch(ic-1,4,k) = tr3-tr4
-
1191  ch(i,5,k) = ti3+ti4
-
1192  ch(ic,4,k) = ti4-ti3
-
1193  102 CONTINUE
-
1194  103 CONTINUE
-
1195  RETURN
-
1196  END
-
1197 
-
1198 C> RADFG
-
1199 C>
-
1200 C> @param IDO
-
1201 C> @param IP
-
1202 C> @param L1
-
1203 C> @param IDL1
-
1204 C> @param CC
-
1205 C> @param C1
-
1206 C> @param C2
-
1207 C> @param CH
-
1208 C> @param CH2
-
1209 C> @param WA
-
1210 C>
-
1211 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
-
1212  SUBROUTINE radfg (IDO,IP,L1,IDL1,CC,C1,C2,CH,CH2,WA)
-
1213  dimension ch(ido,l1,ip) ,cc(ido,ip,l1) ,
-
1214  1 c1(ido,l1,ip) ,c2(idl1,ip),
-
1215  2 ch2(idl1,ip) ,wa(*)
-
1216  DATA tpi/6.28318530717959/
-
1217  arg = tpi/float(ip)
-
1218  dcp = cos(arg)
-
1219  dsp = sin(arg)
-
1220  ipph = (ip+1)/2
-
1221  ipp2 = ip+2
-
1222  idp2 = ido+2
-
1223  nbd = (ido-1)/2
-
1224  IF (ido .EQ. 1) GO TO 119
-
1225  DO 101 ik=1,idl1
-
1226  ch2(ik,1) = c2(ik,1)
-
1227  101 CONTINUE
-
1228  DO 103 j=2,ip
-
1229  DO 102 k=1,l1
-
1230  ch(1,k,j) = c1(1,k,j)
-
1231  102 CONTINUE
-
1232  103 CONTINUE
-
1233  IF (nbd .GT. l1) GO TO 107
-
1234  is = -ido
-
1235  DO 106 j=2,ip
-
1236  is = is+ido
-
1237  idij = is
-
1238  DO 105 i=3,ido,2
-
1239  idij = idij+2
-
1240  DO 104 k=1,l1
-
1241  ch(i-1,k,j) = wa(idij-1)*c1(i-1,k,j)+wa(idij)*c1(i,k,j)
-
1242  ch(i,k,j) = wa(idij-1)*c1(i,k,j)-wa(idij)*c1(i-1,k,j)
-
1243  104 CONTINUE
-
1244  105 CONTINUE
-
1245  106 CONTINUE
-
1246  GO TO 111
-
1247  107 is = -ido
-
1248  DO 110 j=2,ip
-
1249  is = is+ido
-
1250  DO 109 k=1,l1
-
1251  idij = is
-
1252  DO 108 i=3,ido,2
-
1253  idij = idij+2
-
1254  ch(i-1,k,j) = wa(idij-1)*c1(i-1,k,j)+wa(idij)*c1(i,k,j)
-
1255  ch(i,k,j) = wa(idij-1)*c1(i,k,j)-wa(idij)*c1(i-1,k,j)
-
1256  108 CONTINUE
-
1257  109 CONTINUE
-
1258  110 CONTINUE
-
1259  111 IF (nbd .LT. l1) GO TO 115
-
1260  DO 114 j=2,ipph
-
1261  jc = ipp2-j
-
1262  DO 113 k=1,l1
-
1263  DO 112 i=3,ido,2
-
1264  c1(i-1,k,j) = ch(i-1,k,j)+ch(i-1,k,jc)
-
1265  c1(i-1,k,jc) = ch(i,k,j)-ch(i,k,jc)
-
1266  c1(i,k,j) = ch(i,k,j)+ch(i,k,jc)
-
1267  c1(i,k,jc) = ch(i-1,k,jc)-ch(i-1,k,j)
-
1268  112 CONTINUE
-
1269  113 CONTINUE
-
1270  114 CONTINUE
-
1271  GO TO 121
-
1272  115 DO 118 j=2,ipph
-
1273  jc = ipp2-j
-
1274  DO 117 i=3,ido,2
-
1275  DO 116 k=1,l1
-
1276  c1(i-1,k,j) = ch(i-1,k,j)+ch(i-1,k,jc)
-
1277  c1(i-1,k,jc) = ch(i,k,j)-ch(i,k,jc)
-
1278  c1(i,k,j) = ch(i,k,j)+ch(i,k,jc)
-
1279  c1(i,k,jc) = ch(i-1,k,jc)-ch(i-1,k,j)
-
1280  116 CONTINUE
-
1281  117 CONTINUE
-
1282  118 CONTINUE
-
1283  GO TO 121
-
1284  119 DO 120 ik=1,idl1
-
1285  c2(ik,1) = ch2(ik,1)
-
1286  120 CONTINUE
-
1287  121 DO 123 j=2,ipph
-
1288  jc = ipp2-j
-
1289  DO 122 k=1,l1
-
1290  c1(1,k,j) = ch(1,k,j)+ch(1,k,jc)
-
1291  c1(1,k,jc) = ch(1,k,jc)-ch(1,k,j)
-
1292  122 CONTINUE
-
1293  123 CONTINUE
-
1294 C
-
1295  ar1 = 1.
-
1296  ai1 = 0.
-
1297  DO 127 l=2,ipph
-
1298  lc = ipp2-l
-
1299  ar1h = dcp*ar1-dsp*ai1
-
1300  ai1 = dcp*ai1+dsp*ar1
-
1301  ar1 = ar1h
-
1302  DO 124 ik=1,idl1
-
1303  ch2(ik,l) = c2(ik,1)+ar1*c2(ik,2)
-
1304  ch2(ik,lc) = ai1*c2(ik,ip)
-
1305  124 CONTINUE
-
1306  dc2 = ar1
-
1307  ds2 = ai1
-
1308  ar2 = ar1
-
1309  ai2 = ai1
-
1310  DO 126 j=3,ipph
-
1311  jc = ipp2-j
-
1312  ar2h = dc2*ar2-ds2*ai2
-
1313  ai2 = dc2*ai2+ds2*ar2
-
1314  ar2 = ar2h
-
1315  DO 125 ik=1,idl1
-
1316  ch2(ik,l) = ch2(ik,l)+ar2*c2(ik,j)
-
1317  ch2(ik,lc) = ch2(ik,lc)+ai2*c2(ik,jc)
-
1318  125 CONTINUE
-
1319  126 CONTINUE
-
1320  127 CONTINUE
-
1321  DO 129 j=2,ipph
-
1322  DO 128 ik=1,idl1
-
1323  ch2(ik,1) = ch2(ik,1)+c2(ik,j)
-
1324  128 CONTINUE
-
1325  129 CONTINUE
-
1326 C
-
1327  IF (ido .LT. l1) GO TO 132
-
1328  DO 131 k=1,l1
-
1329  DO 130 i=1,ido
-
1330  cc(i,1,k) = ch(i,k,1)
-
1331  130 CONTINUE
-
1332  131 CONTINUE
-
1333  GO TO 135
-
1334  132 DO 134 i=1,ido
-
1335  DO 133 k=1,l1
-
1336  cc(i,1,k) = ch(i,k,1)
-
1337  133 CONTINUE
-
1338  134 CONTINUE
-
1339  135 DO 137 j=2,ipph
-
1340  jc = ipp2-j
-
1341  j2 = j+j
-
1342  DO 136 k=1,l1
-
1343  cc(ido,j2-2,k) = ch(1,k,j)
-
1344  cc(1,j2-1,k) = ch(1,k,jc)
-
1345  136 CONTINUE
-
1346  137 CONTINUE
-
1347  IF (ido .EQ. 1) RETURN
-
1348  IF (nbd .LT. l1) GO TO 141
-
1349  DO 140 j=2,ipph
-
1350  jc = ipp2-j
-
1351  j2 = j+j
-
1352  DO 139 k=1,l1
-
1353  DO 138 i=3,ido,2
-
1354  ic = idp2-i
-
1355  cc(i-1,j2-1,k) = ch(i-1,k,j)+ch(i-1,k,jc)
-
1356  cc(ic-1,j2-2,k) = ch(i-1,k,j)-ch(i-1,k,jc)
-
1357  cc(i,j2-1,k) = ch(i,k,j)+ch(i,k,jc)
-
1358  cc(ic,j2-2,k) = ch(i,k,jc)-ch(i,k,j)
-
1359  138 CONTINUE
-
1360  139 CONTINUE
-
1361  140 CONTINUE
-
1362  RETURN
-
1363  141 DO 144 j=2,ipph
-
1364  jc = ipp2-j
-
1365  j2 = j+j
-
1366  DO 143 i=3,ido,2
-
1367  ic = idp2-i
-
1368  DO 142 k=1,l1
-
1369  cc(i-1,j2-1,k) = ch(i-1,k,j)+ch(i-1,k,jc)
-
1370  cc(ic-1,j2-2,k) = ch(i-1,k,j)-ch(i-1,k,jc)
-
1371  cc(i,j2-1,k) = ch(i,k,j)+ch(i,k,jc)
-
1372  cc(ic,j2-2,k) = ch(i,k,jc)-ch(i,k,j)
-
1373  142 CONTINUE
-
1374  143 CONTINUE
-
1375  144 CONTINUE
-
1376  RETURN
-
1377  END
-
subroutine radb5(IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
RADB5.
Definition: fftpack.F:719
-
subroutine scfft(isign, n, scale, x, y, table, work, isys)
scfft
Definition: fftpack.F:258
-
subroutine radb4(IDO, L1, CC, CH, WA1, WA2, WA3)
RADB4.
Definition: fftpack.F:642
-
subroutine rffti(N, WSAVE)
RFFTI.
Definition: fftpack.F:318
-
subroutine radf3(IDO, L1, CC, CH, WA1, WA2)
RADF3.
Definition: fftpack.F:1019
-
subroutine drcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
drcft
Definition: fftpack.F:164
-
subroutine radb3(IDO, L1, CC, CH, WA1, WA2)
RADB3
Definition: fftpack.F:592
-
subroutine radf5(IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
RADF5.
Definition: fftpack.F:1139
-
subroutine radf2(IDO, L1, CC, CH, WA1)
RADBG.
Definition: fftpack.F:975
-
subroutine dcrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
dcrft
Definition: fftpack.F:34
-
subroutine rfftb(N, R, WSAVE)
RFFTB.
Definition: fftpack.F:305
-
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition: fftpack.F:82
-
subroutine rfftf1(N, C, CH, WA, IFAC)
RFFTF1.
Definition: fftpack.F:403
-
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition: fftpack.F:215
-
subroutine csfft(isign, n, scale, x, y, table, work, isys)
csfft
Definition: fftpack.F:121
-
subroutine radfg(IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
RADFG.
Definition: fftpack.F:1213
-
subroutine rffti1(N, WA, IFAC)
RFFTI1.
Definition: fftpack.F:470
-
subroutine radb2(IDO, L1, CC, CH, WA1)
RADB2.
Definition: fftpack.F:547
-
subroutine radf4(IDO, L1, CC, CH, WA1, WA2, WA3)
RADF4.
Definition: fftpack.F:1066
-
subroutine radbg(IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
RADBG.
Definition: fftpack.F:797
-
subroutine rfftb1(N, C, CH, WA, IFAC)
RFFTB1.
Definition: fftpack.F:334
-
subroutine rfftf(N, R, WSAVE)
RFFTF.
Definition: fftpack.F:291
+Go to the documentation of this file.
1C> @file
+
2C> @brief A concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code.
+
3C>
+
4C> FFTPACK is a package of Fortran subprograms for the fast Fourier
+
5C> transform of periodic and other symmetric sequences. It includes
+
6C> complex, real, sine, cosine, and quarter-wave transforms.
+
7C>
+
8C>Reference:
+
9C>- P.N. Swarztrauber, Vectorizing the FFTs, in Parallel Computations
+
10C>(G. Rodrigue, ed.), Academic Press, 1982, pp. 51--83.
+
11C>
+
12C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
13
+
14C> dcrft
+
15C>
+
16C> @param init
+
17C> @param x
+
18C> @param ldx
+
19C> @param y
+
20C> @param ldy
+
21C> @param n
+
22C> @param m
+
23C> @param isign
+
24C> @param scale
+
25C> @param table
+
26C> @param n1
+
27C> @param wrk
+
28C> @param n2
+
29C> @param z
+
30C> @param nz
+
31C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
32 SUBROUTINE dcrft(init,x,ldx,y,ldy,n,m,isign,scale,
+
33 & table,n1,wrk,n2,z,nz)
+
34
+
35 implicit none
+
36 integer init,ldx,ldy,n,m,isign,n1,n2,i,j
+
37 real x(2*ldx,*),y(ldy,*),scale,table(44002),wrk(*)
+
38 real, optional :: z
+
39 integer, optional :: nz
+
40
+
41 IF (init.ne.0) THEN
+
42 CALL rffti(n,table)
+
43 ELSE
+
44!OCL NOVREC
+
45 DO j=1,m
+
46 y(1,j)=x(1,j)
+
47 DO i=2,n
+
48 y(i,j)=x(i+1,j)
+
49 ENDDO
+
50 CALL rfftb(n,y(1,j),table)
+
51 DO i=1,n
+
52 y(i,j)=scale*y(i,j)
+
53 ENDDO
+
54 ENDDO
+
55 ENDIF
+
56
+
57 RETURN
+
+
58 END
+
59
+
60C> scrft
+
61C>
+
62C> @param init
+
63C> @param x
+
64C> @param ldx
+
65C> @param y
+
66C> @param ldy
+
67C> @param n
+
68C> @param m
+
69C> @param isign
+
70C> @param scale
+
71C> @param table
+
72C> @param n1
+
73C> @param wrk
+
74C> @param n2
+
75C> @param z
+
76C> @param nz
+
77C>
+
78C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
79
+
+
80 SUBROUTINE scrft(init,x,ldx,y,ldy,n,m,isign,scale,
+
81 & table,n1,wrk,n2,z,nz)
+
82
+
83 implicit none
+
84 integer init,ldx,ldy,n,m,isign,n1,n2,i,j
+
85 real x(2*ldx,*),y(ldy,*),scale,table(44002),wrk(*)
+
86 real, optional :: z
+
87 integer, optional :: nz
+
88
+
89 IF (init.ne.0) THEN
+
90 CALL rffti(n,table)
+
91 ELSE
+
92!OCL NOVREC
+
93 DO j=1,m
+
94 y(1,j)=x(1,j)
+
95 DO i=2,n
+
96 y(i,j)=x(i+1,j)
+
97 ENDDO
+
98 CALL rfftb(n,y(1,j),table)
+
99 DO i=1,n
+
100 y(i,j)=scale*y(i,j)
+
101 ENDDO
+
102 ENDDO
+
103 ENDIF
+
104
+
105 RETURN
+
+
106 END
+
107
+
108C> csfft
+
109C>
+
110C> @param isign
+
111C> @param n
+
112C> @param scale
+
113C> @param x
+
114C> @param y
+
115C> @param table
+
116C> @param work
+
117C> @param isys
+
118C>
+
119C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
120 SUBROUTINE csfft(isign,n,scale,x,y,table,work,isys)
+
121
+
122 implicit none
+
123 integer isign,n,isys,i
+
124 real scale,x(*),y(*),table(*),work(*)
+
125
+
126 IF (isign.eq.0) THEN
+
127 CALL rffti(n,table)
+
128 ENDIF
+
129 IF (isign.eq.1) THEN
+
130 y(1)=x(1)
+
131 DO i=2,n
+
132 y(i)=x(i+1)
+
133 ENDDO
+
134 CALL rfftb(n,y,table)
+
135 DO i=1,n
+
136 y(i)=scale*y(i)
+
137 ENDDO
+
138 ENDIF
+
139
+
140 RETURN
+
+
141 END
+
142
+
143C> drcft
+
144C>
+
145C> @param init
+
146C> @param x
+
147C> @param ldx
+
148C> @param y
+
149C> @param ldy
+
150C> @param n
+
151C> @param m
+
152C> @param isign
+
153C> @param scale
+
154C> @param table
+
155C> @param n1
+
156C> @param wrk
+
157C> @param n2
+
158C> @param z
+
159C> @param nz
+
160C>
+
161C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
162 SUBROUTINE drcft(init,x,ldx,y,ldy,n,m,isign,scale,
+
163 & table,n1,wrk,n2,z,nz)
+
164
+
165 implicit none
+
166 integer init,ldx,ldy,n,m,isign,n1,n2,i,j
+
167 real x(ldx,*),y(2*ldy,*),scale,table(44002),wrk(*)
+
168 real, optional :: z
+
169 integer, optional :: nz
+
170
+
171 IF (init.ne.0) THEN
+
172 CALL rffti(n,table)
+
173 ELSE
+
174 DO j=1,m
+
175 DO i=1,n
+
176 y(i,j)=x(i,j)
+
177 ENDDO
+
178 CALL rfftf(n,y(1,j),table)
+
179 DO i=1,n
+
180 y(i,j)=scale*y(i,j)
+
181 ENDDO
+
182 DO i=n,2,-1
+
183 y(i+1,j)=y(i,j)
+
184 ENDDO
+
185 y(2,j)=0.
+
186C 01/17/2013 vvvvvvvvvvvvv E.Mirvis added ver 2.0.1 by S.Moorthi request. No +|- demo.
+
187 y(n+2,j) = 0.
+
188 ENDDO
+
189 ENDIF
+
190
+
191 RETURN
+
+
192 END
+
193
+
194C> srcft
+
195C>
+
196C> @param init
+
197C> @param x
+
198C> @param ldx
+
199C> @param y
+
200C> @param ldy
+
201C> @param n
+
202C> @param m
+
203C> @param isign
+
204C> @param scale
+
205C> @param table
+
206C> @param n1
+
207C> @param wrk
+
208C> @param n2
+
209C> @param z
+
210C> @param nz
+
211C>
+
212C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
213 SUBROUTINE srcft(init,x,ldx,y,ldy,n,m,isign,scale,
+
214 & table,n1,wrk,n2,z,nz)
+
215
+
216 implicit none
+
217 integer init,ldx,ldy,n,m,isign,n1,n2,i,j
+
218 real x(ldx,*),y(2*ldy,*),scale,table(44002),wrk(*)
+
219 real, optional :: z
+
220 integer, optional :: nz
+
221
+
222 IF (init.ne.0) THEN
+
223 CALL rffti(n,table)
+
224 ELSE
+
225 DO j=1,m
+
226 DO i=1,n
+
227 y(i,j)=x(i,j)
+
228 ENDDO
+
229 CALL rfftf(n,y(1,j),table)
+
230 DO i=1,n
+
231 y(i,j)=scale*y(i,j)
+
232 ENDDO
+
233 DO i=n,2,-1
+
234 y(i+1,j)=y(i,j)
+
235 ENDDO
+
236 y(2,j)=0.
+
237 y(n+2,j) = 0.
+
238C 01/17/2013 ^^^^^^^^^^E.Mirvis added ver 2.0.1 by S.Moorthi request. No +|- demo.
+
239 ENDDO
+
240 ENDIF
+
241
+
242 RETURN
+
+
243 END
+
244
+
245C> scfft
+
246C>
+
247C> @param isign
+
248C> @param n
+
249C> @param scale
+
250C> @param x
+
251C> @param y
+
252C> @param table
+
253C> @param work
+
254C> @param isys
+
255C>
+
256C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
257 SUBROUTINE scfft(isign,n,scale,x,y,table,work,isys)
+
258
+
259 implicit none
+
260 integer isign,n,isys,i
+
261 real scale,x(*),y(*),table(*),work(*)
+
262
+
263 IF (isign.eq.0) THEN
+
264 CALL rffti(n,table)
+
265 ENDIF
+
266 IF (isign.eq.-1) THEN
+
267 DO i=1,n
+
268 y(i)=x(i)
+
269 ENDDO
+
270 CALL rfftf(n,y,table)
+
271 DO i=1,n
+
272 y(i)=scale*y(i)
+
273 ENDDO
+
274 DO i=n,2,-1
+
275 y(i+1)=y(i)
+
276 ENDDO
+
277 y(2)=0.
+
278 ENDIF
+
279
+
280 RETURN
+
+
281 END
+
282
+
283C> RFFTF
+
284C>
+
285C> @param N
+
286C> @param R
+
287C> @param WSAVE
+
288C>
+
289C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
290 SUBROUTINE rfftf (N,R,WSAVE)
+
291 dimension r(*) ,wsave(*)
+
292 IF (n .EQ. 1) RETURN
+
293 CALL rfftf1 (n,r,wsave,wsave(n+1),wsave(2*n+1))
+
294 RETURN
+
+
295 END
+
296
+
297C> RFFTB
+
298C>
+
299C> @param N
+
300C> @param R
+
301C> @param WSAVE
+
302C>
+
303C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
304 SUBROUTINE rfftb (N,R,WSAVE)
+
305 dimension r(*) ,wsave(*)
+
306 IF (n .EQ. 1) RETURN
+
307 CALL rfftb1 (n,r,wsave,wsave(n+1),wsave(2*n+1))
+
308 RETURN
+
+
309 END
+
310
+
311C> RFFTI
+
312C>
+
313C> @param N
+
314C> @param WSAVE
+
315C>
+
316C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
317 SUBROUTINE rffti (N,WSAVE)
+
318 dimension wsave(*)
+
319 IF (n .EQ. 1) RETURN
+
320 CALL rffti1 (n,wsave(n+1),wsave(2*n+1))
+
321 RETURN
+
+
322 END
+
323
+
324C> RFFTB1
+
325C>
+
326C> @param N
+
327C> @param C
+
328C> @param CH
+
329C> @param WA
+
330C> @param IFAC
+
331C>
+
332C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
333 SUBROUTINE rfftb1 (N,C,CH,WA,IFAC)
+
334 REAL CH(*) ,C(*) ,WA(*) ,IFAC(*)
+
335 NF = int(ifac(2))
+
336 na = 0
+
337 l1 = 1
+
338 iw = 1
+
339 DO 116 k1=1,nf
+
340 ip = int(ifac(k1+2))
+
341 l2 = ip*l1
+
342 ido = n/l2
+
343 idl1 = ido*l1
+
344 IF (ip .NE. 4) GO TO 103
+
345 ix2 = iw+ido
+
346 ix3 = ix2+ido
+
347 IF (na .NE. 0) GO TO 101
+
348 CALL radb4 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3))
+
349 GO TO 102
+
350 101 CALL radb4 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3))
+
351 102 na = 1-na
+
352 GO TO 115
+
353 103 IF (ip .NE. 2) GO TO 106
+
354 IF (na .NE. 0) GO TO 104
+
355 CALL radb2 (ido,l1,c,ch,wa(iw))
+
356 GO TO 105
+
357 104 CALL radb2 (ido,l1,ch,c,wa(iw))
+
358 105 na = 1-na
+
359 GO TO 115
+
360 106 IF (ip .NE. 3) GO TO 109
+
361 ix2 = iw+ido
+
362 IF (na .NE. 0) GO TO 107
+
363 CALL radb3 (ido,l1,c,ch,wa(iw),wa(ix2))
+
364 GO TO 108
+
365 107 CALL radb3 (ido,l1,ch,c,wa(iw),wa(ix2))
+
366 108 na = 1-na
+
367 GO TO 115
+
368 109 IF (ip .NE. 5) GO TO 112
+
369 ix2 = iw+ido
+
370 ix3 = ix2+ido
+
371 ix4 = ix3+ido
+
372 IF (na .NE. 0) GO TO 110
+
373 CALL radb5 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4))
+
374 GO TO 111
+
375 110 CALL radb5 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4))
+
376 111 na = 1-na
+
377 GO TO 115
+
378 112 IF (na .NE. 0) GO TO 113
+
379 CALL radbg (ido,ip,l1,idl1,c,c,c,ch,ch,wa(iw))
+
380 GO TO 114
+
381 113 CALL radbg (ido,ip,l1,idl1,ch,ch,ch,c,c,wa(iw))
+
382 114 IF (ido .EQ. 1) na = 1-na
+
383 115 l1 = l2
+
384 iw = iw+(ip-1)*ido
+
385 116 CONTINUE
+
386 IF (na .EQ. 0) RETURN
+
387 DO 117 i=1,n
+
388 c(i) = ch(i)
+
389 117 CONTINUE
+
390 RETURN
+
+
391 END
+
392
+
393C> RFFTF1
+
394C>
+
395C> @param N
+
396C> @param C
+
397C> @param CH
+
398C> @param WA
+
399C> @param IFAC
+
400C>
+
401C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
402 SUBROUTINE rfftf1 (N,C,CH,WA,IFAC)
+
403 REAL CH(*) ,C(*) ,WA(*) ,IFAC(*)
+
404 NF = int(ifac(2))
+
405 na = 1
+
406 l2 = n
+
407 iw = n
+
408 DO 111 k1=1,nf
+
409 kh = nf-k1
+
410 ip = int(ifac(kh+3))
+
411 l1 = l2/ip
+
412 ido = n/l2
+
413 idl1 = ido*l1
+
414 iw = iw-(ip-1)*ido
+
415 na = 1-na
+
416 IF (ip .NE. 4) GO TO 102
+
417 ix2 = iw+ido
+
418 ix3 = ix2+ido
+
419 IF (na .NE. 0) GO TO 101
+
420 CALL radf4 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3))
+
421 GO TO 110
+
422 101 CALL radf4 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3))
+
423 GO TO 110
+
424 102 IF (ip .NE. 2) GO TO 104
+
425 IF (na .NE. 0) GO TO 103
+
426 CALL radf2 (ido,l1,c,ch,wa(iw))
+
427 GO TO 110
+
428 103 CALL radf2 (ido,l1,ch,c,wa(iw))
+
429 GO TO 110
+
430 104 IF (ip .NE. 3) GO TO 106
+
431 ix2 = iw+ido
+
432 IF (na .NE. 0) GO TO 105
+
433 CALL radf3 (ido,l1,c,ch,wa(iw),wa(ix2))
+
434 GO TO 110
+
435 105 CALL radf3 (ido,l1,ch,c,wa(iw),wa(ix2))
+
436 GO TO 110
+
437 106 IF (ip .NE. 5) GO TO 108
+
438 ix2 = iw+ido
+
439 ix3 = ix2+ido
+
440 ix4 = ix3+ido
+
441 IF (na .NE. 0) GO TO 107
+
442 CALL radf5 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4))
+
443 GO TO 110
+
444 107 CALL radf5 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4))
+
445 GO TO 110
+
446 108 IF (ido .EQ. 1) na = 1-na
+
447 IF (na .NE. 0) GO TO 109
+
448 CALL radfg (ido,ip,l1,idl1,c,c,c,ch,ch,wa(iw))
+
449 na = 1
+
450 GO TO 110
+
451 109 CALL radfg (ido,ip,l1,idl1,ch,ch,ch,c,c,wa(iw))
+
452 na = 0
+
453 110 l2 = l1
+
454 111 CONTINUE
+
455 IF (na .EQ. 1) RETURN
+
456 DO 112 i=1,n
+
457 c(i) = ch(i)
+
458 112 CONTINUE
+
459 RETURN
+
+
460 END
+
461
+
462C> RFFTI1
+
463C>
+
464C> @param N
+
465C> @param WA
+
466C> @param IFAC
+
467C>
+
468C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
469 SUBROUTINE rffti1 (N,WA,IFAC)
+
470 REAL WA(*) ,IFAC(*) ,NTRYH(4)
+
471 DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/4,2,3,5/
+
472 NL = n
+
473 nf = 0
+
474 j = 0
+
475 101 j = j+1
+
476 IF ((j-4).LE.0) THEN
+
477 GO TO 102
+
478 ELSE
+
479 GO TO 103
+
480 ENDIF
+
481 102 ntry = int(ntryh(j))
+
482 GO TO 104
+
483 103 ntry = ntry+2
+
484 104 nq = nl/ntry
+
485 nr = nl-ntry*nq
+
486 IF (nr.EQ.0) THEN
+
487 GO TO 105
+
488 ELSE
+
489 GO TO 101
+
490 ENDIF
+
491 105 nf = nf+1
+
492 ifac(nf+2) = ntry
+
493 nl = nq
+
494 IF (ntry .NE. 2) GO TO 107
+
495 IF (nf .EQ. 1) GO TO 107
+
496 DO 106 i=2,nf
+
497 ib = nf-i+2
+
498 ifac(ib+2) = ifac(ib+1)
+
499 106 CONTINUE
+
500 ifac(3) = 2
+
501 107 IF (nl .NE. 1) GO TO 104
+
502 ifac(1) = n
+
503 ifac(2) = nf
+
504 tpi = 6.28318530717959
+
505 argh = tpi/float(n)
+
506 is = 0
+
507 nfm1 = nf-1
+
508 l1 = 1
+
509 IF (nfm1 .EQ. 0) RETURN
+
510!OCL NOVREC
+
511 DO 110 k1=1,nfm1
+
512 ip = int(ifac(k1+2))
+
513 ld = 0
+
514 l2 = l1*ip
+
515 ido = n/l2
+
516 ipm = ip-1
+
517 DO 109 j=1,ipm
+
518 ld = ld+l1
+
519 i = is
+
520 argld = float(ld)*argh
+
521 fi = 0
+
522!OCL SCALAR
+
523 DO 108 ii=3,ido,2
+
524 i = i+2
+
525 fi = fi+1
+
526 arg = fi*argld
+
527 wa(i-1) = cos(arg)
+
528 wa(i) = sin(arg)
+
529 108 CONTINUE
+
530 is = is+ido
+
531 109 CONTINUE
+
532 l1 = l2
+
533 110 CONTINUE
+
534 RETURN
+
+
535 END
+
536
+
537C> RADB2
+
538C>
+
539C> @param IDO
+
540C> @param L1
+
541C> @param CC
+
542C> @param CH
+
543C> @param WA1
+
544C>
+
545C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
546 SUBROUTINE radb2 (IDO,L1,CC,CH,WA1)
+
547 dimension cc(ido,2,l1) ,ch(ido,l1,2) ,
+
548 1 wa1(*)
+
549 DO 101 k=1,l1
+
550 ch(1,k,1) = cc(1,1,k)+cc(ido,2,k)
+
551 ch(1,k,2) = cc(1,1,k)-cc(ido,2,k)
+
552 101 CONTINUE
+
553 IF (ido.LT.2) THEN
+
554 GO TO 107
+
555 ELSEIF (ido.EQ.2) THEN
+
556 GO TO 105
+
557 ELSE
+
558 GO TO 102
+
559 ENDIF
+
560 102 idp2 = ido+2
+
561!OCL NOVREC
+
562 DO 104 k=1,l1
+
563 DO 103 i=3,ido,2
+
564 ic = idp2-i
+
565 ch(i-1,k,1) = cc(i-1,1,k)+cc(ic-1,2,k)
+
566 tr2 = cc(i-1,1,k)-cc(ic-1,2,k)
+
567 ch(i,k,1) = cc(i,1,k)-cc(ic,2,k)
+
568 ti2 = cc(i,1,k)+cc(ic,2,k)
+
569 ch(i-1,k,2) = wa1(i-2)*tr2-wa1(i-1)*ti2
+
570 ch(i,k,2) = wa1(i-2)*ti2+wa1(i-1)*tr2
+
571 103 CONTINUE
+
572 104 CONTINUE
+
573 IF (mod(ido,2) .EQ. 1) RETURN
+
574 105 DO 106 k=1,l1
+
575 ch(ido,k,1) = cc(ido,1,k)+cc(ido,1,k)
+
576 ch(ido,k,2) = -(cc(1,2,k)+cc(1,2,k))
+
577 106 CONTINUE
+
578 107 RETURN
+
+
579 END
+
580
+
581C> RADB3
+
582C>
+
583C> @param IDO
+
584C> @param L1
+
585C> @param CC
+
586C> @param CH
+
587C> @param WA1
+
588C> @param WA2
+
589C>
+
590C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
591 SUBROUTINE radb3 (IDO,L1,CC,CH,WA1,WA2)
+
592 dimension cc(ido,3,l1) ,ch(ido,l1,3) ,
+
593 1 wa1(*) ,wa2(*)
+
594 DATA taur,taui /-.5,.866025403784439/
+
595 DO 101 k=1,l1
+
596 tr2 = cc(ido,2,k)+cc(ido,2,k)
+
597 cr2 = cc(1,1,k)+taur*tr2
+
598 ch(1,k,1) = cc(1,1,k)+tr2
+
599 ci3 = taui*(cc(1,3,k)+cc(1,3,k))
+
600 ch(1,k,2) = cr2-ci3
+
601 ch(1,k,3) = cr2+ci3
+
602 101 CONTINUE
+
603 IF (ido .EQ. 1) RETURN
+
604 idp2 = ido+2
+
605!OCL NOVREC
+
606 DO 103 k=1,l1
+
607 DO 102 i=3,ido,2
+
608 ic = idp2-i
+
609 tr2 = cc(i-1,3,k)+cc(ic-1,2,k)
+
610 cr2 = cc(i-1,1,k)+taur*tr2
+
611 ch(i-1,k,1) = cc(i-1,1,k)+tr2
+
612 ti2 = cc(i,3,k)-cc(ic,2,k)
+
613 ci2 = cc(i,1,k)+taur*ti2
+
614 ch(i,k,1) = cc(i,1,k)+ti2
+
615 cr3 = taui*(cc(i-1,3,k)-cc(ic-1,2,k))
+
616 ci3 = taui*(cc(i,3,k)+cc(ic,2,k))
+
617 dr2 = cr2-ci3
+
618 dr3 = cr2+ci3
+
619 di2 = ci2+cr3
+
620 di3 = ci2-cr3
+
621 ch(i-1,k,2) = wa1(i-2)*dr2-wa1(i-1)*di2
+
622 ch(i,k,2) = wa1(i-2)*di2+wa1(i-1)*dr2
+
623 ch(i-1,k,3) = wa2(i-2)*dr3-wa2(i-1)*di3
+
624 ch(i,k,3) = wa2(i-2)*di3+wa2(i-1)*dr3
+
625 102 CONTINUE
+
626 103 CONTINUE
+
627 RETURN
+
+
628 END
+
629
+
630C> RADB4
+
631C>
+
632C> @param IDO
+
633C> @param L1
+
634C> @param CC
+
635C> @param CH
+
636C> @param WA1
+
637C> @param WA2
+
638C> @param WA3
+
639C>
+
640C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
641 SUBROUTINE radb4 (IDO,L1,CC,CH,WA1,WA2,WA3)
+
642 dimension cc(ido,4,l1) ,ch(ido,l1,4) ,
+
643 1 wa1(*) ,wa2(*) ,wa3(*)
+
644 DATA sqrt2 /1.414213562373095/
+
645 DO 101 k=1,l1
+
646 tr1 = cc(1,1,k)-cc(ido,4,k)
+
647 tr2 = cc(1,1,k)+cc(ido,4,k)
+
648 tr3 = cc(ido,2,k)+cc(ido,2,k)
+
649 tr4 = cc(1,3,k)+cc(1,3,k)
+
650 ch(1,k,1) = tr2+tr3
+
651 ch(1,k,2) = tr1-tr4
+
652 ch(1,k,3) = tr2-tr3
+
653 ch(1,k,4) = tr1+tr4
+
654 101 CONTINUE
+
655 IF (ido.LT.2) THEN
+
656 GO TO 107
+
657 ELSEIF (ido.EQ.2) THEN
+
658 GO TO 105
+
659 ELSE
+
660 GO TO 102
+
661 ENDIF
+
662 102 idp2 = ido+2
+
663!OCL NOVREC
+
664 DO 104 k=1,l1
+
665 DO 103 i=3,ido,2
+
666 ic = idp2-i
+
667 ti1 = cc(i,1,k)+cc(ic,4,k)
+
668 ti2 = cc(i,1,k)-cc(ic,4,k)
+
669 ti3 = cc(i,3,k)-cc(ic,2,k)
+
670 tr4 = cc(i,3,k)+cc(ic,2,k)
+
671 tr1 = cc(i-1,1,k)-cc(ic-1,4,k)
+
672 tr2 = cc(i-1,1,k)+cc(ic-1,4,k)
+
673 ti4 = cc(i-1,3,k)-cc(ic-1,2,k)
+
674 tr3 = cc(i-1,3,k)+cc(ic-1,2,k)
+
675 ch(i-1,k,1) = tr2+tr3
+
676 cr3 = tr2-tr3
+
677 ch(i,k,1) = ti2+ti3
+
678 ci3 = ti2-ti3
+
679 cr2 = tr1-tr4
+
680 cr4 = tr1+tr4
+
681 ci2 = ti1+ti4
+
682 ci4 = ti1-ti4
+
683 ch(i-1,k,2) = wa1(i-2)*cr2-wa1(i-1)*ci2
+
684 ch(i,k,2) = wa1(i-2)*ci2+wa1(i-1)*cr2
+
685 ch(i-1,k,3) = wa2(i-2)*cr3-wa2(i-1)*ci3
+
686 ch(i,k,3) = wa2(i-2)*ci3+wa2(i-1)*cr3
+
687 ch(i-1,k,4) = wa3(i-2)*cr4-wa3(i-1)*ci4
+
688 ch(i,k,4) = wa3(i-2)*ci4+wa3(i-1)*cr4
+
689 103 CONTINUE
+
690 104 CONTINUE
+
691 IF (mod(ido,2) .EQ. 1) RETURN
+
692 105 CONTINUE
+
693 DO 106 k=1,l1
+
694 ti1 = cc(1,2,k)+cc(1,4,k)
+
695 ti2 = cc(1,4,k)-cc(1,2,k)
+
696 tr1 = cc(ido,1,k)-cc(ido,3,k)
+
697 tr2 = cc(ido,1,k)+cc(ido,3,k)
+
698 ch(ido,k,1) = tr2+tr2
+
699 ch(ido,k,2) = sqrt2*(tr1-ti1)
+
700 ch(ido,k,3) = ti2+ti2
+
701 ch(ido,k,4) = -sqrt2*(tr1+ti1)
+
702 106 CONTINUE
+
703 107 RETURN
+
+
704 END
+
705
+
706C> RADB5
+
707C>
+
708C> @param IDO
+
709C> @param L1
+
710C> @param CC
+
711C> @param CH
+
712C> @param WA1
+
713C> @param WA2
+
714C> @param WA3
+
715C> @param WA4
+
716C>
+
717C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
718 SUBROUTINE radb5 (IDO,L1,CC,CH,WA1,WA2,WA3,WA4)
+
719 dimension cc(ido,5,l1) ,ch(ido,l1,5) ,
+
720 1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*)
+
721 DATA tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154,
+
722 1-.809016994374947,.587785252292473/
+
723 DO 101 k=1,l1
+
724 ti5 = cc(1,3,k)+cc(1,3,k)
+
725 ti4 = cc(1,5,k)+cc(1,5,k)
+
726 tr2 = cc(ido,2,k)+cc(ido,2,k)
+
727 tr3 = cc(ido,4,k)+cc(ido,4,k)
+
728 ch(1,k,1) = cc(1,1,k)+tr2+tr3
+
729 cr2 = cc(1,1,k)+tr11*tr2+tr12*tr3
+
730 cr3 = cc(1,1,k)+tr12*tr2+tr11*tr3
+
731 ci5 = ti11*ti5+ti12*ti4
+
732 ci4 = ti12*ti5-ti11*ti4
+
733 ch(1,k,2) = cr2-ci5
+
734 ch(1,k,3) = cr3-ci4
+
735 ch(1,k,4) = cr3+ci4
+
736 ch(1,k,5) = cr2+ci5
+
737 101 CONTINUE
+
738 IF (ido .EQ. 1) RETURN
+
739 idp2 = ido+2
+
740 DO 103 k=1,l1
+
741 DO 102 i=3,ido,2
+
742 ic = idp2-i
+
743 ti5 = cc(i,3,k)+cc(ic,2,k)
+
744 ti2 = cc(i,3,k)-cc(ic,2,k)
+
745 ti4 = cc(i,5,k)+cc(ic,4,k)
+
746 ti3 = cc(i,5,k)-cc(ic,4,k)
+
747 tr5 = cc(i-1,3,k)-cc(ic-1,2,k)
+
748 tr2 = cc(i-1,3,k)+cc(ic-1,2,k)
+
749 tr4 = cc(i-1,5,k)-cc(ic-1,4,k)
+
750 tr3 = cc(i-1,5,k)+cc(ic-1,4,k)
+
751 ch(i-1,k,1) = cc(i-1,1,k)+tr2+tr3
+
752 ch(i,k,1) = cc(i,1,k)+ti2+ti3
+
753 cr2 = cc(i-1,1,k)+tr11*tr2+tr12*tr3
+
754 ci2 = cc(i,1,k)+tr11*ti2+tr12*ti3
+
755 cr3 = cc(i-1,1,k)+tr12*tr2+tr11*tr3
+
756 ci3 = cc(i,1,k)+tr12*ti2+tr11*ti3
+
757 cr5 = ti11*tr5+ti12*tr4
+
758 ci5 = ti11*ti5+ti12*ti4
+
759 cr4 = ti12*tr5-ti11*tr4
+
760 ci4 = ti12*ti5-ti11*ti4
+
761 dr3 = cr3-ci4
+
762 dr4 = cr3+ci4
+
763 di3 = ci3+cr4
+
764 di4 = ci3-cr4
+
765 dr5 = cr2+ci5
+
766 dr2 = cr2-ci5
+
767 di5 = ci2-cr5
+
768 di2 = ci2+cr5
+
769 ch(i-1,k,2) = wa1(i-2)*dr2-wa1(i-1)*di2
+
770 ch(i,k,2) = wa1(i-2)*di2+wa1(i-1)*dr2
+
771 ch(i-1,k,3) = wa2(i-2)*dr3-wa2(i-1)*di3
+
772 ch(i,k,3) = wa2(i-2)*di3+wa2(i-1)*dr3
+
773 ch(i-1,k,4) = wa3(i-2)*dr4-wa3(i-1)*di4
+
774 ch(i,k,4) = wa3(i-2)*di4+wa3(i-1)*dr4
+
775 ch(i-1,k,5) = wa4(i-2)*dr5-wa4(i-1)*di5
+
776 ch(i,k,5) = wa4(i-2)*di5+wa4(i-1)*dr5
+
777 102 CONTINUE
+
778 103 CONTINUE
+
779 RETURN
+
+
780 END
+
781
+
782C> RADBG
+
783C>
+
784C> @param IDO
+
785C> @param IP
+
786C> @param L1
+
787C> @param IDL1
+
788C> @param CC
+
789C> @param C1
+
790C> @param C2
+
791C> @param CH
+
792C> @param CH2
+
793C> @param WA
+
794C>
+
795C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
796 SUBROUTINE radbg (IDO,IP,L1,IDL1,CC,C1,C2,CH,CH2,WA)
+
797 dimension ch(ido,l1,ip) ,cc(ido,ip,l1) ,
+
798 1 c1(ido,l1,ip) ,c2(idl1,ip),
+
799 2 ch2(idl1,ip) ,wa(*)
+
800 DATA tpi/6.28318530717959/
+
801 arg = tpi/float(ip)
+
802 dcp = cos(arg)
+
803 dsp = sin(arg)
+
804 idp2 = ido+2
+
805 nbd = (ido-1)/2
+
806 ipp2 = ip+2
+
807 ipph = (ip+1)/2
+
808 IF (ido .LT. l1) GO TO 103
+
809 DO 102 k=1,l1
+
810 DO 101 i=1,ido
+
811 ch(i,k,1) = cc(i,1,k)
+
812 101 CONTINUE
+
813 102 CONTINUE
+
814 GO TO 106
+
815 103 DO 105 i=1,ido
+
816 DO 104 k=1,l1
+
817 ch(i,k,1) = cc(i,1,k)
+
818 104 CONTINUE
+
819 105 CONTINUE
+
820!OCL NOVREC
+
821 106 DO 108 j=2,ipph
+
822 jc = ipp2-j
+
823 j2 = j+j
+
824 DO 107 k=1,l1
+
825 ch(1,k,j) = cc(ido,j2-2,k)+cc(ido,j2-2,k)
+
826 ch(1,k,jc) = cc(1,j2-1,k)+cc(1,j2-1,k)
+
827 107 CONTINUE
+
828 108 CONTINUE
+
829 IF (ido .EQ. 1) GO TO 116
+
830 IF (nbd .LT. l1) GO TO 112
+
831!OCL NOVREC
+
832 DO 111 j=2,ipph
+
833 jc = ipp2-j
+
834 DO 110 k=1,l1
+
835 DO 109 i=3,ido,2
+
836 ic = idp2-i
+
837 ch(i-1,k,j) = cc(i-1,2*j-1,k)+cc(ic-1,2*j-2,k)
+
838 ch(i-1,k,jc) = cc(i-1,2*j-1,k)-cc(ic-1,2*j-2,k)
+
839 ch(i,k,j) = cc(i,2*j-1,k)-cc(ic,2*j-2,k)
+
840 ch(i,k,jc) = cc(i,2*j-1,k)+cc(ic,2*j-2,k)
+
841 109 CONTINUE
+
842 110 CONTINUE
+
843 111 CONTINUE
+
844 GO TO 116
+
845 112 DO 115 j=2,ipph
+
846 jc = ipp2-j
+
847 DO 114 i=3,ido,2
+
848 ic = idp2-i
+
849 DO 113 k=1,l1
+
850 ch(i-1,k,j) = cc(i-1,2*j-1,k)+cc(ic-1,2*j-2,k)
+
851 ch(i-1,k,jc) = cc(i-1,2*j-1,k)-cc(ic-1,2*j-2,k)
+
852 ch(i,k,j) = cc(i,2*j-1,k)-cc(ic,2*j-2,k)
+
853 ch(i,k,jc) = cc(i,2*j-1,k)+cc(ic,2*j-2,k)
+
854 113 CONTINUE
+
855 114 CONTINUE
+
856 115 CONTINUE
+
857 116 ar1 = 1.
+
858 ai1 = 0.
+
859!OCL NOVREC
+
860 DO 120 l=2,ipph
+
861 lc = ipp2-l
+
862 ar1h = dcp*ar1-dsp*ai1
+
863 ai1 = dcp*ai1+dsp*ar1
+
864 ar1 = ar1h
+
865 DO 117 ik=1,idl1
+
866 c2(ik,l) = ch2(ik,1)+ar1*ch2(ik,2)
+
867 c2(ik,lc) = ai1*ch2(ik,ip)
+
868 117 CONTINUE
+
869 dc2 = ar1
+
870 ds2 = ai1
+
871 ar2 = ar1
+
872 ai2 = ai1
+
873!OCL NOVREC
+
874 DO 119 j=3,ipph
+
875 jc = ipp2-j
+
876 ar2h = dc2*ar2-ds2*ai2
+
877 ai2 = dc2*ai2+ds2*ar2
+
878 ar2 = ar2h
+
879 DO 118 ik=1,idl1
+
880 c2(ik,l) = c2(ik,l)+ar2*ch2(ik,j)
+
881 c2(ik,lc) = c2(ik,lc)+ai2*ch2(ik,jc)
+
882 118 CONTINUE
+
883 119 CONTINUE
+
884 120 CONTINUE
+
885!OCL NOVREC
+
886 DO 122 j=2,ipph
+
887 DO 121 ik=1,idl1
+
888 ch2(ik,1) = ch2(ik,1)+ch2(ik,j)
+
889 121 CONTINUE
+
890 122 CONTINUE
+
891!OCL NOVREC
+
892 DO 124 j=2,ipph
+
893 jc = ipp2-j
+
894 DO 123 k=1,l1
+
895 ch(1,k,j) = c1(1,k,j)-c1(1,k,jc)
+
896 ch(1,k,jc) = c1(1,k,j)+c1(1,k,jc)
+
897 123 CONTINUE
+
898 124 CONTINUE
+
899 IF (ido .EQ. 1) GO TO 132
+
900 IF (nbd .LT. l1) GO TO 128
+
901!OCL NOVREC
+
902 DO 127 j=2,ipph
+
903 jc = ipp2-j
+
904 DO 126 k=1,l1
+
905 DO 125 i=3,ido,2
+
906 ch(i-1,k,j) = c1(i-1,k,j)-c1(i,k,jc)
+
907 ch(i-1,k,jc) = c1(i-1,k,j)+c1(i,k,jc)
+
908 ch(i,k,j) = c1(i,k,j)+c1(i-1,k,jc)
+
909 ch(i,k,jc) = c1(i,k,j)-c1(i-1,k,jc)
+
910 125 CONTINUE
+
911 126 CONTINUE
+
912 127 CONTINUE
+
913 GO TO 132
+
914 128 DO 131 j=2,ipph
+
915 jc = ipp2-j
+
916 DO 130 i=3,ido,2
+
917 DO 129 k=1,l1
+
918 ch(i-1,k,j) = c1(i-1,k,j)-c1(i,k,jc)
+
919 ch(i-1,k,jc) = c1(i-1,k,j)+c1(i,k,jc)
+
920 ch(i,k,j) = c1(i,k,j)+c1(i-1,k,jc)
+
921 ch(i,k,jc) = c1(i,k,j)-c1(i-1,k,jc)
+
922 129 CONTINUE
+
923 130 CONTINUE
+
924 131 CONTINUE
+
925 132 CONTINUE
+
926 IF (ido .EQ. 1) RETURN
+
927 DO 133 ik=1,idl1
+
928 c2(ik,1) = ch2(ik,1)
+
929 133 CONTINUE
+
930 DO 135 j=2,ip
+
931 DO 134 k=1,l1
+
932 c1(1,k,j) = ch(1,k,j)
+
933 134 CONTINUE
+
934 135 CONTINUE
+
935 IF (nbd .GT. l1) GO TO 139
+
936 is = -ido
+
937 DO 138 j=2,ip
+
938 is = is+ido
+
939 idij = is
+
940 DO 137 i=3,ido,2
+
941 idij = idij+2
+
942 DO 136 k=1,l1
+
943 c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j)
+
944 c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j)
+
945 136 CONTINUE
+
946 137 CONTINUE
+
947 138 CONTINUE
+
948 GO TO 143
+
949 139 is = -ido
+
950!OCL NOVREC
+
951 DO 142 j=2,ip
+
952 is = is+ido
+
953 DO 141 k=1,l1
+
954 idij = is
+
955 DO 140 i=3,ido,2
+
956 idij = idij+2
+
957 c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j)
+
958 c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j)
+
959 140 CONTINUE
+
960 141 CONTINUE
+
961 142 CONTINUE
+
962 143 RETURN
+
+
963 END
+
964
+
965C> RADBG
+
966C>
+
967C> @param IDO
+
968C> @param L1
+
969C> @param CC
+
970C> @param CH
+
971C> @param WA1
+
972C>
+
973C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
974 SUBROUTINE radf2 (IDO,L1,CC,CH,WA1)
+
975 dimension ch(ido,2,l1) ,cc(ido,l1,2) ,
+
976 1 wa1(*)
+
977 DO 101 k=1,l1
+
978 ch(1,1,k) = cc(1,k,1)+cc(1,k,2)
+
979 ch(ido,2,k) = cc(1,k,1)-cc(1,k,2)
+
980 101 CONTINUE
+
981 IF (ido.LT.2) THEN
+
982 GO TO 107
+
983 ELSEIF (ido.EQ.2) THEN
+
984 GO TO 105
+
985 ELSE
+
986 GO TO 102
+
987 ENDIF
+
988 102 idp2 = ido+2
+
989 DO 104 k=1,l1
+
990 DO 103 i=3,ido,2
+
991 ic = idp2-i
+
992 tr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
+
993 ti2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
+
994 ch(i,1,k) = cc(i,k,1)+ti2
+
995 ch(ic,2,k) = ti2-cc(i,k,1)
+
996 ch(i-1,1,k) = cc(i-1,k,1)+tr2
+
997 ch(ic-1,2,k) = cc(i-1,k,1)-tr2
+
998 103 CONTINUE
+
999 104 CONTINUE
+
1000 IF (mod(ido,2) .EQ. 1) RETURN
+
1001 105 DO 106 k=1,l1
+
1002 ch(1,2,k) = -cc(ido,k,2)
+
1003 ch(ido,1,k) = cc(ido,k,1)
+
1004 106 CONTINUE
+
1005 107 RETURN
+
+
1006 END
+
1007
+
1008C> RADF3
+
1009C>
+
1010C> @param IDO
+
1011C> @param L1
+
1012C> @param CC
+
1013C> @param CH
+
1014C> @param WA1
+
1015C> @param WA2
+
1016C>
+
1017C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
1018 SUBROUTINE radf3 (IDO,L1,CC,CH,WA1,WA2)
+
1019 dimension ch(ido,3,l1) ,cc(ido,l1,3) ,
+
1020 1 wa1(*) ,wa2(*)
+
1021 DATA taur,taui /-.5,.866025403784439/
+
1022 DO 101 k=1,l1
+
1023 cr2 = cc(1,k,2)+cc(1,k,3)
+
1024 ch(1,1,k) = cc(1,k,1)+cr2
+
1025 ch(1,3,k) = taui*(cc(1,k,3)-cc(1,k,2))
+
1026 ch(ido,2,k) = cc(1,k,1)+taur*cr2
+
1027 101 CONTINUE
+
1028 IF (ido .EQ. 1) RETURN
+
1029 idp2 = ido+2
+
1030 DO 103 k=1,l1
+
1031 DO 102 i=3,ido,2
+
1032 ic = idp2-i
+
1033 dr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
+
1034 di2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
+
1035 dr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
+
1036 di3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
+
1037 cr2 = dr2+dr3
+
1038 ci2 = di2+di3
+
1039 ch(i-1,1,k) = cc(i-1,k,1)+cr2
+
1040 ch(i,1,k) = cc(i,k,1)+ci2
+
1041 tr2 = cc(i-1,k,1)+taur*cr2
+
1042 ti2 = cc(i,k,1)+taur*ci2
+
1043 tr3 = taui*(di2-di3)
+
1044 ti3 = taui*(dr3-dr2)
+
1045 ch(i-1,3,k) = tr2+tr3
+
1046 ch(ic-1,2,k) = tr2-tr3
+
1047 ch(i,3,k) = ti2+ti3
+
1048 ch(ic,2,k) = ti3-ti2
+
1049 102 CONTINUE
+
1050 103 CONTINUE
+
1051 RETURN
+
+
1052 END
+
1053
+
1054C> RADF4
+
1055C>
+
1056C> @param IDO
+
1057C> @param L1
+
1058C> @param CC
+
1059C> @param CH
+
1060C> @param WA1
+
1061C> @param WA2
+
1062C> @param WA3
+
1063C>
+
1064C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
1065 SUBROUTINE radf4 (IDO,L1,CC,CH,WA1,WA2,WA3)
+
1066 dimension cc(ido,l1,4) ,ch(ido,4,l1) ,
+
1067 1 wa1(*) ,wa2(*) ,wa3(*)
+
1068 DATA hsqt2 /.7071067811865475/
+
1069 DO 101 k=1,l1
+
1070 tr1 = cc(1,k,2)+cc(1,k,4)
+
1071 tr2 = cc(1,k,1)+cc(1,k,3)
+
1072 ch(1,1,k) = tr1+tr2
+
1073 ch(ido,4,k) = tr2-tr1
+
1074 ch(ido,2,k) = cc(1,k,1)-cc(1,k,3)
+
1075 ch(1,3,k) = cc(1,k,4)-cc(1,k,2)
+
1076 101 CONTINUE
+
1077 IF (ido.LT.2) THEN
+
1078 GO TO 107
+
1079 ELSEIF (ido.EQ.2) THEN
+
1080 GO TO 105
+
1081 ELSE
+
1082 GO TO 102
+
1083 ENDIF
+
1084 102 idp2 = ido+2
+
1085!OCL NOVREC
+
1086 DO 104 k=1,l1
+
1087 DO 103 i=3,ido,2
+
1088 ic = idp2-i
+
1089 cr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
+
1090 ci2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
+
1091 cr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
+
1092 ci3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
+
1093 cr4 = wa3(i-2)*cc(i-1,k,4)+wa3(i-1)*cc(i,k,4)
+
1094 ci4 = wa3(i-2)*cc(i,k,4)-wa3(i-1)*cc(i-1,k,4)
+
1095 tr1 = cr2+cr4
+
1096 tr4 = cr4-cr2
+
1097 ti1 = ci2+ci4
+
1098 ti4 = ci2-ci4
+
1099 ti2 = cc(i,k,1)+ci3
+
1100 ti3 = cc(i,k,1)-ci3
+
1101 tr2 = cc(i-1,k,1)+cr3
+
1102 tr3 = cc(i-1,k,1)-cr3
+
1103 ch(i-1,1,k) = tr1+tr2
+
1104 ch(ic-1,4,k) = tr2-tr1
+
1105 ch(i,1,k) = ti1+ti2
+
1106 ch(ic,4,k) = ti1-ti2
+
1107 ch(i-1,3,k) = ti4+tr3
+
1108 ch(ic-1,2,k) = tr3-ti4
+
1109 ch(i,3,k) = tr4+ti3
+
1110 ch(ic,2,k) = tr4-ti3
+
1111 103 CONTINUE
+
1112 104 CONTINUE
+
1113 IF (mod(ido,2) .EQ. 1) RETURN
+
1114 105 CONTINUE
+
1115 DO 106 k=1,l1
+
1116 ti1 = -hsqt2*(cc(ido,k,2)+cc(ido,k,4))
+
1117 tr1 = hsqt2*(cc(ido,k,2)-cc(ido,k,4))
+
1118 ch(ido,1,k) = tr1+cc(ido,k,1)
+
1119 ch(ido,3,k) = cc(ido,k,1)-tr1
+
1120 ch(1,2,k) = ti1-cc(ido,k,3)
+
1121 ch(1,4,k) = ti1+cc(ido,k,3)
+
1122 106 CONTINUE
+
1123 107 RETURN
+
+
1124 END
+
1125
+
1126C> RADF5
+
1127C>
+
1128C> @param IDO
+
1129C> @param L1
+
1130C> @param CC
+
1131C> @param CH
+
1132C> @param WA1
+
1133C> @param WA2
+
1134C> @param WA3
+
1135C> @param WA4
+
1136C>
+
1137C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
1138 SUBROUTINE radf5 (IDO,L1,CC,CH,WA1,WA2,WA3,WA4)
+
1139 dimension cc(ido,l1,5) ,ch(ido,5,l1) ,
+
1140 1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*)
+
1141 DATA tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154,
+
1142 1-.809016994374947,.587785252292473/
+
1143 DO 101 k=1,l1
+
1144 cr2 = cc(1,k,5)+cc(1,k,2)
+
1145 ci5 = cc(1,k,5)-cc(1,k,2)
+
1146 cr3 = cc(1,k,4)+cc(1,k,3)
+
1147 ci4 = cc(1,k,4)-cc(1,k,3)
+
1148 ch(1,1,k) = cc(1,k,1)+cr2+cr3
+
1149 ch(ido,2,k) = cc(1,k,1)+tr11*cr2+tr12*cr3
+
1150 ch(1,3,k) = ti11*ci5+ti12*ci4
+
1151 ch(ido,4,k) = cc(1,k,1)+tr12*cr2+tr11*cr3
+
1152 ch(1,5,k) = ti12*ci5-ti11*ci4
+
1153 101 CONTINUE
+
1154 IF (ido .EQ. 1) RETURN
+
1155 idp2 = ido+2
+
1156 DO 103 k=1,l1
+
1157 DO 102 i=3,ido,2
+
1158 ic = idp2-i
+
1159 dr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
+
1160 di2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
+
1161 dr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
+
1162 di3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
+
1163 dr4 = wa3(i-2)*cc(i-1,k,4)+wa3(i-1)*cc(i,k,4)
+
1164 di4 = wa3(i-2)*cc(i,k,4)-wa3(i-1)*cc(i-1,k,4)
+
1165 dr5 = wa4(i-2)*cc(i-1,k,5)+wa4(i-1)*cc(i,k,5)
+
1166 di5 = wa4(i-2)*cc(i,k,5)-wa4(i-1)*cc(i-1,k,5)
+
1167 cr2 = dr2+dr5
+
1168 ci5 = dr5-dr2
+
1169 cr5 = di2-di5
+
1170 ci2 = di2+di5
+
1171 cr3 = dr3+dr4
+
1172 ci4 = dr4-dr3
+
1173 cr4 = di3-di4
+
1174 ci3 = di3+di4
+
1175 ch(i-1,1,k) = cc(i-1,k,1)+cr2+cr3
+
1176 ch(i,1,k) = cc(i,k,1)+ci2+ci3
+
1177 tr2 = cc(i-1,k,1)+tr11*cr2+tr12*cr3
+
1178 ti2 = cc(i,k,1)+tr11*ci2+tr12*ci3
+
1179 tr3 = cc(i-1,k,1)+tr12*cr2+tr11*cr3
+
1180 ti3 = cc(i,k,1)+tr12*ci2+tr11*ci3
+
1181 tr5 = ti11*cr5+ti12*cr4
+
1182 ti5 = ti11*ci5+ti12*ci4
+
1183 tr4 = ti12*cr5-ti11*cr4
+
1184 ti4 = ti12*ci5-ti11*ci4
+
1185 ch(i-1,3,k) = tr2+tr5
+
1186 ch(ic-1,2,k) = tr2-tr5
+
1187 ch(i,3,k) = ti2+ti5
+
1188 ch(ic,2,k) = ti5-ti2
+
1189 ch(i-1,5,k) = tr3+tr4
+
1190 ch(ic-1,4,k) = tr3-tr4
+
1191 ch(i,5,k) = ti3+ti4
+
1192 ch(ic,4,k) = ti4-ti3
+
1193 102 CONTINUE
+
1194 103 CONTINUE
+
1195 RETURN
+
+
1196 END
+
1197
+
1198C> RADFG
+
1199C>
+
1200C> @param IDO
+
1201C> @param IP
+
1202C> @param L1
+
1203C> @param IDL1
+
1204C> @param CC
+
1205C> @param C1
+
1206C> @param C2
+
1207C> @param CH
+
1208C> @param CH2
+
1209C> @param WA
+
1210C>
+
1211C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
+
+
1212 SUBROUTINE radfg (IDO,IP,L1,IDL1,CC,C1,C2,CH,CH2,WA)
+
1213 dimension ch(ido,l1,ip) ,cc(ido,ip,l1) ,
+
1214 1 c1(ido,l1,ip) ,c2(idl1,ip),
+
1215 2 ch2(idl1,ip) ,wa(*)
+
1216 DATA tpi/6.28318530717959/
+
1217 arg = tpi/float(ip)
+
1218 dcp = cos(arg)
+
1219 dsp = sin(arg)
+
1220 ipph = (ip+1)/2
+
1221 ipp2 = ip+2
+
1222 idp2 = ido+2
+
1223 nbd = (ido-1)/2
+
1224 IF (ido .EQ. 1) GO TO 119
+
1225 DO 101 ik=1,idl1
+
1226 ch2(ik,1) = c2(ik,1)
+
1227 101 CONTINUE
+
1228 DO 103 j=2,ip
+
1229 DO 102 k=1,l1
+
1230 ch(1,k,j) = c1(1,k,j)
+
1231 102 CONTINUE
+
1232 103 CONTINUE
+
1233 IF (nbd .GT. l1) GO TO 107
+
1234 is = -ido
+
1235 DO 106 j=2,ip
+
1236 is = is+ido
+
1237 idij = is
+
1238 DO 105 i=3,ido,2
+
1239 idij = idij+2
+
1240 DO 104 k=1,l1
+
1241 ch(i-1,k,j) = wa(idij-1)*c1(i-1,k,j)+wa(idij)*c1(i,k,j)
+
1242 ch(i,k,j) = wa(idij-1)*c1(i,k,j)-wa(idij)*c1(i-1,k,j)
+
1243 104 CONTINUE
+
1244 105 CONTINUE
+
1245 106 CONTINUE
+
1246 GO TO 111
+
1247 107 is = -ido
+
1248 DO 110 j=2,ip
+
1249 is = is+ido
+
1250 DO 109 k=1,l1
+
1251 idij = is
+
1252 DO 108 i=3,ido,2
+
1253 idij = idij+2
+
1254 ch(i-1,k,j) = wa(idij-1)*c1(i-1,k,j)+wa(idij)*c1(i,k,j)
+
1255 ch(i,k,j) = wa(idij-1)*c1(i,k,j)-wa(idij)*c1(i-1,k,j)
+
1256 108 CONTINUE
+
1257 109 CONTINUE
+
1258 110 CONTINUE
+
1259 111 IF (nbd .LT. l1) GO TO 115
+
1260 DO 114 j=2,ipph
+
1261 jc = ipp2-j
+
1262 DO 113 k=1,l1
+
1263 DO 112 i=3,ido,2
+
1264 c1(i-1,k,j) = ch(i-1,k,j)+ch(i-1,k,jc)
+
1265 c1(i-1,k,jc) = ch(i,k,j)-ch(i,k,jc)
+
1266 c1(i,k,j) = ch(i,k,j)+ch(i,k,jc)
+
1267 c1(i,k,jc) = ch(i-1,k,jc)-ch(i-1,k,j)
+
1268 112 CONTINUE
+
1269 113 CONTINUE
+
1270 114 CONTINUE
+
1271 GO TO 121
+
1272 115 DO 118 j=2,ipph
+
1273 jc = ipp2-j
+
1274 DO 117 i=3,ido,2
+
1275 DO 116 k=1,l1
+
1276 c1(i-1,k,j) = ch(i-1,k,j)+ch(i-1,k,jc)
+
1277 c1(i-1,k,jc) = ch(i,k,j)-ch(i,k,jc)
+
1278 c1(i,k,j) = ch(i,k,j)+ch(i,k,jc)
+
1279 c1(i,k,jc) = ch(i-1,k,jc)-ch(i-1,k,j)
+
1280 116 CONTINUE
+
1281 117 CONTINUE
+
1282 118 CONTINUE
+
1283 GO TO 121
+
1284 119 DO 120 ik=1,idl1
+
1285 c2(ik,1) = ch2(ik,1)
+
1286 120 CONTINUE
+
1287 121 DO 123 j=2,ipph
+
1288 jc = ipp2-j
+
1289 DO 122 k=1,l1
+
1290 c1(1,k,j) = ch(1,k,j)+ch(1,k,jc)
+
1291 c1(1,k,jc) = ch(1,k,jc)-ch(1,k,j)
+
1292 122 CONTINUE
+
1293 123 CONTINUE
+
1294C
+
1295 ar1 = 1.
+
1296 ai1 = 0.
+
1297 DO 127 l=2,ipph
+
1298 lc = ipp2-l
+
1299 ar1h = dcp*ar1-dsp*ai1
+
1300 ai1 = dcp*ai1+dsp*ar1
+
1301 ar1 = ar1h
+
1302 DO 124 ik=1,idl1
+
1303 ch2(ik,l) = c2(ik,1)+ar1*c2(ik,2)
+
1304 ch2(ik,lc) = ai1*c2(ik,ip)
+
1305 124 CONTINUE
+
1306 dc2 = ar1
+
1307 ds2 = ai1
+
1308 ar2 = ar1
+
1309 ai2 = ai1
+
1310 DO 126 j=3,ipph
+
1311 jc = ipp2-j
+
1312 ar2h = dc2*ar2-ds2*ai2
+
1313 ai2 = dc2*ai2+ds2*ar2
+
1314 ar2 = ar2h
+
1315 DO 125 ik=1,idl1
+
1316 ch2(ik,l) = ch2(ik,l)+ar2*c2(ik,j)
+
1317 ch2(ik,lc) = ch2(ik,lc)+ai2*c2(ik,jc)
+
1318 125 CONTINUE
+
1319 126 CONTINUE
+
1320 127 CONTINUE
+
1321 DO 129 j=2,ipph
+
1322 DO 128 ik=1,idl1
+
1323 ch2(ik,1) = ch2(ik,1)+c2(ik,j)
+
1324 128 CONTINUE
+
1325 129 CONTINUE
+
1326C
+
1327 IF (ido .LT. l1) GO TO 132
+
1328 DO 131 k=1,l1
+
1329 DO 130 i=1,ido
+
1330 cc(i,1,k) = ch(i,k,1)
+
1331 130 CONTINUE
+
1332 131 CONTINUE
+
1333 GO TO 135
+
1334 132 DO 134 i=1,ido
+
1335 DO 133 k=1,l1
+
1336 cc(i,1,k) = ch(i,k,1)
+
1337 133 CONTINUE
+
1338 134 CONTINUE
+
1339 135 DO 137 j=2,ipph
+
1340 jc = ipp2-j
+
1341 j2 = j+j
+
1342 DO 136 k=1,l1
+
1343 cc(ido,j2-2,k) = ch(1,k,j)
+
1344 cc(1,j2-1,k) = ch(1,k,jc)
+
1345 136 CONTINUE
+
1346 137 CONTINUE
+
1347 IF (ido .EQ. 1) RETURN
+
1348 IF (nbd .LT. l1) GO TO 141
+
1349 DO 140 j=2,ipph
+
1350 jc = ipp2-j
+
1351 j2 = j+j
+
1352 DO 139 k=1,l1
+
1353 DO 138 i=3,ido,2
+
1354 ic = idp2-i
+
1355 cc(i-1,j2-1,k) = ch(i-1,k,j)+ch(i-1,k,jc)
+
1356 cc(ic-1,j2-2,k) = ch(i-1,k,j)-ch(i-1,k,jc)
+
1357 cc(i,j2-1,k) = ch(i,k,j)+ch(i,k,jc)
+
1358 cc(ic,j2-2,k) = ch(i,k,jc)-ch(i,k,j)
+
1359 138 CONTINUE
+
1360 139 CONTINUE
+
1361 140 CONTINUE
+
1362 RETURN
+
1363 141 DO 144 j=2,ipph
+
1364 jc = ipp2-j
+
1365 j2 = j+j
+
1366 DO 143 i=3,ido,2
+
1367 ic = idp2-i
+
1368 DO 142 k=1,l1
+
1369 cc(i-1,j2-1,k) = ch(i-1,k,j)+ch(i-1,k,jc)
+
1370 cc(ic-1,j2-2,k) = ch(i-1,k,j)-ch(i-1,k,jc)
+
1371 cc(i,j2-1,k) = ch(i,k,j)+ch(i,k,jc)
+
1372 cc(ic,j2-2,k) = ch(i,k,jc)-ch(i,k,j)
+
1373 142 CONTINUE
+
1374 143 CONTINUE
+
1375 144 CONTINUE
+
1376 RETURN
+
+
1377 END
+
subroutine radf5(ido, l1, cc, ch, wa1, wa2, wa3, wa4)
RADF5.
Definition fftpack.F:1139
+
subroutine radbg(ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa)
RADBG.
Definition fftpack.F:797
+
subroutine rffti1(n, wa, ifac)
RFFTI1.
Definition fftpack.F:470
+
subroutine scfft(isign, n, scale, x, y, table, work, isys)
scfft
Definition fftpack.F:258
+
subroutine rfftb(n, r, wsave)
RFFTB.
Definition fftpack.F:305
+
subroutine rfftb1(n, c, ch, wa, ifac)
RFFTB1.
Definition fftpack.F:334
+
subroutine drcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
drcft
Definition fftpack.F:164
+
subroutine rfftf1(n, c, ch, wa, ifac)
RFFTF1.
Definition fftpack.F:403
+
subroutine dcrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
dcrft
Definition fftpack.F:34
+
subroutine radf4(ido, l1, cc, ch, wa1, wa2, wa3)
RADF4.
Definition fftpack.F:1066
+
subroutine rfftf(n, r, wsave)
RFFTF.
Definition fftpack.F:291
+
subroutine radf3(ido, l1, cc, ch, wa1, wa2)
RADF3.
Definition fftpack.F:1019
+
subroutine radfg(ido, ip, l1, idl1, cc, c1, c2, ch, ch2, wa)
RADFG.
Definition fftpack.F:1213
+
subroutine radb5(ido, l1, cc, ch, wa1, wa2, wa3, wa4)
RADB5.
Definition fftpack.F:719
+
subroutine radf2(ido, l1, cc, ch, wa1)
RADBG.
Definition fftpack.F:975
+
subroutine radb3(ido, l1, cc, ch, wa1, wa2)
RADB3
Definition fftpack.F:592
+
subroutine radb2(ido, l1, cc, ch, wa1)
RADB2.
Definition fftpack.F:547
+
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition fftpack.F:82
+
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition fftpack.F:215
+
subroutine csfft(isign, n, scale, x, y, table, work, isys)
csfft
Definition fftpack.F:121
+
subroutine rffti(n, wsave)
RFFTI.
Definition fftpack.F:318
+
subroutine radb4(ido, l1, cc, ch, wa1, wa2, wa3)
RADB4.
Definition fftpack.F:642
diff --git a/files.html b/files.html index 7c55cf73..6aa750fd 100644 --- a/files.html +++ b/files.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: File List @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +

@@ -62,7 +62,7 @@
@@ -76,108 +76,115 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
File List
+
File List
Here is a list of all documented files with brief descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
[detail level 12]
 bicubic_interp_mod.F90Bicubic interpolation routines for scalars and vectors
 bilinear_interp_mod.F90Bilinear interpolation routines for scalars and vectors
 budget_interp_mod.F90Budget interpolation routines for scalars and vectors
 earth_radius_mod.F90Determine earth radius and shape
 fftpack.FA concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code
 gdswzd_c.F90C wrapper for routine gdswzd()
 gdswzd_mod.F90Driver module for gdswzd routines
 ip_constants_mod.F90Constants for use in NCEPLIBS-ip
 ip_equid_cylind_grid_mod.F90Equidistant cylindrical grib decoder and grid coordinate transformations
 ip_gaussian_grid_mod.F90Gaussian grid coordinate transformations
 ip_grid_descriptor_mod.F90Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions
 ip_grid_factory_mod.F90Routines for creating an ip_grid given a Grib descriptor
 ip_grid_mod.F90Abstract ip_grid type
 ip_grids_mod.F90Re-export the individual grids
 ip_interpolators_mod.F90Top-level module to export interpolation routines and constants
 ip_lambert_conf_grid_mod.F90GDS wizard for lambert conformal conical
 ip_mercator_grid_mod.F90GDS wizard for mercator cylindrical
 ip_mod.F90Top-level module for the ip library
 ip_polar_stereo_grid_mod.F90GDS wizard for polar stereographic azimuthal
 ip_rot_equid_cylind_egrid_mod.F90Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E
 ip_rot_equid_cylind_grid_mod.F90Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D
 ip_station_points_grid_mod.F90Interpolate gridded data to a series of station points
 iplib_4.hC interface to gdswzd() and gdswzd_grib1() functions for '4' library build
 iplib_8.hC interface to gdswzd() and gdswzd_grib1() functions for '8' library build
 iplib_d.hC interface to gdswzd() and gdswzd_grib1() functions for 'd' library build
 ipolates.F90Top-level driver for scalar interpolation routine ipolates()
 ipolatev.F90Top-level driver for vector interpolation routine ipolates
 ipxetas.F90Expand or contract eta grids using linear interpolation
 ipxwafs.F90Expand or contract wafs grids
 ipxwafs2.F90Expand or contract wafs grids using linear interpolation and account for bitmapped data
 ipxwafs3.F90Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data
 movect.F90Move a vector along a great circle
 ncpus.FSet number of cpus
 neighbor_budget_interp_mod.F90Interpolate scalar and vector fields with neighbor budget interpolation
 neighbor_interp_mod.F90Interpolate scalar and vector fields with neighbor interpolation
 polfix_mod.F90Make multiple pole scalar values consistent
 sp_mod.F
 spanaly.fAnalyze spectral from Fourier
 spdz2uv.fCompute winds from divergence and vorticity
 spectral_interp_mod.F90Interpolate spectral
 speps.fCompute utility spectral fields
 spfft.fPerform multiple fast fourier transforms
 spfft1.fPerform multiple fast Fourier transforms
 spffte.fPerform multiple fast Fourier transforms
 spfftpt.fCompute fourier transform to gridpoints
 spgradq.fCompute gradient in spectral space
 spgradx.fCompute x-gradient in Fourier space
 spgrady.fCompute y-gradient in spectral space
 splaplac.fCompute laplacian in spectral space
 splat.FComputes cosines of colatitude and Gaussian weights for sets of latitudes
 splegend.fCompute Legendre polynomials
 sppad.fPad or truncate a spectral field
 spsynth.fSynthesize Fourier coefficients from spectral coefficients
 sptez.fPerform a simple scalar spherical transform
 sptezd.fPerform a simple gradient spherical transform
 sptezm.fPerform simple scalar spherical transforms
 sptezmd.fPerform simple gradient spherical transforms
 sptezmv.fPerform simple vector spherical transforms
 sptezv.fPerform a simple vector spherical transform
 sptgpm.fTransform spectral scalar to Mercator
 sptgpmd.fTransform spectral to Mercator gradients
 sptgpmv.fTransform spectral vector to Mercator
 sptgps.fTransform spectral scalar to polar stereo
 sptgpsd.fTransform spectral to polar stereographic gradients
 sptgpsv.fTransform spectral vector to polar stereo
 sptgpt.fTransform spectral scalar to station points
 sptgptd.fTransform spectral to station point gradients
 sptgptsd.fTransform spectral scalar to station points
 sptgptv.fTransform spectral vector to station points
 sptgptvd.fTransform spectral vector to station points
 sptran.fPerform a scalar spherical transform
 sptrand.fPerform a gradient spherical transform
 sptranf.fPerform a scalar spherical transform
 sptranf0.fSptranf spectral initialization
 sptranf1.fSptranf spectral transform
 sptranfv.fPerform a vector spherical transform
 sptranv.fPerform a vector spherical transform
 sptrun.fTruncate gridded scalar fields
 sptrund.fSpectrally truncate to gradients
 sptrung.fSpectrally interpolate scalars to stations
 sptrungv.fSpectrally interpolate vectors to stations
 sptrunl.fSpectrally truncate to laplacian
 sptrunm.fSpectrally interpolate scalars to Mercator
 sptrunmv.fSpectrally interpolate vectors to Mercator
 sptruns.fSpectrally interpolate scalars to polar stereo
 sptrunsv.fSpectrally interpolate vectors to polar stereo
 sptrunv.fSpectrally truncate gridded vector fields
 spuv2dz.fCompute divergence and vorticity from winds
 spvar.fCompute variance by total wavenumber
 spwget.fGet wave-space constants
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  src
 bicubic_interp_mod.F90Bicubic interpolation routines for scalars and vectors
 bilinear_interp_mod.F90Bilinear interpolation routines for scalars and vectors
 budget_interp_mod.F90Budget interpolation routines for scalars and vectors
 earth_radius_mod.F90Determine earth radius and shape
 fftpack.FA concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code
 gdswzd_c.F90C wrapper for routine gdswzd()
 gdswzd_mod.F90Driver module for gdswzd routines
 ip_constants_mod.F90Constants for use in NCEPLIBS-ip
 ip_equid_cylind_grid_mod.F90Equidistant cylindrical grib decoder and grid coordinate transformations
 ip_gaussian_grid_mod.F90Gaussian grid coordinate transformations
 ip_grid_descriptor_mod.F90Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions
 ip_grid_factory_mod.F90Routines for creating an ip_grid given a Grib descriptor
 ip_grid_mod.F90Abstract ip_grid type
 ip_grids_mod.F90Re-export the individual grids
 ip_interpolators_mod.F90Top-level module to export interpolation routines and constants
 ip_lambert_conf_grid_mod.F90GDS wizard for lambert conformal conical
 ip_mercator_grid_mod.F90GDS wizard for mercator cylindrical
 ip_mod.F90Top-level module for the ip library
 ip_polar_stereo_grid_mod.F90GDS wizard for polar stereographic azimuthal
 ip_rot_equid_cylind_egrid_mod.F90Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E
 ip_rot_equid_cylind_grid_mod.F90Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D
 ip_station_points_grid_mod.F90Interpolate gridded data to a series of station points
 iplib_4.hC interface to gdswzd() and gdswzd_grib1() functions for '4' library build
 iplib_8.hC interface to gdswzd() and gdswzd_grib1() functions for '8' library build
 iplib_d.hC interface to gdswzd() and gdswzd_grib1() functions for 'd' library build
 ipolates.F90Top-level driver for scalar interpolation routine ipolates()
 ipolatev.F90Top-level driver for vector interpolation routine ipolates
 ipxetas.F90Expand or contract eta grids using linear interpolation
 ipxwafs.F90Expand or contract wafs grids
 ipxwafs2.F90Expand or contract wafs grids using linear interpolation and account for bitmapped data
 ipxwafs3.F90Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data
 movect.F90Move a vector along a great circle
 ncpus.FSet number of cpus
 neighbor_budget_interp_mod.F90Interpolate scalar and vector fields with neighbor budget interpolation
 neighbor_interp_mod.F90Interpolate scalar and vector fields with neighbor interpolation
 polfix_mod.F90Make multiple pole scalar values consistent
 sp_mod.F
 spanaly.fAnalyze spectral from Fourier
 spdz2uv.fCompute winds from divergence and vorticity
 spectral_interp_mod.F90Interpolate spectral
 speps.fCompute utility spectral fields
 spfft.fPerform multiple fast fourier transforms
 spfft1.fPerform multiple fast Fourier transforms
 spffte.fPerform multiple fast Fourier transforms
 spfftpt.fCompute fourier transform to gridpoints
 spgradq.fCompute gradient in spectral space
 spgradx.fCompute x-gradient in Fourier space
 spgrady.fCompute y-gradient in spectral space
 splaplac.fCompute laplacian in spectral space
 splat.FComputes cosines of colatitude and Gaussian weights for sets of latitudes
 splegend.fCompute Legendre polynomials
 sppad.fPad or truncate a spectral field
 spsynth.fSynthesize Fourier coefficients from spectral coefficients
 sptez.fPerform a simple scalar spherical transform
 sptezd.fPerform a simple gradient spherical transform
 sptezm.fPerform simple scalar spherical transforms
 sptezmd.fPerform simple gradient spherical transforms
 sptezmv.fPerform simple vector spherical transforms
 sptezv.fPerform a simple vector spherical transform
 sptgpm.fTransform spectral scalar to Mercator
 sptgpmd.fTransform spectral to Mercator gradients
 sptgpmv.fTransform spectral vector to Mercator
 sptgps.fTransform spectral scalar to polar stereo
 sptgpsd.fTransform spectral to polar stereographic gradients
 sptgpsv.fTransform spectral vector to polar stereo
 sptgpt.fTransform spectral scalar to station points
 sptgptd.fTransform spectral to station point gradients
 sptgptsd.fTransform spectral scalar to station points
 sptgptv.fTransform spectral vector to station points
 sptgptvd.fTransform spectral vector to station points
 sptran.fPerform a scalar spherical transform
 sptrand.fPerform a gradient spherical transform
 sptranf.fPerform a scalar spherical transform
 sptranf0.fSptranf spectral initialization
 sptranf1.fSptranf spectral transform
 sptranfv.fPerform a vector spherical transform
 sptranv.fPerform a vector spherical transform
 sptrun.fTruncate gridded scalar fields
 sptrund.fSpectrally truncate to gradients
 sptrung.fSpectrally interpolate scalars to stations
 sptrungv.fSpectrally interpolate vectors to stations
 sptrunl.fSpectrally truncate to laplacian
 sptrunm.fSpectrally interpolate scalars to Mercator
 sptrunmv.fSpectrally interpolate vectors to Mercator
 sptruns.fSpectrally interpolate scalars to polar stereo
 sptrunsv.fSpectrally interpolate vectors to polar stereo
 sptrunv.fSpectrally truncate gridded vector fields
 spuv2dz.fCompute divergence and vorticity from winds
 spvar.fCompute variance by total wavenumber
 spwget.fGet wave-space constants
@@ -185,7 +192,7 @@ diff --git a/files_dup.js b/files_dup.js index f385241f..c3b39c49 100644 --- a/files_dup.js +++ b/files_dup.js @@ -1,93 +1,4 @@ var files_dup = [ - [ "bicubic_interp_mod.F90", "bicubic__interp__mod_8F90.html", "bicubic__interp__mod_8F90" ], - [ "bilinear_interp_mod.F90", "bilinear__interp__mod_8F90.html", "bilinear__interp__mod_8F90" ], - [ "budget_interp_mod.F90", "budget__interp__mod_8F90.html", "budget__interp__mod_8F90" ], - [ "earth_radius_mod.F90", "earth__radius__mod_8F90.html", "earth__radius__mod_8F90" ], - [ "fftpack.F", "fftpack_8F.html", "fftpack_8F" ], - [ "gdswzd_c.F90", "gdswzd__c_8F90.html", "gdswzd__c_8F90" ], - [ "gdswzd_mod.F90", "gdswzd__mod_8F90.html", "gdswzd__mod_8F90" ], - [ "ip_constants_mod.F90", "ip__constants__mod_8F90.html", "ip__constants__mod_8F90" ], - [ "ip_equid_cylind_grid_mod.F90", "ip__equid__cylind__grid__mod_8F90.html", "ip__equid__cylind__grid__mod_8F90" ], - [ "ip_gaussian_grid_mod.F90", "ip__gaussian__grid__mod_8F90.html", "ip__gaussian__grid__mod_8F90" ], - [ "ip_grid_descriptor_mod.F90", "ip__grid__descriptor__mod_8F90.html", "ip__grid__descriptor__mod_8F90" ], - [ "ip_grid_factory_mod.F90", "ip__grid__factory__mod_8F90.html", "ip__grid__factory__mod_8F90" ], - [ "ip_grid_mod.F90", "ip__grid__mod_8F90.html", "ip__grid__mod_8F90" ], - [ "ip_grids_mod.F90", "ip__grids__mod_8F90.html", null ], - [ "ip_interpolators_mod.F90", "ip__interpolators__mod_8F90.html", "ip__interpolators__mod_8F90" ], - [ "ip_lambert_conf_grid_mod.F90", "ip__lambert__conf__grid__mod_8F90.html", "ip__lambert__conf__grid__mod_8F90" ], - [ "ip_mercator_grid_mod.F90", "ip__mercator__grid__mod_8F90.html", "ip__mercator__grid__mod_8F90" ], - [ "ip_mod.F90", "ip__mod_8F90.html", null ], - [ "ip_polar_stereo_grid_mod.F90", "ip__polar__stereo__grid__mod_8F90.html", "ip__polar__stereo__grid__mod_8F90" ], - [ "ip_rot_equid_cylind_egrid_mod.F90", "ip__rot__equid__cylind__egrid__mod_8F90.html", "ip__rot__equid__cylind__egrid__mod_8F90" ], - [ "ip_rot_equid_cylind_grid_mod.F90", "ip__rot__equid__cylind__grid__mod_8F90.html", "ip__rot__equid__cylind__grid__mod_8F90" ], - [ "ip_station_points_grid_mod.F90", "ip__station__points__grid__mod_8F90.html", "ip__station__points__grid__mod_8F90" ], - [ "iplib_4.h", "iplib__4_8h.html", "iplib__4_8h" ], - [ "iplib_8.h", "iplib__8_8h.html", "iplib__8_8h" ], - [ "iplib_d.h", "iplib__d_8h.html", "iplib__d_8h" ], - [ "ipolates.F90", "ipolates_8F90.html", "ipolates_8F90" ], - [ "ipolatev.F90", "ipolatev_8F90.html", "ipolatev_8F90" ], - [ "ipxetas.F90", "ipxetas_8F90.html", "ipxetas_8F90" ], - [ "ipxwafs.F90", "ipxwafs_8F90.html", "ipxwafs_8F90" ], - [ "ipxwafs2.F90", "ipxwafs2_8F90.html", "ipxwafs2_8F90" ], - [ "ipxwafs3.F90", "ipxwafs3_8F90.html", "ipxwafs3_8F90" ], - [ "movect.F90", "movect_8F90.html", "movect_8F90" ], - [ "ncpus.F", "ncpus_8F.html", "ncpus_8F" ], - [ "neighbor_budget_interp_mod.F90", "neighbor__budget__interp__mod_8F90.html", "neighbor__budget__interp__mod_8F90" ], - [ "neighbor_interp_mod.F90", "neighbor__interp__mod_8F90.html", "neighbor__interp__mod_8F90" ], - [ "polfix_mod.F90", "polfix__mod_8F90.html", "polfix__mod_8F90" ], - [ "sp_mod.F", "sp__mod_8F_source.html", null ], - [ "spanaly.f", "spanaly_8f.html", "spanaly_8f" ], - [ "spdz2uv.f", "spdz2uv_8f.html", "spdz2uv_8f" ], - [ "spectral_interp_mod.F90", "spectral__interp__mod_8F90.html", "spectral__interp__mod_8F90" ], - [ "speps.f", "speps_8f.html", "speps_8f" ], - [ "spfft.f", "spfft_8f.html", "spfft_8f" ], - [ "spfft1.f", "spfft1_8f.html", "spfft1_8f" ], - [ "spffte.f", "spffte_8f.html", "spffte_8f" ], - [ "spfftpt.f", "spfftpt_8f.html", "spfftpt_8f" ], - [ "spgradq.f", "spgradq_8f.html", "spgradq_8f" ], - [ "spgradx.f", "spgradx_8f.html", "spgradx_8f" ], - [ "spgrady.f", "spgrady_8f.html", "spgrady_8f" ], - [ "splaplac.f", "splaplac_8f.html", "splaplac_8f" ], - [ "splat.F", "splat_8F.html", "splat_8F" ], - [ "splegend.f", "splegend_8f.html", "splegend_8f" ], - [ "sppad.f", "sppad_8f.html", "sppad_8f" ], - [ "spsynth.f", "spsynth_8f.html", "spsynth_8f" ], - [ "sptez.f", "sptez_8f.html", "sptez_8f" ], - [ "sptezd.f", "sptezd_8f.html", "sptezd_8f" ], - [ "sptezm.f", "sptezm_8f.html", "sptezm_8f" ], - [ "sptezmd.f", "sptezmd_8f.html", "sptezmd_8f" ], - [ "sptezmv.f", "sptezmv_8f.html", "sptezmv_8f" ], - [ "sptezv.f", "sptezv_8f.html", "sptezv_8f" ], - [ "sptgpm.f", "sptgpm_8f.html", "sptgpm_8f" ], - [ "sptgpmd.f", "sptgpmd_8f.html", "sptgpmd_8f" ], - [ "sptgpmv.f", "sptgpmv_8f.html", "sptgpmv_8f" ], - [ "sptgps.f", "sptgps_8f.html", "sptgps_8f" ], - [ "sptgpsd.f", "sptgpsd_8f.html", "sptgpsd_8f" ], - [ "sptgpsv.f", "sptgpsv_8f.html", "sptgpsv_8f" ], - [ "sptgpt.f", "sptgpt_8f.html", "sptgpt_8f" ], - [ "sptgptd.f", "sptgptd_8f.html", "sptgptd_8f" ], - [ "sptgptsd.f", "sptgptsd_8f.html", "sptgptsd_8f" ], - [ "sptgptv.f", "sptgptv_8f.html", "sptgptv_8f" ], - [ "sptgptvd.f", "sptgptvd_8f.html", "sptgptvd_8f" ], - [ "sptran.f", "sptran_8f.html", "sptran_8f" ], - [ "sptrand.f", "sptrand_8f.html", "sptrand_8f" ], - [ "sptranf.f", "sptranf_8f.html", "sptranf_8f" ], - [ "sptranf0.f", "sptranf0_8f.html", "sptranf0_8f" ], - [ "sptranf1.f", "sptranf1_8f.html", "sptranf1_8f" ], - [ "sptranfv.f", "sptranfv_8f.html", "sptranfv_8f" ], - [ "sptranv.f", "sptranv_8f.html", "sptranv_8f" ], - [ "sptrun.f", "sptrun_8f.html", "sptrun_8f" ], - [ "sptrund.f", "sptrund_8f.html", "sptrund_8f" ], - [ "sptrung.f", "sptrung_8f.html", "sptrung_8f" ], - [ "sptrungv.f", "sptrungv_8f.html", "sptrungv_8f" ], - [ "sptrunl.f", "sptrunl_8f.html", "sptrunl_8f" ], - [ "sptrunm.f", "sptrunm_8f.html", "sptrunm_8f" ], - [ "sptrunmv.f", "sptrunmv_8f.html", "sptrunmv_8f" ], - [ "sptruns.f", "sptruns_8f.html", "sptruns_8f" ], - [ "sptrunsv.f", "sptrunsv_8f.html", "sptrunsv_8f" ], - [ "sptrunv.f", "sptrunv_8f.html", "sptrunv_8f" ], - [ "spuv2dz.f", "spuv2dz_8f.html", "spuv2dz_8f" ], - [ "spvar.f", "spvar_8f.html", "spvar_8f" ], - [ "spwget.f", "spwget_8f.html", "spwget_8f" ] + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] ]; \ No newline at end of file diff --git a/folderclosed.svg b/folderclosed.svg new file mode 100644 index 00000000..b04bed2e --- /dev/null +++ b/folderclosed.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderclosedd.svg b/folderclosedd.svg new file mode 100644 index 00000000..52f0166a --- /dev/null +++ b/folderclosedd.svg @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/folderopen.svg b/folderopen.svg new file mode 100644 index 00000000..f6896dd2 --- /dev/null +++ b/folderopen.svg @@ -0,0 +1,17 @@ + + + + + + + + + + diff --git a/folderopend.svg b/folderopend.svg new file mode 100644 index 00000000..2d1f06e7 --- /dev/null +++ b/folderopend.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/functions.html b/functions.html index d095edd2..eb9090cb 100644 --- a/functions.html +++ b/functions.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Data Fields @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +

@@ -62,7 +62,7 @@
@@ -76,400 +76,174 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented data types members with links to the data structure documentation for each member
-

- c -

diff --git a/functions_func.html b/functions_func.html index 302f4b7e..cedd1200 100644 --- a/functions_func.html +++ b/functions_func.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Data Fields - Functions/Subroutines @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,192 +76,85 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the struct/union documentation for each field:
-

- f -

diff --git a/functions_vars.html b/functions_vars.html index f226994b..309f628b 100644 --- a/functions_vars.html +++ b/functions_vars.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Data Fields - Variables @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +

@@ -62,7 +62,7 @@
@@ -76,234 +76,122 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented variables with links to the struct/union documentation for each field:
-

- c -

diff --git a/gdswzd__c_8F90.html b/gdswzd__c_8F90.html index 9a8d640e..7977b7cb 100644 --- a/gdswzd__c_8F90.html +++ b/gdswzd__c_8F90.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: gdswzd_c.F90 File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,42 +76,48 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
gdswzd_c.F90 File Reference
+
gdswzd_c.F90 File Reference
-

C wrapper for routine gdswzd(). +

C wrapper for routine gdswzd(). More...

Go to the source code of this file.

- - +

+

Modules

module  gdswzd_c_mod
module  gdswzd_c_mod
 Module that contains C wrapper for routine gdswzd().
 
- - - - - - - + + + + + +

+

Functions/Subroutines

subroutine gdswzd_c_mod::gdswzd_c (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 C wrapper for routine gdswzd(). More...
 
subroutine gdswzd_c_mod::gdswzd_c_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 C wrapper for routine gdswzd. More...
 
subroutine gdswzd_c_mod::gdswzd_c (igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 C wrapper for routine gdswzd().
 
subroutine gdswzd_c_mod::gdswzd_c_grib1 (kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 C wrapper for routine gdswzd.
 

Detailed Description

-

C wrapper for routine gdswzd().

+

C wrapper for routine gdswzd().

Author
JOVIC
Date
2016-04-10
@@ -122,7 +128,7 @@ diff --git a/gdswzd__c_8F90.js b/gdswzd__c_8F90.js index db0f3b21..7a614b3e 100644 --- a/gdswzd__c_8F90.js +++ b/gdswzd__c_8F90.js @@ -1,5 +1,5 @@ var gdswzd__c_8F90 = [ - [ "gdswzd_c", "gdswzd__c_8F90.html#ae3026381f7f41561507c97c9125d24e4", null ], - [ "gdswzd_c_grib1", "gdswzd__c_8F90.html#a06861f1403edf106bb3b399c39981504", null ] + [ "gdswzd_c", "gdswzd__c_8F90.html#a645c3a3f96448d8d7be375a23e7e8cfb", null ], + [ "gdswzd_c_grib1", "gdswzd__c_8F90.html#a90ed2f0c731d3813658f798c044a593a", null ] ]; \ No newline at end of file diff --git a/gdswzd__c_8F90_source.html b/gdswzd__c_8F90_source.html index 7f02ddbf..287ed7e3 100644 --- a/gdswzd__c_8F90_source.html +++ b/gdswzd__c_8F90_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: gdswzd_c.F90 Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,113 +81,123 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
gdswzd_c.F90
+
gdswzd_c.F90
-Go to the documentation of this file.
1 
-
4 
- -
8  use gdswzd_mod
-
9  implicit none
-
10 
-
11 contains
-
12 
-
173  SUBROUTINE gdswzd_c(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
-
174  XPTS,YPTS,RLON,RLAT,NRET,CROT,SROT, &
-
175  XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd')
-
176  use, INTRINSIC :: iso_c_binding
-
177 
-
178  USE gdswzd_mod
-
179 
-
180  IMPLICIT NONE
-
181 
-
182 #if (LSIZE==8)
-
183  INTEGER(KIND=C_LONG), INTENT(IN) :: IGDTMPL(IGDTLEN)
-
184  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
-
185  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT, NPTS
-
186  INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
-
187 #else
-
188  INTEGER(KIND=C_INT), INTENT(IN) :: IGDTMPL(IGDTLEN)
-
189  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
-
190  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT, NPTS
-
191  INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
-
192 #endif
-
193 
-
194 #if (LSIZE==4)
-
195  REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
-
196  REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
-
197  REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
-
198  REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
-
199 #else
-
200  REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
-
201  REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
-
202  REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
-
203  REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
-
204 #endif
-
205 
-
206  CALL gdswzd(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
-
207  xpts,ypts,rlon,rlat,nret, &
-
208  crot,srot,xlon,xlat,ylon,ylat,area)
-
209 
-
210  END SUBROUTINE gdswzd_c
-
211 
-
259  SUBROUTINE gdswzd_c_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
-
260  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd_grib1')
-
261  use, INTRINSIC :: iso_c_binding
-
262 
-
263  USE gdswzd_mod
-
264 
-
265  IMPLICIT NONE
-
266 
-
267 #if (LSIZE==8)
-
268  INTEGER(KIND=C_LONG), INTENT(IN) :: KGDS(200)
-
269  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT
-
270  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: NPTS
-
271  INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
-
272 #else
-
273  INTEGER(KIND=C_INT), INTENT(IN) :: KGDS(200)
-
274  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT
-
275  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: NPTS
-
276  INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
-
277 #endif
-
278 
-
279 #if (LSIZE==4)
-
280  REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
-
281  REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
-
282  REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
-
283  REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
-
284 #else
-
285  REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
-
286  REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
-
287  REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
-
288  REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
-
289 #endif
-
290 
-
291  CALL gdswzd(kgds,iopt,npts,fill,xpts,ypts,rlon,rlat,nret, &
-
292  crot,srot,xlon,xlat,ylon,ylat,area)
-
293 
-
294  END SUBROUTINE gdswzd_c_grib1
-
295 
-
296 end module gdswzd_c_mod
- -
Module that contains C wrapper for routine gdswzd().
Definition: gdswzd_c.F90:7
-
subroutine gdswzd_c_grib1(KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
C wrapper for routine gdswzd.
Definition: gdswzd_c.F90:261
-
subroutine gdswzd_c(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
C wrapper for routine gdswzd().
Definition: gdswzd_c.F90:176
-
Driver module for gdswzd routines.
Definition: gdswzd_mod.F90:25
+Go to the documentation of this file.
1
+
4
+ +
8 use gdswzd_mod
+
9 implicit none
+
10
+
11contains
+
12
+
+
173 SUBROUTINE gdswzd_c(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
+
174 XPTS,YPTS,RLON,RLAT,NRET,CROT,SROT, &
+
175 XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd')
+
176 use, INTRINSIC :: iso_c_binding
+
177
+
178 USE gdswzd_mod
+
179
+
180 IMPLICIT NONE
+
181
+
182#if (LSIZE==8)
+
183 INTEGER(KIND=C_LONG), INTENT(IN) :: IGDTMPL(IGDTLEN)
+
184 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
+
185 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT, NPTS
+
186 INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
+
187#else
+
188 INTEGER(KIND=C_INT), INTENT(IN) :: IGDTMPL(IGDTLEN)
+
189 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
+
190 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT, NPTS
+
191 INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
+
192#endif
+
193
+
194#if (LSIZE==4)
+
195 REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
+
196 REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
+
197 REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
+
198 REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
+
199#else
+
200 REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
+
201 REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
+
202 REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
+
203 REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
+
204#endif
+
205
+
206 CALL gdswzd(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
+
207 xpts,ypts,rlon,rlat,nret, &
+
208 crot,srot,xlon,xlat,ylon,ylat,area)
+
209
+
+
210 END SUBROUTINE gdswzd_c
+
211
+
+
259 SUBROUTINE gdswzd_c_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
+
260 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd_grib1')
+
261 use, INTRINSIC :: iso_c_binding
+
262
+
263 USE gdswzd_mod
+
264
+
265 IMPLICIT NONE
+
266
+
267#if (LSIZE==8)
+
268 INTEGER(KIND=C_LONG), INTENT(IN) :: KGDS(200)
+
269 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT
+
270 INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: NPTS
+
271 INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
+
272#else
+
273 INTEGER(KIND=C_INT), INTENT(IN) :: KGDS(200)
+
274 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT
+
275 INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: NPTS
+
276 INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
+
277#endif
+
278
+
279#if (LSIZE==4)
+
280 REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
+
281 REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
+
282 REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
+
283 REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
+
284#else
+
285 REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
+
286 REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
+
287 REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
+
288 REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
+
289#endif
+
290
+
291 CALL gdswzd(kgds,iopt,npts,fill,xpts,ypts,rlon,rlat,nret, &
+
292 crot,srot,xlon,xlat,ylon,ylat,area)
+
293
+
+
294 END SUBROUTINE gdswzd_c_grib1
+
295
+
296end module gdswzd_c_mod
+ +
Module that contains C wrapper for routine gdswzd().
Definition gdswzd_c.F90:7
+
subroutine gdswzd_c(igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
C wrapper for routine gdswzd().
Definition gdswzd_c.F90:176
+
subroutine gdswzd_c_grib1(kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
C wrapper for routine gdswzd.
Definition gdswzd_c.F90:261
+
Driver module for gdswzd routines.
diff --git a/gdswzd__mod_8F90.html b/gdswzd__mod_8F90.html index 881c2de3..dcd495a5 100644 --- a/gdswzd__mod_8F90.html +++ b/gdswzd__mod_8F90.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: gdswzd_mod.F90 File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,9 +76,16 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
@@ -86,8 +93,7 @@ Data Types | Modules | Functions/Subroutines
-
-
gdswzd_mod.F90 File Reference
+
gdswzd_mod.F90 File Reference
@@ -96,37 +102,37 @@

Go to the source code of this file.

-

+

Data Types

interface  gdswzd_mod::gdswzd
 
- - +

+

Modules

module  gdswzd_mod
module  gdswzd_mod
 Driver module for gdswzd routines.
 
- - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + +

+

Functions/Subroutines

subroutine gdswzd_mod::gdswzd_1d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib 2 grid definition template and returns one of the following: More...
 
subroutine gdswzd_mod::gdswzd_2d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays): More...
 
subroutine, public gdswzd_mod::gdswzd_2d_array_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib grid description section and returns one of the following (for 2-d arrays): More...
 
subroutine, public gdswzd_mod::gdswzd_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib grid description section and returns one of the following (for 1-d arrays): More...
 
subroutine gdswzd_mod::gdswzd_grid (grid, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Returns one of the following for a grid object: More...
 
subroutine gdswzd_mod::gdswzd_scalar (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib 2 grid definition template and returns one of the following (for scalars): More...
 
subroutine gdswzd_mod::gdswzd_1d_array (igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib 2 grid definition template and returns one of the following:
 
subroutine gdswzd_mod::gdswzd_2d_array (igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):
 
subroutine, public gdswzd_mod::gdswzd_2d_array_grib1 (kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib grid description section and returns one of the following (for 2-d arrays):
 
subroutine, public gdswzd_mod::gdswzd_grib1 (kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib grid description section and returns one of the following (for 1-d arrays):
 
subroutine gdswzd_mod::gdswzd_grid (grid, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Returns one of the following for a grid object:
 
subroutine gdswzd_mod::gdswzd_scalar (igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib 2 grid definition template and returns one of the following (for scalars):
 

Detailed Description

Driver module for gdswzd routines.

@@ -140,7 +146,7 @@ diff --git a/gdswzd__mod_8F90.js b/gdswzd__mod_8F90.js index 3b950779..7f8c7329 100644 --- a/gdswzd__mod_8F90.js +++ b/gdswzd__mod_8F90.js @@ -1,10 +1,10 @@ var gdswzd__mod_8F90 = [ - [ "gdswzd", "interfacegdswzd__mod_1_1gdswzd.html", "interfacegdswzd__mod_1_1gdswzd" ], - [ "gdswzd_1d_array", "gdswzd__mod_8F90.html#ac304e2b046eccc701e24827c81107e76", null ], - [ "gdswzd_2d_array", "gdswzd__mod_8F90.html#acdf970e498e9317522fbdfb690b86e25", null ], - [ "gdswzd_2d_array_grib1", "gdswzd__mod_8F90.html#aa032a55281b18e208630a730679958f4", null ], - [ "gdswzd_grib1", "gdswzd__mod_8F90.html#a133e040fac8dd56e607b8e3fb6a58c37", null ], - [ "gdswzd_grid", "gdswzd__mod_8F90.html#a584d2bddbc6d857b80cfac5e3b288d45", null ], - [ "gdswzd_scalar", "gdswzd__mod_8F90.html#aba3235c5bc5797e72b9a6a8a587b8861", null ] + [ "gdswzd_mod::gdswzd", "interfacegdswzd__mod_1_1gdswzd.html", "interfacegdswzd__mod_1_1gdswzd" ], + [ "gdswzd_1d_array", "gdswzd__mod_8F90.html#a22fcb977737aba24bd78e075daf47bc6", null ], + [ "gdswzd_2d_array", "gdswzd__mod_8F90.html#ad2fb9a9e7090ff95e5b0192a8b09f896", null ], + [ "gdswzd_2d_array_grib1", "gdswzd__mod_8F90.html#a71a5aecec6e7bc8b1a9b2e28f4645659", null ], + [ "gdswzd_grib1", "gdswzd__mod_8F90.html#a353c57be5f548ae3fb065ffc94d51c22", null ], + [ "gdswzd_grid", "gdswzd__mod_8F90.html#a04215e685ff7339d85fb43e927e74c28", null ], + [ "gdswzd_scalar", "gdswzd__mod_8F90.html#a43ce21002cc5f7b4bda2151410f29466", null ] ]; \ No newline at end of file diff --git a/gdswzd__mod_8F90_source.html b/gdswzd__mod_8F90_source.html index 2b3993b6..a1410c08 100644 --- a/gdswzd__mod_8F90_source.html +++ b/gdswzd__mod_8F90_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: gdswzd_mod.F90 Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,374 +81,394 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
gdswzd_mod.F90
+
gdswzd_mod.F90
-Go to the documentation of this file.
1 
-
6 
-
25 MODULE gdswzd_mod
- -
27  use ip_grids_mod
-
28  use ip_grid_mod
- -
30 
-
31  IMPLICIT NONE
-
32 
-
33  PRIVATE
-
34 
- -
36 
-
37  INTERFACE gdswzd
-
38  MODULE PROCEDURE gdswzd_1d_array
-
39  MODULE PROCEDURE gdswzd_2d_array
-
40  MODULE PROCEDURE gdswzd_scalar
-
41  module procedure gdswzd_grib1
-
42  module procedure gdswzd_2d_array_grib1
-
43  module procedure gdswzd_grid
-
44  END INTERFACE gdswzd
-
45 
-
46 CONTAINS
-
47 
-
105  subroutine gdswzd_grid(grid,IOPT,NPTS,FILL, &
-
106  XPTS,YPTS,RLON,RLAT,NRET, &
-
107  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
-
108 
-
109  class(ip_grid), intent(in) :: grid
-
110  INTEGER, INTENT(IN ) :: IOPT, NPTS
-
111  INTEGER, INTENT( OUT) :: NRET
-
112  !
-
113  REAL, INTENT(IN ) :: FILL
-
114  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
-
115  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
-
116  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
-
117  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
-
118  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
-
119 
-
120  INTEGER :: IS1, IM, JM, NM, KSCAN, NSCAN, N
-
121  INTEGER :: IOPF, NN, I, J
-
122 
-
123  ! COMPUTE GRID COORDINATES FOR ALL GRID POINTS
-
124  IF(iopt.EQ.0) THEN
-
125  iopf=1
-
126 
-
127  if(grid%descriptor%grid_num.eq.-1)then
-
128  nm = npts
-
129  else
-
130  im = grid%im
-
131  jm = grid%jm
-
132  nm = im * jm
-
133  endif
-
134  nscan = grid%nscan
-
135  kscan = grid%kscan
-
136 
-
137  if (nm > npts) then
-
138  rlat=fill
-
139  rlon=fill
-
140  xpts=fill
-
141  ypts=fill
-
142  return
-
143  end if
-
144 
-
145  select type(grid)
-
146  type is(ip_rot_equid_cylind_egrid)
-
147  if(kscan == 0) then
-
148  is1 = (jm + 1) / 2
-
149  else
-
150  is1 = jm / 2
-
151  end if
-
152 
-
153  DO n=1,nm
-
154  IF(nscan.EQ.0) THEN
-
155  j=(n-1)/im+1
-
156  i=(n-im*(j-1))*2-mod(j+kscan,2)
-
157  ELSE
-
158  nn=(n*2)-1+kscan
-
159  i = (nn-1)/jm + 1
-
160  j = mod(nn-1,jm) + 1
-
161  IF (mod(jm,2)==0.AND.mod(i,2)==0.AND.kscan==0) j = j + 1
-
162  IF (mod(jm,2)==0.AND.mod(i,2)==0.AND.kscan==1) j = j - 1
-
163  ENDIF
-
164  xpts(n)=is1+(i-(j-kscan))/2
-
165  ypts(n)=(i+(j-kscan))/2
-
166  ENDDO
-
167  type is(ip_station_points_grid)
-
168  DO n=1,nm
-
169  xpts(n)=fill
-
170  ypts(n)=fill
-
171  ENDDO
-
172  class default
-
173  DO n=1,nm
-
174  IF(nscan.EQ.0) THEN
-
175  j=(n-1)/im+1
-
176  i=n-im*(j-1)
-
177  ELSE
-
178  i=(n-1)/jm+1
-
179  j=n-jm*(i-1)
-
180  ENDIF
-
181  xpts(n)=i
-
182  ypts(n)=j
-
183  ENDDO
-
184  end select
-
185 
-
186  DO n=nm+1,npts
-
187  xpts(n)=fill
-
188  ypts(n)=fill
-
189  ENDDO
-
190 
-
191  ELSE ! IOPT /= 0
-
192  iopf=iopt
-
193  ENDIF ! IOPT CHECK
-
194 
-
195  call grid%gdswzd(iopf,npts,fill, &
-
196  xpts,ypts,rlon,rlat,nret, &
-
197  crot,srot,xlon,xlat,ylon,ylat,area)
-
198 
-
199  end subroutine gdswzd_grid
-
200 
-
201 
-
278  SUBROUTINE gdswzd_scalar(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
-
279  XPTS,YPTS,RLON,RLAT,NRET, &
-
280  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
-
281 
-
282  IMPLICIT NONE
-
283  !
-
284  INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
-
285  INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
-
286  INTEGER, INTENT(IN ) :: IOPT, NPTS
-
287  INTEGER, INTENT( OUT) :: NRET
-
288  !
-
289  REAL, INTENT(IN ) :: FILL
-
290  REAL, INTENT(INOUT) :: RLON, RLAT
-
291  REAL, INTENT(INOUT) :: XPTS, YPTS
-
292  REAL, OPTIONAL, INTENT( OUT) :: CROT, SROT
-
293  REAL, OPTIONAL, INTENT( OUT) :: XLON, XLAT
-
294  REAL, OPTIONAL, INTENT( OUT) :: YLON, YLAT, AREA
-
295 
-
296  REAL :: RLONA(1),RLATA(1)
-
297  REAL :: XPTSA(1),YPTSA(1)
-
298  REAL :: CROTA(1),SROTA(1)
-
299  REAL :: XLONA(1),XLATA(1)
-
300  REAL :: YLONA(1),YLATA(1),AREAA(1)
-
301 
-
302  rlona(1) = rlon
-
303  rlata(1) = rlat
-
304  xptsa(1) = xpts
-
305  yptsa(1) = ypts
-
306 
-
307  nret = 0
-
308 
-
309  ! CALL WITHOUT EXTRA FIELDS.
-
310 
-
311  IF (.NOT. PRESENT(crot) .AND. &
-
312  .NOT. PRESENT(srot) .AND. &
-
313  .NOT. PRESENT(xlon) .AND. &
-
314  .NOT. PRESENT(xlat) .AND. &
-
315  .NOT. PRESENT(ylon) .AND. &
-
316  .NOT. PRESENT(ylat) .AND. &
-
317  .NOT. PRESENT(area) ) THEN
-
318 
-
319  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
-
320  xptsa,yptsa,rlona,rlata,nret)
-
321 
-
322  rlon = rlona(1)
-
323  rlat = rlata(1)
-
324  xpts = xptsa(1)
-
325  ypts = yptsa(1)
-
326 
-
327  ENDIF
-
328 
-
329  ! MIMIC CALL TO OLD 'GDSWIZ' ROUTINES.
-
330 
-
331  IF (PRESENT(crot) .AND. &
-
332  PRESENT(srot) .AND. &
-
333  .NOT. PRESENT(xlon) .AND. &
-
334  .NOT. PRESENT(xlat) .AND. &
-
335  .NOT. PRESENT(ylon) .AND. &
-
336  .NOT. PRESENT(ylat) .AND. &
-
337  .NOT. PRESENT(area) ) THEN
-
338 
-
339  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
-
340  xptsa,yptsa,rlona,rlata,nret,crota,srota)
-
341 
-
342  rlon = rlona(1)
-
343  rlat = rlata(1)
-
344  xpts = xptsa(1)
-
345  ypts = yptsa(1)
-
346  crot = crota(1)
-
347  srot = srota(1)
-
348 
-
349  ENDIF
-
350 
-
351  ! MIMIC CALL TO OLD 'GDSWZD' ROUTINES.
-
352 
-
353  IF (PRESENT(crot) .AND. &
-
354  PRESENT(srot) .AND. &
-
355  PRESENT(xlon) .AND. &
-
356  PRESENT(xlat) .AND. &
-
357  PRESENT(ylon) .AND. &
-
358  PRESENT(ylat) .AND. &
-
359  PRESENT(area) ) THEN
-
360 
-
361  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
-
362  xptsa,yptsa,rlona,rlata,nret, &
-
363  crota,srota,xlona,xlata,ylona,ylata,areaa)
-
364 
-
365  rlon = rlona(1)
-
366  rlat = rlata(1)
-
367  xpts = xptsa(1)
-
368  ypts = yptsa(1)
-
369  crot = crota(1)
-
370  srot = srota(1)
-
371  xlon = xlona(1)
-
372  xlat = xlata(1)
-
373  ylon = ylona(1)
-
374  ylat = ylata(1)
-
375  area = areaa(1)
-
376 
-
377  ENDIF
-
378 
-
379  RETURN
-
380 
-
381  END SUBROUTINE gdswzd_scalar
-
382 
-
459  SUBROUTINE gdswzd_2d_array(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
-
460  XPTS,YPTS,RLON,RLAT,NRET, &
-
461  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
-
462 
-
463  IMPLICIT NONE
-
464  !
-
465  INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
-
466  INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
-
467  INTEGER, INTENT(IN ) :: IOPT, NPTS
-
468  INTEGER, INTENT( OUT) :: NRET
-
469  !
-
470  REAL, INTENT(IN ) :: FILL
-
471  REAL, INTENT(INOUT) :: RLON(:,:),RLAT(:,:)
-
472  REAL, INTENT(INOUT) :: XPTS(:,:),YPTS(:,:)
-
473  REAL, OPTIONAL, INTENT( OUT) :: CROT(:,:),SROT(:,:)
-
474  REAL, OPTIONAL, INTENT( OUT) :: XLON(:,:),XLAT(:,:)
-
475  REAL, OPTIONAL, INTENT( OUT) :: YLON(:,:),YLAT(:,:),AREA(:,:)
-
476 
-
477  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
-
478  xpts,ypts,rlon,rlat,nret, &
-
479  crot,srot,xlon,xlat,ylon,ylat,area)
-
480 
-
481  END SUBROUTINE gdswzd_2d_array
-
482 
-
665  SUBROUTINE gdswzd_1d_array(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
-
666  XPTS,YPTS,RLON,RLAT,NRET, &
-
667  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
-
668  INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
-
669  INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
-
670  INTEGER, INTENT(IN ) :: IOPT, NPTS
-
671  INTEGER, INTENT( OUT) :: NRET
-
672  !
-
673  REAL, INTENT(IN ) :: FILL
-
674  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
-
675  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
-
676  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
-
677  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
-
678  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
-
679 
-
680  type(grib2_descriptor) :: desc
-
681  class(ip_grid), allocatable :: grid
-
682 
-
683  desc = init_descriptor(igdtnum, igdtlen, igdtmpl)
-
684  call init_grid(grid, desc)
-
685 
-
686  call gdswzd_grid(grid,iopt,npts,fill, &
-
687  xpts,ypts,rlon,rlat,nret, &
-
688  crot,srot,xlon,xlat,ylon,ylat,area)
-
689 
-
690  END SUBROUTINE gdswzd_1d_array
-
691 
-
758  SUBROUTINE gdswzd_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
-
759  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
-
760  INTEGER, INTENT(IN ) :: IOPT, KGDS(200), NPTS
-
761  INTEGER, INTENT( OUT) :: NRET
-
762  !
-
763  REAL, INTENT(IN ) :: FILL
-
764  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
-
765  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
-
766  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
-
767  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
-
768  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
-
769 
-
770 
-
771  type(grib1_descriptor) :: desc
-
772  class(ip_grid), allocatable :: grid
-
773 
-
774  desc = init_descriptor(kgds)
-
775  call init_grid(grid, desc)
-
776 
-
777  call gdswzd_grid(grid,iopt,npts,fill, &
-
778  xpts,ypts,rlon,rlat,nret, &
-
779  crot,srot,xlon,xlat,ylon,ylat,area)
-
780 
-
781  END SUBROUTINE gdswzd_grib1
-
782 
-
783 
-
850  SUBROUTINE gdswzd_2d_array_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
-
851  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
-
852 
-
853  !$$$
-
854  INTEGER, INTENT(IN ) :: IOPT, KGDS(200), NPTS
-
855  INTEGER, INTENT( OUT) :: NRET
-
856  !
-
857  REAL, INTENT(IN ) :: FILL
-
858  REAL, INTENT(INOUT) :: RLON(:,:),RLAT(:,:)
-
859  REAL, INTENT(INOUT) :: XPTS(:,:),YPTS(:,:)
-
860  REAL, OPTIONAL, INTENT( OUT) :: CROT(:,:),SROT(:,:)
-
861  REAL, OPTIONAL, INTENT( OUT) :: XLON(:,:),XLAT(:,:)
-
862  REAL, OPTIONAL, INTENT( OUT) :: YLON(:,:),YLAT(:,:),AREA(:,:)
-
863 
-
864 
-
865  type(grib1_descriptor) :: desc
-
866  class(ip_grid), allocatable :: grid
-
867 
-
868  desc = init_descriptor(kgds)
-
869  call init_grid(grid, desc)
-
870 
-
871  call gdswzd_grid(grid,iopt,npts,fill, &
-
872  xpts,ypts,rlon,rlat,nret, &
-
873  crot,srot,xlon,xlat,ylon,ylat,area)
-
874 
-
875  END SUBROUTINE gdswzd_2d_array_grib1
-
876 
-
877 
-
878 
-
879 END MODULE gdswzd_mod
- - - -
Driver module for gdswzd routines.
Definition: gdswzd_mod.F90:25
-
subroutine, public gdswzd_grib1(KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
Decodes the grib grid description section and returns one of the following (for 1-d arrays):
Definition: gdswzd_mod.F90:760
-
subroutine gdswzd_grid(grid, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
Returns one of the following for a grid object:
Definition: gdswzd_mod.F90:108
-
subroutine, public gdswzd_2d_array_grib1(KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
Decodes the grib grid description section and returns one of the following (for 2-d arrays):
Definition: gdswzd_mod.F90:852
-
subroutine gdswzd_scalar(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
Decodes the grib 2 grid definition template and returns one of the following (for scalars):
Definition: gdswzd_mod.F90:281
-
subroutine gdswzd_1d_array(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
Decodes the grib 2 grid definition template and returns one of the following:
Definition: gdswzd_mod.F90:668
-
subroutine gdswzd_2d_array(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):
Definition: gdswzd_mod.F90:462
-
Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
-
Routines for creating an ip_grid given a Grib descriptor.
-
Abstract ip_grid type.
Definition: ip_grid_mod.F90:10
-
Re-export the individual grids.
Definition: ip_grids_mod.F90:7
-
Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
-
Grib-2 descriptor containing a grib2 GDT represented by an integer array.
-
Abstract grid that holds fields and methods common to all grids.
Definition: ip_grid_mod.F90:58
+Go to the documentation of this file.
1
+
6
+ + +
27 use ip_grids_mod
+
28 use ip_grid_mod
+ +
30
+
31 IMPLICIT NONE
+
32
+
33 PRIVATE
+
34
+ +
36
+
+
37 INTERFACE gdswzd
+
38 MODULE PROCEDURE gdswzd_1d_array
+
39 MODULE PROCEDURE gdswzd_2d_array
+
40 MODULE PROCEDURE gdswzd_scalar
+
41 module procedure gdswzd_grib1
+
42 module procedure gdswzd_2d_array_grib1
+
43 module procedure gdswzd_grid
+
+
44 END INTERFACE gdswzd
+
45
+
46CONTAINS
+
47
+
+
105 subroutine gdswzd_grid(grid,IOPT,NPTS,FILL, &
+
106 XPTS,YPTS,RLON,RLAT,NRET, &
+
107 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
+
108
+
109 class(ip_grid), intent(in) :: grid
+
110 INTEGER, INTENT(IN ) :: IOPT, NPTS
+
111 INTEGER, INTENT( OUT) :: NRET
+
112 !
+
113 REAL, INTENT(IN ) :: FILL
+
114 REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
+
115 REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
+
116 REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
+
117 REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
+
118 REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
+
119
+
120 INTEGER :: IS1, IM, JM, NM, KSCAN, NSCAN, N
+
121 INTEGER :: IOPF, NN, I, J
+
122
+
123 ! COMPUTE GRID COORDINATES FOR ALL GRID POINTS
+
124 IF(iopt.EQ.0) THEN
+
125 iopf=1
+
126
+
127 if(grid%descriptor%grid_num.eq.-1)then
+
128 nm = npts
+
129 else
+
130 im = grid%im
+
131 jm = grid%jm
+
132 nm = im * jm
+
133 endif
+
134 nscan = grid%nscan
+
135 kscan = grid%kscan
+
136
+
137 if (nm > npts) then
+
138 rlat=fill
+
139 rlon=fill
+
140 xpts=fill
+
141 ypts=fill
+
142 return
+
143 end if
+
144
+
145 select type(grid)
+
146 type is(ip_rot_equid_cylind_egrid)
+
147 if(kscan == 0) then
+
148 is1 = (jm + 1) / 2
+
149 else
+
150 is1 = jm / 2
+
151 end if
+
152
+
153 DO n=1,nm
+
154 IF(nscan.EQ.0) THEN
+
155 j=(n-1)/im+1
+
156 i=(n-im*(j-1))*2-mod(j+kscan,2)
+
157 ELSE
+
158 nn=(n*2)-1+kscan
+
159 i = (nn-1)/jm + 1
+
160 j = mod(nn-1,jm) + 1
+
161 IF (mod(jm,2)==0.AND.mod(i,2)==0.AND.kscan==0) j = j + 1
+
162 IF (mod(jm,2)==0.AND.mod(i,2)==0.AND.kscan==1) j = j - 1
+
163 ENDIF
+
164 xpts(n)=is1+(i-(j-kscan))/2
+
165 ypts(n)=(i+(j-kscan))/2
+
166 ENDDO
+
167 type is(ip_station_points_grid)
+
168 DO n=1,nm
+
169 xpts(n)=fill
+
170 ypts(n)=fill
+
171 ENDDO
+
172 class default
+
173 DO n=1,nm
+
174 IF(nscan.EQ.0) THEN
+
175 j=(n-1)/im+1
+
176 i=n-im*(j-1)
+
177 ELSE
+
178 i=(n-1)/jm+1
+
179 j=n-jm*(i-1)
+
180 ENDIF
+
181 xpts(n)=i
+
182 ypts(n)=j
+
183 ENDDO
+
184 end select
+
185
+
186 DO n=nm+1,npts
+
187 xpts(n)=fill
+
188 ypts(n)=fill
+
189 ENDDO
+
190
+
191 ELSE ! IOPT /= 0
+
192 iopf=iopt
+
193 ENDIF ! IOPT CHECK
+
194
+
195 call grid%gdswzd(iopf,npts,fill, &
+
196 xpts,ypts,rlon,rlat,nret, &
+
197 crot,srot,xlon,xlat,ylon,ylat,area)
+
198
+
+
199 end subroutine gdswzd_grid
+
200
+
201
+
+
278 SUBROUTINE gdswzd_scalar(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
+
279 XPTS,YPTS,RLON,RLAT,NRET, &
+
280 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
+
281
+
282 IMPLICIT NONE
+
283 !
+
284 INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
+
285 INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
+
286 INTEGER, INTENT(IN ) :: IOPT, NPTS
+
287 INTEGER, INTENT( OUT) :: NRET
+
288 !
+
289 REAL, INTENT(IN ) :: FILL
+
290 REAL, INTENT(INOUT) :: RLON, RLAT
+
291 REAL, INTENT(INOUT) :: XPTS, YPTS
+
292 REAL, OPTIONAL, INTENT( OUT) :: CROT, SROT
+
293 REAL, OPTIONAL, INTENT( OUT) :: XLON, XLAT
+
294 REAL, OPTIONAL, INTENT( OUT) :: YLON, YLAT, AREA
+
295
+
296 REAL :: RLONA(1),RLATA(1)
+
297 REAL :: XPTSA(1),YPTSA(1)
+
298 REAL :: CROTA(1),SROTA(1)
+
299 REAL :: XLONA(1),XLATA(1)
+
300 REAL :: YLONA(1),YLATA(1),AREAA(1)
+
301
+
302 rlona(1) = rlon
+
303 rlata(1) = rlat
+
304 xptsa(1) = xpts
+
305 yptsa(1) = ypts
+
306
+
307 nret = 0
+
308
+
309 ! CALL WITHOUT EXTRA FIELDS.
+
310
+
311 IF (.NOT. PRESENT(crot) .AND. &
+
312 .NOT. PRESENT(srot) .AND. &
+
313 .NOT. PRESENT(xlon) .AND. &
+
314 .NOT. PRESENT(xlat) .AND. &
+
315 .NOT. PRESENT(ylon) .AND. &
+
316 .NOT. PRESENT(ylat) .AND. &
+
317 .NOT. PRESENT(area) ) THEN
+
318
+
319 CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
+
320 xptsa,yptsa,rlona,rlata,nret)
+
321
+
322 rlon = rlona(1)
+
323 rlat = rlata(1)
+
324 xpts = xptsa(1)
+
325 ypts = yptsa(1)
+
326
+
327 ENDIF
+
328
+
329 ! MIMIC CALL TO OLD 'GDSWIZ' ROUTINES.
+
330
+
331 IF (PRESENT(crot) .AND. &
+
332 PRESENT(srot) .AND. &
+
333 .NOT. PRESENT(xlon) .AND. &
+
334 .NOT. PRESENT(xlat) .AND. &
+
335 .NOT. PRESENT(ylon) .AND. &
+
336 .NOT. PRESENT(ylat) .AND. &
+
337 .NOT. PRESENT(area) ) THEN
+
338
+
339 CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
+
340 xptsa,yptsa,rlona,rlata,nret,crota,srota)
+
341
+
342 rlon = rlona(1)
+
343 rlat = rlata(1)
+
344 xpts = xptsa(1)
+
345 ypts = yptsa(1)
+
346 crot = crota(1)
+
347 srot = srota(1)
+
348
+
349 ENDIF
+
350
+
351 ! MIMIC CALL TO OLD 'GDSWZD' ROUTINES.
+
352
+
353 IF (PRESENT(crot) .AND. &
+
354 PRESENT(srot) .AND. &
+
355 PRESENT(xlon) .AND. &
+
356 PRESENT(xlat) .AND. &
+
357 PRESENT(ylon) .AND. &
+
358 PRESENT(ylat) .AND. &
+
359 PRESENT(area) ) THEN
+
360
+
361 CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
+
362 xptsa,yptsa,rlona,rlata,nret, &
+
363 crota,srota,xlona,xlata,ylona,ylata,areaa)
+
364
+
365 rlon = rlona(1)
+
366 rlat = rlata(1)
+
367 xpts = xptsa(1)
+
368 ypts = yptsa(1)
+
369 crot = crota(1)
+
370 srot = srota(1)
+
371 xlon = xlona(1)
+
372 xlat = xlata(1)
+
373 ylon = ylona(1)
+
374 ylat = ylata(1)
+
375 area = areaa(1)
+
376
+
377 ENDIF
+
378
+
379 RETURN
+
380
+
+
381 END SUBROUTINE gdswzd_scalar
+
382
+
+
459 SUBROUTINE gdswzd_2d_array(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
+
460 XPTS,YPTS,RLON,RLAT,NRET, &
+
461 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
+
462
+
463 IMPLICIT NONE
+
464 !
+
465 INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
+
466 INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
+
467 INTEGER, INTENT(IN ) :: IOPT, NPTS
+
468 INTEGER, INTENT( OUT) :: NRET
+
469 !
+
470 REAL, INTENT(IN ) :: FILL
+
471 REAL, INTENT(INOUT) :: RLON(:,:),RLAT(:,:)
+
472 REAL, INTENT(INOUT) :: XPTS(:,:),YPTS(:,:)
+
473 REAL, OPTIONAL, INTENT( OUT) :: CROT(:,:),SROT(:,:)
+
474 REAL, OPTIONAL, INTENT( OUT) :: XLON(:,:),XLAT(:,:)
+
475 REAL, OPTIONAL, INTENT( OUT) :: YLON(:,:),YLAT(:,:),AREA(:,:)
+
476
+
477 CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
+
478 xpts,ypts,rlon,rlat,nret, &
+
479 crot,srot,xlon,xlat,ylon,ylat,area)
+
480
+
+
481 END SUBROUTINE gdswzd_2d_array
+
482
+
+
665 SUBROUTINE gdswzd_1d_array(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
+
666 XPTS,YPTS,RLON,RLAT,NRET, &
+
667 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
+
668 INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
+
669 INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
+
670 INTEGER, INTENT(IN ) :: IOPT, NPTS
+
671 INTEGER, INTENT( OUT) :: NRET
+
672 !
+
673 REAL, INTENT(IN ) :: FILL
+
674 REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
+
675 REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
+
676 REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
+
677 REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
+
678 REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
+
679
+
680 type(grib2_descriptor) :: desc
+
681 class(ip_grid), allocatable :: grid
+
682
+
683 desc = init_descriptor(igdtnum, igdtlen, igdtmpl)
+
684 call init_grid(grid, desc)
+
685
+
686 call gdswzd_grid(grid,iopt,npts,fill, &
+
687 xpts,ypts,rlon,rlat,nret, &
+
688 crot,srot,xlon,xlat,ylon,ylat,area)
+
689
+
+
690 END SUBROUTINE gdswzd_1d_array
+
691
+
+
758 SUBROUTINE gdswzd_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
+
759 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
+
760 INTEGER, INTENT(IN ) :: IOPT, KGDS(200), NPTS
+
761 INTEGER, INTENT( OUT) :: NRET
+
762 !
+
763 REAL, INTENT(IN ) :: FILL
+
764 REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
+
765 REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
+
766 REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
+
767 REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
+
768 REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
+
769
+
770
+
771 type(grib1_descriptor) :: desc
+
772 class(ip_grid), allocatable :: grid
+
773
+
774 desc = init_descriptor(kgds)
+
775 call init_grid(grid, desc)
+
776
+
777 call gdswzd_grid(grid,iopt,npts,fill, &
+
778 xpts,ypts,rlon,rlat,nret, &
+
779 crot,srot,xlon,xlat,ylon,ylat,area)
+
780
+
+
781 END SUBROUTINE gdswzd_grib1
+
782
+
783
+
+
850 SUBROUTINE gdswzd_2d_array_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
+
851 CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
+
852
+
853 !$$$
+
854 INTEGER, INTENT(IN ) :: IOPT, KGDS(200), NPTS
+
855 INTEGER, INTENT( OUT) :: NRET
+
856 !
+
857 REAL, INTENT(IN ) :: FILL
+
858 REAL, INTENT(INOUT) :: RLON(:,:),RLAT(:,:)
+
859 REAL, INTENT(INOUT) :: XPTS(:,:),YPTS(:,:)
+
860 REAL, OPTIONAL, INTENT( OUT) :: CROT(:,:),SROT(:,:)
+
861 REAL, OPTIONAL, INTENT( OUT) :: XLON(:,:),XLAT(:,:)
+
862 REAL, OPTIONAL, INTENT( OUT) :: YLON(:,:),YLAT(:,:),AREA(:,:)
+
863
+
864
+
865 type(grib1_descriptor) :: desc
+
866 class(ip_grid), allocatable :: grid
+
867
+
868 desc = init_descriptor(kgds)
+
869 call init_grid(grid, desc)
+
870
+
871 call gdswzd_grid(grid,iopt,npts,fill, &
+
872 xpts,ypts,rlon,rlat,nret, &
+
873 crot,srot,xlon,xlat,ylon,ylat,area)
+
874
+
+
875 END SUBROUTINE gdswzd_2d_array_grib1
+
876
+
877
+
878
+
879END MODULE gdswzd_mod
+ + + +
Driver module for gdswzd routines.
+
subroutine gdswzd_grid(grid, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
Returns one of the following for a grid object:
+
subroutine gdswzd_1d_array(igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
Decodes the grib 2 grid definition template and returns one of the following:
+
subroutine, public gdswzd_grib1(kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
Decodes the grib grid description section and returns one of the following (for 1-d arrays):
+
subroutine gdswzd_scalar(igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
Decodes the grib 2 grid definition template and returns one of the following (for scalars):
+
subroutine, public gdswzd_2d_array_grib1(kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
Decodes the grib grid description section and returns one of the following (for 2-d arrays):
+
subroutine gdswzd_2d_array(igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):
+
Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
+
Routines for creating an ip_grid given a Grib descriptor.
+
Abstract ip_grid type.
+
Re-export the individual grids.
+
Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
+
Grib-2 descriptor containing a grib2 GDT represented by an integer array.
+
Abstract grid that holds fields and methods common to all grids.
diff --git a/globals.html b/globals.html index 462f477c..ddb0ca33 100644 --- a/globals.html +++ b/globals.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Globals @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,300 +76,139 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
-

- c -

diff --git a/globals_func.html b/globals_func.html index bc86712c..a1fbfb56 100644 --- a/globals_func.html +++ b/globals_func.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Globals @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +

@@ -62,7 +62,7 @@
@@ -76,300 +76,139 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-  +
Here is a list of all documented functions with links to the documentation:
-

- c -

diff --git a/hierarchy.html b/hierarchy.html index 36d6a3fd..059f9332 100644 --- a/hierarchy.html +++ b/hierarchy.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Class Hierarchy @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,48 +76,54 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
Class Hierarchy
+
Class Hierarchy
This inheritance list is sorted roughly, but not completely, alphabetically:
[detail level 12]
- + - + - + - + - + - + - + - + - + - + - + - + - + - + - +
 Cgdswzd_mod::gdswzd
 Cip_grid_mod::gdswzd_interface
 Cip_grid_mod::gdswzd_interface
 Cip_grid_descriptor_mod::init_descriptor
 Cip_grid_mod::init_grib1_interface
 Cip_grid_mod::init_grib1_interface
 Cip_grid_mod::init_grib2_interface
 Cip_grid_factory_mod::init_grid
 Cip_grid_factory_mod::init_grid
 Cbicubic_interp_mod::interpolate_bicubic
 Cbilinear_interp_mod::interpolate_bilinear
 Cbilinear_interp_mod::interpolate_bilinear
 Cbudget_interp_mod::interpolate_budget
 Cneighbor_interp_mod::interpolate_neighbor
 Cneighbor_interp_mod::interpolate_neighbor
 Cneighbor_budget_interp_mod::interpolate_neighbor_budget
 Cspectral_interp_mod::interpolate_spectral
 Cspectral_interp_mod::interpolate_spectral
 Cip_grid_mod::ip_gridAbstract grid that holds fields and methods common to all grids
 Cip_equid_cylind_grid_mod::ip_equid_cylind_grid
 Cip_equid_cylind_grid_mod::ip_equid_cylind_grid
 Cip_gaussian_grid_mod::ip_gaussian_grid
 Cip_lambert_conf_grid_mod::ip_lambert_conf_grid
 Cip_lambert_conf_grid_mod::ip_lambert_conf_grid
 Cip_mercator_grid_mod::ip_mercator_grid
 Cip_polar_stereo_grid_mod::ip_polar_stereo_grid
 Cip_polar_stereo_grid_mod::ip_polar_stereo_grid
 Cip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid
 Cip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid
 Cip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid
 Cip_station_points_grid_mod::ip_station_points_grid
 Cip_grid_descriptor_mod::ip_grid_descriptorAbstract descriptor object which represents a grib1 or grib2 descriptor
 Cip_grid_descriptor_mod::ip_grid_descriptorAbstract descriptor object which represents a grib1 or grib2 descriptor
 Cip_grid_descriptor_mod::grib1_descriptorDescriptor representing a grib1 grib descriptor section (GDS) with an integer array
 Cip_grid_descriptor_mod::grib2_descriptorGrib-2 descriptor containing a grib2 GDT represented by an integer array
 Cip_grid_descriptor_mod::grib2_descriptorGrib-2 descriptor containing a grib2 GDT represented by an integer array
 Cipolates_mod::ipolates
 Cipolatev_mod::ipolatev
 Cipolatev_mod::ipolatev
 Cip_grid_descriptor_mod::operator(==)
 Cip_grid_mod::operator(==)Check equality
 Cip_grid_mod::operator(==)Check equality
 Cspectral_interp_mod::polates4
 Cspectral_interp_mod::polatev4
 Cspectral_interp_mod::polatev4
@@ -125,7 +131,7 @@ diff --git a/index.html b/index.html index 6b7d9944..f057485f 100644 --- a/index.html +++ b/index.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: Introduction @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,23 +76,30 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
-
Introduction
+
+
Introduction
-Previous versions:

5.0.0, 4.4.0, 4.3.0, 4.2.0, 4.1.0, 4.0.0 +Previous versions:

5.1.0, 5.0.0, 4.4.0, 4.3.0, 4.2.0, 4.1.0, 4.0.0 -

The NCEP general interpolation library (NCEPLIBS-ip) contains Fortran 90 subprograms to be used for interpolating between nearly all grids used at NCEP. The library is particularly efficient when interpolating many fields at one time. It also contains functionality for interpolating, transforming, and otherwise manipulating spectral data (these functions were formerly contained in the NCEPLIBS-sp library).

+

The NCEP general interpolation library (NCEPLIBS-ip) contains Fortran 90 subprograms to be used for interpolating between nearly all grids used at NCEP. The library is particularly efficient when interpolating many fields at one time. It also contains functionality for interpolating, transforming, and otherwise manipulating spectral data (these functions were formerly contained in the NCEPLIBS-sp library).

NCEPLIBS-ip supports compilation with the GNU Compiler Collection (gfortran), Intel Classic (ifort), and Intel OneAPI (ifx) compilers. In the case of Intel OneAPI (IntelLLVM), it is recommended to use at least version 2023.2.1 to avoid any number of compiler issues.

Note
Some routines may behave poorly or unpredictably when using 4-byte reals (libip_4). For instance, there is an ATAN2 function used for polar stereo grids where for certain regions of certain grids, floating point differences between 4-byte output values (~1e-7) can be amplified into sizable differences in output field values. Some applications may therefore benefit from the use of 8-byte reals (libip_d or libip_8).
-

NCEPLIBS-ip uses several BLAS/LAPACK routines in the splat() subroutine, and therefore requires an external BLAS/LAPACK provider. In practice, this should generally be OpenBLAS, which is the spack-stack BLAS/LAPACK provider.

+

NCEPLIBS-ip uses several BLAS/LAPACK routines in the splat() subroutine, and therefore requires an external BLAS/LAPACK provider. In practice, this should generally be OpenBLAS, which is the spack-stack BLAS/LAPACK provider.

Interpolation

@@ -192,7 +199,7 @@

If the output grid definition template number is negative, then the output data may be just a set of station points. In this case, the user must pass the number of points to be output along with their latitudes and longitudes.

For vector interpolation, the vector rotations parameters must also be passed. On the other hand, for non-negative output data representation types, the number of output grid points and their latitudes and longitudes (and the vector rotation parameters for vector interpolation) are all returned by the interpolation subprograms.

If an output equidistant cylindrical grid contains multiple pole points, then the pole points are forced to be self-consistent. That is, scalar fields are obliged to be constant at the pole and vector components are obliged to exhibit a wavenumber one variation at the pole.

-

Generally, only regular grids can be interpolated in this library. However, the thinned WAFS grids may be expanded to a regular grid (or vice versa) using subprograms ipxwafs(), ipxwafs2(), or ipxwafs3(). Eta data (with Arakawa "E" staggering) on the "H" or "V" grid may be expanded to a filled regular grid (or vice versa) using subprogram ipxetas().

+

Generally, only regular grids can be interpolated in this library. However, the thinned WAFS grids may be expanded to a regular grid (or vice versa) using subprograms ipxwafs(), ipxwafs2(), or ipxwafs3(). Eta data (with Arakawa "E" staggering) on the "H" or "V" grid may be expanded to a filled regular grid (or vice versa) using subprogram ipxetas().

Return Codes

The return code issued by an interpolation subprogram determines whether it ran successfully or how it failed. Check nonzero return codes against the docblock of the respective subprogram.

@@ -217,11 +224,11 @@

neighbor_budget_interp_mod neighbor-budget interpolation -polfixs() make multiple pole scalar values consistent +polfixs() make multiple pole scalar values consistent -movect() move a vector along a great circle +movect() move a vector along a great circle -polfixv() make multiple pole vector values consistent +polfixv() make multiple pole vector values consistent

Grid description section decoders:

@@ -230,34 +237,34 @@

- + - + - + - + - + - + - + - + - +
gdswzd() grid description section (GDS) wizard
gdswzd_c() C wrapper for calling gdswzd
gdswzd_c() C wrapper for calling gdswzd
gdswzd_equid_cylind() GDS wizard for equidistant cyclindrical
gdswzd_equid_cylind() GDS wizard for equidistant cyclindrical
gdswzd_mercator() GDS wizard for mercator cyclindrical
gdswzd_mercator() GDS wizard for mercator cyclindrical
gdswzd_lambert_conf() GDS wizard for lambert conformal conical
gdswzd_lambert_conf() GDS wizard for lambert conformal conical
gdswzd_gaussian() GDS wizard for gaussian cyclindrical
gdswzd_gaussian() GDS wizard for gaussian cyclindrical
gdswzd_polar_stereo() GDS wizard for polar stereographic
gdswzd_polar_stereo() GDS wizard for polar stereographic
gdswzd_rot_equid_cylind_egrid() GDS wizard for rotated equidistant cyclindrical "e" stagger.
gdswzd_rot_equid_cylind_egrid() GDS wizard for rotated equidistant cyclindrical "e" stagger.
gdswzd_rot_equid_cylind() GDS wizard for rotated equidistant cyclindrical non "e" stagger.
gdswzd_rot_equid_cylind() GDS wizard for rotated equidistant cyclindrical non "e" stagger.
field_pos() return field position for a given grid point
field_pos() return field position for a given grid point

Transform subprograms for special irregular grids:

- + - + - +
Name Function
ipxwafs() expand or contract wafs grids
ipxwafs() expand or contract wafs grids
ipxwafs2() expand or contract wafs grids
ipxwafs2() expand or contract wafs grids
ipxwafs3() expand or contract wafs grids
ipxwafs3() expand or contract wafs grids

Spectral Transformation & Processing

@@ -272,82 +279,82 @@

Name Function -sptrun() Spectrally truncate gridded scalar fields +sptrun() Spectrally truncate gridded scalar fields -sptrunv() Spectrally truncate gridded vector fields +sptrunv() Spectrally truncate gridded vector fields -sptrung() Spectrally interpolate scalars to stations +sptrung() Spectrally interpolate scalars to stations -sptrungv() Spectrally interpolate vectors to stations +sptrungv() Spectrally interpolate vectors to stations -sptruns() Spectrally interpolate scalars to polar stereo +sptruns() Spectrally interpolate scalars to polar stereo -sptrunsv() Spectrally interpolate vectors to polar stereo +sptrunsv() Spectrally interpolate vectors to polar stereo -sptrunm() Spectrally interpolate scalars to Mercator +sptrunm() Spectrally interpolate scalars to Mercator -sptrunmv() Spectrally interpolate vectors to Mercator +sptrunmv() Spectrally interpolate vectors to Mercator

Spectral transforms between wave and grid

- + - + - + - + - + - + - + - + - + - + - + - +
Name Function
sptran() Perform a scalar spherical transform
sptran() Perform a scalar spherical transform
sptranv() Perform a vector spherical transform
sptranv() Perform a vector spherical transform
sptrand() Perform a gradient spherical transform
sptrand() Perform a gradient spherical transform
sptgpt() Transform spectral scalar to station points
sptgpt() Transform spectral scalar to station points
sptgptv() Transform spectral vector to station points
sptgptv() Transform spectral vector to station points
sptgptd() Transform spectral to station point gradients
sptgptd() Transform spectral to station point gradients
sptgps() Transform spectral scalar to polar stereo
sptgps() Transform spectral scalar to polar stereo
sptgpsv() Transform spectral vector to polar stereo
sptgpsv() Transform spectral vector to polar stereo
sptgpsd() Transform spectral to polar stereo gradients
sptgpsd() Transform spectral to polar stereo gradients
sptgpm() Transform spectral scalar to Mercator
sptgpm() Transform spectral scalar to Mercator
sptgpmv() Transform spectral vector to Mercator
sptgpmv() Transform spectral vector to Mercator
sptgpmd() Transform spectral to Mercator gradients
sptgpmd() Transform spectral to Mercator gradients

Spectral transform utilities

- + - + - + - + - + - + - + - + - + - +
Name Function
spwget() Get wave-space constants
spwget() Get wave-space constants
splat() Compute latitude functions
splat() Compute latitude functions
speps() Compute utility spectral fields
speps() Compute utility spectral fields
splegend() Compute Legendre polynomials
splegend() Compute Legendre polynomials
spanaly() Analyze spectral from Fourier
spanaly() Analyze spectral from Fourier
spsynth() Synthesize Fourier from spectral
spsynth() Synthesize Fourier from spectral
spdz2uv() Compute winds from divergence and vorticity
spdz2uv() Compute winds from divergence and vorticity
spuv2dz() Compute divergence and vorticity from winds
spuv2dz() Compute divergence and vorticity from winds
spgradq() Compute gradient in spectral space
spgradq() Compute gradient in spectral space
splaplac() Compute Laplacian in spectral space
splaplac() Compute Laplacian in spectral space

Examples: Interpolation Routines

Example 1. Read a grib 2 file of scalar data on a global regular 1-deg lat/lon grid and call ipolates to interpolate it to NCEP standard grid 218, a lambert conformal grid. Uses the NCEP G2 library to degrib the data.

program example_1
-
use ip_mod
+
use ip_mod
use grib_mod ! ncep grib 2 library
implicit none
@@ -548,7 +555,7 @@

close(10)
end program example_1
-
Top-level module for the ip library which re-exports public routines such as ipolates,...
Definition: ip_mod.F90:6
+
Top-level module for the ip library which re-exports public routines such as ipolates,...
Definition ip_mod.F90:6

Example 2. Read a grib 2 file of u/v wind data on a global regular 1-deg lat/lon grid and call ipolatev to interpolate it to four random station points. Uses the NCEP G2 library to degrib the data.

program example_2
@@ -804,7 +811,7 @@

imax=kgds(2,1)
jmax=kgds(3,1)
c
-
call sptruns(iromb,maxwv,idrt,imax,jmax,km,nps,
+
call sptruns(iromb,maxwv,idrt,imax,jmax,km,nps,
& 0,0,0,jf,0,0,0,0,true,xmesh,orient,f,gn,gs)
c
do k=1,km
@@ -884,7 +891,7 @@

imax=kgds(2,1)
jmax=kgds(3,1)
c
-
call sptrunsv(iromb,maxwv,idrt,imax,jmax,km,nps,
+
call sptrunsv(iromb,maxwv,idrt,imax,jmax,km,nps,
& 0,0,0,jf,0,0,0,0,true,xmesh,orient,u,v,
& .true.,un,vn,us,vs,.false.,dum,dum,dum,dum,
& .false.,dum,dum,dum,dum)
@@ -955,8 +962,8 @@

enddo
c
end
-
subroutine sptruns(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NPS, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, TRUE, XMESH, ORIENT, GRIDI, GN, GS)
This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
Definition: sptruns.f:75
-
subroutine 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)
This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
Definition: sptrunsv.f:94
+
subroutine sptruns(iromb, maxwv, idrti, imaxi, jmaxi, kmax, nps, iprime, iskipi, jskipi, kskipi, kgskip, niskip, njskip, jcpu, true, xmesh, orient, gridi, gn, gs)
This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
Definition sptruns.f:75
+
subroutine 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)
This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
Definition sptrunsv.f:94

Example 2. Spectrally truncate winds in place on a latlon grid.

c unit number 11 is the input latlon grib file
c unit number 31 is the input latlon grib index file
@@ -1009,7 +1016,7 @@

imax=kgds(2,1)
jmax=kgds(3,1)
c
-
call sptrunv(iromb,maxwv,idrt,imax,jmax,idrt,imax,jmax,km,
+
call sptrunv(iromb,maxwv,idrt,imax,jmax,idrt,imax,jmax,km,
& 0,0,0,jf,0,0,jf,0,u,v,.true.,u,v,
& .false.,dum,dum,.false.,dum,dum)
c
@@ -1023,7 +1030,7 @@

enddo
c
end
-
subroutine 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)
This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
Definition: sptrunv.f:96
+
subroutine 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)
This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
Definition sptrunv.f:96

Example 3. Compute latlon temperatures from spectral temperatures and compute latlon winds from spectral divergence and vorticity.

c unit number 11 is the input sigma file
c unit number 51 is the output latlon file
@@ -1043,9 +1050,9 @@

do k=1,levs
read(11) (t(m,k),m=1,mx)
enddo
-
call sptran(iromb,maxwv,idrt,im,jm,levs,0,0,0,0,0,0,0,0,1,
+
call sptran(iromb,maxwv,idrt,im,jm,levs,0,0,0,0,0,0,0,0,1,
& t,tg(1,1,1),tg(1,jm,1),1)
-
call sptran(
+
call sptran(
do k=1,levs
write(51) ((tg(i,j,k),i=1,im),j=1,jm)
enddo
@@ -1054,22 +1061,22 @@

read(11) (d(m,k),m=1,mx)
read(11) (z(m,k),m=1,mx)
enddo
-
call sptranv(iromb,maxwv,idrt,im,jm,levs,0,0,0,0,0,0,0,0,1,
+
call sptranv(iromb,maxwv,idrt,im,jm,levs,0,0,0,0,0,0,0,0,1,
& d,z,ug(1,1,1),ug(1,jm,1),vg(1,1,1),vg(1,jm,1),1)
do k=1,levs
write(51) ((ug(i,j,k),i=1,im),j=1,jm)
write(51) ((vg(i,j,k),i=1,im),j=1,jm)
enddo
end
-
subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptran.f:88
-
subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition: sptranv.f:91
+
subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptran.f:88
+
subroutine sptranv(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition sptranv.f:91

diff --git a/index.js b/index.js new file mode 100644 index 00000000..b46409a8 --- /dev/null +++ b/index.js @@ -0,0 +1,22 @@ +var index = +[ + [ "Interpolation", "index.html#autotoc_md1", [ + [ "Interpolation Methods", "index.html#autotoc_md2", [ + [ "Bilinear Interpolation Method", "index.html#autotoc_md3", null ], + [ "Bicubic Interpolation Method", "index.html#autotoc_md4", null ], + [ "Neighbor Interpolation Method", "index.html#autotoc_md5", null ], + [ "Budget Interpolation Method", "index.html#autotoc_md6", null ], + [ "Spectral Interpolation Method", "index.html#autotoc_md7", null ], + [ "Neighbor-Budget Interpolation Method", "index.html#autotoc_md8", null ] + ] ], + [ "Vectors and Scalars", "index.html#autotoc_md9", null ], + [ "Grids", "index.html#autotoc_md10", null ], + [ "Return Codes", "index.html#autotoc_md11", null ], + [ "Entry point list: interpolation", "index.html#autotoc_md12", null ] + ] ], + [ "Spectral Transformation & Processing", "index.html#autotoc_md13", [ + [ "Entry Point List: Spectral Interpolation & Transformation", "index.html#autotoc_md14", null ] + ] ], + [ "Examples: Interpolation Routines", "index.html#autotoc_md15", null ], + [ "Examples: Spectral Processing & Transformation", "index.html#autotoc_md16", null ] +]; \ No newline at end of file diff --git a/interfacebicubic__interp__mod_1_1interpolate__bicubic.html b/interfacebicubic__interp__mod_1_1interpolate__bicubic.html index c8d35bcd..e9b68a73 100644 --- a/interfacebicubic__interp__mod_1_1interpolate__bicubic.html +++ b/interfacebicubic__interp__mod_1_1interpolate__bicubic.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: bicubic_interp_mod::interpolate_bicubic Interface Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +

@@ -62,7 +62,7 @@
@@ -76,46 +76,49 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
bicubic_interp_mod::interpolate_bicubic Interface Reference
+Public Member Functions
+
bicubic_interp_mod::interpolate_bicubic Interface Reference

- - - - - - + + + + + +

-Private Member Functions

subroutine interpolate_bicubic_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
 This subprogram performs bicubic interpolation from any grid to any grid for scalar fields. More...
 
subroutine interpolate_bicubic_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs bicubic interpolation from any grid to any grid for vector fields. More...

+Public Member Functions

subroutine interpolate_bicubic_scalar (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
 This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.
 
subroutine interpolate_bicubic_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs bicubic interpolation from any grid to any grid for vector fields.
 

Detailed Description

Definition at line 17 of file bicubic_interp_mod.F90.

Member Function/Subroutine Documentation

- -

◆ interpolate_bicubic_scalar()

+ +

◆ interpolate_bicubic_scalar()

- - - - + - + - + - + - + - + @@ -158,7 +164,7 @@

Computes the laplacian or the inverse laplacian of a scalar field in spectral space.

-

Subprogram speps() should be called already.

+

Subprogram speps() should be called already.

The Laplacian of Q(L,N) is simply -N*(N+1)/A**2*Q(L,N)

Parameters

- + @@ -133,79 +136,79 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + @@ -213,11 +216,6 @@

-private -

-
subroutine bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_scalar ( integer, dimension(20), intent(in) IPOPT, ipopt,
integer, intent(in) MI, mi,
integer, intent(in) MO, mo,
integer, intent(in) KM, km,
integer, dimension(km), intent(in) IBI, ibi,
logical*1, dimension(mi,km), intent(in) LI, li,
real, dimension(mi,km), intent(in) GI, gi,
integer, intent(inout) NO, no,
real, dimension(mo), intent(inout) RLAT, rlat,
real, dimension(mo), intent(inout) RLON, rlon,
integer, dimension(km), intent(out) IBO, ibo,
logical*1, dimension(mo,km), intent(out) LO, lo,
real, dimension(mo,km), intent(out) GO, go,
integer, intent(out) IRET iret 

This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.

@@ -265,14 +263,11 @@

-

◆ interpolate_bicubic_vector()

+ +

◆ interpolate_bicubic_vector()

- - - - + - + - + - + - + - + - + - + @@ -202,7 +208,7 @@

diff --git a/spgrady_8f.js b/spgrady_8f.js index f8529204..78b11af5 100644 --- a/spgrady_8f.js +++ b/spgrady_8f.js @@ -1,4 +1,4 @@ var spgrady_8f = [ - [ "spgrady", "spgrady_8f.html#a1b3e38e56560de7d7dcf19ea3e931cf1", null ] + [ "spgrady", "spgrady_8f.html#aa5e7c64159f113cfa5ff59ab02fdceb2", null ] ]; \ No newline at end of file diff --git a/spgrady_8f_source.html b/spgrady_8f_source.html index 1d44b973..acede98e 100644 --- a/spgrady_8f_source.html +++ b/spgrady_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spgrady.f Source File @@ -23,10 +23,9 @@

@@ -400,11 +395,6 @@

-private -

-
subroutine bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_vector
diff --git a/interfacebicubic__interp__mod_1_1interpolate__bicubic.js b/interfacebicubic__interp__mod_1_1interpolate__bicubic.js index 22f72d65..cb13de0c 100644 --- a/interfacebicubic__interp__mod_1_1interpolate__bicubic.js +++ b/interfacebicubic__interp__mod_1_1interpolate__bicubic.js @@ -1,5 +1,5 @@ var interfacebicubic__interp__mod_1_1interpolate__bicubic = [ - [ "interpolate_bicubic_scalar", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html#acbfecc99184cf9ae71b2c9f79c7d4077", null ], + [ "interpolate_bicubic_scalar", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html#a8bf083dfa615324f36b3f9f9bb0e69f0", null ], [ "interpolate_bicubic_vector", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html#aac45c15e1c9d76158d72e62ccaca915b", null ] ]; \ No newline at end of file diff --git a/interfacebilinear__interp__mod_1_1interpolate__bilinear.html b/interfacebilinear__interp__mod_1_1interpolate__bilinear.html index cea3853c..2b51fcad 100644 --- a/interfacebilinear__interp__mod_1_1interpolate__bilinear.html +++ b/interfacebilinear__interp__mod_1_1interpolate__bilinear.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: bilinear_interp_mod::interpolate_bilinear Interface Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,46 +76,49 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
bilinear_interp_mod::interpolate_bilinear Interface Reference
+Public Member Functions
+
bilinear_interp_mod::interpolate_bilinear Interface Reference
- - - - - - - + + + + + + +

-Private Member Functions

subroutine interpolate_bilinear_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
 This subprogram performs bilinear interpolation from any grid to any grid for scalar fields. More...
 
subroutine interpolate_bilinear_vector (ipopt, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
 This subprogram performs bilinear interpolation from any grid to any grid for vector fields. More...
 

+Public Member Functions

subroutine interpolate_bilinear_scalar (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
 This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.
 
subroutine interpolate_bilinear_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs bilinear interpolation from any grid to any grid for vector fields.
 

Detailed Description

Definition at line 19 of file bilinear_interp_mod.F90.

Member Function/Subroutine Documentation

- -

◆ interpolate_bilinear_scalar()

+ +

◆ interpolate_bilinear_scalar()

- - - - + - + - + - + - + - + - + @@ -195,7 +201,7 @@

diff --git a/spgradx_8f.js b/spgradx_8f.js index b419f805..c6a529e8 100644 --- a/spgradx_8f.js +++ b/spgradx_8f.js @@ -1,4 +1,4 @@ var spgradx_8f = [ - [ "spgradx", "spgradx_8f.html#a749bc07e763e9cd44490fff2284d00b4", null ] + [ "spgradx", "spgradx_8f.html#ab0028bbf9c3fd5bc674ee1309af4e5eb", null ] ]; \ No newline at end of file diff --git a/spgradx_8f_source.html b/spgradx_8f_source.html index 32de9c2d..df41f7ef 100644 --- a/spgradx_8f_source.html +++ b/spgradx_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spgradx.f Source File @@ -23,10 +23,9 @@

- + @@ -133,79 +136,79 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + @@ -213,11 +216,6 @@

-private -

-
subroutine bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_scalar ( integer, dimension(20), intent(in) IPOPT, ipopt,
integer, intent(in) MI, mi,
integer, intent(in) MO, mo,
integer, intent(in) KM, km,
integer, dimension(km), intent(in) IBI, ibi,
logical*1, dimension(mi,km), intent(in) LI, li,
real, dimension(mi,km), intent(in) GI, gi,
integer, intent(inout) NO, no,
real, dimension(mo), intent(inout) RLAT, rlat,
real, dimension(mo), intent(inout) RLON, rlon,
integer, dimension(km), intent(out) IBO, ibo,
logical*1, dimension(mo,km), intent(out) LO, lo,
real, dimension(mo,km), intent(out) GO, go,
integer, intent(out) IRET iret 

This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.

@@ -260,14 +258,11 @@

-

◆ interpolate_bilinear_vector()

+ +

◆ interpolate_bilinear_vector()

- - - - + - + - + - + - + - + - + - + - + - + @@ -182,7 +188,7 @@

Computes the horizontal vector gradient of a scalar field in spectral space.

-

Subprogram speps() should be called already.

+

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.

@@ -214,7 +220,7 @@

diff --git a/spgradq_8f.js b/spgradq_8f.js index f2dc8b8f..850628a2 100644 --- a/spgradq_8f.js +++ b/spgradq_8f.js @@ -1,4 +1,4 @@ var spgradq_8f = [ - [ "spgradq", "spgradq_8f.html#a0bb358cf2a405ce9f17c6e5dfde65849", null ] + [ "spgradq", "spgradq_8f.html#a467a372e742d413302011b932c54add5", null ] ]; \ No newline at end of file diff --git a/spgradq_8f_source.html b/spgradq_8f_source.html index b1b29ede..4f68b4d0 100644 --- a/spgradq_8f_source.html +++ b/spgradq_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spgradq.f Source File @@ -23,10 +23,9 @@

@@ -291,103 +286,103 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -395,11 +390,6 @@

-private -

-
subroutine bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_vector integer, intent(in) MI, mi,
integer, intent(in) MO, mo,
integer, intent(in) KM, km,
integer, dimension(km), intent(in) IBI, ibi,
logical*1, dimension(mi,km), intent(in) LI, li,
real, dimension(mi,km), intent(in) UI, ui,
real, dimension(mi,km), intent(in) VI, vi,
integer, intent(inout) NO, no,
real, dimension(mo), intent(inout) RLAT, rlat,
real, dimension(mo), intent(inout) RLON, rlon,
real, dimension(mo), intent(inout) CROT, crot,
real, dimension(mo), intent(inout) SROT, srot,
integer, dimension(km), intent(out) IBO, ibo,
logical*1, dimension(mo,km), intent(out) LO, lo,
real, dimension(mo,km), intent(out) UO, uo,
real, dimension(mo,km), intent(out) VO, vo,
integer, intent(out) IRET iret 
diff --git a/interfacebilinear__interp__mod_1_1interpolate__bilinear.js b/interfacebilinear__interp__mod_1_1interpolate__bilinear.js index 0aa40a0e..ab24af28 100644 --- a/interfacebilinear__interp__mod_1_1interpolate__bilinear.js +++ b/interfacebilinear__interp__mod_1_1interpolate__bilinear.js @@ -1,5 +1,5 @@ var interfacebilinear__interp__mod_1_1interpolate__bilinear = [ - [ "interpolate_bilinear_scalar", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html#a3493cf5bc04aa4551ffd4c314ef09a65", null ], - [ "interpolate_bilinear_vector", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html#ab4692c5250b37325f764b38c570892dd", null ] + [ "interpolate_bilinear_scalar", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html#a8a01c7ed66b653334323a04269804397", null ], + [ "interpolate_bilinear_vector", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html#a64b1b712b28b055aa00853b8565a77af", null ] ]; \ No newline at end of file diff --git a/interfacebudget__interp__mod_1_1interpolate__budget.html b/interfacebudget__interp__mod_1_1interpolate__budget.html index 1df3948f..9a0bab45 100644 --- a/interfacebudget__interp__mod_1_1interpolate__budget.html +++ b/interfacebudget__interp__mod_1_1interpolate__budget.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: budget_interp_mod::interpolate_budget Interface Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,46 +76,49 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
budget_interp_mod::interpolate_budget Interface Reference
+Public Member Functions
+
budget_interp_mod::interpolate_budget Interface Reference
- - - - - - - + + + + + + +

-Private Member Functions

subroutine interpolate_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
 Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields. More...
 
subroutine interpolate_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
 This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields. More...
 

+Public Member Functions

subroutine interpolate_budget_scalar (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
 Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields.
 
subroutine interpolate_budget_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
 This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields.
 

Detailed Description

Definition at line 21 of file budget_interp_mod.F90.

Member Function/Subroutine Documentation

- -

◆ interpolate_budget_scalar()

+ +

◆ interpolate_budget_scalar()

- - - - + - + - + - + - + - + - + - + @@ -199,7 +205,7 @@

diff --git a/spfftpt_8f.js b/spfftpt_8f.js index a4e4b804..2ba64257 100644 --- a/spfftpt_8f.js +++ b/spfftpt_8f.js @@ -1,4 +1,4 @@ var spfftpt_8f = [ - [ "spfftpt", "spfftpt_8f.html#ad16e674ce87bd762a714853967f81356", null ] + [ "spfftpt", "spfftpt_8f.html#a82df3b5012df147c3800b974e5d7acb0", null ] ]; \ No newline at end of file diff --git a/spfftpt_8f_source.html b/spfftpt_8f_source.html index d5574160..1f6ff5c7 100644 --- a/spfftpt_8f_source.html +++ b/spfftpt_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spfftpt.f Source File @@ -23,10 +23,9 @@

- + @@ -133,79 +136,79 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + @@ -213,11 +216,6 @@

-private -

-
subroutine budget_interp_mod::interpolate_budget::interpolate_budget_scalar ( integer, dimension(20), intent(in) IPOPT, ipopt,
integer, intent(in) MI, mi,
integer, intent(in) MO, mo,
integer, intent(in) KM, km,
integer, dimension(km), intent(in) IBI, ibi,
logical*1, dimension(mi,km), intent(in) LI, li,
real, dimension(mi,km), intent(in) GI, gi,
integer, intent(out) NO, no,
real, dimension(mo), intent(inout) RLAT, rlat,
real, dimension(mo), intent(inout) RLON, rlon,
integer, dimension(km), intent(out) IBO, ibo,
logical*1, dimension(mo,km), intent(out) LO, lo,
real, dimension(mo,km), intent(out) GO, go,
integer, intent(out) IRET iret 

Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields.

@@ -268,20 +266,17 @@

-

◆ interpolate_budget_vector()

+ +

◆ interpolate_budget_vector()

- - - - + - + - + - + - + - + - + - + @@ -180,7 +186,7 @@

This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space.

-

This subprogram must be invoked first with IDIR=0 to initialize trigonemetric data. Use subprogram spfft1() to perform an FFT without previous initialization.

+

This subprogram 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.

Note
The restrictions on IMAX are that it must be a multiple of 1 to 25 factors of two, up to 2 factors of three, and up to 1 factor of five, seven and eleven.

If IDIR=0, then W and G need not contain any valid data. The other parameters must be supplied and cannot change in succeeding calls until the next time it is called with IDIR=0.

@@ -220,7 +226,7 @@

diff --git a/spffte_8f.js b/spffte_8f.js index 34e90bee..cca5960e 100644 --- a/spffte_8f.js +++ b/spffte_8f.js @@ -1,4 +1,4 @@ var spffte_8f = [ - [ "spffte", "spffte_8f.html#af06489254bd3e99030b39744fce32233", null ] + [ "spffte", "spffte_8f.html#a43c20f83dc852608b07953dc93249e77", null ] ]; \ No newline at end of file diff --git a/spffte_8f_source.html b/spffte_8f_source.html index 69d39699..acdb3d05 100644 --- a/spffte_8f_source.html +++ b/spffte_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spffte.f Source File @@ -23,10 +23,9 @@

- + @@ -299,103 +294,103 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -403,11 +398,6 @@

-private -

-
subroutine budget_interp_mod::interpolate_budget::interpolate_budget_vector ( integer, dimension(20), intent(in) IPOPT, ipopt,
integer, intent(in) MI, mi,
integer, intent(in) MO, mo,
integer, intent(in) KM, km,
integer, dimension(km), intent(in) IBI, ibi,
logical*1, dimension(mi,km), intent(in) LI, li,
real, dimension(mi,km), intent(in) UI, ui,
real, dimension(mi,km), intent(in) VI, vi,
integer, intent(out) NO, no,
real, dimension(mo), intent(inout) RLAT, rlat,
real, dimension(mo), intent(inout) RLON, rlon,
real, dimension(mo), intent(out) CROT, crot,
real, dimension(mo), intent(out) SROT, srot,
integer, dimension(km), intent(out) IBO, ibo,
logical*1, dimension(mo,km), intent(out) LO, lo,
real, dimension(mo,km), intent(out) UO, uo,
real, dimension(mo,km), intent(out) VO, vo,
integer, intent(out) IRET iret 
diff --git a/interfacebudget__interp__mod_1_1interpolate__budget.js b/interfacebudget__interp__mod_1_1interpolate__budget.js index 6c0949c3..48ac6db2 100644 --- a/interfacebudget__interp__mod_1_1interpolate__budget.js +++ b/interfacebudget__interp__mod_1_1interpolate__budget.js @@ -1,5 +1,5 @@ var interfacebudget__interp__mod_1_1interpolate__budget = [ - [ "interpolate_budget_scalar", "interfacebudget__interp__mod_1_1interpolate__budget.html#a4b96cbeedb86ef43b687f7ea55914ef0", null ], - [ "interpolate_budget_vector", "interfacebudget__interp__mod_1_1interpolate__budget.html#a573e89e56381d0f69e4022d791a087e6", null ] + [ "interpolate_budget_scalar", "interfacebudget__interp__mod_1_1interpolate__budget.html#a07565b436222bfac667edaa8cb7a2803", null ], + [ "interpolate_budget_vector", "interfacebudget__interp__mod_1_1interpolate__budget.html#af711182f60f606e74d2c147f5d41d3d4", null ] ]; \ No newline at end of file diff --git a/interfacegdswzd__mod_1_1gdswzd.html b/interfacegdswzd__mod_1_1gdswzd.html index 48da6fe0..547e9ef2 100644 --- a/interfacegdswzd__mod_1_1gdswzd.html +++ b/interfacegdswzd__mod_1_1gdswzd.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: gdswzd_mod::gdswzd Interface Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,160 +76,163 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
gdswzd_mod::gdswzd Interface Reference
+Public Member Functions
+
gdswzd_mod::gdswzd Interface Reference
- - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

-Private Member Functions

subroutine gdswzd_1d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib 2 grid definition template and returns one of the following: More...
 
subroutine gdswzd_2d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays): More...
 
subroutine gdswzd_2d_array_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib grid description section and returns one of the following (for 2-d arrays): More...
 
subroutine gdswzd_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib grid description section and returns one of the following (for 1-d arrays): More...
 
subroutine gdswzd_grid (grid, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Returns one of the following for a grid object: More...
 
subroutine gdswzd_scalar (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
 Decodes the grib 2 grid definition template and returns one of the following (for scalars): More...
 

+Public Member Functions

subroutine gdswzd_1d_array (igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib 2 grid definition template and returns one of the following:
 
subroutine gdswzd_2d_array (igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):
 
subroutine gdswzd_2d_array_grib1 (kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib grid description section and returns one of the following (for 2-d arrays):
 
subroutine gdswzd_grib1 (kgds, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib grid description section and returns one of the following (for 1-d arrays):
 
subroutine gdswzd_grid (grid, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Returns one of the following for a grid object:
 
subroutine gdswzd_scalar (igdtnum, igdtmpl, igdtlen, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
 Decodes the grib 2 grid definition template and returns one of the following (for scalars):
 

Detailed Description

Definition at line 37 of file gdswzd_mod.F90.

Member Function/Subroutine Documentation

- -

◆ gdswzd_1d_array()

+ +

◆ gdswzd_1d_array()

- - - - + - + - + - + - + - + - + @@ -200,7 +206,7 @@

diff --git a/spfft_8f.js b/spfft_8f.js index f458e16b..acd2a357 100644 --- a/spfft_8f.js +++ b/spfft_8f.js @@ -1,4 +1,4 @@ var spfft_8f = [ - [ "spfft", "spfft_8f.html#a1041af8ac4f6a2407b5b7a799a13fb5d", null ] + [ "spfft", "spfft_8f.html#a9fddc81853658762b6e4e30b7b07a2fd", null ] ]; \ No newline at end of file diff --git a/spfft_8f_source.html b/spfft_8f_source.html index 8fbb20e0..7aa45f8d 100644 --- a/spfft_8f_source.html +++ b/spfft_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spfft.f Source File @@ -23,10 +23,9 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -237,11 +240,6 @@

-private -

-
subroutine gdswzd_mod::gdswzd::gdswzd_1d_array ( integer, intent(in) IGDTNUM, igdtnum,
integer, dimension(igdtlen), intent(in) IGDTMPL, igdtmpl,
integer, intent(in) IGDTLEN, igdtlen,
integer, intent(in) IOPT, iopt,
integer, intent(in) NPTS, npts,
real, intent(in) FILL, fill,
real, dimension(npts), intent(inout) XPTS, xpts,
real, dimension(npts), intent(inout) YPTS, ypts,
real, dimension(npts), intent(inout) RLON, rlon,
real, dimension(npts), intent(inout) RLAT, rlat,
integer, intent(out) NRET, nret,
real, dimension(npts), intent(out), optional CROT, crot,
real, dimension(npts), intent(out), optional SROT, srot,
real, dimension(npts), intent(out), optional XLON, xlon,
real, dimension(npts), intent(out), optional XLAT, xlat,
real, dimension(npts), intent(out), optional YLON, ylon,
real, dimension(npts), intent(out), optional YLAT, ylat,
real, dimension(npts), intent(out), optional AREA area 

Decodes the grib 2 grid definition template and returns one of the following:

@@ -412,122 +410,119 @@

-

◆ gdswzd_2d_array()

+ +

◆ gdswzd_2d_array()

- - - - + - + - + - + - + - + - + @@ -164,7 +170,7 @@

This subprogram 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.

+

Subprogram spfft1() initializes trigonometric data each call. Use subprogram spfft() to save time and initialize once. This version invokes the IBM ESSL FFT.

Note
The restrictions on IMAX are that it must be a multiple of 1 to 25 factors of two, up to 2 factors of three, and up to 1 factor of five, seven and eleven.
This subprogram is thread-safe.
@@ -199,7 +205,7 @@

diff --git a/spfft1_8f.js b/spfft1_8f.js index d459d959..bd7da445 100644 --- a/spfft1_8f.js +++ b/spfft1_8f.js @@ -1,4 +1,4 @@ var spfft1_8f = [ - [ "spfft1", "spfft1_8f.html#ac63643472eda83948c0b249b611346d6", null ] + [ "spfft1", "spfft1_8f.html#a9f909dc53dc57a0778c0ca5193d5de8b", null ] ]; \ No newline at end of file diff --git a/spfft1_8f_source.html b/spfft1_8f_source.html index 7e233e21..00b29486 100644 --- a/spfft1_8f_source.html +++ b/spfft1_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spfft1.f Source File @@ -23,10 +23,9 @@

- + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -535,11 +530,6 @@

-private -

-
subroutine gdswzd_mod::gdswzd::gdswzd_2d_array ( integer, intent(in) IGDTNUM, igdtnum,
integer, dimension(igdtlen), intent(in) IGDTMPL, igdtmpl,
integer, intent(in) IGDTLEN, igdtlen,
integer, intent(in) IOPT, iopt,
integer, intent(in) NPTS, npts,
real, intent(in) FILL, fill,
real, dimension(:,:), intent(inout) XPTS, xpts,
real, dimension(:,:), intent(inout) YPTS, ypts,
real, dimension(:,:), intent(inout) RLON, rlon,
real, dimension(:,:), intent(inout) RLAT, rlat,
integer, intent(out) NRET, nret,
real, dimension(:,:), intent(out), optional CROT, crot,
real, dimension(:,:), intent(out), optional SROT, srot,
real, dimension(:,:), intent(out), optional XLON, xlon,
real, dimension(:,:), intent(out), optional XLAT, xlat,
real, dimension(:,:), intent(out), optional YLON, ylon,
real, dimension(:,:), intent(out), optional YLAT, ylat,
real, dimension(:,:), intent(out), optional AREA area 

Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):

@@ -564,7 +554,7 @@

Parameters
- + - + - + - + - + - + - + - + - + @@ -204,7 +210,7 @@

diff --git a/speps_8f.js b/speps_8f.js index 48596d4c..ef3fd63d 100644 --- a/speps_8f.js +++ b/speps_8f.js @@ -1,4 +1,4 @@ var speps_8f = [ - [ "speps", "speps_8f.html#a0ab523ec5e1393ffca970897e63a9131", null ] + [ "speps", "speps_8f.html#a0644425aa925c36d91d5b588278e03fa", null ] ]; \ No newline at end of file diff --git a/speps_8f_source.html b/speps_8f_source.html index 27153cbd..9796ab27 100644 --- a/speps_8f_source.html +++ b/speps_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: speps.f Source File @@ -23,10 +23,9 @@

[in]igdtnumGrid definition template number.
[in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure. See igdtmpl definition in gdswzd_1d_array() for full details.
[in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure. See igdtmpl definition in gdswzd_1d_array() for full details.
[in]igdtlenNumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
[in]ioptOption flag. (  I, i,
 M, m,
real, dimension((m+1)*((i+1)*m+2)/2) EPS, eps,
real, dimension(m+1) EPSTOP, epstop,
real, dimension((m+1)*((i+1)*m+2)/2) ENN1, enn1,
real, dimension((m+1)*((i+1)*m+2)/2) ELONN1, elonn1,
real, dimension((m+1)*((i+1)*m+2)/2) EON, eon,
real, dimension(m+1) EONTOP eontop 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,77 +81,85 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
speps.f
+
speps.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Compute utility spectral fields.
-
3 C> @author Iredell @date 92-10-31
-
4 
-
5 C> Computes constant fields indexed in the spectral domain
-
6 C> in "IBM ORDER" (Zonal wavenumber is the slower index).
-
7 C>
-
8 C> If L is the zonal wavenumber and N is the total wavenumber
-
9 C> and A is the earth radius, then the fields returned are:
-
10 C> - (1) normalizing factor EPSILON=SQRT((N**2-L**2)/(4*N**2-1))
-
11 C> - (2) Laplacian factor N*(N+1)/A**2
-
12 C> - (3) zonal derivative/Laplacian factor L/(N*(N+1))*A
-
13 C> - (4) Meridional derivative/Laplacian factor EPSILON/N*A
-
14 C>
-
15 C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
-
16 C> @param M spectral truncation
-
17 C> @param EPS ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
-
18 C> @param EPSTOP (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
-
19 C> @param ENN1 ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
-
20 C> @param ELONN1 ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
-
21 C> @param EON ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
-
22 C> @param EONTOP (M+1) EPSILON/N*A OVER TOP
-
23 C>
-
24 C> @author Iredell @date 92-10-31
-
25  SUBROUTINE speps(I,M,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
-
26  REAL EPS((M+1)*((I+1)*M+2)/2),EPSTOP(M+1)
-
27  REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
-
28  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
-
29  parameter(rerth=6.3712e6,ra2=1./rerth**2)
-
30 
-
31  DO l=0,m
-
32  k=l*(2*m+(i-1)*(l-1))/2+l+1
-
33  eps(k)=0.
-
34  enn1(k)=ra2*l*(l+1)
-
35  elonn1(k)=rerth/(l+1)
-
36  eon(k)=0.
-
37  ENDDO
-
38  DO l=0,m
-
39  DO n=l+1,i*l+m
-
40  k=l*(2*m+(i-1)*(l-1))/2+n+1
-
41  eps(k)=sqrt(float(n**2-l**2)/float(4*n**2-1))
-
42  enn1(k)=ra2*n*(n+1)
-
43  elonn1(k)=rerth*l/(n*(n+1))
-
44  eon(k)=rerth/n*eps(k)
-
45  ENDDO
-
46  ENDDO
-
47  DO l=0,m
-
48  n=i*l+m+1
-
49  epstop(l+1)=sqrt(float(n**2-l**2)/float(4*n**2-1))
-
50  eontop(l+1)=rerth/n*epstop(l+1)
-
51  ENDDO
-
52  RETURN
-
53  END
-
subroutine speps(I, M, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
Computes constant fields indexed in the spectral domain in "IBM ORDER" (Zonal wavenumber is the slowe...
Definition: speps.f:26
+Go to the documentation of this file.
1C> @file
+
2C> @brief Compute utility spectral fields.
+
3C> @author Iredell @date 92-10-31
+
4
+
5C> Computes constant fields indexed in the spectral domain
+
6C> in "IBM ORDER" (Zonal wavenumber is the slower index).
+
7C>
+
8C> If L is the zonal wavenumber and N is the total wavenumber
+
9C> and A is the earth radius, then the fields returned are:
+
10C> - (1) normalizing factor EPSILON=SQRT((N**2-L**2)/(4*N**2-1))
+
11C> - (2) Laplacian factor N*(N+1)/A**2
+
12C> - (3) zonal derivative/Laplacian factor L/(N*(N+1))*A
+
13C> - (4) Meridional derivative/Laplacian factor EPSILON/N*A
+
14C>
+
15C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
+
16C> @param M spectral truncation
+
17C> @param EPS ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
+
18C> @param EPSTOP (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
+
19C> @param ENN1 ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
+
20C> @param ELONN1 ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
+
21C> @param EON ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
+
22C> @param EONTOP (M+1) EPSILON/N*A OVER TOP
+
23C>
+
24C> @author Iredell @date 92-10-31
+
+
25 SUBROUTINE speps(I,M,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
+
26 REAL EPS((M+1)*((I+1)*M+2)/2),EPSTOP(M+1)
+
27 REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
+
28 REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
+
29 parameter(rerth=6.3712e6,ra2=1./rerth**2)
+
30
+
31 DO l=0,m
+
32 k=l*(2*m+(i-1)*(l-1))/2+l+1
+
33 eps(k)=0.
+
34 enn1(k)=ra2*l*(l+1)
+
35 elonn1(k)=rerth/(l+1)
+
36 eon(k)=0.
+
37 ENDDO
+
38 DO l=0,m
+
39 DO n=l+1,i*l+m
+
40 k=l*(2*m+(i-1)*(l-1))/2+n+1
+
41 eps(k)=sqrt(float(n**2-l**2)/float(4*n**2-1))
+
42 enn1(k)=ra2*n*(n+1)
+
43 elonn1(k)=rerth*l/(n*(n+1))
+
44 eon(k)=rerth/n*eps(k)
+
45 ENDDO
+
46 ENDDO
+
47 DO l=0,m
+
48 n=i*l+m+1
+
49 epstop(l+1)=sqrt(float(n**2-l**2)/float(4*n**2-1))
+
50 eontop(l+1)=rerth/n*epstop(l+1)
+
51 ENDDO
+
52 RETURN
+
+
53 END
+
subroutine speps(i, m, eps, epstop, enn1, elonn1, eon, eontop)
Computes constant fields indexed in the spectral domain in "IBM ORDER" (Zonal wavenumber is the slowe...
Definition speps.f:26
diff --git a/spfft1_8f.html b/spfft1_8f.html index 1aae07f9..8991f507 100644 --- a/spfft1_8f.html +++ b/spfft1_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spfft1.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spfft1.f File Reference
+
spfft1.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spfft1 (IMAX, INCW, INCG, KMAX, W, G, IDIR)
 This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space. More...
 
subroutine spfft1 (imax, incw, incg, kmax, w, g, idir)
 This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space.
 

Detailed Description

Perform multiple fast Fourier transforms.

@@ -107,8 +113,8 @@

Definition in file spfft1.f.

Function/Subroutine Documentation

- -

◆ spfft1()

+ +

◆ spfft1()

@@ -117,43 +123,43 @@

subroutine spfft1

( integer, intent(in) IMAX, imax,
integer, intent(in) INCW, incw,
integer, intent(in) INCG, incg,
integer, intent(in) KMAX, kmax,
complex, dimension(incw,kmax), intent(inout) W, w,
real, dimension(incg,kmax), intent(inout) G, g,
integer, intent(in) IDIR idir 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,88 +81,96 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spfft1.f
+
spfft1.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform multiple fast Fourier transforms.
-
3 C> @author Iredell @date 96-02-20
-
4 
-
5 C> This subprogram performs multiple fast Fourier transforms
-
6 C> between complex amplitudes in Fourier space and real values
-
7 C> in cyclic physical space.
-
8 C>
-
9 C> Subprogram spfft1() initializes trigonometric data each call.
-
10 C> Use subprogram spfft() to save time and initialize once.
-
11 C> This version invokes the IBM ESSL FFT.
-
12 C>
-
13 C> @note The restrictions on IMAX are that it must be a multiple of 1
-
14 C> to 25 factors of two, up to 2 factors of three, and up to 1 factor of
-
15 C> five, seven and eleven.
-
16 C>
-
17 C> @note This subprogram is thread-safe.
-
18 C>
-
19 C> @param IMAX number of values in the cyclic physical space
-
20 C> (see limitations on imax in remarks below.)
-
21 C> @param INCW first dimension of the complex amplitude array
-
22 C> (INCW >= IMAX/2+1)
-
23 C> @param INCG first dimension of the real value array (INCG >= IMAX)
-
24 C> @param KMAX number of transforms to perform
-
25 C> @param[out] W complex amplitudes if IDIR>0
-
26 C> @param[out] G values if IDIR<0
-
27 C> @param IDIR direction flag
-
28 C> - IDIR>0 to transform from Fourier to physical space
-
29 C> - IDIR<0 to transform from physical to Fourier space
-
30 C>
-
31 C> @author Iredell @date 96-02-20
-
32  SUBROUTINE spfft1(IMAX,INCW,INCG,KMAX,W,G,IDIR)
-
33  IMPLICIT NONE
-
34  INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
-
35  COMPLEX,INTENT(INOUT):: W(INCW,KMAX)
-
36  REAL:: WREAL(INCW,KMAX)
-
37  REAL,INTENT(INOUT):: G(INCG,KMAX)
-
38  REAL:: AUX1(25000+INT(0.82*IMAX))
-
39  REAL:: AUX2(20000+INT(0.57*IMAX))
-
40  INTEGER:: NAUX1,NAUX2
-
41 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
42  naux1=25000+int(0.82*imax)
-
43  naux2=20000+int(0.57*imax)
-
44  wreal=real(w)
-
45 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
46 C FOURIER TO PHYSICAL TRANSFORM.
-
47  SELECT CASE(idir)
-
48  CASE(1:)
-
49  CALL scrft(1,real(w),incw,g,incg,imax,kmax,-1,1.,
-
50  & aux1,naux1,aux2,naux2,0.,0)
-
51  CALL scrft(0,real(w),incw,g,incg,imax,kmax,-1,1.,
-
52  & aux1,naux1,aux2,naux2,0.,0)
-
53 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
54 C PHYSICAL TO FOURIER TRANSFORM.
-
55  CASE(:-1)
-
56  CALL srcft(1,g,incg,wreal,incw,imax,kmax,+1,1./imax,
-
57  & aux1,naux1,aux2,naux2,0.,0)
-
58  CALL srcft(0,g,incg,wreal,incw,imax,kmax,+1,1./imax,
-
59  & aux1,naux1,aux2,naux2,0.,0)
-
60  END SELECT
-
61  w=cmplx(wreal,0.0)
-
62  END SUBROUTINE
-
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition: fftpack.F:82
-
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition: fftpack.F:215
-
subroutine spfft1(IMAX, INCW, INCG, KMAX, W, G, IDIR)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition: spfft1.f:33
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform multiple fast Fourier transforms.
+
3C> @author Iredell @date 96-02-20
+
4
+
5C> This subprogram performs multiple fast Fourier transforms
+
6C> between complex amplitudes in Fourier space and real values
+
7C> in cyclic physical space.
+
8C>
+
9C> Subprogram spfft1() initializes trigonometric data each call.
+
10C> Use subprogram spfft() to save time and initialize once.
+
11C> This version invokes the IBM ESSL FFT.
+
12C>
+
13C> @note The restrictions on IMAX are that it must be a multiple of 1
+
14C> to 25 factors of two, up to 2 factors of three, and up to 1 factor of
+
15C> five, seven and eleven.
+
16C>
+
17C> @note This subprogram is thread-safe.
+
18C>
+
19C> @param IMAX number of values in the cyclic physical space
+
20C> (see limitations on imax in remarks below.)
+
21C> @param INCW first dimension of the complex amplitude array
+
22C> (INCW >= IMAX/2+1)
+
23C> @param INCG first dimension of the real value array (INCG >= IMAX)
+
24C> @param KMAX number of transforms to perform
+
25C> @param[out] W complex amplitudes if IDIR>0
+
26C> @param[out] G values if IDIR<0
+
27C> @param IDIR direction flag
+
28C> - IDIR>0 to transform from Fourier to physical space
+
29C> - IDIR<0 to transform from physical to Fourier space
+
30C>
+
31C> @author Iredell @date 96-02-20
+
+
32 SUBROUTINE spfft1(IMAX,INCW,INCG,KMAX,W,G,IDIR)
+
33 IMPLICIT NONE
+
34 INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
+
35 COMPLEX,INTENT(INOUT):: W(INCW,KMAX)
+
36 REAL:: WREAL(INCW,KMAX)
+
37 REAL,INTENT(INOUT):: G(INCG,KMAX)
+
38 REAL:: AUX1(25000+INT(0.82*IMAX))
+
39 REAL:: AUX2(20000+INT(0.57*IMAX))
+
40 INTEGER:: NAUX1,NAUX2
+
41C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
42 naux1=25000+int(0.82*imax)
+
43 naux2=20000+int(0.57*imax)
+
44 wreal=real(w)
+
45C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
46C FOURIER TO PHYSICAL TRANSFORM.
+
47 SELECT CASE(idir)
+
48 CASE(1:)
+
49 CALL scrft(1,real(w),incw,g,incg,imax,kmax,-1,1.,
+
50 & aux1,naux1,aux2,naux2,0.,0)
+
51 CALL scrft(0,real(w),incw,g,incg,imax,kmax,-1,1.,
+
52 & aux1,naux1,aux2,naux2,0.,0)
+
53C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
54C PHYSICAL TO FOURIER TRANSFORM.
+
55 CASE(:-1)
+
56 CALL srcft(1,g,incg,wreal,incw,imax,kmax,+1,1./imax,
+
57 & aux1,naux1,aux2,naux2,0.,0)
+
58 CALL srcft(0,g,incg,wreal,incw,imax,kmax,+1,1./imax,
+
59 & aux1,naux1,aux2,naux2,0.,0)
+
60 END SELECT
+
61 w=cmplx(wreal,0.0)
+
+
62 END SUBROUTINE
+
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition fftpack.F:82
+
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition fftpack.F:215
+
subroutine spfft1(imax, incw, incg, kmax, w, g, idir)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition spfft1.f:33
diff --git a/spfft_8f.html b/spfft_8f.html index 6bc0daab..7ef9b303 100644 --- a/spfft_8f.html +++ b/spfft_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spfft.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spfft.f File Reference
+
spfft.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spfft (IMAX, INCW, INCG, KMAX, W, G, IDIR)
 This subprogram performs multiple fast fourier transforms between complex amplitudes in fourier space and real values in cyclic physical space. More...
 
subroutine spfft (imax, incw, incg, kmax, w, g, idir)
 This subprogram performs multiple fast fourier transforms between complex amplitudes in fourier space and real values in cyclic physical space.
 

Detailed Description

Perform multiple fast fourier transforms.

@@ -107,8 +113,8 @@

Definition in file spfft.f.

Function/Subroutine Documentation

- -

◆ spfft()

+ +

◆ spfft()

@@ -117,43 +123,43 @@

subroutine spfft

( integer, intent(in) IMAX, imax,
integer, intent(in) INCW, incw,
integer, intent(in) INCG, incg,
integer, intent(in) KMAX, kmax,
complex, dimension(incw,kmax), intent(inout) W, w,
real, dimension(incg,kmax), intent(inout) G, g,
integer, intent(in) IDIR idir 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,104 +81,112 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spfft.f
+
spfft.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform multiple fast fourier transforms.
-
3 C> @author Iredell @date 96-02-20
-
4 
-
5 C> This subprogram performs multiple fast fourier transforms
-
6 C> between complex amplitudes in fourier space and real values
-
7 C> in cyclic physical space.
-
8 C>
-
9 C> Subprogram spfft must be invoked first with idir=0
-
10 C> to initialize trigonemetric data. Use subprogram spfft1
-
11 C> to perform an fft without previous initialization.
-
12 C> This version invokes the ibm essl fft.
-
13 C>
-
14 C> The restrictions on imax are that it must be a multiple
-
15 C> of 1 to 25 factors of two, up to 2 factors of three,
-
16 C> and up to 1 factor of five, seven and eleven.
-
17 C>
-
18 C> If IDIR=0, then W and G need not contain any valid data.
-
19 C> the other parameters must be supplied and cannot change
-
20 C> in succeeding calls until the next time it is called with IDIR=0.
-
21 C>
-
22 C> This subprogram is not thread-safe when IDIR=0. On the other hand,
-
23 C> when IDIR is not zero, it can be called from a threaded region.
-
24 C>
-
25 C> @param IMAX number of values in the cyclic physical space
-
26 C> (see limitations on imax in remarks below.)
-
27 C> @param INCW first dimension of the complex amplitude array
-
28 C> (INCW >= IMAX/2+1)
-
29 C> @param INCG first dimension of the real value array
-
30 C> (INCG >= IMAX)
-
31 C> @param KMAX number of transforms to perform
-
32 C> @param[out] W complex amplitudes if IDIR>0
-
33 C> @param[out] G real values if IDIR<0
-
34 C> @param IDIR direction flag
-
35 C> - IDIR=0 to initialize internal trigonometric data
-
36 C> - IDIR>0 TO transform from Fourier to physical space
-
37 C> - IDIR<0 TO transform from physical to fourier space
-
38 C>
-
39 C> @author Iredell @date 96-02-20
-
40  SUBROUTINE spfft(IMAX,INCW,INCG,KMAX,W,G,IDIR)
-
41 
-
42  IMPLICIT NONE
-
43  INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
-
44  COMPLEX,INTENT(INOUT):: W(INCW,KMAX)
-
45  REAL:: WREAL(INCW,KMAX)
-
46  REAL,INTENT(INOUT):: G(INCG,KMAX)
-
47  INTEGER,SAVE:: NAUX1=0
-
48  REAL,SAVE,ALLOCATABLE:: AUX1CR(:),AUX1RC(:)
-
49  INTEGER:: NAUX2
-
50  REAL:: AUX2(20000+INT(0.57*IMAX))
-
51 
-
52  naux2=20000+int(0.57*imax)
-
53 
-
54  wreal=real(w)
-
55 C INITIALIZATION.
-
56 C ALLOCATE AND FILL AUXILIARY ARRAYS WITH TRIGONOMETRIC DATA
-
57  SELECT CASE(idir)
-
58  CASE(0)
-
59  IF(naux1.GT.0) DEALLOCATE(aux1cr,aux1rc)
-
60  naux1=25000+int(0.82*imax)
-
61  ALLOCATE(aux1cr(naux1),aux1rc(naux1))
-
62  CALL scrft(1,wreal,incw,g,incg,imax,kmax,-1,1.,
-
63  & aux1cr,naux1,aux2,naux2,0.,0)
-
64  CALL srcft(1,g,incg,wreal,incw,imax,kmax,+1,1./imax,
-
65  & aux1rc,naux1,aux2,naux2,0.,0)
-
66 
-
67 C FOURIER TO PHYSICAL TRANSFORM.
-
68  CASE(1:)
-
69  CALL scrft(0,wreal,incw,g,incg,imax,kmax,-1,1.,
-
70  & aux1cr,naux1,aux2,naux2,0.,0)
-
71 
-
72 C PHYSICAL TO FOURIER TRANSFORM.
-
73  CASE(:-1)
-
74  CALL srcft(0,g,incg,wreal,incw,imax,kmax,+1,1./imax,
-
75  & aux1rc,naux1,aux2,naux2,0.,0)
-
76  END SELECT
-
77  w=cmplx(wreal)
-
78  END SUBROUTINE
-
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition: fftpack.F:82
-
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition: fftpack.F:215
-
subroutine spfft(IMAX, INCW, INCG, KMAX, W, G, IDIR)
This subprogram performs multiple fast fourier transforms between complex amplitudes in fourier space...
Definition: spfft.f:41
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform multiple fast fourier transforms.
+
3C> @author Iredell @date 96-02-20
+
4
+
5C> This subprogram performs multiple fast fourier transforms
+
6C> between complex amplitudes in fourier space and real values
+
7C> in cyclic physical space.
+
8C>
+
9C> Subprogram spfft must be invoked first with idir=0
+
10C> to initialize trigonemetric data. Use subprogram spfft1
+
11C> to perform an fft without previous initialization.
+
12C> This version invokes the ibm essl fft.
+
13C>
+
14C> The restrictions on imax are that it must be a multiple
+
15C> of 1 to 25 factors of two, up to 2 factors of three,
+
16C> and up to 1 factor of five, seven and eleven.
+
17C>
+
18C> If IDIR=0, then W and G need not contain any valid data.
+
19C> the other parameters must be supplied and cannot change
+
20C> in succeeding calls until the next time it is called with IDIR=0.
+
21C>
+
22C> This subprogram is not thread-safe when IDIR=0. On the other hand,
+
23C> when IDIR is not zero, it can be called from a threaded region.
+
24C>
+
25C> @param IMAX number of values in the cyclic physical space
+
26C> (see limitations on imax in remarks below.)
+
27C> @param INCW first dimension of the complex amplitude array
+
28C> (INCW >= IMAX/2+1)
+
29C> @param INCG first dimension of the real value array
+
30C> (INCG >= IMAX)
+
31C> @param KMAX number of transforms to perform
+
32C> @param[out] W complex amplitudes if IDIR>0
+
33C> @param[out] G real values if IDIR<0
+
34C> @param IDIR direction flag
+
35C> - IDIR=0 to initialize internal trigonometric data
+
36C> - IDIR>0 TO transform from Fourier to physical space
+
37C> - IDIR<0 TO transform from physical to fourier space
+
38C>
+
39C> @author Iredell @date 96-02-20
+
+
40 SUBROUTINE spfft(IMAX,INCW,INCG,KMAX,W,G,IDIR)
+
41
+
42 IMPLICIT NONE
+
43 INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
+
44 COMPLEX,INTENT(INOUT):: W(INCW,KMAX)
+
45 REAL:: WREAL(INCW,KMAX)
+
46 REAL,INTENT(INOUT):: G(INCG,KMAX)
+
47 INTEGER,SAVE:: NAUX1=0
+
48 REAL,SAVE,ALLOCATABLE:: AUX1CR(:),AUX1RC(:)
+
49 INTEGER:: NAUX2
+
50 REAL:: AUX2(20000+INT(0.57*IMAX))
+
51
+
52 naux2=20000+int(0.57*imax)
+
53
+
54 wreal=real(w)
+
55C INITIALIZATION.
+
56C ALLOCATE AND FILL AUXILIARY ARRAYS WITH TRIGONOMETRIC DATA
+
57 SELECT CASE(idir)
+
58 CASE(0)
+
59 IF(naux1.GT.0) DEALLOCATE(aux1cr,aux1rc)
+
60 naux1=25000+int(0.82*imax)
+
61 ALLOCATE(aux1cr(naux1),aux1rc(naux1))
+
62 CALL scrft(1,wreal,incw,g,incg,imax,kmax,-1,1.,
+
63 & aux1cr,naux1,aux2,naux2,0.,0)
+
64 CALL srcft(1,g,incg,wreal,incw,imax,kmax,+1,1./imax,
+
65 & aux1rc,naux1,aux2,naux2,0.,0)
+
66
+
67C FOURIER TO PHYSICAL TRANSFORM.
+
68 CASE(1:)
+
69 CALL scrft(0,wreal,incw,g,incg,imax,kmax,-1,1.,
+
70 & aux1cr,naux1,aux2,naux2,0.,0)
+
71
+
72C PHYSICAL TO FOURIER TRANSFORM.
+
73 CASE(:-1)
+
74 CALL srcft(0,g,incg,wreal,incw,imax,kmax,+1,1./imax,
+
75 & aux1rc,naux1,aux2,naux2,0.,0)
+
76 END SELECT
+
77 w=cmplx(wreal)
+
+
78 END SUBROUTINE
+
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition fftpack.F:82
+
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition fftpack.F:215
+
subroutine spfft(imax, incw, incg, kmax, w, g, idir)
This subprogram performs multiple fast fourier transforms between complex amplitudes in fourier space...
Definition spfft.f:41
diff --git a/spffte_8f.html b/spffte_8f.html index 4710a7b0..8fc5b9a1 100644 --- a/spffte_8f.html +++ b/spffte_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spffte.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spffte.f File Reference
+
spffte.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spffte (IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
 This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space. More...
 
subroutine spffte (imax, incw, incg, kmax, w, g, idir, afft)
 This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space.
 

Detailed Description

Perform multiple fast Fourier transforms.

@@ -117,8 +123,8 @@

Definition in file spffte.f.

Function/Subroutine Documentation

- -

◆ spffte()

+ +

◆ spffte()

@@ -127,49 +133,49 @@

subroutine spffte

( integer, intent(in) IMAX, imax,
integer, intent(in) INCW, incw,
integer, intent(in) INCG, incg,
integer, intent(in) KMAX, kmax,
real, dimension(2*incw,kmax), intent(inout) W, w,
real, dimension(incg,kmax), intent(inout) G, g,
integer, intent(in) IDIR, idir,
real(8), dimension(50000+4*imax), intent(inout) AFFT afft 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,164 +81,172 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spffte.f
+
spffte.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform multiple fast Fourier transforms.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 1998-12-18 | Iredell | Initial.
-
8 C> 2012-11-12 | Mirvis | fixing hard-wired types problem on Intel/Linux.
-
9 C>
-
10 C> @author Iredell @date 96-02-20
-
11 
-
12 C> This subprogram performs multiple fast Fourier transforms
-
13 C> between complex amplitudes in Fourier space and real values
-
14 C> in cyclic physical space.
-
15 C>
-
16 C> This subprogram must be invoked first with IDIR=0
-
17 C> to initialize trigonemetric data. Use subprogram spfft1()
-
18 C> to perform an FFT without previous initialization.
-
19 C>
-
20 C> This version invokes the IBM ESSL FFT.
-
21 C>
-
22 C> @note The restrictions on IMAX are that it must be a multiple
-
23 C> of 1 to 25 factors of two, up to 2 factors of three,
-
24 C> and up to 1 factor of five, seven and eleven.
-
25 C>
-
26 C> If IDIR=0, then W and G need not contain any valid data.
-
27 C> The other parameters must be supplied and cannot change
-
28 C> in succeeding calls until the next time it is called with IDIR=0.
-
29 C>
-
30 C> This subprogram is thread-safe.
-
31 C>
-
32 C> @param IMAX number of values in the cyclic physical space
-
33 C> (see limitations on imax in remarks below.)
-
34 C> @param INCW first dimension of the complex amplitude array
-
35 C> (INCW >= IMAX/2+1)
-
36 C> @param INCG first dimension of the real value array
-
37 C> (INCG >= IMAX)
-
38 C> @param KMAX number of transforms to perform
-
39 C> @param[out] W complex amplitudes if IDIR>0
-
40 C> @param[out] G real values if IDIR<0
-
41 C> @param IDIR direction flag
-
42 C> - IDIR=0 to initialize trigonometric data
-
43 C> - IDIR>0 to transform from Fourier to physical space
-
44 C> - IDIR<0 to transform from physical to Fourier space
-
45 C> @param[out] AFFT auxiliary array if IDIR<>0
-
46 C>
-
47 C> @author Iredell @date 96-02-20
-
48  SUBROUTINE spffte(IMAX,INCW,INCG,KMAX,W,G,IDIR,AFFT)
-
49  IMPLICIT NONE
-
50  INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
-
51  REAL,INTENT(INOUT):: W(2*INCW,KMAX)
-
52  REAL,INTENT(INOUT):: G(INCG,KMAX)
-
53  REAL(8),INTENT(INOUT):: AFFT(50000+4*IMAX)
-
54  REAL:: AFFTR(50000+4*IMAX)
-
55  INTEGER:: INIT,INC2X,INC2Y,N,M,ISIGN,NAUX1,NAUX2,NAUX3
-
56 C ==EM== ^(4)
-
57  REAL:: SCALE
-
58  REAL :: AUX2(20000+2*IMAX),AUX3
-
59  INTEGER:: IACR,IARC
-
60 
-
61  naux1=25000+2*imax
-
62  naux2=20000+2*imax
-
63  naux3=1
-
64  iacr=1
-
65  iarc=1+naux1
-
66  afftr=real(afft)
-
67 
-
68 C INITIALIZATION.
-
69 C FILL AUXILIARY ARRAYS WITH TRIGONOMETRIC DATA
-
70  SELECT CASE(idir)
-
71  CASE(0)
-
72  init=1
-
73  inc2x=incw
-
74  inc2y=incg
-
75  n=imax
-
76  m=kmax
-
77  isign=-1
-
78  scale=1.
-
79  IF(digits(1.).LT.digits(1._8)) THEN
-
80  CALL scrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
-
81  & afftr(iacr),naux1,aux2,naux2,aux3,naux3)
-
82  ELSE
-
83  CALL dcrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
-
84  & afftr(iacr),naux1,aux2,naux2)
-
85  ENDIF
-
86  init=1
-
87  inc2x=incg
-
88  inc2y=incw
-
89  n=imax
-
90  m=kmax
-
91  isign=+1
-
92  scale=1./imax
-
93  IF(digits(1.).LT.digits(1._8)) THEN
-
94  CALL srcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
-
95  & afftr(iarc),naux1,aux2,naux2,aux3,naux3)
-
96  ELSE
-
97  CALL drcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
-
98  & afftr(iarc),naux1,aux2,naux2)
-
99  ENDIF
-
100 
-
101 C FOURIER TO PHYSICAL TRANSFORM.
-
102  CASE(1:)
-
103  init=0
-
104  inc2x=incw
-
105  inc2y=incg
-
106  n=imax
-
107  m=kmax
-
108  isign=-1
-
109  scale=1.
-
110  IF(digits(1.).LT.digits(1._8)) THEN
-
111  CALL scrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
-
112  & afftr(iacr),naux1,aux2,naux2,aux3,naux3)
-
113  ELSE
-
114  CALL dcrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
-
115  & afftr(iacr),naux1,aux2,naux2)
-
116  ENDIF
-
117 
-
118 C PHYSICAL TO FOURIER TRANSFORM.
-
119  CASE(:-1)
-
120  init=0
-
121  inc2x=incg
-
122  inc2y=incw
-
123  n=imax
-
124  m=kmax
-
125  isign=+1
-
126  scale=1./imax
-
127  IF(digits(1.).LT.digits(1._8)) THEN
-
128  CALL srcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
-
129  & afftr(iarc),naux1,aux2,naux2,aux3,naux3)
-
130  ELSE
-
131  CALL drcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
-
132  & afftr(iarc),naux1,aux2,naux2)
-
133  ENDIF
-
134  END SELECT
-
135  afft=real(afftr,kind=8)
-
136  END SUBROUTINE
-
subroutine drcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
drcft
Definition: fftpack.F:164
-
subroutine dcrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
dcrft
Definition: fftpack.F:34
-
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition: fftpack.F:82
-
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition: fftpack.F:215
-
subroutine spffte(IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition: spffte.f:49
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform multiple fast Fourier transforms.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 1998-12-18 | Iredell | Initial.
+
8C> 2012-11-12 | Mirvis | fixing hard-wired types problem on Intel/Linux.
+
9C>
+
10C> @author Iredell @date 96-02-20
+
11
+
12C> This subprogram performs multiple fast Fourier transforms
+
13C> between complex amplitudes in Fourier space and real values
+
14C> in cyclic physical space.
+
15C>
+
16C> This subprogram must be invoked first with IDIR=0
+
17C> to initialize trigonemetric data. Use subprogram spfft1()
+
18C> to perform an FFT without previous initialization.
+
19C>
+
20C> This version invokes the IBM ESSL FFT.
+
21C>
+
22C> @note The restrictions on IMAX are that it must be a multiple
+
23C> of 1 to 25 factors of two, up to 2 factors of three,
+
24C> and up to 1 factor of five, seven and eleven.
+
25C>
+
26C> If IDIR=0, then W and G need not contain any valid data.
+
27C> The other parameters must be supplied and cannot change
+
28C> in succeeding calls until the next time it is called with IDIR=0.
+
29C>
+
30C> This subprogram is thread-safe.
+
31C>
+
32C> @param IMAX number of values in the cyclic physical space
+
33C> (see limitations on imax in remarks below.)
+
34C> @param INCW first dimension of the complex amplitude array
+
35C> (INCW >= IMAX/2+1)
+
36C> @param INCG first dimension of the real value array
+
37C> (INCG >= IMAX)
+
38C> @param KMAX number of transforms to perform
+
39C> @param[out] W complex amplitudes if IDIR>0
+
40C> @param[out] G real values if IDIR<0
+
41C> @param IDIR direction flag
+
42C> - IDIR=0 to initialize trigonometric data
+
43C> - IDIR>0 to transform from Fourier to physical space
+
44C> - IDIR<0 to transform from physical to Fourier space
+
45C> @param[out] AFFT auxiliary array if IDIR<>0
+
46C>
+
47C> @author Iredell @date 96-02-20
+
+
48 SUBROUTINE spffte(IMAX,INCW,INCG,KMAX,W,G,IDIR,AFFT)
+
49 IMPLICIT NONE
+
50 INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
+
51 REAL,INTENT(INOUT):: W(2*INCW,KMAX)
+
52 REAL,INTENT(INOUT):: G(INCG,KMAX)
+
53 REAL(8),INTENT(INOUT):: AFFT(50000+4*IMAX)
+
54 REAL:: AFFTR(50000+4*IMAX)
+
55 INTEGER:: INIT,INC2X,INC2Y,N,M,ISIGN,NAUX1,NAUX2,NAUX3
+
56C ==EM== ^(4)
+
57 REAL:: SCALE
+
58 REAL :: AUX2(20000+2*IMAX),AUX3
+
59 INTEGER:: IACR,IARC
+
60
+
61 naux1=25000+2*imax
+
62 naux2=20000+2*imax
+
63 naux3=1
+
64 iacr=1
+
65 iarc=1+naux1
+
66 afftr=real(afft)
+
67
+
68C INITIALIZATION.
+
69C FILL AUXILIARY ARRAYS WITH TRIGONOMETRIC DATA
+
70 SELECT CASE(idir)
+
71 CASE(0)
+
72 init=1
+
73 inc2x=incw
+
74 inc2y=incg
+
75 n=imax
+
76 m=kmax
+
77 isign=-1
+
78 scale=1.
+
79 IF(digits(1.).LT.digits(1._8)) THEN
+
80 CALL scrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
+
81 & afftr(iacr),naux1,aux2,naux2,aux3,naux3)
+
82 ELSE
+
83 CALL dcrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
+
84 & afftr(iacr),naux1,aux2,naux2)
+
85 ENDIF
+
86 init=1
+
87 inc2x=incg
+
88 inc2y=incw
+
89 n=imax
+
90 m=kmax
+
91 isign=+1
+
92 scale=1./imax
+
93 IF(digits(1.).LT.digits(1._8)) THEN
+
94 CALL srcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
+
95 & afftr(iarc),naux1,aux2,naux2,aux3,naux3)
+
96 ELSE
+
97 CALL drcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
+
98 & afftr(iarc),naux1,aux2,naux2)
+
99 ENDIF
+
100
+
101C FOURIER TO PHYSICAL TRANSFORM.
+
102 CASE(1:)
+
103 init=0
+
104 inc2x=incw
+
105 inc2y=incg
+
106 n=imax
+
107 m=kmax
+
108 isign=-1
+
109 scale=1.
+
110 IF(digits(1.).LT.digits(1._8)) THEN
+
111 CALL scrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
+
112 & afftr(iacr),naux1,aux2,naux2,aux3,naux3)
+
113 ELSE
+
114 CALL dcrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
+
115 & afftr(iacr),naux1,aux2,naux2)
+
116 ENDIF
+
117
+
118C PHYSICAL TO FOURIER TRANSFORM.
+
119 CASE(:-1)
+
120 init=0
+
121 inc2x=incg
+
122 inc2y=incw
+
123 n=imax
+
124 m=kmax
+
125 isign=+1
+
126 scale=1./imax
+
127 IF(digits(1.).LT.digits(1._8)) THEN
+
128 CALL srcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
+
129 & afftr(iarc),naux1,aux2,naux2,aux3,naux3)
+
130 ELSE
+
131 CALL drcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
+
132 & afftr(iarc),naux1,aux2,naux2)
+
133 ENDIF
+
134 END SELECT
+
135 afft=real(afftr,kind=8)
+
+
136 END SUBROUTINE
+
subroutine drcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
drcft
Definition fftpack.F:164
+
subroutine dcrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
dcrft
Definition fftpack.F:34
+
subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
scrft
Definition fftpack.F:82
+
subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
srcft
Definition fftpack.F:215
+
subroutine spffte(imax, incw, incg, kmax, w, g, idir, afft)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition spffte.f:49
diff --git a/spfftpt_8f.html b/spfftpt_8f.html index 795ad261..d4ce5733 100644 --- a/spfftpt_8f.html +++ b/spfftpt_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spfftpt.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spfftpt.f File Reference
+
spfftpt.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spfftpt (M, N, INCW, INCG, KMAX, RLON, W, G)
 This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints. More...
 
subroutine spfftpt (m, n, incw, incg, kmax, rlon, w, g)
 This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
 

Detailed Description

Compute fourier transform to gridpoints.

@@ -107,8 +113,8 @@

Definition in file spfftpt.f.

Function/Subroutine Documentation

- -

◆ spfftpt()

+ +

◆ spfftpt()

@@ -117,49 +123,49 @@

subroutine spfftpt

( integer, intent(in) M, m,
integer, intent(in) N, n,
integer, intent(in) INCW, incw,
integer, intent(in) INCG, incg,
integer, intent(in) KMAX, kmax,
real, dimension(n), intent(in) RLON, rlon,
real, dimension(2*incw,kmax), intent(in) W, w,
real, dimension(incg,kmax), intent(out) G g 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,72 +81,80 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spfftpt.f
+
spfftpt.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Compute fourier transform to gridpoints.
-
3 C> @author Iredell @date 96-02-20
-
4 
-
5 C> This subprogram computes a slow Fourier transform
-
6 C> from Fourier space to a set of gridpoints.
-
7 C>
-
8 C> @note This subprogram is thread-safe.
-
9 C>
-
10 C> @param M Fourier wavenumber truncation
-
11 C> @param N number of gridpoints
-
12 C> @param INCW first dimension of the complex amplitude array
-
13 C> (INCW >= M+1)
-
14 C> @param INCG first dimension of the gridpoint array
-
15 C> (INCG >= N)
-
16 C> @param KMAX number of Fourier fields
-
17 C> @param RLON grid longitudes in degrees
-
18 C> @param W Fourier amplitudes
-
19 C> @param G gridpoint values
-
20 C>
-
21 C> @author Iredell @date 96-02-20
-
22  SUBROUTINE spfftpt(M,N,INCW,INCG,KMAX,RLON,W,G)
-
23 
-
24  IMPLICIT NONE
-
25  INTEGER,INTENT(IN):: M,N,INCW,INCG,KMAX
-
26  REAL,INTENT(IN):: RLON(N)
-
27  REAL,INTENT(IN):: W(2*INCW,KMAX)
-
28  REAL,INTENT(OUT):: G(INCG,KMAX)
-
29  INTEGER I,K,L
-
30  REAL RADLON,SLON(M),CLON(M)
-
31  REAL,PARAMETER:: PI=3.14159265358979
-
32 
-
33  DO i=1,n
-
34  radlon=pi/180*rlon(i)
-
35  DO l=1,m
-
36  slon(l)=sin(l*radlon)
-
37  clon(l)=cos(l*radlon)
-
38  ENDDO
-
39  DO k=1,kmax
-
40  g(i,k)=w(1,k)
-
41  ENDDO
-
42  DO l=1,m
-
43  DO k=1,kmax
-
44  g(i,k)=g(i,k)+2.*(w(2*l+1,k)*clon(l)-w(2*l+2,k)*slon(l))
-
45  ENDDO
-
46  ENDDO
-
47  ENDDO
-
48  END SUBROUTINE
-
subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition: spfftpt.f:23
+Go to the documentation of this file.
1C> @file
+
2C> @brief Compute fourier transform to gridpoints.
+
3C> @author Iredell @date 96-02-20
+
4
+
5C> This subprogram computes a slow Fourier transform
+
6C> from Fourier space to a set of gridpoints.
+
7C>
+
8C> @note This subprogram is thread-safe.
+
9C>
+
10C> @param M Fourier wavenumber truncation
+
11C> @param N number of gridpoints
+
12C> @param INCW first dimension of the complex amplitude array
+
13C> (INCW >= M+1)
+
14C> @param INCG first dimension of the gridpoint array
+
15C> (INCG >= N)
+
16C> @param KMAX number of Fourier fields
+
17C> @param RLON grid longitudes in degrees
+
18C> @param W Fourier amplitudes
+
19C> @param G gridpoint values
+
20C>
+
21C> @author Iredell @date 96-02-20
+
+
22 SUBROUTINE spfftpt(M,N,INCW,INCG,KMAX,RLON,W,G)
+
23
+
24 IMPLICIT NONE
+
25 INTEGER,INTENT(IN):: M,N,INCW,INCG,KMAX
+
26 REAL,INTENT(IN):: RLON(N)
+
27 REAL,INTENT(IN):: W(2*INCW,KMAX)
+
28 REAL,INTENT(OUT):: G(INCG,KMAX)
+
29 INTEGER I,K,L
+
30 REAL RADLON,SLON(M),CLON(M)
+
31 REAL,PARAMETER:: PI=3.14159265358979
+
32
+
33 DO i=1,n
+
34 radlon=pi/180*rlon(i)
+
35 DO l=1,m
+
36 slon(l)=sin(l*radlon)
+
37 clon(l)=cos(l*radlon)
+
38 ENDDO
+
39 DO k=1,kmax
+
40 g(i,k)=w(1,k)
+
41 ENDDO
+
42 DO l=1,m
+
43 DO k=1,kmax
+
44 g(i,k)=g(i,k)+2.*(w(2*l+1,k)*clon(l)-w(2*l+2,k)*slon(l))
+
45 ENDDO
+
46 ENDDO
+
47 ENDDO
+
+
48 END SUBROUTINE
+
subroutine spfftpt(m, n, incw, incg, kmax, rlon, w, g)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition spfftpt.f:23
diff --git a/spgradq_8f.html b/spgradq_8f.html index b1495d40..a2f8f0b9 100644 --- a/spgradq_8f.html +++ b/spgradq_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spgradq.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spgradq.f File Reference
+
spgradq.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spgradq (I, M, ENN1, ELONN1, EON, EONTOP, Q, QDX, QDY, QDYTOP)
 Computes the horizontal vector gradient of a scalar field in spectral space. More...
 
subroutine spgradq (i, m, enn1, elonn1, eon, eontop, q, qdx, qdy, qdytop)
 Computes the horizontal vector gradient of a scalar field in spectral space.
 

Detailed Description

Compute gradient in spectral space.

@@ -107,8 +113,8 @@

Definition in file spgradq.f.

Function/Subroutine Documentation

- -

◆ spgradq()

+ +

◆ spgradq()

@@ -117,61 +123,61 @@

subroutine spgradq

(  I, i,
 M, m,
real, dimension((m+1)*((i+1)*m+2)/2) ENN1, enn1,
real, dimension((m+1)*((i+1)*m+2)/2) ELONN1, elonn1,
real, dimension((m+1)*((i+1)*m+2)/2) EON, eon,
real, dimension(m+1) EONTOP, eontop,
real, dimension((m+1)*((i+1)*m+2)) Q, q,
real, dimension((m+1)*((i+1)*m+2)) QDX, qdx,
real, dimension((m+1)*((i+1)*m+2)) QDY, qdy,
real, dimension(2*(m+1)) QDYTOP qdytop 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,90 +81,98 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spgradq.f
+
spgradq.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Compute gradient in spectral space.
-
3 C> @author Iredell @date 92-10-31
-
4 
-
5 C> Computes the horizontal vector gradient of a scalar field
-
6 C> in spectral space.
-
7 C>
-
8 C> Subprogram speps() should be called already.
-
9 C>
-
10 C> If l is the zonal wavenumber, n is the total wavenumber,
-
11 C> eps(l,n)=sqrt((n**2-l**2)/(4*n**2-1)) and a is earth radius,
-
12 C> then the zonal gradient of q(l,n) is simply i*l/a*q(l,n)
-
13 C> while the meridional gradient of q(l,n) is computed as
-
14 C> eps(l,n+1)*(n+2)/a*q(l,n+1)-eps(l,n+1)*(n-1)/a*q(l,n-1).
-
15 C>
-
16 C> Extra terms are computed over top of the spectral domain.
-
17 C>
-
18 C> Advantage is taken of the fact that eps(l,l)=0
-
19 C> in order to vectorize over the entire spectral domain.
-
20 C>
-
21 C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
-
22 C> @param M spectral truncation
-
23 C> @param ENN1
-
24 C> @param ELONN1
-
25 C> @param EON EPSILON/N*A
-
26 C> @param EONTOP EPSILON/N*A over top
-
27 C> @param Q scalar field
-
28 C> @param QDX zonal gradient (times coslat)
-
29 C> @param QDY merid gradient (times coslat)
-
30 C> @param QDYTOP merid gradient (times coslat) over top
-
31 C>
-
32 C> @author IREDELL @date 92-10-31
-
33  SUBROUTINE spgradq(I,M,ENN1,ELONN1,EON,EONTOP,Q,QDX,QDY,QDYTOP)
-
34 
-
35  REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
-
36  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
-
37  REAL Q((M+1)*((I+1)*M+2))
-
38  REAL QDX((M+1)*((I+1)*M+2)),QDY((M+1)*((I+1)*M+2))
-
39  REAL QDYTOP(2*(M+1))
-
40 
-
41 C TAKE ZONAL AND MERIDIONAL GRADIENTS
-
42  k=1
-
43  qdx(2*k-1)=0.
-
44  qdx(2*k)=0.
-
45  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)
-
46  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)
-
47  DO k=2,(m+1)*((i+1)*m+2)/2-1
-
48  qdx(2*k-1)=-elonn1(k)*enn1(k)*q(2*k)
-
49  qdx(2*k)=elonn1(k)*enn1(k)*q(2*k-1)
-
50  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)-eon(k)*enn1(k-1)*q(2*k-3)
-
51  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)-eon(k)*enn1(k-1)*q(2*k-2)
-
52  ENDDO
-
53  k=(m+1)*((i+1)*m+2)/2
-
54  qdx(2*k-1)=-elonn1(k)*enn1(k)*q(2*k)
-
55  qdx(2*k)=elonn1(k)*enn1(k)*q(2*k-1)
-
56  qdy(2*k-1)=-eon(k)*enn1(k-1)*q(2*k-3)
-
57  qdy(2*k)=-eon(k)*enn1(k-1)*q(2*k-2)
-
58 
-
59 C TAKE MERIDIONAL GRADIENT OVER TOP
-
60  DO l=0,m
-
61  k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
-
62  qdytop(2*l+1)=-eontop(l+1)*enn1(k)*q(2*k-1)
-
63  qdytop(2*l+2)=-eontop(l+1)*enn1(k)*q(2*k)
-
64  ENDDO
-
65  RETURN
-
66  END
-
subroutine spgradq(I, M, ENN1, ELONN1, EON, EONTOP, Q, QDX, QDY, QDYTOP)
Computes the horizontal vector gradient of a scalar field in spectral space.
Definition: spgradq.f:34
+Go to the documentation of this file.
1C> @file
+
2C> @brief Compute gradient in spectral space.
+
3C> @author Iredell @date 92-10-31
+
4
+
5C> Computes the horizontal vector gradient of a scalar field
+
6C> in spectral space.
+
7C>
+
8C> Subprogram speps() should be called already.
+
9C>
+
10C> If l is the zonal wavenumber, n is the total wavenumber,
+
11C> eps(l,n)=sqrt((n**2-l**2)/(4*n**2-1)) and a is earth radius,
+
12C> then the zonal gradient of q(l,n) is simply i*l/a*q(l,n)
+
13C> while the meridional gradient of q(l,n) is computed as
+
14C> eps(l,n+1)*(n+2)/a*q(l,n+1)-eps(l,n+1)*(n-1)/a*q(l,n-1).
+
15C>
+
16C> Extra terms are computed over top of the spectral domain.
+
17C>
+
18C> Advantage is taken of the fact that eps(l,l)=0
+
19C> in order to vectorize over the entire spectral domain.
+
20C>
+
21C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
+
22C> @param M spectral truncation
+
23C> @param ENN1
+
24C> @param ELONN1
+
25C> @param EON EPSILON/N*A
+
26C> @param EONTOP EPSILON/N*A over top
+
27C> @param Q scalar field
+
28C> @param QDX zonal gradient (times coslat)
+
29C> @param QDY merid gradient (times coslat)
+
30C> @param QDYTOP merid gradient (times coslat) over top
+
31C>
+
32C> @author IREDELL @date 92-10-31
+
+
33 SUBROUTINE spgradq(I,M,ENN1,ELONN1,EON,EONTOP,Q,QDX,QDY,QDYTOP)
+
34
+
35 REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
+
36 REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
+
37 REAL Q((M+1)*((I+1)*M+2))
+
38 REAL QDX((M+1)*((I+1)*M+2)),QDY((M+1)*((I+1)*M+2))
+
39 REAL QDYTOP(2*(M+1))
+
40
+
41C TAKE ZONAL AND MERIDIONAL GRADIENTS
+
42 k=1
+
43 qdx(2*k-1)=0.
+
44 qdx(2*k)=0.
+
45 qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)
+
46 qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)
+
47 DO k=2,(m+1)*((i+1)*m+2)/2-1
+
48 qdx(2*k-1)=-elonn1(k)*enn1(k)*q(2*k)
+
49 qdx(2*k)=elonn1(k)*enn1(k)*q(2*k-1)
+
50 qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)-eon(k)*enn1(k-1)*q(2*k-3)
+
51 qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)-eon(k)*enn1(k-1)*q(2*k-2)
+
52 ENDDO
+
53 k=(m+1)*((i+1)*m+2)/2
+
54 qdx(2*k-1)=-elonn1(k)*enn1(k)*q(2*k)
+
55 qdx(2*k)=elonn1(k)*enn1(k)*q(2*k-1)
+
56 qdy(2*k-1)=-eon(k)*enn1(k-1)*q(2*k-3)
+
57 qdy(2*k)=-eon(k)*enn1(k-1)*q(2*k-2)
+
58
+
59C TAKE MERIDIONAL GRADIENT OVER TOP
+
60 DO l=0,m
+
61 k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
+
62 qdytop(2*l+1)=-eontop(l+1)*enn1(k)*q(2*k-1)
+
63 qdytop(2*l+2)=-eontop(l+1)*enn1(k)*q(2*k)
+
64 ENDDO
+
65 RETURN
+
+
66 END
+
subroutine spgradq(i, m, enn1, elonn1, eon, eontop, q, qdx, qdy, qdytop)
Computes the horizontal vector gradient of a scalar field in spectral space.
Definition spgradq.f:34
diff --git a/spgradx_8f.html b/spgradx_8f.html index f18a6604..73a728bc 100644 --- a/spgradx_8f.html +++ b/spgradx_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spgradx.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spgradx.f File Reference
+
spgradx.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spgradx (M, INCW, KMAX, MP, CLAT, W, WX)
 This subprogram computes the x-gradient of fields in complex Fourier space. More...
 
subroutine spgradx (m, incw, kmax, mp, clat, w, wx)
 This subprogram computes the x-gradient of fields in complex Fourier space.
 

Detailed Description

Compute x-gradient in Fourier space.

@@ -107,8 +113,8 @@

Definition in file spgradx.f.

Function/Subroutine Documentation

- -

◆ spgradx()

+ +

◆ spgradx()

@@ -117,43 +123,43 @@

subroutine spgradx

( integer, intent(in) M, m,
integer, intent(in) INCW, incw,
integer, intent(in) KMAX, kmax,
integer, dimension(kmax), intent(in) MP, mp,
real, intent(in) CLAT, clat,
real, dimension(2*incw,kmax), intent(inout) W, w,
real, dimension(2*incw,kmax), intent(out) WX wx 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,96 +81,104 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spgradx.f
+
spgradx.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Compute x-gradient in Fourier space
-
3 C> @author IREDELL @date 96-02-20
-
4 
-
5 C> This subprogram computes the x-gradient of fields
-
6 C> in complex Fourier space.
-
7 C>
-
8 C> The x-gradient of a vector field W is
-
9 C> WX=CONJG(W)*L/RERTH
-
10 C> where L is the wavenumber and RERTH is the Earth radius,
-
11 C> so that the result is the x-gradient of the pseudo-vector.
-
12 C>
-
13 C> The x-gradient of a scalar field W is
-
14 C> WX=CONJG(W)*L/(RERTH*CLAT)
-
15 C> where CLAT is the cosine of latitude.
-
16 C>
-
17 C> At the pole this is undefined, so the way to get
-
18 C> the x-gradient at the pole is by passing both
-
19 C> the weighted wavenumber 0 and the unweighted wavenumber 1
-
20 C> amplitudes at the pole and setting MP=10.
-
21 C> In this case, the wavenumber 1 amplitudes are used
-
22 C> to compute the x-gradient and then zeroed out.
-
23 C>
-
24 C> @note This subprogram is thread-safe.
-
25 C>
-
26 C> @param M Fourier wavenumber truncation
-
27 C> @param INCW first dimension of the complex amplitude array
-
28 C> (INCW >= M+1)
-
29 C> @param KMAX number of Fourier fields
-
30 C> @param MP identifiers
-
31 C> (0 or 10 for scalar, 1 for vector)
-
32 C> @param CLAT cosine of latitude
-
33 C> @param[out] W Fourier amplitudes corrected when MP=10 and CLAT=0
-
34 C> @param[out] WX complex amplitudes of x-gradients
-
35 C>
-
36 C> @author IREDELL @date 96-02-20
-
37  SUBROUTINE spgradx(M,INCW,KMAX,MP,CLAT,W,WX)
-
38 
-
39  IMPLICIT NONE
-
40  INTEGER,INTENT(IN):: M,INCW,KMAX,MP(KMAX)
-
41  REAL,INTENT(IN):: CLAT
-
42  REAL,INTENT(INOUT):: W(2*INCW,KMAX)
-
43  REAL,INTENT(OUT):: WX(2*INCW,KMAX)
-
44  INTEGER K,L
-
45  REAL,PARAMETER:: RERTH=6.3712e6
-
46 
-
47  DO k=1,kmax
-
48  IF(mp(k).EQ.1) THEN
-
49  DO l=0,m
-
50  wx(2*l+1,k)=-w(2*l+2,k)*(l/rerth)
-
51  wx(2*l+2,k)=+w(2*l+1,k)*(l/rerth)
-
52  ENDDO
-
53  ELSEIF(clat.EQ.0.) THEN
-
54  DO l=0,m
-
55  wx(2*l+1,k)=0
-
56  wx(2*l+2,k)=0
-
57  ENDDO
-
58  IF(mp(k).EQ.10.AND.m.GE.2) THEN
-
59  wx(3,k)=-w(4,k)/rerth
-
60  wx(4,k)=+w(3,k)/rerth
-
61  w(3,k)=0
-
62  w(4,k)=0
-
63  ENDIF
-
64  ELSE
-
65  DO l=0,m
-
66  wx(2*l+1,k)=-w(2*l+2,k)*(l/(rerth*clat))
-
67  wx(2*l+2,k)=+w(2*l+1,k)*(l/(rerth*clat))
-
68  ENDDO
-
69  ENDIF
-
70  ENDDO
-
71 
-
72  END SUBROUTINE
-
subroutine spgradx(M, INCW, KMAX, MP, CLAT, W, WX)
This subprogram computes the x-gradient of fields in complex Fourier space.
Definition: spgradx.f:38
+Go to the documentation of this file.
1C> @file
+
2C> @brief Compute x-gradient in Fourier space
+
3C> @author IREDELL @date 96-02-20
+
4
+
5C> This subprogram computes the x-gradient of fields
+
6C> in complex Fourier space.
+
7C>
+
8C> The x-gradient of a vector field W is
+
9C> WX=CONJG(W)*L/RERTH
+
10C> where L is the wavenumber and RERTH is the Earth radius,
+
11C> so that the result is the x-gradient of the pseudo-vector.
+
12C>
+
13C> The x-gradient of a scalar field W is
+
14C> WX=CONJG(W)*L/(RERTH*CLAT)
+
15C> where CLAT is the cosine of latitude.
+
16C>
+
17C> At the pole this is undefined, so the way to get
+
18C> the x-gradient at the pole is by passing both
+
19C> the weighted wavenumber 0 and the unweighted wavenumber 1
+
20C> amplitudes at the pole and setting MP=10.
+
21C> In this case, the wavenumber 1 amplitudes are used
+
22C> to compute the x-gradient and then zeroed out.
+
23C>
+
24C> @note This subprogram is thread-safe.
+
25C>
+
26C> @param M Fourier wavenumber truncation
+
27C> @param INCW first dimension of the complex amplitude array
+
28C> (INCW >= M+1)
+
29C> @param KMAX number of Fourier fields
+
30C> @param MP identifiers
+
31C> (0 or 10 for scalar, 1 for vector)
+
32C> @param CLAT cosine of latitude
+
33C> @param[out] W Fourier amplitudes corrected when MP=10 and CLAT=0
+
34C> @param[out] WX complex amplitudes of x-gradients
+
35C>
+
36C> @author IREDELL @date 96-02-20
+
+
37 SUBROUTINE spgradx(M,INCW,KMAX,MP,CLAT,W,WX)
+
38
+
39 IMPLICIT NONE
+
40 INTEGER,INTENT(IN):: M,INCW,KMAX,MP(KMAX)
+
41 REAL,INTENT(IN):: CLAT
+
42 REAL,INTENT(INOUT):: W(2*INCW,KMAX)
+
43 REAL,INTENT(OUT):: WX(2*INCW,KMAX)
+
44 INTEGER K,L
+
45 REAL,PARAMETER:: RERTH=6.3712e6
+
46
+
47 DO k=1,kmax
+
48 IF(mp(k).EQ.1) THEN
+
49 DO l=0,m
+
50 wx(2*l+1,k)=-w(2*l+2,k)*(l/rerth)
+
51 wx(2*l+2,k)=+w(2*l+1,k)*(l/rerth)
+
52 ENDDO
+
53 ELSEIF(clat.EQ.0.) THEN
+
54 DO l=0,m
+
55 wx(2*l+1,k)=0
+
56 wx(2*l+2,k)=0
+
57 ENDDO
+
58 IF(mp(k).EQ.10.AND.m.GE.2) THEN
+
59 wx(3,k)=-w(4,k)/rerth
+
60 wx(4,k)=+w(3,k)/rerth
+
61 w(3,k)=0
+
62 w(4,k)=0
+
63 ENDIF
+
64 ELSE
+
65 DO l=0,m
+
66 wx(2*l+1,k)=-w(2*l+2,k)*(l/(rerth*clat))
+
67 wx(2*l+2,k)=+w(2*l+1,k)*(l/(rerth*clat))
+
68 ENDDO
+
69 ENDIF
+
70 ENDDO
+
71
+
+
72 END SUBROUTINE
+
subroutine spgradx(m, incw, kmax, mp, clat, w, wx)
This subprogram computes the x-gradient of fields in complex Fourier space.
Definition spgradx.f:38
diff --git a/spgrady_8f.html b/spgrady_8f.html index fa75c33c..4f1680dd 100644 --- a/spgrady_8f.html +++ b/spgrady_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spgrady.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spgrady.f File Reference
+
spgrady.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spgrady (I, M, ENN1, EON, EONTOP, Q, QDY, QDYTOP)
 Computes the horizontal vector y-gradient of a scalar field in spectral space. More...
 
subroutine spgrady (i, m, enn1, eon, eontop, q, qdy, qdytop)
 Computes the horizontal vector y-gradient of a scalar field in spectral space.
 

Detailed Description

Compute y-gradient in spectral space.

@@ -107,8 +113,8 @@

Definition in file spgrady.f.

Function/Subroutine Documentation

- -

◆ spgrady()

+ +

◆ spgrady()

@@ -117,49 +123,49 @@

subroutine spgrady

(  I, i,
 M, m,
real, dimension((m+1)*((i+1)*m+2)/2) ENN1, enn1,
real, dimension((m+1)*((i+1)*m+2)/2) EON, eon,
real, dimension(m+1) EONTOP, eontop,
real, dimension((m+1)*((i+1)*m+2)) Q, q,
real, dimension((m+1)*((i+1)*m+2)) QDY, qdy,
real, dimension(2*(m+1)) QDYTOP qdytop 
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,83 +81,91 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spgrady.f
+
spgrady.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Compute y-gradient in spectral space.
-
3 C> @author IREDELL @date 92-10-31
-
4 
-
5 C> Computes the horizontal vector y-gradient of a scalar field
-
6 c> in spectral space.
-
7 C>
-
8 C> Subprogram speps should be called already.
-
9 C>
-
10 C> If L is the zonal wavenumber, N is the total wavenumber,
-
11 C> EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) and A is Earth radius,
-
12 C> then the meridional gradient of Q(L,N) is computed as
-
13 C> EPS(L,N+1)*(N+2)/A*Q(L,N+1)-EPS(L,N+1)*(N-1)/A*Q(L,N-1).
-
14 C>
-
15 C> Extra terms are computed over top of the spectral domain.
-
16 C>
-
17 C> Advantage is taken of the fact that EPS(L,L)=0
-
18 C> in order to vectorize over the entire spectral domain.
-
19 C>
-
20 C> @param I spectral domain shape
-
21 c> (0 for triangular, 1 for rhomboidal)
-
22 C> @param M spectral truncation
-
23 C> @param ENN1 N*(N+1)/A**2
-
24 C> @param EON EPSILON/N*A
-
25 C> @param EONTOP EPSILON/N*A over top
-
26 C> @param Q scalar field
-
27 C> @param QDY merid gradient (times coslat)
-
28 C> @param QDYTOP merid gradient (times coslat) over top
-
29 C>
-
30 C> @author IREDELL @date 92-10-31
-
31  SUBROUTINE spgrady(I,M,ENN1,EON,EONTOP,Q,QDY,QDYTOP)
-
32 
-
33  REAL ENN1((M+1)*((I+1)*M+2)/2)
-
34  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
-
35  REAL Q((M+1)*((I+1)*M+2))
-
36  REAL QDY((M+1)*((I+1)*M+2))
-
37  REAL QDYTOP(2*(M+1))
-
38 
-
39 C TAKE MERIDIONAL GRADIENT
-
40  k=1
-
41  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)
-
42  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)
-
43  DO k=2,(m+1)*((i+1)*m+2)/2-1
-
44  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)-eon(k)*enn1(k-1)*q(2*k-3)
-
45  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)-eon(k)*enn1(k-1)*q(2*k-2)
-
46  ENDDO
-
47  k=(m+1)*((i+1)*m+2)/2
-
48  qdy(2*k-1)=-eon(k)*enn1(k-1)*q(2*k-3)
-
49  qdy(2*k)=-eon(k)*enn1(k-1)*q(2*k-2)
-
50 
-
51 C TAKE MERIDIONAL GRADIENT OVER TOP
-
52  DO l=0,m
-
53  k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
-
54  qdytop(2*l+1)=-eontop(l+1)*enn1(k)*q(2*k-1)
-
55  qdytop(2*l+2)=-eontop(l+1)*enn1(k)*q(2*k)
-
56  ENDDO
-
57 
-
58  RETURN
-
59  END
-
subroutine spgrady(I, M, ENN1, EON, EONTOP, Q, QDY, QDYTOP)
Computes the horizontal vector y-gradient of a scalar field in spectral space.
Definition: spgrady.f:32
+Go to the documentation of this file.
1C> @file
+
2C> @brief Compute y-gradient in spectral space.
+
3C> @author IREDELL @date 92-10-31
+
4
+
5C> Computes the horizontal vector y-gradient of a scalar field
+
6c> in spectral space.
+
7C>
+
8C> Subprogram speps should be called already.
+
9C>
+
10C> If L is the zonal wavenumber, N is the total wavenumber,
+
11C> EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) and A is Earth radius,
+
12C> then the meridional gradient of Q(L,N) is computed as
+
13C> EPS(L,N+1)*(N+2)/A*Q(L,N+1)-EPS(L,N+1)*(N-1)/A*Q(L,N-1).
+
14C>
+
15C> Extra terms are computed over top of the spectral domain.
+
16C>
+
17C> Advantage is taken of the fact that EPS(L,L)=0
+
18C> in order to vectorize over the entire spectral domain.
+
19C>
+
20C> @param I spectral domain shape
+
21c> (0 for triangular, 1 for rhomboidal)
+
22C> @param M spectral truncation
+
23C> @param ENN1 N*(N+1)/A**2
+
24C> @param EON EPSILON/N*A
+
25C> @param EONTOP EPSILON/N*A over top
+
26C> @param Q scalar field
+
27C> @param QDY merid gradient (times coslat)
+
28C> @param QDYTOP merid gradient (times coslat) over top
+
29C>
+
30C> @author IREDELL @date 92-10-31
+
+
31 SUBROUTINE spgrady(I,M,ENN1,EON,EONTOP,Q,QDY,QDYTOP)
+
32
+
33 REAL ENN1((M+1)*((I+1)*M+2)/2)
+
34 REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
+
35 REAL Q((M+1)*((I+1)*M+2))
+
36 REAL QDY((M+1)*((I+1)*M+2))
+
37 REAL QDYTOP(2*(M+1))
+
38
+
39C TAKE MERIDIONAL GRADIENT
+
40 k=1
+
41 qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)
+
42 qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)
+
43 DO k=2,(m+1)*((i+1)*m+2)/2-1
+
44 qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)-eon(k)*enn1(k-1)*q(2*k-3)
+
45 qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)-eon(k)*enn1(k-1)*q(2*k-2)
+
46 ENDDO
+
47 k=(m+1)*((i+1)*m+2)/2
+
48 qdy(2*k-1)=-eon(k)*enn1(k-1)*q(2*k-3)
+
49 qdy(2*k)=-eon(k)*enn1(k-1)*q(2*k-2)
+
50
+
51C TAKE MERIDIONAL GRADIENT OVER TOP
+
52 DO l=0,m
+
53 k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
+
54 qdytop(2*l+1)=-eontop(l+1)*enn1(k)*q(2*k-1)
+
55 qdytop(2*l+2)=-eontop(l+1)*enn1(k)*q(2*k)
+
56 ENDDO
+
57
+
58 RETURN
+
+
59 END
+
subroutine spgrady(i, m, enn1, eon, eontop, q, qdy, qdytop)
Computes the horizontal vector y-gradient of a scalar field in spectral space.
Definition spgrady.f:32
diff --git a/splaplac_8f.html b/splaplac_8f.html index 3589a880..f2ef4ec4 100644 --- a/splaplac_8f.html +++ b/splaplac_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: splaplac.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
splaplac.f File Reference
+
splaplac.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine splaplac (I, M, ENN1, Q, QD2, IDIR)
 Computes the laplacian or the inverse laplacian of a scalar field in spectral space. More...
 
subroutine splaplac (i, m, enn1, q, qd2, idir)
 Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
 

Detailed Description

Compute laplacian in spectral space.

@@ -107,8 +113,8 @@

Definition in file splaplac.f.

Function/Subroutine Documentation

- -

◆ splaplac()

+ +

◆ splaplac()

@@ -117,37 +123,37 @@

subroutine splaplac

(  I, i,
 M, m,
real, dimension((m+1)*((i+1)*m+2)/2) ENN1, enn1,
real, dimension((m+1)*((i+1)*m+2)) Q, q,
real, dimension((m+1)*((i+1)*m+2)) QD2, qd2,
 IDIR idir 
@@ -190,7 +196,7 @@

diff --git a/splaplac_8f.js b/splaplac_8f.js index 45b0c9dc..d0c0f3a0 100644 --- a/splaplac_8f.js +++ b/splaplac_8f.js @@ -1,4 +1,4 @@ var splaplac_8f = [ - [ "splaplac", "splaplac_8f.html#a64338955857a3cf58283146940e7ae42", null ] + [ "splaplac", "splaplac_8f.html#a6a5d229a55ce80ab4feed514fb704158", null ] ]; \ No newline at end of file diff --git a/splaplac_8f_source.html b/splaplac_8f_source.html index d73b3247..80caf32b 100644 --- a/splaplac_8f_source.html +++ b/splaplac_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: splaplac.f Source File @@ -23,10 +23,9 @@

- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,73 +81,81 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
splaplac.f
+
splaplac.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Compute laplacian in spectral space.
-
3 C> @author Iredell @date 92-10-31
-
4 
-
5 C> Computes the laplacian or the inverse laplacian
-
6 C> of a scalar field in spectral space.
-
7 C>
-
8 C> Subprogram speps() should be called already.
-
9 C>
-
10 C> The Laplacian of Q(L,N) is simply -N*(N+1)/A**2*Q(L,N)
-
11 C>
-
12 C> @param I spectral domain shape
-
13 C> (0 for triangular, 1 for rhomboidal)
-
14 C> @param M spectral truncation
-
15 C> @param ENN1 N*(N+1)/A**2
-
16 C> @param[out] Q if IDIR > 0, scalar field
-
17 C> (Q(0,0) is not computed)
-
18 C> @param[out] QD2 if IDIR < 0, Laplacian
-
19 C> @param IDIR flag
-
20 C> - IDIR > 0 to take Laplacian
-
21 C> - IDIR < 0 to take inverse Laplacian
-
22 C>
-
23 C> @author Iredell @date 92-10-31
-
24  SUBROUTINE splaplac(I,M,ENN1,Q,QD2,IDIR)
-
25 
-
26  REAL ENN1((M+1)*((I+1)*M+2)/2)
-
27  REAL Q((M+1)*((I+1)*M+2))
-
28  REAL QD2((M+1)*((I+1)*M+2))
-
29 
-
30 C TAKE LAPLACIAN
-
31  IF(idir.GT.0) THEN
-
32  k=1
-
33  qd2(2*k-1)=0.
-
34  qd2(2*k)=0.
-
35  DO k=2,(m+1)*((i+1)*m+2)/2
-
36  qd2(2*k-1)=q(2*k-1)*(-enn1(k))
-
37  qd2(2*k)=q(2*k)*(-enn1(k))
-
38  ENDDO
-
39 
-
40 C TAKE INVERSE LAPLACIAN
-
41  ELSE
-
42  DO k=2,(m+1)*((i+1)*m+2)/2
-
43  q(2*k-1)=qd2(2*k-1)/(-enn1(k))
-
44  q(2*k)=qd2(2*k)/(-enn1(k))
-
45  ENDDO
-
46  ENDIF
-
47 
-
48  RETURN
-
49  END
-
subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition: splaplac.f:25
+Go to the documentation of this file.
1C> @file
+
2C> @brief Compute laplacian in spectral space.
+
3C> @author Iredell @date 92-10-31
+
4
+
5C> Computes the laplacian or the inverse laplacian
+
6C> of a scalar field in spectral space.
+
7C>
+
8C> Subprogram speps() should be called already.
+
9C>
+
10C> The Laplacian of Q(L,N) is simply -N*(N+1)/A**2*Q(L,N)
+
11C>
+
12C> @param I spectral domain shape
+
13C> (0 for triangular, 1 for rhomboidal)
+
14C> @param M spectral truncation
+
15C> @param ENN1 N*(N+1)/A**2
+
16C> @param[out] Q if IDIR > 0, scalar field
+
17C> (Q(0,0) is not computed)
+
18C> @param[out] QD2 if IDIR < 0, Laplacian
+
19C> @param IDIR flag
+
20C> - IDIR > 0 to take Laplacian
+
21C> - IDIR < 0 to take inverse Laplacian
+
22C>
+
23C> @author Iredell @date 92-10-31
+
+
24 SUBROUTINE splaplac(I,M,ENN1,Q,QD2,IDIR)
+
25
+
26 REAL ENN1((M+1)*((I+1)*M+2)/2)
+
27 REAL Q((M+1)*((I+1)*M+2))
+
28 REAL QD2((M+1)*((I+1)*M+2))
+
29
+
30C TAKE LAPLACIAN
+
31 IF(idir.GT.0) THEN
+
32 k=1
+
33 qd2(2*k-1)=0.
+
34 qd2(2*k)=0.
+
35 DO k=2,(m+1)*((i+1)*m+2)/2
+
36 qd2(2*k-1)=q(2*k-1)*(-enn1(k))
+
37 qd2(2*k)=q(2*k)*(-enn1(k))
+
38 ENDDO
+
39
+
40C TAKE INVERSE LAPLACIAN
+
41 ELSE
+
42 DO k=2,(m+1)*((i+1)*m+2)/2
+
43 q(2*k-1)=qd2(2*k-1)/(-enn1(k))
+
44 q(2*k)=qd2(2*k)/(-enn1(k))
+
45 ENDDO
+
46 ENDIF
+
47
+
48 RETURN
+
+
49 END
+
subroutine splaplac(i, m, enn1, q, qd2, idir)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition splaplac.f:25
diff --git a/splat_8F.html b/splat_8F.html index dc01b1de..8e1d3a56 100644 --- a/splat_8F.html +++ b/splat_8F.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: splat.F File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
splat.F File Reference
+
splat.F File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine splat (IDRT, JMAX, SLAT, WLAT)
 Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of latitudes. More...
 
subroutine splat (idrt, jmax, slat, wlat)
 Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of latitudes.
 

Detailed Description

Computes cosines of colatitude and Gaussian weights for sets of latitudes.

@@ -131,8 +137,8 @@

Definition in file splat.F.

Function/Subroutine Documentation

- -

◆ splat()

+ +

◆ splat()

@@ -205,7 +211,7 @@

diff --git a/splat_8F.js b/splat_8F.js index 1bbff9ef..b0b6fdc0 100644 --- a/splat_8F.js +++ b/splat_8F.js @@ -1,4 +1,4 @@ var splat_8F = [ - [ "splat", "splat_8F.html#aa6db21451bb67635e7e4426546140e11", null ] + [ "splat", "splat_8F.html#a3eb4e28a6c2be40e659048e92ca0350e", null ] ]; \ No newline at end of file diff --git a/splat_8F_source.html b/splat_8F_source.html index f1408b6e..6f06ba34 100644 --- a/splat_8F_source.html +++ b/splat_8F_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: splat.F Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +

@@ -76,228 +81,236 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
splat.F
+
splat.F
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Computes cosines of colatitude and Gaussian weights
-
3 C> for sets of latitudes.
-
4 C>
-
5 C> ### Program History Log
-
6 C> Date | Programmer | Comments
-
7 C> -----|------------|---------
-
8 C> 96-02-20 | Iredell | Initial.
-
9 C> 97-10-20 | Iredell | Adjust precision.
-
10 C> 98-06-11 | Iredell | Generalize precision using FORTRAN 90 intrinsic.
-
11 C> 1998-12-03 | Iredell | Generalize precision further.
-
12 C> 1998-12-03 | Iredell | Uses AIX ESSL BLAS calls.
-
13 C> 2009-12-27 | D. Stark | Updated to switch between ESSL calls on an AIX platform, and Numerical Recipies calls elsewise.
-
14 C> 2010-12-30 | Slovacek | Update alignment so preprocessor does not cause compilation failure.
-
15 C> 2012-09-01 | E. Mirvis & M.Iredell | Merging & debugging linux errors of _d and _8 using generic LU factorization.
-
16 C> 2012-11-05 | E. Mirvis | Generic FFTPACK and LU lapack were removed.
-
17 C>
-
18 C> @author Iredell @date 96-02-20
-
19 
-
20 C> Computes cosines of colatitude and Gaussian weights
-
21 C> for one of the following specific global sets of latitudes.
-
22 C> - Gaussian latitudes (IDRT=4)
-
23 C> - Equally-spaced latitudes including poles (IDRT=0)
-
24 C> - Equally-spaced latitudes excluding poles (IDRT=256)
-
25 C>
-
26 C> The Gaussian latitudes are located at the zeroes of the
-
27 C> Legendre polynomial of the given order. These latitudes
-
28 C> are efficient for reversible transforms from spectral space.
-
29 C> (About twice as many equally-spaced latitudes are needed.)
-
30 C> The weights for the equally-spaced latitudes are based on
-
31 C> Ellsaesser (JAM,1966). (No weight is given the pole point.)
-
32 C> Note that when analyzing grid to spectral in latitude pairs,
-
33 C> if an equator point exists, its weight should be halved.
-
34 C> This version invokes the ibm essl matrix solver.
-
35 C>
-
36 C> @param[in] IDRT grid identifier
-
37 C> - 4 for Gaussian grid
-
38 C> - 0 for equally-spaced grid including poles
-
39 C> - 256 for equally-spaced grid excluding poles
-
40 C> @param[in] JMAX number of latitudes
-
41 C> @param[out] SLAT sines of latitude
-
42 C> @param[out] WLAT Gaussian weights
-
43 C>
-
44 C> @author Iredell @date 96-02-20
-
45  SUBROUTINE splat(IDRT,JMAX,SLAT,WLAT)
-
46  REAL SLAT(JMAX),WLAT(JMAX)
-
47  INTEGER,PARAMETER:: KD=selected_real_kind(15,45)
-
48  REAL(KIND=kd):: pk(jmax/2),pkm1(jmax/2),pkm2(jmax/2)
-
49  REAL(KIND=kd):: slatd(jmax/2),sp,spmax,eps=10.*epsilon(sp)
-
50  parameter(jz=50)
-
51  REAL BZ(JZ)
-
52  DATA bz / 2.4048255577, 5.5200781103,
-
53  $ 8.6537279129, 11.7915344391, 14.9309177086, 18.0710639679,
-
54  $ 21.2116366299, 24.3524715308, 27.4934791320, 30.6346064684,
-
55  $ 33.7758202136, 36.9170983537, 40.0584257646, 43.1997917132,
-
56  $ 46.3411883717, 49.4826098974, 52.6240518411, 55.7655107550,
-
57  $ 58.9069839261, 62.0484691902, 65.1899648002, 68.3314693299,
-
58  $ 71.4729816036, 74.6145006437, 77.7560256304, 80.8975558711,
-
59  $ 84.0390907769, 87.1806298436, 90.3221726372, 93.4637187819,
-
60  $ 96.6052679510, 99.7468198587, 102.888374254, 106.029930916,
-
61  $ 109.171489649, 112.313050280, 115.454612653, 118.596176630,
-
62  $ 121.737742088, 124.879308913, 128.020877005, 131.162446275,
-
63  $ 134.304016638, 137.445588020, 140.587160352, 143.728733573,
-
64  $ 146.870307625, 150.011882457, 153.153458019, 156.295034268 /
-
65  REAL:: DLT,D1=1.
-
66  REAL AWORK((JMAX+1)/2,((JMAX+1)/2)),BWORK(((JMAX+1)/2))
-
67  INTEGER:: JHE,JHO,INFO
-
68  INTEGER IPVT((JMAX+1)/2)
-
69  parameter(pi=3.14159265358979,c=(1.-(2./pi)**2)*0.25)
-
70 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
71 C GAUSSIAN LATITUDES
-
72  IF(idrt.EQ.4) THEN
-
73  jh=jmax/2
-
74  jhe=(jmax+1)/2
-
75  r=1./sqrt((jmax+0.5)**2+c)
-
76  DO j=1,min(jh,jz)
-
77  slatd(j)=cos(bz(j)*r)
-
78  ENDDO
-
79  DO j=jz+1,jh
-
80  slatd(j)=cos((bz(jz)+(j-jz)*pi)*r)
-
81  ENDDO
-
82  spmax=1.
-
83  DO WHILE(spmax.GT.eps)
-
84  spmax=0.
-
85  DO j=1,jh
-
86  pkm1(j)=1.
-
87  pk(j)=slatd(j)
-
88  ENDDO
-
89  DO n=2,jmax
-
90  DO j=1,jh
-
91  pkm2(j)=pkm1(j)
-
92  pkm1(j)=pk(j)
-
93  pk(j)=((2*n-1)*slatd(j)*pkm1(j)-(n-1)*pkm2(j))/n
-
94  ENDDO
-
95  ENDDO
-
96  DO j=1,jh
-
97  sp=pk(j)*(1.-slatd(j)**2)/(jmax*(pkm1(j)-slatd(j)*pk(j)))
-
98  slatd(j)=slatd(j)-sp
-
99  spmax=max(spmax,abs(sp))
-
100  ENDDO
-
101  ENDDO
-
102 CDIR$ IVDEP
-
103  DO j=1,jh
-
104  slat(j)=real(slatd(j))
-
105  wlat(j)=real((2.*(1.-slatd(j)**2))/(jmax*pkm1(j))**2)
-
106  slat(jmax+1-j)=-slat(j)
-
107  wlat(jmax+1-j)=wlat(j)
-
108  ENDDO
-
109  IF(jhe.GT.jh) THEN
-
110  slat(jhe)=0.
-
111  wlat(jhe)=2./jmax**2
-
112  DO n=2,jmax,2
-
113  wlat(jhe)=wlat(jhe)*n**2/(n-1)**2
-
114  ENDDO
-
115  ENDIF
-
116 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
117 C EQUALLY-SPACED LATITUDES INCLUDING POLES
-
118  ELSEIF(idrt.EQ.0) THEN
-
119  jh=jmax/2
-
120  jhe=(jmax+1)/2
-
121  jho=jhe-1
-
122  dlt=pi/(jmax-1)
-
123  slat(1)=1.
-
124  DO j=2,jh
-
125  slat(j)=cos((j-1)*dlt)
-
126  ENDDO
-
127  DO js=1,jho
-
128  DO j=1,jho
-
129  awork(js,j)=cos(2*(js-1)*j*dlt)
-
130  ENDDO
-
131  ENDDO
-
132  DO js=1,jho
-
133  bwork(js)=-d1/(4*(js-1)**2-1)
-
134  ENDDO
-
135 
-
136  ! Call LAPACK routines
-
137 #if (LSIZE==4)
-
138  CALL sgetrf(jho, jho, awork, jhe, ipvt, info)
-
139  CALL sgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
-
140 #else
-
141  CALL dgetrf(jho, jho, awork, jhe, ipvt, info)
-
142  CALL dgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
-
143 #endif
-
144 
-
145  wlat(1)=0.
-
146  DO j=1,jho
-
147  wlat(j+1)=bwork(j)
-
148  ENDDO
-
149 CDIR$ IVDEP
-
150  DO j=1,jh
-
151  print *, j, jmax, jmax+1-j
-
152  slat(jmax+1-j)=-slat(j)
-
153  wlat(jmax+1-j)=wlat(j)
-
154  ENDDO
-
155  IF(jhe.GT.jh) THEN
-
156  slat(jhe)=0.
-
157  wlat(jhe)=2.*wlat(jhe)
-
158  ENDIF
-
159 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
160 C EQUALLY-SPACED LATITUDES EXCLUDING POLES
-
161  ELSEIF(idrt.EQ.256) THEN
-
162  jh=jmax/2
-
163  jhe=(jmax+1)/2
-
164  jho=jhe
-
165  dlt=pi/jmax
-
166  slat(1)=1.
-
167  DO j=1,jh
-
168  slat(j)=cos((j-0.5)*dlt)
-
169  ENDDO
-
170  DO js=1,jho
-
171  DO j=1,jho
-
172  awork(js,j)=cos(2*(js-1)*(j-0.5)*dlt)
-
173  ENDDO
-
174  ENDDO
-
175  DO js=1,jho
-
176  bwork(js)=-d1/(4*(js-1)**2-1)
-
177  ENDDO
-
178 
-
179  ! Call LAPACK routines
-
180 #if (LSIZE==4)
-
181  CALL sgetrf(jho, jho, awork, jhe, ipvt, info)
-
182  CALL sgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
-
183 #else
-
184  CALL dgetrf(jho, jho, awork, jhe, ipvt, info)
-
185  CALL dgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
-
186 #endif
-
187 
-
188  wlat(1)=0.
-
189  DO j=1,jho
-
190  wlat(j)=bwork(j)
-
191  ENDDO
-
192 CDIR$ IVDEP
-
193  DO j=1,jh
-
194  slat(jmax+1-j)=-slat(j)
-
195  wlat(jmax+1-j)=wlat(j)
-
196  ENDDO
-
197  IF(jhe.GT.jh) THEN
-
198  slat(jhe)=0.
-
199  wlat(jhe)=2.*wlat(jhe)
-
200  ENDIF
-
201  ENDIF
-
202 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
203  RETURN
-
204  END
-
subroutine splat(IDRT, JMAX, SLAT, WLAT)
Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of ...
Definition: splat.F:46
+Go to the documentation of this file.
1C> @file
+
2C> @brief Computes cosines of colatitude and Gaussian weights
+
3C> for sets of latitudes.
+
4C>
+
5C> ### Program History Log
+
6C> Date | Programmer | Comments
+
7C> -----|------------|---------
+
8C> 96-02-20 | Iredell | Initial.
+
9C> 97-10-20 | Iredell | Adjust precision.
+
10C> 98-06-11 | Iredell | Generalize precision using FORTRAN 90 intrinsic.
+
11C> 1998-12-03 | Iredell | Generalize precision further.
+
12C> 1998-12-03 | Iredell | Uses AIX ESSL BLAS calls.
+
13C> 2009-12-27 | D. Stark | Updated to switch between ESSL calls on an AIX platform, and Numerical Recipies calls elsewise.
+
14C> 2010-12-30 | Slovacek | Update alignment so preprocessor does not cause compilation failure.
+
15C> 2012-09-01 | E. Mirvis & M.Iredell | Merging & debugging linux errors of _d and _8 using generic LU factorization.
+
16C> 2012-11-05 | E. Mirvis | Generic FFTPACK and LU lapack were removed.
+
17C>
+
18C> @author Iredell @date 96-02-20
+
19
+
20C> Computes cosines of colatitude and Gaussian weights
+
21C> for one of the following specific global sets of latitudes.
+
22C> - Gaussian latitudes (IDRT=4)
+
23C> - Equally-spaced latitudes including poles (IDRT=0)
+
24C> - Equally-spaced latitudes excluding poles (IDRT=256)
+
25C>
+
26C> The Gaussian latitudes are located at the zeroes of the
+
27C> Legendre polynomial of the given order. These latitudes
+
28C> are efficient for reversible transforms from spectral space.
+
29C> (About twice as many equally-spaced latitudes are needed.)
+
30C> The weights for the equally-spaced latitudes are based on
+
31C> Ellsaesser (JAM,1966). (No weight is given the pole point.)
+
32C> Note that when analyzing grid to spectral in latitude pairs,
+
33C> if an equator point exists, its weight should be halved.
+
34C> This version invokes the ibm essl matrix solver.
+
35C>
+
36C> @param[in] IDRT grid identifier
+
37C> - 4 for Gaussian grid
+
38C> - 0 for equally-spaced grid including poles
+
39C> - 256 for equally-spaced grid excluding poles
+
40C> @param[in] JMAX number of latitudes
+
41C> @param[out] SLAT sines of latitude
+
42C> @param[out] WLAT Gaussian weights
+
43C>
+
44C> @author Iredell @date 96-02-20
+
+
45 SUBROUTINE splat(IDRT,JMAX,SLAT,WLAT)
+
46 REAL SLAT(JMAX),WLAT(JMAX)
+
47 INTEGER,PARAMETER:: KD=selected_real_kind(15,45)
+
48 REAL(KIND=kd):: pk(jmax/2),pkm1(jmax/2),pkm2(jmax/2)
+
49 REAL(KIND=kd):: slatd(jmax/2),sp,spmax,eps=10.*epsilon(sp)
+
50 parameter(jz=50)
+
51 REAL BZ(JZ)
+
52 DATA bz / 2.4048255577, 5.5200781103,
+
53 $ 8.6537279129, 11.7915344391, 14.9309177086, 18.0710639679,
+
54 $ 21.2116366299, 24.3524715308, 27.4934791320, 30.6346064684,
+
55 $ 33.7758202136, 36.9170983537, 40.0584257646, 43.1997917132,
+
56 $ 46.3411883717, 49.4826098974, 52.6240518411, 55.7655107550,
+
57 $ 58.9069839261, 62.0484691902, 65.1899648002, 68.3314693299,
+
58 $ 71.4729816036, 74.6145006437, 77.7560256304, 80.8975558711,
+
59 $ 84.0390907769, 87.1806298436, 90.3221726372, 93.4637187819,
+
60 $ 96.6052679510, 99.7468198587, 102.888374254, 106.029930916,
+
61 $ 109.171489649, 112.313050280, 115.454612653, 118.596176630,
+
62 $ 121.737742088, 124.879308913, 128.020877005, 131.162446275,
+
63 $ 134.304016638, 137.445588020, 140.587160352, 143.728733573,
+
64 $ 146.870307625, 150.011882457, 153.153458019, 156.295034268 /
+
65 REAL:: DLT,D1=1.
+
66 REAL AWORK((JMAX+1)/2,((JMAX+1)/2)),BWORK(((JMAX+1)/2))
+
67 INTEGER:: JHE,JHO,INFO
+
68 INTEGER IPVT((JMAX+1)/2)
+
69 parameter(pi=3.14159265358979,c=(1.-(2./pi)**2)*0.25)
+
70C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
71C GAUSSIAN LATITUDES
+
72 IF(idrt.EQ.4) THEN
+
73 jh=jmax/2
+
74 jhe=(jmax+1)/2
+
75 r=1./sqrt((jmax+0.5)**2+c)
+
76 DO j=1,min(jh,jz)
+
77 slatd(j)=cos(bz(j)*r)
+
78 ENDDO
+
79 DO j=jz+1,jh
+
80 slatd(j)=cos((bz(jz)+(j-jz)*pi)*r)
+
81 ENDDO
+
82 spmax=1.
+
83 DO WHILE(spmax.GT.eps)
+
84 spmax=0.
+
85 DO j=1,jh
+
86 pkm1(j)=1.
+
87 pk(j)=slatd(j)
+
88 ENDDO
+
89 DO n=2,jmax
+
90 DO j=1,jh
+
91 pkm2(j)=pkm1(j)
+
92 pkm1(j)=pk(j)
+
93 pk(j)=((2*n-1)*slatd(j)*pkm1(j)-(n-1)*pkm2(j))/n
+
94 ENDDO
+
95 ENDDO
+
96 DO j=1,jh
+
97 sp=pk(j)*(1.-slatd(j)**2)/(jmax*(pkm1(j)-slatd(j)*pk(j)))
+
98 slatd(j)=slatd(j)-sp
+
99 spmax=max(spmax,abs(sp))
+
100 ENDDO
+
101 ENDDO
+
102CDIR$ IVDEP
+
103 DO j=1,jh
+
104 slat(j)=real(slatd(j))
+
105 wlat(j)=real((2.*(1.-slatd(j)**2))/(jmax*pkm1(j))**2)
+
106 slat(jmax+1-j)=-slat(j)
+
107 wlat(jmax+1-j)=wlat(j)
+
108 ENDDO
+
109 IF(jhe.GT.jh) THEN
+
110 slat(jhe)=0.
+
111 wlat(jhe)=2./jmax**2
+
112 DO n=2,jmax,2
+
113 wlat(jhe)=wlat(jhe)*n**2/(n-1)**2
+
114 ENDDO
+
115 ENDIF
+
116C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
117C EQUALLY-SPACED LATITUDES INCLUDING POLES
+
118 ELSEIF(idrt.EQ.0) THEN
+
119 jh=jmax/2
+
120 jhe=(jmax+1)/2
+
121 jho=jhe-1
+
122 dlt=pi/(jmax-1)
+
123 slat(1)=1.
+
124 DO j=2,jh
+
125 slat(j)=cos((j-1)*dlt)
+
126 ENDDO
+
127 DO js=1,jho
+
128 DO j=1,jho
+
129 awork(js,j)=cos(2*(js-1)*j*dlt)
+
130 ENDDO
+
131 ENDDO
+
132 DO js=1,jho
+
133 bwork(js)=-d1/(4*(js-1)**2-1)
+
134 ENDDO
+
135
+
136 ! Call LAPACK routines
+
137#if (LSIZE==4)
+
138 CALL sgetrf(jho, jho, awork, jhe, ipvt, info)
+
139 CALL sgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
+
140#else
+
141 CALL dgetrf(jho, jho, awork, jhe, ipvt, info)
+
142 CALL dgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
+
143#endif
+
144
+
145 wlat(1)=0.
+
146 DO j=1,jho
+
147 wlat(j+1)=bwork(j)
+
148 ENDDO
+
149CDIR$ IVDEP
+
150 DO j=1,jh
+
151 print *, j, jmax, jmax+1-j
+
152 slat(jmax+1-j)=-slat(j)
+
153 wlat(jmax+1-j)=wlat(j)
+
154 ENDDO
+
155 IF(jhe.GT.jh) THEN
+
156 slat(jhe)=0.
+
157 wlat(jhe)=2.*wlat(jhe)
+
158 ENDIF
+
159C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
160C EQUALLY-SPACED LATITUDES EXCLUDING POLES
+
161 ELSEIF(idrt.EQ.256) THEN
+
162 jh=jmax/2
+
163 jhe=(jmax+1)/2
+
164 jho=jhe
+
165 dlt=pi/jmax
+
166 slat(1)=1.
+
167 DO j=1,jh
+
168 slat(j)=cos((j-0.5)*dlt)
+
169 ENDDO
+
170 DO js=1,jho
+
171 DO j=1,jho
+
172 awork(js,j)=cos(2*(js-1)*(j-0.5)*dlt)
+
173 ENDDO
+
174 ENDDO
+
175 DO js=1,jho
+
176 bwork(js)=-d1/(4*(js-1)**2-1)
+
177 ENDDO
+
178
+
179 ! Call LAPACK routines
+
180#if (LSIZE==4)
+
181 CALL sgetrf(jho, jho, awork, jhe, ipvt, info)
+
182 CALL sgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
+
183#else
+
184 CALL dgetrf(jho, jho, awork, jhe, ipvt, info)
+
185 CALL dgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
+
186#endif
+
187
+
188 wlat(1)=0.
+
189 DO j=1,jho
+
190 wlat(j)=bwork(j)
+
191 ENDDO
+
192CDIR$ IVDEP
+
193 DO j=1,jh
+
194 slat(jmax+1-j)=-slat(j)
+
195 wlat(jmax+1-j)=wlat(j)
+
196 ENDDO
+
197 IF(jhe.GT.jh) THEN
+
198 slat(jhe)=0.
+
199 wlat(jhe)=2.*wlat(jhe)
+
200 ENDIF
+
201 ENDIF
+
202C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
203 RETURN
+
+
204 END
+
subroutine splat(idrt, jmax, slat, wlat)
Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of ...
Definition splat.F:46
diff --git a/splegend_8f.html b/splegend_8f.html index 60627878..1bf0aeaa 100644 --- a/splegend_8f.html +++ b/splegend_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: splegend.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
splegend.f File Reference
+
splegend.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine splegend (I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
 Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude. More...
 
subroutine splegend (i, m, slat, clat, eps, epstop, pln, plntop)
 Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
 

Detailed Description

Compute Legendre polynomials.

@@ -107,8 +113,8 @@

Definition in file splegend.f.

Function/Subroutine Documentation

- -

◆ splegend()

+ +

◆ splegend()

diff --git a/splegend_8f.js b/splegend_8f.js index 8ab7c002..b5671de9 100644 --- a/splegend_8f.js +++ b/splegend_8f.js @@ -1,4 +1,4 @@ var splegend_8f = [ - [ "splegend", "splegend_8f.html#a9c68adc80e97c43ac983b955dd6cabac", null ] + [ "splegend", "splegend_8f.html#a8ef58f630a5d57be9df425eb9476920a", null ] ]; \ No newline at end of file diff --git a/splegend_8f_source.html b/splegend_8f_source.html index 0259094a..18e43542 100644 --- a/splegend_8f_source.html +++ b/splegend_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: splegend.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,162 +81,170 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
splegend.f
+
splegend.f
-Go to the documentation of this file.
1 C> @file
-
2 C>
-
3 C> Compute Legendre polynomials
-
4 C> @author IREDELL @date 92-10-31
-
5 
-
6 C> Evaluates the orthonormal associated Legendre polynomials in the
-
7 C> spectral domain at a given latitude. Subprogram splegend should
-
8 C> be called already. If l is the zonal wavenumber, N is the total
-
9 C> wavenumber, and EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) then the
-
10 C> following bootstrapping formulas are used:
-
11 C>
-
12 C> <pre>
-
13 C> PLN(0,0)=SQRT(0.5)
-
14 C> PLN(L,L)=PLN(L-1,L-1)*CLAT*SQRT(FLOAT(2*L+1)/FLOAT(2*L))
-
15 C> PLN(L,N)=(SLAT*PLN(L,N-1)-EPS(L,N-1)*PLN(L,N-2))/EPS(L,N)
-
16 C> </pre>
-
17 C>
-
18 C> Synthesis at the pole needs only two zonal wavenumbers. Scalar
-
19 C> fields are synthesized with zonal wavenumber 0 while vector
-
20 C> fields are synthesized with zonal wavenumber 1. (Thus polar
-
21 C> vector fields are implicitly divided by clat.) The following
-
22 C> bootstrapping formulas are used at the pole:
-
23 C>
-
24 C> <pre>
-
25 C> PLN(0,0)=SQRT(0.5)
-
26 C> PLN(1,1)=SQRT(0.75)
-
27 C> PLN(L,N)=(PLN(L,N-1)-EPS(L,N-1)*PLN(L,N-2))/EPS(L,N)
-
28 C> </pre>
-
29 C>
-
30 C> PROGRAM HISTORY LOG:
-
31 C> - 91-10-31 MARK IREDELL
-
32 C> - 98-06-10 MARK IREDELL GENERALIZE PRECISION
-
33 C>
-
34 C> @param I - INTEGER SPECTRAL DOMAIN SHAPE
-
35 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
-
36 C> @param M - INTEGER SPECTRAL TRUNCATION
-
37 C> @param SLAT - REAL SINE OF LATITUDE
-
38 C> @param CLAT - REAL COSINE OF LATITUDE
-
39 C> @param EPS - REAL ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
-
40 C> @param EPSTOP - REAL (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
-
41 C> @param[out] PLN - REAL ((M+1)*((I+1)*M+2)/2) LEGENDRE POLYNOMIAL
-
42 C> @param[out] PLNTOP - REAL (M+1) LEGENDRE POLYNOMIAL OVER TOP
-
43 C>
-
44  SUBROUTINE splegend(I,M,SLAT,CLAT,EPS,EPSTOP,PLN,PLNTOP)
-
45 
-
46 CFPP$ NOCONCUR R
-
47  REAL EPS((M+1)*((I+1)*M+2)/2),EPSTOP(M+1)
-
48  REAL PLN((M+1)*((I+1)*M+2)/2),PLNTOP(M+1)
-
49  REAL(KIND=selected_real_kind(15,45)):: dln((m+1)*((i+1)*m+2)/2)
-
50  REAL :: TINYREAL=tiny(1.0), rdln1, rdln2
-
51 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
52 C ITERATIVELY COMPUTE PLN WITHIN SPECTRAL DOMAIN AT POLE
-
53  m1=m+1
-
54  m2=2*m+i+1
-
55  mx=(m+1)*((i+1)*m+2)/2
-
56  IF(abs(clat).LT.tinyreal) THEN
-
57  dln(1)=sqrt(0.5)
-
58  IF(m.GT.0) THEN
-
59  dln(m1+1)=sqrt(0.75)
-
60  dln(2)=slat*dln(1)/eps(2)
-
61  ENDIF
-
62  IF(m.GT.1) THEN
-
63  dln(m1+2)=slat*dln(m1+1)/eps(m1+2)
-
64  dln(3)=(slat*dln(2)-eps(2)*dln(1))/eps(3)
-
65  DO n=3,m
-
66  k=1+n
-
67  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
-
68  k=m1+n
-
69  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
-
70  ENDDO
-
71  IF(i.EQ.1) THEN
-
72  k=m2
-
73  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
-
74  ENDIF
-
75  DO k=m2+1,mx
-
76  dln(k)=0.
-
77  ENDDO
-
78  ENDIF
-
79 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
80 C COMPUTE POLYNOMIALS OVER TOP OF SPECTRAL DOMAIN
-
81  k=m1+1
-
82  rdln1=real(dln(k-1))
-
83  rdln2=real(dln(k-2))
-
84  plntop(1)=(slat*rdln1-eps(k-1)*rdln2)/epstop(1)
-
85  IF(m.GT.0) THEN
-
86  k=m2+1
-
87  rdln1=real(dln(k-1))
-
88  rdln2=real(dln(k-2))
-
89  plntop(2)=(slat*rdln1-eps(k-1)*rdln2)/epstop(2)
-
90  DO l=2,m
-
91  plntop(l+1)=0.
-
92  ENDDO
-
93  ENDIF
-
94 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
95 C ITERATIVELY COMPUTE PLN(L,L) (BOTTOM HYPOTENUSE OF DOMAIN)
-
96  ELSE
-
97  nml=0
-
98  k=1
-
99  dln(k)=sqrt(0.5)
-
100  DO l=1,m+(i-1)*nml
-
101  kp=k
-
102  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
-
103  dln(k)=dln(kp)*clat*sqrt(float(2*l+1)/float(2*l))
-
104  ENDDO
-
105 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
106 C COMPUTE PLN(L,L+1) (DIAGONAL NEXT TO BOTTOM HYPOTENUSE OF DOMAIN)
-
107  nml=1
-
108 CDIR$ IVDEP
-
109  DO l=0,m+(i-1)*nml
-
110  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
-
111  dln(k)=slat*dln(k-1)/eps(k)
-
112  ENDDO
-
113 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
114 C COMPUTE REMAINING PLN IN SPECTRAL DOMAIN
-
115  DO nml=2,m
-
116 CDIR$ IVDEP
-
117  DO l=0,m+(i-1)*nml
-
118  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
-
119  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
-
120  ENDDO
-
121  ENDDO
-
122 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
123 C COMPUTE POLYNOMIALS OVER TOP OF SPECTRAL DOMAIN
-
124  DO l=0,m
-
125  nml=m+1+(i-1)*l
-
126  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
-
127  rdln1=real(dln(k-1))
-
128  rdln2=real(dln(k-2))
-
129  plntop(l+1)=(slat*rdln1-eps(k-1)*rdln2)/epstop(l+1)
-
130  ENDDO
-
131  ENDIF
-
132 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
133 C RETURN VALUES
-
134  DO k=1,mx
-
135  pln(k)=real(dln(k))
-
136  ENDDO
-
137  RETURN
-
138  END
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
+Go to the documentation of this file.
1C> @file
+
2C>
+
3C> Compute Legendre polynomials
+
4C> @author IREDELL @date 92-10-31
+
5
+
6C> Evaluates the orthonormal associated Legendre polynomials in the
+
7C> spectral domain at a given latitude. Subprogram splegend should
+
8C> be called already. If l is the zonal wavenumber, N is the total
+
9C> wavenumber, and EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) then the
+
10C> following bootstrapping formulas are used:
+
11C>
+
12C> <pre>
+
13C> PLN(0,0)=SQRT(0.5)
+
14C> PLN(L,L)=PLN(L-1,L-1)*CLAT*SQRT(FLOAT(2*L+1)/FLOAT(2*L))
+
15C> PLN(L,N)=(SLAT*PLN(L,N-1)-EPS(L,N-1)*PLN(L,N-2))/EPS(L,N)
+
16C> </pre>
+
17C>
+
18C> Synthesis at the pole needs only two zonal wavenumbers. Scalar
+
19C> fields are synthesized with zonal wavenumber 0 while vector
+
20C> fields are synthesized with zonal wavenumber 1. (Thus polar
+
21C> vector fields are implicitly divided by clat.) The following
+
22C> bootstrapping formulas are used at the pole:
+
23C>
+
24C> <pre>
+
25C> PLN(0,0)=SQRT(0.5)
+
26C> PLN(1,1)=SQRT(0.75)
+
27C> PLN(L,N)=(PLN(L,N-1)-EPS(L,N-1)*PLN(L,N-2))/EPS(L,N)
+
28C> </pre>
+
29C>
+
30C> PROGRAM HISTORY LOG:
+
31C> - 91-10-31 MARK IREDELL
+
32C> - 98-06-10 MARK IREDELL GENERALIZE PRECISION
+
33C>
+
34C> @param I - INTEGER SPECTRAL DOMAIN SHAPE
+
35C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
+
36C> @param M - INTEGER SPECTRAL TRUNCATION
+
37C> @param SLAT - REAL SINE OF LATITUDE
+
38C> @param CLAT - REAL COSINE OF LATITUDE
+
39C> @param EPS - REAL ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
+
40C> @param EPSTOP - REAL (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
+
41C> @param[out] PLN - REAL ((M+1)*((I+1)*M+2)/2) LEGENDRE POLYNOMIAL
+
42C> @param[out] PLNTOP - REAL (M+1) LEGENDRE POLYNOMIAL OVER TOP
+
43C>
+
+
44 SUBROUTINE splegend(I,M,SLAT,CLAT,EPS,EPSTOP,PLN,PLNTOP)
+
45
+
46CFPP$ NOCONCUR R
+
47 REAL EPS((M+1)*((I+1)*M+2)/2),EPSTOP(M+1)
+
48 REAL PLN((M+1)*((I+1)*M+2)/2),PLNTOP(M+1)
+
49 REAL(KIND=selected_real_kind(15,45)):: dln((m+1)*((i+1)*m+2)/2)
+
50 REAL :: TINYREAL=tiny(1.0), rdln1, rdln2
+
51C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
52C ITERATIVELY COMPUTE PLN WITHIN SPECTRAL DOMAIN AT POLE
+
53 m1=m+1
+
54 m2=2*m+i+1
+
55 mx=(m+1)*((i+1)*m+2)/2
+
56 IF(abs(clat).LT.tinyreal) THEN
+
57 dln(1)=sqrt(0.5)
+
58 IF(m.GT.0) THEN
+
59 dln(m1+1)=sqrt(0.75)
+
60 dln(2)=slat*dln(1)/eps(2)
+
61 ENDIF
+
62 IF(m.GT.1) THEN
+
63 dln(m1+2)=slat*dln(m1+1)/eps(m1+2)
+
64 dln(3)=(slat*dln(2)-eps(2)*dln(1))/eps(3)
+
65 DO n=3,m
+
66 k=1+n
+
67 dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
+
68 k=m1+n
+
69 dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
+
70 ENDDO
+
71 IF(i.EQ.1) THEN
+
72 k=m2
+
73 dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
+
74 ENDIF
+
75 DO k=m2+1,mx
+
76 dln(k)=0.
+
77 ENDDO
+
78 ENDIF
+
79C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
80C COMPUTE POLYNOMIALS OVER TOP OF SPECTRAL DOMAIN
+
81 k=m1+1
+
82 rdln1=real(dln(k-1))
+
83 rdln2=real(dln(k-2))
+
84 plntop(1)=(slat*rdln1-eps(k-1)*rdln2)/epstop(1)
+
85 IF(m.GT.0) THEN
+
86 k=m2+1
+
87 rdln1=real(dln(k-1))
+
88 rdln2=real(dln(k-2))
+
89 plntop(2)=(slat*rdln1-eps(k-1)*rdln2)/epstop(2)
+
90 DO l=2,m
+
91 plntop(l+1)=0.
+
92 ENDDO
+
93 ENDIF
+
94C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
95C ITERATIVELY COMPUTE PLN(L,L) (BOTTOM HYPOTENUSE OF DOMAIN)
+
96 ELSE
+
97 nml=0
+
98 k=1
+
99 dln(k)=sqrt(0.5)
+
100 DO l=1,m+(i-1)*nml
+
101 kp=k
+
102 k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
+
103 dln(k)=dln(kp)*clat*sqrt(float(2*l+1)/float(2*l))
+
104 ENDDO
+
105C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
106C COMPUTE PLN(L,L+1) (DIAGONAL NEXT TO BOTTOM HYPOTENUSE OF DOMAIN)
+
107 nml=1
+
108CDIR$ IVDEP
+
109 DO l=0,m+(i-1)*nml
+
110 k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
+
111 dln(k)=slat*dln(k-1)/eps(k)
+
112 ENDDO
+
113C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
114C COMPUTE REMAINING PLN IN SPECTRAL DOMAIN
+
115 DO nml=2,m
+
116CDIR$ IVDEP
+
117 DO l=0,m+(i-1)*nml
+
118 k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
+
119 dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
+
120 ENDDO
+
121 ENDDO
+
122C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
123C COMPUTE POLYNOMIALS OVER TOP OF SPECTRAL DOMAIN
+
124 DO l=0,m
+
125 nml=m+1+(i-1)*l
+
126 k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
+
127 rdln1=real(dln(k-1))
+
128 rdln2=real(dln(k-2))
+
129 plntop(l+1)=(slat*rdln1-eps(k-1)*rdln2)/epstop(l+1)
+
130 ENDDO
+
131 ENDIF
+
132C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
133C RETURN VALUES
+
134 DO k=1,mx
+
135 pln(k)=real(dln(k))
+
136 ENDDO
+
137 RETURN
+
+
138 END
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
diff --git a/splitbard.png b/splitbard.png new file mode 100644 index 00000000..8367416d Binary files /dev/null and b/splitbard.png differ diff --git a/sppad_8f.html b/sppad_8f.html index 89bd770b..cdd4ce36 100644 --- a/sppad_8f.html +++ b/sppad_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sppad.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sppad.f File Reference
+
sppad.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sppad (I1, M1, Q1, I2, M2, Q2)
 Pad or truncate a spectral field. More...
 
subroutine sppad (i1, m1, q1, i2, m2, q2)
 Pad or truncate a spectral field.
 

Detailed Description

Pad or truncate a spectral field.

@@ -107,8 +113,8 @@

Definition in file sppad.f.

Function/Subroutine Documentation

- -

◆ sppad()

+ +

◆ sppad()

diff --git a/sppad_8f.js b/sppad_8f.js index a47faa1f..24ab5abe 100644 --- a/sppad_8f.js +++ b/sppad_8f.js @@ -1,4 +1,4 @@ var sppad_8f = [ - [ "sppad", "sppad_8f.html#a4338b3ccd7844251bbdabf3da1d6476e", null ] + [ "sppad", "sppad_8f.html#a018fc6d223be3ea5ee2b498ff2eb3276", null ] ]; \ No newline at end of file diff --git a/sppad_8f_source.html b/sppad_8f_source.html index fae04c86..ad979902 100644 --- a/sppad_8f_source.html +++ b/sppad_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sppad.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,60 +81,68 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sppad.f
+
sppad.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Pad or truncate a spectral field.
-
3 C> @author Iredell @date 92-10-31
-
4 
-
5 C> Pad or truncate a spectral field.
-
6 C>
-
7 C> @param I1 input spectral domain shape
-
8 C> (0 for triangular, 1 for rhomboidal)
-
9 C> @param M1 input spectral truncation
-
10 C> @param Q1 ((M+1)*((I+1)*M+2)) input field
-
11 C> @param I2 output spectral domain shape
-
12 C> (0 for triangular, 1 for rhomboidal)
-
13 C> @param M2 output spectral truncation
-
14 C> @param Q2 ((M+1)*((I+1)*M+2)) output field
-
15 C>
-
16 C> @author Iredell @date 92-10-31
-
17  SUBROUTINE sppad(I1,M1,Q1,I2,M2,Q2)
-
18 
-
19  REAL Q1((M1+1)*((I1+1)*M1+2))
-
20  REAL Q2((M2+1)*((I2+1)*M2+2))
-
21 
-
22  DO l=0,m2
-
23  DO n=l,i2*l+m2
-
24  ks2=l*(2*m2+(i2-1)*(l-1))+2*n
-
25  IF(l.LE.m1.AND.n.LE.i1*l+m1) THEN
-
26  ks1=l*(2*m1+(i1-1)*(l-1))+2*n
-
27  q2(ks2+1)=q1(ks1+1)
-
28  q2(ks2+2)=q1(ks1+2)
-
29  ELSE
-
30  q2(ks2+1)=0
-
31  q2(ks2+2)=0
-
32  ENDIF
-
33  ENDDO
-
34  ENDDO
-
35  RETURN
-
36  END
-
subroutine sppad(I1, M1, Q1, I2, M2, Q2)
Pad or truncate a spectral field.
Definition: sppad.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Pad or truncate a spectral field.
+
3C> @author Iredell @date 92-10-31
+
4
+
5C> Pad or truncate a spectral field.
+
6C>
+
7C> @param I1 input spectral domain shape
+
8C> (0 for triangular, 1 for rhomboidal)
+
9C> @param M1 input spectral truncation
+
10C> @param Q1 ((M+1)*((I+1)*M+2)) input field
+
11C> @param I2 output spectral domain shape
+
12C> (0 for triangular, 1 for rhomboidal)
+
13C> @param M2 output spectral truncation
+
14C> @param Q2 ((M+1)*((I+1)*M+2)) output field
+
15C>
+
16C> @author Iredell @date 92-10-31
+
+
17 SUBROUTINE sppad(I1,M1,Q1,I2,M2,Q2)
+
18
+
19 REAL Q1((M1+1)*((I1+1)*M1+2))
+
20 REAL Q2((M2+1)*((I2+1)*M2+2))
+
21
+
22 DO l=0,m2
+
23 DO n=l,i2*l+m2
+
24 ks2=l*(2*m2+(i2-1)*(l-1))+2*n
+
25 IF(l.LE.m1.AND.n.LE.i1*l+m1) THEN
+
26 ks1=l*(2*m1+(i1-1)*(l-1))+2*n
+
27 q2(ks2+1)=q1(ks1+1)
+
28 q2(ks2+2)=q1(ks1+2)
+
29 ELSE
+
30 q2(ks2+1)=0
+
31 q2(ks2+2)=0
+
32 ENDIF
+
33 ENDDO
+
34 ENDDO
+
35 RETURN
+
+
36 END
+
subroutine sppad(i1, m1, q1, i2, m2, q2)
Pad or truncate a spectral field.
Definition sppad.f:18
diff --git a/spsynth_8f.html b/spsynth_8f.html index f9ff4462..cc565bb9 100644 --- a/spsynth_8f.html +++ b/spsynth_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spsynth.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spsynth.f File Reference
+
spsynth.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine spsynth (I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
 Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Southern hemispheres). More...
 
subroutine spsynth (i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
 Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Southern hemispheres).
 

Detailed Description

Synthesize Fourier coefficients from spectral coefficients.

@@ -117,8 +123,8 @@

Definition in file spsynth.f.

Function/Subroutine Documentation

- -

◆ spsynth()

+ +

◆ spsynth()

diff --git a/spsynth_8f.js b/spsynth_8f.js index 6cb85dd1..ea1af476 100644 --- a/spsynth_8f.js +++ b/spsynth_8f.js @@ -1,4 +1,4 @@ var spsynth_8f = [ - [ "spsynth", "spsynth_8f.html#aa6a8113a459918728c876673520126bf", null ] + [ "spsynth", "spsynth_8f.html#a5f26553d2ecb2c6aef8693b2b7da0959", null ] ]; \ No newline at end of file diff --git a/spsynth_8f_source.html b/spsynth_8f_source.html index 7235ebde..972a3396 100644 --- a/spsynth_8f_source.html +++ b/spsynth_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spsynth.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,183 +81,191 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
spsynth.f
+
spsynth.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Synthesize Fourier coefficients from spectral coefficients.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 91-10-31 | Mark Iredell | Initial.
-
8 C> 1998-12-18 | Mark Iredell | Include scalar and gradient option.
-
9 C>
-
10 C> @author Iredell @date 92-10-31
-
11 
-
12 C> Synthesizes Fourier coefficients from spectral coefficients
-
13 C> for a latitude pair (Northern and Southern hemispheres).
-
14 C>
-
15 C> Vector components are divided by cosine of latitude.
-
16 C>
-
17 C> @param I spectral domain shape
-
18 C> (0 for triangular, 1 for rhomboidal)
-
19 C> @param M spectral truncation
-
20 C> @param IM even number of Fourier coefficients
-
21 C> @param IX dimension of Fourier coefficients (IX>=IM+2)
-
22 C> @param NC dimension of spectral coefficients
-
23 C> (NC>=(M+1)*((I+1)*M+2))
-
24 C> @param NCTOP dimension of spectral coefficients over top
-
25 C> (NCTOP>=2*(M+1))
-
26 C> @param KM number of fields
-
27 C> @param CLAT cosine of latitude
-
28 C> @param PLN ((M+1)*((I+1)*M+2)/2) Legendre polynomial
-
29 C> @param PLNTOP Legendre polynomial over top
-
30 C> @param SPC spectral coefficients
-
31 C> @param SPCTOP spectral coefficients over top
-
32 C> @param MP identifiers (0 for scalar, 1 for vector,
-
33 C> or 10 for scalar and gradient)
-
34 C> @param F Fourier coefficients for latitude pair
-
35 C>
-
36 C> @author Iredell @date 92-10-31
-
37  SUBROUTINE spsynth(I,M,IM,IX,NC,NCTOP,KM,CLAT,PLN,PLNTOP,MP,
-
38  & SPC,SPCTOP,F)
-
39 
-
40  REAL PLN((M+1)*((I+1)*M+2)/2),PLNTOP(M+1)
-
41  INTEGER MP(KM)
-
42  REAL SPC(NC,KM),SPCTOP(NCTOP,KM)
-
43  REAL F(IX,2,KM)
-
44  REAL :: TINYREAL=tiny(1.0)
-
45 
-
46 C ZERO OUT FOURIER COEFFICIENTS.
-
47  DO k=1,km
-
48  DO l=0,im/2
-
49  f(2*l+1,1,k)=0.
-
50  f(2*l+2,1,k)=0.
-
51  f(2*l+1,2,k)=0.
-
52  f(2*l+2,2,k)=0.
-
53  ENDDO
-
54  ENDDO
-
55 
-
56 C SYNTHESIS OVER POLE.
-
57 C INITIALIZE FOURIER COEFFICIENTS WITH TERMS OVER TOP OF THE SPECTRUM.
-
58 C INITIALIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
-
59  IF(abs(clat).LT.tinyreal) THEN
-
60  ltope=mod(m+1+i,2)
-
61 !C$OMP PARALLEL DO PRIVATE(LB,LE,L,KS,KP,N,F1R,F1I)
-
62  DO k=1,km
-
63  lb=mp(k)
-
64  le=mp(k)
-
65  IF(mp(k).EQ.10) THEN
-
66  lb=0
-
67  le=1
-
68  ENDIF
-
69  l=lb
-
70  IF(l.EQ.1) THEN
-
71  IF(l.EQ.ltope) THEN
-
72  f(2*l+1,1,k)=plntop(l+1)*spctop(2*l+1,k)
-
73  f(2*l+2,1,k)=plntop(l+1)*spctop(2*l+2,k)
-
74  ELSE
-
75  f(2*l+1,2,k)=plntop(l+1)*spctop(2*l+1,k)
-
76  f(2*l+2,2,k)=plntop(l+1)*spctop(2*l+2,k)
-
77  ENDIF
-
78  ENDIF
-
79 C FOR EACH ZONAL WAVENUMBER, SYNTHESIZE TERMS OVER TOTAL WAVENUMBER.
-
80 C SYNTHESIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
-
81  DO l=lb,le
-
82  ks=l*(2*m+(i-1)*(l-1))
-
83  kp=ks/2+1
-
84  DO n=l,i*l+m,2
-
85  f(2*l+1,1,k)=f(2*l+1,1,k)+pln(kp+n)*spc(ks+2*n+1,k)
-
86  f(2*l+2,1,k)=f(2*l+2,1,k)+pln(kp+n)*spc(ks+2*n+2,k)
-
87  ENDDO
-
88  DO n=l+1,i*l+m,2
-
89  f(2*l+1,2,k)=f(2*l+1,2,k)+pln(kp+n)*spc(ks+2*n+1,k)
-
90  f(2*l+2,2,k)=f(2*l+2,2,k)+pln(kp+n)*spc(ks+2*n+2,k)
-
91  ENDDO
-
92 C SEPARATE FOURIER COEFFICIENTS FROM EACH HEMISPHERE.
-
93 C ODD POLYNOMIALS CONTRIBUTE NEGATIVELY TO THE SOUTHERN HEMISPHERE.
-
94  f1r=f(2*l+1,1,k)
-
95  f1i=f(2*l+2,1,k)
-
96  f(2*l+1,1,k)=f1r+f(2*l+1,2,k)
-
97  f(2*l+2,1,k)=f1i+f(2*l+2,2,k)
-
98  f(2*l+1,2,k)=f1r-f(2*l+1,2,k)
-
99  f(2*l+2,2,k)=f1i-f(2*l+2,2,k)
-
100  ENDDO
-
101  ENDDO
-
102 
-
103 C SYNTHESIS OVER FINITE LATITUDE.
-
104 C INITIALIZE FOURIER COEFFICIENTS WITH TERMS OVER TOP OF THE SPECTRUM.
-
105 C INITIALIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
-
106  ELSE
-
107  lx=min(m,im/2)
-
108  ltope=mod(m+1,2)
-
109  ltopo=1-ltope
-
110  le=1+i*ltope
-
111  lo=2-i*ltopo
-
112 !C$OMP PARALLEL DO PRIVATE(L,KS,KP,N,F1R,F1I)
-
113  DO k=1,km
-
114  IF(mp(k).EQ.1) THEN
-
115  DO l=ltope,lx,2
-
116  f(2*l+1,le,k)=plntop(l+1)*spctop(2*l+1,k)
-
117  f(2*l+2,le,k)=plntop(l+1)*spctop(2*l+2,k)
-
118  ENDDO
-
119  DO l=ltopo,lx,2
-
120  f(2*l+1,lo,k)=plntop(l+1)*spctop(2*l+1,k)
-
121  f(2*l+2,lo,k)=plntop(l+1)*spctop(2*l+2,k)
-
122  ENDDO
-
123  ENDIF
-
124 C FOR EACH ZONAL WAVENUMBER, SYNTHESIZE TERMS OVER TOTAL WAVENUMBER.
-
125 C SYNTHESIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
-
126  DO l=0,lx
-
127  ks=l*(2*m+(i-1)*(l-1))
-
128  kp=ks/2+1
-
129  DO n=l,i*l+m,2
-
130  f(2*l+1,1,k)=f(2*l+1,1,k)+pln(kp+n)*spc(ks+2*n+1,k)
-
131  f(2*l+2,1,k)=f(2*l+2,1,k)+pln(kp+n)*spc(ks+2*n+2,k)
-
132  ENDDO
-
133  DO n=l+1,i*l+m,2
-
134  f(2*l+1,2,k)=f(2*l+1,2,k)+pln(kp+n)*spc(ks+2*n+1,k)
-
135  f(2*l+2,2,k)=f(2*l+2,2,k)+pln(kp+n)*spc(ks+2*n+2,k)
-
136  ENDDO
-
137  ENDDO
-
138 C SEPARATE FOURIER COEFFICIENTS FROM EACH HEMISPHERE.
-
139 C ODD POLYNOMIALS CONTRIBUTE NEGATIVELY TO THE SOUTHERN HEMISPHERE.
-
140 C DIVIDE VECTOR COMPONENTS BY COSINE LATITUDE.
-
141  DO l=0,lx
-
142  f1r=f(2*l+1,1,k)
-
143  f1i=f(2*l+2,1,k)
-
144  f(2*l+1,1,k)=f1r+f(2*l+1,2,k)
-
145  f(2*l+2,1,k)=f1i+f(2*l+2,2,k)
-
146  f(2*l+1,2,k)=f1r-f(2*l+1,2,k)
-
147  f(2*l+2,2,k)=f1i-f(2*l+2,2,k)
-
148  ENDDO
-
149  IF(mp(k).EQ.1) THEN
-
150  DO l=0,lx
-
151  f(2*l+1,1,k)=f(2*l+1,1,k)/clat
-
152  f(2*l+2,1,k)=f(2*l+2,1,k)/clat
-
153  f(2*l+1,2,k)=f(2*l+1,2,k)/clat
-
154  f(2*l+2,2,k)=f(2*l+2,2,k)/clat
-
155  ENDDO
-
156  ENDIF
-
157  ENDDO
-
158  ENDIF
-
159  END
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
+Go to the documentation of this file.
1C> @file
+
2C> @brief Synthesize Fourier coefficients from spectral coefficients.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 91-10-31 | Mark Iredell | Initial.
+
8C> 1998-12-18 | Mark Iredell | Include scalar and gradient option.
+
9C>
+
10C> @author Iredell @date 92-10-31
+
11
+
12C> Synthesizes Fourier coefficients from spectral coefficients
+
13C> for a latitude pair (Northern and Southern hemispheres).
+
14C>
+
15C> Vector components are divided by cosine of latitude.
+
16C>
+
17C> @param I spectral domain shape
+
18C> (0 for triangular, 1 for rhomboidal)
+
19C> @param M spectral truncation
+
20C> @param IM even number of Fourier coefficients
+
21C> @param IX dimension of Fourier coefficients (IX>=IM+2)
+
22C> @param NC dimension of spectral coefficients
+
23C> (NC>=(M+1)*((I+1)*M+2))
+
24C> @param NCTOP dimension of spectral coefficients over top
+
25C> (NCTOP>=2*(M+1))
+
26C> @param KM number of fields
+
27C> @param CLAT cosine of latitude
+
28C> @param PLN ((M+1)*((I+1)*M+2)/2) Legendre polynomial
+
29C> @param PLNTOP Legendre polynomial over top
+
30C> @param SPC spectral coefficients
+
31C> @param SPCTOP spectral coefficients over top
+
32C> @param MP identifiers (0 for scalar, 1 for vector,
+
33C> or 10 for scalar and gradient)
+
34C> @param F Fourier coefficients for latitude pair
+
35C>
+
36C> @author Iredell @date 92-10-31
+
+
37 SUBROUTINE spsynth(I,M,IM,IX,NC,NCTOP,KM,CLAT,PLN,PLNTOP,MP,
+
38 & SPC,SPCTOP,F)
+
39
+
40 REAL PLN((M+1)*((I+1)*M+2)/2),PLNTOP(M+1)
+
41 INTEGER MP(KM)
+
42 REAL SPC(NC,KM),SPCTOP(NCTOP,KM)
+
43 REAL F(IX,2,KM)
+
44 REAL :: TINYREAL=tiny(1.0)
+
45
+
46C ZERO OUT FOURIER COEFFICIENTS.
+
47 DO k=1,km
+
48 DO l=0,im/2
+
49 f(2*l+1,1,k)=0.
+
50 f(2*l+2,1,k)=0.
+
51 f(2*l+1,2,k)=0.
+
52 f(2*l+2,2,k)=0.
+
53 ENDDO
+
54 ENDDO
+
55
+
56C SYNTHESIS OVER POLE.
+
57C INITIALIZE FOURIER COEFFICIENTS WITH TERMS OVER TOP OF THE SPECTRUM.
+
58C INITIALIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
+
59 IF(abs(clat).LT.tinyreal) THEN
+
60 ltope=mod(m+1+i,2)
+
61!C$OMP PARALLEL DO PRIVATE(LB,LE,L,KS,KP,N,F1R,F1I)
+
62 DO k=1,km
+
63 lb=mp(k)
+
64 le=mp(k)
+
65 IF(mp(k).EQ.10) THEN
+
66 lb=0
+
67 le=1
+
68 ENDIF
+
69 l=lb
+
70 IF(l.EQ.1) THEN
+
71 IF(l.EQ.ltope) THEN
+
72 f(2*l+1,1,k)=plntop(l+1)*spctop(2*l+1,k)
+
73 f(2*l+2,1,k)=plntop(l+1)*spctop(2*l+2,k)
+
74 ELSE
+
75 f(2*l+1,2,k)=plntop(l+1)*spctop(2*l+1,k)
+
76 f(2*l+2,2,k)=plntop(l+1)*spctop(2*l+2,k)
+
77 ENDIF
+
78 ENDIF
+
79C FOR EACH ZONAL WAVENUMBER, SYNTHESIZE TERMS OVER TOTAL WAVENUMBER.
+
80C SYNTHESIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
+
81 DO l=lb,le
+
82 ks=l*(2*m+(i-1)*(l-1))
+
83 kp=ks/2+1
+
84 DO n=l,i*l+m,2
+
85 f(2*l+1,1,k)=f(2*l+1,1,k)+pln(kp+n)*spc(ks+2*n+1,k)
+
86 f(2*l+2,1,k)=f(2*l+2,1,k)+pln(kp+n)*spc(ks+2*n+2,k)
+
87 ENDDO
+
88 DO n=l+1,i*l+m,2
+
89 f(2*l+1,2,k)=f(2*l+1,2,k)+pln(kp+n)*spc(ks+2*n+1,k)
+
90 f(2*l+2,2,k)=f(2*l+2,2,k)+pln(kp+n)*spc(ks+2*n+2,k)
+
91 ENDDO
+
92C SEPARATE FOURIER COEFFICIENTS FROM EACH HEMISPHERE.
+
93C ODD POLYNOMIALS CONTRIBUTE NEGATIVELY TO THE SOUTHERN HEMISPHERE.
+
94 f1r=f(2*l+1,1,k)
+
95 f1i=f(2*l+2,1,k)
+
96 f(2*l+1,1,k)=f1r+f(2*l+1,2,k)
+
97 f(2*l+2,1,k)=f1i+f(2*l+2,2,k)
+
98 f(2*l+1,2,k)=f1r-f(2*l+1,2,k)
+
99 f(2*l+2,2,k)=f1i-f(2*l+2,2,k)
+
100 ENDDO
+
101 ENDDO
+
102
+
103C SYNTHESIS OVER FINITE LATITUDE.
+
104C INITIALIZE FOURIER COEFFICIENTS WITH TERMS OVER TOP OF THE SPECTRUM.
+
105C INITIALIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
+
106 ELSE
+
107 lx=min(m,im/2)
+
108 ltope=mod(m+1,2)
+
109 ltopo=1-ltope
+
110 le=1+i*ltope
+
111 lo=2-i*ltopo
+
112!C$OMP PARALLEL DO PRIVATE(L,KS,KP,N,F1R,F1I)
+
113 DO k=1,km
+
114 IF(mp(k).EQ.1) THEN
+
115 DO l=ltope,lx,2
+
116 f(2*l+1,le,k)=plntop(l+1)*spctop(2*l+1,k)
+
117 f(2*l+2,le,k)=plntop(l+1)*spctop(2*l+2,k)
+
118 ENDDO
+
119 DO l=ltopo,lx,2
+
120 f(2*l+1,lo,k)=plntop(l+1)*spctop(2*l+1,k)
+
121 f(2*l+2,lo,k)=plntop(l+1)*spctop(2*l+2,k)
+
122 ENDDO
+
123 ENDIF
+
124C FOR EACH ZONAL WAVENUMBER, SYNTHESIZE TERMS OVER TOTAL WAVENUMBER.
+
125C SYNTHESIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
+
126 DO l=0,lx
+
127 ks=l*(2*m+(i-1)*(l-1))
+
128 kp=ks/2+1
+
129 DO n=l,i*l+m,2
+
130 f(2*l+1,1,k)=f(2*l+1,1,k)+pln(kp+n)*spc(ks+2*n+1,k)
+
131 f(2*l+2,1,k)=f(2*l+2,1,k)+pln(kp+n)*spc(ks+2*n+2,k)
+
132 ENDDO
+
133 DO n=l+1,i*l+m,2
+
134 f(2*l+1,2,k)=f(2*l+1,2,k)+pln(kp+n)*spc(ks+2*n+1,k)
+
135 f(2*l+2,2,k)=f(2*l+2,2,k)+pln(kp+n)*spc(ks+2*n+2,k)
+
136 ENDDO
+
137 ENDDO
+
138C SEPARATE FOURIER COEFFICIENTS FROM EACH HEMISPHERE.
+
139C ODD POLYNOMIALS CONTRIBUTE NEGATIVELY TO THE SOUTHERN HEMISPHERE.
+
140C DIVIDE VECTOR COMPONENTS BY COSINE LATITUDE.
+
141 DO l=0,lx
+
142 f1r=f(2*l+1,1,k)
+
143 f1i=f(2*l+2,1,k)
+
144 f(2*l+1,1,k)=f1r+f(2*l+1,2,k)
+
145 f(2*l+2,1,k)=f1i+f(2*l+2,2,k)
+
146 f(2*l+1,2,k)=f1r-f(2*l+1,2,k)
+
147 f(2*l+2,2,k)=f1i-f(2*l+2,2,k)
+
148 ENDDO
+
149 IF(mp(k).EQ.1) THEN
+
150 DO l=0,lx
+
151 f(2*l+1,1,k)=f(2*l+1,1,k)/clat
+
152 f(2*l+2,1,k)=f(2*l+2,1,k)/clat
+
153 f(2*l+1,2,k)=f(2*l+1,2,k)/clat
+
154 f(2*l+2,2,k)=f(2*l+2,2,k)/clat
+
155 ENDDO
+
156 ENDIF
+
157 ENDDO
+
158 ENDIF
+
+
159 END
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
diff --git a/sptez_8f.html b/sptez_8f.html index dabb0310..fcccf350 100644 --- a/sptez_8f.html +++ b/sptez_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptez.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptez.f File Reference
+
sptez.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptez (IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRID, IDIR)
 This subprogram performs a spherical transform between spectral coefficients of a scalar quantity and a field on a global cylindrical grid. More...
 
subroutine sptez (iromb, maxwv, idrt, imax, jmax, wave, grid, idir)
 This subprogram performs a spherical transform between spectral coefficients of a scalar quantity and a field on a global cylindrical grid.
 

Detailed Description

Perform a simple scalar spherical transform.

@@ -107,8 +113,8 @@

Definition in file sptez.f.

Function/Subroutine Documentation

- -

◆ sptez()

+ +

◆ sptez()

@@ -117,49 +123,49 @@

subroutine sptez (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRT, + idrt,   - IMAX, + imax,   - JMAX, + jmax, real, dimension((maxwv+1)*((iromb+1)*maxwv+2))  - WAVE, + wave, real, dimension(imax,jmax)  - GRID, + grid,   - IDIR  + idir  @@ -174,7 +180,7 @@

sptran().

+

For more flexibility and efficiency, call sptran().

Subprogram can be called from a multiprocessing environment.

Minimum grid dimensions for unaliased transforms to spectral:

@@ -217,7 +223,7 @@

Definition at line 49 of file sptez.f.

-

References ncpus(), and sptranf().

+

References ncpus(), and sptranf().

@@ -227,7 +233,7 @@

diff --git a/sptez_8f.js b/sptez_8f.js index 03fe31e3..9801b4cc 100644 --- a/sptez_8f.js +++ b/sptez_8f.js @@ -1,4 +1,4 @@ var sptez_8f = [ - [ "sptez", "sptez_8f.html#a418a7d182834b2e2dafae2fe881ba9fc", null ] + [ "sptez", "sptez_8f.html#a2f946d9be4069109163ffad32eae2fe4", null ] ]; \ No newline at end of file diff --git a/sptez_8f_source.html b/sptez_8f_source.html index e907436c..96213aad 100644 --- a/sptez_8f_source.html +++ b/sptez_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptez.f Source File @@ -23,10 +23,9 @@

- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,97 +81,105 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptez.f
+
sptez.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a simple scalar spherical transform.
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs a spherical transform
-
6 C> between spectral coefficients of a scalar quantity
-
7 C> and a field on a global cylindrical grid.
-
8 C>
-
9 C> The wave-space can be either triangular or rhomboidal.
-
10 C>
-
11 C> The grid-space can be either an equally-spaced grid
-
12 C> (with or without pole points) or a Gaussian grid.
-
13 C>
-
14 C> The wave field is in sequential 'IBM ORDER'.
-
15 C>
-
16 C> The grid field is indexed East to West, then North to South.
-
17 C>
-
18 C> For more flexibility and efficiency, call sptran().
-
19 C>
-
20 C> Subprogram can be called from a multiprocessing environment.
-
21 C>
-
22 C> Minimum grid dimensions for unaliased transforms to spectral:
-
23 C> DIMENSION |LINEAR |QUADRATIC
-
24 C> ----------------------- |--------- |-------------
-
25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
32 C>
-
33 C> @param IROMB spectral domain shape
-
34 C> (0 for triangular, 1 for rhomboidal)
-
35 C> @param MAXWV spectral truncation
-
36 C> @param IDRT grid identifier
-
37 C> - IDRT=4 for Gaussian grid,
-
38 C> - IDRT=0 for equally-spaced grid including poles,
-
39 C> - IDRT=256 for equally-spaced grid excluding poles
-
40 C> @param IMAX even number of longitudes.
-
41 C> @param JMAX number of latitudes.
-
42 C> @param[out] WAVE wave field if IDIR>0
-
43 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
-
44 C> @param[out] GRID grid field (E->W,N->S) if IDIR<0
-
45 C> @param IDIR transform flag
-
46 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
-
47 C>
-
48 C> @author Iredell @date 96-02-29
-
49  SUBROUTINE sptez(IROMB,MAXWV,IDRT,IMAX,JMAX,WAVE,GRID,IDIR)
-
50 
-
51  REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2))
-
52  REAL GRID(IMAX,JMAX)
-
53 
-
54  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
55  ip=1
-
56  is=1
-
57  jn=imax
-
58  js=-jn
-
59  kw=2*mx
-
60  kg=imax*jmax
-
61  jb=1
-
62  je=(jmax+1)/2
-
63  jc=ncpus()
-
64 ! print *, " EM: SPTEZ:::JJJJJJJJJJJJJJJJJJJCCCCCCCCCCC=" ,JC
-
65  IF(idir.LT.0) wave=0
-
66 
-
67  CALL sptranf(iromb,maxwv,idrt,imax,jmax,1,
-
68  & ip,is,jn,js,kw,kg,jb,je,jc,
-
69  & wave,grid,grid(1,jmax),idir)
-
70 
-
71  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptez(IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRID, IDIR)
This subprogram performs a spherical transform between spectral coefficients of a scalar quantity and...
Definition: sptez.f:50
-
subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptranf.f:77
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a simple scalar spherical transform.
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs a spherical transform
+
6C> between spectral coefficients of a scalar quantity
+
7C> and a field on a global cylindrical grid.
+
8C>
+
9C> The wave-space can be either triangular or rhomboidal.
+
10C>
+
11C> The grid-space can be either an equally-spaced grid
+
12C> (with or without pole points) or a Gaussian grid.
+
13C>
+
14C> The wave field is in sequential 'IBM ORDER'.
+
15C>
+
16C> The grid field is indexed East to West, then North to South.
+
17C>
+
18C> For more flexibility and efficiency, call sptran().
+
19C>
+
20C> Subprogram can be called from a multiprocessing environment.
+
21C>
+
22C> Minimum grid dimensions for unaliased transforms to spectral:
+
23C> DIMENSION |LINEAR |QUADRATIC
+
24C> ----------------------- |--------- |-------------
+
25C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
26C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
27C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
28C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
29C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
30C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
31C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
32C>
+
33C> @param IROMB spectral domain shape
+
34C> (0 for triangular, 1 for rhomboidal)
+
35C> @param MAXWV spectral truncation
+
36C> @param IDRT grid identifier
+
37C> - IDRT=4 for Gaussian grid,
+
38C> - IDRT=0 for equally-spaced grid including poles,
+
39C> - IDRT=256 for equally-spaced grid excluding poles
+
40C> @param IMAX even number of longitudes.
+
41C> @param JMAX number of latitudes.
+
42C> @param[out] WAVE wave field if IDIR>0
+
43C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
+
44C> @param[out] GRID grid field (E->W,N->S) if IDIR<0
+
45C> @param IDIR transform flag
+
46C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
+
47C>
+
48C> @author Iredell @date 96-02-29
+
+
49 SUBROUTINE sptez(IROMB,MAXWV,IDRT,IMAX,JMAX,WAVE,GRID,IDIR)
+
50
+
51 REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2))
+
52 REAL GRID(IMAX,JMAX)
+
53
+
54 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
55 ip=1
+
56 is=1
+
57 jn=imax
+
58 js=-jn
+
59 kw=2*mx
+
60 kg=imax*jmax
+
61 jb=1
+
62 je=(jmax+1)/2
+
63 jc=ncpus()
+
64! print *, " EM: SPTEZ:::JJJJJJJJJJJJJJJJJJJCCCCCCCCCCC=" ,JC
+
65 IF(idir.LT.0) wave=0
+
66
+
67 CALL sptranf(iromb,maxwv,idrt,imax,jmax,1,
+
68 & ip,is,jn,js,kw,kg,jb,je,jc,
+
69 & wave,grid,grid(1,jmax),idir)
+
70
+
+
71 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptez(iromb, maxwv, idrt, imax, jmax, wave, grid, idir)
This subprogram performs a spherical transform between spectral coefficients of a scalar quantity and...
Definition sptez.f:50
+
subroutine sptranf(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptranf.f:77
diff --git a/sptezd_8f.html b/sptezd_8f.html index 0d2359c9..f210b77b 100644 --- a/sptezd_8f.html +++ b/sptezd_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezd.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezd.f File Reference
+
sptezd.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptezd (IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
 This subprogram performs a spherical transform between spectral coefficients of a scalar field and its mean and gradient on a global cylindrical grid. More...
 
subroutine sptezd (iromb, maxwv, idrt, imax, jmax, wave, gridmn, gridx, gridy, idir)
 This subprogram performs a spherical transform between spectral coefficients of a scalar field and its mean and gradient on a global cylindrical grid.
 

Detailed Description

Perform a simple gradient spherical transform.

@@ -107,8 +113,8 @@

Definition in file sptezd.f.

Function/Subroutine Documentation

- -

◆ sptezd()

+ +

◆ sptezd()

@@ -117,61 +123,61 @@

subroutine sptezd (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRT, + idrt,   - IMAX, + imax,   - JMAX, + jmax, real, dimension(*)  - WAVE, + wave, real, dimension(*)  - GRIDMN, + gridmn, real, dimension(imax,jmax)  - GRIDX, + gridx, real, dimension(imax,jmax)  - GRIDY, + gridy,   - IDIR  + idir  @@ -186,7 +192,7 @@

sptran().

+

For more flexibility and efficiency, call sptran().

Subprogram can be called from a multiprocessing environment.

Minimum grid dimensions for unaliased transforms to spectral:

@@ -231,7 +237,7 @@

Definition at line 50 of file sptezd.f.

-

References ncpus(), and sptrand().

+

References ncpus(), and sptrand().

@@ -241,7 +247,7 @@

diff --git a/sptezd_8f.js b/sptezd_8f.js index d5a75e40..831bad70 100644 --- a/sptezd_8f.js +++ b/sptezd_8f.js @@ -1,4 +1,4 @@ var sptezd_8f = [ - [ "sptezd", "sptezd_8f.html#a6c30b52dcb4da9e403eeeb307b9516d7", null ] + [ "sptezd", "sptezd_8f.html#aae14495bfd31b11b22b70e29a415ce86", null ] ]; \ No newline at end of file diff --git a/sptezd_8f_source.html b/sptezd_8f_source.html index d86821c3..d40d6f2d 100644 --- a/sptezd_8f_source.html +++ b/sptezd_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezd.f Source File @@ -23,10 +23,9 @@

- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,86 +81,94 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezd.f
+
sptezd.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a simple gradient spherical transform.
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs a spherical transform
-
6 C> between spectral coefficients of a scalar field
-
7 C> and its mean and gradient on a global cylindrical grid.
-
8 C>
-
9 C> The wave-space can be either triangular or rhomboidal.
-
10 C>
-
11 C> The grid-space can be either an equally-spaced grid
-
12 C> (with or without pole points) or a Gaussian grid.
-
13 C>
-
14 C> The wave field is in sequential 'IBM ORDER'.
-
15 C>
-
16 C> The grid fiels is indexed East to West, then North to South.
-
17 C>
-
18 C> For more flexibility and efficiency, call sptran().
-
19 C>
-
20 C> Subprogram can be called from a multiprocessing environment.
-
21 C>
-
22 C> Minimum grid dimensions for unaliased transforms to spectral:
-
23 C> DIMENSION |LINEAR |QUADRATIC
-
24 C> ----------------------- |--------- |-------------
-
25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
32 C>
-
33 C> @param IROMB spectral domain shape
-
34 C> (0 for triangular, 1 for rhomboidal)
-
35 C> @param MAXWV spectral truncation
-
36 C> @param IDRT grid identifier
-
37 C> - IDRT=4 for Gaussian grid
-
38 C> - IDRT=0 for equally-spaced grid including poles
-
39 C> - IDRT=256 for equally-spaced grid excluding poles
-
40 C> @param IMAX even number of longitudes.
-
41 C> @param JMAX number of latitudes.
-
42 C> @param[out] WAVE wave field if IDIR>0
-
43 C> @param[out] GRIDMN global mean if IDIR<0
-
44 C> @param[out] GRIDX grid x-gradients (E->W,N->S) if IDIR<0
-
45 C> @param[out] GRIDY grid y-gradients (E->W,N->S) if IDIR<0
-
46 C> @param IDIR transform flag
-
47 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
-
48 C>
-
49 C> @author Iredell @date 96-02-29
-
50  SUBROUTINE sptezd(IROMB,MAXWV,IDRT,IMAX,JMAX,
-
51  & WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
-
52 
-
53  REAL WAVE(*),GRIDX(IMAX,JMAX),GRIDY(IMAX,JMAX),GRIDMN(*)
-
54 
-
55  jc=ncpus()
-
56  CALL sptrand(iromb,maxwv,idrt,imax,jmax,1,
-
57  & 0,0,0,0,0,0,0,0,jc,
-
58  & wave,gridmn,
-
59  & gridx,gridx(1,jmax),gridy,gridy(1,jmax),1)
-
60  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptezd(IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
This subprogram performs a spherical transform between spectral coefficients of a scalar field and it...
Definition: sptezd.f:52
-
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 the...
Definition: sptrand.f:92
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a simple gradient spherical transform.
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs a spherical transform
+
6C> between spectral coefficients of a scalar field
+
7C> and its mean and gradient on a global cylindrical grid.
+
8C>
+
9C> The wave-space can be either triangular or rhomboidal.
+
10C>
+
11C> The grid-space can be either an equally-spaced grid
+
12C> (with or without pole points) or a Gaussian grid.
+
13C>
+
14C> The wave field is in sequential 'IBM ORDER'.
+
15C>
+
16C> The grid fiels is indexed East to West, then North to South.
+
17C>
+
18C> For more flexibility and efficiency, call sptran().
+
19C>
+
20C> Subprogram can be called from a multiprocessing environment.
+
21C>
+
22C> Minimum grid dimensions for unaliased transforms to spectral:
+
23C> DIMENSION |LINEAR |QUADRATIC
+
24C> ----------------------- |--------- |-------------
+
25C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
26C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
27C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
28C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
29C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
30C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
31C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
32C>
+
33C> @param IROMB spectral domain shape
+
34C> (0 for triangular, 1 for rhomboidal)
+
35C> @param MAXWV spectral truncation
+
36C> @param IDRT grid identifier
+
37C> - IDRT=4 for Gaussian grid
+
38C> - IDRT=0 for equally-spaced grid including poles
+
39C> - IDRT=256 for equally-spaced grid excluding poles
+
40C> @param IMAX even number of longitudes.
+
41C> @param JMAX number of latitudes.
+
42C> @param[out] WAVE wave field if IDIR>0
+
43C> @param[out] GRIDMN global mean if IDIR<0
+
44C> @param[out] GRIDX grid x-gradients (E->W,N->S) if IDIR<0
+
45C> @param[out] GRIDY grid y-gradients (E->W,N->S) if IDIR<0
+
46C> @param IDIR transform flag
+
47C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
+
48C>
+
49C> @author Iredell @date 96-02-29
+
+
50 SUBROUTINE sptezd(IROMB,MAXWV,IDRT,IMAX,JMAX,
+
51 & WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
+
52
+
53 REAL WAVE(*),GRIDX(IMAX,JMAX),GRIDY(IMAX,JMAX),GRIDMN(*)
+
54
+
55 jc=ncpus()
+
56 CALL sptrand(iromb,maxwv,idrt,imax,jmax,1,
+
57 & 0,0,0,0,0,0,0,0,jc,
+
58 & wave,gridmn,
+
59 & gridx,gridx(1,jmax),gridy,gridy(1,jmax),1)
+
+
60 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptezd(iromb, maxwv, idrt, imax, jmax, wave, gridmn, gridx, gridy, idir)
This subprogram performs a spherical transform between spectral coefficients of a scalar field and it...
Definition sptezd.f:52
+
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 the...
Definition sptrand.f:92
diff --git a/sptezm_8f.html b/sptezm_8f.html index d3955611..8262b3d5 100644 --- a/sptezm_8f.html +++ b/sptezm_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezm.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezm.f File Reference
+
sptezm.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptezm (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRID, IDIR)
 This subprogram performs spherical transforms between spectral coefficients of scalar quantities and fields on a global cylindrical grid. More...
 
subroutine sptezm (iromb, maxwv, idrt, imax, jmax, kmax, wave, grid, idir)
 This subprogram performs spherical transforms between spectral coefficients of scalar quantities and fields on a global cylindrical grid.
 

Detailed Description

Perform simple scalar spherical transforms.

@@ -107,8 +113,8 @@

Definition in file sptezm.f.

Function/Subroutine Documentation

- -

◆ sptezm()

+ +

◆ sptezm()

@@ -117,55 +123,55 @@

subroutine sptezm (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRT, + idrt,   - IMAX, + imax,   - JMAX, + jmax,   - KMAX, + kmax, real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax)  - WAVE, + wave, real, dimension(imax,jmax,kmax)  - GRID, + grid,   - IDIR  + idir  @@ -180,7 +186,7 @@

sptran().

+

For more flexibility and efficiency, call sptran().

Subprogram can be called from a multiprocessing environment.

Minimum grid dimensions for unaliased transforms to spectral:

@@ -224,7 +230,7 @@

Definition at line 50 of file sptezm.f.

-

References ncpus(), and sptranf().

+

References ncpus(), and sptranf().

@@ -234,7 +240,7 @@

diff --git a/sptezm_8f.js b/sptezm_8f.js index d8cb8be0..a3d9053f 100644 --- a/sptezm_8f.js +++ b/sptezm_8f.js @@ -1,4 +1,4 @@ var sptezm_8f = [ - [ "sptezm", "sptezm_8f.html#a1430a0df2cba7eefaf67c939684be2d1", null ] + [ "sptezm", "sptezm_8f.html#a12675af34cd4ab1e337286dfee620df3", null ] ]; \ No newline at end of file diff --git a/sptezm_8f_source.html b/sptezm_8f_source.html index a68c0f93..c402f769 100644 --- a/sptezm_8f_source.html +++ b/sptezm_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezm.f Source File @@ -23,10 +23,9 @@

- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,96 +81,104 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezm.f
+
sptezm.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform simple scalar spherical transforms.
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs spherical transforms
-
6 C> between spectral coefficients of scalar quantities
-
7 C> and fields on a global cylindrical grid.
-
8 C>
-
9 C> The wave-space can be either triangular or rhomboidal.
-
10 C>
-
11 C> The grid-space can be either an equally-spaced grid
-
12 C> (with or without pole points) or a Gaussian grid.
-
13 C>
-
14 C> Wave fields are in sequential 'IBM ORDER'.
-
15 C>
-
16 C> Grid fields are indexed East to West, then North to South.
-
17 C>
-
18 C> For more flexibility and efficiency, call sptran().
-
19 C>
-
20 C> Subprogram can be called from a multiprocessing environment.
-
21 C>
-
22 C> Minimum grid dimensions for unaliased transforms to spectral:
-
23 C> DIMENSION |LINEAR |QUADRATIC
-
24 C> ----------------------- |--------- |-------------
-
25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
32 C>
-
33 C> @param IROMB spectral domain shape
-
34 C> (0 for triangular, 1 for rhomboidal)
-
35 C> @param MAXWV spectral truncation
-
36 C> @param IDRT grid identifier
-
37 C> - IDRT=4 for Gaussian grid
-
38 C> - IDRT=0 for equally-spaced grid including poles
-
39 C> - IDRT=256 for equally-spaced grid excluding poles
-
40 C> @param IMAX even number of longitudes
-
41 C> @param JMAX number of latitudes
-
42 C> @param KMAX number of fields to transform
-
43 C> @param[out] WAVE wave field if IDIR>0
-
44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
-
45 C> @param[out] GRID grid field (E->W,N->S) if IDIR<0
-
46 C> @param IDIR transform flag
-
47 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
-
48 C>
-
49 C> @author Iredell @date 96-02-29
-
50  SUBROUTINE sptezm(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,WAVE,GRID,IDIR)
-
51 
-
52  REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
-
53  REAL GRID(IMAX,JMAX,KMAX)
-
54 
-
55  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
56  ip=1
-
57  is=1
-
58  jn=imax
-
59  js=-jn
-
60  kw=2*mx
-
61  kg=imax*jmax
-
62  jb=1
-
63  je=(jmax+1)/2
-
64  jc=ncpus()
-
65  IF(idir.LT.0) wave=0
-
66 
-
67  CALL sptranf(iromb,maxwv,idrt,imax,jmax,kmax,
-
68  & ip,is,jn,js,kw,kg,jb,je,jc,
-
69  & wave,grid,grid(1,jmax,1),idir)
-
70  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptezm(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRID, IDIR)
This subprogram performs spherical transforms between spectral coefficients of scalar quantities and ...
Definition: sptezm.f:51
-
subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptranf.f:77
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform simple scalar spherical transforms.
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs spherical transforms
+
6C> between spectral coefficients of scalar quantities
+
7C> and fields on a global cylindrical grid.
+
8C>
+
9C> The wave-space can be either triangular or rhomboidal.
+
10C>
+
11C> The grid-space can be either an equally-spaced grid
+
12C> (with or without pole points) or a Gaussian grid.
+
13C>
+
14C> Wave fields are in sequential 'IBM ORDER'.
+
15C>
+
16C> Grid fields are indexed East to West, then North to South.
+
17C>
+
18C> For more flexibility and efficiency, call sptran().
+
19C>
+
20C> Subprogram can be called from a multiprocessing environment.
+
21C>
+
22C> Minimum grid dimensions for unaliased transforms to spectral:
+
23C> DIMENSION |LINEAR |QUADRATIC
+
24C> ----------------------- |--------- |-------------
+
25C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
26C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
27C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
28C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
29C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
30C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
31C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
32C>
+
33C> @param IROMB spectral domain shape
+
34C> (0 for triangular, 1 for rhomboidal)
+
35C> @param MAXWV spectral truncation
+
36C> @param IDRT grid identifier
+
37C> - IDRT=4 for Gaussian grid
+
38C> - IDRT=0 for equally-spaced grid including poles
+
39C> - IDRT=256 for equally-spaced grid excluding poles
+
40C> @param IMAX even number of longitudes
+
41C> @param JMAX number of latitudes
+
42C> @param KMAX number of fields to transform
+
43C> @param[out] WAVE wave field if IDIR>0
+
44C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
+
45C> @param[out] GRID grid field (E->W,N->S) if IDIR<0
+
46C> @param IDIR transform flag
+
47C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
+
48C>
+
49C> @author Iredell @date 96-02-29
+
+
50 SUBROUTINE sptezm(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,WAVE,GRID,IDIR)
+
51
+
52 REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
+
53 REAL GRID(IMAX,JMAX,KMAX)
+
54
+
55 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
56 ip=1
+
57 is=1
+
58 jn=imax
+
59 js=-jn
+
60 kw=2*mx
+
61 kg=imax*jmax
+
62 jb=1
+
63 je=(jmax+1)/2
+
64 jc=ncpus()
+
65 IF(idir.LT.0) wave=0
+
66
+
67 CALL sptranf(iromb,maxwv,idrt,imax,jmax,kmax,
+
68 & ip,is,jn,js,kw,kg,jb,je,jc,
+
69 & wave,grid,grid(1,jmax,1),idir)
+
+
70 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptezm(iromb, maxwv, idrt, imax, jmax, kmax, wave, grid, idir)
This subprogram performs spherical transforms between spectral coefficients of scalar quantities and ...
Definition sptezm.f:51
+
subroutine sptranf(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptranf.f:77
diff --git a/sptezmd_8f.html b/sptezmd_8f.html index 80753eaf..35b5e7eb 100644 --- a/sptezmd_8f.html +++ b/sptezmd_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezmd.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@

@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezmd.f File Reference
+
sptezmd.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptezmd (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
 This subprogram performs spherical transforms between spectral coefficients of scalar fields and their means and gradients on a global cylindrical grid. More...
 
subroutine sptezmd (iromb, maxwv, idrt, imax, jmax, kmax, wave, gridmn, gridx, gridy, idir)
 This subprogram performs spherical transforms between spectral coefficients of scalar fields and their means and gradients on a global cylindrical grid.
 

Detailed Description

Perform simple gradient spherical transforms.

@@ -107,8 +113,8 @@

Definition in file sptezmd.f.

Function/Subroutine Documentation

- -

◆ sptezmd()

+ +

◆ sptezmd()

@@ -117,67 +123,67 @@

subroutine sptezmd (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRT, + idrt,   - IMAX, + imax,   - JMAX, + jmax,   - KMAX, + kmax, real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax)  - WAVE, + wave, real, dimension(kmax)  - GRIDMN, + gridmn, real, dimension(imax,jmax,kmax)  - GRIDX, + gridx, real, dimension(imax,jmax,kmax)  - GRIDY, + gridy,   - IDIR  + idir  @@ -192,7 +198,7 @@

sptran().

+

For more flexibility and efficiency, call sptran().

Subprogram can be called from a multiprocessing environment.

Minimum grid dimensions for unaliased transforms to spectral:

@@ -238,7 +244,7 @@

Definition at line 52 of file sptezmd.f.

-

References ncpus(), and sptrand().

+

References ncpus(), and sptrand().

@@ -248,7 +254,7 @@

diff --git a/sptezmd_8f.js b/sptezmd_8f.js index 31e96979..4073b02d 100644 --- a/sptezmd_8f.js +++ b/sptezmd_8f.js @@ -1,4 +1,4 @@ var sptezmd_8f = [ - [ "sptezmd", "sptezmd_8f.html#a2b9ead06893e51604bfb18928ddee996", null ] + [ "sptezmd", "sptezmd_8f.html#aaffab6d5ed04ecab9a52ee8918371278", null ] ]; \ No newline at end of file diff --git a/sptezmd_8f_source.html b/sptezmd_8f_source.html index 2e7916a5..d3553ad5 100644 --- a/sptezmd_8f_source.html +++ b/sptezmd_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezmd.f Source File @@ -23,10 +23,9 @@

- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,89 +81,97 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezmd.f
+
sptezmd.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform simple gradient spherical transforms.
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs spherical transforms
-
6 C> between spectral coefficients of scalar fields
-
7 C> and their means and gradients on a global cylindrical grid.
-
8 C>
-
9 C> The wave-space can be either triangular or rhomboidal.
-
10 C>
-
11 C> The grid-space can be either an equally-spaced grid
-
12 C> (with or without pole points) or a gaussian grid.
-
13 C>
-
14 C> The wave fields are in sequential 'IBM ORDER'.
-
15 C>
-
16 C> The grid fields are indexed East to West, then North to South.
-
17 C>
-
18 C> For more flexibility and efficiency, call sptran().
-
19 C>
-
20 C> Subprogram can be called from a multiprocessing environment.
-
21 C>
-
22 C> Minimum grid dimensions for unaliased transforms to spectral:
-
23 C> DIMENSION |LINEAR |QUADRATIC
-
24 C> ----------------------- |--------- |-------------
-
25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
32 C>
-
33 C> @param IROMB spectral domain shape
-
34 C> (0 for triangular, 1 for rhomboidal)
-
35 C> @param MAXWV spectral truncation
-
36 C> @param IDRT grid identifier
-
37 C> - IDRT=4 for Gaussian grid
-
38 C> - IDRT=0 for equally-spaced grid including poles
-
39 C> - IDRT=256 for equally-spaced grid excluding poles
-
40 C> @param IMAX even number of longitudes.
-
41 C> @param JMAX number of latitudes.
-
42 C> @param KMAX number
-
43 C> @param[out] WAVE wave field if IDIR>0
-
44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)
-
45 C> @param[out] GRIDMN global mean if IDIR<0
-
46 C> @param[out] GRIDX grid x-gradients (E->W,N->S) if IDIR<0
-
47 C> @param[out] GRIDY grid y-gradients (E->W,N->S) if IDIR<0
-
48 C> @param IDIR transform flag
-
49 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
-
50 C>
-
51 C> @author Iredell @date 96-02-29
-
52  SUBROUTINE sptezmd(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
-
53  & WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
-
54 
-
55  REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
-
56  REAL GRIDMN(KMAX),GRIDX(IMAX,JMAX,KMAX),GRIDY(IMAX,JMAX,KMAX)
-
57 
-
58  jc=ncpus()
-
59  CALL sptrand(iromb,maxwv,idrt,imax,jmax,kmax,
-
60  & 0,0,0,0,0,0,0,0,jc,
-
61  & wave,gridmn,
-
62  & gridx,gridx(1,jmax,1),gridy,gridy(1,jmax,1),idir)
-
63  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptezmd(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
This subprogram performs spherical transforms between spectral coefficients of scalar fields and thei...
Definition: sptezmd.f:54
-
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 the...
Definition: sptrand.f:92
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform simple gradient spherical transforms.
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs spherical transforms
+
6C> between spectral coefficients of scalar fields
+
7C> and their means and gradients on a global cylindrical grid.
+
8C>
+
9C> The wave-space can be either triangular or rhomboidal.
+
10C>
+
11C> The grid-space can be either an equally-spaced grid
+
12C> (with or without pole points) or a gaussian grid.
+
13C>
+
14C> The wave fields are in sequential 'IBM ORDER'.
+
15C>
+
16C> The grid fields are indexed East to West, then North to South.
+
17C>
+
18C> For more flexibility and efficiency, call sptran().
+
19C>
+
20C> Subprogram can be called from a multiprocessing environment.
+
21C>
+
22C> Minimum grid dimensions for unaliased transforms to spectral:
+
23C> DIMENSION |LINEAR |QUADRATIC
+
24C> ----------------------- |--------- |-------------
+
25C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
26C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
27C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
28C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
29C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
30C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
31C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
32C>
+
33C> @param IROMB spectral domain shape
+
34C> (0 for triangular, 1 for rhomboidal)
+
35C> @param MAXWV spectral truncation
+
36C> @param IDRT grid identifier
+
37C> - IDRT=4 for Gaussian grid
+
38C> - IDRT=0 for equally-spaced grid including poles
+
39C> - IDRT=256 for equally-spaced grid excluding poles
+
40C> @param IMAX even number of longitudes.
+
41C> @param JMAX number of latitudes.
+
42C> @param KMAX number
+
43C> @param[out] WAVE wave field if IDIR>0
+
44C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)
+
45C> @param[out] GRIDMN global mean if IDIR<0
+
46C> @param[out] GRIDX grid x-gradients (E->W,N->S) if IDIR<0
+
47C> @param[out] GRIDY grid y-gradients (E->W,N->S) if IDIR<0
+
48C> @param IDIR transform flag
+
49C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
+
50C>
+
51C> @author Iredell @date 96-02-29
+
+
52 SUBROUTINE sptezmd(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
+
53 & WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
+
54
+
55 REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
+
56 REAL GRIDMN(KMAX),GRIDX(IMAX,JMAX,KMAX),GRIDY(IMAX,JMAX,KMAX)
+
57
+
58 jc=ncpus()
+
59 CALL sptrand(iromb,maxwv,idrt,imax,jmax,kmax,
+
60 & 0,0,0,0,0,0,0,0,jc,
+
61 & wave,gridmn,
+
62 & gridx,gridx(1,jmax,1),gridy,gridy(1,jmax,1),idir)
+
+
63 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptezmd(iromb, maxwv, idrt, imax, jmax, kmax, wave, gridmn, gridx, gridy, idir)
This subprogram performs spherical transforms between spectral coefficients of scalar fields and thei...
Definition sptezmd.f:54
+
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 the...
Definition sptrand.f:92
diff --git a/sptezmv_8f.html b/sptezmv_8f.html index 8556ba90..68315e63 100644 --- a/sptezmv_8f.html +++ b/sptezmv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezmv.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptezmv.f File Reference
+
sptezmv.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptezmv (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
 This subprogram performs spherical transforms between spectral coefficients of divergence and curl and vector fields on a global cylindrical grid. More...
 
subroutine sptezmv (iromb, maxwv, idrt, imax, jmax, kmax, waved, wavez, gridu, gridv, idir)
 This subprogram performs spherical transforms between spectral coefficients of divergence and curl and vector fields on a global cylindrical grid.
 

Detailed Description

Perform simple vector spherical transforms.

@@ -107,8 +113,8 @@

Definition in file sptezmv.f.

Function/Subroutine Documentation

- -

◆ sptezmv()

+ +

◆ sptezmv()

@@ -117,67 +123,67 @@

subroutine sptezmv (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRT, + idrt,   - IMAX, + imax,   - JMAX, + jmax,   - KMAX, + kmax, real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax)  - WAVED, + waved, real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax)  - WAVEZ, + wavez, real, dimension(imax,jmax,kmax)  - GRIDU, + gridu, real, dimension(imax,jmax,kmax)  - GRIDV, + gridv,   - IDIR  + idir  @@ -192,7 +198,7 @@

sptran().

+

For more flexibility and efficiency, call sptran().

Subprogram can be called from a multiprocessing environment.

Minimum grid dimensions for unaliased transforms to spectral:

@@ -238,7 +244,7 @@

Definition at line 53 of file sptezmv.f.

-

References ncpus(), and sptranfv().

+

References ncpus(), and sptranfv().

@@ -248,7 +254,7 @@

diff --git a/sptezmv_8f.js b/sptezmv_8f.js index 2b2725eb..e4e56db7 100644 --- a/sptezmv_8f.js +++ b/sptezmv_8f.js @@ -1,4 +1,4 @@ var sptezmv_8f = [ - [ "sptezmv", "sptezmv_8f.html#a22dc4fc10c5225ec8d3c12ed3cb4786e", null ] + [ "sptezmv", "sptezmv_8f.html#a00b86e815f4aad69beb3c2f64c99af67", null ] ]; \ No newline at end of file diff --git a/sptezmv_8f_source.html b/sptezmv_8f_source.html index 20f789af..b9dc0562 100644 --- a/sptezmv_8f_source.html +++ b/sptezmv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezmv.f Source File @@ -23,10 +23,9 @@

- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,104 +81,112 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezmv.f
+
sptezmv.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform simple vector spherical transforms.
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs spherical transforms
-
6 C> between spectral coefficients of divergence and curl
-
7 C> and vector fields on a global cylindrical grid.
-
8 C>
-
9 C> The wave-space can be either triangular or rhomboidal.
-
10 C>
-
11 C> The grid-space can be either an equally-spaced grid
-
12 C> (with or without pole points) or a Gaussian grid.
-
13 C>
-
14 C> Wave fields are in sequential 'IBM ORDER'.
-
15 C>
-
16 C> Grid fields are indexed east to west, then north to south.
-
17 C>
-
18 C> For more flexibility and efficiency, call sptran().
-
19 C>
-
20 C> Subprogram can be called from a multiprocessing environment.
-
21 C>
-
22 C> Minimum grid dimensions for unaliased transforms to spectral:
-
23 C> DIMENSION |LINEAR |QUADRATIC
-
24 C> ----------------------- |--------- |-------------
-
25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
32 C>
-
33 C> @param IROMB spectral domain shape
-
34 C> (0 for triangular, 1 for rhomboidal)
-
35 C> @param MAXWV spectral truncation
-
36 C> @param IDRT grid identifier
-
37 C> - IDRT=4 for Gaussian grid
-
38 C> - IDRT=0 for equally-spaced grid including poles
-
39 C> - IDRT=256 for equally-spaced grid excluding poles
-
40 C> @param IMAX even number of longitudes
-
41 C> @param JMAX number of latitudes
-
42 C> @param KMAX number of fields to transform
-
43 C> @param[out] WAVED wave divergence field if IDIR<0
-
44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
-
45 C> @param[out] WAVEZ wave vorticity field if IDIR>0
-
46 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
-
47 C> @param[out] GRIDU grid u-wind (E->W,N->S) if IDIR>0
-
48 C> @param[out] GRIDV grid v-wind (E->W,N->S) if IDIR>0
-
49 C> @param IDIR transform flag
-
50 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
-
51 C>
-
52 C> @author Iredell @date 96-02-29
-
53  SUBROUTINE sptezmv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
-
54  & WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
-
55 
-
56  REAL WAVED((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
-
57  REAL WAVEZ((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
-
58  REAL GRIDU(IMAX,JMAX,KMAX)
-
59  REAL GRIDV(IMAX,JMAX,KMAX)
-
60 
-
61  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
62  ip=1
-
63  is=1
-
64  jn=imax
-
65  js=-jn
-
66  kw=2*mx
-
67  kg=imax*jmax
-
68  jb=1
-
69  je=(jmax+1)/2
-
70  jc=ncpus()
-
71  IF(idir.LT.0) waved=0
-
72  IF(idir.LT.0) wavez=0
-
73 
-
74  CALL sptranfv(iromb,maxwv,idrt,imax,jmax,kmax,
-
75  & ip,is,jn,js,kw,kg,jb,je,jc,
-
76  & waved,wavez,
-
77  & gridu,gridu(1,jmax,1),gridv,gridv(1,jmax,1),idir)
-
78  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptezmv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
This subprogram performs spherical transforms between spectral coefficients of divergence and curl an...
Definition: sptezmv.f:55
-
subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition: sptranfv.f:83
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform simple vector spherical transforms.
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs spherical transforms
+
6C> between spectral coefficients of divergence and curl
+
7C> and vector fields on a global cylindrical grid.
+
8C>
+
9C> The wave-space can be either triangular or rhomboidal.
+
10C>
+
11C> The grid-space can be either an equally-spaced grid
+
12C> (with or without pole points) or a Gaussian grid.
+
13C>
+
14C> Wave fields are in sequential 'IBM ORDER'.
+
15C>
+
16C> Grid fields are indexed east to west, then north to south.
+
17C>
+
18C> For more flexibility and efficiency, call sptran().
+
19C>
+
20C> Subprogram can be called from a multiprocessing environment.
+
21C>
+
22C> Minimum grid dimensions for unaliased transforms to spectral:
+
23C> DIMENSION |LINEAR |QUADRATIC
+
24C> ----------------------- |--------- |-------------
+
25C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
26C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
27C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
28C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
29C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
30C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
31C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
32C>
+
33C> @param IROMB spectral domain shape
+
34C> (0 for triangular, 1 for rhomboidal)
+
35C> @param MAXWV spectral truncation
+
36C> @param IDRT grid identifier
+
37C> - IDRT=4 for Gaussian grid
+
38C> - IDRT=0 for equally-spaced grid including poles
+
39C> - IDRT=256 for equally-spaced grid excluding poles
+
40C> @param IMAX even number of longitudes
+
41C> @param JMAX number of latitudes
+
42C> @param KMAX number of fields to transform
+
43C> @param[out] WAVED wave divergence field if IDIR<0
+
44C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
+
45C> @param[out] WAVEZ wave vorticity field if IDIR>0
+
46C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
+
47C> @param[out] GRIDU grid u-wind (E->W,N->S) if IDIR>0
+
48C> @param[out] GRIDV grid v-wind (E->W,N->S) if IDIR>0
+
49C> @param IDIR transform flag
+
50C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
+
51C>
+
52C> @author Iredell @date 96-02-29
+
+
53 SUBROUTINE sptezmv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
+
54 & WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
+
55
+
56 REAL WAVED((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
+
57 REAL WAVEZ((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
+
58 REAL GRIDU(IMAX,JMAX,KMAX)
+
59 REAL GRIDV(IMAX,JMAX,KMAX)
+
60
+
61 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
62 ip=1
+
63 is=1
+
64 jn=imax
+
65 js=-jn
+
66 kw=2*mx
+
67 kg=imax*jmax
+
68 jb=1
+
69 je=(jmax+1)/2
+
70 jc=ncpus()
+
71 IF(idir.LT.0) waved=0
+
72 IF(idir.LT.0) wavez=0
+
73
+
74 CALL sptranfv(iromb,maxwv,idrt,imax,jmax,kmax,
+
75 & ip,is,jn,js,kw,kg,jb,je,jc,
+
76 & waved,wavez,
+
77 & gridu,gridu(1,jmax,1),gridv,gridv(1,jmax,1),idir)
+
+
78 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptezmv(iromb, maxwv, idrt, imax, jmax, kmax, waved, wavez, gridu, gridv, idir)
This subprogram performs spherical transforms between spectral coefficients of divergence and curl an...
Definition sptezmv.f:55
+
subroutine sptranfv(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition sptranfv.f:83
diff --git a/sptezv_8f.html b/sptezv_8f.html index be8521ff..ba3ebb0b 100644 --- a/sptezv_8f.html +++ b/sptezv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezv.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptezv.f File Reference
+
sptezv.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptezv (IROMB, MAXWV, IDRT, IMAX, JMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
 This subprogram performs a spherical transform between spectral coefficients of divergence and curl and a vector field on a global cylindrical grid. More...
 
subroutine sptezv (iromb, maxwv, idrt, imax, jmax, waved, wavez, gridu, gridv, idir)
 This subprogram performs a spherical transform between spectral coefficients of divergence and curl and a vector field on a global cylindrical grid.
 

Detailed Description

Perform a simple vector spherical transform.

@@ -107,8 +113,8 @@

Definition in file sptezv.f.

Function/Subroutine Documentation

- -

◆ sptezv()

+ +

◆ sptezv()

@@ -241,7 +247,7 @@

diff --git a/sptezv_8f.js b/sptezv_8f.js index d9e51fb2..310a362c 100644 --- a/sptezv_8f.js +++ b/sptezv_8f.js @@ -1,4 +1,4 @@ var sptezv_8f = [ - [ "sptezv", "sptezv_8f.html#a83e49d961c40a2621c3f2afe70846226", null ] + [ "sptezv", "sptezv_8f.html#a5af4a3c7156baccafc3c670e127eab91", null ] ]; \ No newline at end of file diff --git a/sptezv_8f_source.html b/sptezv_8f_source.html index d467cea5..a864d933 100644 --- a/sptezv_8f_source.html +++ b/sptezv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptezv.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,102 +81,110 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptezv.f
+
sptezv.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a simple vector spherical transform
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs a spherical transform
-
6 C> between spectral coefficients of divergence and curl
-
7 C> and a vector field on a global cylindrical grid.
-
8 C> The wave-space can be either triangular or rhomboidal.
-
9 C>
-
10 C> The grid-space can be either an equally-spaced grid
-
11 C> (with or without pole points) or a Gaussian grid.
-
12 C>
-
13 C> The wave field is in sequential 'IBM order'.
-
14 C>
-
15 C> The grid field is indexed east to west, then north to south.
-
16 C>
-
17 C> For more flexibility and efficiency, call SPTRAN().
-
18 C>
-
19 C> Subprogram can be called from a multiprocessing environment.
-
20 C>
-
21 C> Minimum grid dimensions for unaliased transforms to spectral:
-
22 C> Dimension |Linear |Quadratic
-
23 C> ----------------------- |--------- |-------------
-
24 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
25 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
26 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
27 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
28 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
29 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
30 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
31 C>
-
32 C> @param IROMB Spectral domain shape
-
33 C> (0 for triangular, 1 for rhomboidal)
-
34 C> @param MAXWV Spectral truncation
-
35 C> @param IDRT Grid identifier
-
36 C> - IDRT=4 for Gaussian grid
-
37 C> - IDRT=0 for equally-spaced grid including poles
-
38 C> - IDRT=256 for equally-spaced grid excluding poles
-
39 C> @param IMAX Even number of longitudes
-
40 C> @param JMAX Number of latitudes
-
41 C> @param[out] WAVED Wave divergence field if IDIR>0
-
42 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
-
43 C> @param[out] WAVEZ Wave vorticity field if IDIR>0
-
44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
-
45 C> @param[out] GRIDU Grid u-wind (E->W,N->S) if IDIR<0
-
46 C> @param[out] GRIDV Grid v-wind (E->W,N->S) if IDIR<0
-
47 C> @param IDIR Transform flag
-
48 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
-
49 C>
-
50 C> @author Iredell @date 96-02-29
-
51  SUBROUTINE sptezv(IROMB,MAXWV,IDRT,IMAX,JMAX,
-
52  & WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
-
53 
-
54  REAL WAVED((MAXWV+1)*((IROMB+1)*MAXWV+2))
-
55  REAL WAVEZ((MAXWV+1)*((IROMB+1)*MAXWV+2))
-
56  REAL GRIDU(IMAX,JMAX)
-
57  REAL GRIDV(IMAX,JMAX)
-
58 
-
59  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
60  ip=1
-
61  is=1
-
62  jn=imax
-
63  js=-jn
-
64  kw=2*mx
-
65  kg=imax*jmax
-
66  jb=1
-
67  je=(jmax+1)/2
-
68  jc=ncpus()
-
69  IF(idir.LT.0) waved=0
-
70  IF(idir.LT.0) wavez=0
-
71 
-
72  CALL sptranfv(iromb,maxwv,idrt,imax,jmax,1,
-
73  & ip,is,jn,js,kw,kg,jb,je,jc,
-
74  & waved,wavez,
-
75  & gridu,gridu(1,jmax),gridv,gridv(1,jmax),idir)
-
76  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptezv(IROMB, MAXWV, IDRT, IMAX, JMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergence and curl a...
Definition: sptezv.f:53
-
subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition: sptranfv.f:83
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a simple vector spherical transform
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs a spherical transform
+
6C> between spectral coefficients of divergence and curl
+
7C> and a vector field on a global cylindrical grid.
+
8C> The wave-space can be either triangular or rhomboidal.
+
9C>
+
10C> The grid-space can be either an equally-spaced grid
+
11C> (with or without pole points) or a Gaussian grid.
+
12C>
+
13C> The wave field is in sequential 'IBM order'.
+
14C>
+
15C> The grid field is indexed east to west, then north to south.
+
16C>
+
17C> For more flexibility and efficiency, call SPTRAN().
+
18C>
+
19C> Subprogram can be called from a multiprocessing environment.
+
20C>
+
21C> Minimum grid dimensions for unaliased transforms to spectral:
+
22C> Dimension |Linear |Quadratic
+
23C> ----------------------- |--------- |-------------
+
24C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
25C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
26C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
27C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
28C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
29C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
30C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
31C>
+
32C> @param IROMB Spectral domain shape
+
33C> (0 for triangular, 1 for rhomboidal)
+
34C> @param MAXWV Spectral truncation
+
35C> @param IDRT Grid identifier
+
36C> - IDRT=4 for Gaussian grid
+
37C> - IDRT=0 for equally-spaced grid including poles
+
38C> - IDRT=256 for equally-spaced grid excluding poles
+
39C> @param IMAX Even number of longitudes
+
40C> @param JMAX Number of latitudes
+
41C> @param[out] WAVED Wave divergence field if IDIR>0
+
42C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
+
43C> @param[out] WAVEZ Wave vorticity field if IDIR>0
+
44C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
+
45C> @param[out] GRIDU Grid u-wind (E->W,N->S) if IDIR<0
+
46C> @param[out] GRIDV Grid v-wind (E->W,N->S) if IDIR<0
+
47C> @param IDIR Transform flag
+
48C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
+
49C>
+
50C> @author Iredell @date 96-02-29
+
+
51 SUBROUTINE sptezv(IROMB,MAXWV,IDRT,IMAX,JMAX,
+
52 & WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
+
53
+
54 REAL WAVED((MAXWV+1)*((IROMB+1)*MAXWV+2))
+
55 REAL WAVEZ((MAXWV+1)*((IROMB+1)*MAXWV+2))
+
56 REAL GRIDU(IMAX,JMAX)
+
57 REAL GRIDV(IMAX,JMAX)
+
58
+
59 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
60 ip=1
+
61 is=1
+
62 jn=imax
+
63 js=-jn
+
64 kw=2*mx
+
65 kg=imax*jmax
+
66 jb=1
+
67 je=(jmax+1)/2
+
68 jc=ncpus()
+
69 IF(idir.LT.0) waved=0
+
70 IF(idir.LT.0) wavez=0
+
71
+
72 CALL sptranfv(iromb,maxwv,idrt,imax,jmax,1,
+
73 & ip,is,jn,js,kw,kg,jb,je,jc,
+
74 & waved,wavez,
+
75 & gridu,gridu(1,jmax),gridv,gridv(1,jmax),idir)
+
+
76 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptezv(iromb, maxwv, idrt, imax, jmax, waved, wavez, gridu, gridv, idir)
This subprogram performs a spherical transform between spectral coefficients of divergence and curl a...
Definition sptezv.f:53
+
subroutine sptranfv(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition sptranfv.f:83
diff --git a/sptgpm_8f.html b/sptgpm_8f.html index aa4450a7..a5b84060 100644 --- a/sptgpm_8f.html +++ b/sptgpm_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpm.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgpm.f File Reference
+
sptgpm.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgpm (IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to scalar fields on a Mercator grid. More...
 
subroutine sptgpm (iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, wave, gm)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to scalar fields on a Mercator grid.
 

Detailed Description

Transform spectral scalar to Mercator.

@@ -117,8 +123,8 @@

Definition in file sptgpm.f.

Function/Subroutine Documentation

- -

◆ sptgpm()

+ +

◆ sptgpm()

diff --git a/sptgpm_8f.js b/sptgpm_8f.js index d1806195..60e05241 100644 --- a/sptgpm_8f.js +++ b/sptgpm_8f.js @@ -1,4 +1,4 @@ var sptgpm_8f = [ - [ "sptgpm", "sptgpm_8f.html#a6cffaeaa602eaae5c03166f48065158d", null ] + [ "sptgpm", "sptgpm_8f.html#af394820048449f0f00fa3bad063da328", null ] ]; \ No newline at end of file diff --git a/sptgpm_8f_source.html b/sptgpm_8f_source.html index 65c529ce..c8651788 100644 --- a/sptgpm_8f_source.html +++ b/sptgpm_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpm.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,150 +81,158 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgpm.f
+
sptgpm.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral scalar to Mercator
-
3 C> ### Program history log:
-
4 C> Date | Programmer | Comments
-
5 C> -----------|------------|---------
-
6 C> 96-02-29 | IREDELL | Initial.
-
7 C> 1998-12-15 | IREDELL | OpenMP directives inserted.
-
8 C> @author IREDELL @date 96-02-29
-
9 
-
10 C> This subprogram performs a spherical transform
-
11 C> from spectral coefficients of scalar quantities
-
12 C> to scalar fields on a Mercator grid.
-
13 C> The wave-space can be either triangular or rhomboidal.
-
14 C> The wave and grid fields may have general indexing,
-
15 C> but each wave field is in sequential 'ibm order',
-
16 C> i.e. with zonal wavenumber as the slower index.
-
17 C> The Mercator grid is identified by the location
-
18 C> of its first point and by its respective increments.
-
19 C> The transforms are all multiprocessed over sector points.
-
20 C> Transform several fields at a time to improve vectorization.
-
21 C> Subprogram can be called from a multiprocessing environment.
-
22 C>
-
23 C> @param IROMB Spectral domain shape
-
24 C> (0 for triangular, 1 for rhomboidal)
-
25 C> @param MAXWV Spectral truncation
-
26 C> @param KMAX Number of fields to transform
-
27 C> @param MI Number of points in the faster zonal direction
-
28 C> @param MJ Number of points in the slower merid direction
-
29 C> @param KWSKIP Skip number between wave fields
-
30 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
31 C> @param KGSKIP Skip number between grid fields
-
32 C> (defaults to MI*MJ if KGSKIP=0)
-
33 C> @param NISKIP Skip number between grid i-points
-
34 C> (defaults to 1 if NISKIP=0)
-
35 C> @param NJSKIP Skip number between grid j-points
-
36 C> (defaults to MI if NJSKIP=0)
-
37 C> @param RLAT1 Latitude of the first grid point in degrees
-
38 C> @param RLON1 Longitude of the first grid point in degrees
-
39 C> @param DLAT Latitude increment in degrees such that
-
40 C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
-
41 C> DLAT is negative for grids indexed southward.
-
42 C> (in terms of grid increment DY valid at latitude RLATI,
-
43 C> the latitude increment DLAT is determined as
-
44 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
-
45 C> where DPR=180/PI and RERTH is earth's radius)
-
46 C> @param DLON Longitude increment in degrees such that
-
47 C> D(LAMBDA)/D(I)=DLON where I is zonal index.
-
48 C> DLON is negative for grids indexed westward.
-
49 C> @param WAVE Wave fields
-
50 C> @param GM Mercator fields
-
51 C>
-
52 C> @author IREDELL @date 96-02-29
-
53  SUBROUTINE sptgpm(IROMB,MAXWV,KMAX,MI,MJ,
-
54  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
-
55  & RLAT1,RLON1,DLAT,DLON,WAVE,GM)
-
56 
-
57  REAL WAVE(*),GM(*)
-
58  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
59  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
60  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
61  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
62  INTEGER MP(KMAX)
-
63  REAL WTOP(2*(MAXWV+1),KMAX)
-
64  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
65  REAL F(2*MAXWV+3,2,KMAX)
-
66  REAL CLAT(MJ),SLAT(MJ),CLON(MAXWV,MI),SLON(MAXWV,MI)
-
67  parameter(pi=3.14159265358979,dpr=180./pi)
-
68 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
69 C CALCULATE PRELIMINARY CONSTANTS
-
70  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
71  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
72  mxtop=maxwv+1
-
73  idim=2*maxwv+3
-
74  kw=kwskip
-
75  kg=kgskip
-
76  ni=niskip
-
77  nj=njskip
-
78  IF(kw.EQ.0) kw=2*mx
-
79  IF(kg.EQ.0) kg=mi*mj
-
80  IF(ni.EQ.0) ni=1
-
81  IF(nj.EQ.0) nj=mi
-
82  DO i=1,mi
-
83  rlon=mod(rlon1+dlon*(i-1)+3600,360.)
-
84  DO l=1,maxwv
-
85  clon(l,i)=cos(l*rlon/dpr)
-
86  slon(l,i)=sin(l*rlon/dpr)
-
87  ENDDO
-
88  ENDDO
-
89  ye=1-log(tan((rlat1+90)/2/dpr))*dpr/dlat
-
90  DO j=1,mj
-
91  rlat=atan(exp(dlat/dpr*(j-ye)))*2*dpr-90
-
92  clat(j)=cos(rlat/dpr)
-
93  slat(j)=sin(rlat/dpr)
-
94  ENDDO
-
95  mp=0
-
96 C$OMP PARALLEL DO
-
97  DO k=1,kmax
-
98  wtop(1:2*mxtop,k)=0
-
99  ENDDO
-
100 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
101 C TRANSFORM TO GRID
-
102 C$OMP PARALLEL DO PRIVATE(PLN,PLNTOP,F,IJK)
-
103  DO j=1,mj
-
104  CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
-
105  & pln,plntop)
-
106  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
-
107  & clat(j),pln,plntop,mp,wave,wtop,f)
-
108  DO k=1,kmax
-
109  DO i=1,mi
-
110  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
-
111  gm(ijk)=f(1,1,k)
-
112  ENDDO
-
113  DO l=1,maxwv
-
114  DO i=1,mi
-
115  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
-
116  gm(ijk)=gm(ijk)+2.*(f(2*l+1,1,k)*clon(l,i)
-
117  & -f(2*l+2,1,k)*slon(l,i))
-
118  ENDDO
-
119  ENDDO
-
120  ENDDO
-
121  ENDDO
-
122 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
123  END
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgpm(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
Definition: sptgpm.f:56
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral scalar to Mercator
+
3C> ### Program history log:
+
4C> Date | Programmer | Comments
+
5C> -----------|------------|---------
+
6C> 96-02-29 | IREDELL | Initial.
+
7C> 1998-12-15 | IREDELL | OpenMP directives inserted.
+
8C> @author IREDELL @date 96-02-29
+
9
+
10C> This subprogram performs a spherical transform
+
11C> from spectral coefficients of scalar quantities
+
12C> to scalar fields on a Mercator grid.
+
13C> The wave-space can be either triangular or rhomboidal.
+
14C> The wave and grid fields may have general indexing,
+
15C> but each wave field is in sequential 'ibm order',
+
16C> i.e. with zonal wavenumber as the slower index.
+
17C> The Mercator grid is identified by the location
+
18C> of its first point and by its respective increments.
+
19C> The transforms are all multiprocessed over sector points.
+
20C> Transform several fields at a time to improve vectorization.
+
21C> Subprogram can be called from a multiprocessing environment.
+
22C>
+
23C> @param IROMB Spectral domain shape
+
24C> (0 for triangular, 1 for rhomboidal)
+
25C> @param MAXWV Spectral truncation
+
26C> @param KMAX Number of fields to transform
+
27C> @param MI Number of points in the faster zonal direction
+
28C> @param MJ Number of points in the slower merid direction
+
29C> @param KWSKIP Skip number between wave fields
+
30C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
31C> @param KGSKIP Skip number between grid fields
+
32C> (defaults to MI*MJ if KGSKIP=0)
+
33C> @param NISKIP Skip number between grid i-points
+
34C> (defaults to 1 if NISKIP=0)
+
35C> @param NJSKIP Skip number between grid j-points
+
36C> (defaults to MI if NJSKIP=0)
+
37C> @param RLAT1 Latitude of the first grid point in degrees
+
38C> @param RLON1 Longitude of the first grid point in degrees
+
39C> @param DLAT Latitude increment in degrees such that
+
40C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
+
41C> DLAT is negative for grids indexed southward.
+
42C> (in terms of grid increment DY valid at latitude RLATI,
+
43C> the latitude increment DLAT is determined as
+
44C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
+
45C> where DPR=180/PI and RERTH is earth's radius)
+
46C> @param DLON Longitude increment in degrees such that
+
47C> D(LAMBDA)/D(I)=DLON where I is zonal index.
+
48C> DLON is negative for grids indexed westward.
+
49C> @param WAVE Wave fields
+
50C> @param GM Mercator fields
+
51C>
+
52C> @author IREDELL @date 96-02-29
+
+
53 SUBROUTINE sptgpm(IROMB,MAXWV,KMAX,MI,MJ,
+
54 & KWSKIP,KGSKIP,NISKIP,NJSKIP,
+
55 & RLAT1,RLON1,DLAT,DLON,WAVE,GM)
+
56
+
57 REAL WAVE(*),GM(*)
+
58 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
59 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
60 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
61 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
62 INTEGER MP(KMAX)
+
63 REAL WTOP(2*(MAXWV+1),KMAX)
+
64 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
65 REAL F(2*MAXWV+3,2,KMAX)
+
66 REAL CLAT(MJ),SLAT(MJ),CLON(MAXWV,MI),SLON(MAXWV,MI)
+
67 parameter(pi=3.14159265358979,dpr=180./pi)
+
68C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
69C CALCULATE PRELIMINARY CONSTANTS
+
70 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
71 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
72 mxtop=maxwv+1
+
73 idim=2*maxwv+3
+
74 kw=kwskip
+
75 kg=kgskip
+
76 ni=niskip
+
77 nj=njskip
+
78 IF(kw.EQ.0) kw=2*mx
+
79 IF(kg.EQ.0) kg=mi*mj
+
80 IF(ni.EQ.0) ni=1
+
81 IF(nj.EQ.0) nj=mi
+
82 DO i=1,mi
+
83 rlon=mod(rlon1+dlon*(i-1)+3600,360.)
+
84 DO l=1,maxwv
+
85 clon(l,i)=cos(l*rlon/dpr)
+
86 slon(l,i)=sin(l*rlon/dpr)
+
87 ENDDO
+
88 ENDDO
+
89 ye=1-log(tan((rlat1+90)/2/dpr))*dpr/dlat
+
90 DO j=1,mj
+
91 rlat=atan(exp(dlat/dpr*(j-ye)))*2*dpr-90
+
92 clat(j)=cos(rlat/dpr)
+
93 slat(j)=sin(rlat/dpr)
+
94 ENDDO
+
95 mp=0
+
96C$OMP PARALLEL DO
+
97 DO k=1,kmax
+
98 wtop(1:2*mxtop,k)=0
+
99 ENDDO
+
100C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
101C TRANSFORM TO GRID
+
102C$OMP PARALLEL DO PRIVATE(PLN,PLNTOP,F,IJK)
+
103 DO j=1,mj
+
104 CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
+
105 & pln,plntop)
+
106 CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
+
107 & clat(j),pln,plntop,mp,wave,wtop,f)
+
108 DO k=1,kmax
+
109 DO i=1,mi
+
110 ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
+
111 gm(ijk)=f(1,1,k)
+
112 ENDDO
+
113 DO l=1,maxwv
+
114 DO i=1,mi
+
115 ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
+
116 gm(ijk)=gm(ijk)+2.*(f(2*l+1,1,k)*clon(l,i)
+
117 & -f(2*l+2,1,k)*slon(l,i))
+
118 ENDDO
+
119 ENDDO
+
120 ENDDO
+
121 ENDDO
+
122C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
123 END
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgpm(iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, wave, gm)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
Definition sptgpm.f:56
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgpmd_8f.html b/sptgpmd_8f.html index b5ce380c..85449acc 100644 --- a/sptgpmd_8f.html +++ b/sptgpmd_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpmd.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgpmd.f File Reference
+
sptgpmd.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgpmd (IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, XM, YM)
 This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradient fields on a Mercator grid. More...
 
subroutine sptgpmd (iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, wave, xm, ym)
 This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradient fields on a Mercator grid.
 

Detailed Description

Transform spectral to Mercator gradients.

@@ -107,8 +113,8 @@

Definition in file sptgpmd.f.

Function/Subroutine Documentation

- -

◆ sptgpmd()

+ +

◆ sptgpmd()

diff --git a/sptgpmd_8f.js b/sptgpmd_8f.js index 37a6a937..fe7f38e7 100644 --- a/sptgpmd_8f.js +++ b/sptgpmd_8f.js @@ -1,4 +1,4 @@ var sptgpmd_8f = [ - [ "sptgpmd", "sptgpmd_8f.html#af71718c75a2b24b74fa7e1e4318d0539", null ] + [ "sptgpmd", "sptgpmd_8f.html#acdf282fa111309371a14dc75896abc27", null ] ]; \ No newline at end of file diff --git a/sptgpmd_8f_source.html b/sptgpmd_8f_source.html index 2f78312e..46317864 100644 --- a/sptgpmd_8f_source.html +++ b/sptgpmd_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpmd.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,108 +81,116 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgpmd.f
+
sptgpmd.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral to Mercator gradients.
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs a spherical transform
-
6 C> from spectral coefficients of scalar fields
-
7 C> to gradient fields on a Mercator grid.
-
8 C>
-
9 C> The wave-space can be either triangular or rhomboidal.
-
10 C> The wave and grid fields may have general indexing,
-
11 C> but each wave field is in sequential 'IBM order',
-
12 C> i.e. with zonal wavenumber as the slower index.
-
13 C>
-
14 C> The Mercator grid is identified by the location
-
15 C> of its first point and by its respective increments.
-
16 C>
-
17 C> The transforms are all multiprocessed over sector points.
-
18 C>
-
19 C> Transform several fields at a time to improve vectorization.
-
20 C> Subprogram can be called from a multiprocessing environment.
-
21 C>
-
22 C> @param IROMB Spectral domain shape
-
23 C> (0 for triangular, 1 for rhomboidal)
-
24 C> @param MAXWV Spectral truncation
-
25 C> @param KMAX Number of fields to transform
-
26 C> @param MI Number of points in the faster zonal direction
-
27 C> @param MJ Number of points in the slower merid direction
-
28 C> @param KWSKIP Skip number between wave fields
-
29 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
30 C> @param KGSKIP Skip number between grid fields
-
31 C> (defaults to MI*MJ if KGSKIP=0)
-
32 C> @param NISKIP Skip number between grid i-points
-
33 C> (defaults to 1 if NISKIP=0)
-
34 C> @param NJSKIP Skip number between grid j-points
-
35 C> (defaults to MI if NJSKIP=0)
-
36 C> @param RLAT1 Latitude of the first grid point in degrees
-
37 C> @param RLON1 Longitude of the first grid point in degrees
-
38 C> @param DLAT Latitude increment in degrees such that
-
39 C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
-
40 C> DLAT is negative for grids indexed southward.
-
41 C> (in terms of grid increment dy valid at latitude RLATI,
-
42 C> the latitude increment DLAT is determined as
-
43 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
-
44 C> where DPR=180/PI and RERTH is Earth's radius)
-
45 C> @param DLON Longitude increment in degrees such that
-
46 C> D(LAMBDA)/D(I)=DLON where I is zonal index.
-
47 C> DLON is negative for grids indexed westward.
-
48 C> @param WAVE Wave fields
-
49 C> @param XM Mercator x-gradients
-
50 C> @param YM Mercator y-gradients
-
51 C>
-
52 C> @author Iredell @date 96-02-29
-
53  SUBROUTINE sptgpmd(IROMB,MAXWV,KMAX,MI,MJ,
-
54  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
-
55  & RLAT1,RLON1,DLAT,DLON,WAVE,XM,YM)
-
56 
-
57  REAL WAVE(*),XM(*),YM(*)
-
58  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
59  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
60  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
61  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
62  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
63  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
64 
-
65 C CALCULATE PRELIMINARY CONSTANTS
-
66  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
67  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
68  mdim=2*mx+1
-
69  kw=kwskip
-
70  IF(kw.EQ.0) kw=2*mx
-
71 
-
72 C CALCULATE GRADIENTS
-
73 C$OMP PARALLEL DO PRIVATE(KWS)
-
74  DO k=1,kmax
-
75  kws=(k-1)*kw
-
76  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
-
77  wz(1:2*mx,k)=0.
-
78  ENDDO
-
79  CALL sptgpmv(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
-
80  & rlat1,rlon1,dlat,dlon,wd,wz,xm,ym)
-
81  END
-
subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition: splaplac.f:25
-
subroutine sptgpmd(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, XM, YM)
This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradien...
Definition: sptgpmd.f:56
-
subroutine sptgpmv(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition: sptgpmv.f:63
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral to Mercator gradients.
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs a spherical transform
+
6C> from spectral coefficients of scalar fields
+
7C> to gradient fields on a Mercator grid.
+
8C>
+
9C> The wave-space can be either triangular or rhomboidal.
+
10C> The wave and grid fields may have general indexing,
+
11C> but each wave field is in sequential 'IBM order',
+
12C> i.e. with zonal wavenumber as the slower index.
+
13C>
+
14C> The Mercator grid is identified by the location
+
15C> of its first point and by its respective increments.
+
16C>
+
17C> The transforms are all multiprocessed over sector points.
+
18C>
+
19C> Transform several fields at a time to improve vectorization.
+
20C> Subprogram can be called from a multiprocessing environment.
+
21C>
+
22C> @param IROMB Spectral domain shape
+
23C> (0 for triangular, 1 for rhomboidal)
+
24C> @param MAXWV Spectral truncation
+
25C> @param KMAX Number of fields to transform
+
26C> @param MI Number of points in the faster zonal direction
+
27C> @param MJ Number of points in the slower merid direction
+
28C> @param KWSKIP Skip number between wave fields
+
29C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
30C> @param KGSKIP Skip number between grid fields
+
31C> (defaults to MI*MJ if KGSKIP=0)
+
32C> @param NISKIP Skip number between grid i-points
+
33C> (defaults to 1 if NISKIP=0)
+
34C> @param NJSKIP Skip number between grid j-points
+
35C> (defaults to MI if NJSKIP=0)
+
36C> @param RLAT1 Latitude of the first grid point in degrees
+
37C> @param RLON1 Longitude of the first grid point in degrees
+
38C> @param DLAT Latitude increment in degrees such that
+
39C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
+
40C> DLAT is negative for grids indexed southward.
+
41C> (in terms of grid increment dy valid at latitude RLATI,
+
42C> the latitude increment DLAT is determined as
+
43C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
+
44C> where DPR=180/PI and RERTH is Earth's radius)
+
45C> @param DLON Longitude increment in degrees such that
+
46C> D(LAMBDA)/D(I)=DLON where I is zonal index.
+
47C> DLON is negative for grids indexed westward.
+
48C> @param WAVE Wave fields
+
49C> @param XM Mercator x-gradients
+
50C> @param YM Mercator y-gradients
+
51C>
+
52C> @author Iredell @date 96-02-29
+
+
53 SUBROUTINE sptgpmd(IROMB,MAXWV,KMAX,MI,MJ,
+
54 & KWSKIP,KGSKIP,NISKIP,NJSKIP,
+
55 & RLAT1,RLON1,DLAT,DLON,WAVE,XM,YM)
+
56
+
57 REAL WAVE(*),XM(*),YM(*)
+
58 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
59 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
60 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
61 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
62 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
63 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
64
+
65C CALCULATE PRELIMINARY CONSTANTS
+
66 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
67 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
68 mdim=2*mx+1
+
69 kw=kwskip
+
70 IF(kw.EQ.0) kw=2*mx
+
71
+
72C CALCULATE GRADIENTS
+
73C$OMP PARALLEL DO PRIVATE(KWS)
+
74 DO k=1,kmax
+
75 kws=(k-1)*kw
+
76 CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
+
77 wz(1:2*mx,k)=0.
+
78 ENDDO
+
79 CALL sptgpmv(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
+
80 & rlat1,rlon1,dlat,dlon,wd,wz,xm,ym)
+
+
81 END
+
subroutine splaplac(i, m, enn1, q, qd2, idir)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition splaplac.f:25
+
subroutine sptgpmd(iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, wave, xm, ym)
This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradien...
Definition sptgpmd.f:56
+
subroutine sptgpmv(iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, waved, wavez, um, vm)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition sptgpmv.f:63
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgpmv_8f.html b/sptgpmv_8f.html index fdaeed43..b1297421 100644 --- a/sptgpmv_8f.html +++ b/sptgpmv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpmv.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgpmv.f File Reference
+
sptgpmv.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgpmv (IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to vector fields on a Mercator grid. More...
 
subroutine sptgpmv (iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, waved, wavez, um, vm)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to vector fields on a Mercator grid.
 

Detailed Description

Transform spectral vector to Mercator.

@@ -117,8 +123,8 @@

Definition in file sptgpmv.f.

Function/Subroutine Documentation

- -

◆ sptgpmv()

+ +

◆ sptgpmv()

diff --git a/sptgpmv_8f.js b/sptgpmv_8f.js index a46a2628..366991d2 100644 --- a/sptgpmv_8f.js +++ b/sptgpmv_8f.js @@ -1,4 +1,4 @@ var sptgpmv_8f = [ - [ "sptgpmv", "sptgpmv_8f.html#a15de3accfd448d116324872c8fb1bb17", null ] + [ "sptgpmv", "sptgpmv_8f.html#aea2ea8b5f0676be7fc5c15968b08d3c8", null ] ]; \ No newline at end of file diff --git a/sptgpmv_8f_source.html b/sptgpmv_8f_source.html index 71c666ac..fdcd06a5 100644 --- a/sptgpmv_8f_source.html +++ b/sptgpmv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpmv.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,170 +81,178 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgpmv.f
+
sptgpmv.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral vector to Mercator
-
3 C> ### Program history log:
-
4 C> Date | Programmer | Comments
-
5 C> -----|------------|----------
-
6 C> 96-02-29 | IREDELL | Initial.
-
7 C> 1998-12-15 | IREDELL | OpenMP directives inserted.
-
8 C> @author IREDELL @date 96-02-29
-
9 
-
10 C> This subprogram performs a spherical transform
-
11 C> from spectral coefficients of divergences and curls
-
12 C> to vector fields on a Mercator grid.
-
13 C>
-
14 C> The wave-space can be either triangular or rhomboidal.
-
15 C>
-
16 C> The wave and grid fields may have general indexing,
-
17 C> but each wave field is in sequential 'ibm order',
-
18 C> i.e., with zonal wavenumber as the slower index.
-
19 C>
-
20 C> The Mercator grid is identified by the location
-
21 C> of its first point and by its respective increments.
-
22 C>
-
23 C> The transforms are all multiprocessed over sector points.
-
24 C> Transform several fields at a time to improve vectorization.
-
25 C>
-
26 C> Subprogram can be called from a multiprocessing environment.
-
27 C>
-
28 C> @param IROMB Spectral domain shape
-
29 C> (0 for triangular, 1 for rhomboidal)
-
30 C> @param MAXWV Spectral truncation
-
31 C> @param KMAX Number of fields to transform
-
32 C> @param MI Number of points in the faster zonal direction
-
33 C> @param MJ Number of points in the slower merid direction
-
34 C> @param KWSKIP Skip number between wave fields
-
35 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
36 C> @param KGSKIP Skip number between grid fields
-
37 C> (defaults to MI*MJ if KGSKIP=0)
-
38 C> @param NISKIP Skip number between grid i-points
-
39 C> (defaults to 1 if NISKIP=0)
-
40 C> @param NJSKIP Skip number between grid j-points
-
41 C> (defaults to MI if NJSKIP=0)
-
42 C> @param RLAT1 Latitude of the first grid point in degrees
-
43 C> @param RLON1 Longitude of the first grid point in degrees
-
44 C> @param DLAT Latitude increment in degrees such that
-
45 C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
-
46 C> DLAT is negative for grids indexed southward.
-
47 C> (in terms of grid increment dy valid at latitude RLATI,
-
48 C> The latitude increment DLAT is determined as
-
49 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
-
50 C> where DPR=180/PI and RERTH is Earth's radius)
-
51 C> @param DLON longitude increment in degrees such that
-
52 C> D(LAMBDA)/D(I)=DLON where I is zonal index.
-
53 C> DLON is negative for grids indexed westward.
-
54 C> @param WAVED Wave divergence fields
-
55 C> @param WAVEZ Wave vorticity fields
-
56 C> @param UM Mercator u-winds
-
57 C> @param VM Mercator v-winds
-
58 C>
-
59 C> @author IREDELL @date 96-02-29
-
60  SUBROUTINE sptgpmv(IROMB,MAXWV,KMAX,MI,MJ,
-
61  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
-
62  & RLAT1,RLON1,DLAT,DLON,WAVED,WAVEZ,UM,VM)
-
63 
-
64  REAL WAVED(*),WAVEZ(*),UM(*),VM(*)
-
65  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
66  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
67  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
68  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
69  INTEGER MP(2*KMAX)
-
70  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
-
71  REAL WTOP(2*(MAXWV+1),2*KMAX)
-
72  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
73  REAL F(2*MAXWV+3,2,2*KMAX)
-
74  REAL CLAT(MJ),SLAT(MJ),CLON(MAXWV,MI),SLON(MAXWV,MI)
-
75  parameter(pi=3.14159265358979,dpr=180./pi)
-
76 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
77 C CALCULATE PRELIMINARY CONSTANTS
-
78  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
79  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
80  mxtop=maxwv+1
-
81  mdim=2*mx+1
-
82  idim=2*maxwv+3
-
83  kw=kwskip
-
84  kg=kgskip
-
85  ni=niskip
-
86  nj=njskip
-
87  IF(kw.EQ.0) kw=2*mx
-
88  IF(kg.EQ.0) kg=mi*mj
-
89  IF(ni.EQ.0) ni=1
-
90  IF(nj.EQ.0) nj=mi
-
91  DO i=1,mi
-
92  rlon=mod(rlon1+dlon*(i-1)+3600,360.)
-
93  DO l=1,maxwv
-
94  clon(l,i)=cos(l*rlon/dpr)
-
95  slon(l,i)=sin(l*rlon/dpr)
-
96  ENDDO
-
97  ENDDO
-
98  ye=1-log(tan((rlat1+90)/2/dpr))*dpr/dlat
-
99  DO j=1,mj
-
100  rlat=atan(exp(dlat/dpr*(j-ye)))*2*dpr-90
-
101  clat(j)=cos(rlat/dpr)
-
102  slat(j)=sin(rlat/dpr)
-
103  ENDDO
-
104  mp=1
-
105 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
106 C CALCULATE SPECTRAL WINDS
-
107 C$OMP PARALLEL DO PRIVATE(KWS)
-
108  DO k=1,kmax
-
109  kws=(k-1)*kw
-
110  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
-
111  & waved(kws+1),wavez(kws+1),
-
112  & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
-
113  ENDDO
-
114 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
115 C TRANSFORM TO GRID
-
116 C$OMP PARALLEL DO PRIVATE(PLN,PLNTOP,F,KU,KV,IJK)
-
117  DO j=1,mj
-
118  CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
-
119  & pln,plntop)
-
120  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
-
121  & clat(j),pln,plntop,mp,w,wtop,f)
-
122  DO k=1,kmax
-
123  ku=k
-
124  kv=k+kmax
-
125  DO i=1,mi
-
126  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
-
127  um(ijk)=f(1,1,ku)
-
128  vm(ijk)=f(1,1,kv)
-
129  ENDDO
-
130  DO l=1,maxwv
-
131  DO i=1,mi
-
132  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
-
133  um(ijk)=um(ijk)+2.*(f(2*l+1,1,ku)*clon(l,i)
-
134  & -f(2*l+2,1,ku)*slon(l,i))
-
135  vm(ijk)=vm(ijk)+2.*(f(2*l+1,1,kv)*clon(l,i)
-
136  & -f(2*l+2,1,kv)*slon(l,i))
-
137  ENDDO
-
138  ENDDO
-
139  ENDDO
-
140  ENDDO
-
141 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
142  END
-
subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
Computes the wind components from divergence and vorticity in spectral space.
Definition: spdz2uv.f:49
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgpmv(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition: sptgpmv.f:63
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral vector to Mercator
+
3C> ### Program history log:
+
4C> Date | Programmer | Comments
+
5C> -----|------------|----------
+
6C> 96-02-29 | IREDELL | Initial.
+
7C> 1998-12-15 | IREDELL | OpenMP directives inserted.
+
8C> @author IREDELL @date 96-02-29
+
9
+
10C> This subprogram performs a spherical transform
+
11C> from spectral coefficients of divergences and curls
+
12C> to vector fields on a Mercator grid.
+
13C>
+
14C> The wave-space can be either triangular or rhomboidal.
+
15C>
+
16C> The wave and grid fields may have general indexing,
+
17C> but each wave field is in sequential 'ibm order',
+
18C> i.e., with zonal wavenumber as the slower index.
+
19C>
+
20C> The Mercator grid is identified by the location
+
21C> of its first point and by its respective increments.
+
22C>
+
23C> The transforms are all multiprocessed over sector points.
+
24C> Transform several fields at a time to improve vectorization.
+
25C>
+
26C> Subprogram can be called from a multiprocessing environment.
+
27C>
+
28C> @param IROMB Spectral domain shape
+
29C> (0 for triangular, 1 for rhomboidal)
+
30C> @param MAXWV Spectral truncation
+
31C> @param KMAX Number of fields to transform
+
32C> @param MI Number of points in the faster zonal direction
+
33C> @param MJ Number of points in the slower merid direction
+
34C> @param KWSKIP Skip number between wave fields
+
35C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
36C> @param KGSKIP Skip number between grid fields
+
37C> (defaults to MI*MJ if KGSKIP=0)
+
38C> @param NISKIP Skip number between grid i-points
+
39C> (defaults to 1 if NISKIP=0)
+
40C> @param NJSKIP Skip number between grid j-points
+
41C> (defaults to MI if NJSKIP=0)
+
42C> @param RLAT1 Latitude of the first grid point in degrees
+
43C> @param RLON1 Longitude of the first grid point in degrees
+
44C> @param DLAT Latitude increment in degrees such that
+
45C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
+
46C> DLAT is negative for grids indexed southward.
+
47C> (in terms of grid increment dy valid at latitude RLATI,
+
48C> The latitude increment DLAT is determined as
+
49C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
+
50C> where DPR=180/PI and RERTH is Earth's radius)
+
51C> @param DLON longitude increment in degrees such that
+
52C> D(LAMBDA)/D(I)=DLON where I is zonal index.
+
53C> DLON is negative for grids indexed westward.
+
54C> @param WAVED Wave divergence fields
+
55C> @param WAVEZ Wave vorticity fields
+
56C> @param UM Mercator u-winds
+
57C> @param VM Mercator v-winds
+
58C>
+
59C> @author IREDELL @date 96-02-29
+
+
60 SUBROUTINE sptgpmv(IROMB,MAXWV,KMAX,MI,MJ,
+
61 & KWSKIP,KGSKIP,NISKIP,NJSKIP,
+
62 & RLAT1,RLON1,DLAT,DLON,WAVED,WAVEZ,UM,VM)
+
63
+
64 REAL WAVED(*),WAVEZ(*),UM(*),VM(*)
+
65 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
66 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
67 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
68 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
69 INTEGER MP(2*KMAX)
+
70 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
+
71 REAL WTOP(2*(MAXWV+1),2*KMAX)
+
72 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
73 REAL F(2*MAXWV+3,2,2*KMAX)
+
74 REAL CLAT(MJ),SLAT(MJ),CLON(MAXWV,MI),SLON(MAXWV,MI)
+
75 parameter(pi=3.14159265358979,dpr=180./pi)
+
76C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
77C CALCULATE PRELIMINARY CONSTANTS
+
78 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
79 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
80 mxtop=maxwv+1
+
81 mdim=2*mx+1
+
82 idim=2*maxwv+3
+
83 kw=kwskip
+
84 kg=kgskip
+
85 ni=niskip
+
86 nj=njskip
+
87 IF(kw.EQ.0) kw=2*mx
+
88 IF(kg.EQ.0) kg=mi*mj
+
89 IF(ni.EQ.0) ni=1
+
90 IF(nj.EQ.0) nj=mi
+
91 DO i=1,mi
+
92 rlon=mod(rlon1+dlon*(i-1)+3600,360.)
+
93 DO l=1,maxwv
+
94 clon(l,i)=cos(l*rlon/dpr)
+
95 slon(l,i)=sin(l*rlon/dpr)
+
96 ENDDO
+
97 ENDDO
+
98 ye=1-log(tan((rlat1+90)/2/dpr))*dpr/dlat
+
99 DO j=1,mj
+
100 rlat=atan(exp(dlat/dpr*(j-ye)))*2*dpr-90
+
101 clat(j)=cos(rlat/dpr)
+
102 slat(j)=sin(rlat/dpr)
+
103 ENDDO
+
104 mp=1
+
105C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
106C CALCULATE SPECTRAL WINDS
+
107C$OMP PARALLEL DO PRIVATE(KWS)
+
108 DO k=1,kmax
+
109 kws=(k-1)*kw
+
110 CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
+
111 & waved(kws+1),wavez(kws+1),
+
112 & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
+
113 ENDDO
+
114C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
115C TRANSFORM TO GRID
+
116C$OMP PARALLEL DO PRIVATE(PLN,PLNTOP,F,KU,KV,IJK)
+
117 DO j=1,mj
+
118 CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
+
119 & pln,plntop)
+
120 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
+
121 & clat(j),pln,plntop,mp,w,wtop,f)
+
122 DO k=1,kmax
+
123 ku=k
+
124 kv=k+kmax
+
125 DO i=1,mi
+
126 ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
+
127 um(ijk)=f(1,1,ku)
+
128 vm(ijk)=f(1,1,kv)
+
129 ENDDO
+
130 DO l=1,maxwv
+
131 DO i=1,mi
+
132 ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
+
133 um(ijk)=um(ijk)+2.*(f(2*l+1,1,ku)*clon(l,i)
+
134 & -f(2*l+2,1,ku)*slon(l,i))
+
135 vm(ijk)=vm(ijk)+2.*(f(2*l+1,1,kv)*clon(l,i)
+
136 & -f(2*l+2,1,kv)*slon(l,i))
+
137 ENDDO
+
138 ENDDO
+
139 ENDDO
+
140 ENDDO
+
141C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
142 END
+
subroutine spdz2uv(i, m, enn1, elonn1, eon, eontop, d, z, u, v, utop, vtop)
Computes the wind components from divergence and vorticity in spectral space.
Definition spdz2uv.f:49
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgpmv(iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, waved, wavez, um, vm)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition sptgpmv.f:63
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgps_8f.html b/sptgps_8f.html index 8b17dee0..7c0442a5 100644 --- a/sptgps_8f.html +++ b/sptgps_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgps.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgps.f File Reference
+
sptgps.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgps (IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to scalar fields on a pair of polar stereographic grids. More...
 
subroutine sptgps (iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, wave, gn, gs)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to scalar fields on a pair of polar stereographic grids.
 

Detailed Description

Transform spectral scalar to polar stereo.

@@ -117,8 +123,8 @@

Definition in file sptgps.f.

Function/Subroutine Documentation

- -

◆ sptgps()

+ +

◆ sptgps()

diff --git a/sptgps_8f.js b/sptgps_8f.js index 8cdfa429..b29310a2 100644 --- a/sptgps_8f.js +++ b/sptgps_8f.js @@ -1,4 +1,4 @@ var sptgps_8f = [ - [ "sptgps", "sptgps_8f.html#af06a2dccfa311014fc9f671b14f247b2", null ] + [ "sptgps", "sptgps_8f.html#a501a1f1d587c5372a80ae1a2d7ea467e", null ] ]; \ No newline at end of file diff --git a/sptgps_8f_source.html b/sptgps_8f_source.html index 3aac1362..d6f3d122 100644 --- a/sptgps_8f_source.html +++ b/sptgps_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgps.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,574 +81,582 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgps.f
+
sptgps.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral scalar to polar stereo.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | Iredell | Initial.
-
8 C> 1998-12-15 | Iredell | Openmp directives inserted.
-
9 C>
-
10 C> @author Iredell @date 96-02-29
-
11 
-
12 C> This subprogram performs a spherical transform
-
13 C> from spectral coefficients of scalar quantities
-
14 C> to scalar fields on a pair of polar stereographic grids.
-
15 C>
-
16 C> The wave-space can be either triangular or rhomboidal.
-
17 C>
-
18 C> The wave and grid fields may have general indexing,
-
19 C> but each wave field is in sequential 'IBM order',
-
20 C> i.e. with zonal wavenumber as the slower index.
-
21 C>
-
22 C> The two square polar stereographic grids are centered
-
23 C> on the respective poles, with the orientation longitude
-
24 C> of the southern hemisphere grid 180 degrees opposite
-
25 C> that of the northern hemisphere grid.
-
26 C>
-
27 C> The transform is made efficient
-
28 C> by combining points in eight sectors
-
29 C> of each polar stereographic grid,
-
30 C> numbered as in the diagram below.
-
31 C>
-
32 C> The pole and the sector boundaries
-
33 C> are treated specially in the code.
-
34 C>
-
35 C> Unfortunately, this approach induces
-
36 C> some hairy indexing and code loquacity.
-
37 C>
-
38 C> <pre>
-
39 C> \ 4 | 5 /
-
40 C> \ | /
-
41 C> 3 \ | / 6
-
42 C> \|/
-
43 C> ----+----
-
44 C> /|\
-
45 C> 2 / | \ 7
-
46 C> / | \
-
47 C> / 1 | 8 \
-
48 C> </pre>
-
49 C>
-
50 C> The transforms are all multiprocessed over sector points.
-
51 C>
-
52 C> Transform several fields at a time to improve vectorization.
-
53 C>
-
54 C> Subprogram can be called from a multiprocessing environment.
-
55 C>
-
56 C> @param IROMB spectral domain shape
-
57 C> (0 for triangular, 1 for rhomboidal)
-
58 C> @param MAXWV spectral truncation
-
59 C> @param KMAX number of fields to transform.
-
60 C> @param NPS odd order of the polar stereographic grids.
-
61 C> @param KWSKIP skip number between wave fields
-
62 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
63 C> @param KGSKIP skip number between grid fields
-
64 C> (defaults to NPS*NPS if KGSKIP=0)
-
65 C> @param NISKIP skip number between grid i-points
-
66 C> (defaults to 1 if NISKIP=0)
-
67 C> @param NJSKIP skip number between grid j-points
-
68 C> (defaults to NPS if NJSKIP=0)
-
69 C> @param TRUE latitude at which ps grid is true (usually 60.)
-
70 C> @param XMESH grid length at true latitude (m)
-
71 C> @param ORIENT longitude at bottom of northern ps grid
-
72 C> (southern ps grid will have opposite orientation.)
-
73 C> @param WAVE wave fields
-
74 C> @param GN northern polar stereographic fields
-
75 C> @param GS southern polar stereographic fields
-
76 C>
-
77 C> @author Iredell @date 96-02-29
-
78  SUBROUTINE sptgps(IROMB,MAXWV,KMAX,NPS,
-
79  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
-
80  & TRUE,XMESH,ORIENT,WAVE,GN,GS)
-
81 
-
82  REAL WAVE(*),GN(*),GS(*)
-
83  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
84  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
85  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
86  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
87  INTEGER MP(KMAX)
-
88  REAL SLON(MAXWV,8),CLON(MAXWV,8),SROT(0:3),CROT(0:3)
-
89  REAL WTOP(2*(MAXWV+1),KMAX)
-
90  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
91  REAL F(2*MAXWV+3,2,KMAX)
-
92  DATA srot/0.,1.,0.,-1./,crot/1.,0.,-1.,0./
-
93  parameter(rerth=6.3712e6)
-
94  parameter(pi=3.14159265358979,dpr=180./pi)
-
95 
-
96 C CALCULATE PRELIMINARY CONSTANTS
-
97  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
98  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
99  mxtop=maxwv+1
-
100  idim=2*maxwv+3
-
101  kw=kwskip
-
102  kg=kgskip
-
103  ni=niskip
-
104  nj=njskip
-
105  IF(kw.EQ.0) kw=2*mx
-
106  IF(kg.EQ.0) kg=nps*nps
-
107  IF(ni.EQ.0) ni=1
-
108  IF(nj.EQ.0) nj=nps
-
109  mp=0
-
110  nph=(nps-1)/2
-
111  gq=((1.+sin(true/dpr))*rerth/xmesh)**2
-
112 C$OMP PARALLEL DO
-
113  DO k=1,kmax
-
114  wtop(1:2*mxtop,k)=0
-
115  ENDDO
-
116 
-
117 C CALCULATE POLE POINT
-
118  i1=nph+1
-
119  j1=nph+1
-
120  ij1=(i1-1)*ni+(j1-1)*nj+1
-
121  slat1=1.
-
122  clat1=0.
-
123  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
124  & pln,plntop)
-
125  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
-
126  & clat1,pln,plntop,mp,wave,wtop,f)
-
127 CDIR$ IVDEP
-
128  DO k=1,kmax
-
129  ijk1=ij1+(k-1)*kg
-
130  gn(ijk1)=f(1,1,k)
-
131  gs(ijk1)=f(1,2,k)
-
132  ENDDO
-
133 
-
134 C CALCULATE POINTS ALONG THE ROW AND COLUMN OF THE POLE,
-
135 C STARTING AT THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
-
136 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
-
137 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
-
138 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
-
139 C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
-
140 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
-
141  DO j1=1,nph
-
142  i1=nph+1
-
143  radlon=orient/dpr
-
144  j3=nps+1-i1
-
145  i3=j1
-
146  j5=nps+1-j1
-
147  i5=nps+1-i1
-
148  j7=i1
-
149  i7=nps+1-j1
-
150  ij1=(i1-1)*ni+(j1-1)*nj+1
-
151  ij3=(i3-1)*ni+(j3-1)*nj+1
-
152  ij5=(i5-1)*ni+(j5-1)*nj+1
-
153  ij7=(i7-1)*ni+(j7-1)*nj+1
-
154  di1=i1-nph-1
-
155  dj1=j1-nph-1
-
156  rq=di1**2+dj1**2
-
157  slat1=(gq-rq)/(gq+rq)
-
158  clat1=sqrt(1.-slat1**2)
-
159  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
160  & pln,plntop)
-
161  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
-
162  & clat1,pln,plntop,mp,wave,wtop,f)
-
163  DO l=1,maxwv
-
164  slon(l,1)=sin(l*radlon)
-
165  clon(l,1)=cos(l*radlon)
-
166  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
-
167  & -clon(l,1)*srot(mod(1*l,4))
-
168  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
-
169  & +slon(l,1)*srot(mod(1*l,4))
-
170  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
-
171  & -clon(l,1)*srot(mod(2*l,4))
-
172  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
-
173  & +slon(l,1)*srot(mod(2*l,4))
-
174  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
-
175  & -clon(l,1)*srot(mod(3*l,4))
-
176  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
-
177  & +slon(l,1)*srot(mod(3*l,4))
-
178  ENDDO
-
179 CDIR$ IVDEP
-
180  DO k=1,kmax
-
181  ijk1=ij1+(k-1)*kg
-
182  ijk3=ij3+(k-1)*kg
-
183  ijk5=ij5+(k-1)*kg
-
184  ijk7=ij7+(k-1)*kg
-
185  gn(ijk1)=f(1,1,k)
-
186  gn(ijk3)=f(1,1,k)
-
187  gn(ijk5)=f(1,1,k)
-
188  gn(ijk7)=f(1,1,k)
-
189  gs(ijk1)=f(1,2,k)
-
190  gs(ijk3)=f(1,2,k)
-
191  gs(ijk5)=f(1,2,k)
-
192  gs(ijk7)=f(1,2,k)
-
193  ENDDO
-
194  IF(kmax.EQ.1) THEN
-
195  DO l=1,maxwv
-
196  lr=2*l+1
-
197  li=2*l+2
-
198  gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
-
199  & -f(li,1,1)*slon(l,1))
-
200  gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
-
201  & -f(li,1,1)*slon(l,3))
-
202  gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
-
203  & -f(li,1,1)*slon(l,5))
-
204  gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
-
205  & -f(li,1,1)*slon(l,7))
-
206  gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,5)
-
207  & -f(li,2,1)*slon(l,5))
-
208  gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,3)
-
209  & -f(li,2,1)*slon(l,3))
-
210  gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,1)
-
211  & -f(li,2,1)*slon(l,1))
-
212  gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,7)
-
213  & -f(li,2,1)*slon(l,7))
-
214  ENDDO
-
215  ELSE
-
216  DO l=1,maxwv
-
217  lr=2*l+1
-
218  li=2*l+2
-
219 CDIR$ IVDEP
-
220  DO k=1,kmax
-
221  ijk1=ij1+(k-1)*kg
-
222  ijk3=ij3+(k-1)*kg
-
223  ijk5=ij5+(k-1)*kg
-
224  ijk7=ij7+(k-1)*kg
-
225  gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
-
226  & -f(li,1,k)*slon(l,1))
-
227  gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
-
228  & -f(li,1,k)*slon(l,3))
-
229  gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
-
230  & -f(li,1,k)*slon(l,5))
-
231  gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
-
232  & -f(li,1,k)*slon(l,7))
-
233  gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,5)
-
234  & -f(li,2,k)*slon(l,5))
-
235  gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,3)
-
236  & -f(li,2,k)*slon(l,3))
-
237  gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,1)
-
238  & -f(li,2,k)*slon(l,1))
-
239  gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,7)
-
240  & -f(li,2,k)*slon(l,7))
-
241  ENDDO
-
242  ENDDO
-
243  ENDIF
-
244  ENDDO
-
245 
-
246 C CALCULATE POINTS ON THE MAIN DIAGONALS THROUGH THE POLE,
-
247 C STARTING CLOCKWISE OF THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
-
248 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
-
249 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
-
250 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
-
251 C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
-
252 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
-
253  DO j1=1,nph
-
254  i1=j1
-
255  radlon=(orient-45)/dpr
-
256  j3=nps+1-i1
-
257  i3=j1
-
258  j5=nps+1-j1
-
259  i5=nps+1-i1
-
260  j7=i1
-
261  i7=nps+1-j1
-
262  ij1=(i1-1)*ni+(j1-1)*nj+1
-
263  ij3=(i3-1)*ni+(j3-1)*nj+1
-
264  ij5=(i5-1)*ni+(j5-1)*nj+1
-
265  ij7=(i7-1)*ni+(j7-1)*nj+1
-
266  di1=i1-nph-1
-
267  dj1=j1-nph-1
-
268  rq=di1**2+dj1**2
-
269  slat1=(gq-rq)/(gq+rq)
-
270  clat1=sqrt(1.-slat1**2)
-
271  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
272  & pln,plntop)
-
273  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
-
274  & clat1,pln,plntop,mp,wave,wtop,f)
-
275  DO l=1,maxwv
-
276  slon(l,1)=sin(l*radlon)
-
277  clon(l,1)=cos(l*radlon)
-
278  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
-
279  & -clon(l,1)*srot(mod(1*l,4))
-
280  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
-
281  & +slon(l,1)*srot(mod(1*l,4))
-
282  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
-
283  & -clon(l,1)*srot(mod(2*l,4))
-
284  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
-
285  & +slon(l,1)*srot(mod(2*l,4))
-
286  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
-
287  & -clon(l,1)*srot(mod(3*l,4))
-
288  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
-
289  & +slon(l,1)*srot(mod(3*l,4))
-
290  ENDDO
-
291 CDIR$ IVDEP
-
292  DO k=1,kmax
-
293  ijk1=ij1+(k-1)*kg
-
294  ijk3=ij3+(k-1)*kg
-
295  ijk5=ij5+(k-1)*kg
-
296  ijk7=ij7+(k-1)*kg
-
297  gn(ijk1)=f(1,1,k)
-
298  gn(ijk3)=f(1,1,k)
-
299  gn(ijk5)=f(1,1,k)
-
300  gn(ijk7)=f(1,1,k)
-
301  gs(ijk1)=f(1,2,k)
-
302  gs(ijk3)=f(1,2,k)
-
303  gs(ijk5)=f(1,2,k)
-
304  gs(ijk7)=f(1,2,k)
-
305  ENDDO
-
306  IF(kmax.EQ.1) THEN
-
307  DO l=1,maxwv
-
308  lr=2*l+1
-
309  li=2*l+2
-
310  gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
-
311  & -f(li,1,1)*slon(l,1))
-
312  gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
-
313  & -f(li,1,1)*slon(l,3))
-
314  gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
-
315  & -f(li,1,1)*slon(l,5))
-
316  gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
-
317  & -f(li,1,1)*slon(l,7))
-
318  gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,3)
-
319  & -f(li,2,1)*slon(l,3))
-
320  gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,1)
-
321  & -f(li,2,1)*slon(l,1))
-
322  gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,7)
-
323  & -f(li,2,1)*slon(l,7))
-
324  gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,5)
-
325  & -f(li,2,1)*slon(l,5))
-
326  ENDDO
-
327  ELSE
-
328  DO l=1,maxwv
-
329  lr=2*l+1
-
330  li=2*l+2
-
331 CDIR$ IVDEP
-
332  DO k=1,kmax
-
333  ijk1=ij1+(k-1)*kg
-
334  ijk3=ij3+(k-1)*kg
-
335  ijk5=ij5+(k-1)*kg
-
336  ijk7=ij7+(k-1)*kg
-
337  gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
-
338  & -f(li,1,k)*slon(l,1))
-
339  gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
-
340  & -f(li,1,k)*slon(l,3))
-
341  gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
-
342  & -f(li,1,k)*slon(l,5))
-
343  gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
-
344  & -f(li,1,k)*slon(l,7))
-
345  gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,3)
-
346  & -f(li,2,k)*slon(l,3))
-
347  gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,1)
-
348  & -f(li,2,k)*slon(l,1))
-
349  gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,7)
-
350  & -f(li,2,k)*slon(l,7))
-
351  gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,5)
-
352  & -f(li,2,k)*slon(l,5))
-
353  ENDDO
-
354  ENDDO
-
355  ENDIF
-
356  ENDDO
-
357 
-
358 C CALCULATE THE REMAINDER OF THE POLAR STEREOGRAPHIC DOMAIN,
-
359 C STARTING AT THE SECTOR JUST CLOCKWISE OF THE ORIENTATION LONGITUDE
-
360 C AND GOING CLOCKWISE UNTIL ALL EIGHT SECTORS ARE DONE.
-
361 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
-
362 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
-
363 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
-
364 C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
-
365 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
-
366  DO j1=1,nph-1
-
367  DO i1=j1+1,nph
-
368  j2=i1
-
369  i2=j1
-
370  j3=nps+1-i1
-
371  i3=j1
-
372  j4=nps+1-j1
-
373  i4=i1
-
374  j5=nps+1-j1
-
375  i5=nps+1-i1
-
376  j6=nps+1-i1
-
377  i6=nps+1-j1
-
378  j7=i1
-
379  i7=nps+1-j1
-
380  j8=j1
-
381  i8=nps+1-i1
-
382  ij1=(i1-1)*ni+(j1-1)*nj+1
-
383  ij2=(i2-1)*ni+(j2-1)*nj+1
-
384  ij3=(i3-1)*ni+(j3-1)*nj+1
-
385  ij4=(i4-1)*ni+(j4-1)*nj+1
-
386  ij5=(i5-1)*ni+(j5-1)*nj+1
-
387  ij6=(i6-1)*ni+(j6-1)*nj+1
-
388  ij7=(i7-1)*ni+(j7-1)*nj+1
-
389  ij8=(i8-1)*ni+(j8-1)*nj+1
-
390  di1=i1-nph-1
-
391  dj1=j1-nph-1
-
392  rq=di1**2+dj1**2
-
393  slat1=(gq-rq)/(gq+rq)
-
394  clat1=sqrt(1.-slat1**2)
-
395  radlon1=orient/dpr+atan(-di1/dj1)
-
396  radlon2=(orient-45)/dpr*2-radlon1
-
397  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
398  & pln,plntop)
-
399  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
-
400  & clat1,pln,plntop,mp,wave,wtop,f)
-
401  DO l=1,maxwv
-
402  slon(l,1)=sin(l*radlon1)
-
403  clon(l,1)=cos(l*radlon1)
-
404  slon(l,2)=sin(l*radlon2)
-
405  clon(l,2)=cos(l*radlon2)
-
406  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
-
407  & -clon(l,1)*srot(mod(1*l,4))
-
408  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
-
409  & +slon(l,1)*srot(mod(1*l,4))
-
410  slon(l,4)=slon(l,2)*crot(mod(1*l,4))
-
411  & -clon(l,2)*srot(mod(1*l,4))
-
412  clon(l,4)=clon(l,2)*crot(mod(1*l,4))
-
413  & +slon(l,2)*srot(mod(1*l,4))
-
414  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
-
415  & -clon(l,1)*srot(mod(2*l,4))
-
416  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
-
417  & +slon(l,1)*srot(mod(2*l,4))
-
418  slon(l,6)=slon(l,2)*crot(mod(2*l,4))
-
419  & -clon(l,2)*srot(mod(2*l,4))
-
420  clon(l,6)=clon(l,2)*crot(mod(2*l,4))
-
421  & +slon(l,2)*srot(mod(2*l,4))
-
422  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
-
423  & -clon(l,1)*srot(mod(3*l,4))
-
424  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
-
425  & +slon(l,1)*srot(mod(3*l,4))
-
426  slon(l,8)=slon(l,2)*crot(mod(3*l,4))
-
427  & -clon(l,2)*srot(mod(3*l,4))
-
428  clon(l,8)=clon(l,2)*crot(mod(3*l,4))
-
429  & +slon(l,2)*srot(mod(3*l,4))
-
430  ENDDO
-
431 CDIR$ IVDEP
-
432  DO k=1,kmax
-
433  ijk1=ij1+(k-1)*kg
-
434  ijk2=ij2+(k-1)*kg
-
435  ijk3=ij3+(k-1)*kg
-
436  ijk4=ij4+(k-1)*kg
-
437  ijk5=ij5+(k-1)*kg
-
438  ijk6=ij6+(k-1)*kg
-
439  ijk7=ij7+(k-1)*kg
-
440  ijk8=ij8+(k-1)*kg
-
441  gn(ijk1)=f(1,1,k)
-
442  gn(ijk2)=f(1,1,k)
-
443  gn(ijk3)=f(1,1,k)
-
444  gn(ijk4)=f(1,1,k)
-
445  gn(ijk5)=f(1,1,k)
-
446  gn(ijk6)=f(1,1,k)
-
447  gn(ijk7)=f(1,1,k)
-
448  gn(ijk8)=f(1,1,k)
-
449  gs(ijk1)=f(1,2,k)
-
450  gs(ijk2)=f(1,2,k)
-
451  gs(ijk3)=f(1,2,k)
-
452  gs(ijk4)=f(1,2,k)
-
453  gs(ijk5)=f(1,2,k)
-
454  gs(ijk6)=f(1,2,k)
-
455  gs(ijk7)=f(1,2,k)
-
456  gs(ijk8)=f(1,2,k)
-
457  ENDDO
-
458  IF(kmax.EQ.1) THEN
-
459  DO l=1,maxwv
-
460  lr=2*l+1
-
461  li=2*l+2
-
462  gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
-
463  & -f(li,1,1)*slon(l,1))
-
464  gn(ij2)=gn(ij2)+2*(f(lr,1,1)*clon(l,2)
-
465  & -f(li,1,1)*slon(l,2))
-
466  gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
-
467  & -f(li,1,1)*slon(l,3))
-
468  gn(ij4)=gn(ij4)+2*(f(lr,1,1)*clon(l,4)
-
469  & -f(li,1,1)*slon(l,4))
-
470  gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
-
471  & -f(li,1,1)*slon(l,5))
-
472  gn(ij6)=gn(ij6)+2*(f(lr,1,1)*clon(l,6)
-
473  & -f(li,1,1)*slon(l,6))
-
474  gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
-
475  & -f(li,1,1)*slon(l,7))
-
476  gn(ij8)=gn(ij8)+2*(f(lr,1,1)*clon(l,8)
-
477  & -f(li,1,1)*slon(l,8))
-
478  gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,4)
-
479  & -f(li,2,1)*slon(l,4))
-
480  gs(ij2)=gs(ij2)+2*(f(lr,2,1)*clon(l,3)
-
481  & -f(li,2,1)*slon(l,3))
-
482  gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,2)
-
483  & -f(li,2,1)*slon(l,2))
-
484  gs(ij4)=gs(ij4)+2*(f(lr,2,1)*clon(l,1)
-
485  & -f(li,2,1)*slon(l,1))
-
486  gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,8)
-
487  & -f(li,2,1)*slon(l,8))
-
488  gs(ij6)=gs(ij6)+2*(f(lr,2,1)*clon(l,7)
-
489  & -f(li,2,1)*slon(l,7))
-
490  gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,6)
-
491  & -f(li,2,1)*slon(l,6))
-
492  gs(ij8)=gs(ij8)+2*(f(lr,2,1)*clon(l,5)
-
493  & -f(li,2,1)*slon(l,5))
-
494  ENDDO
-
495  ELSE
-
496  DO l=1,maxwv
-
497  lr=2*l+1
-
498  li=2*l+2
-
499 CDIR$ IVDEP
-
500  DO k=1,kmax
-
501  ijk1=ij1+(k-1)*kg
-
502  ijk2=ij2+(k-1)*kg
-
503  ijk3=ij3+(k-1)*kg
-
504  ijk4=ij4+(k-1)*kg
-
505  ijk5=ij5+(k-1)*kg
-
506  ijk6=ij6+(k-1)*kg
-
507  ijk7=ij7+(k-1)*kg
-
508  ijk8=ij8+(k-1)*kg
-
509  gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
-
510  & -f(li,1,k)*slon(l,1))
-
511  gn(ijk2)=gn(ijk2)+2*(f(lr,1,k)*clon(l,2)
-
512  & -f(li,1,k)*slon(l,2))
-
513  gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
-
514  & -f(li,1,k)*slon(l,3))
-
515  gn(ijk4)=gn(ijk4)+2*(f(lr,1,k)*clon(l,4)
-
516  & -f(li,1,k)*slon(l,4))
-
517  gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
-
518  & -f(li,1,k)*slon(l,5))
-
519  gn(ijk6)=gn(ijk6)+2*(f(lr,1,k)*clon(l,6)
-
520  & -f(li,1,k)*slon(l,6))
-
521  gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
-
522  & -f(li,1,k)*slon(l,7))
-
523  gn(ijk8)=gn(ijk8)+2*(f(lr,1,k)*clon(l,8)
-
524  & -f(li,1,k)*slon(l,8))
-
525  gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,4)
-
526  & -f(li,2,k)*slon(l,4))
-
527  gs(ijk2)=gs(ijk2)+2*(f(lr,2,k)*clon(l,3)
-
528  & -f(li,2,k)*slon(l,3))
-
529  gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,2)
-
530  & -f(li,2,k)*slon(l,2))
-
531  gs(ijk4)=gs(ijk4)+2*(f(lr,2,k)*clon(l,1)
-
532  & -f(li,2,k)*slon(l,1))
-
533  gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,8)
-
534  & -f(li,2,k)*slon(l,8))
-
535  gs(ijk6)=gs(ijk6)+2*(f(lr,2,k)*clon(l,7)
-
536  & -f(li,2,k)*slon(l,7))
-
537  gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,6)
-
538  & -f(li,2,k)*slon(l,6))
-
539  gs(ijk8)=gs(ijk8)+2*(f(lr,2,k)*clon(l,5)
-
540  & -f(li,2,k)*slon(l,5))
-
541  ENDDO
-
542  ENDDO
-
543  ENDIF
-
544  ENDDO
-
545  ENDDO
-
546 
-
547  END
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgps(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
Definition: sptgps.f:81
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral scalar to polar stereo.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | Iredell | Initial.
+
8C> 1998-12-15 | Iredell | Openmp directives inserted.
+
9C>
+
10C> @author Iredell @date 96-02-29
+
11
+
12C> This subprogram performs a spherical transform
+
13C> from spectral coefficients of scalar quantities
+
14C> to scalar fields on a pair of polar stereographic grids.
+
15C>
+
16C> The wave-space can be either triangular or rhomboidal.
+
17C>
+
18C> The wave and grid fields may have general indexing,
+
19C> but each wave field is in sequential 'IBM order',
+
20C> i.e. with zonal wavenumber as the slower index.
+
21C>
+
22C> The two square polar stereographic grids are centered
+
23C> on the respective poles, with the orientation longitude
+
24C> of the southern hemisphere grid 180 degrees opposite
+
25C> that of the northern hemisphere grid.
+
26C>
+
27C> The transform is made efficient
+
28C> by combining points in eight sectors
+
29C> of each polar stereographic grid,
+
30C> numbered as in the diagram below.
+
31C>
+
32C> The pole and the sector boundaries
+
33C> are treated specially in the code.
+
34C>
+
35C> Unfortunately, this approach induces
+
36C> some hairy indexing and code loquacity.
+
37C>
+
38C> <pre>
+
39C> \ 4 | 5 /
+
40C> \ | /
+
41C> 3 \ | / 6
+
42C> \|/
+
43C> ----+----
+
44C> /|\
+
45C> 2 / | \ 7
+
46C> / | \
+
47C> / 1 | 8 \
+
48C> </pre>
+
49C>
+
50C> The transforms are all multiprocessed over sector points.
+
51C>
+
52C> Transform several fields at a time to improve vectorization.
+
53C>
+
54C> Subprogram can be called from a multiprocessing environment.
+
55C>
+
56C> @param IROMB spectral domain shape
+
57C> (0 for triangular, 1 for rhomboidal)
+
58C> @param MAXWV spectral truncation
+
59C> @param KMAX number of fields to transform.
+
60C> @param NPS odd order of the polar stereographic grids.
+
61C> @param KWSKIP skip number between wave fields
+
62C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
63C> @param KGSKIP skip number between grid fields
+
64C> (defaults to NPS*NPS if KGSKIP=0)
+
65C> @param NISKIP skip number between grid i-points
+
66C> (defaults to 1 if NISKIP=0)
+
67C> @param NJSKIP skip number between grid j-points
+
68C> (defaults to NPS if NJSKIP=0)
+
69C> @param TRUE latitude at which ps grid is true (usually 60.)
+
70C> @param XMESH grid length at true latitude (m)
+
71C> @param ORIENT longitude at bottom of northern ps grid
+
72C> (southern ps grid will have opposite orientation.)
+
73C> @param WAVE wave fields
+
74C> @param GN northern polar stereographic fields
+
75C> @param GS southern polar stereographic fields
+
76C>
+
77C> @author Iredell @date 96-02-29
+
+
78 SUBROUTINE sptgps(IROMB,MAXWV,KMAX,NPS,
+
79 & KWSKIP,KGSKIP,NISKIP,NJSKIP,
+
80 & TRUE,XMESH,ORIENT,WAVE,GN,GS)
+
81
+
82 REAL WAVE(*),GN(*),GS(*)
+
83 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
84 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
85 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
86 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
87 INTEGER MP(KMAX)
+
88 REAL SLON(MAXWV,8),CLON(MAXWV,8),SROT(0:3),CROT(0:3)
+
89 REAL WTOP(2*(MAXWV+1),KMAX)
+
90 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
91 REAL F(2*MAXWV+3,2,KMAX)
+
92 DATA srot/0.,1.,0.,-1./,crot/1.,0.,-1.,0./
+
93 parameter(rerth=6.3712e6)
+
94 parameter(pi=3.14159265358979,dpr=180./pi)
+
95
+
96C CALCULATE PRELIMINARY CONSTANTS
+
97 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
98 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
99 mxtop=maxwv+1
+
100 idim=2*maxwv+3
+
101 kw=kwskip
+
102 kg=kgskip
+
103 ni=niskip
+
104 nj=njskip
+
105 IF(kw.EQ.0) kw=2*mx
+
106 IF(kg.EQ.0) kg=nps*nps
+
107 IF(ni.EQ.0) ni=1
+
108 IF(nj.EQ.0) nj=nps
+
109 mp=0
+
110 nph=(nps-1)/2
+
111 gq=((1.+sin(true/dpr))*rerth/xmesh)**2
+
112C$OMP PARALLEL DO
+
113 DO k=1,kmax
+
114 wtop(1:2*mxtop,k)=0
+
115 ENDDO
+
116
+
117C CALCULATE POLE POINT
+
118 i1=nph+1
+
119 j1=nph+1
+
120 ij1=(i1-1)*ni+(j1-1)*nj+1
+
121 slat1=1.
+
122 clat1=0.
+
123 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
124 & pln,plntop)
+
125 CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
+
126 & clat1,pln,plntop,mp,wave,wtop,f)
+
127CDIR$ IVDEP
+
128 DO k=1,kmax
+
129 ijk1=ij1+(k-1)*kg
+
130 gn(ijk1)=f(1,1,k)
+
131 gs(ijk1)=f(1,2,k)
+
132 ENDDO
+
133
+
134C CALCULATE POINTS ALONG THE ROW AND COLUMN OF THE POLE,
+
135C STARTING AT THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
+
136C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
+
137C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
+
138C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
+
139C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
+
140C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
+
141 DO j1=1,nph
+
142 i1=nph+1
+
143 radlon=orient/dpr
+
144 j3=nps+1-i1
+
145 i3=j1
+
146 j5=nps+1-j1
+
147 i5=nps+1-i1
+
148 j7=i1
+
149 i7=nps+1-j1
+
150 ij1=(i1-1)*ni+(j1-1)*nj+1
+
151 ij3=(i3-1)*ni+(j3-1)*nj+1
+
152 ij5=(i5-1)*ni+(j5-1)*nj+1
+
153 ij7=(i7-1)*ni+(j7-1)*nj+1
+
154 di1=i1-nph-1
+
155 dj1=j1-nph-1
+
156 rq=di1**2+dj1**2
+
157 slat1=(gq-rq)/(gq+rq)
+
158 clat1=sqrt(1.-slat1**2)
+
159 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
160 & pln,plntop)
+
161 CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
+
162 & clat1,pln,plntop,mp,wave,wtop,f)
+
163 DO l=1,maxwv
+
164 slon(l,1)=sin(l*radlon)
+
165 clon(l,1)=cos(l*radlon)
+
166 slon(l,3)=slon(l,1)*crot(mod(1*l,4))
+
167 & -clon(l,1)*srot(mod(1*l,4))
+
168 clon(l,3)=clon(l,1)*crot(mod(1*l,4))
+
169 & +slon(l,1)*srot(mod(1*l,4))
+
170 slon(l,5)=slon(l,1)*crot(mod(2*l,4))
+
171 & -clon(l,1)*srot(mod(2*l,4))
+
172 clon(l,5)=clon(l,1)*crot(mod(2*l,4))
+
173 & +slon(l,1)*srot(mod(2*l,4))
+
174 slon(l,7)=slon(l,1)*crot(mod(3*l,4))
+
175 & -clon(l,1)*srot(mod(3*l,4))
+
176 clon(l,7)=clon(l,1)*crot(mod(3*l,4))
+
177 & +slon(l,1)*srot(mod(3*l,4))
+
178 ENDDO
+
179CDIR$ IVDEP
+
180 DO k=1,kmax
+
181 ijk1=ij1+(k-1)*kg
+
182 ijk3=ij3+(k-1)*kg
+
183 ijk5=ij5+(k-1)*kg
+
184 ijk7=ij7+(k-1)*kg
+
185 gn(ijk1)=f(1,1,k)
+
186 gn(ijk3)=f(1,1,k)
+
187 gn(ijk5)=f(1,1,k)
+
188 gn(ijk7)=f(1,1,k)
+
189 gs(ijk1)=f(1,2,k)
+
190 gs(ijk3)=f(1,2,k)
+
191 gs(ijk5)=f(1,2,k)
+
192 gs(ijk7)=f(1,2,k)
+
193 ENDDO
+
194 IF(kmax.EQ.1) THEN
+
195 DO l=1,maxwv
+
196 lr=2*l+1
+
197 li=2*l+2
+
198 gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
+
199 & -f(li,1,1)*slon(l,1))
+
200 gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
+
201 & -f(li,1,1)*slon(l,3))
+
202 gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
+
203 & -f(li,1,1)*slon(l,5))
+
204 gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
+
205 & -f(li,1,1)*slon(l,7))
+
206 gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,5)
+
207 & -f(li,2,1)*slon(l,5))
+
208 gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,3)
+
209 & -f(li,2,1)*slon(l,3))
+
210 gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,1)
+
211 & -f(li,2,1)*slon(l,1))
+
212 gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,7)
+
213 & -f(li,2,1)*slon(l,7))
+
214 ENDDO
+
215 ELSE
+
216 DO l=1,maxwv
+
217 lr=2*l+1
+
218 li=2*l+2
+
219CDIR$ IVDEP
+
220 DO k=1,kmax
+
221 ijk1=ij1+(k-1)*kg
+
222 ijk3=ij3+(k-1)*kg
+
223 ijk5=ij5+(k-1)*kg
+
224 ijk7=ij7+(k-1)*kg
+
225 gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
+
226 & -f(li,1,k)*slon(l,1))
+
227 gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
+
228 & -f(li,1,k)*slon(l,3))
+
229 gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
+
230 & -f(li,1,k)*slon(l,5))
+
231 gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
+
232 & -f(li,1,k)*slon(l,7))
+
233 gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,5)
+
234 & -f(li,2,k)*slon(l,5))
+
235 gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,3)
+
236 & -f(li,2,k)*slon(l,3))
+
237 gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,1)
+
238 & -f(li,2,k)*slon(l,1))
+
239 gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,7)
+
240 & -f(li,2,k)*slon(l,7))
+
241 ENDDO
+
242 ENDDO
+
243 ENDIF
+
244 ENDDO
+
245
+
246C CALCULATE POINTS ON THE MAIN DIAGONALS THROUGH THE POLE,
+
247C STARTING CLOCKWISE OF THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
+
248C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
+
249C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
+
250C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
+
251C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
+
252C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
+
253 DO j1=1,nph
+
254 i1=j1
+
255 radlon=(orient-45)/dpr
+
256 j3=nps+1-i1
+
257 i3=j1
+
258 j5=nps+1-j1
+
259 i5=nps+1-i1
+
260 j7=i1
+
261 i7=nps+1-j1
+
262 ij1=(i1-1)*ni+(j1-1)*nj+1
+
263 ij3=(i3-1)*ni+(j3-1)*nj+1
+
264 ij5=(i5-1)*ni+(j5-1)*nj+1
+
265 ij7=(i7-1)*ni+(j7-1)*nj+1
+
266 di1=i1-nph-1
+
267 dj1=j1-nph-1
+
268 rq=di1**2+dj1**2
+
269 slat1=(gq-rq)/(gq+rq)
+
270 clat1=sqrt(1.-slat1**2)
+
271 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
272 & pln,plntop)
+
273 CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
+
274 & clat1,pln,plntop,mp,wave,wtop,f)
+
275 DO l=1,maxwv
+
276 slon(l,1)=sin(l*radlon)
+
277 clon(l,1)=cos(l*radlon)
+
278 slon(l,3)=slon(l,1)*crot(mod(1*l,4))
+
279 & -clon(l,1)*srot(mod(1*l,4))
+
280 clon(l,3)=clon(l,1)*crot(mod(1*l,4))
+
281 & +slon(l,1)*srot(mod(1*l,4))
+
282 slon(l,5)=slon(l,1)*crot(mod(2*l,4))
+
283 & -clon(l,1)*srot(mod(2*l,4))
+
284 clon(l,5)=clon(l,1)*crot(mod(2*l,4))
+
285 & +slon(l,1)*srot(mod(2*l,4))
+
286 slon(l,7)=slon(l,1)*crot(mod(3*l,4))
+
287 & -clon(l,1)*srot(mod(3*l,4))
+
288 clon(l,7)=clon(l,1)*crot(mod(3*l,4))
+
289 & +slon(l,1)*srot(mod(3*l,4))
+
290 ENDDO
+
291CDIR$ IVDEP
+
292 DO k=1,kmax
+
293 ijk1=ij1+(k-1)*kg
+
294 ijk3=ij3+(k-1)*kg
+
295 ijk5=ij5+(k-1)*kg
+
296 ijk7=ij7+(k-1)*kg
+
297 gn(ijk1)=f(1,1,k)
+
298 gn(ijk3)=f(1,1,k)
+
299 gn(ijk5)=f(1,1,k)
+
300 gn(ijk7)=f(1,1,k)
+
301 gs(ijk1)=f(1,2,k)
+
302 gs(ijk3)=f(1,2,k)
+
303 gs(ijk5)=f(1,2,k)
+
304 gs(ijk7)=f(1,2,k)
+
305 ENDDO
+
306 IF(kmax.EQ.1) THEN
+
307 DO l=1,maxwv
+
308 lr=2*l+1
+
309 li=2*l+2
+
310 gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
+
311 & -f(li,1,1)*slon(l,1))
+
312 gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
+
313 & -f(li,1,1)*slon(l,3))
+
314 gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
+
315 & -f(li,1,1)*slon(l,5))
+
316 gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
+
317 & -f(li,1,1)*slon(l,7))
+
318 gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,3)
+
319 & -f(li,2,1)*slon(l,3))
+
320 gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,1)
+
321 & -f(li,2,1)*slon(l,1))
+
322 gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,7)
+
323 & -f(li,2,1)*slon(l,7))
+
324 gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,5)
+
325 & -f(li,2,1)*slon(l,5))
+
326 ENDDO
+
327 ELSE
+
328 DO l=1,maxwv
+
329 lr=2*l+1
+
330 li=2*l+2
+
331CDIR$ IVDEP
+
332 DO k=1,kmax
+
333 ijk1=ij1+(k-1)*kg
+
334 ijk3=ij3+(k-1)*kg
+
335 ijk5=ij5+(k-1)*kg
+
336 ijk7=ij7+(k-1)*kg
+
337 gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
+
338 & -f(li,1,k)*slon(l,1))
+
339 gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
+
340 & -f(li,1,k)*slon(l,3))
+
341 gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
+
342 & -f(li,1,k)*slon(l,5))
+
343 gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
+
344 & -f(li,1,k)*slon(l,7))
+
345 gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,3)
+
346 & -f(li,2,k)*slon(l,3))
+
347 gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,1)
+
348 & -f(li,2,k)*slon(l,1))
+
349 gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,7)
+
350 & -f(li,2,k)*slon(l,7))
+
351 gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,5)
+
352 & -f(li,2,k)*slon(l,5))
+
353 ENDDO
+
354 ENDDO
+
355 ENDIF
+
356 ENDDO
+
357
+
358C CALCULATE THE REMAINDER OF THE POLAR STEREOGRAPHIC DOMAIN,
+
359C STARTING AT THE SECTOR JUST CLOCKWISE OF THE ORIENTATION LONGITUDE
+
360C AND GOING CLOCKWISE UNTIL ALL EIGHT SECTORS ARE DONE.
+
361C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
+
362C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
+
363C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
+
364C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
+
365C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
+
366 DO j1=1,nph-1
+
367 DO i1=j1+1,nph
+
368 j2=i1
+
369 i2=j1
+
370 j3=nps+1-i1
+
371 i3=j1
+
372 j4=nps+1-j1
+
373 i4=i1
+
374 j5=nps+1-j1
+
375 i5=nps+1-i1
+
376 j6=nps+1-i1
+
377 i6=nps+1-j1
+
378 j7=i1
+
379 i7=nps+1-j1
+
380 j8=j1
+
381 i8=nps+1-i1
+
382 ij1=(i1-1)*ni+(j1-1)*nj+1
+
383 ij2=(i2-1)*ni+(j2-1)*nj+1
+
384 ij3=(i3-1)*ni+(j3-1)*nj+1
+
385 ij4=(i4-1)*ni+(j4-1)*nj+1
+
386 ij5=(i5-1)*ni+(j5-1)*nj+1
+
387 ij6=(i6-1)*ni+(j6-1)*nj+1
+
388 ij7=(i7-1)*ni+(j7-1)*nj+1
+
389 ij8=(i8-1)*ni+(j8-1)*nj+1
+
390 di1=i1-nph-1
+
391 dj1=j1-nph-1
+
392 rq=di1**2+dj1**2
+
393 slat1=(gq-rq)/(gq+rq)
+
394 clat1=sqrt(1.-slat1**2)
+
395 radlon1=orient/dpr+atan(-di1/dj1)
+
396 radlon2=(orient-45)/dpr*2-radlon1
+
397 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
398 & pln,plntop)
+
399 CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
+
400 & clat1,pln,plntop,mp,wave,wtop,f)
+
401 DO l=1,maxwv
+
402 slon(l,1)=sin(l*radlon1)
+
403 clon(l,1)=cos(l*radlon1)
+
404 slon(l,2)=sin(l*radlon2)
+
405 clon(l,2)=cos(l*radlon2)
+
406 slon(l,3)=slon(l,1)*crot(mod(1*l,4))
+
407 & -clon(l,1)*srot(mod(1*l,4))
+
408 clon(l,3)=clon(l,1)*crot(mod(1*l,4))
+
409 & +slon(l,1)*srot(mod(1*l,4))
+
410 slon(l,4)=slon(l,2)*crot(mod(1*l,4))
+
411 & -clon(l,2)*srot(mod(1*l,4))
+
412 clon(l,4)=clon(l,2)*crot(mod(1*l,4))
+
413 & +slon(l,2)*srot(mod(1*l,4))
+
414 slon(l,5)=slon(l,1)*crot(mod(2*l,4))
+
415 & -clon(l,1)*srot(mod(2*l,4))
+
416 clon(l,5)=clon(l,1)*crot(mod(2*l,4))
+
417 & +slon(l,1)*srot(mod(2*l,4))
+
418 slon(l,6)=slon(l,2)*crot(mod(2*l,4))
+
419 & -clon(l,2)*srot(mod(2*l,4))
+
420 clon(l,6)=clon(l,2)*crot(mod(2*l,4))
+
421 & +slon(l,2)*srot(mod(2*l,4))
+
422 slon(l,7)=slon(l,1)*crot(mod(3*l,4))
+
423 & -clon(l,1)*srot(mod(3*l,4))
+
424 clon(l,7)=clon(l,1)*crot(mod(3*l,4))
+
425 & +slon(l,1)*srot(mod(3*l,4))
+
426 slon(l,8)=slon(l,2)*crot(mod(3*l,4))
+
427 & -clon(l,2)*srot(mod(3*l,4))
+
428 clon(l,8)=clon(l,2)*crot(mod(3*l,4))
+
429 & +slon(l,2)*srot(mod(3*l,4))
+
430 ENDDO
+
431CDIR$ IVDEP
+
432 DO k=1,kmax
+
433 ijk1=ij1+(k-1)*kg
+
434 ijk2=ij2+(k-1)*kg
+
435 ijk3=ij3+(k-1)*kg
+
436 ijk4=ij4+(k-1)*kg
+
437 ijk5=ij5+(k-1)*kg
+
438 ijk6=ij6+(k-1)*kg
+
439 ijk7=ij7+(k-1)*kg
+
440 ijk8=ij8+(k-1)*kg
+
441 gn(ijk1)=f(1,1,k)
+
442 gn(ijk2)=f(1,1,k)
+
443 gn(ijk3)=f(1,1,k)
+
444 gn(ijk4)=f(1,1,k)
+
445 gn(ijk5)=f(1,1,k)
+
446 gn(ijk6)=f(1,1,k)
+
447 gn(ijk7)=f(1,1,k)
+
448 gn(ijk8)=f(1,1,k)
+
449 gs(ijk1)=f(1,2,k)
+
450 gs(ijk2)=f(1,2,k)
+
451 gs(ijk3)=f(1,2,k)
+
452 gs(ijk4)=f(1,2,k)
+
453 gs(ijk5)=f(1,2,k)
+
454 gs(ijk6)=f(1,2,k)
+
455 gs(ijk7)=f(1,2,k)
+
456 gs(ijk8)=f(1,2,k)
+
457 ENDDO
+
458 IF(kmax.EQ.1) THEN
+
459 DO l=1,maxwv
+
460 lr=2*l+1
+
461 li=2*l+2
+
462 gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
+
463 & -f(li,1,1)*slon(l,1))
+
464 gn(ij2)=gn(ij2)+2*(f(lr,1,1)*clon(l,2)
+
465 & -f(li,1,1)*slon(l,2))
+
466 gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
+
467 & -f(li,1,1)*slon(l,3))
+
468 gn(ij4)=gn(ij4)+2*(f(lr,1,1)*clon(l,4)
+
469 & -f(li,1,1)*slon(l,4))
+
470 gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
+
471 & -f(li,1,1)*slon(l,5))
+
472 gn(ij6)=gn(ij6)+2*(f(lr,1,1)*clon(l,6)
+
473 & -f(li,1,1)*slon(l,6))
+
474 gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
+
475 & -f(li,1,1)*slon(l,7))
+
476 gn(ij8)=gn(ij8)+2*(f(lr,1,1)*clon(l,8)
+
477 & -f(li,1,1)*slon(l,8))
+
478 gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,4)
+
479 & -f(li,2,1)*slon(l,4))
+
480 gs(ij2)=gs(ij2)+2*(f(lr,2,1)*clon(l,3)
+
481 & -f(li,2,1)*slon(l,3))
+
482 gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,2)
+
483 & -f(li,2,1)*slon(l,2))
+
484 gs(ij4)=gs(ij4)+2*(f(lr,2,1)*clon(l,1)
+
485 & -f(li,2,1)*slon(l,1))
+
486 gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,8)
+
487 & -f(li,2,1)*slon(l,8))
+
488 gs(ij6)=gs(ij6)+2*(f(lr,2,1)*clon(l,7)
+
489 & -f(li,2,1)*slon(l,7))
+
490 gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,6)
+
491 & -f(li,2,1)*slon(l,6))
+
492 gs(ij8)=gs(ij8)+2*(f(lr,2,1)*clon(l,5)
+
493 & -f(li,2,1)*slon(l,5))
+
494 ENDDO
+
495 ELSE
+
496 DO l=1,maxwv
+
497 lr=2*l+1
+
498 li=2*l+2
+
499CDIR$ IVDEP
+
500 DO k=1,kmax
+
501 ijk1=ij1+(k-1)*kg
+
502 ijk2=ij2+(k-1)*kg
+
503 ijk3=ij3+(k-1)*kg
+
504 ijk4=ij4+(k-1)*kg
+
505 ijk5=ij5+(k-1)*kg
+
506 ijk6=ij6+(k-1)*kg
+
507 ijk7=ij7+(k-1)*kg
+
508 ijk8=ij8+(k-1)*kg
+
509 gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
+
510 & -f(li,1,k)*slon(l,1))
+
511 gn(ijk2)=gn(ijk2)+2*(f(lr,1,k)*clon(l,2)
+
512 & -f(li,1,k)*slon(l,2))
+
513 gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
+
514 & -f(li,1,k)*slon(l,3))
+
515 gn(ijk4)=gn(ijk4)+2*(f(lr,1,k)*clon(l,4)
+
516 & -f(li,1,k)*slon(l,4))
+
517 gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
+
518 & -f(li,1,k)*slon(l,5))
+
519 gn(ijk6)=gn(ijk6)+2*(f(lr,1,k)*clon(l,6)
+
520 & -f(li,1,k)*slon(l,6))
+
521 gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
+
522 & -f(li,1,k)*slon(l,7))
+
523 gn(ijk8)=gn(ijk8)+2*(f(lr,1,k)*clon(l,8)
+
524 & -f(li,1,k)*slon(l,8))
+
525 gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,4)
+
526 & -f(li,2,k)*slon(l,4))
+
527 gs(ijk2)=gs(ijk2)+2*(f(lr,2,k)*clon(l,3)
+
528 & -f(li,2,k)*slon(l,3))
+
529 gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,2)
+
530 & -f(li,2,k)*slon(l,2))
+
531 gs(ijk4)=gs(ijk4)+2*(f(lr,2,k)*clon(l,1)
+
532 & -f(li,2,k)*slon(l,1))
+
533 gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,8)
+
534 & -f(li,2,k)*slon(l,8))
+
535 gs(ijk6)=gs(ijk6)+2*(f(lr,2,k)*clon(l,7)
+
536 & -f(li,2,k)*slon(l,7))
+
537 gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,6)
+
538 & -f(li,2,k)*slon(l,6))
+
539 gs(ijk8)=gs(ijk8)+2*(f(lr,2,k)*clon(l,5)
+
540 & -f(li,2,k)*slon(l,5))
+
541 ENDDO
+
542 ENDDO
+
543 ENDIF
+
544 ENDDO
+
545 ENDDO
+
546
+
+
547 END
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgps(iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, wave, gn, gs)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
Definition sptgps.f:81
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgpsd_8f.html b/sptgpsd_8f.html index 951e05dd..8c7fb39e 100644 --- a/sptgpsd_8f.html +++ b/sptgpsd_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpsd.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgpsd.f File Reference
+
sptgpsd.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgpsd (IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, XN, YN, XS, YS)
 This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradient fields on a pair of polar stereographic grids. More...
 
subroutine sptgpsd (iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, wave, xn, yn, xs, ys)
 This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradient fields on a pair of polar stereographic grids.
 

Detailed Description

Transform spectral to polar stereographic gradients.

@@ -117,8 +123,8 @@

Definition in file sptgpsd.f.

Function/Subroutine Documentation

- -

◆ sptgpsd()

+ +

◆ sptgpsd()

diff --git a/sptgpsd_8f.js b/sptgpsd_8f.js index 1b5e1ff3..8aa0c7e3 100644 --- a/sptgpsd_8f.js +++ b/sptgpsd_8f.js @@ -1,4 +1,4 @@ var sptgpsd_8f = [ - [ "sptgpsd", "sptgpsd_8f.html#ad6d10c3360c47558a8116b2f5666ed30", null ] + [ "sptgpsd", "sptgpsd_8f.html#afac272664e9946be76b9803c0663bb61", null ] ]; \ No newline at end of file diff --git a/sptgpsd_8f_source.html b/sptgpsd_8f_source.html index 75c49195..1e2a56d6 100644 --- a/sptgpsd_8f_source.html +++ b/sptgpsd_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpsd.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,127 +81,135 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgpsd.f
+
sptgpsd.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral to polar stereographic gradients
-
3 C> ### Program history log:
-
4 C> Date | Programmer | Comments
-
5 C> -----|------------|----------
-
6 C> 96-02-29 | IREDELL | Initial.
-
7 C> 1998-12-15 | IREDELL | OpenMP directives inserted.
-
8 C> @author IREDELL @date 96-02-29
-
9 
-
10 C> This subprogram performs a spherical transform
-
11 C> from spectral coefficients of scalar fields
-
12 C> to gradient fields on a pair of polar stereographic grids.
-
13 C> The wave-space can be either triangular or rhomboidal.
-
14 C> The wave and grid fields may have general indexing,
-
15 C> but each wave field is in sequential 'ibm order',
-
16 C> i.e., with zonal wavenumber as the slower index.
-
17 C> The two square polar stereographic grids are centered
-
18 C> on the respective poles, with the orientation longitude
-
19 C> of the southern hemisphere grid 180 degrees opposite
-
20 C> that of the northern hemisphere grid.
-
21 C> The vectors are automatically rotated to be resolved
-
22 C> relative to the respective polar stereographic grids.
-
23 C>
-
24 C> The transform is made efficient by combining points in eight
-
25 C> sectors of each polar stereographic grid, numbered as in the
-
26 C> following diagram. The pole and the sector boundaries are
-
27 C> treated specially in the code. Unfortunately, this approach
-
28 C> induces some hairy indexing and code loquacity, for which
-
29 C> the developer apologizes.
-
30 C>
-
31 C> \verbatim
-
32 C> \ 4 | 5 /
-
33 C> \ | /
-
34 C> 3 \ | / 6
-
35 C> \|/
-
36 C> ----+----
-
37 C> /|\
-
38 C> 2 / | \ 7
-
39 C> / | \
-
40 C> / 1 | 8 \
-
41 C> \endverbatim
-
42 C>
-
43 C> The transforms are all multiprocessed over sector points.
-
44 C> transform several fields at a time to improve vectorization.
-
45 C> Subprogram can be called from a multiprocessing environment.
-
46 C>
-
47 C> @param IROMB Spectral domain shape
-
48 C> (0 for triangular, 1 for rhomboidal)
-
49 C> @param MAXWV Spectral truncation
-
50 C> @param KMAX Number of fields to transform
-
51 C> @param NPS Odd order of the polar stereographic grids
-
52 C> @param KWSKIP Skip number between wave fields
-
53 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
54 C> @param KGSKIP Skip number between grid fields
-
55 C> (defaults to NPS*NPS if KGSKIP=0)
-
56 C> @param NISKIP Skip number between grid i-points
-
57 C> (defaults to 1 if NISKIP=0)
-
58 C> @param NJSKIP Skip number between grid j-points
-
59 C> (defaults to NPS if NJSKIP=0)
-
60 C> @param TRUE Latitude at which PS grid is true (usually 60.)
-
61 C> @param XMESH Grid length at true latitude (M)
-
62 C> @param ORIENT Longitude at bottom of northern PS grid
-
63 C> (southern PS grid will have opposite orientation.)
-
64 C> @param WAVE Wave fields
-
65 C> @param XN Northern polar stereographic x-gradients
-
66 C> @param YN Northern polar stereographic y-gradients
-
67 C> @param XS Southern polar stereographic x-gradients
-
68 C> @param YS Southern polar stereographic y-gradients
-
69 C>
-
70 C> @author IREDELL @date 96-02-29
-
71  SUBROUTINE sptgpsd(IROMB,MAXWV,KMAX,NPS,
-
72  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
-
73  & TRUE,XMESH,ORIENT,WAVE,XN,YN,XS,YS)
-
74 
-
75  REAL WAVE(*),XN(*),YN(*),XS(*),YS(*)
-
76  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
77  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
78  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
79  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
80  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
81  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
82 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
83 C CALCULATE PRELIMINARY CONSTANTS
-
84  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
85  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
86  mdim=2*mx+1
-
87  kw=kwskip
-
88  IF(kw.EQ.0) kw=2*mx
-
89 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
90 C CALCULATE GRADIENTS
-
91 C$OMP PARALLEL DO PRIVATE(KWS)
-
92  DO k=1,kmax
-
93  kws=(k-1)*kw
-
94  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
-
95  wz(1:2*mx,k)=0.
-
96  ENDDO
-
97  CALL sptgpsv(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
-
98  & true,xmesh,orient,wd,wz,xn,yn,xs,ys)
-
99 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
100  END
-
subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition: splaplac.f:25
-
subroutine sptgpsd(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, XN, YN, XS, YS)
This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradien...
Definition: sptgpsd.f:74
-
subroutine sptgpsv(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition: sptgpsv.f:83
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral to polar stereographic gradients
+
3C> ### Program history log:
+
4C> Date | Programmer | Comments
+
5C> -----|------------|----------
+
6C> 96-02-29 | IREDELL | Initial.
+
7C> 1998-12-15 | IREDELL | OpenMP directives inserted.
+
8C> @author IREDELL @date 96-02-29
+
9
+
10C> This subprogram performs a spherical transform
+
11C> from spectral coefficients of scalar fields
+
12C> to gradient fields on a pair of polar stereographic grids.
+
13C> The wave-space can be either triangular or rhomboidal.
+
14C> The wave and grid fields may have general indexing,
+
15C> but each wave field is in sequential 'ibm order',
+
16C> i.e., with zonal wavenumber as the slower index.
+
17C> The two square polar stereographic grids are centered
+
18C> on the respective poles, with the orientation longitude
+
19C> of the southern hemisphere grid 180 degrees opposite
+
20C> that of the northern hemisphere grid.
+
21C> The vectors are automatically rotated to be resolved
+
22C> relative to the respective polar stereographic grids.
+
23C>
+
24C> The transform is made efficient by combining points in eight
+
25C> sectors of each polar stereographic grid, numbered as in the
+
26C> following diagram. The pole and the sector boundaries are
+
27C> treated specially in the code. Unfortunately, this approach
+
28C> induces some hairy indexing and code loquacity, for which
+
29C> the developer apologizes.
+
30C>
+
31C> \verbatim
+
32C> \ 4 | 5 /
+
33C> \ | /
+
34C> 3 \ | / 6
+
35C> \|/
+
36C> ----+----
+
37C> /|\
+
38C> 2 / | \ 7
+
39C> / | \
+
40C> / 1 | 8 \
+
41C> \endverbatim
+
42C>
+
43C> The transforms are all multiprocessed over sector points.
+
44C> transform several fields at a time to improve vectorization.
+
45C> Subprogram can be called from a multiprocessing environment.
+
46C>
+
47C> @param IROMB Spectral domain shape
+
48C> (0 for triangular, 1 for rhomboidal)
+
49C> @param MAXWV Spectral truncation
+
50C> @param KMAX Number of fields to transform
+
51C> @param NPS Odd order of the polar stereographic grids
+
52C> @param KWSKIP Skip number between wave fields
+
53C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
54C> @param KGSKIP Skip number between grid fields
+
55C> (defaults to NPS*NPS if KGSKIP=0)
+
56C> @param NISKIP Skip number between grid i-points
+
57C> (defaults to 1 if NISKIP=0)
+
58C> @param NJSKIP Skip number between grid j-points
+
59C> (defaults to NPS if NJSKIP=0)
+
60C> @param TRUE Latitude at which PS grid is true (usually 60.)
+
61C> @param XMESH Grid length at true latitude (M)
+
62C> @param ORIENT Longitude at bottom of northern PS grid
+
63C> (southern PS grid will have opposite orientation.)
+
64C> @param WAVE Wave fields
+
65C> @param XN Northern polar stereographic x-gradients
+
66C> @param YN Northern polar stereographic y-gradients
+
67C> @param XS Southern polar stereographic x-gradients
+
68C> @param YS Southern polar stereographic y-gradients
+
69C>
+
70C> @author IREDELL @date 96-02-29
+
+
71 SUBROUTINE sptgpsd(IROMB,MAXWV,KMAX,NPS,
+
72 & KWSKIP,KGSKIP,NISKIP,NJSKIP,
+
73 & TRUE,XMESH,ORIENT,WAVE,XN,YN,XS,YS)
+
74
+
75 REAL WAVE(*),XN(*),YN(*),XS(*),YS(*)
+
76 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
77 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
78 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
79 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
80 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
81 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
82C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
83C CALCULATE PRELIMINARY CONSTANTS
+
84 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
85 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
86 mdim=2*mx+1
+
87 kw=kwskip
+
88 IF(kw.EQ.0) kw=2*mx
+
89C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
90C CALCULATE GRADIENTS
+
91C$OMP PARALLEL DO PRIVATE(KWS)
+
92 DO k=1,kmax
+
93 kws=(k-1)*kw
+
94 CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
+
95 wz(1:2*mx,k)=0.
+
96 ENDDO
+
97 CALL sptgpsv(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
+
98 & true,xmesh,orient,wd,wz,xn,yn,xs,ys)
+
99C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
100 END
+
subroutine splaplac(i, m, enn1, q, qd2, idir)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition splaplac.f:25
+
subroutine sptgpsd(iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, wave, xn, yn, xs, ys)
This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradien...
Definition sptgpsd.f:74
+
subroutine sptgpsv(iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, waved, wavez, un, vn, us, vs)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition sptgpsv.f:83
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgpsv_8f.html b/sptgpsv_8f.html index fdcaf59b..1ce7e06d 100644 --- a/sptgpsv_8f.html +++ b/sptgpsv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpsv.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgpsv.f File Reference
+
sptgpsv.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgpsv (IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to vector fields on a pair of polar stereographic grids. More...
 
subroutine sptgpsv (iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, waved, wavez, un, vn, us, vs)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to vector fields on a pair of polar stereographic grids.
 

Detailed Description

Transform spectral vector to polar stereo.

@@ -117,8 +123,8 @@

Definition in file sptgpsv.f.

Function/Subroutine Documentation

- -

◆ sptgpsv()

+ +

◆ sptgpsv()

diff --git a/sptgpsv_8f.js b/sptgpsv_8f.js index ec835636..b272cc05 100644 --- a/sptgpsv_8f.js +++ b/sptgpsv_8f.js @@ -1,4 +1,4 @@ var sptgpsv_8f = [ - [ "sptgpsv", "sptgpsv_8f.html#af2bf2335047ec277730564dbfa859079", null ] + [ "sptgpsv", "sptgpsv_8f.html#a3d8afc14a2f4aaaa30c63adfc5039ead", null ] ]; \ No newline at end of file diff --git a/sptgpsv_8f_source.html b/sptgpsv_8f_source.html index 3422cb0b..32f20084 100644 --- a/sptgpsv_8f_source.html +++ b/sptgpsv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpsv.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,962 +81,970 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgpsv.f
+
sptgpsv.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral vector to polar stereo.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | Iredell | Initial.
-
8 C> 1998-12-15 | Iredell | Openmp directives inserted.
-
9 C>
-
10 C> @author Iredell @date 96-02-29
-
11 
-
12 C> This subprogram performs a spherical transform
-
13 C> from spectral coefficients of divergences and curls
-
14 C> to vector fields on a pair of polar stereographic grids.
-
15 C> The wave-space can be either triangular or rhomboidal.
-
16 C>
-
17 C> The wave and grid fields may have general indexing,
-
18 C> but each wave field is in sequential 'IBM order',
-
19 C> i.e. with zonal wavenumber as the slower index.
-
20 C>
-
21 C> The two square polar stereographic grids are centered
-
22 C> on the respective poles, with the orientation longitude
-
23 C> of the southern hemisphere grid 180 degrees opposite
-
24 C> that of the northern hemisphere grid.
-
25 C>
-
26 C> The vectors are automatically rotated to be resolved
-
27 C> relative to the respective polar stereographic grids.
-
28 C>
-
29 C> The transform is made efficient
-
30 C> by combining points in eight sectors
-
31 C> of each polar stereographic grid,
-
32 C> numbered as in the diagram below.
-
33 C> The pole and the sector boundaries
-
34 C> are treated specially in the code.
-
35 C> Unfortunately, this approach induces
-
36 C> some hairy indexing and code loquacity,
-
37 C> for which the developer apologizes.
-
38 C>
-
39 C> <pre>
-
40 C> \ 4 | 5 /
-
41 C> \ | /
-
42 C> 3 \ | / 6
-
43 C> \|/
-
44 C> ----+----
-
45 C> /|\
-
46 C> 2 / | \ 7
-
47 C> / | \
-
48 C> / 1 | 8 \
-
49 C> </pre>
-
50 C>
-
51 C> The transforms are all multiprocessed over sector points.
-
52 C> transform several fields at a time to improve vectorization.
-
53 C> subprogram can be called from a multiprocessing environment.
-
54 C>
-
55 C> @param IROMB spectral domain shape
-
56 C> (0 for triangular, 1 for rhomboidal)
-
57 C> @param MAXWV spectral truncation
-
58 C> @param KMAX number of fields to transform.
-
59 C> @param NPS odd order of the polar stereographic grids
-
60 C> @param KWSKIP skip number between wave fields
-
61 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
62 C> @param KGSKIP skip number between grid fields
-
63 C> (defaults to NPS*NPS if KGSKIP=0)
-
64 C> @param NISKIP skip number between grid i-points
-
65 C> (defaults to 1 if NISKIP=0)
-
66 C> @param NJSKIP skip number between grid j-points
-
67 C> (defaults to NPS if NJSKIP=0)
-
68 C> @param TRUE latitude at which ps grid is true (usually 60.)
-
69 C> @param XMESH grid length at true latitude (m)
-
70 C> @param ORIENT longitude at bottom of northern ps grid
-
71 C> (southern ps grid will have opposite orientation.)
-
72 C> @param WAVED wave divergence fields
-
73 C> @param WAVEZ wave vorticity fields
-
74 C> @param UN northern polar stereographic u-winds
-
75 C> @param VN northern polar stereographic v-winds
-
76 C> @param US southern polar stereographic u-winds
-
77 C> @param VS southern polar stereographic v-winds
-
78 C>
-
79 C> @author Iredell @date 96-02-29
-
80  SUBROUTINE sptgpsv(IROMB,MAXWV,KMAX,NPS,
-
81  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
-
82  & TRUE,XMESH,ORIENT,WAVED,WAVEZ,UN,VN,US,VS)
-
83 
-
84  REAL WAVED(*),WAVEZ(*),UN(*),VN(*),US(*),VS(*)
-
85  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
86  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
87  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
88  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
89  INTEGER MP(2*KMAX)
-
90  REAL SLON(MAXWV,8),CLON(MAXWV,8),SROT(0:3),CROT(0:3)
-
91  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
-
92  REAL WTOP(2*(MAXWV+1),2*KMAX)
-
93  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
94  REAL F(2*MAXWV+3,2,2*KMAX)
-
95  DATA srot/0.,1.,0.,-1./,crot/1.,0.,-1.,0./
-
96  parameter(rerth=6.3712e6)
-
97  parameter(pi=3.14159265358979,dpr=180./pi)
-
98 
-
99 C CALCULATE PRELIMINARY CONSTANTS
-
100  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
101  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
102  mxtop=maxwv+1
-
103  mdim=2*mx+1
-
104  idim=2*maxwv+3
-
105  kw=kwskip
-
106  kg=kgskip
-
107  ni=niskip
-
108  nj=njskip
-
109  IF(kw.EQ.0) kw=2*mx
-
110  IF(kg.EQ.0) kg=nps*nps
-
111  IF(ni.EQ.0) ni=1
-
112  IF(nj.EQ.0) nj=nps
-
113  mp=1
-
114  nph=(nps-1)/2
-
115  gq=((1.+sin(true/dpr))*rerth/xmesh)**2
-
116  srh=sqrt(0.5)
-
117 
-
118 C CALCULATE SPECTRAL WINDS
-
119 C$OMP PARALLEL DO PRIVATE(KWS)
-
120  DO k=1,kmax
-
121  kws=(k-1)*kw
-
122  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
-
123  & waved(kws+1),wavez(kws+1),
-
124  & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
-
125  ENDDO
-
126 
-
127 C CALCULATE POLE POINT
-
128  i1=nph+1
-
129  j1=nph+1
-
130  ij1=(i1-1)*ni+(j1-1)*nj+1
-
131  slat1=1.
-
132  clat1=0.
-
133  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
134  & pln,plntop)
-
135  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
-
136  & clat1,pln,plntop,mp,w,wtop,f)
-
137  coso=cos(orient/dpr)
-
138  sino=sin(orient/dpr)
-
139 CDIR$ IVDEP
-
140  DO k=1,kmax
-
141  ku=k
-
142  kv=k+kmax
-
143  ijk1=ij1+(k-1)*kg
-
144  un(ijk1)=2*( coso*f(3,1,ku)+sino*f(3,1,kv))
-
145  vn(ijk1)=2*(-sino*f(3,1,ku)+coso*f(3,1,kv))
-
146  us(ijk1)=2*( coso*f(3,2,ku)-sino*f(3,2,kv))
-
147  vs(ijk1)=2*( sino*f(3,2,ku)+coso*f(3,2,kv))
-
148  ENDDO
-
149 
-
150 C CALCULATE POINTS ALONG THE ROW AND COLUMN OF THE POLE,
-
151 C STARTING AT THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
-
152 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
-
153 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
-
154 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
-
155 C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
-
156 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
-
157  DO j1=1,nph
-
158  i1=nph+1
-
159  radlon=orient/dpr
-
160  j3=nps+1-i1
-
161  i3=j1
-
162  j5=nps+1-j1
-
163  i5=nps+1-i1
-
164  j7=i1
-
165  i7=nps+1-j1
-
166  ij1=(i1-1)*ni+(j1-1)*nj+1
-
167  ij3=(i3-1)*ni+(j3-1)*nj+1
-
168  ij5=(i5-1)*ni+(j5-1)*nj+1
-
169  ij7=(i7-1)*ni+(j7-1)*nj+1
-
170  di1=i1-nph-1
-
171  dj1=j1-nph-1
-
172  rq=di1**2+dj1**2
-
173  slat1=(gq-rq)/(gq+rq)
-
174  clat1=sqrt(1.-slat1**2)
-
175  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
176  & pln,plntop)
-
177  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
-
178  & clat1,pln,plntop,mp,w,wtop,f)
-
179  DO l=1,maxwv
-
180  slon(l,1)=sin(l*radlon)
-
181  clon(l,1)=cos(l*radlon)
-
182  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
-
183  & -clon(l,1)*srot(mod(1*l,4))
-
184  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
-
185  & +slon(l,1)*srot(mod(1*l,4))
-
186  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
-
187  & -clon(l,1)*srot(mod(2*l,4))
-
188  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
-
189  & +slon(l,1)*srot(mod(2*l,4))
-
190  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
-
191  & -clon(l,1)*srot(mod(3*l,4))
-
192  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
-
193  & +slon(l,1)*srot(mod(3*l,4))
-
194  ENDDO
-
195 CDIR$ IVDEP
-
196  DO k=1,kmax
-
197  ku=k
-
198  kv=k+kmax
-
199  ijk1=ij1+(k-1)*kg
-
200  ijk3=ij3+(k-1)*kg
-
201  ijk5=ij5+(k-1)*kg
-
202  ijk7=ij7+(k-1)*kg
-
203  un(ijk1)= f(1,1,ku)
-
204  vn(ijk1)= f(1,1,kv)
-
205  un(ijk3)= f(1,1,kv)
-
206  vn(ijk3)=-f(1,1,ku)
-
207  un(ijk5)=-f(1,1,ku)
-
208  vn(ijk5)=-f(1,1,kv)
-
209  un(ijk7)=-f(1,1,kv)
-
210  vn(ijk7)= f(1,1,ku)
-
211  us(ijk1)=-f(1,2,ku)
-
212  vs(ijk1)=-f(1,2,kv)
-
213  us(ijk3)=-f(1,2,kv)
-
214  vs(ijk3)= f(1,2,ku)
-
215  us(ijk5)= f(1,2,ku)
-
216  vs(ijk5)= f(1,2,kv)
-
217  us(ijk7)= f(1,2,kv)
-
218  vs(ijk7)=-f(1,2,ku)
-
219  ENDDO
-
220  IF(kmax.EQ.1) THEN
-
221  ku=1
-
222  kv=2
-
223  DO l=1,maxwv
-
224  lr=2*l+1
-
225  li=2*l+2
-
226  un(ij1)=un(ij1)+2*(f(lr,1,ku)*clon(l,1)
-
227  & -f(li,1,ku)*slon(l,1))
-
228  vn(ij1)=vn(ij1)+2*(f(lr,1,kv)*clon(l,1)
-
229  & -f(li,1,kv)*slon(l,1))
-
230  un(ij3)=un(ij3)+2*(f(lr,1,kv)*clon(l,3)
-
231  & -f(li,1,kv)*slon(l,3))
-
232  vn(ij3)=vn(ij3)-2*(f(lr,1,ku)*clon(l,3)
-
233  & -f(li,1,ku)*slon(l,3))
-
234  un(ij5)=un(ij5)-2*(f(lr,1,ku)*clon(l,5)
-
235  & -f(li,1,ku)*slon(l,5))
-
236  vn(ij5)=vn(ij5)-2*(f(lr,1,kv)*clon(l,5)
-
237  & -f(li,1,kv)*slon(l,5))
-
238  un(ij7)=un(ij7)-2*(f(lr,1,kv)*clon(l,7)
-
239  & -f(li,1,kv)*slon(l,7))
-
240  vn(ij7)=vn(ij7)+2*(f(lr,1,ku)*clon(l,7)
-
241  & -f(li,1,ku)*slon(l,7))
-
242  us(ij1)=us(ij1)-2*(f(lr,2,ku)*clon(l,5)
-
243  & -f(li,2,ku)*slon(l,5))
-
244  vs(ij1)=vs(ij1)-2*(f(lr,2,kv)*clon(l,5)
-
245  & -f(li,2,kv)*slon(l,5))
-
246  us(ij3)=us(ij3)-2*(f(lr,2,kv)*clon(l,3)
-
247  & -f(li,2,kv)*slon(l,3))
-
248  vs(ij3)=vs(ij3)+2*(f(lr,2,ku)*clon(l,3)
-
249  & -f(li,2,ku)*slon(l,3))
-
250  us(ij5)=us(ij5)+2*(f(lr,2,ku)*clon(l,1)
-
251  & -f(li,2,ku)*slon(l,1))
-
252  vs(ij5)=vs(ij5)+2*(f(lr,2,kv)*clon(l,1)
-
253  & -f(li,2,kv)*slon(l,1))
-
254  us(ij7)=us(ij7)+2*(f(lr,2,kv)*clon(l,7)
-
255  & -f(li,2,kv)*slon(l,7))
-
256  vs(ij7)=vs(ij7)-2*(f(lr,2,ku)*clon(l,7)
-
257  & -f(li,2,ku)*slon(l,7))
-
258  ENDDO
-
259  ELSE
-
260  DO l=1,maxwv
-
261  lr=2*l+1
-
262  li=2*l+2
-
263 CDIR$ IVDEP
-
264  DO k=1,kmax
-
265  ku=k
-
266  kv=k+kmax
-
267  ijk1=ij1+(k-1)*kg
-
268  ijk3=ij3+(k-1)*kg
-
269  ijk5=ij5+(k-1)*kg
-
270  ijk7=ij7+(k-1)*kg
-
271  un(ijk1)=un(ijk1)+2*(f(lr,1,ku)*clon(l,1)
-
272  & -f(li,1,ku)*slon(l,1))
-
273  vn(ijk1)=vn(ijk1)+2*(f(lr,1,kv)*clon(l,1)
-
274  & -f(li,1,kv)*slon(l,1))
-
275  un(ijk3)=un(ijk3)+2*(f(lr,1,kv)*clon(l,3)
-
276  & -f(li,1,kv)*slon(l,3))
-
277  vn(ijk3)=vn(ijk3)-2*(f(lr,1,ku)*clon(l,3)
-
278  & -f(li,1,ku)*slon(l,3))
-
279  un(ijk5)=un(ijk5)-2*(f(lr,1,ku)*clon(l,5)
-
280  & -f(li,1,ku)*slon(l,5))
-
281  vn(ijk5)=vn(ijk5)-2*(f(lr,1,kv)*clon(l,5)
-
282  & -f(li,1,kv)*slon(l,5))
-
283  un(ijk7)=un(ijk7)-2*(f(lr,1,kv)*clon(l,7)
-
284  & -f(li,1,kv)*slon(l,7))
-
285  vn(ijk7)=vn(ijk7)+2*(f(lr,1,ku)*clon(l,7)
-
286  & -f(li,1,ku)*slon(l,7))
-
287  us(ijk1)=us(ijk1)-2*(f(lr,2,ku)*clon(l,5)
-
288  & -f(li,2,ku)*slon(l,5))
-
289  vs(ijk1)=vs(ijk1)-2*(f(lr,2,kv)*clon(l,5)
-
290  & -f(li,2,kv)*slon(l,5))
-
291  us(ijk3)=us(ijk3)-2*(f(lr,2,kv)*clon(l,3)
-
292  & -f(li,2,kv)*slon(l,3))
-
293  vs(ijk3)=vs(ijk3)+2*(f(lr,2,ku)*clon(l,3)
-
294  & -f(li,2,ku)*slon(l,3))
-
295  us(ijk5)=us(ijk5)+2*(f(lr,2,ku)*clon(l,1)
-
296  & -f(li,2,ku)*slon(l,1))
-
297  vs(ijk5)=vs(ijk5)+2*(f(lr,2,kv)*clon(l,1)
-
298  & -f(li,2,kv)*slon(l,1))
-
299  us(ijk7)=us(ijk7)+2*(f(lr,2,kv)*clon(l,7)
-
300  & -f(li,2,kv)*slon(l,7))
-
301  vs(ijk7)=vs(ijk7)-2*(f(lr,2,ku)*clon(l,7)
-
302  & -f(li,2,ku)*slon(l,7))
-
303  ENDDO
-
304  ENDDO
-
305  ENDIF
-
306  ENDDO
-
307 
-
308 C CALCULATE POINTS ON THE MAIN DIAGONALS THROUGH THE POLE,
-
309 C STARTING CLOCKWISE OF THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
-
310 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
-
311 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
-
312 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
-
313 C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
-
314 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
-
315  DO j1=1,nph
-
316  i1=j1
-
317  radlon=(orient-45)/dpr
-
318  j3=nps+1-i1
-
319  i3=j1
-
320  j5=nps+1-j1
-
321  i5=nps+1-i1
-
322  j7=i1
-
323  i7=nps+1-j1
-
324  ij1=(i1-1)*ni+(j1-1)*nj+1
-
325  ij3=(i3-1)*ni+(j3-1)*nj+1
-
326  ij5=(i5-1)*ni+(j5-1)*nj+1
-
327  ij7=(i7-1)*ni+(j7-1)*nj+1
-
328  di1=i1-nph-1
-
329  dj1=j1-nph-1
-
330  rq=di1**2+dj1**2
-
331  slat1=(gq-rq)/(gq+rq)
-
332  clat1=sqrt(1.-slat1**2)
-
333  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
334  & pln,plntop)
-
335  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
-
336  & clat1,pln,plntop,mp,w,wtop,f)
-
337  DO l=1,maxwv
-
338  slon(l,1)=sin(l*radlon)
-
339  clon(l,1)=cos(l*radlon)
-
340  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
-
341  & -clon(l,1)*srot(mod(1*l,4))
-
342  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
-
343  & +slon(l,1)*srot(mod(1*l,4))
-
344  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
-
345  & -clon(l,1)*srot(mod(2*l,4))
-
346  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
-
347  & +slon(l,1)*srot(mod(2*l,4))
-
348  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
-
349  & -clon(l,1)*srot(mod(3*l,4))
-
350  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
-
351  & +slon(l,1)*srot(mod(3*l,4))
-
352  ENDDO
-
353 CDIR$ IVDEP
-
354  DO k=1,kmax
-
355  ku=k
-
356  kv=k+kmax
-
357  ijk1=ij1+(k-1)*kg
-
358  ijk3=ij3+(k-1)*kg
-
359  ijk5=ij5+(k-1)*kg
-
360  ijk7=ij7+(k-1)*kg
-
361  un(ijk1)=srh*( f(1,1,ku)+f(1,1,kv))
-
362  vn(ijk1)=srh*(-f(1,1,ku)+f(1,1,kv))
-
363  un(ijk3)=srh*(-f(1,1,ku)+f(1,1,kv))
-
364  vn(ijk3)=srh*(-f(1,1,ku)-f(1,1,kv))
-
365  un(ijk5)=srh*(-f(1,1,ku)-f(1,1,kv))
-
366  vn(ijk5)=srh*( f(1,1,ku)-f(1,1,kv))
-
367  un(ijk7)=srh*( f(1,1,ku)-f(1,1,kv))
-
368  vn(ijk7)=srh*( f(1,1,ku)+f(1,1,kv))
-
369  us(ijk1)=srh*(-f(1,2,ku)-f(1,2,kv))
-
370  vs(ijk1)=srh*( f(1,2,ku)-f(1,2,kv))
-
371  us(ijk3)=srh*( f(1,2,ku)-f(1,2,kv))
-
372  vs(ijk3)=srh*( f(1,2,ku)+f(1,2,kv))
-
373  us(ijk5)=srh*( f(1,2,ku)+f(1,2,kv))
-
374  vs(ijk5)=srh*(-f(1,2,ku)+f(1,2,kv))
-
375  us(ijk7)=srh*(-f(1,2,ku)+f(1,2,kv))
-
376  vs(ijk7)=srh*(-f(1,2,ku)-f(1,2,kv))
-
377  ENDDO
-
378  IF(kmax.EQ.1) THEN
-
379  ku=1
-
380  kv=2
-
381  DO l=1,maxwv
-
382  lr=2*l+1
-
383  li=2*l+2
-
384  un(ij1)=un(ij1)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
-
385  & *clon(l,1)
-
386  & -( f(li,1,ku)+f(li,1,kv))
-
387  & *slon(l,1))
-
388  vn(ij1)=vn(ij1)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
-
389  & *clon(l,1)
-
390  & -(-f(li,1,ku)+f(li,1,kv))
-
391  & *slon(l,1))
-
392  un(ij3)=un(ij3)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
-
393  & *clon(l,3)
-
394  & -(-f(li,1,ku)+f(li,1,kv))
-
395  & *slon(l,3))
-
396  vn(ij3)=vn(ij3)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
-
397  & *clon(l,3)
-
398  & -(-f(li,1,ku)-f(li,1,kv))
-
399  & *slon(l,3))
-
400  un(ij5)=un(ij5)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
-
401  & *clon(l,5)
-
402  & -(-f(li,1,ku)-f(li,1,kv))
-
403  & *slon(l,5))
-
404  vn(ij5)=vn(ij5)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
-
405  & *clon(l,5)
-
406  & -( f(li,1,ku)-f(li,1,kv))
-
407  & *slon(l,5))
-
408  un(ij7)=un(ij7)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
-
409  & *clon(l,7)
-
410  & -( f(li,1,ku)-f(li,1,kv))
-
411  & *slon(l,7))
-
412  vn(ij7)=vn(ij7)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
-
413  & *clon(l,7)
-
414  & -( f(li,1,ku)+f(li,1,kv))
-
415  & *slon(l,7))
-
416  us(ij1)=us(ij1)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
-
417  & *clon(l,3)
-
418  & -(-f(li,2,ku)-f(li,2,kv))
-
419  & *slon(l,3))
-
420  vs(ij1)=vs(ij1)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
-
421  & *clon(l,3)
-
422  & -( f(li,2,ku)-f(li,2,kv))
-
423  & *slon(l,3))
-
424  us(ij3)=us(ij3)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
-
425  & *clon(l,1)
-
426  & -( f(li,2,ku)-f(li,2,kv))
-
427  & *slon(l,1))
-
428  vs(ij3)=vs(ij3)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
-
429  & *clon(l,1)
-
430  & -( f(li,2,ku)+f(li,2,kv))
-
431  & *slon(l,1))
-
432  us(ij5)=us(ij5)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
-
433  & *clon(l,7)
-
434  & -( f(li,2,ku)+f(li,2,kv))
-
435  & *slon(l,7))
-
436  vs(ij5)=vs(ij5)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
-
437  & *clon(l,7)
-
438  & -(-f(li,2,ku)+f(li,2,kv))
-
439  & *slon(l,7))
-
440  us(ij7)=us(ij7)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
-
441  & *clon(l,5)
-
442  & -(-f(li,2,ku)+f(li,2,kv))
-
443  & *slon(l,5))
-
444  vs(ij7)=vs(ij7)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
-
445  & *clon(l,5)
-
446  & -(-f(li,2,ku)-f(li,2,kv))
-
447  & *slon(l,5))
-
448  ENDDO
-
449  ELSE
-
450  DO l=1,maxwv
-
451  lr=2*l+1
-
452  li=2*l+2
-
453 CDIR$ IVDEP
-
454  DO k=1,kmax
-
455  ku=k
-
456  kv=k+kmax
-
457  ijk1=ij1+(k-1)*kg
-
458  ijk3=ij3+(k-1)*kg
-
459  ijk5=ij5+(k-1)*kg
-
460  ijk7=ij7+(k-1)*kg
-
461  un(ijk1)=un(ijk1)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
-
462  & *clon(l,1)
-
463  & -( f(li,1,ku)+f(li,1,kv))
-
464  & *slon(l,1))
-
465  vn(ijk1)=vn(ijk1)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
-
466  & *clon(l,1)
-
467  & -(-f(li,1,ku)+f(li,1,kv))
-
468  & *slon(l,1))
-
469  un(ijk3)=un(ijk3)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
-
470  & *clon(l,3)
-
471  & -(-f(li,1,ku)+f(li,1,kv))
-
472  & *slon(l,3))
-
473  vn(ijk3)=vn(ijk3)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
-
474  & *clon(l,3)
-
475  & -(-f(li,1,ku)-f(li,1,kv))
-
476  & *slon(l,3))
-
477  un(ijk5)=un(ijk5)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
-
478  & *clon(l,5)
-
479  & -(-f(li,1,ku)-f(li,1,kv))
-
480  & *slon(l,5))
-
481  vn(ijk5)=vn(ijk5)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
-
482  & *clon(l,5)
-
483  & -( f(li,1,ku)-f(li,1,kv))
-
484  & *slon(l,5))
-
485  un(ijk7)=un(ijk7)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
-
486  & *clon(l,7)
-
487  & -( f(li,1,ku)-f(li,1,kv))
-
488  & *slon(l,7))
-
489  vn(ijk7)=vn(ijk7)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
-
490  & *clon(l,7)
-
491  & -( f(li,1,ku)+f(li,1,kv))
-
492  & *slon(l,7))
-
493  us(ijk1)=us(ijk1)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
-
494  & *clon(l,3)
-
495  & -(-f(li,2,ku)-f(li,2,kv))
-
496  & *slon(l,3))
-
497  vs(ijk1)=vs(ijk1)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
-
498  & *clon(l,3)
-
499  & -( f(li,2,ku)-f(li,2,kv))
-
500  & *slon(l,3))
-
501  us(ijk3)=us(ijk3)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
-
502  & *clon(l,1)
-
503  & -( f(li,2,ku)-f(li,2,kv))
-
504  & *slon(l,1))
-
505  vs(ijk3)=vs(ijk3)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
-
506  & *clon(l,1)
-
507  & -( f(li,2,ku)+f(li,2,kv))
-
508  & *slon(l,1))
-
509  us(ijk5)=us(ijk5)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
-
510  & *clon(l,7)
-
511  & -( f(li,2,ku)+f(li,2,kv))
-
512  & *slon(l,7))
-
513  vs(ijk5)=vs(ijk5)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
-
514  & *clon(l,7)
-
515  & -(-f(li,2,ku)+f(li,2,kv))
-
516  & *slon(l,7))
-
517  us(ijk7)=us(ijk7)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
-
518  & *clon(l,5)
-
519  & -(-f(li,2,ku)+f(li,2,kv))
-
520  & *slon(l,5))
-
521  vs(ijk7)=vs(ijk7)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
-
522  & *clon(l,5)
-
523  & -(-f(li,2,ku)-f(li,2,kv))
-
524  & *slon(l,5))
-
525  ENDDO
-
526  ENDDO
-
527  ENDIF
-
528  ENDDO
-
529 
-
530 C CALCULATE THE REMAINDER OF THE POLAR STEREOGRAPHIC DOMAIN,
-
531 C STARTING AT THE SECTOR JUST CLOCKWISE OF THE ORIENTATION LONGITUDE
-
532 C AND GOING CLOCKWISE UNTIL ALL EIGHT SECTORS ARE DONE.
-
533 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
-
534 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
-
535 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
-
536 C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
-
537 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
-
538  DO j1=1,nph-1
-
539  DO i1=j1+1,nph
-
540  j2=i1
-
541  i2=j1
-
542  j3=nps+1-i1
-
543  i3=j1
-
544  j4=nps+1-j1
-
545  i4=i1
-
546  j5=nps+1-j1
-
547  i5=nps+1-i1
-
548  j6=nps+1-i1
-
549  i6=nps+1-j1
-
550  j7=i1
-
551  i7=nps+1-j1
-
552  j8=j1
-
553  i8=nps+1-i1
-
554  ij1=(i1-1)*ni+(j1-1)*nj+1
-
555  ij2=(i2-1)*ni+(j2-1)*nj+1
-
556  ij3=(i3-1)*ni+(j3-1)*nj+1
-
557  ij4=(i4-1)*ni+(j4-1)*nj+1
-
558  ij5=(i5-1)*ni+(j5-1)*nj+1
-
559  ij6=(i6-1)*ni+(j6-1)*nj+1
-
560  ij7=(i7-1)*ni+(j7-1)*nj+1
-
561  ij8=(i8-1)*ni+(j8-1)*nj+1
-
562  di1=i1-nph-1
-
563  dj1=j1-nph-1
-
564  rq=di1**2+dj1**2
-
565  rr=sqrt(1/rq)
-
566  slat1=(gq-rq)/(gq+rq)
-
567  clat1=sqrt(1.-slat1**2)
-
568  radlon1=orient/dpr+atan(-di1/dj1)
-
569  radlon2=(orient-45)/dpr*2-radlon1
-
570  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
571  & pln,plntop)
-
572  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
-
573  & clat1,pln,plntop,mp,w,wtop,f)
-
574  DO l=1,maxwv
-
575  slon(l,1)=sin(l*radlon1)
-
576  clon(l,1)=cos(l*radlon1)
-
577  slon(l,2)=sin(l*radlon2)
-
578  clon(l,2)=cos(l*radlon2)
-
579  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
-
580  & -clon(l,1)*srot(mod(1*l,4))
-
581  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
-
582  & +slon(l,1)*srot(mod(1*l,4))
-
583  slon(l,4)=slon(l,2)*crot(mod(1*l,4))
-
584  & -clon(l,2)*srot(mod(1*l,4))
-
585  clon(l,4)=clon(l,2)*crot(mod(1*l,4))
-
586  & +slon(l,2)*srot(mod(1*l,4))
-
587  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
-
588  & -clon(l,1)*srot(mod(2*l,4))
-
589  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
-
590  & +slon(l,1)*srot(mod(2*l,4))
-
591  slon(l,6)=slon(l,2)*crot(mod(2*l,4))
-
592  & -clon(l,2)*srot(mod(2*l,4))
-
593  clon(l,6)=clon(l,2)*crot(mod(2*l,4))
-
594  & +slon(l,2)*srot(mod(2*l,4))
-
595  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
-
596  & -clon(l,1)*srot(mod(3*l,4))
-
597  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
-
598  & +slon(l,1)*srot(mod(3*l,4))
-
599  slon(l,8)=slon(l,2)*crot(mod(3*l,4))
-
600  & -clon(l,2)*srot(mod(3*l,4))
-
601  clon(l,8)=clon(l,2)*crot(mod(3*l,4))
-
602  & +slon(l,2)*srot(mod(3*l,4))
-
603  ENDDO
-
604 CDIR$ IVDEP
-
605  DO k=1,kmax
-
606  ku=k
-
607  kv=k+kmax
-
608  ijk1=ij1+(k-1)*kg
-
609  ijk2=ij2+(k-1)*kg
-
610  ijk3=ij3+(k-1)*kg
-
611  ijk4=ij4+(k-1)*kg
-
612  ijk5=ij5+(k-1)*kg
-
613  ijk6=ij6+(k-1)*kg
-
614  ijk7=ij7+(k-1)*kg
-
615  ijk8=ij8+(k-1)*kg
-
616  un(ijk1)=rr*(-dj1*f(1,1,ku)-di1*f(1,1,kv))
-
617  vn(ijk1)=rr*( di1*f(1,1,ku)-dj1*f(1,1,kv))
-
618  un(ijk2)=rr*(-di1*f(1,1,ku)-dj1*f(1,1,kv))
-
619  vn(ijk2)=rr*( dj1*f(1,1,ku)-di1*f(1,1,kv))
-
620  un(ijk3)=rr*( di1*f(1,1,ku)-dj1*f(1,1,kv))
-
621  vn(ijk3)=rr*( dj1*f(1,1,ku)+di1*f(1,1,kv))
-
622  un(ijk4)=rr*( dj1*f(1,1,ku)-di1*f(1,1,kv))
-
623  vn(ijk4)=rr*( di1*f(1,1,ku)+dj1*f(1,1,kv))
-
624  un(ijk5)=rr*( dj1*f(1,1,ku)+di1*f(1,1,kv))
-
625  vn(ijk5)=rr*(-di1*f(1,1,ku)+dj1*f(1,1,kv))
-
626  un(ijk6)=rr*( di1*f(1,1,ku)+dj1*f(1,1,kv))
-
627  vn(ijk6)=rr*(-dj1*f(1,1,ku)+di1*f(1,1,kv))
-
628  un(ijk7)=rr*(-di1*f(1,1,ku)+dj1*f(1,1,kv))
-
629  vn(ijk7)=rr*(-dj1*f(1,1,ku)-di1*f(1,1,kv))
-
630  un(ijk8)=rr*(-dj1*f(1,1,ku)+di1*f(1,1,kv))
-
631  vn(ijk8)=rr*(-di1*f(1,1,ku)-dj1*f(1,1,kv))
-
632  us(ijk1)=rr*( dj1*f(1,2,ku)+di1*f(1,2,kv))
-
633  vs(ijk1)=rr*(-di1*f(1,2,ku)+dj1*f(1,2,kv))
-
634  us(ijk2)=rr*( di1*f(1,2,ku)+dj1*f(1,2,kv))
-
635  vs(ijk2)=rr*(-dj1*f(1,2,ku)+di1*f(1,2,kv))
-
636  us(ijk3)=rr*(-di1*f(1,2,ku)+dj1*f(1,2,kv))
-
637  vs(ijk3)=rr*(-dj1*f(1,2,ku)-di1*f(1,2,kv))
-
638  us(ijk4)=rr*(-dj1*f(1,2,ku)+di1*f(1,2,kv))
-
639  vs(ijk4)=rr*(-di1*f(1,2,ku)-dj1*f(1,2,kv))
-
640  us(ijk5)=rr*(-dj1*f(1,2,ku)-di1*f(1,2,kv))
-
641  vs(ijk5)=rr*( di1*f(1,2,ku)-dj1*f(1,2,kv))
-
642  us(ijk6)=rr*(-di1*f(1,2,ku)-dj1*f(1,2,kv))
-
643  vs(ijk6)=rr*( dj1*f(1,2,ku)-di1*f(1,2,kv))
-
644  us(ijk7)=rr*( di1*f(1,2,ku)-dj1*f(1,2,kv))
-
645  vs(ijk7)=rr*( dj1*f(1,2,ku)+di1*f(1,2,kv))
-
646  us(ijk8)=rr*( dj1*f(1,2,ku)-di1*f(1,2,kv))
-
647  vs(ijk8)=rr*( di1*f(1,2,ku)+dj1*f(1,2,kv))
-
648  ENDDO
-
649  IF(kmax.EQ.1) THEN
-
650  ku=1
-
651  kv=2
-
652  DO l=1,maxwv
-
653  lr=2*l+1
-
654  li=2*l+2
-
655  un(ij1)=un(ij1)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
656  & *clon(l,1)
-
657  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
-
658  & *slon(l,1))
-
659  vn(ij1)=vn(ij1)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
660  & *clon(l,1)
-
661  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
-
662  & *slon(l,1))
-
663  un(ij2)=un(ij2)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
664  & *clon(l,2)
-
665  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
-
666  & *slon(l,2))
-
667  vn(ij2)=vn(ij2)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
668  & *clon(l,2)
-
669  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
-
670  & *slon(l,2))
-
671  un(ij3)=un(ij3)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
672  & *clon(l,3)
-
673  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
-
674  & *slon(l,3))
-
675  vn(ij3)=vn(ij3)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
676  & *clon(l,3)
-
677  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
-
678  & *slon(l,3))
-
679  un(ij4)=un(ij4)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
680  & *clon(l,4)
-
681  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
-
682  & *slon(l,4))
-
683  vn(ij4)=vn(ij4)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
684  & *clon(l,4)
-
685  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
-
686  & *slon(l,4))
-
687  un(ij5)=un(ij5)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
688  & *clon(l,5)
-
689  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
-
690  & *slon(l,5))
-
691  vn(ij5)=vn(ij5)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
692  & *clon(l,5)
-
693  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
-
694  & *slon(l,5))
-
695  un(ij6)=un(ij6)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
696  & *clon(l,6)
-
697  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
-
698  & *slon(l,6))
-
699  vn(ij6)=vn(ij6)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
700  & *clon(l,6)
-
701  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
-
702  & *slon(l,6))
-
703  un(ij7)=un(ij7)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
704  & *clon(l,7)
-
705  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
-
706  & *slon(l,7))
-
707  vn(ij7)=vn(ij7)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
708  & *clon(l,7)
-
709  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
-
710  & *slon(l,7))
-
711  un(ij8)=un(ij8)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
712  & *clon(l,8)
-
713  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
-
714  & *slon(l,8))
-
715  vn(ij8)=vn(ij8)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
716  & *clon(l,8)
-
717  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
-
718  & *slon(l,8))
-
719  us(ij1)=us(ij1)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
720  & *clon(l,4)
-
721  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
-
722  & *slon(l,4))
-
723  vs(ij1)=vs(ij1)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
724  & *clon(l,4)
-
725  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
-
726  & *slon(l,4))
-
727  us(ij2)=us(ij2)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
728  & *clon(l,3)
-
729  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
-
730  & *slon(l,3))
-
731  vs(ij2)=vs(ij2)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
732  & *clon(l,3)
-
733  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
-
734  & *slon(l,3))
-
735  us(ij3)=us(ij3)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
736  & *clon(l,2)
-
737  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
-
738  & *slon(l,2))
-
739  vs(ij3)=vs(ij3)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
740  & *clon(l,2)
-
741  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
-
742  & *slon(l,2))
-
743  us(ij4)=us(ij4)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
744  & *clon(l,1)
-
745  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
-
746  & *slon(l,1))
-
747  vs(ij4)=vs(ij4)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
748  & *clon(l,1)
-
749  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
-
750  & *slon(l,1))
-
751  us(ij5)=us(ij5)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
752  & *clon(l,8)
-
753  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
-
754  & *slon(l,8))
-
755  vs(ij5)=vs(ij5)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
756  & *clon(l,8)
-
757  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
-
758  & *slon(l,8))
-
759  us(ij6)=us(ij6)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
760  & *clon(l,7)
-
761  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
-
762  & *slon(l,7))
-
763  vs(ij6)=vs(ij6)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
764  & *clon(l,7)
-
765  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
-
766  & *slon(l,7))
-
767  us(ij7)=us(ij7)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
768  & *clon(l,6)
-
769  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
-
770  & *slon(l,6))
-
771  vs(ij7)=vs(ij7)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
772  & *clon(l,6)
-
773  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
-
774  & *slon(l,6))
-
775  us(ij8)=us(ij8)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
776  & *clon(l,5)
-
777  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
-
778  & *slon(l,5))
-
779  vs(ij8)=vs(ij8)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
780  & *clon(l,5)
-
781  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
-
782  & *slon(l,5))
-
783  ENDDO
-
784  ELSE
-
785  DO l=1,maxwv
-
786  lr=2*l+1
-
787  li=2*l+2
-
788 CDIR$ IVDEP
-
789  DO k=1,kmax
-
790  ku=k
-
791  kv=k+kmax
-
792  ijk1=ij1+(k-1)*kg
-
793  ijk2=ij2+(k-1)*kg
-
794  ijk3=ij3+(k-1)*kg
-
795  ijk4=ij4+(k-1)*kg
-
796  ijk5=ij5+(k-1)*kg
-
797  ijk6=ij6+(k-1)*kg
-
798  ijk7=ij7+(k-1)*kg
-
799  ijk8=ij8+(k-1)*kg
-
800  un(ijk1)=un(ijk1)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
801  & *clon(l,1)
-
802  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
-
803  & *slon(l,1))
-
804  vn(ijk1)=vn(ijk1)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
805  & *clon(l,1)
-
806  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
-
807  & *slon(l,1))
-
808  un(ijk2)=un(ijk2)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
809  & *clon(l,2)
-
810  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
-
811  & *slon(l,2))
-
812  vn(ijk2)=vn(ijk2)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
813  & *clon(l,2)
-
814  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
-
815  & *slon(l,2))
-
816  un(ijk3)=un(ijk3)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
817  & *clon(l,3)
-
818  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
-
819  & *slon(l,3))
-
820  vn(ijk3)=vn(ijk3)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
821  & *clon(l,3)
-
822  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
-
823  & *slon(l,3))
-
824  un(ijk4)=un(ijk4)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
825  & *clon(l,4)
-
826  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
-
827  & *slon(l,4))
-
828  vn(ijk4)=vn(ijk4)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
829  & *clon(l,4)
-
830  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
-
831  & *slon(l,4))
-
832  un(ijk5)=un(ijk5)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
833  & *clon(l,5)
-
834  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
-
835  & *slon(l,5))
-
836  vn(ijk5)=vn(ijk5)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
837  & *clon(l,5)
-
838  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
-
839  & *slon(l,5))
-
840  un(ijk6)=un(ijk6)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
841  & *clon(l,6)
-
842  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
-
843  & *slon(l,6))
-
844  vn(ijk6)=vn(ijk6)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
845  & *clon(l,6)
-
846  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
-
847  & *slon(l,6))
-
848  un(ijk7)=un(ijk7)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
-
849  & *clon(l,7)
-
850  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
-
851  & *slon(l,7))
-
852  vn(ijk7)=vn(ijk7)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
-
853  & *clon(l,7)
-
854  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
-
855  & *slon(l,7))
-
856  un(ijk8)=un(ijk8)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
-
857  & *clon(l,8)
-
858  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
-
859  & *slon(l,8))
-
860  vn(ijk8)=vn(ijk8)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
-
861  & *clon(l,8)
-
862  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
-
863  & *slon(l,8))
-
864  us(ijk1)=us(ijk1)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
865  & *clon(l,4)
-
866  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
-
867  & *slon(l,4))
-
868  vs(ijk1)=vs(ijk1)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
869  & *clon(l,4)
-
870  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
-
871  & *slon(l,4))
-
872  us(ijk2)=us(ijk2)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
873  & *clon(l,3)
-
874  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
-
875  & *slon(l,3))
-
876  vs(ijk2)=vs(ijk2)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
877  & *clon(l,3)
-
878  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
-
879  & *slon(l,3))
-
880  us(ijk3)=us(ijk3)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
881  & *clon(l,2)
-
882  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
-
883  & *slon(l,2))
-
884  vs(ijk3)=vs(ijk3)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
885  & *clon(l,2)
-
886  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
-
887  & *slon(l,2))
-
888  us(ijk4)=us(ijk4)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
889  & *clon(l,1)
-
890  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
-
891  & *slon(l,1))
-
892  vs(ijk4)=vs(ijk4)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
893  & *clon(l,1)
-
894  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
-
895  & *slon(l,1))
-
896  us(ijk5)=us(ijk5)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
897  & *clon(l,8)
-
898  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
-
899  & *slon(l,8))
-
900  vs(ijk5)=vs(ijk5)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
901  & *clon(l,8)
-
902  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
-
903  & *slon(l,8))
-
904  us(ijk6)=us(ijk6)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
905  & *clon(l,7)
-
906  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
-
907  & *slon(l,7))
-
908  vs(ijk6)=vs(ijk6)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
909  & *clon(l,7)
-
910  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
-
911  & *slon(l,7))
-
912  us(ijk7)=us(ijk7)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
-
913  & *clon(l,6)
-
914  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
-
915  & *slon(l,6))
-
916  vs(ijk7)=vs(ijk7)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
-
917  & *clon(l,6)
-
918  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
-
919  & *slon(l,6))
-
920  us(ijk8)=us(ijk8)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
-
921  & *clon(l,5)
-
922  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
-
923  & *slon(l,5))
-
924  vs(ijk8)=vs(ijk8)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
-
925  & *clon(l,5)
-
926  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
-
927  & *slon(l,5))
-
928  ENDDO
-
929  ENDDO
-
930  ENDIF
-
931  ENDDO
-
932  ENDDO
-
933 
-
934  END
-
subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
Computes the wind components from divergence and vorticity in spectral space.
Definition: spdz2uv.f:49
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgpsv(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition: sptgpsv.f:83
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral vector to polar stereo.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | Iredell | Initial.
+
8C> 1998-12-15 | Iredell | Openmp directives inserted.
+
9C>
+
10C> @author Iredell @date 96-02-29
+
11
+
12C> This subprogram performs a spherical transform
+
13C> from spectral coefficients of divergences and curls
+
14C> to vector fields on a pair of polar stereographic grids.
+
15C> The wave-space can be either triangular or rhomboidal.
+
16C>
+
17C> The wave and grid fields may have general indexing,
+
18C> but each wave field is in sequential 'IBM order',
+
19C> i.e. with zonal wavenumber as the slower index.
+
20C>
+
21C> The two square polar stereographic grids are centered
+
22C> on the respective poles, with the orientation longitude
+
23C> of the southern hemisphere grid 180 degrees opposite
+
24C> that of the northern hemisphere grid.
+
25C>
+
26C> The vectors are automatically rotated to be resolved
+
27C> relative to the respective polar stereographic grids.
+
28C>
+
29C> The transform is made efficient
+
30C> by combining points in eight sectors
+
31C> of each polar stereographic grid,
+
32C> numbered as in the diagram below.
+
33C> The pole and the sector boundaries
+
34C> are treated specially in the code.
+
35C> Unfortunately, this approach induces
+
36C> some hairy indexing and code loquacity,
+
37C> for which the developer apologizes.
+
38C>
+
39C> <pre>
+
40C> \ 4 | 5 /
+
41C> \ | /
+
42C> 3 \ | / 6
+
43C> \|/
+
44C> ----+----
+
45C> /|\
+
46C> 2 / | \ 7
+
47C> / | \
+
48C> / 1 | 8 \
+
49C> </pre>
+
50C>
+
51C> The transforms are all multiprocessed over sector points.
+
52C> transform several fields at a time to improve vectorization.
+
53C> subprogram can be called from a multiprocessing environment.
+
54C>
+
55C> @param IROMB spectral domain shape
+
56C> (0 for triangular, 1 for rhomboidal)
+
57C> @param MAXWV spectral truncation
+
58C> @param KMAX number of fields to transform.
+
59C> @param NPS odd order of the polar stereographic grids
+
60C> @param KWSKIP skip number between wave fields
+
61C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
62C> @param KGSKIP skip number between grid fields
+
63C> (defaults to NPS*NPS if KGSKIP=0)
+
64C> @param NISKIP skip number between grid i-points
+
65C> (defaults to 1 if NISKIP=0)
+
66C> @param NJSKIP skip number between grid j-points
+
67C> (defaults to NPS if NJSKIP=0)
+
68C> @param TRUE latitude at which ps grid is true (usually 60.)
+
69C> @param XMESH grid length at true latitude (m)
+
70C> @param ORIENT longitude at bottom of northern ps grid
+
71C> (southern ps grid will have opposite orientation.)
+
72C> @param WAVED wave divergence fields
+
73C> @param WAVEZ wave vorticity fields
+
74C> @param UN northern polar stereographic u-winds
+
75C> @param VN northern polar stereographic v-winds
+
76C> @param US southern polar stereographic u-winds
+
77C> @param VS southern polar stereographic v-winds
+
78C>
+
79C> @author Iredell @date 96-02-29
+
+
80 SUBROUTINE sptgpsv(IROMB,MAXWV,KMAX,NPS,
+
81 & KWSKIP,KGSKIP,NISKIP,NJSKIP,
+
82 & TRUE,XMESH,ORIENT,WAVED,WAVEZ,UN,VN,US,VS)
+
83
+
84 REAL WAVED(*),WAVEZ(*),UN(*),VN(*),US(*),VS(*)
+
85 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
86 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
87 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
88 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
89 INTEGER MP(2*KMAX)
+
90 REAL SLON(MAXWV,8),CLON(MAXWV,8),SROT(0:3),CROT(0:3)
+
91 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
+
92 REAL WTOP(2*(MAXWV+1),2*KMAX)
+
93 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
94 REAL F(2*MAXWV+3,2,2*KMAX)
+
95 DATA srot/0.,1.,0.,-1./,crot/1.,0.,-1.,0./
+
96 parameter(rerth=6.3712e6)
+
97 parameter(pi=3.14159265358979,dpr=180./pi)
+
98
+
99C CALCULATE PRELIMINARY CONSTANTS
+
100 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
101 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
102 mxtop=maxwv+1
+
103 mdim=2*mx+1
+
104 idim=2*maxwv+3
+
105 kw=kwskip
+
106 kg=kgskip
+
107 ni=niskip
+
108 nj=njskip
+
109 IF(kw.EQ.0) kw=2*mx
+
110 IF(kg.EQ.0) kg=nps*nps
+
111 IF(ni.EQ.0) ni=1
+
112 IF(nj.EQ.0) nj=nps
+
113 mp=1
+
114 nph=(nps-1)/2
+
115 gq=((1.+sin(true/dpr))*rerth/xmesh)**2
+
116 srh=sqrt(0.5)
+
117
+
118C CALCULATE SPECTRAL WINDS
+
119C$OMP PARALLEL DO PRIVATE(KWS)
+
120 DO k=1,kmax
+
121 kws=(k-1)*kw
+
122 CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
+
123 & waved(kws+1),wavez(kws+1),
+
124 & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
+
125 ENDDO
+
126
+
127C CALCULATE POLE POINT
+
128 i1=nph+1
+
129 j1=nph+1
+
130 ij1=(i1-1)*ni+(j1-1)*nj+1
+
131 slat1=1.
+
132 clat1=0.
+
133 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
134 & pln,plntop)
+
135 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
+
136 & clat1,pln,plntop,mp,w,wtop,f)
+
137 coso=cos(orient/dpr)
+
138 sino=sin(orient/dpr)
+
139CDIR$ IVDEP
+
140 DO k=1,kmax
+
141 ku=k
+
142 kv=k+kmax
+
143 ijk1=ij1+(k-1)*kg
+
144 un(ijk1)=2*( coso*f(3,1,ku)+sino*f(3,1,kv))
+
145 vn(ijk1)=2*(-sino*f(3,1,ku)+coso*f(3,1,kv))
+
146 us(ijk1)=2*( coso*f(3,2,ku)-sino*f(3,2,kv))
+
147 vs(ijk1)=2*( sino*f(3,2,ku)+coso*f(3,2,kv))
+
148 ENDDO
+
149
+
150C CALCULATE POINTS ALONG THE ROW AND COLUMN OF THE POLE,
+
151C STARTING AT THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
+
152C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
+
153C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
+
154C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
+
155C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
+
156C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
+
157 DO j1=1,nph
+
158 i1=nph+1
+
159 radlon=orient/dpr
+
160 j3=nps+1-i1
+
161 i3=j1
+
162 j5=nps+1-j1
+
163 i5=nps+1-i1
+
164 j7=i1
+
165 i7=nps+1-j1
+
166 ij1=(i1-1)*ni+(j1-1)*nj+1
+
167 ij3=(i3-1)*ni+(j3-1)*nj+1
+
168 ij5=(i5-1)*ni+(j5-1)*nj+1
+
169 ij7=(i7-1)*ni+(j7-1)*nj+1
+
170 di1=i1-nph-1
+
171 dj1=j1-nph-1
+
172 rq=di1**2+dj1**2
+
173 slat1=(gq-rq)/(gq+rq)
+
174 clat1=sqrt(1.-slat1**2)
+
175 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
176 & pln,plntop)
+
177 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
+
178 & clat1,pln,plntop,mp,w,wtop,f)
+
179 DO l=1,maxwv
+
180 slon(l,1)=sin(l*radlon)
+
181 clon(l,1)=cos(l*radlon)
+
182 slon(l,3)=slon(l,1)*crot(mod(1*l,4))
+
183 & -clon(l,1)*srot(mod(1*l,4))
+
184 clon(l,3)=clon(l,1)*crot(mod(1*l,4))
+
185 & +slon(l,1)*srot(mod(1*l,4))
+
186 slon(l,5)=slon(l,1)*crot(mod(2*l,4))
+
187 & -clon(l,1)*srot(mod(2*l,4))
+
188 clon(l,5)=clon(l,1)*crot(mod(2*l,4))
+
189 & +slon(l,1)*srot(mod(2*l,4))
+
190 slon(l,7)=slon(l,1)*crot(mod(3*l,4))
+
191 & -clon(l,1)*srot(mod(3*l,4))
+
192 clon(l,7)=clon(l,1)*crot(mod(3*l,4))
+
193 & +slon(l,1)*srot(mod(3*l,4))
+
194 ENDDO
+
195CDIR$ IVDEP
+
196 DO k=1,kmax
+
197 ku=k
+
198 kv=k+kmax
+
199 ijk1=ij1+(k-1)*kg
+
200 ijk3=ij3+(k-1)*kg
+
201 ijk5=ij5+(k-1)*kg
+
202 ijk7=ij7+(k-1)*kg
+
203 un(ijk1)= f(1,1,ku)
+
204 vn(ijk1)= f(1,1,kv)
+
205 un(ijk3)= f(1,1,kv)
+
206 vn(ijk3)=-f(1,1,ku)
+
207 un(ijk5)=-f(1,1,ku)
+
208 vn(ijk5)=-f(1,1,kv)
+
209 un(ijk7)=-f(1,1,kv)
+
210 vn(ijk7)= f(1,1,ku)
+
211 us(ijk1)=-f(1,2,ku)
+
212 vs(ijk1)=-f(1,2,kv)
+
213 us(ijk3)=-f(1,2,kv)
+
214 vs(ijk3)= f(1,2,ku)
+
215 us(ijk5)= f(1,2,ku)
+
216 vs(ijk5)= f(1,2,kv)
+
217 us(ijk7)= f(1,2,kv)
+
218 vs(ijk7)=-f(1,2,ku)
+
219 ENDDO
+
220 IF(kmax.EQ.1) THEN
+
221 ku=1
+
222 kv=2
+
223 DO l=1,maxwv
+
224 lr=2*l+1
+
225 li=2*l+2
+
226 un(ij1)=un(ij1)+2*(f(lr,1,ku)*clon(l,1)
+
227 & -f(li,1,ku)*slon(l,1))
+
228 vn(ij1)=vn(ij1)+2*(f(lr,1,kv)*clon(l,1)
+
229 & -f(li,1,kv)*slon(l,1))
+
230 un(ij3)=un(ij3)+2*(f(lr,1,kv)*clon(l,3)
+
231 & -f(li,1,kv)*slon(l,3))
+
232 vn(ij3)=vn(ij3)-2*(f(lr,1,ku)*clon(l,3)
+
233 & -f(li,1,ku)*slon(l,3))
+
234 un(ij5)=un(ij5)-2*(f(lr,1,ku)*clon(l,5)
+
235 & -f(li,1,ku)*slon(l,5))
+
236 vn(ij5)=vn(ij5)-2*(f(lr,1,kv)*clon(l,5)
+
237 & -f(li,1,kv)*slon(l,5))
+
238 un(ij7)=un(ij7)-2*(f(lr,1,kv)*clon(l,7)
+
239 & -f(li,1,kv)*slon(l,7))
+
240 vn(ij7)=vn(ij7)+2*(f(lr,1,ku)*clon(l,7)
+
241 & -f(li,1,ku)*slon(l,7))
+
242 us(ij1)=us(ij1)-2*(f(lr,2,ku)*clon(l,5)
+
243 & -f(li,2,ku)*slon(l,5))
+
244 vs(ij1)=vs(ij1)-2*(f(lr,2,kv)*clon(l,5)
+
245 & -f(li,2,kv)*slon(l,5))
+
246 us(ij3)=us(ij3)-2*(f(lr,2,kv)*clon(l,3)
+
247 & -f(li,2,kv)*slon(l,3))
+
248 vs(ij3)=vs(ij3)+2*(f(lr,2,ku)*clon(l,3)
+
249 & -f(li,2,ku)*slon(l,3))
+
250 us(ij5)=us(ij5)+2*(f(lr,2,ku)*clon(l,1)
+
251 & -f(li,2,ku)*slon(l,1))
+
252 vs(ij5)=vs(ij5)+2*(f(lr,2,kv)*clon(l,1)
+
253 & -f(li,2,kv)*slon(l,1))
+
254 us(ij7)=us(ij7)+2*(f(lr,2,kv)*clon(l,7)
+
255 & -f(li,2,kv)*slon(l,7))
+
256 vs(ij7)=vs(ij7)-2*(f(lr,2,ku)*clon(l,7)
+
257 & -f(li,2,ku)*slon(l,7))
+
258 ENDDO
+
259 ELSE
+
260 DO l=1,maxwv
+
261 lr=2*l+1
+
262 li=2*l+2
+
263CDIR$ IVDEP
+
264 DO k=1,kmax
+
265 ku=k
+
266 kv=k+kmax
+
267 ijk1=ij1+(k-1)*kg
+
268 ijk3=ij3+(k-1)*kg
+
269 ijk5=ij5+(k-1)*kg
+
270 ijk7=ij7+(k-1)*kg
+
271 un(ijk1)=un(ijk1)+2*(f(lr,1,ku)*clon(l,1)
+
272 & -f(li,1,ku)*slon(l,1))
+
273 vn(ijk1)=vn(ijk1)+2*(f(lr,1,kv)*clon(l,1)
+
274 & -f(li,1,kv)*slon(l,1))
+
275 un(ijk3)=un(ijk3)+2*(f(lr,1,kv)*clon(l,3)
+
276 & -f(li,1,kv)*slon(l,3))
+
277 vn(ijk3)=vn(ijk3)-2*(f(lr,1,ku)*clon(l,3)
+
278 & -f(li,1,ku)*slon(l,3))
+
279 un(ijk5)=un(ijk5)-2*(f(lr,1,ku)*clon(l,5)
+
280 & -f(li,1,ku)*slon(l,5))
+
281 vn(ijk5)=vn(ijk5)-2*(f(lr,1,kv)*clon(l,5)
+
282 & -f(li,1,kv)*slon(l,5))
+
283 un(ijk7)=un(ijk7)-2*(f(lr,1,kv)*clon(l,7)
+
284 & -f(li,1,kv)*slon(l,7))
+
285 vn(ijk7)=vn(ijk7)+2*(f(lr,1,ku)*clon(l,7)
+
286 & -f(li,1,ku)*slon(l,7))
+
287 us(ijk1)=us(ijk1)-2*(f(lr,2,ku)*clon(l,5)
+
288 & -f(li,2,ku)*slon(l,5))
+
289 vs(ijk1)=vs(ijk1)-2*(f(lr,2,kv)*clon(l,5)
+
290 & -f(li,2,kv)*slon(l,5))
+
291 us(ijk3)=us(ijk3)-2*(f(lr,2,kv)*clon(l,3)
+
292 & -f(li,2,kv)*slon(l,3))
+
293 vs(ijk3)=vs(ijk3)+2*(f(lr,2,ku)*clon(l,3)
+
294 & -f(li,2,ku)*slon(l,3))
+
295 us(ijk5)=us(ijk5)+2*(f(lr,2,ku)*clon(l,1)
+
296 & -f(li,2,ku)*slon(l,1))
+
297 vs(ijk5)=vs(ijk5)+2*(f(lr,2,kv)*clon(l,1)
+
298 & -f(li,2,kv)*slon(l,1))
+
299 us(ijk7)=us(ijk7)+2*(f(lr,2,kv)*clon(l,7)
+
300 & -f(li,2,kv)*slon(l,7))
+
301 vs(ijk7)=vs(ijk7)-2*(f(lr,2,ku)*clon(l,7)
+
302 & -f(li,2,ku)*slon(l,7))
+
303 ENDDO
+
304 ENDDO
+
305 ENDIF
+
306 ENDDO
+
307
+
308C CALCULATE POINTS ON THE MAIN DIAGONALS THROUGH THE POLE,
+
309C STARTING CLOCKWISE OF THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
+
310C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
+
311C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
+
312C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
+
313C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
+
314C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
+
315 DO j1=1,nph
+
316 i1=j1
+
317 radlon=(orient-45)/dpr
+
318 j3=nps+1-i1
+
319 i3=j1
+
320 j5=nps+1-j1
+
321 i5=nps+1-i1
+
322 j7=i1
+
323 i7=nps+1-j1
+
324 ij1=(i1-1)*ni+(j1-1)*nj+1
+
325 ij3=(i3-1)*ni+(j3-1)*nj+1
+
326 ij5=(i5-1)*ni+(j5-1)*nj+1
+
327 ij7=(i7-1)*ni+(j7-1)*nj+1
+
328 di1=i1-nph-1
+
329 dj1=j1-nph-1
+
330 rq=di1**2+dj1**2
+
331 slat1=(gq-rq)/(gq+rq)
+
332 clat1=sqrt(1.-slat1**2)
+
333 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
334 & pln,plntop)
+
335 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
+
336 & clat1,pln,plntop,mp,w,wtop,f)
+
337 DO l=1,maxwv
+
338 slon(l,1)=sin(l*radlon)
+
339 clon(l,1)=cos(l*radlon)
+
340 slon(l,3)=slon(l,1)*crot(mod(1*l,4))
+
341 & -clon(l,1)*srot(mod(1*l,4))
+
342 clon(l,3)=clon(l,1)*crot(mod(1*l,4))
+
343 & +slon(l,1)*srot(mod(1*l,4))
+
344 slon(l,5)=slon(l,1)*crot(mod(2*l,4))
+
345 & -clon(l,1)*srot(mod(2*l,4))
+
346 clon(l,5)=clon(l,1)*crot(mod(2*l,4))
+
347 & +slon(l,1)*srot(mod(2*l,4))
+
348 slon(l,7)=slon(l,1)*crot(mod(3*l,4))
+
349 & -clon(l,1)*srot(mod(3*l,4))
+
350 clon(l,7)=clon(l,1)*crot(mod(3*l,4))
+
351 & +slon(l,1)*srot(mod(3*l,4))
+
352 ENDDO
+
353CDIR$ IVDEP
+
354 DO k=1,kmax
+
355 ku=k
+
356 kv=k+kmax
+
357 ijk1=ij1+(k-1)*kg
+
358 ijk3=ij3+(k-1)*kg
+
359 ijk5=ij5+(k-1)*kg
+
360 ijk7=ij7+(k-1)*kg
+
361 un(ijk1)=srh*( f(1,1,ku)+f(1,1,kv))
+
362 vn(ijk1)=srh*(-f(1,1,ku)+f(1,1,kv))
+
363 un(ijk3)=srh*(-f(1,1,ku)+f(1,1,kv))
+
364 vn(ijk3)=srh*(-f(1,1,ku)-f(1,1,kv))
+
365 un(ijk5)=srh*(-f(1,1,ku)-f(1,1,kv))
+
366 vn(ijk5)=srh*( f(1,1,ku)-f(1,1,kv))
+
367 un(ijk7)=srh*( f(1,1,ku)-f(1,1,kv))
+
368 vn(ijk7)=srh*( f(1,1,ku)+f(1,1,kv))
+
369 us(ijk1)=srh*(-f(1,2,ku)-f(1,2,kv))
+
370 vs(ijk1)=srh*( f(1,2,ku)-f(1,2,kv))
+
371 us(ijk3)=srh*( f(1,2,ku)-f(1,2,kv))
+
372 vs(ijk3)=srh*( f(1,2,ku)+f(1,2,kv))
+
373 us(ijk5)=srh*( f(1,2,ku)+f(1,2,kv))
+
374 vs(ijk5)=srh*(-f(1,2,ku)+f(1,2,kv))
+
375 us(ijk7)=srh*(-f(1,2,ku)+f(1,2,kv))
+
376 vs(ijk7)=srh*(-f(1,2,ku)-f(1,2,kv))
+
377 ENDDO
+
378 IF(kmax.EQ.1) THEN
+
379 ku=1
+
380 kv=2
+
381 DO l=1,maxwv
+
382 lr=2*l+1
+
383 li=2*l+2
+
384 un(ij1)=un(ij1)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
+
385 & *clon(l,1)
+
386 & -( f(li,1,ku)+f(li,1,kv))
+
387 & *slon(l,1))
+
388 vn(ij1)=vn(ij1)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
+
389 & *clon(l,1)
+
390 & -(-f(li,1,ku)+f(li,1,kv))
+
391 & *slon(l,1))
+
392 un(ij3)=un(ij3)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
+
393 & *clon(l,3)
+
394 & -(-f(li,1,ku)+f(li,1,kv))
+
395 & *slon(l,3))
+
396 vn(ij3)=vn(ij3)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
+
397 & *clon(l,3)
+
398 & -(-f(li,1,ku)-f(li,1,kv))
+
399 & *slon(l,3))
+
400 un(ij5)=un(ij5)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
+
401 & *clon(l,5)
+
402 & -(-f(li,1,ku)-f(li,1,kv))
+
403 & *slon(l,5))
+
404 vn(ij5)=vn(ij5)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
+
405 & *clon(l,5)
+
406 & -( f(li,1,ku)-f(li,1,kv))
+
407 & *slon(l,5))
+
408 un(ij7)=un(ij7)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
+
409 & *clon(l,7)
+
410 & -( f(li,1,ku)-f(li,1,kv))
+
411 & *slon(l,7))
+
412 vn(ij7)=vn(ij7)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
+
413 & *clon(l,7)
+
414 & -( f(li,1,ku)+f(li,1,kv))
+
415 & *slon(l,7))
+
416 us(ij1)=us(ij1)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
+
417 & *clon(l,3)
+
418 & -(-f(li,2,ku)-f(li,2,kv))
+
419 & *slon(l,3))
+
420 vs(ij1)=vs(ij1)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
+
421 & *clon(l,3)
+
422 & -( f(li,2,ku)-f(li,2,kv))
+
423 & *slon(l,3))
+
424 us(ij3)=us(ij3)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
+
425 & *clon(l,1)
+
426 & -( f(li,2,ku)-f(li,2,kv))
+
427 & *slon(l,1))
+
428 vs(ij3)=vs(ij3)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
+
429 & *clon(l,1)
+
430 & -( f(li,2,ku)+f(li,2,kv))
+
431 & *slon(l,1))
+
432 us(ij5)=us(ij5)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
+
433 & *clon(l,7)
+
434 & -( f(li,2,ku)+f(li,2,kv))
+
435 & *slon(l,7))
+
436 vs(ij5)=vs(ij5)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
+
437 & *clon(l,7)
+
438 & -(-f(li,2,ku)+f(li,2,kv))
+
439 & *slon(l,7))
+
440 us(ij7)=us(ij7)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
+
441 & *clon(l,5)
+
442 & -(-f(li,2,ku)+f(li,2,kv))
+
443 & *slon(l,5))
+
444 vs(ij7)=vs(ij7)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
+
445 & *clon(l,5)
+
446 & -(-f(li,2,ku)-f(li,2,kv))
+
447 & *slon(l,5))
+
448 ENDDO
+
449 ELSE
+
450 DO l=1,maxwv
+
451 lr=2*l+1
+
452 li=2*l+2
+
453CDIR$ IVDEP
+
454 DO k=1,kmax
+
455 ku=k
+
456 kv=k+kmax
+
457 ijk1=ij1+(k-1)*kg
+
458 ijk3=ij3+(k-1)*kg
+
459 ijk5=ij5+(k-1)*kg
+
460 ijk7=ij7+(k-1)*kg
+
461 un(ijk1)=un(ijk1)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
+
462 & *clon(l,1)
+
463 & -( f(li,1,ku)+f(li,1,kv))
+
464 & *slon(l,1))
+
465 vn(ijk1)=vn(ijk1)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
+
466 & *clon(l,1)
+
467 & -(-f(li,1,ku)+f(li,1,kv))
+
468 & *slon(l,1))
+
469 un(ijk3)=un(ijk3)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
+
470 & *clon(l,3)
+
471 & -(-f(li,1,ku)+f(li,1,kv))
+
472 & *slon(l,3))
+
473 vn(ijk3)=vn(ijk3)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
+
474 & *clon(l,3)
+
475 & -(-f(li,1,ku)-f(li,1,kv))
+
476 & *slon(l,3))
+
477 un(ijk5)=un(ijk5)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
+
478 & *clon(l,5)
+
479 & -(-f(li,1,ku)-f(li,1,kv))
+
480 & *slon(l,5))
+
481 vn(ijk5)=vn(ijk5)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
+
482 & *clon(l,5)
+
483 & -( f(li,1,ku)-f(li,1,kv))
+
484 & *slon(l,5))
+
485 un(ijk7)=un(ijk7)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
+
486 & *clon(l,7)
+
487 & -( f(li,1,ku)-f(li,1,kv))
+
488 & *slon(l,7))
+
489 vn(ijk7)=vn(ijk7)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
+
490 & *clon(l,7)
+
491 & -( f(li,1,ku)+f(li,1,kv))
+
492 & *slon(l,7))
+
493 us(ijk1)=us(ijk1)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
+
494 & *clon(l,3)
+
495 & -(-f(li,2,ku)-f(li,2,kv))
+
496 & *slon(l,3))
+
497 vs(ijk1)=vs(ijk1)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
+
498 & *clon(l,3)
+
499 & -( f(li,2,ku)-f(li,2,kv))
+
500 & *slon(l,3))
+
501 us(ijk3)=us(ijk3)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
+
502 & *clon(l,1)
+
503 & -( f(li,2,ku)-f(li,2,kv))
+
504 & *slon(l,1))
+
505 vs(ijk3)=vs(ijk3)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
+
506 & *clon(l,1)
+
507 & -( f(li,2,ku)+f(li,2,kv))
+
508 & *slon(l,1))
+
509 us(ijk5)=us(ijk5)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
+
510 & *clon(l,7)
+
511 & -( f(li,2,ku)+f(li,2,kv))
+
512 & *slon(l,7))
+
513 vs(ijk5)=vs(ijk5)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
+
514 & *clon(l,7)
+
515 & -(-f(li,2,ku)+f(li,2,kv))
+
516 & *slon(l,7))
+
517 us(ijk7)=us(ijk7)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
+
518 & *clon(l,5)
+
519 & -(-f(li,2,ku)+f(li,2,kv))
+
520 & *slon(l,5))
+
521 vs(ijk7)=vs(ijk7)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
+
522 & *clon(l,5)
+
523 & -(-f(li,2,ku)-f(li,2,kv))
+
524 & *slon(l,5))
+
525 ENDDO
+
526 ENDDO
+
527 ENDIF
+
528 ENDDO
+
529
+
530C CALCULATE THE REMAINDER OF THE POLAR STEREOGRAPHIC DOMAIN,
+
531C STARTING AT THE SECTOR JUST CLOCKWISE OF THE ORIENTATION LONGITUDE
+
532C AND GOING CLOCKWISE UNTIL ALL EIGHT SECTORS ARE DONE.
+
533C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
+
534C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
+
535C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
+
536C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
+
537C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
+
538 DO j1=1,nph-1
+
539 DO i1=j1+1,nph
+
540 j2=i1
+
541 i2=j1
+
542 j3=nps+1-i1
+
543 i3=j1
+
544 j4=nps+1-j1
+
545 i4=i1
+
546 j5=nps+1-j1
+
547 i5=nps+1-i1
+
548 j6=nps+1-i1
+
549 i6=nps+1-j1
+
550 j7=i1
+
551 i7=nps+1-j1
+
552 j8=j1
+
553 i8=nps+1-i1
+
554 ij1=(i1-1)*ni+(j1-1)*nj+1
+
555 ij2=(i2-1)*ni+(j2-1)*nj+1
+
556 ij3=(i3-1)*ni+(j3-1)*nj+1
+
557 ij4=(i4-1)*ni+(j4-1)*nj+1
+
558 ij5=(i5-1)*ni+(j5-1)*nj+1
+
559 ij6=(i6-1)*ni+(j6-1)*nj+1
+
560 ij7=(i7-1)*ni+(j7-1)*nj+1
+
561 ij8=(i8-1)*ni+(j8-1)*nj+1
+
562 di1=i1-nph-1
+
563 dj1=j1-nph-1
+
564 rq=di1**2+dj1**2
+
565 rr=sqrt(1/rq)
+
566 slat1=(gq-rq)/(gq+rq)
+
567 clat1=sqrt(1.-slat1**2)
+
568 radlon1=orient/dpr+atan(-di1/dj1)
+
569 radlon2=(orient-45)/dpr*2-radlon1
+
570 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
571 & pln,plntop)
+
572 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
+
573 & clat1,pln,plntop,mp,w,wtop,f)
+
574 DO l=1,maxwv
+
575 slon(l,1)=sin(l*radlon1)
+
576 clon(l,1)=cos(l*radlon1)
+
577 slon(l,2)=sin(l*radlon2)
+
578 clon(l,2)=cos(l*radlon2)
+
579 slon(l,3)=slon(l,1)*crot(mod(1*l,4))
+
580 & -clon(l,1)*srot(mod(1*l,4))
+
581 clon(l,3)=clon(l,1)*crot(mod(1*l,4))
+
582 & +slon(l,1)*srot(mod(1*l,4))
+
583 slon(l,4)=slon(l,2)*crot(mod(1*l,4))
+
584 & -clon(l,2)*srot(mod(1*l,4))
+
585 clon(l,4)=clon(l,2)*crot(mod(1*l,4))
+
586 & +slon(l,2)*srot(mod(1*l,4))
+
587 slon(l,5)=slon(l,1)*crot(mod(2*l,4))
+
588 & -clon(l,1)*srot(mod(2*l,4))
+
589 clon(l,5)=clon(l,1)*crot(mod(2*l,4))
+
590 & +slon(l,1)*srot(mod(2*l,4))
+
591 slon(l,6)=slon(l,2)*crot(mod(2*l,4))
+
592 & -clon(l,2)*srot(mod(2*l,4))
+
593 clon(l,6)=clon(l,2)*crot(mod(2*l,4))
+
594 & +slon(l,2)*srot(mod(2*l,4))
+
595 slon(l,7)=slon(l,1)*crot(mod(3*l,4))
+
596 & -clon(l,1)*srot(mod(3*l,4))
+
597 clon(l,7)=clon(l,1)*crot(mod(3*l,4))
+
598 & +slon(l,1)*srot(mod(3*l,4))
+
599 slon(l,8)=slon(l,2)*crot(mod(3*l,4))
+
600 & -clon(l,2)*srot(mod(3*l,4))
+
601 clon(l,8)=clon(l,2)*crot(mod(3*l,4))
+
602 & +slon(l,2)*srot(mod(3*l,4))
+
603 ENDDO
+
604CDIR$ IVDEP
+
605 DO k=1,kmax
+
606 ku=k
+
607 kv=k+kmax
+
608 ijk1=ij1+(k-1)*kg
+
609 ijk2=ij2+(k-1)*kg
+
610 ijk3=ij3+(k-1)*kg
+
611 ijk4=ij4+(k-1)*kg
+
612 ijk5=ij5+(k-1)*kg
+
613 ijk6=ij6+(k-1)*kg
+
614 ijk7=ij7+(k-1)*kg
+
615 ijk8=ij8+(k-1)*kg
+
616 un(ijk1)=rr*(-dj1*f(1,1,ku)-di1*f(1,1,kv))
+
617 vn(ijk1)=rr*( di1*f(1,1,ku)-dj1*f(1,1,kv))
+
618 un(ijk2)=rr*(-di1*f(1,1,ku)-dj1*f(1,1,kv))
+
619 vn(ijk2)=rr*( dj1*f(1,1,ku)-di1*f(1,1,kv))
+
620 un(ijk3)=rr*( di1*f(1,1,ku)-dj1*f(1,1,kv))
+
621 vn(ijk3)=rr*( dj1*f(1,1,ku)+di1*f(1,1,kv))
+
622 un(ijk4)=rr*( dj1*f(1,1,ku)-di1*f(1,1,kv))
+
623 vn(ijk4)=rr*( di1*f(1,1,ku)+dj1*f(1,1,kv))
+
624 un(ijk5)=rr*( dj1*f(1,1,ku)+di1*f(1,1,kv))
+
625 vn(ijk5)=rr*(-di1*f(1,1,ku)+dj1*f(1,1,kv))
+
626 un(ijk6)=rr*( di1*f(1,1,ku)+dj1*f(1,1,kv))
+
627 vn(ijk6)=rr*(-dj1*f(1,1,ku)+di1*f(1,1,kv))
+
628 un(ijk7)=rr*(-di1*f(1,1,ku)+dj1*f(1,1,kv))
+
629 vn(ijk7)=rr*(-dj1*f(1,1,ku)-di1*f(1,1,kv))
+
630 un(ijk8)=rr*(-dj1*f(1,1,ku)+di1*f(1,1,kv))
+
631 vn(ijk8)=rr*(-di1*f(1,1,ku)-dj1*f(1,1,kv))
+
632 us(ijk1)=rr*( dj1*f(1,2,ku)+di1*f(1,2,kv))
+
633 vs(ijk1)=rr*(-di1*f(1,2,ku)+dj1*f(1,2,kv))
+
634 us(ijk2)=rr*( di1*f(1,2,ku)+dj1*f(1,2,kv))
+
635 vs(ijk2)=rr*(-dj1*f(1,2,ku)+di1*f(1,2,kv))
+
636 us(ijk3)=rr*(-di1*f(1,2,ku)+dj1*f(1,2,kv))
+
637 vs(ijk3)=rr*(-dj1*f(1,2,ku)-di1*f(1,2,kv))
+
638 us(ijk4)=rr*(-dj1*f(1,2,ku)+di1*f(1,2,kv))
+
639 vs(ijk4)=rr*(-di1*f(1,2,ku)-dj1*f(1,2,kv))
+
640 us(ijk5)=rr*(-dj1*f(1,2,ku)-di1*f(1,2,kv))
+
641 vs(ijk5)=rr*( di1*f(1,2,ku)-dj1*f(1,2,kv))
+
642 us(ijk6)=rr*(-di1*f(1,2,ku)-dj1*f(1,2,kv))
+
643 vs(ijk6)=rr*( dj1*f(1,2,ku)-di1*f(1,2,kv))
+
644 us(ijk7)=rr*( di1*f(1,2,ku)-dj1*f(1,2,kv))
+
645 vs(ijk7)=rr*( dj1*f(1,2,ku)+di1*f(1,2,kv))
+
646 us(ijk8)=rr*( dj1*f(1,2,ku)-di1*f(1,2,kv))
+
647 vs(ijk8)=rr*( di1*f(1,2,ku)+dj1*f(1,2,kv))
+
648 ENDDO
+
649 IF(kmax.EQ.1) THEN
+
650 ku=1
+
651 kv=2
+
652 DO l=1,maxwv
+
653 lr=2*l+1
+
654 li=2*l+2
+
655 un(ij1)=un(ij1)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
656 & *clon(l,1)
+
657 & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
+
658 & *slon(l,1))
+
659 vn(ij1)=vn(ij1)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
660 & *clon(l,1)
+
661 & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
+
662 & *slon(l,1))
+
663 un(ij2)=un(ij2)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
664 & *clon(l,2)
+
665 & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
+
666 & *slon(l,2))
+
667 vn(ij2)=vn(ij2)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
668 & *clon(l,2)
+
669 & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
+
670 & *slon(l,2))
+
671 un(ij3)=un(ij3)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
672 & *clon(l,3)
+
673 & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
+
674 & *slon(l,3))
+
675 vn(ij3)=vn(ij3)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
676 & *clon(l,3)
+
677 & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
+
678 & *slon(l,3))
+
679 un(ij4)=un(ij4)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
680 & *clon(l,4)
+
681 & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
+
682 & *slon(l,4))
+
683 vn(ij4)=vn(ij4)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
684 & *clon(l,4)
+
685 & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
+
686 & *slon(l,4))
+
687 un(ij5)=un(ij5)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
688 & *clon(l,5)
+
689 & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
+
690 & *slon(l,5))
+
691 vn(ij5)=vn(ij5)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
692 & *clon(l,5)
+
693 & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
+
694 & *slon(l,5))
+
695 un(ij6)=un(ij6)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
696 & *clon(l,6)
+
697 & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
+
698 & *slon(l,6))
+
699 vn(ij6)=vn(ij6)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
700 & *clon(l,6)
+
701 & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
+
702 & *slon(l,6))
+
703 un(ij7)=un(ij7)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
704 & *clon(l,7)
+
705 & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
+
706 & *slon(l,7))
+
707 vn(ij7)=vn(ij7)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
708 & *clon(l,7)
+
709 & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
+
710 & *slon(l,7))
+
711 un(ij8)=un(ij8)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
712 & *clon(l,8)
+
713 & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
+
714 & *slon(l,8))
+
715 vn(ij8)=vn(ij8)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
716 & *clon(l,8)
+
717 & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
+
718 & *slon(l,8))
+
719 us(ij1)=us(ij1)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
720 & *clon(l,4)
+
721 & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
+
722 & *slon(l,4))
+
723 vs(ij1)=vs(ij1)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
724 & *clon(l,4)
+
725 & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
+
726 & *slon(l,4))
+
727 us(ij2)=us(ij2)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
728 & *clon(l,3)
+
729 & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
+
730 & *slon(l,3))
+
731 vs(ij2)=vs(ij2)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
732 & *clon(l,3)
+
733 & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
+
734 & *slon(l,3))
+
735 us(ij3)=us(ij3)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
736 & *clon(l,2)
+
737 & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
+
738 & *slon(l,2))
+
739 vs(ij3)=vs(ij3)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
740 & *clon(l,2)
+
741 & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
+
742 & *slon(l,2))
+
743 us(ij4)=us(ij4)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
744 & *clon(l,1)
+
745 & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
+
746 & *slon(l,1))
+
747 vs(ij4)=vs(ij4)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
748 & *clon(l,1)
+
749 & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
+
750 & *slon(l,1))
+
751 us(ij5)=us(ij5)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
752 & *clon(l,8)
+
753 & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
+
754 & *slon(l,8))
+
755 vs(ij5)=vs(ij5)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
756 & *clon(l,8)
+
757 & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
+
758 & *slon(l,8))
+
759 us(ij6)=us(ij6)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
760 & *clon(l,7)
+
761 & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
+
762 & *slon(l,7))
+
763 vs(ij6)=vs(ij6)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
764 & *clon(l,7)
+
765 & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
+
766 & *slon(l,7))
+
767 us(ij7)=us(ij7)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
768 & *clon(l,6)
+
769 & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
+
770 & *slon(l,6))
+
771 vs(ij7)=vs(ij7)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
772 & *clon(l,6)
+
773 & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
+
774 & *slon(l,6))
+
775 us(ij8)=us(ij8)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
776 & *clon(l,5)
+
777 & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
+
778 & *slon(l,5))
+
779 vs(ij8)=vs(ij8)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
780 & *clon(l,5)
+
781 & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
+
782 & *slon(l,5))
+
783 ENDDO
+
784 ELSE
+
785 DO l=1,maxwv
+
786 lr=2*l+1
+
787 li=2*l+2
+
788CDIR$ IVDEP
+
789 DO k=1,kmax
+
790 ku=k
+
791 kv=k+kmax
+
792 ijk1=ij1+(k-1)*kg
+
793 ijk2=ij2+(k-1)*kg
+
794 ijk3=ij3+(k-1)*kg
+
795 ijk4=ij4+(k-1)*kg
+
796 ijk5=ij5+(k-1)*kg
+
797 ijk6=ij6+(k-1)*kg
+
798 ijk7=ij7+(k-1)*kg
+
799 ijk8=ij8+(k-1)*kg
+
800 un(ijk1)=un(ijk1)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
801 & *clon(l,1)
+
802 & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
+
803 & *slon(l,1))
+
804 vn(ijk1)=vn(ijk1)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
805 & *clon(l,1)
+
806 & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
+
807 & *slon(l,1))
+
808 un(ijk2)=un(ijk2)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
809 & *clon(l,2)
+
810 & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
+
811 & *slon(l,2))
+
812 vn(ijk2)=vn(ijk2)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
813 & *clon(l,2)
+
814 & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
+
815 & *slon(l,2))
+
816 un(ijk3)=un(ijk3)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
817 & *clon(l,3)
+
818 & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
+
819 & *slon(l,3))
+
820 vn(ijk3)=vn(ijk3)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
821 & *clon(l,3)
+
822 & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
+
823 & *slon(l,3))
+
824 un(ijk4)=un(ijk4)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
825 & *clon(l,4)
+
826 & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
+
827 & *slon(l,4))
+
828 vn(ijk4)=vn(ijk4)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
829 & *clon(l,4)
+
830 & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
+
831 & *slon(l,4))
+
832 un(ijk5)=un(ijk5)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
833 & *clon(l,5)
+
834 & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
+
835 & *slon(l,5))
+
836 vn(ijk5)=vn(ijk5)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
837 & *clon(l,5)
+
838 & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
+
839 & *slon(l,5))
+
840 un(ijk6)=un(ijk6)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
841 & *clon(l,6)
+
842 & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
+
843 & *slon(l,6))
+
844 vn(ijk6)=vn(ijk6)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
845 & *clon(l,6)
+
846 & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
+
847 & *slon(l,6))
+
848 un(ijk7)=un(ijk7)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
+
849 & *clon(l,7)
+
850 & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
+
851 & *slon(l,7))
+
852 vn(ijk7)=vn(ijk7)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
+
853 & *clon(l,7)
+
854 & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
+
855 & *slon(l,7))
+
856 un(ijk8)=un(ijk8)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
+
857 & *clon(l,8)
+
858 & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
+
859 & *slon(l,8))
+
860 vn(ijk8)=vn(ijk8)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
+
861 & *clon(l,8)
+
862 & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
+
863 & *slon(l,8))
+
864 us(ijk1)=us(ijk1)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
865 & *clon(l,4)
+
866 & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
+
867 & *slon(l,4))
+
868 vs(ijk1)=vs(ijk1)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
869 & *clon(l,4)
+
870 & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
+
871 & *slon(l,4))
+
872 us(ijk2)=us(ijk2)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
873 & *clon(l,3)
+
874 & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
+
875 & *slon(l,3))
+
876 vs(ijk2)=vs(ijk2)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
877 & *clon(l,3)
+
878 & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
+
879 & *slon(l,3))
+
880 us(ijk3)=us(ijk3)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
881 & *clon(l,2)
+
882 & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
+
883 & *slon(l,2))
+
884 vs(ijk3)=vs(ijk3)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
885 & *clon(l,2)
+
886 & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
+
887 & *slon(l,2))
+
888 us(ijk4)=us(ijk4)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
889 & *clon(l,1)
+
890 & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
+
891 & *slon(l,1))
+
892 vs(ijk4)=vs(ijk4)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
893 & *clon(l,1)
+
894 & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
+
895 & *slon(l,1))
+
896 us(ijk5)=us(ijk5)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
897 & *clon(l,8)
+
898 & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
+
899 & *slon(l,8))
+
900 vs(ijk5)=vs(ijk5)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
901 & *clon(l,8)
+
902 & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
+
903 & *slon(l,8))
+
904 us(ijk6)=us(ijk6)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
905 & *clon(l,7)
+
906 & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
+
907 & *slon(l,7))
+
908 vs(ijk6)=vs(ijk6)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
909 & *clon(l,7)
+
910 & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
+
911 & *slon(l,7))
+
912 us(ijk7)=us(ijk7)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
+
913 & *clon(l,6)
+
914 & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
+
915 & *slon(l,6))
+
916 vs(ijk7)=vs(ijk7)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
+
917 & *clon(l,6)
+
918 & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
+
919 & *slon(l,6))
+
920 us(ijk8)=us(ijk8)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
+
921 & *clon(l,5)
+
922 & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
+
923 & *slon(l,5))
+
924 vs(ijk8)=vs(ijk8)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
+
925 & *clon(l,5)
+
926 & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
+
927 & *slon(l,5))
+
928 ENDDO
+
929 ENDDO
+
930 ENDIF
+
931 ENDDO
+
932 ENDDO
+
933
+
+
934 END
+
subroutine spdz2uv(i, m, enn1, elonn1, eon, eontop, d, z, u, v, utop, vtop)
Computes the wind components from divergence and vorticity in spectral space.
Definition spdz2uv.f:49
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgpsv(iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, waved, wavez, un, vn, us, vs)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition sptgpsv.f:83
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgpt_8f.html b/sptgpt_8f.html index 2d0b850b..e099cb0a 100644 --- a/sptgpt_8f.html +++ b/sptgpt_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpt.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgpt.f File Reference
+
sptgpt.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgpt (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to specified sets of station points on the globe. More...
 
subroutine sptgpt (iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, gp)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to specified sets of station points on the globe.
 

Detailed Description

Transform spectral scalar to station points.

@@ -112,15 +118,15 @@

1998-12-15 Iredell Openmp directives inserted. -2003-06-30 Iredell Use spfftpt(). +2003-06-30 Iredell Use spfftpt().
Author
Iredell
Date
96-02-29

Definition in file sptgpt.f.

Function/Subroutine Documentation

- -

◆ sptgpt()

+ +

◆ sptgpt()

diff --git a/sptgpt_8f.js b/sptgpt_8f.js index 708e1051..101e3c1e 100644 --- a/sptgpt_8f.js +++ b/sptgpt_8f.js @@ -1,4 +1,4 @@ var sptgpt_8f = [ - [ "sptgpt", "sptgpt_8f.html#a1b8d333bcc601e5b7e8d3dd1369f54b1", null ] + [ "sptgpt", "sptgpt_8f.html#af93cf936e85b91e804de516feb6fb42c", null ] ]; \ No newline at end of file diff --git a/sptgpt_8f_source.html b/sptgpt_8f_source.html index 70741732..de8374ca 100644 --- a/sptgpt_8f_source.html +++ b/sptgpt_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgpt.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,132 +81,140 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgpt.f
+
sptgpt.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral scalar to station points.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | Iredell | Initial.
-
8 C> 1998-12-15 | Iredell | Openmp directives inserted.
-
9 C> 2003-06-30 | Iredell | Use spfftpt().
-
10 C>
-
11 C> @author Iredell @date 96-02-29
-
12 
-
13 C> This subprogram performs a spherical transform
-
14 c> from spectral coefficients of scalar quantities
-
15 c> to specified sets of station points on the globe.
-
16 C>
-
17 C> The wave-space can be either triangular or rhomboidal.
-
18 C>
-
19 C> The wave and point fields may have general indexing,
-
20 c> but each wave field is in sequential 'IBM order',
-
21 c> i.e. with zonal wavenumber as the slower index.
-
22 C>
-
23 C> The transforms are all multiprocessed over stations.
-
24 C>
-
25 C> Transform several fields at a time to improve vectorization.
-
26 C>
-
27 C> Subprogram can be called from a multiprocessing environment.
-
28 C>
-
29 C> @param IROMB spectral domain shape
-
30 C> (0 for triangular, 1 for rhomboidal)
-
31 C> @param MAXWV spectral truncation
-
32 C> @param KMAX number of fields to transform.
-
33 C> @param NMAX number of station points to return
-
34 C> @param KWSKIP skip number between wave fields
-
35 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
36 C> @param KGSKIP skip number between station point sets
-
37 C> (defaults to NMAX if KGSKIP=0)
-
38 C> @param NRSKIP skip number between station lats and lons
-
39 C> (defaults to 1 if NRSKIP=0)
-
40 C> @param NGSKIP skip number between station points
-
41 C> (defaults to 1 if NGSKIP=0)
-
42 C> @param RLAT station latitudes in degrees
-
43 C> @param RLON station longitudes in degrees
-
44 C> @param WAVE wave fields
-
45 C> @param GP station point sets
-
46 C>
-
47 C> @author Iredell @date 96-02-29
-
48  SUBROUTINE sptgpt(IROMB,MAXWV,KMAX,NMAX,
-
49  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
-
50  & RLAT,RLON,WAVE,GP)
-
51 
-
52  REAL RLAT(*),RLON(*),WAVE(*),GP(*)
-
53  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
54  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
55  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
56  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
57  INTEGER MP(KMAX)
-
58  REAL WTOP(2*(MAXWV+1),KMAX)
-
59  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
60  REAL F(2*MAXWV+3,2,KMAX)
-
61  parameter(pi=3.14159265358979)
-
62 
-
63 C CALCULATE PRELIMINARY CONSTANTS
-
64  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
65  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
66  mxtop=maxwv+1
-
67  idim=2*maxwv+3
-
68  kw=kwskip
-
69  kg=kgskip
-
70  nr=nrskip
-
71  ng=ngskip
-
72  IF(kw.EQ.0) kw=2*mx
-
73  IF(kg.EQ.0) kg=nmax
-
74  IF(nr.EQ.0) nr=1
-
75  IF(ng.EQ.0) ng=1
-
76  mp=0
-
77 C$OMP PARALLEL DO
-
78  DO k=1,kmax
-
79  wtop(1:2*mxtop,k)=0
-
80  ENDDO
-
81 
-
82 C CALCULATE STATION FIELDS
-
83 C$OMP PARALLEL DO PRIVATE(RADLAT,SLAT1,CLAT1)
-
84 C$OMP& PRIVATE(PLN,PLNTOP,F,NK)
-
85  DO n=1,nmax
-
86  radlat=pi/180*rlat((n-1)*nr+1)
-
87  IF(rlat((n-1)*nr+1).GE.89.9995) THEN
-
88  slat1=1.
-
89  clat1=0.
-
90  ELSEIF(rlat((n-1)*nr+1).LE.-89.9995) THEN
-
91  slat1=-1.
-
92  clat1=0.
-
93  ELSE
-
94  slat1=sin(radlat)
-
95  clat1=cos(radlat)
-
96  ENDIF
-
97  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
98  & pln,plntop)
-
99  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
-
100  & clat1,pln,plntop,mp,wave,wtop,f)
-
101  CALL spfftpt(maxwv,1,2*maxwv+3,kg,kmax,rlon((n-1)*nr+1),
-
102  & f,gp((n-1)*ng+1))
-
103  ENDDO
-
104  END
-
subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition: spfftpt.f:23
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgpt(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
Definition: sptgpt.f:51
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral scalar to station points.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | Iredell | Initial.
+
8C> 1998-12-15 | Iredell | Openmp directives inserted.
+
9C> 2003-06-30 | Iredell | Use spfftpt().
+
10C>
+
11C> @author Iredell @date 96-02-29
+
12
+
13C> This subprogram performs a spherical transform
+
14c> from spectral coefficients of scalar quantities
+
15c> to specified sets of station points on the globe.
+
16C>
+
17C> The wave-space can be either triangular or rhomboidal.
+
18C>
+
19C> The wave and point fields may have general indexing,
+
20c> but each wave field is in sequential 'IBM order',
+
21c> i.e. with zonal wavenumber as the slower index.
+
22C>
+
23C> The transforms are all multiprocessed over stations.
+
24C>
+
25C> Transform several fields at a time to improve vectorization.
+
26C>
+
27C> Subprogram can be called from a multiprocessing environment.
+
28C>
+
29C> @param IROMB spectral domain shape
+
30C> (0 for triangular, 1 for rhomboidal)
+
31C> @param MAXWV spectral truncation
+
32C> @param KMAX number of fields to transform.
+
33C> @param NMAX number of station points to return
+
34C> @param KWSKIP skip number between wave fields
+
35C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
36C> @param KGSKIP skip number between station point sets
+
37C> (defaults to NMAX if KGSKIP=0)
+
38C> @param NRSKIP skip number between station lats and lons
+
39C> (defaults to 1 if NRSKIP=0)
+
40C> @param NGSKIP skip number between station points
+
41C> (defaults to 1 if NGSKIP=0)
+
42C> @param RLAT station latitudes in degrees
+
43C> @param RLON station longitudes in degrees
+
44C> @param WAVE wave fields
+
45C> @param GP station point sets
+
46C>
+
47C> @author Iredell @date 96-02-29
+
+
48 SUBROUTINE sptgpt(IROMB,MAXWV,KMAX,NMAX,
+
49 & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
+
50 & RLAT,RLON,WAVE,GP)
+
51
+
52 REAL RLAT(*),RLON(*),WAVE(*),GP(*)
+
53 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
54 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
55 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
56 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
57 INTEGER MP(KMAX)
+
58 REAL WTOP(2*(MAXWV+1),KMAX)
+
59 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
60 REAL F(2*MAXWV+3,2,KMAX)
+
61 parameter(pi=3.14159265358979)
+
62
+
63C CALCULATE PRELIMINARY CONSTANTS
+
64 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
65 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
66 mxtop=maxwv+1
+
67 idim=2*maxwv+3
+
68 kw=kwskip
+
69 kg=kgskip
+
70 nr=nrskip
+
71 ng=ngskip
+
72 IF(kw.EQ.0) kw=2*mx
+
73 IF(kg.EQ.0) kg=nmax
+
74 IF(nr.EQ.0) nr=1
+
75 IF(ng.EQ.0) ng=1
+
76 mp=0
+
77C$OMP PARALLEL DO
+
78 DO k=1,kmax
+
79 wtop(1:2*mxtop,k)=0
+
80 ENDDO
+
81
+
82C CALCULATE STATION FIELDS
+
83C$OMP PARALLEL DO PRIVATE(RADLAT,SLAT1,CLAT1)
+
84C$OMP& PRIVATE(PLN,PLNTOP,F,NK)
+
85 DO n=1,nmax
+
86 radlat=pi/180*rlat((n-1)*nr+1)
+
87 IF(rlat((n-1)*nr+1).GE.89.9995) THEN
+
88 slat1=1.
+
89 clat1=0.
+
90 ELSEIF(rlat((n-1)*nr+1).LE.-89.9995) THEN
+
91 slat1=-1.
+
92 clat1=0.
+
93 ELSE
+
94 slat1=sin(radlat)
+
95 clat1=cos(radlat)
+
96 ENDIF
+
97 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
98 & pln,plntop)
+
99 CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
+
100 & clat1,pln,plntop,mp,wave,wtop,f)
+
101 CALL spfftpt(maxwv,1,2*maxwv+3,kg,kmax,rlon((n-1)*nr+1),
+
102 & f,gp((n-1)*ng+1))
+
103 ENDDO
+
+
104 END
+
subroutine spfftpt(m, n, incw, incg, kmax, rlon, w, g)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition spfftpt.f:23
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgpt(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, gp)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
Definition sptgpt.f:51
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgptd_8f.html b/sptgptd_8f.html index 0888fc77..d7a51672 100644 --- a/sptgptd_8f.html +++ b/sptgptd_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptd.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgptd.f File Reference
+
sptgptd.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgptd (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, XP, YP)
 This subprogram performs a spherical transform from spectral coefficients of scalar fields to specified sets of station point gradients on the globe. More...
 
subroutine sptgptd (iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, xp, yp)
 This subprogram performs a spherical transform from spectral coefficients of scalar fields to specified sets of station point gradients on the globe.
 

Detailed Description

Transform spectral to station point gradients.

@@ -117,8 +123,8 @@

Definition in file sptgptd.f.

Function/Subroutine Documentation

- -

◆ sptgptd()

+ +

◆ sptgptd()

diff --git a/sptgptd_8f.js b/sptgptd_8f.js index 437951b8..878b9604 100644 --- a/sptgptd_8f.js +++ b/sptgptd_8f.js @@ -1,4 +1,4 @@ var sptgptd_8f = [ - [ "sptgptd", "sptgptd_8f.html#a64d1fe761662182ca3495531152d1cd3", null ] + [ "sptgptd", "sptgptd_8f.html#aac47fe0487fb23d3174456a87134343c", null ] ]; \ No newline at end of file diff --git a/sptgptd_8f_source.html b/sptgptd_8f_source.html index 5d45d7ca..d48e82f4 100644 --- a/sptgptd_8f_source.html +++ b/sptgptd_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptd.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,104 +81,112 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgptd.f
+
sptgptd.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral to station point gradients.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | Iredell | Initial.
-
8 C> 1998-12-15 | Iredell | Openmp directives inserted.
-
9 C>
-
10 C> @author Iredell @date 96-02-29
-
11 
-
12 C> This subprogram performs a spherical transform
-
13 c> from spectral coefficients of scalar fields
-
14 c> to specified sets of station point gradients on the globe.
-
15 C>
-
16 C> The wave-space can be either triangular or rhomboidal.
-
17 C>
-
18 C> The wave and point fields may have general indexing,
-
19 c> but each wave field is in sequential 'IBM order',
-
20 c> i.e. with zonal wavenumber as the slower index.
-
21 C>
-
22 C> The transforms are all multiprocessed over stations.
-
23 C>
-
24 C> Transform several fields at a time to improve vectorization.
-
25 C>
-
26 C> Subprogram can be called from a multiprocessing environment.
-
27 C>
-
28 C> @param IROMB spectral domain shape
-
29 c> (0 for triangular, 1 for rhomboidal)
-
30 C> @param MAXWV spectral truncation
-
31 C> @param KMAX number of fields to transform.
-
32 C> @param NMAX number of station points to return
-
33 C> @param KWSKIP skip number between wave fields
-
34 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
35 C> @param KGSKIP skip number between station point sets
-
36 C> (defaults to NMAX if KGSKIP=0)
-
37 C> @param NRSKIP skip number between station lats and lons
-
38 C> (defaults to 1 if NRSKIP=0)
-
39 C> @param NGSKIP skip number between station points
-
40 c> (defaults to 1 if NGSKIP=0)
-
41 C> @param RLAT station latitudes in degrees
-
42 C> @param RLON station longitudes in degrees
-
43 C> @param WAVE wave fields
-
44 C> @param XP station point x-gradient sets
-
45 C> @param YP station point y-gradient sets
-
46 C>
-
47 C> @author Iredell @date 96-02-29
-
48  SUBROUTINE sptgptd(IROMB,MAXWV,KMAX,NMAX,
-
49  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
-
50  & RLAT,RLON,WAVE,XP,YP)
-
51 
-
52  REAL RLAT(*),RLON(*),WAVE(*),XP(*),YP(*)
-
53  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
54  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
55  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
56  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
57  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
58  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
59 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
60 C CALCULATE PRELIMINARY CONSTANTS
-
61  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
62  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
63  mdim=2*mx+1
-
64  kw=kwskip
-
65  IF(kw.EQ.0) kw=2*mx
-
66 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
67 C CALCULATE STATION FIELDS
-
68 C$OMP PARALLEL DO PRIVATE(KWS)
-
69  DO k=1,kmax
-
70  kws=(k-1)*kw
-
71  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
-
72  wz(1:2*mx,k)=0.
-
73  ENDDO
-
74  CALL sptgptv(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
-
75  & rlat,rlon,wd,wz,xp,yp)
-
76 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
77  END
-
subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition: splaplac.f:25
-
subroutine sptgptd(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, XP, YP)
This subprogram performs a spherical transform from spectral coefficients of scalar fields to specifi...
Definition: sptgptd.f:51
-
subroutine sptgptv(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition: sptgptv.f:54
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral to station point gradients.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | Iredell | Initial.
+
8C> 1998-12-15 | Iredell | Openmp directives inserted.
+
9C>
+
10C> @author Iredell @date 96-02-29
+
11
+
12C> This subprogram performs a spherical transform
+
13c> from spectral coefficients of scalar fields
+
14c> to specified sets of station point gradients on the globe.
+
15C>
+
16C> The wave-space can be either triangular or rhomboidal.
+
17C>
+
18C> The wave and point fields may have general indexing,
+
19c> but each wave field is in sequential 'IBM order',
+
20c> i.e. with zonal wavenumber as the slower index.
+
21C>
+
22C> The transforms are all multiprocessed over stations.
+
23C>
+
24C> Transform several fields at a time to improve vectorization.
+
25C>
+
26C> Subprogram can be called from a multiprocessing environment.
+
27C>
+
28C> @param IROMB spectral domain shape
+
29c> (0 for triangular, 1 for rhomboidal)
+
30C> @param MAXWV spectral truncation
+
31C> @param KMAX number of fields to transform.
+
32C> @param NMAX number of station points to return
+
33C> @param KWSKIP skip number between wave fields
+
34C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
35C> @param KGSKIP skip number between station point sets
+
36C> (defaults to NMAX if KGSKIP=0)
+
37C> @param NRSKIP skip number between station lats and lons
+
38C> (defaults to 1 if NRSKIP=0)
+
39C> @param NGSKIP skip number between station points
+
40c> (defaults to 1 if NGSKIP=0)
+
41C> @param RLAT station latitudes in degrees
+
42C> @param RLON station longitudes in degrees
+
43C> @param WAVE wave fields
+
44C> @param XP station point x-gradient sets
+
45C> @param YP station point y-gradient sets
+
46C>
+
47C> @author Iredell @date 96-02-29
+
+
48 SUBROUTINE sptgptd(IROMB,MAXWV,KMAX,NMAX,
+
49 & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
+
50 & RLAT,RLON,WAVE,XP,YP)
+
51
+
52 REAL RLAT(*),RLON(*),WAVE(*),XP(*),YP(*)
+
53 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
54 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
55 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
56 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
57 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
58 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
59C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
60C CALCULATE PRELIMINARY CONSTANTS
+
61 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
62 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
63 mdim=2*mx+1
+
64 kw=kwskip
+
65 IF(kw.EQ.0) kw=2*mx
+
66C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
67C CALCULATE STATION FIELDS
+
68C$OMP PARALLEL DO PRIVATE(KWS)
+
69 DO k=1,kmax
+
70 kws=(k-1)*kw
+
71 CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
+
72 wz(1:2*mx,k)=0.
+
73 ENDDO
+
74 CALL sptgptv(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
+
75 & rlat,rlon,wd,wz,xp,yp)
+
76C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
77 END
+
subroutine splaplac(i, m, enn1, q, qd2, idir)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition splaplac.f:25
+
subroutine sptgptd(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, xp, yp)
This subprogram performs a spherical transform from spectral coefficients of scalar fields to specifi...
Definition sptgptd.f:51
+
subroutine sptgptv(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, waved, wavez, up, vp)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition sptgptv.f:54
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgptsd_8f.html b/sptgptsd_8f.html index f1b24209..3727809b 100644 --- a/sptgptsd_8f.html +++ b/sptgptsd_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptsd.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgptsd.f File Reference
+
sptgptsd.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgptsd (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP, XP, YP)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to specified sets of station point values and their gradients on the globe. More...
 
subroutine sptgptsd (iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, gp, xp, yp)
 This subprogram performs a spherical transform from spectral coefficients of scalar quantities to specified sets of station point values and their gradients on the globe.
 

Detailed Description

Transform spectral scalar to station points.

@@ -121,8 +127,8 @@

Definition in file sptgptsd.f.

Function/Subroutine Documentation

- -

◆ sptgptsd()

+ +

◆ sptgptsd()

diff --git a/sptgptsd_8f.js b/sptgptsd_8f.js index ccdb5de0..a36e64cf 100644 --- a/sptgptsd_8f.js +++ b/sptgptsd_8f.js @@ -1,4 +1,4 @@ var sptgptsd_8f = [ - [ "sptgptsd", "sptgptsd_8f.html#ad3ab15089a57b493cc74443ea3b3d88f", null ] + [ "sptgptsd", "sptgptsd_8f.html#a7f079778becc7e99aea9c44f81169043", null ] ]; \ No newline at end of file diff --git a/sptgptsd_8f_source.html b/sptgptsd_8f_source.html index dc78dd3d..c99d02c1 100644 --- a/sptgptsd_8f_source.html +++ b/sptgptsd_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptsd.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,160 +81,168 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgptsd.f
+
sptgptsd.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral scalar to station points.
-
3 C> @author Iredell @date 96-02-29
-
4 C>
-
5 C> ### Program History Log
-
6 C> Date | Programmer | Comments
-
7 C> -----|------------|---------
-
8 C> 96-02-29 | Iredell | Initial.
-
9 C> 1998-12-15 | Iredell | Openmp directives inserted.
-
10 C> 1999-08-18 | Iredell | Openmp directive typo fixed.
-
11 C>
-
12 C> @author Iredell @date 96-02-29
-
13 
-
14 C> This subprogram performs a spherical transform
-
15 C> from spectral coefficients of scalar quantities
-
16 C> to specified sets of station point values
-
17 C> and their gradients on the globe.
-
18 C>
-
19 C> The wave-space can be either triangular or rhomboidal.
-
20 C>
-
21 C> The wave and point fields may have general indexing,
-
22 C> but each wave field is in sequential 'IBM order',
-
23 C> i.e. with zonal wavenumber as the slower index.
-
24 C>
-
25 C> The transforms are all multiprocessed over stations.
-
26 C>
-
27 C> Transform several fields at a time to improve vectorization.
-
28 C>
-
29 C> Subprogram can be called from a multiprocessing environment.
-
30 C>
-
31 C> @param IROMB spectral domain shape
-
32 C> (0 for triangular, 1 for rhomboidal)
-
33 C> @param MAXWV spectral truncation
-
34 C> @param KMAX number of fields to transform.
-
35 C> @param NMAX number of station points to return
-
36 C> @param KWSKIP skip number between wave fields
-
37 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
38 C> @param KGSKIP skip number between station point sets
-
39 C> (defaults to NMAX if KGSKIP=0)
-
40 C> @param NRSKIP skip number between station lats and lons
-
41 C> (defaults to 1 if NRSKIP=0)
-
42 C> @param NGSKIP skip number between station points
-
43 C> (defaults to 1 if NGSKIP=0)
-
44 C> @param RLAT station latitudes in degrees
-
45 C> @param RLON station longitudes in degrees
-
46 C> @param WAVE wave fields
-
47 C> @param GP station point sets
-
48 C> @param XP station point x-gradient sets
-
49 C> @param YP station point y-gradient sets
-
50 C>
-
51 C> @author Iredell @date 96-02-29
-
52  SUBROUTINE sptgptsd(IROMB,MAXWV,KMAX,NMAX,
-
53  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
-
54  & RLAT,RLON,WAVE,GP,XP,YP)
-
55 
-
56  REAL RLAT(*),RLON(*),WAVE(*)
-
57  REAL GP(*),XP(*),YP(*)
-
58  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
59  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
60  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
61  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
62  INTEGER MP(2*KMAX)
-
63  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2*KMAX)
-
64  REAL WTOP(2*(MAXWV+1),2*KMAX)
-
65  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
66  REAL F(2*MAXWV+2,2,3*KMAX),G(3*KMAX)
-
67  parameter(pi=3.14159265358979)
-
68 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
69 C CALCULATE PRELIMINARY CONSTANTS
-
70  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
71  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
72  mxtop=maxwv+1
-
73  mdim=2*mx
-
74  idim=2*maxwv+2
-
75  kw=kwskip
-
76  kg=kgskip
-
77  nr=nrskip
-
78  ng=ngskip
-
79  IF(kw.EQ.0) kw=2*mx
-
80  IF(kg.EQ.0) kg=nmax
-
81  IF(nr.EQ.0) nr=1
-
82  IF(ng.EQ.0) ng=1
-
83  mp(1:kmax)=10
-
84  mp(kmax+1:2*kmax)=1
-
85 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
86 C CALCULATE SPECTRAL WINDS
-
87 C$OMP PARALLEL DO PRIVATE(KWS,KS,KY)
-
88  DO k=1,kmax
-
89  kws=(k-1)*kw
-
90  ks=0*kmax+k
-
91  ky=1*kmax+k
-
92  DO i=1,2*mx
-
93  w(i,ks)=wave(kws+i)
-
94  ENDDO
-
95  DO i=1,2*mxtop
-
96  wtop(i,ks)=0
-
97  ENDDO
-
98  CALL spgrady(iromb,maxwv,enn1,eon,eontop,
-
99  & wave(kws+1),w(1,ky),wtop(1,ky))
-
100  ENDDO
-
101 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
102 C CALCULATE STATION FIELDS
-
103 C$OMP PARALLEL DO PRIVATE(KS,KY,KX,SLAT1,CLAT1)
-
104 C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
-
105  DO n=1,nmax
-
106  IF(abs(rlat((n-1)*nr+1)).GE.89.9995) THEN
-
107  slat1=sign(1.,rlat((n-1)*nr+1))
-
108  clat1=0.
-
109  ELSE
-
110  slat1=sin(pi/180*rlat((n-1)*nr+1))
-
111  clat1=cos(pi/180*rlat((n-1)*nr+1))
-
112  ENDIF
-
113  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
114  & pln,plntop)
-
115  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
-
116  & clat1,pln,plntop,mp,w,wtop,f)
-
117  CALL spgradx(maxwv,idim,kmax,mp,clat1,f(1,1,1),f(1,1,2*kmax+1))
-
118  CALL spfftpt(maxwv,1,idim,1,3*kmax,rlon((n-1)*nr+1),f,g)
-
119  DO k=1,kmax
-
120  ks=0*kmax+k
-
121  ky=1*kmax+k
-
122  kx=2*kmax+k
-
123  nk=(n-1)*ng+(k-1)*kg+1
-
124  gp(nk)=g(ks)
-
125  xp(nk)=g(kx)
-
126  yp(nk)=g(ky)
-
127  ENDDO
-
128  ENDDO
-
129 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
130  END
-
subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition: spfftpt.f:23
-
subroutine spgradx(M, INCW, KMAX, MP, CLAT, W, WX)
This subprogram computes the x-gradient of fields in complex Fourier space.
Definition: spgradx.f:38
-
subroutine spgrady(I, M, ENN1, EON, EONTOP, Q, QDY, QDYTOP)
Computes the horizontal vector y-gradient of a scalar field in spectral space.
Definition: spgrady.f:32
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgptsd(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP, XP, YP)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
Definition: sptgptsd.f:55
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral scalar to station points.
+
3C> @author Iredell @date 96-02-29
+
4C>
+
5C> ### Program History Log
+
6C> Date | Programmer | Comments
+
7C> -----|------------|---------
+
8C> 96-02-29 | Iredell | Initial.
+
9C> 1998-12-15 | Iredell | Openmp directives inserted.
+
10C> 1999-08-18 | Iredell | Openmp directive typo fixed.
+
11C>
+
12C> @author Iredell @date 96-02-29
+
13
+
14C> This subprogram performs a spherical transform
+
15C> from spectral coefficients of scalar quantities
+
16C> to specified sets of station point values
+
17C> and their gradients on the globe.
+
18C>
+
19C> The wave-space can be either triangular or rhomboidal.
+
20C>
+
21C> The wave and point fields may have general indexing,
+
22C> but each wave field is in sequential 'IBM order',
+
23C> i.e. with zonal wavenumber as the slower index.
+
24C>
+
25C> The transforms are all multiprocessed over stations.
+
26C>
+
27C> Transform several fields at a time to improve vectorization.
+
28C>
+
29C> Subprogram can be called from a multiprocessing environment.
+
30C>
+
31C> @param IROMB spectral domain shape
+
32C> (0 for triangular, 1 for rhomboidal)
+
33C> @param MAXWV spectral truncation
+
34C> @param KMAX number of fields to transform.
+
35C> @param NMAX number of station points to return
+
36C> @param KWSKIP skip number between wave fields
+
37C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
38C> @param KGSKIP skip number between station point sets
+
39C> (defaults to NMAX if KGSKIP=0)
+
40C> @param NRSKIP skip number between station lats and lons
+
41C> (defaults to 1 if NRSKIP=0)
+
42C> @param NGSKIP skip number between station points
+
43C> (defaults to 1 if NGSKIP=0)
+
44C> @param RLAT station latitudes in degrees
+
45C> @param RLON station longitudes in degrees
+
46C> @param WAVE wave fields
+
47C> @param GP station point sets
+
48C> @param XP station point x-gradient sets
+
49C> @param YP station point y-gradient sets
+
50C>
+
51C> @author Iredell @date 96-02-29
+
+
52 SUBROUTINE sptgptsd(IROMB,MAXWV,KMAX,NMAX,
+
53 & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
+
54 & RLAT,RLON,WAVE,GP,XP,YP)
+
55
+
56 REAL RLAT(*),RLON(*),WAVE(*)
+
57 REAL GP(*),XP(*),YP(*)
+
58 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
59 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
60 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
61 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
62 INTEGER MP(2*KMAX)
+
63 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2*KMAX)
+
64 REAL WTOP(2*(MAXWV+1),2*KMAX)
+
65 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
66 REAL F(2*MAXWV+2,2,3*KMAX),G(3*KMAX)
+
67 parameter(pi=3.14159265358979)
+
68C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
69C CALCULATE PRELIMINARY CONSTANTS
+
70 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
71 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
72 mxtop=maxwv+1
+
73 mdim=2*mx
+
74 idim=2*maxwv+2
+
75 kw=kwskip
+
76 kg=kgskip
+
77 nr=nrskip
+
78 ng=ngskip
+
79 IF(kw.EQ.0) kw=2*mx
+
80 IF(kg.EQ.0) kg=nmax
+
81 IF(nr.EQ.0) nr=1
+
82 IF(ng.EQ.0) ng=1
+
83 mp(1:kmax)=10
+
84 mp(kmax+1:2*kmax)=1
+
85C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
86C CALCULATE SPECTRAL WINDS
+
87C$OMP PARALLEL DO PRIVATE(KWS,KS,KY)
+
88 DO k=1,kmax
+
89 kws=(k-1)*kw
+
90 ks=0*kmax+k
+
91 ky=1*kmax+k
+
92 DO i=1,2*mx
+
93 w(i,ks)=wave(kws+i)
+
94 ENDDO
+
95 DO i=1,2*mxtop
+
96 wtop(i,ks)=0
+
97 ENDDO
+
98 CALL spgrady(iromb,maxwv,enn1,eon,eontop,
+
99 & wave(kws+1),w(1,ky),wtop(1,ky))
+
100 ENDDO
+
101C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
102C CALCULATE STATION FIELDS
+
103C$OMP PARALLEL DO PRIVATE(KS,KY,KX,SLAT1,CLAT1)
+
104C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
+
105 DO n=1,nmax
+
106 IF(abs(rlat((n-1)*nr+1)).GE.89.9995) THEN
+
107 slat1=sign(1.,rlat((n-1)*nr+1))
+
108 clat1=0.
+
109 ELSE
+
110 slat1=sin(pi/180*rlat((n-1)*nr+1))
+
111 clat1=cos(pi/180*rlat((n-1)*nr+1))
+
112 ENDIF
+
113 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
114 & pln,plntop)
+
115 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
+
116 & clat1,pln,plntop,mp,w,wtop,f)
+
117 CALL spgradx(maxwv,idim,kmax,mp,clat1,f(1,1,1),f(1,1,2*kmax+1))
+
118 CALL spfftpt(maxwv,1,idim,1,3*kmax,rlon((n-1)*nr+1),f,g)
+
119 DO k=1,kmax
+
120 ks=0*kmax+k
+
121 ky=1*kmax+k
+
122 kx=2*kmax+k
+
123 nk=(n-1)*ng+(k-1)*kg+1
+
124 gp(nk)=g(ks)
+
125 xp(nk)=g(kx)
+
126 yp(nk)=g(ky)
+
127 ENDDO
+
128 ENDDO
+
129C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
130 END
+
subroutine spfftpt(m, n, incw, incg, kmax, rlon, w, g)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition spfftpt.f:23
+
subroutine spgradx(m, incw, kmax, mp, clat, w, wx)
This subprogram computes the x-gradient of fields in complex Fourier space.
Definition spgradx.f:38
+
subroutine spgrady(i, m, enn1, eon, eontop, q, qdy, qdytop)
Computes the horizontal vector y-gradient of a scalar field in spectral space.
Definition spgrady.f:32
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgptsd(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, gp, xp, yp)
This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
Definition sptgptsd.f:55
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgptv_8f.html b/sptgptv_8f.html index ff0ef75b..03f204b8 100644 --- a/sptgptv_8f.html +++ b/sptgptv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptv.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgptv.f File Reference
+
sptgptv.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgptv (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to specified sets of station point vectors on the globe. More...
 
subroutine sptgptv (iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, waved, wavez, up, vp)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to specified sets of station point vectors on the globe.
 

Detailed Description

Transform spectral vector to station points.

@@ -114,15 +120,15 @@

1999-08-18 IREDELL Openmp directive typo fixed -2003-06-30 IREDELL use spfftpt() +2003-06-30 IREDELL use spfftpt()
Author
IREDELL
Date
96-02-29

Definition in file sptgptv.f.

Function/Subroutine Documentation

- -

◆ sptgptv()

+ +

◆ sptgptv()

diff --git a/sptgptv_8f.js b/sptgptv_8f.js index 59a8e5b1..9c2778e1 100644 --- a/sptgptv_8f.js +++ b/sptgptv_8f.js @@ -1,4 +1,4 @@ var sptgptv_8f = [ - [ "sptgptv", "sptgptv_8f.html#a9af8a22564d132a887a5237f30710f13", null ] + [ "sptgptv", "sptgptv_8f.html#a95a897645f7999969105fdd79a7af886", null ] ]; \ No newline at end of file diff --git a/sptgptv_8f_source.html b/sptgptv_8f_source.html index fb9575ed..e74cd346 100644 --- a/sptgptv_8f_source.html +++ b/sptgptv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptv.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,151 +81,159 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgptv.f
+
sptgptv.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral vector to station points.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | IREDELL | Initial
-
8 C> 1998-12-15 | IREDELL | Openmp directives inserted
-
9 C> 1999-08-18 | IREDELL | Openmp directive typo fixed
-
10 C> 2003-06-30 | IREDELL | use spfftpt()
-
11 C>
-
12 C> @author IREDELL @date 96-02-29
-
13 
-
14 C> This subprogram performs a spherical transform
-
15 C> from spectral coefficients of divergences and curls
-
16 C> to specified sets of station point vectors on the globe.
-
17 C>
-
18 C> The wave-space can be either triangular or rhomboidal.
-
19 C>
-
20 C> The wave and point fields may have general indexing,
-
21 C> but each wave field is in sequential 'IBM order',
-
22 C> i.e. with zonal wavenumber as the slower index.
-
23 C>
-
24 C> The transforms are all multiprocessed over stations.
-
25 C>
-
26 C> Transform several fields at a time to improve vectorization.
-
27 C>
-
28 C> Subprogram can be called from a multiprocessing environment.
-
29 C>
-
30 C> @param IROMB spectral domain shape
-
31 c> (0 for triangular, 1 for rhomboidal)
-
32 C> @param MAXWV spectral truncation
-
33 C> @param KMAX number of fields to transform.
-
34 C> @param NMAX number of station points to return
-
35 C> @param KWSKIP skip number between wave fields
-
36 c> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
-
37 C> @param KGSKIP skip number between station point sets
-
38 c> (defaults to NMAX IF KGSKIP=0)
-
39 C> @param NRSKIP skip number between station lats and lons
-
40 c> (defaults to 1 if NRSKIP=0)
-
41 C> @param NGSKIP skip number between station points
-
42 c> (defaults to 1 if NGSKIP=0)
-
43 C> @param RLAT station latitudes in degrees
-
44 C> @param RLON station longitudes in degrees
-
45 C> @param WAVED wave divergence fields
-
46 C> @param WAVEZ wave vorticity fields
-
47 C> @param UP station point u-wind sets
-
48 C> @param VP station point v-wind sets
-
49 C>
-
50 C> @author IREDELL @date 96-02-29
-
51  SUBROUTINE sptgptv(IROMB,MAXWV,KMAX,NMAX,
-
52  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
-
53  & RLAT,RLON,WAVED,WAVEZ,UP,VP)
-
54 
-
55  REAL RLAT(*),RLON(*),WAVED(*),WAVEZ(*),UP(*),VP(*)
-
56  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
57  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
58  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
59  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
60  INTEGER MP(2*KMAX)
-
61  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
-
62  REAL WTOP(2*(MAXWV+1),2*KMAX)
-
63  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
64  REAL F(2*MAXWV+3,2,2*KMAX)
-
65  REAL G(2*KMAX)
-
66  parameter(pi=3.14159265358979)
-
67 
-
68 C CALCULATE PRELIMINARY CONSTANTS
-
69  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
70  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
71  mxtop=maxwv+1
-
72  mdim=2*mx+1
-
73  idim=2*maxwv+3
-
74  kw=kwskip
-
75  kg=kgskip
-
76  nr=nrskip
-
77  ng=ngskip
-
78  IF(kw.EQ.0) kw=2*mx
-
79  IF(kg.EQ.0) kg=nmax
-
80  IF(nr.EQ.0) nr=1
-
81  IF(ng.EQ.0) ng=1
-
82  mp=1
-
83 
-
84 C CALCULATE SPECTRAL WINDS
-
85 C$OMP PARALLEL DO PRIVATE(KWS)
-
86  DO k=1,kmax
-
87  kws=(k-1)*kw
-
88  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
-
89  & waved(kws+1),wavez(kws+1),
-
90  & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
-
91  ENDDO
-
92 
-
93 C CALCULATE STATION FIELDS
-
94 C$OMP PARALLEL DO PRIVATE(KU,KV,RADLAT,SLAT1,CLAT1)
-
95 C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
-
96  DO n=1,nmax
-
97  radlat=pi/180*rlat((n-1)*nr+1)
-
98  IF(rlat((n-1)*nr+1).GE.89.9995) THEN
-
99  slat1=1.
-
100  clat1=0.
-
101  ELSEIF(rlat((n-1)*nr+1).LE.-89.9995) THEN
-
102  slat1=-1.
-
103  clat1=0.
-
104  ELSE
-
105  slat1=sin(radlat)
-
106  clat1=cos(radlat)
-
107  ENDIF
-
108  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
109  & pln,plntop)
-
110  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
-
111  & clat1,pln,plntop,mp,w,wtop,f)
-
112  CALL spfftpt(maxwv,1,2*maxwv+3,1,2*kmax,rlon((n-1)*nr+1),f,g)
-
113  DO k=1,kmax
-
114  ku=k
-
115  kv=k+kmax
-
116  nk=(n-1)*ng+(k-1)*kg+1
-
117  up(nk)=g(ku)
-
118  vp(nk)=g(kv)
-
119  ENDDO
-
120  ENDDO
-
121 
-
122  END
-
subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
Computes the wind components from divergence and vorticity in spectral space.
Definition: spdz2uv.f:49
-
subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition: spfftpt.f:23
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgptv(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition: sptgptv.f:54
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral vector to station points.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | IREDELL | Initial
+
8C> 1998-12-15 | IREDELL | Openmp directives inserted
+
9C> 1999-08-18 | IREDELL | Openmp directive typo fixed
+
10C> 2003-06-30 | IREDELL | use spfftpt()
+
11C>
+
12C> @author IREDELL @date 96-02-29
+
13
+
14C> This subprogram performs a spherical transform
+
15C> from spectral coefficients of divergences and curls
+
16C> to specified sets of station point vectors on the globe.
+
17C>
+
18C> The wave-space can be either triangular or rhomboidal.
+
19C>
+
20C> The wave and point fields may have general indexing,
+
21C> but each wave field is in sequential 'IBM order',
+
22C> i.e. with zonal wavenumber as the slower index.
+
23C>
+
24C> The transforms are all multiprocessed over stations.
+
25C>
+
26C> Transform several fields at a time to improve vectorization.
+
27C>
+
28C> Subprogram can be called from a multiprocessing environment.
+
29C>
+
30C> @param IROMB spectral domain shape
+
31c> (0 for triangular, 1 for rhomboidal)
+
32C> @param MAXWV spectral truncation
+
33C> @param KMAX number of fields to transform.
+
34C> @param NMAX number of station points to return
+
35C> @param KWSKIP skip number between wave fields
+
36c> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
+
37C> @param KGSKIP skip number between station point sets
+
38c> (defaults to NMAX IF KGSKIP=0)
+
39C> @param NRSKIP skip number between station lats and lons
+
40c> (defaults to 1 if NRSKIP=0)
+
41C> @param NGSKIP skip number between station points
+
42c> (defaults to 1 if NGSKIP=0)
+
43C> @param RLAT station latitudes in degrees
+
44C> @param RLON station longitudes in degrees
+
45C> @param WAVED wave divergence fields
+
46C> @param WAVEZ wave vorticity fields
+
47C> @param UP station point u-wind sets
+
48C> @param VP station point v-wind sets
+
49C>
+
50C> @author IREDELL @date 96-02-29
+
+
51 SUBROUTINE sptgptv(IROMB,MAXWV,KMAX,NMAX,
+
52 & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
+
53 & RLAT,RLON,WAVED,WAVEZ,UP,VP)
+
54
+
55 REAL RLAT(*),RLON(*),WAVED(*),WAVEZ(*),UP(*),VP(*)
+
56 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
57 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
58 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
59 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
60 INTEGER MP(2*KMAX)
+
61 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
+
62 REAL WTOP(2*(MAXWV+1),2*KMAX)
+
63 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
64 REAL F(2*MAXWV+3,2,2*KMAX)
+
65 REAL G(2*KMAX)
+
66 parameter(pi=3.14159265358979)
+
67
+
68C CALCULATE PRELIMINARY CONSTANTS
+
69 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
70 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
71 mxtop=maxwv+1
+
72 mdim=2*mx+1
+
73 idim=2*maxwv+3
+
74 kw=kwskip
+
75 kg=kgskip
+
76 nr=nrskip
+
77 ng=ngskip
+
78 IF(kw.EQ.0) kw=2*mx
+
79 IF(kg.EQ.0) kg=nmax
+
80 IF(nr.EQ.0) nr=1
+
81 IF(ng.EQ.0) ng=1
+
82 mp=1
+
83
+
84C CALCULATE SPECTRAL WINDS
+
85C$OMP PARALLEL DO PRIVATE(KWS)
+
86 DO k=1,kmax
+
87 kws=(k-1)*kw
+
88 CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
+
89 & waved(kws+1),wavez(kws+1),
+
90 & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
+
91 ENDDO
+
92
+
93C CALCULATE STATION FIELDS
+
94C$OMP PARALLEL DO PRIVATE(KU,KV,RADLAT,SLAT1,CLAT1)
+
95C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
+
96 DO n=1,nmax
+
97 radlat=pi/180*rlat((n-1)*nr+1)
+
98 IF(rlat((n-1)*nr+1).GE.89.9995) THEN
+
99 slat1=1.
+
100 clat1=0.
+
101 ELSEIF(rlat((n-1)*nr+1).LE.-89.9995) THEN
+
102 slat1=-1.
+
103 clat1=0.
+
104 ELSE
+
105 slat1=sin(radlat)
+
106 clat1=cos(radlat)
+
107 ENDIF
+
108 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
109 & pln,plntop)
+
110 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
+
111 & clat1,pln,plntop,mp,w,wtop,f)
+
112 CALL spfftpt(maxwv,1,2*maxwv+3,1,2*kmax,rlon((n-1)*nr+1),f,g)
+
113 DO k=1,kmax
+
114 ku=k
+
115 kv=k+kmax
+
116 nk=(n-1)*ng+(k-1)*kg+1
+
117 up(nk)=g(ku)
+
118 vp(nk)=g(kv)
+
119 ENDDO
+
120 ENDDO
+
121
+
+
122 END
+
subroutine spdz2uv(i, m, enn1, elonn1, eon, eontop, d, z, u, v, utop, vtop)
Computes the wind components from divergence and vorticity in spectral space.
Definition spdz2uv.f:49
+
subroutine spfftpt(m, n, incw, incg, kmax, rlon, w, g)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition spfftpt.f:23
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgptv(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, waved, wavez, up, vp)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition sptgptv.f:54
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptgptvd_8f.html b/sptgptvd_8f.html index 6fb47a35..18a28378 100644 --- a/sptgptvd_8f.html +++ b/sptgptvd_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptvd.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptgptvd.f File Reference
+
sptgptvd.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptgptvd (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, DP, ZP, UP, VP, UXP, VXP, UYP, VYP)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to specified sets of station point vectors and their gradients on the globe. More...
 
subroutine sptgptvd (iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, waved, wavez, dp, zp, up, vp, uxp, vxp, uyp, vyp)
 This subprogram performs a spherical transform from spectral coefficients of divergences and curls to specified sets of station point vectors and their gradients on the globe.
 

Detailed Description

Transform spectral vector to station points.

@@ -119,8 +125,8 @@

Definition in file sptgptvd.f.

Function/Subroutine Documentation

- -

◆ sptgptvd()

+ +

◆ sptgptvd()

diff --git a/sptgptvd_8f.js b/sptgptvd_8f.js index 9a2bc046..a931ac43 100644 --- a/sptgptvd_8f.js +++ b/sptgptvd_8f.js @@ -1,4 +1,4 @@ var sptgptvd_8f = [ - [ "sptgptvd", "sptgptvd_8f.html#ae03c6c76cad685ae1ed32d74bcba6753", null ] + [ "sptgptvd", "sptgptvd_8f.html#a97af133831ac01ede42f45cae1f506b4", null ] ]; \ No newline at end of file diff --git a/sptgptvd_8f_source.html b/sptgptvd_8f_source.html index 53aeaf77..4bb4b620 100644 --- a/sptgptvd_8f_source.html +++ b/sptgptvd_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptgptvd.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,190 +81,198 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptgptvd.f
+
sptgptvd.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Transform spectral vector to station points.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | Iredell | Initial.
-
8 C> 1998-12-15 | Iredell | Openmp directives inserted.
-
9 C> 1999-08-18 | Iredell | Openmp directive typo fixed.
-
10 C>
-
11 C> @author Iredell @date 96-02-29
-
12 
-
13 C> This subprogram performs a spherical transform
-
14 C> from spectral coefficients of divergences and curls
-
15 C> to specified sets of station point vectors and their
-
16 C> gradients on the globe.
-
17 C>
-
18 C> <pre>
-
19 C> DP=(D(UP)/DLON+D(VP*CLAT)/DLAT)/(R*CLAT)
-
20 C> ZP=(D(VP)/DLON-D(UP*CLAT)/DLAT)/(R*CLAT)
-
21 C> UXP=D(UP*CLAT)/DLON/(R*CLAT)
-
22 C> VXP=D(VP*CLAT)/DLON/(R*CLAT)
-
23 C> UYP=D(UP*CLAT)/DLAT/R
-
24 C> VYP=D(VP*CLAT)/DLAT/R
-
25 C> </pre>
-
26 C>
-
27 C> The wave-space can be either triangular or rhomboidal.
-
28 C>
-
29 C> The wave and point fields may have general indexing,
-
30 C> but each wave field is in sequential 'IBM order',
-
31 C> i.e. with zonal wavenumber as the slower index.
-
32 C>
-
33 C> The transforms are all multiprocessed over stations.
-
34 C>
-
35 C> Transform several fields at a time to improve vectorization.
-
36 C>
-
37 C> Subprogram can be called from a multiprocessing environment.
-
38 C>
-
39 C> @param IROMB spectral domain shape
-
40 C> (0 for triangular, 1 for rhomboidal)
-
41 C> @param MAXWV spectral truncation
-
42 C> @param KMAX number of fields to transform.
-
43 C> @param NMAX number of station points to return
-
44 C> @param KWSKIP skip number between wave fields
-
45 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
-
46 C> @param KGSKIP skip number between station point sets
-
47 C> (defaults to NMAX if KGSKIP=0)
-
48 C> @param NRSKIP skip number between station lats and lons
-
49 C> (defaults to 1 if NRSKIP=0)
-
50 C> @param NGSKIP skip number between station points
-
51 C> (defaults to 1 if NGSKIP=0)
-
52 C> @param RLAT station latitudes in degrees
-
53 C> @param RLON station longitudes in degrees
-
54 C> @param WAVED wave divergence fields
-
55 C> @param WAVEZ wave vorticity fields
-
56 C> @param DP station point divergence sets
-
57 C> @param ZP station point vorticity sets
-
58 C> @param UP station point u-wind sets
-
59 C> @param VP station point v-wind sets
-
60 C> @param UXP station point u-wind x-gradient sets
-
61 C> @param VXP station point v-wind x-gradient sets
-
62 C> @param UYP station point u-wind y-gradient sets
-
63 C> @param VYP station point v-wind y-gradient sets
-
64 C>
-
65 C> @author Iredell @date 96-02-29
-
66  SUBROUTINE sptgptvd(IROMB,MAXWV,KMAX,NMAX,
-
67  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
-
68  & RLAT,RLON,WAVED,WAVEZ,
-
69  & DP,ZP,UP,VP,UXP,VXP,UYP,VYP)
-
70 
-
71  REAL RLAT(*),RLON(*),WAVED(*),WAVEZ(*)
-
72  REAL DP(*),ZP(*),UP(*),VP(*),UXP(*),VXP(*),UYP(*),VYP(*)
-
73  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
74  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
75  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
76  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
77  INTEGER MP(4*KMAX)
-
78  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,4*KMAX)
-
79  REAL WTOP(2*(MAXWV+1),4*KMAX)
-
80  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
-
81  REAL F(2*MAXWV+2,2,6*KMAX),G(6*KMAX)
-
82  parameter(pi=3.14159265358979)
-
83 
-
84 C CALCULATE PRELIMINARY CONSTANTS
-
85  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
86  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
87  mxtop=maxwv+1
-
88  mdim=2*mx
-
89  idim=2*maxwv+2
-
90  kw=kwskip
-
91  kg=kgskip
-
92  nr=nrskip
-
93  ng=ngskip
-
94  IF(kw.EQ.0) kw=2*mx
-
95  IF(kg.EQ.0) kg=nmax
-
96  IF(nr.EQ.0) nr=1
-
97  IF(ng.EQ.0) ng=1
-
98  mp(1:2*kmax)=0
-
99  mp(2*kmax+1:4*kmax)=1
-
100 
-
101 C CALCULATE SPECTRAL WINDS
-
102 C$OMP PARALLEL DO PRIVATE(KWS,KD,KZ,KU,KV)
-
103  DO k=1,kmax
-
104  kws=(k-1)*kw
-
105  kd=0*kmax+k
-
106  kz=1*kmax+k
-
107  ku=2*kmax+k
-
108  kv=3*kmax+k
-
109  DO i=1,2*mx
-
110  w(i,kd)=waved(kws+i)
-
111  w(i,kz)=wavez(kws+i)
-
112  ENDDO
-
113  DO i=1,2*mxtop
-
114  wtop(i,kd)=0
-
115  wtop(i,kz)=0
-
116  ENDDO
-
117  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
-
118  & waved(kws+1),wavez(kws+1),
-
119  & w(1,ku),w(1,kv),wtop(1,ku),wtop(1,kv))
-
120  ENDDO
-
121 
-
122 C CALCULATE STATION FIELDS
-
123 C$OMP PARALLEL DO PRIVATE(KD,KZ,KU,KV,KUX,KVX,SLAT1,CLAT1)
-
124 C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
-
125  DO n=1,nmax
-
126  ku=2*kmax+1
-
127  kux=4*kmax+1
-
128  IF(abs(rlat((n-1)*nr+1)).GE.89.9995) THEN
-
129  slat1=sign(1.,rlat((n-1)*nr+1))
-
130  clat1=0.
-
131  ELSE
-
132  slat1=sin(pi/180*rlat((n-1)*nr+1))
-
133  clat1=cos(pi/180*rlat((n-1)*nr+1))
-
134  ENDIF
-
135  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
-
136  & pln,plntop)
-
137  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,4*kmax,
-
138  & clat1,pln,plntop,mp,w,wtop,f)
-
139  CALL spgradx(maxwv,idim,2*kmax,mp(2*kmax+1),clat1,
-
140  & f(1,1,2*kmax+1),f(1,1,4*kmax+1))
-
141  CALL spfftpt(maxwv,1,idim,1,6*kmax,rlon((n-1)*nr+1),f,g)
-
142  DO k=1,kmax
-
143  kd=0*kmax+k
-
144  kz=1*kmax+k
-
145  ku=2*kmax+k
-
146  kv=3*kmax+k
-
147  kux=4*kmax+k
-
148  kvx=5*kmax+k
-
149  nk=(n-1)*ng+(k-1)*kg+1
-
150  dp(nk)=g(kd)
-
151  zp(nk)=g(kz)
-
152  up(nk)=g(ku)
-
153  vp(nk)=g(kv)
-
154  uxp(nk)=g(kux)
-
155  vxp(nk)=g(kvx)
-
156  uyp(nk)=g(kvx)-clat1*g(kz)
-
157  vyp(nk)=clat1*g(kd)-g(kux)
-
158  ENDDO
-
159  ENDDO
-
160  END
-
subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
Computes the wind components from divergence and vorticity in spectral space.
Definition: spdz2uv.f:49
-
subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition: spfftpt.f:23
-
subroutine spgradx(M, INCW, KMAX, MP, CLAT, W, WX)
This subprogram computes the x-gradient of fields in complex Fourier space.
Definition: spgradx.f:38
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine sptgptvd(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, DP, ZP, UP, VP, UXP, VXP, UYP, VYP)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition: sptgptvd.f:70
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Transform spectral vector to station points.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | Iredell | Initial.
+
8C> 1998-12-15 | Iredell | Openmp directives inserted.
+
9C> 1999-08-18 | Iredell | Openmp directive typo fixed.
+
10C>
+
11C> @author Iredell @date 96-02-29
+
12
+
13C> This subprogram performs a spherical transform
+
14C> from spectral coefficients of divergences and curls
+
15C> to specified sets of station point vectors and their
+
16C> gradients on the globe.
+
17C>
+
18C> <pre>
+
19C> DP=(D(UP)/DLON+D(VP*CLAT)/DLAT)/(R*CLAT)
+
20C> ZP=(D(VP)/DLON-D(UP*CLAT)/DLAT)/(R*CLAT)
+
21C> UXP=D(UP*CLAT)/DLON/(R*CLAT)
+
22C> VXP=D(VP*CLAT)/DLON/(R*CLAT)
+
23C> UYP=D(UP*CLAT)/DLAT/R
+
24C> VYP=D(VP*CLAT)/DLAT/R
+
25C> </pre>
+
26C>
+
27C> The wave-space can be either triangular or rhomboidal.
+
28C>
+
29C> The wave and point fields may have general indexing,
+
30C> but each wave field is in sequential 'IBM order',
+
31C> i.e. with zonal wavenumber as the slower index.
+
32C>
+
33C> The transforms are all multiprocessed over stations.
+
34C>
+
35C> Transform several fields at a time to improve vectorization.
+
36C>
+
37C> Subprogram can be called from a multiprocessing environment.
+
38C>
+
39C> @param IROMB spectral domain shape
+
40C> (0 for triangular, 1 for rhomboidal)
+
41C> @param MAXWV spectral truncation
+
42C> @param KMAX number of fields to transform.
+
43C> @param NMAX number of station points to return
+
44C> @param KWSKIP skip number between wave fields
+
45C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
+
46C> @param KGSKIP skip number between station point sets
+
47C> (defaults to NMAX if KGSKIP=0)
+
48C> @param NRSKIP skip number between station lats and lons
+
49C> (defaults to 1 if NRSKIP=0)
+
50C> @param NGSKIP skip number between station points
+
51C> (defaults to 1 if NGSKIP=0)
+
52C> @param RLAT station latitudes in degrees
+
53C> @param RLON station longitudes in degrees
+
54C> @param WAVED wave divergence fields
+
55C> @param WAVEZ wave vorticity fields
+
56C> @param DP station point divergence sets
+
57C> @param ZP station point vorticity sets
+
58C> @param UP station point u-wind sets
+
59C> @param VP station point v-wind sets
+
60C> @param UXP station point u-wind x-gradient sets
+
61C> @param VXP station point v-wind x-gradient sets
+
62C> @param UYP station point u-wind y-gradient sets
+
63C> @param VYP station point v-wind y-gradient sets
+
64C>
+
65C> @author Iredell @date 96-02-29
+
+
66 SUBROUTINE sptgptvd(IROMB,MAXWV,KMAX,NMAX,
+
67 & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
+
68 & RLAT,RLON,WAVED,WAVEZ,
+
69 & DP,ZP,UP,VP,UXP,VXP,UYP,VYP)
+
70
+
71 REAL RLAT(*),RLON(*),WAVED(*),WAVEZ(*)
+
72 REAL DP(*),ZP(*),UP(*),VP(*),UXP(*),VXP(*),UYP(*),VYP(*)
+
73 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
74 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
75 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
76 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
77 INTEGER MP(4*KMAX)
+
78 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,4*KMAX)
+
79 REAL WTOP(2*(MAXWV+1),4*KMAX)
+
80 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
+
81 REAL F(2*MAXWV+2,2,6*KMAX),G(6*KMAX)
+
82 parameter(pi=3.14159265358979)
+
83
+
84C CALCULATE PRELIMINARY CONSTANTS
+
85 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
86 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
87 mxtop=maxwv+1
+
88 mdim=2*mx
+
89 idim=2*maxwv+2
+
90 kw=kwskip
+
91 kg=kgskip
+
92 nr=nrskip
+
93 ng=ngskip
+
94 IF(kw.EQ.0) kw=2*mx
+
95 IF(kg.EQ.0) kg=nmax
+
96 IF(nr.EQ.0) nr=1
+
97 IF(ng.EQ.0) ng=1
+
98 mp(1:2*kmax)=0
+
99 mp(2*kmax+1:4*kmax)=1
+
100
+
101C CALCULATE SPECTRAL WINDS
+
102C$OMP PARALLEL DO PRIVATE(KWS,KD,KZ,KU,KV)
+
103 DO k=1,kmax
+
104 kws=(k-1)*kw
+
105 kd=0*kmax+k
+
106 kz=1*kmax+k
+
107 ku=2*kmax+k
+
108 kv=3*kmax+k
+
109 DO i=1,2*mx
+
110 w(i,kd)=waved(kws+i)
+
111 w(i,kz)=wavez(kws+i)
+
112 ENDDO
+
113 DO i=1,2*mxtop
+
114 wtop(i,kd)=0
+
115 wtop(i,kz)=0
+
116 ENDDO
+
117 CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
+
118 & waved(kws+1),wavez(kws+1),
+
119 & w(1,ku),w(1,kv),wtop(1,ku),wtop(1,kv))
+
120 ENDDO
+
121
+
122C CALCULATE STATION FIELDS
+
123C$OMP PARALLEL DO PRIVATE(KD,KZ,KU,KV,KUX,KVX,SLAT1,CLAT1)
+
124C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
+
125 DO n=1,nmax
+
126 ku=2*kmax+1
+
127 kux=4*kmax+1
+
128 IF(abs(rlat((n-1)*nr+1)).GE.89.9995) THEN
+
129 slat1=sign(1.,rlat((n-1)*nr+1))
+
130 clat1=0.
+
131 ELSE
+
132 slat1=sin(pi/180*rlat((n-1)*nr+1))
+
133 clat1=cos(pi/180*rlat((n-1)*nr+1))
+
134 ENDIF
+
135 CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
+
136 & pln,plntop)
+
137 CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,4*kmax,
+
138 & clat1,pln,plntop,mp,w,wtop,f)
+
139 CALL spgradx(maxwv,idim,2*kmax,mp(2*kmax+1),clat1,
+
140 & f(1,1,2*kmax+1),f(1,1,4*kmax+1))
+
141 CALL spfftpt(maxwv,1,idim,1,6*kmax,rlon((n-1)*nr+1),f,g)
+
142 DO k=1,kmax
+
143 kd=0*kmax+k
+
144 kz=1*kmax+k
+
145 ku=2*kmax+k
+
146 kv=3*kmax+k
+
147 kux=4*kmax+k
+
148 kvx=5*kmax+k
+
149 nk=(n-1)*ng+(k-1)*kg+1
+
150 dp(nk)=g(kd)
+
151 zp(nk)=g(kz)
+
152 up(nk)=g(ku)
+
153 vp(nk)=g(kv)
+
154 uxp(nk)=g(kux)
+
155 vxp(nk)=g(kvx)
+
156 uyp(nk)=g(kvx)-clat1*g(kz)
+
157 vyp(nk)=clat1*g(kd)-g(kux)
+
158 ENDDO
+
159 ENDDO
+
+
160 END
+
subroutine spdz2uv(i, m, enn1, elonn1, eon, eontop, d, z, u, v, utop, vtop)
Computes the wind components from divergence and vorticity in spectral space.
Definition spdz2uv.f:49
+
subroutine spfftpt(m, n, incw, incg, kmax, rlon, w, g)
This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
Definition spfftpt.f:23
+
subroutine spgradx(m, incw, kmax, mp, clat, w, wx)
This subprogram computes the x-gradient of fields in complex Fourier space.
Definition spgradx.f:38
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine sptgptvd(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, waved, wavez, dp, zp, up, vp, uxp, vxp, uyp, vyp)
This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
Definition sptgptvd.f:70
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptran_8f.html b/sptran_8f.html index 9fb66fbb..6197b1ff 100644 --- a/sptran_8f.html +++ b/sptran_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptran.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptran.f File Reference
+
sptran.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptran (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
 This subprogram performs a spherical transform between spectral coefficients of scalar quantities and fields on a global cylindrical grid. More...
 
subroutine sptran (iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
 This subprogram performs a spherical transform between spectral coefficients of scalar quantities and fields on a global cylindrical grid.
 

Detailed Description

Perform a scalar spherical transform.

@@ -117,8 +123,8 @@

Definition in file sptran.f.

Function/Subroutine Documentation

- -

◆ sptran()

+ +

◆ sptran()

diff --git a/sptran_8f.js b/sptran_8f.js index ec95a0ac..6c7b330b 100644 --- a/sptran_8f.js +++ b/sptran_8f.js @@ -1,4 +1,4 @@ var sptran_8f = [ - [ "sptran", "sptran_8f.html#af7610e42f0dcd199b8cf80f851dcfed0", null ] + [ "sptran", "sptran_8f.html#adff21f68dffb1652ed2266037f1f6811", null ] ]; \ No newline at end of file diff --git a/sptran_8f_source.html b/sptran_8f_source.html index 88dedaa8..6c8423e2 100644 --- a/sptran_8f_source.html +++ b/sptran_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptran.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,148 +81,156 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptran.f
+
sptran.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a scalar spherical transform.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | IREDELL | Initial
-
8 C> 1998-12-15 | IREDELL | Generic fft used, openmp directives inserted
-
9 C>
-
10 C> @author IREDELL @date 96-02-29
-
11 
-
12 C> This subprogram performs a spherical transform between spectral
-
13 C> coefficients of scalar quantities and fields on a global
-
14 C> cylindrical grid.
-
15 C>
-
16 C> The wave-space can be either triangular or
-
17 C> rhomboidal.
-
18 C>
-
19 C> The grid-space can be either an equally-spaced grid
-
20 C> (with or without pole points) or a Gaussian grid.
-
21 C>
-
22 C> The wave and grid fields may have general indexing,
-
23 C> but each wave field is in sequential 'IBM order',
-
24 C> i.e. with zonal wavenumber as the slower index.
-
25 C>
-
26 C> Transforms are done in latitude pairs for efficiency;
-
27 C> thus grid arrays for each hemisphere must be passed.
-
28 C> If so requested, just a subset of the latitude pairs
-
29 C> may be transformed in each invocation of the subprogram.
-
30 C>
-
31 C> The transforms are all multiprocessed over latitude except
-
32 C> the transform from Fourier to spectral is multiprocessed
-
33 C> over zonal wavenumber to ensure reproducibility.
-
34 C>
-
35 C> Transform several fields at a time to improve vectorization.
-
36 C> Subprogram can be called from a multiprocessing environment.
-
37 C>
-
38 C> Minimum grid dimensions for unaliased transforms to spectral:
-
39 C> DIMENSION |LINEAR |QUADRATIC
-
40 C> ----------------------- |--------- |-------------
-
41 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
-
42 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
-
43 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
-
44 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
-
45 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
-
46 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
-
47 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
-
48 C>
-
49 C> @param IROMB spectral domain shape
-
50 c> (0 for triangular, 1 for rhomboidal)
-
51 C> @param MAXWV spectral truncation
-
52 C> @param IDRT grid identifier
-
53 C> - IDRT=4 for Gaussian grid,
-
54 C> - IDRT=0 for equally-spaced grid including poles,
-
55 C> - IDRT=256 for equally-spaced grid excluding poles
-
56 C> @param IMAX even number of longitudes.
-
57 C> @param JMAX number of latitudes.
-
58 C> @param KMAX number of fields to transform.
-
59 C> @param IPRIME longitude index for the prime meridian.
-
60 C> (defaults to 1 if IPRIME=0)
-
61 C> @param ISKIP skip number between longitudes
-
62 C> (defaults to 1 if ISKIP=0)
-
63 C> @param JNSKIP skip number between n.h. latitudes from north
-
64 C> (defaults to imax if JNSKIP=0)
-
65 C> @param JSSKIP skip number between s.h. latitudes from south
-
66 c> (defaults to -imax if JSSKIP=0)
-
67 C> @param KWSKIP skip number between wave fields
-
68 c> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
-
69 C> @param KGSKIP skip number between grid fields
-
70 c> (defaults to IMAX*JMAX IF KGSKIP=0)
-
71 C> @param JBEG latitude index (from pole) to begin transform
-
72 c> (defaults to 1 if JBEG=0)
-
73 C> (if JBEG=0 and IDIR<0, wave is zeroed before transform)
-
74 C> @param JEND latitude index (from pole) to end transform
-
75 c> (defaults to (JMAX+1)/2 IF JEND=0)
-
76 C> @param JCPU number of cpus over which to multiprocess
-
77 C> @param[out] WAVE wave fields if IDIR>0
-
78 C> @param[out] gridn n.h. grid fields (starting at jbeg) if IDIR<0
-
79 C> @param[out] grids s.h. grid fields (starting at jbeg) if IDIR<0
-
80 C> @param IDIR transform flag
-
81 C> (idir>0 for wave to grid, idir<0 for grid to wave)
-
82 C>
-
83 C> @author IREDELL @date 96-02-29
-
84  SUBROUTINE sptran(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
-
85  & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
-
86  & JBEG,JEND,JCPU,
-
87  & WAVE,GRIDN,GRIDS,IDIR)
-
88 
-
89  REAL WAVE(*),GRIDN(*),GRIDS(*)
-
90 
-
91  MX=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
92  ip=iprime
-
93  is=iskip
-
94  jn=jnskip
-
95  js=jsskip
-
96  kw=kwskip
-
97  kg=kgskip
-
98  jb=jbeg
-
99  je=jend
-
100  jc=jcpu
-
101  IF(ip.EQ.0) ip=1
-
102  IF(is.EQ.0) is=1
-
103  IF(jn.EQ.0) jn=imax
-
104  IF(js.EQ.0) js=-jn
-
105  IF(kw.EQ.0) kw=2*mx
-
106  IF(kg.EQ.0) kg=imax*jmax
-
107  IF(jb.EQ.0) jb=1
-
108  IF(je.EQ.0) je=(jmax+1)/2
-
109  IF(jc.EQ.0) jc=ncpus()
-
110 
-
111  IF(idir.LT.0.AND.jbeg.EQ.0) THEN
-
112  DO k=1,kmax
-
113  kws=(k-1)*kw
-
114  wave(kws+1:kws+2*mx)=0
-
115  ENDDO
-
116  ENDIF
-
117 
-
118  CALL sptranf(iromb,maxwv,idrt,imax,jmax,kmax,
-
119  & ip,is,jn,js,kw,kg,jb,je,jc,
-
120  & wave,gridn,grids,idir)
-
121 
-
122  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptran.f:88
-
subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptranf.f:77
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a scalar spherical transform.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | IREDELL | Initial
+
8C> 1998-12-15 | IREDELL | Generic fft used, openmp directives inserted
+
9C>
+
10C> @author IREDELL @date 96-02-29
+
11
+
12C> This subprogram performs a spherical transform between spectral
+
13C> coefficients of scalar quantities and fields on a global
+
14C> cylindrical grid.
+
15C>
+
16C> The wave-space can be either triangular or
+
17C> rhomboidal.
+
18C>
+
19C> The grid-space can be either an equally-spaced grid
+
20C> (with or without pole points) or a Gaussian grid.
+
21C>
+
22C> The wave and grid fields may have general indexing,
+
23C> but each wave field is in sequential 'IBM order',
+
24C> i.e. with zonal wavenumber as the slower index.
+
25C>
+
26C> Transforms are done in latitude pairs for efficiency;
+
27C> thus grid arrays for each hemisphere must be passed.
+
28C> If so requested, just a subset of the latitude pairs
+
29C> may be transformed in each invocation of the subprogram.
+
30C>
+
31C> The transforms are all multiprocessed over latitude except
+
32C> the transform from Fourier to spectral is multiprocessed
+
33C> over zonal wavenumber to ensure reproducibility.
+
34C>
+
35C> Transform several fields at a time to improve vectorization.
+
36C> Subprogram can be called from a multiprocessing environment.
+
37C>
+
38C> Minimum grid dimensions for unaliased transforms to spectral:
+
39C> DIMENSION |LINEAR |QUADRATIC
+
40C> ----------------------- |--------- |-------------
+
41C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
+
42C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
+
43C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
+
44C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
+
45C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
+
46C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
+
47C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
+
48C>
+
49C> @param IROMB spectral domain shape
+
50c> (0 for triangular, 1 for rhomboidal)
+
51C> @param MAXWV spectral truncation
+
52C> @param IDRT grid identifier
+
53C> - IDRT=4 for Gaussian grid,
+
54C> - IDRT=0 for equally-spaced grid including poles,
+
55C> - IDRT=256 for equally-spaced grid excluding poles
+
56C> @param IMAX even number of longitudes.
+
57C> @param JMAX number of latitudes.
+
58C> @param KMAX number of fields to transform.
+
59C> @param IPRIME longitude index for the prime meridian.
+
60C> (defaults to 1 if IPRIME=0)
+
61C> @param ISKIP skip number between longitudes
+
62C> (defaults to 1 if ISKIP=0)
+
63C> @param JNSKIP skip number between n.h. latitudes from north
+
64C> (defaults to imax if JNSKIP=0)
+
65C> @param JSSKIP skip number between s.h. latitudes from south
+
66c> (defaults to -imax if JSSKIP=0)
+
67C> @param KWSKIP skip number between wave fields
+
68c> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
+
69C> @param KGSKIP skip number between grid fields
+
70c> (defaults to IMAX*JMAX IF KGSKIP=0)
+
71C> @param JBEG latitude index (from pole) to begin transform
+
72c> (defaults to 1 if JBEG=0)
+
73C> (if JBEG=0 and IDIR<0, wave is zeroed before transform)
+
74C> @param JEND latitude index (from pole) to end transform
+
75c> (defaults to (JMAX+1)/2 IF JEND=0)
+
76C> @param JCPU number of cpus over which to multiprocess
+
77C> @param[out] WAVE wave fields if IDIR>0
+
78C> @param[out] gridn n.h. grid fields (starting at jbeg) if IDIR<0
+
79C> @param[out] grids s.h. grid fields (starting at jbeg) if IDIR<0
+
80C> @param IDIR transform flag
+
81C> (idir>0 for wave to grid, idir<0 for grid to wave)
+
82C>
+
83C> @author IREDELL @date 96-02-29
+
+
84 SUBROUTINE sptran(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
+
85 & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
+
86 & JBEG,JEND,JCPU,
+
87 & WAVE,GRIDN,GRIDS,IDIR)
+
88
+
89 REAL WAVE(*),GRIDN(*),GRIDS(*)
+
90
+
91 MX=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
92 ip=iprime
+
93 is=iskip
+
94 jn=jnskip
+
95 js=jsskip
+
96 kw=kwskip
+
97 kg=kgskip
+
98 jb=jbeg
+
99 je=jend
+
100 jc=jcpu
+
101 IF(ip.EQ.0) ip=1
+
102 IF(is.EQ.0) is=1
+
103 IF(jn.EQ.0) jn=imax
+
104 IF(js.EQ.0) js=-jn
+
105 IF(kw.EQ.0) kw=2*mx
+
106 IF(kg.EQ.0) kg=imax*jmax
+
107 IF(jb.EQ.0) jb=1
+
108 IF(je.EQ.0) je=(jmax+1)/2
+
109 IF(jc.EQ.0) jc=ncpus()
+
110
+
111 IF(idir.LT.0.AND.jbeg.EQ.0) THEN
+
112 DO k=1,kmax
+
113 kws=(k-1)*kw
+
114 wave(kws+1:kws+2*mx)=0
+
115 ENDDO
+
116 ENDIF
+
117
+
118 CALL sptranf(iromb,maxwv,idrt,imax,jmax,kmax,
+
119 & ip,is,jn,js,kw,kg,jb,je,jc,
+
120 & wave,gridn,grids,idir)
+
121
+
+
122 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptran.f:88
+
subroutine sptranf(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptranf.f:77
diff --git a/sptrand_8f.html b/sptrand_8f.html index d4338b9d..085c337c 100644 --- a/sptrand_8f.html +++ b/sptrand_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrand.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptrand.f File Reference
+
sptrand.f File Reference
@@ -94,11 +100,11 @@

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

Detailed Description

Perform a gradient spherical transform.

@@ -117,8 +123,8 @@

Definition in file sptrand.f.

Function/Subroutine Documentation

- -

◆ sptrand()

+ +

◆ sptrand()

diff --git a/sptrand_8f.js b/sptrand_8f.js index c01144d7..8a8e1248 100644 --- a/sptrand_8f.js +++ b/sptrand_8f.js @@ -1,4 +1,4 @@ var sptrand_8f = [ - [ "sptrand", "sptrand_8f.html#ae810abad32bcbdfb8345a30e50bcc1ef", null ] + [ "sptrand", "sptrand_8f.html#a7086f0e3893ca22fa1e8e66887e5c947", null ] ]; \ No newline at end of file diff --git a/sptrand_8f_source.html b/sptrand_8f_source.html index 5f90bd36..61998ab7 100644 --- a/sptrand_8f_source.html +++ b/sptrand_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrand.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,177 +81,185 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptrand.f
+
sptrand.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a gradient spherical transform.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | IREDELL | Initial
-
8 C> 1998-12-15 | IREDELL | openmp directives inserted
-
9 C>
-
10 C> @author Iredell @date 96-02-29
-
11 
-
12 C> This subprogram performs a spherical transform
-
13 C> between spectral coefficients of scalar fields
-
14 C> and their means and gradients on a global cylindrical grid.
-
15 C>
-
16 C> The wave-space can be either triangular or rhomboidal.
-
17 C>
-
18 C> The grid-space can be either an equally-spaced grid
-
19 C> (with or without pole points) or a Gaussian grid.
-
20 C>
-
21 C> The wave and grid fields may have general indexing,
-
22 C> but each wave field is in sequential 'IBM order',
-
23 C> i.e. with zonal wavenumber as the slower index.
-
24 C>
-
25 C> Transforms are done in latitude pairs for efficiency;
-
26 C> thus grid arrays for each hemisphere must be passed.
-
27 C> if so requested, just a subset of the latitude pairs
-
28 C> may be transformed in each invocation of the subprogram.
-
29 C>
-
30 C> The transforms are all multiprocessed over latitude except
-
31 C> the transform from Fourier to spectral is multiprocessed
-
32 C> over zonal wavenumber to ensure reproducibility.
-
33 C>
-
34 C> Transform several fields at a time to improve vectorization.
-
35 C>
-
36 C> Subprogram can be called from a multiprocessing environment.
-
37 C>
-
38 C> Minimum grid dimensions for unaliased transforms to spectral:
-
39 C> DIMENSION |LINEAR |QUADRATIC
-
40 C> ----------------------- |--------- |-------------
-
41 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
42 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
43 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
44 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
45 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
46 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
47 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
48 C>
-
49 C> @param IROMB spectral domain shape
-
50 C> (0 for triangular, 1 for rhomboidal)
-
51 C> @param MAXWV spectral truncation
-
52 C> @param IDRT grid identifier
-
53 C> - IDRT=4 for Gaussian grid
-
54 C> - IDRT=0 for equally-spaced grid including poles
-
55 C> - IDRT=256 for equally-spaced grid excluding poles
-
56 C> @param IMAX even number of longitudes.
-
57 C> @param JMAX number of latitudes.
-
58 C> @param KMAX number of fields to transform.
-
59 C> @param IPRIME longitude index for the prime meridian.
-
60 C> (defaults to 1 if IPRIME=0)
-
61 C> @param ISKIP skip number between longitudes
-
62 C> (defaults to 1 if ISKIP=0)
-
63 C> @param JNSKIP skip number between n.h. latitudes from north
-
64 C> (defaults to IMAX if JNSKIP=0)
-
65 C> @param JSSKIP skip number between s.h. latitudes from south
-
66 C> (defaults to -IMAX if JSSKIP=0)
-
67 C> @param KWSKIP skip number between wave fields
-
68 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
-
69 C> @param KGSKIP skip number between grid fields
-
70 C> (defaults to IMAX*JMAX if KGSKIP=0)
-
71 C> @param JBEG latitude index (from pole) to begin transform
-
72 C> (defaults to 1 if JBEG=0). If JBEG=0 and IDIR<0, wave is zeroed before transform.
-
73 C> @param JEND latitude index (from pole) to end transform
-
74 C> (defaults to (JMAX+1)/2 if JEND=0)
-
75 C> @param JCPU number of cpus over which to multiprocess
-
76 C> @param[out] WAVE wave fields if IDIR>0
-
77 C> @param[out] GRIDMN global means if IDIR<0
-
78 C> @param[out] GRIDXN n.h. x-gradients (starting at JBEG) if IDIR<0
-
79 C> @param[out] GRIDXS s.h. x-gradients (starting at JBEG) if IDIR<0
-
80 C> [GRIDX=(D(WAVE)/DLAM)/(CLAT*RERTH)]
-
81 C> @param[out] GRIDYN n.h. y-gradients (starting at JBEG) if IDIR<0
-
82 C> @param[out] GRIDYS s.h. y-gradients (starting at JBEG) if IDIR<0
-
83 C> [GRIDY=(D(WAVE)/DPHI)/RERTH]
-
84 C> @param IDIR transform flag
-
85 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
-
86 C>
-
87 C> @author Iredell @date 96-02-29
-
88  SUBROUTINE sptrand(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
-
89  & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
-
90  & JBEG,JEND,JCPU,
-
91  & WAVE,GRIDMN,GRIDXN,GRIDXS,GRIDYN,GRIDYS,IDIR)
-
92 
-
93  REAL WAVE(*),GRIDMN(KMAX),GRIDXN(*),GRIDXS(*),GRIDYN(*),GRIDYS(*)
-
94  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
95  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
96  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
97  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
98  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
99  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
100 
-
101 C SET PARAMETERS
-
102  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
103  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
104  mdim=2*mx+1
-
105  kw=kwskip
-
106  IF(kw.EQ.0) kw=2*mx
-
107 
-
108 C TRANSFORM WAVE TO GRID
-
109  IF(idir.GT.0) THEN
-
110 C$OMP PARALLEL DO PRIVATE(KWS)
-
111  DO k=1,kmax
-
112  kws=(k-1)*kw
-
113  gridmn(k)=wave(kws+1)/sqrt(2.)
-
114  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
-
115  wz(1:2*mx,k)=0.
-
116  ENDDO
-
117  CALL sptranv(iromb,maxwv,idrt,imax,jmax,kmax,
-
118  & iprime,iskip,jnskip,jsskip,mdim,kgskip,
-
119  & jbeg,jend,jcpu,
-
120  & wd,wz,gridxn,gridxs,gridyn,gridys,idir)
-
121 
-
122 C TRANSFORM GRID TO WAVE
-
123  ELSE
-
124 C$OMP PARALLEL DO
-
125  DO k=1,kmax
-
126  wd(1:2*mx,k)=0.
-
127  wz(1:2*mx,k)=0.
-
128  ENDDO
-
129  CALL sptranv(iromb,maxwv,idrt,imax,jmax,kmax,
-
130  & iprime,iskip,jnskip,jsskip,mdim,kgskip,
-
131  & jbeg,jend,jcpu,
-
132  & wd,wz,gridxn,gridxs,gridyn,gridys,idir)
-
133  IF(jbeg.EQ.0) THEN
-
134 C$OMP PARALLEL DO PRIVATE(KWS)
-
135  DO k=1,kmax
-
136  kws=(k-1)*kw
-
137  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),-1)
-
138  wave(kws+1)=gridmn(k)*sqrt(2.)
-
139  ENDDO
-
140  ELSE
-
141 C$OMP PARALLEL DO PRIVATE(KWS)
-
142  DO k=1,kmax
-
143  kws=(k-1)*kw
-
144  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wd(1,k),-1)
-
145  wave(kws+1:kws+2*mx)=wave(kws+1:kws+2*mx)+wz(1:2*mx,k)
-
146  wave(kws+1)=gridmn(k)*sqrt(2.)
-
147  ENDDO
-
148  ENDIF
-
149  ENDIF
-
150  END
-
subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition: splaplac.f:25
-
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 the...
Definition: sptrand.f:92
-
subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition: sptranv.f:91
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a gradient spherical transform.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | IREDELL | Initial
+
8C> 1998-12-15 | IREDELL | openmp directives inserted
+
9C>
+
10C> @author Iredell @date 96-02-29
+
11
+
12C> This subprogram performs a spherical transform
+
13C> between spectral coefficients of scalar fields
+
14C> and their means and gradients on a global cylindrical grid.
+
15C>
+
16C> The wave-space can be either triangular or rhomboidal.
+
17C>
+
18C> The grid-space can be either an equally-spaced grid
+
19C> (with or without pole points) or a Gaussian grid.
+
20C>
+
21C> The wave and grid fields may have general indexing,
+
22C> but each wave field is in sequential 'IBM order',
+
23C> i.e. with zonal wavenumber as the slower index.
+
24C>
+
25C> Transforms are done in latitude pairs for efficiency;
+
26C> thus grid arrays for each hemisphere must be passed.
+
27C> if so requested, just a subset of the latitude pairs
+
28C> may be transformed in each invocation of the subprogram.
+
29C>
+
30C> The transforms are all multiprocessed over latitude except
+
31C> the transform from Fourier to spectral is multiprocessed
+
32C> over zonal wavenumber to ensure reproducibility.
+
33C>
+
34C> Transform several fields at a time to improve vectorization.
+
35C>
+
36C> Subprogram can be called from a multiprocessing environment.
+
37C>
+
38C> Minimum grid dimensions for unaliased transforms to spectral:
+
39C> DIMENSION |LINEAR |QUADRATIC
+
40C> ----------------------- |--------- |-------------
+
41C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
42C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
43C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
44C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
45C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
46C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
47C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
48C>
+
49C> @param IROMB spectral domain shape
+
50C> (0 for triangular, 1 for rhomboidal)
+
51C> @param MAXWV spectral truncation
+
52C> @param IDRT grid identifier
+
53C> - IDRT=4 for Gaussian grid
+
54C> - IDRT=0 for equally-spaced grid including poles
+
55C> - IDRT=256 for equally-spaced grid excluding poles
+
56C> @param IMAX even number of longitudes.
+
57C> @param JMAX number of latitudes.
+
58C> @param KMAX number of fields to transform.
+
59C> @param IPRIME longitude index for the prime meridian.
+
60C> (defaults to 1 if IPRIME=0)
+
61C> @param ISKIP skip number between longitudes
+
62C> (defaults to 1 if ISKIP=0)
+
63C> @param JNSKIP skip number between n.h. latitudes from north
+
64C> (defaults to IMAX if JNSKIP=0)
+
65C> @param JSSKIP skip number between s.h. latitudes from south
+
66C> (defaults to -IMAX if JSSKIP=0)
+
67C> @param KWSKIP skip number between wave fields
+
68C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
+
69C> @param KGSKIP skip number between grid fields
+
70C> (defaults to IMAX*JMAX if KGSKIP=0)
+
71C> @param JBEG latitude index (from pole) to begin transform
+
72C> (defaults to 1 if JBEG=0). If JBEG=0 and IDIR<0, wave is zeroed before transform.
+
73C> @param JEND latitude index (from pole) to end transform
+
74C> (defaults to (JMAX+1)/2 if JEND=0)
+
75C> @param JCPU number of cpus over which to multiprocess
+
76C> @param[out] WAVE wave fields if IDIR>0
+
77C> @param[out] GRIDMN global means if IDIR<0
+
78C> @param[out] GRIDXN n.h. x-gradients (starting at JBEG) if IDIR<0
+
79C> @param[out] GRIDXS s.h. x-gradients (starting at JBEG) if IDIR<0
+
80C> [GRIDX=(D(WAVE)/DLAM)/(CLAT*RERTH)]
+
81C> @param[out] GRIDYN n.h. y-gradients (starting at JBEG) if IDIR<0
+
82C> @param[out] GRIDYS s.h. y-gradients (starting at JBEG) if IDIR<0
+
83C> [GRIDY=(D(WAVE)/DPHI)/RERTH]
+
84C> @param IDIR transform flag
+
85C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
+
86C>
+
87C> @author Iredell @date 96-02-29
+
+
88 SUBROUTINE sptrand(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
+
89 & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
+
90 & JBEG,JEND,JCPU,
+
91 & WAVE,GRIDMN,GRIDXN,GRIDXS,GRIDYN,GRIDYS,IDIR)
+
92
+
93 REAL WAVE(*),GRIDMN(KMAX),GRIDXN(*),GRIDXS(*),GRIDYN(*),GRIDYS(*)
+
94 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
95 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
96 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
97 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
98 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
99 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
100
+
101C SET PARAMETERS
+
102 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
103 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
104 mdim=2*mx+1
+
105 kw=kwskip
+
106 IF(kw.EQ.0) kw=2*mx
+
107
+
108C TRANSFORM WAVE TO GRID
+
109 IF(idir.GT.0) THEN
+
110C$OMP PARALLEL DO PRIVATE(KWS)
+
111 DO k=1,kmax
+
112 kws=(k-1)*kw
+
113 gridmn(k)=wave(kws+1)/sqrt(2.)
+
114 CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
+
115 wz(1:2*mx,k)=0.
+
116 ENDDO
+
117 CALL sptranv(iromb,maxwv,idrt,imax,jmax,kmax,
+
118 & iprime,iskip,jnskip,jsskip,mdim,kgskip,
+
119 & jbeg,jend,jcpu,
+
120 & wd,wz,gridxn,gridxs,gridyn,gridys,idir)
+
121
+
122C TRANSFORM GRID TO WAVE
+
123 ELSE
+
124C$OMP PARALLEL DO
+
125 DO k=1,kmax
+
126 wd(1:2*mx,k)=0.
+
127 wz(1:2*mx,k)=0.
+
128 ENDDO
+
129 CALL sptranv(iromb,maxwv,idrt,imax,jmax,kmax,
+
130 & iprime,iskip,jnskip,jsskip,mdim,kgskip,
+
131 & jbeg,jend,jcpu,
+
132 & wd,wz,gridxn,gridxs,gridyn,gridys,idir)
+
133 IF(jbeg.EQ.0) THEN
+
134C$OMP PARALLEL DO PRIVATE(KWS)
+
135 DO k=1,kmax
+
136 kws=(k-1)*kw
+
137 CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),-1)
+
138 wave(kws+1)=gridmn(k)*sqrt(2.)
+
139 ENDDO
+
140 ELSE
+
141C$OMP PARALLEL DO PRIVATE(KWS)
+
142 DO k=1,kmax
+
143 kws=(k-1)*kw
+
144 CALL splaplac(iromb,maxwv,enn1,wz(1,k),wd(1,k),-1)
+
145 wave(kws+1:kws+2*mx)=wave(kws+1:kws+2*mx)+wz(1:2*mx,k)
+
146 wave(kws+1)=gridmn(k)*sqrt(2.)
+
147 ENDDO
+
148 ENDIF
+
149 ENDIF
+
+
150 END
+
subroutine splaplac(i, m, enn1, q, qd2, idir)
Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
Definition splaplac.f:25
+
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 the...
Definition sptrand.f:92
+
subroutine sptranv(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition sptranv.f:91
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptranf0_8f.html b/sptranf0_8f.html index cf5dd981..e210069d 100644 --- a/sptranf0_8f.html +++ b/sptranf0_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranf0.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptranf0.f File Reference
+
sptranf0.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptranf0 (IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
 This subprogram performs an initialization for subprogram sptranf(). More...
 
subroutine sptranf0 (iromb, maxwv, idrt, imax, jmax, jb, je, eps, epstop, enn1, elonn1, eon, eontop, afft, clat, slat, wlat, pln, plntop)
 This subprogram performs an initialization for subprogram sptranf().
 

Detailed Description

Sptranf spectral initialization.

@@ -107,8 +113,8 @@

Definition in file sptranf0.f.

Function/Subroutine Documentation

- -

◆ sptranf0()

+ +

◆ sptranf0()

@@ -117,115 +123,115 @@

subroutine sptranf0 (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRT, + idrt,   - IMAX, + imax,   - JMAX, + jmax,   - JB, + jb,   - JE, + je, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - EPS, + eps, real, dimension(maxwv+1)  - EPSTOP, + epstop, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - ENN1, + enn1, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - ELONN1, + elonn1, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - EON, + eon, real, dimension(maxwv+1)  - EONTOP, + eontop, real(8), dimension(50000+4*imax)  - AFFT, + afft, real, dimension(jb:je)  - CLAT, + clat, real, dimension(jb:je)  - SLAT, + slat, real, dimension(jb:je)  - WLAT, + wlat, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2,jb:je)  - PLN, + pln, real, dimension(maxwv+1,jb:je)  - PLNTOP  + plntop  @@ -235,8 +241,8 @@

-

This subprogram performs an initialization for subprogram sptranf().

-

Use this subprogram outside the sptranf() family context at your own risk.

+

This subprogram performs an initialization for subprogram sptranf().

+

Use this subprogram outside the sptranf() family context at your own risk.

Parameters
@@ -283,7 +289,7 @@

diff --git a/sptranf0_8f.js b/sptranf0_8f.js index 68775895..93ff5add 100644 --- a/sptranf0_8f.js +++ b/sptranf0_8f.js @@ -1,4 +1,4 @@ var sptranf0_8f = [ - [ "sptranf0", "sptranf0_8f.html#aaf9f9002ccd7074dc04dbc40a5aad9f0", null ] + [ "sptranf0", "sptranf0_8f.html#a15de727a54551bd930432f71cd8f893f", null ] ]; \ No newline at end of file diff --git a/sptranf0_8f_source.html b/sptranf0_8f_source.html index c145b7d3..016ad9c7 100644 --- a/sptranf0_8f_source.html +++ b/sptranf0_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranf0.f Source File @@ -23,10 +23,9 @@

IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,94 +81,102 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptranf0.f
+
sptranf0.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Sptranf spectral initialization.
-
3 C> @author IREDELL @date 96-02-29
-
4 
-
5 C> This subprogram performs an initialization for
-
6 C> subprogram sptranf(). Use this subprogram outside
-
7 C> the sptranf() family context at your own risk.
-
8 C>
-
9 C> @param IROMB spectral domain shape
-
10 c> (0 for triangular, 1 for rhomboidal)
-
11 C> @param MAXWV spectral truncation
-
12 C> @param IDRT grid identifier
-
13 C> - IDRT=4 for Gaussian grid,
-
14 C> - IDRT=0 for equally-spaced grid including poles,
-
15 C> - IDRT=256 for equally-spaced grid excluding poles
-
16 C> @param IMAX even number of longitudes
-
17 C> @param JMAX number of latitudes
-
18 C> @param JB latitude index (from pole) to begin transform
-
19 C> @param JE latitude index (from pole) to end transform
-
20 C> @param EPS
-
21 C> @param EPSTOP
-
22 C> @param ENN1
-
23 C> @param ELONN1
-
24 C> @param EON
-
25 C> @param EONTOP
-
26 C> @param AFFT auxiliary array if IDIR=0
-
27 C> @param CLAT cosines of latitude
-
28 C> @param SLAT sines of latitude
-
29 C> @param WLAT Gaussian weights
-
30 C> @param PLN Legendre polynomials
-
31 C> @param PLNTOP Legendre polynomial over top
-
32 C>
-
33 C> @author IREDELL @date 96-02-29
-
34  SUBROUTINE sptranf0(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
-
35  & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
-
36  & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP)
-
37 
-
38  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
39  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
40  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
41  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
42  REAL(8) AFFT(50000+4*IMAX)
-
43  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
-
44  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
-
45  REAL PLNTOP(MAXWV+1,JB:JE)
-
46  REAL SLATX(JMAX),WLATX(JMAX)
-
47  REAL W(IMAX+2,2),G(IMAX,2)
-
48 
-
49  w = 0.0
-
50  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
-
51  CALL spffte(imax,(imax+2)/2,imax,2,w,g,0,afft)
-
52  CALL splat(idrt,jmax,slatx,wlatx)
-
53  jhe=(jmax+1)/2
-
54  IF(jhe.GT.jmax/2) wlatx(jhe)=wlatx(jhe)/2
-
55  DO j=jb,je
-
56  clat(j)=sqrt(1.-slatx(j)**2)
-
57  slat(j)=slatx(j)
-
58  wlat(j)=wlatx(j)
-
59  ENDDO
-
60 C$OMP PARALLEL DO
-
61  DO j=jb,je
-
62  CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
-
63  & pln(1,j),plntop(1,j))
-
64  ENDDO
-
65 
-
66  END
-
subroutine spffte(IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition: spffte.f:49
-
subroutine splat(IDRT, JMAX, SLAT, WLAT)
Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of ...
Definition: splat.F:46
-
subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition: splegend.f:45
-
subroutine sptranf0(IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
This subprogram performs an initialization for subprogram sptranf().
Definition: sptranf0.f:37
-
subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
This subprogram gets wave-space constants.
Definition: spwget.f:18
+Go to the documentation of this file.
1C> @file
+
2C> @brief Sptranf spectral initialization.
+
3C> @author IREDELL @date 96-02-29
+
4
+
5C> This subprogram performs an initialization for
+
6C> subprogram sptranf(). Use this subprogram outside
+
7C> the sptranf() family context at your own risk.
+
8C>
+
9C> @param IROMB spectral domain shape
+
10c> (0 for triangular, 1 for rhomboidal)
+
11C> @param MAXWV spectral truncation
+
12C> @param IDRT grid identifier
+
13C> - IDRT=4 for Gaussian grid,
+
14C> - IDRT=0 for equally-spaced grid including poles,
+
15C> - IDRT=256 for equally-spaced grid excluding poles
+
16C> @param IMAX even number of longitudes
+
17C> @param JMAX number of latitudes
+
18C> @param JB latitude index (from pole) to begin transform
+
19C> @param JE latitude index (from pole) to end transform
+
20C> @param EPS
+
21C> @param EPSTOP
+
22C> @param ENN1
+
23C> @param ELONN1
+
24C> @param EON
+
25C> @param EONTOP
+
26C> @param AFFT auxiliary array if IDIR=0
+
27C> @param CLAT cosines of latitude
+
28C> @param SLAT sines of latitude
+
29C> @param WLAT Gaussian weights
+
30C> @param PLN Legendre polynomials
+
31C> @param PLNTOP Legendre polynomial over top
+
32C>
+
33C> @author IREDELL @date 96-02-29
+
+
34 SUBROUTINE sptranf0(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
+
35 & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
+
36 & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP)
+
37
+
38 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
39 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
40 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
41 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
42 REAL(8) AFFT(50000+4*IMAX)
+
43 REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
+
44 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
+
45 REAL PLNTOP(MAXWV+1,JB:JE)
+
46 REAL SLATX(JMAX),WLATX(JMAX)
+
47 REAL W(IMAX+2,2),G(IMAX,2)
+
48
+
49 w = 0.0
+
50 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
+
51 CALL spffte(imax,(imax+2)/2,imax,2,w,g,0,afft)
+
52 CALL splat(idrt,jmax,slatx,wlatx)
+
53 jhe=(jmax+1)/2
+
54 IF(jhe.GT.jmax/2) wlatx(jhe)=wlatx(jhe)/2
+
55 DO j=jb,je
+
56 clat(j)=sqrt(1.-slatx(j)**2)
+
57 slat(j)=slatx(j)
+
58 wlat(j)=wlatx(j)
+
59 ENDDO
+
60C$OMP PARALLEL DO
+
61 DO j=jb,je
+
62 CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
+
63 & pln(1,j),plntop(1,j))
+
64 ENDDO
+
65
+
+
66 END
+
subroutine spffte(imax, incw, incg, kmax, w, g, idir, afft)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition spffte.f:49
+
subroutine splat(idrt, jmax, slat, wlat)
Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of ...
Definition splat.F:46
+
subroutine splegend(i, m, slat, clat, eps, epstop, pln, plntop)
Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
Definition splegend.f:45
+
subroutine sptranf0(iromb, maxwv, idrt, imax, jmax, jb, je, eps, epstop, enn1, elonn1, eon, eontop, afft, clat, slat, wlat, pln, plntop)
This subprogram performs an initialization for subprogram sptranf().
Definition sptranf0.f:37
+
subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
This subprogram gets wave-space constants.
Definition spwget.f:18
diff --git a/sptranf1_8f.html b/sptranf1_8f.html index ee94d7e0..a1a38d5b 100644 --- a/sptranf1_8f.html +++ b/sptranf1_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranf1.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptranf1.f File Reference
+
sptranf1.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine 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)
 This subprogram performs an single latitude transform for subprogram sptranf(). More...
 
subroutine 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)
 This subprogram performs an single latitude transform for subprogram sptranf().
 

Detailed Description

Sptranf spectral transform.

@@ -107,8 +113,8 @@

Definition in file sptranf1.f.

Function/Subroutine Documentation

- -

◆ sptranf1()

+ +

◆ sptranf1()

@@ -117,145 +123,145 @@

subroutine sptranf1 (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRT, + idrt,   - IMAX, + imax,   - JMAX, + jmax,   - JB, + jb,   - JE, + je, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - EPS, + eps, real, dimension(maxwv+1)  - EPSTOP, + epstop, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - ENN1, + enn1, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - ELONN1, + elonn1, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2)  - EON, + eon, real, dimension(maxwv+1)  - EONTOP, + eontop, real(8), dimension(50000+4*imax)  - AFFT, + afft, real, dimension(jb:je)  - CLAT, + clat, real, dimension(jb:je)  - SLAT, + slat, real, dimension(jb:je)  - WLAT, + wlat, real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2,jb:je)  - PLN, + pln, real, dimension(maxwv+1,jb:je)  - PLNTOP, + plntop,   - MP, + mp, real, dimension((maxwv+1)*((iromb+1)*maxwv+2))  - W, + w, real, dimension(2*(maxwv+1))  - WTOP, + wtop, real, dimension(imax,2,jb:je)  - G, + g,   - IDIR  + idir  @@ -265,8 +271,8 @@

-

This subprogram performs an single latitude transform for subprogram sptranf().

-

Use this subprogram outside the sptranf() family context at your own risk.

+

This subprogram performs an single latitude transform for subprogram sptranf().

+

Use this subprogram outside the sptranf() family context at your own risk.

Parameters
@@ -318,7 +324,7 @@

diff --git a/sptranf1_8f.js b/sptranf1_8f.js index 2123eae8..7d2f196f 100644 --- a/sptranf1_8f.js +++ b/sptranf1_8f.js @@ -1,4 +1,4 @@ var sptranf1_8f = [ - [ "sptranf1", "sptranf1_8f.html#ad7cec2fd6729ca84b1fac3436f9730e6", null ] + [ "sptranf1", "sptranf1_8f.html#ab3dd3812c9371e56eb568aac6f80b176", null ] ]; \ No newline at end of file diff --git a/sptranf1_8f_source.html b/sptranf1_8f_source.html index d836688b..c17455c6 100644 --- a/sptranf1_8f_source.html +++ b/sptranf1_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranf1.f Source File @@ -23,10 +23,9 @@

IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0

- + +/* @license-end */ + +
@@ -76,103 +81,111 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptranf1.f
+
sptranf1.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Sptranf spectral transform.
-
3 C> @author Iredell @date 96-02-29
-
4 
-
5 C> This subprogram performs an single latitude transform for
-
6 C> subprogram sptranf(). Use this subprogram outside
-
7 C> the sptranf() family context at your own risk.
-
8 C>
-
9 C> @param IROMB spectral domain shape
-
10 C> (0 for triangular, 1 for rhomboidal)
-
11 C> @param MAXWV spectral truncation
-
12 C> @param IDRT grid identifier
-
13 C> - IDRT=4 for Gaussian grid,
-
14 C> - IDRT=0 for equally-spaced grid including poles,
-
15 C> - IDRT=256 for equally-spaced grid excluding poles
-
16 C> @param IMAX even number of longitudes
-
17 C> @param JMAX number of latitudes
-
18 C> @param JB latitude index (from pole) to begin transform
-
19 C> @param JE latitude index (from pole) to end transform
-
20 C> @param EPS
-
21 C> @param EPSTOP
-
22 C> @param ENN1
-
23 C> @param ELONN1
-
24 C> @param EON
-
25 C> @param EONTOP
-
26 C> @param CLAT cosines of latitude
-
27 C> @param SLAT sines of latitude
-
28 C> @param WLAT Gaussian weights
-
29 C> @param AFFT auxiliary array if IDIR=0
-
30 C> @param PLN Legendre polynomials
-
31 C> @param PLNTOP Legendre polynomial over top
-
32 C> @param MP identifier (0 for scalar, 1 for vector)
-
33 C> @param[out] W wave field if IDIR>0
-
34 C> @param[out] WTOP wave field over top if IDIR>0
-
35 C> @param[out] G grid field if IDIR<0
-
36 C> @param IDIR transform flag
-
37 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
-
38 C>
-
39 C> @author Iredell @date 96-02-29
-
40  SUBROUTINE sptranf1(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
-
41  & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
-
42  & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP,MP,
-
43  & W,WTOP,G,IDIR)
-
44 
-
45  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
46  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
47  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
48  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
49  REAL(8) AFFT(50000+4*IMAX)
-
50  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
-
51  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
-
52  REAL PLNTOP(MAXWV+1,JB:JE)
-
53  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2))
-
54  REAL WTOP(2*(MAXWV+1))
-
55  REAL G(IMAX,2,JB:JE)
-
56  REAL F(IMAX+2,2)
-
57 
-
58  kw=(maxwv+1)*((iromb+1)*maxwv+2)
-
59  kwtop=2*(maxwv+1)
-
60  IF(idir.GT.0) THEN
-
61  DO j=jb,je
-
62  CALL spsynth(iromb,maxwv,imax,imax+2,kw,kwtop,1,
-
63  & clat(j),pln(1,j),plntop(1,j),(/mp/),
-
64  & w,wtop,f)
-
65  CALL spffte(imax,(imax+2)/2,imax,2,f,g(1,1,j),+1,afft)
-
66  ENDDO
-
67  ELSE
-
68  DO j=jb,je
-
69  CALL spffte(imax,(imax+2)/2,imax,2,f,g(1,1,j),-1,afft)
-
70  CALL spanaly(iromb,maxwv,imax,imax+2,kw,kwtop,1,
-
71  & wlat(j),clat(j),pln(1,j),plntop(1,j),(/mp/),
-
72  & f,w,wtop)
-
73  ENDDO
-
74  ENDIF
-
75 
-
76  END
-
subroutine spanaly(I, M, IM, IX, NC, NCTOP, KM, WGT, CLAT, PLN, PLNTOP, MP, F, SPC, SPCTOP)
Analyzes spectral coefficients from Fourier coefficients for a latitude pair (Northern and Southern h...
Definition: spanaly.f:37
-
subroutine spffte(IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition: spffte.f:49
-
subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition: spsynth.f:39
-
subroutine 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)
This subprogram performs an single latitude transform for subprogram sptranf().
Definition: sptranf1.f:44
+Go to the documentation of this file.
1C> @file
+
2C> @brief Sptranf spectral transform.
+
3C> @author Iredell @date 96-02-29
+
4
+
5C> This subprogram performs an single latitude transform for
+
6C> subprogram sptranf(). Use this subprogram outside
+
7C> the sptranf() family context at your own risk.
+
8C>
+
9C> @param IROMB spectral domain shape
+
10C> (0 for triangular, 1 for rhomboidal)
+
11C> @param MAXWV spectral truncation
+
12C> @param IDRT grid identifier
+
13C> - IDRT=4 for Gaussian grid,
+
14C> - IDRT=0 for equally-spaced grid including poles,
+
15C> - IDRT=256 for equally-spaced grid excluding poles
+
16C> @param IMAX even number of longitudes
+
17C> @param JMAX number of latitudes
+
18C> @param JB latitude index (from pole) to begin transform
+
19C> @param JE latitude index (from pole) to end transform
+
20C> @param EPS
+
21C> @param EPSTOP
+
22C> @param ENN1
+
23C> @param ELONN1
+
24C> @param EON
+
25C> @param EONTOP
+
26C> @param CLAT cosines of latitude
+
27C> @param SLAT sines of latitude
+
28C> @param WLAT Gaussian weights
+
29C> @param AFFT auxiliary array if IDIR=0
+
30C> @param PLN Legendre polynomials
+
31C> @param PLNTOP Legendre polynomial over top
+
32C> @param MP identifier (0 for scalar, 1 for vector)
+
33C> @param[out] W wave field if IDIR>0
+
34C> @param[out] WTOP wave field over top if IDIR>0
+
35C> @param[out] G grid field if IDIR<0
+
36C> @param IDIR transform flag
+
37C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
+
38C>
+
39C> @author Iredell @date 96-02-29
+
+
40 SUBROUTINE sptranf1(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
+
41 & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
+
42 & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP,MP,
+
43 & W,WTOP,G,IDIR)
+
44
+
45 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
46 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
47 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
48 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
49 REAL(8) AFFT(50000+4*IMAX)
+
50 REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
+
51 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
+
52 REAL PLNTOP(MAXWV+1,JB:JE)
+
53 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2))
+
54 REAL WTOP(2*(MAXWV+1))
+
55 REAL G(IMAX,2,JB:JE)
+
56 REAL F(IMAX+2,2)
+
57
+
58 kw=(maxwv+1)*((iromb+1)*maxwv+2)
+
59 kwtop=2*(maxwv+1)
+
60 IF(idir.GT.0) THEN
+
61 DO j=jb,je
+
62 CALL spsynth(iromb,maxwv,imax,imax+2,kw,kwtop,1,
+
63 & clat(j),pln(1,j),plntop(1,j),(/mp/),
+
64 & w,wtop,f)
+
65 CALL spffte(imax,(imax+2)/2,imax,2,f,g(1,1,j),+1,afft)
+
66 ENDDO
+
67 ELSE
+
68 DO j=jb,je
+
69 CALL spffte(imax,(imax+2)/2,imax,2,f,g(1,1,j),-1,afft)
+
70 CALL spanaly(iromb,maxwv,imax,imax+2,kw,kwtop,1,
+
71 & wlat(j),clat(j),pln(1,j),plntop(1,j),(/mp/),
+
72 & f,w,wtop)
+
73 ENDDO
+
74 ENDIF
+
75
+
+
76 END
+
subroutine spanaly(i, m, im, ix, nc, nctop, km, wgt, clat, pln, plntop, mp, f, spc, spctop)
Analyzes spectral coefficients from Fourier coefficients for a latitude pair (Northern and Southern h...
Definition spanaly.f:37
+
subroutine spffte(imax, incw, incg, kmax, w, g, idir, afft)
This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
Definition spffte.f:49
+
subroutine spsynth(i, m, im, ix, nc, nctop, km, clat, pln, plntop, mp, spc, spctop, f)
Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
Definition spsynth.f:39
+
subroutine 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)
This subprogram performs an single latitude transform for subprogram sptranf().
Definition sptranf1.f:44
diff --git a/sptranf_8f.html b/sptranf_8f.html index a33379e1..691d020b 100644 --- a/sptranf_8f.html +++ b/sptranf_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranf.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptranf.f File Reference
+
sptranf.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptranf (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
 This subprogram performs a spherical transform between spectral coefficients of scalar quantities and fields on a global cylindrical grid. More...
 
subroutine sptranf (iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, wave, gridn, grids, idir)
 This subprogram performs a spherical transform between spectral coefficients of scalar quantities and fields on a global cylindrical grid.
 

Detailed Description

Perform a scalar spherical transform.

@@ -119,8 +125,8 @@

Definition in file sptranf.f.

Function/Subroutine Documentation

- -

◆ sptranf()

+ +

◆ sptranf()

diff --git a/sptranf_8f.js b/sptranf_8f.js index 5f0a52f8..749448be 100644 --- a/sptranf_8f.js +++ b/sptranf_8f.js @@ -1,4 +1,4 @@ var sptranf_8f = [ - [ "sptranf", "sptranf_8f.html#acf086b5141203e48bdb7250441a16c8c", null ] + [ "sptranf", "sptranf_8f.html#add7fc54aea6dd040b71e29b199895c67", null ] ]; \ No newline at end of file diff --git a/sptranf_8f_source.html b/sptranf_8f_source.html index 579c9765..f3627c13 100644 --- a/sptranf_8f_source.html +++ b/sptranf_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranf.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,187 +81,195 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptranf.f
+
sptranf.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a scalar spherical transform
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | Iredell | Initial.
-
8 C> 1998-12-15 | Iredell | Generic fft used, openmp directives inserted
-
9 C> 2013-01-16 | Iredell, Mirvis | Fixing afft negative sharing effect
-
10 C>
-
11 C> @author Iredell @date 96-02-29
-
12 
-
13 C> This subprogram performs a spherical transform between spectral
-
14 C> coefficients of scalar quantities and fields on a global
-
15 C> cylindrical grid.
-
16 C>
-
17 C> The wave-space can be either triangular or
-
18 C> rhomboidal. The grid-space can be either an equally-spaced grid
-
19 C> (with or without pole points) or a Gaussian grid.
-
20 C>
-
21 C> The wave and grid fields may have general indexing,
-
22 C> but each wave field is in sequential 'ibm order',
-
23 C> i.e. with zonal wavenumber as the slower index.
-
24 C>
-
25 C> Transforms are done in latitude pairs for efficiency;
-
26 C> thus grid arrays for each hemisphere must be passed.
-
27 C>
-
28 C> If so requested, just a subset of the latitude pairs
-
29 C> may be transformed in each invocation of the subprogram.
-
30 C> The transforms are all multiprocessed over latitude except
-
31 C> the transform from fourier to spectral is multiprocessed
-
32 C> over zonal wavenumber to ensure reproducibility.
-
33 C>
-
34 C> Transform several fields at a time to improve vectorization.
-
35 C> Subprogram can be called from a multiprocessing environment.
-
36 C>
-
37 C> Minimum grid dimensions for unaliased transforms to spectral:
-
38 C> DIMENSION |LINEAR |QUADRATIC
-
39 C> ----------------------- |--------- |-------------
-
40 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
-
41 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
-
42 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
-
43 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
-
44 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
-
45 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
-
46 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
-
47 C>
-
48 C> @param IROMB spectral domain shape
-
49 c> (0 for triangular, 1 for rhomboidal)
-
50 C> @param MAXWV spectral truncation
-
51 C> @param IDRT grid identifier
-
52 C> - IDRT=4 for Gaussian grid,
-
53 C> - IDRT=0 for equally-spaced grid including poles
-
54 C> - IDRT=256 for equally-spaced grid excluding poles
-
55 C> @param IMAX even number of longitudes.
-
56 C> @param JMAX number of latitudes.
-
57 C> @param KMAX number of fields to transform.
-
58 C> @param IP longitude index for the prime meridian
-
59 C> @param IS skip number between longitudes
-
60 C> @param JN skip number between n.h. latitudes from north
-
61 C> @param JS skip number between s.h. latitudes from south
-
62 C> @param KW skip number between wave fields
-
63 C> @param KG skip number between grid fields
-
64 C> @param JB latitude index (from pole) to begin transform
-
65 C> @param JE latitude index (from pole) to end transform
-
66 C> @param JC number of cpus over which to multiprocess
-
67 C> @param[out] WAVE wave fields if IDIR>0
-
68 C> @param[out] GRIDN n.h. grid fields (starting at JB) if IDIR<0
-
69 C> @param[out] GRIDS s.h. grid fields (starting at JB) if IDIR<0
-
70 C> @param IDIR transform flag
-
71 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
-
72 C>
-
73 C> @author Iredell @date 96-02-29
-
74  SUBROUTINE sptranf(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
-
75  & IP,IS,JN,JS,KW,KG,JB,JE,JC,
-
76  & WAVE,GRIDN,GRIDS,IDIR)
-
77 
-
78  REAL WAVE(*),GRIDN(*),GRIDS(*)
-
79  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
80  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
81  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
82  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
83  REAL(8) AFFT(50000+4*IMAX), AFFT_TMP(50000+4*IMAX)
-
84  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
-
85  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
-
86  REAL PLNTOP(MAXWV+1,JB:JE)
-
87  REAL WTOP(2*(MAXWV+1))
-
88  REAL G(IMAX,2)
-
89 ! write(0,*) 'sptranf top'
-
90 
-
91 C SET PARAMETERS
-
92  mp=0
-
93  CALL sptranf0(iromb,maxwv,idrt,imax,jmax,jb,je,
-
94  & eps,epstop,enn1,elonn1,eon,eontop,
-
95  & afft,clat,slat,wlat,pln,plntop)
-
96 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
97 C TRANSFORM WAVE TO GRID
-
98  IF(idir.GT.0) THEN
-
99 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,WTOP,G,IJKN,IJKS)
-
100  DO k=1,kmax
-
101  afft_tmp=afft
-
102  kws=(k-1)*kw
-
103  wtop=0
-
104  DO j=jb,je
-
105  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
-
106  & eps,epstop,enn1,elonn1,eon,eontop,
-
107  & afft_tmp,clat(j),slat(j),wlat(j),
-
108  & pln(1,j),plntop(1,j),mp,
-
109  & wave(kws+1),wtop,g,idir)
-
110  IF(ip.EQ.1.AND.is.EQ.1) THEN
-
111  DO i=1,imax
-
112  ijkn=i+(j-jb)*jn+(k-1)*kg
-
113  ijks=i+(j-jb)*js+(k-1)*kg
-
114  gridn(ijkn)=g(i,1)
-
115  grids(ijks)=g(i,2)
-
116  ENDDO
-
117  ELSE
-
118  DO i=1,imax
-
119  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
-
120  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
-
121  gridn(ijkn)=g(i,1)
-
122  grids(ijks)=g(i,2)
-
123  ENDDO
-
124  ENDIF
-
125  ENDDO
-
126  ENDDO
-
127 
-
128 C TRANSFORM GRID TO WAVE
-
129  ELSE
-
130 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,WTOP,G,IJKN,IJKS)
-
131  DO k=1,kmax
-
132  afft_tmp=afft
-
133  kws=(k-1)*kw
-
134  wtop=0
-
135  DO j=jb,je
-
136  IF(wlat(j).GT.0.) THEN
-
137  IF(ip.EQ.1.AND.is.EQ.1) THEN
-
138  DO i=1,imax
-
139  ijkn=i+(j-jb)*jn+(k-1)*kg
-
140  ijks=i+(j-jb)*js+(k-1)*kg
-
141  g(i,1)=gridn(ijkn)
-
142  g(i,2)=grids(ijks)
-
143  ENDDO
-
144  ELSE
-
145  DO i=1,imax
-
146  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
-
147  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
-
148  g(i,1)=gridn(ijkn)
-
149  g(i,2)=grids(ijks)
-
150  ENDDO
-
151  ENDIF
-
152  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
-
153  & eps,epstop,enn1,elonn1,eon,eontop,
-
154  & afft_tmp,clat(j),slat(j),wlat(j),
-
155  & pln(1,j),plntop(1,j),mp,
-
156  & wave(kws+1),wtop,g,idir)
-
157  ENDIF
-
158  ENDDO
-
159  ENDDO
-
160  ENDIF
-
161  END
-
subroutine sptranf0(IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
This subprogram performs an initialization for subprogram sptranf().
Definition: sptranf0.f:37
-
subroutine 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)
This subprogram performs an single latitude transform for subprogram sptranf().
Definition: sptranf1.f:44
-
subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptranf.f:77
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a scalar spherical transform
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | Iredell | Initial.
+
8C> 1998-12-15 | Iredell | Generic fft used, openmp directives inserted
+
9C> 2013-01-16 | Iredell, Mirvis | Fixing afft negative sharing effect
+
10C>
+
11C> @author Iredell @date 96-02-29
+
12
+
13C> This subprogram performs a spherical transform between spectral
+
14C> coefficients of scalar quantities and fields on a global
+
15C> cylindrical grid.
+
16C>
+
17C> The wave-space can be either triangular or
+
18C> rhomboidal. The grid-space can be either an equally-spaced grid
+
19C> (with or without pole points) or a Gaussian grid.
+
20C>
+
21C> The wave and grid fields may have general indexing,
+
22C> but each wave field is in sequential 'ibm order',
+
23C> i.e. with zonal wavenumber as the slower index.
+
24C>
+
25C> Transforms are done in latitude pairs for efficiency;
+
26C> thus grid arrays for each hemisphere must be passed.
+
27C>
+
28C> If so requested, just a subset of the latitude pairs
+
29C> may be transformed in each invocation of the subprogram.
+
30C> The transforms are all multiprocessed over latitude except
+
31C> the transform from fourier to spectral is multiprocessed
+
32C> over zonal wavenumber to ensure reproducibility.
+
33C>
+
34C> Transform several fields at a time to improve vectorization.
+
35C> Subprogram can be called from a multiprocessing environment.
+
36C>
+
37C> Minimum grid dimensions for unaliased transforms to spectral:
+
38C> DIMENSION |LINEAR |QUADRATIC
+
39C> ----------------------- |--------- |-------------
+
40C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
+
41C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
+
42C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
+
43C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
+
44C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
+
45C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
+
46C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
+
47C>
+
48C> @param IROMB spectral domain shape
+
49c> (0 for triangular, 1 for rhomboidal)
+
50C> @param MAXWV spectral truncation
+
51C> @param IDRT grid identifier
+
52C> - IDRT=4 for Gaussian grid,
+
53C> - IDRT=0 for equally-spaced grid including poles
+
54C> - IDRT=256 for equally-spaced grid excluding poles
+
55C> @param IMAX even number of longitudes.
+
56C> @param JMAX number of latitudes.
+
57C> @param KMAX number of fields to transform.
+
58C> @param IP longitude index for the prime meridian
+
59C> @param IS skip number between longitudes
+
60C> @param JN skip number between n.h. latitudes from north
+
61C> @param JS skip number between s.h. latitudes from south
+
62C> @param KW skip number between wave fields
+
63C> @param KG skip number between grid fields
+
64C> @param JB latitude index (from pole) to begin transform
+
65C> @param JE latitude index (from pole) to end transform
+
66C> @param JC number of cpus over which to multiprocess
+
67C> @param[out] WAVE wave fields if IDIR>0
+
68C> @param[out] GRIDN n.h. grid fields (starting at JB) if IDIR<0
+
69C> @param[out] GRIDS s.h. grid fields (starting at JB) if IDIR<0
+
70C> @param IDIR transform flag
+
71C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
+
72C>
+
73C> @author Iredell @date 96-02-29
+
+
74 SUBROUTINE sptranf(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
+
75 & IP,IS,JN,JS,KW,KG,JB,JE,JC,
+
76 & WAVE,GRIDN,GRIDS,IDIR)
+
77
+
78 REAL WAVE(*),GRIDN(*),GRIDS(*)
+
79 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
80 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
81 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
82 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
83 REAL(8) AFFT(50000+4*IMAX), AFFT_TMP(50000+4*IMAX)
+
84 REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
+
85 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
+
86 REAL PLNTOP(MAXWV+1,JB:JE)
+
87 REAL WTOP(2*(MAXWV+1))
+
88 REAL G(IMAX,2)
+
89! write(0,*) 'sptranf top'
+
90
+
91C SET PARAMETERS
+
92 mp=0
+
93 CALL sptranf0(iromb,maxwv,idrt,imax,jmax,jb,je,
+
94 & eps,epstop,enn1,elonn1,eon,eontop,
+
95 & afft,clat,slat,wlat,pln,plntop)
+
96C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
97C TRANSFORM WAVE TO GRID
+
98 IF(idir.GT.0) THEN
+
99C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,WTOP,G,IJKN,IJKS)
+
100 DO k=1,kmax
+
101 afft_tmp=afft
+
102 kws=(k-1)*kw
+
103 wtop=0
+
104 DO j=jb,je
+
105 CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
+
106 & eps,epstop,enn1,elonn1,eon,eontop,
+
107 & afft_tmp,clat(j),slat(j),wlat(j),
+
108 & pln(1,j),plntop(1,j),mp,
+
109 & wave(kws+1),wtop,g,idir)
+
110 IF(ip.EQ.1.AND.is.EQ.1) THEN
+
111 DO i=1,imax
+
112 ijkn=i+(j-jb)*jn+(k-1)*kg
+
113 ijks=i+(j-jb)*js+(k-1)*kg
+
114 gridn(ijkn)=g(i,1)
+
115 grids(ijks)=g(i,2)
+
116 ENDDO
+
117 ELSE
+
118 DO i=1,imax
+
119 ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
+
120 ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
+
121 gridn(ijkn)=g(i,1)
+
122 grids(ijks)=g(i,2)
+
123 ENDDO
+
124 ENDIF
+
125 ENDDO
+
126 ENDDO
+
127
+
128C TRANSFORM GRID TO WAVE
+
129 ELSE
+
130C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,WTOP,G,IJKN,IJKS)
+
131 DO k=1,kmax
+
132 afft_tmp=afft
+
133 kws=(k-1)*kw
+
134 wtop=0
+
135 DO j=jb,je
+
136 IF(wlat(j).GT.0.) THEN
+
137 IF(ip.EQ.1.AND.is.EQ.1) THEN
+
138 DO i=1,imax
+
139 ijkn=i+(j-jb)*jn+(k-1)*kg
+
140 ijks=i+(j-jb)*js+(k-1)*kg
+
141 g(i,1)=gridn(ijkn)
+
142 g(i,2)=grids(ijks)
+
143 ENDDO
+
144 ELSE
+
145 DO i=1,imax
+
146 ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
+
147 ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
+
148 g(i,1)=gridn(ijkn)
+
149 g(i,2)=grids(ijks)
+
150 ENDDO
+
151 ENDIF
+
152 CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
+
153 & eps,epstop,enn1,elonn1,eon,eontop,
+
154 & afft_tmp,clat(j),slat(j),wlat(j),
+
155 & pln(1,j),plntop(1,j),mp,
+
156 & wave(kws+1),wtop,g,idir)
+
157 ENDIF
+
158 ENDDO
+
159 ENDDO
+
160 ENDIF
+
+
161 END
+
subroutine sptranf0(iromb, maxwv, idrt, imax, jmax, jb, je, eps, epstop, enn1, elonn1, eon, eontop, afft, clat, slat, wlat, pln, plntop)
This subprogram performs an initialization for subprogram sptranf().
Definition sptranf0.f:37
+
subroutine 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)
This subprogram performs an single latitude transform for subprogram sptranf().
Definition sptranf1.f:44
+
subroutine sptranf(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptranf.f:77
diff --git a/sptranfv_8f.html b/sptranfv_8f.html index 46469efd..d9ac39f3 100644 --- a/sptranfv_8f.html +++ b/sptranfv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranfv.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptranfv.f File Reference
+
sptranfv.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptranfv (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
 This subprogram performs a spherical transform between spectral coefficients of divergences and curls and vector fields on a global cylindrical grid. More...
 
subroutine sptranfv (iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
 This subprogram performs a spherical transform between spectral coefficients of divergences and curls and vector fields on a global cylindrical grid.
 

Detailed Description

Perform a vector spherical transform.

@@ -119,8 +125,8 @@

Definition in file sptranfv.f.

Function/Subroutine Documentation

- -

◆ sptranfv()

+ +

◆ sptranfv()

diff --git a/sptranfv_8f.js b/sptranfv_8f.js index 7311d700..4213df7a 100644 --- a/sptranfv_8f.js +++ b/sptranfv_8f.js @@ -1,4 +1,4 @@ var sptranfv_8f = [ - [ "sptranfv", "sptranfv_8f.html#a1a7aabbd358d4fe984dac6813c98b106", null ] + [ "sptranfv", "sptranfv_8f.html#aa84cd9dc4da90d4245a32e5658bbf513", null ] ]; \ No newline at end of file diff --git a/sptranfv_8f_source.html b/sptranfv_8f_source.html index 91e20040..27e14adc 100644 --- a/sptranfv_8f_source.html +++ b/sptranfv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranfv.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,224 +81,232 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptranfv.f
+
sptranfv.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a vector spherical transform
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | Iredell | Initial.
-
8 C> 1998-12-15 | Iredell | Generic fft used, openmp directives inserted
-
9 C> 2013-01-16 | Iredell & MIRVIS | Fixing afft negative sharing effect during omp loops
-
10 C>
-
11 C> @author Iredell @date 96-02-29
-
12 
-
13 C> This subprogram performs a spherical transform
-
14 C> between spectral coefficients of divergences and curls
-
15 C> and vector fields on a global cylindrical grid.
-
16 C>
-
17 C> The wave-space can be either triangular or rhomboidal.
-
18 C>
-
19 C> The grid-space can be either an equally-spaced grid
-
20 C> (with or without pole points) or a Gaussian grid.
-
21 C>
-
22 C> The wave and grid fields may have general indexing,
-
23 C> but each wave field is in sequential 'ibm order',
-
24 C> i.e. with zonal wavenumber as the slower index.
-
25 C>
-
26 C> Transforms are done in latitude pairs for efficiency;
-
27 C> thus grid arrays for each hemisphere must be passed.
-
28 C> if so requested, just a subset of the latitude pairs
-
29 C> may be transformed in each invocation of the subprogram.
-
30 C>
-
31 C> The transforms are all multiprocessed over latitude except
-
32 C> the transform from fourier to spectral is multiprocessed
-
33 C> over zonal wavenumber to ensure reproducibility.
-
34 C>
-
35 C> Transform several fields at a time to improve vectorization.
-
36 C> subprogram can be called from a multiprocessing environment.
-
37 C>
-
38 C> Minimum grid dimensions for unaliased transforms to spectral:
-
39 C> DIMENSION |LINEAR |QUADRATIC
-
40 C> ----------------------- |--------- |-------------
-
41 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
42 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
43 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
44 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
45 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
46 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
47 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
48 C>
-
49 C> @param IROMB spectral domain shape
-
50 C> (0 for triangular, 1 for rhomboidal)
-
51 C> @param MAXWV spectral truncation
-
52 C> @param IDRT grid identifier
-
53 C> - IDRT=4 for Gaussian grid
-
54 C> - IDRT=0 for equally-spaced grid including poles
-
55 C> - IDRT=256 for equally-spaced grid excluding poles
-
56 C> @param IMAX even number of longitudes.
-
57 C> @param JMAX number of latitudes.
-
58 C> @param KMAX number of fields to transform.
-
59 C> @param IP longitude index for the prime meridian
-
60 C> @param IS skip number between longitudes
-
61 C> @param JN skip number between n.h. latitudes from north
-
62 C> @param JS skip number between s.h. latitudes from south
-
63 C> @param KW skip number between wave fields
-
64 C> @param KG skip number between grid fields
-
65 C> @param JB latitude index (from pole) to begin transform
-
66 C> @param JE latitude index (from pole) to end transform
-
67 C> @param JC number of cpus over which to multiprocess
-
68 C> @param[out] WAVED wave divergence fields if IDIR>0
-
69 C> [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
-
70 C> @param[out] WAVEZ wave vorticity fields if IDIR>0
-
71 C> [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
-
72 C> @param[out] GRIDUN N.H. grid u-winds (starting at jb) if IDIR<0
-
73 C> @param[out] GRIDUS S.H. grid u-winds (starting at jb) if IDIR<0
-
74 C> @param[out] GRIDVN N.H. grid v-winds (starting at jb) if IDIR<0
-
75 C> @param[out] GRIDVS S.H. grid v-winds (starting at jb) if IDIR<0
-
76 C> @param IDIR transform flag
-
77 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
-
78 C>
-
79 C> @author Iredell @date 96-02-29
-
80  SUBROUTINE sptranfv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
-
81  & IP,IS,JN,JS,KW,KG,JB,JE,JC,
-
82  & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
-
83 
-
84  REAL WAVED(*),WAVEZ(*),GRIDUN(*),GRIDUS(*),GRIDVN(*),GRIDVS(*)
-
85  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
-
86  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
87  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
-
88  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
-
89  REAL(8) AFFT(50000+4*IMAX), AFFT_TMP(50000+4*IMAX)
-
90  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
-
91  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
-
92  REAL PLNTOP(MAXWV+1,JB:JE)
-
93  INTEGER MP
-
94  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2)
-
95  REAL WTOP(2*(MAXWV+1),2)
-
96  REAL G(IMAX,2,2)
-
97  REAL WINC((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2)
-
98 
-
99 C SET PARAMETERS
-
100  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
101  mp=1
-
102  CALL sptranf0(iromb,maxwv,idrt,imax,jmax,jb,je,
-
103  & eps,epstop,enn1,elonn1,eon,eontop,
-
104  & afft,clat,slat,wlat,pln,plntop)
-
105 
-
106 C TRANSFORM WAVE TO GRID
-
107  IF(idir.GT.0) THEN
-
108 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,W,WTOP,G,IJKN,IJKS)
-
109  DO k=1,kmax
-
110  afft_tmp=afft
-
111  kws=(k-1)*kw
-
112  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
-
113  & waved(kws+1),wavez(kws+1),
-
114  & w(1,1),w(1,2),wtop(1,1),wtop(1,2))
-
115  DO j=jb,je
-
116  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
-
117  & eps,epstop,enn1,elonn1,eon,eontop,
-
118  & afft_tmp,clat(j),slat(j),wlat(j),
-
119  & pln(1,j),plntop(1,j),mp,
-
120  & w(1,1),wtop(1,1),g(1,1,1),idir)
-
121  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
-
122  & eps,epstop,enn1,elonn1,eon,eontop,
-
123  & afft_tmp,clat(j),slat(j),wlat(j),
-
124  & pln(1,j),plntop(1,j),mp,
-
125  & w(1,2),wtop(1,2),g(1,1,2),idir)
-
126  IF(ip.EQ.1.AND.is.EQ.1) THEN
-
127  DO i=1,imax
-
128  ijkn=i+(j-jb)*jn+(k-1)*kg
-
129  ijks=i+(j-jb)*js+(k-1)*kg
-
130  gridun(ijkn)=g(i,1,1)
-
131  gridus(ijks)=g(i,2,1)
-
132  gridvn(ijkn)=g(i,1,2)
-
133  gridvs(ijks)=g(i,2,2)
-
134  ENDDO
-
135  ELSE
-
136  DO i=1,imax
-
137  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
-
138  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
-
139  gridun(ijkn)=g(i,1,1)
-
140  gridus(ijks)=g(i,2,1)
-
141  gridvn(ijkn)=g(i,1,2)
-
142  gridvs(ijks)=g(i,2,2)
-
143  ENDDO
-
144  ENDIF
-
145  ENDDO
-
146  ENDDO
-
147 
-
148 C TRANSFORM GRID TO WAVE
-
149  ELSE
-
150 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,W,WTOP,G,IJKN,IJKS,WINC)
-
151  DO k=1,kmax
-
152  afft_tmp=afft
-
153  kws=(k-1)*kw
-
154  w=0
-
155  wtop=0
-
156  DO j=jb,je
-
157  IF(wlat(j).GT.0.) THEN
-
158  IF(ip.EQ.1.AND.is.EQ.1) THEN
-
159  DO i=1,imax
-
160  ijkn=i+(j-jb)*jn+(k-1)*kg
-
161  ijks=i+(j-jb)*js+(k-1)*kg
-
162  g(i,1,1)=gridun(ijkn)/clat(j)**2
-
163  g(i,2,1)=gridus(ijks)/clat(j)**2
-
164  g(i,1,2)=gridvn(ijkn)/clat(j)**2
-
165  g(i,2,2)=gridvs(ijks)/clat(j)**2
-
166  ENDDO
-
167  ELSE
-
168  DO i=1,imax
-
169  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
-
170  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
-
171  g(i,1,1)=gridun(ijkn)/clat(j)**2
-
172  g(i,2,1)=gridus(ijks)/clat(j)**2
-
173  g(i,1,2)=gridvn(ijkn)/clat(j)**2
-
174  g(i,2,2)=gridvs(ijks)/clat(j)**2
-
175  ENDDO
-
176  ENDIF
-
177  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
-
178  & eps,epstop,enn1,elonn1,eon,eontop,
-
179  & afft_tmp,clat(j),slat(j),wlat(j),
-
180  & pln(1,j),plntop(1,j),mp,
-
181  & w(1,1),wtop(1,1),g(1,1,1),idir)
-
182  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
-
183  & eps,epstop,enn1,elonn1,eon,eontop,
-
184  & afft_tmp,clat(j),slat(j),wlat(j),
-
185  & pln(1,j),plntop(1,j),mp,
-
186  & w(1,2),wtop(1,2),g(1,1,2),idir)
-
187  ENDIF
-
188  ENDDO
-
189  CALL spuv2dz(iromb,maxwv,enn1,elonn1,eon,eontop,
-
190  & w(1,1),w(1,2),wtop(1,1),wtop(1,2),
-
191  & winc(1,1),winc(1,2))
-
192  waved(kws+1:kws+2*mx)=waved(kws+1:kws+2*mx)+winc(1:2*mx,1)
-
193  wavez(kws+1:kws+2*mx)=wavez(kws+1:kws+2*mx)+winc(1:2*mx,2)
-
194  ENDDO
-
195  ENDIF
-
196  END
-
subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
Computes the wind components from divergence and vorticity in spectral space.
Definition: spdz2uv.f:49
-
subroutine sptranf0(IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
This subprogram performs an initialization for subprogram sptranf().
Definition: sptranf0.f:37
-
subroutine 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)
This subprogram performs an single latitude transform for subprogram sptranf().
Definition: sptranf1.f:44
-
subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition: sptranfv.f:83
-
subroutine spuv2dz(I, M, ENN1, ELONN1, EON, EONTOP, U, V, UTOP, VTOP, D, Z)
Computes the divergence and vorticity from wind components in spectral space.
Definition: spuv2dz.f:49
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a vector spherical transform
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | Iredell | Initial.
+
8C> 1998-12-15 | Iredell | Generic fft used, openmp directives inserted
+
9C> 2013-01-16 | Iredell & MIRVIS | Fixing afft negative sharing effect during omp loops
+
10C>
+
11C> @author Iredell @date 96-02-29
+
12
+
13C> This subprogram performs a spherical transform
+
14C> between spectral coefficients of divergences and curls
+
15C> and vector fields on a global cylindrical grid.
+
16C>
+
17C> The wave-space can be either triangular or rhomboidal.
+
18C>
+
19C> The grid-space can be either an equally-spaced grid
+
20C> (with or without pole points) or a Gaussian grid.
+
21C>
+
22C> The wave and grid fields may have general indexing,
+
23C> but each wave field is in sequential 'ibm order',
+
24C> i.e. with zonal wavenumber as the slower index.
+
25C>
+
26C> Transforms are done in latitude pairs for efficiency;
+
27C> thus grid arrays for each hemisphere must be passed.
+
28C> if so requested, just a subset of the latitude pairs
+
29C> may be transformed in each invocation of the subprogram.
+
30C>
+
31C> The transforms are all multiprocessed over latitude except
+
32C> the transform from fourier to spectral is multiprocessed
+
33C> over zonal wavenumber to ensure reproducibility.
+
34C>
+
35C> Transform several fields at a time to improve vectorization.
+
36C> subprogram can be called from a multiprocessing environment.
+
37C>
+
38C> Minimum grid dimensions for unaliased transforms to spectral:
+
39C> DIMENSION |LINEAR |QUADRATIC
+
40C> ----------------------- |--------- |-------------
+
41C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
42C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
43C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
44C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
45C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
46C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
47C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
48C>
+
49C> @param IROMB spectral domain shape
+
50C> (0 for triangular, 1 for rhomboidal)
+
51C> @param MAXWV spectral truncation
+
52C> @param IDRT grid identifier
+
53C> - IDRT=4 for Gaussian grid
+
54C> - IDRT=0 for equally-spaced grid including poles
+
55C> - IDRT=256 for equally-spaced grid excluding poles
+
56C> @param IMAX even number of longitudes.
+
57C> @param JMAX number of latitudes.
+
58C> @param KMAX number of fields to transform.
+
59C> @param IP longitude index for the prime meridian
+
60C> @param IS skip number between longitudes
+
61C> @param JN skip number between n.h. latitudes from north
+
62C> @param JS skip number between s.h. latitudes from south
+
63C> @param KW skip number between wave fields
+
64C> @param KG skip number between grid fields
+
65C> @param JB latitude index (from pole) to begin transform
+
66C> @param JE latitude index (from pole) to end transform
+
67C> @param JC number of cpus over which to multiprocess
+
68C> @param[out] WAVED wave divergence fields if IDIR>0
+
69C> [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
+
70C> @param[out] WAVEZ wave vorticity fields if IDIR>0
+
71C> [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
+
72C> @param[out] GRIDUN N.H. grid u-winds (starting at jb) if IDIR<0
+
73C> @param[out] GRIDUS S.H. grid u-winds (starting at jb) if IDIR<0
+
74C> @param[out] GRIDVN N.H. grid v-winds (starting at jb) if IDIR<0
+
75C> @param[out] GRIDVS S.H. grid v-winds (starting at jb) if IDIR<0
+
76C> @param IDIR transform flag
+
77C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
+
78C>
+
79C> @author Iredell @date 96-02-29
+
+
80 SUBROUTINE sptranfv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
+
81 & IP,IS,JN,JS,KW,KG,JB,JE,JC,
+
82 & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
+
83
+
84 REAL WAVED(*),WAVEZ(*),GRIDUN(*),GRIDUS(*),GRIDVN(*),GRIDVS(*)
+
85 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
+
86 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
87 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
+
88 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
+
89 REAL(8) AFFT(50000+4*IMAX), AFFT_TMP(50000+4*IMAX)
+
90 REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
+
91 REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
+
92 REAL PLNTOP(MAXWV+1,JB:JE)
+
93 INTEGER MP
+
94 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2)
+
95 REAL WTOP(2*(MAXWV+1),2)
+
96 REAL G(IMAX,2,2)
+
97 REAL WINC((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2)
+
98
+
99C SET PARAMETERS
+
100 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
101 mp=1
+
102 CALL sptranf0(iromb,maxwv,idrt,imax,jmax,jb,je,
+
103 & eps,epstop,enn1,elonn1,eon,eontop,
+
104 & afft,clat,slat,wlat,pln,plntop)
+
105
+
106C TRANSFORM WAVE TO GRID
+
107 IF(idir.GT.0) THEN
+
108C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,W,WTOP,G,IJKN,IJKS)
+
109 DO k=1,kmax
+
110 afft_tmp=afft
+
111 kws=(k-1)*kw
+
112 CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
+
113 & waved(kws+1),wavez(kws+1),
+
114 & w(1,1),w(1,2),wtop(1,1),wtop(1,2))
+
115 DO j=jb,je
+
116 CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
+
117 & eps,epstop,enn1,elonn1,eon,eontop,
+
118 & afft_tmp,clat(j),slat(j),wlat(j),
+
119 & pln(1,j),plntop(1,j),mp,
+
120 & w(1,1),wtop(1,1),g(1,1,1),idir)
+
121 CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
+
122 & eps,epstop,enn1,elonn1,eon,eontop,
+
123 & afft_tmp,clat(j),slat(j),wlat(j),
+
124 & pln(1,j),plntop(1,j),mp,
+
125 & w(1,2),wtop(1,2),g(1,1,2),idir)
+
126 IF(ip.EQ.1.AND.is.EQ.1) THEN
+
127 DO i=1,imax
+
128 ijkn=i+(j-jb)*jn+(k-1)*kg
+
129 ijks=i+(j-jb)*js+(k-1)*kg
+
130 gridun(ijkn)=g(i,1,1)
+
131 gridus(ijks)=g(i,2,1)
+
132 gridvn(ijkn)=g(i,1,2)
+
133 gridvs(ijks)=g(i,2,2)
+
134 ENDDO
+
135 ELSE
+
136 DO i=1,imax
+
137 ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
+
138 ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
+
139 gridun(ijkn)=g(i,1,1)
+
140 gridus(ijks)=g(i,2,1)
+
141 gridvn(ijkn)=g(i,1,2)
+
142 gridvs(ijks)=g(i,2,2)
+
143 ENDDO
+
144 ENDIF
+
145 ENDDO
+
146 ENDDO
+
147
+
148C TRANSFORM GRID TO WAVE
+
149 ELSE
+
150C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,W,WTOP,G,IJKN,IJKS,WINC)
+
151 DO k=1,kmax
+
152 afft_tmp=afft
+
153 kws=(k-1)*kw
+
154 w=0
+
155 wtop=0
+
156 DO j=jb,je
+
157 IF(wlat(j).GT.0.) THEN
+
158 IF(ip.EQ.1.AND.is.EQ.1) THEN
+
159 DO i=1,imax
+
160 ijkn=i+(j-jb)*jn+(k-1)*kg
+
161 ijks=i+(j-jb)*js+(k-1)*kg
+
162 g(i,1,1)=gridun(ijkn)/clat(j)**2
+
163 g(i,2,1)=gridus(ijks)/clat(j)**2
+
164 g(i,1,2)=gridvn(ijkn)/clat(j)**2
+
165 g(i,2,2)=gridvs(ijks)/clat(j)**2
+
166 ENDDO
+
167 ELSE
+
168 DO i=1,imax
+
169 ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
+
170 ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
+
171 g(i,1,1)=gridun(ijkn)/clat(j)**2
+
172 g(i,2,1)=gridus(ijks)/clat(j)**2
+
173 g(i,1,2)=gridvn(ijkn)/clat(j)**2
+
174 g(i,2,2)=gridvs(ijks)/clat(j)**2
+
175 ENDDO
+
176 ENDIF
+
177 CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
+
178 & eps,epstop,enn1,elonn1,eon,eontop,
+
179 & afft_tmp,clat(j),slat(j),wlat(j),
+
180 & pln(1,j),plntop(1,j),mp,
+
181 & w(1,1),wtop(1,1),g(1,1,1),idir)
+
182 CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
+
183 & eps,epstop,enn1,elonn1,eon,eontop,
+
184 & afft_tmp,clat(j),slat(j),wlat(j),
+
185 & pln(1,j),plntop(1,j),mp,
+
186 & w(1,2),wtop(1,2),g(1,1,2),idir)
+
187 ENDIF
+
188 ENDDO
+
189 CALL spuv2dz(iromb,maxwv,enn1,elonn1,eon,eontop,
+
190 & w(1,1),w(1,2),wtop(1,1),wtop(1,2),
+
191 & winc(1,1),winc(1,2))
+
192 waved(kws+1:kws+2*mx)=waved(kws+1:kws+2*mx)+winc(1:2*mx,1)
+
193 wavez(kws+1:kws+2*mx)=wavez(kws+1:kws+2*mx)+winc(1:2*mx,2)
+
194 ENDDO
+
195 ENDIF
+
+
196 END
+
subroutine spdz2uv(i, m, enn1, elonn1, eon, eontop, d, z, u, v, utop, vtop)
Computes the wind components from divergence and vorticity in spectral space.
Definition spdz2uv.f:49
+
subroutine sptranf0(iromb, maxwv, idrt, imax, jmax, jb, je, eps, epstop, enn1, elonn1, eon, eontop, afft, clat, slat, wlat, pln, plntop)
This subprogram performs an initialization for subprogram sptranf().
Definition sptranf0.f:37
+
subroutine 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)
This subprogram performs an single latitude transform for subprogram sptranf().
Definition sptranf1.f:44
+
subroutine sptranfv(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition sptranfv.f:83
+
subroutine spuv2dz(i, m, enn1, elonn1, eon, eontop, u, v, utop, vtop, d, z)
Computes the divergence and vorticity from wind components in spectral space.
Definition spuv2dz.f:49
diff --git a/sptranv_8f.html b/sptranv_8f.html index c95dd51c..31a27a10 100644 --- a/sptranv_8f.html +++ b/sptranv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranv.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptranv.f File Reference
+
sptranv.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptranv (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
 This subprogram performs a spherical transform between spectral coefficients of divergences and curls and vector fields on a global cylindrical grid. More...
 
subroutine sptranv (iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
 This subprogram performs a spherical transform between spectral coefficients of divergences and curls and vector fields on a global cylindrical grid.
 

Detailed Description

Perform a vector spherical transform.

@@ -117,8 +123,8 @@

Definition in file sptranv.f.

Function/Subroutine Documentation

- -

◆ sptranv()

+ +

◆ sptranv()

diff --git a/sptranv_8f.js b/sptranv_8f.js index ef79c537..4e7f80e1 100644 --- a/sptranv_8f.js +++ b/sptranv_8f.js @@ -1,4 +1,4 @@ var sptranv_8f = [ - [ "sptranv", "sptranv_8f.html#a7d6aaa3ed70df1dfaf8dd4443b7190c1", null ] + [ "sptranv", "sptranv_8f.html#ad8f5c701843b1f78e093048113b1f454", null ] ]; \ No newline at end of file diff --git a/sptranv_8f_source.html b/sptranv_8f_source.html index 1493c46d..6d67b4fc 100644 --- a/sptranv_8f_source.html +++ b/sptranv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptranv.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,152 +81,160 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptranv.f
+
sptranv.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Perform a vector spherical transform.
-
3 C>
-
4 C> ### Program History Log
-
5 C> Date | Programmer | Comments
-
6 C> -----|------------|---------
-
7 C> 96-02-29 | IREDELL | Initial.
-
8 C> 1998-12-15 | IREDELL | Generic fft used, openmp directives inserted
-
9 C>
-
10 C> @author IREDELL @date 96-02-29
-
11 
-
12 C> This subprogram performs a spherical transform
-
13 C> between spectral coefficients of divergences and curls
-
14 C> and vector fields on a global cylindrical grid.
-
15 C>
-
16 C> The wave-space can be either triangular or rhomboidal.
-
17 C>
-
18 C> The grid-space can be either an equally-spaced grid
-
19 C> (with or without pole points) or a Gaussian grid.
-
20 C> the wave and grid fields may have general indexing,
-
21 C> but each wave field is in sequential 'ibm order',
-
22 C> i.e. with zonal wavenumber as the slower index.
-
23 C>
-
24 C> Transforms are done in latitude pairs for efficiency;
-
25 C> thus grid arrays for each hemisphere must be passed.
-
26 C> If so requested, just a subset of the latitude pairs
-
27 C> may be transformed in each invocation of the subprogram.
-
28 C>
-
29 C> The transforms are all multiprocessed over latitude except
-
30 C> the transform from fourier to spectral is multiprocessed
-
31 C> over zonal wavenumber to ensure reproducibility.
-
32 C>
-
33 C> Transform several fields at a time to improve vectorization.
-
34 C> Subprogram can be called from a multiprocessing environment.
-
35 C>
-
36 C> Minimum grid dimensions for unaliased transforms to spectral:
-
37 C> DIMENSION |LINEAR |QUADRATIC
-
38 C> ----------------------- |--------- |-------------
-
39 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
40 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
41 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
42 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
43 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
44 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
45 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
46 C>
-
47 C> @param IROMB SPECTRAL DOMAIN SHAPE
-
48 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
-
49 C> @param MAXWV SPECTRAL TRUNCATION
-
50 C> @param IDRT GRID IDENTIFIER
-
51 C> - IDRT=4 FOR GAUSSIAN GRID,
-
52 C> - IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
-
53 C> - IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES
-
54 C> @param IMAX EVEN NUMBER OF LONGITUDES.
-
55 C> @param JMAX NUMBER OF LATITUDES.
-
56 C> @param KMAX NUMBER OF FIELDS TO TRANSFORM.
-
57 C> @param IPRIME LONGITUDE INDEX FOR THE PRIME MERIDIAN.
-
58 C> (DEFAULTS TO 1 IF IPRIME=0)
-
59 C> @param ISKIP SKIP NUMBER BETWEEN LONGITUDES
-
60 C> (DEFAULTS TO 1 IF ISKIP=0)
-
61 C> @param JNSKIP SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
-
62 C> (DEFAULTS TO IMAX IF JNSKIP=0)
-
63 C> @param JSSKIP SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
-
64 C> (DEFAULTS TO -IMAX IF JSSKIP=0)
-
65 C> @param KWSKIP SKIP NUMBER BETWEEN WAVE FIELDS
-
66 C> (DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
-
67 C> @param KGSKIP SKIP NUMBER BETWEEN GRID FIELDS
-
68 C> (DEFAULTS TO IMAX*JMAX IF KGSKIP=0)
-
69 C> @param JBEG LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
-
70 C> - DEFAULTS TO 1 IF JBEG=0
-
71 C> - IF JBEG=0 AND IDIR<0, WAVE IS ZEROED BEFORE TRANSFORM
-
72 C> @param JEND LATITUDE INDEX (FROM POLE) TO END TRANSFORM
-
73 C> (DEFAULTS TO (JMAX+1)/2 IF JEND=0)
-
74 C> @param JCPU NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
-
75 C> @param[out] WAVED (*) WAVE DIVERGENCE FIELDS IF IDIR>0
-
76 C> [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
-
77 C> @param[out] WAVEZ (*) WAVE VORTICITY FIELDS IF IDIR>0
-
78 C> [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
-
79 C> @param[out] GRIDUN N.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
-
80 C> @param[out] GRIDUS S.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
-
81 C> @param[out] GRIDVN N.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
-
82 C> @param[out] GRIDVS S.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
-
83 C> @param IDIR TRANSFORM FLAG
-
84 C> - IDIR>0 FOR WAVE TO GRID,
-
85 C> - IDIR<0 FOR GRID TO WAVE
-
86 C>
-
87  SUBROUTINE sptranv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
-
88  & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
-
89  & JBEG,JEND,JCPU,
-
90  & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
-
91 
-
92  REAL WAVED(*),WAVEZ(*),GRIDUN(*),GRIDUS(*),GRIDVN(*),GRIDVS(*)
-
93 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
94  MX=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
95  ip=iprime
-
96  is=iskip
-
97  jn=jnskip
-
98  js=jsskip
-
99  kw=kwskip
-
100  kg=kgskip
-
101  jb=jbeg
-
102  je=jend
-
103  jc=jcpu
-
104  IF(ip.EQ.0) ip=1
-
105  IF(is.EQ.0) is=1
-
106  IF(jn.EQ.0) jn=imax
-
107  IF(js.EQ.0) js=-jn
-
108  IF(kw.EQ.0) kw=2*mx
-
109  IF(kg.EQ.0) kg=imax*jmax
-
110  IF(jb.EQ.0) jb=1
-
111  IF(je.EQ.0) je=(jmax+1)/2
-
112  IF(jc.EQ.0) jc=ncpus()
-
113 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
114  IF(idir.LT.0.AND.jbeg.EQ.0) THEN
-
115  DO k=1,kmax
-
116  kws=(k-1)*kw
-
117  waved(kws+1:kws+2*mx)=0
-
118  wavez(kws+1:kws+2*mx)=0
-
119  ENDDO
-
120  ENDIF
-
121 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
122  CALL sptranfv(iromb,maxwv,idrt,imax,jmax,kmax,
-
123  & ip,is,jn,js,kw,kg,jb,je,jc,
-
124  & waved,wavez,gridun,gridus,gridvn,gridvs,idir)
-
125 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
126  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition: sptranfv.f:83
-
subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition: sptranv.f:91
+Go to the documentation of this file.
1C> @file
+
2C> @brief Perform a vector spherical transform.
+
3C>
+
4C> ### Program History Log
+
5C> Date | Programmer | Comments
+
6C> -----|------------|---------
+
7C> 96-02-29 | IREDELL | Initial.
+
8C> 1998-12-15 | IREDELL | Generic fft used, openmp directives inserted
+
9C>
+
10C> @author IREDELL @date 96-02-29
+
11
+
12C> This subprogram performs a spherical transform
+
13C> between spectral coefficients of divergences and curls
+
14C> and vector fields on a global cylindrical grid.
+
15C>
+
16C> The wave-space can be either triangular or rhomboidal.
+
17C>
+
18C> The grid-space can be either an equally-spaced grid
+
19C> (with or without pole points) or a Gaussian grid.
+
20C> the wave and grid fields may have general indexing,
+
21C> but each wave field is in sequential 'ibm order',
+
22C> i.e. with zonal wavenumber as the slower index.
+
23C>
+
24C> Transforms are done in latitude pairs for efficiency;
+
25C> thus grid arrays for each hemisphere must be passed.
+
26C> If so requested, just a subset of the latitude pairs
+
27C> may be transformed in each invocation of the subprogram.
+
28C>
+
29C> The transforms are all multiprocessed over latitude except
+
30C> the transform from fourier to spectral is multiprocessed
+
31C> over zonal wavenumber to ensure reproducibility.
+
32C>
+
33C> Transform several fields at a time to improve vectorization.
+
34C> Subprogram can be called from a multiprocessing environment.
+
35C>
+
36C> Minimum grid dimensions for unaliased transforms to spectral:
+
37C> DIMENSION |LINEAR |QUADRATIC
+
38C> ----------------------- |--------- |-------------
+
39C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
40C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
41C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
42C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
43C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
44C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
45C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
46C>
+
47C> @param IROMB SPECTRAL DOMAIN SHAPE
+
48C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
+
49C> @param MAXWV SPECTRAL TRUNCATION
+
50C> @param IDRT GRID IDENTIFIER
+
51C> - IDRT=4 FOR GAUSSIAN GRID,
+
52C> - IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
+
53C> - IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES
+
54C> @param IMAX EVEN NUMBER OF LONGITUDES.
+
55C> @param JMAX NUMBER OF LATITUDES.
+
56C> @param KMAX NUMBER OF FIELDS TO TRANSFORM.
+
57C> @param IPRIME LONGITUDE INDEX FOR THE PRIME MERIDIAN.
+
58C> (DEFAULTS TO 1 IF IPRIME=0)
+
59C> @param ISKIP SKIP NUMBER BETWEEN LONGITUDES
+
60C> (DEFAULTS TO 1 IF ISKIP=0)
+
61C> @param JNSKIP SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
+
62C> (DEFAULTS TO IMAX IF JNSKIP=0)
+
63C> @param JSSKIP SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
+
64C> (DEFAULTS TO -IMAX IF JSSKIP=0)
+
65C> @param KWSKIP SKIP NUMBER BETWEEN WAVE FIELDS
+
66C> (DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
+
67C> @param KGSKIP SKIP NUMBER BETWEEN GRID FIELDS
+
68C> (DEFAULTS TO IMAX*JMAX IF KGSKIP=0)
+
69C> @param JBEG LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
+
70C> - DEFAULTS TO 1 IF JBEG=0
+
71C> - IF JBEG=0 AND IDIR<0, WAVE IS ZEROED BEFORE TRANSFORM
+
72C> @param JEND LATITUDE INDEX (FROM POLE) TO END TRANSFORM
+
73C> (DEFAULTS TO (JMAX+1)/2 IF JEND=0)
+
74C> @param JCPU NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
+
75C> @param[out] WAVED (*) WAVE DIVERGENCE FIELDS IF IDIR>0
+
76C> [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
+
77C> @param[out] WAVEZ (*) WAVE VORTICITY FIELDS IF IDIR>0
+
78C> [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
+
79C> @param[out] GRIDUN N.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
+
80C> @param[out] GRIDUS S.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
+
81C> @param[out] GRIDVN N.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
+
82C> @param[out] GRIDVS S.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
+
83C> @param IDIR TRANSFORM FLAG
+
84C> - IDIR>0 FOR WAVE TO GRID,
+
85C> - IDIR<0 FOR GRID TO WAVE
+
86C>
+
+
87 SUBROUTINE sptranv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
+
88 & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
+
89 & JBEG,JEND,JCPU,
+
90 & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
+
91
+
92 REAL WAVED(*),WAVEZ(*),GRIDUN(*),GRIDUS(*),GRIDVN(*),GRIDVS(*)
+
93C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
94 MX=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
95 ip=iprime
+
96 is=iskip
+
97 jn=jnskip
+
98 js=jsskip
+
99 kw=kwskip
+
100 kg=kgskip
+
101 jb=jbeg
+
102 je=jend
+
103 jc=jcpu
+
104 IF(ip.EQ.0) ip=1
+
105 IF(is.EQ.0) is=1
+
106 IF(jn.EQ.0) jn=imax
+
107 IF(js.EQ.0) js=-jn
+
108 IF(kw.EQ.0) kw=2*mx
+
109 IF(kg.EQ.0) kg=imax*jmax
+
110 IF(jb.EQ.0) jb=1
+
111 IF(je.EQ.0) je=(jmax+1)/2
+
112 IF(jc.EQ.0) jc=ncpus()
+
113C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
114 IF(idir.LT.0.AND.jbeg.EQ.0) THEN
+
115 DO k=1,kmax
+
116 kws=(k-1)*kw
+
117 waved(kws+1:kws+2*mx)=0
+
118 wavez(kws+1:kws+2*mx)=0
+
119 ENDDO
+
120 ENDIF
+
121C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
122 CALL sptranfv(iromb,maxwv,idrt,imax,jmax,kmax,
+
123 & ip,is,jn,js,kw,kg,jb,je,jc,
+
124 & waved,wavez,gridun,gridus,gridvn,gridvs,idir)
+
125C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
126 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptranfv(iromb, maxwv, idrt, imax, jmax, kmax, ip, is, jn, js, kw, kg, jb, je, jc, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition sptranfv.f:83
+
subroutine sptranv(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
Definition sptranv.f:91
diff --git a/sptrun_8f.html b/sptrun_8f.html index fcaf1b2b..ec3ee498 100644 --- a/sptrun_8f.html +++ b/sptrun_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrun.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptrun.f File Reference
+
sptrun.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptrun (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRIDI, GRIDO)
 This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to a possibly different global cylindrical grid. More...
 
subroutine sptrun (iromb, maxwv, idrti, imaxi, jmaxi, idrto, imaxo, jmaxo, kmax, iprime, iskipi, jskipi, kskipi, iskipo, jskipo, kskipo, jcpu, gridi, grido)
 This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to a possibly different global cylindrical grid.
 

Detailed Description

Truncate gridded scalar fields.

@@ -107,8 +113,8 @@

Definition in file sptrun.f.

Function/Subroutine Documentation

- -

◆ sptrun()

+ +

◆ sptrun()

diff --git a/sptrun_8f.js b/sptrun_8f.js index 0409c09b..4996c260 100644 --- a/sptrun_8f.js +++ b/sptrun_8f.js @@ -1,4 +1,4 @@ var sptrun_8f = [ - [ "sptrun", "sptrun_8f.html#a1f04574fbd5018f73b68bd2cd0ffc473", null ] + [ "sptrun", "sptrun_8f.html#a043d74dc559aafb2b1f5cc52fe81b924", null ] ]; \ No newline at end of file diff --git a/sptrun_8f_source.html b/sptrun_8f_source.html index 3d77bdac..a79cd0a9 100644 --- a/sptrun_8f_source.html +++ b/sptrun_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrun.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,111 +81,119 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptrun.f
+
sptrun.f
-Go to the documentation of this file.
1 C> @file
-
2 C> @brief Truncate gridded scalar fields
-
3 C> @author IREDELL @date 96-02-29
-
4 
-
5 C> This subprogram spectrally truncates scalar fields on a global
-
6 C> cylindrical grid, returning the fields to a possibly different
-
7 C> global cylindrical grid. The wave-space can be either triangular
-
8 C> or rhomboidal. either grid-space can be either an equally-spaced
-
9 C> grid (with or without pole points) or a Gaussian grid. the grid
-
10 C> fields may have general indexing. the transforms are all
-
11 C> multiprocessed. Transform several fields at a time to improve
-
12 C> vectorization. Subprogram can be called from a multiprocessing
-
13 C> environment.
-
14 C>
-
15 C> Remarks: Minimum grid dimensions for unaliased transforms to spectral:
-
16 C> Dimension | Linear | Quadratic
-
17 C> ----------------------- | --------- | -------------
-
18 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
-
19 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
-
20 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
-
21 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
-
22 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
-
23 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
-
24 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
-
25 C>
-
26 C> @param IROMB Spectral domain shape (0 for triangular, 1 for rhomboidal)
-
27 C> @param MAXWV Spectral truncation
-
28 C> @param IDRTI Input grid identifier
-
29 C> - IDRTI=4 for Gaussian grid
-
30 C> - IDRTI=0 for equally-spaced grid including poles
-
31 C> - IDRTI=256 for equally-spaced grid excluding poles
-
32 C> @param IMAXI Even number of input longitudes
-
33 C> @param JMAXI Number of input latitudes
-
34 C> @param IDRTO Output grid identifier
-
35 C> - IDRTO=4 for Gaussian grid
-
36 C> - IDRTO=0 for equally-spaced grid including poles
-
37 C> - IDRTO=256 for equally-spaced grid excluding poles
-
38 C> @param IMAXO Even number of output longitudes
-
39 C> @param JMAXO Number of output latitudes
-
40 C> @param KMAX Number of fields to transform
-
41 C> @param IPRIME Input longitude index for the prime meridian.
-
42 C> - Defaults to 1 if IPRIME=0
-
43 C> - Output longitude index for prime meridian assumed 1
-
44 C> @param ISKIPI Skip number between input longitudes (defaults to 1 if ISKIPI=0)
-
45 C> @param JSKIPI Skip number between input latitudes from south (defaults to -IMAXI if JSKIPI=0)
-
46 C> @param KSKIPI Skip number between input grid fields (defaults to IMAXI*JMAXI if KSKIPI=0)
-
47 C> @param ISKIPO Skip number between output longitudes (defaults to 1 if ISKIPO=0)
-
48 C> @param JSKIPO Skip number between output latitudes from south (defaults to -IMAXO if JSKIPO=0)
-
49 C> @param KSKIPO Skip number between output grid fields (defaults to IMAXO*JMAXO if KSKIPO=0)
-
50 C> @param JCPU Number of CPUs over which to multiprocess (defaults to environment NCPUS if JCPU=0)
-
51 C> @param GRIDI Input grid fields
-
52 C> @param GRIDO Output grid fields (may overlay input fields if grid shape is appropriate)
-
53 C>
-
54 C> @author IREDELL @date 96-02-29
-
55  SUBROUTINE sptrun(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,IDRTO,IMAXO,JMAXO,
-
56  & KMAX,IPRIME,ISKIPI,JSKIPI,KSKIPI,
-
57  & ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDI,GRIDO)
-
58  REAL GRIDI(*),GRIDO(*)
-
59  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
60 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
61 C TRANSFORM INPUT GRID TO WAVE
-
62  jc=jcpu
-
63  IF(jc.EQ.0) jc=ncpus()
-
64  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
65  mdim=2*mx+1
-
66  jn=-jskipi
-
67  IF(jn.EQ.0) jn=imaxi
-
68  js=-jn
-
69  inp=(jmaxi-1)*max(0,-jn)+1
-
70  isp=(jmaxi-1)*max(0,-js)+1
-
71  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
-
72  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
-
73  & w,gridi(inp),gridi(isp),-1)
-
74 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
75 C TRANSFORM WAVE TO OUTPUT
-
76  jn=-jskipo
-
77  IF(jn.EQ.0) jn=imaxo
-
78  js=-jn
-
79  inp=(jmaxo-1)*max(0,-jn)+1
-
80  isp=(jmaxo-1)*max(0,-js)+1
-
81  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
-
82  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
-
83  & w,grido(inp),grido(isp),1)
-
84 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
85  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptran.f:88
-
subroutine sptrun(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRIDI, GRIDO)
This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
Definition: sptrun.f:58
+Go to the documentation of this file.
1C> @file
+
2C> @brief Truncate gridded scalar fields
+
3C> @author IREDELL @date 96-02-29
+
4
+
5C> This subprogram spectrally truncates scalar fields on a global
+
6C> cylindrical grid, returning the fields to a possibly different
+
7C> global cylindrical grid. The wave-space can be either triangular
+
8C> or rhomboidal. either grid-space can be either an equally-spaced
+
9C> grid (with or without pole points) or a Gaussian grid. the grid
+
10C> fields may have general indexing. the transforms are all
+
11C> multiprocessed. Transform several fields at a time to improve
+
12C> vectorization. Subprogram can be called from a multiprocessing
+
13C> environment.
+
14C>
+
15C> Remarks: Minimum grid dimensions for unaliased transforms to spectral:
+
16C> Dimension | Linear | Quadratic
+
17C> ----------------------- | --------- | -------------
+
18C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
+
19C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
+
20C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
+
21C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
+
22C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
+
23C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
+
24C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
+
25C>
+
26C> @param IROMB Spectral domain shape (0 for triangular, 1 for rhomboidal)
+
27C> @param MAXWV Spectral truncation
+
28C> @param IDRTI Input grid identifier
+
29C> - IDRTI=4 for Gaussian grid
+
30C> - IDRTI=0 for equally-spaced grid including poles
+
31C> - IDRTI=256 for equally-spaced grid excluding poles
+
32C> @param IMAXI Even number of input longitudes
+
33C> @param JMAXI Number of input latitudes
+
34C> @param IDRTO Output grid identifier
+
35C> - IDRTO=4 for Gaussian grid
+
36C> - IDRTO=0 for equally-spaced grid including poles
+
37C> - IDRTO=256 for equally-spaced grid excluding poles
+
38C> @param IMAXO Even number of output longitudes
+
39C> @param JMAXO Number of output latitudes
+
40C> @param KMAX Number of fields to transform
+
41C> @param IPRIME Input longitude index for the prime meridian.
+
42C> - Defaults to 1 if IPRIME=0
+
43C> - Output longitude index for prime meridian assumed 1
+
44C> @param ISKIPI Skip number between input longitudes (defaults to 1 if ISKIPI=0)
+
45C> @param JSKIPI Skip number between input latitudes from south (defaults to -IMAXI if JSKIPI=0)
+
46C> @param KSKIPI Skip number between input grid fields (defaults to IMAXI*JMAXI if KSKIPI=0)
+
47C> @param ISKIPO Skip number between output longitudes (defaults to 1 if ISKIPO=0)
+
48C> @param JSKIPO Skip number between output latitudes from south (defaults to -IMAXO if JSKIPO=0)
+
49C> @param KSKIPO Skip number between output grid fields (defaults to IMAXO*JMAXO if KSKIPO=0)
+
50C> @param JCPU Number of CPUs over which to multiprocess (defaults to environment NCPUS if JCPU=0)
+
51C> @param GRIDI Input grid fields
+
52C> @param GRIDO Output grid fields (may overlay input fields if grid shape is appropriate)
+
53C>
+
54C> @author IREDELL @date 96-02-29
+
+
55 SUBROUTINE sptrun(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,IDRTO,IMAXO,JMAXO,
+
56 & KMAX,IPRIME,ISKIPI,JSKIPI,KSKIPI,
+
57 & ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDI,GRIDO)
+
58 REAL GRIDI(*),GRIDO(*)
+
59 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
60C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
61C TRANSFORM INPUT GRID TO WAVE
+
62 jc=jcpu
+
63 IF(jc.EQ.0) jc=ncpus()
+
64 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
65 mdim=2*mx+1
+
66 jn=-jskipi
+
67 IF(jn.EQ.0) jn=imaxi
+
68 js=-jn
+
69 inp=(jmaxi-1)*max(0,-jn)+1
+
70 isp=(jmaxi-1)*max(0,-js)+1
+
71 CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
+
72 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
+
73 & w,gridi(inp),gridi(isp),-1)
+
74C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
75C TRANSFORM WAVE TO OUTPUT
+
76 jn=-jskipo
+
77 IF(jn.EQ.0) jn=imaxo
+
78 js=-jn
+
79 inp=(jmaxo-1)*max(0,-jn)+1
+
80 isp=(jmaxo-1)*max(0,-js)+1
+
81 CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
+
82 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
+
83 & w,grido(inp),grido(isp),1)
+
84C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
85 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptran.f:88
+
subroutine sptrun(iromb, maxwv, idrti, imaxi, jmaxi, idrto, imaxo, jmaxo, kmax, iprime, iskipi, jskipi, kskipi, iskipo, jskipo, kskipo, jcpu, gridi, grido)
This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
Definition sptrun.f:58
diff --git a/sptrund_8f.html b/sptrund_8f.html index 6fe8896c..0723097a 100644 --- a/sptrund_8f.html +++ b/sptrund_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrund.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptrund.f File Reference
+
sptrund.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptrund (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRID, GRIDMN, GRIDX, GRIDY)
 THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEANS AND GRADIENTS TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID. More...
 
subroutine sptrund (iromb, maxwv, idrti, imaxi, jmaxi, idrto, imaxo, jmaxo, kmax, iprime, iskipi, jskipi, kskipi, iskipo, jskipo, kskipo, jcpu, grid, gridmn, gridx, gridy)
 THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEANS AND GRADIENTS TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
 

Detailed Description

Spectrally truncate to gradients.

@@ -107,8 +113,8 @@

Definition in file sptrund.f.

Function/Subroutine Documentation

- -

◆ sptrund()

+ +

◆ sptrund()

@@ -311,7 +317,7 @@

diff --git a/sptrund_8f.js b/sptrund_8f.js index 20c45793..4460540f 100644 --- a/sptrund_8f.js +++ b/sptrund_8f.js @@ -1,4 +1,4 @@ var sptrund_8f = [ - [ "sptrund", "sptrund_8f.html#a2636d99e658dfabd4b85f15a76fca480", null ] + [ "sptrund", "sptrund_8f.html#ab4df2316de48a5a199c5be026ab9fab0", null ] ]; \ No newline at end of file diff --git a/sptrund_8f_source.html b/sptrund_8f_source.html index a6b7d3d2..0c68a9da 100644 --- a/sptrund_8f_source.html +++ b/sptrund_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrund.f Source File @@ -23,10 +23,9 @@
- - + @@ -34,22 +33,28 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ + +
@@ -76,132 +81,140 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
-
-
sptrund.f
+
sptrund.f
-Go to the documentation of this file.
1 C> @file
-
2 C>
-
3 C> Spectrally truncate to gradients
-
4 C> @author IREDELL @date 96-02-29
-
5 
-
6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS
-
7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEANS AND
-
8 C> GRADIENTS TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
-
9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
-
10 C> EITHER GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
-
11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
-
12 C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
-
13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
-
14 C> OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY.
-
15 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
-
16 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
-
17 C>
-
18 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
-
19 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
-
20 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
-
21 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
-
22 C> (IDRTI=4 FOR GAUSSIAN GRID,
-
23 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
-
24 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
-
25 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
-
26 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
-
27 C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
-
28 C> (IDRTO=4 FOR GAUSSIAN GRID,
-
29 C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
-
30 C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
-
31 C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
-
32 C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
-
33 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
-
34 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
-
35 C> (DEFAULTS TO 1 IF IPRIME=0)
-
36 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
-
37 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
-
38 C> (DEFAULTS TO 1 IF ISKIPI=0)
-
39 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
-
40 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
-
41 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
-
42 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
-
43 C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
-
44 C> (DEFAULTS TO 1 IF ISKIPO=0)
-
45 C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
-
46 C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
-
47 C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
-
48 C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
-
49 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
-
50 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
-
51 C> @param GRID - REAL (*) INPUT GRID FIELDS
-
52 C> @param GRIDMN - REAL (KMAX) OUTPUT GLOBAL MEANS
-
53 C> @param GRIDX - REAL (*) OUTPUT X-GRADIENTS
-
54 C> @param GRIDY - REAL (*) OUTPUT Y-GRADIENTS
-
55 C>
-
56 C> SUBPROGRAMS CALLED:
-
57 C> - SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
-
58 C> - SPTRAND PERFORM A GRADIENT SPHERICAL TRANSFORM
-
59 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
-
60 C>
-
61 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
-
62 C> DIMENSION |LINEAR |QUADRATIC
-
63 C> ----------------------- |--------- |-------------
-
64 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
-
65 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
-
66 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
-
67 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
-
68 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
-
69 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
-
70 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
-
71  SUBROUTINE sptrund(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
-
72  & IDRTO,IMAXO,JMAXO,KMAX,
-
73  & IPRIME,ISKIPI,JSKIPI,KSKIPI,
-
74  & ISKIPO,JSKIPO,KSKIPO,JCPU,GRID,
-
75  & GRIDMN,GRIDX,GRIDY)
-
76 
-
77  REAL GRID(*),GRIDX(*),GRIDY(*),GRIDMN(*)
-
78  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
-
79 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
80 C TRANSFORM INPUT GRID TO WAVE
-
81  jc=jcpu
-
82  IF(jc.EQ.0) jc=ncpus()
-
83  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
-
84  mdim=2*mx+1
-
85  jn=-jskipi
-
86  IF(jn.EQ.0) jn=imaxi
-
87  js=-jn
-
88  inp=(jmaxi-1)*max(0,-jn)+1
-
89  isp=(jmaxi-1)*max(0,-js)+1
-
90  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
-
91  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
-
92  & w,grid(inp),grid(isp),-1)
-
93 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
94 C TRANSFORM WAVE TO OUTPUT GRADIENTS
-
95  jn=-jskipo
-
96  IF(jn.EQ.0) jn=imaxo
-
97  js=-jn
-
98  inp=(jmaxo-1)*max(0,-jn)+1
-
99  isp=(jmaxo-1)*max(0,-js)+1
-
100  CALL sptrand(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
-
101  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
-
102  & w,gridmn,
-
103  & gridx(inp),gridx(isp),gridy(inp),gridy(isp),1)
-
104 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
105  END
-
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition: ncpus.F:24
-
subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition: sptran.f:88
-
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 the...
Definition: sptrand.f:92
-
subroutine sptrund(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRID, GRIDMN, GRIDX, GRIDY)
THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEAN...
Definition: sptrund.f:76
+Go to the documentation of this file.
1C> @file
+
2C>
+
3C> Spectrally truncate to gradients
+
4C> @author IREDELL @date 96-02-29
+
5
+
6C> THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS
+
7C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEANS AND
+
8C> GRADIENTS TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
+
9C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
+
10C> EITHER GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
+
11C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
+
12C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
+
13C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
+
14C> OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY.
+
15C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
+
16C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
+
17C>
+
18C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
+
19C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
+
20C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
+
21C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
+
22C> (IDRTI=4 FOR GAUSSIAN GRID,
+
23C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
+
24C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
+
25C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
+
26C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
+
27C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
+
28C> (IDRTO=4 FOR GAUSSIAN GRID,
+
29C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
+
30C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
+
31C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
+
32C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
+
33C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
+
34C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
+
35C> (DEFAULTS TO 1 IF IPRIME=0)
+
36C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
+
37C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
+
38C> (DEFAULTS TO 1 IF ISKIPI=0)
+
39C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
+
40C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
+
41C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
+
42C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
+
43C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
+
44C> (DEFAULTS TO 1 IF ISKIPO=0)
+
45C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
+
46C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
+
47C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
+
48C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
+
49C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
+
50C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
+
51C> @param GRID - REAL (*) INPUT GRID FIELDS
+
52C> @param GRIDMN - REAL (KMAX) OUTPUT GLOBAL MEANS
+
53C> @param GRIDX - REAL (*) OUTPUT X-GRADIENTS
+
54C> @param GRIDY - REAL (*) OUTPUT Y-GRADIENTS
+
55C>
+
56C> SUBPROGRAMS CALLED:
+
57C> - SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
+
58C> - SPTRAND PERFORM A GRADIENT SPHERICAL TRANSFORM
+
59C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
+
60C>
+
61C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
+
62C> DIMENSION |LINEAR |QUADRATIC
+
63C> ----------------------- |--------- |-------------
+
64C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
+
65C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
+
66C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
+
67C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
+
68C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
+
69C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
+
70C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
+
+
71 SUBROUTINE sptrund(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
+
72 & IDRTO,IMAXO,JMAXO,KMAX,
+
73 & IPRIME,ISKIPI,JSKIPI,KSKIPI,
+
74 & ISKIPO,JSKIPO,KSKIPO,JCPU,GRID,
+
75 & GRIDMN,GRIDX,GRIDY)
+
76
+
77 REAL GRID(*),GRIDX(*),GRIDY(*),GRIDMN(*)
+
78 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
+
79C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
80C TRANSFORM INPUT GRID TO WAVE
+
81 jc=jcpu
+
82 IF(jc.EQ.0) jc=ncpus()
+
83 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
+
84 mdim=2*mx+1
+
85 jn=-jskipi
+
86 IF(jn.EQ.0) jn=imaxi
+
87 js=-jn
+
88 inp=(jmaxi-1)*max(0,-jn)+1
+
89 isp=(jmaxi-1)*max(0,-js)+1
+
90 CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
+
91 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
+
92 & w,grid(inp),grid(isp),-1)
+
93C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
94C TRANSFORM WAVE TO OUTPUT GRADIENTS
+
95 jn=-jskipo
+
96 IF(jn.EQ.0) jn=imaxo
+
97 js=-jn
+
98 inp=(jmaxo-1)*max(0,-jn)+1
+
99 isp=(jmaxo-1)*max(0,-js)+1
+
100 CALL sptrand(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
+
101 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
+
102 & w,gridmn,
+
103 & gridx(inp),gridx(isp),gridy(inp),gridy(isp),1)
+
104C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
105 END
+
function ncpus()
Set number of CPUs - the number of processors over which to parallelize.
Definition ncpus.F:22
+
subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
Definition sptran.f:88
+
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 the...
Definition sptrand.f:92
+
subroutine sptrund(iromb, maxwv, idrti, imaxi, jmaxi, idrto, imaxo, jmaxo, kmax, iprime, iskipi, jskipi, kskipi, iskipo, jskipo, kskipo, jcpu, grid, gridmn, gridx, gridy)
THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEAN...
Definition sptrund.f:76
diff --git a/sptrung_8f.html b/sptrung_8f.html index 2332b302..fe9f7741 100644 --- a/sptrung_8f.html +++ b/sptrung_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrung.f File Reference @@ -23,10 +23,9 @@
- - + @@ -34,21 +33,22 @@
-
NCEPLIBS-ip -  5.1.0 +
+
NCEPLIBS-ip 5.2.0
- + +/* @license-end */ +
@@ -62,7 +62,7 @@
@@ -76,16 +76,22 @@
- +
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
Functions/Subroutines
-
-
sptrung.f File Reference
+
sptrung.f File Reference
@@ -94,11 +100,11 @@

Go to the source code of this file.

- - - - + + +

+

Functions/Subroutines

subroutine sptrung (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NRSKIP, NGSKIP, JCPU, RLAT, RLON, GRIDI, GP)
 This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to specified sets of station points on the globe. More...
 
subroutine sptrung (iromb, maxwv, idrti, imaxi, jmaxi, kmax, nmax, iprime, iskipi, jskipi, kskipi, kgskip, nrskip, ngskip, jcpu, rlat, rlon, gridi, gp)
 This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to specified sets of station points on the globe.
 

Detailed Description

Spectrally interpolate scalars to stations.

@@ -107,8 +113,8 @@

Definition in file sptrung.f.

Function/Subroutine Documentation

- -

◆ sptrung()

+ +

◆ sptrung()

@@ -117,115 +123,115 @@

subroutine sptrung (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRTI, + idrti,   - IMAXI, + imaxi,   - JMAXI, + jmaxi,   - KMAX, + kmax,   - NMAX, + nmax,   - IPRIME, + iprime,   - ISKIPI, + iskipi,   - JSKIPI, + jskipi,   - KSKIPI, + kskipi,   - KGSKIP, + kgskip,   - NRSKIP, + nrskip,   - NGSKIP, + ngskip,   - JCPU, + jcpu, real, dimension(*)  - RLAT, + rlat, real, dimension(*)  - RLON, + rlon, real, dimension(*)  - GRIDI, + gridi, real, dimension(*)  - GP  + gp  @@ -262,8 +268,8 @@

sptran() Perform a scalar spherical transform -
  • sptgpt() Transform spectral scalar to station points
  • +
  • sptran() Perform a scalar spherical transform
  • +
  • sptgpt() Transform spectral scalar to station points
  • ncpus() Gets environment number of cpus
  • Minimum grid dimensions for unaliased transforms to spectral:

    @@ -287,7 +293,7 @@

    Definition at line 65 of file sptrung.f.

    -

    References ncpus(), sptgpt(), and sptran().

    +

    References ncpus(), sptgpt(), and sptran().

    Referenced by spectral_interp_mod::polates4::polates4_grib1(), and spectral_interp_mod::polates4::polates4_grib2().

    @@ -299,7 +305,7 @@

    diff --git a/sptrung_8f.js b/sptrung_8f.js index 2105f854..c85c2570 100644 --- a/sptrung_8f.js +++ b/sptrung_8f.js @@ -1,4 +1,4 @@ var sptrung_8f = [ - [ "sptrung", "sptrung_8f.html#af41b64dad4789617a315515ef885912c", null ] + [ "sptrung", "sptrung_8f.html#a8715a29c9ad05ee81a35642f2ff60a0b", null ] ]; \ No newline at end of file diff --git a/sptrung_8f_source.html b/sptrung_8f_source.html index a23390f1..2c8b2cbf 100644 --- a/sptrung_8f_source.html +++ b/sptrung_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrung.f Source File @@ -23,10 +23,9 @@

    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0

    - + +/* @license-end */ + +
    @@ -76,117 +81,125 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptrung.f
    +
    sptrung.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C>
    -
    3 C> Spectrally interpolate scalars to stations
    -
    4 C> @author IREDELL @date 96-02-29
    -
    5 
    -
    6 C> This subprogram spectrally truncates scalar fields on a global
    -
    7 C> cylindrical grid, returning the fields to specified sets of
    -
    8 C> station points on the globe. The wave-space can be either
    -
    9 C> triangular or rhomboidal. The grid-space can be either an
    -
    10 C> equally-spaced grid (with or without pole points) or a Gaussian
    -
    11 C> grid. The grid and point fields may have general indexing. The
    -
    12 C> transforms are all multiprocessed. Transform several fields at a
    -
    13 C> time to improve vectorization. Subprogram can be called from a
    -
    14 C> multiprocessing environment.
    -
    15 C>
    -
    16 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    -
    17 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    -
    18 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    -
    19 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    -
    20 C> (IDRTI=4 FOR GAUSSIAN GRID,
    -
    21 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    22 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    23 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    -
    24 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    -
    25 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    -
    26 C> @param NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
    -
    27 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    -
    28 C> (DEFAULTS TO 1 IF IPRIME=0)
    -
    29 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    -
    30 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    -
    31 C> (DEFAULTS TO 1 IF ISKIPI=0)
    -
    32 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    -
    33 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    -
    34 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    -
    35 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    -
    36 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
    -
    37 C> (DEFAULTS TO NMAX IF KGSKIP=0)
    -
    38 C> @param NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
    -
    39 C> (DEFAULTS TO 1 IF NRSKIP=0)
    -
    40 C> @param NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
    -
    41 C> (DEFAULTS TO 1 IF NGSKIP=0)
    -
    42 C> @param RLAT - REAL (*) STATION LATITUDES IN DEGREES
    -
    43 C> @param RLON - REAL (*) STATION LONGITUDES IN DEGREES
    -
    44 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    -
    45 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    -
    46 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    -
    47 C> @param[out] GP - REAL (*) STATION POINT SETS
    -
    48 C>
    -
    49 C> SUBPROGRAMS CALLED:
    -
    50 C> - sptran() Perform a scalar spherical transform
    -
    51 C> - sptgpt() Transform spectral scalar to station points
    -
    52 C> - ncpus() Gets environment number of cpus
    -
    53 C>
    -
    54 C> Minimum grid dimensions for unaliased transforms to spectral:
    -
    55 C> DIMENSION |LINEAR |QUADRATIC
    -
    56 C> ----------------------- |--------- |-------------
    -
    57 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    -
    58 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    -
    59 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    -
    60 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    -
    61 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    -
    62 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    -
    63 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    -
    64 C>
    -
    65  SUBROUTINE sptrung(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
    -
    66  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    -
    67  & NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDI,GP)
    -
    68 
    -
    69  REAL RLAT(*),RLON(*),GRIDI(*),GP(*)
    -
    70  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    71 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    72 C TRANSFORM INPUT GRID TO WAVE
    -
    73  jc=jcpu
    -
    74  IF(jc.EQ.0) jc=ncpus()
    -
    75  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    76  mdim=2*mx+1
    -
    77  jn=-jskipi
    -
    78  IF(jn.EQ.0) jn=imaxi
    -
    79  js=-jn
    -
    80  inp=(jmaxi-1)*max(0,-jn)+1
    -
    81  isp=(jmaxi-1)*max(0,-js)+1
    -
    82  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    83  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    84  & w,gridi(inp),gridi(isp),-1)
    -
    85 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    86 C TRANSFORM WAVE TO OUTPUT
    -
    87  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    -
    88  & rlat,rlon,w,gp)
    -
    89 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    90  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine sptgpt(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition: sptgpt.f:51
    -
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    -
    subroutine sptrung(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NRSKIP, NGSKIP, JCPU, RLAT, RLON, GRIDI, GP)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrung.f:68
    +Go to the documentation of this file.
    1C> @file
    +
    2C>
    +
    3C> Spectrally interpolate scalars to stations
    +
    4C> @author IREDELL @date 96-02-29
    +
    5
    +
    6C> This subprogram spectrally truncates scalar fields on a global
    +
    7C> cylindrical grid, returning the fields to specified sets of
    +
    8C> station points on the globe. The wave-space can be either
    +
    9C> triangular or rhomboidal. The grid-space can be either an
    +
    10C> equally-spaced grid (with or without pole points) or a Gaussian
    +
    11C> grid. The grid and point fields may have general indexing. The
    +
    12C> transforms are all multiprocessed. Transform several fields at a
    +
    13C> time to improve vectorization. Subprogram can be called from a
    +
    14C> multiprocessing environment.
    +
    15C>
    +
    16C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    17C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    18C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    19C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    20C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    21C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    22C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    23C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    24C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    25C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    26C> @param NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
    +
    27C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    28C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    29C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    30C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    31C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    32C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    33C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    34C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    35C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    36C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
    +
    37C> (DEFAULTS TO NMAX IF KGSKIP=0)
    +
    38C> @param NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
    +
    39C> (DEFAULTS TO 1 IF NRSKIP=0)
    +
    40C> @param NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
    +
    41C> (DEFAULTS TO 1 IF NGSKIP=0)
    +
    42C> @param RLAT - REAL (*) STATION LATITUDES IN DEGREES
    +
    43C> @param RLON - REAL (*) STATION LONGITUDES IN DEGREES
    +
    44C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    45C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    46C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    47C> @param[out] GP - REAL (*) STATION POINT SETS
    +
    48C>
    +
    49C> SUBPROGRAMS CALLED:
    +
    50C> - sptran() Perform a scalar spherical transform
    +
    51C> - sptgpt() Transform spectral scalar to station points
    +
    52C> - ncpus() Gets environment number of cpus
    +
    53C>
    +
    54C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    55C> DIMENSION |LINEAR |QUADRATIC
    +
    56C> ----------------------- |--------- |-------------
    +
    57C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    58C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    59C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    60C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    61C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    62C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    63C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    64C>
    +
    +
    65 SUBROUTINE sptrung(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
    +
    66 & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    67 & NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDI,GP)
    +
    68
    +
    69 REAL RLAT(*),RLON(*),GRIDI(*),GP(*)
    +
    70 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    71C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    72C TRANSFORM INPUT GRID TO WAVE
    +
    73 jc=jcpu
    +
    74 IF(jc.EQ.0) jc=ncpus()
    +
    75 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    76 mdim=2*mx+1
    +
    77 jn=-jskipi
    +
    78 IF(jn.EQ.0) jn=imaxi
    +
    79 js=-jn
    +
    80 inp=(jmaxi-1)*max(0,-jn)+1
    +
    81 isp=(jmaxi-1)*max(0,-js)+1
    +
    82 CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    83 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    84 & w,gridi(inp),gridi(isp),-1)
    +
    85C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    86C TRANSFORM WAVE TO OUTPUT
    +
    87 CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    88 & rlat,rlon,w,gp)
    +
    89C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    +
    90 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine sptgpt(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, gp)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition sptgpt.f:51
    +
    subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition sptran.f:88
    +
    subroutine sptrung(iromb, maxwv, idrti, imaxi, jmaxi, kmax, nmax, iprime, iskipi, jskipi, kskipi, kgskip, nrskip, ngskip, jcpu, rlat, rlon, gridi, gp)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition sptrung.f:68
    diff --git a/sptrungv_8f.html b/sptrungv_8f.html index 43b9cbac..f6ed8238 100644 --- a/sptrungv_8f.html +++ b/sptrungv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrungv.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    sptrungv.f File Reference
    +
    sptrungv.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine 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)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS TO SPECIFIED SETS OF STATION POINTS ON THE GLOBE. More...
     
    subroutine 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)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS TO SPECIFIED SETS OF STATION POINTS ON THE GLOBE.
     

    Detailed Description

    Spectrally interpolate vectors to stations.

    @@ -107,8 +113,8 @@

    Definition in file sptrungv.f.

    Function/Subroutine Documentation

    - -

    ◆ sptrungv()

    + +

    ◆ sptrungv()

    diff --git a/sptrungv_8f.js b/sptrungv_8f.js index c69c1059..b3205b70 100644 --- a/sptrungv_8f.js +++ b/sptrungv_8f.js @@ -1,4 +1,4 @@ var sptrungv_8f = [ - [ "sptrungv", "sptrungv_8f.html#ab7bbe6ecde57394b15e5d4925cb07164", null ] + [ "sptrungv", "sptrungv_8f.html#a53c1e5ccef37ef3753a057ca9b930fb3", null ] ]; \ No newline at end of file diff --git a/sptrungv_8f_source.html b/sptrungv_8f_source.html index 7dab915f..91fae410 100644 --- a/sptrungv_8f_source.html +++ b/sptrungv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrungv.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,171 +81,179 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptrungv.f
    +
    sptrungv.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C>
    -
    3 C> Spectrally interpolate vectors to stations
    -
    4 C> @author IREDELL @date 96-02-29
    -
    5 
    -
    6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS
    -
    7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS
    -
    8 C> TO SPECIFIED SETS OF STATION POINTS ON THE GLOBE.
    -
    9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    -
    10 C> THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    -
    11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    -
    12 C> THE GRID AND POINT FIELDS MAY HAVE GENERAL INDEXING.
    -
    13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    -
    14 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    -
    15 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    -
    16 C>
    -
    17 C> PROGRAM HISTORY LOG:
    -
    18 C> - 96-02-29 IREDELL
    -
    19 C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    -
    20 C>
    -
    21 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    -
    22 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    -
    23 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    -
    24 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    -
    25 C> (IDRTI=4 FOR GAUSSIAN GRID,
    -
    26 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    27 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    28 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    -
    29 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    -
    30 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    -
    31 C> @param NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
    -
    32 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    -
    33 C> (DEFAULTS TO 1 IF IPRIME=0)
    -
    34 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    -
    35 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    -
    36 C> (DEFAULTS TO 1 IF ISKIPI=0)
    -
    37 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    -
    38 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    -
    39 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    -
    40 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    -
    41 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
    -
    42 C> (DEFAULTS TO NMAX IF KGSKIP=0)
    -
    43 C> @param NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
    -
    44 C> (DEFAULTS TO 1 IF NRSKIP=0)
    -
    45 C> @param NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
    -
    46 C> (DEFAULTS TO 1 IF NGSKIP=0)
    -
    47 C> @param RLAT - REAL (*) STATION LATITUDES IN DEGREES
    -
    48 C> @param RLON - REAL (*) STATION LONGITUDES IN DEGREES
    -
    49 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    -
    50 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    -
    51 C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    -
    52 C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    -
    53 C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    -
    54 C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    -
    55 C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    -
    56 C> @param UP - REAL (*) STATION U-WINDS IF LUV
    -
    57 C> @param VP - REAL (*) STATION V-WINDS IF LUV
    -
    58 C> @param DP - REAL (*) STATION DIVERGENCES IF LDZ
    -
    59 C> @param ZP - REAL (*) STATION VORTICITIES IF LDZ
    -
    60 C> @param PP - REAL (*) STATION POTENTIALS IF LPS
    -
    61 C> @param SP - REAL (*) STATION STREAMFCNS IF LPS
    -
    62 C>
    -
    63 C> SUBPROGRAMS CALLED:
    -
    64 C> - SPWGET GET WAVE-SPACE CONSTANTS
    -
    65 C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    -
    66 C> - SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    -
    67 C> - SPTGPT TRANSFORM SPECTRAL SCALAR TO STATION POINTS
    -
    68 C> - SPTGPTV TRANSFORM SPECTRAL VECTOR TO STATION POINTS
    -
    69 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    -
    70 C>
    -
    71 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    -
    72 C> DIMENSION |LINEAR |QUADRATIC
    -
    73 C> ----------------------- |--------- |-------------
    -
    74 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    -
    75 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    -
    76 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    -
    77 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    -
    78 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    -
    79 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    -
    80 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    -
    81  SUBROUTINE sptrungv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
    -
    82  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    -
    83  & NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDUI,GRIDVI,
    -
    84  & LUV,UP,VP,LDZ,DP,ZP,LPS,PP,SP)
    -
    85 
    -
    86  LOGICAL LUV,LDZ,LPS
    -
    87  REAL RLAT(*),RLON(*),GRIDUI(*),GRIDVI(*)
    -
    88  REAL UP(*),VP(*),DP(*),ZP(*),PP(*),SP(*)
    -
    89  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    -
    90  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    91  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    92  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    -
    93  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    94  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    95 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    96 C TRANSFORM INPUT GRID TO WAVE
    -
    97  jc=jcpu
    -
    98  IF(jc.EQ.0) jc=ncpus()
    -
    99  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    100  mdim=2*mx+1
    -
    101  jn=-jskipi
    -
    102  IF(jn.EQ.0) jn=imaxi
    -
    103  js=-jn
    -
    104  inp=(jmaxi-1)*max(0,-jn)+1
    -
    105  isp=(jmaxi-1)*max(0,-js)+1
    -
    106  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    107  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    108  & wd,wz,
    -
    109  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    -
    110 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    111 C TRANSFORM WAVE TO OUTPUT WINDS
    -
    112  IF(luv) THEN
    -
    113  CALL sptgptv(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    -
    114  & rlat,rlon,wd,wz,up,vp)
    -
    115  ENDIF
    -
    116 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    117 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    -
    118  IF(ldz) THEN
    -
    119  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    -
    120  & rlat,rlon,wd,dp)
    -
    121  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    -
    122  & rlat,rlon,wz,zp)
    -
    123  ENDIF
    -
    124 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    125 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    -
    126  IF(lps) THEN
    -
    127  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    -
    128 C$OMP PARALLEL DO
    -
    129  DO k=1,kmax
    -
    130  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    -
    131  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    -
    132  wd(1:2,k)=0.
    -
    133  wz(1:2,k)=0.
    -
    134  ENDDO
    -
    135  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    -
    136  & rlat,rlon,wd,pp)
    -
    137  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    -
    138  & rlat,rlon,wz,sp)
    -
    139  ENDIF
    -
    140 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    141  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    -
    subroutine sptgpt(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition: sptgpt.f:51
    -
    subroutine sptgptv(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgptv.f:54
    -
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    -
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELD...
    Definition: sptrungv.f:85
    -
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +Go to the documentation of this file.
    1C> @file
    +
    2C>
    +
    3C> Spectrally interpolate vectors to stations
    +
    4C> @author IREDELL @date 96-02-29
    +
    5
    +
    6C> THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS
    +
    7C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS
    +
    8C> TO SPECIFIED SETS OF STATION POINTS ON THE GLOBE.
    +
    9C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    +
    10C> THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    +
    11C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    +
    12C> THE GRID AND POINT FIELDS MAY HAVE GENERAL INDEXING.
    +
    13C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    +
    14C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    +
    15C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    +
    16C>
    +
    17C> PROGRAM HISTORY LOG:
    +
    18C> - 96-02-29 IREDELL
    +
    19C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    20C>
    +
    21C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    22C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    23C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    24C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    25C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    26C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    27C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    28C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    29C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    30C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    31C> @param NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
    +
    32C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    33C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    34C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    35C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    36C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    37C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    38C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    39C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    40C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    41C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
    +
    42C> (DEFAULTS TO NMAX IF KGSKIP=0)
    +
    43C> @param NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
    +
    44C> (DEFAULTS TO 1 IF NRSKIP=0)
    +
    45C> @param NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
    +
    46C> (DEFAULTS TO 1 IF NGSKIP=0)
    +
    47C> @param RLAT - REAL (*) STATION LATITUDES IN DEGREES
    +
    48C> @param RLON - REAL (*) STATION LONGITUDES IN DEGREES
    +
    49C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    50C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    51C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    +
    52C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    +
    53C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    +
    54C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    +
    55C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    +
    56C> @param UP - REAL (*) STATION U-WINDS IF LUV
    +
    57C> @param VP - REAL (*) STATION V-WINDS IF LUV
    +
    58C> @param DP - REAL (*) STATION DIVERGENCES IF LDZ
    +
    59C> @param ZP - REAL (*) STATION VORTICITIES IF LDZ
    +
    60C> @param PP - REAL (*) STATION POTENTIALS IF LPS
    +
    61C> @param SP - REAL (*) STATION STREAMFCNS IF LPS
    +
    62C>
    +
    63C> SUBPROGRAMS CALLED:
    +
    64C> - SPWGET GET WAVE-SPACE CONSTANTS
    +
    65C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    66C> - SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    +
    67C> - SPTGPT TRANSFORM SPECTRAL SCALAR TO STATION POINTS
    +
    68C> - SPTGPTV TRANSFORM SPECTRAL VECTOR TO STATION POINTS
    +
    69C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    +
    70C>
    +
    71C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    72C> DIMENSION |LINEAR |QUADRATIC
    +
    73C> ----------------------- |--------- |-------------
    +
    74C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    75C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    76C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    77C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    78C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    79C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    80C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    +
    81 SUBROUTINE sptrungv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
    +
    82 & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    83 & NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDUI,GRIDVI,
    +
    84 & LUV,UP,VP,LDZ,DP,ZP,LPS,PP,SP)
    +
    85
    +
    86 LOGICAL LUV,LDZ,LPS
    +
    87 REAL RLAT(*),RLON(*),GRIDUI(*),GRIDVI(*)
    +
    88 REAL UP(*),VP(*),DP(*),ZP(*),PP(*),SP(*)
    +
    89 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    90 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    91 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    92 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    93 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    94 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    95C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    96C TRANSFORM INPUT GRID TO WAVE
    +
    97 jc=jcpu
    +
    98 IF(jc.EQ.0) jc=ncpus()
    +
    99 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    100 mdim=2*mx+1
    +
    101 jn=-jskipi
    +
    102 IF(jn.EQ.0) jn=imaxi
    +
    103 js=-jn
    +
    104 inp=(jmaxi-1)*max(0,-jn)+1
    +
    105 isp=(jmaxi-1)*max(0,-js)+1
    +
    106 CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    107 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    108 & wd,wz,
    +
    109 & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    110C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    111C TRANSFORM WAVE TO OUTPUT WINDS
    +
    112 IF(luv) THEN
    +
    113 CALL sptgptv(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    114 & rlat,rlon,wd,wz,up,vp)
    +
    115 ENDIF
    +
    116C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    117C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    118 IF(ldz) THEN
    +
    119 CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    120 & rlat,rlon,wd,dp)
    +
    121 CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    122 & rlat,rlon,wz,zp)
    +
    123 ENDIF
    +
    124C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    125C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    126 IF(lps) THEN
    +
    127 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    128C$OMP PARALLEL DO
    +
    129 DO k=1,kmax
    +
    130 CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    131 CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    132 wd(1:2,k)=0.
    +
    133 wz(1:2,k)=0.
    +
    134 ENDDO
    +
    135 CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    136 & rlat,rlon,wd,pp)
    +
    137 CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    138 & rlat,rlon,wz,sp)
    +
    139 ENDIF
    +
    140C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    +
    141 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine splaplac(i, m, enn1, q, qd2, idir)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition splaplac.f:25
    +
    subroutine sptgpt(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, wave, gp)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition sptgpt.f:51
    +
    subroutine sptgptv(iromb, maxwv, kmax, nmax, kwskip, kgskip, nrskip, ngskip, rlat, rlon, waved, wavez, up, vp)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition sptgptv.f:54
    +
    subroutine sptranv(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition sptranv.f:91
    +
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELD...
    Definition sptrungv.f:85
    +
    subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
    This subprogram gets wave-space constants.
    Definition spwget.f:18
    diff --git a/sptrunl_8f.html b/sptrunl_8f.html index 26b7b2c6..22fdae2f 100644 --- a/sptrunl_8f.html +++ b/sptrunl_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunl.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    sptrunl.f File Reference
    +
    sptrunl.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine sptrunl (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, IDIR, GRIDI, GRIDO)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPLACIAN OR INVERSE TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID. More...
     
    subroutine sptrunl (iromb, maxwv, idrti, imaxi, jmaxi, idrto, imaxo, jmaxo, kmax, iprime, iskipi, jskipi, kskipi, iskipo, jskipo, kskipo, jcpu, idir, gridi, grido)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPLACIAN OR INVERSE TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
     

    Detailed Description

    Spectrally truncate to laplacian.

    @@ -107,8 +113,8 @@

    Definition in file sptrunl.f.

    Function/Subroutine Documentation

    - -

    ◆ sptrunl()

    + +

    ◆ sptrunl()

    @@ -309,7 +315,7 @@

    diff --git a/sptrunl_8f.js b/sptrunl_8f.js index 892c4e7f..a639146b 100644 --- a/sptrunl_8f.js +++ b/sptrunl_8f.js @@ -1,4 +1,4 @@ var sptrunl_8f = [ - [ "sptrunl", "sptrunl_8f.html#a52c4250d24e52304e49aa1d82a93bdb8", null ] + [ "sptrunl", "sptrunl_8f.html#a4782dd6e787b07311f93f4d07d2d6239", null ] ]; \ No newline at end of file diff --git a/sptrunl_8f_source.html b/sptrunl_8f_source.html index fafc43c1..b5b7562a 100644 --- a/sptrunl_8f_source.html +++ b/sptrunl_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunl.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,143 +81,151 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptrunl.f
    +
    sptrunl.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C>
    -
    3 C> Spectrally truncate to laplacian
    -
    4 C> @author IREDELL @date 96-02-29
    -
    5 
    -
    6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS
    -
    7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPLACIAN
    -
    8 C> OR INVERSE TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
    -
    9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    -
    10 C> EITHER GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    -
    11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    -
    12 C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
    -
    13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    -
    14 C> OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY.
    -
    15 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    -
    16 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    -
    17 C>
    -
    18 C> PROGRAM HISTORY LOG:
    -
    19 C> - 96-02-29 IREDELL
    -
    20 C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    -
    21 C>
    -
    22 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    -
    23 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    -
    24 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    -
    25 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    -
    26 C> (IDRTI=4 FOR GAUSSIAN GRID,
    -
    27 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    28 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    29 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    -
    30 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    -
    31 C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
    -
    32 C> (IDRTO=4 FOR GAUSSIAN GRID,
    -
    33 C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    34 C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    35 C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
    -
    36 C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
    -
    37 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    -
    38 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    -
    39 C> (DEFAULTS TO 1 IF IPRIME=0)
    -
    40 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    -
    41 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    -
    42 C> (DEFAULTS TO 1 IF ISKIPI=0)
    -
    43 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    -
    44 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    -
    45 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    -
    46 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    -
    47 C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
    -
    48 C> (DEFAULTS TO 1 IF ISKIPO=0)
    -
    49 C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
    -
    50 C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
    -
    51 C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
    -
    52 C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
    -
    53 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    -
    54 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    -
    55 C> @param IDIR - INTEGER FLAG
    -
    56 C> IDIR > 0 TO TAKE LAPLACIAN
    -
    57 C> IDIR < 0 TO TAKE INVERSE LAPLACIAN
    -
    58 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    -
    59 C> @param GRIDO - REAL (*) OUTPUT GRID FIELDS
    -
    60 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    -
    61 C>
    -
    62 C> SUBPROGRAMS CALLED:
    -
    63 C> - SPWGET GET WAVE-SPACE CONSTANTS
    -
    64 C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    -
    65 C> - SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
    -
    66 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    -
    67 C>
    -
    68 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    -
    69 C> DIMENSION |LINEAR |QUADRATIC
    -
    70 C> ----------------------- |--------- |-------------
    -
    71 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    -
    72 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    -
    73 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    -
    74 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    -
    75 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    -
    76 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    -
    77 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    -
    78  SUBROUTINE sptrunl(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
    -
    79  & IDRTO,IMAXO,JMAXO,KMAX,
    -
    80  & IPRIME,ISKIPI,JSKIPI,KSKIPI,
    -
    81  & ISKIPO,JSKIPO,KSKIPO,JCPU,IDIR,GRIDI,GRIDO)
    -
    82 
    -
    83  REAL GRIDI(*),GRIDO(*)
    -
    84  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    -
    85  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    86  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    87  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    -
    88  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    89 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    90 C TRANSFORM INPUT GRID TO WAVE
    -
    91  jc=jcpu
    -
    92  IF(jc.EQ.0) jc=ncpus()
    -
    93  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    94  mdim=2*mx+1
    -
    95  jn=-jskipi
    -
    96  IF(jn.EQ.0) jn=imaxi
    -
    97  js=-jn
    -
    98  inp=(jmaxi-1)*max(0,-jn)+1
    -
    99  isp=(jmaxi-1)*max(0,-js)+1
    -
    100  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    101  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    102  & w,gridi(inp),gridi(isp),-1)
    -
    103 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    104 C TAKE LAPLACIAN AND TRANSFORM WAVE TO OUTPUT GRID
    -
    105  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    -
    106 C$OMP PARALLEL DO
    -
    107  DO k=1,kmax
    -
    108  CALL splaplac(iromb,maxwv,enn1,w(1,k),w(1,k),idir)
    -
    109  w(1:2,k)=0.
    -
    110  ENDDO
    -
    111  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    -
    112  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    -
    113  & w,grido(inp),grido(isp),1)
    -
    114 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    115  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    -
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    -
    subroutine sptrunl(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, IDIR, GRIDI, GRIDO)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPL...
    Definition: sptrunl.f:82
    -
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +Go to the documentation of this file.
    1C> @file
    +
    2C>
    +
    3C> Spectrally truncate to laplacian
    +
    4C> @author IREDELL @date 96-02-29
    +
    5
    +
    6C> THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS
    +
    7C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPLACIAN
    +
    8C> OR INVERSE TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
    +
    9C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    +
    10C> EITHER GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    +
    11C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    +
    12C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
    +
    13C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    +
    14C> OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY.
    +
    15C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    +
    16C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    +
    17C>
    +
    18C> PROGRAM HISTORY LOG:
    +
    19C> - 96-02-29 IREDELL
    +
    20C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    21C>
    +
    22C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    23C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    24C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    25C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    26C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    27C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    28C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    29C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    30C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    31C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
    +
    32C> (IDRTO=4 FOR GAUSSIAN GRID,
    +
    33C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    34C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    35C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
    +
    36C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
    +
    37C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    38C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    39C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    40C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    41C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    42C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    43C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    44C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    45C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    46C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    47C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
    +
    48C> (DEFAULTS TO 1 IF ISKIPO=0)
    +
    49C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
    +
    50C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
    +
    51C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
    +
    52C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
    +
    53C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    54C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    55C> @param IDIR - INTEGER FLAG
    +
    56C> IDIR > 0 TO TAKE LAPLACIAN
    +
    57C> IDIR < 0 TO TAKE INVERSE LAPLACIAN
    +
    58C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    59C> @param GRIDO - REAL (*) OUTPUT GRID FIELDS
    +
    60C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    61C>
    +
    62C> SUBPROGRAMS CALLED:
    +
    63C> - SPWGET GET WAVE-SPACE CONSTANTS
    +
    64C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    65C> - SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
    +
    66C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    +
    67C>
    +
    68C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    69C> DIMENSION |LINEAR |QUADRATIC
    +
    70C> ----------------------- |--------- |-------------
    +
    71C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    72C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    73C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    74C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    75C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    76C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    77C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    +
    78 SUBROUTINE sptrunl(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
    +
    79 & IDRTO,IMAXO,JMAXO,KMAX,
    +
    80 & IPRIME,ISKIPI,JSKIPI,KSKIPI,
    +
    81 & ISKIPO,JSKIPO,KSKIPO,JCPU,IDIR,GRIDI,GRIDO)
    +
    82
    +
    83 REAL GRIDI(*),GRIDO(*)
    +
    84 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    85 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    86 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    87 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    88 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    89C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    90C TRANSFORM INPUT GRID TO WAVE
    +
    91 jc=jcpu
    +
    92 IF(jc.EQ.0) jc=ncpus()
    +
    93 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    94 mdim=2*mx+1
    +
    95 jn=-jskipi
    +
    96 IF(jn.EQ.0) jn=imaxi
    +
    97 js=-jn
    +
    98 inp=(jmaxi-1)*max(0,-jn)+1
    +
    99 isp=(jmaxi-1)*max(0,-js)+1
    +
    100 CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    101 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    102 & w,gridi(inp),gridi(isp),-1)
    +
    103C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    104C TAKE LAPLACIAN AND TRANSFORM WAVE TO OUTPUT GRID
    +
    105 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    106C$OMP PARALLEL DO
    +
    107 DO k=1,kmax
    +
    108 CALL splaplac(iromb,maxwv,enn1,w(1,k),w(1,k),idir)
    +
    109 w(1:2,k)=0.
    +
    110 ENDDO
    +
    111 CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    112 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    113 & w,grido(inp),grido(isp),1)
    +
    114C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    +
    115 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine splaplac(i, m, enn1, q, qd2, idir)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition splaplac.f:25
    +
    subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition sptran.f:88
    +
    subroutine sptrunl(iromb, maxwv, idrti, imaxi, jmaxi, idrto, imaxo, jmaxo, kmax, iprime, iskipi, jskipi, kskipi, iskipo, jskipo, kskipo, jcpu, idir, gridi, grido)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPL...
    Definition sptrunl.f:82
    +
    subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
    This subprogram gets wave-space constants.
    Definition spwget.f:18
    diff --git a/sptrunm_8f.html b/sptrunm_8f.html index 1e62005e..0128eebf 100644 --- a/sptrunm_8f.html +++ b/sptrunm_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunm.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    sptrunm.f File Reference
    +
    sptrunm.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine sptrunm (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, MI, MJ, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, RLAT1, RLON1, DLAT, DLON, GRIDI, GM)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to a Mercator grid. More...
     
    subroutine sptrunm (iromb, maxwv, idrti, imaxi, jmaxi, kmax, mi, mj, iprime, iskipi, jskipi, kskipi, kgskip, niskip, njskip, jcpu, rlat1, rlon1, dlat, dlon, gridi, gm)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to a Mercator grid.
     

    Detailed Description

    Spectrally interpolate scalars to Mercator.

    @@ -107,8 +113,8 @@

    Definition in file sptrunm.f.

    Function/Subroutine Documentation

    - -

    ◆ sptrunm()

    + +

    ◆ sptrunm()

    @@ -117,133 +123,133 @@

    subroutine sptrunm (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRTI, + idrti,   - IMAXI, + imaxi,   - JMAXI, + jmaxi,   - KMAX, + kmax,   - MI, + mi,   - MJ, + mj,   - IPRIME, + iprime,   - ISKIPI, + iskipi,   - JSKIPI, + jskipi,   - KSKIPI, + kskipi,   - KGSKIP, + kgskip,   - NISKIP, + niskip,   - NJSKIP, + njskip,   - JCPU, + jcpu,   - RLAT1, + rlat1,   - RLON1, + rlon1,   - DLAT, + dlat,   - DLON, + dlon, real, dimension(*)  - GRIDI, + gridi, real, dimension(*)  - GM  + gm  @@ -283,8 +289,8 @@

    sptran() Perform a scalar spherical transform -
  • sptgpm() Transform spectral scalar to Mercator
  • +
  • sptran() Perform a scalar spherical transform
  • +
  • sptgpm() Transform spectral scalar to Mercator
  • ncpus() Gets environment number of cpus
  • MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:

    @@ -308,7 +314,7 @@

    Definition at line 76 of file sptrunm.f.

    -

    References ncpus(), sptgpm(), and sptran().

    +

    References ncpus(), sptgpm(), and sptran().

    Referenced by spectral_interp_mod::polates4::polates4_grib1(), and spectral_interp_mod::polates4::polates4_grib2().

    @@ -320,7 +326,7 @@

    diff --git a/sptrunm_8f.js b/sptrunm_8f.js index 285bd268..e0cb8bed 100644 --- a/sptrunm_8f.js +++ b/sptrunm_8f.js @@ -1,4 +1,4 @@ var sptrunm_8f = [ - [ "sptrunm", "sptrunm_8f.html#a2a4e579890d3cf7f6a26091f544b6cb6", null ] + [ "sptrunm", "sptrunm_8f.html#ae8204e04b20b7202a8abe429a66666de", null ] ]; \ No newline at end of file diff --git a/sptrunm_8f_source.html b/sptrunm_8f_source.html index 860840d6..749b55e5 100644 --- a/sptrunm_8f_source.html +++ b/sptrunm_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunm.f Source File @@ -23,10 +23,9 @@

    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0

    - + +/* @license-end */ + +
    @@ -76,128 +81,136 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptrunm.f
    +
    sptrunm.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C>
    -
    3 C> Spectrally interpolate scalars to Mercator
    -
    4 C> @author IREDELL @date 96-02-29
    -
    5 
    -
    6 C> This subprogram spectrally truncates scalar fields on a global
    -
    7 C> cylindrical grid, returning the fields to a Mercator grid. The
    -
    8 C> wave-space can be either triangular or rhomboidal. The grid-space
    -
    9 C> can be either an equally-spaced grid (with or without pole
    -
    10 C> points) or a Gaussian grid. The grid fields may have general
    -
    11 C> indexing. The transforms are all multiprocessed. Transform
    -
    12 C> several fields at a time to improve vectorization. Subprogram can
    -
    13 C> be called from a multiprocessing environment.
    -
    14 C>
    -
    15 C>
    -
    16 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    -
    17 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    -
    18 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    -
    19 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    -
    20 C> (IDRTI=4 FOR GAUSSIAN GRID,
    -
    21 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    22 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    23 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    -
    24 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    -
    25 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    -
    26 C> @param MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
    -
    27 C> @param MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
    -
    28 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    -
    29 C> (DEFAULTS TO 1 IF IPRIME=0)
    -
    30 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    -
    31 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    -
    32 C> (DEFAULTS TO 1 IF ISKIPI=0)
    -
    33 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    -
    34 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    -
    35 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    -
    36 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    -
    37 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    -
    38 C> (DEFAULTS TO NPS*NPS IF KGSKIP=0)
    -
    39 C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    -
    40 C> (DEFAULTS TO 1 IF NISKIP=0)
    -
    41 C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    -
    42 C> (DEFAULTS TO NPS IF NJSKIP=0)
    -
    43 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    -
    44 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    -
    45 C> @param RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
    -
    46 C> @param RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
    -
    47 C> @param DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
    -
    48 C> D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
    -
    49 C> DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
    -
    50 C> (IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
    -
    51 C> THE LATITUDE INCREMENT DLAT IS DETERMINED AS
    -
    52 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    -
    53 C> WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
    -
    54 C> @param DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
    -
    55 C> D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
    -
    56 C> DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
    -
    57 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    -
    58 C> @param GM - REAL (*) MERCATOR FIELDS
    -
    59 C>
    -
    60 C> SUBPROGRAMS CALLED:
    -
    61 C> - sptran() Perform a scalar spherical transform
    -
    62 C> - sptgpm() Transform spectral scalar to Mercator
    -
    63 C> - ncpus() Gets environment number of cpus
    -
    64 C>
    -
    65 C> MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    -
    66 C> DIMENSION |LINEAR |QUADRATIC
    -
    67 C> ----------------------- |--------- |-------------
    -
    68 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    -
    69 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    -
    70 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    -
    71 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    -
    72 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    -
    73 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    -
    74 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    -
    75 C>
    -
    76  SUBROUTINE sptrunm(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
    -
    77  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    -
    78  & NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
    -
    79  & GRIDI,GM)
    -
    80  REAL GRIDI(*),GM(*)
    -
    81  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    82 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    83 C TRANSFORM INPUT GRID TO WAVE
    -
    84  jc=jcpu
    -
    85  IF(jc.EQ.0) jc=ncpus()
    -
    86  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    87  mdim=2*mx+1
    -
    88  jn=-jskipi
    -
    89  IF(jn.EQ.0) jn=imaxi
    -
    90  js=-jn
    -
    91  inp=(jmaxi-1)*max(0,-jn)+1
    -
    92  isp=(jmaxi-1)*max(0,-js)+1
    -
    93  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    94  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    95  & w,gridi(inp),gridi(isp),-1)
    -
    96 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    97 C TRANSFORM WAVE TO OUTPUT
    -
    98  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    -
    99  & rlat1,rlon1,dlat,dlon,w,gm)
    -
    100 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    101  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine sptgpm(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgpm.f:56
    -
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    -
    subroutine sptrunm(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, MI, MJ, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, RLAT1, RLON1, DLAT, DLON, GRIDI, GM)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrunm.f:80
    +Go to the documentation of this file.
    1C> @file
    +
    2C>
    +
    3C> Spectrally interpolate scalars to Mercator
    +
    4C> @author IREDELL @date 96-02-29
    +
    5
    +
    6C> This subprogram spectrally truncates scalar fields on a global
    +
    7C> cylindrical grid, returning the fields to a Mercator grid. The
    +
    8C> wave-space can be either triangular or rhomboidal. The grid-space
    +
    9C> can be either an equally-spaced grid (with or without pole
    +
    10C> points) or a Gaussian grid. The grid fields may have general
    +
    11C> indexing. The transforms are all multiprocessed. Transform
    +
    12C> several fields at a time to improve vectorization. Subprogram can
    +
    13C> be called from a multiprocessing environment.
    +
    14C>
    +
    15C>
    +
    16C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    17C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    18C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    19C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    20C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    21C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    22C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    23C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    24C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    25C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    26C> @param MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
    +
    27C> @param MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
    +
    28C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    29C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    30C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    31C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    32C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    33C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    34C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    35C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    36C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    37C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    +
    38C> (DEFAULTS TO NPS*NPS IF KGSKIP=0)
    +
    39C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    +
    40C> (DEFAULTS TO 1 IF NISKIP=0)
    +
    41C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    +
    42C> (DEFAULTS TO NPS IF NJSKIP=0)
    +
    43C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    44C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    45C> @param RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    46C> @param RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    47C> @param DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
    +
    48C> D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
    +
    49C> DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
    +
    50C> (IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
    +
    51C> THE LATITUDE INCREMENT DLAT IS DETERMINED AS
    +
    52C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    +
    53C> WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
    +
    54C> @param DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
    +
    55C> D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
    +
    56C> DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
    +
    57C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    58C> @param GM - REAL (*) MERCATOR FIELDS
    +
    59C>
    +
    60C> SUBPROGRAMS CALLED:
    +
    61C> - sptran() Perform a scalar spherical transform
    +
    62C> - sptgpm() Transform spectral scalar to Mercator
    +
    63C> - ncpus() Gets environment number of cpus
    +
    64C>
    +
    65C> MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    66C> DIMENSION |LINEAR |QUADRATIC
    +
    67C> ----------------------- |--------- |-------------
    +
    68C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    69C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    70C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    71C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    72C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    73C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    74C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    75C>
    +
    +
    76 SUBROUTINE sptrunm(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
    +
    77 & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    78 & NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
    +
    79 & GRIDI,GM)
    +
    80 REAL GRIDI(*),GM(*)
    +
    81 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    82C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    83C TRANSFORM INPUT GRID TO WAVE
    +
    84 jc=jcpu
    +
    85 IF(jc.EQ.0) jc=ncpus()
    +
    86 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    87 mdim=2*mx+1
    +
    88 jn=-jskipi
    +
    89 IF(jn.EQ.0) jn=imaxi
    +
    90 js=-jn
    +
    91 inp=(jmaxi-1)*max(0,-jn)+1
    +
    92 isp=(jmaxi-1)*max(0,-js)+1
    +
    93 CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    94 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    95 & w,gridi(inp),gridi(isp),-1)
    +
    96C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    97C TRANSFORM WAVE TO OUTPUT
    +
    98 CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    99 & rlat1,rlon1,dlat,dlon,w,gm)
    +
    100C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    +
    101 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine sptgpm(iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, wave, gm)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition sptgpm.f:56
    +
    subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition sptran.f:88
    +
    subroutine sptrunm(iromb, maxwv, idrti, imaxi, jmaxi, kmax, mi, mj, iprime, iskipi, jskipi, kskipi, kgskip, niskip, njskip, jcpu, rlat1, rlon1, dlat, dlon, gridi, gm)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition sptrunm.f:80
    diff --git a/sptrunmv_8f.html b/sptrunmv_8f.html index 33407bf7..1a1c1223 100644 --- a/sptrunmv_8f.html +++ b/sptrunmv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunmv.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    sptrunmv.f File Reference
    +
    sptrunmv.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine 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)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS TO A MERCATOR GRID. More...
     
    subroutine 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)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS TO A MERCATOR GRID.
     

    Detailed Description

    Spectrally interpolate vectors to Mercator.

    @@ -107,8 +113,8 @@

    Definition in file sptrunmv.f.

    Function/Subroutine Documentation

    - -

    ◆ sptrunmv()

    + +

    ◆ sptrunmv()

    diff --git a/sptrunmv_8f.js b/sptrunmv_8f.js index 68c3d828..59e83ea2 100644 --- a/sptrunmv_8f.js +++ b/sptrunmv_8f.js @@ -1,4 +1,4 @@ var sptrunmv_8f = [ - [ "sptrunmv", "sptrunmv_8f.html#a8b405d0621112d6852a3bb99602ac2fd", null ] + [ "sptrunmv", "sptrunmv_8f.html#a41037888bc1641912a21d810df5d4d1c", null ] ]; \ No newline at end of file diff --git a/sptrunmv_8f_source.html b/sptrunmv_8f_source.html index ecd958df..67353318 100644 --- a/sptrunmv_8f_source.html +++ b/sptrunmv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunmv.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,182 +81,190 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptrunmv.f
    +
    sptrunmv.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C>
    -
    3 C> Spectrally interpolate vectors to Mercator
    -
    4 C> @author IREDELL @date 96-02-29
    -
    5 
    -
    6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS
    -
    7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS
    -
    8 C> TO A MERCATOR GRID.
    -
    9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    -
    10 C> THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    -
    11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    -
    12 C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
    -
    13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    -
    14 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    -
    15 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    -
    16 C>
    -
    17 C> PROGRAM HISTORY LOG:
    -
    18 C> 96-02-29 IREDELL
    -
    19 C> 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    -
    20 C>
    -
    21 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    -
    22 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    -
    23 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    -
    24 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    -
    25 C> (IDRTI=4 FOR GAUSSIAN GRID,
    -
    26 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    27 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    28 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    -
    29 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    -
    30 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    -
    31 C> @param MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
    -
    32 C> @param MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
    -
    33 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    -
    34 C> (DEFAULTS TO 1 IF IPRIME=0)
    -
    35 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    -
    36 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    -
    37 C> (DEFAULTS TO 1 IF ISKIPI=0)
    -
    38 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    -
    39 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    -
    40 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    -
    41 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    -
    42 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    -
    43 C> (DEFAULTS TO MI*MJ IF KGSKIP=0)
    -
    44 C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    -
    45 C> (DEFAULTS TO 1 IF NISKIP=0)
    -
    46 C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    -
    47 C> (DEFAULTS TO MI IF NJSKIP=0)
    -
    48 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    -
    49 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    -
    50 C> @param RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
    -
    51 C> @param RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
    -
    52 C> @param DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
    -
    53 C> D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
    -
    54 C> DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
    -
    55 C> (IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
    -
    56 C> THE LATITUDE INCREMENT DLAT IS DETERMINED AS
    -
    57 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    -
    58 C> WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
    -
    59 C> @param DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
    -
    60 C> D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
    -
    61 C> DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
    -
    62 C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    -
    63 C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    -
    64 C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    -
    65 C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    -
    66 C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    -
    67 C> @param UM - REAL (*) MERCATOR U-WINDS IF LUV
    -
    68 C> @param VM - REAL (*) MERCATOR V-WINDS IF LUV
    -
    69 C> @param DM - REAL (*) MERCATOR DIVERGENCES IF LDZ
    -
    70 C> @param ZM - REAL (*) MERCATOR VORTICITIES IF LDZ
    -
    71 C> @param PM - REAL (*) MERCATOR POTENTIALS IF LPS
    -
    72 C> @param SM - REAL (*) MERCATOR STREAMFCNS IF LPS
    -
    73 C>
    -
    74 C> SUBPROGRAMS CALLED:
    -
    75 C> - SPWGET GET WAVE-SPACE CONSTANTS
    -
    76 C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    -
    77 C> - SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    -
    78 C> - SPTGPM TRANSFORM SPECTRAL SCALAR TO MERCATOR
    -
    79 C> - SPTGPMV TRANSFORM SPECTRAL VECTOR TO MERCATOR
    -
    80 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    -
    81 C>
    -
    82 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    -
    83 C> DIMENSION |LINEAR |QUADRATIC
    -
    84 C> ----------------------- |--------- |-------------
    -
    85 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    -
    86 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    -
    87 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    -
    88 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    -
    89 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    -
    90 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    -
    91 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    -
    92  SUBROUTINE sptrunmv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
    -
    93  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    -
    94  & NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
    -
    95  & GRIDUI,GRIDVI,LUV,UM,VM,LDZ,DM,ZM,LPS,PM,SM)
    -
    96 
    -
    97  LOGICAL LUV,LDZ,LPS
    -
    98  REAL GRIDUI(*),GRIDVI(*)
    -
    99  REAL UM(*),VM(*),DM(*),ZM(*),PM(*),SM(*)
    -
    100  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    -
    101  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    102  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    103  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    -
    104  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    105  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    106 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    107 C TRANSFORM INPUT GRID TO WAVE
    -
    108  jc=jcpu
    -
    109  IF(jc.EQ.0) jc=ncpus()
    -
    110  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    111  mdim=2*mx+1
    -
    112  jn=-jskipi
    -
    113  IF(jn.EQ.0) jn=imaxi
    -
    114  js=-jn
    -
    115  inp=(jmaxi-1)*max(0,-jn)+1
    -
    116  isp=(jmaxi-1)*max(0,-js)+1
    -
    117  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    118  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    119  & wd,wz,
    -
    120  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    -
    121 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    122 C TRANSFORM WAVE TO OUTPUT WINDS
    -
    123  IF(luv) THEN
    -
    124  CALL sptgpmv(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    -
    125  & rlat1,rlon1,dlat,dlon,wd,wz,um,vm)
    -
    126  ENDIF
    -
    127 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    128 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    -
    129  IF(ldz) THEN
    -
    130  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    -
    131  & rlat1,rlon1,dlat,dlon,wd,dm)
    -
    132  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    -
    133  & rlat1,rlon1,dlat,dlon,wz,zm)
    -
    134  ENDIF
    -
    135 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    136 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    -
    137  IF(lps) THEN
    -
    138  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    -
    139 C$OMP PARALLEL DO
    -
    140  DO k=1,kmax
    -
    141  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    -
    142  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    -
    143  wd(1:2,k)=0.
    -
    144  wz(1:2,k)=0.
    -
    145  ENDDO
    -
    146  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    -
    147  & rlat1,rlon1,dlat,dlon,wd,pm)
    -
    148  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    -
    149  & rlat1,rlon1,dlat,dlon,wz,sm)
    -
    150  ENDIF
    -
    151 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    152  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    -
    subroutine sptgpm(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgpm.f:56
    -
    subroutine sptgpmv(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpmv.f:63
    -
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    -
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS...
    Definition: sptrunmv.f:96
    -
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +Go to the documentation of this file.
    1C> @file
    +
    2C>
    +
    3C> Spectrally interpolate vectors to Mercator
    +
    4C> @author IREDELL @date 96-02-29
    +
    5
    +
    6C> THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS
    +
    7C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS
    +
    8C> TO A MERCATOR GRID.
    +
    9C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    +
    10C> THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    +
    11C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    +
    12C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
    +
    13C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    +
    14C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    +
    15C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    +
    16C>
    +
    17C> PROGRAM HISTORY LOG:
    +
    18C> 96-02-29 IREDELL
    +
    19C> 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    20C>
    +
    21C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    22C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    23C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    24C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    25C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    26C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    27C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    28C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    29C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    30C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    31C> @param MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
    +
    32C> @param MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
    +
    33C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    34C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    35C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    36C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    37C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    38C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    39C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    40C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    41C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    42C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    +
    43C> (DEFAULTS TO MI*MJ IF KGSKIP=0)
    +
    44C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    +
    45C> (DEFAULTS TO 1 IF NISKIP=0)
    +
    46C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    +
    47C> (DEFAULTS TO MI IF NJSKIP=0)
    +
    48C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    49C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    50C> @param RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    51C> @param RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    52C> @param DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
    +
    53C> D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
    +
    54C> DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
    +
    55C> (IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
    +
    56C> THE LATITUDE INCREMENT DLAT IS DETERMINED AS
    +
    57C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    +
    58C> WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
    +
    59C> @param DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
    +
    60C> D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
    +
    61C> DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
    +
    62C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    +
    63C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    +
    64C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    +
    65C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    +
    66C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    +
    67C> @param UM - REAL (*) MERCATOR U-WINDS IF LUV
    +
    68C> @param VM - REAL (*) MERCATOR V-WINDS IF LUV
    +
    69C> @param DM - REAL (*) MERCATOR DIVERGENCES IF LDZ
    +
    70C> @param ZM - REAL (*) MERCATOR VORTICITIES IF LDZ
    +
    71C> @param PM - REAL (*) MERCATOR POTENTIALS IF LPS
    +
    72C> @param SM - REAL (*) MERCATOR STREAMFCNS IF LPS
    +
    73C>
    +
    74C> SUBPROGRAMS CALLED:
    +
    75C> - SPWGET GET WAVE-SPACE CONSTANTS
    +
    76C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    77C> - SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    +
    78C> - SPTGPM TRANSFORM SPECTRAL SCALAR TO MERCATOR
    +
    79C> - SPTGPMV TRANSFORM SPECTRAL VECTOR TO MERCATOR
    +
    80C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    +
    81C>
    +
    82C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    83C> DIMENSION |LINEAR |QUADRATIC
    +
    84C> ----------------------- |--------- |-------------
    +
    85C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    86C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    87C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    88C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    89C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    90C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    91C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    +
    92 SUBROUTINE sptrunmv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
    +
    93 & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    94 & NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
    +
    95 & GRIDUI,GRIDVI,LUV,UM,VM,LDZ,DM,ZM,LPS,PM,SM)
    +
    96
    +
    97 LOGICAL LUV,LDZ,LPS
    +
    98 REAL GRIDUI(*),GRIDVI(*)
    +
    99 REAL UM(*),VM(*),DM(*),ZM(*),PM(*),SM(*)
    +
    100 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    101 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    102 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    103 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    104 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    105 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    106C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    107C TRANSFORM INPUT GRID TO WAVE
    +
    108 jc=jcpu
    +
    109 IF(jc.EQ.0) jc=ncpus()
    +
    110 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    111 mdim=2*mx+1
    +
    112 jn=-jskipi
    +
    113 IF(jn.EQ.0) jn=imaxi
    +
    114 js=-jn
    +
    115 inp=(jmaxi-1)*max(0,-jn)+1
    +
    116 isp=(jmaxi-1)*max(0,-js)+1
    +
    117 CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    118 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    119 & wd,wz,
    +
    120 & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    121C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    122C TRANSFORM WAVE TO OUTPUT WINDS
    +
    123 IF(luv) THEN
    +
    124 CALL sptgpmv(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    125 & rlat1,rlon1,dlat,dlon,wd,wz,um,vm)
    +
    126 ENDIF
    +
    127C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    128C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    129 IF(ldz) THEN
    +
    130 CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    131 & rlat1,rlon1,dlat,dlon,wd,dm)
    +
    132 CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    133 & rlat1,rlon1,dlat,dlon,wz,zm)
    +
    134 ENDIF
    +
    135C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    136C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    137 IF(lps) THEN
    +
    138 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    139C$OMP PARALLEL DO
    +
    140 DO k=1,kmax
    +
    141 CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    142 CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    143 wd(1:2,k)=0.
    +
    144 wz(1:2,k)=0.
    +
    145 ENDDO
    +
    146 CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    147 & rlat1,rlon1,dlat,dlon,wd,pm)
    +
    148 CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    149 & rlat1,rlon1,dlat,dlon,wz,sm)
    +
    150 ENDIF
    +
    151C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    +
    152 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine splaplac(i, m, enn1, q, qd2, idir)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition splaplac.f:25
    +
    subroutine sptgpm(iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, wave, gm)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition sptgpm.f:56
    +
    subroutine sptgpmv(iromb, maxwv, kmax, mi, mj, kwskip, kgskip, niskip, njskip, rlat1, rlon1, dlat, dlon, waved, wavez, um, vm)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition sptgpmv.f:63
    +
    subroutine sptranv(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition sptranv.f:91
    +
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS...
    Definition sptrunmv.f:96
    +
    subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
    This subprogram gets wave-space constants.
    Definition spwget.f:18
    diff --git a/sptruns_8f.html b/sptruns_8f.html index 8491dd6d..5f24bf02 100644 --- a/sptruns_8f.html +++ b/sptruns_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptruns.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    sptruns.f File Reference
    +
    sptruns.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine sptruns (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NPS, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, TRUE, XMESH, ORIENT, GRIDI, GN, GS)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to specific pairs of polar stereographic scalar fields. More...
     
    subroutine sptruns (iromb, maxwv, idrti, imaxi, jmaxi, kmax, nps, iprime, iskipi, jskipi, kskipi, kgskip, niskip, njskip, jcpu, true, xmesh, orient, gridi, gn, gs)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to specific pairs of polar stereographic scalar fields.
     

    Detailed Description

    Spectrally interpolate scalars to polar stereo.

    @@ -107,8 +113,8 @@

    Definition in file sptruns.f.

    Function/Subroutine Documentation

    - -

    ◆ sptruns()

    + +

    ◆ sptruns()

    @@ -117,127 +123,127 @@

    subroutine sptruns (   - IROMB, + iromb,   - MAXWV, + maxwv,   - IDRTI, + idrti,   - IMAXI, + imaxi,   - JMAXI, + jmaxi,   - KMAX, + kmax,   - NPS, + nps,   - IPRIME, + iprime,   - ISKIPI, + iskipi,   - JSKIPI, + jskipi,   - KSKIPI, + kskipi,   - KGSKIP, + kgskip,   - NISKIP, + niskip,   - NJSKIP, + njskip,   - JCPU, + jcpu,   - TRUE, + true,   - XMESH, + xmesh,   - ORIENT, + orient, real, dimension(*)  - GRIDI, + gridi, real, dimension(*)  - GN, + gn, real, dimension(*)  - GS  + gs  @@ -277,8 +283,8 @@

    sptran() Perform a scalar spherical transform -
  • sptgps() Transform spectral scalar to polar stereo.
  • +
  • sptran() Perform a scalar spherical transform
  • +
  • sptgps() Transform spectral scalar to polar stereo.
  • ncpus() Gets environment number of cpus
  • Minimum grid dimensions for unaliased transforms to spectral:

    @@ -302,7 +308,7 @@

    Definition at line 71 of file sptruns.f.

    -

    References ncpus(), sptgps(), and sptran().

    +

    References ncpus(), sptgps(), and sptran().

    Referenced by spectral_interp_mod::polates4::polates4_grib1(), and spectral_interp_mod::polates4::polates4_grib2().

    @@ -314,7 +320,7 @@

    diff --git a/sptruns_8f.js b/sptruns_8f.js index cc546092..32d5b3a9 100644 --- a/sptruns_8f.js +++ b/sptruns_8f.js @@ -1,4 +1,4 @@ var sptruns_8f = [ - [ "sptruns", "sptruns_8f.html#a34f156e2049105d012e445f8aa215444", null ] + [ "sptruns", "sptruns_8f.html#aa9b383d3b480b774eaf56de03ca39339", null ] ]; \ No newline at end of file diff --git a/sptruns_8f_source.html b/sptruns_8f_source.html index 58997ed2..dda99f61 100644 --- a/sptruns_8f_source.html +++ b/sptruns_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptruns.f Source File @@ -23,10 +23,9 @@

    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0

    - + +/* @license-end */ + +
    @@ -76,123 +81,131 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptruns.f
    +
    sptruns.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C>
    -
    3 C> Spectrally interpolate scalars to polar stereo
    -
    4 C> @author IREDELL @date 96-02-29
    -
    5 
    -
    6 C> This subprogram spectrally truncates scalar fields on a global
    -
    7 C> cylindrical grid, returning the fields to specific pairs of polar
    -
    8 C> stereographic scalar fields. The wave-space can be either
    -
    9 C> triangular or rhomboidal. The grid-space can be either an
    -
    10 C> equally-spaced grid (with or without pole points) or a Gaussian
    -
    11 C> grid. The grid fields may have general indexing. The transforms
    -
    12 C> are all multiprocessed. Transform several fields at a time to
    -
    13 C> improve vectorization. Subprogram can be called from a
    -
    14 C> multiprocessing environment.
    -
    15 C>
    -
    16 C> PROGRAM HISTORY LOG:
    -
    17 C> 96-02-29 IREDELL
    -
    18 C>
    -
    19 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    -
    20 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    -
    21 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    -
    22 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    -
    23 C> (IDRTI=4 FOR GAUSSIAN GRID,
    -
    24 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    25 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    26 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    -
    27 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    -
    28 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    -
    29 C> @param NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
    -
    30 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    -
    31 C> (DEFAULTS TO 1 IF IPRIME=0)
    -
    32 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    -
    33 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    -
    34 C> (DEFAULTS TO 1 IF ISKIPI=0)
    -
    35 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    -
    36 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    -
    37 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    -
    38 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    -
    39 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    -
    40 C> (DEFAULTS TO NPS*NPS IF KGSKIP=0)
    -
    41 C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    -
    42 C> (DEFAULTS TO 1 IF NISKIP=0)
    -
    43 C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    -
    44 C> (DEFAULTS TO NPS IF NJSKIP=0)
    -
    45 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    -
    46 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    -
    47 C> @param TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
    -
    48 C> @param XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
    -
    49 C> @param ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
    -
    50 C> (SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
    -
    51 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    -
    52 C> @param GN - REAL (*) NORTHERN POLAR STEREOGRAPHIC FIELDS
    -
    53 C> @param GS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC FIELDS
    -
    54 C>
    -
    55 C> SUBPROGRAMS CALLED:
    -
    56 C> - sptran() Perform a scalar spherical transform
    -
    57 C> - sptgps() Transform spectral scalar to polar stereo.
    -
    58 C> - ncpus() Gets environment number of cpus
    -
    59 C>
    -
    60 C> Minimum grid dimensions for unaliased transforms to spectral:
    -
    61 C> DIMENSION | LINEAR | QUADRATIC
    -
    62 C> ----------------------- | --------- | -------------
    -
    63 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    -
    64 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    -
    65 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    -
    66 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    -
    67 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    -
    68 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    -
    69 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    -
    70 C>
    -
    71  SUBROUTINE sptruns(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
    -
    72  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    -
    73  & NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
    -
    74  & GRIDI,GN,GS)
    -
    75  REAL GRIDI(*),GN(*),GS(*)
    -
    76  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    77 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    78 C TRANSFORM INPUT GRID TO WAVE
    -
    79  jc=jcpu
    -
    80  IF(jc.EQ.0) jc=ncpus()
    -
    81  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    82  mdim=2*mx+1
    -
    83  jn=-jskipi
    -
    84  IF(jn.EQ.0) jn=imaxi
    -
    85  js=-jn
    -
    86  inp=(jmaxi-1)*max(0,-jn)+1
    -
    87  isp=(jmaxi-1)*max(0,-js)+1
    -
    88  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    89  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    90  & w,gridi(inp),gridi(isp),-1)
    -
    91 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    92 C TRANSFORM WAVE TO OUTPUT
    -
    93  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    -
    94  & true,xmesh,orient,w,gn,gs)
    -
    95 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    96  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine sptgps(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgps.f:81
    -
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    -
    subroutine sptruns(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NPS, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, TRUE, XMESH, ORIENT, GRIDI, GN, GS)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptruns.f:75
    +Go to the documentation of this file.
    1C> @file
    +
    2C>
    +
    3C> Spectrally interpolate scalars to polar stereo
    +
    4C> @author IREDELL @date 96-02-29
    +
    5
    +
    6C> This subprogram spectrally truncates scalar fields on a global
    +
    7C> cylindrical grid, returning the fields to specific pairs of polar
    +
    8C> stereographic scalar fields. The wave-space can be either
    +
    9C> triangular or rhomboidal. The grid-space can be either an
    +
    10C> equally-spaced grid (with or without pole points) or a Gaussian
    +
    11C> grid. The grid fields may have general indexing. The transforms
    +
    12C> are all multiprocessed. Transform several fields at a time to
    +
    13C> improve vectorization. Subprogram can be called from a
    +
    14C> multiprocessing environment.
    +
    15C>
    +
    16C> PROGRAM HISTORY LOG:
    +
    17C> 96-02-29 IREDELL
    +
    18C>
    +
    19C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    20C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    21C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    22C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    23C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    24C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    25C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    26C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    27C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    28C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    29C> @param NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
    +
    30C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    31C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    32C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    33C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    34C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    35C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    36C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    37C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    38C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    39C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    +
    40C> (DEFAULTS TO NPS*NPS IF KGSKIP=0)
    +
    41C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    +
    42C> (DEFAULTS TO 1 IF NISKIP=0)
    +
    43C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    +
    44C> (DEFAULTS TO NPS IF NJSKIP=0)
    +
    45C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    46C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    47C> @param TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
    +
    48C> @param XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
    +
    49C> @param ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
    +
    50C> (SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
    +
    51C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    52C> @param GN - REAL (*) NORTHERN POLAR STEREOGRAPHIC FIELDS
    +
    53C> @param GS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC FIELDS
    +
    54C>
    +
    55C> SUBPROGRAMS CALLED:
    +
    56C> - sptran() Perform a scalar spherical transform
    +
    57C> - sptgps() Transform spectral scalar to polar stereo.
    +
    58C> - ncpus() Gets environment number of cpus
    +
    59C>
    +
    60C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    61C> DIMENSION | LINEAR | QUADRATIC
    +
    62C> ----------------------- | --------- | -------------
    +
    63C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    64C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    65C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    66C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    67C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    68C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    69C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    70C>
    +
    +
    71 SUBROUTINE sptruns(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
    +
    72 & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    73 & NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
    +
    74 & GRIDI,GN,GS)
    +
    75 REAL GRIDI(*),GN(*),GS(*)
    +
    76 REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    77C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    78C TRANSFORM INPUT GRID TO WAVE
    +
    79 jc=jcpu
    +
    80 IF(jc.EQ.0) jc=ncpus()
    +
    81 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    82 mdim=2*mx+1
    +
    83 jn=-jskipi
    +
    84 IF(jn.EQ.0) jn=imaxi
    +
    85 js=-jn
    +
    86 inp=(jmaxi-1)*max(0,-jn)+1
    +
    87 isp=(jmaxi-1)*max(0,-js)+1
    +
    88 CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    89 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    90 & w,gridi(inp),gridi(isp),-1)
    +
    91C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    92C TRANSFORM WAVE TO OUTPUT
    +
    93 CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    94 & true,xmesh,orient,w,gn,gs)
    +
    95C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    +
    96 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine sptgps(iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, wave, gn, gs)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition sptgps.f:81
    +
    subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition sptran.f:88
    +
    subroutine sptruns(iromb, maxwv, idrti, imaxi, jmaxi, kmax, nps, iprime, iskipi, jskipi, kskipi, kgskip, niskip, njskip, jcpu, true, xmesh, orient, gridi, gn, gs)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition sptruns.f:75
    diff --git a/sptrunsv_8f.html b/sptrunsv_8f.html index eada62f8..7deae4b5 100644 --- a/sptrunsv_8f.html +++ b/sptrunsv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunsv.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    sptrunsv.f File Reference
    +
    sptrunsv.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine 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)
     This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields to specific pairs of polar stereographic scalar fields. More...
     
    subroutine 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)
     This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields to specific pairs of polar stereographic scalar fields.
     

    Detailed Description

    Spectrally interpolate vectors to polar stereo.

    @@ -108,8 +114,8 @@

    Definition in file sptrunsv.f.

    Function/Subroutine Documentation

    - -

    ◆ sptrunsv()

    + +

    ◆ sptrunsv()

    diff --git a/sptrunsv_8f.js b/sptrunsv_8f.js index af10490c..fac923d4 100644 --- a/sptrunsv_8f.js +++ b/sptrunsv_8f.js @@ -1,4 +1,4 @@ var sptrunsv_8f = [ - [ "sptrunsv", "sptrunsv_8f.html#a1373b651b9dea586e33d3033aae68656", null ] + [ "sptrunsv", "sptrunsv_8f.html#ac9ab3491104aebec37d502d077213991", null ] ]; \ No newline at end of file diff --git a/sptrunsv_8f_source.html b/sptrunsv_8f_source.html index c3298aa7..4a5fdb25 100644 --- a/sptrunsv_8f_source.html +++ b/sptrunsv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunsv.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,179 +81,187 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptrunsv.f
    +
    sptrunsv.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C> @brief Spectrally interpolate vectors to polar stereo.
    -
    3 C>
    -
    4 C> 96-02-29 | Iredell | Initial.
    -
    5 C> 1998-12-15 | Iredell | Openmp directives inserted.
    -
    6 C>
    -
    7 C> @author Iredell @date 96-02-29
    -
    8 
    -
    9 C> This subprogram spectrally truncates vector fields
    -
    10 C> on a global cylindrical grid, returning the fields
    -
    11 C> to specific pairs of polar stereographic scalar fields.
    -
    12 C>
    -
    13 C> The wave-space can be either triangular or rhomboidal.
    -
    14 C>
    -
    15 C> The grid-space can be either an equally-spaced grid
    -
    16 C> (with or without pole points) or a gaussian grid.
    -
    17 C>
    -
    18 C> The grid fields may have general indexing.
    -
    19 C>
    -
    20 C> The transforms are all multiprocessed.
    -
    21 C>
    -
    22 C> Transform several fields at a time to improve vectorization.
    -
    23 C>
    -
    24 C> Subprogram can be called from a multiprocessing environment.
    -
    25 C>
    -
    26 C> Minimum grid dimensions for unaliased transforms to spectral:
    -
    27 C> Dimension |Linear |Quadratic
    -
    28 C> ----------------------- |--------- |-------------
    -
    29 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    -
    30 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    -
    31 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    -
    32 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    -
    33 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    -
    34 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    -
    35 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    -
    36 C>
    -
    37 C> @param IROMB integer spectral domain shape
    -
    38 C> (0 for triangular, 1 for rhomboidal)
    -
    39 C> @param MAXWV integer spectral truncation
    -
    40 C> @param IDRTI integer input grid identifier
    -
    41 C> - IDRTI=4 for Gaussian grid
    -
    42 C> - IDRTI=0 for equally-spaced grid including poles
    -
    43 C> - IDRTI=256 for equally-spaced grid excluding poles
    -
    44 C> @param IMAXI integer even number of input longitudes.
    -
    45 C> @param JMAXI integer number of input latitudes.
    -
    46 C> @param KMAX integer number of fields to transform.
    -
    47 C> @param NPS integer odd order of the polar stereographic grids
    -
    48 C> @param IPRIME integer input longitude index for the prime meridian.
    -
    49 C> (defaults to 1 if IPRIME=0)
    -
    50 C> (output longitude index for prime meridian assumed 1.)
    -
    51 C> @param ISKIPI integer skip number between input longitudes
    -
    52 C> (defaults to 1 if ISKIPI=0)
    -
    53 C> @param JSKIPI integer skip number between input latitudes from south
    -
    54 C> (defaults to -IMAXI if JSKIPI=0)
    -
    55 C> @param KSKIPI integer skip number between input grid fields
    -
    56 C> (defaults to IMAXI*JMAXI if KSKIPI=0)
    -
    57 C> @param KGSKIP integer skip number between grid fields
    -
    58 C> (defaults to NPS*NPS if KGSKIP=0)
    -
    59 C> @param NISKIP integer skip number between grid i-points
    -
    60 C> (defaults to 1 if NISKIP=0)
    -
    61 C> @param NJSKIP integer skip number between grid j-points
    -
    62 C> (defaults to NPS if NJSKIP=0)
    -
    63 C> @param JCPU integer number of cpus over which to multiprocess
    -
    64 C> (defaults to environment NCPUS if JCPU=0)
    -
    65 C> @param TRUE real latitude at which ps grid is true (usually 60.)
    -
    66 C> @param XMESH real grid length at true latitude (m)
    -
    67 C> @param ORIENT real longitude at bottom of Northern PS grid
    -
    68 C> (Southern PS grid will have opposite orientation.)
    -
    69 C> @param GRIDUI real input grid u-winds
    -
    70 C> @param GRIDVI real input grid v-winds
    -
    71 C> @param LUV logical flag whether to return winds
    -
    72 C> @param LDZ logical flag whether to return divergence and vorticity
    -
    73 C> @param LPS logical flag whether to return potential and streamfcn
    -
    74 C> @param UN real northern ps u-winds if luv
    -
    75 C> @param VN real northern ps v-winds if luv
    -
    76 C> @param US real southern ps u-winds if luv
    -
    77 C> @param VS real southern ps v-winds if luv
    -
    78 C> @param DN real northern divergences if ldz
    -
    79 C> @param ZN real northern vorticities if ldz
    -
    80 C> @param DS real southern divergences if ldz
    -
    81 C> @param ZS real southern vorticities if ldz
    -
    82 C> @param PN real northern potentials if lps
    -
    83 C> @param SN real northern streamfcns if lps
    -
    84 C> @param PS real southern potentials if lps
    -
    85 C> @param SS real southern streamfcns if lps
    -
    86 C>
    -
    87 C> @author Iredell @date 96-02-29
    -
    88  SUBROUTINE sptrunsv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
    -
    89  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    -
    90  & NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
    -
    91  & GRIDUI,GRIDVI,
    -
    92  & LUV,UN,VN,US,VS,LDZ,DN,ZN,DS,ZS,
    -
    93  & LPS,PN,SN,PS,SS)
    -
    94  LOGICAL LUV,LDZ,LPS
    -
    95  REAL GRIDUI(*),GRIDVI(*)
    -
    96  REAL UN(*),VN(*),US(*),VS(*),DN(*),ZN(*),DS(*),ZS(*)
    -
    97  REAL PN(*),SN(*),PS(*),SS(*)
    -
    98  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    -
    99  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    100  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    101  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    -
    102  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    103  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    104 
    -
    105 C TRANSFORM INPUT GRID TO WAVE
    -
    106  jc=jcpu
    -
    107  IF(jc.EQ.0) jc=ncpus()
    -
    108  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    109  mdim=2*mx+1
    -
    110  jn=-jskipi
    -
    111  IF(jn.EQ.0) jn=imaxi
    -
    112  js=-jn
    -
    113  inp=(jmaxi-1)*max(0,-jn)+1
    -
    114  isp=(jmaxi-1)*max(0,-js)+1
    -
    115  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    116  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    117  & wd,wz,
    -
    118  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    -
    119 
    -
    120 C TRANSFORM WAVE TO OUTPUT WINDS
    -
    121  IF(luv) THEN
    -
    122  CALL sptgpsv(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    -
    123  & true,xmesh,orient,wd,wz,un,vn,us,vs)
    -
    124  ENDIF
    -
    125 
    -
    126 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    -
    127  IF(ldz) THEN
    -
    128  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    -
    129  & true,xmesh,orient,wd,dn,ds)
    -
    130  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    -
    131  & true,xmesh,orient,wz,zn,zs)
    -
    132  ENDIF
    -
    133 
    -
    134 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    -
    135  IF(lps) THEN
    -
    136  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    -
    137 C$OMP PARALLEL DO
    -
    138  DO k=1,kmax
    -
    139  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    -
    140  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    -
    141  wd(1:2,k)=0.
    -
    142  wz(1:2,k)=0.
    -
    143  ENDDO
    -
    144  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    -
    145  & true,xmesh,orient,wd,pn,ps)
    -
    146  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    -
    147  & true,xmesh,orient,wz,sn,ss)
    -
    148  ENDIF
    -
    149  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    -
    subroutine sptgps(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgps.f:81
    -
    subroutine sptgpsv(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpsv.f:83
    -
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    -
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunsv.f:94
    -
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +Go to the documentation of this file.
    1C> @file
    +
    2C> @brief Spectrally interpolate vectors to polar stereo.
    +
    3C>
    +
    4C> 96-02-29 | Iredell | Initial.
    +
    5C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    6C>
    +
    7C> @author Iredell @date 96-02-29
    +
    8
    +
    9C> This subprogram spectrally truncates vector fields
    +
    10C> on a global cylindrical grid, returning the fields
    +
    11C> to specific pairs of polar stereographic scalar fields.
    +
    12C>
    +
    13C> The wave-space can be either triangular or rhomboidal.
    +
    14C>
    +
    15C> The grid-space can be either an equally-spaced grid
    +
    16C> (with or without pole points) or a gaussian grid.
    +
    17C>
    +
    18C> The grid fields may have general indexing.
    +
    19C>
    +
    20C> The transforms are all multiprocessed.
    +
    21C>
    +
    22C> Transform several fields at a time to improve vectorization.
    +
    23C>
    +
    24C> Subprogram can be called from a multiprocessing environment.
    +
    25C>
    +
    26C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    27C> Dimension |Linear |Quadratic
    +
    28C> ----------------------- |--------- |-------------
    +
    29C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    30C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    31C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    32C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    33C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    34C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    35C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    36C>
    +
    37C> @param IROMB integer spectral domain shape
    +
    38C> (0 for triangular, 1 for rhomboidal)
    +
    39C> @param MAXWV integer spectral truncation
    +
    40C> @param IDRTI integer input grid identifier
    +
    41C> - IDRTI=4 for Gaussian grid
    +
    42C> - IDRTI=0 for equally-spaced grid including poles
    +
    43C> - IDRTI=256 for equally-spaced grid excluding poles
    +
    44C> @param IMAXI integer even number of input longitudes.
    +
    45C> @param JMAXI integer number of input latitudes.
    +
    46C> @param KMAX integer number of fields to transform.
    +
    47C> @param NPS integer odd order of the polar stereographic grids
    +
    48C> @param IPRIME integer input longitude index for the prime meridian.
    +
    49C> (defaults to 1 if IPRIME=0)
    +
    50C> (output longitude index for prime meridian assumed 1.)
    +
    51C> @param ISKIPI integer skip number between input longitudes
    +
    52C> (defaults to 1 if ISKIPI=0)
    +
    53C> @param JSKIPI integer skip number between input latitudes from south
    +
    54C> (defaults to -IMAXI if JSKIPI=0)
    +
    55C> @param KSKIPI integer skip number between input grid fields
    +
    56C> (defaults to IMAXI*JMAXI if KSKIPI=0)
    +
    57C> @param KGSKIP integer skip number between grid fields
    +
    58C> (defaults to NPS*NPS if KGSKIP=0)
    +
    59C> @param NISKIP integer skip number between grid i-points
    +
    60C> (defaults to 1 if NISKIP=0)
    +
    61C> @param NJSKIP integer skip number between grid j-points
    +
    62C> (defaults to NPS if NJSKIP=0)
    +
    63C> @param JCPU integer number of cpus over which to multiprocess
    +
    64C> (defaults to environment NCPUS if JCPU=0)
    +
    65C> @param TRUE real latitude at which ps grid is true (usually 60.)
    +
    66C> @param XMESH real grid length at true latitude (m)
    +
    67C> @param ORIENT real longitude at bottom of Northern PS grid
    +
    68C> (Southern PS grid will have opposite orientation.)
    +
    69C> @param GRIDUI real input grid u-winds
    +
    70C> @param GRIDVI real input grid v-winds
    +
    71C> @param LUV logical flag whether to return winds
    +
    72C> @param LDZ logical flag whether to return divergence and vorticity
    +
    73C> @param LPS logical flag whether to return potential and streamfcn
    +
    74C> @param UN real northern ps u-winds if luv
    +
    75C> @param VN real northern ps v-winds if luv
    +
    76C> @param US real southern ps u-winds if luv
    +
    77C> @param VS real southern ps v-winds if luv
    +
    78C> @param DN real northern divergences if ldz
    +
    79C> @param ZN real northern vorticities if ldz
    +
    80C> @param DS real southern divergences if ldz
    +
    81C> @param ZS real southern vorticities if ldz
    +
    82C> @param PN real northern potentials if lps
    +
    83C> @param SN real northern streamfcns if lps
    +
    84C> @param PS real southern potentials if lps
    +
    85C> @param SS real southern streamfcns if lps
    +
    86C>
    +
    87C> @author Iredell @date 96-02-29
    +
    +
    88 SUBROUTINE sptrunsv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
    +
    89 & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    90 & NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
    +
    91 & GRIDUI,GRIDVI,
    +
    92 & LUV,UN,VN,US,VS,LDZ,DN,ZN,DS,ZS,
    +
    93 & LPS,PN,SN,PS,SS)
    +
    94 LOGICAL LUV,LDZ,LPS
    +
    95 REAL GRIDUI(*),GRIDVI(*)
    +
    96 REAL UN(*),VN(*),US(*),VS(*),DN(*),ZN(*),DS(*),ZS(*)
    +
    97 REAL PN(*),SN(*),PS(*),SS(*)
    +
    98 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    99 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    100 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    101 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    102 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    103 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    104
    +
    105C TRANSFORM INPUT GRID TO WAVE
    +
    106 jc=jcpu
    +
    107 IF(jc.EQ.0) jc=ncpus()
    +
    108 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    109 mdim=2*mx+1
    +
    110 jn=-jskipi
    +
    111 IF(jn.EQ.0) jn=imaxi
    +
    112 js=-jn
    +
    113 inp=(jmaxi-1)*max(0,-jn)+1
    +
    114 isp=(jmaxi-1)*max(0,-js)+1
    +
    115 CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    116 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    117 & wd,wz,
    +
    118 & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    119
    +
    120C TRANSFORM WAVE TO OUTPUT WINDS
    +
    121 IF(luv) THEN
    +
    122 CALL sptgpsv(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    123 & true,xmesh,orient,wd,wz,un,vn,us,vs)
    +
    124 ENDIF
    +
    125
    +
    126C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    127 IF(ldz) THEN
    +
    128 CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    129 & true,xmesh,orient,wd,dn,ds)
    +
    130 CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    131 & true,xmesh,orient,wz,zn,zs)
    +
    132 ENDIF
    +
    133
    +
    134C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    135 IF(lps) THEN
    +
    136 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    137C$OMP PARALLEL DO
    +
    138 DO k=1,kmax
    +
    139 CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    140 CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    141 wd(1:2,k)=0.
    +
    142 wz(1:2,k)=0.
    +
    143 ENDDO
    +
    144 CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    145 & true,xmesh,orient,wd,pn,ps)
    +
    146 CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    147 & true,xmesh,orient,wz,sn,ss)
    +
    148 ENDIF
    +
    +
    149 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine splaplac(i, m, enn1, q, qd2, idir)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition splaplac.f:25
    +
    subroutine sptgps(iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, wave, gn, gs)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition sptgps.f:81
    +
    subroutine sptgpsv(iromb, maxwv, kmax, nps, kwskip, kgskip, niskip, njskip, true, xmesh, orient, waved, wavez, un, vn, us, vs)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition sptgpsv.f:83
    +
    subroutine sptranv(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition sptranv.f:91
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition sptrunsv.f:94
    +
    subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
    This subprogram gets wave-space constants.
    Definition spwget.f:18
    diff --git a/sptrunv_8f.html b/sptrunv_8f.html index 19b8f50e..3592165e 100644 --- a/sptrunv_8f.html +++ b/sptrunv_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunv.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    sptrunv.f File Reference
    +
    sptrunv.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine 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)
     This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields to a possibly different global cylindrical grid. More...
     
    subroutine 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)
     This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields to a possibly different global cylindrical grid.
     

    Detailed Description

    Spectrally truncate gridded vector fields.

    @@ -107,8 +113,8 @@

    Definition in file sptrunv.f.

    Function/Subroutine Documentation

    - -

    ◆ sptrunv()

    + +

    ◆ sptrunv()

    diff --git a/sptrunv_8f.js b/sptrunv_8f.js index ce8c98f1..879e2e2d 100644 --- a/sptrunv_8f.js +++ b/sptrunv_8f.js @@ -1,4 +1,4 @@ var sptrunv_8f = [ - [ "sptrunv", "sptrunv_8f.html#a9aa39c13dd38585b3afb30cb2486817f", null ] + [ "sptrunv", "sptrunv_8f.html#a123aaebce789911420b9e5c7d89d8de7", null ] ]; \ No newline at end of file diff --git a/sptrunv_8f_source.html b/sptrunv_8f_source.html index 9d41d87d..865ca49c 100644 --- a/sptrunv_8f_source.html +++ b/sptrunv_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: sptrunv.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,191 +81,199 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    sptrunv.f
    +
    sptrunv.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C>
    -
    3 C> Spectrally truncate gridded vector fields
    -
    4 C> @author IREDELL @date 96-02-29
    -
    5 
    -
    6 C> This subprogram spectrally truncates vector fields
    -
    7 C> on a global cylindrical grid, returning the fields
    -
    8 C> to a possibly different global cylindrical grid.
    -
    9 C> The wave-space can be either triangular or rhomboidal.
    -
    10 C> Either grid-space can be either an equally-spaced grid
    -
    11 C> (with or without pole points) or a Gaussian grid.
    -
    12 C> The grid fields may have general indexing.
    -
    13 C> The transforms are all multiprocessed.
    -
    14 C> Over zonal wavenumber to ensure reproducibility.
    -
    15 C> Transform several fields at a time to improve vectorization.
    -
    16 C> Subprogram can be called from a multiprocessing environment.
    -
    17 C>
    -
    18 C> PROGRAM HISTORY LOG:
    -
    19 C> - 96-02-29 IREDELL
    -
    20 C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    -
    21 C>
    -
    22 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    -
    23 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    -
    24 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    -
    25 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    -
    26 C> (IDRTI=4 FOR GAUSSIAN GRID,
    -
    27 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    28 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    29 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    -
    30 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    -
    31 C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
    -
    32 C> (IDRTO=4 FOR GAUSSIAN GRID,
    -
    33 C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    -
    34 C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    -
    35 C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
    -
    36 C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
    -
    37 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    -
    38 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    -
    39 C> (DEFAULTS TO 1 IF IPRIME=0)
    -
    40 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    -
    41 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    -
    42 C> (DEFAULTS TO 1 IF ISKIPI=0)
    -
    43 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    -
    44 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    -
    45 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    -
    46 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    -
    47 C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
    -
    48 C> (DEFAULTS TO 1 IF ISKIPO=0)
    -
    49 C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
    -
    50 C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
    -
    51 C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
    -
    52 C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
    -
    53 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    -
    54 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    -
    55 C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    -
    56 C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    -
    57 C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    -
    58 C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    -
    59 C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    -
    60 C> @param GRIDUO - REAL (*) OUTPUT U-WINDS IF LUV
    -
    61 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    -
    62 C> @param GRIDVO - REAL (*) OUTPUT V-WINDS IF LUV
    -
    63 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    -
    64 C> @param GRIDDO - REAL (*) OUTPUT DIVERGENCES IF LDZ
    -
    65 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    -
    66 C> @param GRIDZO - REAL (*) OUTPUT VORTICITIES IF LDZ
    -
    67 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    -
    68 C> @param GRIDPO - REAL (*) OUTPUT POTENTIALS IF LPS
    -
    69 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    -
    70 C> @param GRIDSO - REAL (*) OUTPUT STREAMFCNS IF LPS
    -
    71 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    -
    72 C>
    -
    73 C> SUBPROGRAMS CALLED:
    -
    74 C> - SPWGET() GET WAVE-SPACE CONSTANTS
    -
    75 C> - SPLAPLAC() COMPUTE LAPLACIAN IN SPECTRAL SPACE
    -
    76 C> - SPTRAN() PERFORM A SCALAR SPHERICAL TRANSFORM
    -
    77 C> - SPTRANV() PERFORM A VECTOR SPHERICAL TRANSFORM
    -
    78 C> - NCPUS() GETS ENVIRONMENT NUMBER OF CPUS
    -
    79 C>
    -
    80 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    -
    81 C> DIMENSION |LINEAR |QUADRATIC
    -
    82 C> ----------------------- |--------- |-------------
    -
    83 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    -
    84 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    -
    85 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    -
    86 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    -
    87 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    -
    88 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    -
    89 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    -
    90  SUBROUTINE sptrunv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
    -
    91  & IDRTO,IMAXO,JMAXO,KMAX,
    -
    92  & IPRIME,ISKIPI,JSKIPI,KSKIPI,
    -
    93  & ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDUI,GRIDVI,
    -
    94  & LUV,GRIDUO,GRIDVO,LDZ,GRIDDO,GRIDZO,
    -
    95  & LPS,GRIDPO,GRIDSO)
    -
    96  LOGICAL LUV,LDZ,LPS
    -
    97  REAL GRIDUI(*),GRIDVI(*)
    -
    98  REAL GRIDUO(*),GRIDVO(*),GRIDDO(*),GRIDZO(*),GRIDPO(*),GRIDSO(*)
    -
    99  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    -
    100  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    101  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    102  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    -
    103  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    104  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    -
    105 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    106 C TRANSFORM INPUT GRID TO WAVE
    -
    107  jc=jcpu
    -
    108  IF(jc.EQ.0) jc=ncpus()
    -
    109  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    110  mdim=2*mx+1
    -
    111  jn=-jskipi
    -
    112  IF(jn.EQ.0) jn=imaxi
    -
    113  js=-jn
    -
    114  inp=(jmaxi-1)*max(0,-jn)+1
    -
    115  isp=(jmaxi-1)*max(0,-js)+1
    -
    116  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    -
    117  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    -
    118  & wd,wz,
    -
    119  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    -
    120 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    121 C TRANSFORM WAVE TO OUTPUT WINDS
    -
    122  jn=-jskipo
    -
    123  IF(jn.EQ.0) jn=imaxo
    -
    124  js=-jn
    -
    125  inp=(jmaxo-1)*max(0,-jn)+1
    -
    126  isp=(jmaxo-1)*max(0,-js)+1
    -
    127  IF(luv) THEN
    -
    128  CALL sptranv(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    -
    129  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    -
    130  & wd,wz,
    -
    131  & griduo(inp),griduo(isp),gridvo(inp),gridvo(isp),1)
    -
    132  ENDIF
    -
    133 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    134 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    -
    135  IF(ldz) THEN
    -
    136  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    -
    137  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    -
    138  & wd,griddo(inp),griddo(isp),1)
    -
    139  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    -
    140  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    -
    141  & wz,gridzo(inp),gridzo(isp),1)
    -
    142  ENDIF
    -
    143 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    144 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    -
    145  IF(lps) THEN
    -
    146  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    -
    147 C$OMP PARALLEL DO
    -
    148  DO k=1,kmax
    -
    149  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    -
    150  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    -
    151  wd(1:2,k)=0.
    -
    152  wz(1:2,k)=0.
    -
    153  ENDDO
    -
    154  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    -
    155  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    -
    156  & wd,gridpo(inp),gridpo(isp),1)
    -
    157  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    -
    158  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    -
    159  & wz,gridso(inp),gridso(isp),1)
    -
    160  ENDIF
    -
    161 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    162  END
    -
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    -
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    -
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    -
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    -
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunv.f:96
    -
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +Go to the documentation of this file.
    1C> @file
    +
    2C>
    +
    3C> Spectrally truncate gridded vector fields
    +
    4C> @author IREDELL @date 96-02-29
    +
    5
    +
    6C> This subprogram spectrally truncates vector fields
    +
    7C> on a global cylindrical grid, returning the fields
    +
    8C> to a possibly different global cylindrical grid.
    +
    9C> The wave-space can be either triangular or rhomboidal.
    +
    10C> Either grid-space can be either an equally-spaced grid
    +
    11C> (with or without pole points) or a Gaussian grid.
    +
    12C> The grid fields may have general indexing.
    +
    13C> The transforms are all multiprocessed.
    +
    14C> Over zonal wavenumber to ensure reproducibility.
    +
    15C> Transform several fields at a time to improve vectorization.
    +
    16C> Subprogram can be called from a multiprocessing environment.
    +
    17C>
    +
    18C> PROGRAM HISTORY LOG:
    +
    19C> - 96-02-29 IREDELL
    +
    20C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    21C>
    +
    22C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    23C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    24C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    25C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    26C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    27C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    28C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    29C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    30C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    31C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
    +
    32C> (IDRTO=4 FOR GAUSSIAN GRID,
    +
    33C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    34C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    35C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
    +
    36C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
    +
    37C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    38C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    39C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    40C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    41C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    42C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    43C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    44C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    45C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    46C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    47C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
    +
    48C> (DEFAULTS TO 1 IF ISKIPO=0)
    +
    49C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
    +
    50C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
    +
    51C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
    +
    52C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
    +
    53C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    54C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    55C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    +
    56C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    +
    57C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    +
    58C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    +
    59C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    +
    60C> @param GRIDUO - REAL (*) OUTPUT U-WINDS IF LUV
    +
    61C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    62C> @param GRIDVO - REAL (*) OUTPUT V-WINDS IF LUV
    +
    63C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    64C> @param GRIDDO - REAL (*) OUTPUT DIVERGENCES IF LDZ
    +
    65C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    66C> @param GRIDZO - REAL (*) OUTPUT VORTICITIES IF LDZ
    +
    67C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    68C> @param GRIDPO - REAL (*) OUTPUT POTENTIALS IF LPS
    +
    69C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    70C> @param GRIDSO - REAL (*) OUTPUT STREAMFCNS IF LPS
    +
    71C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    72C>
    +
    73C> SUBPROGRAMS CALLED:
    +
    74C> - SPWGET() GET WAVE-SPACE CONSTANTS
    +
    75C> - SPLAPLAC() COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    76C> - SPTRAN() PERFORM A SCALAR SPHERICAL TRANSFORM
    +
    77C> - SPTRANV() PERFORM A VECTOR SPHERICAL TRANSFORM
    +
    78C> - NCPUS() GETS ENVIRONMENT NUMBER OF CPUS
    +
    79C>
    +
    80C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    81C> DIMENSION |LINEAR |QUADRATIC
    +
    82C> ----------------------- |--------- |-------------
    +
    83C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    84C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    85C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    86C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    87C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    88C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    89C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    +
    90 SUBROUTINE sptrunv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
    +
    91 & IDRTO,IMAXO,JMAXO,KMAX,
    +
    92 & IPRIME,ISKIPI,JSKIPI,KSKIPI,
    +
    93 & ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDUI,GRIDVI,
    +
    94 & LUV,GRIDUO,GRIDVO,LDZ,GRIDDO,GRIDZO,
    +
    95 & LPS,GRIDPO,GRIDSO)
    +
    96 LOGICAL LUV,LDZ,LPS
    +
    97 REAL GRIDUI(*),GRIDVI(*)
    +
    98 REAL GRIDUO(*),GRIDVO(*),GRIDDO(*),GRIDZO(*),GRIDPO(*),GRIDSO(*)
    +
    99 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    100 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    101 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    102 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    103 REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    104 REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    105C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    106C TRANSFORM INPUT GRID TO WAVE
    +
    107 jc=jcpu
    +
    108 IF(jc.EQ.0) jc=ncpus()
    +
    109 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    110 mdim=2*mx+1
    +
    111 jn=-jskipi
    +
    112 IF(jn.EQ.0) jn=imaxi
    +
    113 js=-jn
    +
    114 inp=(jmaxi-1)*max(0,-jn)+1
    +
    115 isp=(jmaxi-1)*max(0,-js)+1
    +
    116 CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    117 & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    118 & wd,wz,
    +
    119 & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    120C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    121C TRANSFORM WAVE TO OUTPUT WINDS
    +
    122 jn=-jskipo
    +
    123 IF(jn.EQ.0) jn=imaxo
    +
    124 js=-jn
    +
    125 inp=(jmaxo-1)*max(0,-jn)+1
    +
    126 isp=(jmaxo-1)*max(0,-js)+1
    +
    127 IF(luv) THEN
    +
    128 CALL sptranv(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    129 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    130 & wd,wz,
    +
    131 & griduo(inp),griduo(isp),gridvo(inp),gridvo(isp),1)
    +
    132 ENDIF
    +
    133C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    134C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    135 IF(ldz) THEN
    +
    136 CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    137 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    138 & wd,griddo(inp),griddo(isp),1)
    +
    139 CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    140 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    141 & wz,gridzo(inp),gridzo(isp),1)
    +
    142 ENDIF
    +
    143C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    144C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    145 IF(lps) THEN
    +
    146 CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    147C$OMP PARALLEL DO
    +
    148 DO k=1,kmax
    +
    149 CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    150 CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    151 wd(1:2,k)=0.
    +
    152 wz(1:2,k)=0.
    +
    153 ENDDO
    +
    154 CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    155 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    156 & wd,gridpo(inp),gridpo(isp),1)
    +
    157 CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    158 & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    159 & wz,gridso(inp),gridso(isp),1)
    +
    160 ENDIF
    +
    161C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    +
    162 END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition ncpus.F:22
    +
    subroutine splaplac(i, m, enn1, q, qd2, idir)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition splaplac.f:25
    +
    subroutine sptran(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, wave, gridn, grids, idir)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition sptran.f:88
    +
    subroutine sptranv(iromb, maxwv, idrt, imax, jmax, kmax, iprime, iskip, jnskip, jsskip, kwskip, kgskip, jbeg, jend, jcpu, waved, wavez, gridun, gridus, gridvn, gridvs, idir)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition sptranv.f:91
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition sptrunv.f:96
    +
    subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
    This subprogram gets wave-space constants.
    Definition spwget.f:18
    diff --git a/spuv2dz_8f.html b/spuv2dz_8f.html index 2d5eff30..25d535d4 100644 --- a/spuv2dz_8f.html +++ b/spuv2dz_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spuv2dz.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    spuv2dz.f File Reference
    +
    spuv2dz.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine spuv2dz (I, M, ENN1, ELONN1, EON, EONTOP, U, V, UTOP, VTOP, D, Z)
     Computes the divergence and vorticity from wind components in spectral space. More...
     
    subroutine spuv2dz (i, m, enn1, elonn1, eon, eontop, u, v, utop, vtop, d, z)
     Computes the divergence and vorticity from wind components in spectral space.
     

    Detailed Description

    Compute divergence and vorticity from winds.

    @@ -107,8 +113,8 @@

    Definition in file spuv2dz.f.

    Function/Subroutine Documentation

    - -

    ◆ spuv2dz()

    + +

    ◆ spuv2dz()

    diff --git a/spuv2dz_8f.js b/spuv2dz_8f.js index fb93c82c..f508ecd9 100644 --- a/spuv2dz_8f.js +++ b/spuv2dz_8f.js @@ -1,4 +1,4 @@ var spuv2dz_8f = [ - [ "spuv2dz", "spuv2dz_8f.html#a27edc2d10e0a76a45e4aaae58bf018b9", null ] + [ "spuv2dz", "spuv2dz_8f.html#a89104e49dc661c344807f3edfd70be12", null ] ]; \ No newline at end of file diff --git a/spuv2dz_8f_source.html b/spuv2dz_8f_source.html index f382afec..3bd49e4f 100644 --- a/spuv2dz_8f_source.html +++ b/spuv2dz_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spuv2dz.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,115 +81,123 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    spuv2dz.f
    +
    spuv2dz.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C> @brief Compute divergence and vorticity from winds.
    -
    3 C> @author Iredell @date 92-10-31
    -
    4 
    -
    5 C> Computes the divergence and vorticity from wind components
    -
    6 C> in spectral space.
    -
    7 C>
    -
    8 C> Subprogram speps() should be called already.
    -
    9 C>
    -
    10 C> If L is the zonal wavenumber, N is the total wavenumber,
    -
    11 C> EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) and A is earth radius,
    -
    12 C> then the divergence D is computed as:
    -
    13 C> <pre>
    -
    14 C> D(L,N)=I*L*A*U(L,N)
    -
    15 C> +EPS(L,N+1)*N*A*V(L,N+1)-EPS(L,N)*(N+1)*A*V(L,N-1)
    -
    16 C> </pre>
    -
    17 C>
    -
    18 C> and the vorticity Z is computed as:
    -
    19 C> <pre>
    -
    20 C> Z(L,N)=I*L*A*V(L,N)
    -
    21 C> -EPS(L,N+1)*N*A*U(L,N+1)+EPS(L,N)*(N+1)*A*U(L,N-1)
    -
    22 C> </pre>
    -
    23 C>
    -
    24 C> where U is the zonal wind and V is the meridional wind.
    -
    25 C>
    -
    26 C> U and V are weighted by the secant of latitude.
    -
    27 C>
    -
    28 C> Extra terms are used over top of the spectral domain.
    -
    29 C>
    -
    30 C> Advantage is taken of the fact that EPS(L,L)=0
    -
    31 C> in order to vectorize over the entire spectral domain.
    -
    32 C>
    -
    33 C> @param I integer spectral domain shape
    -
    34 C> (0 for triangular, 1 for rhomboidal)
    -
    35 C> @param M INTEGER spectral truncation
    -
    36 C> @param ENN1 ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    -
    37 C> @param ELONN1 ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    -
    38 C> @param EON ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    -
    39 C> @param EONTOP (M+1) EPSILON/N*A over top
    -
    40 C> @param U ((M+1)*((I+1)*M+2)) zonal wind (over coslat)
    -
    41 C> @param V ((M+1)*((I+1)*M+2)) merid wind (over coslat)
    -
    42 C> @param UTOP (2*(M+1)) zonal wind (over coslat) over top
    -
    43 C> @param VTOP (2*(M+1)) merid wind (over coslat) over top
    -
    44 C> @param D ((M+1)*((I+1)*M+2)) divergence
    -
    45 C> @param Z ((M+1)*((I+1)*M+2)) vorticity
    -
    46 C>
    -
    47 C> @author Iredell @date 92-10-31
    -
    48  SUBROUTINE spuv2dz(I,M,ENN1,ELONN1,EON,EONTOP,U,V,UTOP,VTOP,D,Z)
    -
    49  REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
    -
    50  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
    -
    51  REAL U((M+1)*((I+1)*M+2)),V((M+1)*((I+1)*M+2))
    -
    52  REAL UTOP(2*(M+1)),VTOP(2*(M+1))
    -
    53  REAL D((M+1)*((I+1)*M+2)),Z((M+1)*((I+1)*M+2))
    -
    54 
    -
    55 C COMPUTE TERMS FROM THE SPECTRAL DOMAIN
    -
    56  k=1
    -
    57  d(2*k-1)=0.
    -
    58  d(2*k)=0.
    -
    59  z(2*k-1)=0.
    -
    60  z(2*k)=0.
    -
    61  DO k=2,(m+1)*((i+1)*m+2)/2-1
    -
    62  d(2*k-1)=-elonn1(k)*u(2*k)+eon(k+1)*v(2*k+1)-eon(k)*v(2*k-3)
    -
    63  d(2*k)=elonn1(k)*u(2*k-1)+eon(k+1)*v(2*k+2)-eon(k)*v(2*k-2)
    -
    64  z(2*k-1)=-elonn1(k)*v(2*k)-eon(k+1)*u(2*k+1)+eon(k)*u(2*k-3)
    -
    65  z(2*k)=elonn1(k)*v(2*k-1)-eon(k+1)*u(2*k+2)+eon(k)*u(2*k-2)
    -
    66  ENDDO
    -
    67  k=(m+1)*((i+1)*m+2)/2
    -
    68  d(2*k-1)=-elonn1(k)*u(2*k)-eon(k)*v(2*k-3)
    -
    69  d(2*k)=elonn1(k)*u(2*k-1)-eon(k)*v(2*k-2)
    -
    70  z(2*k-1)=-elonn1(k)*v(2*k)+eon(k)*u(2*k-3)
    -
    71  z(2*k)=elonn1(k)*v(2*k-1)+eon(k)*u(2*k-2)
    -
    72 
    -
    73 C COMPUTE TERMS FROM OVER TOP OF THE SPECTRAL DOMAIN
    -
    74 CDIR$ IVDEP
    -
    75  DO l=0,m
    -
    76  k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
    -
    77  d(2*k-1)=d(2*k-1)+eontop(l+1)*vtop(2*l+1)
    -
    78  d(2*k)=d(2*k)+eontop(l+1)*vtop(2*l+2)
    -
    79  z(2*k-1)=z(2*k-1)-eontop(l+1)*utop(2*l+1)
    -
    80  z(2*k)=z(2*k)-eontop(l+1)*utop(2*l+2)
    -
    81  ENDDO
    -
    82 
    -
    83 C MULTIPLY BY LAPLACIAN TERM
    -
    84  DO k=2,(m+1)*((i+1)*m+2)/2
    -
    85  d(2*k-1)=d(2*k-1)*enn1(k)
    -
    86  d(2*k)=d(2*k)*enn1(k)
    -
    87  z(2*k-1)=z(2*k-1)*enn1(k)
    -
    88  z(2*k)=z(2*k)*enn1(k)
    -
    89  ENDDO
    -
    90  RETURN
    -
    91  END
    -
    subroutine spuv2dz(I, M, ENN1, ELONN1, EON, EONTOP, U, V, UTOP, VTOP, D, Z)
    Computes the divergence and vorticity from wind components in spectral space.
    Definition: spuv2dz.f:49
    +Go to the documentation of this file.
    1C> @file
    +
    2C> @brief Compute divergence and vorticity from winds.
    +
    3C> @author Iredell @date 92-10-31
    +
    4
    +
    5C> Computes the divergence and vorticity from wind components
    +
    6C> in spectral space.
    +
    7C>
    +
    8C> Subprogram speps() should be called already.
    +
    9C>
    +
    10C> If L is the zonal wavenumber, N is the total wavenumber,
    +
    11C> EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) and A is earth radius,
    +
    12C> then the divergence D is computed as:
    +
    13C> <pre>
    +
    14C> D(L,N)=I*L*A*U(L,N)
    +
    15C> +EPS(L,N+1)*N*A*V(L,N+1)-EPS(L,N)*(N+1)*A*V(L,N-1)
    +
    16C> </pre>
    +
    17C>
    +
    18C> and the vorticity Z is computed as:
    +
    19C> <pre>
    +
    20C> Z(L,N)=I*L*A*V(L,N)
    +
    21C> -EPS(L,N+1)*N*A*U(L,N+1)+EPS(L,N)*(N+1)*A*U(L,N-1)
    +
    22C> </pre>
    +
    23C>
    +
    24C> where U is the zonal wind and V is the meridional wind.
    +
    25C>
    +
    26C> U and V are weighted by the secant of latitude.
    +
    27C>
    +
    28C> Extra terms are used over top of the spectral domain.
    +
    29C>
    +
    30C> Advantage is taken of the fact that EPS(L,L)=0
    +
    31C> in order to vectorize over the entire spectral domain.
    +
    32C>
    +
    33C> @param I integer spectral domain shape
    +
    34C> (0 for triangular, 1 for rhomboidal)
    +
    35C> @param M INTEGER spectral truncation
    +
    36C> @param ENN1 ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    +
    37C> @param ELONN1 ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    +
    38C> @param EON ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    +
    39C> @param EONTOP (M+1) EPSILON/N*A over top
    +
    40C> @param U ((M+1)*((I+1)*M+2)) zonal wind (over coslat)
    +
    41C> @param V ((M+1)*((I+1)*M+2)) merid wind (over coslat)
    +
    42C> @param UTOP (2*(M+1)) zonal wind (over coslat) over top
    +
    43C> @param VTOP (2*(M+1)) merid wind (over coslat) over top
    +
    44C> @param D ((M+1)*((I+1)*M+2)) divergence
    +
    45C> @param Z ((M+1)*((I+1)*M+2)) vorticity
    +
    46C>
    +
    47C> @author Iredell @date 92-10-31
    +
    +
    48 SUBROUTINE spuv2dz(I,M,ENN1,ELONN1,EON,EONTOP,U,V,UTOP,VTOP,D,Z)
    +
    49 REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
    +
    50 REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
    +
    51 REAL U((M+1)*((I+1)*M+2)),V((M+1)*((I+1)*M+2))
    +
    52 REAL UTOP(2*(M+1)),VTOP(2*(M+1))
    +
    53 REAL D((M+1)*((I+1)*M+2)),Z((M+1)*((I+1)*M+2))
    +
    54
    +
    55C COMPUTE TERMS FROM THE SPECTRAL DOMAIN
    +
    56 k=1
    +
    57 d(2*k-1)=0.
    +
    58 d(2*k)=0.
    +
    59 z(2*k-1)=0.
    +
    60 z(2*k)=0.
    +
    61 DO k=2,(m+1)*((i+1)*m+2)/2-1
    +
    62 d(2*k-1)=-elonn1(k)*u(2*k)+eon(k+1)*v(2*k+1)-eon(k)*v(2*k-3)
    +
    63 d(2*k)=elonn1(k)*u(2*k-1)+eon(k+1)*v(2*k+2)-eon(k)*v(2*k-2)
    +
    64 z(2*k-1)=-elonn1(k)*v(2*k)-eon(k+1)*u(2*k+1)+eon(k)*u(2*k-3)
    +
    65 z(2*k)=elonn1(k)*v(2*k-1)-eon(k+1)*u(2*k+2)+eon(k)*u(2*k-2)
    +
    66 ENDDO
    +
    67 k=(m+1)*((i+1)*m+2)/2
    +
    68 d(2*k-1)=-elonn1(k)*u(2*k)-eon(k)*v(2*k-3)
    +
    69 d(2*k)=elonn1(k)*u(2*k-1)-eon(k)*v(2*k-2)
    +
    70 z(2*k-1)=-elonn1(k)*v(2*k)+eon(k)*u(2*k-3)
    +
    71 z(2*k)=elonn1(k)*v(2*k-1)+eon(k)*u(2*k-2)
    +
    72
    +
    73C COMPUTE TERMS FROM OVER TOP OF THE SPECTRAL DOMAIN
    +
    74CDIR$ IVDEP
    +
    75 DO l=0,m
    +
    76 k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
    +
    77 d(2*k-1)=d(2*k-1)+eontop(l+1)*vtop(2*l+1)
    +
    78 d(2*k)=d(2*k)+eontop(l+1)*vtop(2*l+2)
    +
    79 z(2*k-1)=z(2*k-1)-eontop(l+1)*utop(2*l+1)
    +
    80 z(2*k)=z(2*k)-eontop(l+1)*utop(2*l+2)
    +
    81 ENDDO
    +
    82
    +
    83C MULTIPLY BY LAPLACIAN TERM
    +
    84 DO k=2,(m+1)*((i+1)*m+2)/2
    +
    85 d(2*k-1)=d(2*k-1)*enn1(k)
    +
    86 d(2*k)=d(2*k)*enn1(k)
    +
    87 z(2*k-1)=z(2*k-1)*enn1(k)
    +
    88 z(2*k)=z(2*k)*enn1(k)
    +
    89 ENDDO
    +
    90 RETURN
    +
    +
    91 END
    +
    subroutine spuv2dz(i, m, enn1, elonn1, eon, eontop, u, v, utop, vtop, d, z)
    Computes the divergence and vorticity from wind components in spectral space.
    Definition spuv2dz.f:49
    diff --git a/spvar_8f.html b/spvar_8f.html index 73948c37..23c099ad 100644 --- a/spvar_8f.html +++ b/spvar_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spvar.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    spvar.f File Reference
    +
    spvar.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine spvar (I, M, Q, QVAR)
     Computes the variances by total wavenumber of a scalar field in spectral space. More...
     
    subroutine spvar (i, m, q, qvar)
     Computes the variances by total wavenumber of a scalar field in spectral space.
     

    Detailed Description

    Compute variance by total wavenumber.

    @@ -107,8 +113,8 @@

    Definition in file spvar.f.

    Function/Subroutine Documentation

    - -

    ◆ spvar()

    + +

    ◆ spvar()

    diff --git a/spvar_8f.js b/spvar_8f.js index 4cfca763..8b9bafd6 100644 --- a/spvar_8f.js +++ b/spvar_8f.js @@ -1,4 +1,4 @@ var spvar_8f = [ - [ "spvar", "spvar_8f.html#a840f95e09b8d930b38638a391933bee4", null ] + [ "spvar", "spvar_8f.html#ae2f7a1068275fa8d245d1c6cc9643f3f", null ] ]; \ No newline at end of file diff --git a/spvar_8f_source.html b/spvar_8f_source.html index 9f559d95..0b45835c 100644 --- a/spvar_8f_source.html +++ b/spvar_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spvar.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,59 +81,67 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    spvar.f
    +
    spvar.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C> @brief Compute variance by total wavenumber.
    -
    3 C> @author Iredell @date 92-10-31
    -
    4 
    -
    5 C> Computes the variances by total wavenumber
    -
    6 C> of a scalar field in spectral space.
    -
    7 C>
    -
    8 C> @param I spectral domain shape
    -
    9 C> (0 for triangular, 1 for rhomboidal)
    -
    10 C> @param M spectral truncation
    -
    11 C> @param Q ((M+1)*((I+1)*M+2)) scalar field
    -
    12 C> @param QVAR (0:(I+1)*M) variances
    -
    13 C>
    -
    14 C> @author Iredell @date 92-10-31
    -
    15  SUBROUTINE spvar(I,M,Q,QVAR)
    -
    16  REAL Q((M+1)*((I+1)*M+2))
    -
    17  REAL QVAR(0:(I+1)*M)
    -
    18 
    -
    19  l=0
    -
    20  DO n=0,m
    -
    21  ks=l*(2*m+(i-1)*(l-1))+2*n
    -
    22  qvar(n)=0.5*q(ks+1)**2
    -
    23  ENDDO
    -
    24  DO n=m+1,(i+1)*m
    -
    25  qvar(n)=0.
    -
    26  ENDDO
    -
    27  DO n=0,(i+1)*m
    -
    28  DO l=max(1,n-m),min(n,m)
    -
    29  ks=l*(2*m+(i-1)*(l-1))+2*n
    -
    30  qvar(n)=qvar(n)+q(ks+1)**2+q(ks+2)**2
    -
    31  ENDDO
    -
    32  ENDDO
    -
    33 
    -
    34  RETURN
    -
    35  END
    -
    subroutine spvar(I, M, Q, QVAR)
    Computes the variances by total wavenumber of a scalar field in spectral space.
    Definition: spvar.f:16
    +Go to the documentation of this file.
    1C> @file
    +
    2C> @brief Compute variance by total wavenumber.
    +
    3C> @author Iredell @date 92-10-31
    +
    4
    +
    5C> Computes the variances by total wavenumber
    +
    6C> of a scalar field in spectral space.
    +
    7C>
    +
    8C> @param I spectral domain shape
    +
    9C> (0 for triangular, 1 for rhomboidal)
    +
    10C> @param M spectral truncation
    +
    11C> @param Q ((M+1)*((I+1)*M+2)) scalar field
    +
    12C> @param QVAR (0:(I+1)*M) variances
    +
    13C>
    +
    14C> @author Iredell @date 92-10-31
    +
    +
    15 SUBROUTINE spvar(I,M,Q,QVAR)
    +
    16 REAL Q((M+1)*((I+1)*M+2))
    +
    17 REAL QVAR(0:(I+1)*M)
    +
    18
    +
    19 l=0
    +
    20 DO n=0,m
    +
    21 ks=l*(2*m+(i-1)*(l-1))+2*n
    +
    22 qvar(n)=0.5*q(ks+1)**2
    +
    23 ENDDO
    +
    24 DO n=m+1,(i+1)*m
    +
    25 qvar(n)=0.
    +
    26 ENDDO
    +
    27 DO n=0,(i+1)*m
    +
    28 DO l=max(1,n-m),min(n,m)
    +
    29 ks=l*(2*m+(i-1)*(l-1))+2*n
    +
    30 qvar(n)=qvar(n)+q(ks+1)**2+q(ks+2)**2
    +
    31 ENDDO
    +
    32 ENDDO
    +
    33
    +
    34 RETURN
    +
    +
    35 END
    +
    subroutine spvar(i, m, q, qvar)
    Computes the variances by total wavenumber of a scalar field in spectral space.
    Definition spvar.f:16
    diff --git a/spwget_8f.html b/spwget_8f.html index 8d9f2dd3..ea360dbe 100644 --- a/spwget_8f.html +++ b/spwget_8f.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spwget.f File Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,16 +76,22 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    Functions/Subroutines
    -
    -
    spwget.f File Reference
    +
    spwget.f File Reference
    @@ -94,11 +100,11 @@

    Go to the source code of this file.

    - - - - + + +

    +

    Functions/Subroutines

    subroutine spwget (IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
     This subprogram gets wave-space constants. More...
     
    subroutine spwget (iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
     This subprogram gets wave-space constants.
     

    Detailed Description

    Get wave-space constants.

    @@ -107,8 +113,8 @@

    Definition in file spwget.f.

    Function/Subroutine Documentation

    - -

    ◆ spwget()

    + +

    ◆ spwget()

    diff --git a/spwget_8f.js b/spwget_8f.js index 3fba636e..644cab41 100644 --- a/spwget_8f.js +++ b/spwget_8f.js @@ -1,4 +1,4 @@ var spwget_8f = [ - [ "spwget", "spwget_8f.html#a9b6ce78350f7adf2fed874a18312c7a6", null ] + [ "spwget", "spwget_8f.html#a8ede1d8ebcc8a6515401e89f591e3aeb", null ] ]; \ No newline at end of file diff --git a/spwget_8f_source.html b/spwget_8f_source.html index 2ed57cce..9ec00293 100644 --- a/spwget_8f_source.html +++ b/spwget_8f_source.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: spwget.f Source File @@ -23,10 +23,9 @@
    - - + @@ -34,22 +33,28 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ + +
    @@ -76,51 +81,59 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    spwget.f
    +
    spwget.f
    -Go to the documentation of this file.
    1 C> @file
    -
    2 C> @brief Get wave-space constants.
    -
    3 C> @author Iredell @date 96-02-29
    -
    4 
    -
    5 C> This subprogram gets wave-space constants.
    -
    6 C>
    -
    7 C> @param IROMB spectral domain shape (0 for triangular, 1 for rhomboidal)
    -
    8 C> @param MAXWV spectral truncation
    -
    9 C> @param EPS
    -
    10 C> @param EPSTOP
    -
    11 C> @param ENN1
    -
    12 C> @param ELONN1
    -
    13 C> @param EON
    -
    14 C> @param EONTOP
    -
    15 C>
    -
    16 C> @author Iredell @date 96-02-29
    -
    17  SUBROUTINE spwget(IROMB,MAXWV,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
    -
    18  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    -
    19  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    20  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    -
    21  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    -
    22 
    -
    23  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    -
    24  mxtop=maxwv+1
    -
    25  CALL speps(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    -
    26  END
    -
    subroutine speps(I, M, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    Computes constant fields indexed in the spectral domain in "IBM ORDER" (Zonal wavenumber is the slowe...
    Definition: speps.f:26
    -
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +Go to the documentation of this file.
    1C> @file
    +
    2C> @brief Get wave-space constants.
    +
    3C> @author Iredell @date 96-02-29
    +
    4
    +
    5C> This subprogram gets wave-space constants.
    +
    6C>
    +
    7C> @param IROMB spectral domain shape (0 for triangular, 1 for rhomboidal)
    +
    8C> @param MAXWV spectral truncation
    +
    9C> @param EPS
    +
    10C> @param EPSTOP
    +
    11C> @param ENN1
    +
    12C> @param ELONN1
    +
    13C> @param EON
    +
    14C> @param EONTOP
    +
    15C>
    +
    16C> @author Iredell @date 96-02-29
    +
    +
    17 SUBROUTINE spwget(IROMB,MAXWV,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
    +
    18 REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    19 REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    20 REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    21 REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    22
    +
    23 mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    24 mxtop=maxwv+1
    +
    25 CALL speps(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    +
    26 END
    +
    subroutine speps(i, m, eps, epstop, enn1, elonn1, eon, eontop)
    Computes constant fields indexed in the spectral domain in "IBM ORDER" (Zonal wavenumber is the slowe...
    Definition speps.f:26
    +
    subroutine spwget(iromb, maxwv, eps, epstop, enn1, elonn1, eon, eontop)
    This subprogram gets wave-space constants.
    Definition spwget.f:18
    diff --git a/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html b/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html index 62d9b4da..7aa926f5 100644 --- a/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html +++ b/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_equid_cylind_grid_mod::ip_equid_cylind_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -Private Member Functions | -Private Attributes
    -
    -
    ip_equid_cylind_grid_mod::ip_equid_cylind_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_equid_cylind_grid_mod::ip_equid_cylind_grid Type Reference
    @@ -99,89 +105,92 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_equid_cylind
     See gdswzd_equid_cylind(). More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Init GRIB1. More...
     
    procedure init_grib2
     Init GRIB2. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for equidistant cylindrical grids.
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Init GRIB1.
     
    procedure init_grib2 (self, g2_desc)
     Init GRIB2.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + +

    -Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...

    +Data Fields

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real dlat
     Di — i direction increment. More...
    real dlat
     Di — i direction increment.
     
    real dlon
     Dj — j direction increment. More...
    real dlon
     Dj — j direction increment.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    real hi
     Scan mode in the 'i' direction. More...
    real hi
     Scan mode in the 'i' direction.
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     
    real rlat1
     Latitude of first grid point. More...
    real rlat1
     Latitude of first grid point.
     
    real rlat2
     Latitude of last grid point. More...
    real rlat2
     Latitude of last grid point.
     
    real rlon1
     Longitude of first grid point. More...
    real rlon1
     Longitude of first grid point.
     
    real rlon2
     Longitude of last grid point. More...
    real rlon2
     Longitude of last grid point.
     

    Detailed Description

    Definition at line 26 of file ip_equid_cylind_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    @@ -190,25 +199,206 @@

    - + + + + + + + + + + + + + + + + + + + + +
    procedure ip_grid_mod::ip_grid::field_posprocedure ip_grid_mod::ip_grid::field_pos (class(ip_grid), intent(in) self,
    integer, intent(in) i,
    integer, intent(in) j 
    )
    -privateinherited +inherited

    Field position for a given grid point.

    -
    Returns
    Integer position in grib field to locate grid point.
    +
    Returns
    Integer position in grib field to locate grid point.
    +

    Returns the field position for a given grid point.

    +
    Parameters
    + + + + +
    [in]self
    [in]i
    [in]j
    +
    +
    +
    Returns
    Integer position in grib field to locate grid point.
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    April 1996
    + +

    Definition at line 91 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::gdswzd (class(ip_equid_cylind_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for equidistant cylindrical grids.

    +
    Returns
    N/A Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for equidistant cylindrical grids.
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too. Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present.

    +

    To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid object gdswzd was called on.
    [in]ioptoption flag
      +
    • +1 to compute earth coords of selected grid coords.
    • +
    • -1 o compute grid coords of selected earth coords.
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates if iopt>0.
    [in,out]yptsGrid y point coordinates if iopt>0.
    [in,out]rlonEarth longitudes in degrees e if iopt<0 (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees n if iopt<0 (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotOptional clockwise vector rotation cosines.
    [out]srotOptional clockwise vector rotation sines.
    [out]xlonOptional dx/dlon in 1/degrees.
    [out]xlatOptional dx/dlat in 1/degrees.
    [out]ylonOptional dy/dlon in 1/degrees.
    [out]ylatOptional dy/dlat in 1/degrees.
    [out]areaOptional area weights in m**2.
    +
    +
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 88 of file ip_grid_mod.F90.

    +

    Definition at line 40 of file ip_equid_cylind_grid_mod.F90.

    - -

    ◆ gdswzd()

    + +

    ◆ init() [1/2]

    @@ -217,25 +407,25 @@

    - +
    procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::gdswzdgeneric ip_grid_mod::ip_grid::init
    -private +inherited

    -

    See gdswzd_equid_cylind().

    +

    Init subprogram.

    Returns
    N/A
    -

    Definition at line 37 of file ip_equid_cylind_grid_mod.F90.

    +

    Definition at line 93 of file ip_grid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [2/2]

    @@ -249,7 +439,7 @@

    -privateinherited +inherited

    @@ -257,67 +447,97 @@

    Returns
    N/A
    -

    Definition at line 90 of file ip_grid_mod.F90.

    +

    Definition at line 93 of file ip_grid_mod.F90.

    - -

    ◆ init_grib1()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + +
    procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib1procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib1 (class(ip_equid_cylind_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    -
    -private

    Init GRIB1.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes an equidistant cylindrical grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 35 of file ip_equid_cylind_grid_mod.F90.

    +

    Definition at line 36 of file ip_equid_cylind_grid_mod.F90.

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib2()

    - - - - - -
    - + + + + + + + + + + + + + + +
    procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib2procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib2 (class(ip_equid_cylind_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Init GRIB2.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes an equidistant cylindrical grid given a grib2_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 36 of file ip_equid_cylind_grid_mod.F90.

    +

    Definition at line 38 of file ip_equid_cylind_grid_mod.F90.

    Field Documentation

    - -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -331,7 +551,7 @@

    -privateinherited +inherited

    @@ -342,24 +562,16 @@

    -

    ◆ dlat

    + +

    ◆ dlat

    - - - - - -
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::dlat
    -
    -private

    Di — i direction increment.

    @@ -369,24 +581,16 @@

    -

    ◆ dlon

    + +

    ◆ dlon

    - - - - - -
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::dlon
    -
    -private

    Dj — j direction increment.

    @@ -396,8 +600,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -411,7 +615,7 @@

    -privateinherited +inherited

    @@ -422,24 +626,16 @@

    -

    ◆ hi

    + +

    ◆ hi

    - - - - - -
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::hi
    -
    -private

    Scan mode in the 'i' direction.

    @@ -449,8 +645,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -464,7 +660,7 @@

    -privateinherited +inherited

    @@ -475,8 +671,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -490,7 +686,7 @@

    -privateinherited +inherited

    @@ -501,8 +697,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -516,7 +712,7 @@

    -privateinherited +inherited

    @@ -527,8 +723,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -542,7 +738,7 @@

    -privateinherited +inherited

    @@ -553,8 +749,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -568,7 +764,7 @@

    -privateinherited +inherited

    @@ -579,8 +775,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -594,7 +790,7 @@

    -privateinherited +inherited

    @@ -605,8 +801,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -620,7 +816,7 @@

    -privateinherited +inherited

    @@ -631,8 +827,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -646,7 +842,7 @@

    -privateinherited +inherited

    @@ -666,8 +862,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -681,7 +877,7 @@

    -privateinherited +inherited

    @@ -693,8 +889,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -708,7 +904,7 @@

    -privateinherited +inherited

    @@ -719,24 +915,16 @@

    -

    ◆ rlat1

    + +

    ◆ rlat1

    - - - - - -
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlat1
    -
    -private

    Latitude of first grid point.

    @@ -746,24 +934,16 @@

    -

    ◆ rlat2

    + +

    ◆ rlat2

    - - - - - -
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlat2
    -
    -private

    Latitude of last grid point.

    @@ -773,24 +953,16 @@

    -

    ◆ rlon1

    + +

    ◆ rlon1

    - - - - - -
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlon1
    -
    -private

    Longitude of first grid point.

    @@ -800,24 +972,16 @@

    -

    ◆ rlon2

    + +

    ◆ rlon2

    - - - - - -
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlon2
    -
    -private

    Longitude of last grid point.

    @@ -836,7 +1000,7 @@

    diff --git a/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.js b/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.js index 39a1c72a..32b4e9fb 100644 --- a/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.js +++ b/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.js @@ -1,10 +1,11 @@ var structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid = [ - [ "field_pos", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#aa1023c3efed20a990b75f937bbcac6a3", null ], - [ "init", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a68fb7543888cc76885560709184e7d70", null ], - [ "init_grib2", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a8dd212953e754964770fa1c3d4bcd3db", null ], + [ "field_pos", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a64ebc69450ec7581a9e63970f35a800d", null ], + [ "init", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a3ef6bc6a2dc40d2e6bd23e4e9e5bfb0c", null ], + [ "init_grib2", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a41029e699ca3495ae153cc0fc5e448b9", null ], [ "descriptor", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "dlat", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a6bd00527219fc596b2c2a7ba47fec719", null ], [ "dlon", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ae675dc8c49e64700d941eadc31e8f4e7", null ], diff --git a/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.png b/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.png index 54429415..4a5b9e60 100644 Binary files a/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.png and b/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.png differ diff --git a/structip__gaussian__grid__mod_1_1ip__gaussian__grid.html b/structip__gaussian__grid__mod_1_1ip__gaussian__grid.html index aef84e3c..8e97dce7 100644 --- a/structip__gaussian__grid__mod_1_1ip__gaussian__grid.html +++ b/structip__gaussian__grid__mod_1_1ip__gaussian__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_gaussian_grid_mod::ip_gaussian_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_gaussian_grid_mod::ip_gaussian_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_gaussian_grid_mod::ip_gaussian_grid Type Reference
    @@ -99,92 +105,95 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_gaussian
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Initializes a gaussian grid given a grib1_descriptor object.
     
    procedure init_grib2 (self, g2_desc)
     Initializes a gaussian grid given a grib2_descriptor object.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + +

    -Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...

    +Data Fields

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real dlon
     "i"-direction increment. More...
    real dlon
     "i"-direction increment.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    real hi
     Scan mode flag in 'i' direction. More...
    real hi
     Scan mode flag in 'i' direction.
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jg
     Number of parallels between the equator and pole times 2. More...
    integer jg
     Number of parallels between the equator and pole times 2.
     
    integer jh
     Scan mode flag in 'j' direction. More...
    integer jh
     Scan mode flag in 'j' direction.
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jscan
     Scanning mode in the 'j' direction. More...
    integer jscan
     Scanning mode in the 'j' direction.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     
    real rlat1
     Latitude of first grid point. More...
    real rlat1
     Latitude of first grid point.
     
    real rlon1
     Longitude of first grid point. More...
    real rlon1
     Longitude of first grid point.
     
    real rlon2
     Longitude of last grid point. More...
    real rlon2
     Longitude of last grid point.
     

    Detailed Description

    Definition at line 25 of file ip_gaussian_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - -

    ◆ gdswzd()

    + +

    ◆ gdswzd()

    - - - - - -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_gaussian_grid_mod::ip_gaussian_grid::gdswzdprocedure ip_gaussian_grid_mod::ip_gaussian_grid::gdswzd (class(ip_gaussian_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    -
    -private

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    -
    Returns
    N/A
    +
    Returns
    N/A Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too. Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present.

    +

    To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid object gdswzd was called on.
    [in]ioptoption flag
      +
    • +1 to compute earth coords of selected grid coords.
    • +
    • -1 o compute grid coords of selected earth coords.
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates if iopt>0.
    [in,out]yptsGrid y point coordinates if iopt>0.
    [in,out]rlonEarth longitudes in degrees e if iopt<0 (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees n if iopt<0 (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotOptional clockwise vector rotation cosines.
    [out]srotOptional clockwise vector rotation sines.
    [out]xlonOptional dx/dlon in 1/degrees.
    [out]xlatOptional dx/dlat in 1/degrees.
    [out]ylonOptional dy/dlon in 1/degrees.
    [out]ylatOptional dy/dlat in 1/degrees.
    [out]areaOptional area weights in m**2.
    +
    +
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 41 of file ip_gaussian_grid_mod.F90.

    +

    Definition at line 44 of file ip_gaussian_grid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [1/2]

    - -

    ◆ init_grib1()

    + +

    ◆ init() [2/2]

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + + + +
    procedure ip_gaussian_grid_mod::ip_gaussian_grid::init_grib2procedure ip_gaussian_grid_mod::ip_gaussian_grid::init_grib1 (class(ip_gaussian_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A Initializes a gaussian grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 37 of file ip_gaussian_grid_mod.F90.

    + +
    + + +

    ◆ init_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + +
    procedure ip_gaussian_grid_mod::ip_gaussian_grid::init_grib2 (class(ip_gaussian_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Initializes a gaussian grid given a grib2_descriptor object.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes a gaussian grid given a grib2_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 38 of file ip_gaussian_grid_mod.F90.

    +

    Definition at line 40 of file ip_gaussian_grid_mod.F90.

    Field Documentation

    - -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -334,7 +554,7 @@

    -privateinherited +inherited

    @@ -345,24 +565,16 @@

    -

    ◆ dlon

    + +

    ◆ dlon

    - - - - - -
    real ip_gaussian_grid_mod::ip_gaussian_grid::dlon
    -
    -private

    "i"-direction increment.

    @@ -372,8 +584,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -387,7 +599,7 @@

    -privateinherited +inherited

    @@ -398,24 +610,16 @@

    -

    ◆ hi

    + +

    ◆ hi

    - - - - - -
    real ip_gaussian_grid_mod::ip_gaussian_grid::hi
    -
    -private

    Scan mode flag in 'i' direction.

    @@ -425,8 +629,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -440,7 +644,7 @@

    -privateinherited +inherited

    @@ -451,8 +655,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -466,7 +670,7 @@

    -privateinherited +inherited

    @@ -477,24 +681,16 @@

    -

    ◆ jg

    + +

    ◆ jg

    - - - - - -
    integer ip_gaussian_grid_mod::ip_gaussian_grid::jg
    -
    -private

    Number of parallels between the equator and pole times 2.

    @@ -504,24 +700,16 @@

    -

    ◆ jh

    + +

    ◆ jh

    - - - - - -
    integer ip_gaussian_grid_mod::ip_gaussian_grid::jh
    -
    -private

    Scan mode flag in 'j' direction.

    @@ -531,8 +719,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -546,7 +734,7 @@

    -privateinherited +inherited

    @@ -557,24 +745,16 @@

    -

    ◆ jscan

    + +

    ◆ jscan

    - - - - - -
    integer ip_gaussian_grid_mod::ip_gaussian_grid::jscan
    -
    -private

    Scanning mode in the 'j' direction.

    @@ -584,8 +764,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -599,7 +779,7 @@

    -privateinherited +inherited

    @@ -610,8 +790,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -625,7 +805,7 @@

    -privateinherited +inherited

    @@ -636,8 +816,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -651,7 +831,7 @@

    -privateinherited +inherited

    @@ -662,8 +842,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -677,7 +857,7 @@

    -privateinherited +inherited

    @@ -688,8 +868,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -703,7 +883,7 @@

    -privateinherited +inherited

    @@ -723,8 +903,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -738,7 +918,7 @@

    -privateinherited +inherited

    @@ -750,8 +930,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -765,7 +945,7 @@

    -privateinherited +inherited

    @@ -776,24 +956,16 @@

    -

    ◆ rlat1

    + +

    ◆ rlat1

    - - - - - -
    real ip_gaussian_grid_mod::ip_gaussian_grid::rlat1
    -
    -private

    Latitude of first grid point.

    @@ -803,24 +975,16 @@

    -

    ◆ rlon1

    + +

    ◆ rlon1

    - - - - - -
    real ip_gaussian_grid_mod::ip_gaussian_grid::rlon1
    -
    -private

    Longitude of first grid point.

    @@ -830,24 +994,16 @@

    -

    ◆ rlon2

    + +

    ◆ rlon2

    - - - - - -
    real ip_gaussian_grid_mod::ip_gaussian_grid::rlon2
    -
    -private

    Longitude of last grid point.

    @@ -866,7 +1022,7 @@

    diff --git a/structip__gaussian__grid__mod_1_1ip__gaussian__grid.js b/structip__gaussian__grid__mod_1_1ip__gaussian__grid.js index ea089373..67912d1d 100644 --- a/structip__gaussian__grid__mod_1_1ip__gaussian__grid.js +++ b/structip__gaussian__grid__mod_1_1ip__gaussian__grid.js @@ -1,10 +1,11 @@ var structip__gaussian__grid__mod_1_1ip__gaussian__grid = [ - [ "field_pos", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a7ce52d987d2bd2442053042c03f96885", null ], - [ "init", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#afd3658924783d5dbbd3fe5f07d5b60a7", null ], - [ "init_grib2", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a378b72a1b6090acb90a36385ab9eda5a", null ], + [ "field_pos", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#aaca172b2f61460a0d9192fa365c7b690", null ], + [ "init", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a982912dd382254402b4d447b97366e76", null ], + [ "init_grib2", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ac36818dd88f306d27107f93dc675220d", null ], [ "descriptor", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "dlon", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a35c454d320c59a6c71c4aebb881abcb8", null ], [ "eccen_squared", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], diff --git a/structip__gaussian__grid__mod_1_1ip__gaussian__grid.png b/structip__gaussian__grid__mod_1_1ip__gaussian__grid.png index 8937e993..88bc3f72 100644 Binary files a/structip__gaussian__grid__mod_1_1ip__gaussian__grid.png and b/structip__gaussian__grid__mod_1_1ip__gaussian__grid.png differ diff --git a/structip__grid__descriptor__mod_1_1grib1__descriptor.html b/structip__grid__descriptor__mod_1_1grib1__descriptor.html index e440e729..551b3e0f 100644 --- a/structip__grid__descriptor__mod_1_1grib1__descriptor.html +++ b/structip__grid__descriptor__mod_1_1grib1__descriptor.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_grid_descriptor_mod::grib1_descriptor Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_grid_descriptor_mod::grib1_descriptor Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_grid_descriptor_mod::grib1_descriptor Type Reference
    @@ -102,32 +108,32 @@

    - - - - - - - + + + + + + +

    -Private Member Functions

    procedure is_same_grid
     Test whether two grid descriptors are the same. More...
     
    procedure is_same_grid_grib1
     Test whether two grid descriptors are the same. More...
     

    +Public Member Functions

    procedure is_same_grid (grid1, grid2)
     Test whether two grid descriptors are the same.
     
    procedure is_same_grid_grib1 (self, grid_desc)
     Test whether two grid descriptors are the same.
     
    - - - + + + - - + +

    -Private Attributes

    integer, dimension(200) gds
     Grib-1 grib descriptor section (GDS) More...

    +Data Fields

    integer, dimension(200) gds
     Grib-1 grib descriptor section (GDS)
     
    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod). More...
    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod).
     

    Detailed Description

    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.

    Date
    July 2021
    -

    Definition at line 38 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 39 of file ip_grid_descriptor_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ is_same_grid()

    + +

    ◆ is_same_grid()

    - -

    ◆ is_same_grid_grib1()

    + +

    ◆ is_same_grid_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + +
    procedure ip_grid_descriptor_mod::grib1_descriptor::is_same_grid_grib1procedure ip_grid_descriptor_mod::grib1_descriptor::is_same_grid_grib1 (class(grib1_descriptor), intent(in) self,
    class(grib1_descriptor), intent(in) grid_desc 
    )
    -
    -private

    Test whether two grid descriptors are the same.

    -
    Returns
    N/A
    +
    Returns
    N/A Test whether two grib1_descriptors are the same.
    +
    Parameters
    + + + +
    [in]selfThe grib1_descriptor which this routine was called on.
    [in]grid_descA grib1_descriptor to compare.
    +
    +
    +
    Returns
    True if the grids are the same, false if they are not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 42 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 44 of file ip_grid_descriptor_mod.F90.

    Field Documentation

    - -

    ◆ gds

    + +

    ◆ gds

    - - - - - -
    integer, dimension(200) ip_grid_descriptor_mod::grib1_descriptor::gds
    -
    -private

    Grib-1 grib descriptor section (GDS)

    -

    Definition at line 39 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 40 of file ip_grid_descriptor_mod.F90.

    - -

    ◆ grid_num

    + +

    ◆ grid_num

    @@ -222,7 +260,7 @@

    -privateinherited +inherited

    @@ -242,7 +280,7 @@

    diff --git a/structip__grid__descriptor__mod_1_1grib1__descriptor.js b/structip__grid__descriptor__mod_1_1grib1__descriptor.js index af5c5429..ff782614 100644 --- a/structip__grid__descriptor__mod_1_1grib1__descriptor.js +++ b/structip__grid__descriptor__mod_1_1grib1__descriptor.js @@ -1,7 +1,7 @@ var structip__grid__descriptor__mod_1_1grib1__descriptor = [ - [ "is_same_grid", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a9da102dac348a63ffce6556ed5da81b6", null ], - [ "is_same_grid_grib1", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a33b4fc04d218c73e3c4d061163dcbc95", null ], + [ "is_same_grid", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a264988a6fa9b15eb88ae2482c4b69a84", null ], + [ "is_same_grid_grib1", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#ab51405a373b8ae0a012466bbbc916552", null ], [ "gds", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a08920c194e39d562fbf527939f0ac6c9", null ], [ "grid_num", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a6d4598dc4bbf46e059f636715cc390f1", null ] ]; \ No newline at end of file diff --git a/structip__grid__descriptor__mod_1_1grib1__descriptor.png b/structip__grid__descriptor__mod_1_1grib1__descriptor.png index 1ca1b0c0..1cb7939c 100644 Binary files a/structip__grid__descriptor__mod_1_1grib1__descriptor.png and b/structip__grid__descriptor__mod_1_1grib1__descriptor.png differ diff --git a/structip__grid__descriptor__mod_1_1grib2__descriptor.html b/structip__grid__descriptor__mod_1_1grib2__descriptor.html index 97d86f73..a5be0dc3 100644 --- a/structip__grid__descriptor__mod_1_1grib2__descriptor.html +++ b/structip__grid__descriptor__mod_1_1grib2__descriptor.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_grid_descriptor_mod::grib2_descriptor Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_grid_descriptor_mod::grib2_descriptor Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_grid_descriptor_mod::grib2_descriptor Type Reference
    @@ -102,38 +108,38 @@
    - - - - - - - + + + + + + +

    -Private Member Functions

    procedure is_same_grid
     Test whether two grid descriptors are the same. More...
     
    procedure is_same_grid_grib2
     Test whether two grid descriptors are the same. More...
     

    +Public Member Functions

    procedure is_same_grid (grid1, grid2)
     Test whether two grid descriptors are the same.
     
    procedure is_same_grid_grib2 (self, grid_desc)
     Test whether two grid descriptors are the same.
     
    - - - + + + - - + + - - + + - - + +

    -Private Attributes

    integer gdt_len
     Length of the template. More...

    +Data Fields

    integer gdt_len
     Length of the template.
     
    integer gdt_num
     Grid number which represents grid type. More...
    integer gdt_num
     Grid number which represents grid type.
     
    integer, dimension(:), allocatable gdt_tmpl
     Grib-2 grid definition template. More...
    integer, dimension(:), allocatable gdt_tmpl
     Grib-2 grid definition template.
     
    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod). More...
    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod).
     

    Detailed Description

    Grib-2 descriptor containing a grib2 GDT represented by an integer array.

    Date
    July 2021
    -

    Definition at line 47 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 49 of file ip_grid_descriptor_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ is_same_grid()

    + +

    ◆ is_same_grid()

    - -

    ◆ is_same_grid_grib2()

    + +

    ◆ is_same_grid_grib2()

    - - - - - -
    - + + + + + + + + + + + + + + +
    procedure ip_grid_descriptor_mod::grib2_descriptor::is_same_grid_grib2procedure ip_grid_descriptor_mod::grib2_descriptor::is_same_grid_grib2 (class(grib2_descriptor), intent(in) self,
    class(grib2_descriptor), intent(in) grid_desc 
    )
    -
    -private

    Test whether two grid descriptors are the same.

    -
    Returns
    N/A
    +
    Returns
    N/A Test whether two grib2_descriptors are the same.
    +
    Parameters
    + + + +
    [in]selfThe grib2_descriptor which this routine was called on.
    [in]grid_descgrib2_descriptor to compare.
    +
    +
    +
    Returns
    True if the grids are the same, false if they are not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 53 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 56 of file ip_grid_descriptor_mod.F90.

    Field Documentation

    - -

    ◆ gdt_len

    + +

    ◆ gdt_len

    - - - - - -
    integer ip_grid_descriptor_mod::grib2_descriptor::gdt_len
    -
    -private

    Length of the template.

    -

    Definition at line 49 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 51 of file ip_grid_descriptor_mod.F90.

    - -

    ◆ gdt_num

    + +

    ◆ gdt_num

    - - - - - -
    integer ip_grid_descriptor_mod::grib2_descriptor::gdt_num
    -
    -private

    Grid number which represents grid type.

    -

    Definition at line 48 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 50 of file ip_grid_descriptor_mod.F90.

    - -

    ◆ gdt_tmpl

    + +

    ◆ gdt_tmpl

    - - - - - -
    integer, dimension(:), allocatable ip_grid_descriptor_mod::grib2_descriptor::gdt_tmpl
    -
    -private

    Grib-2 grid definition template.

    -

    Definition at line 50 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 52 of file ip_grid_descriptor_mod.F90.

    - -

    ◆ grid_num

    + +

    ◆ grid_num

    @@ -280,7 +302,7 @@

    -privateinherited +inherited

    @@ -300,7 +322,7 @@

    diff --git a/structip__grid__descriptor__mod_1_1grib2__descriptor.js b/structip__grid__descriptor__mod_1_1grib2__descriptor.js index 23620eb7..2f9976fc 100644 --- a/structip__grid__descriptor__mod_1_1grib2__descriptor.js +++ b/structip__grid__descriptor__mod_1_1grib2__descriptor.js @@ -1,7 +1,7 @@ var structip__grid__descriptor__mod_1_1grib2__descriptor = [ - [ "is_same_grid", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#a9da102dac348a63ffce6556ed5da81b6", null ], - [ "is_same_grid_grib2", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#ae27b09a835144baf782e2cde0c1ea013", null ], + [ "is_same_grid", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#a264988a6fa9b15eb88ae2482c4b69a84", null ], + [ "is_same_grid_grib2", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#aa23aa26e7de6904fdb773aa3a5df04be", null ], [ "gdt_len", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#abf8e6d212308608a039e8e97c05c4a06", null ], [ "gdt_num", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#aa5dd78817926e0246f93819ab7037e19", null ], [ "gdt_tmpl", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#a3a90e1ef19332a1d8ec1f6a3193c6ebe", null ], diff --git a/structip__grid__descriptor__mod_1_1grib2__descriptor.png b/structip__grid__descriptor__mod_1_1grib2__descriptor.png index 8ad07329..e9b64a7f 100644 Binary files a/structip__grid__descriptor__mod_1_1grib2__descriptor.png and b/structip__grid__descriptor__mod_1_1grib2__descriptor.png differ diff --git a/structip__grid__descriptor__mod_1_1ip__grid__descriptor.html b/structip__grid__descriptor__mod_1_1ip__grid__descriptor.html index d7f674e8..3d8c0ed8 100644 --- a/structip__grid__descriptor__mod_1_1ip__grid__descriptor.html +++ b/structip__grid__descriptor__mod_1_1ip__grid__descriptor.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_grid_descriptor_mod::ip_grid_descriptor Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_grid_descriptor_mod::ip_grid_descriptor Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_grid_descriptor_mod::ip_grid_descriptor Type Reference
    @@ -103,16 +109,16 @@
    - - - - + + + +

    -Private Member Functions

    procedure is_same_grid
     Test whether two grid descriptors are the same. More...
     

    +Public Member Functions

    procedure is_same_grid (grid1, grid2)
     Test whether two grid descriptors are the same.
     
    - - - + + +

    -Private Attributes

    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod). More...

    +Data Fields

    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod).
     

    Detailed Description

    @@ -121,52 +127,60 @@

    Definition at line 28 of file ip_grid_descriptor_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ is_same_grid()

    + +

    ◆ is_same_grid()

    - - - - - -
    - + + + + + + + + + + + + + + +
    procedure ip_grid_descriptor_mod::ip_grid_descriptor::is_same_gridprocedure ip_grid_descriptor_mod::ip_grid_descriptor::is_same_grid (class(ip_grid_descriptor), intent(in) grid1,
    class(ip_grid_descriptor), intent(in) grid2 
    )
    -
    -private

    Test whether two grid descriptors are the same.

    -
    Returns
    N/A
    +
    Returns
    N/A Test whether two grid descriptors are the same.
    +
    Parameters
    + + + +
    [in]grid1An ip_grid_descriptor.
    [in]grid2Another ip_grid_descriptor.
    +
    +
    +
    Returns
    True if the grids are the same, false if they are not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 32 of file ip_grid_descriptor_mod.F90.

    +

    Definition at line 33 of file ip_grid_descriptor_mod.F90.

    Field Documentation

    - -

    ◆ grid_num

    + +

    ◆ grid_num

    - - - - - -
    integer ip_grid_descriptor_mod::ip_grid_descriptor::grid_num
    -
    -private

    Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod).

    @@ -184,7 +198,7 @@

    diff --git a/structip__grid__descriptor__mod_1_1ip__grid__descriptor.js b/structip__grid__descriptor__mod_1_1ip__grid__descriptor.js index 20582279..f4100d7e 100644 --- a/structip__grid__descriptor__mod_1_1ip__grid__descriptor.js +++ b/structip__grid__descriptor__mod_1_1ip__grid__descriptor.js @@ -1,5 +1,5 @@ var structip__grid__descriptor__mod_1_1ip__grid__descriptor = [ - [ "is_same_grid", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a9da102dac348a63ffce6556ed5da81b6", null ], + [ "is_same_grid", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a264988a6fa9b15eb88ae2482c4b69a84", null ], [ "grid_num", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a6d4598dc4bbf46e059f636715cc390f1", null ] ]; \ No newline at end of file diff --git a/structip__grid__descriptor__mod_1_1ip__grid__descriptor.png b/structip__grid__descriptor__mod_1_1ip__grid__descriptor.png index 9e35e497..378de816 100644 Binary files a/structip__grid__descriptor__mod_1_1ip__grid__descriptor.png and b/structip__grid__descriptor__mod_1_1ip__grid__descriptor.png differ diff --git a/structip__grid__mod_1_1ip__grid.html b/structip__grid__mod_1_1ip__grid.html index 65436865..a1a50ea7 100644 --- a/structip__grid__mod_1_1ip__grid.html +++ b/structip__grid__mod_1_1ip__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_grid_mod::ip_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@
    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_grid_mod::ip_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_grid_mod::ip_grid Type Reference
    @@ -109,232 +115,172 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure(gdswzd_interface), deferred gdswzd
     Coordinate transformations for the grid. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure(init_grib1_interface), deferred init_grib1
     Initializer for grib1 input descriptor. More...
     
    procedure(init_grib2_interface), deferred init_grib2
     Initializer for grib2 input descriptor. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + +

    -Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...

    +Data Fields

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     

    Detailed Description

    Abstract grid that holds fields and methods common to all grids.

    ip_grid is meant to be subclassed when implementing a new grid.

    There are three methods that must be implemented:

    The init methods are responsible for setting up the grid using GRIB1/GRIB2 descriptors.

    -

    gdswzd() performs transformations to and from Earth coordinates and grid coordinates.

    +

    gdswzd() performs transformations to and from Earth coordinates and grid coordinates.

    A good reference for all the map projection equations used by NCEPLIBS-ip can be found here: https://doi.org/10.3133/pp1395.

    Author
    Kyle Gerheiser
    Date
    July 2021

    Definition at line 58 of file ip_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - - - - - -
    - + + + + -
    procedure ip_grid_mod::ip_grid::field_posprocedure ip_grid_mod::ip_grid::field_pos (class(ip_grid), intent(in) self,
    -
    -private
    -
    - -

    Field position for a given grid point.

    -
    Returns
    Integer position in grib field to locate grid point.
    - -

    Definition at line 88 of file ip_grid_mod.F90.

    - -
    -
    - -

    ◆ gdswzd()

    - -
    -
    - - - - - -
    - - + + + + -
    procedure(gdswzd_interface), deferred ip_grid_mod::ip_grid::gdswzdinteger, intent(in) i,
    -
    -private
    -
    - -

    Coordinate transformations for the grid.

    -
    Returns
    N/A
    - -

    Definition at line 85 of file ip_grid_mod.F90.

    - -
    -
    - -

    ◆ init()

    - -
    -
    - - - - - -
    - - + + + + + + + + +
    generic ip_grid_mod::ip_grid::initinteger, intent(in) j 
    )
    -
    -private
    -

    Init subprogram.

    -
    Returns
    N/A
    +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    +

    Returns the field position for a given grid point.

    +
    Parameters
    + + + + +
    [in]self
    [in]i
    [in]j
    +
    +
    +
    Returns
    Integer position in grib field to locate grid point.
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    April 1996
    -

    Definition at line 90 of file ip_grid_mod.F90.

    +

    Definition at line 91 of file ip_grid_mod.F90.

    - -

    ◆ init_grib1()

    + +

    ◆ init() [1/2]

    - - - - - -
    - +
    procedure(init_grib1_interface), deferred ip_grid_mod::ip_grid::init_grib1generic ip_grid_mod::ip_grid::init
    -
    -private
    -

    Initializer for grib1 input descriptor.

    +

    Init subprogram.

    Returns
    N/A
    -

    Definition at line 81 of file ip_grid_mod.F90.

    +

    Definition at line 93 of file ip_grid_mod.F90.

    - -

    ◆ init_grib2()

    + +

    ◆ init() [2/2]

    - - - - - -
    - +
    procedure(init_grib2_interface), deferred ip_grid_mod::ip_grid::init_grib2generic ip_grid_mod::ip_grid::init
    -
    -private
    -

    Initializer for grib2 input descriptor.

    +

    Init subprogram.

    Returns
    N/A
    -

    Definition at line 83 of file ip_grid_mod.F90.

    +

    Definition at line 93 of file ip_grid_mod.F90.

    Field Documentation

    - -

    ◆ descriptor

    + +

    ◆ descriptor

    - - - - - -
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    -
    -private

    Descriptor.

    @@ -343,24 +289,16 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    - - - - - -
    real ip_grid_mod::ip_grid::eccen_squared
    -
    -private

    Eccentricity of the Earth squared (e^2).

    @@ -369,24 +307,16 @@

    -

    ◆ im

    + +

    ◆ im

    - - - - - -
    integer ip_grid_mod::ip_grid::im
    -
    -private

    Number of x points.

    @@ -395,24 +325,16 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    - - - - - -
    integer ip_grid_mod::ip_grid::iwrap
    -
    -private

    x wraparound increment (0 if no wraparound).

    @@ -421,24 +343,16 @@

    -

    ◆ jm

    + +

    ◆ jm

    - - - - - -
    integer ip_grid_mod::ip_grid::jm
    -
    -private

    Number of y points.

    @@ -447,24 +361,16 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    - - - - - -
    integer ip_grid_mod::ip_grid::jwrap1
    -
    -private

    y wraparound lower pivot point (0 if no wraparound).

    @@ -473,24 +379,16 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    - - - - - -
    integer ip_grid_mod::ip_grid::jwrap2
    -
    -private

    y wraparound upper pivot point (0 if no wraparound).

    @@ -499,24 +397,16 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    - - - - - -
    integer ip_grid_mod::ip_grid::kscan
    -
    -private

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    @@ -525,24 +415,16 @@

    -

    ◆ nm

    + +

    ◆ nm

    - - - - - -
    integer ip_grid_mod::ip_grid::nm
    -
    -private

    Total number of points.

    @@ -551,24 +433,16 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    - - - - - -
    integer ip_grid_mod::ip_grid::nscan
    -
    -private
    Parameters
    @@ -586,24 +460,16 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    -

    - - - - -
    integer ip_grid_mod::ip_grid::nscan_field_pos
    -
    -private

    nscan for field_pos routine.

    @@ -613,24 +479,16 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    - - - - - -
    real ip_grid_mod::ip_grid::rerth
    -
    -private

    Radius of the Earth.

    @@ -648,7 +506,7 @@

    diff --git a/structip__grid__mod_1_1ip__grid.js b/structip__grid__mod_1_1ip__grid.js index d4a1fd30..05f8c41f 100644 --- a/structip__grid__mod_1_1ip__grid.js +++ b/structip__grid__mod_1_1ip__grid.js @@ -1,10 +1,8 @@ var structip__grid__mod_1_1ip__grid = [ - [ "field_pos", "structip__grid__mod_1_1ip__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__grid__mod_1_1ip__grid.html#a5fb366fb577a90cc09f21269b90ac080", null ], - [ "init", "structip__grid__mod_1_1ip__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__grid__mod_1_1ip__grid.html#a5a2c16279eb73a0c54ae0a1586d5b806", null ], - [ "init_grib2", "structip__grid__mod_1_1ip__grid.html#ad13e0ad8d616e1839ced388826fefee9", null ], + [ "field_pos", "structip__grid__mod_1_1ip__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "init", "structip__grid__mod_1_1ip__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__grid__mod_1_1ip__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], [ "descriptor", "structip__grid__mod_1_1ip__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "eccen_squared", "structip__grid__mod_1_1ip__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], [ "im", "structip__grid__mod_1_1ip__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], diff --git a/structip__grid__mod_1_1ip__grid.png b/structip__grid__mod_1_1ip__grid.png index 81595cd4..09adbee9 100644 Binary files a/structip__grid__mod_1_1ip__grid.png and b/structip__grid__mod_1_1ip__grid.png differ diff --git a/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html b/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html index d99f1331..cf9aca52 100644 --- a/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html +++ b/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_lambert_conf_grid_mod::ip_lambert_conf_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_lambert_conf_grid_mod::ip_lambert_conf_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_lambert_conf_grid_mod::ip_lambert_conf_grid Type Reference
    @@ -99,95 +105,98 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_lambert_conf
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Initializes a gaussian grid given a grib1_descriptor object.
     
    procedure init_grib2 (self, g2_desc)
     Initializes a gaussian grid given a grib2_descriptor object.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + +

    -Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...

    +Data Fields

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real dxs
     x-direction grid length adjusted for scan mode. More...
    real dxs
     x-direction grid length adjusted for scan mode.
     
    real dys
     y-direction grid length adjusted for scan model. More...
    real dys
     y-direction grid length adjusted for scan model.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    real h
     Hemisphere flag. More...
    real h
     Hemisphere flag.
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer irot
     vector rotation flag. More...
    integer irot
     vector rotation flag.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real orient
     Longitude of meridian parallel to y-axis along which latitude increases at the latitude increases. More...
    real orient
     Longitude of meridian parallel to y-axis along which latitude increases at the latitude increases.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     
    real rlat1
     La1― latitude of first grid point. More...
    real rlat1
     La1― latitude of first grid point.
     
    real rlati1
     First latitude from the pole at which the secant cone cuts the sphere. More...
    real rlati1
     First latitude from the pole at which the secant cone cuts the sphere.
     
    real rlati2
     Second latitude from the pole at which the scant cone cuts the sphere. More...
    real rlati2
     Second latitude from the pole at which the scant cone cuts the sphere.
     
    real rlon1
     Lo1― longitude of first grid point. More...
    real rlon1
     Lo1― longitude of first grid point.
     

    Detailed Description

    Definition at line 24 of file ip_lambert_conf_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - -

    ◆ gdswzd()

    + +

    ◆ gdswzd()

    - - - - - -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::gdswzdprocedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::gdswzd (class(ip_lambert_conf_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    -
    -private

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    -
    Returns
    N/A
    +
    Returns
    N/A GDS wizard for lambert conformal conical.
    +

    This subprogram decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for lambert conformal conical projections.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas for this grid may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. To compute the grid box areas the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell Initial.
    96-10-01 iredell protected against unresolvable points
    97-10-20 iredell include map options
    1999-04-27 gilbert corrected minor error calculating variable an for the secant projection case (rlati1.ne.rlati2).
    2012-08-14 gayno fix problem with sh grids. Ensure grid box area always positive.
    2015-01-21 gayno merger of gdswiz03() and gdswzd03(). Make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. Make part of a module. Move vector rotation, map jacobian and grid box area computations to separate subroutines.
    2015-07-13 gayno Convert to grib 2. Replace grib 1 kgds array with grib 2 grid definition template array. Rename routine.
    2018-07-20 wesley add threads.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfip_lambert_conf_grid object.
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsmaximum number of coordinates
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xpts(npts) grid x point coordinates if iopt>0
    [in,out]ypts(npts) grid y point coordinates if iopt>0
    [in,out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed
    [out]crotoptional (npts) clockwise vector rotation cosines
    [out]srotoptional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonoptional (npts) dx/dlon in 1/degrees
    [out]xlatoptional (npts) dx/dlat in 1/degrees
    [out]ylonoptional (npts) dy/dlon in 1/degrees
    [out]ylatoptional (npts) dy/dlat in 1/degrees
    [out]areaoptional (npts) area weights in m**2 (proportional to the square of the map factor)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    -

    Definition at line 41 of file ip_lambert_conf_grid_mod.F90.

    +

    Definition at line 44 of file ip_lambert_conf_grid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [1/2]

    - -

    ◆ init_grib1()

    + +

    ◆ init() [2/2]

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + + + +
    procedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib2procedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib1 (class(ip_lambert_conf_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A Initializes a Lambert Conformal grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 37 of file ip_lambert_conf_grid_mod.F90.

    + +
    + + +

    ◆ init_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + +
    procedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib2 (class(ip_lambert_conf_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Initializes a gaussian grid given a grib2_descriptor object.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes a Lambert Conformal grid given a grib2_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    -

    Definition at line 38 of file ip_lambert_conf_grid_mod.F90.

    +

    Definition at line 40 of file ip_lambert_conf_grid_mod.F90.

    Field Documentation

    - -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -337,7 +586,7 @@

    -privateinherited +inherited

    @@ -348,24 +597,16 @@

    -

    ◆ dxs

    + +

    ◆ dxs

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::dxs
    -
    -private

    x-direction grid length adjusted for scan mode.

    @@ -375,24 +616,16 @@

    -

    ◆ dys

    + +

    ◆ dys

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::dys
    -
    -private

    y-direction grid length adjusted for scan model.

    @@ -402,8 +635,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -417,7 +650,7 @@

    -privateinherited +inherited

    @@ -428,24 +661,16 @@

    -

    ◆ h

    + +

    ◆ h

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::h
    -
    -private

    Hemisphere flag.

    @@ -455,8 +680,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -470,7 +695,7 @@

    -privateinherited +inherited

    @@ -481,24 +706,16 @@

    -

    ◆ irot

    + +

    ◆ irot

    - - - - - -
    integer ip_lambert_conf_grid_mod::ip_lambert_conf_grid::irot
    -
    -private

    vector rotation flag.

    @@ -508,8 +725,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -523,7 +740,7 @@

    -privateinherited +inherited

    @@ -534,8 +751,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -549,7 +766,7 @@

    -privateinherited +inherited

    @@ -560,8 +777,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -575,7 +792,7 @@

    -privateinherited +inherited

    @@ -586,8 +803,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -601,7 +818,7 @@

    -privateinherited +inherited

    @@ -612,8 +829,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -627,7 +844,7 @@

    -privateinherited +inherited

    @@ -638,8 +855,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -653,7 +870,7 @@

    -privateinherited +inherited

    @@ -664,8 +881,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -679,7 +896,7 @@

    -privateinherited +inherited

    @@ -699,8 +916,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -714,7 +931,7 @@

    -privateinherited +inherited

    @@ -726,24 +943,16 @@

    -

    ◆ orient

    + +

    ◆ orient

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::orient
    -
    -private

    Longitude of meridian parallel to y-axis along which latitude increases at the latitude increases.

    @@ -753,8 +962,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -768,7 +977,7 @@

    -privateinherited +inherited

    @@ -779,24 +988,16 @@

    -

    ◆ rlat1

    + +

    ◆ rlat1

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlat1
    -
    -private

    La1― latitude of first grid point.

    @@ -806,24 +1007,16 @@

    -

    ◆ rlati1

    + +

    ◆ rlati1

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlati1
    -
    -private

    First latitude from the pole at which the secant cone cuts the sphere.

    @@ -833,24 +1026,16 @@

    -

    ◆ rlati2

    + +

    ◆ rlati2

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlati2
    -
    -private

    Second latitude from the pole at which the scant cone cuts the sphere.

    @@ -860,24 +1045,16 @@

    -

    ◆ rlon1

    + +

    ◆ rlon1

    - - - - - -
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlon1
    -
    -private

    Lo1― longitude of first grid point.

    @@ -896,7 +1073,7 @@

    diff --git a/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.js b/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.js index 68099979..f82e4061 100644 --- a/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.js +++ b/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.js @@ -1,10 +1,11 @@ var structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid = [ - [ "field_pos", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#aa69861340bc268b91a1076048ed489fc", null ], - [ "init", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a35dd86b4a9017f5b03a0a6a01eb4d370", null ], - [ "init_grib2", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a64129413df8ea478ab1360fd1a274e9a", null ], + [ "field_pos", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a4fbf6d843796ecdb2d9516fd409cd4f9", null ], + [ "init", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a36be1740b8ec6bc374b8b2881033cd6c", null ], + [ "init_grib2", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#adfef5696d6e69b84a5ea448dc50b0b83", null ], [ "descriptor", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "dxs", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#aa3288a7fbf2db34946116c771e5bc7dc", null ], [ "dys", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a46fa89562e4dd23c765029d2d6c087bc", null ], diff --git a/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.png b/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.png index a7f309bc..98ed0201 100644 Binary files a/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.png and b/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.png differ diff --git a/structip__mercator__grid__mod_1_1ip__mercator__grid.html b/structip__mercator__grid__mod_1_1ip__mercator__grid.html index f210f13e..63dacecc 100644 --- a/structip__mercator__grid__mod_1_1ip__mercator__grid.html +++ b/structip__mercator__grid__mod_1_1ip__mercator__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_mercator_grid_mod::ip_mercator_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_mercator_grid_mod::ip_mercator_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_mercator_grid_mod::ip_mercator_grid Type Reference
    @@ -99,89 +105,92 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_mercator
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Initializes a gaussian grid given a grib1_descriptor object.
     
    procedure init_grib2 (self, g2_desc)
     Initializes a gaussian grid given a grib2_descriptor object.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + +

    -Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...

    +Data Fields

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real dlon
     Longitudinal direction grid length. More...
    real dlon
     Longitudinal direction grid length.
     
    real dphi
     Latitudinal direction grid length. More...
    real dphi
     Latitudinal direction grid length.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    real hi
     Scan mode in the 'i' direction. More...
    real hi
     Scan mode in the 'i' direction.
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     
    real rlat1
     Latitude of first grid point. More...
    real rlat1
     Latitude of first grid point.
     
    real rlati
     Latitude at which the Mercator projection intersects the Earth. More...
    real rlati
     Latitude at which the Mercator projection intersects the Earth.
     
    real rlon1
     Longitude of first grid point. More...
    real rlon1
     Longitude of first grid point.
     
    real rlon2
     Longitude of last grid point. More...
    real rlon2
     Longitude of last grid point.
     

    Detailed Description

    Definition at line 22 of file ip_mercator_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - -

    ◆ gdswzd()

    + +

    ◆ gdswzd()

    - - - - - -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_mercator_grid_mod::ip_mercator_grid::gdswzdprocedure ip_mercator_grid_mod::ip_mercator_grid::gdswzd (class(ip_mercator_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    -
    -private

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    -
    Returns
    N/A gdswzd()
    -
    -N/A
    +
    Returns
    N/A GDS wizard for mercator cylindrical.
    +

    This routine decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for mercator cylindrical projections.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and the grid box areas may be returned. To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. to compute the grid box areas, the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell Initial
    96-10-01 iredell protected against unresolvable points
    97-10-20 iredell include map options
    2015-01-21 gayno merger of gdswiz01() and gdswzd01(). Make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. Make part of a module. move vector rotation, map jacobian and grid box area computations to separate subroutines.
    2015-07-13 gayno convert to grib 2. replace grib 1 kgds array with grib 2 grid definition template array. Rename.
    2018-07-20 wesley add threads.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfgrid descriptor.
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsmaximum number of coordinates
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xpts(npts) grid x point coordinates if iopt>0
    [in,out]ypts(npts) grid y point coordinates if iopt>0
    [in,out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed
    [out]crotoptional (npts) clockwise vector rotation cosines
    [out]srotoptional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonoptional (npts) dx/dlon in 1/degrees
    [out]xlatoptional (npts) dx/dlat in 1/degrees
    [out]ylonoptional (npts) dy/dlon in 1/degrees
    [out]ylatoptional (npts) dy/dlat in 1/degrees
    [out]areaoptional (npts) area weights in m**2 (proportional to the square of the map factor)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    -

    Definition at line 37 of file ip_mercator_grid_mod.F90.

    +

    Definition at line 40 of file ip_mercator_grid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [1/2]

    - -

    ◆ init_grib1()

    + +

    ◆ init() [2/2]

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + + + +
    procedure ip_mercator_grid_mod::ip_mercator_grid::init_grib2procedure ip_mercator_grid_mod::ip_mercator_grid::init_grib1 (class(ip_mercator_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A Initializes a mercator grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfip_mercator_grid object.
    [in]g1_descGRIB1 descriptor.
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 33 of file ip_mercator_grid_mod.F90.

    + +
    + + +

    ◆ init_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + +
    procedure ip_mercator_grid_mod::ip_mercator_grid::init_grib2 (class(ip_mercator_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Initializes a gaussian grid given a grib2_descriptor object.

    -
    Returns
    N/A
    +
    Returns
    N/A Init GRIB2.
    +
    Parameters
    + + + +
    [in,out]selfip_mercator_grid object.
    [in]g2_descGRIB2 descriptor.
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    -

    Definition at line 34 of file ip_mercator_grid_mod.F90.

    +

    Definition at line 36 of file ip_mercator_grid_mod.F90.

    Field Documentation

    - -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -333,7 +574,7 @@

    -privateinherited +inherited

    @@ -344,24 +585,16 @@

    -

    ◆ dlon

    + +

    ◆ dlon

    - - - - - -
    real ip_mercator_grid_mod::ip_mercator_grid::dlon
    -
    -private

    Longitudinal direction grid length.

    @@ -371,24 +604,16 @@

    -

    ◆ dphi

    + +

    ◆ dphi

    - - - - - -
    real ip_mercator_grid_mod::ip_mercator_grid::dphi
    -
    -private

    Latitudinal direction grid length.

    @@ -398,8 +623,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -413,7 +638,7 @@

    -privateinherited +inherited

    @@ -424,24 +649,16 @@

    -

    ◆ hi

    + +

    ◆ hi

    - - - - - -
    real ip_mercator_grid_mod::ip_mercator_grid::hi
    -
    -private

    Scan mode in the 'i' direction.

    @@ -451,8 +668,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -466,7 +683,7 @@

    -privateinherited +inherited

    @@ -477,8 +694,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -492,7 +709,7 @@

    -privateinherited +inherited

    @@ -503,8 +720,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -518,7 +735,7 @@

    -privateinherited +inherited

    @@ -529,8 +746,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -544,7 +761,7 @@

    -privateinherited +inherited

    @@ -555,8 +772,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -570,7 +787,7 @@

    -privateinherited +inherited

    @@ -581,8 +798,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -596,7 +813,7 @@

    -privateinherited +inherited

    @@ -607,8 +824,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -622,7 +839,7 @@

    -privateinherited +inherited

    @@ -633,8 +850,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -648,7 +865,7 @@

    -privateinherited +inherited

    @@ -668,8 +885,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -683,7 +900,7 @@

    -privateinherited +inherited

    @@ -695,8 +912,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -710,7 +927,7 @@

    -privateinherited +inherited

    @@ -721,24 +938,16 @@

    -

    ◆ rlat1

    + +

    ◆ rlat1

    - - - - - -
    real ip_mercator_grid_mod::ip_mercator_grid::rlat1
    -
    -private

    Latitude of first grid point.

    @@ -748,24 +957,16 @@

    -

    ◆ rlati

    + +

    ◆ rlati

    - - - - - -
    real ip_mercator_grid_mod::ip_mercator_grid::rlati
    -
    -private

    Latitude at which the Mercator projection intersects the Earth.

    @@ -775,24 +976,16 @@

    -

    ◆ rlon1

    + +

    ◆ rlon1

    - - - - - -
    real ip_mercator_grid_mod::ip_mercator_grid::rlon1
    -
    -private

    Longitude of first grid point.

    @@ -802,24 +995,16 @@

    -

    ◆ rlon2

    + +

    ◆ rlon2

    - - - - - -
    real ip_mercator_grid_mod::ip_mercator_grid::rlon2
    -
    -private

    Longitude of last grid point.

    @@ -838,7 +1023,7 @@

    diff --git a/structip__mercator__grid__mod_1_1ip__mercator__grid.js b/structip__mercator__grid__mod_1_1ip__mercator__grid.js index 8852aa25..da01e292 100644 --- a/structip__mercator__grid__mod_1_1ip__mercator__grid.js +++ b/structip__mercator__grid__mod_1_1ip__mercator__grid.js @@ -1,10 +1,11 @@ var structip__mercator__grid__mod_1_1ip__mercator__grid = [ - [ "field_pos", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a940420aa99e0fbe51a976f9d0c343f1a", null ], - [ "init", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a3ae3bbb47f4c03c36404a2b35014d65c", null ], - [ "init_grib2", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a505b0114c7ff5fbb58c4e7ce5ccde3f0", null ], + [ "field_pos", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#aac84596473d43673fa523f658f934f3d", null ], + [ "init", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a819d01342cfb040b9e67f61d258cca59", null ], + [ "init_grib2", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a34194cbd2cbec84f1b04cb8ade644f44", null ], [ "descriptor", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "dlon", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a455057778c7f2ad677956bdef2d754ee", null ], [ "dphi", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a39168528a2c207b2e2c5373487d705c5", null ], diff --git a/structip__mercator__grid__mod_1_1ip__mercator__grid.png b/structip__mercator__grid__mod_1_1ip__mercator__grid.png index 942758ef..1e1e2b25 100644 Binary files a/structip__mercator__grid__mod_1_1ip__mercator__grid.png and b/structip__mercator__grid__mod_1_1ip__mercator__grid.png differ diff --git a/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html b/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html index e96e0fc3..a2dae5c5 100644 --- a/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html +++ b/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_polar_stereo_grid_mod::ip_polar_stereo_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_polar_stereo_grid_mod::ip_polar_stereo_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_polar_stereo_grid_mod::ip_polar_stereo_grid Type Reference
    @@ -99,95 +105,98 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_polar_stereo
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1). More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a grid given a grib2_descriptor object. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1).
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Initializes a grid given a grib1_descriptor object.
     
    procedure init_grib2 (self, g2_desc)
     Initializes a grid given a grib2_descriptor object.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + +

    -Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...

    +Data Fields

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real dxs
     'x'-direction grid length, adjusted by the scanning mode. More...
    real dxs
     'x'-direction grid length, adjusted by the scanning mode.
     
    real dys
     'y'-direction grid length, adjusted by the scanning mode. More...
    real dys
     'y'-direction grid length, adjusted by the scanning mode.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    logical elliptical
     When true/false, computations are based on an elliptical/spherical earth. More...
    logical elliptical
     When true/false, computations are based on an elliptical/spherical earth.
     
    real h
     Hemisphere flag. More...
    real h
     Hemisphere flag.
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer irot
     Rotation flag. More...
    integer irot
     Rotation flag.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real orient
     Orientation longitude. More...
    real orient
     Orientation longitude.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     
    real rlat1
     Latitude of the first grid point. More...
    real rlat1
     Latitude of the first grid point.
     
    real rlon1
     Longitude of the first grid point. More...
    real rlon1
     Longitude of the first grid point.
     
    real slatr
     Standard latitude of grid in radians. More...
    real slatr
     Standard latitude of grid in radians.
     

    Detailed Description

    Definition at line 23 of file ip_polar_stereo_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - -

    ◆ gdswzd()

    + +

    ◆ gdswzd()

    - - - - - -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::gdswzdprocedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::gdswzd (class(ip_polar_stereo_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    -
    -private

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1).

    -
    Returns
    N/A
    +
    Returns
    N/A GDS wizard for polar stereographic azimuthal.
    +

    This subprogram decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for polar stereographic azimuthal projections.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians, and grid box areas may be returned as well. Routine works for both spherical and elliptical earths with the exception of the map jacobians and grid box areas, which are only computed for spherical earths.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. to compute the grid box areas, the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell Initial
    97-10-20 iredell include map options
    09-05-13 gayno ensure area always positive
    2015-01-21 gayno merger of gdswiz05 and gdswzd05. make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. make part of a module. move vector rotation, map jacobian and grid box area computations to separate subroutines. include option for elliptical earths.
    2015-07-13 gayno convert to grib 2. replace grib 1 kgds array with grib 2 grid definition template array. rename routine.
    2018-07-20 wesley add threading.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfgrid
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsmaximum number of coordinates
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xpts(npts) grid x point coordinates if iopt>0
    [in,out]ypts(npts) grid y point coordinates if iopt>0
    [in,out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed
    [out]crotoptional (npts) clockwise vector rotation cosines
    [out]srotoptional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonoptional (npts) dx/dlon in 1/degrees
    [out]xlatoptional (npts) dx/dlat in 1/degrees
    [out]ylonoptional (npts) dy/dlon in 1/degrees
    [out]ylatoptional (npts) dy/dlat in 1/degrees
    [out]areaoptional (npts) area weights in m**2 (proportional to the square of the map factor)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    -

    Definition at line 41 of file ip_polar_stereo_grid_mod.F90.

    +

    Definition at line 46 of file ip_polar_stereo_grid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [1/2]

    - -

    ◆ init_grib1()

    + +

    ◆ init() [2/2]

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + + + +
    procedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib2procedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib1 (class(ip_polar_stereo_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    + +

    Initializes a grid given a grib1_descriptor object.

    +
    Returns
    N/A Initializes a polar stereographic grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 39 of file ip_polar_stereo_grid_mod.F90.

    + +
    + + +

    ◆ init_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + +
    procedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib2 (class(ip_polar_stereo_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Initializes a grid given a grib2_descriptor object.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes a polar stereographic grid given a grib2_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    -

    Definition at line 38 of file ip_polar_stereo_grid_mod.F90.

    +

    Definition at line 42 of file ip_polar_stereo_grid_mod.F90.

    Field Documentation

    - -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -337,7 +581,7 @@

    -privateinherited +inherited

    @@ -348,24 +592,16 @@

    -

    ◆ dxs

    + +

    ◆ dxs

    - - - - - -
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::dxs
    -
    -private

    'x'-direction grid length, adjusted by the scanning mode.

    @@ -374,24 +610,16 @@

    -

    ◆ dys

    + +

    ◆ dys

    - - - - - -
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::dys
    -
    -private

    'y'-direction grid length, adjusted by the scanning mode.

    @@ -400,8 +628,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -415,7 +643,7 @@

    -privateinherited +inherited

    @@ -426,24 +654,16 @@

    -

    ◆ elliptical

    + +

    ◆ elliptical

    - - - - - -
    logical ip_polar_stereo_grid_mod::ip_polar_stereo_grid::elliptical
    -
    -private

    When true/false, computations are based on an elliptical/spherical earth.

    @@ -452,24 +672,16 @@

    -

    ◆ h

    + +

    ◆ h

    - - - - - -
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::h
    -
    -private

    Hemisphere flag.

    @@ -479,8 +691,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -494,7 +706,7 @@

    -privateinherited +inherited

    @@ -505,24 +717,16 @@

    -

    ◆ irot

    + +

    ◆ irot

    - - - - - -
    integer ip_polar_stereo_grid_mod::ip_polar_stereo_grid::irot
    -
    -private

    Rotation flag.

    @@ -532,8 +736,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -547,7 +751,7 @@

    -privateinherited +inherited

    @@ -558,8 +762,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -573,7 +777,7 @@

    -privateinherited +inherited

    @@ -584,8 +788,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -599,7 +803,7 @@

    -privateinherited +inherited

    @@ -610,8 +814,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -625,7 +829,7 @@

    -privateinherited +inherited

    @@ -636,8 +840,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -651,7 +855,7 @@

    -privateinherited +inherited

    @@ -662,8 +866,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -677,7 +881,7 @@

    -privateinherited +inherited

    @@ -688,8 +892,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -703,7 +907,7 @@

    -privateinherited +inherited

    @@ -723,8 +927,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -738,7 +942,7 @@

    -privateinherited +inherited

    @@ -750,24 +954,16 @@

    -

    ◆ orient

    + +

    ◆ orient

    - - - - - -
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::orient
    -
    -private

    Orientation longitude.

    @@ -776,8 +972,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -791,7 +987,7 @@

    -privateinherited +inherited

    @@ -802,24 +998,16 @@

    -

    ◆ rlat1

    + +

    ◆ rlat1

    - - - - - -
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::rlat1
    -
    -private

    Latitude of the first grid point.

    @@ -828,24 +1016,16 @@

    -

    ◆ rlon1

    + +

    ◆ rlon1

    - - - - - -
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::rlon1
    -
    -private

    Longitude of the first grid point.

    @@ -854,24 +1034,16 @@

    -

    ◆ slatr

    + +

    ◆ slatr

    - - - - - -
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::slatr
    -
    -private

    Standard latitude of grid in radians.

    @@ -889,7 +1061,7 @@

    diff --git a/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.js b/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.js index 32b6b141..81f8117a 100644 --- a/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.js +++ b/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.js @@ -1,10 +1,11 @@ var structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid = [ - [ "field_pos", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9e97b7352e67dd629f622f292cf0ca21", null ], - [ "init", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ae2a5a7c08e4578f3d0ff6b85e5a14cce", null ], - [ "init_grib2", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9622ce9892084b52303f27722572b87c", null ], + [ "field_pos", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ad71855b6293dc7be0d8ff418cad9e7d3", null ], + [ "init", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#adcabd864f1c2d0ea18dfa0ffa3e3ecaf", null ], + [ "init_grib2", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a591d405c9ad8520a7030154e627bc461", null ], [ "descriptor", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "dxs", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ac009bce0c0c14b3e0970da6c032a11b1", null ], [ "dys", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a95e155383895ad3f56a3876877b5896b", null ], diff --git a/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.png b/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.png index b5c2a91e..6d0bca7f 100644 Binary files a/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.png and b/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.png differ diff --git a/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html b/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html index 89d8efc4..a51b71db 100644 --- a/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html +++ b/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid Type Reference
    @@ -99,95 +105,98 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_rot_equid_cylind_egrid
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1). More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1).
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object.
     
    procedure init_grib2 (self, g2_desc)
     Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + +

    -Private Attributes

    real(kdclat0
     Cosine of the latitude of the southern pole of projection. More...

    +Data Fields

    real(kdclat0
     Cosine of the latitude of the southern pole of projection.
     
    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real(kddlats
     'J'-direction grid increment. More...
    real(kddlats
     'J'-direction grid increment.
     
    real(kddlons
     'I'-direction grid increment. More...
    real(kddlons
     'I'-direction grid increment.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    real(kdhi
     Scan mode in the 'i' direction. More...
    real(kdhi
     Scan mode in the 'i' direction.
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer irot
     Rotation flag. More...
    integer irot
     Rotation flag.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     
    real(kdrlat1
     Latitude of first grid point. More...
    real(kdrlat1
     Latitude of first grid point.
     
    real(kdrlon0
     Longitude of southern pole of projection. More...
    real(kdrlon0
     Longitude of southern pole of projection.
     
    real(kdrlon1
     Longitude of first grid point. More...
    real(kdrlon1
     Longitude of first grid point.
     
    real(kdslat0
     Sine of the latitude of the southern pole of projection. More...
    real(kdslat0
     Sine of the latitude of the southern pole of projection.
     

    Detailed Description

    Definition at line 37 of file ip_rot_equid_cylind_egrid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - -

    ◆ gdswzd()

    + +

    ◆ gdswzd()

    - - - - - -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::gdswzdprocedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::gdswzd (class(ip_rot_equid_cylind_egrid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    -
    -private

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1).

    -
    Returns
    N/A
    +
    Returns
    N/A Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for rotated equidistant cylindrical grids.
    +

    Works for e-staggered rotated equidistant cylindrical projections. The scan mode determines whether this is an "h" or "v" grid.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too. Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present.

    +

    To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid object gdswzd was called on.
    [in]ioptoption flag
      +
    • +1 to compute earth coords of selected grid coords.
    • +
    • -1 o compute grid coords of selected earth coords.
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates if iopt>0.
    [in,out]yptsGrid y point coordinates if iopt>0.
    [in,out]rlonEarth longitudes in degrees e if iopt<0 (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees n if iopt<0 (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotOptional clockwise vector rotation cosines.
    [out]srotOptional clockwise vector rotation sines.
    [out]xlonOptional dx/dlon in 1/degrees.
    [out]xlatOptional dx/dlat in 1/degrees.
    [out]ylonOptional dy/dlon in 1/degrees.
    [out]ylatOptional dy/dlat in 1/degrees.
    [out]areaOptional area weights in m**2.
    +
    +
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    Jan 2015
    -

    Definition at line 59 of file ip_rot_equid_cylind_egrid_mod.F90.

    +

    Definition at line 62 of file ip_rot_equid_cylind_egrid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [1/2]

    - -

    ◆ init_grib1()

    + +

    ◆ init() [2/2]

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + + + +
    procedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib2procedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib1 (class(ip_rot_equid_cylind_egrid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    + +

    Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object.

    +
    Returns
    N/A Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 54 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    + + +

    ◆ init_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + +
    procedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib2 (class(ip_rot_equid_cylind_egrid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    -

    Definition at line 56 of file ip_rot_equid_cylind_egrid_mod.F90.

    +

    Definition at line 58 of file ip_rot_equid_cylind_egrid_mod.F90.

    Field Documentation

    - -

    ◆ clat0

    + +

    ◆ clat0

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::clat0
    -
    -private

    Cosine of the latitude of the southern pole of projection.

    @@ -348,8 +561,8 @@

    -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -363,7 +576,7 @@

    -privateinherited +inherited

    @@ -374,24 +587,16 @@

    -

    ◆ dlats

    + +

    ◆ dlats

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::dlats
    -
    -private

    'J'-direction grid increment.

    @@ -400,24 +605,16 @@

    -

    ◆ dlons

    + +

    ◆ dlons

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::dlons
    -
    -private

    'I'-direction grid increment.

    @@ -426,8 +623,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -441,7 +638,7 @@

    -privateinherited +inherited

    @@ -452,24 +649,16 @@

    -

    ◆ hi

    + +

    ◆ hi

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::hi
    -
    -private

    Scan mode in the 'i' direction.

    @@ -478,8 +667,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -493,7 +682,7 @@

    -privateinherited +inherited

    @@ -504,24 +693,16 @@

    -

    ◆ irot

    + +

    ◆ irot

    - - - - - -
    integer ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::irot
    -
    -private

    Rotation flag.

    @@ -531,8 +712,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -546,7 +727,7 @@

    -privateinherited +inherited

    @@ -557,8 +738,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -572,7 +753,7 @@

    -privateinherited +inherited

    @@ -583,8 +764,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -598,7 +779,7 @@

    -privateinherited +inherited

    @@ -609,8 +790,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -624,7 +805,7 @@

    -privateinherited +inherited

    @@ -635,8 +816,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -650,7 +831,7 @@

    -privateinherited +inherited

    @@ -661,8 +842,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -676,7 +857,7 @@

    -privateinherited +inherited

    @@ -687,8 +868,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -702,7 +883,7 @@

    -privateinherited +inherited

    @@ -722,8 +903,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -737,7 +918,7 @@

    -privateinherited +inherited

    @@ -749,8 +930,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -764,7 +945,7 @@

    -privateinherited +inherited

    @@ -775,24 +956,16 @@

    -

    ◆ rlat1

    + +

    ◆ rlat1

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlat1
    -
    -private

    Latitude of first grid point.

    @@ -801,24 +974,16 @@

    -

    ◆ rlon0

    + +

    ◆ rlon0

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlon0
    -
    -private

    Longitude of southern pole of projection.

    @@ -827,24 +992,16 @@

    -

    ◆ rlon1

    + +

    ◆ rlon1

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlon1
    -
    -private

    Longitude of first grid point.

    @@ -853,24 +1010,16 @@

    -

    ◆ slat0

    + +

    ◆ slat0

    - - - - - -
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::slat0
    -
    -private

    Sine of the latitude of the southern pole of projection.

    @@ -888,7 +1037,7 @@

    diff --git a/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.js b/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.js index fa593342..fc6e7521 100644 --- a/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.js +++ b/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.js @@ -1,10 +1,11 @@ var structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid = [ - [ "field_pos", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a62c8147f8845d75e8f52c7524a74c780", null ], - [ "init", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ab9a85830bfd06183a8df73726f62217a", null ], - [ "init_grib2", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#adda32463a76ad97ac35b01f1ac693fa4", null ], + [ "field_pos", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a1442af4a25a658fb23d8c64a8a993a0b", null ], + [ "init", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a19254fbf7b4744a2e4e53cf74af99fd6", null ], + [ "init_grib2", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a5e3f069c3f05bc89041f5702e1fb00b8", null ], [ "clat0", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a7a1b97e05b77bb7563165bf3f3e97dda", null ], [ "descriptor", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "dlats", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a00d41c3d43370d3f02bb92d59f66866c", null ], diff --git a/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.png b/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.png index 4a47e89a..5e963b26 100644 Binary files a/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.png and b/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.png differ diff --git a/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html b/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html index 6a372b93..56d2bfaf 100644 --- a/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html +++ b/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid Type Reference
    @@ -99,92 +105,95 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_rot_equid_cylind
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a Rotated equidistant cylindrical given a grib2_descriptor object. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object.
     
    procedure init_grib2 (self, g2_desc)
     Initializes a Rotated equidistant cylindrical given a grib2_descriptor object.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + +

    -Private Attributes

    real(kdclat0
     Cosine of the latitude of the southern pole of projection. More...

    +Data Fields

    real(kdclat0
     Cosine of the latitude of the southern pole of projection.
     
    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real(kddlats
     'J'-direction grid increment. More...
    real(kddlats
     'J'-direction grid increment.
     
    real(kddlons
     'I'-direction grid increment. More...
    real(kddlons
     'I'-direction grid increment.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer irot
     Rotation flag. More...
    integer irot
     Rotation flag.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     
    real(kdrlon0
     Longitude of southern pole of projection. More...
    real(kdrlon0
     Longitude of southern pole of projection.
     
    real(kdsbd
     Latitude of the southern boundary of the grid before rotation. More...
    real(kdsbd
     Latitude of the southern boundary of the grid before rotation.
     
    real(kdslat0
     Sine of the latitude of the southern pole of projection. More...
    real(kdslat0
     Sine of the latitude of the southern pole of projection.
     
    real(kdwbd
     Longitude of the western boundary of the grid before rotation. More...
    real(kdwbd
     Longitude of the western boundary of the grid before rotation.
     

    Detailed Description

    Definition at line 32 of file ip_rot_equid_cylind_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - -

    ◆ gdswzd()

    + +

    ◆ gdswzd()

    - - - - - -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::gdswzdprocedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::gdswzd (class(ip_rot_equid_cylind_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    -
    -private

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    -
    Returns
    N/A
    +
    Returns
    N/A GDS wizard for rotated equidistant cylindrical.
    +

    This subprogram decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for non-"e" staggered rotated equidistant cylindrical projections. the scan mode (section 3, octet 72, bits 5-6) determine whether this is an "h" or "v" grid.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. To compute the grid box areas, the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + +
    Date Programmer Comments
    2010-jan-15 gayno based on routines gdswzdcb and gdswzdca
    2015-jan-21 gayno merger of gdswizcd and gdswzdcd. make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. make part of a module. move vector rotation, map jacobian and grid box area computations to separate subroutines.
    2015-jul-13 gayno convert to grib 2. replace grib 1 kgds array with grib 2 grid definition template array. rename as "gdswzd_rot_equid_cylind."
    2018-07-20 wesley add threads.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfModule reference.
    [in]ioptinteger option flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsinteger maximum number of coordinates
    [in]fillreal fill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xptsreal (npts) grid x point coordinates if iopt>0
    [in,out]yptsreal (npts) grid y point coordinates if iopt>0
    [in,out]rlonreal (npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlatreal (npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretinteger number of valid points computed
    [out]crotreal, optional (npts) clockwise vector rotation cosines
    [out]srotreal, optional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonreal, optional (npts) dx/dlon in 1/degrees
    [out]xlatreal, optional (npts) dx/dlat in 1/degrees
    [out]ylonreal, optional (npts) dy/dlon in 1/degrees
    [out]ylatreal, optional (npts) dy/dlat in 1/degrees
    [out]areareal, optional (npts) area weights in m**2
    +
    +
    +
    Author
    Gayno
    +
    Date
    2007-NOV-15
    -

    Definition at line 53 of file ip_rot_equid_cylind_grid_mod.F90.

    +

    Definition at line 56 of file ip_rot_equid_cylind_grid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [1/2]

    - -

    ◆ init_grib1()

    + +

    ◆ init() [2/2]

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + + + +
    procedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib2procedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib1 (class(ip_rot_equid_cylind_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    + +

    Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object.

    +
    Returns
    N/A Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Gayno
    +
    Date
    2007-NOV-15
    + +

    Definition at line 48 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    + + +

    ◆ init_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + +
    procedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib2 (class(ip_rot_equid_cylind_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Initializes a Rotated equidistant cylindrical given a grib2_descriptor object.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object.
    +

    Call 'use_ncep_post_arakawa()' before using this subroutine to use ncep_post-compatible grid definition.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Alex Richert
    +
    Date
    2024-MAY-20
    -

    Definition at line 50 of file ip_rot_equid_cylind_grid_mod.F90.

    +

    Definition at line 52 of file ip_rot_equid_cylind_grid_mod.F90.

    Field Documentation

    - -

    ◆ clat0

    + +

    ◆ clat0

    - - - - - -
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::clat0
    -
    -private

    Cosine of the latitude of the southern pole of projection.

    @@ -345,8 +575,8 @@

    -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -360,7 +590,7 @@

    -privateinherited +inherited

    @@ -371,24 +601,16 @@

    -

    ◆ dlats

    + +

    ◆ dlats

    - - - - - -
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::dlats
    -
    -private

    'J'-direction grid increment.

    @@ -397,24 +619,16 @@

    -

    ◆ dlons

    + +

    ◆ dlons

    - - - - - -
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::dlons
    -
    -private

    'I'-direction grid increment.

    @@ -423,8 +637,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -438,7 +652,7 @@

    -privateinherited +inherited

    @@ -449,8 +663,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -464,7 +678,7 @@

    -privateinherited +inherited

    @@ -475,24 +689,16 @@

    -

    ◆ irot

    + +

    ◆ irot

    - - - - - -
    integer ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::irot
    -
    -private

    Rotation flag.

    @@ -502,8 +708,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -517,7 +723,7 @@

    -privateinherited +inherited

    @@ -528,8 +734,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -543,7 +749,7 @@

    -privateinherited +inherited

    @@ -554,8 +760,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -569,7 +775,7 @@

    -privateinherited +inherited

    @@ -580,8 +786,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -595,7 +801,7 @@

    -privateinherited +inherited

    @@ -606,8 +812,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -621,7 +827,7 @@

    -privateinherited +inherited

    @@ -632,8 +838,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -647,7 +853,7 @@

    -privateinherited +inherited

    @@ -658,8 +864,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -673,7 +879,7 @@

    -privateinherited +inherited

    @@ -693,8 +899,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -708,7 +914,7 @@

    -privateinherited +inherited

    @@ -720,8 +926,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -735,7 +941,7 @@

    -privateinherited +inherited

    @@ -746,24 +952,16 @@

    -

    ◆ rlon0

    + +

    ◆ rlon0

    - - - - - -
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::rlon0
    -
    -private

    Longitude of southern pole of projection.

    @@ -772,24 +970,16 @@

    -

    ◆ sbd

    + +

    ◆ sbd

    - - - - - -
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::sbd
    -
    -private

    Latitude of the southern boundary of the grid before rotation.

    @@ -798,24 +988,16 @@

    -

    ◆ slat0

    + +

    ◆ slat0

    - - - - - -
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::slat0
    -
    -private

    Sine of the latitude of the southern pole of projection.

    @@ -824,24 +1006,16 @@

    -

    ◆ wbd

    + +

    ◆ wbd

    - - - - - -
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::wbd
    -
    -private

    Longitude of the western boundary of the grid before rotation.

    @@ -859,7 +1033,7 @@

    diff --git a/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.js b/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.js index 696035bb..e1d33583 100644 --- a/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.js +++ b/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.js @@ -1,10 +1,11 @@ var structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid = [ - [ "field_pos", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a0f14a253b51bcb0633cd00d32d5130a4", null ], - [ "init", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a9942c787bda2e118f1355476670edfca", null ], - [ "init_grib2", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a30ae580d169972e8d68c3d97ab3b2634", null ], + [ "field_pos", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a02d398fd4eface830af2c786e1f33055", null ], + [ "init", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#afe3cd2637f7b618a40cda510f4472c79", null ], + [ "init_grib2", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a87f3f4f67868002cb8fc8dd5608fe97a", null ], [ "clat0", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a49835868e8c8b96e243a5992daee6ea5", null ], [ "descriptor", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "dlats", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#affd9cfc7a0e1d8e74735eac35b2e03c6", null ], diff --git a/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.png b/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.png index 9dd76b75..5ff66798 100644 Binary files a/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.png and b/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.png differ diff --git a/structip__station__points__grid__mod_1_1ip__station__points__grid.html b/structip__station__points__grid__mod_1_1ip__station__points__grid.html index 3082ed30..60a644df 100644 --- a/structip__station__points__grid__mod_1_1ip__station__points__grid.html +++ b/structip__station__points__grid__mod_1_1ip__station__points__grid.html @@ -1,9 +1,9 @@ - + - - + + NCEPLIBS-ip: ip_station_points_grid_mod::ip_station_points_grid Type Reference @@ -23,10 +23,9 @@
    - - + @@ -34,21 +33,22 @@
    -
    NCEPLIBS-ip -  5.1.0 +
    +
    NCEPLIBS-ip 5.2.0
    - + +/* @license-end */ +
    @@ -62,7 +62,7 @@

    @@ -76,17 +76,23 @@
    - +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    -
    -
    ip_station_points_grid_mod::ip_station_points_grid Type Reference
    +Public Member Functions | +Data Fields
    +
    ip_station_points_grid_mod::ip_station_points_grid Type Reference
    @@ -99,68 +105,71 @@
    - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +

    -Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_station_points
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for IP Station Point grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     

    +Public Member Functions

    procedure field_pos (self, i, j)
     Field position for a given grid point.
     
    procedure gdswzd (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for IP Station Point grids.
     
    generic init init_grib1
     Init subprogram.
     
    generic init init_grib2
     Init subprogram.
     
    procedure init_grib1 (self, g1_desc)
     Initializes a gaussian grid given a grib1_descriptor object.
     
    procedure init_grib2 (self, g2_desc)
     Initializes a gaussian grid given a grib2_descriptor object.
     
    - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + +

    -Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...

    +Data Fields

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor.
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
    real eccen_squared
     Eccentricity of the Earth squared (e^2).
     
    integer im
     Number of x points. More...
    integer im
     Number of x points.
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
    integer iwrap
     x wraparound increment (0 if no wraparound).
     
    integer jm
     Number of y points. More...
    integer jm
     Number of y points.
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound).
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound).
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).
     
    integer nm
     Total number of points. More...
    integer nm
     Total number of points.
     
    integer nscan
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
    integer nscan_field_pos
     nscan for field_pos routine.
     
    real rerth
     Radius of the Earth. More...
    real rerth
     Radius of the Earth.
     

    Detailed Description

    Definition at line 18 of file ip_station_points_grid_mod.F90.

    Member Function/Subroutine Documentation

    - -

    ◆ field_pos()

    + +

    ◆ field_pos()

    - -

    ◆ gdswzd()

    + +

    ◆ gdswzd()

    - - - - - -
    - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    procedure ip_station_points_grid_mod::ip_station_points_grid::gdswzdprocedure ip_station_points_grid_mod::ip_station_points_grid::gdswzd (class(ip_station_points_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    -
    -private

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for IP Station Point grids.

    -
    Returns
    N/A
    +
    Returns
    N/A Interpolate gridded data to a series of station points.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid.
    [in]IOPTmust be minus 1 (return grid coordinates for selected earth coordinates).
    [in]NPTSMaximum number of points.
    [in]FILLFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]XPTSX point coordinates. Always output.
    [in,out]YPTSY point coordinates. Always output.
    [in,out]RLONPoint longitudes. Always input.
    [in,out]RLATPoint latitudes. Always input.
    [out]NRETNumber of valid points computed.
    [out]CROTNot used.
    [out]SROTNot used.
    [out]XLONNot used.
    [out]XLATNot used.
    [out]YLONNot used.
    [out]YLATNot used.
    [out]AREANot used.
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    7/21/21
    +
    Author
    Eric Engle
    +
    Date
    5/4/23
    -

    Definition at line 26 of file ip_station_points_grid_mod.F90.

    +

    Definition at line 29 of file ip_station_points_grid_mod.F90.

    - -

    ◆ init()

    + +

    ◆ init() [1/2]

    - -

    ◆ init_grib1()

    + +

    ◆ init() [2/2]

    - -

    ◆ init_grib2()

    + +

    ◆ init_grib1()

    - - - - - -
    - + + + + + + + + + + + + + + + + +
    procedure ip_station_points_grid_mod::ip_station_points_grid::init_grib2procedure ip_station_points_grid_mod::ip_station_points_grid::init_grib1 (class(ip_station_points_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A Initializes an IP Station grid given a grib1_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 22 of file ip_station_points_grid_mod.F90.

    + +
    + + +

    ◆ init_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + +
    procedure ip_station_points_grid_mod::ip_station_points_grid::init_grib2 (class(ip_station_points_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    -
    -private

    Initializes a gaussian grid given a grib2_descriptor object.

    -
    Returns
    N/A
    +
    Returns
    N/A Initializes an IP Station grid given a grib2_descriptor object.
    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    -

    Definition at line 23 of file ip_station_points_grid_mod.F90.

    +

    Definition at line 25 of file ip_station_points_grid_mod.F90.

    Field Documentation

    - -

    ◆ descriptor

    + +

    ◆ descriptor

    @@ -310,7 +523,7 @@

    -privateinherited +inherited

    @@ -321,8 +534,8 @@

    -

    ◆ eccen_squared

    + +

    ◆ eccen_squared

    @@ -336,7 +549,7 @@

    -privateinherited +inherited

    @@ -347,8 +560,8 @@

    -

    ◆ im

    + +

    ◆ im

    @@ -362,7 +575,7 @@

    -privateinherited +inherited

    @@ -373,8 +586,8 @@

    -

    ◆ iwrap

    + +

    ◆ iwrap

    @@ -388,7 +601,7 @@

    -privateinherited +inherited

    @@ -399,8 +612,8 @@

    -

    ◆ jm

    + +

    ◆ jm

    @@ -414,7 +627,7 @@

    -privateinherited +inherited

    @@ -425,8 +638,8 @@

    -

    ◆ jwrap1

    + +

    ◆ jwrap1

    @@ -440,7 +653,7 @@

    -privateinherited +inherited

    @@ -451,8 +664,8 @@

    -

    ◆ jwrap2

    + +

    ◆ jwrap2

    @@ -466,7 +679,7 @@

    -privateinherited +inherited

    @@ -477,8 +690,8 @@

    -

    ◆ kscan

    + +

    ◆ kscan

    @@ -492,7 +705,7 @@

    -privateinherited +inherited

    @@ -503,8 +716,8 @@

    -

    ◆ nm

    + +

    ◆ nm

    @@ -518,7 +731,7 @@

    -privateinherited +inherited

    @@ -529,8 +742,8 @@

    -

    ◆ nscan

    + +

    ◆ nscan

    @@ -544,7 +757,7 @@

    -privateinherited +inherited

    @@ -564,8 +777,8 @@

    -

    ◆ nscan_field_pos

    + +

    ◆ nscan_field_pos

    @@ -579,7 +792,7 @@

    -privateinherited +inherited

    @@ -591,8 +804,8 @@

    -

    ◆ rerth

    + +

    ◆ rerth

    @@ -606,7 +819,7 @@

    -privateinherited +inherited

    diff --git a/structip__station__points__grid__mod_1_1ip__station__points__grid.js b/structip__station__points__grid__mod_1_1ip__station__points__grid.js index f8d6a0a4..39db142d 100644 --- a/structip__station__points__grid__mod_1_1ip__station__points__grid.js +++ b/structip__station__points__grid__mod_1_1ip__station__points__grid.js @@ -1,10 +1,11 @@ var structip__station__points__grid__mod_1_1ip__station__points__grid = [ - [ "field_pos", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], - [ "gdswzd", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a9fff8b24553d11177b8c1ee38bfbd91f", null ], - [ "init", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], - [ "init_grib1", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#aa5ec2cbc9bf0dadf20a226e0afeb3d32", null ], - [ "init_grib2", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a69fac68e7a40d5c3106a47bf1851891e", null ], + [ "field_pos", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#ad0430873da72a0a81f9f1086d44dd415", null ], + [ "gdswzd", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a807b4676d46bee923d8da142c568a6d9", null ], + [ "init", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a99982835dc866faae95d1d5d027e0d80", null ], + [ "init", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a6efe57f024c3d8ac77b5ecd8256c2bdf", null ], + [ "init_grib1", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#afddeaff2580e7f29ad0dc814db4058c6", null ], + [ "init_grib2", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a9ee208a252d14bda751a5a96078da5c7", null ], [ "descriptor", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], [ "eccen_squared", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], [ "im", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], diff --git a/structip__station__points__grid__mod_1_1ip__station__points__grid.png b/structip__station__points__grid__mod_1_1ip__station__points__grid.png index 2419f863..caa8b132 100644 Binary files a/structip__station__points__grid__mod_1_1ip__station__points__grid.png and b/structip__station__points__grid__mod_1_1ip__station__points__grid.png differ diff --git a/tab_ad.png b/tab_ad.png new file mode 100644 index 00000000..e34850ac Binary files /dev/null and b/tab_ad.png differ diff --git a/tab_bd.png b/tab_bd.png new file mode 100644 index 00000000..91c25249 Binary files /dev/null and b/tab_bd.png differ diff --git a/tab_hd.png b/tab_hd.png new file mode 100644 index 00000000..2489273d Binary files /dev/null and b/tab_hd.png differ diff --git a/tab_sd.png b/tab_sd.png new file mode 100644 index 00000000..757a565c Binary files /dev/null and b/tab_sd.png differ diff --git a/tabs.css b/tabs.css index 7d45d36c..df7944b7 100644 --- a/tabs.css +++ b/tabs.css @@ -1 +1 @@ -.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:var(--nav-menu-button-color);-webkit-transition:all 0.25s;transition:all 0.25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked~.main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}#main-menu-state:not(:checked)~#main-menu{display:none}#main-menu-state:checked~#main-menu{display:block}@media (min-width: 768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked)~#main-menu{display:block}}.sm-dox{background-image:var(--nav-gradient-image)}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:var(--font-family-nav);font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:var(--nav-text-normal-shadow);color:var(--nav-text-normal-color);outline:none}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:var(--nav-menu-toggle-color);border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:var(--nav-menu-background-color)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:var(--nav-menu-background-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:var(--nav-gradient-image);line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:var(--nav-text-normal-color) transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:var(--nav-separator-image);background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox a:hover span.sub-arrow{border-color:var(--nav-text-hover-color) transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent var(--nav-menu-background-color) transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:var(--nav-menu-background-color);border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent var(--nav-menu-foreground-color);border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:var(--nav-menu-foreground-color);background-image:none;border:0 !important;color:var(--nav-menu-foreground-color);background-image:none}.sm-dox ul a:hover{background-image:var(--nav-gradient-active-image);background-repeat:repeat-x;color:var(--nav-text-hover-color);text-shadow:var(--nav-text-hover-shadow)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent var(--nav-text-hover-color)}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:var(--nav-menu-background-color);height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent var(--nav-menu-foreground-color) transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:var(--nav-menu-foreground-color) transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:var(--nav-gradient-image)}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:var(--nav-menu-background-color)}} diff --git a/ver-5.1.0/annotated.html b/ver-5.1.0/annotated.html new file mode 100644 index 00000000..7bfc9a79 --- /dev/null +++ b/ver-5.1.0/annotated.html @@ -0,0 +1,152 @@ + + + + + + + +NCEPLIBS-ip: Data Types List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Data Types List
    +
    +
    +
    Here are the data types with brief descriptions:
    +
    [detail level 12]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Nbicubic_interp_modBicubic interpolation routines for scalars and vectors
     Cinterpolate_bicubic
     Nbilinear_interp_modBilinear interpolation routines for scalars and vectors
     Cinterpolate_bilinear
     Nbudget_interp_modBudget interpolation routines for scalars and vectors
     Cinterpolate_budget
     Ngdswzd_modDriver module for gdswzd routines
     Cgdswzd
     Nip_equid_cylind_grid_modEquidistant cylindrical grib decoder and grid coordinate transformations
     Cip_equid_cylind_grid
     Nip_gaussian_grid_modGaussian grid coordinate transformations
     Cip_gaussian_grid
     Nip_grid_descriptor_modUsers derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions
     Cgrib1_descriptorDescriptor representing a grib1 grib descriptor section (GDS) with an integer array
     Cgrib2_descriptorGrib-2 descriptor containing a grib2 GDT represented by an integer array
     Cinit_descriptor
     Cip_grid_descriptorAbstract descriptor object which represents a grib1 or grib2 descriptor
     Coperator(==)
     Nip_grid_factory_modRoutines for creating an ip_grid given a Grib descriptor
     Cinit_grid
     Nip_grid_modAbstract ip_grid type
     Cgdswzd_interface
     Cinit_grib1_interface
     Cinit_grib2_interface
     Cip_gridAbstract grid that holds fields and methods common to all grids
     Coperator(==)Check equality
     Nip_lambert_conf_grid_modLambert conformal grib decoder and grid coordinate transformations
     Cip_lambert_conf_grid
     Nip_mercator_grid_modGDS wizard for mercator cylindrical
     Cip_mercator_grid
     Nip_polar_stereo_grid_modGDS wizard for polar stereographic azimuthal
     Cip_polar_stereo_grid
     Nip_rot_equid_cylind_egrid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E
     Cip_rot_equid_cylind_egrid
     Nip_rot_equid_cylind_grid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D
     Cip_rot_equid_cylind_grid
     Nip_station_points_grid_modInterpolate gridded data to a series of station points
     Cip_station_points_grid
     Nipolates_modTop-level driver for scalar interpolation interpolation routine ipolates()
     Cipolates
     Nipolatev_modTop-level driver for vector interpolation interpolation routine ipolatev()
     Cipolatev
     Nneighbor_budget_interp_modInterpolate scalar fields (neighbor)
     Cinterpolate_neighbor_budget
     Nneighbor_interp_modInterpolate scalar fields (neighbor)
     Cinterpolate_neighbor
     Nspectral_interp_modInterpolate spectral
     Cinterpolate_spectral
     Cpolates4
     Cpolatev4
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/annotated_dup.js b/ver-5.1.0/annotated_dup.js new file mode 100644 index 00000000..fdb0e0fd --- /dev/null +++ b/ver-5.1.0/annotated_dup.js @@ -0,0 +1,73 @@ +var annotated_dup = +[ + [ "bicubic_interp_mod", "namespacebicubic__interp__mod.html", [ + [ "interpolate_bicubic", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html", "interfacebicubic__interp__mod_1_1interpolate__bicubic" ] + ] ], + [ "bilinear_interp_mod", "namespacebilinear__interp__mod.html", [ + [ "interpolate_bilinear", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html", "interfacebilinear__interp__mod_1_1interpolate__bilinear" ] + ] ], + [ "budget_interp_mod", "namespacebudget__interp__mod.html", [ + [ "interpolate_budget", "interfacebudget__interp__mod_1_1interpolate__budget.html", "interfacebudget__interp__mod_1_1interpolate__budget" ] + ] ], + [ "gdswzd_mod", "namespacegdswzd__mod.html", [ + [ "gdswzd", "interfacegdswzd__mod_1_1gdswzd.html", "interfacegdswzd__mod_1_1gdswzd" ] + ] ], + [ "ip_equid_cylind_grid_mod", "namespaceip__equid__cylind__grid__mod.html", [ + [ "ip_equid_cylind_grid", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid" ] + ] ], + [ "ip_gaussian_grid_mod", "namespaceip__gaussian__grid__mod.html", [ + [ "ip_gaussian_grid", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html", "structip__gaussian__grid__mod_1_1ip__gaussian__grid" ] + ] ], + [ "ip_grid_descriptor_mod", "namespaceip__grid__descriptor__mod.html", [ + [ "grib1_descriptor", "structip__grid__descriptor__mod_1_1grib1__descriptor.html", "structip__grid__descriptor__mod_1_1grib1__descriptor" ], + [ "grib2_descriptor", "structip__grid__descriptor__mod_1_1grib2__descriptor.html", "structip__grid__descriptor__mod_1_1grib2__descriptor" ], + [ "init_descriptor", "interfaceip__grid__descriptor__mod_1_1init__descriptor.html", "interfaceip__grid__descriptor__mod_1_1init__descriptor" ], + [ "ip_grid_descriptor", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html", "structip__grid__descriptor__mod_1_1ip__grid__descriptor" ], + [ "operator(==)", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08" ] + ] ], + [ "ip_grid_factory_mod", "namespaceip__grid__factory__mod.html", [ + [ "init_grid", "interfaceip__grid__factory__mod_1_1init__grid.html", "interfaceip__grid__factory__mod_1_1init__grid" ] + ] ], + [ "ip_grid_mod", "namespaceip__grid__mod.html", [ + [ "gdswzd_interface", "interfaceip__grid__mod_1_1gdswzd__interface.html", "interfaceip__grid__mod_1_1gdswzd__interface" ], + [ "init_grib1_interface", "interfaceip__grid__mod_1_1init__grib1__interface.html", "interfaceip__grid__mod_1_1init__grib1__interface" ], + [ "init_grib2_interface", "interfaceip__grid__mod_1_1init__grib2__interface.html", "interfaceip__grid__mod_1_1init__grib2__interface" ], + [ "ip_grid", "structip__grid__mod_1_1ip__grid.html", "structip__grid__mod_1_1ip__grid" ], + [ "operator(==)", "interfaceip__grid__mod_1_1operator_07_0a_0a_08.html", "interfaceip__grid__mod_1_1operator_07_0a_0a_08" ] + ] ], + [ "ip_lambert_conf_grid_mod", "namespaceip__lambert__conf__grid__mod.html", [ + [ "ip_lambert_conf_grid", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid" ] + ] ], + [ "ip_mercator_grid_mod", "namespaceip__mercator__grid__mod.html", [ + [ "ip_mercator_grid", "structip__mercator__grid__mod_1_1ip__mercator__grid.html", "structip__mercator__grid__mod_1_1ip__mercator__grid" ] + ] ], + [ "ip_polar_stereo_grid_mod", "namespaceip__polar__stereo__grid__mod.html", [ + [ "ip_polar_stereo_grid", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid" ] + ] ], + [ "ip_rot_equid_cylind_egrid_mod", "namespaceip__rot__equid__cylind__egrid__mod.html", [ + [ "ip_rot_equid_cylind_egrid", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid" ] + ] ], + [ "ip_rot_equid_cylind_grid_mod", "namespaceip__rot__equid__cylind__grid__mod.html", [ + [ "ip_rot_equid_cylind_grid", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid" ] + ] ], + [ "ip_station_points_grid_mod", "namespaceip__station__points__grid__mod.html", [ + [ "ip_station_points_grid", "structip__station__points__grid__mod_1_1ip__station__points__grid.html", "structip__station__points__grid__mod_1_1ip__station__points__grid" ] + ] ], + [ "ipolates_mod", "namespaceipolates__mod.html", [ + [ "ipolates", "interfaceipolates__mod_1_1ipolates.html", "interfaceipolates__mod_1_1ipolates" ] + ] ], + [ "ipolatev_mod", "namespaceipolatev__mod.html", [ + [ "ipolatev", "interfaceipolatev__mod_1_1ipolatev.html", "interfaceipolatev__mod_1_1ipolatev" ] + ] ], + [ "neighbor_budget_interp_mod", "namespaceneighbor__budget__interp__mod.html", [ + [ "interpolate_neighbor_budget", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget" ] + ] ], + [ "neighbor_interp_mod", "namespaceneighbor__interp__mod.html", [ + [ "interpolate_neighbor", "interfaceneighbor__interp__mod_1_1interpolate__neighbor.html", "interfaceneighbor__interp__mod_1_1interpolate__neighbor" ] + ] ], + [ "spectral_interp_mod", "namespacespectral__interp__mod.html", [ + [ "interpolate_spectral", "interfacespectral__interp__mod_1_1interpolate__spectral.html", "interfacespectral__interp__mod_1_1interpolate__spectral" ], + [ "polates4", "interfacespectral__interp__mod_1_1polates4.html", "interfacespectral__interp__mod_1_1polates4" ], + [ "polatev4", "interfacespectral__interp__mod_1_1polatev4.html", "interfacespectral__interp__mod_1_1polatev4" ] + ] ] +]; \ No newline at end of file diff --git a/ver-5.1.0/bc_s.png b/ver-5.1.0/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/ver-5.1.0/bc_s.png differ diff --git a/bdwn.png b/ver-5.1.0/bdwn.png similarity index 100% rename from bdwn.png rename to ver-5.1.0/bdwn.png diff --git a/ver-5.1.0/bicubic__interp__mod_8F90.html b/ver-5.1.0/bicubic__interp__mod_8F90.html new file mode 100644 index 00000000..1ae3ce7b --- /dev/null +++ b/ver-5.1.0/bicubic__interp__mod_8F90.html @@ -0,0 +1,134 @@ + + + + + + + +NCEPLIBS-ip: bicubic_interp_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    bicubic_interp_mod.F90 File Reference
    +
    +
    + +

    Bicubic interpolation routines for scalars and vectors. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  bicubic_interp_mod::interpolate_bicubic
     
    + + + + +

    +Modules

    module  bicubic_interp_mod
     Bicubic interpolation routines for scalars and vectors.
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine bicubic_interp_mod::interpolate_bicubic_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram performs bicubic interpolation from any grid to any grid for scalar fields. More...
     
    subroutine bicubic_interp_mod::interpolate_bicubic_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram performs bicubic interpolation from any grid to any grid for vector fields. More...
     
    +

    Detailed Description

    +

    Bicubic interpolation routines for scalars and vectors.

    +
    Author
    Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition in file bicubic_interp_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/bicubic__interp__mod_8F90.js b/ver-5.1.0/bicubic__interp__mod_8F90.js new file mode 100644 index 00000000..6b9a6998 --- /dev/null +++ b/ver-5.1.0/bicubic__interp__mod_8F90.js @@ -0,0 +1,6 @@ +var bicubic__interp__mod_8F90 = +[ + [ "interpolate_bicubic", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html", "interfacebicubic__interp__mod_1_1interpolate__bicubic" ], + [ "interpolate_bicubic_scalar", "bicubic__interp__mod_8F90.html#a54a442e47f1be9511c1684a337d7e2d1", null ], + [ "interpolate_bicubic_vector", "bicubic__interp__mod_8F90.html#a9d27db7d350fc2699aaf5057c3b53d16", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/bicubic__interp__mod_8F90_source.html b/ver-5.1.0/bicubic__interp__mod_8F90_source.html new file mode 100644 index 00000000..b31c8184 --- /dev/null +++ b/ver-5.1.0/bicubic__interp__mod_8F90_source.html @@ -0,0 +1,565 @@ + + + + + + + +NCEPLIBS-ip: bicubic_interp_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    bicubic_interp_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + +
    9  use gdswzd_mod
    +
    10  use polfix_mod
    +
    11  use ip_grids_mod
    +
    12  implicit none
    +
    13 
    +
    14  private
    +
    15  public :: interpolate_bicubic
    +
    16 
    + +
    18  module procedure interpolate_bicubic_scalar
    +
    19  module procedure interpolate_bicubic_vector
    +
    20  end interface interpolate_bicubic
    +
    21 
    +
    22  ! Smallest positive real value (use for equality comparisons)
    +
    23  REAL :: TINYREAL=tiny(1.0)
    +
    24 
    +
    25 contains
    +
    26 
    +
    80  SUBROUTINE interpolate_bicubic_scalar(IPOPT,grid_in,grid_out, &
    +
    81  MI,MO,KM,IBI,LI,GI, &
    +
    82  NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    83  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    84  INTEGER, INTENT(IN ) :: IPOPT(20)
    +
    85  INTEGER, INTENT(IN ) :: MI,MO,KM
    +
    86  INTEGER, INTENT(IN ) :: IBI(KM)
    +
    87  INTEGER, INTENT(INOUT) :: NO
    +
    88  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    89  !
    +
    90  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    91  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    92  !
    +
    93  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    94  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    95  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    96  !
    +
    97  REAL, PARAMETER :: FILL=-9999.
    +
    98  !
    +
    99  INTEGER :: IJX(4),IJY(4)
    +
    100  INTEGER :: MCON,MP,N,I,J,K
    +
    101  INTEGER :: NK,NV
    +
    102  LOGICAL :: SAME_GRIDI, SAME_GRIDO
    +
    103  !
    +
    104  REAL :: PMP,XIJ,YIJ,XF,YF
    +
    105  REAL :: G,W,GMIN,GMAX
    +
    106  REAL :: WX(4),WY(4)
    +
    107  REAL :: XPTS(MO),YPTS(MO)
    +
    108  logical :: to_station_points
    +
    109 
    +
    110  ! Save coeffecients between calls and only compute if grids have changed
    +
    111  REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
    +
    112  REAL, ALLOCATABLE,SAVE :: WXY(:,:,:)
    +
    113  INTEGER, SAVE :: NOX=-1,iretx=-1
    +
    114  INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:),NC(:)
    +
    115  class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
    +
    116 
    +
    117  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    118  ! SET PARAMETERS
    +
    119  iret=0
    +
    120  mcon=ipopt(1)
    +
    121  mp=ipopt(2)
    +
    122  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    123  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    124  pmp=mp*0.01
    +
    125 
    +
    126  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
    +
    127  allocate(prev_grid_in, source = grid_in)
    +
    128  allocate(prev_grid_out, source = grid_out)
    +
    129 
    +
    130  same_gridi = .false.
    +
    131  same_grido = .false.
    +
    132  else
    +
    133  same_gridi = grid_in == prev_grid_in
    +
    134  same_grido = grid_out == prev_grid_out
    +
    135 
    +
    136  if (.not. same_gridi .or. .not. same_grido) then
    +
    137  deallocate(prev_grid_in)
    +
    138  deallocate(prev_grid_out)
    +
    139 
    +
    140  allocate(prev_grid_in, source = grid_in)
    +
    141  allocate(prev_grid_out, source = grid_out)
    +
    142  end if
    +
    143  end if
    +
    144 
    +
    145  select type(grid_out)
    +
    146  type is(ip_station_points_grid)
    +
    147  to_station_points = .true.
    +
    148  class default
    +
    149  to_station_points = .false.
    +
    150  end select
    +
    151 
    +
    152  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    153  ! SAVE OR SKIP WEIGHT COMPUTATION
    +
    154  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
    +
    155  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    156  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    157  CALL gdswzd(grid_out,0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    158  IF(no.EQ.0) iret=3
    +
    159  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    160  ! LOCATE INPUT POINTS
    +
    161  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    162  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
    +
    163  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    164  ! ALLOCATE AND SAVE GRID DATA
    +
    165  IF(nox.NE.no) THEN
    +
    166  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,nc,nxy,wxy)
    +
    167  ALLOCATE(rlatx(no),rlonx(no),nc(no),nxy(4,4,no),wxy(4,4,no))
    +
    168  nox=no
    +
    169  ENDIF
    +
    170  iretx=iret
    +
    171  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    172  ! COMPUTE WEIGHTS
    +
    173  IF(iret.EQ.0) THEN
    +
    174  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY) SCHEDULE(STATIC)
    +
    175  DO n=1,no
    +
    176  rlonx(n)=rlon(n)
    +
    177  rlatx(n)=rlat(n)
    +
    178  xij=xpts(n)
    +
    179  yij=ypts(n)
    +
    180  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
    +
    181  ijx(1:4)=floor(xij-1)+(/0,1,2,3/)
    +
    182  ijy(1:4)=floor(yij-1)+(/0,1,2,3/)
    +
    183  xf=xij-ijx(2)
    +
    184  yf=yij-ijy(2)
    +
    185  DO j=1,4
    +
    186  DO i=1,4
    +
    187  nxy(i,j,n) = grid_in%field_pos(ijx(i), ijy(j))
    +
    188  ENDDO
    +
    189  ENDDO
    +
    190  IF(minval(nxy(1:4,1:4,n)).GT.0) THEN
    +
    191  ! BICUBIC WHERE 16-POINT STENCIL IS AVAILABLE
    +
    192  nc(n)=1
    +
    193  wx(1)=xf*(1-xf)*(2-xf)/(-6.)
    +
    194  wx(2)=(xf+1)*(1-xf)*(2-xf)/2.
    +
    195  wx(3)=(xf+1)*xf*(2-xf)/2.
    +
    196  wx(4)=(xf+1)*xf*(1-xf)/(-6.)
    +
    197  wy(1)=yf*(1-yf)*(2-yf)/(-6.)
    +
    198  wy(2)=(yf+1)*(1-yf)*(2-yf)/2.
    +
    199  wy(3)=(yf+1)*yf*(2-yf)/2.
    +
    200  wy(4)=(yf+1)*yf*(1-yf)/(-6.)
    +
    201  ELSE
    +
    202  ! BILINEAR ELSEWHERE NEAR THE EDGE OF THE GRID
    +
    203  nc(n)=2
    +
    204  wx(1)=0
    +
    205  wx(2)=(1-xf)
    +
    206  wx(3)=xf
    +
    207  wx(4)=0
    +
    208  wy(1)=0
    +
    209  wy(2)=(1-yf)
    +
    210  wy(3)=yf
    +
    211  wy(4)=0
    +
    212  ENDIF
    +
    213  DO j=1,4
    +
    214  DO i=1,4
    +
    215  wxy(i,j,n)=wx(i)*wy(j)
    +
    216  ENDDO
    +
    217  ENDDO
    +
    218  ELSE
    +
    219  nc(n)=0
    +
    220  ENDIF
    +
    221  ENDDO
    +
    222  ENDIF
    +
    223  ENDIF
    +
    224  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    225  ! INTERPOLATE OVER ALL FIELDS
    +
    226  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
    +
    227  IF(.not. to_station_points) THEN
    +
    228  no=nox
    +
    229  DO n=1,no
    +
    230  rlon(n)=rlonx(n)
    +
    231  rlat(n)=rlatx(n)
    +
    232  ENDDO
    +
    233  ENDIF
    +
    234  !$OMP PARALLEL DO PRIVATE(NK,K,N,G,W,GMIN,GMAX,J,I) SCHEDULE(STATIC)
    +
    235  DO nk=1,no*km
    +
    236  k=(nk-1)/no+1
    +
    237  n=nk-no*(k-1)
    +
    238  IF(nc(n).GT.0) THEN
    +
    239  g=0
    +
    240  w=0
    +
    241  IF(mcon.GT.0) gmin=huge(gmin)
    +
    242  IF(mcon.GT.0) gmax=-huge(gmax)
    +
    243  DO j=nc(n),5-nc(n)
    +
    244  DO i=nc(n),5-nc(n)
    +
    245  IF(nxy(i,j,n).GT.0)THEN
    +
    246  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k))THEN
    +
    247  g=g+wxy(i,j,n)*gi(nxy(i,j,n),k)
    +
    248  w=w+wxy(i,j,n)
    +
    249  IF(mcon.GT.0) gmin=min(gmin,gi(nxy(i,j,n),k))
    +
    250  IF(mcon.GT.0) gmax=max(gmax,gi(nxy(i,j,n),k))
    +
    251  ENDIF
    +
    252  ENDIF
    +
    253  ENDDO
    +
    254  ENDDO
    +
    255  lo(n,k)=w.GE.pmp
    +
    256  IF(lo(n,k)) THEN
    +
    257  go(n,k)=g/w
    +
    258  IF(mcon.GT.0) go(n,k)=min(max(go(n,k),gmin),gmax)
    +
    259  ELSE
    +
    260  go(n,k)=0.
    +
    261  ENDIF
    +
    262  ELSE
    +
    263  lo(n,k)=.false.
    +
    264  go(n,k)=0.
    +
    265  ENDIF
    +
    266  ENDDO
    +
    267  DO k=1,km
    +
    268  ibo(k)=ibi(k)
    +
    269  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
    +
    270  ENDDO
    +
    271  select type(grid_out)
    +
    272  type is(ip_equid_cylind_grid)
    +
    273  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
    +
    274  end select
    +
    275  ELSE
    +
    276  IF(iret.EQ.0) iret=iretx
    +
    277  IF(.not. to_station_points) no=0
    +
    278  ENDIF
    +
    279  end subroutine interpolate_bicubic_scalar
    +
    280 
    +
    338  subroutine interpolate_bicubic_vector(ipopt, grid_in, grid_out, &
    +
    339  mi, mo, km, ibi, li, ui, vi, &
    +
    340  no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
    +
    341  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    342  INTEGER, INTENT(IN ) :: IPOPT(20)
    +
    343  INTEGER, INTENT(IN ) :: IBI(KM),MI,MO,KM
    +
    344  INTEGER, INTENT(INOUT) :: NO
    +
    345  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    346  !
    +
    347  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    348  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    349  !
    +
    350  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    351  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO),CROT(MO),SROT(MO)
    +
    352  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    353  !
    +
    354  REAL, PARAMETER :: FILL=-9999.
    +
    355  !
    +
    356  INTEGER :: IJX(4),IJY(4)
    +
    357  INTEGER :: MCON,MP,N,I,J,K,NK,NV
    +
    358  !
    +
    359  LOGICAL :: SAME_GRIDI,SAME_GRIDO
    +
    360  !
    +
    361  REAL :: CM,SM,UROT,VROT
    +
    362  REAL :: PMP,XIJ,YIJ,XF,YF
    +
    363  REAL :: U,V,W,UMIN,UMAX,VMIN,VMAX
    +
    364  REAL :: XPTS(MO),YPTS(MO)
    +
    365  REAL :: WX(4),WY(4)
    +
    366  REAL :: XPTI(MI),YPTI(MI),RLOI(MI),RLAI(MI)
    +
    367  REAL :: CROI(MI),SROI(MI)
    +
    368 
    +
    369  logical :: to_station_points
    +
    370 
    +
    371  ! Save coeffecients between calls and only compute if grids have changed
    +
    372  REAL, ALLOCATABLE, SAVE :: RLATX(:),RLONX(:),CROTX(:),SROTX(:)
    +
    373  REAL, ALLOCATABLE, SAVE :: WXY(:,:,:),CXY(:,:,:),SXY(:,:,:)
    +
    374  INTEGER, SAVE :: NOX=-1,iretx=-1
    +
    375  INTEGER, ALLOCATABLE, SAVE :: NXY(:,:,:),NC(:)
    +
    376  class(ip_grid), allocatable, save :: prev_grid_in, prev_grid_out
    +
    377  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    378  ! SET PARAMETERS
    +
    379  iret=0
    +
    380  mcon=ipopt(1)
    +
    381  mp=ipopt(2)
    +
    382  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    383  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    384  pmp=mp*0.01
    +
    385 
    +
    386 
    +
    387  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
    +
    388  allocate(prev_grid_in, source = grid_in)
    +
    389  allocate(prev_grid_out, source = grid_out)
    +
    390 
    +
    391  same_gridi = .false.
    +
    392  same_grido = .false.
    +
    393  else
    +
    394  same_gridi = grid_in == prev_grid_in
    +
    395  same_grido = grid_out == prev_grid_out
    +
    396 
    +
    397  if (.not. same_gridi .or. .not. same_grido) then
    +
    398  deallocate(prev_grid_in)
    +
    399  deallocate(prev_grid_out)
    +
    400 
    +
    401  allocate(prev_grid_in, source = grid_in)
    +
    402  allocate(prev_grid_out, source = grid_out)
    +
    403  end if
    +
    404  end if
    +
    405 
    +
    406  select type(grid_out)
    +
    407  type is(ip_station_points_grid)
    +
    408  to_station_points = .true.
    +
    409  class default
    +
    410  to_station_points = .false.
    +
    411  end select
    +
    412 
    +
    413  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    414  ! SAVE OR SKIP WEIGHT COMPUTATION
    +
    415  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
    +
    416  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    417  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    418  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
    +
    419  IF(no.EQ.0) iret=3
    +
    420  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    421  ! LOCATE INPUT POINTS
    +
    422  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    423  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
    +
    424  CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
    +
    425  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    426  ! ALLOCATE AND SAVE GRID DATA
    +
    427  IF(nox.NE.no) THEN
    +
    428  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,crotx,srotx,nc,nxy,wxy,cxy,sxy)
    +
    429  ALLOCATE(rlatx(no),rlonx(no),crotx(no),srotx(no),nc(no), &
    +
    430  nxy(4,4,no),wxy(4,4,no),cxy(4,4,no),sxy(4,4,no))
    +
    431  nox=no
    +
    432  ENDIF
    +
    433  iretx=iret
    +
    434  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    435  ! COMPUTE WEIGHTS
    +
    436  IF(iret.EQ.0) THEN
    +
    437  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY,CM,SM) SCHEDULE(STATIC)
    +
    438  DO n=1,no
    +
    439  rlonx(n)=rlon(n)
    +
    440  rlatx(n)=rlat(n)
    +
    441  crotx(n)=crot(n)
    +
    442  srotx(n)=srot(n)
    +
    443  xij=xpts(n)
    +
    444  yij=ypts(n)
    +
    445  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
    +
    446  ijx(1:4)=floor(xij-1)+(/0,1,2,3/)
    +
    447  ijy(1:4)=floor(yij-1)+(/0,1,2,3/)
    +
    448  xf=xij-ijx(2)
    +
    449  yf=yij-ijy(2)
    +
    450  DO j=1,4
    +
    451  DO i=1,4
    +
    452  nxy(i,j,n) = grid_in%field_pos(ijx(i), ijy(j))
    +
    453  ENDDO
    +
    454  ENDDO
    +
    455  IF(minval(nxy(1:4,1:4,n)).GT.0) THEN
    +
    456  ! BICUBIC WHERE 16-POINT STENCIL IS AVAILABLE
    +
    457  nc(n)=1
    +
    458  wx(1)=xf*(1-xf)*(2-xf)/(-6.)
    +
    459  wx(2)=(xf+1)*(1-xf)*(2-xf)/2.
    +
    460  wx(3)=(xf+1)*xf*(2-xf)/2.
    +
    461  wx(4)=(xf+1)*xf*(1-xf)/(-6.)
    +
    462  wy(1)=yf*(1-yf)*(2-yf)/(-6.)
    +
    463  wy(2)=(yf+1)*(1-yf)*(2-yf)/2.
    +
    464  wy(3)=(yf+1)*yf*(2-yf)/2.
    +
    465  wy(4)=(yf+1)*yf*(1-yf)/(-6.)
    +
    466  ELSE
    +
    467  ! BILINEAR ELSEWHERE NEAR THE EDGE OF THE GRID
    +
    468  nc(n)=2
    +
    469  wx(1)=0
    +
    470  wx(2)=(1-xf)
    +
    471  wx(3)=xf
    +
    472  wx(4)=0
    +
    473  wy(1)=0
    +
    474  wy(2)=(1-yf)
    +
    475  wy(3)=yf
    +
    476  wy(4)=0
    +
    477  ENDIF
    +
    478  DO j=1,4
    +
    479  DO i=1,4
    +
    480  wxy(i,j,n)=wx(i)*wy(j)
    +
    481  IF(nxy(i,j,n).GT.0) THEN
    +
    482  CALL movect(rlai(nxy(i,j,n)),rloi(nxy(i,j,n)), &
    +
    483  rlat(n),rlon(n),cm,sm)
    +
    484  cxy(i,j,n)=cm*croi(nxy(i,j,n))+sm*sroi(nxy(i,j,n))
    +
    485  sxy(i,j,n)=sm*croi(nxy(i,j,n))-cm*sroi(nxy(i,j,n))
    +
    486  ENDIF
    +
    487  ENDDO
    +
    488  ENDDO
    +
    489  ELSE
    +
    490  nc(n)=0
    +
    491  ENDIF
    +
    492  ENDDO
    +
    493  ENDIF
    +
    494  ENDIF
    +
    495  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    496  ! INTERPOLATE OVER ALL FIELDS
    +
    497  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
    +
    498  IF(.not. to_station_points) THEN
    +
    499  no=nox
    +
    500  DO n=1,no
    +
    501  rlon(n)=rlonx(n)
    +
    502  rlat(n)=rlatx(n)
    +
    503  crot(n)=crotx(n)
    +
    504  srot(n)=srotx(n)
    +
    505  ENDDO
    +
    506  ENDIF
    +
    507  !$OMP PARALLEL DO PRIVATE(NK,K,N,U,V,W,UMIN,UMAX,VMIN,VMAX,UROT,VROT,J,I) SCHEDULE(STATIC)
    +
    508  DO nk=1,no*km
    +
    509  k=(nk-1)/no+1
    +
    510  n=nk-no*(k-1)
    +
    511  IF(nc(n).GT.0) THEN
    +
    512  u=0
    +
    513  v=0
    +
    514  w=0
    +
    515  IF(mcon.GT.0) umin=huge(umin)
    +
    516  IF(mcon.GT.0) umax=-huge(umax)
    +
    517  IF(mcon.GT.0) vmin=huge(vmin)
    +
    518  IF(mcon.GT.0) vmax=-huge(vmax)
    +
    519  DO j=nc(n),5-nc(n)
    +
    520  DO i=nc(n),5-nc(n)
    +
    521  IF(nxy(i,j,n).GT.0) THEN
    +
    522  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
    +
    523  urot=cxy(i,j,n)*ui(nxy(i,j,n),k)-sxy(i,j,n)*vi(nxy(i,j,n),k)
    +
    524  vrot=sxy(i,j,n)*ui(nxy(i,j,n),k)+cxy(i,j,n)*vi(nxy(i,j,n),k)
    +
    525  u=u+wxy(i,j,n)*urot
    +
    526  v=v+wxy(i,j,n)*vrot
    +
    527  w=w+wxy(i,j,n)
    +
    528  IF(mcon.GT.0) umin=min(umin,urot)
    +
    529  IF(mcon.GT.0) umax=max(umax,urot)
    +
    530  IF(mcon.GT.0) vmin=min(vmin,vrot)
    +
    531  IF(mcon.GT.0) vmax=max(vmax,vrot)
    +
    532  ENDIF
    +
    533  ENDIF
    +
    534  ENDDO
    +
    535  ENDDO
    +
    536  lo(n,k)=w.GE.pmp
    +
    537  IF(lo(n,k)) THEN
    +
    538  urot=crot(n)*u-srot(n)*v
    +
    539  vrot=srot(n)*u+crot(n)*v
    +
    540  uo(n,k)=urot/w
    +
    541  vo(n,k)=vrot/w
    +
    542  IF(mcon.GT.0) uo(n,k)=min(max(uo(n,k),umin),umax)
    +
    543  IF(mcon.GT.0) vo(n,k)=min(max(vo(n,k),vmin),vmax)
    +
    544  ELSE
    +
    545  uo(n,k)=0.
    +
    546  vo(n,k)=0.
    +
    547  ENDIF
    +
    548  ELSE
    +
    549  lo(n,k)=.false.
    +
    550  uo(n,k)=0.
    +
    551  vo(n,k)=0.
    +
    552  ENDIF
    +
    553  ENDDO
    +
    554  DO k=1,km
    +
    555  ibo(k)=ibi(k)
    +
    556  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
    +
    557  ENDDO
    +
    558  select type(grid_out)
    +
    559  type is(ip_equid_cylind_grid)
    +
    560  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
    +
    561  end select
    +
    562  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    563  ELSE
    +
    564  IF(iret.EQ.0) iret=iretx
    +
    565  IF(.not. to_station_points) no=0
    +
    566  ENDIF
    +
    567  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    568  end subroutine interpolate_bicubic_vector
    +
    569 
    +
    570 end module bicubic_interp_mod
    + + +
    subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
    This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
    Definition: movect.F90:26
    +
    Bicubic interpolation routines for scalars and vectors.
    +
    subroutine interpolate_bicubic_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.
    +
    subroutine interpolate_bicubic_vector(ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
    This subprogram performs bicubic interpolation from any grid to any grid for vector fields.
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:7
    +
    subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:30
    +
    subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
    Make multiple pole vector values consistent,.
    Definition: polfix_mod.F90:125
    +
    +
    + + + + diff --git a/ver-5.1.0/bilinear__interp__mod_8F90.html b/ver-5.1.0/bilinear__interp__mod_8F90.html new file mode 100644 index 00000000..f289e4f4 --- /dev/null +++ b/ver-5.1.0/bilinear__interp__mod_8F90.html @@ -0,0 +1,134 @@ + + + + + + + +NCEPLIBS-ip: bilinear_interp_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    bilinear_interp_mod.F90 File Reference
    +
    +
    + +

    Bilinear interpolation routines for scalars and vectors. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  bilinear_interp_mod::interpolate_bilinear
     
    + + + + +

    +Modules

    module  bilinear_interp_mod
     Bilinear interpolation routines for scalars and vectors.
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine bilinear_interp_mod::interpolate_bilinear_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram performs bilinear interpolation from any grid to any grid for scalar fields. More...
     
    subroutine bilinear_interp_mod::interpolate_bilinear_vector (ipopt, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     This subprogram performs bilinear interpolation from any grid to any grid for vector fields. More...
     
    +

    Detailed Description

    +

    Bilinear interpolation routines for scalars and vectors.

    +
    Author
    Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition in file bilinear_interp_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/bilinear__interp__mod_8F90.js b/ver-5.1.0/bilinear__interp__mod_8F90.js new file mode 100644 index 00000000..27b7b9c0 --- /dev/null +++ b/ver-5.1.0/bilinear__interp__mod_8F90.js @@ -0,0 +1,6 @@ +var bilinear__interp__mod_8F90 = +[ + [ "interpolate_bilinear", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html", "interfacebilinear__interp__mod_1_1interpolate__bilinear" ], + [ "interpolate_bilinear_scalar", "bilinear__interp__mod_8F90.html#a34d2eea4682104097dccf3e7ab6a9398", null ], + [ "interpolate_bilinear_vector", "bilinear__interp__mod_8F90.html#abc218f8774d2af09299eb299d6f38e04", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/bilinear__interp__mod_8F90_source.html b/ver-5.1.0/bilinear__interp__mod_8F90_source.html new file mode 100644 index 00000000..810f6f11 --- /dev/null +++ b/ver-5.1.0/bilinear__interp__mod_8F90_source.html @@ -0,0 +1,534 @@ + + + + + + + +NCEPLIBS-ip: bilinear_interp_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    bilinear_interp_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + +
    9  use gdswzd_mod
    +
    10  use ip_grids_mod
    + + +
    13  use polfix_mod
    +
    14  implicit none
    +
    15 
    +
    16  private
    +
    17  public :: interpolate_bilinear
    +
    18 
    + +
    20  module procedure interpolate_bilinear_scalar
    +
    21  module procedure interpolate_bilinear_vector
    +
    22  end interface interpolate_bilinear
    +
    23 
    +
    24  ! Smallest positive real value (use for equality comparisons)
    +
    25  REAL :: TINYREAL=tiny(1.0)
    +
    26 
    +
    27 contains
    +
    28 
    +
    72  subroutine interpolate_bilinear_scalar(IPOPT,grid_in,grid_out,MI,MO,KM,IBI,LI,GI,NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    73  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    74  INTEGER, INTENT(IN ) :: IPOPT(20)
    +
    75  INTEGER, INTENT(IN ) :: MI,MO,KM
    +
    76  INTEGER, INTENT(IN ) :: IBI(KM)
    +
    77  INTEGER, INTENT(INOUT) :: NO
    +
    78  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    79  !
    +
    80  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    81  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    82  !
    +
    83  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    84  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    85  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    86  !
    +
    87  REAL, PARAMETER :: FILL=-9999.
    +
    88  !
    +
    89  INTEGER :: IJX(2),IJY(2)
    +
    90  INTEGER :: MP,N,I,J,K
    +
    91  INTEGER :: NK,NV
    +
    92  INTEGER :: MSPIRAL,I1,J1,IXS,JXS
    +
    93  INTEGER :: MX,KXS,KXT,IX,JX,NX
    +
    94  !
    +
    95  LOGICAL :: SAME_GRIDI, SAME_GRIDO
    +
    96  !
    +
    97  REAL :: WX(2),WY(2)
    +
    98  REAL :: XPTS(MO),YPTS(MO)
    +
    99  REAL :: PMP,XIJ,YIJ,XF,YF,G,W
    +
    100 
    +
    101  logical :: to_station_points
    +
    102 
    +
    103  ! Save coeffecients between calls and only compute if grids have changed
    +
    104  INTEGER, SAVE :: NOX=-1,iretx=-1
    +
    105  INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:)
    +
    106  REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
    +
    107  REAL, ALLOCATABLE,SAVE :: WXY(:,:,:)
    +
    108  class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
    +
    109 
    +
    110  iret=0
    +
    111  mp=ipopt(1)
    +
    112  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    113  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    114  pmp=mp*0.01
    +
    115  mspiral=max(ipopt(2),0)
    +
    116 
    +
    117  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
    +
    118  allocate(prev_grid_in, source = grid_in)
    +
    119  allocate(prev_grid_out, source = grid_out)
    +
    120 
    +
    121  same_gridi = .false.
    +
    122  same_grido = .false.
    +
    123  else
    +
    124  same_gridi = grid_in == prev_grid_in
    +
    125  same_grido = grid_out == prev_grid_out
    +
    126 
    +
    127  if (.not. same_gridi .or. .not. same_grido) then
    +
    128  deallocate(prev_grid_in)
    +
    129  deallocate(prev_grid_out)
    +
    130 
    +
    131  allocate(prev_grid_in, source = grid_in)
    +
    132  allocate(prev_grid_out, source = grid_out)
    +
    133  end if
    +
    134  end if
    +
    135 
    +
    136  select type(grid_out)
    +
    137  type is(ip_station_points_grid)
    +
    138  to_station_points = .true.
    +
    139  class default
    +
    140  to_station_points = .false.
    +
    141  end select
    +
    142 
    +
    143  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    144  ! SAVE OR SKIP WEIGHT COMPUTATION
    +
    145  IF(iret==0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
    +
    146  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    147  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    148  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    149  IF(no.EQ.0) iret=3
    +
    150  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    151  ! LOCATE INPUT POINTS
    +
    152  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    153  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
    +
    154  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    155  ! ALLOCATE AND SAVE GRID DATA
    +
    156  IF(nox.NE.no) THEN
    +
    157  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,nxy,wxy)
    +
    158  ALLOCATE(rlatx(no),rlonx(no),nxy(2,2,no),wxy(2,2,no))
    +
    159  nox=no
    +
    160  ENDIF
    +
    161  iretx=iret
    +
    162  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    163  ! COMPUTE WEIGHTS
    +
    164  IF(iret.EQ.0) THEN
    +
    165  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY) SCHEDULE(STATIC)
    +
    166  DO n=1,no
    +
    167  rlonx(n)=rlon(n)
    +
    168  rlatx(n)=rlat(n)
    +
    169  xij=xpts(n)
    +
    170  yij=ypts(n)
    +
    171  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
    +
    172  ijx(1:2)=floor(xij)+(/0,1/)
    +
    173  ijy(1:2)=floor(yij)+(/0,1/)
    +
    174  xf=xij-ijx(1)
    +
    175  yf=yij-ijy(1)
    +
    176  wx(1)=(1-xf)
    +
    177  wx(2)=xf
    +
    178  wy(1)=(1-yf)
    +
    179  wy(2)=yf
    +
    180  DO j=1,2
    +
    181  DO i=1,2
    +
    182  nxy(i,j,n)=grid_in%field_pos(ijx(i), ijy(j))
    +
    183  wxy(i,j,n)=wx(i)*wy(j)
    +
    184  ENDDO
    +
    185  ENDDO
    +
    186  ELSE
    +
    187  nxy(:,:,n)=0
    +
    188  ENDIF
    +
    189  ENDDO
    +
    190  ENDIF
    +
    191  ENDIF
    +
    192  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    193  ! INTERPOLATE OVER ALL FIELDS
    +
    194  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
    +
    195  IF(.not. to_station_points) THEN
    +
    196  no=nox
    +
    197  DO n=1,no
    +
    198  rlon(n)=rlonx(n)
    +
    199  rlat(n)=rlatx(n)
    +
    200  ENDDO
    +
    201  ENDIF
    +
    202  !$OMP PARALLEL DO &
    +
    203  !$OMP PRIVATE(NK,K,N,G,W,J,I) &
    +
    204  !$OMP PRIVATE(I1,J1,IXS,JXS,MX,KXS,KXT,IX,JX,NX) SCHEDULE(STATIC)
    +
    205  DO nk=1,no*km
    +
    206  k=(nk-1)/no+1
    +
    207  n=nk-no*(k-1)
    +
    208  g=0
    +
    209  w=0
    +
    210  DO j=1,2
    +
    211  DO i=1,2
    +
    212  IF(nxy(i,j,n).GT.0)THEN
    +
    213  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
    +
    214  g=g+wxy(i,j,n)*gi(nxy(i,j,n),k)
    +
    215  w=w+wxy(i,j,n)
    +
    216  ENDIF
    +
    217  ENDIF
    +
    218  ENDDO
    +
    219  ENDDO
    +
    220  lo(n,k)=w.GE.pmp
    +
    221  IF(lo(n,k)) THEN
    +
    222  go(n,k)=g/w
    +
    223  ELSEIF(mspiral.GT.0.AND.abs(xpts(n)-fill).GT.tinyreal.AND.abs(ypts(n)-fill).GT.tinyreal) THEN
    +
    224  i1=nint(xpts(n))
    +
    225  j1=nint(ypts(n))
    +
    226  ixs=int(sign(1.,xpts(n)-i1))
    +
    227  jxs=int(sign(1.,ypts(n)-j1))
    +
    228  spiral : DO mx=1,mspiral**2
    +
    229  kxs=int(sqrt(4*mx-2.5))
    +
    230  kxt=mx-(kxs**2/4+1)
    +
    231  SELECT CASE(mod(kxs,4))
    +
    232  CASE(1)
    +
    233  ix=i1-ixs*(kxs/4-kxt)
    +
    234  jx=j1-jxs*kxs/4
    +
    235  CASE(2)
    +
    236  ix=i1+ixs*(1+kxs/4)
    +
    237  jx=j1-jxs*(kxs/4-kxt)
    +
    238  CASE(3)
    +
    239  ix=i1+ixs*(1+kxs/4-kxt)
    +
    240  jx=j1+jxs*(1+kxs/4)
    +
    241  CASE DEFAULT
    +
    242  ix=i1-ixs*kxs/4
    +
    243  jx=j1+jxs*(kxs/4-kxt)
    +
    244  END SELECT
    +
    245  nx=grid_in%field_pos(ix, jx)
    +
    246  IF(nx.GT.0.)THEN
    +
    247  IF(li(nx,k).OR.ibi(k).EQ.0)THEN
    +
    248  go(n,k)=gi(nx,k)
    +
    249  lo(n,k)=.true.
    +
    250  EXIT spiral
    +
    251  ENDIF
    +
    252  ENDIF
    +
    253  ENDDO spiral
    +
    254  IF(.NOT.lo(n,k))THEN
    +
    255  ibo(k)=1
    +
    256  go(n,k)=0.
    +
    257  ENDIF
    +
    258  ELSE
    +
    259  go(n,k)=0.
    +
    260  ENDIF
    +
    261  ENDDO
    +
    262  DO k=1,km
    +
    263  ibo(k)=ibi(k)
    +
    264  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
    +
    265  ENDDO
    +
    266  select type(grid_out)
    +
    267  type is(ip_equid_cylind_grid)
    +
    268  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
    +
    269  end select
    +
    270  ELSE
    +
    271  IF(iret.EQ.0) iret=iretx
    +
    272  IF(.not. to_station_points) no=0
    +
    273  ENDIF
    +
    274 
    +
    275  end subroutine interpolate_bilinear_scalar
    +
    276 
    +
    329  SUBROUTINE interpolate_bilinear_vector(ipopt,grid_in,grid_out, &
    +
    330  MI,MO,KM,IBI,LI,UI,VI, &
    +
    331  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    332  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    333  INTEGER, INTENT(IN ) :: IPOPT(20),IBI(KM),MI,MO,KM
    +
    334  INTEGER, INTENT(INOUT) :: NO
    +
    335  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    336  !
    +
    337  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    338  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    339  !
    +
    340  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    341  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO),CROT(MO),SROT(MO)
    +
    342  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    343  !
    +
    344  REAL, PARAMETER :: FILL=-9999.
    +
    345  !
    +
    346  INTEGER :: IJX(2),IJY(2)
    +
    347  INTEGER :: MP,N,I,J,K,NK,NV
    +
    348  !
    +
    349  LOGICAL :: SAME_GRIDI, SAME_GRIDO
    +
    350  !
    +
    351  REAL :: CM,SM,UROT,VROT
    +
    352  REAL :: PMP,XIJ,YIJ,XF,YF,U,V,W
    +
    353  REAL :: XPTS(MO),YPTS(MO)
    +
    354  REAL :: WX(2),WY(2)
    +
    355  REAL :: XPTI(MI),YPTI(MI)
    +
    356  REAL :: RLOI(MI),RLAI(MI)
    +
    357  REAL :: CROI(MI),SROI(MI)
    +
    358 
    +
    359  logical :: to_station_points
    +
    360 
    +
    361  ! Save coeffecients between calls and only compute if grids have changed
    +
    362  INTEGER, SAVE :: NOX=-1,iretx=-1
    +
    363  INTEGER, ALLOCATABLE,SAVE :: NXY(:,:,:)
    +
    364  REAL, ALLOCATABLE,SAVE :: RLATX(:),RLONX(:)
    +
    365  REAL, ALLOCATABLE,SAVE :: CROTX(:),SROTX(:)
    +
    366  REAL, ALLOCATABLE,SAVE :: WXY(:,:,:),CXY(:,:,:),SXY(:,:,:)
    +
    367  class(ip_grid), allocatable,save :: prev_grid_in, prev_grid_out
    +
    368 
    +
    369  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    370  ! SET PARAMETERS
    +
    371  iret=0
    +
    372  mp=ipopt(1)
    +
    373  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    374  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    375  pmp=mp*0.01
    +
    376 
    +
    377  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
    +
    378  allocate(prev_grid_in, source = grid_in)
    +
    379  allocate(prev_grid_out, source = grid_out)
    +
    380 
    +
    381  same_gridi = .false.
    +
    382  same_grido = .false.
    +
    383  else
    +
    384  same_gridi = grid_in == prev_grid_in
    +
    385  same_grido = grid_out == prev_grid_out
    +
    386 
    +
    387  if (.not. same_gridi .or. .not. same_grido) then
    +
    388  deallocate(prev_grid_in)
    +
    389  deallocate(prev_grid_out)
    +
    390 
    +
    391  allocate(prev_grid_in, source = grid_in)
    +
    392  allocate(prev_grid_out, source = grid_out)
    +
    393  end if
    +
    394  end if
    +
    395 
    +
    396  select type(grid_out)
    +
    397  type is(ip_station_points_grid)
    +
    398  to_station_points = .true.
    +
    399  class default
    +
    400  to_station_points = .false.
    +
    401  end select
    +
    402 
    +
    403  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    404  ! SAVE OR SKIP WEIGHT COMPUTATION
    +
    405  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
    +
    406  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    407  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    408  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
    +
    409  IF(no.EQ.0) iret=3
    +
    410  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    411  ! LOCATE INPUT POINTS
    +
    412  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    413  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
    +
    414  CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
    +
    415  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    416  ! ALLOCATE AND SAVE GRID DATA
    +
    417  IF(nox.NE.no) THEN
    +
    418  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,crotx,srotx,nxy,wxy,cxy,sxy)
    +
    419  ALLOCATE(rlatx(no),rlonx(no),crotx(no),srotx(no), &
    +
    420  nxy(2,2,no),wxy(2,2,no),cxy(2,2,no),sxy(2,2,no))
    +
    421  nox=no
    +
    422  ENDIF
    +
    423  iretx=iret
    +
    424  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    425  ! COMPUTE WEIGHTS
    +
    426  IF(iret.EQ.0) THEN
    +
    427  !$OMP PARALLEL DO PRIVATE(N,XIJ,YIJ,IJX,IJY,XF,YF,J,I,WX,WY,CM,SM) SCHEDULE(STATIC)
    +
    428  DO n=1,no
    +
    429  rlonx(n)=rlon(n)
    +
    430  rlatx(n)=rlat(n)
    +
    431  crotx(n)=crot(n)
    +
    432  srotx(n)=srot(n)
    +
    433  xij=xpts(n)
    +
    434  yij=ypts(n)
    +
    435  IF(abs(xij-fill).GT.tinyreal.AND.abs(yij-fill).GT.tinyreal) THEN
    +
    436  ijx(1:2)=floor(xij)+(/0,1/)
    +
    437  ijy(1:2)=floor(yij)+(/0,1/)
    +
    438  xf=xij-ijx(1)
    +
    439  yf=yij-ijy(1)
    +
    440  wx(1)=(1-xf)
    +
    441  wx(2)=xf
    +
    442  wy(1)=(1-yf)
    +
    443  wy(2)=yf
    +
    444  DO j=1,2
    +
    445  DO i=1,2
    +
    446  nxy(i, j, n) = grid_in%field_pos(ijx(i), ijy(j))
    +
    447  wxy(i,j,n)=wx(i)*wy(j)
    +
    448  IF(nxy(i,j,n).GT.0) THEN
    +
    449  CALL movect(rlai(nxy(i,j,n)),rloi(nxy(i,j,n)), &
    +
    450  rlat(n),rlon(n),cm,sm)
    +
    451  cxy(i,j,n)=cm*croi(nxy(i,j,n))+sm*sroi(nxy(i,j,n))
    +
    452  sxy(i,j,n)=sm*croi(nxy(i,j,n))-cm*sroi(nxy(i,j,n))
    +
    453  ENDIF
    +
    454  ENDDO
    +
    455  ENDDO
    +
    456  ELSE
    +
    457  nxy(:,:,n)=0
    +
    458  ENDIF
    +
    459  ENDDO
    +
    460  ENDIF ! IS IRET 0?
    +
    461  ENDIF
    +
    462  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    463  ! INTERPOLATE OVER ALL FIELDS
    +
    464  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
    +
    465  IF(.not. to_station_points) THEN
    +
    466  no=nox
    +
    467  DO n=1,no
    +
    468  rlon(n)=rlonx(n)
    +
    469  rlat(n)=rlatx(n)
    +
    470  crot(n)=crotx(n)
    +
    471  srot(n)=srotx(n)
    +
    472  ENDDO
    +
    473  ENDIF
    +
    474  !$OMP PARALLEL DO PRIVATE(NK,K,N,U,V,W,UROT,VROT,J,I) SCHEDULE(STATIC)
    +
    475  DO nk=1,no*km
    +
    476  k=(nk-1)/no+1
    +
    477  n=nk-no*(k-1)
    +
    478  u=0
    +
    479  v=0
    +
    480  w=0
    +
    481  DO j=1,2
    +
    482  DO i=1,2
    +
    483  IF(nxy(i,j,n).GT.0) THEN
    +
    484  IF(ibi(k).EQ.0.OR.li(nxy(i,j,n),k)) THEN
    +
    485  urot=cxy(i,j,n)*ui(nxy(i,j,n),k)-sxy(i,j,n)*vi(nxy(i,j,n),k)
    +
    486  vrot=sxy(i,j,n)*ui(nxy(i,j,n),k)+cxy(i,j,n)*vi(nxy(i,j,n),k)
    +
    487  u=u+wxy(i,j,n)*urot
    +
    488  v=v+wxy(i,j,n)*vrot
    +
    489  w=w+wxy(i,j,n)
    +
    490  ENDIF
    +
    491  ENDIF
    +
    492  ENDDO
    +
    493  ENDDO
    +
    494  lo(n,k)=w.GE.pmp
    +
    495  IF(lo(n,k)) THEN
    +
    496  urot=crot(n)*u-srot(n)*v
    +
    497  vrot=srot(n)*u+crot(n)*v
    +
    498  uo(n,k)=urot/w
    +
    499  vo(n,k)=vrot/w
    +
    500  ELSE
    +
    501  uo(n,k)=0.
    +
    502  vo(n,k)=0.
    +
    503  ENDIF
    +
    504  ENDDO ! NK LOOP
    +
    505  DO k=1,km
    +
    506  ibo(k)=ibi(k)
    +
    507  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
    +
    508  ENDDO
    +
    509 
    +
    510  select type(grid_out)
    +
    511  type is(ip_equid_cylind_grid)
    +
    512  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
    +
    513  end select
    +
    514 
    +
    515  ELSE
    +
    516  IF(iret.EQ.0) iret=iretx
    +
    517  IF(.not. to_station_points) no=0
    +
    518  ENDIF
    +
    519  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    520  END SUBROUTINE interpolate_bilinear_vector
    +
    521 
    +
    522 end module bilinear_interp_mod
    + + +
    subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
    This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
    Definition: movect.F90:26
    +
    Bilinear interpolation routines for scalars and vectors.
    +
    subroutine interpolate_bilinear_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.
    +
    subroutine interpolate_bilinear_vector(ipopt, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    This subprogram performs bilinear interpolation from any grid to any grid for vector fields.
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Routines for creating an ip_grid given a Grib descriptor.
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:7
    +
    subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:30
    +
    subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
    Make multiple pole vector values consistent,.
    Definition: polfix_mod.F90:125
    +
    +
    + + + + diff --git a/ver-5.1.0/budget__interp__mod_8F90.html b/ver-5.1.0/budget__interp__mod_8F90.html new file mode 100644 index 00000000..932a1ffd --- /dev/null +++ b/ver-5.1.0/budget__interp__mod_8F90.html @@ -0,0 +1,135 @@ + + + + + + + +NCEPLIBS-ip: budget_interp_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    budget_interp_mod.F90 File Reference
    +
    +
    + +

    Budget interpolation routines for scalars and vectors. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  budget_interp_mod::interpolate_budget
     
    + + + + +

    +Modules

    module  budget_interp_mod
     Budget interpolation routines for scalars and vectors.
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine budget_interp_mod::interpolate_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields. More...
     
    subroutine budget_interp_mod::interpolate_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields. More...
     
    +

    Detailed Description

    +

    Budget interpolation routines for scalars and vectors.

    +
    Author
    Mark Iredell, Kyle Gerheiser, Eric Engle
    +
    Date
    July 2021
    + +

    Definition in file budget_interp_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/budget__interp__mod_8F90.js b/ver-5.1.0/budget__interp__mod_8F90.js new file mode 100644 index 00000000..44bc00ff --- /dev/null +++ b/ver-5.1.0/budget__interp__mod_8F90.js @@ -0,0 +1,6 @@ +var budget__interp__mod_8F90 = +[ + [ "interpolate_budget", "interfacebudget__interp__mod_1_1interpolate__budget.html", "interfacebudget__interp__mod_1_1interpolate__budget" ], + [ "interpolate_budget_scalar", "budget__interp__mod_8F90.html#a09bd6535b0c2e1022cfde39c39d14466", null ], + [ "interpolate_budget_vector", "budget__interp__mod_8F90.html#abc99486ee9c0091c1514af6114d4e803", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/budget__interp__mod_8F90_source.html b/ver-5.1.0/budget__interp__mod_8F90_source.html new file mode 100644 index 00000000..b4cc3add --- /dev/null +++ b/ver-5.1.0/budget__interp__mod_8F90_source.html @@ -0,0 +1,686 @@ + + + + + + + +NCEPLIBS-ip: budget_interp_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    budget_interp_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + +
    11  use gdswzd_mod
    +
    12  use polfix_mod
    +
    13  use ip_grids_mod
    + + +
    16  implicit none
    +
    17 
    +
    18  private
    +
    19  public :: interpolate_budget
    +
    20 
    + +
    22  module procedure interpolate_budget_scalar
    +
    23  module procedure interpolate_budget_vector
    +
    24  end interface interpolate_budget
    +
    25 
    +
    26  ! Smallest positive real value (use for equality comparisons)
    +
    27  REAL :: TINYREAL=tiny(1.0)
    +
    28 
    +
    29 contains
    +
    30 
    +
    94  SUBROUTINE interpolate_budget_scalar(IPOPT,grid_in,grid_out, &
    +
    95  MI,MO,KM,IBI,LI,GI, &
    +
    96  NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    97  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    98  INTEGER, INTENT(IN ) :: IBI(KM), IPOPT(20)
    +
    99  INTEGER, INTENT(IN ) :: KM, MI, MO
    +
    100  INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
    +
    101  !
    +
    102  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    103  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    104  !
    +
    105  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    106  REAL, INTENT(INOUT) :: RLAT(MO), RLON(MO)
    +
    107  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    108  !
    +
    109  REAL, PARAMETER :: FILL=-9999.
    +
    110  !
    +
    111  INTEGER :: I1, J1, I2, J2, IB, JB
    +
    112  INTEGER :: IX, JX, IXS, JXS
    +
    113  INTEGER :: K, KXS, KXT
    +
    114  INTEGER :: LB, LSW, MP, MSPIRAL, MX
    +
    115  INTEGER :: N, NB, NB1, NB2, NB3, NB4, NV, NX
    +
    116  INTEGER :: N11(MO),N21(MO),N12(MO),N22(MO)
    +
    117  !
    +
    118  REAL :: GB, LAT(1), LON(1)
    +
    119  REAL :: PMP, RB2, RLOB(MO), RLAB(MO), WB
    +
    120  REAL :: W11(MO), W21(MO), W12(MO), W22(MO)
    +
    121  REAL :: WO(MO,KM), XF, YF, XI, YI, XX, YY
    +
    122  REAL :: XPTS(MO),YPTS(MO),XPTB(MO),YPTB(MO)
    +
    123  REAL :: XXX(1), YYY(1)
    +
    124 
    +
    125  logical :: to_station_points
    +
    126 
    +
    127  class(ip_grid), allocatable :: grid_out2
    +
    128 
    +
    129  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    130  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    131  ! DO SUBSECTION OF GRID IF KGDSO(1) IS SUBTRACTED FROM 255.
    +
    132  iret=0
    +
    133 
    +
    134  select type(grid_out)
    +
    135  type is(ip_station_points_grid)
    +
    136  to_station_points = .true.
    +
    137  allocate(grid_out2, source = grid_out)
    +
    138  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    139  IF(no.EQ.0) iret=3
    +
    140  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    141  IF(nv.EQ.0) iret=2
    +
    142  class default
    +
    143  to_station_points = .false.
    +
    144  allocate(grid_out2, source = grid_out)
    +
    145  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    146  IF(no.EQ.0) iret=3
    +
    147  end select
    +
    148 
    +
    149  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    150  ! SET PARAMETERS
    +
    151  IF(ipopt(1).GT.16) iret=32
    +
    152  mspiral=max(ipopt(20),1)
    +
    153  nb1=ipopt(1)
    +
    154  IF(nb1.EQ.-1) nb1=2
    +
    155  IF(iret.EQ.0.AND.nb1.LT.0) iret=32
    +
    156  lsw=1
    +
    157  IF(ipopt(2).EQ.-2) lsw=2
    +
    158  IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
    +
    159  IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
    +
    160  mp=ipopt(3+ipopt(1))
    +
    161  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    162  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    163  pmp=mp*0.01
    +
    164  IF(iret.EQ.0) THEN
    +
    165  nb2=2*nb1+1
    +
    166  rb2=1./nb2
    +
    167  nb3=nb2*nb2
    +
    168  nb4=nb3
    +
    169  IF(lsw.EQ.2) THEN
    +
    170  rb2=1./(nb1+1)
    +
    171  nb4=(nb1+1)**4
    +
    172  ELSEIF(lsw.EQ.1) THEN
    +
    173  nb4=ipopt(2)
    +
    174  DO ib=1,nb1
    +
    175  nb4=nb4+8*ib*ipopt(2+ib)
    +
    176  ENDDO
    +
    177  ENDIF
    +
    178  ELSE
    +
    179  nb3=0
    +
    180  nb4=1
    +
    181  ENDIF
    +
    182  DO k=1,km
    +
    183  DO n=1,no
    +
    184  go(n,k)=0.
    +
    185  wo(n,k)=0.
    +
    186  ENDDO
    +
    187  ENDDO
    +
    188  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    189  ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
    +
    190  DO nb=1,nb3
    +
    191  ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS
    +
    192  jb=(nb-1)/nb2-nb1
    +
    193  ib=nb-(jb+nb1)*nb2-nb1-1
    +
    194  lb=max(abs(ib),abs(jb))
    +
    195  wb=1
    +
    196  IF(lsw.EQ.2) THEN
    +
    197  wb=(nb1+1-abs(ib))*(nb1+1-abs(jb))
    +
    198  ELSEIF(lsw.EQ.1) THEN
    +
    199  wb=ipopt(2+lb)
    +
    200  ENDIF
    +
    201  IF(abs(wb).GT.tinyreal) THEN
    +
    202  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    203  DO n=1,no
    +
    204  xptb(n)=xpts(n)+ib*rb2
    +
    205  yptb(n)=ypts(n)+jb*rb2
    +
    206  ENDDO
    +
    207  !$OMP END PARALLEL DO
    +
    208  if(to_station_points)then
    +
    209  CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    210  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    211  else
    +
    212  CALL gdswzd(grid_out2, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    213  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    214  endif
    +
    215  IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
    +
    216  !$OMP PARALLEL DO PRIVATE(N,XI,YI,I1,I2,J1,J2,XF,YF) SCHEDULE(STATIC)
    +
    217  DO n=1,no
    +
    218  xi=xptb(n)
    +
    219  yi=yptb(n)
    +
    220  IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
    +
    221  i1=int(xi)
    +
    222  i2=i1+1
    +
    223  j1=int(yi)
    +
    224  j2=j1+1
    +
    225  xf=xi-i1
    +
    226  yf=yi-j1
    +
    227  n11(n)=grid_in%field_pos(i1, j1)
    +
    228  n21(n)=grid_in%field_pos(i2, j1)
    +
    229  n12(n)=grid_in%field_pos(i1, j2)
    +
    230  n22(n)=grid_in%field_pos(i2, j2)
    +
    231  IF(min(n11(n),n21(n),n12(n),n22(n)).GT.0) THEN
    +
    232  w11(n)=(1-xf)*(1-yf)
    +
    233  w21(n)=xf*(1-yf)
    +
    234  w12(n)=(1-xf)*yf
    +
    235  w22(n)=xf*yf
    +
    236  ELSE
    +
    237  n11(n)=0
    +
    238  n21(n)=0
    +
    239  n12(n)=0
    +
    240  n22(n)=0
    +
    241  ENDIF
    +
    242  ELSE
    +
    243  n11(n)=0
    +
    244  n21(n)=0
    +
    245  n12(n)=0
    +
    246  n22(n)=0
    +
    247  ENDIF
    +
    248  ENDDO
    +
    249  !$OMP END PARALLEL DO
    +
    250  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    251  ! INTERPOLATE WITH OR WITHOUT BITMAPS
    +
    252  !$OMP PARALLEL DO PRIVATE(K,N,GB) SCHEDULE(STATIC)
    +
    253  DO k=1,km
    +
    254  DO n=1,no
    +
    255  IF(n11(n).GT.0) THEN
    +
    256  IF(ibi(k).EQ.0) THEN
    +
    257  gb=w11(n)*gi(n11(n),k)+w21(n)*gi(n21(n),k) &
    +
    258  +w12(n)*gi(n12(n),k)+w22(n)*gi(n22(n),k)
    +
    259  go(n,k)=go(n,k)+wb*gb
    +
    260  wo(n,k)=wo(n,k)+wb
    +
    261  ELSE
    +
    262  IF(li(n11(n),k)) THEN
    +
    263  go(n,k)=go(n,k)+wb*w11(n)*gi(n11(n),k)
    +
    264  wo(n,k)=wo(n,k)+wb*w11(n)
    +
    265  ENDIF
    +
    266  IF(li(n21(n),k)) THEN
    +
    267  go(n,k)=go(n,k)+wb*w21(n)*gi(n21(n),k)
    +
    268  wo(n,k)=wo(n,k)+wb*w21(n)
    +
    269  ENDIF
    +
    270  IF(li(n12(n),k)) THEN
    +
    271  go(n,k)=go(n,k)+wb*w12(n)*gi(n12(n),k)
    +
    272  wo(n,k)=wo(n,k)+wb*w12(n)
    +
    273  ENDIF
    +
    274  IF(li(n22(n),k)) THEN
    +
    275  go(n,k)=go(n,k)+wb*w22(n)*gi(n22(n),k)
    +
    276  wo(n,k)=wo(n,k)+wb*w22(n)
    +
    277  ENDIF
    +
    278  ENDIF
    +
    279  ENDIF
    +
    280  ENDDO
    +
    281  ENDDO
    +
    282  !$OMP END PARALLEL DO
    +
    283  ENDIF
    +
    284  ENDDO ! sub-grid points
    +
    285  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    286  ! COMPUTE OUTPUT BITMAPS AND FIELDS
    +
    287  ! KM is often 1 .. do not do OMP PARALLEL DO here
    +
    288  km_loop : DO k=1,km
    +
    289  ibo(k)=ibi(k)
    +
    290  !$OMP PARALLEL DO PRIVATE(N,LAT,LON,XXX,YYY,NV,XX,YY,IXS,JXS,MX,KXS,KXT,IX,JX,NX) SCHEDULE(STATIC)
    +
    291  n_loop : DO n=1,no
    +
    292  lo(n,k)=wo(n,k).GE.pmp*nb4
    +
    293  IF(lo(n,k)) THEN
    +
    294  go(n,k)=go(n,k)/wo(n,k)
    +
    295  ELSEIF (mspiral.GT.1) THEN
    +
    296  lat(1)=rlat(n)
    +
    297  lon(1)=rlon(n)
    +
    298  CALL gdswzd(grid_in,-1,1,fill,xxx,yyy,lon,lat,nv)
    +
    299  xx=xxx(1)
    +
    300  yy=yyy(1)
    +
    301  IF(nv.EQ.1)THEN
    +
    302  i1=nint(xx)
    +
    303  j1=nint(yy)
    +
    304  ixs=int(sign(1.,xx-i1))
    +
    305  jxs=int(sign(1.,yy-j1))
    +
    306  spiral_loop : DO mx=2,mspiral**2
    +
    307  kxs=int(sqrt(4*mx-2.5))
    +
    308  kxt=mx-(kxs**2/4+1)
    +
    309  SELECT CASE(mod(kxs,4))
    +
    310  CASE(1)
    +
    311  ix=i1-ixs*(kxs/4-kxt)
    +
    312  jx=j1-jxs*kxs/4
    +
    313  CASE(2)
    +
    314  ix=i1+ixs*(1+kxs/4)
    +
    315  jx=j1-jxs*(kxs/4-kxt)
    +
    316  CASE(3)
    +
    317  ix=i1+ixs*(1+kxs/4-kxt)
    +
    318  jx=j1+jxs*(1+kxs/4)
    +
    319  CASE DEFAULT
    +
    320  ix=i1-ixs*kxs/4
    +
    321  jx=j1+jxs*(kxs/4-kxt)
    +
    322  END SELECT
    +
    323  nx=grid_in%field_pos(ix, jx)
    +
    324  IF(nx.GT.0.)THEN
    +
    325  IF(li(nx,k).OR.ibi(k).EQ.0) THEN
    +
    326  go(n,k)=gi(nx,k)
    +
    327  lo(n,k)=.true.
    +
    328  cycle n_loop
    +
    329  ENDIF
    +
    330  ENDIF
    +
    331  ENDDO spiral_loop
    +
    332  ibo(k)=1
    +
    333  go(n,k)=0.
    +
    334  ELSE
    +
    335  ibo(k)=1
    +
    336  go(n,k)=0.
    +
    337  ENDIF
    +
    338  ELSE ! no spiral search option
    +
    339  ibo(k)=1
    +
    340  go(n,k)=0.
    +
    341  ENDIF
    +
    342  ENDDO n_loop
    +
    343  !$OMP END PARALLEL DO
    +
    344  ENDDO km_loop
    +
    345 
    +
    346  select type(grid_out2)
    +
    347  type is(ip_equid_cylind_grid)
    +
    348  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
    +
    349  end select
    +
    350  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    351  END SUBROUTINE interpolate_budget_scalar
    +
    352 
    +
    423  SUBROUTINE interpolate_budget_vector(IPOPT,grid_in,grid_out, &
    +
    424  MI,MO,KM,IBI,LI,UI,VI, &
    +
    425  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    426  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    427  INTEGER, INTENT(IN ) :: IPOPT(20), IBI(KM)
    +
    428  INTEGER, INTENT(IN ) :: KM, MI, MO
    +
    429  INTEGER, INTENT( OUT) :: IRET, NO, IBO(KM)
    +
    430  !
    +
    431  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    432  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    433  !
    +
    434  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    435  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    436  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    437  REAL, INTENT( OUT) :: CROT(MO),SROT(MO)
    +
    438  !
    +
    439  REAL, PARAMETER :: FILL=-9999.
    +
    440  !
    +
    441  INTEGER :: I1,I2,J1,J2,IB,JB,LSW,MP
    +
    442  INTEGER :: K,LB,N,NB,NB1,NB2,NB3,NB4,NV
    +
    443  INTEGER :: N11(MO),N21(MO),N12(MO),N22(MO)
    +
    444  !
    +
    445  LOGICAL :: SAME_GRID
    +
    446  !
    +
    447  REAL :: CM11,SM11,CM12,SM12
    +
    448  REAL :: CM21,SM21,CM22,SM22
    +
    449  REAL :: PMP,RB2
    +
    450  REAL :: C11(MO),C21(MO),C12(MO),C22(MO)
    +
    451  REAL :: S11(MO),S21(MO),S12(MO),S22(MO)
    +
    452  REAL :: W11(MO),W21(MO),W12(MO),W22(MO)
    +
    453  REAL :: UB,VB,WB,UROT,VROT
    +
    454  REAL :: U11,V11,U21,V21,U12,V12,U22,V22
    +
    455  REAL :: WI1,WJ1,WI2,WJ2
    +
    456  REAL :: WO(MO,KM),XI,YI
    +
    457  REAL :: XPTS(MO),YPTS(MO)
    +
    458  REAL :: XPTB(MO),YPTB(MO),RLOB(MO),RLAB(MO)
    +
    459 
    +
    460  logical :: to_station_points
    +
    461 
    +
    462  class(ip_grid), allocatable :: grid_out2
    +
    463 
    +
    464  ! Save coeffecients between calls and only compute if grids have changed
    +
    465  INTEGER, SAVE :: MIX=-1
    +
    466  REAL, ALLOCATABLE, SAVE :: CROI(:),SROI(:)
    +
    467  REAL, ALLOCATABLE, SAVE :: XPTI(:),YPTI(:),RLOI(:),RLAI(:)
    +
    468 
    +
    469  class(ip_grid), allocatable, save :: prev_grid_in
    +
    470 
    +
    471  iret=0
    +
    472 
    +
    473  ! Negative grid number means interpolate to subgrid
    +
    474  ! The type of the subgrid is calculated by 255 +
    +
    475  select type(grid_out)
    +
    476  type is(ip_station_points_grid)
    +
    477  to_station_points = .true.
    +
    478  allocate(grid_out2, source = grid_out)
    +
    479  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
    +
    480  IF(no.EQ.0) iret=3
    +
    481  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv,crot,srot)
    +
    482  IF(nv.EQ.0) iret=2
    +
    483  class default
    +
    484  to_station_points = .false.
    +
    485  allocate(grid_out2, source = grid_out)
    +
    486  CALL gdswzd(grid_out2, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
    +
    487  end select
    +
    488 
    +
    489  if (.not. allocated(prev_grid_in)) then
    +
    490  allocate(prev_grid_in, source = grid_in)
    +
    491 
    +
    492  same_grid = .false.
    +
    493  else
    +
    494  same_grid = grid_in == prev_grid_in
    +
    495 
    +
    496  if (.not. same_grid) then
    +
    497  deallocate(prev_grid_in)
    +
    498  allocate(prev_grid_in, source = grid_in)
    +
    499  end if
    +
    500  end if
    +
    501 
    +
    502  IF(.NOT.same_grid) THEN
    +
    503  IF(mix.NE.mi) THEN
    +
    504  IF(mix.GE.0) DEALLOCATE(xpti,ypti,rloi,rlai,croi,sroi)
    +
    505  ALLOCATE(xpti(mi),ypti(mi),rloi(mi),rlai(mi),croi(mi),sroi(mi))
    +
    506  mix=mi
    +
    507  ENDIF
    +
    508  CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
    +
    509  ENDIF
    +
    510 
    +
    511  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    512  ! SET PARAMETERS
    +
    513  nb1=ipopt(1)
    +
    514  IF(nb1.EQ.-1) nb1=2
    +
    515  IF(iret.EQ.0.AND.nb1.LT.0) iret=32
    +
    516  lsw=1
    +
    517  IF(ipopt(2).EQ.-2) lsw=2
    +
    518  IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
    +
    519  IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
    +
    520  mp=ipopt(3+ipopt(1))
    +
    521  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    522  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    523  pmp=mp*0.01
    +
    524  IF(iret.EQ.0) THEN
    +
    525  nb2=2*nb1+1
    +
    526  rb2=1./nb2
    +
    527  nb3=nb2*nb2
    +
    528  nb4=nb3
    +
    529  IF(lsw.EQ.2) THEN
    +
    530  rb2=1./(nb1+1)
    +
    531  nb4=(nb1+1)**4
    +
    532  ELSEIF(lsw.EQ.1) THEN
    +
    533  nb4=ipopt(2)
    +
    534  DO ib=1,nb1
    +
    535  nb4=nb4+8*ib*ipopt(2+ib)
    +
    536  ENDDO
    +
    537  ENDIF
    +
    538  ELSE
    +
    539  nb3=0
    +
    540  nb4=1
    +
    541  ENDIF
    +
    542  DO k=1,km
    +
    543  DO n=1,no
    +
    544  uo(n,k)=0
    +
    545  vo(n,k)=0
    +
    546  wo(n,k)=0.
    +
    547  ENDDO
    +
    548  ENDDO
    +
    549  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    550  ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
    +
    551  DO nb=1,nb3
    +
    552  ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS AND ROTATIONS
    +
    553  jb=(nb-1)/nb2-nb1
    +
    554  ib=nb-(jb+nb1)*nb2-nb1-1
    +
    555  lb=max(abs(ib),abs(jb))
    +
    556  wb=1
    +
    557  IF(ipopt(2).EQ.-2) THEN
    +
    558  wb=(nb1+1-abs(ib))*(nb1+1-abs(jb))
    +
    559  ELSEIF(ipopt(2).NE.-1) THEN
    +
    560  wb=ipopt(2+lb)
    +
    561  ENDIF
    +
    562  IF(abs(wb).GT.tinyreal) THEN
    +
    563  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    564  DO n=1,no
    +
    565  xptb(n)=xpts(n)+ib*rb2
    +
    566  yptb(n)=ypts(n)+jb*rb2
    +
    567  ENDDO
    +
    568  !$OMP END PARALLEL DO
    +
    569  if(to_station_points)then
    +
    570  CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    571  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    572  else
    +
    573  CALL gdswzd(grid_out2, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    574  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    575  endif
    +
    576  IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
    +
    577  !$OMP PARALLEL DO PRIVATE(N,XI,YI,I1,I2,WI1,WI2,J1,J2,WJ1,WJ2,CM11,CM21,CM12,CM22,SM11,SM21,SM12,SM22) &
    +
    578  !$OMP SCHEDULE(STATIC)
    +
    579  DO n=1,no
    +
    580  xi=xptb(n)
    +
    581  yi=yptb(n)
    +
    582  IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
    +
    583  i1=int(xi)
    +
    584  i2=i1+1
    +
    585  wi2=xi-i1
    +
    586  wi1=1-wi2
    +
    587  j1=int(yi)
    +
    588  j2=j1+1
    +
    589  wj2=yi-j1
    +
    590  wj1=1-wj2
    +
    591  n11(n) = grid_in%field_pos(i1,j1)
    +
    592  n21(n) = grid_in%field_pos(i2, j1)
    +
    593  n12(n) = grid_in%field_pos(i1, j2)
    +
    594  n22(n) = grid_in%field_pos(i2, j2)
    +
    595  IF(min(n11(n),n21(n),n12(n),n22(n)).GT.0) THEN
    +
    596  w11(n)=wi1*wj1
    +
    597  w21(n)=wi2*wj1
    +
    598  w12(n)=wi1*wj2
    +
    599  w22(n)=wi2*wj2
    +
    600  CALL movect(rlai(n11(n)),rloi(n11(n)),rlat(n),rlon(n),cm11,sm11)
    +
    601  CALL movect(rlai(n21(n)),rloi(n21(n)),rlat(n),rlon(n),cm21,sm21)
    +
    602  CALL movect(rlai(n12(n)),rloi(n12(n)),rlat(n),rlon(n),cm12,sm12)
    +
    603  CALL movect(rlai(n22(n)),rloi(n22(n)),rlat(n),rlon(n),cm22,sm22)
    +
    604  c11(n)=cm11*croi(n11(n))+sm11*sroi(n11(n))
    +
    605  s11(n)=sm11*croi(n11(n))-cm11*sroi(n11(n))
    +
    606  c21(n)=cm21*croi(n21(n))+sm21*sroi(n21(n))
    +
    607  s21(n)=sm21*croi(n21(n))-cm21*sroi(n21(n))
    +
    608  c12(n)=cm12*croi(n12(n))+sm12*sroi(n12(n))
    +
    609  s12(n)=sm12*croi(n12(n))-cm12*sroi(n12(n))
    +
    610  c22(n)=cm22*croi(n22(n))+sm22*sroi(n22(n))
    +
    611  s22(n)=sm22*croi(n22(n))-cm22*sroi(n22(n))
    +
    612  ELSE
    +
    613  n11(n)=0
    +
    614  n21(n)=0
    +
    615  n12(n)=0
    +
    616  n22(n)=0
    +
    617  ENDIF
    +
    618  ELSE
    +
    619  n11(n)=0
    +
    620  n21(n)=0
    +
    621  n12(n)=0
    +
    622  n22(n)=0
    +
    623  ENDIF
    +
    624  ENDDO
    +
    625  !$OMP END PARALLEL DO
    +
    626  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    627  ! INTERPOLATE WITH OR WITHOUT BITMAPS
    +
    628  ! KM IS OFTEN 1 .. DO NO PUT OMP PARALLEL DO HERE
    +
    629  DO k=1,km
    +
    630  !$OMP PARALLEL DO PRIVATE(N,U11,U12,U21,U22,UB,V11,V12,V21,V22,VB) SCHEDULE(STATIC)
    +
    631  DO n=1,no
    +
    632  IF(n11(n).GT.0) THEN
    +
    633  IF(ibi(k).EQ.0) THEN
    +
    634  u11=c11(n)*ui(n11(n),k)-s11(n)*vi(n11(n),k)
    +
    635  v11=s11(n)*ui(n11(n),k)+c11(n)*vi(n11(n),k)
    +
    636  u21=c21(n)*ui(n21(n),k)-s21(n)*vi(n21(n),k)
    +
    637  v21=s21(n)*ui(n21(n),k)+c21(n)*vi(n21(n),k)
    +
    638  u12=c12(n)*ui(n12(n),k)-s12(n)*vi(n12(n),k)
    +
    639  v12=s12(n)*ui(n12(n),k)+c12(n)*vi(n12(n),k)
    +
    640  u22=c22(n)*ui(n22(n),k)-s22(n)*vi(n22(n),k)
    +
    641  v22=s22(n)*ui(n22(n),k)+c22(n)*vi(n22(n),k)
    +
    642  ub=w11(n)*u11+w21(n)*u21+w12(n)*u12+w22(n)*u22
    +
    643  vb=w11(n)*v11+w21(n)*v21+w12(n)*v12+w22(n)*v22
    +
    644  uo(n,k)=uo(n,k)+wb*ub
    +
    645  vo(n,k)=vo(n,k)+wb*vb
    +
    646  wo(n,k)=wo(n,k)+wb
    +
    647  ELSE
    +
    648  IF(li(n11(n),k)) THEN
    +
    649  u11=c11(n)*ui(n11(n),k)-s11(n)*vi(n11(n),k)
    +
    650  v11=s11(n)*ui(n11(n),k)+c11(n)*vi(n11(n),k)
    +
    651  uo(n,k)=uo(n,k)+wb*w11(n)*u11
    +
    652  vo(n,k)=vo(n,k)+wb*w11(n)*v11
    +
    653  wo(n,k)=wo(n,k)+wb*w11(n)
    +
    654  ENDIF
    +
    655  IF(li(n21(n),k)) THEN
    +
    656  u21=c21(n)*ui(n21(n),k)-s21(n)*vi(n21(n),k)
    +
    657  v21=s21(n)*ui(n21(n),k)+c21(n)*vi(n21(n),k)
    +
    658  uo(n,k)=uo(n,k)+wb*w21(n)*u21
    +
    659  vo(n,k)=vo(n,k)+wb*w21(n)*v21
    +
    660  wo(n,k)=wo(n,k)+wb*w21(n)
    +
    661  ENDIF
    +
    662  IF(li(n12(n),k)) THEN
    +
    663  u12=c12(n)*ui(n12(n),k)-s12(n)*vi(n12(n),k)
    +
    664  v12=s12(n)*ui(n12(n),k)+c12(n)*vi(n12(n),k)
    +
    665  uo(n,k)=uo(n,k)+wb*w12(n)*u12
    +
    666  vo(n,k)=vo(n,k)+wb*w12(n)*v12
    +
    667  wo(n,k)=wo(n,k)+wb*w12(n)
    +
    668  ENDIF
    +
    669  IF(li(n22(n),k)) THEN
    +
    670  u22=c22(n)*ui(n22(n),k)-s22(n)*vi(n22(n),k)
    +
    671  v22=s22(n)*ui(n22(n),k)+c22(n)*vi(n22(n),k)
    +
    672  uo(n,k)=uo(n,k)+wb*w22(n)*u22
    +
    673  vo(n,k)=vo(n,k)+wb*w22(n)*v22
    +
    674  wo(n,k)=wo(n,k)+wb*w22(n)
    +
    675  ENDIF
    +
    676  ENDIF
    +
    677  ENDIF
    +
    678  ENDDO
    +
    679  !$OMP END PARALLEL DO
    +
    680  ENDDO
    +
    681  ENDIF
    +
    682  ENDDO
    +
    683  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    684  ! COMPUTE OUTPUT BITMAPS AND FIELDS
    +
    685  ! KM is often 1, do not put OMP PARALLEL here
    +
    686  DO k=1,km
    +
    687  ibo(k)=ibi(k)
    +
    688  !$OMP PARALLEL DO PRIVATE(N,UROT,VROT) SCHEDULE(STATIC)
    +
    689  DO n=1,no
    +
    690  lo(n,k)=wo(n,k).GE.pmp*nb4
    +
    691  IF(lo(n,k)) THEN
    +
    692  uo(n,k)=uo(n,k)/wo(n,k)
    +
    693  vo(n,k)=vo(n,k)/wo(n,k)
    +
    694  urot=crot(n)*uo(n,k)-srot(n)*vo(n,k)
    +
    695  vrot=srot(n)*uo(n,k)+crot(n)*vo(n,k)
    +
    696  uo(n,k)=urot
    +
    697  vo(n,k)=vrot
    +
    698  ELSE
    +
    699  ibo(k)=1
    +
    700  uo(n,k)=0.
    +
    701  vo(n,k)=0.
    +
    702  ENDIF
    +
    703  ENDDO
    +
    704  !$OMP END PARALLEL DO
    +
    705  ENDDO
    +
    706 
    +
    707  select type(grid_out2)
    +
    708  type is(ip_equid_cylind_grid)
    +
    709  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
    +
    710  end select
    +
    711  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    712  END SUBROUTINE interpolate_budget_vector
    +
    713 
    +
    714 end module budget_interp_mod
    + + +
    subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
    This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
    Definition: movect.F90:26
    +
    Budget interpolation routines for scalars and vectors.
    +
    subroutine interpolate_budget_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    Performs budget interpolation from any grid to any grid (or to random station points) for scalar fiel...
    +
    subroutine interpolate_budget_vector(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    This subprogram performs budget interpolation from any grid to any grid (or to random station points)...
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Routines for creating an ip_grid given a Grib descriptor.
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:7
    +
    subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:30
    +
    subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
    Make multiple pole vector values consistent,.
    Definition: polfix_mod.F90:125
    +
    +
    + + + + diff --git a/ver-5.1.0/classes.html b/ver-5.1.0/classes.html new file mode 100644 index 00000000..b64bf5d2 --- /dev/null +++ b/ver-5.1.0/classes.html @@ -0,0 +1,113 @@ + + + + + + + +NCEPLIBS-ip: Data Types + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + + + + + + diff --git a/ver-5.1.0/closed.png b/ver-5.1.0/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/ver-5.1.0/closed.png differ diff --git a/ver-5.1.0/dir_49e56c817e5e54854c35e136979f97ca.html b/ver-5.1.0/dir_49e56c817e5e54854c35e136979f97ca.html new file mode 100644 index 00000000..ad5da577 --- /dev/null +++ b/ver-5.1.0/dir_49e56c817e5e54854c35e136979f97ca.html @@ -0,0 +1,99 @@ + + + + + + + +NCEPLIBS-ip: docs Directory Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    docs Directory Reference
    +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/ver-5.1.0/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 00000000..b4bd3e34 --- /dev/null +++ b/ver-5.1.0/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,370 @@ + + + + + + + +NCEPLIBS-ip: src Directory Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    src Directory Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Files

    file  bicubic_interp_mod.F90 [code]
     Bicubic interpolation routines for scalars and vectors.
     
    file  bilinear_interp_mod.F90 [code]
     Bilinear interpolation routines for scalars and vectors.
     
    file  budget_interp_mod.F90 [code]
     Budget interpolation routines for scalars and vectors.
     
    file  earth_radius_mod.F90 [code]
     Determine earth radius and shape.
     
    file  fftpack.F [code]
     A concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code.
     
    file  gdswzd_c.F90 [code]
     C wrapper for routine gdswzd().
     
    file  gdswzd_mod.F90 [code]
     Driver module for gdswzd routines.
     
    file  ip_constants_mod.F90 [code]
     Constants for use in NCEPLIBS-ip.
     
    file  ip_equid_cylind_grid_mod.F90 [code]
     Equidistant cylindrical grib decoder and grid coordinate transformations.
     
    file  ip_gaussian_grid_mod.F90 [code]
     Gaussian grid coordinate transformations.
     
    file  ip_grid_descriptor_mod.F90 [code]
     Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
     
    file  ip_grid_factory_mod.F90 [code]
     Routines for creating an ip_grid given a Grib descriptor.
     
    file  ip_grid_mod.F90 [code]
     Abstract ip_grid type.
     
    file  ip_grids_mod.F90 [code]
     Re-export the individual grids.
     
    file  ip_interpolators_mod.F90 [code]
     Top-level module to export interpolation routines and constants.
     
    file  ip_lambert_conf_grid_mod.F90 [code]
     GDS wizard for lambert conformal conical.
     
    file  ip_mercator_grid_mod.F90 [code]
     GDS wizard for mercator cylindrical.
     
    file  ip_mod.F90 [code]
     Top-level module for the ip library.
     
    file  ip_polar_stereo_grid_mod.F90 [code]
     GDS wizard for polar stereographic azimuthal.
     
    file  ip_rot_equid_cylind_egrid_mod.F90 [code]
     Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.
     
    file  ip_rot_equid_cylind_grid_mod.F90 [code]
     Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D.
     
    file  ip_station_points_grid_mod.F90 [code]
     Interpolate gridded data to a series of station points.
     
    file  iplib_4.h [code]
     C interface to gdswzd() and gdswzd_grib1() functions for '4' library build.
     
    file  iplib_8.h [code]
     C interface to gdswzd() and gdswzd_grib1() functions for '8' library build.
     
    file  iplib_d.h [code]
     C interface to gdswzd() and gdswzd_grib1() functions for 'd' library build.
     
    file  ipolates.F90 [code]
     Top-level driver for scalar interpolation routine ipolates().
     
    file  ipolatev.F90 [code]
     Top-level driver for vector interpolation routine ipolates.
     
    file  ipxetas.F90 [code]
     Expand or contract eta grids using linear interpolation.
     
    file  ipxwafs.F90 [code]
     Expand or contract wafs grids.
     
    file  ipxwafs2.F90 [code]
     Expand or contract wafs grids using linear interpolation and account for bitmapped data.
     
    file  ipxwafs3.F90 [code]
     Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data.
     
    file  movect.F90 [code]
     Move a vector along a great circle.
     
    file  ncpus.F [code]
     Set number of cpus.
     
    file  neighbor_budget_interp_mod.F90 [code]
     Interpolate scalar and vector fields with neighbor budget interpolation.
     
    file  neighbor_interp_mod.F90 [code]
     Interpolate scalar and vector fields with neighbor interpolation.
     
    file  polfix_mod.F90 [code]
     Make multiple pole scalar values consistent.
     
    file  spanaly.f [code]
     Analyze spectral from Fourier.
     
    file  spdz2uv.f [code]
     Compute winds from divergence and vorticity.
     
    file  spectral_interp_mod.F90 [code]
     Interpolate spectral.
     
    file  speps.f [code]
     Compute utility spectral fields.
     
    file  spfft.f [code]
     Perform multiple fast fourier transforms.
     
    file  spfft1.f [code]
     Perform multiple fast Fourier transforms.
     
    file  spffte.f [code]
     Perform multiple fast Fourier transforms.
     
    file  spfftpt.f [code]
     Compute fourier transform to gridpoints.
     
    file  spgradq.f [code]
     Compute gradient in spectral space.
     
    file  spgradx.f [code]
     Compute x-gradient in Fourier space.
     
    file  spgrady.f [code]
     Compute y-gradient in spectral space.
     
    file  splaplac.f [code]
     Compute laplacian in spectral space.
     
    file  splat.F [code]
     Computes cosines of colatitude and Gaussian weights for sets of latitudes.
     
    file  splegend.f [code]
     Compute Legendre polynomials.
     
    file  sppad.f [code]
     Pad or truncate a spectral field.
     
    file  spsynth.f [code]
     Synthesize Fourier coefficients from spectral coefficients.
     
    file  sptez.f [code]
     Perform a simple scalar spherical transform.
     
    file  sptezd.f [code]
     Perform a simple gradient spherical transform.
     
    file  sptezm.f [code]
     Perform simple scalar spherical transforms.
     
    file  sptezmd.f [code]
     Perform simple gradient spherical transforms.
     
    file  sptezmv.f [code]
     Perform simple vector spherical transforms.
     
    file  sptezv.f [code]
     Perform a simple vector spherical transform.
     
    file  sptgpm.f [code]
     Transform spectral scalar to Mercator.
     
    file  sptgpmd.f [code]
     Transform spectral to Mercator gradients.
     
    file  sptgpmv.f [code]
     Transform spectral vector to Mercator.
     
    file  sptgps.f [code]
     Transform spectral scalar to polar stereo.
     
    file  sptgpsd.f [code]
     Transform spectral to polar stereographic gradients.
     
    file  sptgpsv.f [code]
     Transform spectral vector to polar stereo.
     
    file  sptgpt.f [code]
     Transform spectral scalar to station points.
     
    file  sptgptd.f [code]
     Transform spectral to station point gradients.
     
    file  sptgptsd.f [code]
     Transform spectral scalar to station points.
     
    file  sptgptv.f [code]
     Transform spectral vector to station points.
     
    file  sptgptvd.f [code]
     Transform spectral vector to station points.
     
    file  sptran.f [code]
     Perform a scalar spherical transform.
     
    file  sptrand.f [code]
     Perform a gradient spherical transform.
     
    file  sptranf.f [code]
     Perform a scalar spherical transform.
     
    file  sptranf0.f [code]
     Sptranf spectral initialization.
     
    file  sptranf1.f [code]
     Sptranf spectral transform.
     
    file  sptranfv.f [code]
     Perform a vector spherical transform.
     
    file  sptranv.f [code]
     Perform a vector spherical transform.
     
    file  sptrun.f [code]
     Truncate gridded scalar fields.
     
    file  sptrund.f [code]
     Spectrally truncate to gradients.
     
    file  sptrung.f [code]
     Spectrally interpolate scalars to stations.
     
    file  sptrungv.f [code]
     Spectrally interpolate vectors to stations.
     
    file  sptrunl.f [code]
     Spectrally truncate to laplacian.
     
    file  sptrunm.f [code]
     Spectrally interpolate scalars to Mercator.
     
    file  sptrunmv.f [code]
     Spectrally interpolate vectors to Mercator.
     
    file  sptruns.f [code]
     Spectrally interpolate scalars to polar stereo.
     
    file  sptrunsv.f [code]
     Spectrally interpolate vectors to polar stereo.
     
    file  sptrunv.f [code]
     Spectrally truncate gridded vector fields.
     
    file  spuv2dz.f [code]
     Compute divergence and vorticity from winds.
     
    file  spvar.f [code]
     Compute variance by total wavenumber.
     
    file  spwget.f [code]
     Get wave-space constants.
     
    +
    +
    + + + + diff --git a/doc.png b/ver-5.1.0/doc.png similarity index 100% rename from doc.png rename to ver-5.1.0/doc.png diff --git a/ver-5.1.0/doxygen.css b/ver-5.1.0/doxygen.css new file mode 100644 index 00000000..ffbff022 --- /dev/null +++ b/ver-5.1.0/doxygen.css @@ -0,0 +1,1793 @@ +/* The standard CSS for doxygen 1.9.1 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +p.reference, p.definition { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +ul.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + border-right: 1px solid #A3B4D7; + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +.contents a.qindexHL:visited { + color: #FFFFFF; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: hidden; /*Fixed: list item bullets overlap floating elements*/ +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.ah, span.ah { + background-color: black; + font-weight: bold; + color: #FFFFFF; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000 110%); +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +blockquote.DocNodeRTL { + border-left: 0; + border-right: 2px solid #9CAFD4; + margin: 0 4px 0 24px; + padding: 0 16px 0 12px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + +} + +.overload { + font-family: "courier new",courier,monospace; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +table.directory { + font: 400 14px Roboto,sans-serif; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.section.DocNodeRTL { + margin-right: 0px; + padding-right: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.note.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.warning.DocNodeRTL, dl.attention.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.pre.DocNodeRTL, dl.post.DocNodeRTL, dl.invariant.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.deprecated.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.todo.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.test.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.bug.DocNodeRTL { + margin-left: 0; + padding-left: 0; + border-left: 0; + margin-right: -7px; + padding-right: 3px; + border-right: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +.PageDocRTL-title div.toc { + float: left !important; + text-align: right; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +.PageDocRTL-title div.toc li { + background-position-x: right !important; + padding-left: 0 !important; + padding-right: 10px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +.PageDocRTL-title div.toc li.level1 { + margin-left: 0 !important; + margin-right: 0; +} + +.PageDocRTL-title div.toc li.level2 { + margin-left: 0 !important; + margin-right: 15px; +} + +.PageDocRTL-title div.toc li.level3 { + margin-left: 0 !important; + margin-right: 30px; +} + +.PageDocRTL-title div.toc li.level4 { + margin-left: 0 !important; + margin-right: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #FFFFFF; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #FFFFFF; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +.DocNodeRTL { + text-align: right; + direction: rtl; +} + +.DocNodeLTR { + text-align: left; + direction: ltr; +} + +table.DocNodeRTL { + width: auto; + margin-right: 0; + margin-left: auto; +} + +table.DocNodeLTR { + width: auto; + margin-right: auto; + margin-left: 0; +} + +tt, code, kbd, samp +{ + display: inline-block; + direction:ltr; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/ver-5.1.0/doxygen.svg b/ver-5.1.0/doxygen.svg new file mode 100644 index 00000000..d42dad52 --- /dev/null +++ b/ver-5.1.0/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ver-5.1.0/dynsections.js b/ver-5.1.0/dynsections.js new file mode 100644 index 00000000..88f2c27e --- /dev/null +++ b/ver-5.1.0/dynsections.js @@ -0,0 +1,128 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +NCEPLIBS-ip: earth_radius_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    earth_radius_mod.F90 File Reference
    +
    +
    + +

    Determine earth radius and shape. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Modules

    module  earth_radius_mod
     Determine earth radius and shape.
     
    + + + + +

    +Functions/Subroutines

    subroutine, public earth_radius_mod::earth_radius (IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
     Determine earth radius and shape. More...
     
    +

    Detailed Description

    +

    Determine earth radius and shape.

    +
    Author
    Kyle Gerheiser
    +
    Date
    2021-07-21
    + +

    Definition in file earth_radius_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/earth__radius__mod_8F90.js b/ver-5.1.0/earth__radius__mod_8F90.js new file mode 100644 index 00000000..bc2c8f77 --- /dev/null +++ b/ver-5.1.0/earth__radius__mod_8F90.js @@ -0,0 +1,4 @@ +var earth__radius__mod_8F90 = +[ + [ "earth_radius", "earth__radius__mod_8F90.html#a810f60db1a1faff0d6f59937a8207a54", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/earth__radius__mod_8F90_source.html b/ver-5.1.0/earth__radius__mod_8F90_source.html new file mode 100644 index 00000000..209f1e37 --- /dev/null +++ b/ver-5.1.0/earth__radius__mod_8F90_source.html @@ -0,0 +1,168 @@ + + + + + + + +NCEPLIBS-ip: earth_radius_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    earth_radius_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + +
    8  implicit none
    +
    9 
    +
    10  private
    +
    11  public :: earth_radius
    +
    12 
    +
    13 contains
    +
    14 
    +
    40  SUBROUTINE earth_radius(IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
    +
    41  IMPLICIT NONE
    +
    42 
    +
    43  INTEGER, INTENT(IN ) :: igdtlen
    +
    44  INTEGER, INTENT(IN ) :: igdtmpl(igdtlen)
    +
    45 
    +
    46  REAL, INTENT( OUT) :: eccen_squared
    +
    47  REAL, INTENT( OUT) :: radius
    +
    48 
    +
    49  REAL :: flat
    +
    50  REAL :: major_axis, minor_axis
    +
    51 
    +
    52  SELECT CASE (igdtmpl(1))
    +
    53  CASE (0)
    +
    54  radius = 6367470.0
    +
    55  eccen_squared = 0.0
    +
    56  CASE (1) ! USER SPECIFIED SPHERICAL
    +
    57  radius = float(igdtmpl(3))/float(10**igdtmpl(2))
    +
    58  eccen_squared = 0.0
    +
    59  CASE (2) ! IAU 1965
    +
    60  radius = 6378160.0 ! SEMI MAJOR AXIS
    +
    61  flat = 1.0/297.0 ! FLATTENING
    +
    62  eccen_squared = (2.0*flat) - (flat**2)
    +
    63  CASE (3) ! USER SPECIFIED ELLIPTICAL (KM)
    +
    64  major_axis = float(igdtmpl(5))/float(10**igdtmpl(4))
    +
    65  major_axis = major_axis * 1000.0
    +
    66  minor_axis = float(igdtmpl(7))/float(10**igdtmpl(6))
    +
    67  minor_axis = minor_axis * 1000.0
    +
    68  eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
    +
    69  radius = major_axis
    +
    70  CASE (4) ! IAG-GRS80 MODEL
    +
    71  radius = 6378137.0 ! SEMI MAJOR AXIS
    +
    72  flat = 1.0/298.2572 ! FLATTENING
    +
    73  eccen_squared = (2.0*flat) - (flat**2)
    +
    74  CASE (5) ! WGS84 DATUM
    +
    75  radius = 6378137.0 ! SEMI MAJOR AXIS
    +
    76  eccen_squared = 0.00669437999013
    +
    77  CASE (6)
    +
    78  radius = 6371229.0
    +
    79  eccen_squared = 0.0
    +
    80  CASE (7) ! USER SPECIFIED ELLIPTICAL (M)
    +
    81  major_axis = float(igdtmpl(5))/float(10**igdtmpl(4))
    +
    82  minor_axis = float(igdtmpl(7))/float(10**igdtmpl(6))
    +
    83  eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
    +
    84  radius = major_axis
    +
    85  CASE (8)
    +
    86  radius = 6371200.0
    +
    87  eccen_squared = 0.0
    +
    88  CASE DEFAULT
    +
    89  radius = -9999.
    +
    90  eccen_squared = -9999.
    +
    91  END SELECT
    +
    92  !
    +
    93  RETURN
    +
    94  !
    +
    95  END SUBROUTINE earth_radius
    +
    96 end module earth_radius_mod
    +
    Determine earth radius and shape.
    +
    subroutine, public earth_radius(IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
    Determine earth radius and shape.
    +
    +
    + + + + diff --git a/ver-5.1.0/fftpack_8F.html b/ver-5.1.0/fftpack_8F.html new file mode 100644 index 00000000..2627441e --- /dev/null +++ b/ver-5.1.0/fftpack_8F.html @@ -0,0 +1,2006 @@ + + + + + + + +NCEPLIBS-ip: fftpack.F File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    fftpack.F File Reference
    +
    +
    + +

    A concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine csfft (isign, n, scale, x, y, table, work, isys)
     csfft More...
     
    subroutine dcrft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
     dcrft More...
     
    subroutine drcft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
     drcft More...
     
    subroutine radb2 (IDO, L1, CC, CH, WA1)
     RADB2. More...
     
    subroutine radb3 (IDO, L1, CC, CH, WA1, WA2)
     RADB3
    + More...
     
    subroutine radb4 (IDO, L1, CC, CH, WA1, WA2, WA3)
     RADB4. More...
     
    subroutine radb5 (IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
     RADB5. More...
     
    subroutine radbg (IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
     RADBG. More...
     
    subroutine radf2 (IDO, L1, CC, CH, WA1)
     RADBG. More...
     
    subroutine radf3 (IDO, L1, CC, CH, WA1, WA2)
     RADF3. More...
     
    subroutine radf4 (IDO, L1, CC, CH, WA1, WA2, WA3)
     RADF4. More...
     
    subroutine radf5 (IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
     RADF5. More...
     
    subroutine radfg (IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
     RADFG. More...
     
    subroutine rfftb (N, R, WSAVE)
     RFFTB. More...
     
    subroutine rfftb1 (N, C, CH, WA, IFAC)
     RFFTB1. More...
     
    subroutine rfftf (N, R, WSAVE)
     RFFTF. More...
     
    subroutine rfftf1 (N, C, CH, WA, IFAC)
     RFFTF1. More...
     
    subroutine rffti (N, WSAVE)
     RFFTI. More...
     
    subroutine rffti1 (N, WA, IFAC)
     RFFTI1. More...
     
    subroutine scfft (isign, n, scale, x, y, table, work, isys)
     scfft More...
     
    subroutine scrft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
     scrft More...
     
    subroutine srcft (init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
     srcft More...
     
    +

    Detailed Description

    +

    A concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code.

    +

    FFTPACK is a package of Fortran subprograms for the fast Fourier transform of periodic and other symmetric sequences. It includes complex, real, sine, cosine, and quarter-wave transforms.

    +

    Reference:

      +
    • P.N. Swarztrauber, Vectorizing the FFTs, in Parallel Computations (G. Rodrigue, ed.), Academic Press, 1982, pp. 51–83.

      +
      Author
      Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
      +
    • +
    + +

    Definition in file fftpack.F.

    +

    Function/Subroutine Documentation

    + +

    ◆ csfft()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine csfft (integer isign,
    integer n,
    real scale,
    real, dimension(*) x,
    real, dimension(*) y,
    real, dimension(*) table,
    real, dimension(*) work,
    integer isys 
    )
    +
    + +

    csfft

    +
    Parameters
    + + + + + + + + + +
    isign
    n
    scale
    x
    y
    table
    work
    isys
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 120 of file fftpack.F.

    + +

    References rfftb(), and rffti().

    + +
    +
    + +

    ◆ dcrft()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine dcrft (integer init,
    real, dimension(2*ldx,*) x,
    integer ldx,
    real, dimension(ldy,*) y,
    integer ldy,
    integer n,
    integer m,
    integer isign,
    real scale,
    real, dimension(44002) table,
    integer n1,
    real, dimension(*) wrk,
    integer n2,
    real, optional z,
    integer, optional nz 
    )
    +
    + +

    dcrft

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    init
    x
    ldx
    y
    ldy
    n
    m
    isign
    scale
    table
    n1
    wrk
    n2
    z
    nz
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 32 of file fftpack.F.

    + +

    References rfftb(), and rffti().

    + +

    Referenced by spffte().

    + +
    +
    + +

    ◆ drcft()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine drcft (integer init,
    real, dimension(ldx,*) x,
    integer ldx,
    real, dimension(2*ldy,*) y,
    integer ldy,
    integer n,
    integer m,
    integer isign,
    real scale,
    real, dimension(44002) table,
    integer n1,
    real, dimension(*) wrk,
    integer n2,
    real, optional z,
    integer, optional nz 
    )
    +
    + +

    drcft

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    init
    x
    ldx
    y
    ldy
    n
    m
    isign
    scale
    table
    n1
    wrk
    n2
    z
    nz
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 162 of file fftpack.F.

    + +

    References rfftf(), and rffti().

    + +

    Referenced by spffte().

    + +
    +
    + +

    ◆ radb2()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radb2 ( IDO,
     L1,
    dimension(ido,2,l1) CC,
    dimension(ido,l1,2) CH,
    dimension(*) WA1 
    )
    +
    + +

    RADB2.

    +
    Parameters
    + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 546 of file fftpack.F.

    + +

    Referenced by rfftb1().

    + +
    +
    + +

    ◆ radb3()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radb3 ( IDO,
     L1,
    dimension(ido,3,l1) CC,
    dimension(ido,l1,3) CH,
    dimension(*) WA1,
    dimension(*) WA2 
    )
    +
    + +

    RADB3
    +

    +
    Parameters
    + + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    WA2
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 591 of file fftpack.F.

    + +

    Referenced by rfftb1().

    + +
    +
    + +

    ◆ radb4()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radb4 ( IDO,
     L1,
    dimension(ido,4,l1) CC,
    dimension(ido,l1,4) CH,
    dimension(*) WA1,
    dimension(*) WA2,
    dimension(*) WA3 
    )
    +
    + +

    RADB4.

    +
    Parameters
    + + + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    WA2
    WA3
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 641 of file fftpack.F.

    + +

    Referenced by rfftb1().

    + +
    +
    + +

    ◆ radb5()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radb5 ( IDO,
     L1,
    dimension(ido,5,l1) CC,
    dimension(ido,l1,5) CH,
    dimension(*) WA1,
    dimension(*) WA2,
    dimension(*) WA3,
    dimension(*) WA4 
    )
    +
    + +

    RADB5.

    +
    Parameters
    + + + + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    WA2
    WA3
    WA4
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 718 of file fftpack.F.

    + +

    Referenced by rfftb1().

    + +
    +
    + +

    ◆ radbg()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radbg ( IDO,
     IP,
     L1,
     IDL1,
    dimension(ido,ip,l1) CC,
    dimension(ido,l1,ip) C1,
    dimension(idl1,ip) C2,
    dimension(ido,l1,ip) CH,
    dimension(idl1,ip) CH2,
    dimension(*) WA 
    )
    +
    + +

    RADBG.

    +
    Parameters
    + + + + + + + + + + + +
    IDO
    IP
    L1
    IDL1
    CC
    C1
    C2
    CH
    CH2
    WA
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 796 of file fftpack.F.

    + +

    Referenced by rfftb1().

    + +
    +
    + +

    ◆ radf2()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radf2 ( IDO,
     L1,
    dimension(ido,l1,2) CC,
    dimension(ido,2,l1) CH,
    dimension(*) WA1 
    )
    +
    + +

    RADBG.

    +
    Parameters
    + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 974 of file fftpack.F.

    + +

    Referenced by rfftf1().

    + +
    +
    + +

    ◆ radf3()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radf3 ( IDO,
     L1,
    dimension(ido,l1,3) CC,
    dimension(ido,3,l1) CH,
    dimension(*) WA1,
    dimension(*) WA2 
    )
    +
    + +

    RADF3.

    +
    Parameters
    + + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    WA2
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 1018 of file fftpack.F.

    + +

    Referenced by rfftf1().

    + +
    +
    + +

    ◆ radf4()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radf4 ( IDO,
     L1,
    dimension(ido,l1,4) CC,
    dimension(ido,4,l1) CH,
    dimension(*) WA1,
    dimension(*) WA2,
    dimension(*) WA3 
    )
    +
    + +

    RADF4.

    +
    Parameters
    + + + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    WA2
    WA3
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 1065 of file fftpack.F.

    + +

    Referenced by rfftf1().

    + +
    +
    + +

    ◆ radf5()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radf5 ( IDO,
     L1,
    dimension(ido,l1,5) CC,
    dimension(ido,5,l1) CH,
    dimension(*) WA1,
    dimension(*) WA2,
    dimension(*) WA3,
    dimension(*) WA4 
    )
    +
    + +

    RADF5.

    +
    Parameters
    + + + + + + + + + +
    IDO
    L1
    CC
    CH
    WA1
    WA2
    WA3
    WA4
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 1138 of file fftpack.F.

    + +

    Referenced by rfftf1().

    + +
    +
    + +

    ◆ radfg()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine radfg ( IDO,
     IP,
     L1,
     IDL1,
    dimension(ido,ip,l1) CC,
    dimension(ido,l1,ip) C1,
    dimension(idl1,ip) C2,
    dimension(ido,l1,ip) CH,
    dimension(idl1,ip) CH2,
    dimension(*) WA 
    )
    +
    + +

    RADFG.

    +
    Parameters
    + + + + + + + + + + + +
    IDO
    IP
    L1
    IDL1
    CC
    C1
    C2
    CH
    CH2
    WA
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 1212 of file fftpack.F.

    + +

    Referenced by rfftf1().

    + +
    +
    + +

    ◆ rfftb()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine rfftb ( N,
    dimension(*) R,
    dimension(*) WSAVE 
    )
    +
    + +

    RFFTB.

    +
    Parameters
    + + + + +
    N
    R
    WSAVE
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 304 of file fftpack.F.

    + +

    References rfftb1().

    + +

    Referenced by csfft(), dcrft(), and scrft().

    + +
    +
    + +

    ◆ rfftb1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine rfftb1 ( N,
    real, dimension(*) C,
    real, dimension(*) CH,
    real, dimension(*) WA,
    real, dimension(*) IFAC 
    )
    +
    + +

    RFFTB1.

    +
    Parameters
    + + + + + + +
    N
    C
    CH
    WA
    IFAC
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 333 of file fftpack.F.

    + +

    References radb2(), radb3(), radb4(), radb5(), and radbg().

    + +

    Referenced by rfftb().

    + +
    +
    + +

    ◆ rfftf()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine rfftf ( N,
    dimension(*) R,
    dimension(*) WSAVE 
    )
    +
    + +

    RFFTF.

    +
    Parameters
    + + + + +
    N
    R
    WSAVE
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 290 of file fftpack.F.

    + +

    References rfftf1().

    + +

    Referenced by drcft(), scfft(), and srcft().

    + +
    +
    + +

    ◆ rfftf1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine rfftf1 ( N,
    real, dimension(*) C,
    real, dimension(*) CH,
    real, dimension(*) WA,
    real, dimension(*) IFAC 
    )
    +
    + +

    RFFTF1.

    +
    Parameters
    + + + + + + +
    N
    C
    CH
    WA
    IFAC
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 402 of file fftpack.F.

    + +

    References radf2(), radf3(), radf4(), radf5(), and radfg().

    + +

    Referenced by rfftf().

    + +
    +
    + +

    ◆ rffti()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    subroutine rffti ( N,
    dimension(*) WSAVE 
    )
    +
    + +

    RFFTI.

    +
    Parameters
    + + + +
    N
    WSAVE
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 317 of file fftpack.F.

    + +

    References rffti1().

    + +

    Referenced by csfft(), dcrft(), drcft(), scfft(), scrft(), and srcft().

    + +
    +
    + +

    ◆ rffti1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine rffti1 ( N,
    real, dimension(*) WA,
    real, dimension(*) IFAC 
    )
    +
    + +

    RFFTI1.

    +
    Parameters
    + + + + +
    N
    WA
    IFAC
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 469 of file fftpack.F.

    + +

    Referenced by rffti().

    + +
    +
    + +

    ◆ scfft()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine scfft (integer isign,
    integer n,
    real scale,
    real, dimension(*) x,
    real, dimension(*) y,
    real, dimension(*) table,
    real, dimension(*) work,
    integer isys 
    )
    +
    + +

    scfft

    +
    Parameters
    + + + + + + + + + +
    isign
    n
    scale
    x
    y
    table
    work
    isys
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 257 of file fftpack.F.

    + +

    References rfftf(), and rffti().

    + +
    +
    + +

    ◆ scrft()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine scrft (integer init,
    real, dimension(2*ldx,*) x,
    integer ldx,
    real, dimension(ldy,*) y,
    integer ldy,
    integer n,
    integer m,
    integer isign,
    real scale,
    real, dimension(44002) table,
    integer n1,
    real, dimension(*) wrk,
    integer n2,
    real, optional z,
    integer, optional nz 
    )
    +
    + +

    scrft

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    init
    x
    ldx
    y
    ldy
    n
    m
    isign
    scale
    table
    n1
    wrk
    n2
    z
    nz
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 80 of file fftpack.F.

    + +

    References rfftb(), and rffti().

    + +

    Referenced by spfft(), spfft1(), and spffte().

    + +
    +
    + +

    ◆ srcft()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine srcft (integer init,
    real, dimension(ldx,*) x,
    integer ldx,
    real, dimension(2*ldy,*) y,
    integer ldy,
    integer n,
    integer m,
    integer isign,
    real scale,
    real, dimension(44002) table,
    integer n1,
    real, dimension(*) wrk,
    integer n2,
    real, optional z,
    integer, optional nz 
    )
    +
    + +

    srcft

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    init
    x
    ldx
    y
    ldy
    n
    m
    isign
    scale
    table
    n1
    wrk
    n2
    z
    nz
    +
    +
    +
    Author
    Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    + +

    Definition at line 213 of file fftpack.F.

    + +

    References rfftf(), and rffti().

    + +

    Referenced by spfft(), spfft1(), and spffte().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/fftpack_8F.js b/ver-5.1.0/fftpack_8F.js new file mode 100644 index 00000000..98c5a031 --- /dev/null +++ b/ver-5.1.0/fftpack_8F.js @@ -0,0 +1,25 @@ +var fftpack_8F = +[ + [ "csfft", "fftpack_8F.html#ad261879c88a7f040e43f1549e65f36e5", null ], + [ "dcrft", "fftpack_8F.html#a713ef445886ad8dc8b16692c6075d225", null ], + [ "drcft", "fftpack_8F.html#a55b05419c0d3bb0595b34c8cacf93be8", null ], + [ "radb2", "fftpack_8F.html#ae63abe3a02989ed4fbd60b50bc0c6dda", null ], + [ "radb3", "fftpack_8F.html#a6129001ac4cdf5d5a345edc2822d8014", null ], + [ "radb4", "fftpack_8F.html#a3b5aab129020968eaf92f2e6ca0785ef", null ], + [ "radb5", "fftpack_8F.html#a2b6492f922cbee03af5b89d52356abf1", null ], + [ "radbg", "fftpack_8F.html#af5a2521b66fece6cc768206c1df0d20b", null ], + [ "radf2", "fftpack_8F.html#a70e2420dd5bee9e41eb6c15bbad5eef6", null ], + [ "radf3", "fftpack_8F.html#a51374398f8edd5701987ce483c739592", null ], + [ "radf4", "fftpack_8F.html#ae9910ca606fd0cdb03b5b3b98533f486", null ], + [ "radf5", "fftpack_8F.html#a6d852c36924b038f77a24b8e22205add", null ], + [ "radfg", "fftpack_8F.html#ad5dbca6bb6ee7c0a86a1e140627de1b2", null ], + [ "rfftb", "fftpack_8F.html#a79ba25d1f342858b0faa3c3e3585ec88", null ], + [ "rfftb1", "fftpack_8F.html#afa735c298a72dd1c13ab1c45e737c066", null ], + [ "rfftf", "fftpack_8F.html#afbb5dc9c70ebe24759d5ffec1d3e42e2", null ], + [ "rfftf1", "fftpack_8F.html#acdf9efa42dc73f90af444ee0da649a09", null ], + [ "rffti", "fftpack_8F.html#a50f1237ff5990436609962c0eae406db", null ], + [ "rffti1", "fftpack_8F.html#ae3569ef7a371390f6bf38417865ef71b", null ], + [ "scfft", "fftpack_8F.html#a369071ea2d380c9d91ba36d1bf375e33", null ], + [ "scrft", "fftpack_8F.html#ac69cbd64be972c20a4424f5327fb4b36", null ], + [ "srcft", "fftpack_8F.html#acf248c4f27a9fa81cffdfded50eee742", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/fftpack_8F_source.html b/ver-5.1.0/fftpack_8F_source.html new file mode 100644 index 00000000..4c82f5e5 --- /dev/null +++ b/ver-5.1.0/fftpack_8F_source.html @@ -0,0 +1,1498 @@ + + + + + + + +NCEPLIBS-ip: fftpack.F Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    fftpack.F
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief A concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code.
    +
    3 C>
    +
    4 C> FFTPACK is a package of Fortran subprograms for the fast Fourier
    +
    5 C> transform of periodic and other symmetric sequences. It includes
    +
    6 C> complex, real, sine, cosine, and quarter-wave transforms.
    +
    7 C>
    +
    8 C>Reference:
    +
    9 C>- P.N. Swarztrauber, Vectorizing the FFTs, in Parallel Computations
    +
    10 C>(G. Rodrigue, ed.), Academic Press, 1982, pp. 51--83.
    +
    11 C>
    +
    12 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    13 
    +
    14 C> dcrft
    +
    15 C>
    +
    16 C> @param init
    +
    17 C> @param x
    +
    18 C> @param ldx
    +
    19 C> @param y
    +
    20 C> @param ldy
    +
    21 C> @param n
    +
    22 C> @param m
    +
    23 C> @param isign
    +
    24 C> @param scale
    +
    25 C> @param table
    +
    26 C> @param n1
    +
    27 C> @param wrk
    +
    28 C> @param n2
    +
    29 C> @param z
    +
    30 C> @param nz
    +
    31 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    32  SUBROUTINE dcrft(init,x,ldx,y,ldy,n,m,isign,scale,
    +
    33  & table,n1,wrk,n2,z,nz)
    +
    34 
    +
    35  implicit none
    +
    36  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
    +
    37  real x(2*ldx,*),y(ldy,*),scale,table(44002),wrk(*)
    +
    38  real, optional :: z
    +
    39  integer, optional :: nz
    +
    40 
    +
    41  IF (init.ne.0) THEN
    +
    42  CALL rffti(n,table)
    +
    43  ELSE
    +
    44 !OCL NOVREC
    +
    45  DO j=1,m
    +
    46  y(1,j)=x(1,j)
    +
    47  DO i=2,n
    +
    48  y(i,j)=x(i+1,j)
    +
    49  ENDDO
    +
    50  CALL rfftb(n,y(1,j),table)
    +
    51  DO i=1,n
    +
    52  y(i,j)=scale*y(i,j)
    +
    53  ENDDO
    +
    54  ENDDO
    +
    55  ENDIF
    +
    56 
    +
    57  RETURN
    +
    58  END
    +
    59 
    +
    60 C> scrft
    +
    61 C>
    +
    62 C> @param init
    +
    63 C> @param x
    +
    64 C> @param ldx
    +
    65 C> @param y
    +
    66 C> @param ldy
    +
    67 C> @param n
    +
    68 C> @param m
    +
    69 C> @param isign
    +
    70 C> @param scale
    +
    71 C> @param table
    +
    72 C> @param n1
    +
    73 C> @param wrk
    +
    74 C> @param n2
    +
    75 C> @param z
    +
    76 C> @param nz
    +
    77 C>
    +
    78 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    79 
    +
    80  SUBROUTINE scrft(init,x,ldx,y,ldy,n,m,isign,scale,
    +
    81  & table,n1,wrk,n2,z,nz)
    +
    82 
    +
    83  implicit none
    +
    84  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
    +
    85  real x(2*ldx,*),y(ldy,*),scale,table(44002),wrk(*)
    +
    86  real, optional :: z
    +
    87  integer, optional :: nz
    +
    88 
    +
    89  IF (init.ne.0) THEN
    +
    90  CALL rffti(n,table)
    +
    91  ELSE
    +
    92 !OCL NOVREC
    +
    93  DO j=1,m
    +
    94  y(1,j)=x(1,j)
    +
    95  DO i=2,n
    +
    96  y(i,j)=x(i+1,j)
    +
    97  ENDDO
    +
    98  CALL rfftb(n,y(1,j),table)
    +
    99  DO i=1,n
    +
    100  y(i,j)=scale*y(i,j)
    +
    101  ENDDO
    +
    102  ENDDO
    +
    103  ENDIF
    +
    104 
    +
    105  RETURN
    +
    106  END
    +
    107 
    +
    108 C> csfft
    +
    109 C>
    +
    110 C> @param isign
    +
    111 C> @param n
    +
    112 C> @param scale
    +
    113 C> @param x
    +
    114 C> @param y
    +
    115 C> @param table
    +
    116 C> @param work
    +
    117 C> @param isys
    +
    118 C>
    +
    119 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    120  SUBROUTINE csfft(isign,n,scale,x,y,table,work,isys)
    +
    121 
    +
    122  implicit none
    +
    123  integer isign,n,isys,i
    +
    124  real scale,x(*),y(*),table(*),work(*)
    +
    125 
    +
    126  IF (isign.eq.0) THEN
    +
    127  CALL rffti(n,table)
    +
    128  ENDIF
    +
    129  IF (isign.eq.1) THEN
    +
    130  y(1)=x(1)
    +
    131  DO i=2,n
    +
    132  y(i)=x(i+1)
    +
    133  ENDDO
    +
    134  CALL rfftb(n,y,table)
    +
    135  DO i=1,n
    +
    136  y(i)=scale*y(i)
    +
    137  ENDDO
    +
    138  ENDIF
    +
    139 
    +
    140  RETURN
    +
    141  END
    +
    142 
    +
    143 C> drcft
    +
    144 C>
    +
    145 C> @param init
    +
    146 C> @param x
    +
    147 C> @param ldx
    +
    148 C> @param y
    +
    149 C> @param ldy
    +
    150 C> @param n
    +
    151 C> @param m
    +
    152 C> @param isign
    +
    153 C> @param scale
    +
    154 C> @param table
    +
    155 C> @param n1
    +
    156 C> @param wrk
    +
    157 C> @param n2
    +
    158 C> @param z
    +
    159 C> @param nz
    +
    160 C>
    +
    161 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    162  SUBROUTINE drcft(init,x,ldx,y,ldy,n,m,isign,scale,
    +
    163  & table,n1,wrk,n2,z,nz)
    +
    164 
    +
    165  implicit none
    +
    166  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
    +
    167  real x(ldx,*),y(2*ldy,*),scale,table(44002),wrk(*)
    +
    168  real, optional :: z
    +
    169  integer, optional :: nz
    +
    170 
    +
    171  IF (init.ne.0) THEN
    +
    172  CALL rffti(n,table)
    +
    173  ELSE
    +
    174  DO j=1,m
    +
    175  DO i=1,n
    +
    176  y(i,j)=x(i,j)
    +
    177  ENDDO
    +
    178  CALL rfftf(n,y(1,j),table)
    +
    179  DO i=1,n
    +
    180  y(i,j)=scale*y(i,j)
    +
    181  ENDDO
    +
    182  DO i=n,2,-1
    +
    183  y(i+1,j)=y(i,j)
    +
    184  ENDDO
    +
    185  y(2,j)=0.
    +
    186 C 01/17/2013 vvvvvvvvvvvvv E.Mirvis added ver 2.0.1 by S.Moorthi request. No +|- demo.
    +
    187  y(n+2,j) = 0.
    +
    188  ENDDO
    +
    189  ENDIF
    +
    190 
    +
    191  RETURN
    +
    192  END
    +
    193 
    +
    194 C> srcft
    +
    195 C>
    +
    196 C> @param init
    +
    197 C> @param x
    +
    198 C> @param ldx
    +
    199 C> @param y
    +
    200 C> @param ldy
    +
    201 C> @param n
    +
    202 C> @param m
    +
    203 C> @param isign
    +
    204 C> @param scale
    +
    205 C> @param table
    +
    206 C> @param n1
    +
    207 C> @param wrk
    +
    208 C> @param n2
    +
    209 C> @param z
    +
    210 C> @param nz
    +
    211 C>
    +
    212 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    213  SUBROUTINE srcft(init,x,ldx,y,ldy,n,m,isign,scale,
    +
    214  & table,n1,wrk,n2,z,nz)
    +
    215 
    +
    216  implicit none
    +
    217  integer init,ldx,ldy,n,m,isign,n1,n2,i,j
    +
    218  real x(ldx,*),y(2*ldy,*),scale,table(44002),wrk(*)
    +
    219  real, optional :: z
    +
    220  integer, optional :: nz
    +
    221 
    +
    222  IF (init.ne.0) THEN
    +
    223  CALL rffti(n,table)
    +
    224  ELSE
    +
    225  DO j=1,m
    +
    226  DO i=1,n
    +
    227  y(i,j)=x(i,j)
    +
    228  ENDDO
    +
    229  CALL rfftf(n,y(1,j),table)
    +
    230  DO i=1,n
    +
    231  y(i,j)=scale*y(i,j)
    +
    232  ENDDO
    +
    233  DO i=n,2,-1
    +
    234  y(i+1,j)=y(i,j)
    +
    235  ENDDO
    +
    236  y(2,j)=0.
    +
    237  y(n+2,j) = 0.
    +
    238 C 01/17/2013 ^^^^^^^^^^E.Mirvis added ver 2.0.1 by S.Moorthi request. No +|- demo.
    +
    239  ENDDO
    +
    240  ENDIF
    +
    241 
    +
    242  RETURN
    +
    243  END
    +
    244 
    +
    245 C> scfft
    +
    246 C>
    +
    247 C> @param isign
    +
    248 C> @param n
    +
    249 C> @param scale
    +
    250 C> @param x
    +
    251 C> @param y
    +
    252 C> @param table
    +
    253 C> @param work
    +
    254 C> @param isys
    +
    255 C>
    +
    256 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    257  SUBROUTINE scfft(isign,n,scale,x,y,table,work,isys)
    +
    258 
    +
    259  implicit none
    +
    260  integer isign,n,isys,i
    +
    261  real scale,x(*),y(*),table(*),work(*)
    +
    262 
    +
    263  IF (isign.eq.0) THEN
    +
    264  CALL rffti(n,table)
    +
    265  ENDIF
    +
    266  IF (isign.eq.-1) THEN
    +
    267  DO i=1,n
    +
    268  y(i)=x(i)
    +
    269  ENDDO
    +
    270  CALL rfftf(n,y,table)
    +
    271  DO i=1,n
    +
    272  y(i)=scale*y(i)
    +
    273  ENDDO
    +
    274  DO i=n,2,-1
    +
    275  y(i+1)=y(i)
    +
    276  ENDDO
    +
    277  y(2)=0.
    +
    278  ENDIF
    +
    279 
    +
    280  RETURN
    +
    281  END
    +
    282 
    +
    283 C> RFFTF
    +
    284 C>
    +
    285 C> @param N
    +
    286 C> @param R
    +
    287 C> @param WSAVE
    +
    288 C>
    +
    289 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    290  SUBROUTINE rfftf (N,R,WSAVE)
    +
    291  dimension r(*) ,wsave(*)
    +
    292  IF (n .EQ. 1) RETURN
    +
    293  CALL rfftf1 (n,r,wsave,wsave(n+1),wsave(2*n+1))
    +
    294  RETURN
    +
    295  END
    +
    296 
    +
    297 C> RFFTB
    +
    298 C>
    +
    299 C> @param N
    +
    300 C> @param R
    +
    301 C> @param WSAVE
    +
    302 C>
    +
    303 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    304  SUBROUTINE rfftb (N,R,WSAVE)
    +
    305  dimension r(*) ,wsave(*)
    +
    306  IF (n .EQ. 1) RETURN
    +
    307  CALL rfftb1 (n,r,wsave,wsave(n+1),wsave(2*n+1))
    +
    308  RETURN
    +
    309  END
    +
    310 
    +
    311 C> RFFTI
    +
    312 C>
    +
    313 C> @param N
    +
    314 C> @param WSAVE
    +
    315 C>
    +
    316 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    317  SUBROUTINE rffti (N,WSAVE)
    +
    318  dimension wsave(*)
    +
    319  IF (n .EQ. 1) RETURN
    +
    320  CALL rffti1 (n,wsave(n+1),wsave(2*n+1))
    +
    321  RETURN
    +
    322  END
    +
    323 
    +
    324 C> RFFTB1
    +
    325 C>
    +
    326 C> @param N
    +
    327 C> @param C
    +
    328 C> @param CH
    +
    329 C> @param WA
    +
    330 C> @param IFAC
    +
    331 C>
    +
    332 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    333  SUBROUTINE rfftb1 (N,C,CH,WA,IFAC)
    +
    334  REAL CH(*) ,C(*) ,WA(*) ,IFAC(*)
    +
    335  NF = int(ifac(2))
    +
    336  na = 0
    +
    337  l1 = 1
    +
    338  iw = 1
    +
    339  DO 116 k1=1,nf
    +
    340  ip = int(ifac(k1+2))
    +
    341  l2 = ip*l1
    +
    342  ido = n/l2
    +
    343  idl1 = ido*l1
    +
    344  IF (ip .NE. 4) GO TO 103
    +
    345  ix2 = iw+ido
    +
    346  ix3 = ix2+ido
    +
    347  IF (na .NE. 0) GO TO 101
    +
    348  CALL radb4 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3))
    +
    349  GO TO 102
    +
    350  101 CALL radb4 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3))
    +
    351  102 na = 1-na
    +
    352  GO TO 115
    +
    353  103 IF (ip .NE. 2) GO TO 106
    +
    354  IF (na .NE. 0) GO TO 104
    +
    355  CALL radb2 (ido,l1,c,ch,wa(iw))
    +
    356  GO TO 105
    +
    357  104 CALL radb2 (ido,l1,ch,c,wa(iw))
    +
    358  105 na = 1-na
    +
    359  GO TO 115
    +
    360  106 IF (ip .NE. 3) GO TO 109
    +
    361  ix2 = iw+ido
    +
    362  IF (na .NE. 0) GO TO 107
    +
    363  CALL radb3 (ido,l1,c,ch,wa(iw),wa(ix2))
    +
    364  GO TO 108
    +
    365  107 CALL radb3 (ido,l1,ch,c,wa(iw),wa(ix2))
    +
    366  108 na = 1-na
    +
    367  GO TO 115
    +
    368  109 IF (ip .NE. 5) GO TO 112
    +
    369  ix2 = iw+ido
    +
    370  ix3 = ix2+ido
    +
    371  ix4 = ix3+ido
    +
    372  IF (na .NE. 0) GO TO 110
    +
    373  CALL radb5 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4))
    +
    374  GO TO 111
    +
    375  110 CALL radb5 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4))
    +
    376  111 na = 1-na
    +
    377  GO TO 115
    +
    378  112 IF (na .NE. 0) GO TO 113
    +
    379  CALL radbg (ido,ip,l1,idl1,c,c,c,ch,ch,wa(iw))
    +
    380  GO TO 114
    +
    381  113 CALL radbg (ido,ip,l1,idl1,ch,ch,ch,c,c,wa(iw))
    +
    382  114 IF (ido .EQ. 1) na = 1-na
    +
    383  115 l1 = l2
    +
    384  iw = iw+(ip-1)*ido
    +
    385  116 CONTINUE
    +
    386  IF (na .EQ. 0) RETURN
    +
    387  DO 117 i=1,n
    +
    388  c(i) = ch(i)
    +
    389  117 CONTINUE
    +
    390  RETURN
    +
    391  END
    +
    392 
    +
    393 C> RFFTF1
    +
    394 C>
    +
    395 C> @param N
    +
    396 C> @param C
    +
    397 C> @param CH
    +
    398 C> @param WA
    +
    399 C> @param IFAC
    +
    400 C>
    +
    401 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    402  SUBROUTINE rfftf1 (N,C,CH,WA,IFAC)
    +
    403  REAL CH(*) ,C(*) ,WA(*) ,IFAC(*)
    +
    404  NF = int(ifac(2))
    +
    405  na = 1
    +
    406  l2 = n
    +
    407  iw = n
    +
    408  DO 111 k1=1,nf
    +
    409  kh = nf-k1
    +
    410  ip = int(ifac(kh+3))
    +
    411  l1 = l2/ip
    +
    412  ido = n/l2
    +
    413  idl1 = ido*l1
    +
    414  iw = iw-(ip-1)*ido
    +
    415  na = 1-na
    +
    416  IF (ip .NE. 4) GO TO 102
    +
    417  ix2 = iw+ido
    +
    418  ix3 = ix2+ido
    +
    419  IF (na .NE. 0) GO TO 101
    +
    420  CALL radf4 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3))
    +
    421  GO TO 110
    +
    422  101 CALL radf4 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3))
    +
    423  GO TO 110
    +
    424  102 IF (ip .NE. 2) GO TO 104
    +
    425  IF (na .NE. 0) GO TO 103
    +
    426  CALL radf2 (ido,l1,c,ch,wa(iw))
    +
    427  GO TO 110
    +
    428  103 CALL radf2 (ido,l1,ch,c,wa(iw))
    +
    429  GO TO 110
    +
    430  104 IF (ip .NE. 3) GO TO 106
    +
    431  ix2 = iw+ido
    +
    432  IF (na .NE. 0) GO TO 105
    +
    433  CALL radf3 (ido,l1,c,ch,wa(iw),wa(ix2))
    +
    434  GO TO 110
    +
    435  105 CALL radf3 (ido,l1,ch,c,wa(iw),wa(ix2))
    +
    436  GO TO 110
    +
    437  106 IF (ip .NE. 5) GO TO 108
    +
    438  ix2 = iw+ido
    +
    439  ix3 = ix2+ido
    +
    440  ix4 = ix3+ido
    +
    441  IF (na .NE. 0) GO TO 107
    +
    442  CALL radf5 (ido,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4))
    +
    443  GO TO 110
    +
    444  107 CALL radf5 (ido,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4))
    +
    445  GO TO 110
    +
    446  108 IF (ido .EQ. 1) na = 1-na
    +
    447  IF (na .NE. 0) GO TO 109
    +
    448  CALL radfg (ido,ip,l1,idl1,c,c,c,ch,ch,wa(iw))
    +
    449  na = 1
    +
    450  GO TO 110
    +
    451  109 CALL radfg (ido,ip,l1,idl1,ch,ch,ch,c,c,wa(iw))
    +
    452  na = 0
    +
    453  110 l2 = l1
    +
    454  111 CONTINUE
    +
    455  IF (na .EQ. 1) RETURN
    +
    456  DO 112 i=1,n
    +
    457  c(i) = ch(i)
    +
    458  112 CONTINUE
    +
    459  RETURN
    +
    460  END
    +
    461 
    +
    462 C> RFFTI1
    +
    463 C>
    +
    464 C> @param N
    +
    465 C> @param WA
    +
    466 C> @param IFAC
    +
    467 C>
    +
    468 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    469  SUBROUTINE rffti1 (N,WA,IFAC)
    +
    470  REAL WA(*) ,IFAC(*) ,NTRYH(4)
    +
    471  DATA NTRYH(1),NTRYH(2),NTRYH(3),NTRYH(4)/4,2,3,5/
    +
    472  NL = n
    +
    473  nf = 0
    +
    474  j = 0
    +
    475  101 j = j+1
    +
    476  IF ((j-4).LE.0) THEN
    +
    477  GO TO 102
    +
    478  ELSE
    +
    479  GO TO 103
    +
    480  ENDIF
    +
    481  102 ntry = int(ntryh(j))
    +
    482  GO TO 104
    +
    483  103 ntry = ntry+2
    +
    484  104 nq = nl/ntry
    +
    485  nr = nl-ntry*nq
    +
    486  IF (nr.EQ.0) THEN
    +
    487  GO TO 105
    +
    488  ELSE
    +
    489  GO TO 101
    +
    490  ENDIF
    +
    491  105 nf = nf+1
    +
    492  ifac(nf+2) = ntry
    +
    493  nl = nq
    +
    494  IF (ntry .NE. 2) GO TO 107
    +
    495  IF (nf .EQ. 1) GO TO 107
    +
    496  DO 106 i=2,nf
    +
    497  ib = nf-i+2
    +
    498  ifac(ib+2) = ifac(ib+1)
    +
    499  106 CONTINUE
    +
    500  ifac(3) = 2
    +
    501  107 IF (nl .NE. 1) GO TO 104
    +
    502  ifac(1) = n
    +
    503  ifac(2) = nf
    +
    504  tpi = 6.28318530717959
    +
    505  argh = tpi/float(n)
    +
    506  is = 0
    +
    507  nfm1 = nf-1
    +
    508  l1 = 1
    +
    509  IF (nfm1 .EQ. 0) RETURN
    +
    510 !OCL NOVREC
    +
    511  DO 110 k1=1,nfm1
    +
    512  ip = int(ifac(k1+2))
    +
    513  ld = 0
    +
    514  l2 = l1*ip
    +
    515  ido = n/l2
    +
    516  ipm = ip-1
    +
    517  DO 109 j=1,ipm
    +
    518  ld = ld+l1
    +
    519  i = is
    +
    520  argld = float(ld)*argh
    +
    521  fi = 0
    +
    522 !OCL SCALAR
    +
    523  DO 108 ii=3,ido,2
    +
    524  i = i+2
    +
    525  fi = fi+1
    +
    526  arg = fi*argld
    +
    527  wa(i-1) = cos(arg)
    +
    528  wa(i) = sin(arg)
    +
    529  108 CONTINUE
    +
    530  is = is+ido
    +
    531  109 CONTINUE
    +
    532  l1 = l2
    +
    533  110 CONTINUE
    +
    534  RETURN
    +
    535  END
    +
    536 
    +
    537 C> RADB2
    +
    538 C>
    +
    539 C> @param IDO
    +
    540 C> @param L1
    +
    541 C> @param CC
    +
    542 C> @param CH
    +
    543 C> @param WA1
    +
    544 C>
    +
    545 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    546  SUBROUTINE radb2 (IDO,L1,CC,CH,WA1)
    +
    547  dimension cc(ido,2,l1) ,ch(ido,l1,2) ,
    +
    548  1 wa1(*)
    +
    549  DO 101 k=1,l1
    +
    550  ch(1,k,1) = cc(1,1,k)+cc(ido,2,k)
    +
    551  ch(1,k,2) = cc(1,1,k)-cc(ido,2,k)
    +
    552  101 CONTINUE
    +
    553  IF (ido.LT.2) THEN
    +
    554  GO TO 107
    +
    555  ELSEIF (ido.EQ.2) THEN
    +
    556  GO TO 105
    +
    557  ELSE
    +
    558  GO TO 102
    +
    559  ENDIF
    +
    560  102 idp2 = ido+2
    +
    561 !OCL NOVREC
    +
    562  DO 104 k=1,l1
    +
    563  DO 103 i=3,ido,2
    +
    564  ic = idp2-i
    +
    565  ch(i-1,k,1) = cc(i-1,1,k)+cc(ic-1,2,k)
    +
    566  tr2 = cc(i-1,1,k)-cc(ic-1,2,k)
    +
    567  ch(i,k,1) = cc(i,1,k)-cc(ic,2,k)
    +
    568  ti2 = cc(i,1,k)+cc(ic,2,k)
    +
    569  ch(i-1,k,2) = wa1(i-2)*tr2-wa1(i-1)*ti2
    +
    570  ch(i,k,2) = wa1(i-2)*ti2+wa1(i-1)*tr2
    +
    571  103 CONTINUE
    +
    572  104 CONTINUE
    +
    573  IF (mod(ido,2) .EQ. 1) RETURN
    +
    574  105 DO 106 k=1,l1
    +
    575  ch(ido,k,1) = cc(ido,1,k)+cc(ido,1,k)
    +
    576  ch(ido,k,2) = -(cc(1,2,k)+cc(1,2,k))
    +
    577  106 CONTINUE
    +
    578  107 RETURN
    +
    579  END
    +
    580 
    +
    581 C> RADB3
    +
    582 C>
    +
    583 C> @param IDO
    +
    584 C> @param L1
    +
    585 C> @param CC
    +
    586 C> @param CH
    +
    587 C> @param WA1
    +
    588 C> @param WA2
    +
    589 C>
    +
    590 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    591  SUBROUTINE radb3 (IDO,L1,CC,CH,WA1,WA2)
    +
    592  dimension cc(ido,3,l1) ,ch(ido,l1,3) ,
    +
    593  1 wa1(*) ,wa2(*)
    +
    594  DATA taur,taui /-.5,.866025403784439/
    +
    595  DO 101 k=1,l1
    +
    596  tr2 = cc(ido,2,k)+cc(ido,2,k)
    +
    597  cr2 = cc(1,1,k)+taur*tr2
    +
    598  ch(1,k,1) = cc(1,1,k)+tr2
    +
    599  ci3 = taui*(cc(1,3,k)+cc(1,3,k))
    +
    600  ch(1,k,2) = cr2-ci3
    +
    601  ch(1,k,3) = cr2+ci3
    +
    602  101 CONTINUE
    +
    603  IF (ido .EQ. 1) RETURN
    +
    604  idp2 = ido+2
    +
    605 !OCL NOVREC
    +
    606  DO 103 k=1,l1
    +
    607  DO 102 i=3,ido,2
    +
    608  ic = idp2-i
    +
    609  tr2 = cc(i-1,3,k)+cc(ic-1,2,k)
    +
    610  cr2 = cc(i-1,1,k)+taur*tr2
    +
    611  ch(i-1,k,1) = cc(i-1,1,k)+tr2
    +
    612  ti2 = cc(i,3,k)-cc(ic,2,k)
    +
    613  ci2 = cc(i,1,k)+taur*ti2
    +
    614  ch(i,k,1) = cc(i,1,k)+ti2
    +
    615  cr3 = taui*(cc(i-1,3,k)-cc(ic-1,2,k))
    +
    616  ci3 = taui*(cc(i,3,k)+cc(ic,2,k))
    +
    617  dr2 = cr2-ci3
    +
    618  dr3 = cr2+ci3
    +
    619  di2 = ci2+cr3
    +
    620  di3 = ci2-cr3
    +
    621  ch(i-1,k,2) = wa1(i-2)*dr2-wa1(i-1)*di2
    +
    622  ch(i,k,2) = wa1(i-2)*di2+wa1(i-1)*dr2
    +
    623  ch(i-1,k,3) = wa2(i-2)*dr3-wa2(i-1)*di3
    +
    624  ch(i,k,3) = wa2(i-2)*di3+wa2(i-1)*dr3
    +
    625  102 CONTINUE
    +
    626  103 CONTINUE
    +
    627  RETURN
    +
    628  END
    +
    629 
    +
    630 C> RADB4
    +
    631 C>
    +
    632 C> @param IDO
    +
    633 C> @param L1
    +
    634 C> @param CC
    +
    635 C> @param CH
    +
    636 C> @param WA1
    +
    637 C> @param WA2
    +
    638 C> @param WA3
    +
    639 C>
    +
    640 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    641  SUBROUTINE radb4 (IDO,L1,CC,CH,WA1,WA2,WA3)
    +
    642  dimension cc(ido,4,l1) ,ch(ido,l1,4) ,
    +
    643  1 wa1(*) ,wa2(*) ,wa3(*)
    +
    644  DATA sqrt2 /1.414213562373095/
    +
    645  DO 101 k=1,l1
    +
    646  tr1 = cc(1,1,k)-cc(ido,4,k)
    +
    647  tr2 = cc(1,1,k)+cc(ido,4,k)
    +
    648  tr3 = cc(ido,2,k)+cc(ido,2,k)
    +
    649  tr4 = cc(1,3,k)+cc(1,3,k)
    +
    650  ch(1,k,1) = tr2+tr3
    +
    651  ch(1,k,2) = tr1-tr4
    +
    652  ch(1,k,3) = tr2-tr3
    +
    653  ch(1,k,4) = tr1+tr4
    +
    654  101 CONTINUE
    +
    655  IF (ido.LT.2) THEN
    +
    656  GO TO 107
    +
    657  ELSEIF (ido.EQ.2) THEN
    +
    658  GO TO 105
    +
    659  ELSE
    +
    660  GO TO 102
    +
    661  ENDIF
    +
    662  102 idp2 = ido+2
    +
    663 !OCL NOVREC
    +
    664  DO 104 k=1,l1
    +
    665  DO 103 i=3,ido,2
    +
    666  ic = idp2-i
    +
    667  ti1 = cc(i,1,k)+cc(ic,4,k)
    +
    668  ti2 = cc(i,1,k)-cc(ic,4,k)
    +
    669  ti3 = cc(i,3,k)-cc(ic,2,k)
    +
    670  tr4 = cc(i,3,k)+cc(ic,2,k)
    +
    671  tr1 = cc(i-1,1,k)-cc(ic-1,4,k)
    +
    672  tr2 = cc(i-1,1,k)+cc(ic-1,4,k)
    +
    673  ti4 = cc(i-1,3,k)-cc(ic-1,2,k)
    +
    674  tr3 = cc(i-1,3,k)+cc(ic-1,2,k)
    +
    675  ch(i-1,k,1) = tr2+tr3
    +
    676  cr3 = tr2-tr3
    +
    677  ch(i,k,1) = ti2+ti3
    +
    678  ci3 = ti2-ti3
    +
    679  cr2 = tr1-tr4
    +
    680  cr4 = tr1+tr4
    +
    681  ci2 = ti1+ti4
    +
    682  ci4 = ti1-ti4
    +
    683  ch(i-1,k,2) = wa1(i-2)*cr2-wa1(i-1)*ci2
    +
    684  ch(i,k,2) = wa1(i-2)*ci2+wa1(i-1)*cr2
    +
    685  ch(i-1,k,3) = wa2(i-2)*cr3-wa2(i-1)*ci3
    +
    686  ch(i,k,3) = wa2(i-2)*ci3+wa2(i-1)*cr3
    +
    687  ch(i-1,k,4) = wa3(i-2)*cr4-wa3(i-1)*ci4
    +
    688  ch(i,k,4) = wa3(i-2)*ci4+wa3(i-1)*cr4
    +
    689  103 CONTINUE
    +
    690  104 CONTINUE
    +
    691  IF (mod(ido,2) .EQ. 1) RETURN
    +
    692  105 CONTINUE
    +
    693  DO 106 k=1,l1
    +
    694  ti1 = cc(1,2,k)+cc(1,4,k)
    +
    695  ti2 = cc(1,4,k)-cc(1,2,k)
    +
    696  tr1 = cc(ido,1,k)-cc(ido,3,k)
    +
    697  tr2 = cc(ido,1,k)+cc(ido,3,k)
    +
    698  ch(ido,k,1) = tr2+tr2
    +
    699  ch(ido,k,2) = sqrt2*(tr1-ti1)
    +
    700  ch(ido,k,3) = ti2+ti2
    +
    701  ch(ido,k,4) = -sqrt2*(tr1+ti1)
    +
    702  106 CONTINUE
    +
    703  107 RETURN
    +
    704  END
    +
    705 
    +
    706 C> RADB5
    +
    707 C>
    +
    708 C> @param IDO
    +
    709 C> @param L1
    +
    710 C> @param CC
    +
    711 C> @param CH
    +
    712 C> @param WA1
    +
    713 C> @param WA2
    +
    714 C> @param WA3
    +
    715 C> @param WA4
    +
    716 C>
    +
    717 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    718  SUBROUTINE radb5 (IDO,L1,CC,CH,WA1,WA2,WA3,WA4)
    +
    719  dimension cc(ido,5,l1) ,ch(ido,l1,5) ,
    +
    720  1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*)
    +
    721  DATA tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154,
    +
    722  1-.809016994374947,.587785252292473/
    +
    723  DO 101 k=1,l1
    +
    724  ti5 = cc(1,3,k)+cc(1,3,k)
    +
    725  ti4 = cc(1,5,k)+cc(1,5,k)
    +
    726  tr2 = cc(ido,2,k)+cc(ido,2,k)
    +
    727  tr3 = cc(ido,4,k)+cc(ido,4,k)
    +
    728  ch(1,k,1) = cc(1,1,k)+tr2+tr3
    +
    729  cr2 = cc(1,1,k)+tr11*tr2+tr12*tr3
    +
    730  cr3 = cc(1,1,k)+tr12*tr2+tr11*tr3
    +
    731  ci5 = ti11*ti5+ti12*ti4
    +
    732  ci4 = ti12*ti5-ti11*ti4
    +
    733  ch(1,k,2) = cr2-ci5
    +
    734  ch(1,k,3) = cr3-ci4
    +
    735  ch(1,k,4) = cr3+ci4
    +
    736  ch(1,k,5) = cr2+ci5
    +
    737  101 CONTINUE
    +
    738  IF (ido .EQ. 1) RETURN
    +
    739  idp2 = ido+2
    +
    740  DO 103 k=1,l1
    +
    741  DO 102 i=3,ido,2
    +
    742  ic = idp2-i
    +
    743  ti5 = cc(i,3,k)+cc(ic,2,k)
    +
    744  ti2 = cc(i,3,k)-cc(ic,2,k)
    +
    745  ti4 = cc(i,5,k)+cc(ic,4,k)
    +
    746  ti3 = cc(i,5,k)-cc(ic,4,k)
    +
    747  tr5 = cc(i-1,3,k)-cc(ic-1,2,k)
    +
    748  tr2 = cc(i-1,3,k)+cc(ic-1,2,k)
    +
    749  tr4 = cc(i-1,5,k)-cc(ic-1,4,k)
    +
    750  tr3 = cc(i-1,5,k)+cc(ic-1,4,k)
    +
    751  ch(i-1,k,1) = cc(i-1,1,k)+tr2+tr3
    +
    752  ch(i,k,1) = cc(i,1,k)+ti2+ti3
    +
    753  cr2 = cc(i-1,1,k)+tr11*tr2+tr12*tr3
    +
    754  ci2 = cc(i,1,k)+tr11*ti2+tr12*ti3
    +
    755  cr3 = cc(i-1,1,k)+tr12*tr2+tr11*tr3
    +
    756  ci3 = cc(i,1,k)+tr12*ti2+tr11*ti3
    +
    757  cr5 = ti11*tr5+ti12*tr4
    +
    758  ci5 = ti11*ti5+ti12*ti4
    +
    759  cr4 = ti12*tr5-ti11*tr4
    +
    760  ci4 = ti12*ti5-ti11*ti4
    +
    761  dr3 = cr3-ci4
    +
    762  dr4 = cr3+ci4
    +
    763  di3 = ci3+cr4
    +
    764  di4 = ci3-cr4
    +
    765  dr5 = cr2+ci5
    +
    766  dr2 = cr2-ci5
    +
    767  di5 = ci2-cr5
    +
    768  di2 = ci2+cr5
    +
    769  ch(i-1,k,2) = wa1(i-2)*dr2-wa1(i-1)*di2
    +
    770  ch(i,k,2) = wa1(i-2)*di2+wa1(i-1)*dr2
    +
    771  ch(i-1,k,3) = wa2(i-2)*dr3-wa2(i-1)*di3
    +
    772  ch(i,k,3) = wa2(i-2)*di3+wa2(i-1)*dr3
    +
    773  ch(i-1,k,4) = wa3(i-2)*dr4-wa3(i-1)*di4
    +
    774  ch(i,k,4) = wa3(i-2)*di4+wa3(i-1)*dr4
    +
    775  ch(i-1,k,5) = wa4(i-2)*dr5-wa4(i-1)*di5
    +
    776  ch(i,k,5) = wa4(i-2)*di5+wa4(i-1)*dr5
    +
    777  102 CONTINUE
    +
    778  103 CONTINUE
    +
    779  RETURN
    +
    780  END
    +
    781 
    +
    782 C> RADBG
    +
    783 C>
    +
    784 C> @param IDO
    +
    785 C> @param IP
    +
    786 C> @param L1
    +
    787 C> @param IDL1
    +
    788 C> @param CC
    +
    789 C> @param C1
    +
    790 C> @param C2
    +
    791 C> @param CH
    +
    792 C> @param CH2
    +
    793 C> @param WA
    +
    794 C>
    +
    795 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    796  SUBROUTINE radbg (IDO,IP,L1,IDL1,CC,C1,C2,CH,CH2,WA)
    +
    797  dimension ch(ido,l1,ip) ,cc(ido,ip,l1) ,
    +
    798  1 c1(ido,l1,ip) ,c2(idl1,ip),
    +
    799  2 ch2(idl1,ip) ,wa(*)
    +
    800  DATA tpi/6.28318530717959/
    +
    801  arg = tpi/float(ip)
    +
    802  dcp = cos(arg)
    +
    803  dsp = sin(arg)
    +
    804  idp2 = ido+2
    +
    805  nbd = (ido-1)/2
    +
    806  ipp2 = ip+2
    +
    807  ipph = (ip+1)/2
    +
    808  IF (ido .LT. l1) GO TO 103
    +
    809  DO 102 k=1,l1
    +
    810  DO 101 i=1,ido
    +
    811  ch(i,k,1) = cc(i,1,k)
    +
    812  101 CONTINUE
    +
    813  102 CONTINUE
    +
    814  GO TO 106
    +
    815  103 DO 105 i=1,ido
    +
    816  DO 104 k=1,l1
    +
    817  ch(i,k,1) = cc(i,1,k)
    +
    818  104 CONTINUE
    +
    819  105 CONTINUE
    +
    820 !OCL NOVREC
    +
    821  106 DO 108 j=2,ipph
    +
    822  jc = ipp2-j
    +
    823  j2 = j+j
    +
    824  DO 107 k=1,l1
    +
    825  ch(1,k,j) = cc(ido,j2-2,k)+cc(ido,j2-2,k)
    +
    826  ch(1,k,jc) = cc(1,j2-1,k)+cc(1,j2-1,k)
    +
    827  107 CONTINUE
    +
    828  108 CONTINUE
    +
    829  IF (ido .EQ. 1) GO TO 116
    +
    830  IF (nbd .LT. l1) GO TO 112
    +
    831 !OCL NOVREC
    +
    832  DO 111 j=2,ipph
    +
    833  jc = ipp2-j
    +
    834  DO 110 k=1,l1
    +
    835  DO 109 i=3,ido,2
    +
    836  ic = idp2-i
    +
    837  ch(i-1,k,j) = cc(i-1,2*j-1,k)+cc(ic-1,2*j-2,k)
    +
    838  ch(i-1,k,jc) = cc(i-1,2*j-1,k)-cc(ic-1,2*j-2,k)
    +
    839  ch(i,k,j) = cc(i,2*j-1,k)-cc(ic,2*j-2,k)
    +
    840  ch(i,k,jc) = cc(i,2*j-1,k)+cc(ic,2*j-2,k)
    +
    841  109 CONTINUE
    +
    842  110 CONTINUE
    +
    843  111 CONTINUE
    +
    844  GO TO 116
    +
    845  112 DO 115 j=2,ipph
    +
    846  jc = ipp2-j
    +
    847  DO 114 i=3,ido,2
    +
    848  ic = idp2-i
    +
    849  DO 113 k=1,l1
    +
    850  ch(i-1,k,j) = cc(i-1,2*j-1,k)+cc(ic-1,2*j-2,k)
    +
    851  ch(i-1,k,jc) = cc(i-1,2*j-1,k)-cc(ic-1,2*j-2,k)
    +
    852  ch(i,k,j) = cc(i,2*j-1,k)-cc(ic,2*j-2,k)
    +
    853  ch(i,k,jc) = cc(i,2*j-1,k)+cc(ic,2*j-2,k)
    +
    854  113 CONTINUE
    +
    855  114 CONTINUE
    +
    856  115 CONTINUE
    +
    857  116 ar1 = 1.
    +
    858  ai1 = 0.
    +
    859 !OCL NOVREC
    +
    860  DO 120 l=2,ipph
    +
    861  lc = ipp2-l
    +
    862  ar1h = dcp*ar1-dsp*ai1
    +
    863  ai1 = dcp*ai1+dsp*ar1
    +
    864  ar1 = ar1h
    +
    865  DO 117 ik=1,idl1
    +
    866  c2(ik,l) = ch2(ik,1)+ar1*ch2(ik,2)
    +
    867  c2(ik,lc) = ai1*ch2(ik,ip)
    +
    868  117 CONTINUE
    +
    869  dc2 = ar1
    +
    870  ds2 = ai1
    +
    871  ar2 = ar1
    +
    872  ai2 = ai1
    +
    873 !OCL NOVREC
    +
    874  DO 119 j=3,ipph
    +
    875  jc = ipp2-j
    +
    876  ar2h = dc2*ar2-ds2*ai2
    +
    877  ai2 = dc2*ai2+ds2*ar2
    +
    878  ar2 = ar2h
    +
    879  DO 118 ik=1,idl1
    +
    880  c2(ik,l) = c2(ik,l)+ar2*ch2(ik,j)
    +
    881  c2(ik,lc) = c2(ik,lc)+ai2*ch2(ik,jc)
    +
    882  118 CONTINUE
    +
    883  119 CONTINUE
    +
    884  120 CONTINUE
    +
    885 !OCL NOVREC
    +
    886  DO 122 j=2,ipph
    +
    887  DO 121 ik=1,idl1
    +
    888  ch2(ik,1) = ch2(ik,1)+ch2(ik,j)
    +
    889  121 CONTINUE
    +
    890  122 CONTINUE
    +
    891 !OCL NOVREC
    +
    892  DO 124 j=2,ipph
    +
    893  jc = ipp2-j
    +
    894  DO 123 k=1,l1
    +
    895  ch(1,k,j) = c1(1,k,j)-c1(1,k,jc)
    +
    896  ch(1,k,jc) = c1(1,k,j)+c1(1,k,jc)
    +
    897  123 CONTINUE
    +
    898  124 CONTINUE
    +
    899  IF (ido .EQ. 1) GO TO 132
    +
    900  IF (nbd .LT. l1) GO TO 128
    +
    901 !OCL NOVREC
    +
    902  DO 127 j=2,ipph
    +
    903  jc = ipp2-j
    +
    904  DO 126 k=1,l1
    +
    905  DO 125 i=3,ido,2
    +
    906  ch(i-1,k,j) = c1(i-1,k,j)-c1(i,k,jc)
    +
    907  ch(i-1,k,jc) = c1(i-1,k,j)+c1(i,k,jc)
    +
    908  ch(i,k,j) = c1(i,k,j)+c1(i-1,k,jc)
    +
    909  ch(i,k,jc) = c1(i,k,j)-c1(i-1,k,jc)
    +
    910  125 CONTINUE
    +
    911  126 CONTINUE
    +
    912  127 CONTINUE
    +
    913  GO TO 132
    +
    914  128 DO 131 j=2,ipph
    +
    915  jc = ipp2-j
    +
    916  DO 130 i=3,ido,2
    +
    917  DO 129 k=1,l1
    +
    918  ch(i-1,k,j) = c1(i-1,k,j)-c1(i,k,jc)
    +
    919  ch(i-1,k,jc) = c1(i-1,k,j)+c1(i,k,jc)
    +
    920  ch(i,k,j) = c1(i,k,j)+c1(i-1,k,jc)
    +
    921  ch(i,k,jc) = c1(i,k,j)-c1(i-1,k,jc)
    +
    922  129 CONTINUE
    +
    923  130 CONTINUE
    +
    924  131 CONTINUE
    +
    925  132 CONTINUE
    +
    926  IF (ido .EQ. 1) RETURN
    +
    927  DO 133 ik=1,idl1
    +
    928  c2(ik,1) = ch2(ik,1)
    +
    929  133 CONTINUE
    +
    930  DO 135 j=2,ip
    +
    931  DO 134 k=1,l1
    +
    932  c1(1,k,j) = ch(1,k,j)
    +
    933  134 CONTINUE
    +
    934  135 CONTINUE
    +
    935  IF (nbd .GT. l1) GO TO 139
    +
    936  is = -ido
    +
    937  DO 138 j=2,ip
    +
    938  is = is+ido
    +
    939  idij = is
    +
    940  DO 137 i=3,ido,2
    +
    941  idij = idij+2
    +
    942  DO 136 k=1,l1
    +
    943  c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j)
    +
    944  c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j)
    +
    945  136 CONTINUE
    +
    946  137 CONTINUE
    +
    947  138 CONTINUE
    +
    948  GO TO 143
    +
    949  139 is = -ido
    +
    950 !OCL NOVREC
    +
    951  DO 142 j=2,ip
    +
    952  is = is+ido
    +
    953  DO 141 k=1,l1
    +
    954  idij = is
    +
    955  DO 140 i=3,ido,2
    +
    956  idij = idij+2
    +
    957  c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j)
    +
    958  c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j)
    +
    959  140 CONTINUE
    +
    960  141 CONTINUE
    +
    961  142 CONTINUE
    +
    962  143 RETURN
    +
    963  END
    +
    964 
    +
    965 C> RADBG
    +
    966 C>
    +
    967 C> @param IDO
    +
    968 C> @param L1
    +
    969 C> @param CC
    +
    970 C> @param CH
    +
    971 C> @param WA1
    +
    972 C>
    +
    973 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    974  SUBROUTINE radf2 (IDO,L1,CC,CH,WA1)
    +
    975  dimension ch(ido,2,l1) ,cc(ido,l1,2) ,
    +
    976  1 wa1(*)
    +
    977  DO 101 k=1,l1
    +
    978  ch(1,1,k) = cc(1,k,1)+cc(1,k,2)
    +
    979  ch(ido,2,k) = cc(1,k,1)-cc(1,k,2)
    +
    980  101 CONTINUE
    +
    981  IF (ido.LT.2) THEN
    +
    982  GO TO 107
    +
    983  ELSEIF (ido.EQ.2) THEN
    +
    984  GO TO 105
    +
    985  ELSE
    +
    986  GO TO 102
    +
    987  ENDIF
    +
    988  102 idp2 = ido+2
    +
    989  DO 104 k=1,l1
    +
    990  DO 103 i=3,ido,2
    +
    991  ic = idp2-i
    +
    992  tr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
    +
    993  ti2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
    +
    994  ch(i,1,k) = cc(i,k,1)+ti2
    +
    995  ch(ic,2,k) = ti2-cc(i,k,1)
    +
    996  ch(i-1,1,k) = cc(i-1,k,1)+tr2
    +
    997  ch(ic-1,2,k) = cc(i-1,k,1)-tr2
    +
    998  103 CONTINUE
    +
    999  104 CONTINUE
    +
    1000  IF (mod(ido,2) .EQ. 1) RETURN
    +
    1001  105 DO 106 k=1,l1
    +
    1002  ch(1,2,k) = -cc(ido,k,2)
    +
    1003  ch(ido,1,k) = cc(ido,k,1)
    +
    1004  106 CONTINUE
    +
    1005  107 RETURN
    +
    1006  END
    +
    1007 
    +
    1008 C> RADF3
    +
    1009 C>
    +
    1010 C> @param IDO
    +
    1011 C> @param L1
    +
    1012 C> @param CC
    +
    1013 C> @param CH
    +
    1014 C> @param WA1
    +
    1015 C> @param WA2
    +
    1016 C>
    +
    1017 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    1018  SUBROUTINE radf3 (IDO,L1,CC,CH,WA1,WA2)
    +
    1019  dimension ch(ido,3,l1) ,cc(ido,l1,3) ,
    +
    1020  1 wa1(*) ,wa2(*)
    +
    1021  DATA taur,taui /-.5,.866025403784439/
    +
    1022  DO 101 k=1,l1
    +
    1023  cr2 = cc(1,k,2)+cc(1,k,3)
    +
    1024  ch(1,1,k) = cc(1,k,1)+cr2
    +
    1025  ch(1,3,k) = taui*(cc(1,k,3)-cc(1,k,2))
    +
    1026  ch(ido,2,k) = cc(1,k,1)+taur*cr2
    +
    1027  101 CONTINUE
    +
    1028  IF (ido .EQ. 1) RETURN
    +
    1029  idp2 = ido+2
    +
    1030  DO 103 k=1,l1
    +
    1031  DO 102 i=3,ido,2
    +
    1032  ic = idp2-i
    +
    1033  dr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
    +
    1034  di2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
    +
    1035  dr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
    +
    1036  di3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
    +
    1037  cr2 = dr2+dr3
    +
    1038  ci2 = di2+di3
    +
    1039  ch(i-1,1,k) = cc(i-1,k,1)+cr2
    +
    1040  ch(i,1,k) = cc(i,k,1)+ci2
    +
    1041  tr2 = cc(i-1,k,1)+taur*cr2
    +
    1042  ti2 = cc(i,k,1)+taur*ci2
    +
    1043  tr3 = taui*(di2-di3)
    +
    1044  ti3 = taui*(dr3-dr2)
    +
    1045  ch(i-1,3,k) = tr2+tr3
    +
    1046  ch(ic-1,2,k) = tr2-tr3
    +
    1047  ch(i,3,k) = ti2+ti3
    +
    1048  ch(ic,2,k) = ti3-ti2
    +
    1049  102 CONTINUE
    +
    1050  103 CONTINUE
    +
    1051  RETURN
    +
    1052  END
    +
    1053 
    +
    1054 C> RADF4
    +
    1055 C>
    +
    1056 C> @param IDO
    +
    1057 C> @param L1
    +
    1058 C> @param CC
    +
    1059 C> @param CH
    +
    1060 C> @param WA1
    +
    1061 C> @param WA2
    +
    1062 C> @param WA3
    +
    1063 C>
    +
    1064 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    1065  SUBROUTINE radf4 (IDO,L1,CC,CH,WA1,WA2,WA3)
    +
    1066  dimension cc(ido,l1,4) ,ch(ido,4,l1) ,
    +
    1067  1 wa1(*) ,wa2(*) ,wa3(*)
    +
    1068  DATA hsqt2 /.7071067811865475/
    +
    1069  DO 101 k=1,l1
    +
    1070  tr1 = cc(1,k,2)+cc(1,k,4)
    +
    1071  tr2 = cc(1,k,1)+cc(1,k,3)
    +
    1072  ch(1,1,k) = tr1+tr2
    +
    1073  ch(ido,4,k) = tr2-tr1
    +
    1074  ch(ido,2,k) = cc(1,k,1)-cc(1,k,3)
    +
    1075  ch(1,3,k) = cc(1,k,4)-cc(1,k,2)
    +
    1076  101 CONTINUE
    +
    1077  IF (ido.LT.2) THEN
    +
    1078  GO TO 107
    +
    1079  ELSEIF (ido.EQ.2) THEN
    +
    1080  GO TO 105
    +
    1081  ELSE
    +
    1082  GO TO 102
    +
    1083  ENDIF
    +
    1084  102 idp2 = ido+2
    +
    1085 !OCL NOVREC
    +
    1086  DO 104 k=1,l1
    +
    1087  DO 103 i=3,ido,2
    +
    1088  ic = idp2-i
    +
    1089  cr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
    +
    1090  ci2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
    +
    1091  cr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
    +
    1092  ci3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
    +
    1093  cr4 = wa3(i-2)*cc(i-1,k,4)+wa3(i-1)*cc(i,k,4)
    +
    1094  ci4 = wa3(i-2)*cc(i,k,4)-wa3(i-1)*cc(i-1,k,4)
    +
    1095  tr1 = cr2+cr4
    +
    1096  tr4 = cr4-cr2
    +
    1097  ti1 = ci2+ci4
    +
    1098  ti4 = ci2-ci4
    +
    1099  ti2 = cc(i,k,1)+ci3
    +
    1100  ti3 = cc(i,k,1)-ci3
    +
    1101  tr2 = cc(i-1,k,1)+cr3
    +
    1102  tr3 = cc(i-1,k,1)-cr3
    +
    1103  ch(i-1,1,k) = tr1+tr2
    +
    1104  ch(ic-1,4,k) = tr2-tr1
    +
    1105  ch(i,1,k) = ti1+ti2
    +
    1106  ch(ic,4,k) = ti1-ti2
    +
    1107  ch(i-1,3,k) = ti4+tr3
    +
    1108  ch(ic-1,2,k) = tr3-ti4
    +
    1109  ch(i,3,k) = tr4+ti3
    +
    1110  ch(ic,2,k) = tr4-ti3
    +
    1111  103 CONTINUE
    +
    1112  104 CONTINUE
    +
    1113  IF (mod(ido,2) .EQ. 1) RETURN
    +
    1114  105 CONTINUE
    +
    1115  DO 106 k=1,l1
    +
    1116  ti1 = -hsqt2*(cc(ido,k,2)+cc(ido,k,4))
    +
    1117  tr1 = hsqt2*(cc(ido,k,2)-cc(ido,k,4))
    +
    1118  ch(ido,1,k) = tr1+cc(ido,k,1)
    +
    1119  ch(ido,3,k) = cc(ido,k,1)-tr1
    +
    1120  ch(1,2,k) = ti1-cc(ido,k,3)
    +
    1121  ch(1,4,k) = ti1+cc(ido,k,3)
    +
    1122  106 CONTINUE
    +
    1123  107 RETURN
    +
    1124  END
    +
    1125 
    +
    1126 C> RADF5
    +
    1127 C>
    +
    1128 C> @param IDO
    +
    1129 C> @param L1
    +
    1130 C> @param CC
    +
    1131 C> @param CH
    +
    1132 C> @param WA1
    +
    1133 C> @param WA2
    +
    1134 C> @param WA3
    +
    1135 C> @param WA4
    +
    1136 C>
    +
    1137 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    1138  SUBROUTINE radf5 (IDO,L1,CC,CH,WA1,WA2,WA3,WA4)
    +
    1139  dimension cc(ido,l1,5) ,ch(ido,5,l1) ,
    +
    1140  1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*)
    +
    1141  DATA tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154,
    +
    1142  1-.809016994374947,.587785252292473/
    +
    1143  DO 101 k=1,l1
    +
    1144  cr2 = cc(1,k,5)+cc(1,k,2)
    +
    1145  ci5 = cc(1,k,5)-cc(1,k,2)
    +
    1146  cr3 = cc(1,k,4)+cc(1,k,3)
    +
    1147  ci4 = cc(1,k,4)-cc(1,k,3)
    +
    1148  ch(1,1,k) = cc(1,k,1)+cr2+cr3
    +
    1149  ch(ido,2,k) = cc(1,k,1)+tr11*cr2+tr12*cr3
    +
    1150  ch(1,3,k) = ti11*ci5+ti12*ci4
    +
    1151  ch(ido,4,k) = cc(1,k,1)+tr12*cr2+tr11*cr3
    +
    1152  ch(1,5,k) = ti12*ci5-ti11*ci4
    +
    1153  101 CONTINUE
    +
    1154  IF (ido .EQ. 1) RETURN
    +
    1155  idp2 = ido+2
    +
    1156  DO 103 k=1,l1
    +
    1157  DO 102 i=3,ido,2
    +
    1158  ic = idp2-i
    +
    1159  dr2 = wa1(i-2)*cc(i-1,k,2)+wa1(i-1)*cc(i,k,2)
    +
    1160  di2 = wa1(i-2)*cc(i,k,2)-wa1(i-1)*cc(i-1,k,2)
    +
    1161  dr3 = wa2(i-2)*cc(i-1,k,3)+wa2(i-1)*cc(i,k,3)
    +
    1162  di3 = wa2(i-2)*cc(i,k,3)-wa2(i-1)*cc(i-1,k,3)
    +
    1163  dr4 = wa3(i-2)*cc(i-1,k,4)+wa3(i-1)*cc(i,k,4)
    +
    1164  di4 = wa3(i-2)*cc(i,k,4)-wa3(i-1)*cc(i-1,k,4)
    +
    1165  dr5 = wa4(i-2)*cc(i-1,k,5)+wa4(i-1)*cc(i,k,5)
    +
    1166  di5 = wa4(i-2)*cc(i,k,5)-wa4(i-1)*cc(i-1,k,5)
    +
    1167  cr2 = dr2+dr5
    +
    1168  ci5 = dr5-dr2
    +
    1169  cr5 = di2-di5
    +
    1170  ci2 = di2+di5
    +
    1171  cr3 = dr3+dr4
    +
    1172  ci4 = dr4-dr3
    +
    1173  cr4 = di3-di4
    +
    1174  ci3 = di3+di4
    +
    1175  ch(i-1,1,k) = cc(i-1,k,1)+cr2+cr3
    +
    1176  ch(i,1,k) = cc(i,k,1)+ci2+ci3
    +
    1177  tr2 = cc(i-1,k,1)+tr11*cr2+tr12*cr3
    +
    1178  ti2 = cc(i,k,1)+tr11*ci2+tr12*ci3
    +
    1179  tr3 = cc(i-1,k,1)+tr12*cr2+tr11*cr3
    +
    1180  ti3 = cc(i,k,1)+tr12*ci2+tr11*ci3
    +
    1181  tr5 = ti11*cr5+ti12*cr4
    +
    1182  ti5 = ti11*ci5+ti12*ci4
    +
    1183  tr4 = ti12*cr5-ti11*cr4
    +
    1184  ti4 = ti12*ci5-ti11*ci4
    +
    1185  ch(i-1,3,k) = tr2+tr5
    +
    1186  ch(ic-1,2,k) = tr2-tr5
    +
    1187  ch(i,3,k) = ti2+ti5
    +
    1188  ch(ic,2,k) = ti5-ti2
    +
    1189  ch(i-1,5,k) = tr3+tr4
    +
    1190  ch(ic-1,4,k) = tr3-tr4
    +
    1191  ch(i,5,k) = ti3+ti4
    +
    1192  ch(ic,4,k) = ti4-ti3
    +
    1193  102 CONTINUE
    +
    1194  103 CONTINUE
    +
    1195  RETURN
    +
    1196  END
    +
    1197 
    +
    1198 C> RADFG
    +
    1199 C>
    +
    1200 C> @param IDO
    +
    1201 C> @param IP
    +
    1202 C> @param L1
    +
    1203 C> @param IDL1
    +
    1204 C> @param CC
    +
    1205 C> @param C1
    +
    1206 C> @param C2
    +
    1207 C> @param CH
    +
    1208 C> @param CH2
    +
    1209 C> @param WA
    +
    1210 C>
    +
    1211 C> @author Paul N. Swarztrauber, National Center for Atmospheric Research, Boulder, CO
    +
    1212  SUBROUTINE radfg (IDO,IP,L1,IDL1,CC,C1,C2,CH,CH2,WA)
    +
    1213  dimension ch(ido,l1,ip) ,cc(ido,ip,l1) ,
    +
    1214  1 c1(ido,l1,ip) ,c2(idl1,ip),
    +
    1215  2 ch2(idl1,ip) ,wa(*)
    +
    1216  DATA tpi/6.28318530717959/
    +
    1217  arg = tpi/float(ip)
    +
    1218  dcp = cos(arg)
    +
    1219  dsp = sin(arg)
    +
    1220  ipph = (ip+1)/2
    +
    1221  ipp2 = ip+2
    +
    1222  idp2 = ido+2
    +
    1223  nbd = (ido-1)/2
    +
    1224  IF (ido .EQ. 1) GO TO 119
    +
    1225  DO 101 ik=1,idl1
    +
    1226  ch2(ik,1) = c2(ik,1)
    +
    1227  101 CONTINUE
    +
    1228  DO 103 j=2,ip
    +
    1229  DO 102 k=1,l1
    +
    1230  ch(1,k,j) = c1(1,k,j)
    +
    1231  102 CONTINUE
    +
    1232  103 CONTINUE
    +
    1233  IF (nbd .GT. l1) GO TO 107
    +
    1234  is = -ido
    +
    1235  DO 106 j=2,ip
    +
    1236  is = is+ido
    +
    1237  idij = is
    +
    1238  DO 105 i=3,ido,2
    +
    1239  idij = idij+2
    +
    1240  DO 104 k=1,l1
    +
    1241  ch(i-1,k,j) = wa(idij-1)*c1(i-1,k,j)+wa(idij)*c1(i,k,j)
    +
    1242  ch(i,k,j) = wa(idij-1)*c1(i,k,j)-wa(idij)*c1(i-1,k,j)
    +
    1243  104 CONTINUE
    +
    1244  105 CONTINUE
    +
    1245  106 CONTINUE
    +
    1246  GO TO 111
    +
    1247  107 is = -ido
    +
    1248  DO 110 j=2,ip
    +
    1249  is = is+ido
    +
    1250  DO 109 k=1,l1
    +
    1251  idij = is
    +
    1252  DO 108 i=3,ido,2
    +
    1253  idij = idij+2
    +
    1254  ch(i-1,k,j) = wa(idij-1)*c1(i-1,k,j)+wa(idij)*c1(i,k,j)
    +
    1255  ch(i,k,j) = wa(idij-1)*c1(i,k,j)-wa(idij)*c1(i-1,k,j)
    +
    1256  108 CONTINUE
    +
    1257  109 CONTINUE
    +
    1258  110 CONTINUE
    +
    1259  111 IF (nbd .LT. l1) GO TO 115
    +
    1260  DO 114 j=2,ipph
    +
    1261  jc = ipp2-j
    +
    1262  DO 113 k=1,l1
    +
    1263  DO 112 i=3,ido,2
    +
    1264  c1(i-1,k,j) = ch(i-1,k,j)+ch(i-1,k,jc)
    +
    1265  c1(i-1,k,jc) = ch(i,k,j)-ch(i,k,jc)
    +
    1266  c1(i,k,j) = ch(i,k,j)+ch(i,k,jc)
    +
    1267  c1(i,k,jc) = ch(i-1,k,jc)-ch(i-1,k,j)
    +
    1268  112 CONTINUE
    +
    1269  113 CONTINUE
    +
    1270  114 CONTINUE
    +
    1271  GO TO 121
    +
    1272  115 DO 118 j=2,ipph
    +
    1273  jc = ipp2-j
    +
    1274  DO 117 i=3,ido,2
    +
    1275  DO 116 k=1,l1
    +
    1276  c1(i-1,k,j) = ch(i-1,k,j)+ch(i-1,k,jc)
    +
    1277  c1(i-1,k,jc) = ch(i,k,j)-ch(i,k,jc)
    +
    1278  c1(i,k,j) = ch(i,k,j)+ch(i,k,jc)
    +
    1279  c1(i,k,jc) = ch(i-1,k,jc)-ch(i-1,k,j)
    +
    1280  116 CONTINUE
    +
    1281  117 CONTINUE
    +
    1282  118 CONTINUE
    +
    1283  GO TO 121
    +
    1284  119 DO 120 ik=1,idl1
    +
    1285  c2(ik,1) = ch2(ik,1)
    +
    1286  120 CONTINUE
    +
    1287  121 DO 123 j=2,ipph
    +
    1288  jc = ipp2-j
    +
    1289  DO 122 k=1,l1
    +
    1290  c1(1,k,j) = ch(1,k,j)+ch(1,k,jc)
    +
    1291  c1(1,k,jc) = ch(1,k,jc)-ch(1,k,j)
    +
    1292  122 CONTINUE
    +
    1293  123 CONTINUE
    +
    1294 C
    +
    1295  ar1 = 1.
    +
    1296  ai1 = 0.
    +
    1297  DO 127 l=2,ipph
    +
    1298  lc = ipp2-l
    +
    1299  ar1h = dcp*ar1-dsp*ai1
    +
    1300  ai1 = dcp*ai1+dsp*ar1
    +
    1301  ar1 = ar1h
    +
    1302  DO 124 ik=1,idl1
    +
    1303  ch2(ik,l) = c2(ik,1)+ar1*c2(ik,2)
    +
    1304  ch2(ik,lc) = ai1*c2(ik,ip)
    +
    1305  124 CONTINUE
    +
    1306  dc2 = ar1
    +
    1307  ds2 = ai1
    +
    1308  ar2 = ar1
    +
    1309  ai2 = ai1
    +
    1310  DO 126 j=3,ipph
    +
    1311  jc = ipp2-j
    +
    1312  ar2h = dc2*ar2-ds2*ai2
    +
    1313  ai2 = dc2*ai2+ds2*ar2
    +
    1314  ar2 = ar2h
    +
    1315  DO 125 ik=1,idl1
    +
    1316  ch2(ik,l) = ch2(ik,l)+ar2*c2(ik,j)
    +
    1317  ch2(ik,lc) = ch2(ik,lc)+ai2*c2(ik,jc)
    +
    1318  125 CONTINUE
    +
    1319  126 CONTINUE
    +
    1320  127 CONTINUE
    +
    1321  DO 129 j=2,ipph
    +
    1322  DO 128 ik=1,idl1
    +
    1323  ch2(ik,1) = ch2(ik,1)+c2(ik,j)
    +
    1324  128 CONTINUE
    +
    1325  129 CONTINUE
    +
    1326 C
    +
    1327  IF (ido .LT. l1) GO TO 132
    +
    1328  DO 131 k=1,l1
    +
    1329  DO 130 i=1,ido
    +
    1330  cc(i,1,k) = ch(i,k,1)
    +
    1331  130 CONTINUE
    +
    1332  131 CONTINUE
    +
    1333  GO TO 135
    +
    1334  132 DO 134 i=1,ido
    +
    1335  DO 133 k=1,l1
    +
    1336  cc(i,1,k) = ch(i,k,1)
    +
    1337  133 CONTINUE
    +
    1338  134 CONTINUE
    +
    1339  135 DO 137 j=2,ipph
    +
    1340  jc = ipp2-j
    +
    1341  j2 = j+j
    +
    1342  DO 136 k=1,l1
    +
    1343  cc(ido,j2-2,k) = ch(1,k,j)
    +
    1344  cc(1,j2-1,k) = ch(1,k,jc)
    +
    1345  136 CONTINUE
    +
    1346  137 CONTINUE
    +
    1347  IF (ido .EQ. 1) RETURN
    +
    1348  IF (nbd .LT. l1) GO TO 141
    +
    1349  DO 140 j=2,ipph
    +
    1350  jc = ipp2-j
    +
    1351  j2 = j+j
    +
    1352  DO 139 k=1,l1
    +
    1353  DO 138 i=3,ido,2
    +
    1354  ic = idp2-i
    +
    1355  cc(i-1,j2-1,k) = ch(i-1,k,j)+ch(i-1,k,jc)
    +
    1356  cc(ic-1,j2-2,k) = ch(i-1,k,j)-ch(i-1,k,jc)
    +
    1357  cc(i,j2-1,k) = ch(i,k,j)+ch(i,k,jc)
    +
    1358  cc(ic,j2-2,k) = ch(i,k,jc)-ch(i,k,j)
    +
    1359  138 CONTINUE
    +
    1360  139 CONTINUE
    +
    1361  140 CONTINUE
    +
    1362  RETURN
    +
    1363  141 DO 144 j=2,ipph
    +
    1364  jc = ipp2-j
    +
    1365  j2 = j+j
    +
    1366  DO 143 i=3,ido,2
    +
    1367  ic = idp2-i
    +
    1368  DO 142 k=1,l1
    +
    1369  cc(i-1,j2-1,k) = ch(i-1,k,j)+ch(i-1,k,jc)
    +
    1370  cc(ic-1,j2-2,k) = ch(i-1,k,j)-ch(i-1,k,jc)
    +
    1371  cc(i,j2-1,k) = ch(i,k,j)+ch(i,k,jc)
    +
    1372  cc(ic,j2-2,k) = ch(i,k,jc)-ch(i,k,j)
    +
    1373  142 CONTINUE
    +
    1374  143 CONTINUE
    +
    1375  144 CONTINUE
    +
    1376  RETURN
    +
    1377  END
    +
    subroutine radb5(IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
    RADB5.
    Definition: fftpack.F:719
    +
    subroutine scfft(isign, n, scale, x, y, table, work, isys)
    scfft
    Definition: fftpack.F:258
    +
    subroutine radb4(IDO, L1, CC, CH, WA1, WA2, WA3)
    RADB4.
    Definition: fftpack.F:642
    +
    subroutine rffti(N, WSAVE)
    RFFTI.
    Definition: fftpack.F:318
    +
    subroutine radf3(IDO, L1, CC, CH, WA1, WA2)
    RADF3.
    Definition: fftpack.F:1019
    +
    subroutine drcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    drcft
    Definition: fftpack.F:164
    +
    subroutine radb3(IDO, L1, CC, CH, WA1, WA2)
    RADB3
    Definition: fftpack.F:592
    +
    subroutine radf5(IDO, L1, CC, CH, WA1, WA2, WA3, WA4)
    RADF5.
    Definition: fftpack.F:1139
    +
    subroutine radf2(IDO, L1, CC, CH, WA1)
    RADBG.
    Definition: fftpack.F:975
    +
    subroutine dcrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    dcrft
    Definition: fftpack.F:34
    +
    subroutine rfftb(N, R, WSAVE)
    RFFTB.
    Definition: fftpack.F:305
    +
    subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    scrft
    Definition: fftpack.F:82
    +
    subroutine rfftf1(N, C, CH, WA, IFAC)
    RFFTF1.
    Definition: fftpack.F:403
    +
    subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    srcft
    Definition: fftpack.F:215
    +
    subroutine csfft(isign, n, scale, x, y, table, work, isys)
    csfft
    Definition: fftpack.F:121
    +
    subroutine radfg(IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
    RADFG.
    Definition: fftpack.F:1213
    +
    subroutine rffti1(N, WA, IFAC)
    RFFTI1.
    Definition: fftpack.F:470
    +
    subroutine radb2(IDO, L1, CC, CH, WA1)
    RADB2.
    Definition: fftpack.F:547
    +
    subroutine radf4(IDO, L1, CC, CH, WA1, WA2, WA3)
    RADF4.
    Definition: fftpack.F:1066
    +
    subroutine radbg(IDO, IP, L1, IDL1, CC, C1, C2, CH, CH2, WA)
    RADBG.
    Definition: fftpack.F:797
    +
    subroutine rfftb1(N, C, CH, WA, IFAC)
    RFFTB1.
    Definition: fftpack.F:334
    +
    subroutine rfftf(N, R, WSAVE)
    RFFTF.
    Definition: fftpack.F:291
    +
    +
    + + + + diff --git a/ver-5.1.0/files.html b/ver-5.1.0/files.html new file mode 100644 index 00000000..7c55cf73 --- /dev/null +++ b/ver-5.1.0/files.html @@ -0,0 +1,192 @@ + + + + + + + +NCEPLIBS-ip: File List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    File List
    +
    +
    +
    Here is a list of all documented files with brief descriptions:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     bicubic_interp_mod.F90Bicubic interpolation routines for scalars and vectors
     bilinear_interp_mod.F90Bilinear interpolation routines for scalars and vectors
     budget_interp_mod.F90Budget interpolation routines for scalars and vectors
     earth_radius_mod.F90Determine earth radius and shape
     fftpack.FA concatination of the (FFTPACK)[https://netlib.org/fftpack/] library code
     gdswzd_c.F90C wrapper for routine gdswzd()
     gdswzd_mod.F90Driver module for gdswzd routines
     ip_constants_mod.F90Constants for use in NCEPLIBS-ip
     ip_equid_cylind_grid_mod.F90Equidistant cylindrical grib decoder and grid coordinate transformations
     ip_gaussian_grid_mod.F90Gaussian grid coordinate transformations
     ip_grid_descriptor_mod.F90Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions
     ip_grid_factory_mod.F90Routines for creating an ip_grid given a Grib descriptor
     ip_grid_mod.F90Abstract ip_grid type
     ip_grids_mod.F90Re-export the individual grids
     ip_interpolators_mod.F90Top-level module to export interpolation routines and constants
     ip_lambert_conf_grid_mod.F90GDS wizard for lambert conformal conical
     ip_mercator_grid_mod.F90GDS wizard for mercator cylindrical
     ip_mod.F90Top-level module for the ip library
     ip_polar_stereo_grid_mod.F90GDS wizard for polar stereographic azimuthal
     ip_rot_equid_cylind_egrid_mod.F90Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E
     ip_rot_equid_cylind_grid_mod.F90Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D
     ip_station_points_grid_mod.F90Interpolate gridded data to a series of station points
     iplib_4.hC interface to gdswzd() and gdswzd_grib1() functions for '4' library build
     iplib_8.hC interface to gdswzd() and gdswzd_grib1() functions for '8' library build
     iplib_d.hC interface to gdswzd() and gdswzd_grib1() functions for 'd' library build
     ipolates.F90Top-level driver for scalar interpolation routine ipolates()
     ipolatev.F90Top-level driver for vector interpolation routine ipolates
     ipxetas.F90Expand or contract eta grids using linear interpolation
     ipxwafs.F90Expand or contract wafs grids
     ipxwafs2.F90Expand or contract wafs grids using linear interpolation and account for bitmapped data
     ipxwafs3.F90Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data
     movect.F90Move a vector along a great circle
     ncpus.FSet number of cpus
     neighbor_budget_interp_mod.F90Interpolate scalar and vector fields with neighbor budget interpolation
     neighbor_interp_mod.F90Interpolate scalar and vector fields with neighbor interpolation
     polfix_mod.F90Make multiple pole scalar values consistent
     sp_mod.F
     spanaly.fAnalyze spectral from Fourier
     spdz2uv.fCompute winds from divergence and vorticity
     spectral_interp_mod.F90Interpolate spectral
     speps.fCompute utility spectral fields
     spfft.fPerform multiple fast fourier transforms
     spfft1.fPerform multiple fast Fourier transforms
     spffte.fPerform multiple fast Fourier transforms
     spfftpt.fCompute fourier transform to gridpoints
     spgradq.fCompute gradient in spectral space
     spgradx.fCompute x-gradient in Fourier space
     spgrady.fCompute y-gradient in spectral space
     splaplac.fCompute laplacian in spectral space
     splat.FComputes cosines of colatitude and Gaussian weights for sets of latitudes
     splegend.fCompute Legendre polynomials
     sppad.fPad or truncate a spectral field
     spsynth.fSynthesize Fourier coefficients from spectral coefficients
     sptez.fPerform a simple scalar spherical transform
     sptezd.fPerform a simple gradient spherical transform
     sptezm.fPerform simple scalar spherical transforms
     sptezmd.fPerform simple gradient spherical transforms
     sptezmv.fPerform simple vector spherical transforms
     sptezv.fPerform a simple vector spherical transform
     sptgpm.fTransform spectral scalar to Mercator
     sptgpmd.fTransform spectral to Mercator gradients
     sptgpmv.fTransform spectral vector to Mercator
     sptgps.fTransform spectral scalar to polar stereo
     sptgpsd.fTransform spectral to polar stereographic gradients
     sptgpsv.fTransform spectral vector to polar stereo
     sptgpt.fTransform spectral scalar to station points
     sptgptd.fTransform spectral to station point gradients
     sptgptsd.fTransform spectral scalar to station points
     sptgptv.fTransform spectral vector to station points
     sptgptvd.fTransform spectral vector to station points
     sptran.fPerform a scalar spherical transform
     sptrand.fPerform a gradient spherical transform
     sptranf.fPerform a scalar spherical transform
     sptranf0.fSptranf spectral initialization
     sptranf1.fSptranf spectral transform
     sptranfv.fPerform a vector spherical transform
     sptranv.fPerform a vector spherical transform
     sptrun.fTruncate gridded scalar fields
     sptrund.fSpectrally truncate to gradients
     sptrung.fSpectrally interpolate scalars to stations
     sptrungv.fSpectrally interpolate vectors to stations
     sptrunl.fSpectrally truncate to laplacian
     sptrunm.fSpectrally interpolate scalars to Mercator
     sptrunmv.fSpectrally interpolate vectors to Mercator
     sptruns.fSpectrally interpolate scalars to polar stereo
     sptrunsv.fSpectrally interpolate vectors to polar stereo
     sptrunv.fSpectrally truncate gridded vector fields
     spuv2dz.fCompute divergence and vorticity from winds
     spvar.fCompute variance by total wavenumber
     spwget.fGet wave-space constants
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/files_dup.js b/ver-5.1.0/files_dup.js new file mode 100644 index 00000000..f385241f --- /dev/null +++ b/ver-5.1.0/files_dup.js @@ -0,0 +1,93 @@ +var files_dup = +[ + [ "bicubic_interp_mod.F90", "bicubic__interp__mod_8F90.html", "bicubic__interp__mod_8F90" ], + [ "bilinear_interp_mod.F90", "bilinear__interp__mod_8F90.html", "bilinear__interp__mod_8F90" ], + [ "budget_interp_mod.F90", "budget__interp__mod_8F90.html", "budget__interp__mod_8F90" ], + [ "earth_radius_mod.F90", "earth__radius__mod_8F90.html", "earth__radius__mod_8F90" ], + [ "fftpack.F", "fftpack_8F.html", "fftpack_8F" ], + [ "gdswzd_c.F90", "gdswzd__c_8F90.html", "gdswzd__c_8F90" ], + [ "gdswzd_mod.F90", "gdswzd__mod_8F90.html", "gdswzd__mod_8F90" ], + [ "ip_constants_mod.F90", "ip__constants__mod_8F90.html", "ip__constants__mod_8F90" ], + [ "ip_equid_cylind_grid_mod.F90", "ip__equid__cylind__grid__mod_8F90.html", "ip__equid__cylind__grid__mod_8F90" ], + [ "ip_gaussian_grid_mod.F90", "ip__gaussian__grid__mod_8F90.html", "ip__gaussian__grid__mod_8F90" ], + [ "ip_grid_descriptor_mod.F90", "ip__grid__descriptor__mod_8F90.html", "ip__grid__descriptor__mod_8F90" ], + [ "ip_grid_factory_mod.F90", "ip__grid__factory__mod_8F90.html", "ip__grid__factory__mod_8F90" ], + [ "ip_grid_mod.F90", "ip__grid__mod_8F90.html", "ip__grid__mod_8F90" ], + [ "ip_grids_mod.F90", "ip__grids__mod_8F90.html", null ], + [ "ip_interpolators_mod.F90", "ip__interpolators__mod_8F90.html", "ip__interpolators__mod_8F90" ], + [ "ip_lambert_conf_grid_mod.F90", "ip__lambert__conf__grid__mod_8F90.html", "ip__lambert__conf__grid__mod_8F90" ], + [ "ip_mercator_grid_mod.F90", "ip__mercator__grid__mod_8F90.html", "ip__mercator__grid__mod_8F90" ], + [ "ip_mod.F90", "ip__mod_8F90.html", null ], + [ "ip_polar_stereo_grid_mod.F90", "ip__polar__stereo__grid__mod_8F90.html", "ip__polar__stereo__grid__mod_8F90" ], + [ "ip_rot_equid_cylind_egrid_mod.F90", "ip__rot__equid__cylind__egrid__mod_8F90.html", "ip__rot__equid__cylind__egrid__mod_8F90" ], + [ "ip_rot_equid_cylind_grid_mod.F90", "ip__rot__equid__cylind__grid__mod_8F90.html", "ip__rot__equid__cylind__grid__mod_8F90" ], + [ "ip_station_points_grid_mod.F90", "ip__station__points__grid__mod_8F90.html", "ip__station__points__grid__mod_8F90" ], + [ "iplib_4.h", "iplib__4_8h.html", "iplib__4_8h" ], + [ "iplib_8.h", "iplib__8_8h.html", "iplib__8_8h" ], + [ "iplib_d.h", "iplib__d_8h.html", "iplib__d_8h" ], + [ "ipolates.F90", "ipolates_8F90.html", "ipolates_8F90" ], + [ "ipolatev.F90", "ipolatev_8F90.html", "ipolatev_8F90" ], + [ "ipxetas.F90", "ipxetas_8F90.html", "ipxetas_8F90" ], + [ "ipxwafs.F90", "ipxwafs_8F90.html", "ipxwafs_8F90" ], + [ "ipxwafs2.F90", "ipxwafs2_8F90.html", "ipxwafs2_8F90" ], + [ "ipxwafs3.F90", "ipxwafs3_8F90.html", "ipxwafs3_8F90" ], + [ "movect.F90", "movect_8F90.html", "movect_8F90" ], + [ "ncpus.F", "ncpus_8F.html", "ncpus_8F" ], + [ "neighbor_budget_interp_mod.F90", "neighbor__budget__interp__mod_8F90.html", "neighbor__budget__interp__mod_8F90" ], + [ "neighbor_interp_mod.F90", "neighbor__interp__mod_8F90.html", "neighbor__interp__mod_8F90" ], + [ "polfix_mod.F90", "polfix__mod_8F90.html", "polfix__mod_8F90" ], + [ "sp_mod.F", "sp__mod_8F_source.html", null ], + [ "spanaly.f", "spanaly_8f.html", "spanaly_8f" ], + [ "spdz2uv.f", "spdz2uv_8f.html", "spdz2uv_8f" ], + [ "spectral_interp_mod.F90", "spectral__interp__mod_8F90.html", "spectral__interp__mod_8F90" ], + [ "speps.f", "speps_8f.html", "speps_8f" ], + [ "spfft.f", "spfft_8f.html", "spfft_8f" ], + [ "spfft1.f", "spfft1_8f.html", "spfft1_8f" ], + [ "spffte.f", "spffte_8f.html", "spffte_8f" ], + [ "spfftpt.f", "spfftpt_8f.html", "spfftpt_8f" ], + [ "spgradq.f", "spgradq_8f.html", "spgradq_8f" ], + [ "spgradx.f", "spgradx_8f.html", "spgradx_8f" ], + [ "spgrady.f", "spgrady_8f.html", "spgrady_8f" ], + [ "splaplac.f", "splaplac_8f.html", "splaplac_8f" ], + [ "splat.F", "splat_8F.html", "splat_8F" ], + [ "splegend.f", "splegend_8f.html", "splegend_8f" ], + [ "sppad.f", "sppad_8f.html", "sppad_8f" ], + [ "spsynth.f", "spsynth_8f.html", "spsynth_8f" ], + [ "sptez.f", "sptez_8f.html", "sptez_8f" ], + [ "sptezd.f", "sptezd_8f.html", "sptezd_8f" ], + [ "sptezm.f", "sptezm_8f.html", "sptezm_8f" ], + [ "sptezmd.f", "sptezmd_8f.html", "sptezmd_8f" ], + [ "sptezmv.f", "sptezmv_8f.html", "sptezmv_8f" ], + [ "sptezv.f", "sptezv_8f.html", "sptezv_8f" ], + [ "sptgpm.f", "sptgpm_8f.html", "sptgpm_8f" ], + [ "sptgpmd.f", "sptgpmd_8f.html", "sptgpmd_8f" ], + [ "sptgpmv.f", "sptgpmv_8f.html", "sptgpmv_8f" ], + [ "sptgps.f", "sptgps_8f.html", "sptgps_8f" ], + [ "sptgpsd.f", "sptgpsd_8f.html", "sptgpsd_8f" ], + [ "sptgpsv.f", "sptgpsv_8f.html", "sptgpsv_8f" ], + [ "sptgpt.f", "sptgpt_8f.html", "sptgpt_8f" ], + [ "sptgptd.f", "sptgptd_8f.html", "sptgptd_8f" ], + [ "sptgptsd.f", "sptgptsd_8f.html", "sptgptsd_8f" ], + [ "sptgptv.f", "sptgptv_8f.html", "sptgptv_8f" ], + [ "sptgptvd.f", "sptgptvd_8f.html", "sptgptvd_8f" ], + [ "sptran.f", "sptran_8f.html", "sptran_8f" ], + [ "sptrand.f", "sptrand_8f.html", "sptrand_8f" ], + [ "sptranf.f", "sptranf_8f.html", "sptranf_8f" ], + [ "sptranf0.f", "sptranf0_8f.html", "sptranf0_8f" ], + [ "sptranf1.f", "sptranf1_8f.html", "sptranf1_8f" ], + [ "sptranfv.f", "sptranfv_8f.html", "sptranfv_8f" ], + [ "sptranv.f", "sptranv_8f.html", "sptranv_8f" ], + [ "sptrun.f", "sptrun_8f.html", "sptrun_8f" ], + [ "sptrund.f", "sptrund_8f.html", "sptrund_8f" ], + [ "sptrung.f", "sptrung_8f.html", "sptrung_8f" ], + [ "sptrungv.f", "sptrungv_8f.html", "sptrungv_8f" ], + [ "sptrunl.f", "sptrunl_8f.html", "sptrunl_8f" ], + [ "sptrunm.f", "sptrunm_8f.html", "sptrunm_8f" ], + [ "sptrunmv.f", "sptrunmv_8f.html", "sptrunmv_8f" ], + [ "sptruns.f", "sptruns_8f.html", "sptruns_8f" ], + [ "sptrunsv.f", "sptrunsv_8f.html", "sptrunsv_8f" ], + [ "sptrunv.f", "sptrunv_8f.html", "sptrunv_8f" ], + [ "spuv2dz.f", "spuv2dz_8f.html", "spuv2dz_8f" ], + [ "spvar.f", "spvar_8f.html", "spvar_8f" ], + [ "spwget.f", "spwget_8f.html", "spwget_8f" ] +]; \ No newline at end of file diff --git a/folderclosed.png b/ver-5.1.0/folderclosed.png similarity index 100% rename from folderclosed.png rename to ver-5.1.0/folderclosed.png diff --git a/folderopen.png b/ver-5.1.0/folderopen.png similarity index 100% rename from folderopen.png rename to ver-5.1.0/folderopen.png diff --git a/ver-5.1.0/functions.html b/ver-5.1.0/functions.html new file mode 100644 index 00000000..d095edd2 --- /dev/null +++ b/ver-5.1.0/functions.html @@ -0,0 +1,476 @@ + + + + + + + +NCEPLIBS-ip: Data Fields + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented data types members with links to the data structure documentation for each member
    + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - k -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - w -

    +
    +
    + + + + diff --git a/ver-5.1.0/functions_func.html b/ver-5.1.0/functions_func.html new file mode 100644 index 00000000..302f4b7e --- /dev/null +++ b/ver-5.1.0/functions_func.html @@ -0,0 +1,268 @@ + + + + + + + +NCEPLIBS-ip: Data Fields - Functions/Subroutines + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - f -

    + + +

    - g -

    + + +

    - i -

    + + +

    - p -

    +
    +
    + + + + diff --git a/ver-5.1.0/functions_vars.html b/ver-5.1.0/functions_vars.html new file mode 100644 index 00000000..f226994b --- /dev/null +++ b/ver-5.1.0/functions_vars.html @@ -0,0 +1,310 @@ + + + + + + + +NCEPLIBS-ip: Data Fields - Variables + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - k -

    + + +

    - n -

    + + +

    - o -

    + + +

    - r -

    + + +

    - s -

    + + +

    - w -

    +
    +
    + + + + diff --git a/ver-5.1.0/gdswzd__c_8F90.html b/ver-5.1.0/gdswzd__c_8F90.html new file mode 100644 index 00000000..9a8d640e --- /dev/null +++ b/ver-5.1.0/gdswzd__c_8F90.html @@ -0,0 +1,129 @@ + + + + + + + +NCEPLIBS-ip: gdswzd_c.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    gdswzd_c.F90 File Reference
    +
    +
    + +

    C wrapper for routine gdswzd(). +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Modules

    module  gdswzd_c_mod
     Module that contains C wrapper for routine gdswzd().
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_c_mod::gdswzd_c (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     C wrapper for routine gdswzd(). More...
     
    subroutine gdswzd_c_mod::gdswzd_c_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     C wrapper for routine gdswzd. More...
     
    +

    Detailed Description

    +

    C wrapper for routine gdswzd().

    +
    Author
    JOVIC
    +
    Date
    2016-04-10
    + +

    Definition in file gdswzd_c.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/gdswzd__c_8F90.js b/ver-5.1.0/gdswzd__c_8F90.js new file mode 100644 index 00000000..db0f3b21 --- /dev/null +++ b/ver-5.1.0/gdswzd__c_8F90.js @@ -0,0 +1,5 @@ +var gdswzd__c_8F90 = +[ + [ "gdswzd_c", "gdswzd__c_8F90.html#ae3026381f7f41561507c97c9125d24e4", null ], + [ "gdswzd_c_grib1", "gdswzd__c_8F90.html#a06861f1403edf106bb3b399c39981504", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/gdswzd__c_8F90_source.html b/ver-5.1.0/gdswzd__c_8F90_source.html new file mode 100644 index 00000000..7f02ddbf --- /dev/null +++ b/ver-5.1.0/gdswzd__c_8F90_source.html @@ -0,0 +1,189 @@ + + + + + + + +NCEPLIBS-ip: gdswzd_c.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    gdswzd_c.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + +
    8  use gdswzd_mod
    +
    9  implicit none
    +
    10 
    +
    11 contains
    +
    12 
    +
    173  SUBROUTINE gdswzd_c(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
    +
    174  XPTS,YPTS,RLON,RLAT,NRET,CROT,SROT, &
    +
    175  XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd')
    +
    176  use, INTRINSIC :: iso_c_binding
    +
    177 
    +
    178  USE gdswzd_mod
    +
    179 
    +
    180  IMPLICIT NONE
    +
    181 
    +
    182 #if (LSIZE==8)
    +
    183  INTEGER(KIND=C_LONG), INTENT(IN) :: IGDTMPL(IGDTLEN)
    +
    184  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
    +
    185  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT, NPTS
    +
    186  INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
    +
    187 #else
    +
    188  INTEGER(KIND=C_INT), INTENT(IN) :: IGDTMPL(IGDTLEN)
    +
    189  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IGDTNUM, IGDTLEN
    +
    190  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT, NPTS
    +
    191  INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
    +
    192 #endif
    +
    193 
    +
    194 #if (LSIZE==4)
    +
    195  REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
    +
    196  REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
    +
    197  REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
    +
    198  REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
    +
    199 #else
    +
    200  REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
    +
    201  REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
    +
    202  REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
    +
    203  REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
    +
    204 #endif
    +
    205 
    +
    206  CALL gdswzd(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
    +
    207  xpts,ypts,rlon,rlat,nret, &
    +
    208  crot,srot,xlon,xlat,ylon,ylat,area)
    +
    209 
    +
    210  END SUBROUTINE gdswzd_c
    +
    211 
    +
    259  SUBROUTINE gdswzd_c_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
    +
    260  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA) bind(C, NAME='gdswzd_grib1')
    +
    261  use, INTRINSIC :: iso_c_binding
    +
    262 
    +
    263  USE gdswzd_mod
    +
    264 
    +
    265  IMPLICIT NONE
    +
    266 
    +
    267 #if (LSIZE==8)
    +
    268  INTEGER(KIND=C_LONG), INTENT(IN) :: KGDS(200)
    +
    269  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: IOPT
    +
    270  INTEGER(KIND=C_LONG), VALUE, INTENT(IN) :: NPTS
    +
    271  INTEGER(KIND=C_LONG), INTENT(OUT) :: NRET
    +
    272 #else
    +
    273  INTEGER(KIND=C_INT), INTENT(IN) :: KGDS(200)
    +
    274  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: IOPT
    +
    275  INTEGER(KIND=C_INT), VALUE, INTENT(IN) :: NPTS
    +
    276  INTEGER(KIND=C_INT), INTENT(OUT) :: NRET
    +
    277 #endif
    +
    278 
    +
    279 #if (LSIZE==4)
    +
    280  REAL(KIND=c_float), VALUE, INTENT(IN) :: fill
    +
    281  REAL(KIND=c_float), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
    +
    282  REAL(KIND=c_float), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
    +
    283  REAL(KIND=c_float), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
    +
    284 #else
    +
    285  REAL(KIND=c_double), VALUE, INTENT(IN) :: fill
    +
    286  REAL(KIND=c_double), INTENT(INOUT) :: xpts(npts),ypts(npts),rlon(npts),rlat(npts)
    +
    287  REAL(KIND=c_double), INTENT(OUT) :: crot(npts),srot(npts),xlon(npts),xlat(npts)
    +
    288  REAL(KIND=c_double), INTENT(OUT) :: ylon(npts),ylat(npts),area(npts)
    +
    289 #endif
    +
    290 
    +
    291  CALL gdswzd(kgds,iopt,npts,fill,xpts,ypts,rlon,rlat,nret, &
    +
    292  crot,srot,xlon,xlat,ylon,ylat,area)
    +
    293 
    +
    294  END SUBROUTINE gdswzd_c_grib1
    +
    295 
    +
    296 end module gdswzd_c_mod
    + +
    Module that contains C wrapper for routine gdswzd().
    Definition: gdswzd_c.F90:7
    +
    subroutine gdswzd_c_grib1(KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    C wrapper for routine gdswzd.
    Definition: gdswzd_c.F90:261
    +
    subroutine gdswzd_c(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    C wrapper for routine gdswzd().
    Definition: gdswzd_c.F90:176
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    +
    + + + + diff --git a/ver-5.1.0/gdswzd__mod_8F90.html b/ver-5.1.0/gdswzd__mod_8F90.html new file mode 100644 index 00000000..881c2de3 --- /dev/null +++ b/ver-5.1.0/gdswzd__mod_8F90.html @@ -0,0 +1,147 @@ + + + + + + + +NCEPLIBS-ip: gdswzd_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    gdswzd_mod.F90 File Reference
    +
    +
    + +

    Driver module for gdswzd routines. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  gdswzd_mod::gdswzd
     
    + + + + +

    +Modules

    module  gdswzd_mod
     Driver module for gdswzd routines.
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_mod::gdswzd_1d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following: More...
     
    subroutine gdswzd_mod::gdswzd_2d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays): More...
     
    subroutine, public gdswzd_mod::gdswzd_2d_array_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib grid description section and returns one of the following (for 2-d arrays): More...
     
    subroutine, public gdswzd_mod::gdswzd_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib grid description section and returns one of the following (for 1-d arrays): More...
     
    subroutine gdswzd_mod::gdswzd_grid (grid, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Returns one of the following for a grid object: More...
     
    subroutine gdswzd_mod::gdswzd_scalar (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following (for scalars): More...
     
    +

    Detailed Description

    +

    Driver module for gdswzd routines.

    +
    Date
    Jan 2015
    +
    Author
    George Gayno, Kyle Gerheiser
    + +

    Definition in file gdswzd_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/gdswzd__mod_8F90.js b/ver-5.1.0/gdswzd__mod_8F90.js new file mode 100644 index 00000000..3b950779 --- /dev/null +++ b/ver-5.1.0/gdswzd__mod_8F90.js @@ -0,0 +1,10 @@ +var gdswzd__mod_8F90 = +[ + [ "gdswzd", "interfacegdswzd__mod_1_1gdswzd.html", "interfacegdswzd__mod_1_1gdswzd" ], + [ "gdswzd_1d_array", "gdswzd__mod_8F90.html#ac304e2b046eccc701e24827c81107e76", null ], + [ "gdswzd_2d_array", "gdswzd__mod_8F90.html#acdf970e498e9317522fbdfb690b86e25", null ], + [ "gdswzd_2d_array_grib1", "gdswzd__mod_8F90.html#aa032a55281b18e208630a730679958f4", null ], + [ "gdswzd_grib1", "gdswzd__mod_8F90.html#a133e040fac8dd56e607b8e3fb6a58c37", null ], + [ "gdswzd_grid", "gdswzd__mod_8F90.html#a584d2bddbc6d857b80cfac5e3b288d45", null ], + [ "gdswzd_scalar", "gdswzd__mod_8F90.html#aba3235c5bc5797e72b9a6a8a587b8861", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/gdswzd__mod_8F90_source.html b/ver-5.1.0/gdswzd__mod_8F90_source.html new file mode 100644 index 00000000..2b3993b6 --- /dev/null +++ b/ver-5.1.0/gdswzd__mod_8F90_source.html @@ -0,0 +1,450 @@ + + + + + + + +NCEPLIBS-ip: gdswzd_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    gdswzd_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    6 
    +
    25 MODULE gdswzd_mod
    + +
    27  use ip_grids_mod
    +
    28  use ip_grid_mod
    + +
    30 
    +
    31  IMPLICIT NONE
    +
    32 
    +
    33  PRIVATE
    +
    34 
    + +
    36 
    +
    37  INTERFACE gdswzd
    +
    38  MODULE PROCEDURE gdswzd_1d_array
    +
    39  MODULE PROCEDURE gdswzd_2d_array
    +
    40  MODULE PROCEDURE gdswzd_scalar
    +
    41  module procedure gdswzd_grib1
    +
    42  module procedure gdswzd_2d_array_grib1
    +
    43  module procedure gdswzd_grid
    +
    44  END INTERFACE gdswzd
    +
    45 
    +
    46 CONTAINS
    +
    47 
    +
    105  subroutine gdswzd_grid(grid,IOPT,NPTS,FILL, &
    +
    106  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    107  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    108 
    +
    109  class(ip_grid), intent(in) :: grid
    +
    110  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    111  INTEGER, INTENT( OUT) :: NRET
    +
    112  !
    +
    113  REAL, INTENT(IN ) :: FILL
    +
    114  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    115  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    116  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    117  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    118  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    119 
    +
    120  INTEGER :: IS1, IM, JM, NM, KSCAN, NSCAN, N
    +
    121  INTEGER :: IOPF, NN, I, J
    +
    122 
    +
    123  ! COMPUTE GRID COORDINATES FOR ALL GRID POINTS
    +
    124  IF(iopt.EQ.0) THEN
    +
    125  iopf=1
    +
    126 
    +
    127  if(grid%descriptor%grid_num.eq.-1)then
    +
    128  nm = npts
    +
    129  else
    +
    130  im = grid%im
    +
    131  jm = grid%jm
    +
    132  nm = im * jm
    +
    133  endif
    +
    134  nscan = grid%nscan
    +
    135  kscan = grid%kscan
    +
    136 
    +
    137  if (nm > npts) then
    +
    138  rlat=fill
    +
    139  rlon=fill
    +
    140  xpts=fill
    +
    141  ypts=fill
    +
    142  return
    +
    143  end if
    +
    144 
    +
    145  select type(grid)
    +
    146  type is(ip_rot_equid_cylind_egrid)
    +
    147  if(kscan == 0) then
    +
    148  is1 = (jm + 1) / 2
    +
    149  else
    +
    150  is1 = jm / 2
    +
    151  end if
    +
    152 
    +
    153  DO n=1,nm
    +
    154  IF(nscan.EQ.0) THEN
    +
    155  j=(n-1)/im+1
    +
    156  i=(n-im*(j-1))*2-mod(j+kscan,2)
    +
    157  ELSE
    +
    158  nn=(n*2)-1+kscan
    +
    159  i = (nn-1)/jm + 1
    +
    160  j = mod(nn-1,jm) + 1
    +
    161  IF (mod(jm,2)==0.AND.mod(i,2)==0.AND.kscan==0) j = j + 1
    +
    162  IF (mod(jm,2)==0.AND.mod(i,2)==0.AND.kscan==1) j = j - 1
    +
    163  ENDIF
    +
    164  xpts(n)=is1+(i-(j-kscan))/2
    +
    165  ypts(n)=(i+(j-kscan))/2
    +
    166  ENDDO
    +
    167  type is(ip_station_points_grid)
    +
    168  DO n=1,nm
    +
    169  xpts(n)=fill
    +
    170  ypts(n)=fill
    +
    171  ENDDO
    +
    172  class default
    +
    173  DO n=1,nm
    +
    174  IF(nscan.EQ.0) THEN
    +
    175  j=(n-1)/im+1
    +
    176  i=n-im*(j-1)
    +
    177  ELSE
    +
    178  i=(n-1)/jm+1
    +
    179  j=n-jm*(i-1)
    +
    180  ENDIF
    +
    181  xpts(n)=i
    +
    182  ypts(n)=j
    +
    183  ENDDO
    +
    184  end select
    +
    185 
    +
    186  DO n=nm+1,npts
    +
    187  xpts(n)=fill
    +
    188  ypts(n)=fill
    +
    189  ENDDO
    +
    190 
    +
    191  ELSE ! IOPT /= 0
    +
    192  iopf=iopt
    +
    193  ENDIF ! IOPT CHECK
    +
    194 
    +
    195  call grid%gdswzd(iopf,npts,fill, &
    +
    196  xpts,ypts,rlon,rlat,nret, &
    +
    197  crot,srot,xlon,xlat,ylon,ylat,area)
    +
    198 
    +
    199  end subroutine gdswzd_grid
    +
    200 
    +
    201 
    +
    278  SUBROUTINE gdswzd_scalar(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
    +
    279  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    280  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    281 
    +
    282  IMPLICIT NONE
    +
    283  !
    +
    284  INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
    +
    285  INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
    +
    286  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    287  INTEGER, INTENT( OUT) :: NRET
    +
    288  !
    +
    289  REAL, INTENT(IN ) :: FILL
    +
    290  REAL, INTENT(INOUT) :: RLON, RLAT
    +
    291  REAL, INTENT(INOUT) :: XPTS, YPTS
    +
    292  REAL, OPTIONAL, INTENT( OUT) :: CROT, SROT
    +
    293  REAL, OPTIONAL, INTENT( OUT) :: XLON, XLAT
    +
    294  REAL, OPTIONAL, INTENT( OUT) :: YLON, YLAT, AREA
    +
    295 
    +
    296  REAL :: RLONA(1),RLATA(1)
    +
    297  REAL :: XPTSA(1),YPTSA(1)
    +
    298  REAL :: CROTA(1),SROTA(1)
    +
    299  REAL :: XLONA(1),XLATA(1)
    +
    300  REAL :: YLONA(1),YLATA(1),AREAA(1)
    +
    301 
    +
    302  rlona(1) = rlon
    +
    303  rlata(1) = rlat
    +
    304  xptsa(1) = xpts
    +
    305  yptsa(1) = ypts
    +
    306 
    +
    307  nret = 0
    +
    308 
    +
    309  ! CALL WITHOUT EXTRA FIELDS.
    +
    310 
    +
    311  IF (.NOT. PRESENT(crot) .AND. &
    +
    312  .NOT. PRESENT(srot) .AND. &
    +
    313  .NOT. PRESENT(xlon) .AND. &
    +
    314  .NOT. PRESENT(xlat) .AND. &
    +
    315  .NOT. PRESENT(ylon) .AND. &
    +
    316  .NOT. PRESENT(ylat) .AND. &
    +
    317  .NOT. PRESENT(area) ) THEN
    +
    318 
    +
    319  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
    +
    320  xptsa,yptsa,rlona,rlata,nret)
    +
    321 
    +
    322  rlon = rlona(1)
    +
    323  rlat = rlata(1)
    +
    324  xpts = xptsa(1)
    +
    325  ypts = yptsa(1)
    +
    326 
    +
    327  ENDIF
    +
    328 
    +
    329  ! MIMIC CALL TO OLD 'GDSWIZ' ROUTINES.
    +
    330 
    +
    331  IF (PRESENT(crot) .AND. &
    +
    332  PRESENT(srot) .AND. &
    +
    333  .NOT. PRESENT(xlon) .AND. &
    +
    334  .NOT. PRESENT(xlat) .AND. &
    +
    335  .NOT. PRESENT(ylon) .AND. &
    +
    336  .NOT. PRESENT(ylat) .AND. &
    +
    337  .NOT. PRESENT(area) ) THEN
    +
    338 
    +
    339  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
    +
    340  xptsa,yptsa,rlona,rlata,nret,crota,srota)
    +
    341 
    +
    342  rlon = rlona(1)
    +
    343  rlat = rlata(1)
    +
    344  xpts = xptsa(1)
    +
    345  ypts = yptsa(1)
    +
    346  crot = crota(1)
    +
    347  srot = srota(1)
    +
    348 
    +
    349  ENDIF
    +
    350 
    +
    351  ! MIMIC CALL TO OLD 'GDSWZD' ROUTINES.
    +
    352 
    +
    353  IF (PRESENT(crot) .AND. &
    +
    354  PRESENT(srot) .AND. &
    +
    355  PRESENT(xlon) .AND. &
    +
    356  PRESENT(xlat) .AND. &
    +
    357  PRESENT(ylon) .AND. &
    +
    358  PRESENT(ylat) .AND. &
    +
    359  PRESENT(area) ) THEN
    +
    360 
    +
    361  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
    +
    362  xptsa,yptsa,rlona,rlata,nret, &
    +
    363  crota,srota,xlona,xlata,ylona,ylata,areaa)
    +
    364 
    +
    365  rlon = rlona(1)
    +
    366  rlat = rlata(1)
    +
    367  xpts = xptsa(1)
    +
    368  ypts = yptsa(1)
    +
    369  crot = crota(1)
    +
    370  srot = srota(1)
    +
    371  xlon = xlona(1)
    +
    372  xlat = xlata(1)
    +
    373  ylon = ylona(1)
    +
    374  ylat = ylata(1)
    +
    375  area = areaa(1)
    +
    376 
    +
    377  ENDIF
    +
    378 
    +
    379  RETURN
    +
    380 
    +
    381  END SUBROUTINE gdswzd_scalar
    +
    382 
    +
    459  SUBROUTINE gdswzd_2d_array(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
    +
    460  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    461  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    462 
    +
    463  IMPLICIT NONE
    +
    464  !
    +
    465  INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
    +
    466  INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
    +
    467  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    468  INTEGER, INTENT( OUT) :: NRET
    +
    469  !
    +
    470  REAL, INTENT(IN ) :: FILL
    +
    471  REAL, INTENT(INOUT) :: RLON(:,:),RLAT(:,:)
    +
    472  REAL, INTENT(INOUT) :: XPTS(:,:),YPTS(:,:)
    +
    473  REAL, OPTIONAL, INTENT( OUT) :: CROT(:,:),SROT(:,:)
    +
    474  REAL, OPTIONAL, INTENT( OUT) :: XLON(:,:),XLAT(:,:)
    +
    475  REAL, OPTIONAL, INTENT( OUT) :: YLON(:,:),YLAT(:,:),AREA(:,:)
    +
    476 
    +
    477  CALL gdswzd_1d_array(igdtnum,igdtmpl,igdtlen,iopt,npts,fill, &
    +
    478  xpts,ypts,rlon,rlat,nret, &
    +
    479  crot,srot,xlon,xlat,ylon,ylat,area)
    +
    480 
    +
    481  END SUBROUTINE gdswzd_2d_array
    +
    482 
    +
    665  SUBROUTINE gdswzd_1d_array(IGDTNUM,IGDTMPL,IGDTLEN,IOPT,NPTS,FILL, &
    +
    666  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    667  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    668  INTEGER, INTENT(IN ) :: IGDTNUM, IGDTLEN
    +
    669  INTEGER, INTENT(IN ) :: IGDTMPL(IGDTLEN)
    +
    670  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    671  INTEGER, INTENT( OUT) :: NRET
    +
    672  !
    +
    673  REAL, INTENT(IN ) :: FILL
    +
    674  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    675  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    676  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    677  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    678  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    679 
    +
    680  type(grib2_descriptor) :: desc
    +
    681  class(ip_grid), allocatable :: grid
    +
    682 
    +
    683  desc = init_descriptor(igdtnum, igdtlen, igdtmpl)
    +
    684  call init_grid(grid, desc)
    +
    685 
    +
    686  call gdswzd_grid(grid,iopt,npts,fill, &
    +
    687  xpts,ypts,rlon,rlat,nret, &
    +
    688  crot,srot,xlon,xlat,ylon,ylat,area)
    +
    689 
    +
    690  END SUBROUTINE gdswzd_1d_array
    +
    691 
    +
    758  SUBROUTINE gdswzd_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
    +
    759  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    760  INTEGER, INTENT(IN ) :: IOPT, KGDS(200), NPTS
    +
    761  INTEGER, INTENT( OUT) :: NRET
    +
    762  !
    +
    763  REAL, INTENT(IN ) :: FILL
    +
    764  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    765  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    766  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    767  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    768  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    769 
    +
    770 
    +
    771  type(grib1_descriptor) :: desc
    +
    772  class(ip_grid), allocatable :: grid
    +
    773 
    +
    774  desc = init_descriptor(kgds)
    +
    775  call init_grid(grid, desc)
    +
    776 
    +
    777  call gdswzd_grid(grid,iopt,npts,fill, &
    +
    778  xpts,ypts,rlon,rlat,nret, &
    +
    779  crot,srot,xlon,xlat,ylon,ylat,area)
    +
    780 
    +
    781  END SUBROUTINE gdswzd_grib1
    +
    782 
    +
    783 
    +
    850  SUBROUTINE gdswzd_2d_array_grib1(KGDS,IOPT,NPTS,FILL,XPTS,YPTS,RLON,RLAT,NRET, &
    +
    851  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    852 
    +
    853  !$$$
    +
    854  INTEGER, INTENT(IN ) :: IOPT, KGDS(200), NPTS
    +
    855  INTEGER, INTENT( OUT) :: NRET
    +
    856  !
    +
    857  REAL, INTENT(IN ) :: FILL
    +
    858  REAL, INTENT(INOUT) :: RLON(:,:),RLAT(:,:)
    +
    859  REAL, INTENT(INOUT) :: XPTS(:,:),YPTS(:,:)
    +
    860  REAL, OPTIONAL, INTENT( OUT) :: CROT(:,:),SROT(:,:)
    +
    861  REAL, OPTIONAL, INTENT( OUT) :: XLON(:,:),XLAT(:,:)
    +
    862  REAL, OPTIONAL, INTENT( OUT) :: YLON(:,:),YLAT(:,:),AREA(:,:)
    +
    863 
    +
    864 
    +
    865  type(grib1_descriptor) :: desc
    +
    866  class(ip_grid), allocatable :: grid
    +
    867 
    +
    868  desc = init_descriptor(kgds)
    +
    869  call init_grid(grid, desc)
    +
    870 
    +
    871  call gdswzd_grid(grid,iopt,npts,fill, &
    +
    872  xpts,ypts,rlon,rlat,nret, &
    +
    873  crot,srot,xlon,xlat,ylon,ylat,area)
    +
    874 
    +
    875  END SUBROUTINE gdswzd_2d_array_grib1
    +
    876 
    +
    877 
    +
    878 
    +
    879 END MODULE gdswzd_mod
    + + + +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    subroutine, public gdswzd_grib1(KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Decodes the grib grid description section and returns one of the following (for 1-d arrays):
    Definition: gdswzd_mod.F90:760
    +
    subroutine gdswzd_grid(grid, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Returns one of the following for a grid object:
    Definition: gdswzd_mod.F90:108
    +
    subroutine, public gdswzd_2d_array_grib1(KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Decodes the grib grid description section and returns one of the following (for 2-d arrays):
    Definition: gdswzd_mod.F90:852
    +
    subroutine gdswzd_scalar(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Decodes the grib 2 grid definition template and returns one of the following (for scalars):
    Definition: gdswzd_mod.F90:281
    +
    subroutine gdswzd_1d_array(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Decodes the grib 2 grid definition template and returns one of the following:
    Definition: gdswzd_mod.F90:668
    +
    subroutine gdswzd_2d_array(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):
    Definition: gdswzd_mod.F90:462
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Routines for creating an ip_grid given a Grib descriptor.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/globals.html b/ver-5.1.0/globals.html new file mode 100644 index 00000000..462f477c --- /dev/null +++ b/ver-5.1.0/globals.html @@ -0,0 +1,376 @@ + + + + + + + +NCEPLIBS-ip: Globals + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented functions, variables, defines, enums, and typedefs with links to the documentation:
    + +

    - c -

    + + +

    - d -

    + + +

    - g -

    + + +

    - i -

    + + +

    - m -

    + + +

    - n -

    + + +

    - r -

    + + +

    - s -

    +
    +
    + + + + diff --git a/ver-5.1.0/globals_func.html b/ver-5.1.0/globals_func.html new file mode 100644 index 00000000..bc86712c --- /dev/null +++ b/ver-5.1.0/globals_func.html @@ -0,0 +1,376 @@ + + + + + + + +NCEPLIBS-ip: Globals + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - c -

    + + +

    - d -

    + + +

    - g -

    + + +

    - i -

    + + +

    - m -

    + + +

    - n -

    + + +

    - r -

    + + +

    - s -

    +
    +
    + + + + diff --git a/ver-5.1.0/hierarchy.html b/ver-5.1.0/hierarchy.html new file mode 100644 index 00000000..36d6a3fd --- /dev/null +++ b/ver-5.1.0/hierarchy.html @@ -0,0 +1,132 @@ + + + + + + + +NCEPLIBS-ip: Class Hierarchy + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Class Hierarchy
    +
    +
    +
    This inheritance list is sorted roughly, but not completely, alphabetically:
    +
    [detail level 12]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Cgdswzd_mod::gdswzd
     Cip_grid_mod::gdswzd_interface
     Cip_grid_descriptor_mod::init_descriptor
     Cip_grid_mod::init_grib1_interface
     Cip_grid_mod::init_grib2_interface
     Cip_grid_factory_mod::init_grid
     Cbicubic_interp_mod::interpolate_bicubic
     Cbilinear_interp_mod::interpolate_bilinear
     Cbudget_interp_mod::interpolate_budget
     Cneighbor_interp_mod::interpolate_neighbor
     Cneighbor_budget_interp_mod::interpolate_neighbor_budget
     Cspectral_interp_mod::interpolate_spectral
     Cip_grid_mod::ip_gridAbstract grid that holds fields and methods common to all grids
     Cip_equid_cylind_grid_mod::ip_equid_cylind_grid
     Cip_gaussian_grid_mod::ip_gaussian_grid
     Cip_lambert_conf_grid_mod::ip_lambert_conf_grid
     Cip_mercator_grid_mod::ip_mercator_grid
     Cip_polar_stereo_grid_mod::ip_polar_stereo_grid
     Cip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid
     Cip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid
     Cip_station_points_grid_mod::ip_station_points_grid
     Cip_grid_descriptor_mod::ip_grid_descriptorAbstract descriptor object which represents a grib1 or grib2 descriptor
     Cip_grid_descriptor_mod::grib1_descriptorDescriptor representing a grib1 grib descriptor section (GDS) with an integer array
     Cip_grid_descriptor_mod::grib2_descriptorGrib-2 descriptor containing a grib2 GDT represented by an integer array
     Cipolates_mod::ipolates
     Cipolatev_mod::ipolatev
     Cip_grid_descriptor_mod::operator(==)
     Cip_grid_mod::operator(==)Check equality
     Cspectral_interp_mod::polates4
     Cspectral_interp_mod::polatev4
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/hierarchy.js b/ver-5.1.0/hierarchy.js new file mode 100644 index 00000000..c1f43a9e --- /dev/null +++ b/ver-5.1.0/hierarchy.js @@ -0,0 +1,35 @@ +var hierarchy = +[ + [ "gdswzd_mod::gdswzd", "interfacegdswzd__mod_1_1gdswzd.html", null ], + [ "ip_grid_mod::gdswzd_interface", "interfaceip__grid__mod_1_1gdswzd__interface.html", null ], + [ "ip_grid_descriptor_mod::init_descriptor", "interfaceip__grid__descriptor__mod_1_1init__descriptor.html", null ], + [ "ip_grid_mod::init_grib1_interface", "interfaceip__grid__mod_1_1init__grib1__interface.html", null ], + [ "ip_grid_mod::init_grib2_interface", "interfaceip__grid__mod_1_1init__grib2__interface.html", null ], + [ "ip_grid_factory_mod::init_grid", "interfaceip__grid__factory__mod_1_1init__grid.html", null ], + [ "bicubic_interp_mod::interpolate_bicubic", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html", null ], + [ "bilinear_interp_mod::interpolate_bilinear", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html", null ], + [ "budget_interp_mod::interpolate_budget", "interfacebudget__interp__mod_1_1interpolate__budget.html", null ], + [ "neighbor_interp_mod::interpolate_neighbor", "interfaceneighbor__interp__mod_1_1interpolate__neighbor.html", null ], + [ "neighbor_budget_interp_mod::interpolate_neighbor_budget", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html", null ], + [ "spectral_interp_mod::interpolate_spectral", "interfacespectral__interp__mod_1_1interpolate__spectral.html", null ], + [ "ip_grid_mod::ip_grid", "structip__grid__mod_1_1ip__grid.html", [ + [ "ip_equid_cylind_grid_mod::ip_equid_cylind_grid", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html", null ], + [ "ip_gaussian_grid_mod::ip_gaussian_grid", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html", null ], + [ "ip_lambert_conf_grid_mod::ip_lambert_conf_grid", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html", null ], + [ "ip_mercator_grid_mod::ip_mercator_grid", "structip__mercator__grid__mod_1_1ip__mercator__grid.html", null ], + [ "ip_polar_stereo_grid_mod::ip_polar_stereo_grid", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html", null ], + [ "ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html", null ], + [ "ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html", null ], + [ "ip_station_points_grid_mod::ip_station_points_grid", "structip__station__points__grid__mod_1_1ip__station__points__grid.html", null ] + ] ], + [ "ip_grid_descriptor_mod::ip_grid_descriptor", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html", [ + [ "ip_grid_descriptor_mod::grib1_descriptor", "structip__grid__descriptor__mod_1_1grib1__descriptor.html", null ], + [ "ip_grid_descriptor_mod::grib2_descriptor", "structip__grid__descriptor__mod_1_1grib2__descriptor.html", null ] + ] ], + [ "ipolates_mod::ipolates", "interfaceipolates__mod_1_1ipolates.html", null ], + [ "ipolatev_mod::ipolatev", "interfaceipolatev__mod_1_1ipolatev.html", null ], + [ "ip_grid_descriptor_mod::operator(==)", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html", null ], + [ "ip_grid_mod::operator(==)", "interfaceip__grid__mod_1_1operator_07_0a_0a_08.html", null ], + [ "spectral_interp_mod::polates4", "interfacespectral__interp__mod_1_1polates4.html", null ], + [ "spectral_interp_mod::polatev4", "interfacespectral__interp__mod_1_1polatev4.html", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/index.html b/ver-5.1.0/index.html new file mode 100644 index 00000000..6b7d9944 --- /dev/null +++ b/ver-5.1.0/index.html @@ -0,0 +1,1076 @@ + + + + + + + +NCEPLIBS-ip: Introduction + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Introduction
    +
    +
    + +Previous versions:

    5.0.0, 4.4.0, 4.3.0, 4.2.0, 4.1.0, 4.0.0 + +

    The NCEP general interpolation library (NCEPLIBS-ip) contains Fortran 90 subprograms to be used for interpolating between nearly all grids used at NCEP. The library is particularly efficient when interpolating many fields at one time. It also contains functionality for interpolating, transforming, and otherwise manipulating spectral data (these functions were formerly contained in the NCEPLIBS-sp library).

    +

    NCEPLIBS-ip supports compilation with the GNU Compiler Collection (gfortran), Intel Classic (ifort), and Intel OneAPI (ifx) compilers. In the case of Intel OneAPI (IntelLLVM), it is recommended to use at least version 2023.2.1 to avoid any number of compiler issues.

    +
    Note
    Some routines may behave poorly or unpredictably when using 4-byte reals (libip_4). For instance, there is an ATAN2 function used for polar stereo grids where for certain regions of certain grids, floating point differences between 4-byte output values (~1e-7) can be amplified into sizable differences in output field values. Some applications may therefore benefit from the use of 8-byte reals (libip_d or libip_8).
    +

    NCEPLIBS-ip uses several BLAS/LAPACK routines in the splat() subroutine, and therefore requires an external BLAS/LAPACK provider. In practice, this should generally be OpenBLAS, which is the spack-stack BLAS/LAPACK provider.

    +

    +Interpolation

    +

    +Interpolation Methods

    +

    There are currently six interpolation methods available in the library:

      +
    • bilinear
    • +
    • bicubic
    • +
    • neighbor
    • +
    • budget
    • +
    • spectral
    • +
    • neighbor-budget
    • +
    +

    Some of the methods have interpolation sub-options. A few methods have restrictions on the type of input or output grids.

    +

    Several methods can perform interpolation on fields with bitmaps (i.e. some points on the input grid may be undefined). In this case, the bitmap is interpolated to the output grid. Only valid input points are used to interpolate to valid output points. An output bitmap will also be created to locate invalid data where the output grid extends outside the domain of the input grid.

    +

    The driver routines for interpolating scalars and vectors may be found in ipolates_mod. The interpolation method is chosen via the first argument of these routines (variable IP). Sub-options are set via the IPOPT array.

    +

    +Bilinear Interpolation Method

    +

    Bilinear interpolation is chosen by setting IP=0.

    +

    This method has two sub-options:

    +
      +
    1. The percent of valid input data required to make output data (the default is 50%).
    2. +
    3. If valid input data is not found near an a spiral search may be performed. The spiral search is only an option for scalar data.
    4. +
    +

    The bilinear method has no restrictions and can interpolate with bitmaps.

    +

    +Bicubic Interpolation Method

    +

    Bicubic interpolation is chosen by setting IP=1.

    +

    This method has two sub-options:

    +
      +
    1. A monotonic constraint option for straight bicubic or for constraining the output value to be within the range of the four surrounding input values.
    2. +
    3. The percent of valid input data required to make output data, which defaults to 50%.
    4. +
    +

    The bicubic method cannot interpolate data with bitmaps.

    +

    +Neighbor Interpolation Method

    +

    Neighbor interpolation is chosen by setting IP=2.

    +

    Neighbor interpolation means that the output value is set to the nearest input value. It would be appropriate for interpolating integer fields such as vegetation index.

    +

    This method has one sub-option: If valid input data is not found near an an output point, a spiral search is optionally performed.

    +

    The neighbor method has no restrictions and can interpolate with bitmaps.

    +

    +Budget Interpolation Method

    +

    Budget interpolation is chosen by setting IP=3.

    +

    Budget interpolation means a low-order interpolation method that quasi-conserves area averages. It would be appropriate for interpolating budget fields such as precipitation.

    +

    This method assumes that the field really represents box averages where each box extends halfway to its neighboring grid point in each direction. The method actually averages bilinearly interpolated values in a square array of points distributed within each output grid box.

    +

    There are several sub-options:

    +
      +
    1. The number of points in the radius of the square array may be set. The default is 2, meaning that 25 sample points will be averaged for each output value.
    2. +
    3. The respective averaging weights for the radius points are adjustable. The default is for all weights equal to 1, giving an unweighted average.
    4. +
    5. Optionally, one may assume the boxes stretch nearly all the way to each of the neighboring grid points and the weights are the adjoint of the bilinear interpolation weights.
    6. +
    7. The percent of valid input data required to make output data is adjustable. The default is 50%.
    8. +
    9. In cases where there is no or insufficient valid input data, a spiral search may be invoked to search for the nearest valid data. search square (scalar interpolation only).
    10. +
    +

    This method can interpolate data with bitmaps.

    +

    +Spectral Interpolation Method

    +

    The spectral interpolation scheme is chosen by setting IP=4.

    +

    This method has two sub-options:

    +
      +
    1. set the spectral shape (triangular or rhomboidal)
    2. +
    3. set the spectral truncation.
    4. +
    +

    The input grid must be a global cylindrical grid (either Gaussian or equidistant). This method cannot interpolate data with bitmaps.

    +

    Unless the output grid is a global cylindrical grid, a polar stereographic grid centered at the pole, or a Mercator grid, this method can be quite expensive.

    +

    +Neighbor-Budget Interpolation Method

    +

    Neighbor-budget interpolation is chosen by setting IP=6.

    +

    This method computes weighted averages of neighbor points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points. The main difference with the budget interpolation (IP=3) is neighbor vs bilinear interpolation of the square box of points.

    +

    There are the following sub-options:

    +
      +
    1. The number of points in the radius of the square array may be set. The default is 2, meaning that 25 sample points will be averaged for each output value.
    2. +
    3. The respective averaging weights for the radius points are adjustable. The default is for all weights equal to 1, giving an unweighted average.
    4. +
    5. The percent of valid input data required to make output data is adjustable. The default is 50%.
    6. +
    +

    +Vectors and Scalars

    +

    The library can handle two-dimensional vector fields as well as scalar fields. The input and output vectors are rotated if necessary so that they are either resolved relative to their defined grid in the direction of increasing x and y coordinates or resolved relative to eastward and northward directions on the earth. The rotation is determined by the grid definitions.

    +

    Vectors are generally interpolated (by all methods except spectral interpolation) by moving the relevant input vectors along a great circle to the output point, keeping their orientations with respect to the great circle constant, before independently interpolating the respective components. This ensures that vector interpolation will be consistent over the whole globe including the poles.

    +

    +Grids

    +

    The input and output grids are defined by their respective GRIB2 grid definition template and template number as decoced by the NCEP G2 library. There are six map projections recognized by the library:

    + + + + + + + + + + + + + + + +
    Grid Template Number Map projection
    00 Equidistant cyclindrical
    01 Rotated equidistant cylindrical
    10 Mercator cyclindrical
    20 Polar stereographic azimuthal
    30 Lambert conformal conical
    40 Gaussian equidistant cyclindrical
    +

    If the output grid definition template number is negative, then the output data may be just a set of station points. In this case, the user must pass the number of points to be output along with their latitudes and longitudes.

    +

    For vector interpolation, the vector rotations parameters must also be passed. On the other hand, for non-negative output data representation types, the number of output grid points and their latitudes and longitudes (and the vector rotation parameters for vector interpolation) are all returned by the interpolation subprograms.

    +

    If an output equidistant cylindrical grid contains multiple pole points, then the pole points are forced to be self-consistent. That is, scalar fields are obliged to be constant at the pole and vector components are obliged to exhibit a wavenumber one variation at the pole.

    +

    Generally, only regular grids can be interpolated in this library. However, the thinned WAFS grids may be expanded to a regular grid (or vice versa) using subprograms ipxwafs(), ipxwafs2(), or ipxwafs3(). Eta data (with Arakawa "E" staggering) on the "H" or "V" grid may be expanded to a filled regular grid (or vice versa) using subprogram ipxetas().

    +

    +Return Codes

    +

    The return code issued by an interpolation subprogram determines whether it ran successfully or how it failed. Check nonzero return codes against the docblock of the respective subprogram.

    +

    +Entry point list: interpolation

    +

    Scalar and vecotr field interpolation subprograms can be found in the relevant module documentation:

    + + + + + + + + + + + + + + + + + + + + + + + +
    Name Function
    ipolates_mod Iredell's polate
    bilinear_interp_mod bilinear interpolation
    bicubic_interp_mod bicubic interpolation
    neighbor_interp_mod neighbor interpolation
    budget_interp_mod budget interpolation
    spectral_interp_mod spectral interpolation
    neighbor_budget_interp_mod neighbor-budget interpolation
    polfixs() make multiple pole scalar values consistent
    movect() move a vector along a great circle
    polfixv() make multiple pole vector values consistent
    +

    Grid description section decoders:

    + + + + + + + + + + + + + + + + + + + + + + + +
    Name Function
    gdswzd() grid description section (GDS) wizard
    gdswzd_c() C wrapper for calling gdswzd
    gdswzd_equid_cylind() GDS wizard for equidistant cyclindrical
    gdswzd_mercator() GDS wizard for mercator cyclindrical
    gdswzd_lambert_conf() GDS wizard for lambert conformal conical
    gdswzd_gaussian() GDS wizard for gaussian cyclindrical
    gdswzd_polar_stereo() GDS wizard for polar stereographic
    gdswzd_rot_equid_cylind_egrid() GDS wizard for rotated equidistant cyclindrical "e" stagger.
    gdswzd_rot_equid_cylind() GDS wizard for rotated equidistant cyclindrical non "e" stagger.
    field_pos() return field position for a given grid point
    +

    Transform subprograms for special irregular grids:

    + + + + + + + + + +
    Name Function
    ipxwafs() expand or contract wafs grids
    ipxwafs2() expand or contract wafs grids
    ipxwafs3() expand or contract wafs grids
    +

    +Spectral Transformation & Processing

    +

    The library's spectral processing subroutines can handle both scalar and two-dimensional vector fields. Each vector field will be represented in spectral space appropriately by its respective spherical divergence and curl (vorticity), thus avoiding the pole problems associated with representing components separately.

    +

    Some of the functions performed by the library are spectral interpolations between two grids, spectral truncations in place on a grid, and basic spectral transforms between grid and wave space. Only global Gaussian or global equidistant cylindrical grids are allowed for transforming into wave space. There are no such restricitions on grids for transforming from wave space. However, there are special fast entry points for transforming wave space to polar stereographic and Mercator grids as well as the aforementioned cylindrical grids.

    +

    The indexing of the cylindrical transform grids is totally general. The grids may run north to south or south to north; they may run east to west or west to east; they may start at any longitude as long as the prime meridian is on the grid; they may be dimensioned in any order (e.g. (i,j,k), (k,j,i), (i,k,nfield,j), etc.). Furthermore, the transform may be performed on only some of the latitudes at one time as long as both hemisphere counterparts are transformed at the same time (as in the global spectral model). The grid indexing will default to the customary global indexing, i.e. north to south, east to west, prime meridian as first longitude, and (i,j,k) order.

    +

    The wave space may be either triangular or rhomboidal in shape. Its internal indexing is strictly "IBM order", i.e. zonal wavenumber is the slower index with the real and imaginary components always paired together. The imaginary components of all the zonally symmetric modes should always be zero, as should the global mean of any divergence and vorticity fields. The stride between the start of successive wave fields is general, defaulting to the computed length of each field.

    +

    +Entry Point List: Spectral Interpolation & Transformation

    +

    Spectral interpolations or truncations between grid and grid

    + + + + + + + + + + + + + + + + + + + +
    Name Function
    sptrun() Spectrally truncate gridded scalar fields
    sptrunv() Spectrally truncate gridded vector fields
    sptrung() Spectrally interpolate scalars to stations
    sptrungv() Spectrally interpolate vectors to stations
    sptruns() Spectrally interpolate scalars to polar stereo
    sptrunsv() Spectrally interpolate vectors to polar stereo
    sptrunm() Spectrally interpolate scalars to Mercator
    sptrunmv() Spectrally interpolate vectors to Mercator
    +

    Spectral transforms between wave and grid

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Name Function
    sptran() Perform a scalar spherical transform
    sptranv() Perform a vector spherical transform
    sptrand() Perform a gradient spherical transform
    sptgpt() Transform spectral scalar to station points
    sptgptv() Transform spectral vector to station points
    sptgptd() Transform spectral to station point gradients
    sptgps() Transform spectral scalar to polar stereo
    sptgpsv() Transform spectral vector to polar stereo
    sptgpsd() Transform spectral to polar stereo gradients
    sptgpm() Transform spectral scalar to Mercator
    sptgpmv() Transform spectral vector to Mercator
    sptgpmd() Transform spectral to Mercator gradients
    +

    Spectral transform utilities

    + + + + + + + + + + + + + + + + + + + + + + + +
    Name Function
    spwget() Get wave-space constants
    splat() Compute latitude functions
    speps() Compute utility spectral fields
    splegend() Compute Legendre polynomials
    spanaly() Analyze spectral from Fourier
    spsynth() Synthesize Fourier from spectral
    spdz2uv() Compute winds from divergence and vorticity
    spuv2dz() Compute divergence and vorticity from winds
    spgradq() Compute gradient in spectral space
    splaplac() Compute Laplacian in spectral space
    +

    +Examples: Interpolation Routines

    +

    Example 1. Read a grib 2 file of scalar data on a global regular 1-deg lat/lon grid and call ipolates to interpolate it to NCEP standard grid 218, a lambert conformal grid. Uses the NCEP G2 library to degrib the data.

    +
    program example_1
    +
    +
    use ip_mod
    +
    use grib_mod ! ncep grib 2 library
    +
    +
    implicit none
    +
    +
    character(len=100) :: input_file
    +
    +
    integer :: iunit, iret, lugi
    +
    integer :: mi, mo, no
    +
    integer, allocatable :: ibi(:), ibo(:)
    +
    integer :: ip, ipopt(20)
    +
    integer :: j, jdisc, jpdtn, jgdtn, k, km
    +
    integer :: jids(200), jgdt(200), jpdt(200)
    +
    integer :: idim_input, jdim_input
    +
    integer :: idim_output, jdim_output
    +
    +
    logical :: unpack
    +
    logical*1, allocatable :: input_bitmap(:,:), output_bitmap(:,:)
    +
    +
    real, allocatable :: input_data(:,:)
    +
    real, allocatable :: output_rlat(:), output_rlon(:)
    +
    real, allocatable :: output_data(:,:)
    +
    +
    type(gribfield) :: gfld_input
    +
    +
    !---------------------------------------------------------------------------
    +
    ! the output grid specs. this is ncep grid 218, a lambert conformal
    +
    ! grid. the grid definition information is stored in section 3
    +
    ! of a grib 2 message.
    +
    !---------------------------------------------------------------------------
    +
    +
    integer, parameter :: igdtnum218 = 30 ! grid definition template number.
    +
    ! "30" is lambert conformal.
    +
    integer, parameter :: igdtlen218 = 22 ! number of array elements needed
    +
    ! for a lambert conf. grid definition
    +
    ! template.
    +
    integer :: igdtmpl218(igdtlen218) ! the grid definition template.
    +
    ! the entries are:
    +
    ! 1 -shape of earth, oct 15
    +
    ! 2 -scale factor, spherical earth, oct 16
    +
    ! 3 -scaled value, spherical earth, octs 17-20
    +
    ! 4 -scale factor, major axis of
    +
    ! elliptical earth, oct 21
    +
    ! 5 -scaled value of major axis of
    +
    ! elliptical earth, octs 22-25
    +
    ! 6 -scale factor, minor axis of
    +
    ! elliptical earth, oct 26
    +
    ! 7 -scaled value of minor axis of
    +
    ! elliptical earth, octs 27-30
    +
    ! 8 -number points along x-axis, octs 31-34
    +
    ! 9 -number points along y-axis, octs 35-38
    +
    ! 10-latitude of first point, octs 39-42
    +
    ! 11-longitude of first point, octs 43-46
    +
    ! 12-resolution and component flags, oct 47
    +
    ! 13-latitude where grid lengths specified,
    +
    ! octs 48-51
    +
    ! 14-longitude parallel to y-axis, octs 52-55
    +
    ! 15-x-direction grid length, octs 56-59
    +
    ! 16-y-direction grid length, octs 60-63
    +
    ! 17-projection center flag, oct 64
    +
    ! 18-scanning mode, oct 65
    +
    ! 19-first tangent latitude from pole, octs 66-69
    +
    ! 20-second tangent latitude from pole, octs 70-73
    +
    ! 21-latitude of south pole, octs 74-77
    +
    ! 22-longitude of south pole, octs 78-81
    +
    +
    integer, parameter :: missing=b'11111111111111111111111111111111'
    +
    data igdtmpl218 / 6, 255, missing, 255, missing, 255, missing, 614, 428, &
    +
    12190000, 226541000, 56, 25000000, 265000000, &
    +
    12191000, 12191000, 0, 64, 25000000, 25000000, -90000000, 0/
    +
    +
    !---------------------------------------------------------------------------
    +
    ! open the grib 2 file containing data to be interpolated. for this
    +
    ! example, there are two data records.
    +
    !---------------------------------------------------------------------------
    +
    +
    iunit=9
    +
    input_file="${path}/input.data.grib2"
    +
    call baopenr (iunit, input_file, iret)
    +
    +
    !---------------------------------------------------------------------------
    +
    ! prep for call to g2 library to degrib data. the data are on a regular
    +
    ! lat/lon grid with i/j dimension of 360/181.
    +
    !---------------------------------------------------------------------------
    +
    +
    idim_input = 360 ! the i/j dimensions of input grid
    +
    jdim_input = 181
    +
    mi = idim_input * jdim_input ! total number of pts, input grid
    +
    +
    jdisc = -1 ! search for any discipline
    +
    jpdtn = -1 ! search for any product definition template number
    +
    jgdtn = 0 ! search for grid definition template number 0 - regular lat/lon grid
    +
    jids = -9999 ! array of values in identification section, set to wildcard
    +
    jgdt = -9999 ! array of values in grid definition template 3.m
    +
    jgdt(8) = idim_input ! search for grid with i/j of 360/181
    +
    jgdt(9) = jdim_input
    +
    jpdt = -9999 ! array of values in product definition template 4.n
    +
    unpack = .true. ! unpack data
    +
    lugi = 0 ! no index file
    +
    +
    nullify(gfld_input%idsect)
    +
    nullify(gfld_input%local)
    +
    nullify(gfld_input%list_opt)
    +
    nullify(gfld_input%igdtmpl) ! holds the grid definition template information
    +
    nullify(gfld_input%ipdtmpl)
    +
    nullify(gfld_input%coord_list)
    +
    nullify(gfld_input%idrtmpl)
    +
    nullify(gfld_input%bmap) ! holds the bitmap
    +
    nullify(gfld_input%fld) ! holds the data
    +
    +
    !---------------------------------------------------------------------------
    +
    ! degrib the data. non-zero "iret" indicates a problem during degrib.
    +
    !---------------------------------------------------------------------------
    +
    +
    km = 2 ! number of records to interpolate
    +
    +
    allocate(ibi(km))
    +
    allocate(input_bitmap(mi,km))
    +
    allocate(input_data(mi,km))
    +
    +
    do j = 0, (km-1) ! number of records to skip
    +
    +
    call getgb2(iunit, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
    +
    unpack, k, gfld_input, iret)
    +
    +
    if (iret /= 0) stop
    +
    +
    !---------------------------------------------------------------------------
    +
    ! does input data have a bitmap?
    +
    !---------------------------------------------------------------------------
    +
    +
    if (gfld_input%ibmap==0) then ! input data has bitmap
    +
    ibi(k) = 1 ! tell ipolates to use bitmap
    +
    input_bitmap(:,k) = gfld_input%bmap
    +
    else ! no bitmap, data everywhere
    +
    ibi(k) = 0 ! tell ipolates there is no bitmap
    +
    input_bitmap(:,k) = .true.
    +
    endif
    +
    +
    input_data(:,k) = gfld_input%fld ! the input data field
    +
    +
    enddo
    +
    +
    call baclose (iunit, iret)
    +
    +
    !---------------------------------------------------------------------------
    +
    ! setup arguments for ipolates (scalar interpolation) call.
    +
    !---------------------------------------------------------------------------
    +
    +
    ip = 0 ! bilinear interpolation
    +
    ipopt = 0 ! options for bilinear:
    +
    ipopt(1) = 75 ! set minimum mask to 75%
    +
    +
    !---------------------------------------------------------------------------
    +
    ! the i/j dimensions of the output grid.
    +
    !---------------------------------------------------------------------------
    +
    +
    idim_output = igdtmpl218(8)
    +
    jdim_output = igdtmpl218(9)
    +
    mo = idim_output * jdim_output ! total number of output pts
    +
    +
    !---------------------------------------------------------------------------
    +
    ! will hold the latitude, longitude, data and bitmap on the output grid,
    +
    ! which are computed in ipolates.
    +
    !---------------------------------------------------------------------------
    +
    +
    allocate (ibo(km)) ! bitmap flags on output grid
    +
    allocate (output_rlat(mo))
    +
    allocate (output_rlon(mo))
    +
    allocate (output_data(mo,km))
    +
    allocate (output_bitmap(mo,km))
    +
    +
    !---------------------------------------------------------------------------
    +
    ! call ipolates to interpolate scalar data. non-zero "iret" indicates
    +
    ! a problem.
    +
    !---------------------------------------------------------------------------
    +
    +
    call ipolates(ip, ipopt, gfld_input%igdtnum, gfld_input%igdtmpl, &
    +
    gfld_input%igdtlen, igdtnum218, igdtmpl218, igdtlen218, &
    +
    mi, mo, km, ibi, input_bitmap, input_data, no, output_rlat, &
    +
    output_rlon, ibo, output_bitmap, output_data, iret)
    +
    +
    if (iret /= 0) stop
    +
    +
    !---------------------------------------------------------------------------
    +
    ! write interpolated data to file. if ipolates computed a bitmap (ibo==1)
    +
    ! for the output grid, one may mask out this data with a flag value.
    +
    !---------------------------------------------------------------------------
    +
    +
    open (10, file="./output.bin", access='direct', recl=idim_output*jdim_output*4)
    +
    +
    do k = 1, km
    +
    if(ibo(k)==1) where (.not. output_bitmap(:,k)) output_data(:,k) = -999.
    +
    write(10, rec=k) output_data(:,k)
    +
    enddo
    +
    write(10, rec=km+1) output_rlat
    +
    write(10, rec=km+2) output_rlon
    +
    +
    close(10)
    +
    +
    end program example_1
    +
    Top-level module for the ip library which re-exports public routines such as ipolates,...
    Definition: ip_mod.F90:6
    +

    Example 2. Read a grib 2 file of u/v wind data on a global regular 1-deg lat/lon grid and call ipolatev to interpolate it to four random station points. Uses the NCEP G2 library to degrib the data.

    +
    program example_2
    +
    +
    use grib_mod ! ncep grib 2 library
    +
    +
    implicit none
    +
    +
    character(len=100) :: input_file
    +
    +
    integer :: iunit, iret, lugi
    +
    integer :: mi, mo, no
    +
    integer :: ibi, ibo
    +
    integer :: ip, ipopt(20)
    +
    integer :: j, jdisc, jpdtn, jgdtn, k, km
    +
    integer :: jids(200), jgdt(200), jpdt(200)
    +
    integer :: idim_input, jdim_input
    +
    +
    logical :: unpack
    +
    logical*1, allocatable :: input_bitmap(:), output_bitmap(:)
    +
    +
    real, allocatable :: input_u_data(:), input_v_data(:)
    +
    real, allocatable :: output_rlat(:), output_rlon(:)
    +
    real, allocatable :: output_crot(:), output_srot(:)
    +
    real, allocatable :: output_u_data(:), output_v_data(:)
    +
    +
    type(gribfield) :: gfld_input
    +
    +
    !---------------------------------------------------------------------------
    +
    ! the output "grid" is a series of random station points. in this case,
    +
    ! set the grid definition template number of a negative number.
    +
    ! the grid definition template array information is not used, so set
    +
    ! to a flag value.
    +
    !---------------------------------------------------------------------------
    +
    +
    integer, parameter :: igdtnumo = -1
    +
    integer, parameter :: igdtleno = 1
    +
    integer :: igdtmplo(igdtleno)
    +
    +
    data igdtmplo / -9999 /
    +
    +
    !---------------------------------------------------------------------------
    +
    ! open the grib 2 file containing data to be interpolated. for this
    +
    ! example, there is one record of u-wind and v-wind.
    +
    !---------------------------------------------------------------------------
    +
    +
    iunit=9
    +
    input_file="./reg_tests/copygb2/data/uv_wind.grb2"
    +
    call baopenr (iunit, input_file, iret)
    +
    +
    !---------------------------------------------------------------------------
    +
    ! prep for call to g2 library to degrib data. the data are on a regular
    +
    ! lat/lon grid with i/j dimension of 360/181.
    +
    !---------------------------------------------------------------------------
    +
    +
    idim_input = 360 ! the i/j dimensions of input grid
    +
    jdim_input = 181
    +
    mi = idim_input * jdim_input ! total number of pts, input grid
    +
    +
    jdisc = -1 ! search for any discipline
    +
    jpdtn = -1 ! search for any product definition template number
    +
    jgdtn = 0 ! search for grid definition template number 0 - regular lat/lon grid
    +
    jids = -9999 ! array of values in identification section, set to wildcard
    +
    jgdt = -9999 ! array of values in grid definition template 3.m
    +
    jgdt(8) = idim_input ! search for grid with i/j of 360/181
    +
    jgdt(9) = jdim_input
    +
    jpdt = -9999 ! array of values in product definition template 4.n
    +
    unpack = .true. ! unpack data
    +
    lugi = 0 ! no index file
    +
    +
    nullify(gfld_input%idsect)
    +
    nullify(gfld_input%local)
    +
    nullify(gfld_input%list_opt)
    +
    nullify(gfld_input%igdtmpl) ! holds the grid definition template information
    +
    nullify(gfld_input%ipdtmpl)
    +
    nullify(gfld_input%coord_list)
    +
    nullify(gfld_input%idrtmpl)
    +
    nullify(gfld_input%bmap) ! holds the bitmap
    +
    nullify(gfld_input%fld) ! holds the data
    +
    +
    !---------------------------------------------------------------------------
    +
    ! degrib the data. non-zero "iret" indicates a problem during degrib.
    +
    !---------------------------------------------------------------------------
    +
    +
    allocate(input_bitmap(mi))
    +
    allocate(input_u_data(mi))
    +
    allocate(input_v_data(mi))
    +
    +
    !---------------------------------------------------------------------------
    +
    ! read u-wind record.
    +
    !---------------------------------------------------------------------------
    +
    +
    j = 0
    +
    call getgb2(iunit, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
    +
    unpack, k, gfld_input, iret)
    +
    +
    if (iret /= 0) stop
    +
    +
    !---------------------------------------------------------------------------
    +
    ! does input data have a bitmap?
    +
    !---------------------------------------------------------------------------
    +
    +
    if (gfld_input%ibmap==0) then ! input data has bitmap
    +
    ibi = 1 ! tell ipolates to use bitmap
    +
    input_bitmap = gfld_input%bmap
    +
    else ! no bitmap, data everywhere
    +
    ibi = 0 ! tell ipolates there is no bitmap
    +
    input_bitmap = .true.
    +
    endif
    +
    +
    input_u_data = gfld_input%fld ! the input u-wind data
    +
    +
    !---------------------------------------------------------------------------
    +
    ! read v-wind record.
    +
    !---------------------------------------------------------------------------
    +
    +
    j = 1
    +
    call getgb2(iunit, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
    +
    unpack, k, gfld_input, iret)
    +
    +
    if (iret /= 0) stop
    +
    +
    input_v_data = gfld_input%fld ! the input v-wind data
    +
    +
    call baclose (iunit, iret)
    +
    +
    !---------------------------------------------------------------------------
    +
    ! setup arguments for ipolatev (vector interpolation) call.
    +
    !---------------------------------------------------------------------------
    +
    +
    km = 1 ! number of records to interpolate
    +
    ip = 0 ! bilinear interpolation
    +
    ipopt = 0 ! options for bilinear:
    +
    ipopt(1) = 75 ! set minimum mask to 75%
    +
    +
    !---------------------------------------------------------------------------
    +
    ! interpolate to four random station points.
    +
    !---------------------------------------------------------------------------
    +
    +
    mo = 4
    +
    no = mo
    +
    +
    !---------------------------------------------------------------------------
    +
    ! when interpolating to random station points, need to pass to ipolatev
    +
    ! their latitude, longitude and the sines and cosines of the vector
    +
    ! rotation angles. the vector rotation is defined:
    +
    !
    +
    ! ugrid=crot*uearth-sort*vearth
    +
    ! vgrid=srot*uearth+cort*vearth
    +
    !---------------------------------------------------------------------------
    +
    +
    allocate (output_rlat(mo))
    +
    allocate (output_rlon(mo))
    +
    allocate (output_srot(mo))
    +
    allocate (output_crot(mo))
    +
    allocate (output_u_data(mo))
    +
    allocate (output_v_data(mo))
    +
    allocate (output_bitmap(mo))
    +
    +
    output_rlat(1) = 45.0
    +
    output_rlon(1) = -100.0
    +
    output_rlat(2) = 35.0
    +
    output_rlon(2) = -100.0
    +
    output_rlat(3) = 40.0
    +
    output_rlon(3) = -90.0
    +
    output_rlat(4) = 35.0
    +
    output_rlon(4) = -120.0
    +
    +
    output_srot = 0.0 ! no turning of wind
    +
    output_crot = 1.0
    +
    +
    !---------------------------------------------------------------------------
    +
    ! call ipolatev to interpolate vector data. non-zero "iret" indicates
    +
    ! a problem.
    +
    !---------------------------------------------------------------------------
    +
    +
    call ipolatev(ip, ipopt, gfld_input%igdtnum, gfld_input%igdtmpl, &
    +
    gfld_input%igdtlen, igdtnumo, igdtmplo, igdtleno, &
    +
    mi, mo, km, ibi, input_bitmap, input_u_data, input_v_data, &
    +
    no, output_rlat, output_rlon, output_crot, output_srot, &
    +
    ibo, output_bitmap, output_u_data, output_v_data, iret)
    +
    +
    if (iret /= 0) stop
    +
    +
    do k = 1, mo
    +
    print*,'station point ',k,' latitude ',output_rlat(k),' longitude ', &
    +
    output_rlon(k), ' u-wind ', output_u_data(k), ' v-wind ', output_v_data(k)
    +
    enddo
    +
    +
    end program example_2
    +

    +Examples: Spectral Processing & Transformation

    +

    Example 1. Interpolate heights and winds from a latlon grid to two antipodal polar stereographic grids. Subprograms GETGB and PUTGB from w3lib are referenced.

    +
    c unit number 11 is the input latlon grib file
    +
    c unit number 31 is the input latlon grib index file
    +
    c unit number 51 is the output northern polar stereographic grib file
    +
    c unit number 52 is the output southern polar stereographic grib file
    +
    c nominal spectral truncation is r40
    +
    c maximum input gridsize is 360x181
    +
    c maximum number of levels wanted is 12
    +
    parameter(lug=11,lui=31,lun=51,lus=52)
    +
    parameter(iromb=1,maxwv=40,jf=360*181,kx=12)
    +
    integer kp5(kx),kp6(kx),kp7(kx)
    +
    integer kpo(kx)
    +
    data kpo/1000,850,700,500,400,300,250,200,150,100,70,50/
    +
    c height
    +
    km=12
    +
    kp5=7
    +
    kp6=100
    +
    kp7=kpo
    +
    call gs65(lug,lui,lun,lus,jf,km,kp5,kp6,kp7,iromb,maxwv)
    +
    c winds
    +
    km=12
    +
    kp5=33
    +
    kp6=100
    +
    kp7=kpo
    +
    call gv65(lug,lui,lun,lus,jf,km,kp5,kp6,kp7,iromb,maxwv)
    +
    c
    +
    stop
    +
    end
    +
    c
    +
    subroutine gs65(lug,lui,lun,lus,jf,km,kp5,kp6,kp7,iromb,maxwv)
    +
    c interpolates a scalar field using spectral transforms.
    +
    integer kp5(km),kp6(km),kp7(km)
    +
    c output grids are 65x65 (381 km true at latitide 60).
    +
    c nh grid oriented at 280E; sh grid oriented at 100E.
    +
    parameter(nph=32,nps=2*nph+1,npq=nps*nps)
    +
    parameter(true=60.,xmesh=381.e3,orient=280.)
    +
    parameter(rerth=6.3712e6)
    +
    parameter(pi=3.14159265358979,dpr=180./pi)
    +
    real gn(npq,km),gs(npq,km)
    +
    integer jpds(25),jgds(22),kpds(25,km),kgds(22,km)
    +
    logical lb(jf)
    +
    real f(jf,km)
    +
    c
    +
    g2=((1.+sin(abs(true)/dpr))*rerth/xmesh)**2
    +
    r2=2*nph**2
    +
    rlatn1=dpr*asin((g2-r2)/(g2+r2))
    +
    rlonn1=mod(orient+315,360.)
    +
    rlats1=-rlatn1
    +
    rlons1=mod(rlonn1+270,360.)
    +
    jpds=-1
    +
    do k=1,km
    +
    jpds(5)=kp5(k)
    +
    jpds(6)=kp6(k)
    +
    jpds(7)=kp7(k)
    +
    j=0
    +
    call getgb(lug,lui,jf,j,jpds,jgds,kf,j,kpds(1,k),kgds(1,k),
    +
    & lb,f(1,k),iret)
    +
    if(iret.ne.0) call exit(1)
    +
    if(mod(kpds(4,k)/64,2).eq.1) call exit(2)
    +
    enddo
    +
    idrt=kgds(1,1)
    +
    imax=kgds(2,1)
    +
    jmax=kgds(3,1)
    +
    c
    +
    call sptruns(iromb,maxwv,idrt,imax,jmax,km,nps,
    +
    & 0,0,0,jf,0,0,0,0,true,xmesh,orient,f,gn,gs)
    +
    c
    +
    do k=1,km
    +
    kpds(3,k)=27
    +
    kgds(1,k)=5
    +
    kgds(2,k)=nps
    +
    kgds(3,k)=nps
    +
    kgds(4,k)=nint(rlatn1*1.e3)
    +
    kgds(5,k)=nint(rlonn1*1.e3)
    +
    kgds(6,k)=8
    +
    kgds(7,k)=nint(orient*1.e3)
    +
    kgds(8,k)=nint(xmesh)
    +
    kgds(9,k)=nint(xmesh)
    +
    kgds(10,k)=0
    +
    kgds(11,k)=64
    +
    call putgb(lun,npq,kpds(1,k),kgds(1,k),lb,gn(1,k),iret)
    +
    enddo
    +
    do k=1,km
    +
    kpds(3,k)=28
    +
    kgds(1,k)=5
    +
    kgds(2,k)=nps
    +
    kgds(3,k)=nps
    +
    kgds(4,k)=nint(rlats1*1.e3)
    +
    kgds(5,k)=nint(rlons1*1.e3)
    +
    kgds(6,k)=8
    +
    kgds(7,k)=nint(mod(orient+180,360.)*1.e3)
    +
    kgds(8,k)=nint(xmesh)
    +
    kgds(9,k)=nint(xmesh)
    +
    kgds(10,k)=128
    +
    kgds(11,k)=64
    +
    call putgb(lus,npq,kpds(1,k),kgds(1,k),lb,gs(1,k),iret)
    +
    enddo
    +
    c
    +
    end
    +
    c
    +
    subroutine gv65(lug,lui,lun,lus,jf,km,kp5,kp6,kp7,iromb,maxwv)
    +
    c interpolates a vector field using spectral transforms.
    +
    integer kp5(km),kp6(km),kp7(km)
    +
    c output grids are 65x65 (381 km true at latitide 60).
    +
    c nh grid oriented at 280E; sh grid oriented at 100E.
    +
    c winds are rotated to be relative to grid coordinates.
    +
    parameter(nph=32,nps=2*nph+1,npq=nps*nps)
    +
    parameter(true=60.,xmesh=381.e3,orient=280.)
    +
    parameter(rerth=6.3712e6)
    +
    parameter(pi=3.14159265358979,dpr=180./pi)
    +
    real un(npq,km),vn(npq,km),us(npq,km),vs(npq,km)
    +
    integer jpds(25),jgds(22),kpds(25,km),kgds(22,km)
    +
    logical lb(jf)
    +
    real u(jf,km),v(jf,km)
    +
    c
    +
    g2=((1.+sin(abs(true)/dpr))*rerth/xmesh)**2
    +
    r2=2*nph**2
    +
    rlatn1=dpr*asin((g2-r2)/(g2+r2))
    +
    rlonn1=mod(orient+315,360.)
    +
    rlats1=-rlatn1
    +
    rlons1=mod(rlonn1+270,360.)
    +
    jpds=-1
    +
    do k=1,km
    +
    jpds(5)=kp5(k)
    +
    jpds(6)=kp6(k)
    +
    jpds(7)=kp7(k)
    +
    j=0
    +
    call getgb(lug,lui,jf,j,jpds,jgds,kf,j,kpds(1,k),kgds(1,k),
    +
    & lb,u(1,k),iret)
    +
    if(iret.ne.0) call exit(1)
    +
    if(mod(kpds(4,k)/64,2).eq.1) call exit(2)
    +
    jpds=kpds(:,k)
    +
    jgds=kgds(:,k)
    +
    jpds(5)=jpds(5)+1
    +
    j=0
    +
    call getgb(lug,lui,jf,j,jpds,jgds,kf,j,kpds(1,k),kgds(1,k),
    +
    & lb,v(1,k),iret)
    +
    if(iret.ne.0) call exit(1)
    +
    if(mod(kpds(4,k)/64,2).eq.1) call exit(2)
    +
    enddo
    +
    idrt=kgds(1,1)
    +
    imax=kgds(2,1)
    +
    jmax=kgds(3,1)
    +
    c
    +
    call sptrunsv(iromb,maxwv,idrt,imax,jmax,km,nps,
    +
    & 0,0,0,jf,0,0,0,0,true,xmesh,orient,u,v,
    +
    & .true.,un,vn,us,vs,.false.,dum,dum,dum,dum,
    +
    & .false.,dum,dum,dum,dum)
    +
    c
    +
    do k=1,km
    +
    kpds(3,k)=27
    +
    kgds(1,k)=5
    +
    kgds(2,k)=nps
    +
    kgds(3,k)=nps
    +
    kgds(4,k)=nint(rlatn1*1.e3)
    +
    kgds(5,k)=nint(rlonn1*1.e3)
    +
    kgds(6,k)=8
    +
    kgds(7,k)=nint(orient*1.e3)
    +
    kgds(8,k)=nint(xmesh)
    +
    kgds(9,k)=nint(xmesh)
    +
    kgds(10,k)=0
    +
    kgds(11,k)=64
    +
    kpds(5,k)=kp5(k)
    +
    call putgb(lun,npq,kpds(1,k),kgds(1,k),lb,un(1,k),iret)
    +
    enddo
    +
    do k=1,km
    +
    kpds(3,k)=27
    +
    kgds(1,k)=5
    +
    kgds(2,k)=nps
    +
    kgds(3,k)=nps
    +
    kgds(4,k)=nint(rlatn1*1.e3)
    +
    kgds(5,k)=nint(rlonn1*1.e3)
    +
    kgds(6,k)=8
    +
    kgds(7,k)=nint(orient*1.e3)
    +
    kgds(8,k)=nint(xmesh)
    +
    kgds(9,k)=nint(xmesh)
    +
    kgds(10,k)=0
    +
    kgds(11,k)=64
    +
    kpds(5,k)=kp5(k)+1
    +
    call putgb(lun,npq,kpds(1,k),kgds(1,k),lb,vn(1,k),iret)
    +
    enddo
    +
    do k=1,km
    +
    kpds(3,k)=28
    +
    kgds(1,k)=5
    +
    kgds(2,k)=nps
    +
    kgds(3,k)=nps
    +
    kgds(4,k)=nint(rlats1*1.e3)
    +
    kgds(5,k)=nint(rlons1*1.e3)
    +
    kgds(6,k)=8
    +
    kgds(7,k)=nint(mod(orient+180,360.)*1.e3)
    +
    kgds(8,k)=nint(xmesh)
    +
    kgds(9,k)=nint(xmesh)
    +
    kgds(10,k)=128
    +
    kgds(11,k)=64
    +
    kpds(5,k)=kp5(k)
    +
    call putgb(lus,npq,kpds(1,k),kgds(1,k),lb,us(1,k),iret)
    +
    enddo
    +
    do k=1,km
    +
    kpds(3,k)=28
    +
    kgds(1,k)=5
    +
    kgds(2,k)=nps
    +
    kgds(3,k)=nps
    +
    kgds(4,k)=nint(rlats1*1.e3)
    +
    kgds(5,k)=nint(rlons1*1.e3)
    +
    kgds(6,k)=8
    +
    kgds(7,k)=nint(mod(orient+180,360.)*1.e3)
    +
    kgds(8,k)=nint(xmesh)
    +
    kgds(9,k)=nint(xmesh)
    +
    kgds(10,k)=128
    +
    kgds(11,k)=64
    +
    kpds(5,k)=kp5(k)+1
    +
    call putgb(lus,npq,kpds(1,k),kgds(1,k),lb,vs(1,k),iret)
    +
    enddo
    +
    c
    +
    end
    +
    subroutine sptruns(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NPS, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, TRUE, XMESH, ORIENT, GRIDI, GN, GS)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptruns.f:75
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunsv.f:94
    +

    Example 2. Spectrally truncate winds in place on a latlon grid.

    +
    c unit number 11 is the input latlon grib file
    +
    c unit number 31 is the input latlon grib index file
    +
    c unit number 51 is the output latlon grib file
    +
    c nominal spectral truncation is r40
    +
    c maximum input gridsize is 360x181
    +
    c maximum number of levels wanted is 12
    +
    parameter(lug=11,lui=31,luo=51)
    +
    parameter(iromb=1,maxwv=40,jf=360*181,kx=12)
    +
    integer kp5(kx),kp6(kx),kp7(kx)
    +
    integer kpo(kx)
    +
    data kpo/1000,850,700,500,400,300,250,200,150,100,70,50/
    +
    c winds
    +
    km=12
    +
    kp5=33
    +
    kp6=100
    +
    kp7=kpo
    +
    call gvr40(lug,lui,luo,jf,km,kp5,kp6,kp7,iromb,maxwv)
    +
    c
    +
    stop
    +
    end
    +
    c
    +
    subroutine gvr40(lug,lui,luo,jf,km,kp5,kp6,kp7,iromb,maxwv)
    +
    c interpolates a vector field using spectral transforms.
    +
    integer kp5(km),kp6(km),kp7(km)
    +
    integer jpds(25),jgds(22),kpds(25,km),kgds(22,km)
    +
    logical lb(jf)
    +
    real u(jf,km),v(jf,km)
    +
    c
    +
    jpds=-1
    +
    do k=1,km
    +
    jpds(5)=kp5(k)
    +
    jpds(6)=kp6(k)
    +
    jpds(7)=kp7(k)
    +
    j=0
    +
    call getgb(lug,lui,jf,j,jpds,jgds,kf,j,kpds(1,k),kgds(1,k),
    +
    & lb,u(1,k),iret)
    +
    if(iret.ne.0) call exit(1)
    +
    if(mod(kpds(4,k)/64,2).eq.1) call exit(2)
    +
    jpds=kpds(:,k)
    +
    jgds=kgds(:,k)
    +
    jpds(5)=jpds(5)+1
    +
    j=0
    +
    call getgb(lug,lui,jf,j,jpds,jgds,kf,j,kpds(1,k),kgds(1,k),
    +
    & lb,v(1,k),iret)
    +
    if(iret.ne.0) call exit(1)
    +
    if(mod(kpds(4,k)/64,2).eq.1) call exit(2)
    +
    enddo
    +
    idrt=kgds(1,1)
    +
    imax=kgds(2,1)
    +
    jmax=kgds(3,1)
    +
    c
    +
    call sptrunv(iromb,maxwv,idrt,imax,jmax,idrt,imax,jmax,km,
    +
    & 0,0,0,jf,0,0,jf,0,u,v,.true.,u,v,
    +
    & .false.,dum,dum,.false.,dum,dum)
    +
    c
    +
    do k=1,km
    +
    kpds(5,k)=kp5(k)
    +
    call putgb(luo,kf,kpds(1,k),kgds(1,k),lb,u(1,k),iret)
    +
    enddo
    +
    do k=1,km
    +
    kpds(5,k)=kp5(k)+1
    +
    call putgb(luo,kf,kpds(1,k),kgds(1,k),lb,v(1,k),iret)
    +
    enddo
    +
    c
    +
    end
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunv.f:96
    +

    Example 3. Compute latlon temperatures from spectral temperatures and compute latlon winds from spectral divergence and vorticity.

    +
    c unit number 11 is the input sigma file
    +
    c unit number 51 is the output latlon file
    +
    c nominal spectral truncation is t62
    +
    c output gridsize is 144x73
    +
    c number of levels is 28
    +
    parameter(iromb=0,maxwv=62)
    +
    parameter(idrt=0,im=144,jm=73)
    +
    parameter(levs=28)
    +
    parameter(mx=(maxwv+1)*((iromb+1)*maxwv+2)/2)
    +
    real t(mx,levs),d(mx,levs),z(mx,levs)
    +
    real tg(im,jm,km),ug(im,jm,km),vg(im,jm,km)
    +
    c temperature
    +
    do k=1,4
    +
    read(11)
    +
    enddo
    +
    do k=1,levs
    +
    read(11) (t(m,k),m=1,mx)
    +
    enddo
    +
    call sptran(iromb,maxwv,idrt,im,jm,levs,0,0,0,0,0,0,0,0,1,
    +
    & t,tg(1,1,1),tg(1,jm,1),1)
    +
    call sptran(
    +
    do k=1,levs
    +
    write(51) ((tg(i,j,k),i=1,im),j=1,jm)
    +
    enddo
    +
    c winds
    +
    do k=1,levs
    +
    read(11) (d(m,k),m=1,mx)
    +
    read(11) (z(m,k),m=1,mx)
    +
    enddo
    +
    call sptranv(iromb,maxwv,idrt,im,jm,levs,0,0,0,0,0,0,0,0,1,
    +
    & d,z,ug(1,1,1),ug(1,jm,1),vg(1,1,1),vg(1,jm,1),1)
    +
    do k=1,levs
    +
    write(51) ((ug(i,j,k),i=1,im),j=1,jm)
    +
    write(51) ((vg(i,j,k),i=1,im),j=1,jm)
    +
    enddo
    +
    end
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    +
    +
    +

    + + + + diff --git a/ver-5.1.0/interfacebicubic__interp__mod_1_1interpolate__bicubic.html b/ver-5.1.0/interfacebicubic__interp__mod_1_1interpolate__bicubic.html new file mode 100644 index 00000000..c8d35bcd --- /dev/null +++ b/ver-5.1.0/interfacebicubic__interp__mod_1_1interpolate__bicubic.html @@ -0,0 +1,473 @@ + + + + + + + +NCEPLIBS-ip: bicubic_interp_mod::interpolate_bicubic Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    bicubic_interp_mod::interpolate_bicubic Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine interpolate_bicubic_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram performs bicubic interpolation from any grid to any grid for scalar fields. More...
     
    subroutine interpolate_bicubic_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram performs bicubic interpolation from any grid to any grid for vector fields. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 17 of file bicubic_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ interpolate_bicubic_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.

    +

    Bitmaps are now allowed even when invalid points are within the bicubic template provided the minimum weight is reached.

    +

    Options allow choices between straight bicubic (ipopt(1)=0) and constrained bicubic (ipopt(1)=1) where the value is confined within the range of the surrounding 16 points.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(2)) which defaults to 50 (if ipopt(2)=-1).

    +

    Bilinear used within one grid length of boundaries. Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where for the input and output grids, respectively: as an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input. output bitmaps will only be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipoptInterpolation options.
      +
    • ipopt(1)=0 For straight bicubic;
    • +
    • ipopt(1)=1 For constrained bicubic where value is confined within the range of the surrounding 4 points.
    • +
    • ipopt(2) Is minimum percentage for mask (defaults to 50 if ipopt(2)=-1)
    • +
    +
    [in]grid_inInput grid.
    [in]grid_outOutput grid.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]giInput fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0).
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0).
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 successful interpolation,
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 80 of file bicubic_interp_mod.F90.

    + +

    References polfix_mod::polfixs().

    + +
    +
    + +

    ◆ interpolate_bicubic_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_vector (integer, dimension(20), intent(in) ipopt,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) mi,
    integer, intent(in) mo,
    integer, intent(in) km,
    integer, dimension(km), intent(in) ibi,
    logical*1, dimension(mi,km), intent(in) li,
    real, dimension(mi,km), intent(in) ui,
    real, dimension(mi,km), intent(in) vi,
    integer, intent(inout) no,
    real, dimension(mo), intent(inout) rlat,
    real, dimension(mo), intent(inout) rlon,
    real, dimension(mo), intent(inout) crot,
    real, dimension(mo), intent(inout) srot,
    integer, dimension(km), intent(out) ibo,
    logical*1, dimension(mo,km), intent(out) lo,
    real, dimension(mo,km), intent(out) uo,
    real, dimension(mo,km), intent(out) vo,
    integer, intent(out) iret 
    )
    +
    +private
    +
    + +

    This subprogram performs bicubic interpolation from any grid to any grid for vector fields.

    +

    Bitmaps are now allowed even when invalid points are within the bicubic template provided the minimum weight is reached.

    +

    Options allow choices between straight bicubic (ipopt(1)=0) and constrained bicubic (ipopt(1)=1) where the value is confined within the range of the surrounding 16 points.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(2)) which defaults to 50 (if ipopt(2)=-1).

    +

    Bilinear used within one grid length of boundaries. Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where for the input and output grids, respectively: as an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input.

    +

    Output bitmaps will only be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipoptinteger (20) interpolation options
      +
    • ipopt(1)=0 for straight bicubic;
    • +
    • ipopt(1)=1 for constrained bicubic where value is confined within the range of the surrounding 4 points.
    • +
    • ipopt(2) is minimum percentage for mask (defaults to 50 if ipopt(2)=-1)
    • +
    +
    [in]grid_inInput grid.
    [in]grid_outOutput grid.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0).
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0).
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0).
    [in,out]crotVector rotation cosines (if igdtnumo<0) ugrid=crot*uearth-srot*vearth.
    [in,out]srotVector rotation sines (if igdtnumo<0) vgrid=srot*uearth+crot*vearth).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 338 of file bicubic_interp_mod.F90.

    + +

    References movect(), and polfix_mod::polfixv().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfacebicubic__interp__mod_1_1interpolate__bicubic.js b/ver-5.1.0/interfacebicubic__interp__mod_1_1interpolate__bicubic.js new file mode 100644 index 00000000..22f72d65 --- /dev/null +++ b/ver-5.1.0/interfacebicubic__interp__mod_1_1interpolate__bicubic.js @@ -0,0 +1,5 @@ +var interfacebicubic__interp__mod_1_1interpolate__bicubic = +[ + [ "interpolate_bicubic_scalar", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html#acbfecc99184cf9ae71b2c9f79c7d4077", null ], + [ "interpolate_bicubic_vector", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html#aac45c15e1c9d76158d72e62ccaca915b", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfacebilinear__interp__mod_1_1interpolate__bilinear.html b/ver-5.1.0/interfacebilinear__interp__mod_1_1interpolate__bilinear.html new file mode 100644 index 00000000..cea3853c --- /dev/null +++ b/ver-5.1.0/interfacebilinear__interp__mod_1_1interpolate__bilinear.html @@ -0,0 +1,463 @@ + + + + + + + +NCEPLIBS-ip: bilinear_interp_mod::interpolate_bilinear Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    bilinear_interp_mod::interpolate_bilinear Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine interpolate_bilinear_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram performs bilinear interpolation from any grid to any grid for scalar fields. More...
     
    subroutine interpolate_bilinear_vector (ipopt, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     This subprogram performs bilinear interpolation from any grid to any grid for vector fields. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 19 of file bilinear_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ interpolate_bilinear_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.

    +

    Options allow varying the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(1)) which defaults to 50 (if ipopt(1)=-1). only horizontal interpolation is performed. if no input data is found near the output point, a spiral search may be invoked by setting ipopt(2)> 0. no searching is done if output point is outside the input grid. as an added bonus the number of output grid points and their latitudes and longitudes are also returned. on the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input. input bitmaps will be interpolated to output bitmaps. output bitmaps will also be created when the output grid extends outside of the domain of the input grid.

    +

    The output field is set to 0 where the output bitmap is off.

    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options
      +
    • ipopt(1) is minimum percentage for mask (defaults to 50 if ipopt(1)=-1)
    • +
    • ipopt(2) is width of square to examine in spiral search (defaults to no search if ipopt(2)=-1)
    • +
    +
    [in]grid_ininput grid
    [in]grid_outoutput grid
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [out]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibiinput bitmap flags
    [in]liinput bitmaps (if some ibi(k)=1)
    [in]giinput fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo<0)
    [in,out]rlatoutput latitudes in degrees (if igdtnumo<0)
    [in,out]rlonoutput longitudes in degrees (if igdtnumo<0)
    [out]ibooutput bitmap flags
    [out]looutput bitmaps (always output)
    [out]gooutput fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 72 of file bilinear_interp_mod.F90.

    + +

    References polfix_mod::polfixs().

    + +
    +
    + +

    ◆ interpolate_bilinear_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_vector (integer, dimension(20), intent(in) ipopt,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(inout) CROT,
    real, dimension(mo), intent(inout) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs bilinear interpolation from any grid to any grid for vector fields.

    +

    Options allow varying the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(1)) which defaults to 50 (if ipopt(1)=-1).

    +

    Only horizontal interpolation is performed. the input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. on the other hand, the data may be interpolated to a set of station points if igdtnumo < 0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters. input bitmaps will be interpolated to output bitmaps. output bitmaps will also be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options
      +
    • ipopt(1) is minimum percentage for mask (defaults to 50 if ipopt(1)=-1)
    • +
    +
    [in]grid_inInput grid
    [in]grid_outOutput grid
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [out]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibiinput bitmap flags
    [in]liinput bitmaps (if some ibi(k)=1)
    [in]uiinput u-component fields to interpolate
    [in]viinput v-component fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo<0)
    [in,out]rlatoutput latitudes in degrees (if igdtnumo<0)
    [in,out]rlonoutput longitudes in degrees (if igdtnumo<0)
    [in,out]crotvector rotation cosines (if igdtnumo<0) ugrid=crot*uearth-srot*vearth;
    [in,out]srotvector rotation sines (if igdtnumo<0) vgrid=srot*uearth+crot*vearth)
    [out]ibooutput bitmap flags
    [out]looutput bitmaps (always output)
    [out]uooutput u-component fields interpolated
    [out]vooutput v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 329 of file bilinear_interp_mod.F90.

    + +

    References movect(), and polfix_mod::polfixv().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfacebilinear__interp__mod_1_1interpolate__bilinear.js b/ver-5.1.0/interfacebilinear__interp__mod_1_1interpolate__bilinear.js new file mode 100644 index 00000000..0aa40a0e --- /dev/null +++ b/ver-5.1.0/interfacebilinear__interp__mod_1_1interpolate__bilinear.js @@ -0,0 +1,5 @@ +var interfacebilinear__interp__mod_1_1interpolate__bilinear = +[ + [ "interpolate_bilinear_scalar", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html#a3493cf5bc04aa4551ffd4c314ef09a65", null ], + [ "interpolate_bilinear_vector", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html#ab4692c5250b37325f764b38c570892dd", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfacebudget__interp__mod_1_1interpolate__budget.html b/ver-5.1.0/interfacebudget__interp__mod_1_1interpolate__budget.html new file mode 100644 index 00000000..1df3948f --- /dev/null +++ b/ver-5.1.0/interfacebudget__interp__mod_1_1interpolate__budget.html @@ -0,0 +1,473 @@ + + + + + + + +NCEPLIBS-ip: budget_interp_mod::interpolate_budget Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    budget_interp_mod::interpolate_budget Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine interpolate_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields. More...
     
    subroutine interpolate_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 21 of file budget_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ interpolate_budget_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine budget_interp_mod::interpolate_budget::interpolate_budget_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields.

    +

    The algorithm simply computes (weighted) averages of bilinearly interpolated points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    A special interpolation is done if ipopt(2)=-2. in this case, the boxes stretch nearly all the way to each of the neighboring grid points and the weights are the adjoint of the bilinear interpolation weights. This case gives quasi-second-order budget interpolation.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    In cases where there is no or insufficient valid input data, the user may choose to search for the nearest valid data. this is invoked by setting ipopt(20) to the width of the search square. The default is 1 (no search). Squares are searched for valid data in a spiral pattern starting from the center. No searching is done where the output grid is outside the input grid.

    +

    Only horizontal interpolation is performed.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipoptInterpolation options
      +
    • ipopt(1) is number of radius points (defaults to 2 if ipopt(1)=-1).
    • +
    • ipopt(2:2+ipopt(1)) are respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1).
    • +
    • ipopt(3+ipopt(1)) is minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1).
    • +
    +
    [in]grid_inInput grid
    [in]grid_outOutput grid
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]giInput fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0).
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0).
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 32 Invalid budget method parameters.
    • +
    +
    +
    +
    +
    Author
    Marke Iredell, George Gayno, Kyle Gerheiser, Eric Engle
    +
    Date
    July 2021
    + +

    Definition at line 94 of file budget_interp_mod.F90.

    + +

    References polfix_mod::polfixs().

    + +
    +
    + +

    ◆ interpolate_budget_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine budget_interp_mod::interpolate_budget::interpolate_budget_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields.

    +

    The algorithm simply computes (weighted) averages of bilinearly interpolated points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    A special interpolation is done if ipopt(2)=-2. in this case, the boxes stretch nearly all the way to each of the neighboring grid points and the weights are the adjoint of the bilinear interpolation weights. This case gives quasi-second-order budget interpolation.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    In cases where there is no or insufficient valid input data, the user may choose to search for the nearest valid data. this is invoked by setting ipopt(20) to the width of the search square. The default is 1 (no search). Squares are searched for valid data in a spiral pattern starting from the center. No searching is done where the output grid is outside the input grid.

    +

    Only horizontal interpolation is performed.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options ipopt(1) Number of radius points (defaults to 2 if ipopt(1)=-1); ipopt(2:2+ipopt(1)) Respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1). ipopt(3+ipopt(1)) Minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1)
    [in]grid_inInput grid.
    [in]grid_outOutput grid.
    [in]miskip Number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moskip Number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0)
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0)
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0)
    [in,out]crotVector rotation cosines. If interpolating subgrid ugrid=crot * uearth - srot * vearth.
    [in,out]srotVector rotation sines. If interpolating subgrid vgrid = srot * uearth + crot * vearth.
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 32 Invalid budget method parameters.
    • +
    +
    +
    +
    +
    Author
    Marke Iredell, George Gayno, Kyle Gerheiser, Eric Engle
    +
    Date
    July 2021
    + +

    Definition at line 423 of file budget_interp_mod.F90.

    + +

    References movect(), and polfix_mod::polfixv().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfacebudget__interp__mod_1_1interpolate__budget.js b/ver-5.1.0/interfacebudget__interp__mod_1_1interpolate__budget.js new file mode 100644 index 00000000..6c0949c3 --- /dev/null +++ b/ver-5.1.0/interfacebudget__interp__mod_1_1interpolate__budget.js @@ -0,0 +1,5 @@ +var interfacebudget__interp__mod_1_1interpolate__budget = +[ + [ "interpolate_budget_scalar", "interfacebudget__interp__mod_1_1interpolate__budget.html#a4b96cbeedb86ef43b687f7ea55914ef0", null ], + [ "interpolate_budget_vector", "interfacebudget__interp__mod_1_1interpolate__budget.html#a573e89e56381d0f69e4022d791a087e6", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfacegdswzd__mod_1_1gdswzd.html b/ver-5.1.0/interfacegdswzd__mod_1_1gdswzd.html new file mode 100644 index 00000000..48da6fe0 --- /dev/null +++ b/ver-5.1.0/interfacegdswzd__mod_1_1gdswzd.html @@ -0,0 +1,1310 @@ + + + + + + + +NCEPLIBS-ip: gdswzd_mod::gdswzd Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    gdswzd_mod::gdswzd Interface Reference
    +
    +
    + + + + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    subroutine gdswzd_1d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following: More...
     
    subroutine gdswzd_2d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays): More...
     
    subroutine gdswzd_2d_array_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib grid description section and returns one of the following (for 2-d arrays): More...
     
    subroutine gdswzd_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib grid description section and returns one of the following (for 1-d arrays): More...
     
    subroutine gdswzd_grid (grid, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Returns one of the following for a grid object: More...
     
    subroutine gdswzd_scalar (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following (for scalars): More...
     
    +

    Detailed Description

    +
    +

    Definition at line 37 of file gdswzd_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ gdswzd_1d_array()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd::gdswzd_1d_array (integer, intent(in) IGDTNUM,
    integer, dimension(igdtlen), intent(in) IGDTMPL,
    integer, intent(in) IGDTLEN,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib 2 grid definition template and returns one of the following:

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    The current code recognizes the following projections, where "igdtnum" is the grid definition template number:

      +
    • igdtnum=00 Equidistant Cylindrical
    • +
    • igdtnum=01 Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • igdtnum=10 Mercator Cyclindrical
    • +
    • igdtnum=20 Polar Stereographic Azimuthal
    • +
    • igdtnum=30 Lambert Conformal Conical
    • +
    • igdtnum=40 Gaussian Equidistant Cyclindrical
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + +
    [in]igdtnumGrid definition template number. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - Equidistant Cylindrical
    • +
    • 01 - Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • 10 - Mercator Cyclindrical
    • +
    • 20 - Polar Stereographic Azimuthal
    • +
    • 30 - Lambert Conformal Conical
    • +
    • 40 - Gaussian Equidistant Cyclindrical
    • +
    +
    [in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All Map Projections:

      +
    • 1: Shape of earth, octet 15.
    • +
    • 2: Scale factor of spherical earth radius, octet 16.
    • +
    • 3: Scaled value of radius of spherical earth, octets 17-20.
    • +
    • 4: Scale factor of major axis of elliptical earth, octet 21.
    • +
    • 5: Scaled value of major axis of elliptical earth, octets 22-25.
    • +
    • 6: Scale factor of minor axis of elliptical earth, octet 26.
    • +
    • 7: Scaled value of minor axis of elliptical earth, octets 27-30.
    • +
    +

    Equidistant Cyclindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Basic angle of initial production domain, octets 39-42.
    • +
    • 11: Subdivisions of basic angle, octets 43-46.
    • +
    • 12: Latitude of first grid point, octets 47-50.
    • +
    • 13: Longitude of first grid point, octets 51-54.
    • +
    • 14: Resolution and component flags, octet 55.
    • +
    • 15: Latitude of last grid point, octets 56-59.
    • +
    • 16: Longitude of last grid point, octets 60-63.
    • +
    • 17: i-direction increment, octets 64-67.
    • +
    • 18: j-direction increment, octets 68-71.
    • +
    • 19: Scanning mode, octet 72.
    • +
    +

    Mercator Cyclindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Latitude of first point, octets 39-42.
    • +
    • 11: Longitude of first point, octets 43-46.
    • +
    • 12: Resolution and component flags, octet 47.
    • +
    • 13: Tangent latitude, octets 48-51.
    • +
    • 14: Latitude of last point, octets 52-55.
    • +
    • 15: Longitude of last point, octets 56-59.
    • +
    • 16: Scanning mode flags, octet 60.
    • +
    • 17: Orientation of grid, octets 61-64.
    • +
    • 18: Longitudinal grid length, octets 65-68.
    • +
    • 19: Latitudinal grid length, octets 69-72.
    • +
    +

    Lambert Conformal Conical:

      +
    • 8: Number of points along x-axis, octs 31-34.
    • +
    • 9: Number of points along y-axis, octs 35-38.
    • +
    • 10: Latitude of first point, octets 39-42.
    • +
    • 11: Longitude of first point, octets 43-46.
    • +
    • 12: Resolution of component flag, octet 47.
    • +
    • 13: Latitude where grid lengths specified,octets 48-51.
    • +
    • 14: Longitude of meridian that is parallel to y-axis, octets 52-55.
    • +
    • 15: x-direction grid length, octets 56-59.
    • +
    • 16: y-direction grid length, octets 60-63.
    • +
    • 17: Projection center flag, octet 64.
    • +
    • 18: Scanning mode, octet 65.
    • +
    • 19: First tangent latitude from pole, octets 66-69.
    • +
    • 20: Second tangent latitude from pole, octets 70-73.
    • +
    • 21: Latitude of south pole of projection, octets 74-77.
    • +
    • 22: Longitude of south pole of projection, octets 78-81.
    • +
    +

    Gaussian Cylindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Basic angle of initial production domain, octets 39-42.
    • +
    • 11: Subdivisions of basic angle, octets 43-46.
    • +
    • 12: Latitude of first grid point, octets 47-50.
    • +
    • 13: Longitude of first grid point, octets 51-54.
    • +
    • 14: Resolution and component flags, octet 55.
    • +
    • 15: Latitude of last grid point, octets 56-59.
    • +
    • 16: Longitude of last grid point, octets 60-63.
    • +
    • 17: i-direction increment, octets 64-67.
    • +
    • 18: Number of parallels between pole and equator, octets 68-71.
    • +
    • 19: Scanning mode, octet 72.
    • +
    +

    Polar Stereographic Azimuthal:

      +
    • 8: Number of points along x-axis, octets 31-34.
    • +
    • 9: Number of points along y-axis, octets 35-38.
    • +
    • 10: Latitude of first grid point, octets 39-42.
    • +
    • 11: Longitude of first grid point, octets 43-46.
    • +
    • 12: Resolution and component flags, octet 47.
    • +
    • 13: True latitude, octets 48-51.
    • +
    • 14: Orientation longitude, octets 52-55.
    • +
    • 15: x-direction grid length, octets 56-59.
    • +
    • 16: y-direction grid length, octets 60-63.
    • +
    • 17: Projection center flag, octet 64.
    • +
    • 18: Scanning mode flags, octet 65.
    • +
    +

    Rotated Equidistant Cyclindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Basic angle of initial production domain, octets 39-42.
    • +
    • 11: Subdivisions of basic angle, octets 43-46.
    • +
    • 12: Latitude of first grid point, octets 47-50.
    • +
    • 13: Longitude of first grid point, octets 51-54.
    • +
    • 14: Resolution and component flags, octet 55.
    • +
    • 15: Latitude of last grid point, octets 56-59.
    • +
    • 16: Longitude of last grid point, octets 60-63.
    • +
    • 17: i-direction increment, octets 64-67.
    • +
    • 18: j-direction increment, octets 68-71.
    • +
    • 19: Scanning mode, octet 72.
    • +
    • 20: Latitude of southern pole of projection, octets 73-76.
    • +
    • 21: Longitude of southern pole of projection, octets 77-80.
    • +
    • 22: Angle of rotation of projection, octs 81-84.
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]igdtlenNumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    Jan 2015
    + +

    Definition at line 665 of file gdswzd_mod.F90.

    + +

    References gdswzd_mod::gdswzd_grid().

    + +
    +
    + +

    ◆ gdswzd_2d_array()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd::gdswzd_2d_array (integer, intent(in) IGDTNUM,
    integer, dimension(igdtlen), intent(in) IGDTMPL,
    integer, intent(in) IGDTLEN,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(:,:), intent(inout) XPTS,
    real, dimension(:,:), intent(inout) YPTS,
    real, dimension(:,:), intent(inout) RLON,
    real, dimension(:,:), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(:,:), intent(out), optional CROT,
    real, dimension(:,:), intent(out), optional SROT,
    real, dimension(:,:), intent(out), optional XLON,
    real, dimension(:,:), intent(out), optional XLAT,
    real, dimension(:,:), intent(out), optional YLON,
    real, dimension(:,:), intent(out), optional YLAT,
    real, dimension(:,:), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    The current code recognizes the following projections, where "igdtnum" is the grid definition template number:

      +
    • igdtnum=00 Equidistant Cylindrical
    • +
    • igdtnum=01 Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • igdtnum=10 Mercator Cyclindrical
    • +
    • igdtnum=20 Polar Stereographic Azimuthal
    • +
    • igdtnum=30 Lambert Conformal Conical
    • +
    • igdtnum=40 Gaussian Equidistant Cyclindrical
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    [in]igdtnumGrid definition template number.
    [in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure. See igdtmpl definition in gdswzd_1d_array() for full details.
    [in]igdtlenNumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    Jan 2015
    + +

    Definition at line 459 of file gdswzd_mod.F90.

    + +

    References gdswzd_mod::gdswzd_1d_array().

    + +
    +
    + +

    ◆ gdswzd_2d_array_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd::gdswzd_2d_array_grib1 (integer, dimension(200), intent(in) KGDS,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(:,:), intent(inout) XPTS,
    real, dimension(:,:), intent(inout) YPTS,
    real, dimension(:,:), intent(inout) RLON,
    real, dimension(:,:), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(:,:), intent(out), optional CROT,
    real, dimension(:,:), intent(out), optional SROT,
    real, dimension(:,:), intent(out), optional XLON,
    real, dimension(:,:), intent(out), optional XLAT,
    real, dimension(:,:), intent(out), optional YLON,
    real, dimension(:,:), intent(out), optional YLAT,
    real, dimension(:,:), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib grid description section and returns one of the following (for 2-d arrays):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +

    The current code recognizes the following projections:

      +
    • kgds(1)=000 Equidistant Cylindrical
    • +
    • kgds(1)=001 Mercator Cylindrical
    • +
    • kgds(1)=003 lambert Conformal Conical
    • +
    • kgds(1)=004 Gaussian Cylindrical
    • +
    • kgds(1)=005 Polar Stereographic azimuthal
    • +
    • kgds(1)=203 E-staggered Rotated Equidistant Cylindrical
    • +
    • kgds(1)=205 B-staggered Rotated Equidistant Cylindrical
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]kgdsGDS parameters as decoded by w3fi63.
    +
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    April 1996
    + +

    Definition at line 850 of file gdswzd_mod.F90.

    + +

    References gdswzd_mod::gdswzd_grid().

    + +
    +
    + +

    ◆ gdswzd_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd::gdswzd_grib1 (integer, dimension(200), intent(in) KGDS,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib grid description section and returns one of the following (for 1-d arrays):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +

    The current code recognizes the following projections:

      +
    • kgds(1)=000 Equidistant Cylindrical
    • +
    • kgds(1)=001 Mercator Cylindrical
    • +
    • kgds(1)=003 lambert Conformal Conical
    • +
    • kgds(1)=004 Gaussian Cylindrical
    • +
    • kgds(1)=005 Polar Stereographic azimuthal
    • +
    • kgds(1)=203 E-staggered Rotated Equidistant Cylindrical
    • +
    • kgds(1)=205 B-staggered Rotated Equidistant Cylindrical
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]kgdsGDS parameters as decoded by w3fi63.
    +
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    April 1996
    + +

    Definition at line 758 of file gdswzd_mod.F90.

    + +

    References gdswzd_mod::gdswzd_grid().

    + +
    +
    + +

    ◆ gdswzd_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd::gdswzd_grid (class(ip_grid), intent(in) grid,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Returns one of the following for a grid object:

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]gridGrid to call gdswzd on.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 105 of file gdswzd_mod.F90.

    + +
    +
    + +

    ◆ gdswzd_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd::gdswzd_scalar (integer, intent(in) IGDTNUM,
    integer, dimension(igdtlen), intent(in) IGDTMPL,
    integer, intent(in) IGDTLEN,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, intent(inout) XPTS,
    real, intent(inout) YPTS,
    real, intent(inout) RLON,
    real, intent(inout) RLAT,
    integer, intent(out) NRET,
    real, intent(out), optional CROT,
    real, intent(out), optional SROT,
    real, intent(out), optional XLON,
    real, intent(out), optional XLAT,
    real, intent(out), optional YLON,
    real, intent(out), optional YLAT,
    real, intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib 2 grid definition template and returns one of the following (for scalars):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    The current code recognizes the following projections, where "igdtnum" is the grid definition template number:

      +
    • igdtnum=00 Equidistant Cylindrical
    • +
    • igdtnum=01 Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • igdtnum=10 Mercator Cyclindrical
    • +
    • igdtnum=20 Polar Stereographic Azimuthal
    • +
    • igdtnum=30 Lambert Conformal Conical
    • +
    • igdtnum=40 Gaussian Equidistant Cyclindrical
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    [in]igdtnumGrid definition template number.
    [in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure See igdtmpl definition in gdswzd_1d_array() for full details.
    [in]igdtlenNumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    Jan 2015
    + +

    Definition at line 278 of file gdswzd_mod.F90.

    + +

    References gdswzd_mod::gdswzd_1d_array().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfacegdswzd__mod_1_1gdswzd.js b/ver-5.1.0/interfacegdswzd__mod_1_1gdswzd.js new file mode 100644 index 00000000..46bd3363 --- /dev/null +++ b/ver-5.1.0/interfacegdswzd__mod_1_1gdswzd.js @@ -0,0 +1,9 @@ +var interfacegdswzd__mod_1_1gdswzd = +[ + [ "gdswzd_1d_array", "interfacegdswzd__mod_1_1gdswzd.html#afaf35e3ce949dd2ce3d72dd3f06d4e3b", null ], + [ "gdswzd_2d_array", "interfacegdswzd__mod_1_1gdswzd.html#a8b60240eefdc297eacf90c348b529d31", null ], + [ "gdswzd_2d_array_grib1", "interfacegdswzd__mod_1_1gdswzd.html#a7c66a7ede2b644f7e366df9f70b9f0a5", null ], + [ "gdswzd_grib1", "interfacegdswzd__mod_1_1gdswzd.html#a65b95791813ffd5afbfba9d4cb67676a", null ], + [ "gdswzd_grid", "interfacegdswzd__mod_1_1gdswzd.html#abfe059339c6c9f05fd4eadb5d70aec16", null ], + [ "gdswzd_scalar", "interfacegdswzd__mod_1_1gdswzd.html#a1fc841ec08d39463b3f5f36eac0068cd", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1init__descriptor.html b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1init__descriptor.html new file mode 100644 index 00000000..c002a289 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1init__descriptor.html @@ -0,0 +1,214 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod::init_descriptor Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_descriptor_mod::init_descriptor Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    type(grib1_descriptor) function init_grib1_descriptor (gds)
     Initialize grib-1 descriptor from integer grid definition section (GDS). More...
     
    type(grib2_descriptor) function init_grib2_descriptor (gdt_num, gdt_len, gdt_tmpl)
     Initialize grib-2 descriptor from integer grid definition template (GDT). More...
     
    +

    Detailed Description

    +
    +

    Definition at line 60 of file ip_grid_descriptor_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ init_grib1_descriptor()

    + +
    +
    + + + + + +
    + + + + + + + + +
    type(grib1_descriptor) function ip_grid_descriptor_mod::init_descriptor::init_grib1_descriptor (integer, dimension(:), intent(in) gds)
    +
    +private
    +
    + +

    Initialize grib-1 descriptor from integer grid definition section (GDS).

    +
    Parameters
    + + +
    [in]gdsGrib-1 grid definition section.
    +
    +
    +
    Returns
    Initialized Grib-1 descriptor.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 74 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ init_grib2_descriptor()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    type(grib2_descriptor) function ip_grid_descriptor_mod::init_descriptor::init_grib2_descriptor (integer, intent(in) gdt_num,
    integer, intent(in) gdt_len,
    integer, dimension(:), intent(in) gdt_tmpl 
    )
    +
    +private
    +
    + +

    Initialize grib-2 descriptor from integer grid definition template (GDT).

    +
    Parameters
    + + + + +
    [in]gdt_numGrib-2 grid number.
    [in]gdt_lenLenght of the grid definition template.
    [in]gdt_tmplGrib-2 grid definition template.
    +
    +
    +
    Returns
    Initialized Grib-2 descriptor.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 93 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1init__descriptor.js b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1init__descriptor.js new file mode 100644 index 00000000..ffaab030 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1init__descriptor.js @@ -0,0 +1,5 @@ +var interfaceip__grid__descriptor__mod_1_1init__descriptor = +[ + [ "init_grib1_descriptor", "interfaceip__grid__descriptor__mod_1_1init__descriptor.html#a3b5b267aa7a17a4615dcc0cb4e590f6e", null ], + [ "init_grib2_descriptor", "interfaceip__grid__descriptor__mod_1_1init__descriptor.html#a6702c4bf3a3d914e5cd2fce8fba4f95c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html new file mode 100644 index 00000000..51109273 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html @@ -0,0 +1,167 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod::operator(==) Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_descriptor_mod::operator(==) Interface Reference
    +
    +
    + + + + + +

    +Private Member Functions

    logical function is_same_grid (grid1, grid2)
     Test whether two grid descriptors are the same. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 56 of file ip_grid_descriptor_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ is_same_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    logical function ip_grid_descriptor_mod::operator(==)::is_same_grid (class(ip_grid_descriptor), intent(in) grid1,
    class(ip_grid_descriptor), intent(in) grid2 
    )
    +
    +private
    +
    + +

    Test whether two grid descriptors are the same.

    +
    Parameters
    + + + +
    [in]grid1An ip_grid_descriptor.
    [in]grid2Another ip_grid_descriptor.
    +
    +
    +
    Returns
    True if the grids are the same, false if they are not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 115 of file ip_grid_descriptor_mod.F90.

    + +

    References ip_grid_descriptor_mod::is_same_grid().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.js b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.js new file mode 100644 index 00000000..faf96850 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.js @@ -0,0 +1,4 @@ +var interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08 = +[ + [ "is_same_grid", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html#a34e94f8aada186a3d22112a1ab31b53c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceip__grid__factory__mod_1_1init__grid.html b/ver-5.1.0/interfaceip__grid__factory__mod_1_1init__grid.html new file mode 100644 index 00000000..38c67c54 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__factory__mod_1_1init__grid.html @@ -0,0 +1,166 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_factory_mod::init_grid Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_factory_mod::init_grid Interface Reference
    +
    +
    + + + + + +

    +Private Member Functions

    subroutine init_grid_generic (grid, grid_desc)
     Initializes a polymorphic ip_grid object from an ip_grid_descriptor. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 20 of file ip_grid_factory_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ init_grid_generic()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_grid_factory_mod::init_grid::init_grid_generic (class(ip_grid), intent(out), allocatable grid,
    class(ip_grid_descriptor), intent(in) grid_desc 
    )
    +
    +private
    +
    + +

    Initializes a polymorphic ip_grid object from an ip_grid_descriptor.

    +
    Parameters
    + + + +
    [out]gridGrid to initialize
    [in]grid_descGrid descriptor created from a grib1/grib2 template.
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 33 of file ip_grid_factory_mod.F90.

    + +

    References ip_grid_factory_mod::init_grid_grib1(), and ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceip__grid__factory__mod_1_1init__grid.js b/ver-5.1.0/interfaceip__grid__factory__mod_1_1init__grid.js new file mode 100644 index 00000000..da9790e1 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__factory__mod_1_1init__grid.js @@ -0,0 +1,4 @@ +var interfaceip__grid__factory__mod_1_1init__grid = +[ + [ "init_grid_generic", "interfaceip__grid__factory__mod_1_1init__grid.html#a3fbbec3ddc7dfd918c2abc02e7a4cd72", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1gdswzd__interface.html b/ver-5.1.0/interfaceip__grid__mod_1_1gdswzd__interface.html new file mode 100644 index 00000000..94444f08 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1gdswzd__interface.html @@ -0,0 +1,266 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod::gdswzd_interface Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_mod::gdswzd_interface Interface Reference
    +
    +
    + + + + + +

    +Private Member Functions

    subroutine gdswzd_interface (self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, xlon, xlat, ylon, ylat, area)
     Interface to gdswzd(). More...
     
    +

    Detailed Description

    +
    +

    Definition at line 125 of file ip_grid_mod.F90.

    +

    Constructor & Destructor Documentation

    + +

    ◆ gdswzd_interface()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ip_grid_mod::gdswzd_interface::gdswzd_interface (class(ip_grid), intent(in) self,
    integer, intent(in) iopt,
    integer, intent(in) npts,
    real, intent(in) fill,
    real, dimension(npts), intent(inout) xpts,
    real, dimension(npts), intent(inout) ypts,
    real, dimension(npts), intent(inout) rlon,
    real, dimension(npts), intent(inout) rlat,
    integer, intent(out) nret,
    real, dimension(npts), intent(out), optional crot,
    real, dimension(npts), intent(out), optional srot,
    real, dimension(npts), intent(out), optional xlon,
    real, dimension(npts), intent(out), optional xlat,
    real, dimension(npts), intent(out), optional ylon,
    real, dimension(npts), intent(out), optional ylat,
    real, dimension(npts), intent(out), optional area 
    )
    +
    +private
    +
    + +

    Interface to gdswzd().

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfip_grid_mod object.
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsmaximum number of coordinates
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xpts(npts) grid x point coordinates if iopt>0
    [in,out]ypts(npts) grid y point coordinates if iopt>0
    [in,out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed
    [out]crotoptional (npts) clockwise vector rotation cosines
    [out]srotoptional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonoptional (npts) dx/dlon in 1/degrees
    [out]xlatoptional (npts) dx/dlat in 1/degrees
    [out]ylonoptional (npts) dy/dlon in 1/degrees
    [out]ylatoptional (npts) dy/dlat in 1/degrees
    [out]areaoptional (npts) area weights in m**2 (proportional to the square of the map factor)
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 125 of file ip_grid_mod.F90.

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1gdswzd__interface.js b/ver-5.1.0/interfaceip__grid__mod_1_1gdswzd__interface.js new file mode 100644 index 00000000..f9cb65f6 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1gdswzd__interface.js @@ -0,0 +1,4 @@ +var interfaceip__grid__mod_1_1gdswzd__interface = +[ + [ "gdswzd_interface", "interfaceip__grid__mod_1_1gdswzd__interface.html#af34c5d9da54a36322bb1a141217c6369", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1init__grib1__interface.html b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib1__interface.html new file mode 100644 index 00000000..4e1652e4 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib1__interface.html @@ -0,0 +1,164 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod::init_grib1_interface Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_mod::init_grib1_interface Interface Reference
    +
    +
    + + + + + +

    +Private Member Functions

    subroutine init_grib1_interface (self, g1_desc)
     Init GRIB1 interface. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 148 of file ip_grid_mod.F90.

    +

    Constructor & Destructor Documentation

    + +

    ◆ init_grib1_interface()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    ip_grid_mod::init_grib1_interface::init_grib1_interface (class(ip_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Init GRIB1 interface.

    +
    Parameters
    + + + +
    [in,out]selfip_grid_mod object.
    [in]g1_descGRIB1 descriptor.
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 148 of file ip_grid_mod.F90.

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1init__grib1__interface.js b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib1__interface.js new file mode 100644 index 00000000..4ed1637f --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib1__interface.js @@ -0,0 +1,4 @@ +var interfaceip__grid__mod_1_1init__grib1__interface = +[ + [ "init_grib1_interface", "interfaceip__grid__mod_1_1init__grib1__interface.html#a47e255b76f02fe58a1aebdadcc5894eb", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1init__grib2__interface.html b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib2__interface.html new file mode 100644 index 00000000..17696c6c --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib2__interface.html @@ -0,0 +1,164 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod::init_grib2_interface Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_mod::init_grib2_interface Interface Reference
    +
    +
    + + + + + +

    +Private Member Functions

    subroutine init_grib2_interface (self, g2_desc)
     Init GRIB2 interface. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 162 of file ip_grid_mod.F90.

    +

    Constructor & Destructor Documentation

    + +

    ◆ init_grib2_interface()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    ip_grid_mod::init_grib2_interface::init_grib2_interface (class(ip_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Init GRIB2 interface.

    +
    Parameters
    + + + +
    [in,out]selfip_grid_mod object.
    [in]g2_descGRIB2 descriptor.
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 162 of file ip_grid_mod.F90.

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1init__grib2__interface.js b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib2__interface.js new file mode 100644 index 00000000..64ba9730 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1init__grib2__interface.js @@ -0,0 +1,4 @@ +var interfaceip__grid__mod_1_1init__grib2__interface = +[ + [ "init_grib2_interface", "interfaceip__grid__mod_1_1init__grib2__interface.html#a25dcec4470effb9b20dfc7981c21ec6c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1operator_07_0a_0a_08.html b/ver-5.1.0/interfaceip__grid__mod_1_1operator_07_0a_0a_08.html new file mode 100644 index 00000000..40217261 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1operator_07_0a_0a_08.html @@ -0,0 +1,173 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod::operator(==) Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_mod::operator(==) Interface Reference
    +
    +
    + +

    Check equality. + More...

    + + + + + +

    +Private Member Functions

    logical function is_same_grid (grid1, grid2)
     Compares two grids. More...
     
    +

    Detailed Description

    +

    Check equality.

    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 172 of file ip_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ is_same_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    logical function ip_grid_mod::operator(==)::is_same_grid (class(ip_grid), intent(in) grid1,
    class(ip_grid), intent(in) grid2 
    )
    +
    +private
    +
    + +

    Compares two grids.

    +
    Parameters
    + + + +
    [in]grid1An ip_grid
    [in]grid2Another ip_grid
    +
    +
    +
    Returns
    True if the grids are the same, false if not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 208 of file ip_grid_mod.F90.

    + +

    References ip_grid_descriptor_mod::is_same_grid().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceip__grid__mod_1_1operator_07_0a_0a_08.js b/ver-5.1.0/interfaceip__grid__mod_1_1operator_07_0a_0a_08.js new file mode 100644 index 00000000..ef540651 --- /dev/null +++ b/ver-5.1.0/interfaceip__grid__mod_1_1operator_07_0a_0a_08.js @@ -0,0 +1,4 @@ +var interfaceip__grid__mod_1_1operator_07_0a_0a_08 = +[ + [ "is_same_grid", "interfaceip__grid__mod_1_1operator_07_0a_0a_08.html#a0303cd13db74e096af7f77200ef09c6b", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceipolates__mod_1_1ipolates.html b/ver-5.1.0/interfaceipolates__mod_1_1ipolates.html new file mode 100644 index 00000000..07b76568 --- /dev/null +++ b/ver-5.1.0/interfaceipolates__mod_1_1ipolates.html @@ -0,0 +1,1221 @@ + + + + + + + +NCEPLIBS-ip: ipolates_mod::ipolates Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipolates_mod::ipolates Interface Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Private Member Functions

    subroutine ipolates_grib1 (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     This subprogram interpolates scalar field from any grid to any grid given a grib1 Grid Descriptor Section. More...
     
    subroutine ipolates_grib1_single_field (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     Special case of ipolates_grib1 when interpolating a single field. More...
     
    subroutine ipolates_grib2 (IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram interpolates scalar field from any grid to any grid given a grib2 descriptor. More...
     
    subroutine ipolates_grib2_single_field (IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Special case of ipolates_grib2 when interpolating a single field. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 23 of file ipolates.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ ipolates_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolates_mod::ipolates::ipolates_grib1 (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(in) kgdsi,
    integer(c_int), dimension(200), intent(in) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), dimension(km), intent(in) ibi,
    logical(c_bool), dimension(mi,km), intent(in) li,
    real(c_double), dimension(mi,km), intent(in) gi,
    integer(c_int), intent(inout) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    integer(c_int), dimension(km), intent(out) ibo,
    logical(c_bool), dimension(mo,km), intent(out) lo,
    real(c_double), dimension(mo,km), intent(out) go,
    integer(c_int), intent(out) iret 
    )
    +
    +private
    +
    + +

    This subprogram interpolates scalar field from any grid to any grid given a grib1 Grid Descriptor Section.

    +

    Only horizontal interpolation is performed. The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63).

    +

    The current code recognizes the following projections:

      +
    • (kgds(1)=000) equidistant cylindrical
    • +
    • (kgds(1)=001) mercator cylindrical
    • +
    • (kgds(1)=003) lambert conformal conical
    • +
    • (kgds(1)=004) gaussian cylindrical
    • +
    • (kgds(1)=005) polar stereographic azimuthal
    • +
    • (kgds(1)=203) rotated equidistant cylindrical - e-stagger
    • +
    • (kgds(1)=205) rotated equidistant cylindrical - b-stagger
    • +
    +

    Where kgds could be either input kgdsi or output kgdso.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input. for the budget approach, a subsection of the grid may be output by subtracting kgdso(1) from 255 and passing in the latitudes and longitudes of the points. Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Author
    Mark Iredell, Kyle Gerheiser
    + +

    Definition at line 293 of file ipolates.F90.

    + +

    References ipolates_mod::ipolates_grid().

    + +
    +
    + +

    ◆ ipolates_grib1_single_field()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolates_mod::ipolates::ipolates_grib1_single_field (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(in) kgdsi,
    integer(c_int), dimension(200), intent(in) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), intent(in) ibi,
    logical(c_bool), dimension(mi), intent(in) li,
    real(c_double), dimension(mi), intent(in) gi,
    integer(c_int), intent(inout) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    integer(c_int), intent(out) ibo,
    logical(c_bool), dimension(mo), intent(out) lo,
    real(c_double), dimension(mo), intent(out) go,
    integer(c_int), intent(out) iret 
    )
    +
    +private
    +
    + +

    Special case of ipolates_grib1 when interpolating a single field.

    +

    Removes the km dimension of input arrays so scalars can be passed to ibi/ibo.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Date
    Jan 2022
    +
    Author
    Kyle Gerheiser
    + +

    Definition at line 158 of file ipolates.F90.

    + +

    References ipolates_mod::ipolates_grid().

    + +
    +
    + +

    ◆ ipolates_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolates_mod::ipolates::ipolates_grib2 (integer(c_int), intent(in) IP,
    integer(c_int), dimension(20), intent(in) IPOPT,
    integer(c_int), intent(in) IGDTNUMI,
    integer(c_int), dimension(igdtleni), intent(in) IGDTMPLI,
    integer(c_int), intent(in) IGDTLENI,
    integer(c_int), intent(in) IGDTNUMO,
    integer(c_int), dimension(igdtleno), intent(in) IGDTMPLO,
    integer(c_int), intent(in) IGDTLENO,
    integer(c_int), intent(in) MI,
    integer(c_int), intent(in) MO,
    integer(c_int), intent(in) KM,
    integer(c_int), dimension(km), intent(in) IBI,
    logical(c_bool), dimension(mi,km), intent(in) LI,
    real(c_double), dimension(mi,km), intent(in) GI,
    integer(c_int), intent(out) NO,
    real(c_double), dimension(mo), intent(inout) RLAT,
    real(c_double), dimension(mo), intent(inout) RLON,
    integer(c_int), dimension(km), intent(out) IBO,
    logical(c_bool), dimension(mo,km), intent(out) LO,
    real(c_double), dimension(mo,km), intent(out) GO,
    integer(c_int), intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram interpolates scalar field from any grid to any grid given a grib2 descriptor.

    +

    Wrapper for ipolates_grid which converts a grib1 descriptor into an ip_grid_descriptor, which is used to create an ip_grid. Only horizontal interpolation is performed.

    +

    The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    Input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. The current code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, data may be interpolated to a set of station points if "igdtnumo"<0 (or subtracted from 255 for the budget option), in which case the number of points and their latitudes and longitudes must be input.

    +

    Input bitmaps will be interpolated to output bitmaps. Output bitmaps will also be created when the output grid extends outside of the domain of the input grid.

    +

    The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - EQUIDISTANT CYLINDRICAL
    • +
    • 01 - Rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - MERCATOR CYCLINDRICAL
    • +
    • 20 - POLAR STEREOGRAPHIC AZIMUTHAL
    • +
    • 30 - LAMBERT CONFORMAL CONICAL
    • +
    • 40 - GAUSSIAN EQUIDISTANT CYCLINDRICAL
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All map projections:

      +
    • (1): SHAPE OF EARTH, OCTET 15
    • +
    • (2): SCALE FACTOR OF SPHERICAL EARTH RADIUS, OCTET 16
    • +
    • (3): SCALED VALUE OF RADIUS OF SPHERICAL EARTH, OCTETS 17-20
    • +
    • (4): SCALE FACTOR OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTET 21
    • +
    • (5): SCALED VALUE OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTETS 22-25
    • +
    • (6): SCALE FACTOR OF MINOR AXIS OF ELLIPTICAL EARTH, OCTET 26
    • +
    • (7): SCALED VALUE OF MINOR AXIS OF ELLIPTICAL EARTH, OCTETS 27-30
    • +
    +

    Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42.
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Mercator Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TANGENT LATITUDE, OCTETS 48-51
    • +
    • (14): LATITUDE OF LAST POINT, OCTETS 52-55
    • +
    • (15): LONGITUDE OF LAST POINT, OCTETS 56-59
    • +
    • (16): SCANNING MODE FLAGS, OCTET 60
    • +
    • (17): ORIENTATION OF GRID, OCTETS 61-64
    • +
    • (18): LONGITUDINAL GRID LENGTH, OCTETS 65-68
    • +
    • (19): LATITUDINAL GRID LENGTH, OCTETS 69-72
    • +
    +

    Lambert Conformal Conical:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION OF COMPONENT FLAG, OCTET 47
    • +
    • (13): LATITUDE WHERE GRID LENGTHS SPECIFIED,OCTETS 48-51
    • +
    • (14): LONGITUDE OF MERIDIAN THAT IS PARALLEL TO Y-AXIS, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE, OCTET 65
    • +
    • (19): FIRST TANGENT LATITUDE FROM POLE, OCTETS 66-69
    • +
    • (20): SECOND TANGENT LATITUDE FROM POLE, OCTETS 70-73
    • +
    • (21): LATITUDE OF SOUTH POLE OF PROJECTION, OCTETS 74-77
    • +
    • (22): LONGITUDE OF SOUTH POLE OF PROJECTION, OCTETS 78-81
    • +
    +

    Gaussian Cylindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): NUMBER OF PARALLELS BETWEEN POLE AND EQUATOR, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Polar Stereographic Azimuthal:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTETS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTETS 35-38
    • +
    • (10): LATITUDE OF FIRST GRID POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST GRID POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TRUE LATITUDE, OCTETS 48-51
    • +
    • (14): ORIENTATION LONGITUDE, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE FLAGS, OCTET 65
    • +
    +

    Rotated Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    • (20): LATITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 73-76
    • +
    • (21): LONGITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 77-80
    • +
    • (22): ANGLE OF ROTATION OF PROJECTION, OCTS 81-84
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. c Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Note
    Examples demonstrating relative cpu costs. This example is interpolating 12 levels of temperatures from the 360 x 181 global grid (ncep grid 3) to the 93 x 68 hawaiian mercator grid (ncep grid 204).
    +

    The example times are for the c90. As a reference, the cp time for unpacking the global 12 temperature fields is 0.04 seconds.

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.03
    BICUBIC 1 0 0.07
    BICUBIC 1 1 0.07
    NEIGHBOR 2 0.01
    BUDGET 3 -1,-1 0.48
    SPECTRAL 4 0,40 0.22
    SPECTRAL 4 1,40 0.24
    SPECTRAL 4 0,-1 0.42
    N-BUDGET 6 -1,-1 0.15
    +

    The spectral interpolation is fast for the mercator grid. However, for some grids the spectral interpolation is slow.

    +

    The following example is interpolating 12 levels of temperatures from the 360 x 181 global grid (ncep grid 3) to the 93 x 65 conus lambert conformal grid (ncep grid 211).

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.03
    BICUBIC 1 0 0.07
    BICUBIC 1 1 0.07
    NEIGHBOR 2 0.01
    BUDGET 3 -1,-1 0.51
    SPECTRAL 4 0,40 3.94
    SPECTRAL 4 1,40 5.02
    SPECTRAL 4 0,-1 11.36
    N-BUDGET 6 -1,-1 0.18
    +
    Author
    Mark Iredell, Kyle Gerheiser
    + +

    Definition at line 587 of file ipolates.F90.

    + +

    References ipolates_mod::ipolates_grid().

    + +
    +
    + +

    ◆ ipolates_grib2_single_field()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolates_mod::ipolates::ipolates_grib2_single_field (integer(c_int), intent(in) IP,
    integer(c_int), dimension(20), intent(in) IPOPT,
    integer(c_int), intent(in) IGDTNUMI,
    integer(c_int), dimension(igdtleni), intent(in) IGDTMPLI,
    integer(c_int), intent(in) IGDTLENI,
    integer(c_int), intent(in) IGDTNUMO,
    integer(c_int), dimension(igdtleno), intent(in) IGDTMPLO,
    integer(c_int), intent(in) IGDTLENO,
    integer(c_int), intent(in) MI,
    integer(c_int), intent(in) MO,
    integer(c_int), intent(in) KM,
    integer(c_int), intent(in) IBI,
    logical(c_bool), dimension(mi), intent(in) LI,
    real(c_double), dimension(mi), intent(in) GI,
    integer(c_int), intent(out) NO,
    real(c_double), dimension(mo), intent(inout) RLAT,
    real(c_double), dimension(mo), intent(inout) RLON,
    integer(c_int), intent(out) IBO,
    logical(c_bool), dimension(mo), intent(out) LO,
    real(c_double), dimension(mo), intent(out) GO,
    integer(c_int), intent(out) IRET 
    )
    +
    +private
    +
    + +

    Special case of ipolates_grib2 when interpolating a single field.

    +

    Removes the km dimension of input arrays so scalars can be passed to ibi/ibo.

    +
    Parameters
    + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - EQUIDISTANT CYLINDRICAL
    • +
    • 01 - Rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - MERCATOR CYCLINDRICAL
    • +
    • 20 - POLAR STEREOGRAPHIC AZIMUTHAL
    • +
    • 30 - LAMBERT CONFORMAL CONICAL
    • +
    • 40 - GAUSSIAN EQUIDISTANT CYCLINDRICAL
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All map projections:

      +
    • (1): SHAPE OF EARTH, OCTET 15
    • +
    • (2): SCALE FACTOR OF SPHERICAL EARTH RADIUS, OCTET 16
    • +
    • (3): SCALED VALUE OF RADIUS OF SPHERICAL EARTH, OCTETS 17-20
    • +
    • (4): SCALE FACTOR OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTET 21
    • +
    • (5): SCALED VALUE OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTETS 22-25
    • +
    • (6): SCALE FACTOR OF MINOR AXIS OF ELLIPTICAL EARTH, OCTET 26
    • +
    • (7): SCALED VALUE OF MINOR AXIS OF ELLIPTICAL EARTH, OCTETS 27-30
    • +
    +

    Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42.
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Mercator Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TANGENT LATITUDE, OCTETS 48-51
    • +
    • (14): LATITUDE OF LAST POINT, OCTETS 52-55
    • +
    • (15): LONGITUDE OF LAST POINT, OCTETS 56-59
    • +
    • (16): SCANNING MODE FLAGS, OCTET 60
    • +
    • (17): ORIENTATION OF GRID, OCTETS 61-64
    • +
    • (18): LONGITUDINAL GRID LENGTH, OCTETS 65-68
    • +
    • (19): LATITUDINAL GRID LENGTH, OCTETS 69-72
    • +
    +

    Lambert Conformal Conical:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION OF COMPONENT FLAG, OCTET 47
    • +
    • (13): LATITUDE WHERE GRID LENGTHS SPECIFIED,OCTETS 48-51
    • +
    • (14): LONGITUDE OF MERIDIAN THAT IS PARALLEL TO Y-AXIS, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE, OCTET 65
    • +
    • (19): FIRST TANGENT LATITUDE FROM POLE, OCTETS 66-69
    • +
    • (20): SECOND TANGENT LATITUDE FROM POLE, OCTETS 70-73
    • +
    • (21): LATITUDE OF SOUTH POLE OF PROJECTION, OCTETS 74-77
    • +
    • (22): LONGITUDE OF SOUTH POLE OF PROJECTION, OCTETS 78-81
    • +
    +

    Gaussian Cylindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): NUMBER OF PARALLELS BETWEEN POLE AND EQUATOR, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Polar Stereographic Azimuthal:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTETS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTETS 35-38
    • +
    • (10): LATITUDE OF FIRST GRID POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST GRID POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TRUE LATITUDE, OCTETS 48-51
    • +
    • (14): ORIENTATION LONGITUDE, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE FLAGS, OCTET 65
    • +
    +

    Rotated Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    • (20): LATITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 73-76
    • +
    • (21): LONGITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 77-80
    • +
    • (22): ANGLE OF ROTATION OF PROJECTION, OCTS 81-84
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. c Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Author
    Eric Engle
    +
    Date
    November 2022
    + +

    Definition at line 808 of file ipolates.F90.

    + +

    References ipolates_mod::ipolates_grid().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceipolates__mod_1_1ipolates.js b/ver-5.1.0/interfaceipolates__mod_1_1ipolates.js new file mode 100644 index 00000000..1b23bd7c --- /dev/null +++ b/ver-5.1.0/interfaceipolates__mod_1_1ipolates.js @@ -0,0 +1,7 @@ +var interfaceipolates__mod_1_1ipolates = +[ + [ "ipolates_grib1", "interfaceipolates__mod_1_1ipolates.html#a8ff62af694c759f29c332836ff66437b", null ], + [ "ipolates_grib1_single_field", "interfaceipolates__mod_1_1ipolates.html#afbc36431f96adfbbf552bc6137d0519d", null ], + [ "ipolates_grib2", "interfaceipolates__mod_1_1ipolates.html#a791ae0a257adcc3a789494489e28302b", null ], + [ "ipolates_grib2_single_field", "interfaceipolates__mod_1_1ipolates.html#a3a77b7de2dce406829a3b01689372240", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceipolatev__mod_1_1ipolatev.html b/ver-5.1.0/interfaceipolatev__mod_1_1ipolatev.html new file mode 100644 index 00000000..e968fdfa --- /dev/null +++ b/ver-5.1.0/interfaceipolatev__mod_1_1ipolatev.html @@ -0,0 +1,1277 @@ + + + + + + + +NCEPLIBS-ip: ipolatev_mod::ipolatev Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipolatev_mod::ipolatev Interface Reference
    +
    +
    + + + + + + + + + + + + + + +

    +Private Member Functions

    subroutine ipolatev_grib1 (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector field from any grid to any grid given a grib1 Grid Descriptor Section. More...
     
    subroutine ipolatev_grib1_single_field (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     Special case of ipolatev_grib1 when interpolating a single field. More...
     
    subroutine ipolatev_grib2 (ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor. More...
     
    subroutine ipolatev_grib2_single_field (ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 21 of file ipolatev.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ ipolatev_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolatev_mod::ipolatev::ipolatev_grib1 (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(inout) kgdsi,
    integer(c_int), dimension(200), intent(inout) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), dimension(km), intent(in) ibi,
    logical(c_bool), dimension(mi,km), intent(in) li,
    real(c_double), dimension(mi,km), intent(in) ui,
    real(c_double), dimension(mi,km), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), dimension(km), intent(out) ibo,
    logical(c_bool), dimension(mo,km), intent(out) lo,
    real(c_double), dimension(mo,km), intent(out) uo,
    real(c_double), dimension(mo,km), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    +private
    +
    + +

    This subprogram interpolates vector field from any grid to any grid given a grib1 Grid Descriptor Section.

    +

    Only horizontal interpolation is performed. The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63).

    +

    The current code recognizes the following projections:

      +
    • (kgds(1)=000) equidistant cylindrical
    • +
    • (kgds(1)=001) mercator cylindrical
    • +
    • (kgds(1)=003) lambert conformal conical
    • +
    • (kgds(1)=004) gaussian cylindrical
    • +
    • (kgds(1)=005) polar stereographic azimuthal
    • +
    • (kgds(1)=203) rotated equidistant cylindrical - e-stagger
    • +
    • (kgds(1)=205) rotated equidistant cylindrical - b-stagger
    • +
    +

    Where kgds could be either input kgdsi or output kgdso.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input. for the budget approach, a subsection of the grid may be output by subtracting kgdso(1) from 255 and passing in the latitudes and longitudes of the points. Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Note
    Examples demonstrating relative cpu costs. This example is interpolating 12 levels of winds from the 360 x 181 global grid (ncep grid 3) to the 93 x 68 hawaiian mercator grid (ncep grid 204).
    +

    The example times are for the c90. As a reference, the cp time for unpacking the global 12 temperature fields is 0.07 seconds.

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.16
    BICUBIC 1 1 0.17
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.94
    SPECTRAL 4 0,40 0.31
    SPECTRAL 4 1,40 0.33
    SPECTRAL 4 0,-1 0.59
    N-BUDGET 6 -1,-1 0.31
    +

    The spectral interpolation is fast for the mercator grid. However, for some grids the spectral interpolation is slow.

    +

    The following example is interpolating 12 levels of temperatures from the 360 x 181 global grid (ncep grid 3) to the 93 x 65 conus lambert conformal grid (ncep grid 211).

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.15
    BICUBIC 1 1 0.16
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.92
    SPECTRAL 4 0,40 4.51
    SPECTRAL 4 1,40 5.77
    SPECTRAL 4 0,-1 12.60
    N-BUDGET 6 -1,-1 0.33
    +
    Date
    July 2021
    +
    Author
    Kyle Gerheiser
    + +

    Definition at line 565 of file ipolatev.F90.

    + +

    References ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ ipolatev_grib1_single_field()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolatev_mod::ipolatev::ipolatev_grib1_single_field (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(inout) kgdsi,
    integer(c_int), dimension(200), intent(inout) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), intent(in) ibi,
    logical(c_bool), dimension(mi), intent(in) li,
    real(c_double), dimension(mi), intent(in) ui,
    real(c_double), dimension(mi), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), intent(out) ibo,
    logical(c_bool), dimension(mo), intent(out) lo,
    real(c_double), dimension(mo), intent(out) uo,
    real(c_double), dimension(mo), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    +private
    +
    + +

    Special case of ipolatev_grib1 when interpolating a single field.

    +

    Removes the km dimension of input arrays so vectors can be passed to ibi/ibo.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Date
    Jan 2022
    +
    Author
    Kyle Gerheiser
    + +

    Definition at line 680 of file ipolatev.F90.

    + +

    References ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ ipolatev_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolatev_mod::ipolatev::ipolatev_grib2 (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), intent(in) igdtnumi,
    integer(c_int), dimension(igdtleni), intent(in) igdtmpli,
    integer(c_int), intent(in) igdtleni,
    integer(c_int), intent(in) igdtnumo,
    integer(c_int), dimension(igdtleno), intent(in) igdtmplo,
    integer(c_int), intent(in) igdtleno,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), dimension(km), intent(in) ibi,
    logical(c_bool), dimension(mi,km), intent(in) li,
    real(c_double), dimension(mi,km), intent(in) ui,
    real(c_double), dimension(mi,km), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), dimension(km), intent(out) ibo,
    logical(c_bool), dimension(mo,km), intent(out) lo,
    real(c_double), dimension(mo,km), intent(out) uo,
    real(c_double), dimension(mo,km), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    +private
    +
    + +

    This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.

    +

    This is a wrapper for ipolates_grid which converts a grib1 descriptor into an ip_grid_descriptor, which is used to create an ip_grid. Only horizontal interpolation is performed.

    +

    The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    Input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. The current code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, data may be interpolated to a set of station points if "igdtnumo"<0 (or subtracted from 255 for the budget option), in which case the number of points and their latitudes and longitudes must be input.

    +

    Input bitmaps will be interpolated to output bitmaps. Output bitmaps will also be created when the output grid extends outside of the domain of the input grid.

    +

    The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - Equidistant Cylindrical
    • +
    • 01 - Rotated Equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - Mercator Cyclindrical
    • +
    • 20 - Polar Stereographic azimuthal
    • +
    • 30 - Lambert Conformal Conical
    • +
    • 40 - Gaussian Equidistant Cyclindrical
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All map projections:

      +
    1. Shape of earth, octet 15.
    2. +
    3. Scale factor of spherical earth radius, octet 16.
    4. +
    5. Scaled value of radius of spherical earth, octets 17-20.
    6. +
    7. Scale factor of major axis of elliptical earth, octet 21.
    8. +
    9. Scaled value of major axis of elliptical earth, octets 22-25.
    10. +
    11. Scale factor of minor axis of elliptical earth, octet 26. 7: Scaled value of minor axis of elliptical earth, octets 27-30.
    12. +
    +

    Equidistant Cyclindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Basic angle of initial production domain, octets 39-42.
    6. +
    7. Subdivisions of basic angle, octets 43-46.
    8. +
    9. Latitude of first grid point, octets 47-50.
    10. +
    11. Longitude of first grid point, octets 51-54.
    12. +
    13. Resolution and component flags, octet 55.
    14. +
    15. Latitude of last grid point, octets 56-59.
    16. +
    17. Longitude of last grid point, octets 60-63.
    18. +
    19. i-direction increment, octets 64-67.
    20. +
    21. j-direction increment, octets 68-71.
    22. +
    23. Scanning mode, octet 72.
    24. +
    +

    Mercator Cyclindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Latitude of first point, octets 39-42.
    6. +
    7. Longitude of first point, octets 43-46.
    8. +
    9. Resolution and component flags, octet 47.
    10. +
    11. Tangent latitude, octets 48-51.
    12. +
    13. Latitude of last point, octets 52-55.
    14. +
    15. Longitude of last point, octets 56-59.
    16. +
    17. Scanning mode flags, octet 60.
    18. +
    19. Orientation of grid, octets 61-64.
    20. +
    21. Longitudinal grid length, octets 65-68.
    22. +
    23. Latitudinal grid length, octets 69-72.
    24. +
    +

    Lambert Conformal Conical:

      +
    1. Number of points along x-axis, octs 31-34.
    2. +
    3. Number of points along y-axis, octs 35-38.
    4. +
    5. Latitude of first point, octets 39-42.
    6. +
    7. Longitude of first point, octets 43-46.
    8. +
    9. Resolution of component flag, octet 47.
    10. +
    11. Latitude where grid lengths specified,octets 48-51.
    12. +
    13. Longitude of meridian that is parallel to y-axis, octets 52-55.
    14. +
    15. x-direction grid length, octets 56-59.
    16. +
    17. y-direction grid length, octets 60-63.
    18. +
    19. Projection center flag, octet 64.
    20. +
    21. Scanning mode, octet 65.
    22. +
    23. First tangent latitude from pole, octets 66-69.
    24. +
    25. Second tangent latitude from pole, octets 70-73.
    26. +
    27. Latitude of south pole of projection, octets 74-77.
    28. +
    29. Longitude of south pole of projection, octets 78-81.
    30. +
    +

    Gaussian Cylindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Basic angle of initial production domain, octets 39-42.
    6. +
    7. Subdivisions of basic angle, octets 43-46.
    8. +
    9. Latitude of first grid point, octets 47-50.
    10. +
    11. Longitude of first grid point, octets 51-54.
    12. +
    13. Resolution and component flags, octet 55.
    14. +
    15. Latitude of last grid point, octets 56-59.
    16. +
    17. Longitude of last grid point, octets 60-63.
    18. +
    19. i-direction increment, octets 64-67.
    20. +
    21. Number of parallels between pole and equator, octets 68-71.
    22. +
    23. Scanning mode, octet 72.
    24. +
    +

    Polar Stereographic Azimuthal:

      +
    1. Number of points along x-axis, octets 31-34.
    2. +
    3. Number of points along y-axis, octets 35-38.
    4. +
    5. Latitude of first grid point, octets 39-42.
    6. +
    7. Longitude of first grid point, octets 43-46.
    8. +
    9. Resolution and component flags, octet 47.
    10. +
    11. True latitude, octets 48-51.
    12. +
    13. Orientation longitude, octets 52-55.
    14. +
    15. x-direction grid length, octets 56-59.
    16. +
    17. y-direction grid length, octets 60-63.
    18. +
    19. Projection center flag, octet 64.
    20. +
    21. Scanning mode flags, octet 65.
    22. +
    +

    Rotated Equidistant Cyclindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Basic angle of initial production domain, octets 39-42.
    6. +
    7. Subdivisions of basic angle, octets 43-46.
    8. +
    9. Latitude of first grid point, octets 47-50.
    10. +
    11. Longitude of first grid point, octets 51-54.
    12. +
    13. Resolution and component flags, octet 55.
    14. +
    15. Latitude of last grid point, octets 56-59.
    16. +
    17. Longitude of last grid point, octets 60-63.
    18. +
    19. i-direction increment, octets 64-67.
    20. +
    21. j-direction increment, octets 68-71.
    22. +
    23. Scanning mode, octet 72.
    24. +
    25. Latitude of southern pole of projection, octets 73-76.
    26. +
    27. Longitude of southern pole of projection, octets 77-80.
    28. +
    29. Angle of rotation of projection, octs 81-84.
    30. +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [in,out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [in,out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Note
    Examples demonstrating relative cpu costs. This example is interpolating 12 levels of winds from the 360 x 181 global grid (ncep grid 3) to the 93 x 68 hawaiian mercator grid (ncep grid 204).
    +

    The example times are for the c90. As a reference, the cp time for unpacking the global 12 wind fields is 0.07 seconds.

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.16
    BICUBIC 1 1 0.17
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.94
    SPECTRAL 4 0,40 0.31
    SPECTRAL 4 1,40 0.33
    SPECTRAL 4 0,-1 0.59
    N-BUDGET 6 -1,-1 0.31
    +

    The spectral interpolation is fast for the mercator grid. However, for some grids the spectral interpolation is slow.

    +

    The following example is interpolating 12 levels of winds from the 360 x 181 global grid (ncep grid 3) to the 93 x 65 conus lambert conformal grid (ncep grid 211).

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.15
    BICUBIC 1 1 0.16
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.92
    SPECTRAL 4 0,40 4.51
    SPECTRAL 4 1,40 5.77
    SPECTRAL 4 0,-1 12.60
    N-BUDGET 6 -1,-1 0.33
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 382 of file ipolatev.F90.

    + +

    References ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ ipolatev_grib2_single_field()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolatev_mod::ipolatev::ipolatev_grib2_single_field (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), intent(in) igdtnumi,
    integer(c_int), dimension(igdtleni), intent(in) igdtmpli,
    integer(c_int), intent(in) igdtleni,
    integer(c_int), intent(in) igdtnumo,
    integer(c_int), dimension(igdtleno), intent(in) igdtmplo,
    integer(c_int), intent(in) igdtleno,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), intent(in) ibi,
    logical(c_bool), dimension(mi), intent(in) li,
    real(c_double), dimension(mi), intent(in) ui,
    real(c_double), dimension(mi), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), intent(out) ibo,
    logical(c_bool), dimension(mo), intent(out) lo,
    real(c_double), dimension(mo), intent(out) uo,
    real(c_double), dimension(mo), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    +private
    +
    + +

    This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - Equidistant Cylindrical
    • +
    • 01 - Rotated Equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - Mercator Cyclindrical
    • +
    • 20 - Polar Stereographic azimuthal
    • +
    • 30 - Lambert Conformal Conical
    • +
    • 40 - Gaussian Equidistant Cyclindrical
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [in,out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [in,out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Author
    Eric Engle
    +
    Date
    November 2022
    + +

    Definition at line 832 of file ipolatev.F90.

    + +

    References ipolatev_mod::ipolatev_grid().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceipolatev__mod_1_1ipolatev.js b/ver-5.1.0/interfaceipolatev__mod_1_1ipolatev.js new file mode 100644 index 00000000..37dfd10b --- /dev/null +++ b/ver-5.1.0/interfaceipolatev__mod_1_1ipolatev.js @@ -0,0 +1,7 @@ +var interfaceipolatev__mod_1_1ipolatev = +[ + [ "ipolatev_grib1", "interfaceipolatev__mod_1_1ipolatev.html#ac721867d3d8e8adc11d56baba4702d53", null ], + [ "ipolatev_grib1_single_field", "interfaceipolatev__mod_1_1ipolatev.html#ad211b25631afd3fd7c04bbfba589a7c5", null ], + [ "ipolatev_grib2", "interfaceipolatev__mod_1_1ipolatev.html#ac1ec04e3119f285f0f3955f016926efe", null ], + [ "ipolatev_grib2_single_field", "interfaceipolatev__mod_1_1ipolatev.html#aa0af88a9ccef79a921680fe40ec30ccd", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html b/ver-5.1.0/interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html new file mode 100644 index 00000000..927d153f --- /dev/null +++ b/ver-5.1.0/interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html @@ -0,0 +1,529 @@ + + + + + + + +NCEPLIBS-ip: neighbor_budget_interp_mod::interpolate_neighbor_budget Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    neighbor_budget_interp_mod::interpolate_neighbor_budget Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine interpolate_neighbor_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (budget). More...
     
    subroutine interpolate_neighbor_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (budget). More...
     
    +

    Detailed Description

    +
    +

    Definition at line 17 of file neighbor_budget_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ interpolate_neighbor_budget_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(out) RLAT,
    real, dimension(mo), intent(out) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (budget).

    +

    This subprogram performs budget interpolation from any grid to any grid for scalar fields.

    +

    The algorithm simply computes (weighted) averages of neighbor points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned. Input bitmaps will be interpolated to output bitmaps. Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    96-10-04 Iredell neighbor points not bilinear interpolation
    1999-04-08 Iredell split ijkgds into two pieces
    2001-06-18 Iredell include minimum mask percentage option
    2015-01-27 Gayno replace calls to gdswiz with new merged version of gdswzd.
    2015-07-13 Gayno replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    2023-05-04 Engle allow calls to GDSWZD for station points
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is number of radius points (defaults to 2 if ipopt(1)=-1); ipopt(2:2+ipopt(1)) are respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1). ipopt(3+ipopt(1)) is minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]gi(mi,km) input fields to interpolate
    [out]nonumber of output points
    [out]rlat(mo) output latitudes in degrees
    [out]rlon(mo) output longitudes in degrees
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 31 invalid undefined output grid
    • +
    • 32 invalid budget method parameters
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 107 of file neighbor_budget_interp_mod.F90.

    + +

    References polfix_mod::polfixs().

    + +
    +
    + +

    ◆ interpolate_neighbor_budget_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (budget).

    +

    This subprogram performs budget interpolation from any grid to any grid for vector fields.

    +

    The algorithm simply computes (weighted) averages of neighbor points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    Only horizontal interpolation is performed.

    +

    The input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. the code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    1999-04-08 Iredell split ijkgds into two pieces
    2001-06-18 Iredell include minimum mask percentage option
    2002-01-17 Iredell save data from last call for optimization
    2015-01-27 Gayno replace calls to gdswiz with new merged routine gdswzd.
    2015-07-13 Gayno replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    2023-05-04 Engle allow calls to GDSWZD for station points
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is number of radius points (defaults to 2 if ipopt(1)=-1); ipopt(2:2+ipopt(1)) are respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1). ipopt(3+ipopt(1)) is minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [out]nonumber of output points
    [out]rlat(mo) output latitudes in degrees
    [out]rlon(mo) output longitudes in degrees
    [out]crot(mo) vector rotation cosines
    [out]srot(mo) vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 31 invalid undefined output grid
    • +
    • 32 invalid budget method parameters
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 351 of file neighbor_budget_interp_mod.F90.

    + +

    References movect(), and polfix_mod::polfixv().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.js b/ver-5.1.0/interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.js new file mode 100644 index 00000000..6e10186a --- /dev/null +++ b/ver-5.1.0/interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.js @@ -0,0 +1,5 @@ +var interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget = +[ + [ "interpolate_neighbor_budget_scalar", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html#a96e4b145a4df6f4948b1d5ae2da6a71a", null ], + [ "interpolate_neighbor_budget_vector", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html#a573bd5ac43484aa6d051e58f37ff7c06", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfaceneighbor__interp__mod_1_1interpolate__neighbor.html b/ver-5.1.0/interfaceneighbor__interp__mod_1_1interpolate__neighbor.html new file mode 100644 index 00000000..feb994d3 --- /dev/null +++ b/ver-5.1.0/interfaceneighbor__interp__mod_1_1interpolate__neighbor.html @@ -0,0 +1,486 @@ + + + + + + + +NCEPLIBS-ip: neighbor_interp_mod::interpolate_neighbor Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    neighbor_interp_mod::interpolate_neighbor Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine interpolate_neighbor_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (neighbor). More...
     
    subroutine interpolate_neighbor_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (neighbor). More...
     
    +

    Detailed Description

    +
    +

    Definition at line 29 of file neighbor_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ interpolate_neighbor_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (neighbor).

    +

    This subprogram performs neighbor interpolation from any grid to any grid for scalar fields.

    +

    Options allow choosing the width of the grid square (ipopt(1)) to search for valid data, which defaults to 1 (if ipopt(1)=-1). Odd width squares are centered on the nearest input grid point; even width squares are centered on the nearest four input grid points. Squares are searched for valid data in a spiral pattern starting from the center. No searching is done where the output grid is outside the input grid. Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input.

    +

    Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is width of square to examine in spiral search (defaults to 1 if ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]gi(mi,km) input fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo<0)
    [in,out]rlat(no) output latitudes in degrees (if igdtnumo<0)
    [in,out]rlon(no) output longitudes in degrees (if igdtnumo<0)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +
    Author
    Eric Engle
    +
    Date
    23-05-04
    + +

    Definition at line 100 of file neighbor_interp_mod.F90.

    + +

    References polfix_mod::polfixs().

    + +
    +
    + +

    ◆ interpolate_neighbor_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(inout) CROT,
    real, dimension(mo), intent(inout) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (neighbor).

    +

    This subprogram performs neighbor interpolation from any grid to any grid for vector fields.

    +

    Options allow choosing the width of the grid square (ipopt(1)) to search for valid data, which defaults to 1 (IF IPOPT(1)=-1). Odd width squares are centered on the nearest input grid point; even width squares are centered on the nearest four input grid points.

    +

    Squares are searched for valid data in a spiral pattern starting from the center. no searching is done where the output grid is outside the input grid. Only horizontal interpolation is performed.

    +

    The input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid definition sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters.

    +

    Input bitmaps will be interpolated to output bitmaps. output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is width of square to examine in spiral search (defaults to 1 if ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo>=0)
    [in,out]rlat(mo) output latitudes in degrees (if igdtnumo<0)
    [in,out]rlon(mo) output longitudes in degrees (if igdtnumo<0)
    [in,out]crot(mo) vector rotation cosines (if igdtnumo<0)
    [in,out]srot(mo) vector rotation sines (if igdtnumo<0) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +
    Author
    Eric Engle
    +
    Date
    23-05-04
    + +

    Definition at line 352 of file neighbor_interp_mod.F90.

    + +

    References movect(), and polfix_mod::polfixv().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfaceneighbor__interp__mod_1_1interpolate__neighbor.js b/ver-5.1.0/interfaceneighbor__interp__mod_1_1interpolate__neighbor.js new file mode 100644 index 00000000..8c728bf7 --- /dev/null +++ b/ver-5.1.0/interfaceneighbor__interp__mod_1_1interpolate__neighbor.js @@ -0,0 +1,5 @@ +var interfaceneighbor__interp__mod_1_1interpolate__neighbor = +[ + [ "interpolate_neighbor_scalar", "interfaceneighbor__interp__mod_1_1interpolate__neighbor.html#a04ebb54535e67ff95c1d3d64b9cf6246", null ], + [ "interpolate_neighbor_vector", "interfaceneighbor__interp__mod_1_1interpolate__neighbor.html#a4662245e2744fd14628b48f23bf4f0a7", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfacespectral__interp__mod_1_1interpolate__spectral.html b/ver-5.1.0/interfacespectral__interp__mod_1_1interpolate__spectral.html new file mode 100644 index 00000000..5e1c2a0b --- /dev/null +++ b/ver-5.1.0/interfacespectral__interp__mod_1_1interpolate__spectral.html @@ -0,0 +1,428 @@ + + + + + + + +NCEPLIBS-ip: spectral_interp_mod::interpolate_spectral Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spectral_interp_mod::interpolate_spectral Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine interpolate_spectral_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate spectral scalar. More...
     
    subroutine interpolate_spectral_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate spectral vector. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 20 of file spectral_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ interpolate_spectral_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::interpolate_spectral::interpolate_spectral_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate spectral scalar.

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options; ipopt(1)=0 for triangular; ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to a sensible truncation if ipopt(2)=-1).
    [in]grid_ininput grid descriptor.
    [in]grid_outoutput grid descriptor.
    [in]MIskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]MOskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]KMnumber of fields to interpolate.
    [in]IBIinput bitmap flags (Must be all 0. Routine does not do bitmapped interpolation.)
    [in]GIinput fields to interpolate.
    [out]NOnumber of output points.
    [in,out]RLAToutput latitudes in degrees.
    [in,out]RLONoutput longitudes in degrees.
    [out]IBOoutput bitmap flags.
    [out]LOoutput bitmaps.
    [out]GOoutput fields interpolated.
    [out]IRETreturn code. 0/non-0 - successful/not successful.
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 61 of file spectral_interp_mod.F90.

    + +
    +
    + +

    ◆ interpolate_spectral_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::interpolate_spectral::interpolate_spectral_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate spectral vector.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    ipoptinterpolation options; ipopt(1)=0 for triangular; ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to a sensible truncation if ipopt(2)=-1).
    grid_ininput grid descriptor.
    grid_outoutput grid descriptor.
    MIskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    MOskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    KMnumber of fields to interpolate.
    IBIinput bitmap flags (Must be all 0. Routine does not do bitmapped interpolation.)
    UIinput u-component fields to interpolate.
    VIinput v-component fields to interpolate.
    NOnumber of output points.
    RLAToutput latitudes in degrees.
    RLONoutput longitudes in degrees.
    CROTvector rotation cosines.
    SROTvector rotation sines.
    IBOoutput bitmap flags.
    LOoutput bitmaps.
    UOoutput u-component fields interpolated.
    VOoutput v-component fields interpolated.
    IRETreturn code. 0/non-0 - successful/not successful.
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 122 of file spectral_interp_mod.F90.

    + +

    References spectral_interp_mod::polatev4_grib1().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfacespectral__interp__mod_1_1interpolate__spectral.js b/ver-5.1.0/interfacespectral__interp__mod_1_1interpolate__spectral.js new file mode 100644 index 00000000..3730bfea --- /dev/null +++ b/ver-5.1.0/interfacespectral__interp__mod_1_1interpolate__spectral.js @@ -0,0 +1,5 @@ +var interfacespectral__interp__mod_1_1interpolate__spectral = +[ + [ "interpolate_spectral_scalar", "interfacespectral__interp__mod_1_1interpolate__spectral.html#a79f600a26ecf256a8a13cf4bdbaf2ab1", null ], + [ "interpolate_spectral_vector", "interfacespectral__interp__mod_1_1interpolate__spectral.html#a9e939bbb3f7b214fee26c1e77764e487", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfacespectral__interp__mod_1_1polates4.html b/ver-5.1.0/interfacespectral__interp__mod_1_1polates4.html new file mode 100644 index 00000000..30c287ce --- /dev/null +++ b/ver-5.1.0/interfacespectral__interp__mod_1_1polates4.html @@ -0,0 +1,504 @@ + + + + + + + +NCEPLIBS-ip: spectral_interp_mod::polates4 Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spectral_interp_mod::polates4 Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine polates4_grib1 (IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (spectral). More...
     
    subroutine polates4_grib2 (IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (spectral). More...
     
    +

    Detailed Description

    +
    +

    Definition at line 25 of file spectral_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ polates4_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polates4::polates4_grib1 (integer, dimension(20), intent(in) IPOPT,
    integer, dimension(200), intent(in) KGDSI,
    integer, dimension(200), intent(in) KGDSO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) GI,
    integer NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for scalar fields. It requires that the input fields be uniformly global.

    +

    Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids.
    +

    Only horizontal interpolation is performed. The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63()).

    +

    The current code recognizes the following projections:

      +
    • kgds(1) = 000 equidistant cylindrical
    • +
    • kgds(1) = 001 mercator cylindrical
    • +
    • kgds(1) = 003 lambert conformal conical
    • +
    • kgds(1) = 004 gaussian cylindrical (spectral native)
    • +
    • kgds(1) = 005 polar stereographic azimuthal
    • +
    • kgds(1) = 203 rotated equidistant cylindrical (e-stagger)
    • +
    • kgds(1) = 205 rotated equidistant cylindrical (b-stagger)
    • +
    +

    Where kgds could be either input kgdsi or output kgdso. As an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input. Output bitmaps will not be created.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    2001-06-18 Iredell improve detection of special fast transform
    2015-01-27 Gayno replace calls to gdswiz() with new merged version of gdswzd().
    +
    Parameters
    + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]kgdsi(200) input gds parameters as decoded by w3fi63
    [in]kgdso(200) output gds parameters (kgdso(1)<0 implies random station points)
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags (must be all 0)
    [in]gi(mi,km) input fields to interpolate
    [out]nonumber of output points (only if kgdso(1)<0)
    [out]rlat(no) output latitudes in degrees (if kgdso(1)<0)
    [out]rlon(no) output longitudes in degrees (if kgdso(1)<0)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 560 of file spectral_interp_mod.F90.

    + +

    References sptrun(), sptrung(), sptrunm(), and sptruns().

    + +
    +
    + +

    ◆ polates4_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polates4::polates4_grib2 (integer, dimension(20), intent(in) IPOPT,
    integer, intent(in) IGDTNUMI,
    integer, dimension(igdtleni), intent(in) IGDTMPLI,
    integer, intent(in) IGDTLENI,
    integer, intent(in) IGDTNUMO,
    integer, dimension(igdtleno), intent(in) IGDTMPLO,
    integer, intent(in) IGDTLENO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for scalar fields. It requires that the input fields be uniformly global. Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids.
    +

    Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the GRIB2 grid defintion template number for the input and onutput grids, respectively:

      +
    • igdtnumi/o = 00 equidistant cylindrical
    • +
    • igdtnumo = 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • igdtnumo = 10 mercator cylindrical
    • +
    • igdtnumo = 20 polar stereographic azimuthal
    • +
    • igdtnumo = 30 lambert conformal conical
    • +
    • igdtnumi/o = 40 gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo < 0, in which case the number of points and their latitudes and longitudes must be input. Output bitmaps will not be created.

    +

    +Program History Log

    + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell initial
    2001-06-18 Iredell improve detection of special fast transform
    2015-01-27 Gayno replace calls to gdswiz with new merged version of gdswzd.
    2015-07-13 Gayno convert to grib 2. replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options; ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]igdtnumigrid definition template number - input grid. Corresponds to the gfldigdtnum component of the NCEPLIBS-g2 library gridmod data structure.
      +
    • 00 - equidistant cylindrical
    • +
    • 01 - rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - mercator cyclindrical
    • +
    • 20 - polar stereographic azimuthal
    • +
    • 30 - lambert conformal conical
    • +
    • 40 - gaussian equidistant cyclindrical
    • +
    +
    [in]igdtmpli(igdtleni) grid definition template array - input grid. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure: (section 3 info). See comments in routine ipolates() for complete definition.
    [in]igdtleninumber of elements of the grid definition template array - input grid. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumogrid definition template number - output grid. Corresponds to the gfldigdtnum component of the NCEPLIBS-g2 library gridmod data structure. igdtnumo<0 means interpolate to random station points. Otherwise, same definition as igdtnumi.
    [in]igdtmplo(igdtleno) grid definition template array - output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info). See comments in routine ipolates() for complete definition.
    [in]igdtlenonumber of elements of the grid definition template array - output grid. Corresponds to the gfldigdtlen component of the [NCEPLIBS-g2](https://github.com/NOAA-EMC/NCEPLIBS-g2) library gridmod data structure.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [out]kmnumber of fields to interpolate
    [out]ibi(km) input bitmap flags (must be all 0)
    [out]gi(mi,km) input fields to interpolate
    [out]nonumber of output points (only if igdtnumo>=0)
    [out]rlat(mo) output latitudes in degrees (if igdtnumo<0)
    [out]rlon(mo) output longitudes in degrees (if igdtnumo<0)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +

    !

    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 255 of file spectral_interp_mod.F90.

    + +

    References earth_radius_mod::earth_radius(), sptrun(), sptrung(), sptrunm(), and sptruns().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfacespectral__interp__mod_1_1polates4.js b/ver-5.1.0/interfacespectral__interp__mod_1_1polates4.js new file mode 100644 index 00000000..ab313a31 --- /dev/null +++ b/ver-5.1.0/interfacespectral__interp__mod_1_1polates4.js @@ -0,0 +1,5 @@ +var interfacespectral__interp__mod_1_1polates4 = +[ + [ "polates4_grib1", "interfacespectral__interp__mod_1_1polates4.html#a0be1315db4dce899083176b47b6ea6a4", null ], + [ "polates4_grib2", "interfacespectral__interp__mod_1_1polates4.html#a3fdc75851f1f741e715a1c3e1e4d89c9", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/interfacespectral__interp__mod_1_1polatev4.html b/ver-5.1.0/interfacespectral__interp__mod_1_1polatev4.html new file mode 100644 index 00000000..660d0edf --- /dev/null +++ b/ver-5.1.0/interfacespectral__interp__mod_1_1polatev4.html @@ -0,0 +1,562 @@ + + + + + + + +NCEPLIBS-ip: spectral_interp_mod::polatev4 Interface Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spectral_interp_mod::polatev4 Interface Reference
    +
    +
    + + + + + + + + +

    +Private Member Functions

    subroutine polatev4_grib1 (IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (spectral). More...
     
    subroutine polatev4_grib2 (IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (spectral). More...
     
    +

    Detailed Description

    +
    +

    Definition at line 30 of file spectral_interp_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ polatev4_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polatev4::polatev4_grib1 (integer, dimension(20), intent(in) IPOPT,
    integer, dimension(200), intent(in) KGDSI,
    integer, dimension(200), intent(in) KGDSO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for vector fields. It requires that the input fields be uniformly global. Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids.
    +

    Only horizontal interpolation is performed. The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63).

    +

    The current code recognizes the following projections:

      +
    • (KGDS(1)=000) EQUIDISTANT CYLINDRICAL
    • +
    • (KGDS(1)=001) MERCATOR CYLINDRICAL
    • +
    • (KGDS(1)=003) LAMBERT CONFORMAL CONICAL
    • +
    • (KGDS(1)=004) GAUSSIAN CYLINDRICAL (SPECTRAL NATIVE)
    • +
    • (KGDS(1)=005) POLAR STEREOGRAPHIC AZIMUTHAL
    • +
    • (KGDS(1)=203) ROTATED EQUIDISTANT CYLINDRICAL (E-STAGGER)
    • +
    • (KGDS(1)=205) ROTATED EQUIDISTANT CYLINDRICAL (B-STAGGER)
    • +
    +

    Where kgds could be either input kgdsi or output kgdso.

    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections. As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters.

    +

    Output bitmaps will only be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell initial.
    2001-06-18 iredell improve detection of special fast transform
    2015-01-27 gayno replace calls to gdswiz() with new merged routine gdswzd().
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]kgdsi(200) input gds parameters as decoded by w3fi63.
    [in]kgdso(200) output gds parameters (kgdso(1)<0 implies random station points).
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags (must be all 0)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [out]nonumber of output points (only if kgdso(1)<0)
    [out]rlat(no) output latitudes in degrees (if kgdso(1)<0)
    [out]rlon(no) output longitudes in degrees (if kgdso(1)<0)
    [out]crot(no) vector rotation cosines (if kgdso(1)<0)
    [out]srot(no) vector rotation sines (if kgdso(1)<0) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-04-10
    + +

    Definition at line 1222 of file spectral_interp_mod.F90.

    + +

    References sptrungv(), sptrunmv(), sptrunsv(), and sptrunv().

    + +
    +
    + +

    ◆ polatev4_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polatev4::polatev4_grib2 (integer, dimension(20), intent(in) IPOPT,
    integer, intent(in) IGDTNUMI,
    integer, dimension(igdtleni), intent(in) IGDTMPLI,
    integer, intent(in) IGDTLENI,
    integer, intent(in) IGDTNUMO,
    integer, dimension(igdtleno), intent(in) IGDTMPLO,
    integer, intent(in) IGDTLENO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for vector fields. It requires that the input fields be uniformly global. Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids. Only horizontal interpolation is performed.
    +

    The input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • igdtnumi/o=00 equidistant cylindrical
    • +
    • igdtnumo =01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • igdtnumo =10 mercator cylindrical
    • +
    • igdtnumo =20 polar stereographic azimuthal
    • +
    • igdtnumo =30 lambert conformal conical
    • +
    • igdtnumi/o=40 gaussian cylindrical
    • +
    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters.

    +

    Output bitmaps will only be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell initial
    2001-06-18 iredell improve detection of special fast transform
    2015-01-27 gayno replace calls to gdswiz() with new merged routine gdswzd().
    2015-07-13 gayno convert to grib 2. replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]igdtnumigrid definition template number - input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 equidistant cylindrical
    • +
    • 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 mercator cyclindrical
    • +
    • 20 polar stereographic azimuthal
    • +
    • 30 lambert conformal conical
    • +
    • 40 gaussian equidistant cyclindrical
    • +
    +
    [in]igdtmpli(igdtleni) grid definition template array - input grid. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info). see comments in routine ipolatev for complete definition.
    [in]igdtleninumber of elements of the grid definition template array - input grid. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumogrid definition template number - output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. igdtnumo<0 means interpolate to random station points. Otherwise, same definition as "igdtnumi".
    [in]igdtmplo(igdtleno) grid definition template array - output grid. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info). see comments in routine ipolatev() for complete definition.
    [in]igdtlenonumber of elements of the grid definition template array - output grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags (must be all 0)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [out]nonumber of output points (only if igdtnumo>=0)
    [in,out]rlat(mo) output latitudes in degrees (if igdtnumo<0)
    [in,out]rlon(mo) output longitudes in degrees (if igdtnumo<0)
    [in,out]crot(mo) vector rotation cosines (if igdtnumo<0)
    [in,out]srot(mo) vector rotation sines (if igdtnumo<0) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-04-10
    + +

    Definition at line 888 of file spectral_interp_mod.F90.

    + +

    References earth_radius_mod::earth_radius(), sptrungv(), sptrunmv(), sptrunsv(), and sptrunv().

    + +
    +
    +
    The documentation for this interface was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/interfacespectral__interp__mod_1_1polatev4.js b/ver-5.1.0/interfacespectral__interp__mod_1_1polatev4.js new file mode 100644 index 00000000..f9e2e84e --- /dev/null +++ b/ver-5.1.0/interfacespectral__interp__mod_1_1polatev4.js @@ -0,0 +1,5 @@ +var interfacespectral__interp__mod_1_1polatev4 = +[ + [ "polatev4_grib1", "interfacespectral__interp__mod_1_1polatev4.html#a5fa619eb983da3326380e9bafcf49ca8", null ], + [ "polatev4_grib2", "interfacespectral__interp__mod_1_1polatev4.html#a9dcbaeb719e3872ad5ad461adde5c98b", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__constants__mod_8F90.html b/ver-5.1.0/ip__constants__mod_8F90.html new file mode 100644 index 00000000..9462b41c --- /dev/null +++ b/ver-5.1.0/ip__constants__mod_8F90.html @@ -0,0 +1,141 @@ + + + + + + + +NCEPLIBS-ip: ip_constants_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_constants_mod.F90 File Reference
    +
    +
    + +

    Constants for use in NCEPLIBS-ip. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Modules

    module  ip_constants_mod
     Module containing common constants.
     
    + + + + + + + + + + + + + + + + + + + +

    +Variables

    real, parameter ip_constants_mod::dpr =180.0/pi
     Radians to degrees. More...
     
    real, parameter ip_constants_mod::e2_wgs84 = 0.00669437999013
     Eccentricity squared of Earth defined by WGS-84. More...
     
    real, parameter ip_constants_mod::pi =3.14159265358979
     PI. More...
     
    real, parameter ip_constants_mod::pi2 =pi/2.0
     PI / 2.0. More...
     
    real, parameter ip_constants_mod::pi4 =pi/4.0
     PI / 4.0. More...
     
    real, parameter ip_constants_mod::rerth_wgs84 =6.378137E6
     Radius of the Earth defined by WGS-84. More...
     
    +

    Detailed Description

    +

    Constants for use in NCEPLIBS-ip.

    +
    Author
    Kyle Gerheiser, George Gayno, Alex Richert
    +
    Date
    July 2021
    + +

    Definition in file ip_constants_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__constants__mod_8F90.js b/ver-5.1.0/ip__constants__mod_8F90.js new file mode 100644 index 00000000..1cc27c8a --- /dev/null +++ b/ver-5.1.0/ip__constants__mod_8F90.js @@ -0,0 +1,9 @@ +var ip__constants__mod_8F90 = +[ + [ "dpr", "ip__constants__mod_8F90.html#ae6b74489db06341b78c3088b3f207011", null ], + [ "e2_wgs84", "ip__constants__mod_8F90.html#af7783a977fa10c54d85282dc6ac5f545", null ], + [ "pi", "ip__constants__mod_8F90.html#a47f83a2267da693170054c958c401cd4", null ], + [ "pi2", "ip__constants__mod_8F90.html#a309f7e3b1f83b6b272b12ce4fff501c5", null ], + [ "pi4", "ip__constants__mod_8F90.html#a5fe7cdd86b44487666dc37f655d9ff15", null ], + [ "rerth_wgs84", "ip__constants__mod_8F90.html#ac6a501512f426673f064edbecd7a62fb", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__constants__mod_8F90_source.html b/ver-5.1.0/ip__constants__mod_8F90_source.html new file mode 100644 index 00000000..b5fa81e1 --- /dev/null +++ b/ver-5.1.0/ip__constants__mod_8F90_source.html @@ -0,0 +1,122 @@ + + + + + + + +NCEPLIBS-ip: ip_constants_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_constants_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + +
    10  implicit none
    +
    11 
    +
    12  public
    +
    13 
    +
    14  real, parameter :: pi=3.14159265358979
    +
    15  real, parameter :: dpr=180.0/pi
    +
    16  real, parameter :: pi2=pi/2.0
    +
    17  real, parameter :: pi4=pi/4.0
    +
    18  real, parameter :: rerth_wgs84=6.378137e6
    +
    19  real, parameter :: e2_wgs84 = 0.00669437999013
    +
    20 
    +
    21 end module ip_constants_mod
    +
    22 
    +
    Module containing common constants.
    +
    real, parameter pi2
    PI / 2.0.
    +
    real, parameter pi
    PI.
    +
    real, parameter pi4
    PI / 4.0.
    +
    real, parameter rerth_wgs84
    Radius of the Earth defined by WGS-84.
    +
    real, parameter dpr
    Radians to degrees.
    +
    real, parameter e2_wgs84
    Eccentricity squared of Earth defined by WGS-84.
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__equid__cylind__grid__mod_8F90.html b/ver-5.1.0/ip__equid__cylind__grid__mod_8F90.html new file mode 100644 index 00000000..d59e5b17 --- /dev/null +++ b/ver-5.1.0/ip__equid__cylind__grid__mod_8F90.html @@ -0,0 +1,160 @@ + + + + + + + +NCEPLIBS-ip: ip_equid_cylind_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_equid_cylind_grid_mod.F90 File Reference
    +
    +
    + +

    Equidistant cylindrical grib decoder and grid coordinate transformations. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_equid_cylind_grid_mod::ip_equid_cylind_grid
     
    + + + + +

    +Modules

    module  ip_equid_cylind_grid_mod
     Equidistant cylindrical grib decoder and grid coordinate transformations.
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_equid_cylind_grid_mod::equid_cylind_grid_area (RLAT, AREA)
     Computes the grid box area for a equidistant cylindrical grid. More...
     
    subroutine ip_equid_cylind_grid_mod::equid_cylind_map_jacob (XLON, XLAT, YLON, YLAT)
     Computes the map jacobians for a equidistant cylindrical grid. More...
     
    subroutine ip_equid_cylind_grid_mod::equid_cylind_vect_rot (CROT, SROT)
     Computes the vector rotation sines and cosines for a equidistant cylindrical grid. More...
     
    subroutine ip_equid_cylind_grid_mod::gdswzd_equid_cylind (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for equidistant cylindrical grids. More...
     
    subroutine ip_equid_cylind_grid_mod::init_grib1 (self, g1_desc)
     Initializes an equidistant cylindrical grid given a grib1_descriptor object. More...
     
    subroutine ip_equid_cylind_grid_mod::init_grib2 (self, g2_desc)
     Initializes an equidistant cylindrical grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + +

    +Variables

    real ip_equid_cylind_grid_mod::dlat
     Grid resolution in degrees n/s direction. More...
     
    real ip_equid_cylind_grid_mod::dlon
     Grid resolution in degrees e/w direction. More...
     
    real ip_equid_cylind_grid_mod::rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +

    Equidistant cylindrical grib decoder and grid coordinate transformations.

    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition in file ip_equid_cylind_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__equid__cylind__grid__mod_8F90.js b/ver-5.1.0/ip__equid__cylind__grid__mod_8F90.js new file mode 100644 index 00000000..aa7b18ea --- /dev/null +++ b/ver-5.1.0/ip__equid__cylind__grid__mod_8F90.js @@ -0,0 +1,13 @@ +var ip__equid__cylind__grid__mod_8F90 = +[ + [ "ip_equid_cylind_grid", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid" ], + [ "equid_cylind_grid_area", "ip__equid__cylind__grid__mod_8F90.html#a5a70b82abdce76bef22cdeaa96a986c2", null ], + [ "equid_cylind_map_jacob", "ip__equid__cylind__grid__mod_8F90.html#a039501b44cd3ad4409983e193d509afd", null ], + [ "equid_cylind_vect_rot", "ip__equid__cylind__grid__mod_8F90.html#ade88ecea1c0bb4b4d5b0d08f8482268d", null ], + [ "gdswzd_equid_cylind", "ip__equid__cylind__grid__mod_8F90.html#af20f6f308b5a33211c677b894e41b727", null ], + [ "init_grib1", "ip__equid__cylind__grid__mod_8F90.html#a3d0132823d27b60835ebb59ead173477", null ], + [ "init_grib2", "ip__equid__cylind__grid__mod_8F90.html#a39d24c9468ecb7effd16972fd72e088a", null ], + [ "dlat", "ip__equid__cylind__grid__mod_8F90.html#a30cb127d26d74d2de6ab3cbfd63183fb", null ], + [ "dlon", "ip__equid__cylind__grid__mod_8F90.html#a46335f95ac343f7751bd519aec0a160f", null ], + [ "rerth", "ip__equid__cylind__grid__mod_8F90.html#ab5b84516fab9cee3316c07450f49746c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__equid__cylind__grid__mod_8F90_source.html b/ver-5.1.0/ip__equid__cylind__grid__mod_8F90_source.html new file mode 100644 index 00000000..7d95bd8f --- /dev/null +++ b/ver-5.1.0/ip__equid__cylind__grid__mod_8F90_source.html @@ -0,0 +1,399 @@ + + + + + + + +NCEPLIBS-ip: ip_equid_cylind_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_equid_cylind_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    7 
    + + +
    19  use ip_grid_mod
    + +
    21  implicit none
    +
    22 
    +
    23  private
    +
    24  public :: ip_equid_cylind_grid
    +
    25 
    +
    26  type, extends(ip_grid) :: ip_equid_cylind_grid
    +
    27  real :: hi
    +
    28  real :: rlat1
    +
    29  real :: rlon1
    +
    30  real :: rlat2
    +
    31  real :: rlon2
    +
    32  real :: dlat
    +
    33  real :: dlon
    +
    34  contains
    +
    35  procedure :: init_grib1
    +
    36  procedure :: init_grib2
    +
    37  procedure :: gdswzd => gdswzd_equid_cylind
    +
    38  end type ip_equid_cylind_grid
    +
    39 
    +
    40  REAL :: dlat
    +
    41  REAL :: dlon
    +
    42  REAL :: rerth
    +
    43 
    +
    44 contains
    +
    45 
    +
    53  subroutine init_grib1(self, g1_desc)
    +
    54  class(ip_equid_cylind_grid), intent(inout) :: self
    +
    55  type(grib1_descriptor), intent(in) :: g1_desc
    +
    56 
    +
    57  integer :: iscan
    +
    58 
    +
    59  associate(kgds => g1_desc%gds)
    +
    60  self%IM=kgds(2)
    +
    61  self%JM=kgds(3)
    +
    62  self%RLAT1=kgds(4)*1.e-3
    +
    63  self%RLON1=kgds(5)*1.e-3
    +
    64  self%RLAT2=kgds(7)*1.e-3
    +
    65  self%RLON2=kgds(8)*1.e-3
    +
    66  iscan=mod(kgds(11)/128,2)
    +
    67  self%HI=(-1.)**iscan
    +
    68  self%DLON=self%HI*(mod(self%HI*(self%RLON2-self%RLON1)-1+3600,360.)+1)/(self%IM-1)
    +
    69  self%DLAT=(self%RLAT2-self%RLAT1)/(self%JM-1)
    +
    70 
    +
    71  ! defaults
    +
    72  self%iwrap = 0
    +
    73  self%jwrap1 = 0
    +
    74  self%jwrap2 = 0
    +
    75  self%nscan = mod(kgds(11) / 32, 2)
    +
    76  self%nscan_field_pos = self%nscan
    +
    77  self%kscan = 0
    +
    78 
    +
    79  self%iwrap = nint(360/abs(self%dlon))
    +
    80 
    +
    81  if(self%im < self%iwrap) self%iwrap=0
    +
    82  self%jwrap1 = 0
    +
    83  self%jwrap2 = 0
    +
    84  if(self%iwrap > 0 .and. mod(self%iwrap,2) == 0) then
    +
    85  if(abs(self%rlat1) > 90-0.25*self%dlat) then
    +
    86  self%jwrap1 = 2
    +
    87  elseif(abs(self%rlat1) > 90-0.75*self%dlat) then
    +
    88  self%jwrap1 = 1
    +
    89  endif
    +
    90  if(abs(self%rlat2) > 90-0.25*self%dlat) then
    +
    91  self%jwrap2 = 2 * self%jm
    +
    92  elseif(abs(self%rlat2) > 90-0.75*self%dlat) then
    +
    93  self%jwrap2 = 2 * self%jm+1
    +
    94  endif
    +
    95  endif
    +
    96 
    +
    97  self%rerth = 6.3712e6
    +
    98  self%eccen_squared = 0.0
    +
    99  end associate
    +
    100 
    +
    101  end subroutine init_grib1
    +
    102 
    +
    109  subroutine init_grib2(self, g2_desc)
    +
    110  class(ip_equid_cylind_grid), intent(inout) :: self
    +
    111  type(grib2_descriptor), intent(in) :: g2_desc
    +
    112 
    +
    113  integer :: iscale, iscan
    +
    114 
    +
    115  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    116  self%IM=igdtmpl(8)
    +
    117  self%JM=igdtmpl(9)
    +
    118  iscale=igdtmpl(10)*igdtmpl(11)
    +
    119  IF(iscale==0) iscale=10**6
    +
    120  self%RLAT1=float(igdtmpl(12))/float(iscale)
    +
    121  self%RLON1=float(igdtmpl(13))/float(iscale)
    +
    122  self%RLAT2=float(igdtmpl(15))/float(iscale)
    +
    123  self%RLON2=float(igdtmpl(16))/float(iscale)
    +
    124  iscan=mod(igdtmpl(19)/128,2)
    +
    125  self%HI=(-1.)**iscan
    +
    126  self%DLON=self%HI*(mod(self%HI*(self%RLON2-self%RLON1)-1+3600,360.)+1)/(self%IM-1)
    +
    127  self%DLAT=(self%RLAT2-self%RLAT1)/(self%JM-1)
    +
    128 
    +
    129  self%nscan = mod(igdtmpl(19)/32,2)
    +
    130  self%nscan_field_pos = self%nscan
    +
    131  self%kscan = 0
    +
    132  self%iwrap = nint(360/abs(self%DLON))
    +
    133 
    +
    134  if(self%im.lt.self%iwrap) self%iwrap=0
    +
    135  self%jwrap1=0
    +
    136  self%jwrap2=0
    +
    137 
    +
    138  if(self%im < self%iwrap) self%iwrap=0
    +
    139  self%jwrap1 = 0
    +
    140  self%jwrap2 = 0
    +
    141  if(self%iwrap > 0 .and. mod(self%iwrap,2) == 0) then
    +
    142  if(abs(self%rlat1) > 90-0.25*self%dlat) then
    +
    143  self%jwrap1 = 2
    +
    144  elseif(abs(self%rlat1) > 90-0.75*self%dlat) then
    +
    145  self%jwrap1 = 1
    +
    146  endif
    +
    147  if(abs(self%rlat2) > 90-0.25*self%dlat) then
    +
    148  self%jwrap2 = 2 * self%jm
    +
    149  elseif(abs(self%rlat2) > 90-0.75*self%dlat) then
    +
    150  self%jwrap2 = 2 * self%jm+1
    +
    151  endif
    +
    152  endif
    +
    153 
    +
    154  call earth_radius(igdtmpl, igdtlen, self%rerth, self%eccen_squared)
    +
    155 
    +
    156  end associate
    +
    157  end subroutine init_grib2
    +
    158 
    +
    203  SUBROUTINE gdswzd_equid_cylind(self,IOPT,NPTS,FILL, &
    +
    204  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    205  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    206  IMPLICIT NONE
    +
    207  !
    +
    208  class(ip_equid_cylind_grid), intent(in) :: self
    +
    209  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    210  INTEGER, INTENT( OUT) :: NRET
    +
    211  !
    +
    212  REAL, INTENT(IN ) :: FILL
    +
    213  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    214  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    215  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    216  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    217  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    218  !
    +
    219  INTEGER :: IM, JM, N
    +
    220  !
    +
    221  LOGICAL :: LROT, LMAP, LAREA
    +
    222  !
    +
    223  REAL :: HI, RLAT1, RLON1, RLAT2, RLON2
    +
    224  REAL :: XMAX, XMIN, YMAX, YMIN
    +
    225  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    226  IF(PRESENT(crot)) crot=fill
    +
    227  IF(PRESENT(srot)) srot=fill
    +
    228  IF(PRESENT(xlon)) xlon=fill
    +
    229  IF(PRESENT(xlat)) xlat=fill
    +
    230  IF(PRESENT(ylon)) ylon=fill
    +
    231  IF(PRESENT(ylat)) ylat=fill
    +
    232  IF(PRESENT(area)) area=fill
    +
    233 
    +
    234  im=self%im
    +
    235  jm=self%jm
    +
    236 
    +
    237  rlat1=self%rlat1
    +
    238  rlon1=self%rlon1
    +
    239  rlat2=self%rlat2
    +
    240  rlon2=self%rlon2
    +
    241 
    +
    242  hi=self%hi
    +
    243 
    +
    244  rerth = self%rerth
    +
    245  dlat = self%dlat
    +
    246  dlon = self%dlon
    +
    247 
    +
    248  xmin=0
    +
    249  xmax=im+1
    +
    250  IF(im.EQ.nint(360/abs(dlon))) xmax=im+2
    +
    251  ymin=0
    +
    252  ymax=jm+1
    +
    253  nret=0
    +
    254  IF(PRESENT(crot).AND.PRESENT(srot))THEN
    +
    255  lrot=.true.
    +
    256  ELSE
    +
    257  lrot=.false.
    +
    258  ENDIF
    +
    259  IF(PRESENT(xlon).AND.PRESENT(xlat).AND.PRESENT(ylon).AND.PRESENT(ylat))THEN
    +
    260  lmap=.true.
    +
    261  ELSE
    +
    262  lmap=.false.
    +
    263  ENDIF
    +
    264  IF(PRESENT(area))THEN
    +
    265  larea=.true.
    +
    266  ELSE
    +
    267  larea=.false.
    +
    268  ENDIF
    +
    269  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    270  ! TRANSLATE GRID COORDINATES TO EARTH COORDINATES
    +
    271  IF(iopt.EQ.0.OR.iopt.EQ.1) THEN
    +
    272  !$OMP PARALLEL DO PRIVATE(N) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    273  DO n=1,npts
    +
    274  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    275  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    276  rlon(n)=mod(rlon1+dlon*(xpts(n)-1)+3600,360.)
    +
    277  rlat(n)=min(max(rlat1+dlat*(ypts(n)-1),-90.),90.)
    +
    278  nret=nret+1
    +
    279  IF(lrot) CALL equid_cylind_vect_rot(crot(n),srot(n))
    +
    280  IF(lmap) CALL equid_cylind_map_jacob(xlon(n),xlat(n),ylon(n),ylat(n))
    +
    281  IF(larea) CALL equid_cylind_grid_area(rlat(n),area(n))
    +
    282  ELSE
    +
    283  rlon(n)=fill
    +
    284  rlat(n)=fill
    +
    285  ENDIF
    +
    286  ENDDO
    +
    287  !$OMP END PARALLEL DO
    +
    288  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    289  ! TRANSLATE EARTH COORDINATES TO GRID COORDINATES
    +
    290  ELSEIF(iopt.EQ.-1) THEN
    +
    291  !$OMP PARALLEL DO PRIVATE(N) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    292  DO n=1,npts
    +
    293  IF(abs(rlon(n)).LE.360.AND.abs(rlat(n)).LE.90) THEN
    +
    294  xpts(n)=1+hi*mod(hi*(rlon(n)-rlon1)+3600,360.)/dlon
    +
    295  ypts(n)=1+(rlat(n)-rlat1)/dlat
    +
    296  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    297  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    298  nret=nret+1
    +
    299  IF(lrot) CALL equid_cylind_vect_rot(crot(n),srot(n))
    +
    300  IF(lmap) CALL equid_cylind_map_jacob(xlon(n),xlat(n),ylon(n),ylat(n))
    +
    301  IF(larea) CALL equid_cylind_grid_area(rlat(n),area(n))
    +
    302  ELSE
    +
    303  xpts(n)=fill
    +
    304  ypts(n)=fill
    +
    305  ENDIF
    +
    306  ELSE
    +
    307  xpts(n)=fill
    +
    308  ypts(n)=fill
    +
    309  ENDIF
    +
    310  ENDDO
    +
    311  !$OMP END PARALLEL DO
    +
    312  ENDIF
    +
    313  END SUBROUTINE gdswzd_equid_cylind
    +
    314 
    +
    327  SUBROUTINE equid_cylind_vect_rot(CROT,SROT)
    +
    328  IMPLICIT NONE
    +
    329 
    +
    330  REAL, INTENT( OUT) :: CROT, SROT
    +
    331 
    +
    332  crot=1.0
    +
    333  srot=0.0
    +
    334 
    +
    335  END SUBROUTINE equid_cylind_vect_rot
    +
    336 
    +
    346  SUBROUTINE equid_cylind_map_jacob(XLON,XLAT,YLON,YLAT)
    +
    347  REAL, INTENT( OUT) :: XLON,XLAT,YLON,YLAT
    +
    348 
    +
    349  xlon=1.0/dlon
    +
    350  xlat=0.
    +
    351  ylon=0.
    +
    352  ylat=1.0/dlat
    +
    353 
    +
    354  END SUBROUTINE equid_cylind_map_jacob
    +
    355 
    +
    363  SUBROUTINE equid_cylind_grid_area(RLAT,AREA)
    +
    364  IMPLICIT NONE
    +
    365 
    +
    366  REAL, INTENT(IN ) :: RLAT
    +
    367  REAL, INTENT( OUT) :: AREA
    +
    368 
    +
    369  REAL, PARAMETER :: PI=3.14159265358979
    +
    370  REAL, PARAMETER :: DPR=180./pi
    +
    371 
    +
    372  REAL :: DSLAT, RLATU, RLATD
    +
    373 
    +
    374  rlatu=min(max(rlat+dlat/2,-90.),90.)
    +
    375  rlatd=min(max(rlat-dlat/2,-90.),90.)
    +
    376  dslat=sin(rlatu/dpr)-sin(rlatd/dpr)
    +
    377  area=rerth**2*abs(dslat*dlon)/dpr
    +
    378 
    +
    379  END SUBROUTINE equid_cylind_grid_area
    +
    380 
    +
    381 end module ip_equid_cylind_grid_mod
    +
    382 
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Determine earth radius and shape.
    +
    Equidistant cylindrical grib decoder and grid coordinate transformations.
    +
    subroutine equid_cylind_map_jacob(XLON, XLAT, YLON, YLAT)
    Computes the map jacobians for a equidistant cylindrical grid.
    +
    real dlat
    Grid resolution in degrees n/s direction.
    +
    subroutine init_grib2(self, g2_desc)
    Initializes an equidistant cylindrical grid given a grib2_descriptor object.
    +
    subroutine init_grib1(self, g1_desc)
    Initializes an equidistant cylindrical grid given a grib1_descriptor object.
    +
    real dlon
    Grid resolution in degrees e/w direction.
    +
    subroutine equid_cylind_grid_area(RLAT, AREA)
    Computes the grid box area for a equidistant cylindrical grid.
    +
    real rerth
    Radius of the Earth.
    +
    subroutine equid_cylind_vect_rot(CROT, SROT)
    Computes the vector rotation sines and cosines for a equidistant cylindrical grid.
    +
    subroutine gdswzd_equid_cylind(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for equidistant cylindrical g...
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    + +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__gaussian__grid__mod_8F90.html b/ver-5.1.0/ip__gaussian__grid__mod_8F90.html new file mode 100644 index 00000000..60e15944 --- /dev/null +++ b/ver-5.1.0/ip__gaussian__grid__mod_8F90.html @@ -0,0 +1,169 @@ + + + + + + + +NCEPLIBS-ip: ip_gaussian_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_gaussian_grid_mod.F90 File Reference
    +
    +
    + +

    Gaussian grid coordinate transformations. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_gaussian_grid_mod::ip_gaussian_grid
     
    + + + + +

    +Modules

    module  ip_gaussian_grid_mod
     Gaussian grid coordinate transformations.
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_gaussian_grid_mod::gaussian_grid_area (YPTS, AREA)
     Computes the grid box area for a gaussian cylindrical grid. More...
     
    subroutine ip_gaussian_grid_mod::gaussian_map_jacob (YPTS, XLON, XLAT, YLON, YLAT)
     Computes the map jacobians for a gaussian cylindrical grid. More...
     
    subroutine ip_gaussian_grid_mod::gaussian_vect_rot (CROT, SROT)
     Computes the vector rotation sines and cosines for a gaussian cylindrical grid. More...
     
    subroutine ip_gaussian_grid_mod::gdswzd_gaussian (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    subroutine ip_gaussian_grid_mod::init_grib1 (self, g1_desc)
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    subroutine ip_gaussian_grid_mod::init_grib2 (self, g2_desc)
     Initializes a gaussian grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + +

    +Variables

    real, dimension(:), allocatable ip_gaussian_grid_mod::blat
     Gaussian latitude for each parallel. More...
     
    real ip_gaussian_grid_mod::dlon
     "i"-direction increment. More...
     
    integer ip_gaussian_grid_mod::j1
     'j' index of first grid point within the global array of latitudes. More...
     
    integer ip_gaussian_grid_mod::jh
     Scan mode flag in 'j' direction. More...
     
    real ip_gaussian_grid_mod::rerth
     Radius of the earth. More...
     
    real, dimension(:), allocatable ip_gaussian_grid_mod::ylat_row
     dy/dlat for each row in 1/degrees. More...
     
    +

    Detailed Description

    +

    Gaussian grid coordinate transformations.

    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition in file ip_gaussian_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__gaussian__grid__mod_8F90.js b/ver-5.1.0/ip__gaussian__grid__mod_8F90.js new file mode 100644 index 00000000..d975899c --- /dev/null +++ b/ver-5.1.0/ip__gaussian__grid__mod_8F90.js @@ -0,0 +1,16 @@ +var ip__gaussian__grid__mod_8F90 = +[ + [ "ip_gaussian_grid", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html", "structip__gaussian__grid__mod_1_1ip__gaussian__grid" ], + [ "gaussian_grid_area", "ip__gaussian__grid__mod_8F90.html#ab602a870a477c7ab77438700af4e7780", null ], + [ "gaussian_map_jacob", "ip__gaussian__grid__mod_8F90.html#adca7b03877c6a7048ff1716a95e0bd9d", null ], + [ "gaussian_vect_rot", "ip__gaussian__grid__mod_8F90.html#ac72eec96d0012fbe0f0ec7c520f40dad", null ], + [ "gdswzd_gaussian", "ip__gaussian__grid__mod_8F90.html#a6eefd9270b3f9bb2c59a77bea4ecf1b9", null ], + [ "init_grib1", "ip__gaussian__grid__mod_8F90.html#a8fe2ee732a3a2db4891a6431787a0b01", null ], + [ "init_grib2", "ip__gaussian__grid__mod_8F90.html#ae048ac033628515113b11b8c7364e0c2", null ], + [ "blat", "ip__gaussian__grid__mod_8F90.html#ae2697b9c4dbe4945276633d1951e79fc", null ], + [ "dlon", "ip__gaussian__grid__mod_8F90.html#a8852b7cfb7b99318140c66b0c551dc6d", null ], + [ "j1", "ip__gaussian__grid__mod_8F90.html#af5c4024263aa3eaef5801849ae32c15a", null ], + [ "jh", "ip__gaussian__grid__mod_8F90.html#a67d6cd6d188a8bded8bdf64927617028", null ], + [ "rerth", "ip__gaussian__grid__mod_8F90.html#a8213e02ccf4325ad5db14f2e48990da2", null ], + [ "ylat_row", "ip__gaussian__grid__mod_8F90.html#a3591b5701f3d03931c6a9d5278e161dc", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__gaussian__grid__mod_8F90_source.html b/ver-5.1.0/ip__gaussian__grid__mod_8F90_source.html new file mode 100644 index 00000000..e02ff25d --- /dev/null +++ b/ver-5.1.0/ip__gaussian__grid__mod_8F90_source.html @@ -0,0 +1,456 @@ + + + + + + + +NCEPLIBS-ip: ip_gaussian_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_gaussian_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + + +
    16  use ip_grid_mod
    + + +
    19  use sp_mod
    +
    20  implicit none
    +
    21 
    +
    22  private
    +
    23  public :: ip_gaussian_grid
    +
    24 
    +
    25  type, extends(ip_grid) :: ip_gaussian_grid
    +
    26  integer :: jh
    +
    27  real :: dlon
    +
    28  real :: rlat1
    +
    29  real :: rlon1
    +
    30  real :: rlon2
    +
    31  real :: hi
    +
    32  integer :: jg
    +
    33  integer :: jscan
    +
    34  contains
    +
    36  procedure :: init_grib1
    +
    38  procedure :: init_grib2
    +
    41  procedure :: gdswzd => gdswzd_gaussian
    +
    42  end type ip_gaussian_grid
    +
    43 
    +
    44  INTEGER :: j1
    +
    45  INTEGER :: jh
    +
    46  REAL, ALLOCATABLE :: blat(:)
    +
    47  REAL :: dlon
    +
    48  REAL :: rerth
    +
    49  REAL, ALLOCATABLE :: ylat_row(:)
    +
    50 
    +
    51 contains
    +
    52 
    +
    60  subroutine init_grib1(self, g1_desc)
    +
    61  class(ip_gaussian_grid), intent(inout) :: self
    +
    62  type(grib1_descriptor), intent(in) :: g1_desc
    +
    63 
    +
    64  integer :: iscan, jg
    +
    65 
    +
    66  associate(kgds => g1_desc%gds)
    +
    67  self%rerth = 6.3712e6
    +
    68  self%eccen_squared = 0.0
    +
    69 
    +
    70  self%IM=kgds(2)
    +
    71  self%JM=kgds(3)
    +
    72  self%RLAT1=kgds(4)*1.e-3
    +
    73  self%RLON1=kgds(5)*1.e-3
    +
    74  self%RLON2=kgds(8)*1.e-3
    +
    75  self%JG=kgds(10)*2
    +
    76  iscan=mod(kgds(11)/128,2)
    +
    77  self%JSCAN=mod(kgds(11)/64,2)
    +
    78  self%HI=(-1.)**iscan
    +
    79  self%JH=(-1)**self%JSCAN
    +
    80  self%DLON=self%HI*(mod(self%HI*(self%RLON2-self%RLON1)-1+3600,360.)+1)/(self%IM-1)
    +
    81 
    +
    82  self%iwrap = 0
    +
    83  self%jwrap1 = 0
    +
    84  self%jwrap2 = 0
    +
    85  self%nscan = mod(kgds(11) / 32, 2)
    +
    86  self%nscan_field_pos = self%nscan
    +
    87  self%kscan = 0
    +
    88 
    +
    89  self%iwrap=nint(360 / abs(self%dlon))
    +
    90  if(self%im < self%iwrap) self%iwrap = 0
    +
    91 
    +
    92  if(self%iwrap > 0 .and. mod(self%iwrap, 2) == 0) then
    +
    93  jg=kgds(10)*2
    +
    94  if(self%jm == self%jg) then
    +
    95  self%jwrap1 = 1
    +
    96  self%jwrap2 = 2 * self%jm + 1
    +
    97  endif
    +
    98  endif
    +
    99 
    +
    100  end associate
    +
    101  end subroutine init_grib1
    +
    102 
    +
    109  subroutine init_grib2(self, g2_desc)
    +
    110  class(ip_gaussian_grid), intent(inout) :: self
    +
    111  type(grib2_descriptor), intent(in) :: g2_desc
    +
    112 
    +
    113  integer :: iscale, iscan, jg
    +
    114 
    +
    115  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    116  call earth_radius(igdtmpl, igdtlen, self%rerth, self%eccen_squared)
    +
    117 
    +
    118  self%IM=igdtmpl(8)
    +
    119  self%JM=igdtmpl(9)
    +
    120  iscale=igdtmpl(10)*igdtmpl(11)
    +
    121  IF(iscale==0) iscale=10**6
    +
    122  self%RLAT1=float(igdtmpl(12))/float(iscale)
    +
    123  self%RLON1=float(igdtmpl(13))/float(iscale)
    +
    124  self%RLON2=float(igdtmpl(16))/float(iscale)
    +
    125  self%JG=igdtmpl(18)*2
    +
    126  iscan=mod(igdtmpl(19)/128,2)
    +
    127  self%JSCAN=mod(igdtmpl(19)/64,2)
    +
    128  self%HI=(-1.)**iscan
    +
    129  self%JH=(-1)**self%JSCAN
    +
    130  self%DLON=self%HI*(mod(self%HI*(self%RLON2-self%RLON1)-1+3600,360.)+1)/(self%IM-1)
    +
    131 
    +
    132 
    +
    133  self%iwrap = nint(360 / abs(self%dlon))
    +
    134  if(self%im < self%iwrap) self%iwrap = 0
    +
    135  self%jwrap1 = 0
    +
    136  self%jwrap2 = 0
    +
    137  if(self%iwrap > 0 .and. mod(self%iwrap, 2) == 0) then
    +
    138  jg = igdtmpl(18) * 2
    +
    139  if(self%jm == jg) then
    +
    140  self%jwrap1=1
    +
    141  self%jwrap2 = 2 * self%jm + 1
    +
    142  endif
    +
    143  endif
    +
    144  self%nscan = mod(igdtmpl(19) / 32, 2)
    +
    145  self%nscan_field_pos = self%nscan
    +
    146  self%kscan = 0
    +
    147  end associate
    +
    148 
    +
    149  end subroutine init_grib2
    +
    150 
    +
    195  SUBROUTINE gdswzd_gaussian(self,IOPT,NPTS,FILL, &
    +
    196  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    197  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    198  IMPLICIT NONE
    +
    199  !
    +
    200  class(ip_gaussian_grid), intent(in) :: self
    +
    201  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    202  INTEGER, INTENT( OUT) :: NRET
    +
    203  !
    +
    204  REAL, INTENT(IN ) :: FILL
    +
    205  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    206  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    207  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    208  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    209  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    210  !
    +
    211  INTEGER :: JSCAN, IM, JM
    +
    212  INTEGER :: J, JA, JG
    +
    213  INTEGER :: N
    +
    214  !
    +
    215  LOGICAL :: LROT, LMAP, LAREA
    +
    216  !
    +
    217  REAL, ALLOCATABLE :: ALAT(:), ALAT_JSCAN(:)
    +
    218  REAL, ALLOCATABLE :: ALAT_TEMP(:),BLAT_TEMP(:)
    +
    219  REAL :: HI, RLATA, RLATB, RLAT1, RLON1, RLON2
    +
    220  REAL :: XMAX, XMIN, YMAX, YMIN, YPTSA, YPTSB
    +
    221  REAL :: WB
    +
    222 
    +
    223  IF(PRESENT(crot)) crot=fill
    +
    224  IF(PRESENT(srot)) srot=fill
    +
    225  IF(PRESENT(xlon)) xlon=fill
    +
    226  IF(PRESENT(xlat)) xlat=fill
    +
    227  IF(PRESENT(ylon)) ylon=fill
    +
    228  IF(PRESENT(ylat)) ylat=fill
    +
    229  IF(PRESENT(area)) area=fill
    +
    230 
    +
    231  IF(PRESENT(crot).AND.PRESENT(srot))THEN
    +
    232  lrot=.true.
    +
    233  ELSE
    +
    234  lrot=.false.
    +
    235  ENDIF
    +
    236  IF(PRESENT(xlon).AND.PRESENT(xlat).AND.PRESENT(ylon).AND.PRESENT(ylat))THEN
    +
    237  lmap=.true.
    +
    238  ELSE
    +
    239  lmap=.false.
    +
    240  ENDIF
    +
    241  IF(PRESENT(area))THEN
    +
    242  larea=.true.
    +
    243  ELSE
    +
    244  larea=.false.
    +
    245  ENDIF
    +
    246 
    +
    247  im=self%im
    +
    248  jm=self%jm
    +
    249 
    +
    250  rlat1=self%rlat1
    +
    251  rlon1=self%rlon1
    +
    252  rlon2=self%rlon2
    +
    253 
    +
    254  jg=self%jg
    +
    255  jscan=self%jscan
    +
    256  hi=self%hi
    +
    257 
    +
    258  jh=self%jh
    +
    259  dlon=self%dlon
    +
    260  rerth = self%rerth
    +
    261 
    +
    262  ALLOCATE(alat_temp(jg))
    +
    263  ALLOCATE(blat_temp(jg))
    +
    264  CALL splat(4,jg,alat_temp,blat_temp)
    +
    265  ALLOCATE(alat(0:jg+1))
    +
    266  ALLOCATE(blat(0:jg+1))
    +
    267  !$OMP PARALLEL DO PRIVATE(JA) SCHEDULE(STATIC)
    +
    268  DO ja=1,jg
    +
    269  alat(ja)=real(dpr*asin(alat_temp(ja)))
    +
    270  blat(ja)=blat_temp(ja)
    +
    271  ENDDO
    +
    272  !$OMP END PARALLEL DO
    +
    273  DEALLOCATE(alat_temp,blat_temp)
    +
    274  alat(0)=180.-alat(1)
    +
    275  alat(jg+1)=-alat(0)
    +
    276  blat(0)=-blat(1)
    +
    277  blat(jg+1)=blat(0)
    +
    278  j1=1
    +
    279  DO WHILE(j1.LT.jg.AND.rlat1.LT.(alat(j1)+alat(j1+1))/2)
    +
    280  j1=j1+1
    +
    281  ENDDO
    +
    282  IF(lmap)THEN
    +
    283  ALLOCATE(alat_jscan(jg))
    +
    284  DO ja=1,jg
    +
    285  alat_jscan(j1+jh*(ja-1))=alat(ja)
    +
    286  ENDDO
    +
    287  ALLOCATE(ylat_row(0:jg+1))
    +
    288  DO ja=2,(jg-1)
    +
    289  ylat_row(ja)=2.0/(alat_jscan(ja+1)-alat_jscan(ja-1))
    +
    290  ENDDO
    +
    291  ylat_row(1)=1.0/(alat_jscan(2)-alat_jscan(1))
    +
    292  ylat_row(0)=ylat_row(1)
    +
    293  ylat_row(jg)=1.0/(alat_jscan(jg)-alat_jscan(jg-1))
    +
    294  ylat_row(jg+1)=ylat_row(jg)
    +
    295  DEALLOCATE(alat_jscan)
    +
    296  ENDIF
    +
    297  xmin=0
    +
    298  xmax=im+1
    +
    299  IF(im.EQ.nint(360/abs(dlon))) xmax=im+2
    +
    300  ymin=0.5
    +
    301  ymax=jm+0.5
    +
    302  nret=0
    +
    303 
    +
    304  ! TRANSLATE GRID COORDINATES TO EARTH COORDINATES
    +
    305  IF(iopt.EQ.0.OR.iopt.EQ.1) THEN
    +
    306  !$OMP PARALLEL DO PRIVATE(N,J,WB,RLATA,RLATB) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    307  DO n=1,npts
    +
    308  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    309  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    310  rlon(n)=mod(rlon1+dlon*(xpts(n)-1)+3600,360.)
    +
    311  j=int(ypts(n))
    +
    312  wb=ypts(n)-j
    +
    313  rlata=alat(j1+jh*(j-1))
    +
    314  rlatb=alat(j1+jh*j)
    +
    315  rlat(n)=rlata+wb*(rlatb-rlata)
    +
    316  nret=nret+1
    +
    317  IF(lrot) CALL gaussian_vect_rot(crot(n),srot(n))
    +
    318  IF(lmap) CALL gaussian_map_jacob(ypts(n),&
    +
    319  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    320  IF(larea) CALL gaussian_grid_area(ypts(n),area(n))
    +
    321  ELSE
    +
    322  rlon(n)=fill
    +
    323  rlat(n)=fill
    +
    324  ENDIF
    +
    325  ENDDO
    +
    326  !$OMP END PARALLEL DO
    +
    327 
    +
    328  ! TRANSLATE EARTH COORDINATES TO GRID COORDINATES
    +
    329  ELSEIF(iopt.EQ.-1) THEN
    +
    330  !$OMP PARALLEL DO PRIVATE(N,JA,YPTSA, YPTSB, WB) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    331  DO n=1,npts
    +
    332  xpts(n)=fill
    +
    333  ypts(n)=fill
    +
    334  IF(abs(rlon(n)).LE.360.AND.abs(rlat(n)).LE.90) THEN
    +
    335  xpts(n)=1+hi*mod(hi*(rlon(n)-rlon1)+3600,360.)/dlon
    +
    336  ja=min(int((jg+1)/180.*(90-rlat(n))),jg)
    +
    337  IF(rlat(n).GT.alat(ja)) ja=max(ja-2,0)
    +
    338  IF(rlat(n).LT.alat(ja+1)) ja=min(ja+2,jg)
    +
    339  IF(rlat(n).GT.alat(ja)) ja=ja-1
    +
    340  IF(rlat(n).LT.alat(ja+1)) ja=ja+1
    +
    341  yptsa=1+jh*(ja-j1)
    +
    342  yptsb=1+jh*(ja+1-j1)
    +
    343  wb=(alat(ja)-rlat(n))/(alat(ja)-alat(ja+1))
    +
    344  ypts(n)=yptsa+wb*(yptsb-yptsa)
    +
    345  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    346  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    347  nret=nret+1
    +
    348  IF(lrot) CALL gaussian_vect_rot(crot(n),srot(n))
    +
    349  IF(lmap) CALL gaussian_map_jacob(ypts(n), &
    +
    350  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    351  IF(larea) CALL gaussian_grid_area(ypts(n),area(n))
    +
    352  ELSE
    +
    353  xpts(n)=fill
    +
    354  ypts(n)=fill
    +
    355  ENDIF
    +
    356  ENDIF
    +
    357  ENDDO
    +
    358  !$OMP END PARALLEL DO
    +
    359  ENDIF
    +
    360  DEALLOCATE(alat, blat)
    +
    361  IF (ALLOCATED(ylat_row)) DEALLOCATE(ylat_row)
    +
    362 
    +
    363  END SUBROUTINE gdswzd_gaussian
    +
    364 
    +
    377  SUBROUTINE gaussian_vect_rot(CROT,SROT)
    +
    378  IMPLICIT NONE
    +
    379 
    +
    380  REAL, INTENT( OUT) :: CROT, SROT
    +
    381 
    +
    382  crot=1.0
    +
    383  srot=0.0
    +
    384 
    +
    385  END SUBROUTINE gaussian_vect_rot
    +
    386 
    +
    397  SUBROUTINE gaussian_map_jacob(YPTS, XLON, XLAT, YLON, YLAT)
    +
    398  IMPLICIT NONE
    +
    399 
    +
    400  REAL, INTENT(IN ) :: YPTS
    +
    401  REAL, INTENT( OUT) :: XLON, XLAT, YLON, YLAT
    +
    402 
    +
    403  xlon=1/dlon
    +
    404  xlat=0.
    +
    405  ylon=0.
    +
    406  ylat=ylat_row(nint(ypts))
    +
    407 
    +
    408  END SUBROUTINE gaussian_map_jacob
    +
    409 
    +
    417  SUBROUTINE gaussian_grid_area(YPTS,AREA)
    +
    418  IMPLICIT NONE
    +
    419 
    +
    420  REAL, INTENT(IN ) :: YPTS
    +
    421  REAL, INTENT( OUT) :: AREA
    +
    422 
    +
    423  INTEGER :: J
    +
    424 
    +
    425  REAL :: WB, WLAT, WLATA, WLATB
    +
    426 
    +
    427  j = int(ypts)
    +
    428  wb=ypts-j
    +
    429  wlata=blat(j1+jh*(j-1))
    +
    430  wlatb=blat(j1+jh*j)
    +
    431  wlat=wlata+wb*(wlatb-wlata)
    +
    432  area=real(rerth**2*wlat*dlon/dpr)
    +
    433 
    +
    434  END SUBROUTINE gaussian_grid_area
    +
    435 end module ip_gaussian_grid_mod
    +
    436 
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Determine earth radius and shape.
    +
    Module containing common constants.
    +
    Gaussian grid coordinate transformations.
    +
    real, dimension(:), allocatable ylat_row
    dy/dlat for each row in 1/degrees.
    +
    integer jh
    Scan mode flag in 'j' direction.
    +
    subroutine gdswzd_gaussian(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.
    +
    real rerth
    Radius of the earth.
    +
    real dlon
    "i"-direction increment.
    +
    subroutine init_grib1(self, g1_desc)
    Initializes a gaussian grid given a grib1_descriptor object.
    +
    subroutine gaussian_grid_area(YPTS, AREA)
    Computes the grid box area for a gaussian cylindrical grid.
    +
    subroutine gaussian_vect_rot(CROT, SROT)
    Computes the vector rotation sines and cosines for a gaussian cylindrical grid.
    +
    subroutine gaussian_map_jacob(YPTS, XLON, XLAT, YLON, YLAT)
    Computes the map jacobians for a gaussian cylindrical grid.
    +
    subroutine init_grib2(self, g2_desc)
    Initializes a gaussian grid given a grib2_descriptor object.
    +
    real, dimension(:), allocatable blat
    Gaussian latitude for each parallel.
    +
    integer j1
    'j' index of first grid point within the global array of latitudes.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    subroutine splat(IDRT, JMAX, SLAT, WLAT)
    Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of ...
    Definition: splat.F:46
    + +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grid__descriptor__mod_8F90.html b/ver-5.1.0/ip__grid__descriptor__mod_8F90.html new file mode 100644 index 00000000..59cf6d5f --- /dev/null +++ b/ver-5.1.0/ip__grid__descriptor__mod_8F90.html @@ -0,0 +1,154 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_descriptor_mod.F90 File Reference
    +
    +
    + +

    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + + +

    +Data Types

    type  ip_grid_descriptor_mod::grib1_descriptor
     Descriptor representing a grib1 grib descriptor section (GDS) with an integer array. More...
     
    type  ip_grid_descriptor_mod::grib2_descriptor
     Grib-2 descriptor containing a grib2 GDT represented by an integer array. More...
     
    interface  ip_grid_descriptor_mod::init_descriptor
     
    type  ip_grid_descriptor_mod::ip_grid_descriptor
     Abstract descriptor object which represents a grib1 or grib2 descriptor. More...
     
    interface  ip_grid_descriptor_mod::operator(==)
     
    + + + + +

    +Modules

    module  ip_grid_descriptor_mod
     Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
     
    + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    type(grib1_descriptor) function, public ip_grid_descriptor_mod::init_grib1_descriptor (gds)
     Initialize grib-1 descriptor from integer grid definition section (GDS). More...
     
    type(grib2_descriptor) function, public ip_grid_descriptor_mod::init_grib2_descriptor (gdt_num, gdt_len, gdt_tmpl)
     Initialize grib-2 descriptor from integer grid definition template (GDT). More...
     
    logical function ip_grid_descriptor_mod::is_same_grid (grid1, grid2)
     Test whether two grid descriptors are the same. More...
     
    logical function ip_grid_descriptor_mod::is_same_grid_grib1 (self, grid_desc)
     Test whether two grib1_descriptors are the same. More...
     
    logical function ip_grid_descriptor_mod::is_same_grid_grib2 (self, grid_desc)
     Test whether two grib2_descriptors are the same. More...
     
    +

    Detailed Description

    +

    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.

    +
    Author
    Kyle Gerheiser
    + +

    Definition in file ip_grid_descriptor_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grid__descriptor__mod_8F90.js b/ver-5.1.0/ip__grid__descriptor__mod_8F90.js new file mode 100644 index 00000000..4b84aa87 --- /dev/null +++ b/ver-5.1.0/ip__grid__descriptor__mod_8F90.js @@ -0,0 +1,13 @@ +var ip__grid__descriptor__mod_8F90 = +[ + [ "grib1_descriptor", "structip__grid__descriptor__mod_1_1grib1__descriptor.html", "structip__grid__descriptor__mod_1_1grib1__descriptor" ], + [ "grib2_descriptor", "structip__grid__descriptor__mod_1_1grib2__descriptor.html", "structip__grid__descriptor__mod_1_1grib2__descriptor" ], + [ "init_descriptor", "interfaceip__grid__descriptor__mod_1_1init__descriptor.html", "interfaceip__grid__descriptor__mod_1_1init__descriptor" ], + [ "ip_grid_descriptor", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html", "structip__grid__descriptor__mod_1_1ip__grid__descriptor" ], + [ "operator(==)", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08" ], + [ "init_grib1_descriptor", "ip__grid__descriptor__mod_8F90.html#aa00884a7fca018535eaf0c2ebe26bc98", null ], + [ "init_grib2_descriptor", "ip__grid__descriptor__mod_8F90.html#a143ac06a2a20697d01606a259213b451", null ], + [ "is_same_grid", "ip__grid__descriptor__mod_8F90.html#a202219f9c5c84fa04d3eb1c2208358ec", null ], + [ "is_same_grid_grib1", "ip__grid__descriptor__mod_8F90.html#a5bb3c5230b88012bddc3922bfa1cb019", null ], + [ "is_same_grid_grib2", "ip__grid__descriptor__mod_8F90.html#a75ac34ea9372afaa29b0df2ce8919988", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__grid__descriptor__mod_8F90_source.html b/ver-5.1.0/ip__grid__descriptor__mod_8F90_source.html new file mode 100644 index 00000000..ee2abb74 --- /dev/null +++ b/ver-5.1.0/ip__grid__descriptor__mod_8F90_source.html @@ -0,0 +1,577 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_grid_descriptor_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + +
    16  implicit none
    +
    17 
    +
    18  private
    +
    19 
    +
    20  public :: ip_grid_descriptor
    + + +
    23 
    +
    24  public :: operator(==)
    +
    25 
    +
    28  type, abstract :: ip_grid_descriptor
    +
    29  integer :: grid_num
    +
    30  contains
    +
    32  procedure :: is_same_grid
    +
    33  end type ip_grid_descriptor
    +
    34 
    + +
    39  integer :: gds(200)
    +
    40  contains
    +
    42  procedure :: is_same_grid_grib1
    +
    43  end type grib1_descriptor
    +
    44 
    + +
    48  integer :: gdt_num
    +
    49  integer :: gdt_len
    +
    50  integer, allocatable :: gdt_tmpl(:)
    +
    51  contains
    +
    53  procedure :: is_same_grid_grib2
    +
    54  end type grib2_descriptor
    +
    55 
    +
    56  interface operator (==)
    +
    57  module procedure is_same_grid
    +
    58  end interface operator (==)
    +
    59 
    +
    60  interface init_descriptor
    +
    61  module procedure init_grib1_descriptor
    +
    62  module procedure init_grib2_descriptor
    +
    63  end interface init_descriptor
    +
    64 
    +
    65 contains
    +
    66 
    +
    74  function init_grib1_descriptor(gds) result(desc)
    +
    75  type(grib1_descriptor) :: desc
    +
    76  integer, intent(in) :: gds(:)
    +
    77  desc%gds = gds
    +
    78  desc%grid_num = gds(1)
    +
    79 
    +
    80  !call desc%decode_template()
    +
    81 
    +
    82  end function init_grib1_descriptor
    +
    83 
    +
    93  function init_grib2_descriptor(gdt_num, gdt_len, gdt_tmpl) result(desc)
    +
    94  type(grib2_descriptor) :: desc
    +
    95  integer, intent(in) :: gdt_num, gdt_len, gdt_tmpl(:)
    +
    96  desc%grid_num = gdt_num
    +
    97 
    +
    98  desc%gdt_num = gdt_num
    +
    99  desc%gdt_len = gdt_len
    +
    100  allocate(desc%gdt_tmpl(gdt_len))
    +
    101  desc%gdt_tmpl = gdt_tmpl
    +
    102 
    +
    103  !call desc%decode_template()
    +
    104 
    +
    105  end function init_grib2_descriptor
    +
    106 
    +
    115  logical function is_same_grid(grid1, grid2)
    +
    116  class(ip_grid_descriptor), intent(in) :: grid1, grid2
    +
    117 
    +
    118  select type(grid1)
    +
    119  type is(grib1_descriptor)
    +
    120  select type(grid2)
    +
    121  type is(grib1_descriptor)
    +
    122  is_same_grid = grid1%is_same_grid_grib1(grid2)
    +
    123  class default
    +
    124  is_same_grid = .false.
    +
    125  end select
    +
    126  type is(grib2_descriptor)
    +
    127  select type(grid2)
    +
    128  type is(grib2_descriptor)
    +
    129  is_same_grid = grid1%is_same_grid_grib2(grid2)
    +
    130  class default
    +
    131  is_same_grid = .false.
    +
    132  end select
    +
    133  end select
    +
    134 
    +
    135  end function is_same_grid
    +
    136 
    +
    145  logical function is_same_grid_grib1(self, grid_desc) result(same_grid)
    +
    146  class(grib1_descriptor), intent(in) :: self, grid_desc
    +
    147 
    +
    148  if (all(self%gds == grid_desc%gds)) then
    +
    149  same_grid = .true.
    +
    150  else
    +
    151  same_grid = .false.
    +
    152  end if
    +
    153 
    +
    154  end function is_same_grid_grib1
    +
    155 
    +
    164  logical function is_same_grid_grib2(self, grid_desc) result(same_grid)
    +
    165  class(grib2_descriptor), intent(in) :: self, grid_desc
    +
    166 
    +
    167  same_grid = .false.
    +
    168  if (self%grid_num == grid_desc%grid_num) then
    +
    169  if (self%gdt_len == grid_desc%gdt_len) then
    +
    170  if (all(self%gdt_tmpl == grid_desc%gdt_tmpl)) then
    +
    171  same_grid = .true.
    +
    172  end if
    +
    173  end if
    +
    174  end if
    +
    175 
    +
    176  end function is_same_grid_grib2
    +
    177 
    +
    178 
    +
    179 
    +
    180  ! subroutine decode_template_grib1(self)
    +
    181  ! type(grib1_descriptor), intent(inout) :: self
    +
    182 
    +
    183  ! integer :: im, jm, iwrap, jg
    +
    184  ! integer :: iscan, kscan, nscan, nscan_field_pos
    +
    185  ! integer :: jwrap1, jwrap2
    +
    186 
    +
    187  ! real :: dlat, dlon
    +
    188  ! real :: rlat1, rlat2
    +
    189  ! real :: rlon1, rlon2
    +
    190 
    +
    191  ! ! set a default value for this to check if it has changed
    +
    192  ! ! for rotated grids nscan is set = 3, but in other places it's not, so use this special value
    +
    193  ! ! just for field_position routine
    +
    194  ! nscan_field_pos = -1
    +
    195 
    +
    196  ! im = self%gds(2)
    +
    197  ! jm = self%gds(3)
    +
    198  ! iwrap = 0
    +
    199  ! jwrap1 = 0
    +
    200  ! jwrap2 = 0
    +
    201  ! nscan = mod(self%gds(11) / 32, 2)
    +
    202  ! kscan = 0
    +
    203 
    +
    204  ! select case(self%gds(1))
    +
    205  ! case(0)
    +
    206  ! rlon1=self%gds(5)*1.e-3
    +
    207  ! rlon2=self%gds(8)*1.e-3
    +
    208  ! iscan=mod(self%gds(11)/128,2)
    +
    209  ! if(iscan.eq.0) then
    +
    210  ! dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    211  ! else
    +
    212  ! dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    213  ! endif
    +
    214  ! iwrap=nint(360/abs(dlon))
    +
    215  ! if(im.lt.iwrap) iwrap=0
    +
    216  ! if(iwrap.gt.0.and.mod(iwrap,2).eq.0) then
    +
    217  ! rlat1=self%gds(4)*1.e-3
    +
    218  ! rlat2=self%gds(7)*1.e-3
    +
    219  ! dlat=abs(rlat2-rlat1)/(jm-1)
    +
    220  ! if(abs(rlat1).gt.90-0.25*dlat) then
    +
    221  ! jwrap1=2
    +
    222  ! elseif(abs(rlat1).gt.90-0.75*dlat) then
    +
    223  ! jwrap1=1
    +
    224  ! endif
    +
    225  ! if(abs(rlat2).gt.90-0.25*dlat) then
    +
    226  ! jwrap2=2*jm
    +
    227  ! elseif(abs(rlat2).gt.90-0.75*dlat) then
    +
    228  ! jwrap2=2*jm+1
    +
    229  ! endif
    +
    230  ! endif
    +
    231  ! case(1)
    +
    232  ! rlon1=self%gds(5)*1.e-3
    +
    233  ! rlon2=self%gds(8)*1.e-3
    +
    234  ! iscan=mod(self%gds(11)/128,2)
    +
    235  ! if(iscan.eq.0) then
    +
    236  ! dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    237  ! else
    +
    238  ! dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    239  ! endif
    +
    240  ! iwrap=nint(360/abs(dlon))
    +
    241  ! if(im.lt.iwrap) iwrap=0
    +
    242  ! case(4)
    +
    243  ! rlon1=self%gds(5)*1.e-3
    +
    244  ! rlon2=self%gds(8)*1.e-3
    +
    245  ! iscan=mod(self%gds(11)/128,2)
    +
    246  ! if(iscan.eq.0) then
    +
    247  ! dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    248  ! else
    +
    249  ! dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    250  ! endif
    +
    251  ! iwrap=nint(360/abs(dlon))
    +
    252  ! if(im.lt.iwrap) iwrap=0
    +
    253  ! if(iwrap.gt.0.and.mod(iwrap,2).eq.0) then
    +
    254  ! jg=self%gds(10)*2
    +
    255  ! if(jm.eq.jg) then
    +
    256  ! jwrap1=1
    +
    257  ! jwrap2=2*jm+1
    +
    258  ! endif
    +
    259  ! endif
    +
    260  ! case(203)
    +
    261  ! ! why is nscan set to 3 for this grid?
    +
    262  ! nscan_field_pos = 3
    +
    263  ! kscan=mod(self%gds(11) / 256, 2)
    +
    264  ! case default
    +
    265  ! print *, "grib1 grid type ", self%gds(1), " not recognized"
    +
    266  ! error stop
    +
    267  ! end select
    +
    268 
    +
    269  ! self%im = im
    +
    270  ! self%jm = jm
    +
    271  ! self%nm = im * jm
    +
    272  ! self%iwrap = iwrap
    +
    273  ! self%jwrap1 = jwrap1
    +
    274  ! self%jwrap2 = jwrap2
    +
    275  ! self%nscan = nscan
    +
    276 
    +
    277  ! if (nscan_field_pos == -1) then
    +
    278  ! ! just use regular value of nscan
    +
    279  ! self%nscan_field_pos = nscan
    +
    280  ! else
    +
    281  ! ! nscan = 3 for rotated grids and is set to 3 for use in field_position
    +
    282  ! self%nscan_field_pos = nscan_field_pos
    +
    283  ! end if
    +
    284 
    +
    285  ! self%kscan = kscan
    +
    286 
    +
    287  ! end subroutine decode_template_grib1
    +
    288 
    +
    289  ! subroutine decode_template_grib2(self)
    +
    290  ! type(grib2_descriptor), intent(inout) :: self
    +
    291 
    +
    292  ! integer :: im, jm, iwrap, jg
    +
    293  ! integer :: i_offset_odd, i_offset_even
    +
    294  ! integer :: iscan, kscan, nscan, nscan_field_pos
    +
    295  ! integer :: jwrap1, jwrap2, iscale
    +
    296 
    +
    297  ! real :: dlat, dlon
    +
    298  ! real :: rlat1, rlat2
    +
    299  ! real :: rlon1, rlon2
    +
    300 
    +
    301  ! nscan_field_pos = -1
    +
    302 
    +
    303  ! select case(self%gdt_num)
    +
    304  ! ! EQUIDISTANT CYLINDRICAL
    +
    305  ! case(0)
    +
    306  ! im=self%gdt_tmpl(8)
    +
    307  ! jm=self%gdt_tmpl(9)
    +
    308  ! nscan=mod(self%gdt_tmpl(19)/32,2)
    +
    309  ! kscan=0
    +
    310  ! iscale=self%gdt_tmpl(10)*self%gdt_tmpl(11)
    +
    311  ! if(iscale==0) iscale=10**6
    +
    312  ! rlon1=float(self%gdt_tmpl(13))/float(iscale)
    +
    313  ! rlon2=float(self%gdt_tmpl(16))/float(iscale)
    +
    314  ! iscan=mod(self%gdt_tmpl(19)/128,2)
    +
    315  ! if(iscan.eq.0) then
    +
    316  ! dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    317  ! else
    +
    318  ! dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    319  ! endif
    +
    320  ! iwrap=nint(360/abs(dlon))
    +
    321  ! if(im.lt.iwrap) iwrap=0
    +
    322  ! jwrap1=0
    +
    323  ! jwrap2=0
    +
    324  ! if(iwrap.gt.0.and.mod(iwrap,2).eq.0) then
    +
    325  ! rlat1=float(self%gdt_tmpl(12))/float(iscale)
    +
    326  ! rlat2=float(self%gdt_tmpl(15))/float(iscale)
    +
    327  ! dlat=abs(rlat2-rlat1)/(jm-1)
    +
    328  ! if(abs(rlat1).gt.90-0.25*dlat) then
    +
    329  ! jwrap1=2
    +
    330  ! elseif(abs(rlat1).gt.90-0.75*dlat) then
    +
    331  ! jwrap1=1
    +
    332  ! endif
    +
    333  ! if(abs(rlat2).gt.90-0.25*dlat) then
    +
    334  ! jwrap2=2*jm
    +
    335  ! elseif(abs(rlat2).gt.90-0.75*dlat) then
    +
    336  ! jwrap2=2*jm+1
    +
    337  ! endif
    +
    338  ! endif
    +
    339  ! case(1)
    +
    340  ! i_offset_odd=mod(self%gdt_tmpl(19)/8,2)
    +
    341  ! i_offset_even=mod(self%gdt_tmpl(19)/4,2)
    +
    342  ! im=self%gdt_tmpl(8)
    +
    343  ! jm=self%gdt_tmpl(9)
    +
    344  ! iwrap=0
    +
    345  ! jwrap1=0
    +
    346  ! jwrap2=0
    +
    347  ! kscan=0
    +
    348  ! nscan=mod(self%gdt_tmpl(19)/32,2)
    +
    349  ! if(i_offset_odd/=i_offset_even)then
    +
    350  ! kscan=i_offset_odd
    +
    351  ! nscan_field_pos=3
    +
    352  ! endif
    +
    353  ! ! MERCATOR CYLINDRICAL
    +
    354  ! case(10)
    +
    355  ! im=self%gdt_tmpl(8)
    +
    356  ! jm=self%gdt_tmpl(9)
    +
    357  ! rlon1=float(self%gdt_tmpl(11))*1.0e-6
    +
    358  ! rlon2=float(self%gdt_tmpl(15))*1.0e-6
    +
    359  ! iscan=mod(self%gdt_tmpl(16)/128,2)
    +
    360  ! if(iscan.eq.0) then
    +
    361  ! dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    362  ! else
    +
    363  ! dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    364  ! endif
    +
    365  ! iwrap=nint(360/abs(dlon))
    +
    366  ! if(im.lt.iwrap) iwrap=0
    +
    367  ! jwrap1=0
    +
    368  ! jwrap2=0
    +
    369  ! kscan=0
    +
    370  ! nscan=mod(self%gdt_tmpl(16)/32,2)
    +
    371  ! ! POLAR STEREOGRAPHIC AZIMUTHAL
    +
    372  ! case(20)
    +
    373  ! im=self%gdt_tmpl(8)
    +
    374  ! jm=self%gdt_tmpl(9)
    +
    375  ! nscan=mod(self%gdt_tmpl(18)/32,2)
    +
    376  ! iwrap=0
    +
    377  ! jwrap1=0
    +
    378  ! jwrap2=0
    +
    379  ! kscan=0
    +
    380  ! ! LAMBERT CONFORMAL CONICAL
    +
    381  ! case(30)
    +
    382  ! im=self%gdt_tmpl(8)
    +
    383  ! jm=self%gdt_tmpl(9)
    +
    384  ! nscan=mod(self%gdt_tmpl(18)/32,2)
    +
    385  ! iwrap=0
    +
    386  ! jwrap1=0
    +
    387  ! jwrap2=0
    +
    388  ! kscan=0
    +
    389  ! ! GAUSSIAN CYLINDRICAL
    +
    390  ! case(40)
    +
    391  ! im=self%gdt_tmpl(8)
    +
    392  ! jm=self%gdt_tmpl(9)
    +
    393  ! iscale=self%gdt_tmpl(10)*self%gdt_tmpl(11)
    +
    394  ! if(iscale==0) iscale=10**6
    +
    395  ! rlon1=float(self%gdt_tmpl(13))/float(iscale)
    +
    396  ! rlon2=float(self%gdt_tmpl(16))/float(iscale)
    +
    397  ! iscan=mod(self%gdt_tmpl(19)/128,2)
    +
    398  ! if(iscan.eq.0) then
    +
    399  ! dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    400  ! else
    +
    401  ! dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    402  ! endif
    +
    403  ! iwrap=nint(360/abs(dlon))
    +
    404  ! if(im.lt.iwrap) iwrap=0
    +
    405  ! jwrap1=0
    +
    406  ! jwrap2=0
    +
    407  ! if(iwrap.gt.0.and.mod(iwrap,2).eq.0) then
    +
    408  ! jg=self%gdt_tmpl(18)*2
    +
    409  ! if(jm.eq.jg) then
    +
    410  ! jwrap1=1
    +
    411  ! jwrap2=2*jm+1
    +
    412  ! endif
    +
    413  ! endif
    +
    414  ! nscan=mod(self%gdt_tmpl(19)/32,2)
    +
    415  ! kscan=0
    +
    416  ! case default
    +
    417  ! print *, "gdt_num ", self%gdt_num, " not recognized"
    +
    418  ! error stop
    +
    419  ! end select
    +
    420 
    +
    421  ! self%im = im
    +
    422  ! self%jm = jm
    +
    423  ! self%nm = im*jm
    +
    424  ! self%iwrap = iwrap
    +
    425  ! self%jwrap1 = jwrap1
    +
    426  ! self%jwrap2 = jwrap2
    +
    427  ! self%nscan = nscan
    +
    428  ! if (nscan_field_pos == -1) then
    +
    429  ! self%nscan_field_pos = nscan
    +
    430  ! else
    +
    431  ! self%nscan_field_pos = nscan_field_pos
    +
    432  ! end if
    +
    433  ! self%kscan = kscan
    +
    434 
    +
    435  ! end subroutine decode_template_grib2
    +
    436 
    +
    437  ! subroutine earth_radius(self, radius, eccen_squared)
    +
    438  ! class(ip_grid_descriptor), intent(in) :: self
    +
    439  ! real, intent(out) :: radius, eccen_squared
    +
    440 
    +
    441  ! real :: flat, major_axis, minor_axis
    +
    442  ! logical :: elliptical
    +
    443 
    +
    444  ! select type(self)
    +
    445  ! type is(grib1_descriptor)
    +
    446  ! associate(gds => self%gds)
    +
    447  ! select case(gds(1))
    +
    448  ! case(0)
    +
    449  ! radius = 6.3712d6
    +
    450  ! eccen_squared = 0d0
    +
    451  ! case(1)
    +
    452  ! radius = 6.3712d6
    +
    453  ! eccen_squared = 0d0
    +
    454  ! case(3)
    +
    455  ! radius = 6.3712d6
    +
    456  ! eccen_squared = 0d0
    +
    457  ! case(4)
    +
    458  ! radius = 6.3712d6
    +
    459  ! eccen_squared = 0d0
    +
    460  ! case(5)
    +
    461  ! elliptical = mod(gds(6) / 64, 2) == 1
    +
    462  ! if (.not. elliptical) then
    +
    463  ! radius = 6.3712d6
    +
    464  ! eccen_squared = 0d0
    +
    465  ! else
    +
    466  ! radius = 6.378137E6 ! WGS-84
    +
    467  ! eccen_squared = 0.00669437999013d0
    +
    468  ! end if
    +
    469  ! case(203)
    +
    470  ! radius = 6.3712d6
    +
    471  ! eccen_squared = 0d0
    +
    472  ! case(205)
    +
    473  ! radius = 6.3712d6
    +
    474  ! eccen_squared = 0d0
    +
    475  ! case default
    +
    476  ! print *, "grib1 grid not recognized. gds(1) = ", gds(1)
    +
    477  ! error stop
    +
    478  ! end select
    +
    479  ! end associate
    +
    480  ! type is(grib2_descriptor)
    +
    481  ! associate(gdt_tmpl => self%gdt_tmpl)
    +
    482  ! select case (gdt_tmpl(1))
    +
    483  ! case (0)
    +
    484  ! radius = 6367470.0
    +
    485  ! eccen_squared = 0.0
    +
    486  ! case (1) ! user specified spherical
    +
    487  ! radius = float(gdt_tmpl(3))/float(10**gdt_tmpl(2))
    +
    488  ! eccen_squared = 0.0
    +
    489  ! case (2) ! iau 1965
    +
    490  ! radius = 6378160.0 ! semi major axis
    +
    491  ! flat = 1.0/297.0 ! flattening
    +
    492  ! eccen_squared = (2.0*flat) - (flat**2)
    +
    493  ! case (3) ! user specified elliptical (km)
    +
    494  ! major_axis = float(gdt_tmpl(5))/float(10**gdt_tmpl(4))
    +
    495  ! major_axis = major_axis * 1000.0
    +
    496  ! minor_axis = float(gdt_tmpl(7))/float(10**gdt_tmpl(6))
    +
    497  ! minor_axis = minor_axis * 1000.0
    +
    498  ! eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
    +
    499  ! radius = major_axis
    +
    500  ! case (4) ! iag-grs80 model
    +
    501  ! radius = 6378137.0 ! semi major axis
    +
    502  ! flat = 1.0/298.2572 ! flattening
    +
    503  ! eccen_squared = (2.0*flat) - (flat**2)
    +
    504  ! case (5) ! wgs84 datum
    +
    505  ! radius = 6378137.0 ! semi major axis
    +
    506  ! eccen_squared = 0.00669437999013
    +
    507  ! case (6)
    +
    508  ! radius = 6371229.0
    +
    509  ! eccen_squared = 0.0
    +
    510  ! case (7) ! user specified elliptical (m)
    +
    511  ! major_axis = float(gdt_tmpl(5))/float(10**gdt_tmpl(4))
    +
    512  ! minor_axis = float(gdt_tmpl(7))/float(10**gdt_tmpl(6))
    +
    513  ! eccen_squared = 1.0 - (minor_axis**2 / major_axis**2)
    +
    514  ! radius = major_axis
    +
    515  ! case (8)
    +
    516  ! radius = 6371200.0
    +
    517  ! eccen_squared = 0.0
    +
    518  ! case default
    +
    519  ! radius = -9999.
    +
    520  ! eccen_squared = -9999.
    +
    521  ! error stop
    +
    522  ! end select
    +
    523  ! end associate
    +
    524  ! class default
    +
    525  ! print *, "unknown descriptor type"
    +
    526  ! error stop
    +
    527  ! end select
    +
    528  ! end subroutine earth_radius
    +
    529 
    +
    530 end module ip_grid_descriptor_mod
    + +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    type(grib2_descriptor) function, public init_grib2_descriptor(gdt_num, gdt_len, gdt_tmpl)
    Initialize grib-2 descriptor from integer grid definition template (GDT).
    +
    logical function is_same_grid(grid1, grid2)
    Test whether two grid descriptors are the same.
    +
    logical function is_same_grid_grib1(self, grid_desc)
    Test whether two grib1_descriptors are the same.
    +
    logical function is_same_grid_grib2(self, grid_desc)
    Test whether two grib2_descriptors are the same.
    +
    type(grib1_descriptor) function, public init_grib1_descriptor(gds)
    Initialize grib-1 descriptor from integer grid definition section (GDS).
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract descriptor object which represents a grib1 or grib2 descriptor.
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grid__factory__mod_8F90.html b/ver-5.1.0/ip__grid__factory__mod_8F90.html new file mode 100644 index 00000000..fe2f1ead --- /dev/null +++ b/ver-5.1.0/ip__grid__factory__mod_8F90.html @@ -0,0 +1,138 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_factory_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_factory_mod.F90 File Reference
    +
    +
    + +

    Routines for creating an ip_grid given a Grib descriptor. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  ip_grid_factory_mod::init_grid
     
    + + + + +

    +Modules

    module  ip_grid_factory_mod
     Routines for creating an ip_grid given a Grib descriptor.
     
    + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_grid_factory_mod::init_grid_generic (grid, grid_desc)
     Initializes a polymorphic ip_grid object from an ip_grid_descriptor. More...
     
    subroutine ip_grid_factory_mod::init_grid_grib1 (grid, g1_desc)
     Initializes a polymorphic ip_grid from a grib1_descriptor. More...
     
    subroutine ip_grid_factory_mod::init_grid_grib2 (grid, g2_desc)
     Initializes a polymorphic ip_grid from a grib2_descriptor. More...
     
    +

    Detailed Description

    +

    Routines for creating an ip_grid given a Grib descriptor.

    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition in file ip_grid_factory_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grid__factory__mod_8F90.js b/ver-5.1.0/ip__grid__factory__mod_8F90.js new file mode 100644 index 00000000..c8acead3 --- /dev/null +++ b/ver-5.1.0/ip__grid__factory__mod_8F90.js @@ -0,0 +1,7 @@ +var ip__grid__factory__mod_8F90 = +[ + [ "init_grid", "interfaceip__grid__factory__mod_1_1init__grid.html", "interfaceip__grid__factory__mod_1_1init__grid" ], + [ "init_grid_generic", "ip__grid__factory__mod_8F90.html#a2d2ea07d353bae8b057471aa99b58e46", null ], + [ "init_grid_grib1", "ip__grid__factory__mod_8F90.html#ad8906ed6fe52c2426c0ff09ce50b6fc5", null ], + [ "init_grid_grib2", "ip__grid__factory__mod_8F90.html#aa187dc8dbd1d004a51cc0e9826ffa225", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__grid__factory__mod_8F90_source.html b/ver-5.1.0/ip__grid__factory__mod_8F90_source.html new file mode 100644 index 00000000..f2e3bfce --- /dev/null +++ b/ver-5.1.0/ip__grid__factory__mod_8F90_source.html @@ -0,0 +1,224 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_factory_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_grid_factory_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    6 
    + + +
    13  use ip_grids_mod
    +
    14  use ip_grid_mod
    +
    15  implicit none
    +
    16 
    +
    17  private
    +
    18  public :: init_grid
    +
    19 
    +
    20  interface init_grid
    +
    21  module procedure init_grid_generic
    +
    22  end interface init_grid
    +
    23 
    +
    24 contains
    +
    25 
    +
    33  subroutine init_grid_generic(grid, grid_desc)
    +
    34  class(ip_grid_descriptor), intent(in) :: grid_desc
    +
    35  class(ip_grid), allocatable, intent(out) :: grid
    +
    36 
    +
    37  select type(grid_desc)
    +
    38  type is(grib1_descriptor)
    +
    39  call init_grid_grib1(grid, grid_desc)
    +
    40  type is(grib2_descriptor)
    +
    41  call init_grid_grib2(grid, grid_desc)
    +
    42  end select
    +
    43  end subroutine init_grid_generic
    +
    44 
    +
    53  subroutine init_grid_grib1(grid, g1_desc)
    +
    54  type(grib1_descriptor), intent(in) :: g1_desc
    +
    55  class(ip_grid), allocatable, intent(out) :: grid
    +
    56 
    +
    57  select case(g1_desc%grid_num)
    +
    58  case(:-1)
    +
    59  allocate(ip_station_points_grid::grid)
    + +
    61  allocate(ip_equid_cylind_grid::grid)
    + +
    63  allocate(ip_mercator_grid::grid)
    + +
    65  allocate(ip_lambert_conf_grid::grid)
    + +
    67  allocate(ip_gaussian_grid::grid)
    + +
    69  allocate(ip_polar_stereo_grid::grid)
    + +
    71  allocate(ip_rot_equid_cylind_egrid::grid)
    + +
    73  allocate(ip_rot_equid_cylind_grid::grid)
    +
    74  end select
    +
    75 
    +
    76  call grid%init(g1_desc)
    +
    77  allocate(grid%descriptor, source = g1_desc)
    +
    78  end subroutine init_grid_grib1
    +
    79 
    +
    80 
    +
    89  subroutine init_grid_grib2(grid, g2_desc)
    +
    90  type(grib2_descriptor), intent(in) :: g2_desc
    +
    91  class(ip_grid), allocatable, intent(out) :: grid
    +
    92 
    +
    93  integer :: i_offset_odd, i_offset_even
    +
    94 
    +
    95  select case(g2_desc%grid_num)
    +
    96  case(:-1)
    +
    97  allocate(ip_station_points_grid::grid)
    + +
    99  allocate(ip_equid_cylind_grid::grid)
    + +
    101  i_offset_odd = mod(g2_desc%gdt_tmpl(19) / 8, 2)
    +
    102  i_offset_even = mod(g2_desc%gdt_tmpl(19) / 4, 2)
    +
    103  if (i_offset_odd /= i_offset_even) then
    +
    104  allocate(ip_rot_equid_cylind_egrid::grid)
    +
    105  else
    +
    106  allocate(ip_rot_equid_cylind_grid::grid)
    +
    107  end if
    + +
    109  allocate(ip_mercator_grid::grid)
    + +
    111  allocate(ip_polar_stereo_grid::grid)
    + +
    113  allocate(ip_lambert_conf_grid::grid)
    + +
    115  allocate(ip_gaussian_grid::grid)
    + +
    117  allocate(ip_rot_equid_cylind_egrid::grid)
    + +
    119  allocate(ip_rot_equid_cylind_grid::grid)
    +
    120  case default
    +
    121  print *, "gdt_num: ", g2_desc%gdt_num, " not recognized"
    +
    122  error stop
    +
    123  end select
    +
    124 
    +
    125  call grid%init(g2_desc)
    +
    126  allocate(grid%descriptor, source = g2_desc)
    +
    127  end subroutine init_grid_grib2
    +
    128 
    +
    129 end module ip_grid_factory_mod
    + +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Routines for creating an ip_grid given a Grib descriptor.
    +
    subroutine init_grid_generic(grid, grid_desc)
    Initializes a polymorphic ip_grid object from an ip_grid_descriptor.
    +
    subroutine init_grid_grib2(grid, g2_desc)
    Initializes a polymorphic ip_grid from a grib2_descriptor.
    +
    subroutine init_grid_grib1(grid, g1_desc)
    Initializes a polymorphic ip_grid from a grib1_descriptor.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    integer, parameter, public rot_equid_cylind_e_grid_id_grib2
    Integer grid number for rotated equidistant cylindrical E-stagger grid (grib2)
    Definition: ip_grid_mod.F90:28
    +
    integer, parameter, public lambert_conf_grid_id_grib2
    Integer grid number for Lambert conformal grid in grib2.
    Definition: ip_grid_mod.F90:26
    +
    integer, parameter, public gaussian_grid_id_grib2
    Integer grid number for Gaussian grid in grib2.
    Definition: ip_grid_mod.F90:27
    +
    integer, parameter, public equid_cylind_grid_id_grib2
    Integer grid number for equidistant cylindrical grid in grib2.
    Definition: ip_grid_mod.F90:22
    +
    integer, parameter, public gaussian_grid_id_grib1
    Integer grid number for Gaussian grid in grib1.
    Definition: ip_grid_mod.F90:17
    +
    integer, parameter, public rot_equid_cylind_e_grid_id_grib1
    Integer grid number for rotated equidistant cylindrical E-stagger grid.
    Definition: ip_grid_mod.F90:19
    +
    integer, parameter, public polar_stereo_grid_id_grib2
    Integer grid number for polar stereo grid in grib2.
    Definition: ip_grid_mod.F90:25
    +
    integer, parameter, public lambert_conf_grid_id_grib1
    Integer grid number for Lambert Conformal grid in grib1.
    Definition: ip_grid_mod.F90:16
    +
    integer, parameter, public mercator_grid_id_grib1
    Integer grid number for Mercator grid in grib1.
    Definition: ip_grid_mod.F90:15
    +
    integer, parameter, public equid_cylind_grid_id_grib1
    Integer grid number for equidistant cylindrical grid in grib1.
    Definition: ip_grid_mod.F90:14
    +
    integer, parameter, public rot_equid_cylind_b_grid_id_grib1
    Integer grid number for rotated equidistant cylindrical B-stagger grid.
    Definition: ip_grid_mod.F90:20
    +
    integer, parameter, public rot_equid_cylind_b_grid_id_grib2
    Integer grid number for rotated equidistant cylindrical B-stagger grid (grib2)
    Definition: ip_grid_mod.F90:29
    +
    integer, parameter, public rot_equid_cylind_grid_id_grib2
    Integer grid number for rotated equidistant cylindrical grid in grib2.
    Definition: ip_grid_mod.F90:23
    +
    integer, parameter, public mercator_grid_id_grib2
    Integer grid number for Mercator grid in grib2.
    Definition: ip_grid_mod.F90:24
    +
    integer, parameter, public polar_stereo_grid_id_grib1
    Integer grid number for polar stereo grid in grib1.
    Definition: ip_grid_mod.F90:18
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract descriptor object which represents a grib1 or grib2 descriptor.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grid__mod_8F90.html b/ver-5.1.0/ip__grid__mod_8F90.html new file mode 100644 index 00000000..c8b0a83c --- /dev/null +++ b/ver-5.1.0/ip__grid__mod_8F90.html @@ -0,0 +1,203 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_mod.F90 File Reference
    +
    +
    + +

    Abstract ip_grid type. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + + + + + + + +

    +Data Types

    interface  ip_grid_mod::gdswzd_interface
     
    interface  ip_grid_mod::init_grib1_interface
     
    interface  ip_grid_mod::init_grib2_interface
     
    type  ip_grid_mod::ip_grid
     Abstract grid that holds fields and methods common to all grids. More...
     
    interface  ip_grid_mod::operator(==)
     Check equality. More...
     
    + + + + +

    +Modules

    module  ip_grid_mod
     Abstract ip_grid type.
     
    + + + + + + + + + + + + + +

    +Functions/Subroutines

    integer function ip_grid_mod::field_pos (self, i, j)
     Returns the field position for a given grid point. More...
     
    logical function ip_grid_mod::is_same_grid (grid1, grid2)
     Compares two grids. More...
     
    subroutine, public ip_grid_mod::unuse_ncep_post_arakawa ()
     Disables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=.false. More...
     
    subroutine, public ip_grid_mod::use_ncep_post_arakawa ()
     Enables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=.true. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    integer, parameter, public ip_grid_mod::equid_cylind_grid_id_grib1 = 0
     Integer grid number for equidistant cylindrical grid in grib1. More...
     
    integer, parameter, public ip_grid_mod::equid_cylind_grid_id_grib2 = 0
     Integer grid number for equidistant cylindrical grid in grib2. More...
     
    integer, parameter, public ip_grid_mod::gaussian_grid_id_grib1 = 4
     Integer grid number for Gaussian grid in grib1. More...
     
    integer, parameter, public ip_grid_mod::gaussian_grid_id_grib2 = 40
     Integer grid number for Gaussian grid in grib2. More...
     
    integer, parameter, public ip_grid_mod::lambert_conf_grid_id_grib1 = 3
     Integer grid number for Lambert Conformal grid in grib1. More...
     
    integer, parameter, public ip_grid_mod::lambert_conf_grid_id_grib2 = 30
     Integer grid number for Lambert conformal grid in grib2. More...
     
    integer, parameter, public ip_grid_mod::mercator_grid_id_grib1 = 1
     Integer grid number for Mercator grid in grib1. More...
     
    integer, parameter, public ip_grid_mod::mercator_grid_id_grib2 = 10
     Integer grid number for Mercator grid in grib2. More...
     
    logical, save, public ip_grid_mod::ncep_post_arakawa =.false.
     Use ncep_post/wgrib2-compatible version of init_grib2() for non-E Arakawa grids (enable with use_ncep_post_arakawa()) More...
     
    integer, parameter, public ip_grid_mod::polar_stereo_grid_id_grib1 = 5
     Integer grid number for polar stereo grid in grib1. More...
     
    integer, parameter, public ip_grid_mod::polar_stereo_grid_id_grib2 = 20
     Integer grid number for polar stereo grid in grib2. More...
     
    integer, parameter, public ip_grid_mod::rot_equid_cylind_b_grid_id_grib1 = 205
     Integer grid number for rotated equidistant cylindrical B-stagger grid. More...
     
    integer, parameter, public ip_grid_mod::rot_equid_cylind_b_grid_id_grib2 = 32769
     Integer grid number for rotated equidistant cylindrical B-stagger grid (grib2) More...
     
    integer, parameter, public ip_grid_mod::rot_equid_cylind_e_grid_id_grib1 = 203
     Integer grid number for rotated equidistant cylindrical E-stagger grid. More...
     
    integer, parameter, public ip_grid_mod::rot_equid_cylind_e_grid_id_grib2 = 32768
     Integer grid number for rotated equidistant cylindrical E-stagger grid (grib2) More...
     
    integer, parameter, public ip_grid_mod::rot_equid_cylind_grid_id_grib2 = 1
     Integer grid number for rotated equidistant cylindrical grid in grib2. More...
     
    +

    Detailed Description

    +

    Abstract ip_grid type.

    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition in file ip_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grid__mod_8F90.js b/ver-5.1.0/ip__grid__mod_8F90.js new file mode 100644 index 00000000..e5002d6d --- /dev/null +++ b/ver-5.1.0/ip__grid__mod_8F90.js @@ -0,0 +1,28 @@ +var ip__grid__mod_8F90 = +[ + [ "gdswzd_interface", "interfaceip__grid__mod_1_1gdswzd__interface.html", "interfaceip__grid__mod_1_1gdswzd__interface" ], + [ "init_grib1_interface", "interfaceip__grid__mod_1_1init__grib1__interface.html", "interfaceip__grid__mod_1_1init__grib1__interface" ], + [ "init_grib2_interface", "interfaceip__grid__mod_1_1init__grib2__interface.html", "interfaceip__grid__mod_1_1init__grib2__interface" ], + [ "ip_grid", "structip__grid__mod_1_1ip__grid.html", "structip__grid__mod_1_1ip__grid" ], + [ "operator(==)", "interfaceip__grid__mod_1_1operator_07_0a_0a_08.html", "interfaceip__grid__mod_1_1operator_07_0a_0a_08" ], + [ "field_pos", "ip__grid__mod_8F90.html#a63572318d74ec94c20c5ccd6ded2d442", null ], + [ "is_same_grid", "ip__grid__mod_8F90.html#a663bda9af9dd991a09ba0f0de66dc045", null ], + [ "unuse_ncep_post_arakawa", "ip__grid__mod_8F90.html#ac8e716adbe5c1156bfd20f936a4205de", null ], + [ "use_ncep_post_arakawa", "ip__grid__mod_8F90.html#a1d570947cf124c28ba67305494bff450", null ], + [ "equid_cylind_grid_id_grib1", "ip__grid__mod_8F90.html#ad96da95d40beceb1a1c405971e8130bb", null ], + [ "equid_cylind_grid_id_grib2", "ip__grid__mod_8F90.html#a3b5ae57fe3d6d365cfd1ccdb4feb8ac6", null ], + [ "gaussian_grid_id_grib1", "ip__grid__mod_8F90.html#a45e8afad72b1b8856b3e44f2dd3123b3", null ], + [ "gaussian_grid_id_grib2", "ip__grid__mod_8F90.html#a36a9a73ecd50353f892341ae8a5c8316", null ], + [ "lambert_conf_grid_id_grib1", "ip__grid__mod_8F90.html#ab82b90d20f38ff39741f6890fa422d16", null ], + [ "lambert_conf_grid_id_grib2", "ip__grid__mod_8F90.html#a2e49846c9122b1fe1fcdbb2913fc32fe", null ], + [ "mercator_grid_id_grib1", "ip__grid__mod_8F90.html#ab9ff525eca4f053b04ec96a83cb06682", null ], + [ "mercator_grid_id_grib2", "ip__grid__mod_8F90.html#af9c58af5162d96cb7d1ac5001139b856", null ], + [ "ncep_post_arakawa", "ip__grid__mod_8F90.html#a88751d2ee535d807b6d420fcfb99ee71", null ], + [ "polar_stereo_grid_id_grib1", "ip__grid__mod_8F90.html#afee73c2f09ea9de43c156dc594ae1df1", null ], + [ "polar_stereo_grid_id_grib2", "ip__grid__mod_8F90.html#a5b3ad320b41791e65966e1bb498e9ae3", null ], + [ "rot_equid_cylind_b_grid_id_grib1", "ip__grid__mod_8F90.html#adb7d7d18410aaae52d7eee2e97f04b14", null ], + [ "rot_equid_cylind_b_grid_id_grib2", "ip__grid__mod_8F90.html#adbda63b51409aaed34a707b222da8c43", null ], + [ "rot_equid_cylind_e_grid_id_grib1", "ip__grid__mod_8F90.html#a4e11ce780c3d165c282684188890af1c", null ], + [ "rot_equid_cylind_e_grid_id_grib2", "ip__grid__mod_8F90.html#a248f834201bea9295bbe6a99abd038f8", null ], + [ "rot_equid_cylind_grid_id_grib2", "ip__grid__mod_8F90.html#adc7c650c524eb6425e77b2e0eac0979a", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__grid__mod_8F90_source.html b/ver-5.1.0/ip__grid__mod_8F90_source.html new file mode 100644 index 00000000..7f842a2c --- /dev/null +++ b/ver-5.1.0/ip__grid__mod_8F90_source.html @@ -0,0 +1,292 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + + +
    12  implicit none
    +
    13 
    +
    14  integer, public, parameter :: equid_cylind_grid_id_grib1 = 0
    +
    15  integer, public, parameter :: mercator_grid_id_grib1 = 1
    +
    16  integer, public, parameter :: lambert_conf_grid_id_grib1 = 3
    +
    17  integer, public, parameter :: gaussian_grid_id_grib1 = 4
    +
    18  integer, public, parameter :: polar_stereo_grid_id_grib1 = 5
    +
    19  integer, public, parameter :: rot_equid_cylind_e_grid_id_grib1 = 203
    +
    20  integer, public, parameter :: rot_equid_cylind_b_grid_id_grib1 = 205
    +
    21 
    +
    22  integer, public, parameter :: equid_cylind_grid_id_grib2 = 0
    +
    23  integer, public, parameter :: rot_equid_cylind_grid_id_grib2 = 1
    +
    24  integer, public, parameter :: mercator_grid_id_grib2 = 10
    +
    25  integer, public, parameter :: polar_stereo_grid_id_grib2 = 20
    +
    26  integer, public, parameter :: lambert_conf_grid_id_grib2 = 30
    +
    27  integer, public, parameter :: gaussian_grid_id_grib2 = 40
    +
    28  integer, public, parameter :: rot_equid_cylind_e_grid_id_grib2 = 32768
    +
    29  integer, public, parameter :: rot_equid_cylind_b_grid_id_grib2 = 32769
    +
    30 
    +
    31  logical, public, save :: ncep_post_arakawa=.false.
    +
    32 
    +
    33  private
    +
    34  public :: ip_grid
    +
    35  public :: gdswzd_interface
    +
    36  public :: operator(==)
    +
    37  public :: use_ncep_post_arakawa
    +
    38  public :: unuse_ncep_post_arakawa
    +
    39 
    +
    58  type, abstract :: ip_grid
    +
    59  class(ip_grid_descriptor), allocatable :: descriptor
    +
    60 
    +
    61  integer :: im
    +
    62  integer :: jm
    +
    63  integer :: nm
    +
    64 
    +
    69  integer :: nscan
    +
    70  integer :: kscan
    +
    71 
    +
    72  integer :: nscan_field_pos
    +
    73 
    +
    74  integer :: iwrap
    +
    75  integer :: jwrap1
    +
    76  integer :: jwrap2
    +
    77  real :: rerth
    +
    78  real :: eccen_squared
    +
    79  contains
    +
    81  procedure(init_grib1_interface), deferred :: init_grib1
    +
    83  procedure(init_grib2_interface), deferred :: init_grib2
    +
    85  procedure(gdswzd_interface), deferred :: gdswzd
    +
    88  procedure :: field_pos
    +
    90  generic :: init => init_grib1, init_grib2
    +
    91  end type ip_grid
    +
    92 
    +
    93  abstract interface
    +
    94 
    +
    125  subroutine gdswzd_interface(self, iopt, npts, fill, xpts, ypts, rlon, rlat, nret, crot, srot, &
    +
    126  xlon, xlat, ylon, ylat, area)
    +
    127  import
    +
    128  class(ip_grid), intent(in) :: self
    +
    129  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    130  INTEGER, INTENT( OUT) :: NRET
    +
    131  !
    +
    132  REAL, INTENT(IN ) :: FILL
    +
    133  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    134  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    135  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    136  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    137  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    138  end subroutine gdswzd_interface
    +
    139 
    +
    148  subroutine init_grib1_interface(self, g1_desc)
    +
    149  import
    +
    150  class(ip_grid), intent(inout) :: self
    +
    151  type(grib1_descriptor), intent(in) :: g1_desc
    +
    152  end subroutine init_grib1_interface
    +
    153 
    +
    162  subroutine init_grib2_interface(self, g2_desc)
    +
    163  import
    +
    164  class(ip_grid), intent(inout) :: self
    +
    165  type(grib2_descriptor), intent(in) :: g2_desc
    +
    166  end subroutine init_grib2_interface
    +
    167 
    +
    168  end interface
    +
    169 
    +
    172  interface operator (==)
    +
    173  module procedure is_same_grid
    +
    174  end interface operator (==)
    +
    175 
    +
    176 
    +
    177 contains
    +
    178 
    +
    185  subroutine use_ncep_post_arakawa() bind(c)
    +
    186  ncep_post_arakawa = .true.
    +
    187  end subroutine use_ncep_post_arakawa
    +
    188 
    +
    195  subroutine unuse_ncep_post_arakawa() bind(c)
    +
    196  ncep_post_arakawa = .false.
    +
    197  end subroutine unuse_ncep_post_arakawa
    +
    198 
    +
    208  logical function is_same_grid(grid1, grid2)
    +
    209  class(ip_grid), intent(in) :: grid1, grid2
    +
    210  is_same_grid = grid1%descriptor == grid2%descriptor
    +
    211  end function is_same_grid
    +
    212 
    +
    223  function field_pos(self, i, j)
    +
    224  class(ip_grid), intent(in) :: self
    +
    225  integer, intent(in) :: i, j
    +
    226  integer :: field_pos
    +
    227 
    +
    228  integer :: ii, jj, im, jm
    +
    229  integer :: iif, jjf, is1, iwrap
    +
    230  integer :: jwrap1, jwrap2, kscan, nscan
    +
    231 
    +
    232  ! extract from navigation parameter array
    +
    233  im=self%im
    +
    234  jm=self%jm
    +
    235  iwrap=self%iwrap
    +
    236  jwrap1=self%jwrap1
    +
    237  jwrap2=self%jwrap2
    +
    238  nscan=self%nscan_field_pos
    +
    239  kscan=self%kscan
    +
    240 
    +
    241  ! compute wraparounds in x and y if necessary and possible
    +
    242  ii=i
    +
    243  jj=j
    +
    244  if(iwrap.gt.0) then
    +
    245  ii=mod(i-1+iwrap,iwrap)+1
    +
    246  if(j.lt.1.and.jwrap1.gt.0) then
    +
    247  jj=jwrap1-j
    +
    248  ii=mod(ii-1+iwrap/2,iwrap)+1
    +
    249  elseif(j.gt.jm.and.jwrap2.gt.0) then
    +
    250  jj=jwrap2-j
    +
    251  ii=mod(ii-1+iwrap/2,iwrap)+1
    +
    252  endif
    +
    253  endif
    +
    254 
    +
    255  ! compute position for the appropriate scanning mode
    +
    256  field_pos=0
    +
    257  if(nscan.eq.0) then
    +
    258  if(ii.ge.1.and.ii.le.im.and.jj.ge.1.and.jj.le.jm) field_pos=ii+(jj-1)*im
    +
    259  elseif(nscan.eq.1) then
    +
    260  if(ii.ge.1.and.ii.le.im.and.jj.ge.1.and.jj.le.jm) field_pos=jj+(ii-1)*jm
    +
    261  elseif(nscan.eq.2) then
    +
    262  is1=(jm+1-kscan)/2
    +
    263  iif=jj+(ii-is1)
    +
    264  jjf=jj-(ii-is1)+kscan
    +
    265  if(iif.ge.1.and.iif.le.2*im-1.and.jjf.ge.1.and.jjf.le.jm) &
    +
    266  field_pos=(iif+(jjf-1)*(2*im-1)+1-kscan)/2
    +
    267  elseif(nscan.eq.3) then
    +
    268  is1=(jm+1-kscan)/2
    +
    269  iif=jj+(ii-is1)
    +
    270  jjf=jj-(ii-is1)+kscan
    +
    271  if(iif.ge.1.and.iif.le.2*im-1.and.jjf.ge.1.and.jjf.le.jm) field_pos=(iif+1)/2+(jjf-1)*im
    +
    272  endif
    +
    273  end function field_pos
    +
    274 
    +
    275 
    +
    276 end module ip_grid_mod
    +
    277 
    + + + +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    logical function is_same_grid(grid1, grid2)
    Test whether two grid descriptors are the same.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    subroutine, public use_ncep_post_arakawa()
    Enables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=....
    +
    integer, parameter, public rot_equid_cylind_e_grid_id_grib2
    Integer grid number for rotated equidistant cylindrical E-stagger grid (grib2)
    Definition: ip_grid_mod.F90:28
    +
    integer, parameter, public lambert_conf_grid_id_grib2
    Integer grid number for Lambert conformal grid in grib2.
    Definition: ip_grid_mod.F90:26
    +
    integer, parameter, public gaussian_grid_id_grib2
    Integer grid number for Gaussian grid in grib2.
    Definition: ip_grid_mod.F90:27
    +
    integer, parameter, public equid_cylind_grid_id_grib2
    Integer grid number for equidistant cylindrical grid in grib2.
    Definition: ip_grid_mod.F90:22
    +
    integer, parameter, public gaussian_grid_id_grib1
    Integer grid number for Gaussian grid in grib1.
    Definition: ip_grid_mod.F90:17
    +
    integer, parameter, public rot_equid_cylind_e_grid_id_grib1
    Integer grid number for rotated equidistant cylindrical E-stagger grid.
    Definition: ip_grid_mod.F90:19
    +
    integer, parameter, public polar_stereo_grid_id_grib2
    Integer grid number for polar stereo grid in grib2.
    Definition: ip_grid_mod.F90:25
    +
    integer function field_pos(self, i, j)
    Returns the field position for a given grid point.
    +
    logical, save, public ncep_post_arakawa
    Use ncep_post/wgrib2-compatible version of init_grib2() for non-E Arakawa grids (enable with use_ncep...
    Definition: ip_grid_mod.F90:31
    +
    integer, parameter, public lambert_conf_grid_id_grib1
    Integer grid number for Lambert Conformal grid in grib1.
    Definition: ip_grid_mod.F90:16
    +
    integer, parameter, public mercator_grid_id_grib1
    Integer grid number for Mercator grid in grib1.
    Definition: ip_grid_mod.F90:15
    +
    subroutine, public unuse_ncep_post_arakawa()
    Disables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=....
    +
    integer, parameter, public equid_cylind_grid_id_grib1
    Integer grid number for equidistant cylindrical grid in grib1.
    Definition: ip_grid_mod.F90:14
    +
    integer, parameter, public rot_equid_cylind_b_grid_id_grib1
    Integer grid number for rotated equidistant cylindrical B-stagger grid.
    Definition: ip_grid_mod.F90:20
    +
    integer, parameter, public rot_equid_cylind_b_grid_id_grib2
    Integer grid number for rotated equidistant cylindrical B-stagger grid (grib2)
    Definition: ip_grid_mod.F90:29
    +
    integer, parameter, public rot_equid_cylind_grid_id_grib2
    Integer grid number for rotated equidistant cylindrical grid in grib2.
    Definition: ip_grid_mod.F90:23
    +
    integer, parameter, public mercator_grid_id_grib2
    Integer grid number for Mercator grid in grib2.
    Definition: ip_grid_mod.F90:24
    +
    integer, parameter, public polar_stereo_grid_id_grib1
    Integer grid number for polar stereo grid in grib1.
    Definition: ip_grid_mod.F90:18
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract descriptor object which represents a grib1 or grib2 descriptor.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grids__mod_8F90.html b/ver-5.1.0/ip__grids__mod_8F90.html new file mode 100644 index 00000000..d5b5603c --- /dev/null +++ b/ver-5.1.0/ip__grids__mod_8F90.html @@ -0,0 +1,119 @@ + + + + + + + +NCEPLIBS-ip: ip_grids_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grids_mod.F90 File Reference
    +
    +
    + +

    Re-export the individual grids. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Modules

    module  ip_grids_mod
     Re-export the individual grids.
     
    +

    Detailed Description

    +

    Re-export the individual grids.

    +
    Author
    Kyle Gerheiser
    +
    Date
    7/21/21
    + +

    Definition in file ip_grids_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__grids__mod_8F90_source.html b/ver-5.1.0/ip__grids__mod_8F90_source.html new file mode 100644 index 00000000..eb67ee42 --- /dev/null +++ b/ver-5.1.0/ip__grids__mod_8F90_source.html @@ -0,0 +1,126 @@ + + + + + + + +NCEPLIBS-ip: ip_grids_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_grids_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + + + + + + + + + +
    16  use ip_grid_mod
    +
    17  implicit none
    +
    18 end module ip_grids_mod
    +
    19 
    +
    20 
    +
    21 
    +
    Equidistant cylindrical grib decoder and grid coordinate transformations.
    +
    Gaussian grid coordinate transformations.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Lambert conformal grib decoder and grid coordinate transformations.
    +
    GDS wizard for mercator cylindrical.
    +
    GDS wizard for polar stereographic azimuthal.
    +
    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.
    +
    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A ...
    +
    Interpolate gridded data to a series of station points.
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__interpolators__mod_8F90.html b/ver-5.1.0/ip__interpolators__mod_8F90.html new file mode 100644 index 00000000..b176ea20 --- /dev/null +++ b/ver-5.1.0/ip__interpolators__mod_8F90.html @@ -0,0 +1,134 @@ + + + + + + + +NCEPLIBS-ip: ip_interpolators_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_interpolators_mod.F90 File Reference
    +
    +
    + +

    Top-level module to export interpolation routines and constants. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Modules

    module  ip_interpolators_mod
     Top-level module to export interpolation routines and constants.
     
    + + + + + + + + + + + + + +

    +Variables

    integer, parameter, public ip_interpolators_mod::bicubic_interp_id = 1
     
    integer, parameter, public ip_interpolators_mod::bilinear_interp_id = 0
     
    integer, parameter, public ip_interpolators_mod::budget_interp_id = 3
     
    integer, parameter, public ip_interpolators_mod::neighbor_budget_interp_id = 6
     
    integer, parameter, public ip_interpolators_mod::neighbor_interp_id = 2
     
    integer, parameter, public ip_interpolators_mod::spectral_interp_id = 4
     
    +

    Detailed Description

    +

    Top-level module to export interpolation routines and constants.

    +
    Author
    Kyle Gerheiser
    + +

    Definition in file ip_interpolators_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__interpolators__mod_8F90.js b/ver-5.1.0/ip__interpolators__mod_8F90.js new file mode 100644 index 00000000..11e232b6 --- /dev/null +++ b/ver-5.1.0/ip__interpolators__mod_8F90.js @@ -0,0 +1,9 @@ +var ip__interpolators__mod_8F90 = +[ + [ "bicubic_interp_id", "ip__interpolators__mod_8F90.html#adfdc7760718083d85618df85320c495e", null ], + [ "bilinear_interp_id", "ip__interpolators__mod_8F90.html#a753e4b6c113a9a8b226c3c834786f3e1", null ], + [ "budget_interp_id", "ip__interpolators__mod_8F90.html#a7df843ca4a64e3178f448aebf7dad359", null ], + [ "neighbor_budget_interp_id", "ip__interpolators__mod_8F90.html#ae77a1da241f5de94f1874004ee8e715c", null ], + [ "neighbor_interp_id", "ip__interpolators__mod_8F90.html#a35e5fe3a2dd79d205c0503f550388258", null ], + [ "spectral_interp_id", "ip__interpolators__mod_8F90.html#a83ba2963a0b686c6ae67b53f9c385851", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__interpolators__mod_8F90_source.html b/ver-5.1.0/ip__interpolators__mod_8F90_source.html new file mode 100644 index 00000000..0f1d0275 --- /dev/null +++ b/ver-5.1.0/ip__interpolators__mod_8F90_source.html @@ -0,0 +1,135 @@ + + + + + + + +NCEPLIBS-ip: ip_interpolators_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_interpolators_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + + + + + + + +
    14  implicit none
    +
    15 
    +
    17  integer, parameter, public :: bilinear_interp_id = 0
    +
    19  integer, parameter, public :: bicubic_interp_id = 1
    +
    21  integer, parameter, public :: neighbor_interp_id = 2
    +
    23  integer, parameter, public :: budget_interp_id = 3
    +
    25  integer, parameter, public :: spectral_interp_id = 4
    +
    27  integer, parameter, public :: neighbor_budget_interp_id = 6
    +
    28 
    +
    29 contains
    +
    30 
    +
    31 
    +
    32 end module ip_interpolators_mod
    +
    33 
    +
    Bicubic interpolation routines for scalars and vectors.
    +
    Bilinear interpolation routines for scalars and vectors.
    +
    Budget interpolation routines for scalars and vectors.
    +
    Top-level module to export interpolation routines and constants.
    +
    integer, parameter, public neighbor_interp_id
    +
    integer, parameter, public bilinear_interp_id
    +
    integer, parameter, public budget_interp_id
    +
    integer, parameter, public spectral_interp_id
    +
    integer, parameter, public bicubic_interp_id
    +
    integer, parameter, public neighbor_budget_interp_id
    +
    Interpolate scalar fields (neighbor).
    +
    Interpolate scalar fields (neighbor).
    +
    Interpolate spectral.
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__lambert__conf__grid__mod_8F90.html b/ver-5.1.0/ip__lambert__conf__grid__mod_8F90.html new file mode 100644 index 00000000..49e82109 --- /dev/null +++ b/ver-5.1.0/ip__lambert__conf__grid__mod_8F90.html @@ -0,0 +1,169 @@ + + + + + + + +NCEPLIBS-ip: ip_lambert_conf_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_lambert_conf_grid_mod.F90 File Reference
    +
    +
    + +

    GDS wizard for lambert conformal conical. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_lambert_conf_grid_mod::ip_lambert_conf_grid
     
    + + + + +

    +Modules

    module  ip_lambert_conf_grid_mod
     Lambert conformal grib decoder and grid coordinate transformations.
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_lambert_conf_grid_mod::gdswzd_lambert_conf (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for lambert conformal conical. More...
     
    subroutine ip_lambert_conf_grid_mod::init_grib1 (self, g1_desc)
     Initializes a Lambert Conformal grid given a grib1_descriptor object. More...
     
    subroutine ip_lambert_conf_grid_mod::init_grib2 (self, g2_desc)
     Initializes a Lambert Conformal grid given a grib2_descriptor object. More...
     
    subroutine ip_lambert_conf_grid_mod::lambert_conf_grid_area (RLAT, FILL, DR, AREA)
     Grid box area for lambert conformal conical. More...
     
    subroutine ip_lambert_conf_grid_mod::lambert_conf_map_jacob (RLAT, FILL, DLON, DR, XLON, XLAT, YLON, YLAT)
     Map jacobians for lambert conformal conical. More...
     
    subroutine ip_lambert_conf_grid_mod::lambert_conf_vect_rot (DLON, CROT, SROT)
     Vector rotation fields for lambert conformal conical. More...
     
    + + + + + + + + + + + + + + + + + + + +

    +Variables

    real ip_lambert_conf_grid_mod::an
     Cone factor. More...
     
    real ip_lambert_conf_grid_mod::dxs
     x-direction grid length adjusted for scan mode. More...
     
    real ip_lambert_conf_grid_mod::dys
     y-direction grid length adjusted for scan model. More...
     
    real ip_lambert_conf_grid_mod::h
     Hemisphere flag. More...
     
    integer ip_lambert_conf_grid_mod::irot
     vector rotation flag. More...
     
    real ip_lambert_conf_grid_mod::rerth
     Radius of the earth. More...
     
    +

    Detailed Description

    +

    GDS wizard for lambert conformal conical.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition in file ip_lambert_conf_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__lambert__conf__grid__mod_8F90.js b/ver-5.1.0/ip__lambert__conf__grid__mod_8F90.js new file mode 100644 index 00000000..87e405da --- /dev/null +++ b/ver-5.1.0/ip__lambert__conf__grid__mod_8F90.js @@ -0,0 +1,16 @@ +var ip__lambert__conf__grid__mod_8F90 = +[ + [ "ip_lambert_conf_grid", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid" ], + [ "gdswzd_lambert_conf", "ip__lambert__conf__grid__mod_8F90.html#a5ebb9e4f1bd58caa254771b305c94f71", null ], + [ "init_grib1", "ip__lambert__conf__grid__mod_8F90.html#a5544708e893ffcfbe7d958fdec700eea", null ], + [ "init_grib2", "ip__lambert__conf__grid__mod_8F90.html#acb0339a9fff4fff6c2017d37f8bed0cf", null ], + [ "lambert_conf_grid_area", "ip__lambert__conf__grid__mod_8F90.html#a15c44b47172b926aea840caee9723b1c", null ], + [ "lambert_conf_map_jacob", "ip__lambert__conf__grid__mod_8F90.html#a5e1d42f0027236f47467e25c525e66ae", null ], + [ "lambert_conf_vect_rot", "ip__lambert__conf__grid__mod_8F90.html#a58187073914efa18eca897c6ec203b71", null ], + [ "an", "ip__lambert__conf__grid__mod_8F90.html#a82b75fe2d8495aab75b225c6309e61c8", null ], + [ "dxs", "ip__lambert__conf__grid__mod_8F90.html#a196e94b5a2add34133c87f845394fa81", null ], + [ "dys", "ip__lambert__conf__grid__mod_8F90.html#aad8b04b77b0920dbf9ed3827e2e8cfd7", null ], + [ "h", "ip__lambert__conf__grid__mod_8F90.html#aa91572e8b5ba3559c041f1750b6696c6", null ], + [ "irot", "ip__lambert__conf__grid__mod_8F90.html#a7dea876ed4206c5ecc0444aadb7d6acd", null ], + [ "rerth", "ip__lambert__conf__grid__mod_8F90.html#a9f0538d092cd7d2829a5b98247eb560d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__lambert__conf__grid__mod_8F90_source.html b/ver-5.1.0/ip__lambert__conf__grid__mod_8F90_source.html new file mode 100644 index 00000000..acf6e46f --- /dev/null +++ b/ver-5.1.0/ip__lambert__conf__grid__mod_8F90_source.html @@ -0,0 +1,461 @@ + + + + + + + +NCEPLIBS-ip: ip_lambert_conf_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_lambert_conf_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + + +
    16  use ip_grid_mod
    + + +
    19  implicit none
    +
    20 
    +
    21  private
    +
    22  public :: ip_lambert_conf_grid
    +
    23 
    +
    24  type, extends(ip_grid) :: ip_lambert_conf_grid
    +
    25  real :: rlat1
    +
    26  real :: rlon1
    +
    27  real :: rlati1
    +
    28  real :: rlati2
    +
    29  real :: orient
    +
    30  real :: dxs
    +
    31  real :: dys
    +
    32  real :: h
    +
    33  integer :: irot
    +
    34  contains
    +
    36  procedure :: init_grib1
    +
    38  procedure :: init_grib2
    +
    41  procedure :: gdswzd => gdswzd_lambert_conf
    +
    42  end type ip_lambert_conf_grid
    +
    43 
    +
    44  INTEGER :: irot
    +
    45  REAL :: an
    +
    46  REAL :: dxs
    +
    47  REAL :: dys
    +
    48  REAL :: h
    +
    49  REAL :: rerth
    +
    50  REAL :: tinyreal=tiny(1.0)
    +
    51 
    +
    52 contains
    +
    53 
    +
    60  subroutine init_grib1(self, g1_desc)
    +
    61  class(ip_lambert_conf_grid), intent(inout) :: self
    +
    62  type(grib1_descriptor), intent(in) :: g1_desc
    +
    63 
    +
    64  real :: dx, dy, hi, hj
    +
    65  integer :: iproj, iscan, jscan
    +
    66 
    +
    67  associate(kgds => g1_desc%gds)
    +
    68  self%rerth = 6.3712e6
    +
    69  self%eccen_squared = 0.0
    +
    70 
    +
    71  self%IM=kgds(2)
    +
    72  self%JM=kgds(3)
    +
    73 
    +
    74  self%RLAT1=kgds(4)*1.e-3
    +
    75  self%RLON1=kgds(5)*1.e-3
    +
    76 
    +
    77  self%IROT=mod(kgds(6)/8,2)
    +
    78  self%ORIENT=kgds(7)*1.e-3
    +
    79 
    +
    80  dx=kgds(8)
    +
    81  dy=kgds(9)
    +
    82 
    +
    83  iproj=mod(kgds(10)/128,2)
    +
    84  iscan=mod(kgds(11)/128,2)
    +
    85  jscan=mod(kgds(11)/64,2)
    +
    86 
    +
    87  self%RLATI1=kgds(12)*1.e-3
    +
    88  self%RLATI2=kgds(13)*1.e-3
    +
    89  self%H=(-1.)**iproj
    +
    90 
    +
    91  hi=(-1.)**iscan
    +
    92  hj=(-1.)**(1-jscan)
    +
    93  self%DXS=dx*hi
    +
    94  self%DYS=dy*hj
    +
    95 
    +
    96  self%iwrap = 0
    +
    97  self%jwrap1 = 0
    +
    98  self%jwrap2 = 0
    +
    99  self%nscan = mod(kgds(11) / 32, 2)
    +
    100  self%nscan_field_pos = self%nscan
    +
    101  self%kscan = 0
    +
    102  end associate
    +
    103 
    +
    104  end subroutine init_grib1
    +
    105 
    +
    112  subroutine init_grib2(self, g2_desc)
    +
    113  class(ip_lambert_conf_grid), intent(inout) :: self
    +
    114  type(grib2_descriptor), intent(in) :: g2_desc
    +
    115 
    +
    116  real :: dx, dy, hi, hj
    +
    117  integer :: iproj, iscan, jscan
    +
    118 
    +
    119 
    +
    120  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    121  call earth_radius(igdtmpl, igdtlen, self%rerth, self%eccen_squared)
    +
    122 
    +
    123  self%IM=igdtmpl(8)
    +
    124  self%JM=igdtmpl(9)
    +
    125 
    +
    126  self%RLAT1=float(igdtmpl(10))*1.0e-6
    +
    127  self%RLON1=float(igdtmpl(11))*1.0e-6
    +
    128 
    +
    129  self%IROT=mod(igdtmpl(12)/8,2)
    +
    130  self%ORIENT=float(igdtmpl(14))*1.0e-6
    +
    131 
    +
    132  dx=float(igdtmpl(15))*1.0e-3
    +
    133  dy=float(igdtmpl(16))*1.0e-3
    +
    134 
    +
    135  iproj=mod(igdtmpl(17)/128,2)
    +
    136  iscan=mod(igdtmpl(18)/128,2)
    +
    137  jscan=mod(igdtmpl(18)/64,2)
    +
    138 
    +
    139  self%RLATI1=float(igdtmpl(19))*1.0e-6
    +
    140  self%RLATI2=float(igdtmpl(20))*1.0e-6
    +
    141 
    +
    142  self%H=(-1.)**iproj
    +
    143  hi=(-1.)**iscan
    +
    144  hj=(-1.)**(1-jscan)
    +
    145  self%DXS=dx*hi
    +
    146  self%DYS=dy*hj
    +
    147 
    +
    148  self%nscan = mod(igdtmpl(18) / 32, 2)
    +
    149  self%nscan_field_pos = self%nscan
    +
    150  self%iwrap = 0
    +
    151  self%jwrap1 = 0
    +
    152  self%jwrap2 = 0
    +
    153  self%kscan = 0
    +
    154  end associate
    +
    155  end subroutine init_grib2
    +
    156 
    +
    219  SUBROUTINE gdswzd_lambert_conf(self,IOPT,NPTS,FILL, &
    +
    220  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    221  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    222  IMPLICIT NONE
    +
    223  !
    +
    224  class(ip_lambert_conf_grid), intent(in) :: self
    +
    225  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    226  INTEGER, INTENT( OUT) :: NRET
    +
    227  !
    +
    228  REAL, INTENT(IN ) :: FILL
    +
    229  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    230  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    231  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    232  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    233  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    234  !
    +
    235  INTEGER :: IM, JM, N
    +
    236  !
    +
    237  LOGICAL :: LROT, LMAP, LAREA
    +
    238  !
    +
    239  REAL :: ANTR, DI, DJ
    +
    240  REAL :: DLON1
    +
    241  REAL :: DE, DE2, DR2
    +
    242  REAL :: ORIENT, RLAT1, RLON1
    +
    243  REAL :: RLATI1, RLATI2
    +
    244  REAL :: XMAX, XMIN, YMAX, YMIN, XP, YP
    +
    245  REAL :: DLON, DR
    +
    246  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    247  IF(PRESENT(crot)) crot=fill
    +
    248  IF(PRESENT(srot)) srot=fill
    +
    249  IF(PRESENT(xlon)) xlon=fill
    +
    250  IF(PRESENT(xlat)) xlat=fill
    +
    251  IF(PRESENT(ylon)) ylon=fill
    +
    252  IF(PRESENT(ylat)) ylat=fill
    +
    253  IF(PRESENT(area)) area=fill
    +
    254 
    +
    255  im=self%im
    +
    256  jm=self%jm
    +
    257 
    +
    258  rlat1=self%rlat1
    +
    259  rlon1=self%rlon1
    +
    260 
    +
    261  irot=self%irot
    +
    262  orient=self%orient
    +
    263 
    +
    264  rlati1=self%rlati1
    +
    265  rlati2=self%rlati2
    +
    266 
    +
    267  h=self%h
    +
    268  dxs=self%dxs
    +
    269  dys=self%dys
    +
    270 
    +
    271  rerth = self%rerth
    +
    272 
    +
    273  IF(abs(rlati1-rlati2).LT.tinyreal) THEN
    +
    274  an=sin(rlati1/dpr)
    +
    275  ELSE
    +
    276  an=log(cos(rlati1/dpr)/cos(rlati2/dpr))/ &
    +
    277  log(tan((90-rlati1)/2/dpr)/tan((90-rlati2)/2/dpr))
    +
    278  ENDIF
    +
    279  de=rerth*cos(rlati1/dpr)*tan((rlati1+90)/2/dpr)**an/an
    +
    280  IF(abs(h*rlat1-90).LT.tinyreal) THEN
    +
    281  xp=1
    +
    282  yp=1
    +
    283  ELSE
    +
    284  dr=de/tan((rlat1+90)/2/dpr)**an
    +
    285  dlon1=mod(rlon1-orient+180+3600,360.)-180
    +
    286  xp=1-sin(an*dlon1/dpr)*dr/dxs
    +
    287  yp=1+cos(an*dlon1/dpr)*dr/dys
    +
    288  ENDIF
    +
    289  antr=1/(2*an)
    +
    290  de2=de**2
    +
    291  xmin=0
    +
    292  xmax=im+1
    +
    293  ymin=0
    +
    294  ymax=jm+1
    +
    295  nret=0
    +
    296  IF(PRESENT(crot).AND.PRESENT(srot))THEN
    +
    297  lrot=.true.
    +
    298  ELSE
    +
    299  lrot=.false.
    +
    300  ENDIF
    +
    301  IF(PRESENT(xlon).AND.PRESENT(xlat).AND.PRESENT(ylon).AND.PRESENT(ylat))THEN
    +
    302  lmap=.true.
    +
    303  ELSE
    +
    304  lmap=.false.
    +
    305  ENDIF
    +
    306  IF(PRESENT(area))THEN
    +
    307  larea=.true.
    +
    308  ELSE
    +
    309  larea=.false.
    +
    310  ENDIF
    +
    311  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    312  ! TRANSLATE GRID COORDINATES TO EARTH COORDINATES
    +
    313  IF(iopt.EQ.0.OR.iopt.EQ.1) THEN
    +
    314  !$OMP PARALLEL DO PRIVATE(N,DI,DJ,DR2,DR,DLON) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    315  DO n=1,npts
    +
    316  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    317  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    318  di=h*(xpts(n)-xp)*dxs
    +
    319  dj=h*(ypts(n)-yp)*dys
    +
    320  dr2=di**2+dj**2
    +
    321  dr=sqrt(dr2)
    +
    322  IF(dr2.LT.de2*1.e-6) THEN
    +
    323  rlon(n)=0.
    +
    324  rlat(n)=h*90.
    +
    325  ELSE
    +
    326  rlon(n)=mod(orient+1./an*dpr*atan2(di,-dj)+3600,360.)
    +
    327  rlat(n)=(2*dpr*atan((de2/dr2)**antr)-90)
    +
    328  ENDIF
    +
    329  nret=nret+1
    +
    330  dlon=mod(rlon(n)-orient+180+3600,360.)-180
    +
    331  IF(lrot) CALL lambert_conf_vect_rot(dlon,crot(n),srot(n))
    +
    332  IF(lmap) CALL lambert_conf_map_jacob(rlat(n),fill, dlon, dr, &
    +
    333  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    334  IF(larea) CALL lambert_conf_grid_area(rlat(n),fill,dr,area(n))
    +
    335  ELSE
    +
    336  rlon(n)=fill
    +
    337  rlat(n)=fill
    +
    338  ENDIF
    +
    339  ENDDO
    +
    340  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    341  ! TRANSLATE EARTH COORDINATES TO GRID COORDINATES
    +
    342  ELSEIF(iopt.EQ.-1) THEN
    +
    343  !$OMP PARALLEL DO PRIVATE(N,DR,DLON) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    344  DO n=1,npts
    +
    345  IF(abs(rlon(n)).LT.(360.+tinyreal).AND.abs(rlat(n)).LT.(90.+tinyreal).AND. &
    +
    346  abs(h*rlat(n)+90).GT.tinyreal) THEN
    +
    347  dr=h*de*tan((90-rlat(n))/2/dpr)**an
    +
    348  dlon=mod(rlon(n)-orient+180+3600,360.)-180
    +
    349  xpts(n)=xp+h*sin(an*dlon/dpr)*dr/dxs
    +
    350  ypts(n)=yp-h*cos(an*dlon/dpr)*dr/dys
    +
    351  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    352  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    353  nret=nret+1
    +
    354  IF(lrot) CALL lambert_conf_vect_rot(dlon,crot(n),srot(n))
    +
    355  IF(lmap) CALL lambert_conf_map_jacob(rlat(n),fill,dlon,dr, &
    +
    356  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    357  IF(larea) CALL lambert_conf_grid_area(rlat(n),fill,dr,area(n))
    +
    358  ELSE
    +
    359  xpts(n)=fill
    +
    360  ypts(n)=fill
    +
    361  ENDIF
    +
    362  ELSE
    +
    363  xpts(n)=fill
    +
    364  ypts(n)=fill
    +
    365  ENDIF
    +
    366  ENDDO
    +
    367  !$OMP END PARALLEL DO
    +
    368  ENDIF
    +
    369  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    370  END SUBROUTINE gdswzd_lambert_conf
    +
    371 
    +
    390  SUBROUTINE lambert_conf_vect_rot(DLON,CROT,SROT)
    +
    391  IMPLICIT NONE
    +
    392  REAL, INTENT( IN) :: DLON
    +
    393  REAL, INTENT( OUT) :: CROT, SROT
    +
    394 
    +
    395  IF(irot.EQ.1) THEN
    +
    396  crot=cos(an*dlon/dpr)
    +
    397  srot=sin(an*dlon/dpr)
    +
    398  ELSE
    +
    399  crot=1.
    +
    400  srot=0.
    +
    401  ENDIF
    +
    402 
    +
    403  END SUBROUTINE lambert_conf_vect_rot
    +
    404 
    +
    427  SUBROUTINE lambert_conf_map_jacob(RLAT,FILL,DLON,DR,XLON,XLAT,YLON,YLAT)
    +
    428  IMPLICIT NONE
    +
    429 
    +
    430  REAL, INTENT(IN ) :: RLAT, FILL, DLON, DR
    +
    431  REAL, INTENT( OUT) :: XLON, XLAT, YLON, YLAT
    +
    432 
    +
    433  REAL :: CLAT
    +
    434 
    +
    435  clat=cos(rlat/dpr)
    +
    436  IF(clat.LE.0.OR.dr.LE.0) THEN
    +
    437  xlon=fill
    +
    438  xlat=fill
    +
    439  ylon=fill
    +
    440  ylat=fill
    +
    441  ELSE
    +
    442  xlon=h*cos(an*dlon/dpr)*an/dpr*dr/dxs
    +
    443  xlat=-h*sin(an*dlon/dpr)*an/dpr*dr/dxs/clat
    +
    444  ylon=h*sin(an*dlon/dpr)*an/dpr*dr/dys
    +
    445  ylat=h*cos(an*dlon/dpr)*an/dpr*dr/dys/clat
    +
    446  ENDIF
    +
    447 
    +
    448  END SUBROUTINE lambert_conf_map_jacob
    +
    449 
    +
    468  SUBROUTINE lambert_conf_grid_area(RLAT,FILL,DR,AREA)
    +
    469  IMPLICIT NONE
    +
    470 
    +
    471  REAL, INTENT(IN ) :: RLAT
    +
    472  REAL, INTENT(IN ) :: FILL
    +
    473  REAL, INTENT(IN ) :: DR
    +
    474  REAL, INTENT( OUT) :: AREA
    +
    475 
    +
    476  REAL :: CLAT
    +
    477 
    +
    478  clat=cos(rlat/dpr)
    +
    479  IF(clat.LE.0.OR.dr.LE.0) THEN
    +
    480  area=fill
    +
    481  ELSE
    +
    482  area=rerth**2*clat**2*abs(dxs)*abs(dys)/(an*dr)**2
    +
    483  ENDIF
    +
    484 
    +
    485  END SUBROUTINE lambert_conf_grid_area
    +
    486 
    +
    487 end module ip_lambert_conf_grid_mod
    +
    488 
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Determine earth radius and shape.
    +
    Module containing common constants.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Lambert conformal grib decoder and grid coordinate transformations.
    +
    subroutine lambert_conf_grid_area(RLAT, FILL, DR, AREA)
    Grid box area for lambert conformal conical.
    +
    real dxs
    x-direction grid length adjusted for scan mode.
    +
    subroutine init_grib1(self, g1_desc)
    Initializes a Lambert Conformal grid given a grib1_descriptor object.
    +
    subroutine lambert_conf_vect_rot(DLON, CROT, SROT)
    Vector rotation fields for lambert conformal conical.
    +
    subroutine lambert_conf_map_jacob(RLAT, FILL, DLON, DR, XLON, XLAT, YLON, YLAT)
    Map jacobians for lambert conformal conical.
    +
    subroutine gdswzd_lambert_conf(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    GDS wizard for lambert conformal conical.
    +
    integer irot
    vector rotation flag.
    + +
    real rerth
    Radius of the earth.
    + +
    real dys
    y-direction grid length adjusted for scan model.
    +
    subroutine init_grib2(self, g2_desc)
    Initializes a Lambert Conformal grid given a grib2_descriptor object.
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    + +
    +
    + + + + diff --git a/ver-5.1.0/ip__mercator__grid__mod_8F90.html b/ver-5.1.0/ip__mercator__grid__mod_8F90.html new file mode 100644 index 00000000..9b6485d1 --- /dev/null +++ b/ver-5.1.0/ip__mercator__grid__mod_8F90.html @@ -0,0 +1,160 @@ + + + + + + + +NCEPLIBS-ip: ip_mercator_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_mercator_grid_mod.F90 File Reference
    +
    +
    + +

    GDS wizard for mercator cylindrical. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_mercator_grid_mod::ip_mercator_grid
     
    + + + + +

    +Modules

    module  ip_mercator_grid_mod
     GDS wizard for mercator cylindrical.
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_mercator_grid_mod::gdswzd_mercator (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for mercator cylindrical. More...
     
    subroutine ip_mercator_grid_mod::init_grib1 (self, g1_desc)
     Initializes a mercator grid given a grib1_descriptor object. More...
     
    subroutine ip_mercator_grid_mod::init_grib2 (self, g2_desc)
     Init GRIB2. More...
     
    subroutine ip_mercator_grid_mod::mercator_grid_area (RLAT, AREA)
     Grid box area for mercator cylindrical grids. More...
     
    subroutine ip_mercator_grid_mod::mercator_map_jacob (RLAT, XLON, XLAT, YLON, YLAT)
     Map jacobians for mercator cylindrical grids. More...
     
    subroutine ip_mercator_grid_mod::mercator_vect_rot (CROT, SROT)
     Vector rotation fields for mercator cylindrical grids. More...
     
    + + + + + + + + + + +

    +Variables

    real ip_mercator_grid_mod::dlon
     Longitudinal direction grid length. More...
     
    real ip_mercator_grid_mod::dphi
     Latitudinal direction grid length. More...
     
    real ip_mercator_grid_mod::rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +

    GDS wizard for mercator cylindrical.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition in file ip_mercator_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__mercator__grid__mod_8F90.js b/ver-5.1.0/ip__mercator__grid__mod_8F90.js new file mode 100644 index 00000000..90631cb4 --- /dev/null +++ b/ver-5.1.0/ip__mercator__grid__mod_8F90.js @@ -0,0 +1,13 @@ +var ip__mercator__grid__mod_8F90 = +[ + [ "ip_mercator_grid", "structip__mercator__grid__mod_1_1ip__mercator__grid.html", "structip__mercator__grid__mod_1_1ip__mercator__grid" ], + [ "gdswzd_mercator", "ip__mercator__grid__mod_8F90.html#acc39017fa51125972ab8e755e16d339e", null ], + [ "init_grib1", "ip__mercator__grid__mod_8F90.html#a4125dba8b09e9b69933e224b00f4758d", null ], + [ "init_grib2", "ip__mercator__grid__mod_8F90.html#aad3b6fef6ee74b8df984c0159ff29c82", null ], + [ "mercator_grid_area", "ip__mercator__grid__mod_8F90.html#a952ab9add18587c4dbe54699feb8eafd", null ], + [ "mercator_map_jacob", "ip__mercator__grid__mod_8F90.html#ab93a0a6ae8c5f5056abece1dcffdc57a", null ], + [ "mercator_vect_rot", "ip__mercator__grid__mod_8F90.html#aea5e18faf7a18bf8d06c87ccb11f3e17", null ], + [ "dlon", "ip__mercator__grid__mod_8F90.html#a14e1cb3f8c05d2de49d2aa8dc69d104f", null ], + [ "dphi", "ip__mercator__grid__mod_8F90.html#a156e638e2d1b93e388d674462ac3f732", null ], + [ "rerth", "ip__mercator__grid__mod_8F90.html#adaa27c5d41ee24185b6d020420ce9419", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__mercator__grid__mod_8F90_source.html b/ver-5.1.0/ip__mercator__grid__mod_8F90_source.html new file mode 100644 index 00000000..de3e1212 --- /dev/null +++ b/ver-5.1.0/ip__mercator__grid__mod_8F90_source.html @@ -0,0 +1,385 @@ + + + + + + + +NCEPLIBS-ip: ip_mercator_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_mercator_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + + +
    14  use ip_grid_mod
    +
    15  use ip_constants_mod, only: dpr, pi
    + +
    17  implicit none
    +
    18 
    +
    19  private
    +
    20  public :: ip_mercator_grid
    +
    21 
    +
    22  type, extends(ip_grid) :: ip_mercator_grid
    +
    23  real :: rlat1
    +
    24  real :: rlon1
    +
    25  real :: rlon2
    +
    26  real :: rlati
    +
    27  real :: hi
    +
    28  real :: dlon
    +
    29  real :: dphi
    +
    30  contains
    +
    32  procedure :: init_grib1
    +
    34  procedure :: init_grib2
    +
    37  procedure :: gdswzd => gdswzd_mercator
    +
    38  end type ip_mercator_grid
    +
    39 
    +
    40  REAL :: dlon
    +
    41  REAL :: dphi
    +
    42  REAL :: rerth
    +
    43 
    +
    44 CONTAINS
    +
    45 
    +
    52  subroutine init_grib1(self, g1_desc)
    +
    53  class(ip_mercator_grid), intent(inout) :: self
    +
    54  type(grib1_descriptor), intent(in) :: g1_desc
    +
    55 
    +
    56  integer :: iscan, jscan
    +
    57  real :: dy, hj
    +
    58 
    +
    59  associate(kgds => g1_desc%gds)
    +
    60  self%rerth = 6.3712e6
    +
    61  self%eccen_squared = 0.0
    +
    62 
    +
    63  self%IM=kgds(2)
    +
    64  self%JM=kgds(3)
    +
    65 
    +
    66  self%RLAT1=kgds(4)*1.e-3
    +
    67  self%RLON1=kgds(5)*1.e-3
    +
    68  self%RLON2=kgds(8)*1.e-3
    +
    69  self%RLATI=kgds(9)*1.e-3
    +
    70 
    +
    71  iscan=mod(kgds(11)/128,2)
    +
    72  jscan=mod(kgds(11)/64,2)
    +
    73 
    +
    74  dy=kgds(13)
    +
    75  self%HI=(-1.)**iscan
    +
    76  hj=(-1.)**(1-jscan)
    +
    77  self%DLON=self%HI*(mod(self%HI*(self%RLON2-self%RLON1)-1+3600,360.)+1)/(self%IM-1)
    +
    78  self%DPHI=hj*dy/(self%RERTH*cos(self%RLATI/dpr))
    +
    79 
    +
    80  ! defaults
    +
    81  self%iwrap = 0
    +
    82  self%jwrap1 = 0
    +
    83  self%jwrap2 = 0
    +
    84  self%nscan = mod(kgds(11) / 32, 2)
    +
    85  self%nscan_field_pos = self%nscan
    +
    86  self%kscan = 0
    +
    87 
    +
    88  self%iwrap = nint(360 / abs(self%dlon))
    +
    89  if (self%im < self%iwrap) self%iwrap = 0
    +
    90  end associate
    +
    91 
    +
    92  end subroutine init_grib1
    +
    93 
    +
    100  subroutine init_grib2(self, g2_desc)
    +
    101  class(ip_mercator_grid), intent(inout) :: self
    +
    102  type(grib2_descriptor), intent(in) :: g2_desc
    +
    103 
    +
    104  integer :: iscan, jscan
    +
    105  real :: hj, dy
    +
    106 
    +
    107  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    108 
    +
    109  call earth_radius(igdtmpl, igdtlen, self%rerth, self%eccen_squared)
    +
    110 
    +
    111  self%IM=igdtmpl(8)
    +
    112  self%JM=igdtmpl(9)
    +
    113 
    +
    114  self%RLAT1=float(igdtmpl(10))*1.0e-6
    +
    115  self%RLON1=float(igdtmpl(11))*1.0e-6
    +
    116  self%RLON2=float(igdtmpl(15))*1.0e-6
    +
    117  self%RLATI=float(igdtmpl(13))*1.0e-6
    +
    118 
    +
    119  iscan=mod(igdtmpl(16)/128,2)
    +
    120  jscan=mod(igdtmpl(16)/64,2)
    +
    121 
    +
    122  dy=float(igdtmpl(19))*1.0e-3
    +
    123  self%HI=(-1.)**iscan
    +
    124  hj=(-1.)**(1-jscan)
    +
    125  self%DLON=self%HI*(mod(self%HI*(self%RLON2-self%RLON1)-1+3600,360.)+1)/(self%IM-1)
    +
    126  self%DPHI=hj*dy/(self%RERTH*cos(self%RLATI/dpr))
    +
    127 
    +
    128  self%jwrap1 = 0
    +
    129  self%jwrap2 = 0
    +
    130  self%kscan = 0
    +
    131  self%nscan=mod(igdtmpl(16) / 32,2)
    +
    132  self%nscan_field_pos = self%nscan
    +
    133 
    +
    134  self%iwrap = nint(360 / abs(self%dlon))
    +
    135  if(self%im < self%iwrap) self%iwrap = 0
    +
    136 
    +
    137  end associate
    +
    138  end subroutine init_grib2
    +
    139 
    +
    198  SUBROUTINE gdswzd_mercator(self,IOPT,NPTS,FILL, &
    +
    199  XPTS,YPTS,RLON,RLAT,NRET, &
    +
    200  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    201  IMPLICIT NONE
    +
    202  !
    +
    203  class(ip_mercator_grid), intent(in) :: self
    +
    204  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    205  INTEGER, INTENT( OUT) :: NRET
    +
    206  !
    +
    207  REAL, INTENT(IN ) :: FILL
    +
    208  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    209  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    210  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    211  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    212  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    213  !
    +
    214  INTEGER :: IM, JM, N
    +
    215  !
    +
    216  LOGICAL :: LROT, LMAP, LAREA
    +
    217  !
    +
    218  REAL :: HI
    +
    219  REAL :: RLAT1, RLON1, RLON2, RLATI
    +
    220  REAL :: XMAX, XMIN, YMAX, YMIN
    +
    221  REAL :: YE
    +
    222  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    223  IF(PRESENT(crot)) crot=fill
    +
    224  IF(PRESENT(srot)) srot=fill
    +
    225  IF(PRESENT(xlon)) xlon=fill
    +
    226  IF(PRESENT(xlat)) xlat=fill
    +
    227  IF(PRESENT(ylon)) ylon=fill
    +
    228  IF(PRESENT(ylat)) ylat=fill
    +
    229  IF(PRESENT(area)) area=fill
    +
    230  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    231 
    +
    232  im=self%im
    +
    233  jm=self%jm
    +
    234 
    +
    235  rlat1=self%rlat1
    +
    236  rlon1=self%rlon1
    +
    237  rlon2=self%rlon2
    +
    238  rlati=self%rlati
    +
    239 
    +
    240  hi=self%hi
    +
    241 
    +
    242  dlon=self%dlon
    +
    243  dphi=self%dphi
    +
    244  rerth = self%rerth
    +
    245 
    +
    246  ye=1-log(tan((rlat1+90)/2/dpr))/dphi
    +
    247  xmin=0
    +
    248  xmax=im+1
    +
    249  IF(im.EQ.nint(360/abs(dlon))) xmax=im+2
    +
    250  ymin=0
    +
    251  ymax=jm+1
    +
    252  nret=0
    +
    253  IF(PRESENT(crot).AND.PRESENT(srot))THEN
    +
    254  lrot=.true.
    +
    255  ELSE
    +
    256  lrot=.false.
    +
    257  ENDIF
    +
    258  IF(PRESENT(xlon).AND.PRESENT(xlat).AND.PRESENT(ylon).AND.PRESENT(ylat))THEN
    +
    259  lmap=.true.
    +
    260  ELSE
    +
    261  lmap=.false.
    +
    262  ENDIF
    +
    263  IF(PRESENT(area))THEN
    +
    264  larea=.true.
    +
    265  ELSE
    +
    266  larea=.false.
    +
    267  ENDIF
    +
    268  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    269  ! TRANSLATE GRID COORDINATES TO EARTH COORDINATES
    +
    270  IF(iopt.EQ.0.OR.iopt.EQ.1) THEN
    +
    271  !$OMP PARALLEL DO PRIVATE(N) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    272  DO n=1,npts
    +
    273  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    274  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    275  rlon(n)=mod(rlon1+dlon*(xpts(n)-1)+3600,360.)
    +
    276  rlat(n)=2*atan(exp(dphi*(ypts(n)-ye)))*dpr-90
    +
    277  nret=nret+1
    +
    278  IF(lrot) CALL mercator_vect_rot(crot(n),srot(n))
    +
    279  IF(lmap) CALL mercator_map_jacob(rlat(n),xlon(n),xlat(n),ylon(n),ylat(n))
    +
    280  IF(larea) CALL mercator_grid_area(rlat(n),area(n))
    +
    281  ELSE
    +
    282  rlon(n)=fill
    +
    283  rlat(n)=fill
    +
    284  ENDIF
    +
    285  ENDDO
    +
    286  !$OMP END PARALLEL DO
    +
    287  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    288  ! TRANSLATE EARTH COORDINATES TO GRID COORDINATES
    +
    289  ELSEIF(iopt.EQ.-1) THEN
    +
    290  !$OMP PARALLEL DO PRIVATE(N) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    291  DO n=1,npts
    +
    292  IF(abs(rlon(n)).LE.360.AND.abs(rlat(n)).LT.90) THEN
    +
    293  xpts(n)=1+hi*mod(hi*(rlon(n)-rlon1)+3600,360.)/dlon
    +
    294  ypts(n)=ye+log(tan((rlat(n)+90)/2/dpr))/dphi
    +
    295  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    296  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    297  nret=nret+1
    +
    298  IF(lrot) CALL mercator_vect_rot(crot(n),srot(n))
    +
    299  IF(lmap) CALL mercator_map_jacob(rlat(n),xlon(n),xlat(n),ylon(n),ylat(n))
    +
    300  IF(larea) CALL mercator_grid_area(rlat(n),area(n))
    +
    301  ELSE
    +
    302  xpts(n)=fill
    +
    303  ypts(n)=fill
    +
    304  ENDIF
    +
    305  ELSE
    +
    306  xpts(n)=fill
    +
    307  ypts(n)=fill
    +
    308  ENDIF
    +
    309  ENDDO
    +
    310  !$OMP END PARALLEL DO
    +
    311  ENDIF
    +
    312  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    313  END SUBROUTINE gdswzd_mercator
    +
    314 
    +
    331  SUBROUTINE mercator_vect_rot(CROT,SROT)
    +
    332  IMPLICIT NONE
    +
    333 
    +
    334  REAL, INTENT( OUT) :: CROT, SROT
    +
    335 
    +
    336  crot=1.0
    +
    337  srot=0.0
    +
    338 
    +
    339  END SUBROUTINE mercator_vect_rot
    +
    340 
    +
    359  SUBROUTINE mercator_map_jacob(RLAT,XLON,XLAT,YLON,YLAT)
    +
    360  IMPLICIT NONE
    +
    361 
    +
    362  REAL, INTENT(IN ) :: RLAT
    +
    363  REAL, INTENT( OUT) :: XLON, XLAT, YLON, YLAT
    +
    364 
    +
    365  xlon=1./dlon
    +
    366  xlat=0.
    +
    367  ylon=0.
    +
    368  ylat=1./dphi/cos(rlat/dpr)/dpr
    +
    369 
    +
    370  END SUBROUTINE mercator_map_jacob
    +
    371 
    +
    387  SUBROUTINE mercator_grid_area(RLAT,AREA)
    +
    388  IMPLICIT NONE
    +
    389 
    +
    390  REAL, INTENT(IN ) :: RLAT
    +
    391  REAL, INTENT( OUT) :: AREA
    +
    392 
    +
    393  area=rerth**2*cos(rlat/dpr)**2*dphi*dlon/dpr
    +
    394 
    +
    395  END SUBROUTINE mercator_grid_area
    +
    396 
    +
    397 end module ip_mercator_grid_mod
    +
    398 
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Determine earth radius and shape.
    +
    Module containing common constants.
    +
    real, parameter pi
    PI.
    +
    real, parameter dpr
    Radians to degrees.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    GDS wizard for mercator cylindrical.
    +
    real dlon
    Longitudinal direction grid length.
    +
    real dphi
    Latitudinal direction grid length.
    +
    subroutine init_grib1(self, g1_desc)
    Initializes a mercator grid given a grib1_descriptor object.
    +
    subroutine mercator_grid_area(RLAT, AREA)
    Grid box area for mercator cylindrical grids.
    +
    subroutine init_grib2(self, g2_desc)
    Init GRIB2.
    +
    subroutine mercator_map_jacob(RLAT, XLON, XLAT, YLON, YLAT)
    Map jacobians for mercator cylindrical grids.
    +
    subroutine gdswzd_mercator(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    GDS wizard for mercator cylindrical.
    +
    real rerth
    Radius of the Earth.
    +
    subroutine mercator_vect_rot(CROT, SROT)
    Vector rotation fields for mercator cylindrical grids.
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    + +
    +
    + + + + diff --git a/ver-5.1.0/ip__mod_8F90.html b/ver-5.1.0/ip__mod_8F90.html new file mode 100644 index 00000000..d289c2ea --- /dev/null +++ b/ver-5.1.0/ip__mod_8F90.html @@ -0,0 +1,118 @@ + + + + + + + +NCEPLIBS-ip: ip_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_mod.F90 File Reference
    +
    +
    + +

    Top-level module for the ip library. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Modules

    module  ip_mod
     Top-level module for the ip library which re-exports public routines such as ipolates, ipolatev, and gdswzd.
     
    +

    Detailed Description

    +

    Top-level module for the ip library.

    +
    Author
    Kyle Gerheiser
    + +

    Definition in file ip_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__mod_8F90_source.html b/ver-5.1.0/ip__mod_8F90_source.html new file mode 100644 index 00000000..4218db9d --- /dev/null +++ b/ver-5.1.0/ip__mod_8F90_source.html @@ -0,0 +1,127 @@ + + + + + + + +NCEPLIBS-ip: ip_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    +
    6 module ip_mod
    +
    7 
    +
    8  ! Make these constants public to everyone instead of
    +
    9  ! using numbers directly
    + + + + + + +
    16 
    +
    17  use ipolates_mod
    +
    18  use ipolatev_mod
    +
    19  use gdswzd_mod
    +
    20 end module ip_mod
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    Top-level module to export interpolation routines and constants.
    +
    integer, parameter, public neighbor_interp_id
    +
    integer, parameter, public bilinear_interp_id
    +
    integer, parameter, public budget_interp_id
    +
    integer, parameter, public spectral_interp_id
    +
    integer, parameter, public bicubic_interp_id
    +
    integer, parameter, public neighbor_budget_interp_id
    +
    Top-level module for the ip library which re-exports public routines such as ipolates,...
    Definition: ip_mod.F90:6
    +
    Top-level driver for scalar interpolation interpolation routine ipolates().
    Definition: ipolates.F90:12
    +
    Top-level driver for vector interpolation interpolation routine ipolatev().
    Definition: ipolatev.F90:10
    +
    +
    + + + + diff --git a/ver-5.1.0/ip__polar__stereo__grid__mod_8F90.html b/ver-5.1.0/ip__polar__stereo__grid__mod_8F90.html new file mode 100644 index 00000000..9d002aad --- /dev/null +++ b/ver-5.1.0/ip__polar__stereo__grid__mod_8F90.html @@ -0,0 +1,175 @@ + + + + + + + +NCEPLIBS-ip: ip_polar_stereo_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_polar_stereo_grid_mod.F90 File Reference
    +
    +
    + +

    GDS wizard for polar stereographic azimuthal. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_polar_stereo_grid_mod::ip_polar_stereo_grid
     
    + + + + +

    +Modules

    module  ip_polar_stereo_grid_mod
     GDS wizard for polar stereographic azimuthal.
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_polar_stereo_grid_mod::gdswzd_polar_stereo (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for polar stereographic azimuthal. More...
     
    subroutine ip_polar_stereo_grid_mod::init_grib1 (self, g1_desc)
     Initializes a polar stereographic grid given a grib1_descriptor object. More...
     
    subroutine ip_polar_stereo_grid_mod::init_grib2 (self, g2_desc)
     Initializes a polar stereographic grid given a grib2_descriptor object. More...
     
    subroutine ip_polar_stereo_grid_mod::polar_stereo_grid_area (RLAT, DR2, AREA)
     Grid box area for polar stereographic grids. More...
     
    subroutine ip_polar_stereo_grid_mod::polar_stereo_map_jacob (RLON, RLAT, DR2, XLON, XLAT, YLON, YLAT)
     Map jacobians for polar stereographic grids. More...
     
    subroutine ip_polar_stereo_grid_mod::polar_stereo_vect_rot (RLON, CROT, SROT)
     Vector rotation fields for polar stereographic grids. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    real ip_polar_stereo_grid_mod::de2
     Square of DE. More...
     
    real ip_polar_stereo_grid_mod::dxs
     Local copy of dxs. More...
     
    real ip_polar_stereo_grid_mod::dys
     Local copy of dys. More...
     
    real ip_polar_stereo_grid_mod::e2
     Eccentricity squared. More...
     
    real ip_polar_stereo_grid_mod::h
     Local copy of h. More...
     
    integer ip_polar_stereo_grid_mod::irot
     Local copy of irot. More...
     
    real ip_polar_stereo_grid_mod::orient
     Local copy of orient. More...
     
    real ip_polar_stereo_grid_mod::rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +

    GDS wizard for polar stereographic azimuthal.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition in file ip_polar_stereo_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__polar__stereo__grid__mod_8F90.js b/ver-5.1.0/ip__polar__stereo__grid__mod_8F90.js new file mode 100644 index 00000000..79171727 --- /dev/null +++ b/ver-5.1.0/ip__polar__stereo__grid__mod_8F90.js @@ -0,0 +1,18 @@ +var ip__polar__stereo__grid__mod_8F90 = +[ + [ "ip_polar_stereo_grid", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid" ], + [ "gdswzd_polar_stereo", "ip__polar__stereo__grid__mod_8F90.html#ae2694d90ab514a131e083dfba3b173c5", null ], + [ "init_grib1", "ip__polar__stereo__grid__mod_8F90.html#a6ed76f58f30993cd7be84b7e03cf4d6f", null ], + [ "init_grib2", "ip__polar__stereo__grid__mod_8F90.html#a5210b986366b503683ae966519d501e7", null ], + [ "polar_stereo_grid_area", "ip__polar__stereo__grid__mod_8F90.html#a2a2e0854e5c129e320924a811cbd08e2", null ], + [ "polar_stereo_map_jacob", "ip__polar__stereo__grid__mod_8F90.html#a386933f7e52c348b9d742df423e0e223", null ], + [ "polar_stereo_vect_rot", "ip__polar__stereo__grid__mod_8F90.html#abe4d416201e986421a8e325a9b00e462", null ], + [ "de2", "ip__polar__stereo__grid__mod_8F90.html#a605d287e34e60f553521a5de2da22962", null ], + [ "dxs", "ip__polar__stereo__grid__mod_8F90.html#acf60181f89954e2ff31b08bb1b345354", null ], + [ "dys", "ip__polar__stereo__grid__mod_8F90.html#aea7950530d06d9c59ff61bf706df0a0f", null ], + [ "e2", "ip__polar__stereo__grid__mod_8F90.html#abf3a34d9bb00c39dac5225798aea4d5b", null ], + [ "h", "ip__polar__stereo__grid__mod_8F90.html#a5a63da5168a1432a1af42c0b668f0645", null ], + [ "irot", "ip__polar__stereo__grid__mod_8F90.html#a1269037aaecd12e75e17d8aac8e20c8c", null ], + [ "orient", "ip__polar__stereo__grid__mod_8F90.html#aa4a88f48d7b78cfdfc54754882195d18", null ], + [ "rerth", "ip__polar__stereo__grid__mod_8F90.html#a3315b2efb5cb9aebc0b2cb2773aa20b5", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__polar__stereo__grid__mod_8F90_source.html b/ver-5.1.0/ip__polar__stereo__grid__mod_8F90_source.html new file mode 100644 index 00000000..99fbc360 --- /dev/null +++ b/ver-5.1.0/ip__polar__stereo__grid__mod_8F90_source.html @@ -0,0 +1,557 @@ + + + + + + + +NCEPLIBS-ip: ip_polar_stereo_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_polar_stereo_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + + +
    15  use ip_grid_mod
    + + +
    18  implicit none
    +
    19 
    +
    20  private
    +
    21  public :: ip_polar_stereo_grid
    +
    22 
    +
    23  type, extends(ip_grid) :: ip_polar_stereo_grid
    +
    24  logical :: elliptical
    +
    25  real :: rlat1
    +
    26  real :: rlon1
    +
    27  real :: orient
    +
    28  real :: h
    +
    29  real :: dxs
    +
    30  real :: dys
    +
    31  real :: slatr
    +
    35  integer :: irot
    +
    36  contains
    +
    37  procedure :: init_grib1
    +
    38  procedure :: init_grib2
    +
    41  procedure :: gdswzd => gdswzd_polar_stereo
    +
    42  end type ip_polar_stereo_grid
    +
    43 
    +
    44  INTEGER :: irot
    +
    45  REAL :: de2
    +
    46  REAL :: dxs
    +
    47  REAL :: dys
    +
    48  REAL :: e2
    +
    49  REAL :: rerth
    +
    50  REAL :: h
    +
    51  REAL :: orient
    +
    52  REAL :: tinyreal=tiny(1.0)
    +
    53 
    +
    54 CONTAINS
    +
    55 
    +
    63  subroutine init_grib1(self, g1_desc)
    +
    64  class(ip_polar_stereo_grid), intent(inout) :: self
    +
    65  type(grib1_descriptor), intent(in) :: g1_desc
    +
    66 
    +
    67  REAL, PARAMETER :: SLAT=60.0 ! standard latitude according grib1 standard
    +
    68 
    +
    69  real :: dx, dy, hi, hj
    +
    70  integer :: iproj, iscan, jscan
    +
    71 
    +
    72  associate(kgds => g1_desc%gds)
    +
    73  self%ELLIPTICAL=mod(kgds(6)/64,2).EQ.1
    +
    74 
    +
    75  if (.not. self%elliptical) then
    +
    76  self%rerth = 6.3712e6
    +
    77  self%eccen_squared = 0d0
    +
    78  else
    +
    79  self%rerth = rerth_wgs84
    +
    80  self%eccen_squared = e2_wgs84 !wgs84 datum
    +
    81  end if
    +
    82 
    +
    83  self%IM=kgds(2)
    +
    84  self%JM=kgds(3)
    +
    85 
    +
    86  self%RLAT1=kgds(4)*1.e-3
    +
    87  self%RLON1=kgds(5)*1.e-3
    +
    88 
    +
    89  self%IROT=mod(kgds(6)/8,2)
    +
    90 
    +
    91  self%SLATR=slat/dpr
    +
    92 
    +
    93  self%ORIENT=kgds(7)*1.e-3
    +
    94 
    +
    95  dx=kgds(8)
    +
    96  dy=kgds(9)
    +
    97 
    +
    98  iproj=mod(kgds(10)/128,2)
    +
    99  iscan=mod(kgds(11)/128,2)
    +
    100  jscan=mod(kgds(11)/64,2)
    +
    101 
    +
    102  self%H=(-1.)**iproj
    +
    103  hi=(-1.)**iscan
    +
    104  hj=(-1.)**(1-jscan)
    +
    105 
    +
    106  IF(abs(self%H+1.).LT.tinyreal) self%ORIENT=self%ORIENT+180.
    +
    107 
    +
    108  self%DXS=dx*hi
    +
    109  self%DYS=dy*hj
    +
    110 
    +
    111  self%iwrap= 0
    +
    112  self%jwrap1 = 0
    +
    113  self%jwrap2 = 0
    +
    114  self%nscan = mod(kgds(11) / 32, 2)
    +
    115  self%nscan_field_pos = self%nscan
    +
    116  self%kscan = 0
    +
    117  end associate
    +
    118 
    +
    119  end subroutine init_grib1
    +
    120 
    +
    128  subroutine init_grib2(self, g2_desc)
    +
    129  class(ip_polar_stereo_grid), intent(inout) :: self
    +
    130  type(grib2_descriptor), intent(in) :: g2_desc
    +
    131 
    +
    132  real :: slat, dx, dy, hi, hj
    +
    133  integer :: iproj, iscan, jscan
    +
    134 
    +
    135  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    136  call earth_radius(igdtmpl, igdtlen, self%rerth, self%eccen_squared)
    +
    137 
    +
    138  self%ELLIPTICAL = self%eccen_squared > 0.0
    +
    139 
    +
    140  self%IM=igdtmpl(8)
    +
    141  self%JM=igdtmpl(9)
    +
    142 
    +
    143  self%RLAT1=float(igdtmpl(10))*1.e-6
    +
    144  self%RLON1=float(igdtmpl(11))*1.e-6
    +
    145 
    +
    146  self%IROT=mod(igdtmpl(12)/8,2)
    +
    147 
    +
    148  slat=float(abs(igdtmpl(13)))*1.e-6
    +
    149  self%SLATR=slat/dpr
    +
    150 
    +
    151  self%ORIENT=float(igdtmpl(14))*1.e-6
    +
    152 
    +
    153  dx=float(igdtmpl(15))*1.e-3
    +
    154  dy=float(igdtmpl(16))*1.e-3
    +
    155 
    +
    156  iproj=mod(igdtmpl(17)/128,2)
    +
    157  iscan=mod(igdtmpl(18)/128,2)
    +
    158  jscan=mod(igdtmpl(18)/64,2)
    +
    159 
    +
    160  self%H=(-1.)**iproj
    +
    161  hi=(-1.)**iscan
    +
    162  hj=(-1.)**(1-jscan)
    +
    163 
    +
    164  self%DXS=dx*hi
    +
    165  self%DYS=dy*hj
    +
    166 
    +
    167  self%nscan = mod(igdtmpl(18) / 32, 2)
    +
    168  self%nscan_field_pos = self%nscan
    +
    169  self%iwrap = 0
    +
    170  self%jwrap1 = 0
    +
    171  self%jwrap2 = 0
    +
    172  self%kscan = 0
    +
    173  end associate
    +
    174  end subroutine init_grib2
    +
    175 
    +
    239  SUBROUTINE gdswzd_polar_stereo(self,IOPT,NPTS, &
    +
    240  FILL,XPTS,YPTS,RLON,RLAT,NRET, &
    +
    241  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    242  IMPLICIT NONE
    +
    243  !
    +
    244 
    +
    245  class(ip_polar_stereo_grid), intent(in) :: self
    +
    246  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    247  INTEGER, INTENT( OUT) :: NRET
    +
    248  !
    +
    249  REAL, INTENT(IN ) :: FILL
    +
    250  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    251  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    252  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    253  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    254  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    255  !
    +
    256  INTEGER :: IM, JM
    +
    257  INTEGER :: ITER, N
    +
    258  !
    +
    259  LOGICAL :: ELLIPTICAL, LROT, LMAP, LAREA
    +
    260  !
    +
    261  REAL :: ALAT, ALAT1, ALONG, DIFF
    +
    262  REAL :: DI, DJ, DE
    +
    263  REAL :: DR, E, E_OVER_2
    +
    264  REAL :: MC, SLATR
    +
    265  REAL :: RLAT1, RLON1, RHO, T, TC
    +
    266  REAL :: XMAX, XMIN, YMAX, YMIN
    +
    267  REAL :: XP, YP, DR2
    +
    268  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    269  IF(PRESENT(crot)) crot=fill
    +
    270  IF(PRESENT(srot)) srot=fill
    +
    271  IF(PRESENT(xlon)) xlon=fill
    +
    272  IF(PRESENT(xlat)) xlat=fill
    +
    273  IF(PRESENT(ylon)) ylon=fill
    +
    274  IF(PRESENT(ylat)) ylat=fill
    +
    275  IF(PRESENT(area)) area=fill
    +
    276 
    +
    277  elliptical = self%elliptical
    +
    278  im=self%im
    +
    279  jm=self%jm
    +
    280 
    +
    281  rlat1=self%rlat1
    +
    282  rlon1=self%rlon1
    +
    283 
    +
    284  irot=self%irot
    +
    285  slatr=self%slatr
    +
    286  orient=self%orient
    +
    287 
    +
    288  h=self%h
    +
    289  dxs=self%dxs
    +
    290  dys=self%dys
    +
    291 
    +
    292  rerth = self%rerth
    +
    293  e2 = self%eccen_squared
    +
    294  !
    +
    295  ! FIND X/Y OF POLE
    +
    296  IF (.NOT.elliptical) THEN
    +
    297  de=(1.+sin(slatr))*rerth
    +
    298  dr=de*cos(rlat1/dpr)/(1+h*sin(rlat1/dpr))
    +
    299  xp=1-h*sin((rlon1-orient)/dpr)*dr/dxs
    +
    300  yp=1+cos((rlon1-orient)/dpr)*dr/dys
    +
    301  de2=de**2
    +
    302  ELSE
    +
    303  e=sqrt(e2)
    +
    304  e_over_2=e*0.5
    +
    305  alat=h*rlat1/dpr
    +
    306  along = (rlon1-orient)/dpr
    +
    307  t=tan(pi4-alat/2.)/((1.-e*sin(alat))/ &
    +
    308  (1.+e*sin(alat)))**(e_over_2)
    +
    309  tc=tan(pi4-slatr/2.)/((1.-e*sin(slatr))/ &
    +
    310  (1.+e*sin(slatr)))**(e_over_2)
    +
    311  mc=cos(slatr)/sqrt(1.0-e2*(sin(slatr)**2))
    +
    312  rho=rerth*mc*t/tc
    +
    313  yp = 1.0 + rho*cos(h*along)/dys
    +
    314  xp = 1.0 - rho*sin(h*along)/dxs
    +
    315  ENDIF ! ELLIPTICAL
    +
    316  xmin=0
    +
    317  xmax=im+1
    +
    318  ymin=0
    +
    319  ymax=jm+1
    +
    320  nret=0
    +
    321  IF(PRESENT(crot).AND.PRESENT(srot))THEN
    +
    322  lrot=.true.
    +
    323  ELSE
    +
    324  lrot=.false.
    +
    325  ENDIF
    +
    326  IF(PRESENT(xlon).AND.PRESENT(xlat).AND.PRESENT(ylon).AND.PRESENT(ylat))THEN
    +
    327  lmap=.true.
    +
    328  ELSE
    +
    329  lmap=.false.
    +
    330  ENDIF
    +
    331  IF(PRESENT(area))THEN
    +
    332  larea=.true.
    +
    333  ELSE
    +
    334  larea=.false.
    +
    335  ENDIF
    +
    336  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    337  ! TRANSLATE GRID COORDINATES TO EARTH COORDINATES
    +
    338  IF(iopt.EQ.0.OR.iopt.EQ.1) THEN
    +
    339  IF(.NOT.elliptical)THEN
    +
    340  !$OMP PARALLEL DO PRIVATE(N,DI,DJ,DR2) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    341  DO n=1,npts
    +
    342  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    343  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    344  di=(xpts(n)-xp)*dxs
    +
    345  dj=(ypts(n)-yp)*dys
    +
    346  dr2=di**2+dj**2
    +
    347  IF(dr2.LT.de2*1.e-6) THEN
    +
    348  rlon(n)=0.
    +
    349  rlat(n)=h*90.
    +
    350  ELSE
    +
    351  rlon(n)=mod(orient+h*dpr*atan2(di,-dj)+3600,360.)
    +
    352  rlat(n)=h*dpr*asin((de2-dr2)/(de2+dr2))
    +
    353  ENDIF
    +
    354  nret=nret+1
    +
    355  IF(lrot) CALL polar_stereo_vect_rot(rlon(n),crot(n),srot(n))
    +
    356  IF(lmap) CALL polar_stereo_map_jacob(rlon(n),rlat(n),dr2, &
    +
    357  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    358  IF(larea) CALL polar_stereo_grid_area(rlat(n),dr2,area(n))
    +
    359  ELSE
    +
    360  rlon(n)=fill
    +
    361  rlat(n)=fill
    +
    362  ENDIF
    +
    363  ENDDO
    +
    364  !$OMP END PARALLEL DO
    +
    365  ELSE ! ELLIPTICAL
    +
    366  !$OMP PARALLEL DO PRIVATE(N,DI,DJ,RHO,T,ALONG,ALAT1,ALAT,DIFF) &
    +
    367  !$OMP& REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    368  DO n=1,npts
    +
    369  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    370  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    371  di=(xpts(n)-xp)*dxs
    +
    372  dj=(ypts(n)-yp)*dys
    +
    373  rho=sqrt(di*di+dj*dj)
    +
    374  t=(rho*tc)/(rerth*mc)
    +
    375  IF(abs(ypts(n)-yp)<0.01)THEN
    +
    376  IF(di>0.0) along=orient+h*90.0
    +
    377  IF(di<=0.0) along=orient-h*90.0
    +
    378  ELSE
    +
    379  along=orient+h*atan(di/(-dj))*dpr
    +
    380  IF(dj>0) along=along+180.
    +
    381  END IF
    +
    382  alat1=pi2-2.0*atan(t)
    +
    383  DO iter=1,10
    +
    384  alat = pi2 - 2.0*atan(t*(((1.0-e*sin(alat1))/ &
    +
    385  (1.0+e*sin(alat1)))**(e_over_2)))
    +
    386  diff = abs(alat-alat1)*dpr
    +
    387  IF (diff < 0.000001) EXIT
    +
    388  alat1=alat
    +
    389  ENDDO
    +
    390  rlat(n)=h*alat*dpr
    +
    391  rlon(n)=along
    +
    392  IF(rlon(n)<0.0) rlon(n)=rlon(n)+360.
    +
    393  IF(rlon(n)>360.0) rlon(n)=rlon(n)-360.0
    +
    394  nret=nret+1
    +
    395  IF(lrot) CALL polar_stereo_vect_rot(rlon(n),crot(n),srot(n))
    +
    396  ELSE
    +
    397  rlon(n)=fill
    +
    398  rlat(n)=fill
    +
    399  ENDIF
    +
    400  ENDDO
    +
    401  !$OMP END PARALLEL DO
    +
    402  ENDIF ! ELLIPTICAL
    +
    403  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    404  ! TRANSLATE EARTH COORDINATES TO GRID COORDINATES
    +
    405  ELSEIF(iopt.EQ.-1) THEN
    +
    406  IF(.NOT.elliptical)THEN
    +
    407  !$OMP PARALLEL DO PRIVATE(N,DR,DR2) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    408  DO n=1,npts
    +
    409  IF(abs(rlon(n)).LT.(360.+tinyreal).AND.abs(rlat(n)).LT.(90.+tinyreal).AND. &
    +
    410  abs(h*rlat(n)+90).GT.tinyreal) THEN
    +
    411  dr=de*tan((90-h*rlat(n))/2/dpr)
    +
    412  dr2=dr**2
    +
    413  xpts(n)=xp+h*sin((rlon(n)-orient)/dpr)*dr/dxs
    +
    414  ypts(n)=yp-cos((rlon(n)-orient)/dpr)*dr/dys
    +
    415  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    416  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    417  nret=nret+1
    +
    418  IF(lrot) CALL polar_stereo_vect_rot(rlon(n),crot(n),srot(n))
    +
    419  IF(lmap) CALL polar_stereo_map_jacob(rlon(n),rlat(n),dr2, &
    +
    420  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    421  IF(larea) CALL polar_stereo_grid_area(rlat(n),dr2,area(n))
    +
    422  ELSE
    +
    423  xpts(n)=fill
    +
    424  ypts(n)=fill
    +
    425  ENDIF
    +
    426  ELSE
    +
    427  xpts(n)=fill
    +
    428  ypts(n)=fill
    +
    429  ENDIF
    +
    430  ENDDO
    +
    431  !$OMP END PARALLEL DO
    +
    432  ELSE ! ELLIPTICAL CASE
    +
    433  !$OMP PARALLEL DO PRIVATE(N,ALAT,ALONG,T,RHO) REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    434  DO n=1,npts
    +
    435  IF(abs(rlon(n)).LT.(360+tinyreal).AND.abs(rlat(n)).LT.(90+tinyreal).AND. &
    +
    436  abs(h*rlat(n)+90).GT.tinyreal) THEN
    +
    437  alat = h*rlat(n)/dpr
    +
    438  along = (rlon(n)-orient)/dpr
    +
    439  t=tan(pi4-alat*0.5)/((1.-e*sin(alat))/ &
    +
    440  (1.+e*sin(alat)))**(e_over_2)
    +
    441  rho=rerth*mc*t/tc
    +
    442  xpts(n)= xp + rho*sin(h*along) / dxs
    +
    443  ypts(n)= yp - rho*cos(h*along) / dys
    +
    444  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    445  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    446  nret=nret+1
    +
    447  IF(lrot) CALL polar_stereo_vect_rot(rlon(n),crot(n),srot(n))
    +
    448  ELSE
    +
    449  xpts(n)=fill
    +
    450  ypts(n)=fill
    +
    451  ENDIF
    +
    452  ELSE
    +
    453  xpts(n)=fill
    +
    454  ypts(n)=fill
    +
    455  ENDIF
    +
    456  ENDDO
    +
    457  !$OMP END PARALLEL DO
    +
    458  ENDIF
    +
    459  ENDIF
    +
    460  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    461  END SUBROUTINE gdswzd_polar_stereo
    +
    462 
    +
    482  SUBROUTINE polar_stereo_vect_rot(RLON, CROT, SROT)
    +
    483  IMPLICIT NONE
    +
    484 
    +
    485  REAL, INTENT(IN ) :: RLON
    +
    486  REAL, INTENT( OUT) :: CROT, SROT
    +
    487 
    +
    488  IF(irot.EQ.1) THEN
    +
    489  crot=h*cos((rlon-orient)/dpr)
    +
    490  srot=sin((rlon-orient)/dpr)
    +
    491  ELSE
    +
    492  crot=1.
    +
    493  srot=0.
    +
    494  ENDIF
    +
    495 
    +
    496  END SUBROUTINE polar_stereo_vect_rot
    +
    497 
    +
    520  SUBROUTINE polar_stereo_map_jacob(RLON,RLAT,DR2,XLON,XLAT,YLON,YLAT)
    +
    521  IMPLICIT NONE
    +
    522 
    +
    523  REAL, INTENT(IN ) :: RLON, RLAT, DR2
    +
    524  REAL, INTENT( OUT) :: XLON, XLAT, YLON, YLAT
    +
    525 
    +
    526  REAL :: CLAT, DE, DR
    +
    527 
    +
    528  IF(dr2.LT.de2*1.e-6) THEN
    +
    529  de=sqrt(de2)
    +
    530  xlon=0.
    +
    531  xlat=-sin((rlon-orient)/dpr)/dpr*de/dxs/2
    +
    532  ylon=0.
    +
    533  ylat=h*cos((rlon-orient)/dpr)/dpr*de/dys/2
    +
    534  ELSE
    +
    535  dr=sqrt(dr2)
    +
    536  clat=cos(rlat/dpr)
    +
    537  xlon=h*cos((rlon-orient)/dpr)/dpr*dr/dxs
    +
    538  xlat=-sin((rlon-orient)/dpr)/dpr*dr/dxs/clat
    +
    539  ylon=sin((rlon-orient)/dpr)/dpr*dr/dys
    +
    540  ylat=h*cos((rlon-orient)/dpr)/dpr*dr/dys/clat
    +
    541  ENDIF
    +
    542 
    +
    543  END SUBROUTINE polar_stereo_map_jacob
    +
    544 
    +
    563  SUBROUTINE polar_stereo_grid_area(RLAT, DR2, AREA)
    +
    564  IMPLICIT NONE
    +
    565 
    +
    566  REAL, INTENT(IN ) :: RLAT, DR2
    +
    567  REAL, INTENT( OUT) :: AREA
    +
    568 
    +
    569  REAL :: CLAT
    +
    570 
    +
    571  IF(dr2.LT.de2*1.e-6) THEN
    +
    572  area=rerth**2*abs(dxs)*abs(dys)*4/de2
    +
    573  ELSE
    +
    574  clat=cos(rlat/dpr)
    +
    575  area=rerth**2*clat**2*abs(dxs)*abs(dys)/dr2
    +
    576  ENDIF
    +
    577 
    +
    578  END SUBROUTINE polar_stereo_grid_area
    +
    579 
    +
    580 end module ip_polar_stereo_grid_mod
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Determine earth radius and shape.
    +
    Module containing common constants.
    +
    real, parameter pi2
    PI / 2.0.
    +
    real, parameter pi
    PI.
    +
    real, parameter pi4
    PI / 4.0.
    +
    real, parameter rerth_wgs84
    Radius of the Earth defined by WGS-84.
    +
    real, parameter dpr
    Radians to degrees.
    +
    real, parameter e2_wgs84
    Eccentricity squared of Earth defined by WGS-84.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    GDS wizard for polar stereographic azimuthal.
    +
    integer irot
    Local copy of irot.
    +
    subroutine polar_stereo_grid_area(RLAT, DR2, AREA)
    Grid box area for polar stereographic grids.
    +
    real rerth
    Radius of the Earth.
    +
    subroutine polar_stereo_map_jacob(RLON, RLAT, DR2, XLON, XLAT, YLON, YLAT)
    Map jacobians for polar stereographic grids.
    +
    subroutine init_grib2(self, g2_desc)
    Initializes a polar stereographic grid given a grib2_descriptor object.
    + + +
    subroutine init_grib1(self, g1_desc)
    Initializes a polar stereographic grid given a grib1_descriptor object.
    +
    real orient
    Local copy of orient.
    +
    subroutine polar_stereo_vect_rot(RLON, CROT, SROT)
    Vector rotation fields for polar stereographic grids.
    +
    real e2
    Eccentricity squared.
    + +
    subroutine gdswzd_polar_stereo(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    GDS wizard for polar stereographic azimuthal.
    + +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    + +
    +
    + + + + diff --git a/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90.html b/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90.html new file mode 100644 index 00000000..36d36f55 --- /dev/null +++ b/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90.html @@ -0,0 +1,193 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_egrid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_rot_equid_cylind_egrid_mod.F90 File Reference
    +
    +
    + +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid
     
    + + + + +

    +Modules

    module  ip_rot_equid_cylind_egrid_mod
     Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_rot_equid_cylind_egrid_mod::gdswzd_rot_equid_cylind_egrid (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for rotated equidistant cylindrical grids. More...
     
    subroutine ip_rot_equid_cylind_egrid_mod::init_grib1 (self, g1_desc)
     Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    subroutine ip_rot_equid_cylind_egrid_mod::init_grib2 (self, g2_desc)
     Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_error (IOPT, FILL, RLAT, RLON, XPTS, YPTS, NPTS)
     Error handler. More...
     
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_grid_area (FILL, AREA)
     Computes the grid box area for a rotated equidistant cylindrical grid. More...
     
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_map_jacob (FILL, RLON, XLON, XLAT, YLON, YLAT)
     Computes the map jacobians for a rotated equidistant cylindrical grid. More...
     
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_vect_rot (RLON, CROT, SROT)
     Computes the vector rotation sines and cosines for a rotated equidistant cylindrical grid. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clat
     Cosine of the latitude. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clat0
     Local copy of clat0. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clatr
     Cosine of the rotated latitude. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clon
     Cosine of the difference between rlon and rlon0. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::dlats
     Local copy of dlats. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::dlons
     Local copy of dlons. More...
     
    integer ip_rot_equid_cylind_egrid_mod::irot
     Local copy of irot. More...
     
    integer, parameter ip_rot_equid_cylind_egrid_mod::kd = real64
     Kind of reals. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::rerth
     Radius of the Earth. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::rlon0
     Local copy of rlon0. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::slat
     Sine of the latitude. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::slat0
     Local copy of slat0. More...
     
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::slatr
     Sine of the rotated latitude. More...
     
    +

    Detailed Description

    +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.

    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition in file ip_rot_equid_cylind_egrid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90.js b/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90.js new file mode 100644 index 00000000..2854a1d9 --- /dev/null +++ b/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90.js @@ -0,0 +1,24 @@ +var ip__rot__equid__cylind__egrid__mod_8F90 = +[ + [ "ip_rot_equid_cylind_egrid", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid" ], + [ "gdswzd_rot_equid_cylind_egrid", "ip__rot__equid__cylind__egrid__mod_8F90.html#a9ad11a599fc0bdc4a9ece86a3b1cc399", null ], + [ "init_grib1", "ip__rot__equid__cylind__egrid__mod_8F90.html#aa65616b97df9c89893161ff802e16eab", null ], + [ "init_grib2", "ip__rot__equid__cylind__egrid__mod_8F90.html#af3cbc17f27800bc67135feacb2c1c3e0", null ], + [ "rot_equid_cylind_egrid_error", "ip__rot__equid__cylind__egrid__mod_8F90.html#a69d4e473a1a276b855d37518dc6f1d48", null ], + [ "rot_equid_cylind_egrid_grid_area", "ip__rot__equid__cylind__egrid__mod_8F90.html#a4e6c3a758f9a6474d3e499fabeac0640", null ], + [ "rot_equid_cylind_egrid_map_jacob", "ip__rot__equid__cylind__egrid__mod_8F90.html#a45b87f77888d428ca0f551edae8da94e", null ], + [ "rot_equid_cylind_egrid_vect_rot", "ip__rot__equid__cylind__egrid__mod_8F90.html#a9ac1f76f515981c464e8391d8c941888", null ], + [ "clat", "ip__rot__equid__cylind__egrid__mod_8F90.html#aac1018f3ca1b7ad4b5d33f245678d416", null ], + [ "clat0", "ip__rot__equid__cylind__egrid__mod_8F90.html#a83649d02b55d6252d59514aec4eb3142", null ], + [ "clatr", "ip__rot__equid__cylind__egrid__mod_8F90.html#aad4e673a94976b2b5a9bfad9de9e6e30", null ], + [ "clon", "ip__rot__equid__cylind__egrid__mod_8F90.html#a557d49c609fc8c5c564a3a5f10174eec", null ], + [ "dlats", "ip__rot__equid__cylind__egrid__mod_8F90.html#a0b2faca2325b413e1f3207778d4c4c68", null ], + [ "dlons", "ip__rot__equid__cylind__egrid__mod_8F90.html#af04f8a1044f4d9a7e0d13d38887adcbc", null ], + [ "irot", "ip__rot__equid__cylind__egrid__mod_8F90.html#a93ed996cf2dc9569e356256ec946b571", null ], + [ "kd", "ip__rot__equid__cylind__egrid__mod_8F90.html#a50497d277c347a2991b0e34e85f1787e", null ], + [ "rerth", "ip__rot__equid__cylind__egrid__mod_8F90.html#aed7a425f4d300fe14ac1b48d76378edb", null ], + [ "rlon0", "ip__rot__equid__cylind__egrid__mod_8F90.html#a134acf8ab7f40ff49ce8e03daad900e6", null ], + [ "slat", "ip__rot__equid__cylind__egrid__mod_8F90.html#ae1f8503816477fb685fbadc7a9e50f0b", null ], + [ "slat0", "ip__rot__equid__cylind__egrid__mod_8F90.html#a72199c827ab3218b7f2aba35ad30b94d", null ], + [ "slatr", "ip__rot__equid__cylind__egrid__mod_8F90.html#a4ccccb64d3e7236d8cac19c279aab900", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90_source.html b/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90_source.html new file mode 100644 index 00000000..2be3d5bb --- /dev/null +++ b/ver-5.1.0/ip__rot__equid__cylind__egrid__mod_8F90_source.html @@ -0,0 +1,588 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_egrid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_rot_equid_cylind_egrid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    7 
    + +
    25  use iso_fortran_env, only: real64
    + +
    27  use ip_grid_mod
    +
    28  use ip_constants_mod, only: dpr, pi
    + +
    30  implicit none
    +
    31 
    +
    32  private
    + +
    34 
    +
    35  integer, parameter :: kd = real64
    +
    36 
    + +
    38  real(kd) :: rlon0
    +
    39  real(kd) :: rlon1
    +
    40  real(kd) :: rlat1
    +
    41  real(kd) :: clat0
    +
    42  real(kd) :: slat0
    +
    43  real(kd) :: dlats
    +
    44  real(kd) :: dlons
    +
    45  real(kd) :: hi
    +
    49  integer :: irot
    +
    50  contains
    +
    53  procedure :: init_grib1
    +
    56  procedure :: init_grib2
    + + +
    61 
    +
    62  INTEGER :: irot
    +
    63 
    +
    64  REAL(kind=kd) :: clat
    +
    65  REAL(kind=kd) :: clat0
    +
    66  REAL(kind=kd) :: clatr
    +
    67  REAL(kind=kd) :: clon
    +
    68  REAL(kind=kd) :: dlats
    +
    69  REAL(kind=kd) :: dlons
    +
    70  REAL(kind=kd) :: rerth
    +
    71  REAL(kind=kd) :: rlon0
    +
    72  REAL(kind=kd) :: slat
    +
    73  REAL(kind=kd) :: slat0
    +
    74  REAL(kind=kd) :: slatr
    +
    75 
    +
    76 contains
    +
    77 
    +
    86  subroutine init_grib1(self, g1_desc)
    +
    87  class(ip_rot_equid_cylind_egrid), intent(inout) :: self
    +
    88  type(grib1_descriptor), intent(in) :: g1_desc
    +
    89 
    +
    90  integer :: iscan
    +
    91  real(kd) :: rlat0
    +
    92 
    +
    93  real(kd) :: rlat1, rlon1, rlon0, slat1, clat1, slat0, clat0, clon1
    +
    94  real(kd) :: slatr, clatr, clonr, rlatr, rlonr, dlats, dlons, hs, hi
    +
    95  integer :: im, jm
    +
    96 
    +
    97  integer :: is1, kscan, irot
    +
    98 
    +
    99  associate(kgds => g1_desc%gds)
    +
    100  self%rerth = 6.3712e6_kd
    +
    101  self%eccen_squared = 0.0
    +
    102 
    +
    103  im=kgds(2)
    +
    104  jm=kgds(3)
    +
    105 
    +
    106  self%nscan_field_pos = 3
    +
    107  self%nscan = mod(kgds(11)/32,2)
    +
    108 
    +
    109  rlat1=kgds(4)*1.e-3_kd
    +
    110  rlon1=kgds(5)*1.e-3_kd
    +
    111  rlat0=kgds(7)*1.e-3_kd
    +
    112  rlon0=kgds(8)*1.e-3_kd
    +
    113 
    +
    114  irot=mod(kgds(6)/8,2)
    +
    115  kscan=mod(kgds(11)/256,2)
    +
    116  iscan=mod(kgds(11)/128,2)
    +
    117  hi=(-1.)**iscan
    +
    118  slat1=sin(rlat1/dpr)
    +
    119  clat1=cos(rlat1/dpr)
    +
    120  slat0=sin(rlat0/dpr)
    +
    121  clat0=cos(rlat0/dpr)
    +
    122  hs=sign(1._kd,mod(rlon1-rlon0+180+3600,360._kd)-180)
    +
    123  clon1=cos((rlon1-rlon0)/dpr)
    +
    124  slatr=clat0*slat1-slat0*clat1*clon1
    +
    125  clatr=sqrt(1-slatr**2)
    +
    126  clonr=(clat0*clat1*clon1+slat0*slat1)/clatr
    +
    127  rlatr=dpr*asin(slatr)
    +
    128  rlonr=hs*dpr*acos(clonr)
    +
    129  dlats=rlatr/(-(jm-1)/2)
    +
    130  dlons=rlonr/(-((im * 2 - 1) -1)/2)
    +
    131 
    +
    132  IF(kscan.EQ.0) THEN
    +
    133  is1=(jm+1)/2
    +
    134  ELSE
    +
    135  is1=jm/2
    +
    136  ENDIF
    +
    137 
    +
    138  self%im = im
    +
    139  self%jm = jm
    +
    140  self%rlon0 = rlon0
    +
    141  self%rlon1 = rlon1
    +
    142  self%rlat1 = rlat1
    +
    143  self%clat0 = clat0
    +
    144  self%slat0 = slat0
    +
    145  self%dlats = dlats
    +
    146  self%dlons = dlons
    +
    147  self%hi = hi
    +
    148  self%irot = irot
    +
    149  self%kscan = kscan
    +
    150 
    +
    151 
    +
    152  end associate
    +
    153 
    +
    154  end subroutine init_grib1
    +
    155 
    +
    156 
    +
    163  subroutine init_grib2(self, g2_desc)
    +
    164  class(ip_rot_equid_cylind_egrid), intent(inout) :: self
    +
    165  type(grib2_descriptor), intent(in) :: g2_desc
    +
    166 
    +
    167  integer :: iscale, iscan
    +
    168  real(kd) :: rlat0
    +
    169  integer :: i_offset_odd!, i_offset_even
    +
    170 
    +
    171  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    172  CALL earth_radius(igdtmpl,igdtlen,self%rerth,self%eccen_squared)
    +
    173 
    +
    174  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    175  ! ROUTINE ONLY WORKS FOR "E"-STAGGER GRIDS.
    +
    176  ! "V" GRID WHEN BIT 5 IS '1' AND BIT 6 IS '0'.
    +
    177  ! "H" GRID WHEN BIT 5 IS '0' AND BIT 6 IS '1'.
    +
    178  ! I_OFFSET_ODD=MOD(IGDTMPL(19)/8,2)
    +
    179  ! I_OFFSET_EVEN=MOD(IGDTMPL(19)/4,2)
    +
    180  ! IF(I_OFFSET_ODD==I_OFFSET_EVEN) THEN
    +
    181  ! CALL ROT_EQUID_CYLIND_EGRID_ERROR(IOPT,FILL,RLAT,RLON,XPTS,YPTS,NPTS)
    +
    182  ! RETURN
    +
    183  ! ENDIF
    +
    184  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    185 
    +
    186  self%IM=igdtmpl(8)
    +
    187  self%JM=igdtmpl(9)
    +
    188 
    +
    189  self%NSCAN=mod(igdtmpl(16)/32,2)
    +
    190  self%nscan_field_pos = 3
    +
    191 
    +
    192  iscale=igdtmpl(10)*igdtmpl(11)
    +
    193  IF(iscale==0) iscale=10**6
    +
    194 
    +
    195  self%RLON0=float(igdtmpl(21))/float(iscale)
    +
    196  self%DLATS=float(igdtmpl(18))/float(iscale)
    +
    197  ! THE GRIB2 CONVENTION FOR "I" RESOLUTION IS TWICE WHAT THIS ROUTINE ASSUMES.
    +
    198  self%DLONS=float(igdtmpl(17))/float(iscale) * 0.5_kd
    +
    199 
    +
    200  self%IROT=mod(igdtmpl(14)/8,2)
    +
    201 
    +
    202  i_offset_odd=mod(igdtmpl(19)/8,2)
    +
    203  self%KSCAN=i_offset_odd
    +
    204  iscan=mod(igdtmpl(19)/128,2)
    +
    205 
    +
    206  self%HI=(-1.)**iscan
    +
    207 
    +
    208  rlat0=float(igdtmpl(20))/float(iscale)
    +
    209  rlat0=rlat0+90.0_kd
    +
    210 
    +
    211  self%SLAT0=sin(rlat0/dpr)
    +
    212  self%CLAT0=cos(rlat0/dpr)
    +
    213 
    +
    214  self%RLAT1=float(igdtmpl(12))/float(iscale)
    +
    215  self%RLON1=float(igdtmpl(13))/float(iscale)
    +
    216  end associate
    +
    217  end subroutine init_grib2
    +
    218 
    +
    219 
    +
    267  SUBROUTINE gdswzd_rot_equid_cylind_egrid(self,IOPT,NPTS,&
    +
    268  FILL,XPTS,YPTS,RLON,RLAT,NRET, &
    +
    269  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    270  IMPLICIT NONE
    +
    271  !
    +
    272  class(ip_rot_equid_cylind_egrid), intent(in) :: self
    +
    273 
    +
    274  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    275  INTEGER, INTENT( OUT) :: NRET
    +
    276  !
    +
    277  REAL, INTENT(IN ) :: FILL
    +
    278  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    279  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    280  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    281  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    282  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    283  !
    +
    284  INTEGER :: IM, JM, IS1, N
    +
    285  INTEGER :: KSCAN
    +
    286  ! INTEGER :: I_OFFSET_ODD, I_OFFSET_EVEN
    +
    287  !
    +
    288  LOGICAL :: LROT, LMAP, LAREA
    +
    289  !
    +
    290  REAL(KIND=kd) :: rlat1, rlon1
    +
    291  REAL(KIND=kd) :: clonr
    +
    292  REAL(KIND=kd) :: rlatr, rlonr, sbd, wbd, hs, hi
    +
    293  REAL :: XMAX, XMIN, YMAX, YMIN, XPTF, YPTF
    +
    294  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    295  IF(PRESENT(crot)) crot=fill
    +
    296  IF(PRESENT(srot)) srot=fill
    +
    297  IF(PRESENT(xlon)) xlon=fill
    +
    298  IF(PRESENT(xlat)) xlat=fill
    +
    299  IF(PRESENT(ylon)) ylon=fill
    +
    300  IF(PRESENT(ylat)) ylat=fill
    +
    301  IF(PRESENT(area)) area=fill
    +
    302 
    +
    303  rlon0=self%rlon0
    +
    304  irot=self%irot
    +
    305  im=self%im * 2 - 1
    +
    306  jm=self%jm
    +
    307  dlats=self%dlats
    +
    308  dlons=self%dlons
    +
    309  kscan=self%kscan
    +
    310  hi=self%hi
    +
    311  slat0=self%slat0
    +
    312  clat0=self%clat0
    +
    313  rlat1=self%rlat1
    +
    314  rlon1=self%rlon1
    +
    315 
    +
    316  rerth = self%rerth
    +
    317 
    +
    318  ! IS THE EARTH RADIUS DEFINED?
    +
    319  IF(rerth<0.)THEN
    +
    320  CALL rot_equid_cylind_egrid_error(iopt,fill,rlat,rlon,xpts,ypts,npts)
    +
    321  RETURN
    +
    322  ENDIF
    +
    323 
    +
    324  sbd=rlat1
    +
    325  wbd=rlon1
    +
    326 
    +
    327  IF (wbd > 180.0) wbd = wbd - 360.0
    +
    328  IF(kscan.EQ.0) THEN
    +
    329  is1=(jm+1)/2
    +
    330  ELSE
    +
    331  is1=jm/2
    +
    332  ENDIF
    +
    333 
    +
    334  xmin=0
    +
    335  xmax=im+2
    +
    336  ymin=0
    +
    337  ymax=jm+1
    +
    338  nret=0
    +
    339 
    +
    340  IF(PRESENT(crot).AND.PRESENT(srot))THEN
    +
    341  lrot=.true.
    +
    342  ELSE
    +
    343  lrot=.false.
    +
    344  ENDIF
    +
    345  IF(PRESENT(xlon).AND.PRESENT(xlat).AND.PRESENT(ylon).AND.PRESENT(ylat))THEN
    +
    346  lmap=.true.
    +
    347  ELSE
    +
    348  lmap=.false.
    +
    349  ENDIF
    +
    350  IF(PRESENT(area))THEN
    +
    351  larea=.true.
    +
    352  ELSE
    +
    353  larea=.false.
    +
    354  ENDIF
    +
    355 
    +
    356  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    357  ! TRANSLATE GRID COORDINATES TO EARTH COORDINATES
    +
    358  IF(iopt.EQ.0.OR.iopt.EQ.1) THEN
    +
    359  DO n=1,npts
    +
    360  xptf=ypts(n)+(xpts(n)-is1)
    +
    361  yptf=ypts(n)-(xpts(n)-is1)+kscan
    +
    362  IF(xptf.GE.xmin.AND.xptf.LE.xmax.AND. &
    +
    363  yptf.GE.ymin.AND.yptf.LE.ymax) THEN
    +
    364  hs=hi*sign(1.,xptf-(im+1)/2)
    +
    365  select type(desc => self%descriptor)
    +
    366  type is(grib1_descriptor)
    +
    367  rlonr=(xptf-(im+1)/2)*dlons
    +
    368  rlatr=(yptf-(jm+1)/2)*dlats
    +
    369  type is(grib2_descriptor)
    +
    370  rlonr=(xptf-1.0_kd)*dlons + wbd
    +
    371  rlatr=(yptf-1.0_kd)*dlats + sbd
    +
    372  end select
    +
    373  clonr=cos(rlonr/dpr)
    +
    374  slatr=sin(rlatr/dpr)
    +
    375  clatr=cos(rlatr/dpr)
    +
    376  slat=clat0*slatr+slat0*clatr*clonr
    +
    377  IF(slat.LE.-1) THEN
    +
    378  clat=0.
    +
    379  clon=cos(rlon0/dpr)
    +
    380  rlon(n)=0
    +
    381  rlat(n)=-90
    +
    382  ELSEIF(slat.GE.1) THEN
    +
    383  clat=0.
    +
    384  clon=cos(rlon0/dpr)
    +
    385  rlon(n)=0
    +
    386  rlat(n)=90
    +
    387  ELSE
    +
    388  clat=sqrt(1-slat**2)
    +
    389  clon=(clat0*clatr*clonr-slat0*slatr)/clat
    +
    390  clon=min(max(clon,-1._kd),1._kd)
    +
    391  rlon(n)=real(mod(rlon0+hs*dpr*acos(clon)+3600,360._kd))
    +
    392  rlat(n)=real(dpr*asin(slat))
    +
    393  ENDIF
    +
    394  nret=nret+1
    +
    395  IF(lrot) CALL rot_equid_cylind_egrid_vect_rot(rlon(n),crot(n),srot(n))
    +
    396  IF(lmap) CALL rot_equid_cylind_egrid_map_jacob(fill, rlon(n), &
    +
    397  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    398  IF(larea) CALL rot_equid_cylind_egrid_grid_area(fill, area(n))
    +
    399  ELSE
    +
    400  rlon(n)=fill
    +
    401  rlat(n)=fill
    +
    402  ENDIF
    +
    403  ENDDO
    +
    404  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    405  ! TRANSLATE EARTH COORDINATES TO GRID COORDINATES
    +
    406  ELSEIF(iopt.EQ.-1) THEN
    +
    407  DO n=1,npts
    +
    408  IF(abs(rlon(n)).LE.360.AND.abs(rlat(n)).LE.90) THEN
    +
    409  hs=sign(1._kd,mod(rlon(n)-rlon0+180+3600,360._kd)-180)
    +
    410  clon=cos((rlon(n)-rlon0)/dpr)
    +
    411  slat=sin(rlat(n)/dpr)
    +
    412  clat=cos(rlat(n)/dpr)
    + +
    414  IF(slatr.LE.-1) THEN
    +
    415  clatr=0.
    +
    416  rlonr=0
    +
    417  rlatr=-90
    +
    418  ELSEIF(slatr.GE.1) THEN
    +
    419  clatr=0.
    +
    420  rlonr=0
    +
    421  rlatr=90
    +
    422  ELSE
    +
    423  clatr=sqrt(1-slatr**2)
    +
    424  clonr=(clat0*clat*clon+slat0*slat)/clatr
    +
    425  clonr=min(max(clonr,-1._kd),1._kd)
    +
    426  rlonr=hs*dpr*acos(clonr)
    +
    427  rlatr=dpr*asin(slatr)
    +
    428  ENDIF
    +
    429  select type(desc => self%descriptor)
    +
    430  type is(grib1_descriptor)
    +
    431  xptf=real(((rlonr-wbd)/dlons)+1.0_kd)
    +
    432  yptf=real(((rlatr-sbd)/dlats)+1.0_kd)
    +
    433  type is(grib2_descriptor)
    +
    434  xptf=real((im+1)/2+rlonr/dlons)
    +
    435  yptf=real((jm+1)/2+rlatr/dlats)
    +
    436  end select
    +
    437 
    +
    438  IF(xptf.GE.xmin.AND.xptf.LE.xmax.AND. &
    +
    439  yptf.GE.ymin.AND.yptf.LE.ymax) THEN
    +
    440  xpts(n)=is1+(xptf-(yptf-kscan))/2
    +
    441  ypts(n)=(xptf+(yptf-kscan))/2
    +
    442  nret=nret+1
    +
    443  IF(lrot) CALL rot_equid_cylind_egrid_vect_rot(rlon(n),crot(n),srot(n))
    +
    444  IF(lmap) CALL rot_equid_cylind_egrid_map_jacob(fill, rlon(n), &
    +
    445  xlon(n),xlat(n),ylon(n),ylat(n))
    +
    446  IF(larea) CALL rot_equid_cylind_egrid_grid_area(fill, area(n))
    +
    447  ELSE
    +
    448  xpts(n)=fill
    +
    449  ypts(n)=fill
    +
    450  ENDIF
    +
    451  ELSE
    +
    452  xpts(n)=fill
    +
    453  ypts(n)=fill
    +
    454  ENDIF
    +
    455  ENDDO
    +
    456  ENDIF
    +
    457  END SUBROUTINE gdswzd_rot_equid_cylind_egrid
    +
    458 
    +
    482  SUBROUTINE rot_equid_cylind_egrid_error(IOPT,FILL,RLAT,RLON,XPTS,YPTS,NPTS)
    +
    483  IMPLICIT NONE
    +
    484  !
    +
    485  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    486  !
    +
    487  REAL, INTENT(IN ) :: FILL
    +
    488  REAL, INTENT( OUT) :: RLAT(NPTS),RLON(NPTS)
    +
    489  REAL, INTENT( OUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    490 
    +
    491  IF(iopt>=0) THEN
    +
    492  rlon=fill
    +
    493  rlat=fill
    +
    494  ENDIF
    +
    495  IF(iopt<=0) THEN
    +
    496  xpts=fill
    +
    497  ypts=fill
    +
    498  ENDIF
    +
    499  END SUBROUTINE rot_equid_cylind_egrid_error
    +
    500 
    +
    514  SUBROUTINE rot_equid_cylind_egrid_vect_rot(RLON, CROT, SROT)
    +
    515  IMPLICIT NONE
    +
    516 
    +
    517  REAL , INTENT(IN ) :: RLON
    +
    518  REAL , INTENT( OUT) :: CROT, SROT
    +
    519 
    +
    520  REAL(KIND=kd) :: slon
    +
    521 
    +
    522  IF(irot.EQ.1) THEN
    +
    523  IF(clatr.LE.0) THEN
    +
    524  crot=real(-sign(1._kd,slatr*slat0))
    +
    525  srot=0.
    +
    526  ELSE
    +
    527  slon=sin((rlon-rlon0)/dpr)
    +
    528  crot=real((clat0*clat+slat0*slat*clon)/clatr)
    +
    529  srot=real(slat0*slon/clatr)
    +
    530  ENDIF
    +
    531  ELSE
    +
    532  crot=1.
    +
    533  srot=0.
    +
    534  ENDIF
    +
    535 
    +
    536  END SUBROUTINE rot_equid_cylind_egrid_vect_rot
    +
    537 
    +
    549  SUBROUTINE rot_equid_cylind_egrid_map_jacob(FILL, RLON, &
    +
    550  XLON, XLAT, YLON, YLAT)
    +
    551  IMPLICIT NONE
    +
    552 
    +
    553  REAL , INTENT(IN ) :: FILL, RLON
    +
    554  REAL , INTENT( OUT) :: XLON, XLAT, YLON, YLAT
    +
    555 
    +
    556  REAL(KIND=kd) :: slon, term1, term2
    +
    557  REAL(KIND=kd) :: xlatf, xlonf, ylatf, ylonf
    +
    558 
    +
    559  IF(clatr.LE.0._kd) THEN
    +
    560  xlon=fill
    +
    561  xlat=fill
    +
    562  ylon=fill
    +
    563  ylat=fill
    +
    564  ELSE
    +
    565  slon=sin((rlon-rlon0)/dpr)
    +
    566  term1=(clat0*clat+slat0*slat*clon)/clatr
    +
    567  term2=slat0*slon/clatr
    +
    568  xlonf=term1*clat/(dlons*clatr)
    +
    569  xlatf=-term2/(dlons*clatr)
    +
    570  ylonf=term2*clat/dlats
    +
    571  ylatf=term1/dlats
    +
    572  xlon=real(xlonf-ylonf)
    +
    573  xlat=real(xlatf-ylatf)
    +
    574  ylon=real(xlonf+ylonf)
    +
    575  ylat=real(xlatf+ylatf)
    +
    576  ENDIF
    +
    577 
    +
    578  END SUBROUTINE rot_equid_cylind_egrid_map_jacob
    +
    579 
    +
    587  SUBROUTINE rot_equid_cylind_egrid_grid_area(FILL, AREA)
    +
    588  IMPLICIT NONE
    +
    589 
    +
    590  REAL, INTENT(IN ) :: FILL
    +
    591  REAL, INTENT( OUT) :: AREA
    +
    592 
    +
    593  IF(clatr.LE.0._kd) THEN
    +
    594  area=fill
    +
    595  ELSE
    +
    596  area=real(rerth**2*clatr*dlats*dlons)*2/dpr**2
    +
    597  ENDIF
    +
    598 
    +
    599  END SUBROUTINE rot_equid_cylind_egrid_grid_area
    +
    600 
    + +
    602 
    +
    603 
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Determine earth radius and shape.
    +
    Module containing common constants.
    +
    real, parameter pi
    PI.
    +
    real, parameter dpr
    Radians to degrees.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.
    +
    real(kind=kd) dlats
    Local copy of dlats.
    +
    real(kind=kd) rlon0
    Local copy of rlon0.
    +
    subroutine rot_equid_cylind_egrid_map_jacob(FILL, RLON, XLON, XLAT, YLON, YLAT)
    Computes the map jacobians for a rotated equidistant cylindrical grid.
    +
    real(kind=kd) slatr
    Sine of the rotated latitude.
    +
    subroutine rot_equid_cylind_egrid_grid_area(FILL, AREA)
    Computes the grid box area for a rotated equidistant cylindrical grid.
    +
    integer, parameter kd
    Kind of reals.
    +
    real(kind=kd) clon
    Cosine of the difference between rlon and rlon0.
    +
    subroutine rot_equid_cylind_egrid_error(IOPT, FILL, RLAT, RLON, XPTS, YPTS, NPTS)
    Error handler.
    +
    real(kind=kd) slat0
    Local copy of slat0.
    +
    real(kind=kd) clat0
    Local copy of clat0.
    + +
    subroutine rot_equid_cylind_egrid_vect_rot(RLON, CROT, SROT)
    Computes the vector rotation sines and cosines for a rotated equidistant cylindrical grid.
    +
    subroutine gdswzd_rot_equid_cylind_egrid(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for rotated equidistant cylin...
    +
    subroutine init_grib1(self, g1_desc)
    Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object.
    +
    real(kind=kd) clat
    Cosine of the latitude.
    +
    real(kind=kd) clatr
    Cosine of the rotated latitude.
    +
    real(kind=kd) slat
    Sine of the latitude.
    +
    real(kind=kd) rerth
    Radius of the Earth.
    +
    real(kind=kd) dlons
    Local copy of dlons.
    +
    subroutine init_grib2(self, g2_desc)
    Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object.
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    + +
    +
    + + + + diff --git a/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90.html b/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90.html new file mode 100644 index 00000000..5d1349eb --- /dev/null +++ b/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90.html @@ -0,0 +1,184 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_rot_equid_cylind_grid_mod.F90 File Reference
    +
    +
    + +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid
     
    + + + + +

    +Modules

    module  ip_rot_equid_cylind_grid_mod
     Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D.
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_rot_equid_cylind_grid_mod::gdswzd_rot_equid_cylind (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for rotated equidistant cylindrical. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::init_grib1 (self, g1_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::init_grib2 (self, g2_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::init_grib2_default (self, g2_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::init_grib2_ncep_post (self, g2_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_error (IOPT, FILL, RLAT, RLON, XPTS, YPTS, NPTS)
     Error handler. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_grid_area (CLATR, FILL, AREA)
     Grid box area for rotated equidistant cylindrical grids - non "e" stagger. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_map_jacob (FILL, RLON, CLATR, CLAT, SLAT, CLON, XLON, XLAT, YLON, YLAT)
     Map jacobians for rotated equidistant cylindrical grids - non "e" stagger. More...
     
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_vect_rot (RLON, CLATR, SLATR, CLAT, SLAT, CLON, CROT, SROT)
     Vector rotation fields for rotated equidistant cylindrical grids - non "e" stagger. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    real(kind=kd) ip_rot_equid_cylind_grid_mod::clat0
     Local copy of clat0. More...
     
    real(kind=kd) ip_rot_equid_cylind_grid_mod::dlats
     Local copy of dlats. More...
     
    real(kind=kd) ip_rot_equid_cylind_grid_mod::dlons
     Local copy of dlons. More...
     
    integer ip_rot_equid_cylind_grid_mod::irot
     Local copy of irot. More...
     
    integer, parameter ip_rot_equid_cylind_grid_mod::kd = real64
     Fortran kind for reals. More...
     
    real(kind=kd) ip_rot_equid_cylind_grid_mod::rerth
     Radius of the Earth. More...
     
    real(kind=kd) ip_rot_equid_cylind_grid_mod::rlon0
     Local copy of rlon0. More...
     
    real(kind=kd) ip_rot_equid_cylind_grid_mod::slat0
     Local copy of slat0. More...
     
    +

    Detailed Description

    +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D.

    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition in file ip_rot_equid_cylind_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90.js b/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90.js new file mode 100644 index 00000000..560c3a93 --- /dev/null +++ b/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90.js @@ -0,0 +1,21 @@ +var ip__rot__equid__cylind__grid__mod_8F90 = +[ + [ "ip_rot_equid_cylind_grid", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid" ], + [ "gdswzd_rot_equid_cylind", "ip__rot__equid__cylind__grid__mod_8F90.html#a55c153201e15205d3f75e4ffb717cc0b", null ], + [ "init_grib1", "ip__rot__equid__cylind__grid__mod_8F90.html#acb27dfdc6f03dea897d509910365afee", null ], + [ "init_grib2", "ip__rot__equid__cylind__grid__mod_8F90.html#add3c6c1dad5748b452d291df6619867d", null ], + [ "init_grib2_default", "ip__rot__equid__cylind__grid__mod_8F90.html#a9ade5de892a935c3b62c1860b719ce74", null ], + [ "init_grib2_ncep_post", "ip__rot__equid__cylind__grid__mod_8F90.html#a74abf723e815f9ff196e6d0174fd449b", null ], + [ "rot_equid_cylind_error", "ip__rot__equid__cylind__grid__mod_8F90.html#a1cc09c83f9a3815d8c5f8ed2f239f53f", null ], + [ "rot_equid_cylind_grid_area", "ip__rot__equid__cylind__grid__mod_8F90.html#ad8f1133eb6809705c15337134eafe9fd", null ], + [ "rot_equid_cylind_map_jacob", "ip__rot__equid__cylind__grid__mod_8F90.html#a985f1dc1a20444cef706d4bb20e0841b", null ], + [ "rot_equid_cylind_vect_rot", "ip__rot__equid__cylind__grid__mod_8F90.html#a3de472bfc18740a7d985f560f3541c10", null ], + [ "clat0", "ip__rot__equid__cylind__grid__mod_8F90.html#afeb699d0eaa8d157277e93fe8e8c5852", null ], + [ "dlats", "ip__rot__equid__cylind__grid__mod_8F90.html#ab43075e39d4e2dde4110e608931a392d", null ], + [ "dlons", "ip__rot__equid__cylind__grid__mod_8F90.html#aa0cf7bb2dd8be1239ae38c7220d29702", null ], + [ "irot", "ip__rot__equid__cylind__grid__mod_8F90.html#abb0c2acdbd71f0c07ffaf9db54ce06c1", null ], + [ "kd", "ip__rot__equid__cylind__grid__mod_8F90.html#af5dea0592cccce2de1c5c6a92d42cfd6", null ], + [ "rerth", "ip__rot__equid__cylind__grid__mod_8F90.html#ae08318392106d174ab36cf7dc05c570b", null ], + [ "rlon0", "ip__rot__equid__cylind__grid__mod_8F90.html#a620a55069afd33b301240533915387df", null ], + [ "slat0", "ip__rot__equid__cylind__grid__mod_8F90.html#a64831f92d5306513987a98e97a32aea1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90_source.html b/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90_source.html new file mode 100644 index 00000000..efa50e96 --- /dev/null +++ b/ver-5.1.0/ip__rot__equid__cylind__grid__mod_8F90_source.html @@ -0,0 +1,651 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_rot_equid_cylind_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    7 
    + +
    20  use iso_fortran_env, only: real64
    + +
    22  use ip_grid_mod
    +
    23  use ip_constants_mod, only: dpr, pi
    + +
    25  implicit none
    +
    26 
    +
    27  private
    +
    28  public :: ip_rot_equid_cylind_grid
    +
    29 
    +
    30  integer, parameter :: kd = real64
    +
    31 
    + +
    33  real(kd) :: clat0
    +
    34  real(kd) :: dlats
    +
    35  real(kd) :: dlons
    +
    36  real(kd) :: rlon0
    +
    37  real(kd) :: slat0
    +
    38  real(kd) :: wbd
    +
    39  real(kd) :: sbd
    +
    43  integer :: irot
    +
    44  contains
    +
    47  procedure :: init_grib1
    +
    50  procedure :: init_grib2
    + + +
    55 
    +
    56  INTEGER :: irot
    +
    57  REAL(kind=kd) :: rerth
    +
    58  REAL(kind=kd) :: clat0
    +
    59  REAL(kind=kd) :: dlats
    +
    60  REAL(kind=kd) :: dlons
    +
    61  REAL(kind=kd) :: rlon0
    +
    62  REAL(kind=kd) :: slat0
    +
    63 
    +
    64 CONTAINS
    +
    65 
    +
    73  subroutine init_grib1(self, g1_desc)
    +
    74  class(ip_rot_equid_cylind_grid), intent(inout) :: self
    +
    75  type(grib1_descriptor), intent(in) :: g1_desc
    +
    76 
    +
    77  real(kd) :: rlat1, rlon1, rlat0, rlat2, rlon2, nbd, ebd
    +
    78  real(kd) :: hs, hs2, slat1, slat2, slatr, clon1, clon2, clat1, clat2, clatr, clonr, rlonr, rlatr
    +
    79 
    +
    80  associate(kgds => g1_desc%gds)
    +
    81  self%rerth = 6.3712e6_kd
    +
    82  self%eccen_squared = 0d0
    +
    83 
    +
    84  rlat1=kgds(4)*1.e-3_kd
    +
    85  rlon1=kgds(5)*1.e-3_kd
    +
    86  rlat0=kgds(7)*1.e-3_kd
    +
    87  self%RLON0=kgds(8)*1.e-3_kd
    +
    88  rlat2=kgds(12)*1.e-3_kd
    +
    89  rlon2=kgds(13)*1.e-3_kd
    +
    90 
    +
    91  self%IROT=mod(kgds(6)/8,2)
    +
    92  self%IM=kgds(2)
    +
    93  self%JM=kgds(3)
    +
    94 
    +
    95  slat1=sin(rlat1/dpr)
    +
    96  clat1=cos(rlat1/dpr)
    +
    97  self%SLAT0=sin(rlat0/dpr)
    +
    98  self%CLAT0=cos(rlat0/dpr)
    +
    99 
    +
    100  hs=sign(1._kd,mod(rlon1-self%RLON0+180+3600,360._kd)-180)
    +
    101  clon1=cos((rlon1-self%RLON0)/dpr)
    +
    102  slatr=self%CLAT0*slat1-self%SLAT0*clat1*clon1
    +
    103  clatr=sqrt(1-slatr**2)
    +
    104  clonr=(self%CLAT0*clat1*clon1+self%SLAT0*slat1)/clatr
    +
    105  rlatr=dpr*asin(slatr)
    +
    106  rlonr=hs*dpr*acos(clonr)
    +
    107 
    +
    108  self%WBD=rlonr
    +
    109  self%SBD=rlatr
    +
    110  slat2=sin(rlat2/dpr)
    +
    111  clat2=cos(rlat2/dpr)
    +
    112  hs2=sign(1._kd,mod(rlon2-self%RLON0+180+3600,360._kd)-180)
    +
    113  clon2=cos((rlon2-self%RLON0)/dpr)
    +
    114  slatr=self%CLAT0*slat2-self%SLAT0*clat2*clon2
    +
    115  clatr=sqrt(1-slatr**2)
    +
    116  clonr=(self%CLAT0*clat2*clon2+self%SLAT0*slat2)/clatr
    +
    117  nbd=dpr*asin(slatr)
    +
    118  ebd=hs2*dpr*acos(clonr)
    +
    119  self%DLATS=(nbd-self%SBD)/float(self%JM-1)
    +
    120  self%DLONS=(ebd-self%WBD)/float(self%IM-1)
    +
    121 
    +
    122  self%iwrap = 0
    +
    123  self%jwrap1 = 0
    +
    124  self%jwrap2 = 0
    +
    125  self%nscan = mod(kgds(11) / 32, 2)
    +
    126  self%nscan_field_pos = self%nscan
    +
    127  self%kscan = 0
    +
    128  end associate
    +
    129 
    +
    130  end subroutine init_grib1
    +
    131 
    +
    140  subroutine init_grib2(self, g2_desc)
    +
    141  class(ip_rot_equid_cylind_grid), intent(inout) :: self
    +
    142  type(grib2_descriptor), intent(in) :: g2_desc
    +
    143 
    +
    144  if (ncep_post_arakawa.and.(g2_desc%gdt_num.eq.32769)) then
    +
    145  call init_grib2_ncep_post(self, g2_desc)
    +
    146  else
    +
    147  call init_grib2_default(self, g2_desc)
    +
    148  endif
    +
    149 
    +
    150  end subroutine init_grib2
    +
    151 
    +
    160  subroutine init_grib2_default(self, g2_desc)
    +
    161  class(ip_rot_equid_cylind_grid), intent(inout) :: self
    +
    162  type(grib2_descriptor), intent(in) :: g2_desc
    +
    163 
    +
    164  real(kd) :: rlat1, rlon1, rlat0, rlat2, rlon2, nbd, ebd
    +
    165  integer :: iscale
    +
    166  integer :: i_offset_odd, i_offset_even, j_offset
    +
    167 
    +
    168  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    169 
    +
    170  CALL earth_radius(igdtmpl,igdtlen,self%rerth,self%eccen_squared)
    +
    171 
    +
    172  i_offset_odd=mod(igdtmpl(19)/8,2)
    +
    173  i_offset_even=mod(igdtmpl(19)/4,2)
    +
    174  j_offset=mod(igdtmpl(19)/2,2)
    +
    175 
    +
    176  iscale=igdtmpl(10)*igdtmpl(11)
    +
    177  IF(iscale==0) iscale=10**6
    +
    178 
    +
    179  rlat1=float(igdtmpl(12))/float(iscale)
    +
    180  rlon1=float(igdtmpl(13))/float(iscale)
    +
    181  rlat0=float(igdtmpl(20))/float(iscale)
    +
    182  rlat0=rlat0+90.0_kd
    +
    183 
    +
    184  self%RLON0=float(igdtmpl(21))/float(iscale)
    +
    185 
    +
    186  rlat2=float(igdtmpl(15))/float(iscale)
    +
    187  rlon2=float(igdtmpl(16))/float(iscale)
    +
    188 
    +
    189  self%IROT=mod(igdtmpl(14)/8,2)
    +
    190  self%IM=igdtmpl(8)
    +
    191  self%JM=igdtmpl(9)
    +
    192 
    +
    193  self%SLAT0=sin(rlat0/dpr)
    +
    194  self%CLAT0=cos(rlat0/dpr)
    +
    195 
    +
    196  self%WBD=rlon1
    +
    197  IF (self%WBD > 180.0) self%WBD = self%WBD - 360.0
    +
    198  self%SBD=rlat1
    +
    199 
    +
    200  nbd=rlat2
    +
    201  ebd=rlon2
    +
    202 
    +
    203  self%DLATS=(nbd-self%SBD)/float(self%JM-1)
    +
    204  self%DLONS=(ebd-self%WBD)/float(self%IM-1)
    +
    205 
    +
    206  IF(i_offset_odd==1) self%WBD=self%WBD+(0.5_kd*self%DLONS)
    +
    207  IF(j_offset==1) self%SBD=self%SBD+(0.5_kd*self%DLATS)
    +
    208 
    +
    209  self%iwrap = 0
    +
    210  self%jwrap1 = 0
    +
    211  self%jwrap2 = 0
    +
    212  self%kscan = 0
    +
    213  self%nscan = mod(igdtmpl(19) / 32, 2)
    +
    214  self%nscan_field_pos = self%nscan
    +
    215  end associate
    +
    216  end subroutine init_grib2_default
    +
    217 
    +
    227  subroutine init_grib2_ncep_post(self, g2_desc)
    +
    228  class(ip_rot_equid_cylind_grid), intent(inout) :: self
    +
    229  type(grib2_descriptor), intent(in) :: g2_desc
    +
    230 
    +
    231  real(kd) :: rlat1, rlon1, rlat0, rlat2, rlon2, nbd, ebd
    +
    232  integer :: iscale
    +
    233  integer :: i_offset_odd, i_offset_even, j_offset
    +
    234  real(kd) :: hs, hs2, slat1, slat2, slatr, clon1, clon2, clat1, clat2, clatr, clonr, rlonr, rlatr
    +
    235 
    +
    236  associate(igdtmpl => g2_desc%gdt_tmpl, igdtlen => g2_desc%gdt_len)
    +
    237 
    +
    238  CALL earth_radius(igdtmpl,igdtlen,self%rerth,self%eccen_squared)
    +
    239 
    +
    240  i_offset_odd=mod(igdtmpl(19)/8,2)
    +
    241  i_offset_even=mod(igdtmpl(19)/4,2)
    +
    242  j_offset=mod(igdtmpl(19)/2,2)
    +
    243 
    +
    244  iscale=igdtmpl(10)*igdtmpl(11)
    +
    245  IF(iscale==0) iscale=10**6
    +
    246 
    +
    247  rlat1=float(igdtmpl(12))/float(iscale)
    +
    248  rlon1=float(igdtmpl(13))/float(iscale)
    +
    249  rlat0=float(igdtmpl(15))/float(iscale)
    +
    250 
    +
    251  self%RLON0=float(igdtmpl(16))/float(iscale)
    +
    252 
    +
    253  rlat2=float(igdtmpl(20))/float(iscale)
    +
    254  rlon2=float(igdtmpl(21))/float(iscale)
    +
    255 
    +
    256  self%IROT=mod(igdtmpl(14)/8,2)
    +
    257  self%IM=igdtmpl(8)
    +
    258  self%JM=igdtmpl(9)
    +
    259 
    +
    260  slat1=sin(rlat1/dpr)
    +
    261  clat1=cos(rlat1/dpr)
    +
    262 
    +
    263  self%SLAT0=sin(rlat0/dpr)
    +
    264  self%CLAT0=cos(rlat0/dpr)
    +
    265 
    +
    266  hs=sign(1._kd,mod(rlon1-self%RLON0+180+3600,360._kd)-180)
    +
    267 
    +
    268  clon1=cos((rlon1-self%RLON0)/dpr)
    +
    269  slatr=self%CLAT0*slat1-self%SLAT0*clat1*clon1
    +
    270  clatr=sqrt(1-slatr**2)
    +
    271  clonr=(self%CLAT0*clat1*clon1+self%SLAT0*slat1)/clatr
    +
    272  rlatr=dpr*asin(slatr)
    +
    273  rlonr=hs*dpr*acos(clonr)
    +
    274 
    +
    275  self%WBD=rlonr
    +
    276  IF (self%WBD > 180.0) self%WBD = self%WBD - 360.0
    +
    277  self%SBD=rlatr
    +
    278 
    +
    279  slat2=sin(rlat2/dpr)
    +
    280  clat2=cos(rlat2/dpr)
    +
    281  hs2=sign(1._kd,mod(rlon2-self%RLON0+180+3600,360._kd)-180)
    +
    282  clon2=cos((rlon2-self%RLON0)/dpr)
    +
    283  slatr=self%CLAT0*slat2-self%SLAT0*clat2*clon2
    +
    284  clatr=sqrt(1-slatr**2)
    +
    285  clonr=(self%CLAT0*clat2*clon2+self%SLAT0*slat2)/clatr
    +
    286  nbd=dpr*asin(slatr)
    +
    287  ebd=hs2*dpr*acos(clonr)
    +
    288  self%DLATS=(nbd-self%SBD)/float(self%JM-1)
    +
    289  self%DLONS=(ebd-self%WBD)/float(self%IM-1)
    +
    290 
    +
    291  IF(i_offset_odd==1) self%WBD=self%WBD+(0.5_kd*self%DLONS)
    +
    292  IF(j_offset==1) self%SBD=self%SBD+(0.5_kd*self%DLATS)
    +
    293 
    +
    294  self%iwrap = 0
    +
    295  self%jwrap1 = 0
    +
    296  self%jwrap2 = 0
    +
    297  self%kscan = 0
    +
    298  self%nscan = mod(igdtmpl(19) / 32, 2)
    +
    299  self%nscan_field_pos = self%nscan
    +
    300  end associate
    +
    301  end subroutine init_grib2_ncep_post
    +
    302 
    +
    362  SUBROUTINE gdswzd_rot_equid_cylind(self,IOPT,NPTS, &
    +
    363  FILL,XPTS,YPTS,RLON,RLAT,NRET, &
    +
    364  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    365  IMPLICIT NONE
    +
    366 
    +
    367  class(ip_rot_equid_cylind_grid), intent(in) :: self
    +
    368  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    369  INTEGER, INTENT( OUT) :: NRET
    +
    370  !
    +
    371  REAL, INTENT(IN ) :: FILL
    +
    372  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    373  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    374  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    375  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    376  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    377  !
    +
    378  INTEGER :: IM,JM,N
    +
    379  !
    +
    380  LOGICAL :: LROT, LMAP, LAREA
    +
    381  !
    +
    382  REAL(KIND=kd) :: hs
    +
    383  REAL(KIND=kd) :: clonr,clatr,slatr
    +
    384  REAL(KIND=kd) :: clat,slat,clon
    +
    385  REAL(KIND=kd) :: rlatr,rlonr
    +
    386  REAL(KIND=kd) :: wbd,sbd
    +
    387  REAL :: XMIN,XMAX,YMIN,YMAX
    +
    388  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    389  IF(PRESENT(crot)) crot=fill
    +
    390  IF(PRESENT(srot)) srot=fill
    +
    391  IF(PRESENT(xlon)) xlon=fill
    +
    392  IF(PRESENT(xlat)) xlat=fill
    +
    393  IF(PRESENT(ylon)) ylon=fill
    +
    394  IF(PRESENT(ylat)) ylat=fill
    +
    395  IF(PRESENT(area)) area=fill
    +
    396  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    397  ! IS THE EARTH RADIUS DEFINED?
    +
    398  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    399  ! IS THIS AN "E"-STAGGER GRID? ROUTINE CAN'T PROCESS THOSE.
    +
    400  ! I_OFFSET_ODD=MOD(IGDTMPL(19)/8,2)
    +
    401  ! I_OFFSET_EVEN=MOD(IGDTMPL(19)/4,2)
    +
    402  ! J_OFFSET=MOD(IGDTMPL(19)/2,2)
    +
    403  ! IF(I_OFFSET_ODD/=I_OFFSET_EVEN) THEN
    +
    404  ! CALL ROT_EQUID_CYLIND_ERROR(IOPT,FILL,RLAT,RLON,XPTS,YPTS,NPTS)
    +
    405  ! RETURN
    +
    406  ! ENDIF
    +
    407  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    408 
    +
    409 
    +
    410  rlon0=self%rlon0
    +
    411  irot=self%irot
    +
    412 
    +
    413  im=self%im
    +
    414  jm=self%jm
    +
    415 
    +
    416  slat0=self%slat0
    +
    417  clat0=self%clat0
    +
    418 
    +
    419  wbd=self%wbd
    +
    420  sbd=self%sbd
    +
    421 
    +
    422  dlats=self%dlats
    +
    423  dlons=self%dlons
    +
    424 
    +
    425  xmin=0
    +
    426  xmax=im+1
    +
    427  ymin=0
    +
    428  ymax=jm+1
    +
    429  nret=0
    +
    430 
    +
    431  rerth = self%rerth
    +
    432  IF(rerth<0.)THEN
    +
    433  CALL rot_equid_cylind_error(iopt,fill,rlat,rlon,xpts,ypts,npts)
    +
    434  RETURN
    +
    435  ENDIF
    +
    436 
    +
    437  IF(PRESENT(crot).AND.PRESENT(srot))THEN
    +
    438  lrot=.true.
    +
    439  ELSE
    +
    440  lrot=.false.
    +
    441  ENDIF
    +
    442  IF(PRESENT(xlon).AND.PRESENT(xlat).AND.PRESENT(ylon).AND.PRESENT(ylat))THEN
    +
    443  lmap=.true.
    +
    444  ELSE
    +
    445  lmap=.false.
    +
    446  ENDIF
    +
    447  IF(PRESENT(area))THEN
    +
    448  larea=.true.
    +
    449  ELSE
    +
    450  larea=.false.
    +
    451  ENDIF
    +
    452  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    453  ! TRANSLATE GRID COORDINATES TO EARTH COORDINATES
    +
    454  IF(iopt.EQ.0.OR.iopt.EQ.1) THEN
    +
    455  !$OMP PARALLEL DO PRIVATE(N,RLONR,RLATR,HS,CLONR,SLATR,CLATR,SLAT,CLAT,CLON) &
    +
    456  !$OMP& REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    457  DO n=1,npts
    +
    458  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    459  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    460  rlonr=wbd+(xpts(n)-1._kd)*dlons
    +
    461  rlatr=sbd+(ypts(n)-1._kd)*dlats
    +
    462  IF(rlonr <= 0._kd) THEN
    +
    463  hs=-1.0_kd
    +
    464  ELSE
    +
    465  hs=1.0_kd
    +
    466  ENDIF
    +
    467  clonr=cos(rlonr/dpr)
    +
    468  slatr=sin(rlatr/dpr)
    +
    469  clatr=cos(rlatr/dpr)
    +
    470  slat=clat0*slatr+slat0*clatr*clonr
    +
    471  IF(slat.LE.-1) THEN
    +
    472  clat=0.
    +
    473  clon=cos(rlon0/dpr)
    +
    474  rlon(n)=0.
    +
    475  rlat(n)=-90.
    +
    476  ELSEIF(slat.GE.1) THEN
    +
    477  clat=0.
    +
    478  clon=cos(rlon0/dpr)
    +
    479  rlon(n)=0.
    +
    480  rlat(n)=90.
    +
    481  ELSE
    +
    482  clat=sqrt(1-slat**2)
    +
    483  clon=(clat0*clatr*clonr-slat0*slatr)/clat
    +
    484  clon=min(max(clon,-1._kd),1._kd)
    +
    485  rlon(n)=real(mod(rlon0+hs*dpr*acos(clon)+3600,360._kd))
    +
    486  rlat(n)=real(dpr*asin(slat))
    +
    487  ENDIF
    +
    488  nret=nret+1
    +
    489  IF(lrot) CALL rot_equid_cylind_vect_rot(rlon(n), clatr, slatr, &
    +
    490  clat, slat, clon, crot(n), srot(n))
    +
    491  IF(lmap) CALL rot_equid_cylind_map_jacob(fill, rlon(n), clatr, &
    +
    492  clat, slat, clon, xlon(n), xlat(n), ylon(n), ylat(n))
    +
    493  IF(larea) CALL rot_equid_cylind_grid_area(clatr, fill, area(n))
    +
    494  ELSE
    +
    495  rlon(n)=fill
    +
    496  rlat(n)=fill
    +
    497  ENDIF
    +
    498  ENDDO
    +
    499  !$OMP END PARALLEL DO
    +
    500  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    501  ! TRANSLATE EARTH COORDINATES TO GRID COORDINATES
    +
    502  ELSEIF(iopt.EQ.-1) THEN
    +
    503  !$OMP PARALLEL DO PRIVATE(N,HS,CLON,SLAT,CLAT,SLATR,CLATR,CLONR,RLONR,RLATR) &
    +
    504  !$OMP& REDUCTION(+:NRET) SCHEDULE(STATIC)
    +
    505  DO n=1,npts
    +
    506  IF(abs(rlon(n)).LE.360.AND.abs(rlat(n)).LE.90) THEN
    +
    507  hs=sign(1._kd,mod(rlon(n)-rlon0+180+3600,360._kd)-180)
    +
    508  clon=cos((rlon(n)-rlon0)/dpr)
    +
    509  slat=sin(rlat(n)/dpr)
    +
    510  clat=cos(rlat(n)/dpr)
    +
    511  slatr=clat0*slat-slat0*clat*clon
    +
    512  IF(slatr.LE.-1) THEN
    +
    513  clatr=0._kd
    +
    514  rlonr=0.
    +
    515  rlatr=-90.
    +
    516  ELSEIF(slatr.GE.1) THEN
    +
    517  clatr=0._kd
    +
    518  rlonr=0.
    +
    519  rlatr=90.
    +
    520  ELSE
    +
    521  clatr=sqrt(1-slatr**2)
    +
    522  clonr=(clat0*clat*clon+slat0*slat)/clatr
    +
    523  clonr=min(max(clonr,-1._kd),1._kd)
    +
    524  rlonr=hs*dpr*acos(clonr)
    +
    525  rlatr=dpr*asin(slatr)
    +
    526  ENDIF
    +
    527  xpts(n)=real((rlonr-wbd)/dlons+1._kd)
    +
    528  ypts(n)=real((rlatr-sbd)/dlats+1._kd)
    +
    529  IF(xpts(n).GE.xmin.AND.xpts(n).LE.xmax.AND. &
    +
    530  ypts(n).GE.ymin.AND.ypts(n).LE.ymax) THEN
    +
    531  nret=nret+1
    +
    532  IF(lrot) CALL rot_equid_cylind_vect_rot(rlon(n), clatr, slatr, &
    +
    533  clat, slat, clon, crot(n), srot(n))
    +
    534  IF(lmap) CALL rot_equid_cylind_map_jacob(fill, rlon(n), clatr, &
    +
    535  clat, slat, clon, xlon(n), xlat(n), ylon(n), ylat(n))
    +
    536  IF(larea) CALL rot_equid_cylind_grid_area(clatr, fill, area(n))
    +
    537  ELSE
    +
    538  xpts(n)=fill
    +
    539  ypts(n)=fill
    +
    540  ENDIF
    +
    541  ELSE
    +
    542  xpts(n)=fill
    +
    543  ypts(n)=fill
    +
    544  ENDIF
    +
    545  ENDDO
    +
    546  !$OMP END PARALLEL DO
    +
    547  ENDIF
    +
    548  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    549  END SUBROUTINE gdswzd_rot_equid_cylind
    +
    550 
    +
    568  SUBROUTINE rot_equid_cylind_error(IOPT,FILL,RLAT,RLON,XPTS,YPTS,NPTS)
    +
    569  IMPLICIT NONE
    +
    570  !
    +
    571  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    572  !
    +
    573  REAL, INTENT(IN ) :: FILL
    +
    574  REAL, INTENT( OUT) :: RLAT(NPTS),RLON(NPTS)
    +
    575  REAL, INTENT( OUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    576  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    577  IF(iopt>=0) THEN
    +
    578  rlon=fill
    +
    579  rlat=fill
    +
    580  ENDIF
    +
    581  IF(iopt<=0) THEN
    +
    582  xpts=fill
    +
    583  ypts=fill
    +
    584  ENDIF
    +
    585  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    586  END SUBROUTINE rot_equid_cylind_error
    +
    587 
    +
    613  SUBROUTINE rot_equid_cylind_vect_rot(RLON, CLATR, SLATR, CLAT, SLAT, &
    +
    614  CLON, CROT, SROT)
    +
    615  IMPLICIT NONE
    +
    616 
    +
    617  REAL(KIND=kd), INTENT(IN ) :: clat, clatr, clon, slat, slatr
    +
    618  REAL , INTENT(IN ) :: RLON
    +
    619  REAL , INTENT( OUT) :: CROT, SROT
    +
    620 
    +
    621  REAL(KIND=kd) :: slon
    +
    622 
    +
    623  IF(irot.EQ.1) THEN
    +
    624  IF(clatr.LE.0._kd) THEN
    +
    625  crot=real(-sign(1._kd,slatr*slat0))
    +
    626  srot=0.
    +
    627  ELSE
    +
    628  slon=sin((rlon-rlon0)/dpr)
    +
    629  crot=real((clat0*clat+slat0*slat*clon)/clatr)
    +
    630  srot=real(slat0*slon/clatr)
    +
    631  ENDIF
    +
    632  ELSE
    +
    633  crot=1.
    +
    634  srot=0.
    +
    635  ENDIF
    +
    636 
    +
    637  END SUBROUTINE rot_equid_cylind_vect_rot
    +
    638 
    +
    664  SUBROUTINE rot_equid_cylind_map_jacob(FILL, RLON, CLATR, CLAT, &
    +
    665  SLAT, CLON, XLON, XLAT, YLON, YLAT)
    +
    666  IMPLICIT NONE
    +
    667 
    +
    668  REAL(KIND=kd), INTENT(IN ) :: clatr, clat, slat, clon
    +
    669  REAL , INTENT(IN ) :: FILL, RLON
    +
    670  REAL , INTENT( OUT) :: XLON, XLAT, YLON, YLAT
    +
    671 
    +
    672  REAL(KIND=kd) :: slon, term1, term2
    +
    673 
    +
    674  IF(clatr.LE.0._kd) THEN
    +
    675  xlon=fill
    +
    676  xlat=fill
    +
    677  ylon=fill
    +
    678  ylat=fill
    +
    679  ELSE
    +
    680  slon=sin((rlon-rlon0)/dpr)
    +
    681  term1=(clat0*clat+slat0*slat*clon)/clatr
    +
    682  term2=slat0*slon/clatr
    +
    683  xlon=real(term1*clat/(dlons*clatr))
    +
    684  xlat=real(-term2/(dlons*clatr))
    +
    685  ylon=real(term2*clat/dlats)
    +
    686  ylat=real(term1/dlats)
    +
    687  ENDIF
    +
    688 
    +
    689  END SUBROUTINE rot_equid_cylind_map_jacob
    +
    690 
    +
    709  SUBROUTINE rot_equid_cylind_grid_area(CLATR, FILL, AREA)
    +
    710  IMPLICIT NONE
    +
    711 
    +
    712  REAL(KIND=kd), INTENT(IN ) :: clatr
    +
    713  REAL, INTENT(IN ) :: FILL
    +
    714  REAL, INTENT( OUT) :: AREA
    +
    715 
    +
    716  IF(clatr.LE.0._kd) THEN
    +
    717  area=fill
    +
    718  ELSE
    +
    719  area=real(2._kd*(rerth**2)*clatr*(dlons/dpr)*sin(0.5_kd*dlats/dpr))
    +
    720  ENDIF
    +
    721 
    +
    722  END SUBROUTINE rot_equid_cylind_grid_area
    +
    723 
    + +
    725 
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Determine earth radius and shape.
    +
    Module containing common constants.
    +
    real, parameter pi
    PI.
    +
    real, parameter dpr
    Radians to degrees.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A ...
    +
    subroutine rot_equid_cylind_error(IOPT, FILL, RLAT, RLON, XPTS, YPTS, NPTS)
    Error handler.
    +
    subroutine rot_equid_cylind_vect_rot(RLON, CLATR, SLATR, CLAT, SLAT, CLON, CROT, SROT)
    Vector rotation fields for rotated equidistant cylindrical grids - non "e" stagger.
    +
    subroutine gdswzd_rot_equid_cylind(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    GDS wizard for rotated equidistant cylindrical.
    +
    real(kind=kd) rlon0
    Local copy of rlon0.
    +
    real(kind=kd) slat0
    Local copy of slat0.
    +
    subroutine init_grib2_ncep_post(self, g2_desc)
    Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object.
    +
    subroutine rot_equid_cylind_map_jacob(FILL, RLON, CLATR, CLAT, SLAT, CLON, XLON, XLAT, YLON, YLAT)
    Map jacobians for rotated equidistant cylindrical grids - non "e" stagger.
    +
    subroutine init_grib2_default(self, g2_desc)
    Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object.
    +
    real(kind=kd) dlons
    Local copy of dlons.
    +
    real(kind=kd) dlats
    Local copy of dlats.
    + +
    subroutine init_grib1(self, g1_desc)
    Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object.
    +
    subroutine rot_equid_cylind_grid_area(CLATR, FILL, AREA)
    Grid box area for rotated equidistant cylindrical grids - non "e" stagger.
    +
    subroutine init_grib2(self, g2_desc)
    Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object.
    +
    real(kind=kd) rerth
    Radius of the Earth.
    +
    integer, parameter kd
    Fortran kind for reals.
    +
    real(kind=kd) clat0
    Local copy of clat0.
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    + +
    +
    + + + + diff --git a/ver-5.1.0/ip__station__points__grid__mod_8F90.html b/ver-5.1.0/ip__station__points__grid__mod_8F90.html new file mode 100644 index 00000000..1d726aac --- /dev/null +++ b/ver-5.1.0/ip__station__points__grid__mod_8F90.html @@ -0,0 +1,138 @@ + + + + + + + +NCEPLIBS-ip: ip_station_points_grid_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_station_points_grid_mod.F90 File Reference
    +
    +
    + +

    Interpolate gridded data to a series of station points. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    type  ip_station_points_grid_mod::ip_station_points_grid
     
    + + + + +

    +Modules

    module  ip_station_points_grid_mod
     Interpolate gridded data to a series of station points.
     
    + + + + + + + + + + +

    +Functions/Subroutines

    subroutine ip_station_points_grid_mod::gdswzd_station_points (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Interpolate gridded data to a series of station points. More...
     
    subroutine ip_station_points_grid_mod::init_grib1 (self, g1_desc)
     Initializes an IP Station grid given a grib1_descriptor object. More...
     
    subroutine ip_station_points_grid_mod::init_grib2 (self, g2_desc)
     Initializes an IP Station grid given a grib2_descriptor object. More...
     
    +

    Detailed Description

    +

    Interpolate gridded data to a series of station points.

    +
    Author
    Kyle Gerheiser
    +
    Date
    7/21/21
    + +

    Definition in file ip_station_points_grid_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ip__station__points__grid__mod_8F90.js b/ver-5.1.0/ip__station__points__grid__mod_8F90.js new file mode 100644 index 00000000..f83de141 --- /dev/null +++ b/ver-5.1.0/ip__station__points__grid__mod_8F90.js @@ -0,0 +1,7 @@ +var ip__station__points__grid__mod_8F90 = +[ + [ "ip_station_points_grid", "structip__station__points__grid__mod_1_1ip__station__points__grid.html", "structip__station__points__grid__mod_1_1ip__station__points__grid" ], + [ "gdswzd_station_points", "ip__station__points__grid__mod_8F90.html#a8da297b45242279a497dbd7062a33197", null ], + [ "init_grib1", "ip__station__points__grid__mod_8F90.html#a4b28ebf2b4fe826c96af69db28e0a1ff", null ], + [ "init_grib2", "ip__station__points__grid__mod_8F90.html#ad17e6d245295803b62b146be984f874d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ip__station__points__grid__mod_8F90_source.html b/ver-5.1.0/ip__station__points__grid__mod_8F90_source.html new file mode 100644 index 00000000..b695ff11 --- /dev/null +++ b/ver-5.1.0/ip__station__points__grid__mod_8F90_source.html @@ -0,0 +1,160 @@ + + + + + + + +NCEPLIBS-ip: ip_station_points_grid_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_station_points_grid_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    + + +
    11  use ip_grid_mod
    +
    12  implicit none
    +
    13 
    +
    14  ! Not really a grid
    +
    15  private
    +
    16  public :: ip_station_points_grid
    +
    17 
    +
    18  type, extends(ip_grid) :: ip_station_points_grid
    +
    19  contains
    +
    21  procedure :: init_grib1
    +
    23  procedure :: init_grib2
    +
    26  procedure :: gdswzd => gdswzd_station_points
    +
    27  end type ip_station_points_grid
    +
    28 
    +
    29 contains
    +
    30 
    +
    37  subroutine init_grib1(self, g1_desc)
    +
    38  class(ip_station_points_grid), intent(inout) :: self
    +
    39  type(grib1_descriptor), intent(in) :: g1_desc
    +
    40  end subroutine init_grib1
    +
    41 
    +
    48  subroutine init_grib2(self, g2_desc)
    +
    49  class(ip_station_points_grid), intent(inout) :: self
    +
    50  type(grib2_descriptor), intent(in) :: g2_desc
    +
    51  end subroutine init_grib2
    +
    52 
    +
    75  SUBROUTINE gdswzd_station_points(self,IOPT,NPTS, &
    +
    76  FILL,XPTS,YPTS,RLON,RLAT,NRET, &
    +
    77  CROT,SROT,XLON,XLAT,YLON,YLAT,AREA)
    +
    78  class(ip_station_points_grid), intent(in) :: self
    +
    79  INTEGER, INTENT(IN ) :: IOPT, NPTS
    +
    80  INTEGER, INTENT( OUT) :: NRET
    +
    81  !
    +
    82  REAL, INTENT(IN ) :: FILL
    +
    83  REAL, INTENT(INOUT) :: RLON(NPTS),RLAT(NPTS)
    +
    84  REAL, INTENT(INOUT) :: XPTS(NPTS),YPTS(NPTS)
    +
    85  REAL, OPTIONAL, INTENT( OUT) :: CROT(NPTS),SROT(NPTS)
    +
    86  REAL, OPTIONAL, INTENT( OUT) :: XLON(NPTS),XLAT(NPTS)
    +
    87  REAL, OPTIONAL, INTENT( OUT) :: YLON(NPTS),YLAT(NPTS),AREA(NPTS)
    +
    88 
    +
    89  ! This is all that needs to be done for GDSWZD for station points.
    +
    90  nret = npts
    +
    91 
    +
    92  end subroutine gdswzd_station_points
    +
    93 
    + +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Interpolate gridded data to a series of station points.
    +
    subroutine init_grib1(self, g1_desc)
    Initializes an IP Station grid given a grib1_descriptor object.
    +
    subroutine gdswzd_station_points(self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
    Interpolate gridded data to a series of station points.
    +
    subroutine init_grib2(self, g2_desc)
    Initializes an IP Station grid given a grib2_descriptor object.
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    + +
    +
    + + + + diff --git a/ver-5.1.0/iplib__4_8h.html b/ver-5.1.0/iplib__4_8h.html new file mode 100644 index 00000000..47b03264 --- /dev/null +++ b/ver-5.1.0/iplib__4_8h.html @@ -0,0 +1,516 @@ + + + + + + + +NCEPLIBS-ip: iplib_4.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    iplib_4.h File Reference
    +
    +
    + +

    C interface to gdswzd() and gdswzd_grib1() functions for '4' library build. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Functions

    void gdswzd (int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
     gdswzd() interface for C for _4 build of library. More...
     
    void gdswzd_grib1 (int *kgds, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
     gdswzd_grib1() interface for C for the _4 build of the library. More...
     
    +

    Detailed Description

    +

    C interface to gdswzd() and gdswzd_grib1() functions for '4' library build.

    +
    Author
    Jovic
    +
    Date
    2016
    + +

    Definition in file iplib_4.h.

    +

    Function Documentation

    + +

    ◆ gdswzd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void gdswzd (int igdtnum,
    int * igdtmpl,
    int igdtlen,
    int iopt,
    int npts,
    float fill,
    float * xpts,
    float * ypts,
    float * rlon,
    float * rlat,
    int * nret,
    float * crot,
    float * srot,
    float * xlon,
    float * xlat,
    float * ylon,
    float * ylat,
    float * area 
    )
    +
    + +

    gdswzd() interface for C for _4 build of library.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    igdtnumgrid definition template number. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure.
      +
    • 00 equidistant cylindrical
    • +
    • 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 mercator cyclindrical
    • +
    • 20 polar stereographic azimuthal
    • +
    • 30 lambert conformal conical
    • +
    • 40 gaussian equidistant cyclindrical
    • +
    +
    igdtmpl(igdtlen) grid definition template array. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure for section three. all projections:
      +
    • 1 shape of earth, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30 equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42.
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72 mercator cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 tangent latitude, octets 48-51
    • +
    • 14 latitude of last point, octets 52-55
    • +
    • 15 longitude of last point, octets 56-59
    • +
    • 16 scanning mode flags, octet 60
    • +
    • 17 orientation of grid, octets 61-64
    • +
    • 18 longitudinal grid length, octets 65-68
    • +
    • 19 latitudinal grid length, octets 69-72 Lambert conformal conical:
    • +
    • 8 number of points along x-axis, octs 31-34
    • +
    • 9 number of points along y-axis, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution of component flag, octet 47
    • +
    • 13 latitude where grid lengths specified, octets 48-51
    • +
    • 14 longitude of meridian that is parallel to y-axis, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode, octet 65
    • +
    • 19 first tangent latitude from pole, octets 66-69
    • +
    • 20 second tangent latitude from pole, octets 70-73
    • +
    • 21 latitude of south pole of projection, octets 74-77
    • +
    • 22 longitude of south pole of projection, octets 78-81 gaussian cylindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 number of parallels between pole and equator, octets 68-71
    • +
    • 19 scanning mode, octet 72 polar stereographic azimuthal:
    • +
    • 8 number of points along x-axis, octets 31-34
    • +
    • 9 number of points along y-axis, octets 35-38
    • +
    • 10 latitude of first grid point, octets 39-42
    • +
    • 11 longitude of first grid point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 true latitude, octets 48-51
    • +
    • 14 orientation longitude, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode flags, octet 65 rotated equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72
    • +
    • 20 latitude of southern pole of projection, octets 73-76
    • +
    • 21 longitude of southern pole of projection, octets 77-80
    • +
    • 22 angle of rotation of projection, octs 81-84
    • +
    +
    igdtlennumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    nptsinteger maximum number of coordinates
    fillreal fill value to set invalid output data (must be impossible value; suggested value: -9999.)
    xptsreal (npts) grid x point coordinates if iopt>0
    yptsreal (npts) grid y point coordinates if iopt>0
    rlonreal (npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    rlatreal (npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    nretnumber of valid points computed (-1 if projection unrecognized)
    crot(npts) clockwise vector rotation cosines
    srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth, vgrid=srot*uearth+crot*vearth)
    xlon(npts) dx/dlon in 1/degrees
    xlat(npts) dx/dlat in 1/degrees
    ylon(npts) dy/dlon in 1/degrees
    ylat(npts) dy/dlat in 1/degrees
    area(npts) area weights in m**2 (Proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    Jovic
    +
    Date
    2016
    + +
    +
    + +

    ◆ gdswzd_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void gdswzd_grib1 (int * kgds,
    int iopt,
    int npts,
    float fill,
    float * xpts,
    float * ypts,
    float * rlon,
    float * rlat,
    int * nret,
    float * crot,
    float * srot,
    float * xlon,
    float * xlat,
    float * ylon,
    float * ylat,
    float * area 
    )
    +
    + +

    gdswzd_grib1() interface for C for the _4 build of the library.

    +

    This is a C prototype to call the Fortran module subroutine gdswzd_c_grib1() for the _4 version of the library.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    kgds(200) gds parameters as decoded by w3fi63.
    ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    nptsmaximum number of coordinates
    fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    xpts(npts) grid x point coordinates if iopt>0
    ypts(npts) grid y point coordinates if iopt>0
    rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    nretnumber of valid points computed (-1 if projection unrecognized)
    crot(npts) clockwise vector rotation cosines
    srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    xlon(npts) dx/dlon in 1/degrees
    xlat(npts) dx/dlat in 1/degrees
    ylon(npts) dy/dlon in 1/degrees
    ylat(npts) dy/dlat in 1/degrees
    area(npts) area weights in m**2 (proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    Jovic
    +
    Date
    2016
    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/iplib__4_8h.js b/ver-5.1.0/iplib__4_8h.js new file mode 100644 index 00000000..a2de2916 --- /dev/null +++ b/ver-5.1.0/iplib__4_8h.js @@ -0,0 +1,5 @@ +var iplib__4_8h = +[ + [ "gdswzd", "iplib__4_8h.html#a44daefd49c37e9bc59933d98e56efa53", null ], + [ "gdswzd_grib1", "iplib__4_8h.html#a7f2f96041c0d42926e14cb0f40f336e1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/iplib__4_8h_source.html b/ver-5.1.0/iplib__4_8h_source.html new file mode 100644 index 00000000..18ff4d6b --- /dev/null +++ b/ver-5.1.0/iplib__4_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +NCEPLIBS-ip: iplib_4.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    iplib_4.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    7 #ifndef IPLIB
    +
    8 #define IPLIB
    +
    9 
    +
    146 void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt,
    +
    147  int npts, float fill, float *xpts, float *ypts,
    +
    148  float *rlon, float *rlat, int *nret,
    +
    149  float *crot, float *srot, float *xlon, float *xlat,
    +
    150  float *ylon, float *ylat, float *area);
    +
    151 
    +
    187 void gdswzd_grib1(int *kgds, int iopt, int npts, float fill,
    +
    188  float *xpts, float *ypts, float *rlon, float *rlat,
    +
    189  int *nret, float *crot, float *srot,
    +
    190  float *xlon, float *xlat, float *ylon, float *ylat, float *area);
    +
    191 
    +
    192 #endif
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    void gdswzd_grib1(int *kgds, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd_grib1() interface for C for the _4 build of the library.
    +
    +
    + + + + diff --git a/ver-5.1.0/iplib__8_8h.html b/ver-5.1.0/iplib__8_8h.html new file mode 100644 index 00000000..19eb1340 --- /dev/null +++ b/ver-5.1.0/iplib__8_8h.html @@ -0,0 +1,516 @@ + + + + + + + +NCEPLIBS-ip: iplib_8.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    iplib_8.h File Reference
    +
    +
    + +

    C interface to gdswzd() and gdswzd_grib1() functions for '8' library build. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Functions

    void gdswzd (long igdtnum, long *igdtmpl, long igdtlen, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
     gdswzd() interface for C for _8 build of library. More...
     
    void gdswzd_grib1 (long *kgds, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
     gdswzd_grib1() interface for C for _8 build of the library. More...
     
    +

    Detailed Description

    +

    C interface to gdswzd() and gdswzd_grib1() functions for '8' library build.

    +
    Author
    Jovic
    +
    Date
    2016
    + +

    Definition in file iplib_8.h.

    +

    Function Documentation

    + +

    ◆ gdswzd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void gdswzd (long igdtnum,
    long * igdtmpl,
    long igdtlen,
    long iopt,
    long npts,
    double fill,
    double * xpts,
    double * ypts,
    double * rlon,
    double * rlat,
    long * nret,
    double * crot,
    double * srot,
    double * xlon,
    double * xlat,
    double * ylon,
    double * ylat,
    double * area 
    )
    +
    + +

    gdswzd() interface for C for _8 build of library.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    igdtnumgrid definition template number. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure.
      +
    • 00 equidistant cylindrical
    • +
    • 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 mercator cyclindrical
    • +
    • 20 polar stereographic azimuthal
    • +
    • 30 lambert conformal conical
    • +
    • 40 gaussian equidistant cyclindrical
    • +
    +
    igdtmpl(igdtlen) grid definition template array. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure for section three. all projections:
      +
    • 1 shape of earth, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30 equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42.
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72 mercator cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 tangent latitude, octets 48-51
    • +
    • 14 latitude of last point, octets 52-55
    • +
    • 15 longitude of last point, octets 56-59
    • +
    • 16 scanning mode flags, octet 60
    • +
    • 17 orientation of grid, octets 61-64
    • +
    • 18 longitudinal grid length, octets 65-68
    • +
    • 19 latitudinal grid length, octets 69-72 Lambert conformal conical:
    • +
    • 8 number of points along x-axis, octs 31-34
    • +
    • 9 number of points along y-axis, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution of component flag, octet 47
    • +
    • 13 latitude where grid lengths specified, octets 48-51
    • +
    • 14 longitude of meridian that is parallel to y-axis, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode, octet 65
    • +
    • 19 first tangent latitude from pole, octets 66-69
    • +
    • 20 second tangent latitude from pole, octets 70-73
    • +
    • 21 latitude of south pole of projection, octets 74-77
    • +
    • 22 longitude of south pole of projection, octets 78-81 gaussian cylindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 number of parallels between pole and equator, octets 68-71
    • +
    • 19 scanning mode, octet 72 polar stereographic azimuthal:
    • +
    • 8 number of points along x-axis, octets 31-34
    • +
    • 9 number of points along y-axis, octets 35-38
    • +
    • 10 latitude of first grid point, octets 39-42
    • +
    • 11 longitude of first grid point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 true latitude, octets 48-51
    • +
    • 14 orientation longitude, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode flags, octet 65 rotated equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72
    • +
    • 20 latitude of southern pole of projection, octets 73-76
    • +
    • 21 longitude of southern pole of projection, octets 77-80
    • +
    • 22 angle of rotation of projection, octs 81-84
    • +
    +
    igdtlennumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    nptsinteger maximum number of coordinates
    fillreal fill value to set invalid output data (must be impossible value; suggested value: -9999.)
    xptsreal (npts) grid x point coordinates if iopt>0
    yptsreal (npts) grid y point coordinates if iopt>0
    rlonreal (npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    rlatreal (npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    nretnumber of valid points computed (-1 if projection unrecognized)
    crot(npts) clockwise vector rotation cosines
    srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth, vgrid=srot*uearth+crot*vearth)
    xlon(npts) dx/dlon in 1/degrees
    xlat(npts) dx/dlat in 1/degrees
    ylon(npts) dy/dlon in 1/degrees
    ylat(npts) dy/dlat in 1/degrees
    area(npts) area weights in m**2 (Proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    Jovic
    +
    Date
    2016
    + +
    +
    + +

    ◆ gdswzd_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void gdswzd_grib1 (long * kgds,
    long iopt,
    long npts,
    double fill,
    double * xpts,
    double * ypts,
    double * rlon,
    double * rlat,
    long * nret,
    double * crot,
    double * srot,
    double * xlon,
    double * xlat,
    double * ylon,
    double * ylat,
    double * area 
    )
    +
    + +

    gdswzd_grib1() interface for C for _8 build of the library.

    +

    This is a C prototype to call the Fortran module subroutine gdswzd_c_grib1() for the _4 version of the library.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    kgds(200) gds parameters as decoded by w3fi63.
    ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    nptsmaximum number of coordinates
    fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    xpts(npts) grid x point coordinates if iopt>0
    ypts(npts) grid y point coordinates if iopt>0
    rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    nretnumber of valid points computed (-1 if projection unrecognized)
    crot(npts) clockwise vector rotation cosines
    srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    xlon(npts) dx/dlon in 1/degrees
    xlat(npts) dx/dlat in 1/degrees
    ylon(npts) dy/dlon in 1/degrees
    ylat(npts) dy/dlat in 1/degrees
    area(npts) area weights in m**2 (proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    Jovic
    +
    Date
    2016
    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/iplib__8_8h.js b/ver-5.1.0/iplib__8_8h.js new file mode 100644 index 00000000..8ec13f88 --- /dev/null +++ b/ver-5.1.0/iplib__8_8h.js @@ -0,0 +1,5 @@ +var iplib__8_8h = +[ + [ "gdswzd", "iplib__8_8h.html#af41ad9a4b34f78d182a68b3d72b9bdf4", null ], + [ "gdswzd_grib1", "iplib__8_8h.html#ab8e46b623c66911913f66d314c15cc93", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/iplib__8_8h_source.html b/ver-5.1.0/iplib__8_8h_source.html new file mode 100644 index 00000000..b1eae34a --- /dev/null +++ b/ver-5.1.0/iplib__8_8h_source.html @@ -0,0 +1,116 @@ + + + + + + + +NCEPLIBS-ip: iplib_8.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    iplib_8.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    7 #ifndef IPLIB
    +
    8 #define IPLIB
    +
    9 
    +
    146 void gdswzd(long igdtnum, long *igdtmpl, long igdtlen, long iopt,
    +
    147  long npts, double fill, double *xpts, double *ypts,
    +
    148  double *rlon, double *rlat, long *nret,
    +
    149  double *crot, double *srot, double *xlon, double *xlat,
    +
    150  double *ylon, double *ylat, double *area);
    +
    151 
    +
    187 void gdswzd_grib1(long *kgds, long iopt, long npts, double fill,
    +
    188  double *xpts, double *ypts, double *rlon, double *rlat,
    +
    189  long *nret, double *crot, double *srot,
    +
    190  double *xlon, double *xlat, double *ylon, double *ylat, double *area);
    +
    191 #endif
    +
    void gdswzd_grib1(long *kgds, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
    gdswzd_grib1() interface for C for _8 build of the library.
    +
    void gdswzd(long igdtnum, long *igdtmpl, long igdtlen, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
    gdswzd() interface for C for _8 build of library.
    +
    +
    + + + + diff --git a/ver-5.1.0/iplib__d_8h.html b/ver-5.1.0/iplib__d_8h.html new file mode 100644 index 00000000..492ec61c --- /dev/null +++ b/ver-5.1.0/iplib__d_8h.html @@ -0,0 +1,516 @@ + + + + + + + +NCEPLIBS-ip: iplib_d.h File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    iplib_d.h File Reference
    +
    +
    + +

    C interface to gdswzd() and gdswzd_grib1() functions for 'd' library build. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Functions

    void gdswzd (int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
     gdswzd() interface for C for _d build of library. More...
     
    void gdswzd_grib1 (int *kgds, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
     gdswzd_grib1() interface for C for _d build of the library. More...
     
    +

    Detailed Description

    +

    C interface to gdswzd() and gdswzd_grib1() functions for 'd' library build.

    +
    Author
    Jovic
    +
    Date
    2016
    + +

    Definition in file iplib_d.h.

    +

    Function Documentation

    + +

    ◆ gdswzd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void gdswzd (int igdtnum,
    int * igdtmpl,
    int igdtlen,
    int iopt,
    int npts,
    double fill,
    double * xpts,
    double * ypts,
    double * rlon,
    double * rlat,
    int * nret,
    double * crot,
    double * srot,
    double * xlon,
    double * xlat,
    double * ylon,
    double * ylat,
    double * area 
    )
    +
    + +

    gdswzd() interface for C for _d build of library.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    igdtnumgrid definition template number. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure.
      +
    • 00 equidistant cylindrical
    • +
    • 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 mercator cyclindrical
    • +
    • 20 polar stereographic azimuthal
    • +
    • 30 lambert conformal conical
    • +
    • 40 gaussian equidistant cyclindrical
    • +
    +
    igdtmpl(igdtlen) grid definition template array. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure for section three. all projections:
      +
    • 1 shape of earth, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30 equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42.
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72 mercator cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 tangent latitude, octets 48-51
    • +
    • 14 latitude of last point, octets 52-55
    • +
    • 15 longitude of last point, octets 56-59
    • +
    • 16 scanning mode flags, octet 60
    • +
    • 17 orientation of grid, octets 61-64
    • +
    • 18 longitudinal grid length, octets 65-68
    • +
    • 19 latitudinal grid length, octets 69-72 Lambert conformal conical:
    • +
    • 8 number of points along x-axis, octs 31-34
    • +
    • 9 number of points along y-axis, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution of component flag, octet 47
    • +
    • 13 latitude where grid lengths specified, octets 48-51
    • +
    • 14 longitude of meridian that is parallel to y-axis, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode, octet 65
    • +
    • 19 first tangent latitude from pole, octets 66-69
    • +
    • 20 second tangent latitude from pole, octets 70-73
    • +
    • 21 latitude of south pole of projection, octets 74-77
    • +
    • 22 longitude of south pole of projection, octets 78-81 gaussian cylindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 number of parallels between pole and equator, octets 68-71
    • +
    • 19 scanning mode, octet 72 polar stereographic azimuthal:
    • +
    • 8 number of points along x-axis, octets 31-34
    • +
    • 9 number of points along y-axis, octets 35-38
    • +
    • 10 latitude of first grid point, octets 39-42
    • +
    • 11 longitude of first grid point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 true latitude, octets 48-51
    • +
    • 14 orientation longitude, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode flags, octet 65 rotated equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72
    • +
    • 20 latitude of southern pole of projection, octets 73-76
    • +
    • 21 longitude of southern pole of projection, octets 77-80
    • +
    • 22 angle of rotation of projection, octs 81-84
    • +
    +
    igdtlennumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    nptsinteger maximum number of coordinates
    fillreal fill value to set invalid output data (must be impossible value; suggested value: -9999.)
    xptsreal (npts) grid x point coordinates if iopt>0
    yptsreal (npts) grid y point coordinates if iopt>0
    rlonreal (npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    rlatreal (npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    nretnumber of valid points computed (-1 if projection unrecognized)
    crot(npts) clockwise vector rotation cosines
    srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth, vgrid=srot*uearth+crot*vearth)
    xlon(npts) dx/dlon in 1/degrees
    xlat(npts) dx/dlat in 1/degrees
    ylon(npts) dy/dlon in 1/degrees
    ylat(npts) dy/dlat in 1/degrees
    area(npts) area weights in m**2 (Proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    Jovic
    +
    Date
    2016
    + +
    +
    + +

    ◆ gdswzd_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    void gdswzd_grib1 (int * kgds,
    int iopt,
    int npts,
    double fill,
    double * xpts,
    double * ypts,
    double * rlon,
    double * rlat,
    int * nret,
    double * crot,
    double * srot,
    double * xlon,
    double * xlat,
    double * ylon,
    double * ylat,
    double * area 
    )
    +
    + +

    gdswzd_grib1() interface for C for _d build of the library.

    +

    This is a C prototype to call the Fortran module subroutine gdswzd_c_grib1() for the _4 version of the library.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    kgds(200) gds parameters as decoded by w3fi63.
    ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    nptsmaximum number of coordinates
    fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    xpts(npts) grid x point coordinates if iopt>0
    ypts(npts) grid y point coordinates if iopt>0
    rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    nretnumber of valid points computed (-1 if projection unrecognized)
    crot(npts) clockwise vector rotation cosines
    srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    xlon(npts) dx/dlon in 1/degrees
    xlat(npts) dx/dlat in 1/degrees
    ylon(npts) dy/dlon in 1/degrees
    ylat(npts) dy/dlat in 1/degrees
    area(npts) area weights in m**2 (proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    Jovic
    +
    Date
    2016
    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/iplib__d_8h.js b/ver-5.1.0/iplib__d_8h.js new file mode 100644 index 00000000..3bc76200 --- /dev/null +++ b/ver-5.1.0/iplib__d_8h.js @@ -0,0 +1,5 @@ +var iplib__d_8h = +[ + [ "gdswzd", "iplib__d_8h.html#ac919f31612096fd6a7547a425ab3d38e", null ], + [ "gdswzd_grib1", "iplib__d_8h.html#ac33340cba2ac7b42dd9b9116fc28d691", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/iplib__d_8h_source.html b/ver-5.1.0/iplib__d_8h_source.html new file mode 100644 index 00000000..1f503f91 --- /dev/null +++ b/ver-5.1.0/iplib__d_8h_source.html @@ -0,0 +1,116 @@ + + + + + + + +NCEPLIBS-ip: iplib_d.h Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    iplib_d.h
    +
    +
    +Go to the documentation of this file.
    1 
    +
    7 #ifndef IPLIB
    +
    8 #define IPLIB
    +
    9 
    +
    146 void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt,
    +
    147  int npts, double fill, double *xpts, double *ypts,
    +
    148  double *rlon, double *rlat, int *nret,
    +
    149  double *crot, double *srot, double *xlon, double *xlat,
    +
    150  double *ylon, double *ylat, double *area);
    +
    151 
    +
    187 void gdswzd_grib1(int *kgds, int iopt, int npts, double fill,
    +
    188  double *xpts, double *ypts, double *rlon, double *rlat,
    +
    189  int *nret, double *crot, double *srot,
    +
    190  double *xlon, double *xlat, double *ylon, double *ylat, double *area);
    +
    191 #endif
    +
    void gdswzd_grib1(int *kgds, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
    gdswzd_grib1() interface for C for _d build of the library.
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area)
    gdswzd() interface for C for _d build of library.
    +
    +
    + + + + diff --git a/ver-5.1.0/ipolates_8F90.html b/ver-5.1.0/ipolates_8F90.html new file mode 100644 index 00000000..6eb0367c --- /dev/null +++ b/ver-5.1.0/ipolates_8F90.html @@ -0,0 +1,143 @@ + + + + + + + +NCEPLIBS-ip: ipolates.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipolates.F90 File Reference
    +
    +
    + +

    Top-level driver for scalar interpolation routine ipolates(). +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  ipolates_mod::ipolates
     
    + + + + +

    +Modules

    module  ipolates_mod
     Top-level driver for scalar interpolation interpolation routine ipolates().
     
    + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine, public ipolates_mod::ipolates_grib1 (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     This subprogram interpolates scalar field from any grid to any grid given a grib1 Grid Descriptor Section. More...
     
    subroutine, public ipolates_mod::ipolates_grib1_single_field (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     Special case of ipolates_grib1 when interpolating a single field. More...
     
    subroutine, public ipolates_mod::ipolates_grib2 (IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram interpolates scalar field from any grid to any grid given a grib2 descriptor. More...
     
    subroutine, public ipolates_mod::ipolates_grib2_single_field (IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Special case of ipolates_grib2 when interpolating a single field. More...
     
    subroutine ipolates_mod::ipolates_grid (ip, ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     Interpolates scalar fields between grids given ip_grid objects. More...
     
    +

    Detailed Description

    +

    Top-level driver for scalar interpolation routine ipolates().

    +
    Author
    Mark Iredell, Kyle Gerheiser
    + +

    Definition in file ipolates.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ipolates_8F90.js b/ver-5.1.0/ipolates_8F90.js new file mode 100644 index 00000000..7387fc3c --- /dev/null +++ b/ver-5.1.0/ipolates_8F90.js @@ -0,0 +1,9 @@ +var ipolates_8F90 = +[ + [ "ipolates", "interfaceipolates__mod_1_1ipolates.html", "interfaceipolates__mod_1_1ipolates" ], + [ "ipolates_grib1", "ipolates_8F90.html#acb5408cf5c3a0f50326edc183f9bd269", null ], + [ "ipolates_grib1_single_field", "ipolates_8F90.html#ae70a9ca9871bb33e038782b036b7b53d", null ], + [ "ipolates_grib2", "ipolates_8F90.html#a6b2ea6d5b04d2a68baad261e7a409fac", null ], + [ "ipolates_grib2_single_field", "ipolates_8F90.html#a49541b2af75b7c037a863a4785726856", null ], + [ "ipolates_grid", "ipolates_8F90.html#a2761e20fab898e7fd9963f3e0eb5d104", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ipolates_8F90_source.html b/ver-5.1.0/ipolates_8F90_source.html new file mode 100644 index 00000000..2338e98a --- /dev/null +++ b/ver-5.1.0/ipolates_8F90_source.html @@ -0,0 +1,398 @@ + + + + + + + +NCEPLIBS-ip: ipolates.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ipolates.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + + + + + +
    17  use ip_grid_mod
    +
    18  implicit none
    +
    19 
    +
    20  private
    + +
    22 
    +
    23  interface ipolates
    +
    24  module procedure ipolates_grib1
    +
    25  module procedure ipolates_grib1_single_field
    +
    26  module procedure ipolates_grib2
    +
    27  module procedure ipolates_grib2_single_field
    +
    28  end interface ipolates
    +
    29 
    +
    30 contains
    +
    31 
    +
    63  subroutine ipolates_grid(ip, ipopt, grid_in, grid_out, mi, mo, km,&
    +
    64  & ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
    +
    65  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    66  INTEGER, INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    67  INTEGER, INTENT(IN ) :: IBI(KM)
    +
    68  INTEGER, INTENT(INOUT) :: NO
    +
    69  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    70  !
    +
    71  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    72  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    73  !
    +
    74  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    75  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    76  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    77  !
    +
    78 
    +
    79  select case(ip)
    +
    80  case(bilinear_interp_id)
    +
    81  CALL interpolate_bilinear(ipopt,grid_in,grid_out,mi,mo,km,ibi&
    +
    82  &,li,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    83  case(bicubic_interp_id)
    +
    84  CALL interpolate_bicubic(ipopt,grid_in,grid_out,mi,mo,km,ibi&
    +
    85  &,li,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    86  case(neighbor_interp_id)
    +
    87  CALL interpolate_neighbor(ipopt,grid_in,grid_out,mi,mo,km,ibi&
    +
    88  &,li,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    89  case(budget_interp_id)
    +
    90  CALL interpolate_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li&
    +
    91  &,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    92  case(spectral_interp_id)
    +
    93  CALL interpolate_spectral(ipopt,grid_in,grid_out,mi,mo,km,ibi&
    +
    94  &,gi,no,rlat,rlon,ibo,lo,go,iret)
    + +
    96  CALL interpolate_neighbor_budget(ipopt,grid_in,grid_out,mi,mo&
    +
    97  &,km,ibi,li,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    98  case default
    +
    99  ! IF(KGDSO(1).GE.0) NO=0
    +
    100  ! DO K=1,KM
    +
    101  ! IBO(K)=1
    +
    102  ! DO N=1,NO
    +
    103  ! LO(N,K)=.FALSE.
    +
    104  ! GO(N,K)=0.
    +
    105  ! ENDDO
    +
    106  ! ENDDO
    +
    107  iret=1
    +
    108  print *, "Unrecognized interp option: ", ip
    +
    109  error stop
    +
    110  end select
    +
    111 
    +
    112  end subroutine ipolates_grid
    +
    113 
    +
    158  subroutine ipolates_grib1_single_field(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,gi, &
    +
    159  no,rlat,rlon,ibo,lo,go,iret) bind(c)
    +
    160  !
    +
    161  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    162 #if (LSIZE==8)
    +
    163  INTEGER(C_LONG), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    164  INTEGER(C_LONG), INTENT(IN ) :: IBI, KGDSI(200), KGDSO(200)
    +
    165  INTEGER(C_LONG), INTENT(INOUT) :: NO
    +
    166  INTEGER(C_LONG), INTENT( OUT) :: IRET, IBO
    +
    167 #else
    +
    168  INTEGER(C_INT), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    169  INTEGER(C_INT), INTENT(IN ) :: IBI, KGDSI(200), KGDSO(200)
    +
    170  INTEGER(C_INT), INTENT(INOUT) :: NO
    +
    171  INTEGER(C_INT), INTENT( OUT) :: IRET, IBO
    +
    172 #endif
    +
    173  !
    +
    174  LOGICAL(C_BOOL), INTENT(IN ) :: LI(MI)
    +
    175  LOGICAL(C_BOOL), INTENT( OUT) :: LO(MO)
    +
    176  !
    +
    177 #if (LSIZE==4)
    +
    178  REAL(C_FLOAT), INTENT(IN ) :: GI(MI)
    +
    179  REAL(C_FLOAT), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    180  REAL(C_FLOAT), INTENT( OUT) :: GO(MO)
    +
    181 #else
    +
    182  REAL(C_DOUBLE), INTENT(IN ) :: GI(MI)
    +
    183  REAL(C_DOUBLE), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    184  REAL(C_DOUBLE), INTENT( OUT) :: GO(MO)
    +
    185 #endif
    +
    186  !
    +
    187 
    +
    188  type(grib1_descriptor) :: desc_in, desc_out
    +
    189  class(ip_grid), allocatable :: grid_in, grid_out
    +
    190  integer :: ibo_array(1)
    +
    191 
    +
    192  desc_in = init_descriptor(kgdsi)
    +
    193  desc_out = init_descriptor(kgdso)
    +
    194 
    +
    195  call init_grid(grid_in, desc_in)
    +
    196  call init_grid(grid_out, desc_out)
    +
    197 
    +
    198  ! Can't pass expression (e.g. [ibo]) to intent(out) argument.
    +
    199  ! Initialize placeholder array of size 1 to make rank match.
    +
    200  ibo_array(1) = ibo
    +
    201 
    +
    202  call ipolates_grid(ip, ipopt, grid_in, grid_out, mi, mo, km, [ibi], li, gi, no, rlat, rlon, ibo_array, lo, go, iret)
    +
    203 
    +
    204  ibo = ibo_array(1)
    +
    205 
    +
    206  END SUBROUTINE ipolates_grib1_single_field
    +
    207 
    +
    293  subroutine ipolates_grib1(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,gi, &
    +
    294  no,rlat,rlon,ibo,lo,go,iret) bind(c)
    +
    295  !
    +
    296  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    297 #if (LSIZE==8)
    +
    298  INTEGER(C_LONG), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    299  INTEGER(C_LONG), INTENT(IN ) :: IBI(KM), KGDSI(200), KGDSO(200)
    +
    300  INTEGER(C_LONG), INTENT(INOUT) :: NO
    +
    301  INTEGER(C_LONG), INTENT( OUT) :: IRET, IBO(KM)
    +
    302 #else
    +
    303  INTEGER(C_INT), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    304  INTEGER(C_INT), INTENT(IN ) :: IBI(KM), KGDSI(200), KGDSO(200)
    +
    305  INTEGER(C_INT), INTENT(INOUT) :: NO
    +
    306  INTEGER(C_INT), INTENT( OUT) :: IRET, IBO(KM)
    +
    307 #endif
    +
    308  !
    +
    309  LOGICAL(C_BOOL), INTENT(IN ) :: LI(MI,KM)
    +
    310  LOGICAL(C_BOOL), INTENT( OUT) :: LO(MO,KM)
    +
    311  !
    +
    312 #if (LSIZE==4)
    +
    313  REAL(C_FLOAT), INTENT(IN ) :: GI(MI,KM)
    +
    314  REAL(C_FLOAT), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    315  REAL(C_FLOAT), INTENT( OUT) :: GO(MO,KM)
    +
    316 #else
    +
    317  REAL(C_DOUBLE), INTENT(IN ) :: GI(MI,KM)
    +
    318  REAL(C_DOUBLE), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    319  REAL(C_DOUBLE), INTENT( OUT) :: GO(MO,KM)
    +
    320 #endif
    +
    321  !
    +
    322 
    +
    323  type(grib1_descriptor) :: desc_in, desc_out
    +
    324  class(ip_grid), allocatable :: grid_in, grid_out
    +
    325 
    +
    326  desc_in = init_descriptor(kgdsi)
    +
    327  desc_out = init_descriptor(kgdso)
    +
    328 
    +
    329  call init_grid(grid_in, desc_in)
    +
    330  call init_grid(grid_out, desc_out)
    +
    331 
    +
    332  call ipolates_grid(ip, ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
    +
    333 
    +
    334  END SUBROUTINE ipolates_grib1
    +
    335 
    +
    587  SUBROUTINE ipolates_grib2(IP,IPOPT,IGDTNUMI,IGDTMPLI,IGDTLENI, &
    +
    588  IGDTNUMO,IGDTMPLO,IGDTLENO, &
    +
    589  MI,MO,KM,IBI,LI,GI, &
    +
    590  NO,RLAT,RLON,IBO,LO,GO,IRET) bind(C)
    +
    591  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    592 #if (LSIZE==8)
    +
    593  INTEGER(C_LONG), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    594  INTEGER(C_LONG), INTENT(IN ) :: IBI(KM)
    +
    595  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    596  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    597  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    598  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    599  INTEGER(C_LONG), INTENT( OUT) :: NO
    +
    600  INTEGER(C_LONG), INTENT( OUT) :: IRET, IBO(KM)
    +
    601 #else
    +
    602  INTEGER(C_INT), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    603  INTEGER(C_INT), INTENT(IN ) :: IBI(KM)
    +
    604  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    605  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    606  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    607  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    608  INTEGER(C_INT), INTENT( OUT) :: NO
    +
    609  INTEGER(C_INT), INTENT( OUT) :: IRET, IBO(KM)
    +
    610 #endif
    +
    611  !
    +
    612  LOGICAL(C_BOOL), INTENT(IN ) :: LI(MI,KM)
    +
    613  LOGICAL(C_BOOL), INTENT( OUT) :: LO(MO,KM)
    +
    614  !
    +
    615 #if (LSIZE==4)
    +
    616  REAL(C_FLOAT), INTENT(IN ) :: GI(MI,KM)
    +
    617  REAL(C_FLOAT), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    618  REAL(C_FLOAT), INTENT( OUT) :: GO(MO,KM)
    +
    619 #else
    +
    620  REAL(C_DOUBLE), INTENT(IN ) :: GI(MI,KM)
    +
    621  REAL(C_DOUBLE), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    622  REAL(C_DOUBLE), INTENT( OUT) :: GO(MO,KM)
    +
    623 #endif
    +
    624 
    +
    625  type(grib2_descriptor) :: desc_in, desc_out
    +
    626  class(ip_grid), allocatable :: grid_in, grid_out
    +
    627 
    +
    628  desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
    +
    629  desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
    +
    630 
    +
    631  call init_grid(grid_in, desc_in)
    +
    632  call init_grid(grid_out, desc_out)
    +
    633 
    +
    634  CALL ipolates_grid(ip,ipopt,grid_in,grid_out,mi,mo,km,ibi,li,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    635 
    +
    636  END SUBROUTINE ipolates_grib2
    +
    637 
    +
    808  SUBROUTINE ipolates_grib2_single_field(IP,IPOPT,IGDTNUMI,IGDTMPLI,IGDTLENI, &
    +
    809  IGDTNUMO,IGDTMPLO,IGDTLENO, &
    +
    810  MI,MO,KM,IBI,LI,GI, &
    +
    811  NO,RLAT,RLON,IBO,LO,GO,IRET) bind(C)
    +
    812  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    813 #if (LSIZE==8)
    +
    814  INTEGER(C_LONG), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    815  INTEGER(C_LONG), INTENT(IN ) :: IBI
    +
    816  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    817  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    818  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    819  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    820  INTEGER(C_LONG), INTENT( OUT) :: NO
    +
    821  INTEGER(C_LONG), INTENT( OUT) :: IRET, IBO
    +
    822 #else
    +
    823  INTEGER(C_INT), INTENT(IN ) :: IP, IPOPT(20), KM, MI, MO
    +
    824  INTEGER(C_INT), INTENT(IN ) :: IBI
    +
    825  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    826  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    827  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    828  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    829  INTEGER(C_INT), INTENT( OUT) :: NO
    +
    830  INTEGER(C_INT), INTENT( OUT) :: IRET, IBO
    +
    831 #endif
    +
    832  !
    +
    833  LOGICAL(C_BOOL), INTENT(IN ) :: LI(MI)
    +
    834  LOGICAL(C_BOOL), INTENT( OUT) :: LO(MO)
    +
    835  !
    +
    836 #if (LSIZE==4)
    +
    837  REAL(C_FLOAT), INTENT(IN ) :: GI(MI)
    +
    838  REAL(C_FLOAT), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    839  REAL(C_FLOAT), INTENT( OUT) :: GO(MO)
    +
    840 #else
    +
    841  REAL(C_DOUBLE), INTENT(IN ) :: GI(MI)
    +
    842  REAL(C_DOUBLE), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    843  REAL(C_DOUBLE), INTENT( OUT) :: GO(MO)
    +
    844 #endif
    +
    845 
    +
    846  type(grib2_descriptor) :: desc_in, desc_out
    +
    847  class(ip_grid), allocatable :: grid_in, grid_out
    +
    848  integer :: ibo_array(1)
    +
    849 
    +
    850  desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
    +
    851  desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
    +
    852 
    +
    853  call init_grid(grid_in, desc_in)
    +
    854  call init_grid(grid_out, desc_out)
    +
    855 
    +
    856  ! Can't pass expression (e.g. [ibo]) to intent(out) argument.
    +
    857  ! Initialize placeholder array of size 1 to make rank match.
    +
    858  ibo_array(1) = ibo
    +
    859 
    +
    860  call ipolates_grid(ip,ipopt,grid_in,grid_out,mi,mo,km,[ibi],li,gi,no,rlat,rlon,ibo_array,lo,go,iret)
    +
    861 
    +
    862  ibo = ibo_array(1)
    +
    863 
    +
    864  END SUBROUTINE ipolates_grib2_single_field
    +
    865 
    +
    866 end module ipolates_mod
    +
    867 
    + + + +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Routines for creating an ip_grid given a Grib descriptor.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Top-level module to export interpolation routines and constants.
    +
    integer, parameter, public neighbor_interp_id
    +
    integer, parameter, public bilinear_interp_id
    +
    integer, parameter, public budget_interp_id
    +
    integer, parameter, public spectral_interp_id
    +
    integer, parameter, public bicubic_interp_id
    +
    integer, parameter, public neighbor_budget_interp_id
    +
    Top-level driver for scalar interpolation interpolation routine ipolates().
    Definition: ipolates.F90:12
    +
    subroutine ipolates_grid(ip, ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
    Interpolates scalar fields between grids given ip_grid objects.
    Definition: ipolates.F90:65
    +
    subroutine, public ipolates_grib2_single_field(IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    Special case of ipolates_grib2 when interpolating a single field.
    Definition: ipolates.F90:812
    +
    subroutine, public ipolates_grib2(IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    This subprogram interpolates scalar field from any grid to any grid given a grib2 descriptor.
    Definition: ipolates.F90:591
    +
    subroutine, public ipolates_grib1(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
    This subprogram interpolates scalar field from any grid to any grid given a grib1 Grid Descriptor Sec...
    Definition: ipolates.F90:295
    +
    subroutine, public ipolates_grib1_single_field(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
    Special case of ipolates_grib1 when interpolating a single field.
    Definition: ipolates.F90:160
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/ipolatev_8F90.html b/ver-5.1.0/ipolatev_8F90.html new file mode 100644 index 00000000..907e1784 --- /dev/null +++ b/ver-5.1.0/ipolatev_8F90.html @@ -0,0 +1,144 @@ + + + + + + + +NCEPLIBS-ip: ipolatev.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipolatev.F90 File Reference
    +
    +
    + +

    Top-level driver for vector interpolation routine ipolates. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  ipolatev_mod::ipolatev
     
    + + + + +

    +Modules

    module  ipolatev_mod
     Top-level driver for vector interpolation interpolation routine ipolatev().
     
    + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine, public ipolatev_mod::ipolatev_grib1 (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector field from any grid to any grid given a grib1 Grid Descriptor Section. More...
     
    subroutine, public ipolatev_mod::ipolatev_grib1_single_field (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     Special case of ipolatev_grib1 when interpolating a single field. More...
     
    subroutine, public ipolatev_mod::ipolatev_grib2 (ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor. More...
     
    subroutine, public ipolatev_mod::ipolatev_grib2_single_field (ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor. More...
     
    subroutine ipolatev_mod::ipolatev_grid (IP, IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolates vector fields between grids given ip_grid objects. More...
     
    +

    Detailed Description

    +

    Top-level driver for vector interpolation routine ipolates.

    +
    Author
    Mark Iredell, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition in file ipolatev.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/ipolatev_8F90.js b/ver-5.1.0/ipolatev_8F90.js new file mode 100644 index 00000000..ecf26618 --- /dev/null +++ b/ver-5.1.0/ipolatev_8F90.js @@ -0,0 +1,9 @@ +var ipolatev_8F90 = +[ + [ "ipolatev", "interfaceipolatev__mod_1_1ipolatev.html", "interfaceipolatev__mod_1_1ipolatev" ], + [ "ipolatev_grib1", "ipolatev_8F90.html#abddc4a9b00133b358443b118f1352d1f", null ], + [ "ipolatev_grib1_single_field", "ipolatev_8F90.html#ad535ffd159c46e770effd774aabede58", null ], + [ "ipolatev_grib2", "ipolatev_8F90.html#a00fed53dd867a802b3adbc1141e8d272", null ], + [ "ipolatev_grib2_single_field", "ipolatev_8F90.html#a71d7507e8f89e1229caaaacb37e0c9c7", null ], + [ "ipolatev_grid", "ipolatev_8F90.html#a8f3bfec7495e13b75b2035e8e1f081a1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ipolatev_8F90_source.html b/ver-5.1.0/ipolatev_8F90_source.html new file mode 100644 index 00000000..d0d61640 --- /dev/null +++ b/ver-5.1.0/ipolatev_8F90_source.html @@ -0,0 +1,451 @@ + + + + + + + +NCEPLIBS-ip: ipolatev.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ipolatev.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + + + + +
    14  use ip_grid_mod
    +
    15 
    +
    16  implicit none
    +
    17 
    +
    18  private
    + +
    20 
    +
    21  interface ipolatev
    +
    22  module procedure ipolatev_grib1
    +
    23  module procedure ipolatev_grib1_single_field
    +
    24  module procedure ipolatev_grib2
    +
    25  module procedure ipolatev_grib2_single_field
    +
    26  end interface ipolatev
    +
    27 
    +
    28 contains
    +
    29 
    +
    67  SUBROUTINE ipolatev_grid(IP,IPOPT,grid_in,grid_out, &
    +
    68  MI,MO,KM,IBI,LI,UI,VI, &
    +
    69  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    70  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    71  INTEGER, INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
    +
    72  INTEGER, INTENT(IN ) :: KM, MI, MO
    +
    73  INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
    +
    74  !
    +
    75  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    76  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    77  !
    +
    78  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    79  REAL, INTENT(INOUT) :: CROT(MO),SROT(MO)
    +
    80  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    81  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    82 
    +
    83  select case(ip)
    +
    84  case(bilinear_interp_id)
    +
    85  CALL interpolate_bilinear(ipopt,grid_in,grid_out, &
    +
    86  mi,mo,km,ibi,li,ui,vi,&
    +
    87  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    88  case(bicubic_interp_id)
    +
    89  CALL interpolate_bicubic(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
    +
    90  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    91  case(neighbor_interp_id)
    +
    92  CALL interpolate_neighbor(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
    +
    93  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    94  case(budget_interp_id)
    +
    95  CALL interpolate_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
    +
    96  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    97  case(spectral_interp_id)
    +
    98  CALL interpolate_spectral(ipopt,grid_in,grid_out, &
    +
    99  mi,mo,km,ibi,ui,vi,&
    +
    100  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    + +
    102  CALL interpolate_neighbor_budget(ipopt,grid_in,grid_out,mi,mo,km,ibi,li,ui,vi,&
    +
    103  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    104  case default
    +
    105  print *, "unrecognized interpolation option: ", ip
    +
    106  error stop
    +
    107  ! IF(IGDTNUMO.GE.0) NO=0
    +
    108  ! DO K=1,KM
    +
    109  ! IBO(K)=1
    +
    110  ! DO N=1,NO
    +
    111  ! LO(N,K)=.FALSE.
    +
    112  ! UO(N,K)=0.
    +
    113  ! VO(N,K)=0.
    +
    114  ! ENDDO
    +
    115  ! ENDDO
    +
    116  ! IRET=1
    +
    117  end select
    +
    118 
    +
    119  end subroutine ipolatev_grid
    +
    120 
    +
    382  subroutine ipolatev_grib2(ip,ipopt,igdtnumi,igdtmpli,igdtleni, &
    +
    383  igdtnumo,igdtmplo,igdtleno, &
    +
    384  mi,mo,km,ibi,li,ui,vi, &
    +
    385  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret) bind(c)
    +
    386  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    387 #if (LSIZE==8)
    +
    388  INTEGER(C_LONG), INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
    +
    389  INTEGER(C_LONG), INTENT(IN ) :: KM, MI, MO
    +
    390  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    391  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    392  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    393  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    394  INTEGER(C_LONG), INTENT( OUT) :: IBO(KM), IRET, NO
    +
    395 #else
    +
    396  INTEGER(C_INT), INTENT(IN ) :: IP, IPOPT(20), IBI(KM)
    +
    397  INTEGER(C_INT), INTENT(IN ) :: KM, MI, MO
    +
    398  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    399  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    400  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    401  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    402  INTEGER(C_INT), INTENT( OUT) :: IBO(KM), IRET, NO
    +
    403 #endif
    +
    404  !
    +
    405  LOGICAL(C_BOOL), INTENT(IN ) :: LI(MI,KM)
    +
    406  LOGICAL(C_BOOL), INTENT( OUT) :: LO(MO,KM)
    +
    407  !
    +
    408 #if (LSIZE==4)
    +
    409  REAL(C_FLOAT), INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    410  REAL(C_FLOAT), INTENT(INOUT) :: CROT(MO),SROT(MO)
    +
    411  REAL(C_FLOAT), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    412  REAL(C_FLOAT), INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    413 #else
    +
    414  REAL(C_DOUBLE), INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    415  REAL(C_DOUBLE), INTENT(INOUT) :: CROT(MO),SROT(MO)
    +
    416  REAL(C_DOUBLE), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    417  REAL(C_DOUBLE), INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    418 #endif
    +
    419  !
    +
    420 
    +
    421  type(grib2_descriptor) :: desc_in, desc_out
    +
    422  class(ip_grid), allocatable :: grid_in, grid_out
    +
    423 
    +
    424  desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
    +
    425  desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
    +
    426 
    +
    427  call init_grid(grid_in, desc_in)
    +
    428  call init_grid(grid_out, desc_out)
    +
    429 
    +
    430  CALL ipolatev_grid(ip,ipopt,grid_in,grid_out, &
    +
    431  mi,mo,km,ibi,li,ui,vi,&
    +
    432  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    433 
    +
    434  end subroutine ipolatev_grib2
    +
    435 
    +
    565  subroutine ipolatev_grib1(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,ui,vi, &
    +
    566  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret) bind(c)
    +
    567  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    568  IMPLICIT NONE
    +
    569  !
    +
    570 #if (LSIZE==8)
    +
    571  INTEGER(C_LONG), INTENT(IN ):: IP, IPOPT(20), IBI(KM)
    +
    572  INTEGER(C_LONG), INTENT(IN ):: KM, MI, MO
    +
    573  INTEGER(C_LONG), INTENT(INOUT):: KGDSI(200), KGDSO(200)
    +
    574  INTEGER(C_LONG), INTENT( OUT):: IBO(KM), IRET, NO
    +
    575 #else
    +
    576  INTEGER(C_INT), INTENT(IN ):: IP, IPOPT(20), IBI(KM)
    +
    577  INTEGER(C_INT), INTENT(IN ):: KM, MI, MO
    +
    578  INTEGER(C_INT), INTENT(INOUT):: KGDSI(200), KGDSO(200)
    +
    579  INTEGER(C_INT), INTENT( OUT):: IBO(KM), IRET, NO
    +
    580 #endif
    +
    581  !
    +
    582  LOGICAL(C_BOOL), INTENT(IN ):: LI(MI,KM)
    +
    583  LOGICAL(C_BOOL), INTENT( OUT):: LO(MO,KM)
    +
    584  !
    +
    585 #if (LSIZE==4)
    +
    586  REAL(C_FLOAT), INTENT(IN ):: UI(MI,KM),VI(MI,KM)
    +
    587  REAL(C_FLOAT), INTENT(INOUT):: CROT(MO),SROT(MO)
    +
    588  REAL(C_FLOAT), INTENT(INOUT):: RLAT(MO),RLON(MO)
    +
    589  REAL(C_FLOAT), INTENT( OUT):: UO(MO,KM),VO(MO,KM)
    +
    590 #else
    +
    591  REAL(C_DOUBLE), INTENT(IN ):: UI(MI,KM),VI(MI,KM)
    +
    592  REAL(C_DOUBLE), INTENT(INOUT):: CROT(MO),SROT(MO)
    +
    593  REAL(C_DOUBLE), INTENT(INOUT):: RLAT(MO),RLON(MO)
    +
    594  REAL(C_DOUBLE), INTENT( OUT):: UO(MO,KM),VO(MO,KM)
    +
    595 #endif
    +
    596  !
    +
    597  INTEGER :: KGDSI11, KGDSO11
    +
    598 
    +
    599  type(grib1_descriptor) :: desc_in, desc_out
    +
    600  class(ip_grid), allocatable :: grid_in, grid_out
    +
    601 
    +
    602  IF(kgdsi(1).EQ.203) THEN
    +
    603  kgdsi11=kgdsi(11)
    +
    604  kgdsi(11)=ior(kgdsi(11),256)
    +
    605  ENDIF
    +
    606  IF(kgdso(1).EQ.203) THEN
    +
    607  kgdso11=kgdso(11)
    +
    608  kgdso(11)=ior(kgdso(11),256)
    +
    609  ENDIF
    +
    610 
    +
    611  desc_in = init_descriptor(kgdsi)
    +
    612  desc_out = init_descriptor(kgdso)
    +
    613 
    +
    614  call init_grid(grid_in, desc_in)
    +
    615  call init_grid(grid_out, desc_out)
    +
    616 
    +
    617  CALL ipolatev_grid(ip,ipopt,grid_in,grid_out, &
    +
    618  mi,mo,km,ibi,li,ui,vi,&
    +
    619  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    620 
    +
    621  IF(kgdsi(1).EQ.203) THEN
    +
    622  kgdsi(11)=kgdsi11
    +
    623  ENDIF
    +
    624  IF(kgdso(1).EQ.203) THEN
    +
    625  kgdso(11)=kgdso11
    +
    626  ENDIF
    +
    627 
    +
    628  END SUBROUTINE ipolatev_grib1
    +
    629 
    +
    680  subroutine ipolatev_grib1_single_field(ip,ipopt,kgdsi,kgdso,mi,mo,km,ibi,li,ui,vi, &
    +
    681  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret) bind(c)
    +
    682  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    683  IMPLICIT NONE
    +
    684  !
    +
    685 #if (LSIZE==8)
    +
    686  INTEGER(C_LONG), INTENT(IN ):: IP, IPOPT(20), IBI
    +
    687  INTEGER(C_LONG), INTENT(IN ):: KM, MI, MO
    +
    688  INTEGER(C_LONG), INTENT(INOUT):: KGDSI(200), KGDSO(200)
    +
    689  INTEGER(C_LONG), INTENT( OUT):: IBO, IRET, NO
    +
    690 #else
    +
    691  INTEGER(C_INT), INTENT(IN ):: IP, IPOPT(20), IBI
    +
    692  INTEGER(C_INT), INTENT(IN ):: KM, MI, MO
    +
    693  INTEGER(C_INT), INTENT(INOUT):: KGDSI(200), KGDSO(200)
    +
    694  INTEGER(C_INT), INTENT( OUT):: IBO, IRET, NO
    +
    695 #endif
    +
    696  !
    +
    697  LOGICAL(C_BOOL), INTENT(IN ):: LI(MI)
    +
    698  LOGICAL(C_BOOL), INTENT( OUT):: LO(MO)
    +
    699  !
    +
    700 #if (LSIZE==4)
    +
    701  REAL(C_FLOAT), INTENT(IN ):: UI(MI),VI(MI)
    +
    702  REAL(C_FLOAT), INTENT(INOUT):: CROT(MO),SROT(MO)
    +
    703  REAL(C_FLOAT), INTENT(INOUT):: RLAT(MO),RLON(MO)
    +
    704  REAL(C_FLOAT), INTENT( OUT):: UO(MO),VO(MO)
    +
    705 #else
    +
    706  REAL(C_DOUBLE), INTENT(IN ):: UI(MI),VI(MI)
    +
    707  REAL(C_DOUBLE), INTENT(INOUT):: CROT(MO),SROT(MO)
    +
    708  REAL(C_DOUBLE), INTENT(INOUT):: RLAT(MO),RLON(MO)
    +
    709  REAL(C_DOUBLE), INTENT( OUT):: UO(MO),VO(MO)
    +
    710 #endif
    +
    711  !
    +
    712  INTEGER :: KGDSI11, KGDSO11
    +
    713 
    +
    714  type(grib1_descriptor) :: desc_in, desc_out
    +
    715  class(ip_grid), allocatable :: grid_in, grid_out
    +
    716  integer :: ibo_array(1)
    +
    717 
    +
    718  ! Can't pass expression (e.g. [ibo]) to intent(out) argument.
    +
    719  ! Initialize placeholder array of size 1 to make rank match.
    +
    720  ibo_array(1) = ibo
    +
    721 
    +
    722  IF(kgdsi(1).EQ.203) THEN
    +
    723  kgdsi11=kgdsi(11)
    +
    724  kgdsi(11)=ior(kgdsi(11),256)
    +
    725  ENDIF
    +
    726  IF(kgdso(1).EQ.203) THEN
    +
    727  kgdso11=kgdso(11)
    +
    728  kgdso(11)=ior(kgdso(11),256)
    +
    729  ENDIF
    +
    730 
    +
    731  desc_in = init_descriptor(kgdsi)
    +
    732  desc_out = init_descriptor(kgdso)
    +
    733 
    +
    734  call init_grid(grid_in, desc_in)
    +
    735  call init_grid(grid_out, desc_out)
    +
    736 
    +
    737  CALL ipolatev_grid(ip,ipopt,grid_in,grid_out, &
    +
    738  mi,mo,km,[ibi],li,ui,vi,&
    +
    739  no,rlat,rlon,crot,srot,ibo_array,lo,uo,vo,iret)
    +
    740 
    +
    741  ibo = ibo_array(1)
    +
    742 
    +
    743  IF(kgdsi(1).EQ.203) THEN
    +
    744  kgdsi(11)=kgdsi11
    +
    745  ENDIF
    +
    746  IF(kgdso(1).EQ.203) THEN
    +
    747  kgdso(11)=kgdso11
    +
    748  ENDIF
    +
    749 
    +
    750  END SUBROUTINE ipolatev_grib1_single_field
    +
    751 
    +
    832  subroutine ipolatev_grib2_single_field(ip,ipopt,igdtnumi,igdtmpli,igdtleni, &
    +
    833  igdtnumo,igdtmplo,igdtleno, &
    +
    834  mi,mo,km,ibi,li,ui,vi, &
    +
    835  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret) bind(c)
    +
    836  USE iso_c_binding, ONLY: c_int, c_float, c_double, c_bool, c_long
    +
    837 #if (LSIZE==8)
    +
    838  INTEGER(C_LONG), INTENT(IN ) :: IP, IPOPT(20), IBI
    +
    839  INTEGER(C_LONG), INTENT(IN ) :: KM, MI, MO
    +
    840  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    841  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    842  INTEGER(C_LONG), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    843  INTEGER(C_LONG), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    844  INTEGER(C_LONG), INTENT( OUT) :: IBO, IRET, NO
    +
    845 #else
    +
    846  INTEGER(C_INT), INTENT(IN ) :: IP, IPOPT(20), IBI
    +
    847  INTEGER(C_INT), INTENT(IN ) :: KM, MI, MO
    +
    848  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    849  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    850  INTEGER(C_INT), INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    851  INTEGER(C_INT), INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    852  INTEGER(C_INT), INTENT( OUT) :: IBO, IRET, NO
    +
    853 #endif
    +
    854  !
    +
    855  LOGICAL(C_BOOL), INTENT(IN ) :: LI(MI)
    +
    856  LOGICAL(C_BOOL), INTENT( OUT) :: LO(MO)
    +
    857  !
    +
    858 #if (LSIZE==4)
    +
    859  REAL(C_FLOAT), INTENT(IN ) :: UI(MI),VI(MI)
    +
    860  REAL(C_FLOAT), INTENT(INOUT) :: CROT(MO),SROT(MO)
    +
    861  REAL(C_FLOAT), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    862  REAL(C_FLOAT), INTENT( OUT) :: UO(MO),VO(MO)
    +
    863 #else
    +
    864  REAL(C_DOUBLE), INTENT(IN ) :: UI(MI),VI(MI)
    +
    865  REAL(C_DOUBLE), INTENT(INOUT) :: CROT(MO),SROT(MO)
    +
    866  REAL(C_DOUBLE), INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    867  REAL(C_DOUBLE), INTENT( OUT) :: UO(MO),VO(MO)
    +
    868 #endif
    +
    869  !
    +
    870 
    +
    871  type(grib2_descriptor) :: desc_in, desc_out
    +
    872  class(ip_grid), allocatable :: grid_in, grid_out
    +
    873  integer :: ibo_array(1)
    +
    874 
    +
    875  ! Can't pass expression (e.g. [ibo]) to intent(out) argument.
    +
    876  ! Initialize placeholder array of size 1 to make rank match.
    +
    877  ibo_array(1) = ibo
    +
    878 
    +
    879  desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
    +
    880  desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
    +
    881 
    +
    882  call init_grid(grid_in, desc_in)
    +
    883  call init_grid(grid_out, desc_out)
    +
    884 
    +
    885  CALL ipolatev_grid(ip,ipopt,grid_in,grid_out, &
    +
    886  mi,mo,km,[ibi],li,ui,vi,&
    +
    887  no,rlat,rlon,crot,srot,ibo_array,lo,uo,vo,iret)
    +
    888 
    +
    889  ibo = ibo_array(1)
    +
    890 
    +
    891  end subroutine ipolatev_grib2_single_field
    +
    892 
    +
    893 end module ipolatev_mod
    +
    894 
    + + + +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Routines for creating an ip_grid given a Grib descriptor.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Top-level module to export interpolation routines and constants.
    +
    integer, parameter, public neighbor_interp_id
    +
    integer, parameter, public bilinear_interp_id
    +
    integer, parameter, public budget_interp_id
    +
    integer, parameter, public spectral_interp_id
    +
    integer, parameter, public bicubic_interp_id
    +
    integer, parameter, public neighbor_budget_interp_id
    +
    Top-level driver for vector interpolation interpolation routine ipolatev().
    Definition: ipolatev.F90:10
    +
    subroutine, public ipolatev_grib2(ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
    This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.
    Definition: ipolatev.F90:386
    +
    subroutine, public ipolatev_grib2_single_field(ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
    This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.
    Definition: ipolatev.F90:836
    +
    subroutine ipolatev_grid(IP, IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    Interpolates vector fields between grids given ip_grid objects.
    Definition: ipolatev.F90:70
    +
    subroutine, public ipolatev_grib1(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
    This subprogram interpolates vector field from any grid to any grid given a grib1 Grid Descriptor Sec...
    Definition: ipolatev.F90:567
    +
    subroutine, public ipolatev_grib1_single_field(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
    Special case of ipolatev_grib1 when interpolating a single field.
    Definition: ipolatev.F90:682
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxetas_8F90.html b/ver-5.1.0/ipxetas_8F90.html new file mode 100644 index 00000000..23e41785 --- /dev/null +++ b/ver-5.1.0/ipxetas_8F90.html @@ -0,0 +1,290 @@ + + + + + + + +NCEPLIBS-ip: ipxetas.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipxetas.F90 File Reference
    +
    +
    + +

    Expand or contract eta grids using linear interpolation. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine ipxetas (IDIR, IGDTNUMI, IGDTLEN, IGDTMPLI, NPTS_INPUT, BITMAP_INPUT, DATA_INPUT, IGDTNUMO, IGDTMPLO, NPTS_OUTPUT, BITMAP_OUTPUT, DATA_OUTPUT, IRET)
     Expand or contract eta grids using linear interpolation. More...
     
    +

    Detailed Description

    +

    Expand or contract eta grids using linear interpolation.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition in file ipxetas.F90.

    +

    Function/Subroutine Documentation

    + +

    ◆ ipxetas()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipxetas (integer, intent(in) IDIR,
    integer, intent(in) IGDTNUMI,
    integer, intent(in) IGDTLEN,
    integer, dimension(igdtlen), intent(in) IGDTMPLI,
    integer, intent(in) NPTS_INPUT,
    logical(kind=1), dimension(npts_input), intent(in) BITMAP_INPUT,
    real, dimension(npts_input), intent(in) DATA_INPUT,
    integer, intent(out) IGDTNUMO,
    integer, dimension(igdtlen), intent(out) IGDTMPLO,
    integer, intent(in) NPTS_OUTPUT,
    logical(kind=1), dimension(npts_output), intent(out) BITMAP_OUTPUT,
    real, dimension(npts_output), intent(out) DATA_OUTPUT,
    integer, intent(out) IRET 
    )
    +
    + +

    Expand or contract eta grids using linear interpolation.

    +

    This subprogram transforms between the staggered eta grids as used in the eta model and for native grid transmission and their full expansion as used for general interpolation and graphics. The eta grids are rotated latitude-longitude grids staggered as defined by the arakawa e-grid, that is with mass data points alternating with wind data points.

    +

    This is similar to:

      +
    • ipxwafs2() which uses linear interpolation and accounts for
    • +
    • bitmapped data.
    • +
    • ipxwafs2() which uses neighbor interpolation and accounts for
    • +
    • bitmapped data.
    • +
    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    2015-07-14 Gayno Make grib 2 compliant. Replace 4-pt interpolation with call to ipolates.
    2022-11-09 Engle Made ibi and ibo scalars.
    +
    Parameters
    + + + + + + + + + + + + + + +
    [in]idirinteger transform option.
      +
    • 0 to expand staggered fields to full fields
    • +
    • -1 to contract full mass fields to staggered fields
    • +
    • -2 to contract full wind fields to staggered fields
    • +
    +
    [in]igdtnumiinteger grid definition template number - input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. Must be = 1 (for a rotated lat/lon grid.)
    [in]igdtleninteger number of elements of the grid definition template array - same for input and output grids (=22) which are both rotated lat/lon grids. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtmpliinteger (igdtlen) grid definition template array - input grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info):
      +
    • 1 shape of earth, octet 15
        +
      • 2 scale factor of spherical earth radius, octet 16
      • +
      • 3 scaled value of radius of spherical earth, octets 17-20
      • +
      • 4 scale factor of major axis of elliptical earth, octet 21
      • +
      • 5 scaled value of major axis of elliptical earth, octets 22-25
      • +
      • 6 scale factor of minor axis of elliptical earth, octet 26
      • +
      • 7 scaled value of minor axis of elliptical earth, octets 27-30
      • +
      • 8 number of points along a parallel, octs 31-34
      • +
      • 9 number of points along a meridian, octs 35-38
      • +
      • 10 basic angle of initial production domain, octets 39-42
      • +
      • 11 subdivisions of basic angle, octets 43-46
      • +
      • 12 latitude of first grid point, octets 47-50
      • +
      • 13 longitude of first grid point, octets 51-54
      • +
      • 14 resolution and component flags, octet 55
      • +
      • 15 latitude of last grid point, octets 56-59
      • +
      • 16 longitude of last grid point, octets 60-63
      • +
      • 17 i-direction increment, octets 64-67
      • +
      • 18 j-direction increment, octets 68-71
      • +
      • 19 scanning mode, octet 72
      • +
      • 20 latitude of southern pole of projection, octets 73-76
      • +
      • 21 longitude of southern pole of projection, octets 77-80
      • +
      • 22 angle of rotation of projection, octs 81-84
      • +
      +
    • +
    +
    [in]npts_inputinteger number points input grid
    [in]bitmap_inputlogical (npts_input) input grid bitmap
    [in]data_inputreal (npts_input) input grid data
    [out]igdtnumointeger grid definition template number - output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. Same as igdtnumi (=1 for a rotated lat/lon grid).
    [out]igdtmplointeger (igdtlen) grid definition template array - output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. Array definitions same as "igdtmpli".
    [out]npts_outputinteger number points output grid. the j-dimension of the input and output grids are the same. When going from a staggered to a full grid the i-dimension increases to idim*2-1. When going from full to staggered the i-dimension decreases to (idim+1)/2.
    [out]bitmap_outputlogical (npts_outut) output grid bitmap
    [out]data_outputreal (npts_output) output grid data
    [out]iretinteger return code
      +
    • 0 successful transformation
    • +
    • non-0 invalid grid specs or problem in ipolates().
    • +
    +
    +
    +
    + +

    Definition at line 90 of file ipxetas.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxetas_8F90.js b/ver-5.1.0/ipxetas_8F90.js new file mode 100644 index 00000000..d61378ad --- /dev/null +++ b/ver-5.1.0/ipxetas_8F90.js @@ -0,0 +1,4 @@ +var ipxetas_8F90 = +[ + [ "ipxetas", "ipxetas_8F90.html#a89ff34ee39b0da1895e9d8552bb462e1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ipxetas_8F90_source.html b/ver-5.1.0/ipxetas_8F90_source.html new file mode 100644 index 00000000..03db0b2d --- /dev/null +++ b/ver-5.1.0/ipxetas_8F90_source.html @@ -0,0 +1,222 @@ + + + + + + + +NCEPLIBS-ip: ipxetas.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ipxetas.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    +
    40 
    +
    44 
    +
    89 ! @author Iredell @date 96-04-10
    +
    90  SUBROUTINE ipxetas(IDIR, IGDTNUMI, IGDTLEN, IGDTMPLI, NPTS_INPUT, &
    +
    91  BITMAP_INPUT, DATA_INPUT, IGDTNUMO, IGDTMPLO, &
    +
    92  NPTS_OUTPUT, BITMAP_OUTPUT, DATA_OUTPUT, IRET)
    +
    93  USE ipolates_mod
    +
    94  IMPLICIT NONE
    +
    95 !
    +
    96  INTEGER, INTENT(IN ) :: IDIR
    +
    97  INTEGER, INTENT(IN ) :: IGDTNUMI, IGDTLEN
    +
    98  INTEGER, INTENT(IN ) :: IGDTMPLI(IGDTLEN)
    +
    99  INTEGER, INTENT(IN ) :: NPTS_INPUT, NPTS_OUTPUT
    +
    100  INTEGER, INTENT( OUT) :: IGDTNUMO
    +
    101  INTEGER, INTENT( OUT) :: IGDTMPLO(IGDTLEN)
    +
    102  INTEGER, INTENT( OUT) :: IRET
    +
    103 
    +
    104  LOGICAL(KIND=1), INTENT(IN ) :: BITMAP_INPUT(NPTS_INPUT)
    +
    105  LOGICAL(KIND=1), INTENT( OUT) :: BITMAP_OUTPUT(NPTS_OUTPUT)
    +
    106 
    +
    107  REAL, INTENT(IN ) :: DATA_INPUT(NPTS_INPUT)
    +
    108  REAL, INTENT( OUT) :: DATA_OUTPUT(NPTS_OUTPUT)
    +
    109 
    +
    110  INTEGER :: SCAN_MODE, ISCALE, IP, IPOPT(20)
    +
    111  INTEGER :: IBI, IBO, J, KM, NO
    +
    112 
    +
    113  REAL :: DLONS
    +
    114  REAL, ALLOCATABLE :: OUTPUT_RLAT(:), OUTPUT_RLON(:)
    +
    115 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    116  iret = 0
    +
    117 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    118 ! ROUTINE ONLY WORKS FOR ROTATED LAT/LON GRIDS.
    +
    119  IF (igdtnumi/=1) THEN
    +
    120  iret=1
    +
    121  RETURN
    +
    122  ENDIF
    +
    123 !
    +
    124  scan_mode=igdtmpli(19)
    +
    125  IF((scan_mode==68.OR.scan_mode==72).AND.(idir<-2.OR.idir>-1))THEN
    +
    126  igdtnumo=igdtnumi
    +
    127  igdtmplo=igdtmpli
    +
    128  igdtmplo(19)=64
    +
    129  igdtmplo(8)=igdtmplo(8)*2-1
    +
    130  IF((igdtmplo(8)*igdtmplo(9))/=npts_output)THEN
    +
    131  iret=3
    +
    132  RETURN
    +
    133  ENDIF
    +
    134  iscale=igdtmplo(10)*igdtmplo(11)
    +
    135  IF(iscale==0) iscale=10**6
    +
    136  dlons=float(igdtmplo(17))/float(iscale)
    +
    137  dlons=dlons*0.5
    +
    138  igdtmplo(17)=nint(dlons*float(iscale))
    +
    139  ELSEIF(scan_mode==64.AND.idir==-1)THEN ! FULL TO H-GRID
    +
    140  igdtnumo=igdtnumi
    +
    141  igdtmplo=igdtmpli
    +
    142  igdtmplo(19)=68
    +
    143  igdtmplo(8)=(igdtmplo(8)+1)/2
    +
    144  IF((igdtmplo(8)*igdtmplo(9))/=npts_output)THEN
    +
    145  iret=3
    +
    146  RETURN
    +
    147  ENDIF
    +
    148  iscale=igdtmplo(10)*igdtmplo(11)
    +
    149  IF(iscale==0) iscale=10**6
    +
    150  dlons=float(igdtmplo(17))/float(iscale)
    +
    151  dlons=dlons*2.0
    +
    152  igdtmplo(17)=nint(dlons*float(iscale))
    +
    153  ELSEIF(scan_mode==64.AND.idir==-2)THEN ! FULL TO V-GRID
    +
    154  igdtnumo=igdtnumi
    +
    155  igdtmplo=igdtmpli
    +
    156  igdtmplo(19)=72
    +
    157  igdtmplo(8)=(igdtmplo(8)+1)/2
    +
    158  IF((igdtmplo(8)*igdtmplo(9))/=npts_output)THEN
    +
    159  iret=3
    +
    160  RETURN
    +
    161  ENDIF
    +
    162  iscale=igdtmplo(10)*igdtmplo(11)
    +
    163  IF(iscale==0) iscale=10**6
    +
    164  dlons=float(igdtmplo(17))/float(iscale)
    +
    165  dlons=dlons*2.0
    +
    166  igdtmplo(17)=nint(dlons*float(iscale))
    +
    167  ELSE
    +
    168  iret=2
    +
    169  RETURN
    +
    170  ENDIF
    +
    171 
    +
    172  km=1
    +
    173  ip=0
    +
    174  ipopt=0
    +
    175  ibi=1
    +
    176  ibo=0
    +
    177 
    +
    178  ALLOCATE(output_rlat(npts_output))
    +
    179  ALLOCATE(output_rlon(npts_output))
    +
    180 
    +
    181  CALL ipolates(ip, ipopt, igdtnumi, igdtmpli, igdtlen, &
    +
    182  igdtnumo, igdtmplo, igdtlen, &
    +
    183  npts_input, npts_output, km, ibi, bitmap_input, data_input, &
    +
    184  no, output_rlat, output_rlon, ibo, bitmap_output, data_output, iret)
    +
    185 
    +
    186  DEALLOCATE(output_rlat, output_rlon)
    +
    187 
    +
    188  IF(iret /= 0)THEN
    +
    189  print*,'- PROBLEM IN IPOLATES: ', iret
    +
    190  RETURN
    +
    191  ENDIF
    +
    192 
    +
    193 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    194 ! REPLACE ANY UNDEFINED POINTS ALONG THE LEFT AND RIGHT EDGES.
    +
    195  DO j=1, igdtmplo(9)
    +
    196  bitmap_output(j*igdtmplo(8))=bitmap_output(j*igdtmplo(8)-1)
    +
    197  data_output(j*igdtmplo(8))=data_output(j*igdtmplo(8)-1)
    +
    198  bitmap_output((j-1)*igdtmplo(8)+1)=bitmap_output((j-1)*igdtmplo(8)+2)
    +
    199  data_output((j-1)*igdtmplo(8)+1)=data_output((j-1)*igdtmplo(8)+2)
    +
    200  ENDDO
    +
    201 
    +
    202  RETURN
    +
    203 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    204  END SUBROUTINE ipxetas
    + +
    subroutine ipxetas(IDIR, IGDTNUMI, IGDTLEN, IGDTMPLI, NPTS_INPUT, BITMAP_INPUT, DATA_INPUT, IGDTNUMO, IGDTMPLO, NPTS_OUTPUT, BITMAP_OUTPUT, DATA_OUTPUT, IRET)
    Expand or contract eta grids using linear interpolation.
    Definition: ipxetas.F90:93
    +
    Top-level driver for scalar interpolation interpolation routine ipolates().
    Definition: ipolates.F90:12
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxwafs2_8F90.html b/ver-5.1.0/ipxwafs2_8F90.html new file mode 100644 index 00000000..d42845f3 --- /dev/null +++ b/ver-5.1.0/ipxwafs2_8F90.html @@ -0,0 +1,308 @@ + + + + + + + +NCEPLIBS-ip: ipxwafs2.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipxwafs2.F90 File Reference
    +
    +
    + +

    Expand or contract wafs grids using linear interpolation and account for bitmapped data. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine ipxwafs2 (IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, IGDTLEN, IGDTMPL_THIN, DATA_THIN, IB_THIN, BITMAP_THIN, IGDTMPL_FULL, DATA_FULL, IB_FULL, BITMAP_FULL, IRET)
     Expand or contract wafs grids using linear interpolation and account for bitmapped data. More...
     
    +

    Detailed Description

    +

    Expand or contract wafs grids using linear interpolation and account for bitmapped data.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition in file ipxwafs2.F90.

    +

    Function/Subroutine Documentation

    + +

    ◆ ipxwafs2()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipxwafs2 (integer, intent(in) IDIR,
    integer, intent(in) NUMPTS_THIN,
    integer, intent(in) NUMPTS_FULL,
    integer, intent(in) KM,
    integer, intent(in) NUM_OPT,
    integer, dimension(num_opt), intent(inout) OPT_PTS,
    integer, intent(in) IGDTLEN,
    integer, dimension(igdtlen), intent(inout) IGDTMPL_THIN,
    real, dimension(numpts_thin,km), intent(inout) DATA_THIN,
    integer, dimension(km), intent(inout) IB_THIN,
    logical(kind=1), dimension(numpts_thin,km), intent(inout) BITMAP_THIN,
    integer, dimension(igdtlen), intent(inout) IGDTMPL_FULL,
    real, dimension(numpts_full,km), intent(inout) DATA_FULL,
    integer, dimension(km), intent(inout) IB_FULL,
    logical(kind=1), dimension(numpts_full,km), intent(inout) BITMAP_FULL,
    integer, intent(out) IRET 
    )
    +
    + +

    Expand or contract wafs grids using linear interpolation and account for bitmapped data.

    +

    This subprogram transforms between the thinned wafs grids used for transmitting to the aviation community and their full expansion as used for general interpolation and graphics. The thinned wafs grids are latitude-longitude grids where the number of points in each row decrease toward the pole. This information is stored in the grib 2 grid definition template (section 3) starting at octet 73.

    +

    The full grid counterparts have an equal number of points per row.

    +

    The transform between the full and thinned wafs wafs grid is done by linear interpolation and is not reversible. This routine works with bitmapped data.

    +

    This subroutine is similar to:

      +
    • ipxwafs() which uses linear interpolation.
    • +
    • ipxwafs3() which uses neighbor interpolation and accounts for
    • +
    • bitmapped data.
    • +
    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell initial version
    99-01-25 gilbert changed bitmap fields from logical to logical*1
    2015-jul gayno convert to grib 2
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]idirinteger transform option
      +
    • 1 to expand thinned fields to full fields
    • +
    • -1 to contract full fields to thinned fields
    • +
    +
    [in]numpts_thininteger number of grid points - thinned grid. Must be 3447.
    [in]numpts_fullinteger number of grid points - full grid. Must be 5329.
    [in]kminteger number of fields to transform
    [in]num_optinteger number of values to describe the thinned grid. must be 73. dimension of array opt_pts.
    [in,out]opt_ptsinteger (num_opt) number of grid points per row - thinned grid - if idir=+1
    [in]igdtleninteger grid defintion template array length. must be 19 for lat/lon grids. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure. same for thin and full grids which are both lat/lon.
    [in]igdtmpl_thininteger (igdtlen) grid definition template array - thinned grid - if idir=+1. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info):
      +
    • 1 shape of earth, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30
    • +
    • 8 set to missing for thinned grid., octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42.
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 set to missing for thinned grid, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72
    • +
    +
    [in,out]data_thinreal (numpts_thin,km) thinned grid fields if idir=+1
    [in,out]ib_thininteger (km) bitmap flags thinned grid - if idir=+1
    [in,out]bitmap_thinlogical (numpts_thin,km) bitmap fields thin grid - if idir=+1
    [in,out]igdtmpl_fullinteger (igdtlen) grid definition template array - full grid - if idir=-1. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. same as igdtmpl_thin except: (8): number of points along a parallel, octs 31-34 (17): i-direction increment, octets 64-67
    [in,out]data_fullreal (numpts_full,km) full grid fields if idir=-1
    [in,out]ib_fullinteger (km) bitmap flags full grid - if idir=-1
    [in,out]bitmap_fulllogical (numpts_full,km) bitmap fields full grid - if idir=-1
    [out]iretinteger return code
      +
    • 0 successful transformation
    • +
    • 1 improper grid specification
    • +
    +
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 89 of file ipxwafs2.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxwafs2_8F90.js b/ver-5.1.0/ipxwafs2_8F90.js new file mode 100644 index 00000000..524b1d34 --- /dev/null +++ b/ver-5.1.0/ipxwafs2_8F90.js @@ -0,0 +1,4 @@ +var ipxwafs2_8F90 = +[ + [ "ipxwafs2", "ipxwafs2_8F90.html#ab602c9c04957836c0b8860560d442894", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ipxwafs2_8F90_source.html b/ver-5.1.0/ipxwafs2_8F90_source.html new file mode 100644 index 00000000..49afe29e --- /dev/null +++ b/ver-5.1.0/ipxwafs2_8F90_source.html @@ -0,0 +1,267 @@ + + + + + + + +NCEPLIBS-ip: ipxwafs2.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ipxwafs2.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    +
    89 SUBROUTINE ipxwafs2(IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, &
    +
    90  IGDTLEN, IGDTMPL_THIN, DATA_THIN, IB_THIN, BITMAP_THIN, &
    +
    91  IGDTMPL_FULL, DATA_FULL, IB_FULL, BITMAP_FULL, IRET)
    +
    92  IMPLICIT NONE
    +
    93  !
    +
    94  INTEGER, INTENT(IN ) :: NUM_OPT
    +
    95  INTEGER, INTENT(INOUT) :: OPT_PTS(NUM_OPT)
    +
    96  INTEGER, INTENT(IN ) :: IDIR, KM, NUMPTS_THIN, NUMPTS_FULL
    +
    97  INTEGER, INTENT(IN ) :: IGDTLEN
    +
    98  INTEGER, INTENT(INOUT) :: IGDTMPL_THIN(IGDTLEN)
    +
    99  INTEGER, INTENT(INOUT) :: IGDTMPL_FULL(IGDTLEN)
    +
    100  INTEGER, INTENT(INOUT) :: IB_THIN(KM), IB_FULL(KM)
    +
    101  INTEGER, INTENT( OUT) :: IRET
    +
    102  !
    +
    103  LOGICAL(KIND=1), INTENT(INOUT) :: BITMAP_THIN(NUMPTS_THIN,KM)
    +
    104  LOGICAL(KIND=1), INTENT(INOUT) :: BITMAP_FULL(NUMPTS_FULL,KM)
    +
    105  !
    +
    106  REAL, INTENT(INOUT) :: DATA_THIN(NUMPTS_THIN,KM)
    +
    107  REAL, INTENT(INOUT) :: DATA_FULL(NUMPTS_FULL,KM)
    +
    108  !
    +
    109  INTEGER, PARAMETER :: MISSING=-1
    +
    110  !
    +
    111  INTEGER :: SCAN_MODE, I, J, K, IDLAT, IDLON
    +
    112  INTEGER :: IA, IB, IM, IM1, IM2, NPWAFS(73)
    +
    113  INTEGER :: IS1, IS2, ISCAN, ISCALE
    +
    114  !
    +
    115  LOGICAL :: TEST1, TEST2
    +
    116  !
    +
    117  REAL :: DLON, HI
    +
    118  REAL :: RAT1, RAT2, RLON1, RLON2
    +
    119  REAL :: WA, WB, X1, X2
    +
    120  !
    +
    121  DATA npwafs/ &
    +
    122  73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70,&
    +
    123  70, 69, 69, 68, 67, 67, 66, 65, 65, 64, 63, 62, 61, 60, 60,&
    +
    124  59, 58, 57, 56, 55, 54, 52, 51, 50, 49, 48, 47, 45, 44, 43,&
    +
    125  42, 40, 39, 38, 36, 35, 33, 32, 30, 29, 28, 26, 25, 23, 22,&
    +
    126  20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2/
    +
    127  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    128  ! TRANSFORM GDS
    +
    129  iret=0
    +
    130  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    131  ! REG LAT/LON GRIDS HAVE 19 GDT ELEMENTS.
    +
    132  IF (igdtlen /= 19 .OR. numpts_thin/=3447 .OR. numpts_full/=5329) THEN
    +
    133  iret=1
    +
    134  RETURN
    +
    135  ENDIF
    +
    136  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    137  ! EXPAND THINNED GDS TO FULL GDS
    +
    138  IF(idir.GT.0) THEN
    +
    139  scan_mode=igdtmpl_thin(19)
    +
    140  iscale=igdtmpl_thin(10)*igdtmpl_thin(11)
    +
    141  IF(iscale==0) iscale=10**6
    +
    142  idlat=nint(1.25*float(iscale))
    +
    143  test1=all(opt_pts==npwafs)
    +
    144  test2=all(opt_pts==npwafs(73:1:-1))
    +
    145  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    146  ! SOME CHECKS TO ENSURE THIS IS A WAFS GRID
    +
    147  IF(scan_mode==64 .AND. igdtmpl_thin(9)==73 .AND. &
    +
    148  idlat==igdtmpl_thin(18) .AND. (test1 .OR. test2) ) THEN
    +
    149  igdtmpl_full=igdtmpl_thin
    +
    150  im=73
    +
    151  igdtmpl_full(8)=im
    +
    152  rlon1=float(igdtmpl_full(13))/float(iscale)
    +
    153  rlon2=float(igdtmpl_full(16))/float(iscale)
    +
    154  iscan=mod(igdtmpl_full(19)/128,2)
    +
    155  hi=(-1.)**iscan
    +
    156  dlon=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(im-1)
    +
    157  igdtmpl_full(17)=nint(dlon*float(iscale))
    +
    158  ELSE
    +
    159  iret=1
    +
    160  ENDIF
    +
    161  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    162  ! CONTRACT FULL GDS TO THINNED GDS
    +
    163  ELSEIF(idir.LT.0) THEN
    +
    164  scan_mode=igdtmpl_full(19)
    +
    165  iscale=igdtmpl_full(10)*igdtmpl_full(11)
    +
    166  IF(iscale==0) iscale=10**6
    +
    167  idlat=nint(1.25*float(iscale))
    +
    168  idlon=idlat
    +
    169  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    170  ! SOME CHECKS TO ENSURE THIS IS A WAFS GRID
    +
    171  IF(scan_mode==64 .AND. igdtmpl_full(8)==73 .AND. igdtmpl_full(9)==73 .AND. &
    +
    172  num_opt==73 .AND. idlat==igdtmpl_full(18) .AND. idlon==igdtmpl_full(17))THEN
    +
    173  igdtmpl_thin=igdtmpl_full
    +
    174  igdtmpl_thin(8)=missing
    +
    175  igdtmpl_thin(17)=missing
    +
    176  IF(igdtmpl_thin(12)==0) THEN ! IS LATITUDE OF ROW 1 THE EQUATOR?
    +
    177  opt_pts=npwafs
    +
    178  ELSE
    +
    179  opt_pts=npwafs(73:1:-1)
    +
    180  ENDIF
    +
    181  ELSE
    +
    182  iret=1
    +
    183  ENDIF
    +
    184  ENDIF
    +
    185  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    186  ! TRANSFORM FIELDS
    +
    187  IF(iret.EQ.0) THEN
    +
    188  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    189  ! EXPAND THINNED FIELDS TO FULL FIELDS
    +
    190  IF(idir.EQ.1) THEN
    +
    191  DO k=1,km
    +
    192  is1=0
    +
    193  is2=0
    +
    194  ib_full(k)=0
    +
    195  DO j=1,igdtmpl_full(9)
    +
    196  im1=opt_pts(j)
    +
    197  im2=igdtmpl_full(8)
    +
    198  rat1=float(im1-1)/float(im2-1)
    +
    199  DO i=1,im2
    +
    200  x1=(i-1)*rat1+1
    +
    201  ia=int(x1)
    +
    202  ia=min(max(ia,1),im1-1)
    +
    203  ib=ia+1
    +
    204  wa=ib-x1
    +
    205  wb=x1-ia
    +
    206  IF(ib_thin(k)==0.OR.(bitmap_thin(is1+ia,k).AND.bitmap_thin(is1+ib,k))) THEN
    +
    207  data_full(is2+i,k)=wa*data_thin(is1+ia,k)+wb*data_thin(is1+ib,k)
    +
    208  bitmap_full(is2+i,k)=.true.
    +
    209  ELSE
    +
    210  data_full(is2+i,k)=0.0
    +
    211  bitmap_full(is2+i,k)=.false.
    +
    212  ib_full(k)=1
    +
    213  ENDIF
    +
    214  ENDDO
    +
    215  is1=is1+im1
    +
    216  is2=is2+im2
    +
    217  ENDDO
    +
    218  ENDDO
    +
    219  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    220  ! CONTRACT FULL FIELDS TO THINNED FIELDS
    +
    221  ELSEIF(idir.EQ.-1) THEN
    +
    222  DO k=1,km
    +
    223  is1=0
    +
    224  is2=0
    +
    225  ib_thin(k)=0
    +
    226  DO j=1,igdtmpl_full(9)
    +
    227  im1=opt_pts(j)
    +
    228  im2=igdtmpl_full(8)
    +
    229  rat2=float(im2-1)/float(im1-1)
    +
    230  DO i=1,im1
    +
    231  x2=(i-1)*rat2+1
    +
    232  ia=int(x2)
    +
    233  ia=min(max(ia,1),im2-1)
    +
    234  ib=ia+1
    +
    235  wa=ib-x2
    +
    236  wb=x2-ia
    +
    237  IF(ib_full(k)==0.OR.(bitmap_full(is2+ia,k).AND.bitmap_full(is2+ib,k))) THEN
    +
    238  data_thin(is1+i,k)=wa*data_full(is2+ia,k)+wb*data_full(is2+ib,k)
    +
    239  bitmap_thin(is1+i,k)=.true.
    +
    240  ELSE
    +
    241  data_thin(is1+i,k)=0.0
    +
    242  bitmap_thin(is1+i,k)=.false.
    +
    243  ib_thin(k)=1
    +
    244  ENDIF
    +
    245  ENDDO
    +
    246  is1=is1+im1
    +
    247  is2=is2+im2
    +
    248  ENDDO
    +
    249  ENDDO
    +
    250  ENDIF
    +
    251  ENDIF
    +
    252  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    253 END SUBROUTINE ipxwafs2
    +
    subroutine ipxwafs2(IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, IGDTLEN, IGDTMPL_THIN, DATA_THIN, IB_THIN, BITMAP_THIN, IGDTMPL_FULL, DATA_FULL, IB_FULL, BITMAP_FULL, IRET)
    Expand or contract wafs grids using linear interpolation and account for bitmapped data.
    Definition: ipxwafs2.F90:92
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxwafs3_8F90.html b/ver-5.1.0/ipxwafs3_8F90.html new file mode 100644 index 00000000..be1e2ca7 --- /dev/null +++ b/ver-5.1.0/ipxwafs3_8F90.html @@ -0,0 +1,306 @@ + + + + + + + +NCEPLIBS-ip: ipxwafs3.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipxwafs3.F90 File Reference
    +
    +
    + +

    Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine ipxwafs3 (IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, IGDTLEN, IGDTMPL_THIN, DATA_THIN, IB_THIN, BITMAP_THIN, IGDTMPL_FULL, DATA_FULL, IB_FULL, BITMAP_FULL, IRET)
     Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data. More...
     
    +

    Detailed Description

    +

    Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data.

    +
    Author
    Trojan
    +
    Date
    7-7-13
    + +

    Definition in file ipxwafs3.F90.

    +

    Function/Subroutine Documentation

    + +

    ◆ ipxwafs3()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipxwafs3 (integer, intent(in) IDIR,
    integer, intent(in) NUMPTS_THIN,
    integer, intent(in) NUMPTS_FULL,
    integer, intent(in) KM,
    integer, intent(in) NUM_OPT,
    integer, dimension(num_opt), intent(inout) OPT_PTS,
    integer, intent(in) IGDTLEN,
    integer, dimension(igdtlen), intent(inout) IGDTMPL_THIN,
    real, dimension(numpts_thin,km), intent(inout) DATA_THIN,
    integer, dimension(km), intent(inout) IB_THIN,
    logical(kind=1), dimension(numpts_thin,km), intent(inout) BITMAP_THIN,
    integer, dimension(igdtlen), intent(inout) IGDTMPL_FULL,
    real, dimension(numpts_full,km), intent(inout) DATA_FULL,
    integer, dimension(km), intent(inout) IB_FULL,
    logical(kind=1), dimension(numpts_full,km), intent(inout) BITMAP_FULL,
    integer, intent(out) IRET 
    )
    +
    + +

    Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data.

    +

    This subprogram transforms between the thinned wafs grids used for transmitting to the aviation community and their full expansion as used for general interpolation and graphics. The thinned wafs grids are latitude-longitude grids where the number of points in each row decrease toward the pole. This information is stored in the grib 2 grid definition template (section 3) starting at octet 73.

    +

    The full grid counterparts have an equal number of points per row.

    +

    The transform between the full and thinned wafs wafs grid is done by linear interpolation and is not reversible. This routine works with bitmapped data.

    +

    This subroutine is similar to:

      +
    • ipxwafs() which uses linear interpolation.
    • +
    • ipxwafs2() which uses linear interpolation and accounts for
    • +
    • bitmapped data.
    • +
    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    07-07-13 Trojan initial version based on ipxwafs2
    2015-jul gayno convert to grib 2
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]idirinteger transform option
      +
    • 1 to expand thinned fields to full fields
    • +
    • -1 to contract full fields to thinned fields
    • +
    +
    [in]numpts_thininteger number of grid points - thinned grid. Must be 3447.
    [in]numpts_fullinteger number of grid points - full grid. Must be 5329.
    [in]kminteger number of fields to transform
    [in]num_optinteger number of values to describe the thinned grid. must be 73. dimension of array opt_pts.
    [in,out]opt_ptsinteger (num_opt) number of grid points per row - thinned grid - if idir=+1
    [in]igdtleninteger grid defintion template array length. must be 19 for lat/lon grids. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure. same for thin and full grids which are both lat/lon.
    [in]igdtmpl_thininteger (igdtlen) grid definition template array - thinned grid - if idir=+1. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info):
      +
    • 1 shape of earth, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30
    • +
    • 8 set to missing for thinned grid., octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42.
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 set to missing for thinned grid, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72
    • +
    +
    [in,out]data_thinreal (numpts_thin,km) thinned grid fields if idir=+1
    [in,out]ib_thininteger (km) bitmap flags thinned grid - if idir=+1
    [in,out]bitmap_thinlogical (numpts_thin,km) bitmap fields thin grid - if idir=+1
    [in,out]igdtmpl_fullinteger (igdtlen) grid definition template array - full grid - if idir=-1. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. same as igdtmpl_thin except: (8): number of points along a parallel, octs 31-34 (17): i-direction increment, octets 64-67
    [in,out]data_fullreal (numpts_full,km) full grid fields if idir=-1
    [in,out]ib_fullinteger (km) bitmap flags full grid - if idir=-1
    [in,out]bitmap_fulllogical (numpts_full,km) bitmap fields full grid - if idir=-1
    [out]iretinteger return code
      +
    • 0 successful transformation
    • +
    • 1 improper grid specification
    • +
    +
    +
    +
    +
    Author
    Trojan
    +
    Date
    7-7-13
    + +

    Definition at line 88 of file ipxwafs3.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxwafs3_8F90.js b/ver-5.1.0/ipxwafs3_8F90.js new file mode 100644 index 00000000..30094c7a --- /dev/null +++ b/ver-5.1.0/ipxwafs3_8F90.js @@ -0,0 +1,4 @@ +var ipxwafs3_8F90 = +[ + [ "ipxwafs3", "ipxwafs3_8F90.html#aae7be3c77cbe16d0219c86e443e6ec1d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ipxwafs3_8F90_source.html b/ver-5.1.0/ipxwafs3_8F90_source.html new file mode 100644 index 00000000..e8c66cef --- /dev/null +++ b/ver-5.1.0/ipxwafs3_8F90_source.html @@ -0,0 +1,289 @@ + + + + + + + +NCEPLIBS-ip: ipxwafs3.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ipxwafs3.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    5 
    +
    88 SUBROUTINE ipxwafs3(IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, &
    +
    89  IGDTLEN, IGDTMPL_THIN, DATA_THIN, IB_THIN, BITMAP_THIN, &
    +
    90  IGDTMPL_FULL, DATA_FULL, IB_FULL, BITMAP_FULL, IRET)
    +
    91  IMPLICIT NONE
    +
    92 !
    +
    93  INTEGER, INTENT(IN ) :: NUM_OPT
    +
    94  INTEGER, INTENT(INOUT) :: OPT_PTS(NUM_OPT)
    +
    95  INTEGER, INTENT(IN ) :: IDIR, KM, NUMPTS_THIN, NUMPTS_FULL
    +
    96  INTEGER, INTENT(IN ) :: IGDTLEN
    +
    97  INTEGER, INTENT(INOUT) :: IGDTMPL_THIN(IGDTLEN)
    +
    98  INTEGER, INTENT(INOUT) :: IGDTMPL_FULL(IGDTLEN)
    +
    99  INTEGER, INTENT(INOUT) :: IB_THIN(KM), IB_FULL(KM)
    +
    100  INTEGER, INTENT( OUT) :: IRET
    +
    101 !
    +
    102  LOGICAL(KIND=1), INTENT(INOUT) :: BITMAP_THIN(NUMPTS_THIN,KM)
    +
    103  LOGICAL(KIND=1), INTENT(INOUT) :: BITMAP_FULL(NUMPTS_FULL,KM)
    +
    104 !
    +
    105  REAL, INTENT(INOUT) :: DATA_THIN(NUMPTS_THIN,KM)
    +
    106  REAL, INTENT(INOUT) :: DATA_FULL(NUMPTS_FULL,KM)
    +
    107 !
    +
    108  INTEGER, PARAMETER :: MISSING=-1
    +
    109 !
    +
    110  INTEGER :: SCAN_MODE, I, J, K, IDLAT, IDLON
    +
    111  INTEGER :: IA, IB, IM, IM1, IM2, NPWAFS(73)
    +
    112  INTEGER :: IS1, IS2, ISCAN, ISCALE
    +
    113 !
    +
    114  LOGICAL :: TEST1, TEST2
    +
    115 !
    +
    116  REAL :: DLON, HI
    +
    117  REAL :: RAT1, RAT2, RLON1, RLON2
    +
    118  REAL :: WA, WB, X1, X2
    +
    119 !
    +
    120  DATA npwafs/ &
    +
    121  73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70,&
    +
    122  70, 69, 69, 68, 67, 67, 66, 65, 65, 64, 63, 62, 61, 60, 60,&
    +
    123  59, 58, 57, 56, 55, 54, 52, 51, 50, 49, 48, 47, 45, 44, 43,&
    +
    124  42, 40, 39, 38, 36, 35, 33, 32, 30, 29, 28, 26, 25, 23, 22,&
    +
    125  20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2/
    +
    126 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    127 ! TRANSFORM GDS
    +
    128  iret=0
    +
    129 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    130 ! REG LAT/LON GRIDS HAVE 19 GDT ELEMENTS.
    +
    131  IF (igdtlen /= 19 .OR. numpts_thin/=3447 .OR. numpts_full/=5329) THEN
    +
    132  iret=1
    +
    133  RETURN
    +
    134  ENDIF
    +
    135 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    136 ! EXPAND THINNED GDS TO FULL GDS
    +
    137  IF(idir.GT.0) THEN
    +
    138  scan_mode=igdtmpl_thin(19)
    +
    139  iscale=igdtmpl_thin(10)*igdtmpl_thin(11)
    +
    140  IF(iscale==0) iscale=10**6
    +
    141  idlat=nint(1.25*float(iscale))
    +
    142  test1=all(opt_pts==npwafs)
    +
    143  test2=all(opt_pts==npwafs(73:1:-1))
    +
    144 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    145 ! SOME CHECKS TO ENSURE THIS IS A WAFS GRID
    +
    146  IF(scan_mode==64 .AND. igdtmpl_thin(9)==73 .AND. &
    +
    147  idlat==igdtmpl_thin(18) .AND. (test1 .OR. test2) ) THEN
    +
    148  igdtmpl_full=igdtmpl_thin
    +
    149  im=73
    +
    150  igdtmpl_full(8)=im
    +
    151  rlon1=float(igdtmpl_full(13))/float(iscale)
    +
    152  rlon2=float(igdtmpl_full(16))/float(iscale)
    +
    153  iscan=mod(igdtmpl_full(19)/128,2)
    +
    154  hi=(-1.)**iscan
    +
    155  dlon=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(im-1)
    +
    156  igdtmpl_full(17)=nint(dlon*float(iscale))
    +
    157  ELSE
    +
    158  iret=1
    +
    159  ENDIF
    +
    160 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    161 ! CONTRACT FULL GDS TO THINNED GDS
    +
    162  ELSEIF(idir.LT.0) THEN
    +
    163  scan_mode=igdtmpl_full(19)
    +
    164  iscale=igdtmpl_full(10)*igdtmpl_full(11)
    +
    165  IF(iscale==0) iscale=10**6
    +
    166  idlat=nint(1.25*float(iscale))
    +
    167  idlon=idlat
    +
    168 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    169 ! SOME CHECKS TO ENSURE THIS IS A WAFS GRID
    +
    170  IF(scan_mode==64 .AND. igdtmpl_full(8)==73 .AND. igdtmpl_full(9)==73 .AND. &
    +
    171  num_opt==73 .AND. idlat==igdtmpl_full(18) .AND. idlon==igdtmpl_full(17))THEN
    +
    172  igdtmpl_thin=igdtmpl_full
    +
    173  igdtmpl_thin(8)=missing
    +
    174  igdtmpl_thin(17)=missing
    +
    175  IF(igdtmpl_thin(12)==0) THEN ! IS LATITUDE OF ROW 1 THE EQUATOR?
    +
    176  opt_pts=npwafs
    +
    177  ELSE
    +
    178  opt_pts=npwafs(73:1:-1)
    +
    179  ENDIF
    +
    180  ELSE
    +
    181  iret=1
    +
    182  ENDIF
    +
    183  ENDIF
    +
    184 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    185 ! TRANSFORM FIELDS
    +
    186  IF(iret.EQ.0) THEN
    +
    187 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    188 ! EXPAND THINNED FIELDS TO FULL FIELDS
    +
    189  IF(idir.EQ.1) THEN
    +
    190  DO k=1,km
    +
    191  is1=0
    +
    192  is2=0
    +
    193  ib_full(k)=0
    +
    194  DO j=1,igdtmpl_full(9)
    +
    195  im1=opt_pts(j)
    +
    196  im2=igdtmpl_full(8)
    +
    197  rat1=float(im1-1)/float(im2-1)
    +
    198  DO i=1,im2
    +
    199  x1=(i-1)*rat1+1
    +
    200  ia=int(x1)
    +
    201  ia=min(max(ia,1),im1-1)
    +
    202  ib=ia+1
    +
    203  wa=ib-x1
    +
    204  wb=x1-ia
    +
    205  IF(wa.GE.wb) THEN
    +
    206  IF(ib_thin(k).EQ.0.OR.bitmap_thin(is1+ia,k)) THEN
    +
    207  data_full(is2+i,k)=data_thin(is1+ia,k)
    +
    208  bitmap_full(is2+i,k)=.true.
    +
    209  ELSE
    +
    210  data_full(is2+i,k)=0.0
    +
    211  bitmap_full(is2+i,k)=.false.
    +
    212  ib_full(k)=1
    +
    213  ENDIF
    +
    214  ELSE
    +
    215  IF(ib_thin(k).EQ.0.OR.bitmap_thin(is1+ib,k)) THEN
    +
    216  data_full(is2+i,k)=data_thin(is1+ib,k)
    +
    217  bitmap_full(is2+i,k)=.true.
    +
    218  ELSE
    +
    219  data_full(is2+i,k)=0.0
    +
    220  bitmap_full(is2+i,k)=.false.
    +
    221  ib_full(k)=1
    +
    222  ENDIF
    +
    223  ENDIF
    +
    224  ENDDO
    +
    225  is1=is1+im1
    +
    226  is2=is2+im2
    +
    227  ENDDO
    +
    228  ENDDO
    +
    229 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    230 ! CONTRACT FULL FIELDS TO THINNED FIELDS
    +
    231  ELSEIF(idir.EQ.-1) THEN
    +
    232  DO k=1,km
    +
    233  is1=0
    +
    234  is2=0
    +
    235  ib_thin(k)=0
    +
    236  DO j=1,igdtmpl_full(9)
    +
    237  im1=opt_pts(j)
    +
    238  im2=igdtmpl_full(8)
    +
    239  rat2=float(im2-1)/float(im1-1)
    +
    240  DO i=1,im1
    +
    241  x2=(i-1)*rat2+1
    +
    242  ia=int(x2)
    +
    243  ia=min(max(ia,1),im2-1)
    +
    244  ib=ia+1
    +
    245  wa=ib-x2
    +
    246  wb=x2-ia
    +
    247  IF(wa.GE.wb) THEN
    +
    248  IF(ib_full(k).EQ.0.OR.bitmap_full(is2+ia,k)) THEN
    +
    249  data_thin(is1+i,k)=data_full(is2+ia,k)
    +
    250  bitmap_thin(is1+i,k)=.true.
    +
    251  ELSE
    +
    252  data_thin(is1+i,k)=0.0
    +
    253  bitmap_thin(is1+i,k)=.false.
    +
    254  ib_thin(k)=1
    +
    255  ENDIF
    +
    256  ELSE
    +
    257  IF(ib_full(k).EQ.0.OR.bitmap_full(is2+ib,k)) THEN
    +
    258  data_thin(is1+i,k)=data_full(is2+ib,k)
    +
    259  bitmap_thin(is1+i,k)=.true.
    +
    260  ELSE
    +
    261  data_thin(is1+i,k)=0.0
    +
    262  bitmap_thin(is1+i,k)=.false.
    +
    263  ib_thin(k)=1
    +
    264  ENDIF
    +
    265  ENDIF
    +
    266  ENDDO
    +
    267  is1=is1+im1
    +
    268  is2=is2+im2
    +
    269  ENDDO
    +
    270  ENDDO
    +
    271  ENDIF
    +
    272  ENDIF
    +
    273 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    274  END SUBROUTINE ipxwafs3
    +
    subroutine ipxwafs3(IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, IGDTLEN, IGDTMPL_THIN, DATA_THIN, IB_THIN, BITMAP_THIN, IGDTMPL_FULL, DATA_FULL, IB_FULL, BITMAP_FULL, IRET)
    Expand or contract wafs grids using neighbor interpolation and accout for bitmapped data.
    Definition: ipxwafs3.F90:91
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxwafs_8F90.html b/ver-5.1.0/ipxwafs_8F90.html new file mode 100644 index 00000000..491f7c06 --- /dev/null +++ b/ver-5.1.0/ipxwafs_8F90.html @@ -0,0 +1,278 @@ + + + + + + + +NCEPLIBS-ip: ipxwafs.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipxwafs.F90 File Reference
    +
    +
    + +

    Expand or contract wafs grids. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine ipxwafs (IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, IGDTLEN, IGDTMPL_THIN, DATA_THIN, IGDTMPL_FULL, DATA_FULL, IRET)
     Expand or contract wafs grids. More...
     
    +

    Detailed Description

    +

    Expand or contract wafs grids.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition in file ipxwafs.F90.

    +

    Function/Subroutine Documentation

    + +

    ◆ ipxwafs()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipxwafs (integer, intent(in) IDIR,
    integer, intent(in) NUMPTS_THIN,
    integer, intent(in) NUMPTS_FULL,
    integer, intent(in) KM,
    integer, intent(in) NUM_OPT,
    integer, dimension(num_opt), intent(inout) OPT_PTS,
    integer, intent(in) IGDTLEN,
    integer, dimension(igdtlen), intent(inout) IGDTMPL_THIN,
    real, dimension(numpts_thin,km), intent(inout) DATA_THIN,
    integer, dimension(igdtlen), intent(inout) IGDTMPL_FULL,
    real, dimension(numpts_full,km), intent(inout) DATA_FULL,
    integer, intent(out) IRET 
    )
    +
    + +

    Expand or contract wafs grids.

    +

    This subprogram transforms between the thinned wafs grids used for transmitting to the aviation community and their full expansion as used for general interpolation and graphics.

    +

    The thinned wafs grids are latitude-longitude grids where the number of points in each row decrease toward the pole.

    +

    This information is stored in the grib 2 grid definition template (section 3) starting at octet 73. The full grid counterparts have an equal number of points per row. The transform between the full and thinned wafs grid is done by linear interpolation and is not reversible.

    +

    This routine does not work for bitmapped data.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell initial version
    2015-july gayno convert to grib 2
    +
    Parameters
    + + + + + + + + + + + + + +
    [in]idirinteger transform option
      +
    • (+1 to expand thinned fields to full fields)
    • +
    • (-1 to contract full fields to thinned fields)
    • +
    +
    [in]numpts_thininteger number of grid points - thinned grid. must be 3447.
    [in]numpts_fullinteger number of grid points - full grid. must be 5329 (73^2).
    [in]kminteger number of fields to transform
    [in]num_optinteger number of values to describe the thinned grid. must be 73. dimension of array opt_pts.
    [in,out]opt_ptsinteger (num_opt) number of grid points per row - thinned grid - if idir=+1
    [in]igdtleninteger grid defintion template array length. must be 19 for lat/lon grids. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure. same for thin and full grids which are both lat/lon.
    [in,out]igdtmpl_thininteger (igdtlen) grid definition template array - thinned grid - if idir=+1. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info):
      +
    • 1 shape of earth, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30
    • +
    • 8 set to missing for thinned grid., octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42.
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 set to missing for thinned grid, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72
    • +
    +
    [in,out]data_thinreal (numpts_thin,km) thinned grid fields if idir=+1
    [in,out]igdtmpl_fullinteger (igdtlen) grid definition template array - full grid - if idir=-1. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. same as igdtmpl_thin except:
      +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 17 i-direction increment, octets 64-67
    • +
    +
    [in,out]data_fullreal (numpts_full,km) full grid fields if idir=-1
    [out]iretinteger return code
      +
    • 0 successful transformation
    • +
    • 1 improper grid specification
    • +
    +
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 81 of file ipxwafs.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/ipxwafs_8F90.js b/ver-5.1.0/ipxwafs_8F90.js new file mode 100644 index 00000000..79c0b5e0 --- /dev/null +++ b/ver-5.1.0/ipxwafs_8F90.js @@ -0,0 +1,4 @@ +var ipxwafs_8F90 = +[ + [ "ipxwafs", "ipxwafs_8F90.html#a1465ea191950f7464bb3374abed94c12", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ipxwafs_8F90_source.html b/ver-5.1.0/ipxwafs_8F90_source.html new file mode 100644 index 00000000..2c613b10 --- /dev/null +++ b/ver-5.1.0/ipxwafs_8F90_source.html @@ -0,0 +1,248 @@ + + + + + + + +NCEPLIBS-ip: ipxwafs.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ipxwafs.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    +
    68 
    +
    81  SUBROUTINE ipxwafs(IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, &
    +
    82  OPT_PTS, IGDTLEN, IGDTMPL_THIN, DATA_THIN, &
    +
    83  IGDTMPL_FULL, DATA_FULL, IRET)
    +
    84  IMPLICIT NONE
    +
    85 !
    +
    86  INTEGER, INTENT(IN ) :: NUM_OPT
    +
    87  INTEGER, INTENT(INOUT) :: OPT_PTS(NUM_OPT)
    +
    88  INTEGER, INTENT(IN ) :: IDIR, KM, NUMPTS_THIN, NUMPTS_FULL
    +
    89  INTEGER, INTENT(IN ) :: IGDTLEN
    +
    90  INTEGER, INTENT(INOUT) :: IGDTMPL_THIN(IGDTLEN)
    +
    91  INTEGER, INTENT(INOUT) :: IGDTMPL_FULL(IGDTLEN)
    +
    92  INTEGER, INTENT( OUT) :: IRET
    +
    93 !
    +
    94  REAL, INTENT(INOUT) :: DATA_THIN(NUMPTS_THIN,KM)
    +
    95  REAL, INTENT(INOUT) :: DATA_FULL(NUMPTS_FULL,KM)
    +
    96 !
    +
    97  INTEGER, PARAMETER :: MISSING=-1
    +
    98 !
    +
    99  INTEGER :: SCAN_MODE, I, J, K, IDLAT, IDLON
    +
    100  INTEGER :: IA, IB, IM, IM1, IM2, NPWAFS(73)
    +
    101  INTEGER :: IS1, IS2, ISCAN, ISCALE
    +
    102 !
    +
    103  LOGICAL :: TEST1, TEST2
    +
    104 !
    +
    105  REAL :: DLON, HI
    +
    106  REAL :: RAT1, RAT2, RLON1, RLON2
    +
    107  REAL :: WA, WB, X1, X2
    +
    108 !
    +
    109  DATA npwafs/ &
    +
    110  73, 73, 73, 73, 73, 73, 73, 73, 72, 72, 72, 71, 71, 71, 70,&
    +
    111  70, 69, 69, 68, 67, 67, 66, 65, 65, 64, 63, 62, 61, 60, 60,&
    +
    112  59, 58, 57, 56, 55, 54, 52, 51, 50, 49, 48, 47, 45, 44, 43,&
    +
    113  42, 40, 39, 38, 36, 35, 33, 32, 30, 29, 28, 26, 25, 23, 22,&
    +
    114  20, 19, 17, 16, 14, 12, 11, 9, 8, 6, 5, 3, 2/
    +
    115 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    116 ! TRANSFORM GDS
    +
    117  iret=0
    +
    118 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    119 ! REG LAT/LON GRIDS HAVE 19 GDT ELEMENTS.
    +
    120  IF (igdtlen /= 19 .OR. numpts_thin/=3447 .OR. numpts_full/=5329) THEN
    +
    121  iret=1
    +
    122  RETURN
    +
    123  ENDIF
    +
    124 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    125 ! EXPAND THINNED GDS TO FULL GDS
    +
    126  IF(idir.GT.0) THEN
    +
    127  scan_mode=igdtmpl_thin(19)
    +
    128  iscale=igdtmpl_thin(10)*igdtmpl_thin(11)
    +
    129  IF(iscale==0) iscale=10**6
    +
    130  idlat=nint(1.25*float(iscale))
    +
    131  test1=all(opt_pts==npwafs)
    +
    132  test2=all(opt_pts==npwafs(73:1:-1))
    +
    133 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    134 ! SOME CHECKS TO ENSURE THIS IS A WAFS GRID
    +
    135  IF(scan_mode==64 .AND. igdtmpl_thin(9)==73 .AND. &
    +
    136  idlat==igdtmpl_thin(18) .AND. (test1 .OR. test2) ) THEN
    +
    137  igdtmpl_full=igdtmpl_thin
    +
    138  im=73
    +
    139  igdtmpl_full(8)=im
    +
    140  rlon1=float(igdtmpl_full(13))/float(iscale)
    +
    141  rlon2=float(igdtmpl_full(16))/float(iscale)
    +
    142  iscan=mod(igdtmpl_full(19)/128,2)
    +
    143  hi=(-1.)**iscan
    +
    144  dlon=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(im-1)
    +
    145  igdtmpl_full(17)=nint(dlon*float(iscale))
    +
    146  ELSE
    +
    147  iret=1
    +
    148  ENDIF
    +
    149 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    150 ! CONTRACT FULL GDS TO THINNED GDS
    +
    151  ELSEIF(idir.LT.0) THEN
    +
    152  scan_mode=igdtmpl_full(19)
    +
    153  iscale=igdtmpl_full(10)*igdtmpl_full(11)
    +
    154  IF(iscale==0) iscale=10**6
    +
    155  idlat=nint(1.25*float(iscale))
    +
    156  idlon=idlat
    +
    157 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    158 ! SOME CHECKS TO ENSURE THIS IS A WAFS GRID
    +
    159  IF(scan_mode==64 .AND. igdtmpl_full(8)==73 .AND. igdtmpl_full(9)==73 .AND. &
    +
    160  num_opt==73 .AND. idlat==igdtmpl_full(18) .AND. idlon==igdtmpl_full(17))THEN
    +
    161  igdtmpl_thin=igdtmpl_full
    +
    162  igdtmpl_thin(8)=missing
    +
    163  igdtmpl_thin(17)=missing
    +
    164  IF(igdtmpl_thin(12)==0) THEN ! IS LATITUDE OF ROW 1 THE EQUATOR?
    +
    165  opt_pts=npwafs
    +
    166  ELSE
    +
    167  opt_pts=npwafs(73:1:-1)
    +
    168  ENDIF
    +
    169  ELSE
    +
    170  iret=1
    +
    171  ENDIF
    +
    172  ENDIF
    +
    173 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    174 ! TRANSFORM FIELDS
    +
    175  IF(iret.EQ.0) THEN
    +
    176 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    177 ! EXPAND THINNED FIELDS TO FULL FIELDS
    +
    178  IF(idir.EQ.1) THEN
    +
    179  DO k=1,km
    +
    180  is1=0
    +
    181  is2=0
    +
    182  DO j=1,igdtmpl_full(9)
    +
    183  im1=opt_pts(j)
    +
    184  im2=igdtmpl_full(8)
    +
    185  rat1=float(im1-1)/float(im2-1)
    +
    186  DO i=1,im2
    +
    187  x1=(i-1)*rat1+1
    +
    188  ia=int(x1)
    +
    189  ia=min(max(ia,1),im1-1)
    +
    190  ib=ia+1
    +
    191  wa=ib-x1
    +
    192  wb=x1-ia
    +
    193  data_full(is2+i,k)=wa*data_thin(is1+ia,k)+wb*data_thin(is1+ib,k)
    +
    194  ENDDO
    +
    195  is1=is1+im1
    +
    196  is2=is2+im2
    +
    197  ENDDO
    +
    198  ENDDO
    +
    199 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    200 ! CONTRACT FULL FIELDS TO THINNED FIELDS
    +
    201  ELSEIF(idir.EQ.-1) THEN
    +
    202  DO k=1,km
    +
    203  is1=0
    +
    204  is2=0
    +
    205  DO j=1,igdtmpl_full(9)
    +
    206  im1=opt_pts(j)
    +
    207  im2=igdtmpl_full(8)
    +
    208  rat2=float(im2-1)/float(im1-1)
    +
    209  DO i=1,im1
    +
    210  x2=(i-1)*rat2+1
    +
    211  ia=int(x2)
    +
    212  ia=min(max(ia,1),im2-1)
    +
    213  ib=ia+1
    +
    214  wa=ib-x2
    +
    215  wb=x2-ia
    +
    216  data_thin(is1+i,k)=wa*data_full(is2+ia,k)+wb*data_full(is2+ib,k)
    +
    217  ENDDO
    +
    218  is1=is1+im1
    +
    219  is2=is2+im2
    +
    220  ENDDO
    +
    221  ENDDO
    +
    222  ENDIF
    +
    223  ENDIF
    +
    224 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    225  END SUBROUTINE ipxwafs
    +
    subroutine ipxwafs(IDIR, NUMPTS_THIN, NUMPTS_FULL, KM, NUM_OPT, OPT_PTS, IGDTLEN, IGDTMPL_THIN, DATA_THIN, IGDTMPL_FULL, DATA_FULL, IRET)
    Expand or contract wafs grids.
    Definition: ipxwafs.F90:84
    +
    +
    + + + + diff --git a/ver-5.1.0/jquery.js b/ver-5.1.0/jquery.js new file mode 100644 index 00000000..103c32d7 --- /dev/null +++ b/ver-5.1.0/jquery.js @@ -0,0 +1,35 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0a;a++)for(i in o[a])n=o[a][i],o[a].hasOwnProperty(i)&&void 0!==n&&(e[i]=t.isPlainObject(n)?t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=s.call(arguments,1),h=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(h=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(h=i&&i.jquery?h.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):h=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new i(o,this))})),h}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
    "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element +},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/** + * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler + * Licensed under MIT + * @author Ariel Flesler + * @version 2.1.2 + */ +;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
    ').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/ver-5.1.0/menu.js b/ver-5.1.0/menu.js new file mode 100644 index 00000000..2fe2214f --- /dev/null +++ b/ver-5.1.0/menu.js @@ -0,0 +1,51 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+=''; + } + return result; + } + + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchEnabled) { + if (serverSide) { + $('#main-menu').append('
  • '); + } else { + $('#main-menu').append('
  • '); + } + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/ver-5.1.0/menudata.js b/ver-5.1.0/menudata.js new file mode 100644 index 00000000..ac5b6fd0 --- /dev/null +++ b/ver-5.1.0/menudata.js @@ -0,0 +1,139 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Modules",url:"namespaces.html",children:[ +{text:"Modules List",url:"namespaces.html"}, +{text:"Module Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html",children:[ +{text:"a",url:"namespacemembers.html#index_a"}, +{text:"b",url:"namespacemembers.html#index_b"}, +{text:"c",url:"namespacemembers.html#index_c"}, +{text:"d",url:"namespacemembers.html#index_d"}, +{text:"e",url:"namespacemembers.html#index_e"}, +{text:"f",url:"namespacemembers.html#index_f"}, +{text:"g",url:"namespacemembers.html#index_g"}, +{text:"h",url:"namespacemembers.html#index_h"}, +{text:"i",url:"namespacemembers.html#index_i"}, +{text:"j",url:"namespacemembers.html#index_j"}, +{text:"k",url:"namespacemembers.html#index_k"}, +{text:"l",url:"namespacemembers.html#index_l"}, +{text:"m",url:"namespacemembers.html#index_m"}, +{text:"n",url:"namespacemembers.html#index_n"}, +{text:"o",url:"namespacemembers.html#index_o"}, +{text:"p",url:"namespacemembers.html#index_p"}, +{text:"r",url:"namespacemembers.html#index_r"}, +{text:"s",url:"namespacemembers.html#index_s"}, +{text:"u",url:"namespacemembers.html#index_u"}, +{text:"y",url:"namespacemembers.html#index_y"}]}, +{text:"Functions/Subroutines",url:"namespacemembers_func.html",children:[ +{text:"e",url:"namespacemembers_func.html#index_e"}, +{text:"f",url:"namespacemembers_func.html#index_f"}, +{text:"g",url:"namespacemembers_func.html#index_g"}, +{text:"i",url:"namespacemembers_func.html#index_i"}, +{text:"l",url:"namespacemembers_func.html#index_l"}, +{text:"m",url:"namespacemembers_func.html#index_m"}, +{text:"p",url:"namespacemembers_func.html#index_p"}, +{text:"r",url:"namespacemembers_func.html#index_r"}, +{text:"u",url:"namespacemembers_func.html#index_u"}]}, +{text:"Variables",url:"namespacemembers_vars.html",children:[ +{text:"a",url:"namespacemembers_vars.html#index_a"}, +{text:"b",url:"namespacemembers_vars.html#index_b"}, +{text:"c",url:"namespacemembers_vars.html#index_c"}, +{text:"d",url:"namespacemembers_vars.html#index_d"}, +{text:"e",url:"namespacemembers_vars.html#index_e"}, +{text:"g",url:"namespacemembers_vars.html#index_g"}, +{text:"h",url:"namespacemembers_vars.html#index_h"}, +{text:"i",url:"namespacemembers_vars.html#index_i"}, +{text:"j",url:"namespacemembers_vars.html#index_j"}, +{text:"k",url:"namespacemembers_vars.html#index_k"}, +{text:"l",url:"namespacemembers_vars.html#index_l"}, +{text:"m",url:"namespacemembers_vars.html#index_m"}, +{text:"n",url:"namespacemembers_vars.html#index_n"}, +{text:"o",url:"namespacemembers_vars.html#index_o"}, +{text:"p",url:"namespacemembers_vars.html#index_p"}, +{text:"r",url:"namespacemembers_vars.html#index_r"}, +{text:"s",url:"namespacemembers_vars.html#index_s"}, +{text:"y",url:"namespacemembers_vars.html#index_y"}]}]}]}, +{text:"Data Types List",url:"annotated.html",children:[ +{text:"Data Types List",url:"annotated.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Data Fields",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"j",url:"functions.html#index_j"}, +{text:"k",url:"functions.html#index_k"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"w",url:"functions.html#index_w"}]}, +{text:"Functions/Subroutines",url:"functions_func.html",children:[ +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"p",url:"functions_func.html#index_p"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"c",url:"functions_vars.html#index_c"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"e",url:"functions_vars.html#index_e"}, +{text:"g",url:"functions_vars.html#index_g"}, +{text:"h",url:"functions_vars.html#index_h"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"j",url:"functions_vars.html#index_j"}, +{text:"k",url:"functions_vars.html#index_k"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"o",url:"functions_vars.html#index_o"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"w",url:"functions_vars.html#index_w"}]}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"Globals",url:"globals.html",children:[ +{text:"All",url:"globals.html",children:[ +{text:"c",url:"globals.html#index_c"}, +{text:"d",url:"globals.html#index_d"}, +{text:"g",url:"globals.html#index_g"}, +{text:"i",url:"globals.html#index_i"}, +{text:"m",url:"globals.html#index_m"}, +{text:"n",url:"globals.html#index_n"}, +{text:"r",url:"globals.html#index_r"}, +{text:"s",url:"globals.html#index_s"}]}, +{text:"Functions/Subroutines",url:"globals_func.html",children:[ +{text:"c",url:"globals_func.html#index_c"}, +{text:"d",url:"globals_func.html#index_d"}, +{text:"g",url:"globals_func.html#index_g"}, +{text:"i",url:"globals_func.html#index_i"}, +{text:"m",url:"globals_func.html#index_m"}, +{text:"n",url:"globals_func.html#index_n"}, +{text:"r",url:"globals_func.html#index_r"}, +{text:"s",url:"globals_func.html#index_s"}]}]}]}]} diff --git a/ver-5.1.0/movect_8F90.html b/ver-5.1.0/movect_8F90.html new file mode 100644 index 00000000..439bf301 --- /dev/null +++ b/ver-5.1.0/movect_8F90.html @@ -0,0 +1,202 @@ + + + + + + + +NCEPLIBS-ip: movect.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    movect.F90 File Reference
    +
    +
    + +

    Move a vector along a great circle. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine movect (FLAT, FLON, TLAT, TLON, CROT, SROT)
     This subprogram provides the rotation parameters to move a vector along a great circle from one position to another while conserving its orientation with respect to the great circle. More...
     
    +

    Detailed Description

    +

    Move a vector along a great circle.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition in file movect.F90.

    +

    Function/Subroutine Documentation

    + +

    ◆ movect()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine movect (real, intent(in) FLAT,
    real, intent(in) FLON,
    real, intent(in) TLAT,
    real, intent(in) TLON,
    real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    + +

    This subprogram provides the rotation parameters to move a vector along a great circle from one position to another while conserving its orientation with respect to the great circle.

    +

    These rotation parameters are useful for vector interpolation.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    1999-04-08 Iredell generalize precision
    +
    Parameters
    + + + + + + + +
    [in]flatreal latitude in degrees from which to move the vector.
    [in]flonreal longitude in degrees from which to move the vector.
    [in]tlatreal latitude in degrees to which to move the vector.
    [in]tlonreal longitude in degrees to which to move the vector.
    [out]crotreal clockwise vector rotation cosine.
    [out]srotreal clockwise vector rotation sine. (uto=crot*ufrom-srot*vfrom; vto=srot*ufrom+crot*vfrom)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 25 of file movect.F90.

    + +

    Referenced by bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_vector(), bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_vector(), budget_interp_mod::interpolate_budget::interpolate_budget_vector(), neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_vector(), and neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_vector().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/movect_8F90.js b/ver-5.1.0/movect_8F90.js new file mode 100644 index 00000000..033e8055 --- /dev/null +++ b/ver-5.1.0/movect_8F90.js @@ -0,0 +1,4 @@ +var movect_8F90 = +[ + [ "movect", "movect_8F90.html#a5974e32c0cf90a65b39c68460d761882", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/movect_8F90_source.html b/ver-5.1.0/movect_8F90_source.html new file mode 100644 index 00000000..05a48391 --- /dev/null +++ b/ver-5.1.0/movect_8F90_source.html @@ -0,0 +1,146 @@ + + + + + + + +NCEPLIBS-ip: movect.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    movect.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    +
    25  SUBROUTINE movect(FLAT,FLON,TLAT,TLON,CROT,SROT)
    +
    26  IMPLICIT NONE
    +
    27 !
    +
    28  INTEGER, PARAMETER :: KD=selected_real_kind(15,45)
    +
    29 !
    +
    30  REAL, INTENT(IN ) :: FLAT, FLON
    +
    31  REAL, INTENT(IN ) :: TLAT, TLON
    +
    32  REAL, INTENT( OUT) :: CROT, SROT
    +
    33 !
    +
    34  REAL(KIND=kd), PARAMETER :: crdlim=0.9999999
    +
    35  REAL(KIND=kd), PARAMETER :: pi=3.14159265358979
    +
    36  REAL(KIND=kd), PARAMETER :: dpr=180./pi
    +
    37 !
    +
    38  REAL(KIND=kd) :: ctlat,stlat,cflat,sflat
    +
    39  REAL(KIND=kd) :: cdlon,sdlon,crd
    +
    40  REAL(KIND=kd) :: srd2rn,str,ctr,sfr,cfr
    +
    41 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    42 ! COMPUTE COSINE OF THE RADIAL DISTANCE BETWEEN THE POINTS.
    +
    43  ctlat=cos(tlat/dpr)
    +
    44  stlat=sin(tlat/dpr)
    +
    45  cflat=cos(flat/dpr)
    +
    46  sflat=sin(flat/dpr)
    +
    47  cdlon=cos((flon-tlon)/dpr)
    +
    48  sdlon=sin((flon-tlon)/dpr)
    +
    49  crd=stlat*sflat+ctlat*cflat*cdlon
    +
    50 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    51 ! COMPUTE ROTATIONS AT BOTH POINTS WITH RESPECT TO THE GREAT CIRCLE
    +
    52 ! AND COMBINE THEM TO GIVE THE TOTAL VECTOR ROTATION PARAMETERS.
    +
    53  IF(abs(crd).LE.crdlim) THEN
    +
    54  srd2rn=-1/(1-crd**2)
    +
    55  str=cflat*sdlon
    +
    56  ctr=cflat*stlat*cdlon-sflat*ctlat
    +
    57  sfr=ctlat*sdlon
    +
    58  cfr=ctlat*sflat*cdlon-stlat*cflat
    +
    59  crot=real(srd2rn*(ctr*cfr-str*sfr))
    +
    60  srot=real(srd2rn*(ctr*sfr+str*cfr))
    +
    61 ! USE A DIFFERENT APPROXIMATION FOR NEARLY COINCIDENT POINTS.
    +
    62 ! MOVING VECTORS TO ANTIPODAL POINTS IS AMBIGUOUS ANYWAY.
    +
    63  ELSE
    +
    64  crot=real(cdlon)
    +
    65  srot=real(sdlon*stlat)
    +
    66  ENDIF
    +
    67 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    68  END SUBROUTINE movect
    +
    subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
    This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
    Definition: movect.F90:26
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacebicubic__interp__mod.html b/ver-5.1.0/namespacebicubic__interp__mod.html new file mode 100644 index 00000000..d77fa1c8 --- /dev/null +++ b/ver-5.1.0/namespacebicubic__interp__mod.html @@ -0,0 +1,475 @@ + + + + + + + +NCEPLIBS-ip: bicubic_interp_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    bicubic_interp_mod Module Reference
    +
    +
    + +

    Bicubic interpolation routines for scalars and vectors. +More...

    + + + + +

    +Data Types

    interface  interpolate_bicubic
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine interpolate_bicubic_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram performs bicubic interpolation from any grid to any grid for scalar fields. More...
     
    subroutine interpolate_bicubic_vector (ipopt, grid_in, grid_out, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram performs bicubic interpolation from any grid to any grid for vector fields. More...
     
    +

    Detailed Description

    +

    Bicubic interpolation routines for scalars and vectors.

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    +

    Function/Subroutine Documentation

    + +

    ◆ interpolate_bicubic_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bicubic_interp_mod::interpolate_bicubic_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs bicubic interpolation from any grid to any grid for scalar fields.

    +

    Bitmaps are now allowed even when invalid points are within the bicubic template provided the minimum weight is reached.

    +

    Options allow choices between straight bicubic (ipopt(1)=0) and constrained bicubic (ipopt(1)=1) where the value is confined within the range of the surrounding 16 points.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(2)) which defaults to 50 (if ipopt(2)=-1).

    +

    Bilinear used within one grid length of boundaries. Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where for the input and output grids, respectively: as an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input. output bitmaps will only be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipoptInterpolation options.
      +
    • ipopt(1)=0 For straight bicubic;
    • +
    • ipopt(1)=1 For constrained bicubic where value is confined within the range of the surrounding 4 points.
    • +
    • ipopt(2) Is minimum percentage for mask (defaults to 50 if ipopt(2)=-1)
    • +
    +
    [in]grid_inInput grid.
    [in]grid_outOutput grid.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]giInput fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0).
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0).
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 successful interpolation,
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 80 of file bicubic_interp_mod.F90.

    + +
    +
    + +

    ◆ interpolate_bicubic_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bicubic_interp_mod::interpolate_bicubic_vector (integer, dimension(20), intent(in) ipopt,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) mi,
    integer, intent(in) mo,
    integer, intent(in) km,
    integer, dimension(km), intent(in) ibi,
    logical*1, dimension(mi,km), intent(in) li,
    real, dimension(mi,km), intent(in) ui,
    real, dimension(mi,km), intent(in) vi,
    integer, intent(inout) no,
    real, dimension(mo), intent(inout) rlat,
    real, dimension(mo), intent(inout) rlon,
    real, dimension(mo), intent(inout) crot,
    real, dimension(mo), intent(inout) srot,
    integer, dimension(km), intent(out) ibo,
    logical*1, dimension(mo,km), intent(out) lo,
    real, dimension(mo,km), intent(out) uo,
    real, dimension(mo,km), intent(out) vo,
    integer, intent(out) iret 
    )
    +
    +private
    +
    + +

    This subprogram performs bicubic interpolation from any grid to any grid for vector fields.

    +

    Bitmaps are now allowed even when invalid points are within the bicubic template provided the minimum weight is reached.

    +

    Options allow choices between straight bicubic (ipopt(1)=0) and constrained bicubic (ipopt(1)=1) where the value is confined within the range of the surrounding 16 points.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(2)) which defaults to 50 (if ipopt(2)=-1).

    +

    Bilinear used within one grid length of boundaries. Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where for the input and output grids, respectively: as an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input.

    +

    Output bitmaps will only be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipoptinteger (20) interpolation options
      +
    • ipopt(1)=0 for straight bicubic;
    • +
    • ipopt(1)=1 for constrained bicubic where value is confined within the range of the surrounding 4 points.
    • +
    • ipopt(2) is minimum percentage for mask (defaults to 50 if ipopt(2)=-1)
    • +
    +
    [in]grid_inInput grid.
    [in]grid_outOutput grid.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0).
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0).
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0).
    [in,out]crotVector rotation cosines (if igdtnumo<0) ugrid=crot*uearth-srot*vearth.
    [in,out]srotVector rotation sines (if igdtnumo<0) vgrid=srot*uearth+crot*vearth).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 338 of file bicubic_interp_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacebicubic__interp__mod.js b/ver-5.1.0/namespacebicubic__interp__mod.js new file mode 100644 index 00000000..bd0e9a49 --- /dev/null +++ b/ver-5.1.0/namespacebicubic__interp__mod.js @@ -0,0 +1,6 @@ +var namespacebicubic__interp__mod = +[ + [ "interpolate_bicubic", "interfacebicubic__interp__mod_1_1interpolate__bicubic.html", "interfacebicubic__interp__mod_1_1interpolate__bicubic" ], + [ "interpolate_bicubic_scalar", "namespacebicubic__interp__mod.html#a54a442e47f1be9511c1684a337d7e2d1", null ], + [ "interpolate_bicubic_vector", "namespacebicubic__interp__mod.html#a9d27db7d350fc2699aaf5057c3b53d16", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespacebilinear__interp__mod.html b/ver-5.1.0/namespacebilinear__interp__mod.html new file mode 100644 index 00000000..9bc7065d --- /dev/null +++ b/ver-5.1.0/namespacebilinear__interp__mod.html @@ -0,0 +1,465 @@ + + + + + + + +NCEPLIBS-ip: bilinear_interp_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    bilinear_interp_mod Module Reference
    +
    +
    + +

    Bilinear interpolation routines for scalars and vectors. +More...

    + + + + +

    +Data Types

    interface  interpolate_bilinear
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine interpolate_bilinear_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram performs bilinear interpolation from any grid to any grid for scalar fields. More...
     
    subroutine interpolate_bilinear_vector (ipopt, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     This subprogram performs bilinear interpolation from any grid to any grid for vector fields. More...
     
    +

    Detailed Description

    +

    Bilinear interpolation routines for scalars and vectors.

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    +

    Function/Subroutine Documentation

    + +

    ◆ interpolate_bilinear_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bilinear_interp_mod::interpolate_bilinear_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs bilinear interpolation from any grid to any grid for scalar fields.

    +

    Options allow varying the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(1)) which defaults to 50 (if ipopt(1)=-1). only horizontal interpolation is performed. if no input data is found near the output point, a spiral search may be invoked by setting ipopt(2)> 0. no searching is done if output point is outside the input grid. as an added bonus the number of output grid points and their latitudes and longitudes are also returned. on the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input. input bitmaps will be interpolated to output bitmaps. output bitmaps will also be created when the output grid extends outside of the domain of the input grid.

    +

    The output field is set to 0 where the output bitmap is off.

    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options
      +
    • ipopt(1) is minimum percentage for mask (defaults to 50 if ipopt(1)=-1)
    • +
    • ipopt(2) is width of square to examine in spiral search (defaults to no search if ipopt(2)=-1)
    • +
    +
    [in]grid_ininput grid
    [in]grid_outoutput grid
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [out]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibiinput bitmap flags
    [in]liinput bitmaps (if some ibi(k)=1)
    [in]giinput fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo<0)
    [in,out]rlatoutput latitudes in degrees (if igdtnumo<0)
    [in,out]rlonoutput longitudes in degrees (if igdtnumo<0)
    [out]ibooutput bitmap flags
    [out]looutput bitmaps (always output)
    [out]gooutput fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 72 of file bilinear_interp_mod.F90.

    + +
    +
    + +

    ◆ interpolate_bilinear_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine bilinear_interp_mod::interpolate_bilinear_vector (integer, dimension(20), intent(in) ipopt,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(inout) CROT,
    real, dimension(mo), intent(inout) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs bilinear interpolation from any grid to any grid for vector fields.

    +

    Options allow varying the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(1)) which defaults to 50 (if ipopt(1)=-1).

    +

    Only horizontal interpolation is performed. the input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. on the other hand, the data may be interpolated to a set of station points if igdtnumo < 0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters. input bitmaps will be interpolated to output bitmaps. output bitmaps will also be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options
      +
    • ipopt(1) is minimum percentage for mask (defaults to 50 if ipopt(1)=-1)
    • +
    +
    [in]grid_inInput grid
    [in]grid_outOutput grid
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [out]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibiinput bitmap flags
    [in]liinput bitmaps (if some ibi(k)=1)
    [in]uiinput u-component fields to interpolate
    [in]viinput v-component fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo<0)
    [in,out]rlatoutput latitudes in degrees (if igdtnumo<0)
    [in,out]rlonoutput longitudes in degrees (if igdtnumo<0)
    [in,out]crotvector rotation cosines (if igdtnumo<0) ugrid=crot*uearth-srot*vearth;
    [in,out]srotvector rotation sines (if igdtnumo<0) vgrid=srot*uearth+crot*vearth)
    [out]ibooutput bitmap flags
    [out]looutput bitmaps (always output)
    [out]uooutput u-component fields interpolated
    [out]vooutput v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    + +

    Definition at line 329 of file bilinear_interp_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacebilinear__interp__mod.js b/ver-5.1.0/namespacebilinear__interp__mod.js new file mode 100644 index 00000000..b8f83c44 --- /dev/null +++ b/ver-5.1.0/namespacebilinear__interp__mod.js @@ -0,0 +1,6 @@ +var namespacebilinear__interp__mod = +[ + [ "interpolate_bilinear", "interfacebilinear__interp__mod_1_1interpolate__bilinear.html", "interfacebilinear__interp__mod_1_1interpolate__bilinear" ], + [ "interpolate_bilinear_scalar", "namespacebilinear__interp__mod.html#a34d2eea4682104097dccf3e7ab6a9398", null ], + [ "interpolate_bilinear_vector", "namespacebilinear__interp__mod.html#abc218f8774d2af09299eb299d6f38e04", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespacebudget__interp__mod.html b/ver-5.1.0/namespacebudget__interp__mod.html new file mode 100644 index 00000000..1ee077a1 --- /dev/null +++ b/ver-5.1.0/namespacebudget__interp__mod.html @@ -0,0 +1,476 @@ + + + + + + + +NCEPLIBS-ip: budget_interp_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    budget_interp_mod Module Reference
    +
    +
    + +

    Budget interpolation routines for scalars and vectors. +More...

    + + + + +

    +Data Types

    interface  interpolate_budget
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine interpolate_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields. More...
     
    subroutine interpolate_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields. More...
     
    +

    Detailed Description

    +

    Budget interpolation routines for scalars and vectors.

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser, Eric Engle
    +
    Date
    July 2021
    +

    Function/Subroutine Documentation

    + +

    ◆ interpolate_budget_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine budget_interp_mod::interpolate_budget_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Performs budget interpolation from any grid to any grid (or to random station points) for scalar fields.

    +

    The algorithm simply computes (weighted) averages of bilinearly interpolated points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    A special interpolation is done if ipopt(2)=-2. in this case, the boxes stretch nearly all the way to each of the neighboring grid points and the weights are the adjoint of the bilinear interpolation weights. This case gives quasi-second-order budget interpolation.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    In cases where there is no or insufficient valid input data, the user may choose to search for the nearest valid data. this is invoked by setting ipopt(20) to the width of the search square. The default is 1 (no search). Squares are searched for valid data in a spiral pattern starting from the center. No searching is done where the output grid is outside the input grid.

    +

    Only horizontal interpolation is performed.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipoptInterpolation options
      +
    • ipopt(1) is number of radius points (defaults to 2 if ipopt(1)=-1).
    • +
    • ipopt(2:2+ipopt(1)) are respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1).
    • +
    • ipopt(3+ipopt(1)) is minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1).
    • +
    +
    [in]grid_inInput grid
    [in]grid_outOutput grid
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]giInput fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0).
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0).
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 32 Invalid budget method parameters.
    • +
    +
    +
    +
    +
    Author
    Marke Iredell, George Gayno, Kyle Gerheiser, Eric Engle
    +
    Date
    July 2021
    + +

    Definition at line 94 of file budget_interp_mod.F90.

    + +
    +
    + +

    ◆ interpolate_budget_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine budget_interp_mod::interpolate_budget_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    This subprogram performs budget interpolation from any grid to any grid (or to random station points) for vector fields.

    +

    The algorithm simply computes (weighted) averages of bilinearly interpolated points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    A special interpolation is done if ipopt(2)=-2. in this case, the boxes stretch nearly all the way to each of the neighboring grid points and the weights are the adjoint of the bilinear interpolation weights. This case gives quasi-second-order budget interpolation.

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    In cases where there is no or insufficient valid input data, the user may choose to search for the nearest valid data. this is invoked by setting ipopt(20) to the width of the search square. The default is 1 (no search). Squares are searched for valid data in a spiral pattern starting from the center. No searching is done where the output grid is outside the input grid.

    +

    Only horizontal interpolation is performed.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options ipopt(1) Number of radius points (defaults to 2 if ipopt(1)=-1); ipopt(2:2+ipopt(1)) Respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1). ipopt(3+ipopt(1)) Minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1)
    [in]grid_inInput grid.
    [in]grid_outOutput grid.
    [in]miskip Number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [out]moskip Number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if some ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [in,out]noNumber of output points (only if igdtnumo<0)
    [in,out]rlatOutput latitudes in degrees (if igdtnumo<0)
    [in,out]rlonOutput longitudes in degrees (if igdtnumo<0)
    [in,out]crotVector rotation cosines. If interpolating subgrid ugrid=crot * uearth - srot * vearth.
    [in,out]srotVector rotation sines. If interpolating subgrid vgrid = srot * uearth + crot * vearth.
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 32 Invalid budget method parameters.
    • +
    +
    +
    +
    +
    Author
    Marke Iredell, George Gayno, Kyle Gerheiser, Eric Engle
    +
    Date
    July 2021
    + +

    Definition at line 423 of file budget_interp_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacebudget__interp__mod.js b/ver-5.1.0/namespacebudget__interp__mod.js new file mode 100644 index 00000000..7a866c1c --- /dev/null +++ b/ver-5.1.0/namespacebudget__interp__mod.js @@ -0,0 +1,6 @@ +var namespacebudget__interp__mod = +[ + [ "interpolate_budget", "interfacebudget__interp__mod_1_1interpolate__budget.html", "interfacebudget__interp__mod_1_1interpolate__budget" ], + [ "interpolate_budget_scalar", "namespacebudget__interp__mod.html#a09bd6535b0c2e1022cfde39c39d14466", null ], + [ "interpolate_budget_vector", "namespacebudget__interp__mod.html#abc99486ee9c0091c1514af6114d4e803", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceearth__radius__mod.html b/ver-5.1.0/namespaceearth__radius__mod.html new file mode 100644 index 00000000..b72f743f --- /dev/null +++ b/ver-5.1.0/namespaceearth__radius__mod.html @@ -0,0 +1,183 @@ + + + + + + + +NCEPLIBS-ip: earth_radius_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    earth_radius_mod Module Reference
    +
    +
    + +

    Determine earth radius and shape. +More...

    + + + + + +

    +Functions/Subroutines

    subroutine, public earth_radius (IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
     Determine earth radius and shape. More...
     
    +

    Detailed Description

    +

    Determine earth radius and shape.

    +
    Author
    Gayno, Kyle Gerheiser
    +

    Function/Subroutine Documentation

    + +

    ◆ earth_radius()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public earth_radius_mod::earth_radius (integer, dimension(igdtlen), intent(in) IGDTMPL,
    integer, intent(in) IGDTLEN,
    real, intent(out) RADIUS,
    real, intent(out) ECCEN_SQUARED 
    )
    +
    + +

    Determine earth radius and shape.

    +

    Determine the radius and shape of the earth from the grib 2 grid definition template array - section 3.

    +
    Parameters
    + + + + + +
    [in]igdtmplinteger (igdtlen) grid definition template array. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. For all map projections recognized by iplib, the entries use by this routine are:
      +
    • 1 shape of earth, section 3, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30
    • +
    +
    [in]igdtleninteger number of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [out]radiusreal earth radius in meters. For ellipitical earths, this is the semi major axis. See "map projectsions - a + working manual" by Snyder (1987) for details.
    [out]eccen_squaredreal earth eccentricity squared
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-07-14
    + +

    Definition at line 40 of file earth_radius_mod.F90.

    + +

    Referenced by spectral_interp_mod::polates4::polates4_grib2(), and spectral_interp_mod::polatev4::polatev4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacegdswzd__c__mod.html b/ver-5.1.0/namespacegdswzd__c__mod.html new file mode 100644 index 00000000..7fff573a --- /dev/null +++ b/ver-5.1.0/namespacegdswzd__c__mod.html @@ -0,0 +1,556 @@ + + + + + + + +NCEPLIBS-ip: gdswzd_c_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    gdswzd_c_mod Module Reference
    +
    +
    + +

    Module that contains C wrapper for routine gdswzd(). +More...

    + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_c (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     C wrapper for routine gdswzd(). More...
     
    subroutine gdswzd_c_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     C wrapper for routine gdswzd. More...
     
    +

    Detailed Description

    +

    Module that contains C wrapper for routine gdswzd().

    +
    Author
    JOVIC
    +
    Date
    2016-04-10
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_c()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_c_mod::gdswzd_c (integer(kind=c_int), intent(in), value IGDTNUM,
    integer(kind=c_int), dimension(igdtlen), intent(in) IGDTMPL,
    integer(kind=c_int), intent(in), value IGDTLEN,
    integer(kind=c_int), intent(in), value IOPT,
    integer(kind=c_int), intent(in), value NPTS,
    real(kind=c_double), intent(in), value FILL,
    real(kind=c_double), dimension(npts), intent(inout) XPTS,
    real(kind=c_double), dimension(npts), intent(inout) YPTS,
    real(kind=c_double), dimension(npts), intent(inout) RLON,
    real(kind=c_double), dimension(npts), intent(inout) RLAT,
    integer(kind=c_int), intent(out) NRET,
    real(kind=c_double), dimension(npts), intent(out) CROT,
    real(kind=c_double), dimension(npts), intent(out) SROT,
    real(kind=c_double), dimension(npts), intent(out) XLON,
    real(kind=c_double), dimension(npts), intent(out) XLAT,
    real(kind=c_double), dimension(npts), intent(out) YLON,
    real(kind=c_double), dimension(npts), intent(out) YLAT,
    real(kind=c_double), dimension(npts), intent(out) AREA 
    )
    +
    + +

    C wrapper for routine gdswzd().

    +

    Use this routine to call gdswzd() from a C or C++ program. Takes advantage of the fortran/c interoperability standard.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    2016-04-10 Jovic initial version.
    2016-04-26 G. Gayno update for grib 2
    +

    +Example: Mixed precsion iplib call

    +
    include "iplib.h"
    +
    +
    int *igdtmpl;
    +
    int igdtnum, igdtlen, iopt, npts, nret;
    +
    double fill;
    +
    double *xpts, *ypts, *rlon, *rlat;
    +
    double *crot, *srot, *xlon, *xlat, *ylon, *ylat, *area;
    +
    +
    gdswzd(igdtnum, igdtmpl, igdtlen, iopt, npts,
    +
    fill, xpts, ypts, rlon, rlat,
    +
    &nret, crot, srot, xlon,
    +
    xlat, ylon, ylat, area);
    +
    void gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area)
    gdswzd() interface for C for _4 build of library.
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    [in]igdtnumgrid definition template number. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure.
      +
    • 00 equidistant cylindrical
    • +
    • 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 mercator cyclindrical
    • +
    • 20 polar stereographic azimuthal
    • +
    • 30 lambert conformal conical
    • +
    • 40 gaussian equidistant cyclindrical
    • +
    +
    [in]igdtmpl(igdtlen) grid definition template array. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure for section three. all projections:
      +
    • 1 shape of earth, octet 15
    • +
    • 2 scale factor of spherical earth radius, octet 16
    • +
    • 3 scaled value of radius of spherical earth, octets 17-20
    • +
    • 4 scale factor of major axis of elliptical earth, octet 21
    • +
    • 5 scaled value of major axis of elliptical earth, octets 22-25
    • +
    • 6 scale factor of minor axis of elliptical earth, octet 26
    • +
    • 7 scaled value of minor axis of elliptical earth, octets 27-30 equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42.
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72 mercator cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 tangent latitude, octets 48-51
    • +
    • 14 latitude of last point, octets 52-55
    • +
    • 15 longitude of last point, octets 56-59
    • +
    • 16 scanning mode flags, octet 60
    • +
    • 17 orientation of grid, octets 61-64
    • +
    • 18 longitudinal grid length, octets 65-68
    • +
    • 19 latitudinal grid length, octets 69-72 Lambert conformal conical:
    • +
    • 8 number of points along x-axis, octs 31-34
    • +
    • 9 number of points along y-axis, octs 35-38
    • +
    • 10 latitude of first point, octets 39-42
    • +
    • 11 longitude of first point, octets 43-46
    • +
    • 12 resolution of component flag, octet 47
    • +
    • 13 latitude where grid lengths specified, octets 48-51
    • +
    • 14 longitude of meridian that is parallel to y-axis, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode, octet 65
    • +
    • 19 first tangent latitude from pole, octets 66-69
    • +
    • 20 second tangent latitude from pole, octets 70-73
    • +
    • 21 latitude of south pole of projection, octets 74-77
    • +
    • 22 longitude of south pole of projection, octets 78-81 gaussian cylindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 number of parallels between pole and equator, octets 68-71
    • +
    • 19 scanning mode, octet 72 polar stereographic azimuthal:
    • +
    • 8 number of points along x-axis, octets 31-34
    • +
    • 9 number of points along y-axis, octets 35-38
    • +
    • 10 latitude of first grid point, octets 39-42
    • +
    • 11 longitude of first grid point, octets 43-46
    • +
    • 12 resolution and component flags, octet 47
    • +
    • 13 true latitude, octets 48-51
    • +
    • 14 orientation longitude, octets 52-55
    • +
    • 15 x-direction grid length, octets 56-59
    • +
    • 16 y-direction grid length, octets 60-63
    • +
    • 17 projection center flag, octet 64
    • +
    • 18 scanning mode flags, octet 65 rotated equidistant cyclindrical:
    • +
    • 8 number of points along a parallel, octs 31-34
    • +
    • 9 number of points along a meridian, octs 35-38
    • +
    • 10 basic angle of initial production domain, octets 39-42
    • +
    • 11 subdivisions of basic angle, octets 43-46
    • +
    • 12 latitude of first grid point, octets 47-50
    • +
    • 13 longitude of first grid point, octets 51-54
    • +
    • 14 resolution and component flags, octet 55
    • +
    • 15 latitude of last grid point, octets 56-59
    • +
    • 16 longitude of last grid point, octets 60-63
    • +
    • 17 i-direction increment, octets 64-67
    • +
    • 18 j-direction increment, octets 68-71
    • +
    • 19 scanning mode, octet 72
    • +
    • 20 latitude of southern pole of projection, octets 73-76
    • +
    • 21 longitude of southern pole of projection, octets 77-80
    • +
    • 22 angle of rotation of projection, octs 81-84
    • +
    +
    [in]igdtlennumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsinteger maximum number of coordinates
    [in]fillreal fill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xptsreal (npts) grid x point coordinates if iopt>0
    [in,out]yptsreal (npts) grid y point coordinates if iopt>0
    [in,out]rlonreal (npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlatreal (npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed (-1 if projection unrecognized)
    [out]crot(npts) clockwise vector rotation cosines
    [out]srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth, vgrid=srot*uearth+crot*vearth)
    [out]xlon(npts) dx/dlon in 1/degrees
    [out]xlat(npts) dx/dlat in 1/degrees
    [out]ylon(npts) dy/dlon in 1/degrees
    [out]ylat(npts) dy/dlat in 1/degrees
    [out]AREA(npts) area weights in m**2 (Proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    JOVIC
    +
    Date
    2016-04-10
    + +

    Definition at line 173 of file gdswzd_c.F90.

    + +
    +
    + +

    ◆ gdswzd_c_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_c_mod::gdswzd_c_grib1 (integer(kind=c_int), dimension(200), intent(in) KGDS,
    integer(kind=c_int), intent(in), value IOPT,
    integer(kind=c_int), intent(in), value NPTS,
    real(kind=c_double), intent(in), value FILL,
    real(kind=c_double), dimension(npts), intent(inout) XPTS,
    real(kind=c_double), dimension(npts), intent(inout) YPTS,
    real(kind=c_double), dimension(npts), intent(inout) RLON,
    real(kind=c_double), dimension(npts), intent(inout) RLAT,
    integer(kind=c_int), intent(out) NRET,
    real(kind=c_double), dimension(npts), intent(out) CROT,
    real(kind=c_double), dimension(npts), intent(out) SROT,
    real(kind=c_double), dimension(npts), intent(out) XLON,
    real(kind=c_double), dimension(npts), intent(out) XLAT,
    real(kind=c_double), dimension(npts), intent(out) YLON,
    real(kind=c_double), dimension(npts), intent(out) YLAT,
    real(kind=c_double), dimension(npts), intent(out) AREA 
    )
    +
    + +

    C wrapper for routine gdswzd.

    +

    Use this routine to call 'gdswzd' from a C or C++ program. Takes advantage of the fortran/c interoperability standard.

    +

    +Example: mixed precsion iplib call

    +
    include "iplib.h"
    +
    +
    int kgds[200];
    +
    int iopt, npts, nret;
    +
    double fill;
    +
    double *xpts, *ypts, *rlon, *rlat;
    +
    double *crot, *srot, *xlon, *xlat, *ylon, *ylat, *area;
    +
    +
    gdswzd(kgds, iopt, npts, fill,
    +
    xpts, ypts, rlon, rlat,
    +
    &nret, crot, srot, xlon,
    +
    xlat, ylon, ylat, area);
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    kgds(200) gds parameters as decoded by w3fi63.
    ioptoption flag
      +
    • 0 to compute earth coords of all the grid points
    • +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    nptsmaximum number of coordinates
    fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    xpts(npts) grid x point coordinates if iopt>0
    ypts(npts) grid y point coordinates if iopt>0
    [out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed (-1 if projection unrecognized)
    [out]crot(npts) clockwise vector rotation cosines
    [out]srot(npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlon(npts) dx/dlon in 1/degrees
    [out]xlat(npts) dx/dlat in 1/degrees
    [out]ylon(npts) dy/dlon in 1/degrees
    [out]ylat(npts) dy/dlat in 1/degrees
    [out]area(npts) area weights in m**2 (proportional to the square of the map factor in the case of conformal projections.)
    +
    +
    +
    Author
    JOVIC
    +
    Date
    2016-04-10
    + +

    Definition at line 259 of file gdswzd_c.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacegdswzd__mod.html b/ver-5.1.0/namespacegdswzd__mod.html new file mode 100644 index 00000000..9d403096 --- /dev/null +++ b/ver-5.1.0/namespacegdswzd__mod.html @@ -0,0 +1,1309 @@ + + + + + + + +NCEPLIBS-ip: gdswzd_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    gdswzd_mod Module Reference
    +
    +
    + +

    Driver module for gdswzd routines. +More...

    + + + + +

    +Data Types

    interface  gdswzd
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_1d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following: More...
     
    subroutine gdswzd_2d_array (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays): More...
     
    subroutine, public gdswzd_2d_array_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib grid description section and returns one of the following (for 2-d arrays): More...
     
    subroutine, public gdswzd_grib1 (KGDS, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib grid description section and returns one of the following (for 1-d arrays): More...
     
    subroutine gdswzd_grid (grid, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Returns one of the following for a grid object: More...
     
    subroutine gdswzd_scalar (IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Decodes the grib 2 grid definition template and returns one of the following (for scalars): More...
     
    +

    Detailed Description

    +

    Driver module for gdswzd routines.

    +

    These routines do the following for several map projections:

      +
    • Convert from earth to grid coordinates or vice versa.
    • +
    • Compute vector rotation sines and cosines.
    • +
    • Compute map jacobians.
    • +
    • Compute grid box area.
    • +
    +

    Map projections include:

      +
    • Equidistant Cyclindrical
    • +
    • Mercator Cylindrical
    • +
    • Gaussian Cylindrical
    • +
    • Polar stereographic
    • +
    • Lambert Conformal Conic
    • +
    • Rotated Equidistant Cyclindrical ("E" and non-"E" staggers)
    • +
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    Jan 2015
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_1d_array()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd_1d_array (integer, intent(in) IGDTNUM,
    integer, dimension(igdtlen), intent(in) IGDTMPL,
    integer, intent(in) IGDTLEN,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib 2 grid definition template and returns one of the following:

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    The current code recognizes the following projections, where "igdtnum" is the grid definition template number:

      +
    • igdtnum=00 Equidistant Cylindrical
    • +
    • igdtnum=01 Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • igdtnum=10 Mercator Cyclindrical
    • +
    • igdtnum=20 Polar Stereographic Azimuthal
    • +
    • igdtnum=30 Lambert Conformal Conical
    • +
    • igdtnum=40 Gaussian Equidistant Cyclindrical
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + +
    [in]igdtnumGrid definition template number. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - Equidistant Cylindrical
    • +
    • 01 - Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • 10 - Mercator Cyclindrical
    • +
    • 20 - Polar Stereographic Azimuthal
    • +
    • 30 - Lambert Conformal Conical
    • +
    • 40 - Gaussian Equidistant Cyclindrical
    • +
    +
    [in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All Map Projections:

      +
    • 1: Shape of earth, octet 15.
    • +
    • 2: Scale factor of spherical earth radius, octet 16.
    • +
    • 3: Scaled value of radius of spherical earth, octets 17-20.
    • +
    • 4: Scale factor of major axis of elliptical earth, octet 21.
    • +
    • 5: Scaled value of major axis of elliptical earth, octets 22-25.
    • +
    • 6: Scale factor of minor axis of elliptical earth, octet 26.
    • +
    • 7: Scaled value of minor axis of elliptical earth, octets 27-30.
    • +
    +

    Equidistant Cyclindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Basic angle of initial production domain, octets 39-42.
    • +
    • 11: Subdivisions of basic angle, octets 43-46.
    • +
    • 12: Latitude of first grid point, octets 47-50.
    • +
    • 13: Longitude of first grid point, octets 51-54.
    • +
    • 14: Resolution and component flags, octet 55.
    • +
    • 15: Latitude of last grid point, octets 56-59.
    • +
    • 16: Longitude of last grid point, octets 60-63.
    • +
    • 17: i-direction increment, octets 64-67.
    • +
    • 18: j-direction increment, octets 68-71.
    • +
    • 19: Scanning mode, octet 72.
    • +
    +

    Mercator Cyclindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Latitude of first point, octets 39-42.
    • +
    • 11: Longitude of first point, octets 43-46.
    • +
    • 12: Resolution and component flags, octet 47.
    • +
    • 13: Tangent latitude, octets 48-51.
    • +
    • 14: Latitude of last point, octets 52-55.
    • +
    • 15: Longitude of last point, octets 56-59.
    • +
    • 16: Scanning mode flags, octet 60.
    • +
    • 17: Orientation of grid, octets 61-64.
    • +
    • 18: Longitudinal grid length, octets 65-68.
    • +
    • 19: Latitudinal grid length, octets 69-72.
    • +
    +

    Lambert Conformal Conical:

      +
    • 8: Number of points along x-axis, octs 31-34.
    • +
    • 9: Number of points along y-axis, octs 35-38.
    • +
    • 10: Latitude of first point, octets 39-42.
    • +
    • 11: Longitude of first point, octets 43-46.
    • +
    • 12: Resolution of component flag, octet 47.
    • +
    • 13: Latitude where grid lengths specified,octets 48-51.
    • +
    • 14: Longitude of meridian that is parallel to y-axis, octets 52-55.
    • +
    • 15: x-direction grid length, octets 56-59.
    • +
    • 16: y-direction grid length, octets 60-63.
    • +
    • 17: Projection center flag, octet 64.
    • +
    • 18: Scanning mode, octet 65.
    • +
    • 19: First tangent latitude from pole, octets 66-69.
    • +
    • 20: Second tangent latitude from pole, octets 70-73.
    • +
    • 21: Latitude of south pole of projection, octets 74-77.
    • +
    • 22: Longitude of south pole of projection, octets 78-81.
    • +
    +

    Gaussian Cylindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Basic angle of initial production domain, octets 39-42.
    • +
    • 11: Subdivisions of basic angle, octets 43-46.
    • +
    • 12: Latitude of first grid point, octets 47-50.
    • +
    • 13: Longitude of first grid point, octets 51-54.
    • +
    • 14: Resolution and component flags, octet 55.
    • +
    • 15: Latitude of last grid point, octets 56-59.
    • +
    • 16: Longitude of last grid point, octets 60-63.
    • +
    • 17: i-direction increment, octets 64-67.
    • +
    • 18: Number of parallels between pole and equator, octets 68-71.
    • +
    • 19: Scanning mode, octet 72.
    • +
    +

    Polar Stereographic Azimuthal:

      +
    • 8: Number of points along x-axis, octets 31-34.
    • +
    • 9: Number of points along y-axis, octets 35-38.
    • +
    • 10: Latitude of first grid point, octets 39-42.
    • +
    • 11: Longitude of first grid point, octets 43-46.
    • +
    • 12: Resolution and component flags, octet 47.
    • +
    • 13: True latitude, octets 48-51.
    • +
    • 14: Orientation longitude, octets 52-55.
    • +
    • 15: x-direction grid length, octets 56-59.
    • +
    • 16: y-direction grid length, octets 60-63.
    • +
    • 17: Projection center flag, octet 64.
    • +
    • 18: Scanning mode flags, octet 65.
    • +
    +

    Rotated Equidistant Cyclindrical:

      +
    • 8: Number of points along a parallel, octs 31-34.
    • +
    • 9: Number of points along a meridian, octs 35-38.
    • +
    • 10: Basic angle of initial production domain, octets 39-42.
    • +
    • 11: Subdivisions of basic angle, octets 43-46.
    • +
    • 12: Latitude of first grid point, octets 47-50.
    • +
    • 13: Longitude of first grid point, octets 51-54.
    • +
    • 14: Resolution and component flags, octet 55.
    • +
    • 15: Latitude of last grid point, octets 56-59.
    • +
    • 16: Longitude of last grid point, octets 60-63.
    • +
    • 17: i-direction increment, octets 64-67.
    • +
    • 18: j-direction increment, octets 68-71.
    • +
    • 19: Scanning mode, octet 72.
    • +
    • 20: Latitude of southern pole of projection, octets 73-76.
    • +
    • 21: Longitude of southern pole of projection, octets 77-80.
    • +
    • 22: Angle of rotation of projection, octs 81-84.
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]igdtlenNumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    Jan 2015
    + +

    Definition at line 665 of file gdswzd_mod.F90.

    + +

    Referenced by gdswzd_mod::gdswzd::gdswzd_2d_array(), and gdswzd_mod::gdswzd::gdswzd_scalar().

    + +
    +
    + +

    ◆ gdswzd_2d_array()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd_2d_array (integer, intent(in) IGDTNUM,
    integer, dimension(igdtlen), intent(in) IGDTMPL,
    integer, intent(in) IGDTLEN,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(:,:), intent(inout) XPTS,
    real, dimension(:,:), intent(inout) YPTS,
    real, dimension(:,:), intent(inout) RLON,
    real, dimension(:,:), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(:,:), intent(out), optional CROT,
    real, dimension(:,:), intent(out), optional SROT,
    real, dimension(:,:), intent(out), optional XLON,
    real, dimension(:,:), intent(out), optional XLAT,
    real, dimension(:,:), intent(out), optional YLON,
    real, dimension(:,:), intent(out), optional YLAT,
    real, dimension(:,:), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib 2 grid definition template and returns one of the following (for 2d-arrays):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    The current code recognizes the following projections, where "igdtnum" is the grid definition template number:

      +
    • igdtnum=00 Equidistant Cylindrical
    • +
    • igdtnum=01 Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • igdtnum=10 Mercator Cyclindrical
    • +
    • igdtnum=20 Polar Stereographic Azimuthal
    • +
    • igdtnum=30 Lambert Conformal Conical
    • +
    • igdtnum=40 Gaussian Equidistant Cyclindrical
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    [in]igdtnumGrid definition template number.
    [in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure. See igdtmpl definition in gdswzd_1d_array() for full details.
    [in]igdtlenNumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    Jan 2015
    + +

    Definition at line 459 of file gdswzd_mod.F90.

    + +
    +
    + +

    ◆ gdswzd_2d_array_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public gdswzd_mod::gdswzd_2d_array_grib1 (integer, dimension(200), intent(in) KGDS,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(:,:), intent(inout) XPTS,
    real, dimension(:,:), intent(inout) YPTS,
    real, dimension(:,:), intent(inout) RLON,
    real, dimension(:,:), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(:,:), intent(out), optional CROT,
    real, dimension(:,:), intent(out), optional SROT,
    real, dimension(:,:), intent(out), optional XLON,
    real, dimension(:,:), intent(out), optional XLAT,
    real, dimension(:,:), intent(out), optional YLON,
    real, dimension(:,:), intent(out), optional YLAT,
    real, dimension(:,:), intent(out), optional AREA 
    )
    +
    + +

    Decodes the grib grid description section and returns one of the following (for 2-d arrays):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +

    The current code recognizes the following projections:

      +
    • kgds(1)=000 Equidistant Cylindrical
    • +
    • kgds(1)=001 Mercator Cylindrical
    • +
    • kgds(1)=003 lambert Conformal Conical
    • +
    • kgds(1)=004 Gaussian Cylindrical
    • +
    • kgds(1)=005 Polar Stereographic azimuthal
    • +
    • kgds(1)=203 E-staggered Rotated Equidistant Cylindrical
    • +
    • kgds(1)=205 B-staggered Rotated Equidistant Cylindrical
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]kgdsGDS parameters as decoded by w3fi63.
    +
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    April 1996
    + +

    Definition at line 850 of file gdswzd_mod.F90.

    + +
    +
    + +

    ◆ gdswzd_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public gdswzd_mod::gdswzd_grib1 (integer, dimension(200), intent(in) KGDS,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    + +

    Decodes the grib grid description section and returns one of the following (for 1-d arrays):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +

    The current code recognizes the following projections:

      +
    • kgds(1)=000 Equidistant Cylindrical
    • +
    • kgds(1)=001 Mercator Cylindrical
    • +
    • kgds(1)=003 lambert Conformal Conical
    • +
    • kgds(1)=004 Gaussian Cylindrical
    • +
    • kgds(1)=005 Polar Stereographic azimuthal
    • +
    • kgds(1)=203 E-staggered Rotated Equidistant Cylindrical
    • +
    • kgds(1)=205 B-staggered Rotated Equidistant Cylindrical
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]kgdsGDS parameters as decoded by w3fi63.
    +
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    April 1996
    + +

    Definition at line 758 of file gdswzd_mod.F90.

    + +
    +
    + +

    ◆ gdswzd_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd_grid (class(ip_grid), intent(in) grid,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Returns one of the following for a grid object:

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]gridGrid to call gdswzd on.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 105 of file gdswzd_mod.F90.

    + +

    Referenced by gdswzd_mod::gdswzd::gdswzd_1d_array(), gdswzd_mod::gdswzd::gdswzd_2d_array_grib1(), and gdswzd_mod::gdswzd::gdswzd_grib1().

    + +
    +
    + +

    ◆ gdswzd_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine gdswzd_mod::gdswzd_scalar (integer, intent(in) IGDTNUM,
    integer, dimension(igdtlen), intent(in) IGDTMPL,
    integer, intent(in) IGDTLEN,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, intent(inout) XPTS,
    real, intent(inout) YPTS,
    real, intent(inout) RLON,
    real, intent(inout) RLAT,
    integer, intent(out) NRET,
    real, intent(out), optional CROT,
    real, intent(out), optional SROT,
    real, intent(out), optional XLON,
    real, intent(out), optional XLAT,
    real, intent(out), optional YLON,
    real, intent(out), optional YLAT,
    real, intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Decodes the grib 2 grid definition template and returns one of the following (for scalars):

    +
      +
    • iopt=0 Grid and earth coordinates of all grid points.
    • +
    • iopt=+1 Earth coordinates of selected grid coordinates.
    • +
    • iopt=-1 Grid coordinates of selected earth coordinates.
    • +
    +

    The current code recognizes the following projections, where "igdtnum" is the grid definition template number:

      +
    • igdtnum=00 Equidistant Cylindrical
    • +
    • igdtnum=01 Rotated Equidistant Cylindrical. "E" and non-"E" staggered
    • +
    • igdtnum=10 Mercator Cyclindrical
    • +
    • igdtnum=20 Polar Stereographic Azimuthal
    • +
    • igdtnum=30 Lambert Conformal Conical
    • +
    • igdtnum=40 Gaussian Equidistant Cyclindrical
    • +
    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. Also if iopt=0, if the number of grid points exceeds the number allotted, then all the output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas may be returned.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + +
    [in]igdtnumGrid definition template number.
    [in]igdtmplGrid definition template array. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure See igdtmpl definition in gdswzd_1d_array() for full details.
    [in]igdtlenNumber of elements of the grid definition template array. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]ioptOption flag.
      +
    • 0 Earth coords of all the grid points.
    • +
    • 1 Earth coords of selected grid coords.
    • +
    • -1 Grid coords of selected earth coords
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates.
    [in,out]yptsGrid y point coordinates.
    [in,out]rlonEarth longitudes in degrees E. (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees N. (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines. ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlondx/dlat in 1/degrees
    [out]xlatdy/dlon in 1/degrees
    [out]ylondy/dlon in 1/degrees
    [out]ylatdy/dlat in 1/degrees
    [out]areaArea weights in m^2. Proportional to the square of the map factor in the case of conformal projections
    +
    +
    +
    Author
    George Gayno, Mark Iredell
    +
    Date
    Jan 2015
    + +

    Definition at line 278 of file gdswzd_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacegdswzd__mod.js b/ver-5.1.0/namespacegdswzd__mod.js new file mode 100644 index 00000000..23d8b304 --- /dev/null +++ b/ver-5.1.0/namespacegdswzd__mod.js @@ -0,0 +1,10 @@ +var namespacegdswzd__mod = +[ + [ "gdswzd", "interfacegdswzd__mod_1_1gdswzd.html", "interfacegdswzd__mod_1_1gdswzd" ], + [ "gdswzd_1d_array", "namespacegdswzd__mod.html#ac304e2b046eccc701e24827c81107e76", null ], + [ "gdswzd_2d_array", "namespacegdswzd__mod.html#acdf970e498e9317522fbdfb690b86e25", null ], + [ "gdswzd_2d_array_grib1", "namespacegdswzd__mod.html#aa032a55281b18e208630a730679958f4", null ], + [ "gdswzd_grib1", "namespacegdswzd__mod.html#a133e040fac8dd56e607b8e3fb6a58c37", null ], + [ "gdswzd_grid", "namespacegdswzd__mod.html#a584d2bddbc6d857b80cfac5e3b288d45", null ], + [ "gdswzd_scalar", "namespacegdswzd__mod.html#aba3235c5bc5797e72b9a6a8a587b8861", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__constants__mod.html b/ver-5.1.0/namespaceip__constants__mod.html new file mode 100644 index 00000000..08afad38 --- /dev/null +++ b/ver-5.1.0/namespaceip__constants__mod.html @@ -0,0 +1,244 @@ + + + + + + + +NCEPLIBS-ip: ip_constants_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_constants_mod Module Reference
    +
    +
    + +

    Module containing common constants. +More...

    + + + + + + + + + + + + + + + + + + + + +

    +Variables

    real, parameter dpr =180.0/pi
     Radians to degrees. More...
     
    real, parameter e2_wgs84 = 0.00669437999013
     Eccentricity squared of Earth defined by WGS-84. More...
     
    real, parameter pi =3.14159265358979
     PI. More...
     
    real, parameter pi2 =pi/2.0
     PI / 2.0. More...
     
    real, parameter pi4 =pi/4.0
     PI / 4.0. More...
     
    real, parameter rerth_wgs84 =6.378137E6
     Radius of the Earth defined by WGS-84. More...
     
    +

    Detailed Description

    +

    Module containing common constants.

    +
    Author
    Kyle Gerheiser, George Gayno, Alex Richert
    +

    Variable Documentation

    + +

    ◆ dpr

    + +
    +
    + + + + +
    real, parameter ip_constants_mod::dpr =180.0/pi
    +
    +
    + +

    ◆ e2_wgs84

    + +
    +
    + + + + +
    real, parameter ip_constants_mod::e2_wgs84 = 0.00669437999013
    +
    + +

    Eccentricity squared of Earth defined by WGS-84.

    + +

    Definition at line 19 of file ip_constants_mod.F90.

    + +

    Referenced by ip_polar_stereo_grid_mod::init_grib1().

    + +
    +
    + +

    ◆ pi

    + +
    +
    + + + + +
    real, parameter ip_constants_mod::pi =3.14159265358979
    +
    + +

    PI.

    + +

    Definition at line 14 of file ip_constants_mod.F90.

    + +
    +
    + +

    ◆ pi2

    + +
    +
    + + + + +
    real, parameter ip_constants_mod::pi2 =pi/2.0
    +
    + +

    PI / 2.0.

    + +

    Definition at line 16 of file ip_constants_mod.F90.

    + +
    +
    + +

    ◆ pi4

    + +
    +
    + + + + +
    real, parameter ip_constants_mod::pi4 =pi/4.0
    +
    + +

    PI / 4.0.

    + +

    Definition at line 17 of file ip_constants_mod.F90.

    + +
    +
    + +

    ◆ rerth_wgs84

    + +
    +
    + + + + +
    real, parameter ip_constants_mod::rerth_wgs84 =6.378137E6
    +
    + +

    Radius of the Earth defined by WGS-84.

    + +

    Definition at line 18 of file ip_constants_mod.F90.

    + +

    Referenced by ip_polar_stereo_grid_mod::init_grib1().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__equid__cylind__grid__mod.html b/ver-5.1.0/namespaceip__equid__cylind__grid__mod.html new file mode 100644 index 00000000..c6f16d91 --- /dev/null +++ b/ver-5.1.0/namespaceip__equid__cylind__grid__mod.html @@ -0,0 +1,668 @@ + + + + + + + +NCEPLIBS-ip: ip_equid_cylind_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_equid_cylind_grid_mod Module Reference
    +
    +
    + +

    Equidistant cylindrical grib decoder and grid coordinate transformations. +More...

    + + + + +

    +Data Types

    type  ip_equid_cylind_grid
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine equid_cylind_grid_area (RLAT, AREA)
     Computes the grid box area for a equidistant cylindrical grid. More...
     
    subroutine equid_cylind_map_jacob (XLON, XLAT, YLON, YLAT)
     Computes the map jacobians for a equidistant cylindrical grid. More...
     
    subroutine equid_cylind_vect_rot (CROT, SROT)
     Computes the vector rotation sines and cosines for a equidistant cylindrical grid. More...
     
    subroutine gdswzd_equid_cylind (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for equidistant cylindrical grids. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes an equidistant cylindrical grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Initializes an equidistant cylindrical grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + +

    +Variables

    real dlat
     Grid resolution in degrees n/s direction. More...
     
    real dlon
     Grid resolution in degrees e/w direction. More...
     
    real rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +

    Equidistant cylindrical grib decoder and grid coordinate transformations.

    +

    Octet numbers refer to [GRIB2 - GRID DEFINITION TEMPLATE 3.0 Latitude/Longitude or equidistant cylindrical, or Plate Carree](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_temp3-0.shtml).

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser
    +
    Date
    July 2021
    +

    Function/Subroutine Documentation

    + +

    ◆ equid_cylind_grid_area()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_equid_cylind_grid_mod::equid_cylind_grid_area (real, intent(in) RLAT,
    real, intent(out) AREA 
    )
    +
    +private
    +
    + +

    Computes the grid box area for a equidistant cylindrical grid.

    +
    Parameters
    + + + +
    [in]rlatLatitude of grid point in degrees.
    [out]areaArea weights in m^2.
    +
    +
    +
    Author
    Mark Iredell, George Gayno
    +
    Date
    July 2021
    + +

    Definition at line 363 of file ip_equid_cylind_grid_mod.F90.

    + +

    References dlat, dlon, and rerth.

    + +

    Referenced by gdswzd_equid_cylind().

    + +
    +
    + +

    ◆ equid_cylind_map_jacob()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_equid_cylind_grid_mod::equid_cylind_map_jacob (real, intent(out) XLON,
    real, intent(out) XLAT,
    real, intent(out) YLON,
    real, intent(out) YLAT 
    )
    +
    +private
    +
    + +

    Computes the map jacobians for a equidistant cylindrical grid.

    +
    Parameters
    + + + + + +
    [out]xlondx/dlon in 1/degrees.
    [out]xlatdx/dlat in 1/degrees.
    [out]ylondy/dlon in 1/degrees.
    [out]ylatdy/dlat in 1/degrees.
    +
    +
    +
    Author
    George Gayno
    +
    Date
    July 2021
    + +

    Definition at line 346 of file ip_equid_cylind_grid_mod.F90.

    + +

    References dlat, and dlon.

    + +

    Referenced by gdswzd_equid_cylind().

    + +
    +
    + +

    ◆ equid_cylind_vect_rot()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_equid_cylind_grid_mod::equid_cylind_vect_rot (real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    +private
    +
    + +

    Computes the vector rotation sines and cosines for a equidistant cylindrical grid.

    +
    Parameters
    + + + +
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines.
    +
    +
    +
    Note
      +
    • ugrid=crot*uearth-srot*vearth;
    • +
    • vgrid=srot*uearth+crot*vearth
    • +
    +
    +
    Author
    George Gayno
    +
    Date
    July 2021
    + +

    Definition at line 327 of file ip_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_equid_cylind().

    + +
    +
    + +

    ◆ gdswzd_equid_cylind()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_equid_cylind_grid_mod::gdswzd_equid_cylind (class(ip_equid_cylind_grid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for equidistant cylindrical grids.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too. Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present.

    +

    To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid object gdswzd was called on.
    [in]ioptoption flag
      +
    • +1 to compute earth coords of selected grid coords.
    • +
    • -1 o compute grid coords of selected earth coords.
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates if iopt>0.
    [in,out]yptsGrid y point coordinates if iopt>0.
    [in,out]rlonEarth longitudes in degrees e if iopt<0 (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees n if iopt<0 (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotOptional clockwise vector rotation cosines.
    [out]srotOptional clockwise vector rotation sines.
    [out]xlonOptional dx/dlon in 1/degrees.
    [out]xlatOptional dx/dlat in 1/degrees.
    [out]ylonOptional dy/dlon in 1/degrees.
    [out]ylatOptional dy/dlat in 1/degrees.
    [out]areaOptional area weights in m**2.
    +
    +
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 203 of file ip_equid_cylind_grid_mod.F90.

    + +

    References dlat, dlon, equid_cylind_grid_area(), equid_cylind_map_jacob(), equid_cylind_vect_rot(), and rerth.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_equid_cylind_grid_mod::init_grib1 (class(ip_equid_cylind_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes an equidistant cylindrical grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 53 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_equid_cylind_grid_mod::init_grib2 (class(ip_equid_cylind_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes an equidistant cylindrical grid given a grib2_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 109 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    +

    Variable Documentation

    + +

    ◆ dlat

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::dlat
    +
    +private
    +
    + +

    Grid resolution in degrees n/s direction.

    + +

    Definition at line 40 of file ip_equid_cylind_grid_mod.F90.

    + +

    Referenced by equid_cylind_grid_area(), equid_cylind_map_jacob(), and gdswzd_equid_cylind().

    + +
    +
    + +

    ◆ dlon

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::dlon
    +
    +private
    +
    + +

    Grid resolution in degrees e/w direction.

    + +

    Definition at line 41 of file ip_equid_cylind_grid_mod.F90.

    + +

    Referenced by equid_cylind_grid_area(), equid_cylind_map_jacob(), and gdswzd_equid_cylind().

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::rerth
    +
    +private
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 42 of file ip_equid_cylind_grid_mod.F90.

    + +

    Referenced by equid_cylind_grid_area(), and gdswzd_equid_cylind().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__equid__cylind__grid__mod.js b/ver-5.1.0/namespaceip__equid__cylind__grid__mod.js new file mode 100644 index 00000000..56328f48 --- /dev/null +++ b/ver-5.1.0/namespaceip__equid__cylind__grid__mod.js @@ -0,0 +1,13 @@ +var namespaceip__equid__cylind__grid__mod = +[ + [ "ip_equid_cylind_grid", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid" ], + [ "equid_cylind_grid_area", "namespaceip__equid__cylind__grid__mod.html#a5a70b82abdce76bef22cdeaa96a986c2", null ], + [ "equid_cylind_map_jacob", "namespaceip__equid__cylind__grid__mod.html#a039501b44cd3ad4409983e193d509afd", null ], + [ "equid_cylind_vect_rot", "namespaceip__equid__cylind__grid__mod.html#ade88ecea1c0bb4b4d5b0d08f8482268d", null ], + [ "gdswzd_equid_cylind", "namespaceip__equid__cylind__grid__mod.html#af20f6f308b5a33211c677b894e41b727", null ], + [ "init_grib1", "namespaceip__equid__cylind__grid__mod.html#a3d0132823d27b60835ebb59ead173477", null ], + [ "init_grib2", "namespaceip__equid__cylind__grid__mod.html#a39d24c9468ecb7effd16972fd72e088a", null ], + [ "dlat", "namespaceip__equid__cylind__grid__mod.html#a30cb127d26d74d2de6ab3cbfd63183fb", null ], + [ "dlon", "namespaceip__equid__cylind__grid__mod.html#a46335f95ac343f7751bd519aec0a160f", null ], + [ "rerth", "namespaceip__equid__cylind__grid__mod.html#ab5b84516fab9cee3316c07450f49746c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__gaussian__grid__mod.html b/ver-5.1.0/namespaceip__gaussian__grid__mod.html new file mode 100644 index 00000000..887fa4a6 --- /dev/null +++ b/ver-5.1.0/namespaceip__gaussian__grid__mod.html @@ -0,0 +1,767 @@ + + + + + + + +NCEPLIBS-ip: ip_gaussian_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_gaussian_grid_mod Module Reference
    +
    +
    + +

    Gaussian grid coordinate transformations. +More...

    + + + + +

    +Data Types

    type  ip_gaussian_grid
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gaussian_grid_area (YPTS, AREA)
     Computes the grid box area for a gaussian cylindrical grid. More...
     
    subroutine gaussian_map_jacob (YPTS, XLON, XLAT, YLON, YLAT)
     Computes the map jacobians for a gaussian cylindrical grid. More...
     
    subroutine gaussian_vect_rot (CROT, SROT)
     Computes the vector rotation sines and cosines for a gaussian cylindrical grid. More...
     
    subroutine gdswzd_gaussian (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Initializes a gaussian grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + +

    +Variables

    real, dimension(:), allocatable blat
     Gaussian latitude for each parallel. More...
     
    real dlon
     "i"-direction increment. More...
     
    integer j1
     'j' index of first grid point within the global array of latitudes. More...
     
    integer jh
     Scan mode flag in 'j' direction. More...
     
    real rerth
     Radius of the earth. More...
     
    real, dimension(:), allocatable ylat_row
     dy/dlat for each row in 1/degrees. More...
     
    +

    Detailed Description

    +

    Gaussian grid coordinate transformations.

    +

    Octet numbers refer to [GRIB2 - GRID DEFINITION TEMPLATE 3.40 Gaussian Latitude/Longitude](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_temp3-40.shtml).

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser
    +
    Date
    July 2021
    +

    Function/Subroutine Documentation

    + +

    ◆ gaussian_grid_area()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_gaussian_grid_mod::gaussian_grid_area (real, intent(in) YPTS,
    real, intent(out) AREA 
    )
    +
    +private
    +
    + +

    Computes the grid box area for a gaussian cylindrical grid.

    +
    Parameters
    + + + +
    [in]yptsy-index of grid point.
    [out]areaArea weights in m^2
    +
    +
    +
    Author
    Mark Iredell, George Gayno
    +
    Date
    July 2021
    + +

    Definition at line 417 of file ip_gaussian_grid_mod.F90.

    + +

    References blat, dlon, j1, jh, and rerth.

    + +

    Referenced by gdswzd_gaussian().

    + +
    +
    + +

    ◆ gaussian_map_jacob()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_gaussian_grid_mod::gaussian_map_jacob (real, intent(in) YPTS,
    real, intent(out) XLON,
    real, intent(out) XLAT,
    real, intent(out) YLON,
    real, intent(out) YLAT 
    )
    +
    +private
    +
    + +

    Computes the map jacobians for a gaussian cylindrical grid.

    +
    Parameters
    + + + + + + +
    [in]yptsy-index of grid point.
    [out]xlondx/dlon in 1/degrees.
    [out]xlatdx/dlat in 1/degrees.
    [out]ylondy/dlon in 1/degrees.
    [out]ylatdy/dlat in 1/degrees.
    +
    +
    +
    Author
    George Gayno
    +
    Date
    July 2021
    + +

    Definition at line 397 of file ip_gaussian_grid_mod.F90.

    + +

    References dlon, and ylat_row.

    + +

    Referenced by gdswzd_gaussian().

    + +
    +
    + +

    ◆ gaussian_vect_rot()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_gaussian_grid_mod::gaussian_vect_rot (real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    +private
    +
    + +

    Computes the vector rotation sines and cosines for a gaussian cylindrical grid.

    +
    Parameters
    + + + +
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines.
    +
    +
    +
    Note
    ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    +
    Author
    George Gayno
    +
    Date
    July 2021
    + +

    Definition at line 377 of file ip_gaussian_grid_mod.F90.

    + +

    Referenced by gdswzd_gaussian().

    + +
    +
    + +

    ◆ gdswzd_gaussian()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_gaussian_grid_mod::gdswzd_gaussian (class(ip_gaussian_grid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too. Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present.

    +

    To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid object gdswzd was called on.
    [in]ioptoption flag
      +
    • +1 to compute earth coords of selected grid coords.
    • +
    • -1 o compute grid coords of selected earth coords.
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates if iopt>0.
    [in,out]yptsGrid y point coordinates if iopt>0.
    [in,out]rlonEarth longitudes in degrees e if iopt<0 (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees n if iopt<0 (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotOptional clockwise vector rotation cosines.
    [out]srotOptional clockwise vector rotation sines.
    [out]xlonOptional dx/dlon in 1/degrees.
    [out]xlatOptional dx/dlat in 1/degrees.
    [out]ylonOptional dy/dlon in 1/degrees.
    [out]ylatOptional dy/dlat in 1/degrees.
    [out]areaOptional area weights in m**2.
    +
    +
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 195 of file ip_gaussian_grid_mod.F90.

    + +

    References blat, dlon, gaussian_grid_area(), gaussian_map_jacob(), gaussian_vect_rot(), j1, jh, rerth, splat(), and ylat_row.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_gaussian_grid_mod::init_grib1 (class(ip_gaussian_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 60 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_gaussian_grid_mod::init_grib2 (class(ip_gaussian_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib2_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 109 of file ip_gaussian_grid_mod.F90.

    + +
    +
    +

    Variable Documentation

    + +

    ◆ blat

    + +
    +
    + + + + + +
    + + + + +
    real, dimension(:), allocatable ip_gaussian_grid_mod::blat
    +
    +private
    +
    + +

    Gaussian latitude for each parallel.

    + +

    Definition at line 46 of file ip_gaussian_grid_mod.F90.

    + +

    Referenced by gaussian_grid_area(), and gdswzd_gaussian().

    + +
    +
    + +

    ◆ dlon

    + +
    +
    + + + + + +
    + + + + +
    real ip_gaussian_grid_mod::dlon
    +
    +private
    +
    + +

    "i"-direction increment.

    +

    GRIB2 Section 3, octets 64-67.

    + +

    Definition at line 47 of file ip_gaussian_grid_mod.F90.

    + +

    Referenced by gaussian_grid_area(), gaussian_map_jacob(), and gdswzd_gaussian().

    + +
    +
    + +

    ◆ j1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_gaussian_grid_mod::j1
    +
    +private
    +
    + +

    'j' index of first grid point within the global array of latitudes.

    + +

    Definition at line 44 of file ip_gaussian_grid_mod.F90.

    + +

    Referenced by gaussian_grid_area(), and gdswzd_gaussian().

    + +
    +
    + +

    ◆ jh

    + +
    +
    + + + + + +
    + + + + +
    integer ip_gaussian_grid_mod::jh
    +
    +private
    +
    + +

    Scan mode flag in 'j' direction.

    +

    When '1' points scan from N to S. When "-1" points scan from S to N.

    + +

    Definition at line 45 of file ip_gaussian_grid_mod.F90.

    + +

    Referenced by gaussian_grid_area(), and gdswzd_gaussian().

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_gaussian_grid_mod::rerth
    +
    +private
    +
    + +

    Radius of the earth.

    +

    GRIB2 Section 3, octets 15-30.

    + +

    Definition at line 48 of file ip_gaussian_grid_mod.F90.

    + +

    Referenced by gaussian_grid_area(), and gdswzd_gaussian().

    + +
    +
    + +

    ◆ ylat_row

    + +
    +
    + + + + + +
    + + + + +
    real, dimension(:), allocatable ip_gaussian_grid_mod::ylat_row
    +
    +private
    +
    + +

    dy/dlat for each row in 1/degrees.

    + +

    Definition at line 49 of file ip_gaussian_grid_mod.F90.

    + +

    Referenced by gaussian_map_jacob(), and gdswzd_gaussian().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__gaussian__grid__mod.js b/ver-5.1.0/namespaceip__gaussian__grid__mod.js new file mode 100644 index 00000000..1413b539 --- /dev/null +++ b/ver-5.1.0/namespaceip__gaussian__grid__mod.js @@ -0,0 +1,16 @@ +var namespaceip__gaussian__grid__mod = +[ + [ "ip_gaussian_grid", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html", "structip__gaussian__grid__mod_1_1ip__gaussian__grid" ], + [ "gaussian_grid_area", "namespaceip__gaussian__grid__mod.html#ab602a870a477c7ab77438700af4e7780", null ], + [ "gaussian_map_jacob", "namespaceip__gaussian__grid__mod.html#adca7b03877c6a7048ff1716a95e0bd9d", null ], + [ "gaussian_vect_rot", "namespaceip__gaussian__grid__mod.html#ac72eec96d0012fbe0f0ec7c520f40dad", null ], + [ "gdswzd_gaussian", "namespaceip__gaussian__grid__mod.html#a6eefd9270b3f9bb2c59a77bea4ecf1b9", null ], + [ "init_grib1", "namespaceip__gaussian__grid__mod.html#a8fe2ee732a3a2db4891a6431787a0b01", null ], + [ "init_grib2", "namespaceip__gaussian__grid__mod.html#ae048ac033628515113b11b8c7364e0c2", null ], + [ "blat", "namespaceip__gaussian__grid__mod.html#ae2697b9c4dbe4945276633d1951e79fc", null ], + [ "dlon", "namespaceip__gaussian__grid__mod.html#a8852b7cfb7b99318140c66b0c551dc6d", null ], + [ "j1", "namespaceip__gaussian__grid__mod.html#af5c4024263aa3eaef5801849ae32c15a", null ], + [ "jh", "namespaceip__gaussian__grid__mod.html#a67d6cd6d188a8bded8bdf64927617028", null ], + [ "rerth", "namespaceip__gaussian__grid__mod.html#a8213e02ccf4325ad5db14f2e48990da2", null ], + [ "ylat_row", "namespaceip__gaussian__grid__mod.html#a3591b5701f3d03931c6a9d5278e161dc", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__grid__descriptor__mod.html b/ver-5.1.0/namespaceip__grid__descriptor__mod.html new file mode 100644 index 00000000..82e74124 --- /dev/null +++ b/ver-5.1.0/namespaceip__grid__descriptor__mod.html @@ -0,0 +1,378 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_descriptor_mod Module Reference
    +
    +
    + +

    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions. +More...

    + + + + + + + + + + + + + + + +

    +Data Types

    type  grib1_descriptor
     Descriptor representing a grib1 grib descriptor section (GDS) with an integer array. More...
     
    type  grib2_descriptor
     Grib-2 descriptor containing a grib2 GDT represented by an integer array. More...
     
    interface  init_descriptor
     
    type  ip_grid_descriptor
     Abstract descriptor object which represents a grib1 or grib2 descriptor. More...
     
    interface  operator(==)
     
    + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    type(grib1_descriptor) function, public init_grib1_descriptor (gds)
     Initialize grib-1 descriptor from integer grid definition section (GDS). More...
     
    type(grib2_descriptor) function, public init_grib2_descriptor (gdt_num, gdt_len, gdt_tmpl)
     Initialize grib-2 descriptor from integer grid definition template (GDT). More...
     
    logical function is_same_grid (grid1, grid2)
     Test whether two grid descriptors are the same. More...
     
    logical function is_same_grid_grib1 (self, grid_desc)
     Test whether two grib1_descriptors are the same. More...
     
    logical function is_same_grid_grib2 (self, grid_desc)
     Test whether two grib2_descriptors are the same. More...
     
    +

    Detailed Description

    +

    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.

    +

    An abstract ip_grid_descriptor class is subclassed by the GRIB1 and GRIB2 descriptor types which contain the raw integer grib arrays. A comparison operator to test whether two grid descriptors are the same is also included.

    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    +

    Function/Subroutine Documentation

    + +

    ◆ init_grib1_descriptor()

    + +
    +
    + + + + + + + + +
    type(grib1_descriptor) function, public ip_grid_descriptor_mod::init_grib1_descriptor (integer, dimension(:), intent(in) gds)
    +
    + +

    Initialize grib-1 descriptor from integer grid definition section (GDS).

    +
    Parameters
    + + +
    [in]gdsGrib-1 grid definition section.
    +
    +
    +
    Returns
    Initialized Grib-1 descriptor.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 74 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ init_grib2_descriptor()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    type(grib2_descriptor) function, public ip_grid_descriptor_mod::init_grib2_descriptor (integer, intent(in) gdt_num,
    integer, intent(in) gdt_len,
    integer, dimension(:), intent(in) gdt_tmpl 
    )
    +
    + +

    Initialize grib-2 descriptor from integer grid definition template (GDT).

    +
    Parameters
    + + + + +
    [in]gdt_numGrib-2 grid number.
    [in]gdt_lenLenght of the grid definition template.
    [in]gdt_tmplGrib-2 grid definition template.
    +
    +
    +
    Returns
    Initialized Grib-2 descriptor.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 93 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ is_same_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    logical function ip_grid_descriptor_mod::is_same_grid (class(ip_grid_descriptor), intent(in) grid1,
    class(ip_grid_descriptor), intent(in) grid2 
    )
    +
    +private
    +
    + +

    Test whether two grid descriptors are the same.

    +
    Parameters
    + + + +
    [in]grid1An ip_grid_descriptor.
    [in]grid2Another ip_grid_descriptor.
    +
    +
    +
    Returns
    True if the grids are the same, false if they are not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 115 of file ip_grid_descriptor_mod.F90.

    + +

    Referenced by ip_grid_descriptor_mod::operator(==)::is_same_grid(), and ip_grid_mod::operator(==)::is_same_grid().

    + +
    +
    + +

    ◆ is_same_grid_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    logical function ip_grid_descriptor_mod::is_same_grid_grib1 (class(grib1_descriptor), intent(in) self,
    class(grib1_descriptor), intent(in) grid_desc 
    )
    +
    +private
    +
    + +

    Test whether two grib1_descriptors are the same.

    +
    Parameters
    + + + +
    [in]selfThe grib1_descriptor which this routine was called on.
    [in]grid_descA grib1_descriptor to compare.
    +
    +
    +
    Returns
    True if the grids are the same, false if they are not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 145 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ is_same_grid_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    logical function ip_grid_descriptor_mod::is_same_grid_grib2 (class(grib2_descriptor), intent(in) self,
    class(grib2_descriptor), intent(in) grid_desc 
    )
    +
    +private
    +
    + +

    Test whether two grib2_descriptors are the same.

    +
    Parameters
    + + + +
    [in]selfThe grib2_descriptor which this routine was called on.
    [in]grid_descgrib2_descriptor to compare.
    +
    +
    +
    Returns
    True if the grids are the same, false if they are not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 164 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__grid__descriptor__mod.js b/ver-5.1.0/namespaceip__grid__descriptor__mod.js new file mode 100644 index 00000000..06ef1ff6 --- /dev/null +++ b/ver-5.1.0/namespaceip__grid__descriptor__mod.js @@ -0,0 +1,13 @@ +var namespaceip__grid__descriptor__mod = +[ + [ "grib1_descriptor", "structip__grid__descriptor__mod_1_1grib1__descriptor.html", "structip__grid__descriptor__mod_1_1grib1__descriptor" ], + [ "grib2_descriptor", "structip__grid__descriptor__mod_1_1grib2__descriptor.html", "structip__grid__descriptor__mod_1_1grib2__descriptor" ], + [ "init_descriptor", "interfaceip__grid__descriptor__mod_1_1init__descriptor.html", "interfaceip__grid__descriptor__mod_1_1init__descriptor" ], + [ "ip_grid_descriptor", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html", "structip__grid__descriptor__mod_1_1ip__grid__descriptor" ], + [ "operator(==)", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html", "interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08" ], + [ "init_grib1_descriptor", "namespaceip__grid__descriptor__mod.html#aa00884a7fca018535eaf0c2ebe26bc98", null ], + [ "init_grib2_descriptor", "namespaceip__grid__descriptor__mod.html#a143ac06a2a20697d01606a259213b451", null ], + [ "is_same_grid", "namespaceip__grid__descriptor__mod.html#a202219f9c5c84fa04d3eb1c2208358ec", null ], + [ "is_same_grid_grib1", "namespaceip__grid__descriptor__mod.html#a5bb3c5230b88012bddc3922bfa1cb019", null ], + [ "is_same_grid_grib2", "namespaceip__grid__descriptor__mod.html#a75ac34ea9372afaa29b0df2ce8919988", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__grid__factory__mod.html b/ver-5.1.0/namespaceip__grid__factory__mod.html new file mode 100644 index 00000000..aaa7e55f --- /dev/null +++ b/ver-5.1.0/namespaceip__grid__factory__mod.html @@ -0,0 +1,285 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_factory_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_factory_mod Module Reference
    +
    +
    + +

    Routines for creating an ip_grid given a Grib descriptor. +More...

    + + + + +

    +Data Types

    interface  init_grid
     
    + + + + + + + + + + +

    +Functions/Subroutines

    subroutine init_grid_generic (grid, grid_desc)
     Initializes a polymorphic ip_grid object from an ip_grid_descriptor. More...
     
    subroutine init_grid_grib1 (grid, g1_desc)
     Initializes a polymorphic ip_grid from a grib1_descriptor. More...
     
    subroutine init_grid_grib2 (grid, g2_desc)
     Initializes a polymorphic ip_grid from a grib2_descriptor. More...
     
    +

    Detailed Description

    +

    Routines for creating an ip_grid given a Grib descriptor.

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser
    +
    Date
    July 2021
    +

    Function/Subroutine Documentation

    + +

    ◆ init_grid_generic()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_grid_factory_mod::init_grid_generic (class(ip_grid), intent(out), allocatable grid,
    class(ip_grid_descriptor), intent(in) grid_desc 
    )
    +
    +private
    +
    + +

    Initializes a polymorphic ip_grid object from an ip_grid_descriptor.

    +
    Parameters
    + + + +
    [out]gridGrid to initialize
    [in]grid_descGrid descriptor created from a grib1/grib2 template.
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 33 of file ip_grid_factory_mod.F90.

    + +
    +
    + +

    ◆ init_grid_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_grid_factory_mod::init_grid_grib1 (class(ip_grid), intent(out), allocatable grid,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes a polymorphic ip_grid from a grib1_descriptor.

    +

    The concrete grid type is chosen based on the grid number in the descriptor.

    +
    Parameters
    + + + +
    [out]gridGrid to initialize
    [in]g1_desc
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 53 of file ip_grid_factory_mod.F90.

    + +

    References ip_grid_mod::equid_cylind_grid_id_grib1, ip_grid_mod::gaussian_grid_id_grib1, ip_grid_mod::lambert_conf_grid_id_grib1, ip_grid_mod::mercator_grid_id_grib1, ip_grid_mod::polar_stereo_grid_id_grib1, ip_grid_mod::rot_equid_cylind_b_grid_id_grib1, and ip_grid_mod::rot_equid_cylind_e_grid_id_grib1.

    + +

    Referenced by ip_grid_factory_mod::init_grid::init_grid_generic().

    + +
    +
    + +

    ◆ init_grid_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_grid_factory_mod::init_grid_grib2 (class(ip_grid), intent(out), allocatable grid,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a polymorphic ip_grid from a grib2_descriptor.

    +

    The concrete grid type is chosen based on the grid number in the descriptor.

    +
    Parameters
    + + + +
    [out]gridGrid to initialize
    [in]g2_descGrib2 descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 89 of file ip_grid_factory_mod.F90.

    + +

    References ip_grid_mod::equid_cylind_grid_id_grib2, ip_grid_mod::gaussian_grid_id_grib2, ip_grid_mod::lambert_conf_grid_id_grib2, ip_grid_mod::mercator_grid_id_grib2, ip_grid_mod::polar_stereo_grid_id_grib2, ip_grid_mod::rot_equid_cylind_b_grid_id_grib2, ip_grid_mod::rot_equid_cylind_e_grid_id_grib2, and ip_grid_mod::rot_equid_cylind_grid_id_grib2.

    + +

    Referenced by ip_grid_factory_mod::init_grid::init_grid_generic().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__grid__factory__mod.js b/ver-5.1.0/namespaceip__grid__factory__mod.js new file mode 100644 index 00000000..162fc99b --- /dev/null +++ b/ver-5.1.0/namespaceip__grid__factory__mod.js @@ -0,0 +1,7 @@ +var namespaceip__grid__factory__mod = +[ + [ "init_grid", "interfaceip__grid__factory__mod_1_1init__grid.html", "interfaceip__grid__factory__mod_1_1init__grid" ], + [ "init_grid_generic", "namespaceip__grid__factory__mod.html#a2d2ea07d353bae8b057471aa99b58e46", null ], + [ "init_grid_grib1", "namespaceip__grid__factory__mod.html#ad8906ed6fe52c2426c0ff09ce50b6fc5", null ], + [ "init_grid_grib2", "namespaceip__grid__factory__mod.html#aa187dc8dbd1d004a51cc0e9826ffa225", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__grid__mod.html b/ver-5.1.0/namespaceip__grid__mod.html new file mode 100644 index 00000000..ae1efd3d --- /dev/null +++ b/ver-5.1.0/namespaceip__grid__mod.html @@ -0,0 +1,667 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_mod Module Reference
    +
    +
    + +

    Abstract ip_grid type. +More...

    + + + + + + + + + + + + + + +

    +Data Types

    interface  gdswzd_interface
     
    interface  init_grib1_interface
     
    interface  init_grib2_interface
     
    type  ip_grid
     Abstract grid that holds fields and methods common to all grids. More...
     
    interface  operator(==)
     Check equality. More...
     
    + + + + + + + + + + + + + +

    +Functions/Subroutines

    integer function field_pos (self, i, j)
     Returns the field position for a given grid point. More...
     
    logical function is_same_grid (grid1, grid2)
     Compares two grids. More...
     
    subroutine, public unuse_ncep_post_arakawa ()
     Disables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=.false. More...
     
    subroutine, public use_ncep_post_arakawa ()
     Enables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=.true. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    integer, parameter, public equid_cylind_grid_id_grib1 = 0
     Integer grid number for equidistant cylindrical grid in grib1. More...
     
    integer, parameter, public equid_cylind_grid_id_grib2 = 0
     Integer grid number for equidistant cylindrical grid in grib2. More...
     
    integer, parameter, public gaussian_grid_id_grib1 = 4
     Integer grid number for Gaussian grid in grib1. More...
     
    integer, parameter, public gaussian_grid_id_grib2 = 40
     Integer grid number for Gaussian grid in grib2. More...
     
    integer, parameter, public lambert_conf_grid_id_grib1 = 3
     Integer grid number for Lambert Conformal grid in grib1. More...
     
    integer, parameter, public lambert_conf_grid_id_grib2 = 30
     Integer grid number for Lambert conformal grid in grib2. More...
     
    integer, parameter, public mercator_grid_id_grib1 = 1
     Integer grid number for Mercator grid in grib1. More...
     
    integer, parameter, public mercator_grid_id_grib2 = 10
     Integer grid number for Mercator grid in grib2. More...
     
    logical, save, public ncep_post_arakawa =.false.
     Use ncep_post/wgrib2-compatible version of init_grib2() for non-E Arakawa grids (enable with use_ncep_post_arakawa()) More...
     
    integer, parameter, public polar_stereo_grid_id_grib1 = 5
     Integer grid number for polar stereo grid in grib1. More...
     
    integer, parameter, public polar_stereo_grid_id_grib2 = 20
     Integer grid number for polar stereo grid in grib2. More...
     
    integer, parameter, public rot_equid_cylind_b_grid_id_grib1 = 205
     Integer grid number for rotated equidistant cylindrical B-stagger grid. More...
     
    integer, parameter, public rot_equid_cylind_b_grid_id_grib2 = 32769
     Integer grid number for rotated equidistant cylindrical B-stagger grid (grib2) More...
     
    integer, parameter, public rot_equid_cylind_e_grid_id_grib1 = 203
     Integer grid number for rotated equidistant cylindrical E-stagger grid. More...
     
    integer, parameter, public rot_equid_cylind_e_grid_id_grib2 = 32768
     Integer grid number for rotated equidistant cylindrical E-stagger grid (grib2) More...
     
    integer, parameter, public rot_equid_cylind_grid_id_grib2 = 1
     Integer grid number for rotated equidistant cylindrical grid in grib2. More...
     
    +

    Detailed Description

    +

    Abstract ip_grid type.

    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    +

    Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    integer function ip_grid_mod::field_pos (class(ip_grid), intent(in) self,
    integer, intent(in) i,
    integer, intent(in) j 
    )
    +
    +private
    +
    + +

    Returns the field position for a given grid point.

    +
    Parameters
    + + + + +
    [in]self
    [in]i
    [in]j
    +
    +
    +
    Returns
    Integer position in grib field to locate grid point.
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    April 1996
    + +

    Definition at line 223 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ is_same_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    logical function ip_grid_mod::is_same_grid (class(ip_grid), intent(in) grid1,
    class(ip_grid), intent(in) grid2 
    )
    +
    +private
    +
    + +

    Compares two grids.

    +
    Parameters
    + + + +
    [in]grid1An ip_grid
    [in]grid2Another ip_grid
    +
    +
    +
    Returns
    True if the grids are the same, false if not.
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 208 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ unuse_ncep_post_arakawa()

    + +
    +
    + + + + +
    subroutine, public ip_grid_mod::unuse_ncep_post_arakawa
    +
    + +

    Disables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=.false.

    +

    '. This subroutine should be called prior to init_grib2().

    +
    Author
    Alex Richert
    +
    Date
    May 2024
    + +

    Definition at line 195 of file ip_grid_mod.F90.

    + +

    References ncep_post_arakawa.

    + +
    +
    + +

    ◆ use_ncep_post_arakawa()

    + +
    +
    + + + + +
    subroutine, public ip_grid_mod::use_ncep_post_arakawa
    +
    + +

    Enables ncep_post/wgrib2-compatible non-E Arakawa grib2 grids by setting 'ncep_post_arakawa=.true.

    +

    '. This subroutine should be called prior to init_grib2().

    +
    Author
    Alex Richert
    +
    Date
    May 2024
    + +

    Definition at line 185 of file ip_grid_mod.F90.

    + +

    References ncep_post_arakawa.

    + +
    +
    +

    Variable Documentation

    + +

    ◆ equid_cylind_grid_id_grib1

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::equid_cylind_grid_id_grib1 = 0
    +
    + +

    Integer grid number for equidistant cylindrical grid in grib1.

    + +

    Definition at line 14 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib1().

    + +
    +
    + +

    ◆ equid_cylind_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::equid_cylind_grid_id_grib2 = 0
    +
    + +

    Integer grid number for equidistant cylindrical grid in grib2.

    + +

    Definition at line 22 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    + +

    ◆ gaussian_grid_id_grib1

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::gaussian_grid_id_grib1 = 4
    +
    + +

    Integer grid number for Gaussian grid in grib1.

    + +

    Definition at line 17 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib1().

    + +
    +
    + +

    ◆ gaussian_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::gaussian_grid_id_grib2 = 40
    +
    + +

    Integer grid number for Gaussian grid in grib2.

    + +

    Definition at line 27 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    + +

    ◆ lambert_conf_grid_id_grib1

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::lambert_conf_grid_id_grib1 = 3
    +
    + +

    Integer grid number for Lambert Conformal grid in grib1.

    + +

    Definition at line 16 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib1().

    + +
    +
    + +

    ◆ lambert_conf_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::lambert_conf_grid_id_grib2 = 30
    +
    + +

    Integer grid number for Lambert conformal grid in grib2.

    + +

    Definition at line 26 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    + +

    ◆ mercator_grid_id_grib1

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::mercator_grid_id_grib1 = 1
    +
    + +

    Integer grid number for Mercator grid in grib1.

    + +

    Definition at line 15 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib1().

    + +
    +
    + +

    ◆ mercator_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::mercator_grid_id_grib2 = 10
    +
    + +

    Integer grid number for Mercator grid in grib2.

    + +

    Definition at line 24 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    + +

    ◆ ncep_post_arakawa

    + +
    +
    + + + + +
    logical, save, public ip_grid_mod::ncep_post_arakawa =.false.
    +
    + +

    Use ncep_post/wgrib2-compatible version of init_grib2() for non-E Arakawa grids (enable with use_ncep_post_arakawa())

    + +

    Definition at line 31 of file ip_grid_mod.F90.

    + +

    Referenced by unuse_ncep_post_arakawa(), and use_ncep_post_arakawa().

    + +
    +
    + +

    ◆ polar_stereo_grid_id_grib1

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::polar_stereo_grid_id_grib1 = 5
    +
    + +

    Integer grid number for polar stereo grid in grib1.

    + +

    Definition at line 18 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib1().

    + +
    +
    + +

    ◆ polar_stereo_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::polar_stereo_grid_id_grib2 = 20
    +
    + +

    Integer grid number for polar stereo grid in grib2.

    + +

    Definition at line 25 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    + +

    ◆ rot_equid_cylind_b_grid_id_grib1

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::rot_equid_cylind_b_grid_id_grib1 = 205
    +
    + +

    Integer grid number for rotated equidistant cylindrical B-stagger grid.

    + +

    Definition at line 20 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib1().

    + +
    +
    + +

    ◆ rot_equid_cylind_b_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::rot_equid_cylind_b_grid_id_grib2 = 32769
    +
    + +

    Integer grid number for rotated equidistant cylindrical B-stagger grid (grib2)

    + +

    Definition at line 29 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    + +

    ◆ rot_equid_cylind_e_grid_id_grib1

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::rot_equid_cylind_e_grid_id_grib1 = 203
    +
    + +

    Integer grid number for rotated equidistant cylindrical E-stagger grid.

    + +

    Definition at line 19 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib1().

    + +
    +
    + +

    ◆ rot_equid_cylind_e_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::rot_equid_cylind_e_grid_id_grib2 = 32768
    +
    + +

    Integer grid number for rotated equidistant cylindrical E-stagger grid (grib2)

    + +

    Definition at line 28 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    + +

    ◆ rot_equid_cylind_grid_id_grib2

    + +
    +
    + + + + +
    integer, parameter, public ip_grid_mod::rot_equid_cylind_grid_id_grib2 = 1
    +
    + +

    Integer grid number for rotated equidistant cylindrical grid in grib2.

    + +

    Definition at line 23 of file ip_grid_mod.F90.

    + +

    Referenced by ip_grid_factory_mod::init_grid_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__grid__mod.js b/ver-5.1.0/namespaceip__grid__mod.js new file mode 100644 index 00000000..291e51a3 --- /dev/null +++ b/ver-5.1.0/namespaceip__grid__mod.js @@ -0,0 +1,28 @@ +var namespaceip__grid__mod = +[ + [ "gdswzd_interface", "interfaceip__grid__mod_1_1gdswzd__interface.html", "interfaceip__grid__mod_1_1gdswzd__interface" ], + [ "init_grib1_interface", "interfaceip__grid__mod_1_1init__grib1__interface.html", "interfaceip__grid__mod_1_1init__grib1__interface" ], + [ "init_grib2_interface", "interfaceip__grid__mod_1_1init__grib2__interface.html", "interfaceip__grid__mod_1_1init__grib2__interface" ], + [ "ip_grid", "structip__grid__mod_1_1ip__grid.html", "structip__grid__mod_1_1ip__grid" ], + [ "operator(==)", "interfaceip__grid__mod_1_1operator_07_0a_0a_08.html", "interfaceip__grid__mod_1_1operator_07_0a_0a_08" ], + [ "field_pos", "namespaceip__grid__mod.html#a63572318d74ec94c20c5ccd6ded2d442", null ], + [ "is_same_grid", "namespaceip__grid__mod.html#a663bda9af9dd991a09ba0f0de66dc045", null ], + [ "unuse_ncep_post_arakawa", "namespaceip__grid__mod.html#ac8e716adbe5c1156bfd20f936a4205de", null ], + [ "use_ncep_post_arakawa", "namespaceip__grid__mod.html#a1d570947cf124c28ba67305494bff450", null ], + [ "equid_cylind_grid_id_grib1", "namespaceip__grid__mod.html#ad96da95d40beceb1a1c405971e8130bb", null ], + [ "equid_cylind_grid_id_grib2", "namespaceip__grid__mod.html#a3b5ae57fe3d6d365cfd1ccdb4feb8ac6", null ], + [ "gaussian_grid_id_grib1", "namespaceip__grid__mod.html#a45e8afad72b1b8856b3e44f2dd3123b3", null ], + [ "gaussian_grid_id_grib2", "namespaceip__grid__mod.html#a36a9a73ecd50353f892341ae8a5c8316", null ], + [ "lambert_conf_grid_id_grib1", "namespaceip__grid__mod.html#ab82b90d20f38ff39741f6890fa422d16", null ], + [ "lambert_conf_grid_id_grib2", "namespaceip__grid__mod.html#a2e49846c9122b1fe1fcdbb2913fc32fe", null ], + [ "mercator_grid_id_grib1", "namespaceip__grid__mod.html#ab9ff525eca4f053b04ec96a83cb06682", null ], + [ "mercator_grid_id_grib2", "namespaceip__grid__mod.html#af9c58af5162d96cb7d1ac5001139b856", null ], + [ "ncep_post_arakawa", "namespaceip__grid__mod.html#a88751d2ee535d807b6d420fcfb99ee71", null ], + [ "polar_stereo_grid_id_grib1", "namespaceip__grid__mod.html#afee73c2f09ea9de43c156dc594ae1df1", null ], + [ "polar_stereo_grid_id_grib2", "namespaceip__grid__mod.html#a5b3ad320b41791e65966e1bb498e9ae3", null ], + [ "rot_equid_cylind_b_grid_id_grib1", "namespaceip__grid__mod.html#adb7d7d18410aaae52d7eee2e97f04b14", null ], + [ "rot_equid_cylind_b_grid_id_grib2", "namespaceip__grid__mod.html#adbda63b51409aaed34a707b222da8c43", null ], + [ "rot_equid_cylind_e_grid_id_grib1", "namespaceip__grid__mod.html#a4e11ce780c3d165c282684188890af1c", null ], + [ "rot_equid_cylind_e_grid_id_grib2", "namespaceip__grid__mod.html#a248f834201bea9295bbe6a99abd038f8", null ], + [ "rot_equid_cylind_grid_id_grib2", "namespaceip__grid__mod.html#adc7c650c524eb6425e77b2e0eac0979a", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__grids__mod.html b/ver-5.1.0/namespaceip__grids__mod.html new file mode 100644 index 00000000..1835d563 --- /dev/null +++ b/ver-5.1.0/namespaceip__grids__mod.html @@ -0,0 +1,106 @@ + + + + + + + +NCEPLIBS-ip: ip_grids_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_grids_mod Module Reference
    +
    +
    + +

    Re-export the individual grids. +More...

    +

    Detailed Description

    +

    Re-export the individual grids.

    +
    Author
    Kyle Gerheiser
    +
    Date
    7/21/21
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__interpolators__mod.html b/ver-5.1.0/namespaceip__interpolators__mod.html new file mode 100644 index 00000000..d4c286a7 --- /dev/null +++ b/ver-5.1.0/namespaceip__interpolators__mod.html @@ -0,0 +1,268 @@ + + + + + + + +NCEPLIBS-ip: ip_interpolators_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_interpolators_mod Module Reference
    +
    +
    + +

    Top-level module to export interpolation routines and constants. +More...

    + + + + + + + + + + + + + + +

    +Variables

    integer, parameter, public bicubic_interp_id = 1
     
    integer, parameter, public bilinear_interp_id = 0
     
    integer, parameter, public budget_interp_id = 3
     
    integer, parameter, public neighbor_budget_interp_id = 6
     
    integer, parameter, public neighbor_interp_id = 2
     
    integer, parameter, public spectral_interp_id = 4
     
    +

    Detailed Description

    +

    Top-level module to export interpolation routines and constants.

    +
    Author
    Kyle Gerheiser
    +

    Variable Documentation

    + +

    ◆ bicubic_interp_id

    + +
    +
    + + + + +
    integer, parameter, public ip_interpolators_mod::bicubic_interp_id = 1
    +
    +
    Parameters
    + + +
    Constantto choose BICUBIC interpolation method
    +
    +
    + +

    Definition at line 19 of file ip_interpolators_mod.F90.

    + +

    Referenced by ipolates_mod::ipolates_grid(), and ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ bilinear_interp_id

    + +
    +
    + + + + +
    integer, parameter, public ip_interpolators_mod::bilinear_interp_id = 0
    +
    +
    Parameters
    + + +
    Constantto choose BILINEAR interpolation method
    +
    +
    + +

    Definition at line 17 of file ip_interpolators_mod.F90.

    + +

    Referenced by ipolates_mod::ipolates_grid(), and ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ budget_interp_id

    + +
    +
    + + + + +
    integer, parameter, public ip_interpolators_mod::budget_interp_id = 3
    +
    +
    Parameters
    + + +
    Constantto choose BUDGET interpolation method
    +
    +
    + +

    Definition at line 23 of file ip_interpolators_mod.F90.

    + +

    Referenced by ipolates_mod::ipolates_grid(), and ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ neighbor_budget_interp_id

    + +
    +
    + + + + +
    integer, parameter, public ip_interpolators_mod::neighbor_budget_interp_id = 6
    +
    +
    Parameters
    + + +
    Constantto choose NEIGBOR_BUDGET interpolation method
    +
    +
    + +

    Definition at line 27 of file ip_interpolators_mod.F90.

    + +

    Referenced by ipolates_mod::ipolates_grid(), and ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ neighbor_interp_id

    + +
    +
    + + + + +
    integer, parameter, public ip_interpolators_mod::neighbor_interp_id = 2
    +
    +
    Parameters
    + + +
    Constantto choose NEIGBOR interpolation method
    +
    +
    + +

    Definition at line 21 of file ip_interpolators_mod.F90.

    + +

    Referenced by ipolates_mod::ipolates_grid(), and ipolatev_mod::ipolatev_grid().

    + +
    +
    + +

    ◆ spectral_interp_id

    + +
    +
    + + + + +
    integer, parameter, public ip_interpolators_mod::spectral_interp_id = 4
    +
    +
    Parameters
    + + +
    Constantto choose SPECTRAL interpolation method
    +
    +
    + +

    Definition at line 25 of file ip_interpolators_mod.F90.

    + +

    Referenced by ipolates_mod::ipolates_grid(), and ipolatev_mod::ipolatev_grid().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__lambert__conf__grid__mod.html b/ver-5.1.0/namespaceip__lambert__conf__grid__mod.html new file mode 100644 index 00000000..ccd5540d --- /dev/null +++ b/ver-5.1.0/namespaceip__lambert__conf__grid__mod.html @@ -0,0 +1,880 @@ + + + + + + + +NCEPLIBS-ip: ip_lambert_conf_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_lambert_conf_grid_mod Module Reference
    +
    +
    + +

    Lambert conformal grib decoder and grid coordinate transformations. +More...

    + + + + +

    +Data Types

    type  ip_lambert_conf_grid
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_lambert_conf (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for lambert conformal conical. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes a Lambert Conformal grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Initializes a Lambert Conformal grid given a grib2_descriptor object. More...
     
    subroutine lambert_conf_grid_area (RLAT, FILL, DR, AREA)
     Grid box area for lambert conformal conical. More...
     
    subroutine lambert_conf_map_jacob (RLAT, FILL, DLON, DR, XLON, XLAT, YLON, YLAT)
     Map jacobians for lambert conformal conical. More...
     
    subroutine lambert_conf_vect_rot (DLON, CROT, SROT)
     Vector rotation fields for lambert conformal conical. More...
     
    + + + + + + + + + + + + + + + + + + + +

    +Variables

    real an
     Cone factor. More...
     
    real dxs
     x-direction grid length adjusted for scan mode. More...
     
    real dys
     y-direction grid length adjusted for scan model. More...
     
    real h
     Hemisphere flag. More...
     
    integer irot
     vector rotation flag. More...
     
    real rerth
     Radius of the earth. More...
     
    +

    Detailed Description

    +

    Lambert conformal grib decoder and grid coordinate transformations.

    +

    Octet numbers refer to [GRIB2 - GRID DEFINITION TEMPLATE 3.30 Lambert conformal](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_temp3-30.shtml).

    +
    Author
    Iredell
    +
    Date
    96-04-10
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_lambert_conf()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_lambert_conf_grid_mod::gdswzd_lambert_conf (class(ip_lambert_conf_grid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    GDS wizard for lambert conformal conical.

    +

    This subprogram decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for lambert conformal conical projections.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and grid box areas for this grid may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. To compute the grid box areas the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell Initial.
    96-10-01 iredell protected against unresolvable points
    97-10-20 iredell include map options
    1999-04-27 gilbert corrected minor error calculating variable an for the secant projection case (rlati1.ne.rlati2).
    2012-08-14 gayno fix problem with sh grids. Ensure grid box area always positive.
    2015-01-21 gayno merger of gdswiz03() and gdswzd03(). Make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. Make part of a module. Move vector rotation, map jacobian and grid box area computations to separate subroutines.
    2015-07-13 gayno Convert to grib 2. Replace grib 1 kgds array with grib 2 grid definition template array. Rename routine.
    2018-07-20 wesley add threads.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfip_lambert_conf_grid object.
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsmaximum number of coordinates
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xpts(npts) grid x point coordinates if iopt>0
    [in,out]ypts(npts) grid y point coordinates if iopt>0
    [in,out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed
    [out]crotoptional (npts) clockwise vector rotation cosines
    [out]srotoptional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonoptional (npts) dx/dlon in 1/degrees
    [out]xlatoptional (npts) dx/dlat in 1/degrees
    [out]ylonoptional (npts) dy/dlon in 1/degrees
    [out]ylatoptional (npts) dy/dlat in 1/degrees
    [out]areaoptional (npts) area weights in m**2 (proportional to the square of the map factor)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 219 of file ip_lambert_conf_grid_mod.F90.

    + +

    References an, dxs, dys, h, irot, lambert_conf_grid_area(), lambert_conf_map_jacob(), lambert_conf_vect_rot(), and rerth.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_lambert_conf_grid_mod::init_grib1 (class(ip_lambert_conf_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes a Lambert Conformal grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 60 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_lambert_conf_grid_mod::init_grib2 (class(ip_lambert_conf_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a Lambert Conformal grid given a grib2_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 112 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ lambert_conf_grid_area()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_lambert_conf_grid_mod::lambert_conf_grid_area (real, intent(in) RLAT,
    real, intent(in) FILL,
    real, intent(in) DR,
    real, intent(out) AREA 
    )
    +
    +private
    +
    + +

    Grid box area for lambert conformal conical.

    +

    This subprogram computes the grid box area for a lambert conformal conical grid.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 Gayno initial version
    2015-09-17 Gayno rename as "lambert_conf_grid_area"
    2018-07-20 Wesley pass in dr for threading.
    +
    Parameters
    + + + + + +
    [in]rlatlatitude of grid point in degrees (real)
    [in]fillfill value for undefined points (real)
    [in]drdistance from pole point (real)
    [out]areaarea weights in m**2 (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 468 of file ip_lambert_conf_grid_mod.F90.

    + +

    References an, dxs, dys, and rerth.

    + +

    Referenced by gdswzd_lambert_conf().

    + +
    +
    + +

    ◆ lambert_conf_map_jacob()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_lambert_conf_grid_mod::lambert_conf_map_jacob (real, intent(in) RLAT,
    real, intent(in) FILL,
    real, intent(in) DLON,
    real, intent(in) DR,
    real, intent(out) XLON,
    real, intent(out) XLAT,
    real, intent(out) YLON,
    real, intent(out) YLAT 
    )
    +
    +private
    +
    + +

    Map jacobians for lambert conformal conical.

    +

    This subprogram computes the map jacobians for a lambert conformal conical grid.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 Gayno initial version
    2015-09-17 Gayno rename as "lambert_conf_map_jacob"
    2018-07-20 Wesley pass dlon and dr for threading.
    +
    Parameters
    + + + + + + + + + +
    [in]rlatgrid point latitude in degrees (real)
    [in]fillfill value for undefined points (real)
    [in]dlondistance from orientation longitude (real)
    [in]drdistance from pole point (real)
    [out]xlondx/dlon in 1/degrees (real)
    [out]xlatdx/dlat in 1/degrees (real)
    [out]ylondy/dlon in 1/degrees (real)
    [out]ylatdy/dlat in 1/degrees (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 427 of file ip_lambert_conf_grid_mod.F90.

    + +

    References an, dxs, dys, and h.

    + +

    Referenced by gdswzd_lambert_conf().

    + +
    +
    + +

    ◆ lambert_conf_vect_rot()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_lambert_conf_grid_mod::lambert_conf_vect_rot (real, intent(in) DLON,
    real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    +private
    +
    + +

    Vector rotation fields for lambert conformal conical.

    +

    This subprogram computes the vector rotation sines and cosines for a lambert conformal conical grid.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "lambert_conf_vect_rot"
    2018-07-20 wesley pass in dlon for threading.
    +
    Parameters
    + + + + +
    [in]dlonfrom orientation longitude (real)
    [out]crotvector rotation cosines (real)
    [out]srotvector rotation sines (real) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 390 of file ip_lambert_conf_grid_mod.F90.

    + +

    References an, and irot.

    + +

    Referenced by gdswzd_lambert_conf().

    + +
    +
    +

    Variable Documentation

    + +

    ◆ an

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::an
    +
    +private
    +
    + +

    Cone factor.

    + +

    Definition at line 45 of file ip_lambert_conf_grid_mod.F90.

    + +

    Referenced by gdswzd_lambert_conf(), lambert_conf_grid_area(), lambert_conf_map_jacob(), and lambert_conf_vect_rot().

    + +
    +
    + +

    ◆ dxs

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::dxs
    +
    +private
    +
    + +

    x-direction grid length adjusted for scan mode.

    +

    GRIB2, Section 3, octets 56-59.

    + +

    Definition at line 46 of file ip_lambert_conf_grid_mod.F90.

    + +

    Referenced by gdswzd_lambert_conf(), lambert_conf_grid_area(), and lambert_conf_map_jacob().

    + +
    +
    + +

    ◆ dys

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::dys
    +
    +private
    +
    + +

    y-direction grid length adjusted for scan model.

    +

    GRIB2, Section 3, octets 60-63.

    + +

    Definition at line 47 of file ip_lambert_conf_grid_mod.F90.

    + +

    Referenced by gdswzd_lambert_conf(), lambert_conf_grid_area(), and lambert_conf_map_jacob().

    + +
    +
    + +

    ◆ h

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::h
    +
    +private
    +
    + +

    Hemisphere flag.

    +

    1-NH, minus 1-SH.

    + +

    Definition at line 48 of file ip_lambert_conf_grid_mod.F90.

    + +

    Referenced by gdswzd_lambert_conf(), and lambert_conf_map_jacob().

    + +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_lambert_conf_grid_mod::irot
    +
    +private
    +
    + +

    vector rotation flag.

    +

    When "1", vectors are grid relative. When "0", vectors are earth relative. GRIB2, Section 3, octet 55.

    + +

    Definition at line 44 of file ip_lambert_conf_grid_mod.F90.

    + +

    Referenced by gdswzd_lambert_conf(), and lambert_conf_vect_rot().

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::rerth
    +
    +private
    +
    + +

    Radius of the earth.

    +

    GRIB2, Section 3, octets 15-30.

    + +

    Definition at line 49 of file ip_lambert_conf_grid_mod.F90.

    + +

    Referenced by gdswzd_lambert_conf(), and lambert_conf_grid_area().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__lambert__conf__grid__mod.js b/ver-5.1.0/namespaceip__lambert__conf__grid__mod.js new file mode 100644 index 00000000..b1bbe278 --- /dev/null +++ b/ver-5.1.0/namespaceip__lambert__conf__grid__mod.js @@ -0,0 +1,16 @@ +var namespaceip__lambert__conf__grid__mod = +[ + [ "ip_lambert_conf_grid", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid" ], + [ "gdswzd_lambert_conf", "namespaceip__lambert__conf__grid__mod.html#a5ebb9e4f1bd58caa254771b305c94f71", null ], + [ "init_grib1", "namespaceip__lambert__conf__grid__mod.html#a5544708e893ffcfbe7d958fdec700eea", null ], + [ "init_grib2", "namespaceip__lambert__conf__grid__mod.html#acb0339a9fff4fff6c2017d37f8bed0cf", null ], + [ "lambert_conf_grid_area", "namespaceip__lambert__conf__grid__mod.html#a15c44b47172b926aea840caee9723b1c", null ], + [ "lambert_conf_map_jacob", "namespaceip__lambert__conf__grid__mod.html#a5e1d42f0027236f47467e25c525e66ae", null ], + [ "lambert_conf_vect_rot", "namespaceip__lambert__conf__grid__mod.html#a58187073914efa18eca897c6ec203b71", null ], + [ "an", "namespaceip__lambert__conf__grid__mod.html#a82b75fe2d8495aab75b225c6309e61c8", null ], + [ "dxs", "namespaceip__lambert__conf__grid__mod.html#a196e94b5a2add34133c87f845394fa81", null ], + [ "dys", "namespaceip__lambert__conf__grid__mod.html#aad8b04b77b0920dbf9ed3827e2e8cfd7", null ], + [ "h", "namespaceip__lambert__conf__grid__mod.html#aa91572e8b5ba3559c041f1750b6696c6", null ], + [ "irot", "namespaceip__lambert__conf__grid__mod.html#a7dea876ed4206c5ecc0444aadb7d6acd", null ], + [ "rerth", "namespaceip__lambert__conf__grid__mod.html#a9f0538d092cd7d2829a5b98247eb560d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__mercator__grid__mod.html b/ver-5.1.0/namespaceip__mercator__grid__mod.html new file mode 100644 index 00000000..d6e63329 --- /dev/null +++ b/ver-5.1.0/namespaceip__mercator__grid__mod.html @@ -0,0 +1,728 @@ + + + + + + + +NCEPLIBS-ip: ip_mercator_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_mercator_grid_mod Module Reference
    +
    +
    + +

    GDS wizard for mercator cylindrical. +More...

    + + + + +

    +Data Types

    type  ip_mercator_grid
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_mercator (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for mercator cylindrical. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes a mercator grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Init GRIB2. More...
     
    subroutine mercator_grid_area (RLAT, AREA)
     Grid box area for mercator cylindrical grids. More...
     
    subroutine mercator_map_jacob (RLAT, XLON, XLAT, YLON, YLAT)
     Map jacobians for mercator cylindrical grids. More...
     
    subroutine mercator_vect_rot (CROT, SROT)
     Vector rotation fields for mercator cylindrical grids. More...
     
    + + + + + + + + + + +

    +Variables

    real dlon
     Longitudinal direction grid length. More...
     
    real dphi
     Latitudinal direction grid length. More...
     
    real rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +

    GDS wizard for mercator cylindrical.

    +

    Octet numbers refer to GRIB2 - GRID DEFINITION TEMPLATE 3.10 - Mercator.

    +
    Author
    Iredell
    +
    Date
    96-04-10
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_mercator()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_mercator_grid_mod::gdswzd_mercator (class(ip_mercator_grid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    GDS wizard for mercator cylindrical.

    +

    This routine decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for mercator cylindrical projections.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians and the grid box areas may be returned. To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. to compute the grid box areas, the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell Initial
    96-10-01 iredell protected against unresolvable points
    97-10-20 iredell include map options
    2015-01-21 gayno merger of gdswiz01() and gdswzd01(). Make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. Make part of a module. move vector rotation, map jacobian and grid box area computations to separate subroutines.
    2015-07-13 gayno convert to grib 2. replace grib 1 kgds array with grib 2 grid definition template array. Rename.
    2018-07-20 wesley add threads.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfgrid descriptor.
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsmaximum number of coordinates
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xpts(npts) grid x point coordinates if iopt>0
    [in,out]ypts(npts) grid y point coordinates if iopt>0
    [in,out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed
    [out]crotoptional (npts) clockwise vector rotation cosines
    [out]srotoptional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonoptional (npts) dx/dlon in 1/degrees
    [out]xlatoptional (npts) dx/dlat in 1/degrees
    [out]ylonoptional (npts) dy/dlon in 1/degrees
    [out]ylatoptional (npts) dy/dlat in 1/degrees
    [out]areaoptional (npts) area weights in m**2 (proportional to the square of the map factor)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 198 of file ip_mercator_grid_mod.F90.

    + +

    References dlon, dphi, mercator_grid_area(), mercator_map_jacob(), mercator_vect_rot(), and rerth.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_mercator_grid_mod::init_grib1 (class(ip_mercator_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes a mercator grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfip_mercator_grid object.
    [in]g1_descGRIB1 descriptor.
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 52 of file ip_mercator_grid_mod.F90.

    + +

    References ip_constants_mod::dpr.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_mercator_grid_mod::init_grib2 (class(ip_mercator_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Init GRIB2.

    +
    Parameters
    + + + +
    [in,out]selfip_mercator_grid object.
    [in]g2_descGRIB2 descriptor.
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 100 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ mercator_grid_area()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_mercator_grid_mod::mercator_grid_area (real, intent(in) RLAT,
    real, intent(out) AREA 
    )
    +
    +private
    +
    + +

    Grid box area for mercator cylindrical grids.

    +

    This subprogram computes the grid box area for a mercator cylindrical grid.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "mercator_grid_area"
    +
    Parameters
    + + + +
    [in]rlatlatitude of grid point in degrees (real)
    [out]areaarea weights in m**2 (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 387 of file ip_mercator_grid_mod.F90.

    + +

    References dlon, dphi, and rerth.

    + +

    Referenced by gdswzd_mercator().

    + +
    +
    + +

    ◆ mercator_map_jacob()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_mercator_grid_mod::mercator_map_jacob (real, intent(in) RLAT,
    real, intent(out) XLON,
    real, intent(out) XLAT,
    real, intent(out) YLON,
    real, intent(out) YLAT 
    )
    +
    +private
    +
    + +

    Map jacobians for mercator cylindrical grids.

    +

    This subprogram computes the map jacobians for a mercator cylindrical grid.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "mercator_map_jacob"
    +
    Parameters
    + + + + + + +
    [in]rlatlatitude in degrees (real)
    [out]xlondx/dlon in 1/degrees (real)
    [out]xlatdx/dlat in 1/degrees (real)
    [out]ylondy/dlon in 1/degrees (real)
    [out]ylatdy/dlat in 1/degrees (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 359 of file ip_mercator_grid_mod.F90.

    + +

    References dlon, and dphi.

    + +

    Referenced by gdswzd_mercator().

    + +
    +
    + +

    ◆ mercator_vect_rot()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_mercator_grid_mod::mercator_vect_rot (real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    +private
    +
    + +

    Vector rotation fields for mercator cylindrical grids.

    +

    This subprogram computes the vector rotation sines and cosines for a mercator cylindrical grid.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "mercator_vect_rot".
    +
    Parameters
    + + + +
    [in]crotclockwise vector rotation cosines (real)
    [in]srotclockwise vector rotation sines (real) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 331 of file ip_mercator_grid_mod.F90.

    + +

    Referenced by gdswzd_mercator().

    + +
    +
    +

    Variable Documentation

    + +

    ◆ dlon

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::dlon
    +
    +private
    +
    + +

    Longitudinal direction grid length.

    + +

    Definition at line 40 of file ip_mercator_grid_mod.F90.

    + +

    Referenced by gdswzd_mercator(), mercator_grid_area(), and mercator_map_jacob().

    + +
    +
    + +

    ◆ dphi

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::dphi
    +
    +private
    +
    + +

    Latitudinal direction grid length.

    + +

    Definition at line 41 of file ip_mercator_grid_mod.F90.

    + +

    Referenced by gdswzd_mercator(), mercator_grid_area(), and mercator_map_jacob().

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::rerth
    +
    +private
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 42 of file ip_mercator_grid_mod.F90.

    + +

    Referenced by gdswzd_mercator(), and mercator_grid_area().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__mercator__grid__mod.js b/ver-5.1.0/namespaceip__mercator__grid__mod.js new file mode 100644 index 00000000..c9942f70 --- /dev/null +++ b/ver-5.1.0/namespaceip__mercator__grid__mod.js @@ -0,0 +1,13 @@ +var namespaceip__mercator__grid__mod = +[ + [ "ip_mercator_grid", "structip__mercator__grid__mod_1_1ip__mercator__grid.html", "structip__mercator__grid__mod_1_1ip__mercator__grid" ], + [ "gdswzd_mercator", "namespaceip__mercator__grid__mod.html#acc39017fa51125972ab8e755e16d339e", null ], + [ "init_grib1", "namespaceip__mercator__grid__mod.html#a4125dba8b09e9b69933e224b00f4758d", null ], + [ "init_grib2", "namespaceip__mercator__grid__mod.html#aad3b6fef6ee74b8df984c0159ff29c82", null ], + [ "mercator_grid_area", "namespaceip__mercator__grid__mod.html#a952ab9add18587c4dbe54699feb8eafd", null ], + [ "mercator_map_jacob", "namespaceip__mercator__grid__mod.html#ab93a0a6ae8c5f5056abece1dcffdc57a", null ], + [ "mercator_vect_rot", "namespaceip__mercator__grid__mod.html#aea5e18faf7a18bf8d06c87ccb11f3e17", null ], + [ "dlon", "namespaceip__mercator__grid__mod.html#a14e1cb3f8c05d2de49d2aa8dc69d104f", null ], + [ "dphi", "namespaceip__mercator__grid__mod.html#a156e638e2d1b93e388d674462ac3f732", null ], + [ "rerth", "namespaceip__mercator__grid__mod.html#adaa27c5d41ee24185b6d020420ce9419", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__mod.html b/ver-5.1.0/namespaceip__mod.html new file mode 100644 index 00000000..018f82bc --- /dev/null +++ b/ver-5.1.0/namespaceip__mod.html @@ -0,0 +1,104 @@ + + + + + + + +NCEPLIBS-ip: ip_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ip_mod Module Reference
    +
    +
    + +

    Top-level module for the ip library which re-exports public routines such as ipolates, ipolatev, and gdswzd. +More...

    +

    Detailed Description

    +

    Top-level module for the ip library which re-exports public routines such as ipolates, ipolatev, and gdswzd.

    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__polar__stereo__grid__mod.html b/ver-5.1.0/namespaceip__polar__stereo__grid__mod.html new file mode 100644 index 00000000..930a7b4b --- /dev/null +++ b/ver-5.1.0/namespaceip__polar__stereo__grid__mod.html @@ -0,0 +1,918 @@ + + + + + + + +NCEPLIBS-ip: ip_polar_stereo_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_polar_stereo_grid_mod Module Reference
    +
    +
    + +

    GDS wizard for polar stereographic azimuthal. +More...

    + + + + +

    +Data Types

    type  ip_polar_stereo_grid
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_polar_stereo (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for polar stereographic azimuthal. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes a polar stereographic grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Initializes a polar stereographic grid given a grib2_descriptor object. More...
     
    subroutine polar_stereo_grid_area (RLAT, DR2, AREA)
     Grid box area for polar stereographic grids. More...
     
    subroutine polar_stereo_map_jacob (RLON, RLAT, DR2, XLON, XLAT, YLON, YLAT)
     Map jacobians for polar stereographic grids. More...
     
    subroutine polar_stereo_vect_rot (RLON, CROT, SROT)
     Vector rotation fields for polar stereographic grids. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    real de2
     Square of DE. More...
     
    real dxs
     Local copy of dxs. More...
     
    real dys
     Local copy of dys. More...
     
    real e2
     Eccentricity squared. More...
     
    real h
     Local copy of h. More...
     
    integer irot
     Local copy of irot. More...
     
    real orient
     Local copy of orient. More...
     
    real rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +

    GDS wizard for polar stereographic azimuthal.

    +

    Octet numbers refer to [GRIB2 - GRID DEFINITION TEMPLATE 3.20 Polar stereographic projection](https://www.nco.ncep.noaa.gov/pmb/docs/grib2/grib2_doc/grib2_temp3-20.shtml).

    +
    Author
    Iredell
    +
    Date
    96-04-10
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_polar_stereo()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_polar_stereo_grid_mod::gdswzd_polar_stereo (class(ip_polar_stereo_grid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    GDS wizard for polar stereographic azimuthal.

    +

    This subprogram decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for polar stereographic azimuthal projections.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, map jacobians, and grid box areas may be returned as well. Routine works for both spherical and elliptical earths with the exception of the map jacobians and grid box areas, which are only computed for spherical earths.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. to compute the grid box areas, the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell Initial
    97-10-20 iredell include map options
    09-05-13 gayno ensure area always positive
    2015-01-21 gayno merger of gdswiz05 and gdswzd05. make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. make part of a module. move vector rotation, map jacobian and grid box area computations to separate subroutines. include option for elliptical earths.
    2015-07-13 gayno convert to grib 2. replace grib 1 kgds array with grib 2 grid definition template array. rename routine.
    2018-07-20 wesley add threading.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfgrid
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsmaximum number of coordinates
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xpts(npts) grid x point coordinates if iopt>0
    [in,out]ypts(npts) grid y point coordinates if iopt>0
    [in,out]rlon(npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlat(npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretnumber of valid points computed
    [out]crotoptional (npts) clockwise vector rotation cosines
    [out]srotoptional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonoptional (npts) dx/dlon in 1/degrees
    [out]xlatoptional (npts) dx/dlat in 1/degrees
    [out]ylonoptional (npts) dy/dlon in 1/degrees
    [out]ylatoptional (npts) dy/dlat in 1/degrees
    [out]areaoptional (npts) area weights in m**2 (proportional to the square of the map factor)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 239 of file ip_polar_stereo_grid_mod.F90.

    + +

    References de2, dxs, dys, e2, h, irot, orient, polar_stereo_grid_area(), polar_stereo_map_jacob(), polar_stereo_vect_rot(), and rerth.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_polar_stereo_grid_mod::init_grib1 (class(ip_polar_stereo_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes a polar stereographic grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 63 of file ip_polar_stereo_grid_mod.F90.

    + +

    References ip_constants_mod::dpr, ip_constants_mod::e2_wgs84, and ip_constants_mod::rerth_wgs84.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_polar_stereo_grid_mod::init_grib2 (class(ip_polar_stereo_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a polar stereographic grid given a grib2_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 128 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ polar_stereo_grid_area()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_polar_stereo_grid_mod::polar_stereo_grid_area (real, intent(in) RLAT,
    real, intent(in) DR2,
    real, intent(out) AREA 
    )
    +
    +private
    +
    + +

    Grid box area for polar stereographic grids.

    +

    This subprogram computes the grid box area for a polar stereographic azimuthal grid (spherical earth).

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "polar_stereo_grid_area".
    2018-07-20 wesley pass in dr2 for threading.
    +
    Parameters
    + + + + +
    [in]rlatlatitude of grid point in degrees (real)
    [in]dr2squared distance from pole (real)
    [out]areaarea weights in m**2 (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 563 of file ip_polar_stereo_grid_mod.F90.

    + +

    References de2, dxs, dys, and rerth.

    + +

    Referenced by gdswzd_polar_stereo().

    + +
    +
    + +

    ◆ polar_stereo_map_jacob()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_polar_stereo_grid_mod::polar_stereo_map_jacob (real, intent(in) RLON,
    real, intent(in) RLAT,
    real, intent(in) DR2,
    real, intent(out) XLON,
    real, intent(out) XLAT,
    real, intent(out) YLON,
    real, intent(out) YLAT 
    )
    +
    +private
    +
    + +

    Map jacobians for polar stereographic grids.

    +

    This subprogram computes the map jacobians for a polar stereographic azimuthal grid (spherical earth).

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "polar_stereo_map_jacob"
    2018-07-20 wesley pass in dr2 for threading.
    +
    Parameters
    + + + + + + + + +
    [in]rlonlongitude in degrees (real)
    [in]rlatlatitude in degrees (real)
    [in]dr2squared distance from pole (real)
    [out]xlondx/dlon in 1/degrees (real)
    [out]xlatdx/dlat in 1/degrees (real)
    [out]ylondy/dlon in 1/degrees (real)
    [out]ylatdy/dlat in 1/degrees (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 520 of file ip_polar_stereo_grid_mod.F90.

    + +

    References de2, dxs, dys, h, and orient.

    + +

    Referenced by gdswzd_polar_stereo().

    + +
    +
    + +

    ◆ polar_stereo_vect_rot()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_polar_stereo_grid_mod::polar_stereo_vect_rot (real, intent(in) RLON,
    real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    +private
    +
    + +

    Vector rotation fields for polar stereographic grids.

    +

    This subprogram computes the vector rotation sines and cosines for a polar stereographic azimuthal grid.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "polar_stereo_vect_rot"
    +
    Parameters
    + + + + +
    [in]rlongrid point longitude in degrees (real)
    [in]crotclockwise vector rotation cosines (real)
    [in]srotclockwise vector rotation sines (real) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 482 of file ip_polar_stereo_grid_mod.F90.

    + +

    References h, irot, and orient.

    + +

    Referenced by gdswzd_polar_stereo().

    + +
    +
    +

    Variable Documentation

    + +

    ◆ de2

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::de2
    +
    +private
    +
    + +

    Square of DE.

    + +

    Definition at line 45 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo(), polar_stereo_grid_area(), and polar_stereo_map_jacob().

    + +
    +
    + +

    ◆ dxs

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::dxs
    +
    +private
    +
    + +

    Local copy of dxs.

    + +

    Definition at line 46 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo(), polar_stereo_grid_area(), and polar_stereo_map_jacob().

    + +
    +
    + +

    ◆ dys

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::dys
    +
    +private
    +
    + +

    Local copy of dys.

    + +

    Definition at line 47 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo(), polar_stereo_grid_area(), and polar_stereo_map_jacob().

    + +
    +
    + +

    ◆ e2

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::e2
    +
    +private
    +
    + +

    Eccentricity squared.

    + +

    Definition at line 48 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo().

    + +
    +
    + +

    ◆ h

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::h
    +
    +private
    +
    + +

    Local copy of h.

    + +

    Definition at line 50 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo(), polar_stereo_map_jacob(), and polar_stereo_vect_rot().

    + +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_polar_stereo_grid_mod::irot
    +
    +private
    +
    + +

    Local copy of irot.

    + +

    Definition at line 44 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo(), and polar_stereo_vect_rot().

    + +
    +
    + +

    ◆ orient

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::orient
    +
    +private
    +
    + +

    Local copy of orient.

    + +

    Definition at line 51 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo(), polar_stereo_map_jacob(), and polar_stereo_vect_rot().

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::rerth
    +
    +private
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 49 of file ip_polar_stereo_grid_mod.F90.

    + +

    Referenced by gdswzd_polar_stereo(), and polar_stereo_grid_area().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__polar__stereo__grid__mod.js b/ver-5.1.0/namespaceip__polar__stereo__grid__mod.js new file mode 100644 index 00000000..bef9f38c --- /dev/null +++ b/ver-5.1.0/namespaceip__polar__stereo__grid__mod.js @@ -0,0 +1,18 @@ +var namespaceip__polar__stereo__grid__mod = +[ + [ "ip_polar_stereo_grid", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid" ], + [ "gdswzd_polar_stereo", "namespaceip__polar__stereo__grid__mod.html#ae2694d90ab514a131e083dfba3b173c5", null ], + [ "init_grib1", "namespaceip__polar__stereo__grid__mod.html#a6ed76f58f30993cd7be84b7e03cf4d6f", null ], + [ "init_grib2", "namespaceip__polar__stereo__grid__mod.html#a5210b986366b503683ae966519d501e7", null ], + [ "polar_stereo_grid_area", "namespaceip__polar__stereo__grid__mod.html#a2a2e0854e5c129e320924a811cbd08e2", null ], + [ "polar_stereo_map_jacob", "namespaceip__polar__stereo__grid__mod.html#a386933f7e52c348b9d742df423e0e223", null ], + [ "polar_stereo_vect_rot", "namespaceip__polar__stereo__grid__mod.html#abe4d416201e986421a8e325a9b00e462", null ], + [ "de2", "namespaceip__polar__stereo__grid__mod.html#a605d287e34e60f553521a5de2da22962", null ], + [ "dxs", "namespaceip__polar__stereo__grid__mod.html#acf60181f89954e2ff31b08bb1b345354", null ], + [ "dys", "namespaceip__polar__stereo__grid__mod.html#aea7950530d06d9c59ff61bf706df0a0f", null ], + [ "e2", "namespaceip__polar__stereo__grid__mod.html#abf3a34d9bb00c39dac5225798aea4d5b", null ], + [ "h", "namespaceip__polar__stereo__grid__mod.html#a5a63da5168a1432a1af42c0b668f0645", null ], + [ "irot", "namespaceip__polar__stereo__grid__mod.html#a1269037aaecd12e75e17d8aac8e20c8c", null ], + [ "orient", "namespaceip__polar__stereo__grid__mod.html#aa4a88f48d7b78cfdfc54754882195d18", null ], + [ "rerth", "namespaceip__polar__stereo__grid__mod.html#a3315b2efb5cb9aebc0b2cb2773aa20b5", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__rot__equid__cylind__egrid__mod.html b/ver-5.1.0/namespaceip__rot__equid__cylind__egrid__mod.html new file mode 100644 index 00000000..a160a866 --- /dev/null +++ b/ver-5.1.0/namespaceip__rot__equid__cylind__egrid__mod.html @@ -0,0 +1,1105 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_egrid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_rot_equid_cylind_egrid_mod Module Reference
    +
    +
    + +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E. +More...

    + + + + +

    +Data Types

    type  ip_rot_equid_cylind_egrid
     
    + + + + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_rot_equid_cylind_egrid (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for rotated equidistant cylindrical grids. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine rot_equid_cylind_egrid_error (IOPT, FILL, RLAT, RLON, XPTS, YPTS, NPTS)
     Error handler. More...
     
    subroutine rot_equid_cylind_egrid_grid_area (FILL, AREA)
     Computes the grid box area for a rotated equidistant cylindrical grid. More...
     
    subroutine rot_equid_cylind_egrid_map_jacob (FILL, RLON, XLON, XLAT, YLON, YLAT)
     Computes the map jacobians for a rotated equidistant cylindrical grid. More...
     
    subroutine rot_equid_cylind_egrid_vect_rot (RLON, CROT, SROT)
     Computes the vector rotation sines and cosines for a rotated equidistant cylindrical grid. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    real(kind=kdclat
     Cosine of the latitude. More...
     
    real(kind=kdclat0
     Local copy of clat0. More...
     
    real(kind=kdclatr
     Cosine of the rotated latitude. More...
     
    real(kind=kdclon
     Cosine of the difference between rlon and rlon0. More...
     
    real(kind=kddlats
     Local copy of dlats. More...
     
    real(kind=kddlons
     Local copy of dlons. More...
     
    integer irot
     Local copy of irot. More...
     
    integer, parameter kd = real64
     Kind of reals. More...
     
    real(kind=kdrerth
     Radius of the Earth. More...
     
    real(kind=kdrlon0
     Local copy of rlon0. More...
     
    real(kind=kdslat
     Sine of the latitude. More...
     
    real(kind=kdslat0
     Local copy of slat0. More...
     
    real(kind=kdslatr
     Sine of the rotated latitude. More...
     
    +

    Detailed Description

    +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E.

    +

    (To handle the A through D grids, see ip_rot_equid_cylind_grid_mod).

    +

    The E stagger is a bit odd because the 'wind' points shift by half a grid box in each row. That makes the logic tricky. So the routine does its computations by rotating the grid by 45 degrees.

    +

    See more info about Awakawa grids.

    +

    Octet numbers refer to GRIB2 - GRID DEFINITION TEMPLATE 3.1 Rotate Latitude/Longitude.

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser
    +
    Date
    July 2021
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_rot_equid_cylind_egrid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_egrid_mod::gdswzd_rot_equid_cylind_egrid (class(ip_rot_equid_cylind_egrid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for rotated equidistant cylindrical grids.

    +

    Works for e-staggered rotated equidistant cylindrical projections. The scan mode determines whether this is an "h" or "v" grid.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values.

    +

    The actual number of valid points computed is returned too. Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present.

    +

    To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present.

    +

    To compute the grid box areas, the optional argument 'area' must be present.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid object gdswzd was called on.
    [in]ioptoption flag
      +
    • +1 to compute earth coords of selected grid coords.
    • +
    • -1 o compute grid coords of selected earth coords.
    • +
    +
    [in]nptsMaximum number of coordinates.
    [in]fillFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]xptsGrid x point coordinates if iopt>0.
    [in,out]yptsGrid y point coordinates if iopt>0.
    [in,out]rlonEarth longitudes in degrees e if iopt<0 (Acceptable range: -360. to 360.)
    [in,out]rlatEarth latitudes in degrees n if iopt<0 (Acceptable range: -90. to 90.)
    [out]nretNumber of valid points computed.
    [out]crotOptional clockwise vector rotation cosines.
    [out]srotOptional clockwise vector rotation sines.
    [out]xlonOptional dx/dlon in 1/degrees.
    [out]xlatOptional dx/dlat in 1/degrees.
    [out]ylonOptional dy/dlon in 1/degrees.
    [out]ylatOptional dy/dlat in 1/degrees.
    [out]areaOptional area weights in m**2.
    +
    +
    +
    Author
    Mark Iredell, George Gayno, Kyle Gerheiser
    +
    Date
    Jan 2015
    + +

    Definition at line 267 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    References clat, clat0, clatr, clon, dlats, dlons, irot, rerth, rlon0, rot_equid_cylind_egrid_error(), rot_equid_cylind_egrid_grid_area(), rot_equid_cylind_egrid_map_jacob(), rot_equid_cylind_egrid_vect_rot(), slat, slat0, and slatr.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_egrid_mod::init_grib1 (class(ip_rot_equid_cylind_egrid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 86 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    References ip_constants_mod::dpr.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_egrid_mod::init_grib2 (class(ip_rot_equid_cylind_egrid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 163 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ rot_equid_cylind_egrid_error()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_error (integer, intent(in) IOPT,
    real, intent(in) FILL,
    real, dimension(npts), intent(out) RLAT,
    real, dimension(npts), intent(out) RLON,
    real, dimension(npts), intent(out) XPTS,
    real, dimension(npts), intent(out) YPTS,
    integer, intent(in) NPTS 
    )
    +
    +private
    +
    + +

    Error handler.

    +

    UPON AN ERROR, THIS SUBPROGRAM ASSIGNS A "FILL" VALUE TO THE OUTPUT FIELDS.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    2015-07-13 GAYNO Initial version
    2015-09-17 GAYNO Rename as "rot_equid_cylind_egrid_error"
    +
    Parameters
    + + + + + + + + +
    [in]ioptoption flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]fillfill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [out]rlat(npts) earth latitudes in degrees n if iopt<0
    [out]rlon(npts) earth longitudes in degrees e if iopt<0
    [out]xpts(npts) grid x point coordinates if iopt>0
    [out]ypts(npts) grid y point coordinates if iopt>0
    [in]nptsmaximum number of coordinates
    +
    +
    +
    Author
    GAYNO
    +
    Date
    2015-07-13
    + +

    Definition at line 482 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid().

    + +
    +
    + +

    ◆ rot_equid_cylind_egrid_grid_area()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_grid_area (real, intent(in) FILL,
    real, intent(out) AREA 
    )
    +
    +private
    +
    + +

    Computes the grid box area for a rotated equidistant cylindrical grid.

    +
    Parameters
    + + + +
    [in]fillFill value for undefined points.
    [out]areaArea weights in m^2.
    +
    +
    +
    Author
    George Gayno
    +
    Date
    Jan 2015
    + +

    Definition at line 587 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    References clatr, dlats, dlons, and rerth.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid().

    + +
    +
    + +

    ◆ rot_equid_cylind_egrid_map_jacob()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_map_jacob (real, intent(in) FILL,
    real, intent(in) RLON,
    real, intent(out) XLON,
    real, intent(out) XLAT,
    real, intent(out) YLON,
    real, intent(out) YLAT 
    )
    +
    +private
    +
    + +

    Computes the map jacobians for a rotated equidistant cylindrical grid.

    +
    Parameters
    + + + + + + + +
    [in]fillFill value for undefined points.
    [in]rlonLongitude in degrees.
    [out]xlondx/dlon in 1/degrees.
    [out]xlatdx/dlat in 1/degrees.
    [out]ylondy/dlon in 1/degrees.
    [out]ylatdy/dlat in 1/degrees.
    +
    +
    +
    Author
    George Gayno
    +
    Date
    Jan 2015
    + +

    Definition at line 549 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    References clat, clat0, clatr, clon, dlats, dlons, rlon0, slat, and slat0.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid().

    + +
    +
    + +

    ◆ rot_equid_cylind_egrid_vect_rot()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_egrid_mod::rot_equid_cylind_egrid_vect_rot (real, intent(in) RLON,
    real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    +private
    +
    + +

    Computes the vector rotation sines and cosines for a rotated equidistant cylindrical grid.

    +
    Parameters
    + + + + +
    [in]rlonLongitude in degrees.
    [out]crotClockwise vector rotation cosines.
    [out]srotClockwise vector rotation sines.
    +
    +
    +
    Note
    ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    +
    Author
    George Gayno
    +
    Date
    Jan 2015
    + +

    Definition at line 514 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    References clat, clat0, clatr, clon, irot, rlon0, slat, slat0, and slatr.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid().

    + +
    +
    +

    Variable Documentation

    + +

    ◆ clat

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clat
    +
    +private
    +
    + +

    Cosine of the latitude.

    + +

    Definition at line 64 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid(), rot_equid_cylind_egrid_map_jacob(), and rot_equid_cylind_egrid_vect_rot().

    + +
    +
    + +

    ◆ clat0

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clat0
    +
    +private
    +
    +
    + +

    ◆ clatr

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clatr
    +
    +private
    +
    +
    + +

    ◆ clon

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::clon
    +
    +private
    +
    + +

    Cosine of the difference between rlon and rlon0.

    + +

    Definition at line 67 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid(), rot_equid_cylind_egrid_map_jacob(), and rot_equid_cylind_egrid_vect_rot().

    + +
    +
    + +

    ◆ dlats

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::dlats
    +
    +private
    +
    +
    + +

    ◆ dlons

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::dlons
    +
    +private
    +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_rot_equid_cylind_egrid_mod::irot
    +
    +private
    +
    + +

    Local copy of irot.

    + +

    Definition at line 62 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid(), and rot_equid_cylind_egrid_vect_rot().

    + +
    +
    + +

    ◆ kd

    + +
    +
    + + + + + +
    + + + + +
    integer, parameter ip_rot_equid_cylind_egrid_mod::kd = real64
    +
    +private
    +
    + +

    Kind of reals.

    + +

    Definition at line 35 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::rerth
    +
    +private
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 70 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid(), and rot_equid_cylind_egrid_grid_area().

    + +
    +
    + +

    ◆ rlon0

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::rlon0
    +
    +private
    +
    +
    + +

    ◆ slat

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::slat
    +
    +private
    +
    + +

    Sine of the latitude.

    + +

    Definition at line 72 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid(), rot_equid_cylind_egrid_map_jacob(), and rot_equid_cylind_egrid_vect_rot().

    + +
    +
    + +

    ◆ slat0

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::slat0
    +
    +private
    +
    +
    + +

    ◆ slatr

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_egrid_mod::slatr
    +
    +private
    +
    + +

    Sine of the rotated latitude.

    + +

    Definition at line 74 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind_egrid(), and rot_equid_cylind_egrid_vect_rot().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__rot__equid__cylind__egrid__mod.js b/ver-5.1.0/namespaceip__rot__equid__cylind__egrid__mod.js new file mode 100644 index 00000000..36361095 --- /dev/null +++ b/ver-5.1.0/namespaceip__rot__equid__cylind__egrid__mod.js @@ -0,0 +1,24 @@ +var namespaceip__rot__equid__cylind__egrid__mod = +[ + [ "ip_rot_equid_cylind_egrid", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid" ], + [ "gdswzd_rot_equid_cylind_egrid", "namespaceip__rot__equid__cylind__egrid__mod.html#a9ad11a599fc0bdc4a9ece86a3b1cc399", null ], + [ "init_grib1", "namespaceip__rot__equid__cylind__egrid__mod.html#aa65616b97df9c89893161ff802e16eab", null ], + [ "init_grib2", "namespaceip__rot__equid__cylind__egrid__mod.html#af3cbc17f27800bc67135feacb2c1c3e0", null ], + [ "rot_equid_cylind_egrid_error", "namespaceip__rot__equid__cylind__egrid__mod.html#a69d4e473a1a276b855d37518dc6f1d48", null ], + [ "rot_equid_cylind_egrid_grid_area", "namespaceip__rot__equid__cylind__egrid__mod.html#a4e6c3a758f9a6474d3e499fabeac0640", null ], + [ "rot_equid_cylind_egrid_map_jacob", "namespaceip__rot__equid__cylind__egrid__mod.html#a45b87f77888d428ca0f551edae8da94e", null ], + [ "rot_equid_cylind_egrid_vect_rot", "namespaceip__rot__equid__cylind__egrid__mod.html#a9ac1f76f515981c464e8391d8c941888", null ], + [ "clat", "namespaceip__rot__equid__cylind__egrid__mod.html#aac1018f3ca1b7ad4b5d33f245678d416", null ], + [ "clat0", "namespaceip__rot__equid__cylind__egrid__mod.html#a83649d02b55d6252d59514aec4eb3142", null ], + [ "clatr", "namespaceip__rot__equid__cylind__egrid__mod.html#aad4e673a94976b2b5a9bfad9de9e6e30", null ], + [ "clon", "namespaceip__rot__equid__cylind__egrid__mod.html#a557d49c609fc8c5c564a3a5f10174eec", null ], + [ "dlats", "namespaceip__rot__equid__cylind__egrid__mod.html#a0b2faca2325b413e1f3207778d4c4c68", null ], + [ "dlons", "namespaceip__rot__equid__cylind__egrid__mod.html#af04f8a1044f4d9a7e0d13d38887adcbc", null ], + [ "irot", "namespaceip__rot__equid__cylind__egrid__mod.html#a93ed996cf2dc9569e356256ec946b571", null ], + [ "kd", "namespaceip__rot__equid__cylind__egrid__mod.html#a50497d277c347a2991b0e34e85f1787e", null ], + [ "rerth", "namespaceip__rot__equid__cylind__egrid__mod.html#aed7a425f4d300fe14ac1b48d76378edb", null ], + [ "rlon0", "namespaceip__rot__equid__cylind__egrid__mod.html#a134acf8ab7f40ff49ce8e03daad900e6", null ], + [ "slat", "namespaceip__rot__equid__cylind__egrid__mod.html#ae1f8503816477fb685fbadc7a9e50f0b", null ], + [ "slat0", "namespaceip__rot__equid__cylind__egrid__mod.html#a72199c827ab3218b7f2aba35ad30b94d", null ], + [ "slatr", "namespaceip__rot__equid__cylind__egrid__mod.html#a4ccccb64d3e7236d8cac19c279aab900", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__rot__equid__cylind__grid__mod.html b/ver-5.1.0/namespaceip__rot__equid__cylind__grid__mod.html new file mode 100644 index 00000000..c07f5a15 --- /dev/null +++ b/ver-5.1.0/namespaceip__rot__equid__cylind__grid__mod.html @@ -0,0 +1,1176 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_rot_equid_cylind_grid_mod Module Reference
    +
    +
    + +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D. +More...

    + + + + +

    +Data Types

    type  ip_rot_equid_cylind_grid
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_rot_equid_cylind (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     GDS wizard for rotated equidistant cylindrical. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine init_grib2_default (self, g2_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine init_grib2_ncep_post (self, g2_desc)
     Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    subroutine rot_equid_cylind_error (IOPT, FILL, RLAT, RLON, XPTS, YPTS, NPTS)
     Error handler. More...
     
    subroutine rot_equid_cylind_grid_area (CLATR, FILL, AREA)
     Grid box area for rotated equidistant cylindrical grids - non "e" stagger. More...
     
    subroutine rot_equid_cylind_map_jacob (FILL, RLON, CLATR, CLAT, SLAT, CLON, XLON, XLAT, YLON, YLAT)
     Map jacobians for rotated equidistant cylindrical grids - non "e" stagger. More...
     
    subroutine rot_equid_cylind_vect_rot (RLON, CLATR, SLATR, CLAT, SLAT, CLON, CROT, SROT)
     Vector rotation fields for rotated equidistant cylindrical grids - non "e" stagger. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Variables

    real(kind=kdclat0
     Local copy of clat0. More...
     
    real(kind=kddlats
     Local copy of dlats. More...
     
    real(kind=kddlons
     Local copy of dlons. More...
     
    integer irot
     Local copy of irot. More...
     
    integer, parameter kd = real64
     Fortran kind for reals. More...
     
    real(kind=kdrerth
     Radius of the Earth. More...
     
    real(kind=kdrlon0
     Local copy of rlon0. More...
     
    real(kind=kdslat0
     Local copy of slat0. More...
     
    +

    Detailed Description

    +

    Rotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D.

    +

    (To handle the E grid, see ip_rot_equid_cylind_egrid_mod).

    +

    See more info about Awakawa grids.

    +

    Octet numbers refer to GRIB2 - GRID DEFINITION TEMPLATE 3.1 Rotate Latitude/Longitude.

    +
    Author
    Gayno
    +
    Date
    2007-NOV-15
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_rot_equid_cylind()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::gdswzd_rot_equid_cylind (class(ip_rot_equid_cylind_grid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    GDS wizard for rotated equidistant cylindrical.

    +

    This subprogram decodes the grib 2 grid definition template (passed in integer form as decoded by the ncep g2 library) and returns one of the following:

      +
    • (iopt=+1) earth coordinates of selected grid coordinates
    • +
    • (iopt=-1) grid coordinates of selected earth coordinates
    • +
    +

    Works for non-"e" staggered rotated equidistant cylindrical projections. the scan mode (section 3, octet 72, bits 5-6) determine whether this is an "h" or "v" grid.

    +

    If the selected coordinates are more than one gridpoint beyond the the edges of the grid domain, then the relevant output elements are set to fill values. The actual number of valid points computed is returned too.

    +

    Optionally, the vector rotations, the map jacobians and the grid box areas may be returned as well.

    +

    To compute the vector rotations, the optional arguments 'srot' and 'crot' must be present. To compute the map jacobians, the optional arguments 'xlon', 'xlat', 'ylon', 'ylat' must be present. To compute the grid box areas, the optional argument 'area' must be present.

    +

    +Program History Log

    + + + + + + + + + + + +
    Date Programmer Comments
    2010-jan-15 gayno based on routines gdswzdcb and gdswzdca
    2015-jan-21 gayno merger of gdswizcd and gdswzdcd. make crot,sort,xlon,xlat,ylon,ylat and area optional arguments. make part of a module. move vector rotation, map jacobian and grid box area computations to separate subroutines.
    2015-jul-13 gayno convert to grib 2. replace grib 1 kgds array with grib 2 grid definition template array. rename as "gdswzd_rot_equid_cylind."
    2018-07-20 wesley add threads.
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfModule reference.
    [in]ioptinteger option flag
      +
    • 1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]nptsinteger maximum number of coordinates
    [in]fillreal fill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [in,out]xptsreal (npts) grid x point coordinates if iopt>0
    [in,out]yptsreal (npts) grid y point coordinates if iopt>0
    [in,out]rlonreal (npts) earth longitudes in degrees e if iopt<0 (acceptable range: -360. to 360.)
    [in,out]rlatreal (npts) earth latitudes in degrees n if iopt<0 (acceptable range: -90. to 90.)
    [out]nretinteger number of valid points computed
    [out]crotreal, optional (npts) clockwise vector rotation cosines
    [out]srotreal, optional (npts) clockwise vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]xlonreal, optional (npts) dx/dlon in 1/degrees
    [out]xlatreal, optional (npts) dx/dlat in 1/degrees
    [out]ylonreal, optional (npts) dy/dlon in 1/degrees
    [out]ylatreal, optional (npts) dy/dlat in 1/degrees
    [out]areareal, optional (npts) area weights in m**2
    +
    +
    +
    Author
    Gayno
    +
    Date
    2007-NOV-15
    + +

    Definition at line 362 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    References clat0, dlats, dlons, irot, rerth, rlon0, rot_equid_cylind_error(), rot_equid_cylind_grid_area(), rot_equid_cylind_map_jacob(), rot_equid_cylind_vect_rot(), and slat0.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::init_grib1 (class(ip_rot_equid_cylind_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Gayno
    +
    Date
    2007-NOV-15
    + +

    Definition at line 73 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    References ip_constants_mod::dpr.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::init_grib2 (class(ip_rot_equid_cylind_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object.

    +

    Call 'use_ncep_post_arakawa()' before using this subroutine to use ncep_post-compatible grid definition.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Alex Richert
    +
    Date
    2024-MAY-20
    + +

    Definition at line 140 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    References init_grib2_default(), and init_grib2_ncep_post().

    + +
    +
    + +

    ◆ init_grib2_default()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::init_grib2_default (class(ip_rot_equid_cylind_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object.

    +

    Uses template definitions consistent with WMO standards.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Gayno
    +
    Date
    2007-NOV-15
    + +

    Definition at line 160 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by init_grib2().

    + +
    +
    + +

    ◆ init_grib2_ncep_post()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::init_grib2_ncep_post (class(ip_rot_equid_cylind_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes a Rotated equidistant cylindrical grid given a grib2_descriptor object.

    +

    Uses template number definitions in a manner compatible with wgrib2 and ncep_post, which is based on grib1.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Alex Richert, George Gayno
    +
    Date
    2024-MAY-20
    + +

    Definition at line 227 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by init_grib2().

    + +
    +
    + +

    ◆ rot_equid_cylind_error()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_error (integer, intent(in) IOPT,
    real, intent(in) FILL,
    real, dimension(npts), intent(out) RLAT,
    real, dimension(npts), intent(out) RLON,
    real, dimension(npts), intent(out) XPTS,
    real, dimension(npts), intent(out) YPTS,
    integer, intent(in) NPTS 
    )
    +
    +private
    +
    + +

    Error handler.

    +

    Upon an error, this subprogram assigns a "fill" value to the output fields.

    +
    Parameters
    + + + + + + + + +
    [in]ioptinteger option flag
      +
    • +1 to compute earth coords of selected grid coords
    • +
    • -1 to compute grid coords of selected earth coords
    • +
    +
    [in]fillreal fill value to set invalid output data (must be impossible value; suggested value: -9999.)
    [out]rlatreal (npts) earth latitudes in degrees n if iopt<0
    [out]rlonreal (npts) earth longitudes in degrees e if iopt<0
    [out]xptsreal (npts) grid x point coordinates if iopt>0
    [out]yptsreal (npts) grid y point coordinates if iopt>0
    [in]nptsinteger maximum number of coordinates
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-07-13
    + +

    Definition at line 568 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind().

    + +
    +
    + +

    ◆ rot_equid_cylind_grid_area()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_grid_area (real(kind=kd), intent(in) CLATR,
    real, intent(in) FILL,
    real, intent(out) AREA 
    )
    +
    +private
    +
    + +

    Grid box area for rotated equidistant cylindrical grids - non "e" stagger.

    +

    This subprogram computes the grid box area for a rotated equidistant cylindrical grid - non "e" stagger.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 Gayno initial version
    2015-07-19 gayno rename as "rot_equid_cylind_grid_area."
    2018-07-20 wesley pass in clatr for threading
    +
    Parameters
    + + + + +
    [in]clatrcosine of unrotated latitude (real)
    [in]fillfill value for undefined points (real)
    [out]areaarea weights in m**2 (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 709 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    References dlats, dlons, and rerth.

    + +

    Referenced by gdswzd_rot_equid_cylind().

    + +
    +
    + +

    ◆ rot_equid_cylind_map_jacob()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_map_jacob (real, intent(in) FILL,
    real, intent(in) RLON,
    real(kind=kd), intent(in) CLATR,
    real(kind=kd), intent(in) CLAT,
    real(kind=kd), intent(in) SLAT,
    real(kind=kd), intent(in) CLON,
    real, intent(out) XLON,
    real, intent(out) XLAT,
    real, intent(out) YLON,
    real, intent(out) YLAT 
    )
    +
    +private
    +
    + +

    Map jacobians for rotated equidistant cylindrical grids - non "e" stagger.

    +

    This subprogram computes the map jacobians for a rotated equidistant cylindrical grid - non "e" stagger.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-09-17 gayno rename as "rot_equid_cylind_map_jacob".
    2018-07-20 wesley pass in clatr, clat, slat, clon to allow threading.
    +
    Parameters
    + + + + + + + + + + + +
    [in]fillfill value for undefined points (real)
    [in]rlonlongitude in degrees (real)
    [in]clatrcosine of unrotated latitude (real)
    [in]clatcosine of latitude (real)
    [in]slatsine of latitude (real)
    [in]cloncosine of latitude (real)
    [out]xlondx/dlon in 1/degrees (real)
    [out]xlatdx/dlat in 1/degrees (real)
    [out]ylondy/dlon in 1/degrees (real)
    [out]ylatdy/dlat in 1/degrees (real)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 664 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    References clat0, dlats, dlons, rlon0, and slat0.

    + +

    Referenced by gdswzd_rot_equid_cylind().

    + +
    +
    + +

    ◆ rot_equid_cylind_vect_rot()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_rot_equid_cylind_grid_mod::rot_equid_cylind_vect_rot (real, intent(in) RLON,
    real(kind=kd), intent(in) CLATR,
    real(kind=kd), intent(in) SLATR,
    real(kind=kd), intent(in) CLAT,
    real(kind=kd), intent(in) SLAT,
    real(kind=kd), intent(in) CLON,
    real, intent(out) CROT,
    real, intent(out) SROT 
    )
    +
    +private
    +
    + +

    Vector rotation fields for rotated equidistant cylindrical grids - non "e" stagger.

    +

    This subprogram computes the vector rotation sines and cosines for a rotated equidistant cylindrical grid - non "e" stagger.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    2015-01-21 gayno initial version
    2015-07-19 gayno rename as "rot_equid_cylind_vect_rot."
    2018-07-20 wesley pass in clatr, slatr, clat, slat, clon for threading.
    +
    Parameters
    + + + + + + + + + +
    [in]rlonlongitude in degrees (real)
    [in]clatrcosine of rotated latitude (real)
    [in]slatrsine of rotated latitude (real)
    [in]clatcosine of latitude (real)
    [in]slatsine of latitude (real)
    [in]cloncosine of longitude (real)
    [out]crotclockwise vector rotation cosines (real)
    [out]srotclockwise vector rotation sines (real) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    +
    +
    +
    Author
    Gayno
    +
    Date
    2015-01-21
    + +

    Definition at line 613 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    References clat0, irot, rlon0, and slat0.

    + +

    Referenced by gdswzd_rot_equid_cylind().

    + +
    +
    +

    Variable Documentation

    + +

    ◆ clat0

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_grid_mod::clat0
    +
    +private
    +
    + +

    Local copy of clat0.

    + +

    Definition at line 58 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind(), rot_equid_cylind_map_jacob(), and rot_equid_cylind_vect_rot().

    + +
    +
    + +

    ◆ dlats

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_grid_mod::dlats
    +
    +private
    +
    + +

    Local copy of dlats.

    + +

    Definition at line 59 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind(), rot_equid_cylind_grid_area(), and rot_equid_cylind_map_jacob().

    + +
    +
    + +

    ◆ dlons

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_grid_mod::dlons
    +
    +private
    +
    + +

    Local copy of dlons.

    + +

    Definition at line 60 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind(), rot_equid_cylind_grid_area(), and rot_equid_cylind_map_jacob().

    + +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_rot_equid_cylind_grid_mod::irot
    +
    +private
    +
    + +

    Local copy of irot.

    + +

    Definition at line 56 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind(), and rot_equid_cylind_vect_rot().

    + +
    +
    + +

    ◆ kd

    + +
    +
    + + + + + +
    + + + + +
    integer, parameter ip_rot_equid_cylind_grid_mod::kd = real64
    +
    +private
    +
    + +

    Fortran kind for reals.

    + +

    Definition at line 30 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_grid_mod::rerth
    +
    +private
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 57 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind(), and rot_equid_cylind_grid_area().

    + +
    +
    + +

    ◆ rlon0

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_grid_mod::rlon0
    +
    +private
    +
    + +

    Local copy of rlon0.

    + +

    Definition at line 61 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind(), rot_equid_cylind_map_jacob(), and rot_equid_cylind_vect_rot().

    + +
    +
    + +

    ◆ slat0

    + +
    +
    + + + + + +
    + + + + +
    real(kind=kd) ip_rot_equid_cylind_grid_mod::slat0
    +
    +private
    +
    + +

    Local copy of slat0.

    + +

    Definition at line 62 of file ip_rot_equid_cylind_grid_mod.F90.

    + +

    Referenced by gdswzd_rot_equid_cylind(), rot_equid_cylind_map_jacob(), and rot_equid_cylind_vect_rot().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__rot__equid__cylind__grid__mod.js b/ver-5.1.0/namespaceip__rot__equid__cylind__grid__mod.js new file mode 100644 index 00000000..8d250b58 --- /dev/null +++ b/ver-5.1.0/namespaceip__rot__equid__cylind__grid__mod.js @@ -0,0 +1,21 @@ +var namespaceip__rot__equid__cylind__grid__mod = +[ + [ "ip_rot_equid_cylind_grid", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid" ], + [ "gdswzd_rot_equid_cylind", "namespaceip__rot__equid__cylind__grid__mod.html#a55c153201e15205d3f75e4ffb717cc0b", null ], + [ "init_grib1", "namespaceip__rot__equid__cylind__grid__mod.html#acb27dfdc6f03dea897d509910365afee", null ], + [ "init_grib2", "namespaceip__rot__equid__cylind__grid__mod.html#add3c6c1dad5748b452d291df6619867d", null ], + [ "init_grib2_default", "namespaceip__rot__equid__cylind__grid__mod.html#a9ade5de892a935c3b62c1860b719ce74", null ], + [ "init_grib2_ncep_post", "namespaceip__rot__equid__cylind__grid__mod.html#a74abf723e815f9ff196e6d0174fd449b", null ], + [ "rot_equid_cylind_error", "namespaceip__rot__equid__cylind__grid__mod.html#a1cc09c83f9a3815d8c5f8ed2f239f53f", null ], + [ "rot_equid_cylind_grid_area", "namespaceip__rot__equid__cylind__grid__mod.html#ad8f1133eb6809705c15337134eafe9fd", null ], + [ "rot_equid_cylind_map_jacob", "namespaceip__rot__equid__cylind__grid__mod.html#a985f1dc1a20444cef706d4bb20e0841b", null ], + [ "rot_equid_cylind_vect_rot", "namespaceip__rot__equid__cylind__grid__mod.html#a3de472bfc18740a7d985f560f3541c10", null ], + [ "clat0", "namespaceip__rot__equid__cylind__grid__mod.html#afeb699d0eaa8d157277e93fe8e8c5852", null ], + [ "dlats", "namespaceip__rot__equid__cylind__grid__mod.html#ab43075e39d4e2dde4110e608931a392d", null ], + [ "dlons", "namespaceip__rot__equid__cylind__grid__mod.html#aa0cf7bb2dd8be1239ae38c7220d29702", null ], + [ "irot", "namespaceip__rot__equid__cylind__grid__mod.html#abb0c2acdbd71f0c07ffaf9db54ce06c1", null ], + [ "kd", "namespaceip__rot__equid__cylind__grid__mod.html#af5dea0592cccce2de1c5c6a92d42cfd6", null ], + [ "rerth", "namespaceip__rot__equid__cylind__grid__mod.html#ae08318392106d174ab36cf7dc05c570b", null ], + [ "rlon0", "namespaceip__rot__equid__cylind__grid__mod.html#a620a55069afd33b301240533915387df", null ], + [ "slat0", "namespaceip__rot__equid__cylind__grid__mod.html#a64831f92d5306513987a98e97a32aea1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceip__station__points__grid__mod.html b/ver-5.1.0/namespaceip__station__points__grid__mod.html new file mode 100644 index 00000000..d419adeb --- /dev/null +++ b/ver-5.1.0/namespaceip__station__points__grid__mod.html @@ -0,0 +1,375 @@ + + + + + + + +NCEPLIBS-ip: ip_station_points_grid_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_station_points_grid_mod Module Reference
    +
    +
    + +

    Interpolate gridded data to a series of station points. +More...

    + + + + +

    +Data Types

    type  ip_station_points_grid
     
    + + + + + + + + + + +

    +Functions/Subroutines

    subroutine gdswzd_station_points (self, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)
     Interpolate gridded data to a series of station points. More...
     
    subroutine init_grib1 (self, g1_desc)
     Initializes an IP Station grid given a grib1_descriptor object. More...
     
    subroutine init_grib2 (self, g2_desc)
     Initializes an IP Station grid given a grib2_descriptor object. More...
     
    +

    Detailed Description

    +

    Interpolate gridded data to a series of station points.

    +
    Author
    Kyle Gerheiser
    +
    Date
    7/21/21
    +

    Function/Subroutine Documentation

    + +

    ◆ gdswzd_station_points()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ip_station_points_grid_mod::gdswzd_station_points (class(ip_station_points_grid), intent(in) self,
    integer, intent(in) IOPT,
    integer, intent(in) NPTS,
    real, intent(in) FILL,
    real, dimension(npts), intent(inout) XPTS,
    real, dimension(npts), intent(inout) YPTS,
    real, dimension(npts), intent(inout) RLON,
    real, dimension(npts), intent(inout) RLAT,
    integer, intent(out) NRET,
    real, dimension(npts), intent(out), optional CROT,
    real, dimension(npts), intent(out), optional SROT,
    real, dimension(npts), intent(out), optional XLON,
    real, dimension(npts), intent(out), optional XLAT,
    real, dimension(npts), intent(out), optional YLON,
    real, dimension(npts), intent(out), optional YLAT,
    real, dimension(npts), intent(out), optional AREA 
    )
    +
    +private
    +
    + +

    Interpolate gridded data to a series of station points.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]selfThe grid.
    [in]IOPTmust be minus 1 (return grid coordinates for selected earth coordinates).
    [in]NPTSMaximum number of points.
    [in]FILLFill value to set invalid output data. Must be impossible value; suggested value: -9999.
    [in,out]XPTSX point coordinates. Always output.
    [in,out]YPTSY point coordinates. Always output.
    [in,out]RLONPoint longitudes. Always input.
    [in,out]RLATPoint latitudes. Always input.
    [out]NRETNumber of valid points computed.
    [out]CROTNot used.
    [out]SROTNot used.
    [out]XLONNot used.
    [out]XLATNot used.
    [out]YLONNot used.
    [out]YLATNot used.
    [out]AREANot used.
    +
    +
    +
    Author
    Kyle Gerheiser
    +
    Date
    7/21/21
    +
    Author
    Eric Engle
    +
    Date
    5/4/23
    + +

    Definition at line 75 of file ip_station_points_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_station_points_grid_mod::init_grib1 (class(ip_station_points_grid), intent(inout) self,
    type(grib1_descriptor), intent(in) g1_desc 
    )
    +
    +private
    +
    + +

    Initializes an IP Station grid given a grib1_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g1_descA grib1_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 37 of file ip_station_points_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + +
    subroutine ip_station_points_grid_mod::init_grib2 (class(ip_station_points_grid), intent(inout) self,
    type(grib2_descriptor), intent(in) g2_desc 
    )
    +
    +private
    +
    + +

    Initializes an IP Station grid given a grib2_descriptor object.

    +
    Parameters
    + + + +
    [in,out]selfThe grid to initialize
    [in]g2_descA grib2_descriptor
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 48 of file ip_station_points_grid_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceip__station__points__grid__mod.js b/ver-5.1.0/namespaceip__station__points__grid__mod.js new file mode 100644 index 00000000..3db1fca4 --- /dev/null +++ b/ver-5.1.0/namespaceip__station__points__grid__mod.js @@ -0,0 +1,7 @@ +var namespaceip__station__points__grid__mod = +[ + [ "ip_station_points_grid", "structip__station__points__grid__mod_1_1ip__station__points__grid.html", "structip__station__points__grid__mod_1_1ip__station__points__grid" ], + [ "gdswzd_station_points", "namespaceip__station__points__grid__mod.html#a8da297b45242279a497dbd7062a33197", null ], + [ "init_grib1", "namespaceip__station__points__grid__mod.html#a4b28ebf2b4fe826c96af69db28e0a1ff", null ], + [ "init_grib2", "namespaceip__station__points__grid__mod.html#ad17e6d245295803b62b146be984f874d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceipolates__mod.html b/ver-5.1.0/namespaceipolates__mod.html new file mode 100644 index 00000000..d63c038c --- /dev/null +++ b/ver-5.1.0/namespaceipolates__mod.html @@ -0,0 +1,1358 @@ + + + + + + + +NCEPLIBS-ip: ipolates_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipolates_mod Module Reference
    +
    +
    + +

    Top-level driver for scalar interpolation interpolation routine ipolates(). +More...

    + + + + +

    +Data Types

    interface  ipolates
     
    + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine, public ipolates_grib1 (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     This subprogram interpolates scalar field from any grid to any grid given a grib1 Grid Descriptor Section. More...
     
    subroutine, public ipolates_grib1_single_field (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     Special case of ipolates_grib1 when interpolating a single field. More...
     
    subroutine, public ipolates_grib2 (IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     This subprogram interpolates scalar field from any grid to any grid given a grib2 descriptor. More...
     
    subroutine, public ipolates_grib2_single_field (IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Special case of ipolates_grib2 when interpolating a single field. More...
     
    subroutine ipolates_grid (ip, ipopt, grid_in, grid_out, mi, mo, km, ibi, li, gi, no, rlat, rlon, ibo, lo, go, iret)
     Interpolates scalar fields between grids given ip_grid objects. More...
     
    +

    Detailed Description

    +

    Top-level driver for scalar interpolation interpolation routine ipolates().

    +

    ipolates() is overloaded with interfaces for GRIB1 and GRIB2 descriptors.

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser
    +

    Function/Subroutine Documentation

    + +

    ◆ ipolates_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolates_mod::ipolates_grib1 (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(in) kgdsi,
    integer(c_int), dimension(200), intent(in) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), dimension(km), intent(in) ibi,
    logical(c_bool), dimension(mi,km), intent(in) li,
    real(c_double), dimension(mi,km), intent(in) gi,
    integer(c_int), intent(inout) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    integer(c_int), dimension(km), intent(out) ibo,
    logical(c_bool), dimension(mo,km), intent(out) lo,
    real(c_double), dimension(mo,km), intent(out) go,
    integer(c_int), intent(out) iret 
    )
    +
    + +

    This subprogram interpolates scalar field from any grid to any grid given a grib1 Grid Descriptor Section.

    +

    Only horizontal interpolation is performed. The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63).

    +

    The current code recognizes the following projections:

      +
    • (kgds(1)=000) equidistant cylindrical
    • +
    • (kgds(1)=001) mercator cylindrical
    • +
    • (kgds(1)=003) lambert conformal conical
    • +
    • (kgds(1)=004) gaussian cylindrical
    • +
    • (kgds(1)=005) polar stereographic azimuthal
    • +
    • (kgds(1)=203) rotated equidistant cylindrical - e-stagger
    • +
    • (kgds(1)=205) rotated equidistant cylindrical - b-stagger
    • +
    +

    Where kgds could be either input kgdsi or output kgdso.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input. for the budget approach, a subsection of the grid may be output by subtracting kgdso(1) from 255 and passing in the latitudes and longitudes of the points. Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Author
    Mark Iredell, Kyle Gerheiser
    + +

    Definition at line 293 of file ipolates.F90.

    + +
    +
    + +

    ◆ ipolates_grib1_single_field()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolates_mod::ipolates_grib1_single_field (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(in) kgdsi,
    integer(c_int), dimension(200), intent(in) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), intent(in) ibi,
    logical(c_bool), dimension(mi), intent(in) li,
    real(c_double), dimension(mi), intent(in) gi,
    integer(c_int), intent(inout) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    integer(c_int), intent(out) ibo,
    logical(c_bool), dimension(mo), intent(out) lo,
    real(c_double), dimension(mo), intent(out) go,
    integer(c_int), intent(out) iret 
    )
    +
    + +

    Special case of ipolates_grib1 when interpolating a single field.

    +

    Removes the km dimension of input arrays so scalars can be passed to ibi/ibo.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Date
    Jan 2022
    +
    Author
    Kyle Gerheiser
    + +

    Definition at line 158 of file ipolates.F90.

    + +
    +
    + +

    ◆ ipolates_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolates_mod::ipolates_grib2 (integer(c_int), intent(in) IP,
    integer(c_int), dimension(20), intent(in) IPOPT,
    integer(c_int), intent(in) IGDTNUMI,
    integer(c_int), dimension(igdtleni), intent(in) IGDTMPLI,
    integer(c_int), intent(in) IGDTLENI,
    integer(c_int), intent(in) IGDTNUMO,
    integer(c_int), dimension(igdtleno), intent(in) IGDTMPLO,
    integer(c_int), intent(in) IGDTLENO,
    integer(c_int), intent(in) MI,
    integer(c_int), intent(in) MO,
    integer(c_int), intent(in) KM,
    integer(c_int), dimension(km), intent(in) IBI,
    logical(c_bool), dimension(mi,km), intent(in) LI,
    real(c_double), dimension(mi,km), intent(in) GI,
    integer(c_int), intent(out) NO,
    real(c_double), dimension(mo), intent(inout) RLAT,
    real(c_double), dimension(mo), intent(inout) RLON,
    integer(c_int), dimension(km), intent(out) IBO,
    logical(c_bool), dimension(mo,km), intent(out) LO,
    real(c_double), dimension(mo,km), intent(out) GO,
    integer(c_int), intent(out) IRET 
    )
    +
    + +

    This subprogram interpolates scalar field from any grid to any grid given a grib2 descriptor.

    +

    Wrapper for ipolates_grid which converts a grib1 descriptor into an ip_grid_descriptor, which is used to create an ip_grid. Only horizontal interpolation is performed.

    +

    The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    Input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. The current code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, data may be interpolated to a set of station points if "igdtnumo"<0 (or subtracted from 255 for the budget option), in which case the number of points and their latitudes and longitudes must be input.

    +

    Input bitmaps will be interpolated to output bitmaps. Output bitmaps will also be created when the output grid extends outside of the domain of the input grid.

    +

    The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - EQUIDISTANT CYLINDRICAL
    • +
    • 01 - Rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - MERCATOR CYCLINDRICAL
    • +
    • 20 - POLAR STEREOGRAPHIC AZIMUTHAL
    • +
    • 30 - LAMBERT CONFORMAL CONICAL
    • +
    • 40 - GAUSSIAN EQUIDISTANT CYCLINDRICAL
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All map projections:

      +
    • (1): SHAPE OF EARTH, OCTET 15
    • +
    • (2): SCALE FACTOR OF SPHERICAL EARTH RADIUS, OCTET 16
    • +
    • (3): SCALED VALUE OF RADIUS OF SPHERICAL EARTH, OCTETS 17-20
    • +
    • (4): SCALE FACTOR OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTET 21
    • +
    • (5): SCALED VALUE OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTETS 22-25
    • +
    • (6): SCALE FACTOR OF MINOR AXIS OF ELLIPTICAL EARTH, OCTET 26
    • +
    • (7): SCALED VALUE OF MINOR AXIS OF ELLIPTICAL EARTH, OCTETS 27-30
    • +
    +

    Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42.
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Mercator Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TANGENT LATITUDE, OCTETS 48-51
    • +
    • (14): LATITUDE OF LAST POINT, OCTETS 52-55
    • +
    • (15): LONGITUDE OF LAST POINT, OCTETS 56-59
    • +
    • (16): SCANNING MODE FLAGS, OCTET 60
    • +
    • (17): ORIENTATION OF GRID, OCTETS 61-64
    • +
    • (18): LONGITUDINAL GRID LENGTH, OCTETS 65-68
    • +
    • (19): LATITUDINAL GRID LENGTH, OCTETS 69-72
    • +
    +

    Lambert Conformal Conical:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION OF COMPONENT FLAG, OCTET 47
    • +
    • (13): LATITUDE WHERE GRID LENGTHS SPECIFIED,OCTETS 48-51
    • +
    • (14): LONGITUDE OF MERIDIAN THAT IS PARALLEL TO Y-AXIS, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE, OCTET 65
    • +
    • (19): FIRST TANGENT LATITUDE FROM POLE, OCTETS 66-69
    • +
    • (20): SECOND TANGENT LATITUDE FROM POLE, OCTETS 70-73
    • +
    • (21): LATITUDE OF SOUTH POLE OF PROJECTION, OCTETS 74-77
    • +
    • (22): LONGITUDE OF SOUTH POLE OF PROJECTION, OCTETS 78-81
    • +
    +

    Gaussian Cylindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): NUMBER OF PARALLELS BETWEEN POLE AND EQUATOR, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Polar Stereographic Azimuthal:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTETS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTETS 35-38
    • +
    • (10): LATITUDE OF FIRST GRID POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST GRID POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TRUE LATITUDE, OCTETS 48-51
    • +
    • (14): ORIENTATION LONGITUDE, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE FLAGS, OCTET 65
    • +
    +

    Rotated Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    • (20): LATITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 73-76
    • +
    • (21): LONGITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 77-80
    • +
    • (22): ANGLE OF ROTATION OF PROJECTION, OCTS 81-84
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. c Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Note
    Examples demonstrating relative cpu costs. This example is interpolating 12 levels of temperatures from the 360 x 181 global grid (ncep grid 3) to the 93 x 68 hawaiian mercator grid (ncep grid 204).
    +

    The example times are for the c90. As a reference, the cp time for unpacking the global 12 temperature fields is 0.04 seconds.

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.03
    BICUBIC 1 0 0.07
    BICUBIC 1 1 0.07
    NEIGHBOR 2 0.01
    BUDGET 3 -1,-1 0.48
    SPECTRAL 4 0,40 0.22
    SPECTRAL 4 1,40 0.24
    SPECTRAL 4 0,-1 0.42
    N-BUDGET 6 -1,-1 0.15
    +

    The spectral interpolation is fast for the mercator grid. However, for some grids the spectral interpolation is slow.

    +

    The following example is interpolating 12 levels of temperatures from the 360 x 181 global grid (ncep grid 3) to the 93 x 65 conus lambert conformal grid (ncep grid 211).

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.03
    BICUBIC 1 0 0.07
    BICUBIC 1 1 0.07
    NEIGHBOR 2 0.01
    BUDGET 3 -1,-1 0.51
    SPECTRAL 4 0,40 3.94
    SPECTRAL 4 1,40 5.02
    SPECTRAL 4 0,-1 11.36
    N-BUDGET 6 -1,-1 0.18
    +
    Author
    Mark Iredell, Kyle Gerheiser
    + +

    Definition at line 587 of file ipolates.F90.

    + +
    +
    + +

    ◆ ipolates_grib2_single_field()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolates_mod::ipolates_grib2_single_field (integer(c_int), intent(in) IP,
    integer(c_int), dimension(20), intent(in) IPOPT,
    integer(c_int), intent(in) IGDTNUMI,
    integer(c_int), dimension(igdtleni), intent(in) IGDTMPLI,
    integer(c_int), intent(in) IGDTLENI,
    integer(c_int), intent(in) IGDTNUMO,
    integer(c_int), dimension(igdtleno), intent(in) IGDTMPLO,
    integer(c_int), intent(in) IGDTLENO,
    integer(c_int), intent(in) MI,
    integer(c_int), intent(in) MO,
    integer(c_int), intent(in) KM,
    integer(c_int), intent(in) IBI,
    logical(c_bool), dimension(mi), intent(in) LI,
    real(c_double), dimension(mi), intent(in) GI,
    integer(c_int), intent(out) NO,
    real(c_double), dimension(mo), intent(inout) RLAT,
    real(c_double), dimension(mo), intent(inout) RLON,
    integer(c_int), intent(out) IBO,
    logical(c_bool), dimension(mo), intent(out) LO,
    real(c_double), dimension(mo), intent(out) GO,
    integer(c_int), intent(out) IRET 
    )
    +
    + +

    Special case of ipolates_grib2 when interpolating a single field.

    +

    Removes the km dimension of input arrays so scalars can be passed to ibi/ibo.

    +
    Parameters
    + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - EQUIDISTANT CYLINDRICAL
    • +
    • 01 - Rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - MERCATOR CYCLINDRICAL
    • +
    • 20 - POLAR STEREOGRAPHIC AZIMUTHAL
    • +
    • 30 - LAMBERT CONFORMAL CONICAL
    • +
    • 40 - GAUSSIAN EQUIDISTANT CYCLINDRICAL
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All map projections:

      +
    • (1): SHAPE OF EARTH, OCTET 15
    • +
    • (2): SCALE FACTOR OF SPHERICAL EARTH RADIUS, OCTET 16
    • +
    • (3): SCALED VALUE OF RADIUS OF SPHERICAL EARTH, OCTETS 17-20
    • +
    • (4): SCALE FACTOR OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTET 21
    • +
    • (5): SCALED VALUE OF MAJOR AXIS OF ELLIPTICAL EARTH, OCTETS 22-25
    • +
    • (6): SCALE FACTOR OF MINOR AXIS OF ELLIPTICAL EARTH, OCTET 26
    • +
    • (7): SCALED VALUE OF MINOR AXIS OF ELLIPTICAL EARTH, OCTETS 27-30
    • +
    +

    Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42.
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Mercator Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TANGENT LATITUDE, OCTETS 48-51
    • +
    • (14): LATITUDE OF LAST POINT, OCTETS 52-55
    • +
    • (15): LONGITUDE OF LAST POINT, OCTETS 56-59
    • +
    • (16): SCANNING MODE FLAGS, OCTET 60
    • +
    • (17): ORIENTATION OF GRID, OCTETS 61-64
    • +
    • (18): LONGITUDINAL GRID LENGTH, OCTETS 65-68
    • +
    • (19): LATITUDINAL GRID LENGTH, OCTETS 69-72
    • +
    +

    Lambert Conformal Conical:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTS 35-38
    • +
    • (10): LATITUDE OF FIRST POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION OF COMPONENT FLAG, OCTET 47
    • +
    • (13): LATITUDE WHERE GRID LENGTHS SPECIFIED,OCTETS 48-51
    • +
    • (14): LONGITUDE OF MERIDIAN THAT IS PARALLEL TO Y-AXIS, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE, OCTET 65
    • +
    • (19): FIRST TANGENT LATITUDE FROM POLE, OCTETS 66-69
    • +
    • (20): SECOND TANGENT LATITUDE FROM POLE, OCTETS 70-73
    • +
    • (21): LATITUDE OF SOUTH POLE OF PROJECTION, OCTETS 74-77
    • +
    • (22): LONGITUDE OF SOUTH POLE OF PROJECTION, OCTETS 78-81
    • +
    +

    Gaussian Cylindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): NUMBER OF PARALLELS BETWEEN POLE AND EQUATOR, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    +

    Polar Stereographic Azimuthal:

      +
    • (8): NUMBER OF POINTS ALONG X-AXIS, OCTETS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG Y-AXIS, OCTETS 35-38
    • +
    • (10): LATITUDE OF FIRST GRID POINT, OCTETS 39-42
    • +
    • (11): LONGITUDE OF FIRST GRID POINT, OCTETS 43-46
    • +
    • (12): RESOLUTION AND COMPONENT FLAGS, OCTET 47
    • +
    • (13): TRUE LATITUDE, OCTETS 48-51
    • +
    • (14): ORIENTATION LONGITUDE, OCTETS 52-55
    • +
    • (15): X-DIRECTION GRID LENGTH, OCTETS 56-59
    • +
    • (16): Y-DIRECTION GRID LENGTH, OCTETS 60-63
    • +
    • (17): PROJECTION CENTER FLAG, OCTET 64
    • +
    • (18): SCANNING MODE FLAGS, OCTET 65
    • +
    +

    Rotated Equidistant Cyclindrical:

      +
    • (8): NUMBER OF POINTS ALONG A PARALLEL, OCTS 31-34
    • +
    • (9): NUMBER OF POINTS ALONG A MERIDIAN, OCTS 35-38
    • +
    • (10): BASIC ANGLE OF INITIAL PRODUCTION DOMAIN, OCTETS 39-42
    • +
    • (11): SUBDIVISIONS OF BASIC ANGLE, OCTETS 43-46
    • +
    • (12): LATITUDE OF FIRST GRID POINT, OCTETS 47-50
    • +
    • (13): LONGITUDE OF FIRST GRID POINT, OCTETS 51-54
    • +
    • (14): RESOLUTION AND COMPONENT FLAGS, OCTET 55
    • +
    • (15): LATITUDE OF LAST GRID POINT, OCTETS 56-59
    • +
    • (16): LONGITUDE OF LAST GRID POINT, OCTETS 60-63
    • +
    • (17): I-DIRECTION INCREMENT, OCTETS 64-67
    • +
    • (18): J-DIRECTION INCREMENT, OCTETS 68-71
    • +
    • (19): SCANNING MODE, OCTET 72
    • +
    • (20): LATITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 73-76
    • +
    • (21): LONGITUDE OF SOUTHERN POLE OF PROJECTION, OCTETS 77-80
    • +
    • (22): ANGLE OF ROTATION OF PROJECTION, OCTS 81-84
    • +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. c Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Author
    Eric Engle
    +
    Date
    November 2022
    + +

    Definition at line 808 of file ipolates.F90.

    + +
    +
    + +

    ◆ ipolates_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolates_mod::ipolates_grid (integer, intent(in) ip,
    integer, dimension(20), intent(in) ipopt,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) mi,
    integer, intent(in) mo,
    integer, intent(in) km,
    integer, dimension(km), intent(in) ibi,
    logical*1, dimension(mi,km), intent(in) li,
    real, dimension(mi,km), intent(in) gi,
    integer, intent(inout) no,
    real, dimension(mo), intent(inout) rlat,
    real, dimension(mo), intent(inout) rlon,
    integer, dimension(km), intent(out) ibo,
    logical*1, dimension(mo,km), intent(out) lo,
    real, dimension(mo,km), intent(out) go,
    integer, intent(out) iret 
    )
    +
    +private
    +
    + +

    Interpolates scalar fields between grids given ip_grid objects.

    +

    Calls the specific interpolation routines on the generic ip_grids created from a grib1/grib2 descriptor.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    [in]ipInterpolation method.
    [in]ipoptInterpolation options.
    [in]grid_inInput grid.
    [in]grid_outOutput grid object created.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]giInput fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]goOutput fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Author
    Mark Iredell, Kyle Gerheiser
    + +

    Definition at line 63 of file ipolates.F90.

    + +

    References ip_interpolators_mod::bicubic_interp_id, ip_interpolators_mod::bilinear_interp_id, ip_interpolators_mod::budget_interp_id, ip_interpolators_mod::neighbor_budget_interp_id, ip_interpolators_mod::neighbor_interp_id, and ip_interpolators_mod::spectral_interp_id.

    + +

    Referenced by ipolates_mod::ipolates::ipolates_grib1(), ipolates_mod::ipolates::ipolates_grib1_single_field(), ipolates_mod::ipolates::ipolates_grib2(), and ipolates_mod::ipolates::ipolates_grib2_single_field().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceipolates__mod.js b/ver-5.1.0/namespaceipolates__mod.js new file mode 100644 index 00000000..4197e28d --- /dev/null +++ b/ver-5.1.0/namespaceipolates__mod.js @@ -0,0 +1,9 @@ +var namespaceipolates__mod = +[ + [ "ipolates", "interfaceipolates__mod_1_1ipolates.html", "interfaceipolates__mod_1_1ipolates" ], + [ "ipolates_grib1", "namespaceipolates__mod.html#acb5408cf5c3a0f50326edc183f9bd269", null ], + [ "ipolates_grib1_single_field", "namespaceipolates__mod.html#ae70a9ca9871bb33e038782b036b7b53d", null ], + [ "ipolates_grib2", "namespaceipolates__mod.html#a6b2ea6d5b04d2a68baad261e7a409fac", null ], + [ "ipolates_grib2_single_field", "namespaceipolates__mod.html#a49541b2af75b7c037a863a4785726856", null ], + [ "ipolates_grid", "namespaceipolates__mod.html#a2761e20fab898e7fd9963f3e0eb5d104", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceipolatev__mod.html b/ver-5.1.0/namespaceipolatev__mod.html new file mode 100644 index 00000000..c5760f9d --- /dev/null +++ b/ver-5.1.0/namespaceipolatev__mod.html @@ -0,0 +1,1443 @@ + + + + + + + +NCEPLIBS-ip: ipolatev_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ipolatev_mod Module Reference
    +
    +
    + +

    Top-level driver for vector interpolation interpolation routine ipolatev(). +More...

    + + + + +

    +Data Types

    interface  ipolatev
     
    + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine, public ipolatev_grib1 (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector field from any grid to any grid given a grib1 Grid Descriptor Section. More...
     
    subroutine, public ipolatev_grib1_single_field (ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     Special case of ipolatev_grib1 when interpolating a single field. More...
     
    subroutine, public ipolatev_grib2 (ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor. More...
     
    subroutine, public ipolatev_grib2_single_field (ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)
     This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor. More...
     
    subroutine ipolatev_grid (IP, IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolates vector fields between grids given ip_grid objects. More...
     
    +

    Detailed Description

    +

    Top-level driver for vector interpolation interpolation routine ipolatev().

    +

    The ipolatev() subprogram is overloaded with interfaces for GRIB1 and GRIB2 descriptors.

    +
    Author
    George Gayno, Mark Iredell, Kyle Gerheiser
    +

    Function/Subroutine Documentation

    + +

    ◆ ipolatev_grib1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolatev_mod::ipolatev_grib1 (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(inout) kgdsi,
    integer(c_int), dimension(200), intent(inout) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), dimension(km), intent(in) ibi,
    logical(c_bool), dimension(mi,km), intent(in) li,
    real(c_double), dimension(mi,km), intent(in) ui,
    real(c_double), dimension(mi,km), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), dimension(km), intent(out) ibo,
    logical(c_bool), dimension(mo,km), intent(out) lo,
    real(c_double), dimension(mo,km), intent(out) uo,
    real(c_double), dimension(mo,km), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    + +

    This subprogram interpolates vector field from any grid to any grid given a grib1 Grid Descriptor Section.

    +

    Only horizontal interpolation is performed. The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63).

    +

    The current code recognizes the following projections:

      +
    • (kgds(1)=000) equidistant cylindrical
    • +
    • (kgds(1)=001) mercator cylindrical
    • +
    • (kgds(1)=003) lambert conformal conical
    • +
    • (kgds(1)=004) gaussian cylindrical
    • +
    • (kgds(1)=005) polar stereographic azimuthal
    • +
    • (kgds(1)=203) rotated equidistant cylindrical - e-stagger
    • +
    • (kgds(1)=205) rotated equidistant cylindrical - b-stagger
    • +
    +

    Where kgds could be either input kgdsi or output kgdso.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input. for the budget approach, a subsection of the grid may be output by subtracting kgdso(1) from 255 and passing in the latitudes and longitudes of the points. Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Note
    Examples demonstrating relative cpu costs. This example is interpolating 12 levels of winds from the 360 x 181 global grid (ncep grid 3) to the 93 x 68 hawaiian mercator grid (ncep grid 204).
    +

    The example times are for the c90. As a reference, the cp time for unpacking the global 12 temperature fields is 0.07 seconds.

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.16
    BICUBIC 1 1 0.17
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.94
    SPECTRAL 4 0,40 0.31
    SPECTRAL 4 1,40 0.33
    SPECTRAL 4 0,-1 0.59
    N-BUDGET 6 -1,-1 0.31
    +

    The spectral interpolation is fast for the mercator grid. However, for some grids the spectral interpolation is slow.

    +

    The following example is interpolating 12 levels of temperatures from the 360 x 181 global grid (ncep grid 3) to the 93 x 65 conus lambert conformal grid (ncep grid 211).

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.15
    BICUBIC 1 1 0.16
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.92
    SPECTRAL 4 0,40 4.51
    SPECTRAL 4 1,40 5.77
    SPECTRAL 4 0,-1 12.60
    N-BUDGET 6 -1,-1 0.33
    +
    Date
    July 2021
    +
    Author
    Kyle Gerheiser
    + +

    Definition at line 565 of file ipolatev.F90.

    + +
    +
    + +

    ◆ ipolatev_grib1_single_field()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolatev_mod::ipolatev_grib1_single_field (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), dimension(200), intent(inout) kgdsi,
    integer(c_int), dimension(200), intent(inout) kgdso,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), intent(in) ibi,
    logical(c_bool), dimension(mi), intent(in) li,
    real(c_double), dimension(mi), intent(in) ui,
    real(c_double), dimension(mi), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), intent(out) ibo,
    logical(c_bool), dimension(mo), intent(out) lo,
    real(c_double), dimension(mo), intent(out) uo,
    real(c_double), dimension(mo), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    + +

    Special case of ipolatev_grib1 when interpolating a single field.

    +

    Removes the km dimension of input arrays so vectors can be passed to ibi/ibo.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    ipInterpolation method
      +
    • ip = BILINEAR_INTERP_ID = 0 for bilinear
    • +
    • ip = BICUBIC_INTERP_ID = 1 for bicubic
    • +
    • ip = NEIGHBOR_INTERP_ID = 2 for neighbor;
    • +
    • ip = BUDGET_INTERP_ID = 3 for budget;
    • +
    • ip = SPECTRAL_INTERP_ID = 4 for spectral;
    • +
    • ip = NEIGHBOR_BUDGET_INTERP_ID = 6 for neighbor-budget
    • +
    +
    ipoptInterpolation options
      +
    • ip=0 (bilinear): (No options)
    • +
    • ip=1 Cbicubic): constraint option
    • +
    • ip=2 (neighbor): (No options)
    • +
    • ip=3 (budget): Number in radius, radius weights, search radius
    • +
    • ip=4 (spectral): Spectral shape, spectral truncation
    • +
    • ip=6 (neighbor-budget): Number in radius, radius weights ...)
    • +
    +
    [in]kgdsiInput gds parameters as decoded by w3fi63.
    [in]kgdsoOutput gds parameters.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Date
    Jan 2022
    +
    Author
    Kyle Gerheiser
    + +

    Definition at line 680 of file ipolatev.F90.

    + +
    +
    + +

    ◆ ipolatev_grib2()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolatev_mod::ipolatev_grib2 (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), intent(in) igdtnumi,
    integer(c_int), dimension(igdtleni), intent(in) igdtmpli,
    integer(c_int), intent(in) igdtleni,
    integer(c_int), intent(in) igdtnumo,
    integer(c_int), dimension(igdtleno), intent(in) igdtmplo,
    integer(c_int), intent(in) igdtleno,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), dimension(km), intent(in) ibi,
    logical(c_bool), dimension(mi,km), intent(in) li,
    real(c_double), dimension(mi,km), intent(in) ui,
    real(c_double), dimension(mi,km), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), dimension(km), intent(out) ibo,
    logical(c_bool), dimension(mo,km), intent(out) lo,
    real(c_double), dimension(mo,km), intent(out) uo,
    real(c_double), dimension(mo,km), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    + +

    This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.

    +

    This is a wrapper for ipolates_grid which converts a grib1 descriptor into an ip_grid_descriptor, which is used to create an ip_grid. Only horizontal interpolation is performed.

    +

    The following interpolation methods are possible:

      +
    • (ip=0) bilinear
    • +
    • (ip=1) bicubic
    • +
    • (ip=2) neighbor
    • +
    • (ip=3) budget
    • +
    • (ip=4) spectral
    • +
    • (ip=6) neighbor-budget
    • +
    +

    Some of these methods have interpolation options and/or restrictions on the input or output grids, both of which are documented more fully in their respective subprograms.

    +

    Input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. The current code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned.

    +

    On the other hand, data may be interpolated to a set of station points if "igdtnumo"<0 (or subtracted from 255 for the budget option), in which case the number of points and their latitudes and longitudes must be input.

    +

    Input bitmaps will be interpolated to output bitmaps. Output bitmaps will also be created when the output grid extends outside of the domain of the input grid.

    +

    The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - Equidistant Cylindrical
    • +
    • 01 - Rotated Equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - Mercator Cyclindrical
    • +
    • 20 - Polar Stereographic azimuthal
    • +
    • 30 - Lambert Conformal Conical
    • +
    • 40 - Gaussian Equidistant Cyclindrical
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    +
    +
    +

    Section 3 Info:

    +

    All map projections:

      +
    1. Shape of earth, octet 15.
    2. +
    3. Scale factor of spherical earth radius, octet 16.
    4. +
    5. Scaled value of radius of spherical earth, octets 17-20.
    6. +
    7. Scale factor of major axis of elliptical earth, octet 21.
    8. +
    9. Scaled value of major axis of elliptical earth, octets 22-25.
    10. +
    11. Scale factor of minor axis of elliptical earth, octet 26. 7: Scaled value of minor axis of elliptical earth, octets 27-30.
    12. +
    +

    Equidistant Cyclindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Basic angle of initial production domain, octets 39-42.
    6. +
    7. Subdivisions of basic angle, octets 43-46.
    8. +
    9. Latitude of first grid point, octets 47-50.
    10. +
    11. Longitude of first grid point, octets 51-54.
    12. +
    13. Resolution and component flags, octet 55.
    14. +
    15. Latitude of last grid point, octets 56-59.
    16. +
    17. Longitude of last grid point, octets 60-63.
    18. +
    19. i-direction increment, octets 64-67.
    20. +
    21. j-direction increment, octets 68-71.
    22. +
    23. Scanning mode, octet 72.
    24. +
    +

    Mercator Cyclindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Latitude of first point, octets 39-42.
    6. +
    7. Longitude of first point, octets 43-46.
    8. +
    9. Resolution and component flags, octet 47.
    10. +
    11. Tangent latitude, octets 48-51.
    12. +
    13. Latitude of last point, octets 52-55.
    14. +
    15. Longitude of last point, octets 56-59.
    16. +
    17. Scanning mode flags, octet 60.
    18. +
    19. Orientation of grid, octets 61-64.
    20. +
    21. Longitudinal grid length, octets 65-68.
    22. +
    23. Latitudinal grid length, octets 69-72.
    24. +
    +

    Lambert Conformal Conical:

      +
    1. Number of points along x-axis, octs 31-34.
    2. +
    3. Number of points along y-axis, octs 35-38.
    4. +
    5. Latitude of first point, octets 39-42.
    6. +
    7. Longitude of first point, octets 43-46.
    8. +
    9. Resolution of component flag, octet 47.
    10. +
    11. Latitude where grid lengths specified,octets 48-51.
    12. +
    13. Longitude of meridian that is parallel to y-axis, octets 52-55.
    14. +
    15. x-direction grid length, octets 56-59.
    16. +
    17. y-direction grid length, octets 60-63.
    18. +
    19. Projection center flag, octet 64.
    20. +
    21. Scanning mode, octet 65.
    22. +
    23. First tangent latitude from pole, octets 66-69.
    24. +
    25. Second tangent latitude from pole, octets 70-73.
    26. +
    27. Latitude of south pole of projection, octets 74-77.
    28. +
    29. Longitude of south pole of projection, octets 78-81.
    30. +
    +

    Gaussian Cylindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Basic angle of initial production domain, octets 39-42.
    6. +
    7. Subdivisions of basic angle, octets 43-46.
    8. +
    9. Latitude of first grid point, octets 47-50.
    10. +
    11. Longitude of first grid point, octets 51-54.
    12. +
    13. Resolution and component flags, octet 55.
    14. +
    15. Latitude of last grid point, octets 56-59.
    16. +
    17. Longitude of last grid point, octets 60-63.
    18. +
    19. i-direction increment, octets 64-67.
    20. +
    21. Number of parallels between pole and equator, octets 68-71.
    22. +
    23. Scanning mode, octet 72.
    24. +
    +

    Polar Stereographic Azimuthal:

      +
    1. Number of points along x-axis, octets 31-34.
    2. +
    3. Number of points along y-axis, octets 35-38.
    4. +
    5. Latitude of first grid point, octets 39-42.
    6. +
    7. Longitude of first grid point, octets 43-46.
    8. +
    9. Resolution and component flags, octet 47.
    10. +
    11. True latitude, octets 48-51.
    12. +
    13. Orientation longitude, octets 52-55.
    14. +
    15. x-direction grid length, octets 56-59.
    16. +
    17. y-direction grid length, octets 60-63.
    18. +
    19. Projection center flag, octet 64.
    20. +
    21. Scanning mode flags, octet 65.
    22. +
    +

    Rotated Equidistant Cyclindrical:

      +
    1. Number of points along a parallel, octs 31-34.
    2. +
    3. Number of points along a meridian, octs 35-38.
    4. +
    5. Basic angle of initial production domain, octets 39-42.
    6. +
    7. Subdivisions of basic angle, octets 43-46.
    8. +
    9. Latitude of first grid point, octets 47-50.
    10. +
    11. Longitude of first grid point, octets 51-54.
    12. +
    13. Resolution and component flags, octet 55.
    14. +
    15. Latitude of last grid point, octets 56-59.
    16. +
    17. Longitude of last grid point, octets 60-63.
    18. +
    19. i-direction increment, octets 64-67.
    20. +
    21. j-direction increment, octets 68-71.
    22. +
    23. Scanning mode, octet 72.
    24. +
    25. Latitude of southern pole of projection, octets 73-76.
    26. +
    27. Longitude of southern pole of projection, octets 77-80.
    28. +
    29. Angle of rotation of projection, octs 81-84.
    30. +
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [in,out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [in,out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Note
    Examples demonstrating relative cpu costs. This example is interpolating 12 levels of winds from the 360 x 181 global grid (ncep grid 3) to the 93 x 68 hawaiian mercator grid (ncep grid 204).
    +

    The example times are for the c90. As a reference, the cp time for unpacking the global 12 wind fields is 0.07 seconds.

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.16
    BICUBIC 1 1 0.17
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.94
    SPECTRAL 4 0,40 0.31
    SPECTRAL 4 1,40 0.33
    SPECTRAL 4 0,-1 0.59
    N-BUDGET 6 -1,-1 0.31
    +

    The spectral interpolation is fast for the mercator grid. However, for some grids the spectral interpolation is slow.

    +

    The following example is interpolating 12 levels of winds from the 360 x 181 global grid (ncep grid 3) to the 93 x 65 conus lambert conformal grid (ncep grid 211).

    + + + + + + + + + + + + + + + + + + + + + +
    METHOD IP IPOPT CP SECONDS
    BILINEAR 0 0.05
    BICUBIC 1 0 0.15
    BICUBIC 1 1 0.16
    NEIGHBOR 2 0.02
    BUDGET 3 -1,-1 0.92
    SPECTRAL 4 0,40 4.51
    SPECTRAL 4 1,40 5.77
    SPECTRAL 4 0,-1 12.60
    N-BUDGET 6 -1,-1 0.33
    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 382 of file ipolatev.F90.

    + +
    +
    + +

    ◆ ipolatev_grib2_single_field()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public ipolatev_mod::ipolatev_grib2_single_field (integer(c_int), intent(in) ip,
    integer(c_int), dimension(20), intent(in) ipopt,
    integer(c_int), intent(in) igdtnumi,
    integer(c_int), dimension(igdtleni), intent(in) igdtmpli,
    integer(c_int), intent(in) igdtleni,
    integer(c_int), intent(in) igdtnumo,
    integer(c_int), dimension(igdtleno), intent(in) igdtmplo,
    integer(c_int), intent(in) igdtleno,
    integer(c_int), intent(in) mi,
    integer(c_int), intent(in) mo,
    integer(c_int), intent(in) km,
    integer(c_int), intent(in) ibi,
    logical(c_bool), dimension(mi), intent(in) li,
    real(c_double), dimension(mi), intent(in) ui,
    real(c_double), dimension(mi), intent(in) vi,
    integer(c_int), intent(out) no,
    real(c_double), dimension(mo), intent(inout) rlat,
    real(c_double), dimension(mo), intent(inout) rlon,
    real(c_double), dimension(mo), intent(inout) crot,
    real(c_double), dimension(mo), intent(inout) srot,
    integer(c_int), intent(out) ibo,
    logical(c_bool), dimension(mo), intent(out) lo,
    real(c_double), dimension(mo), intent(out) uo,
    real(c_double), dimension(mo), intent(out) vo,
    integer(c_int), intent(out) iret 
    )
    +
    + +

    This subprogram interpolates vector fields from any grid to any grid given a grib2 descriptor.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    [in]ipInterpolation method
      +
    • ip=0 for bilinear
    • +
    • ip=1 for bicubic
    • +
    • ip=2 for neighbor;
    • +
    • ip=3 for budget;
    • +
    • ip=4 for spectral;
    • +
    • ip=6 for neighbor-budget
    • +
    +
    [in]ipoptInterpolation options
      +
    • ip=0: (No options)
    • +
    • ip=1: Constraint option
    • +
    • ip=2: (No options)
    • +
    • ip=3: Number in radius, radius weights, search radius
    • +
    • ip=4: Spectral shape, spectral truncation
    • +
    • ip=6: Number in radius, radius weights ...)
    • +
    +
    [in]igdtnumiGrid definition template number for the input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 - Equidistant Cylindrical
    • +
    • 01 - Rotated Equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - Mercator Cyclindrical
    • +
    • 20 - Polar Stereographic azimuthal
    • +
    • 30 - Lambert Conformal Conical
    • +
    • 40 - Gaussian Equidistant Cyclindrical
    • +
    +
    [in]igdtmpliGrid definition template array input grid. Corresponds to the gfldigdtmpl component of the NCEPLIBS-g2 gridmod data structure
    [in]igdtleniNumber of elements of the grid definition template array for the input grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumoGrid definition template number for the output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. See "igdtnumi" for specific template definitions. Note: igdtnumo<0 means interpolate to random station points.
    [in]igdtmploGrid definition template array for the output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure. See "igdtmpli" for definition of array elements.
    [in]igdtlenoNumber of elements of the grid definition template array for the output grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [in,out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [in,out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Author
    Eric Engle
    +
    Date
    November 2022
    + +

    Definition at line 832 of file ipolatev.F90.

    + +
    +
    + +

    ◆ ipolatev_grid()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine ipolatev_mod::ipolatev_grid (integer, intent(in) IP,
    integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(inout) CROT,
    real, dimension(mo), intent(inout) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolates vector fields between grids given ip_grid objects.

    +

    Calls the specific interpolation routines on the generic ip_grids created from a GRIB1 or GRIB2 descriptor.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    [in]ipInterpolation method.
    [in]ipoptInterpolation options.
    [in]grid_inInput grid.
    [in]grid_outOutput grid object created.
    [in]miSkip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moSkip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmNumber of fields to interpolate.
    [in]ibiInput bitmap flags.
    [in]liInput bitmaps (if respective ibi(k)=1).
    [in]uiInput u-component fields to interpolate.
    [in]viInput v-component fields to interpolate.
    [out]noNumber of output points (only if kgdso(1)<0).
    [out]rlatOutput latitudes in degrees (if kgdso(1)<0).
    [out]rlonOutput longitudes in degrees (if kgdso(1)<0).
    [in,out]crotVector rotation cosines (if igdtnumo>=0).
    [in,out]srotVector rotation sines (if igdtnumo>=0).
    [out]iboOutput bitmap flags.
    [out]loOutput bitmaps (always output).
    [out]uoOutput u-component fields interpolated.
    [out]voOutput v-component fields interpolated.
    [out]iretReturn code.
      +
    • 0 Successful interpolation.
    • +
    • 1 Unrecognized interpolation method.
    • +
    • 2 Unrecognized input grid or no grid overlap.
    • +
    • 3 Unrecognized output grid.
    • +
    • 1x Invalid bicubic method parameters.
    • +
    • 3x Invalid budget method parameters.
    • +
    • 4x Invalid spectral method parameters.
    • +
    +
    +
    +
    +
    Date
    July 2021
    +
    Author
    Kyle Gerheiser
    + +

    Definition at line 67 of file ipolatev.F90.

    + +

    References ip_interpolators_mod::bicubic_interp_id, ip_interpolators_mod::bilinear_interp_id, ip_interpolators_mod::budget_interp_id, ip_interpolators_mod::neighbor_budget_interp_id, ip_interpolators_mod::neighbor_interp_id, and ip_interpolators_mod::spectral_interp_id.

    + +

    Referenced by ipolatev_mod::ipolatev::ipolatev_grib1(), ipolatev_mod::ipolatev::ipolatev_grib1_single_field(), ipolatev_mod::ipolatev::ipolatev_grib2(), and ipolatev_mod::ipolatev::ipolatev_grib2_single_field().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceipolatev__mod.js b/ver-5.1.0/namespaceipolatev__mod.js new file mode 100644 index 00000000..89b5018f --- /dev/null +++ b/ver-5.1.0/namespaceipolatev__mod.js @@ -0,0 +1,9 @@ +var namespaceipolatev__mod = +[ + [ "ipolatev", "interfaceipolatev__mod_1_1ipolatev.html", "interfaceipolatev__mod_1_1ipolatev" ], + [ "ipolatev_grib1", "namespaceipolatev__mod.html#abddc4a9b00133b358443b118f1352d1f", null ], + [ "ipolatev_grib1_single_field", "namespaceipolatev__mod.html#ad535ffd159c46e770effd774aabede58", null ], + [ "ipolatev_grib2", "namespaceipolatev__mod.html#a00fed53dd867a802b3adbc1141e8d272", null ], + [ "ipolatev_grib2_single_field", "namespaceipolatev__mod.html#a71d7507e8f89e1229caaaacb37e0c9c7", null ], + [ "ipolatev_grid", "namespaceipolatev__mod.html#a8f3bfec7495e13b75b2035e8e1f081a1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespacemembers.html b/ver-5.1.0/namespacemembers.html new file mode 100644 index 00000000..805196c6 --- /dev/null +++ b/ver-5.1.0/namespacemembers.html @@ -0,0 +1,623 @@ + + + + + + + +NCEPLIBS-ip: Module Members + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    Here is a list of all documented module members with links to the modules they belong to:
    + +

    - a -

    + + +

    - b -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - k -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - u -

    + + +

    - y -

    +
    +
    + + + + diff --git a/ver-5.1.0/namespacemembers_func.html b/ver-5.1.0/namespacemembers_func.html new file mode 100644 index 00000000..e0a9651b --- /dev/null +++ b/ver-5.1.0/namespacemembers_func.html @@ -0,0 +1,394 @@ + + + + + + + +NCEPLIBS-ip: Module Members + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - e -

    + + +

    - f -

    + + +

    - g -

    + + +

    - i -

    + + +

    - l -

    + + +

    - m -

    + + +

    - p -

    + + +

    - r -

    + + +

    - u -

    +
    +
    + + + + diff --git a/ver-5.1.0/namespacemembers_vars.html b/ver-5.1.0/namespacemembers_vars.html new file mode 100644 index 00000000..91a1f6b9 --- /dev/null +++ b/ver-5.1.0/namespacemembers_vars.html @@ -0,0 +1,351 @@ + + + + + + + +NCEPLIBS-ip: Module Members + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +  + +

    - a -

    + + +

    - b -

    + + +

    - c -

    + + +

    - d -

    + + +

    - e -

    + + +

    - g -

    + + +

    - h -

    + + +

    - i -

    + + +

    - j -

    + + +

    - k -

    + + +

    - l -

    + + +

    - m -

    + + +

    - n -

    + + +

    - o -

    + + +

    - p -

    + + +

    - r -

    + + +

    - s -

    + + +

    - y -

    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceneighbor__budget__interp__mod.html b/ver-5.1.0/namespaceneighbor__budget__interp__mod.html new file mode 100644 index 00000000..d2e059bc --- /dev/null +++ b/ver-5.1.0/namespaceneighbor__budget__interp__mod.html @@ -0,0 +1,532 @@ + + + + + + + +NCEPLIBS-ip: neighbor_budget_interp_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    neighbor_budget_interp_mod Module Reference
    +
    +
    + +

    Interpolate scalar fields (neighbor). +More...

    + + + + +

    +Data Types

    interface  interpolate_neighbor_budget
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine interpolate_neighbor_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (budget). More...
     
    subroutine interpolate_neighbor_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (budget). More...
     
    +

    Detailed Description

    +

    Interpolate scalar fields (neighbor).

    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +

    Function/Subroutine Documentation

    + +

    ◆ interpolate_neighbor_budget_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_budget_interp_mod::interpolate_neighbor_budget_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(out) RLAT,
    real, dimension(mo), intent(out) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (budget).

    +

    This subprogram performs budget interpolation from any grid to any grid for scalar fields.

    +

    The algorithm simply computes (weighted) averages of neighbor points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned. Input bitmaps will be interpolated to output bitmaps. Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    96-10-04 Iredell neighbor points not bilinear interpolation
    1999-04-08 Iredell split ijkgds into two pieces
    2001-06-18 Iredell include minimum mask percentage option
    2015-01-27 Gayno replace calls to gdswiz with new merged version of gdswzd.
    2015-07-13 Gayno replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    2023-05-04 Engle allow calls to GDSWZD for station points
    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is number of radius points (defaults to 2 if ipopt(1)=-1); ipopt(2:2+ipopt(1)) are respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1). ipopt(3+ipopt(1)) is minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]gi(mi,km) input fields to interpolate
    [out]nonumber of output points
    [out]rlat(mo) output latitudes in degrees
    [out]rlon(mo) output longitudes in degrees
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 31 invalid undefined output grid
    • +
    • 32 invalid budget method parameters
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 107 of file neighbor_budget_interp_mod.F90.

    + +
    +
    + +

    ◆ interpolate_neighbor_budget_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_budget_interp_mod::interpolate_neighbor_budget_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (budget).

    +

    This subprogram performs budget interpolation from any grid to any grid for vector fields.

    +

    The algorithm simply computes (weighted) averages of neighbor points arranged in a square box centered around each output grid point and stretching nearly halfway to each of the neighboring grid points.

    +

    Options allow choices of number of points in each radius from the center point (ipopt(1)) which defaults to 2 (if ipopt(1)=-1) meaning that 25 points will be averaged; further options are the respective weights for the radius points starting at the center point (ipopt(2:2+ipopt(1)) which defaults to all 1 (if ipopt(1)=-1 or ipopt(2)=-1).

    +

    Another option is the minimum percentage for mask, i.e. percent valid input data required to make output data, (ipopt(3+ipopt(1)) which defaults to 50 (if -1).

    +

    Only horizontal interpolation is performed.

    +

    The input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. the code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    1999-04-08 Iredell split ijkgds into two pieces
    2001-06-18 Iredell include minimum mask percentage option
    2002-01-17 Iredell save data from last call for optimization
    2015-01-27 Gayno replace calls to gdswiz with new merged routine gdswzd.
    2015-07-13 Gayno replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    2023-05-04 Engle allow calls to GDSWZD for station points
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is number of radius points (defaults to 2 if ipopt(1)=-1); ipopt(2:2+ipopt(1)) are respective weights (defaults to all 1 if ipopt(1)=-1 or ipopt(2)=-1). ipopt(3+ipopt(1)) is minimum percentage for mask (defaults to 50 if ipopt(3+ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [out]nonumber of output points
    [out]rlat(mo) output latitudes in degrees
    [out]rlon(mo) output longitudes in degrees
    [out]crot(mo) vector rotation cosines
    [out]srot(mo) vector rotation sines (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 31 invalid undefined output grid
    • +
    • 32 invalid budget method parameters
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +
    + +

    Definition at line 351 of file neighbor_budget_interp_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceneighbor__budget__interp__mod.js b/ver-5.1.0/namespaceneighbor__budget__interp__mod.js new file mode 100644 index 00000000..86fa793e --- /dev/null +++ b/ver-5.1.0/namespaceneighbor__budget__interp__mod.js @@ -0,0 +1,6 @@ +var namespaceneighbor__budget__interp__mod = +[ + [ "interpolate_neighbor_budget", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget" ], + [ "interpolate_neighbor_budget_scalar", "namespaceneighbor__budget__interp__mod.html#a6d5110a9e9facf8c3132ec27d6857817", null ], + [ "interpolate_neighbor_budget_vector", "namespaceneighbor__budget__interp__mod.html#a4309c1e6b7fc60ded40657fe6c72297e", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespaceneighbor__interp__mod.html b/ver-5.1.0/namespaceneighbor__interp__mod.html new file mode 100644 index 00000000..27d73b54 --- /dev/null +++ b/ver-5.1.0/namespaceneighbor__interp__mod.html @@ -0,0 +1,511 @@ + + + + + + + +NCEPLIBS-ip: neighbor_interp_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    neighbor_interp_mod Module Reference
    +
    +
    + +

    Interpolate scalar fields (neighbor). +More...

    + + + + +

    +Data Types

    interface  interpolate_neighbor
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine interpolate_neighbor_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (neighbor). More...
     
    subroutine interpolate_neighbor_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (neighbor). More...
     
    +

    Detailed Description

    +

    Interpolate scalar fields (neighbor).

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell initial
    1999-04-08 Iredell split ijkgds into two pieces
    2001-06-18 Iredell include spiral search option
    2006-01-04 Gayno minor bug fix
    2007-10-30 Iredell save weights and thread for performance
    2012-06-26 Gayno fix out-of-bounds error. see nceplibs ticket #9.
    2015-01-27 Gayno replace calls to gdswiz() with new merged version of gdswzd().
    2015-07-13 Gayno replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +

    Function/Subroutine Documentation

    + +

    ◆ interpolate_neighbor_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_interp_mod::interpolate_neighbor_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (neighbor).

    +

    This subprogram performs neighbor interpolation from any grid to any grid for scalar fields.

    +

    Options allow choosing the width of the grid square (ipopt(1)) to search for valid data, which defaults to 1 (if ipopt(1)=-1). Odd width squares are centered on the nearest input grid point; even width squares are centered on the nearest four input grid points. Squares are searched for valid data in a spiral pattern starting from the center. No searching is done where the output grid is outside the input grid. Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input.

    +

    Input bitmaps will be interpolated to output bitmaps.

    +

    Output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is width of square to examine in spiral search (defaults to 1 if ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]gi(mi,km) input fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo<0)
    [in,out]rlat(no) output latitudes in degrees (if igdtnumo<0)
    [in,out]rlon(no) output longitudes in degrees (if igdtnumo<0)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +
    Author
    Eric Engle
    +
    Date
    23-05-04
    + +

    Definition at line 100 of file neighbor_interp_mod.F90.

    + +
    +
    + +

    ◆ interpolate_neighbor_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine neighbor_interp_mod::interpolate_neighbor_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    logical*1, dimension(mi,km), intent(in) LI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(inout) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(inout) CROT,
    real, dimension(mo), intent(inout) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (neighbor).

    +

    This subprogram performs neighbor interpolation from any grid to any grid for vector fields.

    +

    Options allow choosing the width of the grid square (ipopt(1)) to search for valid data, which defaults to 1 (IF IPOPT(1)=-1). Odd width squares are centered on the nearest input grid point; even width squares are centered on the nearest four input grid points.

    +

    Squares are searched for valid data in a spiral pattern starting from the center. no searching is done where the output grid is outside the input grid. Only horizontal interpolation is performed.

    +

    The input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • (igdtnumi/o=00) equidistant cylindrical
    • +
    • (igdtnumi/o=01) rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • (igdtnumi/o=10) mercator cylindrical
    • +
    • (igdtnumi/o=20) polar stereographic azimuthal
    • +
    • (igdtnumi/o=30) lambert conformal conical
    • +
    • (igdtnumi/o=40) gaussian cylindrical
    • +
    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid definition sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters.

    +

    Input bitmaps will be interpolated to output bitmaps. output bitmaps will also be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1) is width of square to examine in spiral search (defaults to 1 if ipopt(1)=-1)
    [in]grid_inThe input grid.
    [in]grid_outThe output grid.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags
    [in]li(mi,km) input bitmaps (if some ibi(k)=1)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [in,out]nonumber of output points (only if igdtnumo>=0)
    [in,out]rlat(mo) output latitudes in degrees (if igdtnumo<0)
    [in,out]rlon(mo) output longitudes in degrees (if igdtnumo<0)
    [in,out]crot(mo) vector rotation cosines (if igdtnumo<0)
    [in,out]srot(mo) vector rotation sines (if igdtnumo<0) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    +
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +
    Author
    Eric Engle
    +
    Date
    23-05-04
    + +

    Definition at line 352 of file neighbor_interp_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaceneighbor__interp__mod.js b/ver-5.1.0/namespaceneighbor__interp__mod.js new file mode 100644 index 00000000..2e4123af --- /dev/null +++ b/ver-5.1.0/namespaceneighbor__interp__mod.js @@ -0,0 +1,6 @@ +var namespaceneighbor__interp__mod = +[ + [ "interpolate_neighbor", "interfaceneighbor__interp__mod_1_1interpolate__neighbor.html", "interfaceneighbor__interp__mod_1_1interpolate__neighbor" ], + [ "interpolate_neighbor_scalar", "namespaceneighbor__interp__mod.html#a78452d1527c6974ad54091f0318e4b1f", null ], + [ "interpolate_neighbor_vector", "namespaceneighbor__interp__mod.html#a744ccffd8cd6c13d360e634db4851756", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespacepolfix__mod.html b/ver-5.1.0/namespacepolfix__mod.html new file mode 100644 index 00000000..57c2d849 --- /dev/null +++ b/ver-5.1.0/namespacepolfix__mod.html @@ -0,0 +1,290 @@ + + + + + + + +NCEPLIBS-ip: polfix_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    polfix_mod Module Reference
    +
    +
    + +

    Make multiple pole scalar values consistent. +More...

    + + + + + + + + +

    +Functions/Subroutines

    subroutine, public polfixs (NM, NX, KM, RLAT, IB, LO, GO)
     Make multiple pole scalar values consistent. More...
     
    subroutine, public polfixv (NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
     Make multiple pole vector values consistent,. More...
     
    +

    Detailed Description

    +

    Make multiple pole scalar values consistent.

    +
    Author
    Iredell, Kyle Gerheiser
    +

    Function/Subroutine Documentation

    + +

    ◆ polfixs()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public polfix_mod::polfixs (integer, intent(in) NM,
    integer, intent(in) NX,
    integer, intent(in) KM,
    real, dimension(nm), intent(in) RLAT,
    integer, dimension(km), intent(in) IB,
    logical*1, dimension(nx,km), intent(inout) LO,
    real, dimension(nx,km), intent(inout) GO 
    )
    +
    + +

    Make multiple pole scalar values consistent.

    +

    This subprogram averages multiple pole scalar values on a latitude/longitude grid. Bitmaps may be averaged too.

    +
    Parameters
    + + + + + + + + +
    [in]nminteger number of grid points
    [in]nxinteger leading dimension of fields
    [in]kminteger number of fields
    [in]rlatreal (no) latitudes in degrees
    [in]ibinteger (km) bitmap flags
    [out]lological*1 (nx,km) bitmaps (if some ib(k)=1)
    [out]goreal (nx,km) fields
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 29 of file polfix_mod.F90.

    + +

    Referenced by bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_scalar(), bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_scalar(), budget_interp_mod::interpolate_budget::interpolate_budget_scalar(), neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_scalar(), and neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_scalar().

    + +
    +
    + +

    ◆ polfixv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine, public polfix_mod::polfixv (integer, intent(in) NM,
    integer, intent(in) NX,
    integer, intent(in) KM,
    real, dimension(nm), intent(in) RLAT,
    real, dimension(nm), intent(in) RLON,
    integer, dimension(km), intent(in) IB,
    logical*1, dimension(nx,km), intent(inout) LO,
    real, dimension(nx,km), intent(inout) UO,
    real, dimension(nx,km), intent(inout) VO 
    )
    +
    + +

    Make multiple pole vector values consistent,.

    +

    This subprogram averages multiple pole vector values on a latitude/longitude grid. Bitmaps may be averaged too. Vectors are rotated with respect to their longitude.

    +
    Parameters
    + + + + + + + + + + +
    [in]nminteger number of grid points
    [in]nxinteger leading dimension of fields
    [in]kminteger number of fields
    [in]rlatreal (nm) latitudes in degrees
    [in]rlonreal (nm) longitudes in degrees
    [in]ibinteger (km) bitmap flags
    [in,out]lological*1 (nx,km) bitmaps (if some ib(k)=1)
    [in,out]uoreal (nx,km) u-winds
    [in,out]voreal (nx,km) v-winds
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 124 of file polfix_mod.F90.

    + +

    Referenced by bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_vector(), bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_vector(), budget_interp_mod::interpolate_budget::interpolate_budget_vector(), neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_vector(), and neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_vector().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaces.html b/ver-5.1.0/namespaces.html new file mode 100644 index 00000000..7edb8180 --- /dev/null +++ b/ver-5.1.0/namespaces.html @@ -0,0 +1,159 @@ + + + + + + + +NCEPLIBS-ip: Modules List + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    Modules List
    +
    +
    +
    Here is a list of all documented modules with brief descriptions:
    +
    [detail level 12]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Nbicubic_interp_modBicubic interpolation routines for scalars and vectors
     Cinterpolate_bicubic
     Nbilinear_interp_modBilinear interpolation routines for scalars and vectors
     Cinterpolate_bilinear
     Nbudget_interp_modBudget interpolation routines for scalars and vectors
     Cinterpolate_budget
     Nearth_radius_modDetermine earth radius and shape
     Ngdswzd_c_modModule that contains C wrapper for routine gdswzd()
     Ngdswzd_modDriver module for gdswzd routines
     Cgdswzd
     Nip_constants_modModule containing common constants
     Nip_equid_cylind_grid_modEquidistant cylindrical grib decoder and grid coordinate transformations
     Cip_equid_cylind_grid
     Nip_gaussian_grid_modGaussian grid coordinate transformations
     Cip_gaussian_grid
     Nip_grid_descriptor_modUsers derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions
     Cgrib1_descriptorDescriptor representing a grib1 grib descriptor section (GDS) with an integer array
     Cgrib2_descriptorGrib-2 descriptor containing a grib2 GDT represented by an integer array
     Cinit_descriptor
     Cip_grid_descriptorAbstract descriptor object which represents a grib1 or grib2 descriptor
     Coperator(==)
     Nip_grid_factory_modRoutines for creating an ip_grid given a Grib descriptor
     Cinit_grid
     Nip_grid_modAbstract ip_grid type
     Cgdswzd_interface
     Cinit_grib1_interface
     Cinit_grib2_interface
     Cip_gridAbstract grid that holds fields and methods common to all grids
     Coperator(==)Check equality
     Nip_grids_modRe-export the individual grids
     Nip_interpolators_modTop-level module to export interpolation routines and constants
     Nip_lambert_conf_grid_modLambert conformal grib decoder and grid coordinate transformations
     Cip_lambert_conf_grid
     Nip_mercator_grid_modGDS wizard for mercator cylindrical
     Cip_mercator_grid
     Nip_modTop-level module for the ip library which re-exports public routines such as ipolates, ipolatev, and gdswzd
     Nip_polar_stereo_grid_modGDS wizard for polar stereographic azimuthal
     Cip_polar_stereo_grid
     Nip_rot_equid_cylind_egrid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grid E
     Cip_rot_equid_cylind_egrid
     Nip_rot_equid_cylind_grid_modRotated equidistant cylindrical GRIB decoder and grid coordinate transformations for Arakawa grids A through D
     Cip_rot_equid_cylind_grid
     Nip_station_points_grid_modInterpolate gridded data to a series of station points
     Cip_station_points_grid
     Nipolates_modTop-level driver for scalar interpolation interpolation routine ipolates()
     Cipolates
     Nipolatev_modTop-level driver for vector interpolation interpolation routine ipolatev()
     Cipolatev
     Nneighbor_budget_interp_modInterpolate scalar fields (neighbor)
     Cinterpolate_neighbor_budget
     Nneighbor_interp_modInterpolate scalar fields (neighbor)
     Cinterpolate_neighbor
     Npolfix_modMake multiple pole scalar values consistent
     Nspectral_interp_modInterpolate spectral
     Cinterpolate_spectral
     Cpolates4
     Cpolatev4
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespaces_dup.js b/ver-5.1.0/namespaces_dup.js new file mode 100644 index 00000000..703939f4 --- /dev/null +++ b/ver-5.1.0/namespaces_dup.js @@ -0,0 +1,52 @@ +var namespaces_dup = +[ + [ "bicubic_interp_mod", "namespacebicubic__interp__mod.html", "namespacebicubic__interp__mod" ], + [ "bilinear_interp_mod", "namespacebilinear__interp__mod.html", "namespacebilinear__interp__mod" ], + [ "budget_interp_mod", "namespacebudget__interp__mod.html", "namespacebudget__interp__mod" ], + [ "earth_radius_mod", "namespaceearth__radius__mod.html", [ + [ "earth_radius", "namespaceearth__radius__mod.html#a810f60db1a1faff0d6f59937a8207a54", null ] + ] ], + [ "gdswzd_c_mod", "namespacegdswzd__c__mod.html", [ + [ "gdswzd_c", "namespacegdswzd__c__mod.html#ae3026381f7f41561507c97c9125d24e4", null ], + [ "gdswzd_c_grib1", "namespacegdswzd__c__mod.html#a06861f1403edf106bb3b399c39981504", null ] + ] ], + [ "gdswzd_mod", "namespacegdswzd__mod.html", "namespacegdswzd__mod" ], + [ "ip_constants_mod", "namespaceip__constants__mod.html", [ + [ "dpr", "namespaceip__constants__mod.html#ae6b74489db06341b78c3088b3f207011", null ], + [ "e2_wgs84", "namespaceip__constants__mod.html#af7783a977fa10c54d85282dc6ac5f545", null ], + [ "pi", "namespaceip__constants__mod.html#a47f83a2267da693170054c958c401cd4", null ], + [ "pi2", "namespaceip__constants__mod.html#a309f7e3b1f83b6b272b12ce4fff501c5", null ], + [ "pi4", "namespaceip__constants__mod.html#a5fe7cdd86b44487666dc37f655d9ff15", null ], + [ "rerth_wgs84", "namespaceip__constants__mod.html#ac6a501512f426673f064edbecd7a62fb", null ] + ] ], + [ "ip_equid_cylind_grid_mod", "namespaceip__equid__cylind__grid__mod.html", "namespaceip__equid__cylind__grid__mod" ], + [ "ip_gaussian_grid_mod", "namespaceip__gaussian__grid__mod.html", "namespaceip__gaussian__grid__mod" ], + [ "ip_grid_descriptor_mod", "namespaceip__grid__descriptor__mod.html", "namespaceip__grid__descriptor__mod" ], + [ "ip_grid_factory_mod", "namespaceip__grid__factory__mod.html", "namespaceip__grid__factory__mod" ], + [ "ip_grid_mod", "namespaceip__grid__mod.html", "namespaceip__grid__mod" ], + [ "ip_grids_mod", "namespaceip__grids__mod.html", null ], + [ "ip_interpolators_mod", "namespaceip__interpolators__mod.html", [ + [ "bicubic_interp_id", "namespaceip__interpolators__mod.html#adfdc7760718083d85618df85320c495e", null ], + [ "bilinear_interp_id", "namespaceip__interpolators__mod.html#a753e4b6c113a9a8b226c3c834786f3e1", null ], + [ "budget_interp_id", "namespaceip__interpolators__mod.html#a7df843ca4a64e3178f448aebf7dad359", null ], + [ "neighbor_budget_interp_id", "namespaceip__interpolators__mod.html#ae77a1da241f5de94f1874004ee8e715c", null ], + [ "neighbor_interp_id", "namespaceip__interpolators__mod.html#a35e5fe3a2dd79d205c0503f550388258", null ], + [ "spectral_interp_id", "namespaceip__interpolators__mod.html#a83ba2963a0b686c6ae67b53f9c385851", null ] + ] ], + [ "ip_lambert_conf_grid_mod", "namespaceip__lambert__conf__grid__mod.html", "namespaceip__lambert__conf__grid__mod" ], + [ "ip_mercator_grid_mod", "namespaceip__mercator__grid__mod.html", "namespaceip__mercator__grid__mod" ], + [ "ip_mod", "namespaceip__mod.html", null ], + [ "ip_polar_stereo_grid_mod", "namespaceip__polar__stereo__grid__mod.html", "namespaceip__polar__stereo__grid__mod" ], + [ "ip_rot_equid_cylind_egrid_mod", "namespaceip__rot__equid__cylind__egrid__mod.html", "namespaceip__rot__equid__cylind__egrid__mod" ], + [ "ip_rot_equid_cylind_grid_mod", "namespaceip__rot__equid__cylind__grid__mod.html", "namespaceip__rot__equid__cylind__grid__mod" ], + [ "ip_station_points_grid_mod", "namespaceip__station__points__grid__mod.html", "namespaceip__station__points__grid__mod" ], + [ "ipolates_mod", "namespaceipolates__mod.html", "namespaceipolates__mod" ], + [ "ipolatev_mod", "namespaceipolatev__mod.html", "namespaceipolatev__mod" ], + [ "neighbor_budget_interp_mod", "namespaceneighbor__budget__interp__mod.html", "namespaceneighbor__budget__interp__mod" ], + [ "neighbor_interp_mod", "namespaceneighbor__interp__mod.html", "namespaceneighbor__interp__mod" ], + [ "polfix_mod", "namespacepolfix__mod.html", [ + [ "polfixs", "namespacepolfix__mod.html#a15df1ba2e1fcad1e9465c4aa3a2ba0d6", null ], + [ "polfixv", "namespacepolfix__mod.html#aeefc8f045777f6d962d9ec539ef6007d", null ] + ] ], + [ "spectral_interp_mod", "namespacespectral__interp__mod.html", "namespacespectral__interp__mod" ] +]; \ No newline at end of file diff --git a/ver-5.1.0/namespacespectral__interp__mod.html b/ver-5.1.0/namespacespectral__interp__mod.html new file mode 100644 index 00000000..a63c289f --- /dev/null +++ b/ver-5.1.0/namespacespectral__interp__mod.html @@ -0,0 +1,1273 @@ + + + + + + + +NCEPLIBS-ip: spectral_interp_mod Module Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spectral_interp_mod Module Reference
    +
    +
    + +

    Interpolate spectral. +More...

    + + + + + + + + +

    +Data Types

    interface  interpolate_spectral
     
    interface  polates4
     
    interface  polatev4
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine interpolate_spectral_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate spectral scalar. More...
     
    subroutine interpolate_spectral_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate spectral vector. More...
     
    subroutine polates4_grib1 (IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (spectral). More...
     
    subroutine polates4_grib2 (IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (spectral). More...
     
    subroutine polatev4_grib1 (IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (spectral). More...
     
    subroutine polatev4_grib2 (IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (spectral). More...
     
    +

    Detailed Description

    +

    Interpolate spectral.

    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    +

    Function/Subroutine Documentation

    + +

    ◆ interpolate_spectral_scalar()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::interpolate_spectral_scalar (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate spectral scalar.

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    [in]ipoptinterpolation options; ipopt(1)=0 for triangular; ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to a sensible truncation if ipopt(2)=-1).
    [in]grid_ininput grid descriptor.
    [in]grid_outoutput grid descriptor.
    [in]MIskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]MOskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]KMnumber of fields to interpolate.
    [in]IBIinput bitmap flags (Must be all 0. Routine does not do bitmapped interpolation.)
    [in]GIinput fields to interpolate.
    [out]NOnumber of output points.
    [in,out]RLAToutput latitudes in degrees.
    [in,out]RLONoutput longitudes in degrees.
    [out]IBOoutput bitmap flags.
    [out]LOoutput bitmaps.
    [out]GOoutput fields interpolated.
    [out]IRETreturn code. 0/non-0 - successful/not successful.
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 61 of file spectral_interp_mod.F90.

    + +
    +
    + +

    ◆ interpolate_spectral_vector()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::interpolate_spectral_vector (integer, dimension(20), intent(in) IPOPT,
    class(ip_grid), intent(in) grid_in,
    class(ip_grid), intent(in) grid_out,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate spectral vector.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    ipoptinterpolation options; ipopt(1)=0 for triangular; ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to a sensible truncation if ipopt(2)=-1).
    grid_ininput grid descriptor.
    grid_outoutput grid descriptor.
    MIskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    MOskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    KMnumber of fields to interpolate.
    IBIinput bitmap flags (Must be all 0. Routine does not do bitmapped interpolation.)
    UIinput u-component fields to interpolate.
    VIinput v-component fields to interpolate.
    NOnumber of output points.
    RLAToutput latitudes in degrees.
    RLONoutput longitudes in degrees.
    CROTvector rotation cosines.
    SROTvector rotation sines.
    IBOoutput bitmap flags.
    LOoutput bitmaps.
    UOoutput u-component fields interpolated.
    VOoutput v-component fields interpolated.
    IRETreturn code. 0/non-0 - successful/not successful.
    +
    +
    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 122 of file spectral_interp_mod.F90.

    + +
    +
    + +

    ◆ polates4_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polates4_grib1 (integer, dimension(20), intent(in) IPOPT,
    integer, dimension(200), intent(in) KGDSI,
    integer, dimension(200), intent(in) KGDSO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) GI,
    integer NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for scalar fields. It requires that the input fields be uniformly global.

    +

    Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids.
    +

    Only horizontal interpolation is performed. The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63()).

    +

    The current code recognizes the following projections:

      +
    • kgds(1) = 000 equidistant cylindrical
    • +
    • kgds(1) = 001 mercator cylindrical
    • +
    • kgds(1) = 003 lambert conformal conical
    • +
    • kgds(1) = 004 gaussian cylindrical (spectral native)
    • +
    • kgds(1) = 005 polar stereographic azimuthal
    • +
    • kgds(1) = 203 rotated equidistant cylindrical (e-stagger)
    • +
    • kgds(1) = 205 rotated equidistant cylindrical (b-stagger)
    • +
    +

    Where kgds could be either input kgdsi or output kgdso. As an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input. Output bitmaps will not be created.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell Initial
    2001-06-18 Iredell improve detection of special fast transform
    2015-01-27 Gayno replace calls to gdswiz() with new merged version of gdswzd().
    +
    Parameters
    + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]kgdsi(200) input gds parameters as decoded by w3fi63
    [in]kgdso(200) output gds parameters (kgdso(1)<0 implies random station points)
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags (must be all 0)
    [in]gi(mi,km) input fields to interpolate
    [out]nonumber of output points (only if kgdso(1)<0)
    [out]rlat(no) output latitudes in degrees (if kgdso(1)<0)
    [out]rlon(no) output longitudes in degrees (if kgdso(1)<0)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 560 of file spectral_interp_mod.F90.

    + +
    +
    + +

    ◆ polates4_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polates4_grib2 (integer, dimension(20), intent(in) IPOPT,
    integer, intent(in) IGDTNUMI,
    integer, dimension(igdtleni), intent(in) IGDTMPLI,
    integer, intent(in) IGDTLENI,
    integer, intent(in) IGDTNUMO,
    integer, dimension(igdtleno), intent(in) IGDTMPLO,
    integer, intent(in) IGDTLENO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) GI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) GO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate scalar fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for scalar fields. It requires that the input fields be uniformly global. Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids.
    +

    Only horizontal interpolation is performed.

    +

    The code recognizes the following projections, where "igdtnumi/o" is the GRIB2 grid defintion template number for the input and onutput grids, respectively:

      +
    • igdtnumi/o = 00 equidistant cylindrical
    • +
    • igdtnumo = 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • igdtnumo = 10 mercator cylindrical
    • +
    • igdtnumo = 20 polar stereographic azimuthal
    • +
    • igdtnumo = 30 lambert conformal conical
    • +
    • igdtnumi/o = 40 gaussian cylindrical
    • +
    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned. On the other hand, the output can be a set of station points if igdtnumo < 0, in which case the number of points and their latitudes and longitudes must be input. Output bitmaps will not be created.

    +

    +Program History Log

    + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 Iredell initial
    2001-06-18 Iredell improve detection of special fast transform
    2015-01-27 Gayno replace calls to gdswiz with new merged version of gdswzd.
    2015-07-13 Gayno convert to grib 2. replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options; ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]igdtnumigrid definition template number - input grid. Corresponds to the gfldigdtnum component of the NCEPLIBS-g2 library gridmod data structure.
      +
    • 00 - equidistant cylindrical
    • +
    • 01 - rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 - mercator cyclindrical
    • +
    • 20 - polar stereographic azimuthal
    • +
    • 30 - lambert conformal conical
    • +
    • 40 - gaussian equidistant cyclindrical
    • +
    +
    [in]igdtmpli(igdtleni) grid definition template array - input grid. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure: (section 3 info). See comments in routine ipolates() for complete definition.
    [in]igdtleninumber of elements of the grid definition template array - input grid. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumogrid definition template number - output grid. Corresponds to the gfldigdtnum component of the NCEPLIBS-g2 library gridmod data structure. igdtnumo<0 means interpolate to random station points. Otherwise, same definition as igdtnumi.
    [in]igdtmplo(igdtleno) grid definition template array - output grid. Corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info). See comments in routine ipolates() for complete definition.
    [in]igdtlenonumber of elements of the grid definition template array - output grid. Corresponds to the gfldigdtlen component of the [NCEPLIBS-g2](https://github.com/NOAA-EMC/NCEPLIBS-g2) library gridmod data structure.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1
    [out]kmnumber of fields to interpolate
    [out]ibi(km) input bitmap flags (must be all 0)
    [out]gi(mi,km) input fields to interpolate
    [out]nonumber of output points (only if igdtnumo>=0)
    [out]rlat(mo) output latitudes in degrees (if igdtnumo<0)
    [out]rlon(mo) output longitudes in degrees (if igdtnumo<0)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]go(mo,km) output fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +

    !

    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition at line 255 of file spectral_interp_mod.F90.

    + +
    +
    + +

    ◆ polatev4_grib1()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polatev4_grib1 (integer, dimension(20), intent(in) IPOPT,
    integer, dimension(200), intent(in) KGDSI,
    integer, dimension(200), intent(in) KGDSO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for vector fields. It requires that the input fields be uniformly global. Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids.
    +

    Only horizontal interpolation is performed. The grids are defined by their grid description sections (passed in integer form as decoded by subprogram w3fi63).

    +

    The current code recognizes the following projections:

      +
    • (KGDS(1)=000) EQUIDISTANT CYLINDRICAL
    • +
    • (KGDS(1)=001) MERCATOR CYLINDRICAL
    • +
    • (KGDS(1)=003) LAMBERT CONFORMAL CONICAL
    • +
    • (KGDS(1)=004) GAUSSIAN CYLINDRICAL (SPECTRAL NATIVE)
    • +
    • (KGDS(1)=005) POLAR STEREOGRAPHIC AZIMUTHAL
    • +
    • (KGDS(1)=203) ROTATED EQUIDISTANT CYLINDRICAL (E-STAGGER)
    • +
    • (KGDS(1)=205) ROTATED EQUIDISTANT CYLINDRICAL (B-STAGGER)
    • +
    +

    Where kgds could be either input kgdsi or output kgdso.

    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections. As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. On the other hand, the output can be a set of station points if kgdso(1)<0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters.

    +

    Output bitmaps will only be created when the output grid extends outside of the domain of the input grid. The output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell initial.
    2001-06-18 iredell improve detection of special fast transform
    2015-01-27 gayno replace calls to gdswiz() with new merged routine gdswzd().
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]kgdsi(200) input gds parameters as decoded by w3fi63.
    [in]kgdso(200) output gds parameters (kgdso(1)<0 implies random station points).
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags (must be all 0)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [out]nonumber of output points (only if kgdso(1)<0)
    [out]rlat(no) output latitudes in degrees (if kgdso(1)<0)
    [out]rlon(no) output longitudes in degrees (if kgdso(1)<0)
    [out]crot(no) vector rotation cosines (if kgdso(1)<0)
    [out]srot(no) vector rotation sines (if kgdso(1)<0) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-04-10
    + +

    Definition at line 1222 of file spectral_interp_mod.F90.

    + +

    Referenced by spectral_interp_mod::interpolate_spectral::interpolate_spectral_vector().

    + +
    +
    + +

    ◆ polatev4_grib2()

    + +
    +
    + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spectral_interp_mod::polatev4_grib2 (integer, dimension(20), intent(in) IPOPT,
    integer, intent(in) IGDTNUMI,
    integer, dimension(igdtleni), intent(in) IGDTMPLI,
    integer, intent(in) IGDTLENI,
    integer, intent(in) IGDTNUMO,
    integer, dimension(igdtleno), intent(in) IGDTMPLO,
    integer, intent(in) IGDTLENO,
    integer, intent(in) MI,
    integer, intent(in) MO,
    integer, intent(in) KM,
    integer, dimension(km), intent(in) IBI,
    real, dimension(mi,km), intent(in) UI,
    real, dimension(mi,km), intent(in) VI,
    integer, intent(out) NO,
    real, dimension(mo), intent(inout) RLAT,
    real, dimension(mo), intent(inout) RLON,
    real, dimension(mo), intent(out) CROT,
    real, dimension(mo), intent(out) SROT,
    integer, dimension(km), intent(out) IBO,
    logical*1, dimension(mo,km), intent(out) LO,
    real, dimension(mo,km), intent(out) UO,
    real, dimension(mo,km), intent(out) VO,
    integer, intent(out) IRET 
    )
    +
    +private
    +
    + +

    Interpolate vector fields (spectral).

    +

    This subprogram performs spectral interpolation from any grid to any grid for vector fields. It requires that the input fields be uniformly global. Options allow choices between triangular shape (ipopt(1)=0) and rhomboidal shape (ipopt(1)=1) which has no default; a second option is the truncation (ipopt(2)) which defaults to a sensible truncation for the input grid (if opt(2)=-1).

    +
    Note
    If the output grid is not found in a special list, then the transform back to grid is not very fast. This special list contains global cylindrical grids, polar stereographic grids centered at the pole and mercator grids. Only horizontal interpolation is performed.
    +

    The input and output grids are defined by their grib 2 grid definition template as decoded by the ncep g2 library. The code recognizes the following projections, where "igdtnumi/o" is the grib 2 grid defintion template number for the input and output grids, respectively:

      +
    • igdtnumi/o=00 equidistant cylindrical
    • +
    • igdtnumo =01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • igdtnumo =10 mercator cylindrical
    • +
    • igdtnumo =20 polar stereographic azimuthal
    • +
    • igdtnumo =30 lambert conformal conical
    • +
    • igdtnumi/o=40 gaussian cylindrical
    • +
    +

    The input and output vectors are rotated so that they are either resolved relative to the defined grid in the direction of increasing x and y coordinates or resolved relative to easterly and northerly directions, as designated by their respective grid description sections.

    +

    As an added bonus the number of output grid points and their latitudes and longitudes are also returned along with their vector rotation parameters. On the other hand, the output can be a set of station points if igdtnumo<0, in which case the number of points and their latitudes and longitudes must be input along with their vector rotation parameters.

    +

    Output bitmaps will only be created when the output grid extends outside of the domain of the input grid. the output field is set to 0 where the output bitmap is off.

    +

    +Program History Log

    + + + + + + + + + + + +
    Date Programmer Comments
    96-04-10 iredell initial
    2001-06-18 iredell improve detection of special fast transform
    2015-01-27 gayno replace calls to gdswiz() with new merged routine gdswzd().
    2015-07-13 gayno convert to grib 2. replace grib 1 kgds arrays with grib 2 grid definition template arrays.
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + +
    [in]ipopt(20) interpolation options ipopt(1)=0 for triangular, ipopt(1)=1 for rhomboidal; ipopt(2) is truncation number (defaults to sensible if ipopt(2)=-1).
    [in]igdtnumigrid definition template number - input grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure:
      +
    • 00 equidistant cylindrical
    • +
    • 01 rotated equidistant cylindrical. "e" and non-"e" staggered
    • +
    • 10 mercator cyclindrical
    • +
    • 20 polar stereographic azimuthal
    • +
    • 30 lambert conformal conical
    • +
    • 40 gaussian equidistant cyclindrical
    • +
    +
    [in]igdtmpli(igdtleni) grid definition template array - input grid. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info). see comments in routine ipolatev for complete definition.
    [in]igdtleninumber of elements of the grid definition template array - input grid. corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]igdtnumogrid definition template number - output grid. Corresponds to the gfldigdtnum component of the ncep g2 library gridmod data structure. igdtnumo<0 means interpolate to random station points. Otherwise, same definition as "igdtnumi".
    [in]igdtmplo(igdtleno) grid definition template array - output grid. corresponds to the gfldigdtmpl component of the ncep g2 library gridmod data structure (section 3 info). see comments in routine ipolatev() for complete definition.
    [in]igdtlenonumber of elements of the grid definition template array - output grid. Corresponds to the gfldigdtlen component of the ncep g2 library gridmod data structure.
    [in]miskip number between input grid fields if km>1 or dimension of input grid fields if km=1.
    [in]moskip number between output grid fields if km>1 or dimension of output grid fields if km=1.
    [in]kmnumber of fields to interpolate
    [in]ibi(km) input bitmap flags (must be all 0)
    [in]ui(mi,km) input u-component fields to interpolate
    [in]vi(mi,km) input v-component fields to interpolate
    [out]nonumber of output points (only if igdtnumo>=0)
    [in,out]rlat(mo) output latitudes in degrees (if igdtnumo<0)
    [in,out]rlon(mo) output longitudes in degrees (if igdtnumo<0)
    [in,out]crot(mo) vector rotation cosines (if igdtnumo<0)
    [in,out]srot(mo) vector rotation sines (if igdtnumo<0) (ugrid=crot*uearth-srot*vearth; vgrid=srot*uearth+crot*vearth)
    [out]ibo(km) output bitmap flags
    [out]lo(mo,km) output bitmaps (always output)
    [out]uo(mo,km) output u-component fields interpolated
    [out]vo(mo,km) output v-component fields interpolated
    [out]iretreturn code
      +
    • 0 successful interpolation
    • +
    • 2 unrecognized input grid or no grid overlap
    • +
    • 3 unrecognized output grid
    • +
    • 41 invalid nonglobal input grid
    • +
    • 42 invalid spectral method parameters
    • +
    +
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-04-10
    + +

    Definition at line 888 of file spectral_interp_mod.F90.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/namespacespectral__interp__mod.js b/ver-5.1.0/namespacespectral__interp__mod.js new file mode 100644 index 00000000..05dbff31 --- /dev/null +++ b/ver-5.1.0/namespacespectral__interp__mod.js @@ -0,0 +1,12 @@ +var namespacespectral__interp__mod = +[ + [ "interpolate_spectral", "interfacespectral__interp__mod_1_1interpolate__spectral.html", "interfacespectral__interp__mod_1_1interpolate__spectral" ], + [ "polates4", "interfacespectral__interp__mod_1_1polates4.html", "interfacespectral__interp__mod_1_1polates4" ], + [ "polatev4", "interfacespectral__interp__mod_1_1polatev4.html", "interfacespectral__interp__mod_1_1polatev4" ], + [ "interpolate_spectral_scalar", "namespacespectral__interp__mod.html#a438646d69e941def0ada00d5ca19f618", null ], + [ "interpolate_spectral_vector", "namespacespectral__interp__mod.html#acb61ad529b7decc2a6ff58dd12fbadd0", null ], + [ "polates4_grib1", "namespacespectral__interp__mod.html#ab9fb87d87f2f9d578a5ade6b512ff366", null ], + [ "polates4_grib2", "namespacespectral__interp__mod.html#a54dfd0ea8368242a1053d64770bd295a", null ], + [ "polatev4_grib1", "namespacespectral__interp__mod.html#af4ce7638750e787dd69c7fe3ff2335cc", null ], + [ "polatev4_grib2", "namespacespectral__interp__mod.html#a2f76e9900554d90753ca788c2ddf9ac3", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/nav_f.png b/ver-5.1.0/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/ver-5.1.0/nav_f.png differ diff --git a/ver-5.1.0/nav_g.png b/ver-5.1.0/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/ver-5.1.0/nav_g.png differ diff --git a/ver-5.1.0/nav_h.png b/ver-5.1.0/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/ver-5.1.0/nav_h.png differ diff --git a/ver-5.1.0/navtree.css b/ver-5.1.0/navtree.css new file mode 100644 index 00000000..33341a67 --- /dev/null +++ b/ver-5.1.0/navtree.css @@ -0,0 +1,146 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#fff; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + background-color: #FAFAFF; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: 250px; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url("splitbar.png"); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/ver-5.1.0/navtree.js b/ver-5.1.0/navtree.js new file mode 100644 index 00000000..1e272d31 --- /dev/null +++ b/ver-5.1.0/navtree.js @@ -0,0 +1,546 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +NCEPLIBS-ip: ncpus.F File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ncpus.F File Reference
    +
    +
    + +

    Set number of cpus. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    function ncpus ()
     Set number of CPUs - the number of processors over which to parallelize. More...
     
    +

    Detailed Description

    +

    Set number of cpus.

    +

    +Program History Log

    + + + + + + + + + + + + + +
    Date Programmer Comments
    94-08-19 Iredell Initial.
    98-11-09 Vuong Add doc>block and remove cray references.
    1998-12-18 Iredell IBM SMP version.
    2010-11-16 Slovacek Linux must have different call.
    2012-11-01 Mirvis Multi-threading on LINUX-IBM/TIDE.
    +
    Author
    Iredell
    +
    Date
    94-08-19
    + +

    Definition in file ncpus.F.

    +

    Function/Subroutine Documentation

    + +

    ◆ ncpus()

    + +
    +
    + + + + +
    function ncpus
    +
    + +

    Set number of CPUs - the number of processors over which to parallelize.

    +
    Parameters
    + + +
    [out]ncpusnumber of CPUs.
    +
    +
    +
    Returns
    Number of CPUs assigned.
    +
    Author
    Iredell
    +
    Date
    94-08-19
    + +

    Definition at line 23 of file ncpus.F.

    + +

    Referenced by sptez(), sptezd(), sptezm(), sptezmd(), sptezmv(), sptezv(), sptran(), sptranv(), sptrun(), sptrund(), sptrung(), sptrungv(), sptrunl(), sptrunm(), sptrunmv(), sptruns(), sptrunsv(), and sptrunv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/ncpus_8F.js b/ver-5.1.0/ncpus_8F.js new file mode 100644 index 00000000..16d02677 --- /dev/null +++ b/ver-5.1.0/ncpus_8F.js @@ -0,0 +1,4 @@ +var ncpus_8F = +[ + [ "ncpus", "ncpus_8F.html#a821a75ee067ea31758a038c0327bd3bd", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/ncpus_8F_source.html b/ver-5.1.0/ncpus_8F_source.html new file mode 100644 index 00000000..c50cbf76 --- /dev/null +++ b/ver-5.1.0/ncpus_8F_source.html @@ -0,0 +1,141 @@ + + + + + + + +NCEPLIBS-ip: ncpus.F Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    ncpus.F
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> Set number of cpus.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 94-08-19 | Iredell | Initial.
    +
    8 C> 98-11-09 | Vuong | Add doc>block and remove cray references.
    +
    9 C> 1998-12-18 | Iredell | IBM SMP version.
    +
    10 C> 2010-11-16 | Slovacek | Linux must have different call.
    +
    11 C> 2012-11-01 | Mirvis | Multi-threading on LINUX-IBM/TIDE.
    +
    12 C>
    +
    13 C> @author Iredell @date 94-08-19
    +
    14 
    +
    15 C> Set number of CPUs - the number of processors over which
    +
    16 C> to parallelize.
    +
    17 C>
    +
    18 C> @param[out] ncpus number of CPUs.
    +
    19 C>
    +
    20 C> @return Number of CPUs assigned.
    +
    21 C>
    +
    22 C> @author Iredell @date 94-08-19
    +
    23  FUNCTION ncpus()
    +
    24  INTEGER tid
    +
    25 C Obtain thread number
    +
    26 #ifdef openmp
    +
    27  INTEGER omp_get_num_threads,omp_get_thread_num
    +
    28 !$OMP PARALLEL PRIVATE(TID)
    +
    29  tid = omp_get_thread_num()
    +
    30 ! PRINT *, '...............thread # ', TID
    +
    31  if (tid. eq. 0) then
    +
    32  ncpus=omp_get_num_threads()
    +
    33 ! PRINT *, 'totaly #------------------- of threads = ',NCPUS
    +
    34  endif
    +
    35 !$OMP END PARALLEL
    +
    36 #else
    +
    37  tid = 0
    +
    38  ncpus = 1
    +
    39 #endif
    +
    40  RETURN
    +
    41  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    +
    + + + + diff --git a/ver-5.1.0/neighbor__budget__interp__mod_8F90.html b/ver-5.1.0/neighbor__budget__interp__mod_8F90.html new file mode 100644 index 00000000..550da539 --- /dev/null +++ b/ver-5.1.0/neighbor__budget__interp__mod_8F90.html @@ -0,0 +1,135 @@ + + + + + + + +NCEPLIBS-ip: neighbor_budget_interp_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    neighbor_budget_interp_mod.F90 File Reference
    +
    +
    + +

    Interpolate scalar and vector fields with neighbor budget interpolation. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  neighbor_budget_interp_mod::interpolate_neighbor_budget
     
    + + + + +

    +Modules

    module  neighbor_budget_interp_mod
     Interpolate scalar fields (neighbor).
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine neighbor_budget_interp_mod::interpolate_neighbor_budget_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (budget). More...
     
    subroutine neighbor_budget_interp_mod::interpolate_neighbor_budget_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (budget). More...
     
    +

    Detailed Description

    +

    Interpolate scalar and vector fields with neighbor budget interpolation.

    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition in file neighbor_budget_interp_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/neighbor__budget__interp__mod_8F90.js b/ver-5.1.0/neighbor__budget__interp__mod_8F90.js new file mode 100644 index 00000000..15ede1c0 --- /dev/null +++ b/ver-5.1.0/neighbor__budget__interp__mod_8F90.js @@ -0,0 +1,6 @@ +var neighbor__budget__interp__mod_8F90 = +[ + [ "interpolate_neighbor_budget", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html", "interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget" ], + [ "interpolate_neighbor_budget_scalar", "neighbor__budget__interp__mod_8F90.html#a6d5110a9e9facf8c3132ec27d6857817", null ], + [ "interpolate_neighbor_budget_vector", "neighbor__budget__interp__mod_8F90.html#a4309c1e6b7fc60ded40657fe6c72297e", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/neighbor__budget__interp__mod_8F90_source.html b/ver-5.1.0/neighbor__budget__interp__mod_8F90_source.html new file mode 100644 index 00000000..9a5a5c04 --- /dev/null +++ b/ver-5.1.0/neighbor__budget__interp__mod_8F90_source.html @@ -0,0 +1,481 @@ + + + + + + + +NCEPLIBS-ip: neighbor_budget_interp_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    neighbor_budget_interp_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + +
    9  use gdswzd_mod
    +
    10  use polfix_mod
    +
    11  use ip_grids_mod
    +
    12  implicit none
    +
    13 
    +
    14  private
    + +
    16 
    + +
    18  module procedure interpolate_neighbor_budget_scalar
    +
    19  module procedure interpolate_neighbor_budget_vector
    +
    20  end interface interpolate_neighbor_budget
    +
    21 
    +
    22  ! Smallest positive real value (use for equality comparisons)
    +
    23  REAL :: TINYREAL=tiny(1.0)
    +
    24 
    +
    25 contains
    +
    26 
    +
    107  SUBROUTINE interpolate_neighbor_budget_scalar(IPOPT,grid_in,grid_out, &
    +
    108  MI,MO,KM,IBI,LI,GI, &
    +
    109  NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    110  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    111 
    +
    112  INTEGER, INTENT(IN ) :: IBI(KM), IPOPT(20), KM, MI, MO
    +
    113  INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
    +
    114  !
    +
    115  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    116  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    117  !
    +
    118  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    119  REAL, INTENT( OUT) :: GO(MO,KM), RLAT(MO), RLON(MO)
    +
    120  !
    +
    121  REAL, PARAMETER :: FILL=-9999.
    +
    122  !
    +
    123  INTEGER :: IB, I1
    +
    124  INTEGER :: JB, J1, K, LB, LSW, MP, N
    +
    125  INTEGER :: N11(MO), NB, NB1, NB2, NB3, NB4, NV
    +
    126  !
    +
    127  REAL :: PMP,RLOB(MO),RLAB(MO)
    +
    128  REAL :: WB, WO(MO,KM), XI, YI
    +
    129  REAL :: XPTB(MO),YPTB(MO),XPTS(MO),YPTS(MO)
    +
    130 
    +
    131  logical :: to_station_points
    +
    132 
    +
    133  select type(grid_out)
    +
    134  type is(ip_station_points_grid)
    +
    135  to_station_points = .true.
    +
    136  class default
    +
    137  to_station_points = .false.
    +
    138  end select
    +
    139 
    +
    140  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    141  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    142  iret=0
    +
    143  if(to_station_points) then
    +
    144  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    145  IF(no.EQ.0) iret=3
    +
    146  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    147  IF(nv.EQ.0) iret=2
    +
    148  else
    +
    149  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    150  IF(no.EQ.0) iret=3
    +
    151  endif
    +
    152  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    153  ! SET PARAMETERS
    +
    154  nb1=ipopt(1)
    +
    155  IF(nb1.EQ.-1) nb1=2
    +
    156  IF(iret.EQ.0.AND.nb1.LT.0) iret=32
    +
    157  lsw=1
    +
    158  IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
    +
    159  IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
    +
    160  mp=ipopt(3+ipopt(1))
    +
    161  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    162  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    163  pmp=mp*0.01
    +
    164  IF(iret.EQ.0) THEN
    +
    165  nb2=2*nb1+1
    +
    166  nb3=nb2*nb2
    +
    167  nb4=nb3
    +
    168  IF(lsw.EQ.1) THEN
    +
    169  nb4=ipopt(2)
    +
    170  DO ib=1,nb1
    +
    171  nb4=nb4+8*ib*ipopt(2+ib)
    +
    172  ENDDO
    +
    173  ENDIF
    +
    174  ELSE
    +
    175  nb2=0
    +
    176  nb3=0
    +
    177  nb4=0
    +
    178  ENDIF
    +
    179  DO k=1,km
    +
    180  DO n=1,no
    +
    181  go(n,k)=0.
    +
    182  wo(n,k)=0.
    +
    183  ENDDO
    +
    184  ENDDO
    +
    185  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    186  ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
    +
    187 
    +
    188  DO nb=1,nb3
    +
    189  ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS
    +
    190  jb=(nb-1)/nb2-nb1
    +
    191  ib=nb-(jb+nb1)*nb2-nb1-1
    +
    192  lb=max(abs(ib),abs(jb))
    +
    193  wb=1
    +
    194  IF(lsw.EQ.1) wb=ipopt(2+lb)
    +
    195  IF(abs(wb).GT.tinyreal) THEN
    +
    196  DO n=1,no
    +
    197  xptb(n)=xpts(n)+ib/real(nb2)
    +
    198  yptb(n)=ypts(n)+jb/real(nb2)
    +
    199  ENDDO
    +
    200  if(to_station_points)then
    +
    201  CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    202  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    203  else
    +
    204  CALL gdswzd(grid_out, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    205  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    206  endif
    +
    207  IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
    +
    208  DO n=1,no
    +
    209  xi=xptb(n)
    +
    210  yi=yptb(n)
    +
    211  IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
    +
    212  i1=nint(xi)
    +
    213  j1=nint(yi)
    +
    214  n11(n)=grid_in%field_pos(i1, j1)
    +
    215  ELSE
    +
    216  n11(n)=0
    +
    217  ENDIF
    +
    218  ENDDO
    +
    219  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    220  ! INTERPOLATE WITH OR WITHOUT BITMAPS
    +
    221  DO k=1,km
    +
    222  DO n=1,no
    +
    223  IF(n11(n).GT.0) THEN
    +
    224  IF(ibi(k).EQ.0.OR.li(n11(n),k)) THEN
    +
    225  go(n,k)=go(n,k)+wb*gi(n11(n),k)
    +
    226  wo(n,k)=wo(n,k)+wb
    +
    227  ENDIF
    +
    228  ENDIF
    +
    229  ENDDO
    +
    230  ENDDO
    +
    231  ENDIF
    +
    232  ENDDO
    +
    233  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    234  ! COMPUTE OUTPUT BITMAPS AND FIELDS
    +
    235  DO k=1,km
    +
    236  ibo(k)=ibi(k)
    +
    237  DO n=1,no
    +
    238  lo(n,k)=wo(n,k).GE.pmp*nb4
    +
    239  IF(lo(n,k)) THEN
    +
    240  go(n,k)=go(n,k)/wo(n,k)
    +
    241  ELSE
    +
    242  ibo(k)=1
    +
    243  go(n,k)=0.
    +
    244  ENDIF
    +
    245  ENDDO
    +
    246  ENDDO
    +
    247 
    +
    248  select type(grid_out)
    +
    249  type is(ip_equid_cylind_grid)
    +
    250  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
    +
    251  end select
    +
    252 
    + +
    254 
    +
    255 
    +
    351  SUBROUTINE interpolate_neighbor_budget_vector(IPOPT,grid_in,grid_out, &
    +
    352  MI,MO,KM,IBI,LI,UI,VI, &
    +
    353  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    354  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    355 
    +
    356  INTEGER, INTENT(IN ) :: IPOPT(20), IBI(KM)
    +
    357  INTEGER, INTENT(IN ) :: KM, MI, MO
    +
    358  INTEGER, INTENT( OUT) :: IRET, NO, IBO(KM)
    +
    359  !
    +
    360  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    361  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    362  !
    +
    363  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    364  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    365  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    366  REAL, INTENT( OUT) :: CROT(MO),SROT(MO)
    +
    367  !
    +
    368  REAL, PARAMETER :: FILL=-9999.
    +
    369  !
    +
    370  INTEGER :: N11(MO)
    +
    371  INTEGER :: IB, JB, I1, J1
    +
    372  INTEGER :: K, LB, LSW, MP, N, NV
    +
    373  INTEGER :: NB, NB1, NB2, NB3, NB4
    +
    374  !
    +
    375  LOGICAL :: SAME_GRID
    +
    376  !
    +
    377  REAL :: C11(MO),S11(MO)
    +
    378  REAL :: CM11, SM11, PMP
    +
    379  REAL :: U11, V11, UROT, VROT
    +
    380  REAL :: WB, WO(MO,KM), XI, YI
    +
    381  REAL :: RLOB(MO),RLAB(MO)
    +
    382  REAL :: XPTS(MO),YPTS(MO)
    +
    383  REAL :: XPTB(MO),YPTB(MO)
    +
    384 
    +
    385  logical :: to_station_points
    +
    386 
    +
    387  ! Save coeffecients between runs and only compute if grid has changed
    +
    388  INTEGER, SAVE :: MIX=-1
    +
    389  REAL, ALLOCATABLE,SAVE :: CROI(:),SROI(:)
    +
    390  REAL, ALLOCATABLE,SAVE :: XPTI(:),YPTI(:)
    +
    391  REAL, ALLOCATABLE,SAVE :: RLOI(:),RLAI(:)
    +
    392  class(ip_grid), allocatable, save :: prev_grid_in
    +
    393 
    +
    394  select type(grid_out)
    +
    395  type is(ip_station_points_grid)
    +
    396  to_station_points = .true.
    +
    397  class default
    +
    398  to_station_points = .false.
    +
    399  end select
    +
    400 
    +
    401  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    402  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    403  iret=0
    +
    404  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
    +
    405  IF(no.EQ.0) iret=3
    +
    406  if(to_station_points) then
    +
    407  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv,crot,srot)
    +
    408  IF(nv.EQ.0) iret=2
    +
    409  endif
    +
    410 
    +
    411  if (.not. allocated(prev_grid_in)) then
    +
    412  allocate(prev_grid_in, source = grid_in)
    +
    413 
    +
    414  same_grid = .false.
    +
    415  else
    +
    416  same_grid = grid_in == prev_grid_in
    +
    417 
    +
    418  if (.not. same_grid) then
    +
    419  deallocate(prev_grid_in)
    +
    420  allocate(prev_grid_in, source = grid_in)
    +
    421  end if
    +
    422  end if
    +
    423 
    +
    424  IF(.NOT.same_grid) THEN
    +
    425  IF(mix.NE.mi) THEN
    +
    426  IF(mix.GE.0) DEALLOCATE(xpti,ypti,rloi,rlai,croi,sroi)
    +
    427  ALLOCATE(xpti(mi),ypti(mi),rloi(mi),rlai(mi),croi(mi),sroi(mi))
    +
    428  mix=mi
    +
    429  ENDIF
    +
    430  CALL gdswzd(grid_in,0,mi,fill,xpti,ypti, &
    +
    431  rloi,rlai,nv,croi,sroi)
    +
    432  ENDIF
    +
    433  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    434  ! SET PARAMETERS
    +
    435  nb1=ipopt(1)
    +
    436  IF(nb1.EQ.-1) nb1=2
    +
    437  IF(iret.EQ.0.AND.nb1.LT.0) iret=32
    +
    438  lsw=1
    +
    439  IF(ipopt(1).EQ.-1.OR.ipopt(2).EQ.-1) lsw=0
    +
    440  IF(iret.EQ.0.AND.lsw.EQ.1.AND.nb1.GT.15) iret=32
    +
    441  mp=ipopt(3+ipopt(1))
    +
    442  IF(mp.EQ.-1.OR.mp.EQ.0) mp=50
    +
    443  IF(mp.LT.0.OR.mp.GT.100) iret=32
    +
    444  pmp=mp*0.01
    +
    445  IF(iret.EQ.0) THEN
    +
    446  nb2=2*nb1+1
    +
    447  nb3=nb2*nb2
    +
    448  nb4=nb3
    +
    449  IF(lsw.EQ.1) THEN
    +
    450  nb4=ipopt(2)
    +
    451  DO ib=1,nb1
    +
    452  nb4=nb4+8*ib*ipopt(2+ib)
    +
    453  ENDDO
    +
    454  ENDIF
    +
    455  ELSE
    +
    456  nb2=0
    +
    457  nb3=0
    +
    458  nb4=0
    +
    459  ENDIF
    +
    460  DO k=1,km
    +
    461  DO n=1,no
    +
    462  uo(n,k)=0
    +
    463  vo(n,k)=0
    +
    464  wo(n,k)=0.
    +
    465  ENDDO
    +
    466  ENDDO
    +
    467  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    468  ! LOOP OVER SAMPLE POINTS IN OUTPUT GRID BOX
    +
    469  DO nb=1,nb3
    +
    470  ! LOCATE INPUT POINTS AND COMPUTE THEIR WEIGHTS AND ROTATIONS
    +
    471  jb=(nb-1)/nb2-nb1
    +
    472  ib=nb-(jb+nb1)*nb2-nb1-1
    +
    473  lb=max(abs(ib),abs(jb))
    +
    474  wb=1
    +
    475  IF(lsw.EQ.1) wb=ipopt(2+lb)
    +
    476  IF(abs(wb).GT.tinyreal) THEN
    +
    477  DO n=1,no
    +
    478  xptb(n)=xpts(n)+ib/real(nb2)
    +
    479  yptb(n)=ypts(n)+jb/real(nb2)
    +
    480  ENDDO
    +
    481  if(to_station_points)then
    +
    482  CALL gdswzd(grid_in, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    483  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    484  else
    +
    485  CALL gdswzd(grid_out, 1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    486  CALL gdswzd(grid_in,-1,no,fill,xptb,yptb,rlob,rlab,nv)
    +
    487  endif
    +
    488  IF(iret.EQ.0.AND.nv.EQ.0.AND.lb.EQ.0) iret=2
    +
    489  DO n=1,no
    +
    490  xi=xptb(n)
    +
    491  yi=yptb(n)
    +
    492  IF(abs(xi-fill).GT.tinyreal.AND.abs(yi-fill).GT.tinyreal) THEN
    +
    493  i1=nint(xi)
    +
    494  j1=nint(yi)
    +
    495  n11(n)=grid_in%field_pos(i1, j1)
    +
    496  IF(n11(n).GT.0) THEN
    +
    497  CALL movect(rlai(n11(n)),rloi(n11(n)),rlat(n),rlon(n),cm11,sm11)
    +
    498  c11(n)=cm11*croi(n11(n))+sm11*sroi(n11(n))
    +
    499  s11(n)=sm11*croi(n11(n))-cm11*sroi(n11(n))
    +
    500  ENDIF
    +
    501  ELSE
    +
    502  n11(n)=0
    +
    503  ENDIF
    +
    504  ENDDO
    +
    505  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    506  ! INTERPOLATE WITH OR WITHOUT BITMAPS
    +
    507  DO k=1,km
    +
    508  DO n=1,no
    +
    509  IF(n11(n).GT.0) THEN
    +
    510  IF(ibi(k).EQ.0.OR.li(n11(n),k)) THEN
    +
    511  u11=c11(n)*ui(n11(n),k)-s11(n)*vi(n11(n),k)
    +
    512  v11=s11(n)*ui(n11(n),k)+c11(n)*vi(n11(n),k)
    +
    513  uo(n,k)=uo(n,k)+wb*u11
    +
    514  vo(n,k)=vo(n,k)+wb*v11
    +
    515  wo(n,k)=wo(n,k)+wb
    +
    516  ENDIF
    +
    517  ENDIF
    +
    518  ENDDO
    +
    519  ENDDO
    +
    520  ENDIF
    +
    521  ENDDO ! NB LOOP
    +
    522  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    523  ! COMPUTE OUTPUT BITMAPS AND FIELDS
    +
    524  DO k=1,km
    +
    525  ibo(k)=ibi(k)
    +
    526  DO n=1,no
    +
    527  lo(n,k)=wo(n,k).GE.pmp*nb4
    +
    528  IF(lo(n,k)) THEN
    +
    529  uo(n,k)=uo(n,k)/wo(n,k)
    +
    530  vo(n,k)=vo(n,k)/wo(n,k)
    +
    531  urot=crot(n)*uo(n,k)-srot(n)*vo(n,k)
    +
    532  vrot=srot(n)*uo(n,k)+crot(n)*vo(n,k)
    +
    533  uo(n,k)=urot
    +
    534  vo(n,k)=vrot
    +
    535  ELSE
    +
    536  ibo(k)=1
    +
    537  uo(n,k)=0.
    +
    538  vo(n,k)=0.
    +
    539  ENDIF
    +
    540  ENDDO
    +
    541  ENDDO
    +
    542 
    +
    543  select type(grid_out)
    +
    544  type is(ip_equid_cylind_grid)
    +
    545  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
    +
    546  end select
    +
    547 
    +
    548  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    + +
    550 
    + + + +
    subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
    This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
    Definition: movect.F90:26
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Interpolate scalar fields (neighbor).
    +
    subroutine interpolate_neighbor_budget_vector(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    Interpolate vector fields (budget).
    +
    subroutine interpolate_neighbor_budget_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    Interpolate scalar fields (budget).
    +
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:7
    +
    subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:30
    +
    subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
    Make multiple pole vector values consistent,.
    Definition: polfix_mod.F90:125
    +
    +
    + + + + diff --git a/ver-5.1.0/neighbor__interp__mod_8F90.html b/ver-5.1.0/neighbor__interp__mod_8F90.html new file mode 100644 index 00000000..71dc1c71 --- /dev/null +++ b/ver-5.1.0/neighbor__interp__mod_8F90.html @@ -0,0 +1,135 @@ + + + + + + + +NCEPLIBS-ip: neighbor_interp_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    neighbor_interp_mod.F90 File Reference
    +
    +
    + +

    Interpolate scalar and vector fields with neighbor interpolation. +More...

    + +

    Go to the source code of this file.

    + + + + +

    +Data Types

    interface  neighbor_interp_mod::interpolate_neighbor
     
    + + + + +

    +Modules

    module  neighbor_interp_mod
     Interpolate scalar fields (neighbor).
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine neighbor_interp_mod::interpolate_neighbor_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (neighbor). More...
     
    subroutine neighbor_interp_mod::interpolate_neighbor_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (neighbor). More...
     
    +

    Detailed Description

    +

    Interpolate scalar and vector fields with neighbor interpolation.

    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition in file neighbor_interp_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/neighbor__interp__mod_8F90.js b/ver-5.1.0/neighbor__interp__mod_8F90.js new file mode 100644 index 00000000..90d45008 --- /dev/null +++ b/ver-5.1.0/neighbor__interp__mod_8F90.js @@ -0,0 +1,6 @@ +var neighbor__interp__mod_8F90 = +[ + [ "interpolate_neighbor", "interfaceneighbor__interp__mod_1_1interpolate__neighbor.html", "interfaceneighbor__interp__mod_1_1interpolate__neighbor" ], + [ "interpolate_neighbor_scalar", "neighbor__interp__mod_8F90.html#a78452d1527c6974ad54091f0318e4b1f", null ], + [ "interpolate_neighbor_vector", "neighbor__interp__mod_8F90.html#a744ccffd8cd6c13d360e634db4851756", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/neighbor__interp__mod_8F90_source.html b/ver-5.1.0/neighbor__interp__mod_8F90_source.html new file mode 100644 index 00000000..4537b4be --- /dev/null +++ b/ver-5.1.0/neighbor__interp__mod_8F90_source.html @@ -0,0 +1,515 @@ + + + + + + + +NCEPLIBS-ip: neighbor_interp_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    neighbor_interp_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + +
    21  use gdswzd_mod
    +
    22  use polfix_mod
    +
    23  use ip_grids_mod
    +
    24  implicit none
    +
    25 
    +
    26  private
    +
    27  public :: interpolate_neighbor
    +
    28 
    + +
    30  module procedure interpolate_neighbor_scalar
    +
    31  module procedure interpolate_neighbor_vector
    +
    32  end interface interpolate_neighbor
    +
    33 
    +
    34  ! Smallest positive real value (use for equality comparisons)
    +
    35  REAL :: TINYREAL=tiny(1.0)
    +
    36 
    +
    37 contains
    +
    38 
    +
    100  SUBROUTINE interpolate_neighbor_scalar(IPOPT,grid_in,grid_out, &
    +
    101  MI,MO,KM,IBI,LI,GI, &
    +
    102  NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    103  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    104  INTEGER, INTENT(IN ) :: IPOPT(20)
    +
    105  INTEGER, INTENT(IN ) :: MI,MO,KM
    +
    106  INTEGER, INTENT(IN ) :: IBI(KM)
    +
    107  INTEGER, INTENT(INOUT) :: NO
    +
    108  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    109  !
    +
    110  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    111  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    112  !
    +
    113  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    114  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    115  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    116  !
    +
    117  REAL, PARAMETER :: FILL=-9999.
    +
    118  !
    +
    119  INTEGER :: I1,J1,IXS,JXS
    +
    120  INTEGER :: MSPIRAL,N,K,NK
    +
    121  INTEGER :: NV
    +
    122  INTEGER :: MX,KXS,KXT,IX,JX,NX
    +
    123  !
    +
    124  LOGICAL :: SAME_GRIDI, SAME_GRIDO
    +
    125  !
    +
    126  REAL :: XPTS(MO),YPTS(MO)
    +
    127  logical :: to_station_points
    +
    128 
    +
    129  INTEGER, SAVE :: NOX=-1,iretx=-1
    +
    130  INTEGER, ALLOCATABLE, SAVE :: NXY(:)
    +
    131  REAL, ALLOCATABLE, SAVE :: RLATX(:),RLONX(:),XPTSX(:),YPTSX(:)
    +
    132  class(ip_grid), allocatable, save :: prev_grid_in, prev_grid_out
    +
    133  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    134  ! SET PARAMETERS
    +
    135  iret=0
    +
    136  mspiral=max(ipopt(1),1)
    +
    137  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    138  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
    +
    139  allocate(prev_grid_in, source = grid_in)
    +
    140  allocate(prev_grid_out, source = grid_out)
    +
    141 
    +
    142  same_gridi = .false.
    +
    143  same_grido = .false.
    +
    144  else
    +
    145  same_gridi = grid_in == prev_grid_in
    +
    146  same_grido = grid_out == prev_grid_out
    +
    147 
    +
    148  if (.not. same_gridi .or. .not. same_grido) then
    +
    149  deallocate(prev_grid_in)
    +
    150  deallocate(prev_grid_out)
    +
    151 
    +
    152  allocate(prev_grid_in, source = grid_in)
    +
    153  allocate(prev_grid_out, source = grid_out)
    +
    154  end if
    +
    155  end if
    +
    156 
    +
    157  select type(grid_out)
    +
    158  type is(ip_station_points_grid)
    +
    159  to_station_points = .true.
    +
    160  class default
    +
    161  to_station_points = .false.
    +
    162  end select
    +
    163  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    164  ! SAVE OR SKIP WEIGHT COMPUTATION
    +
    165  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
    +
    166  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    167  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    168  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    169  IF(no.EQ.0) iret=3
    +
    170  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    171  ! LOCATE INPUT POINTS
    +
    172  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    173  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
    +
    174  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    175  ! ALLOCATE AND SAVE GRID DATA
    +
    176  IF(nox.NE.no) THEN
    +
    177  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,xptsx,yptsx,nxy)
    +
    178  ALLOCATE(rlatx(no),rlonx(no),xptsx(no),yptsx(no),nxy(no))
    +
    179  nox=no
    +
    180  ENDIF
    +
    181  iretx=iret
    +
    182  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    183  ! COMPUTE WEIGHTS
    +
    184  IF(iret.EQ.0) THEN
    +
    185  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    186  DO n=1,no
    +
    187  rlonx(n)=rlon(n)
    +
    188  rlatx(n)=rlat(n)
    +
    189  xptsx(n)=xpts(n)
    +
    190  yptsx(n)=ypts(n)
    +
    191  IF(abs(xpts(n)-fill).GT.tinyreal.AND.abs(ypts(n)-fill).GT.tinyreal) THEN
    +
    192  nxy(n) = grid_in%field_pos(nint(xpts(n)), nint(ypts(n)))
    +
    193  ELSE
    +
    194  nxy(n)=0
    +
    195  ENDIF
    +
    196  ENDDO
    +
    197  ENDIF
    +
    198  ENDIF
    +
    199  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    200  ! INTERPOLATE OVER ALL FIELDS
    +
    201  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
    +
    202  IF(.not. to_station_points) THEN
    +
    203  no=nox
    +
    204  DO n=1,no
    +
    205  rlon(n)=rlonx(n)
    +
    206  rlat(n)=rlatx(n)
    +
    207  ENDDO
    +
    208  ENDIF
    +
    209  DO n=1,no
    +
    210  xpts(n)=xptsx(n)
    +
    211  ypts(n)=yptsx(n)
    +
    212  ENDDO
    +
    213  !$OMP PARALLEL DO PRIVATE(NK,K,N,I1,J1,IXS,JXS,MX,KXS,KXT,IX,JX,NX) SCHEDULE(STATIC)
    +
    214  DO nk=1,no*km
    +
    215  k=(nk-1)/no+1
    +
    216  n=nk-no*(k-1)
    +
    217  go(n,k)=0
    +
    218  lo(n,k)=.false.
    +
    219  IF(nxy(n).GT.0) THEN
    +
    220  IF(ibi(k).EQ.0.OR.li(nxy(n),k)) THEN
    +
    221  go(n,k)=gi(nxy(n),k)
    +
    222  lo(n,k)=.true.
    +
    223  ! SPIRAL AROUND UNTIL VALID DATA IS FOUND.
    +
    224  ELSEIF(mspiral.GT.1) THEN
    +
    225  i1=nint(xpts(n))
    +
    226  j1=nint(ypts(n))
    +
    227  ixs=int(sign(1.,xpts(n)-i1))
    +
    228  jxs=int(sign(1.,ypts(n)-j1))
    +
    229  DO mx=2,mspiral**2
    +
    230  kxs=int(sqrt(4*mx-2.5))
    +
    231  kxt=mx-(kxs**2/4+1)
    +
    232  SELECT CASE(mod(kxs,4))
    +
    233  CASE(1)
    +
    234  ix=i1-ixs*(kxs/4-kxt)
    +
    235  jx=j1-jxs*kxs/4
    +
    236  CASE(2)
    +
    237  ix=i1+ixs*(1+kxs/4)
    +
    238  jx=j1-jxs*(kxs/4-kxt)
    +
    239  CASE(3)
    +
    240  ix=i1+ixs*(1+kxs/4-kxt)
    +
    241  jx=j1+jxs*(1+kxs/4)
    +
    242  CASE DEFAULT
    +
    243  ix=i1-ixs*kxs/4
    +
    244  jx=j1+jxs*(kxs/4-kxt)
    +
    245  END SELECT
    +
    246  nx = grid_in%field_pos(ix, jx)
    +
    247  IF(nx.GT.0) THEN
    +
    248  IF(li(nx,k)) THEN
    +
    249  go(n,k)=gi(nx,k)
    +
    250  lo(n,k)=.true.
    +
    251  EXIT
    +
    252  ENDIF
    +
    253  ENDIF
    +
    254  ENDDO
    +
    255  ENDIF
    +
    256  ENDIF
    +
    257  ENDDO
    +
    258 
    +
    259  DO k=1,km
    +
    260  ibo(k)=ibi(k)
    +
    261  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
    +
    262  ENDDO
    +
    263 
    +
    264  select type(grid_out)
    +
    265  type is(ip_equid_cylind_grid)
    +
    266  CALL polfixs(no,mo,km,rlat,ibo,lo,go)
    +
    267  end select
    +
    268  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    269  ELSE
    +
    270  IF(iret.EQ.0) iret=iretx
    +
    271  IF(.not. to_station_points) no=0
    +
    272  ENDIF
    +
    273  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    274  END SUBROUTINE interpolate_neighbor_scalar
    +
    275 
    +
    352  SUBROUTINE interpolate_neighbor_vector(IPOPT,grid_in,grid_out, &
    +
    353  MI,MO,KM,IBI,LI,UI,VI, &
    +
    354  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    355 
    +
    356  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    357  INTEGER, INTENT(IN ) :: IPOPT(20)
    +
    358  INTEGER, INTENT(IN ) :: IBI(KM),MI,MO,KM
    +
    359  INTEGER, INTENT(INOUT) :: NO
    +
    360  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    361  !
    +
    362  LOGICAL*1, INTENT(IN ) :: LI(MI,KM)
    +
    363  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    364  !
    +
    365  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    366  REAL, INTENT(INOUT) :: CROT(MO),SROT(MO)
    +
    367  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    368  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    369  !
    +
    370  REAL, PARAMETER :: FILL=-9999.
    +
    371  !
    +
    372  INTEGER :: I1,J1,IXS,JXS,MX
    +
    373  INTEGER :: KXS,KXT,IX,JX,NX
    +
    374  INTEGER :: MSPIRAL,N,K,NK,NV
    +
    375  !
    +
    376  LOGICAL :: SAME_GRIDI, SAME_GRIDO
    +
    377  !
    +
    378  REAL :: CX,SX,CM,SM,UROT,VROT
    +
    379  REAL :: XPTS(MO),YPTS(MO)
    +
    380  REAL :: CROI(MI),SROI(MI)
    +
    381  REAL :: XPTI(MI),YPTI(MI),RLOI(MI),RLAI(MI)
    +
    382 
    +
    383  logical :: to_station_points
    +
    384 
    +
    385  INTEGER, SAVE :: NOX=-1,iretx=-1
    +
    386  INTEGER, ALLOCATABLE, SAVE :: NXY(:)
    +
    387 
    +
    388  REAL, ALLOCATABLE, SAVE :: RLATX(:),RLONX(:),XPTSX(:),YPTSX(:)
    +
    389  REAL, ALLOCATABLE, SAVE :: CROTX(:),SROTX(:),CXY(:),SXY(:)
    +
    390  class(ip_grid), allocatable, save :: prev_grid_in, prev_grid_out
    +
    391  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    392  ! SET PARAMETERS
    +
    393  iret=0
    +
    394  mspiral=max(ipopt(1),1)
    +
    395  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    396 
    +
    397  if (.not. allocated(prev_grid_in) .or. .not. allocated(prev_grid_out)) then
    +
    398  allocate(prev_grid_in, source = grid_in)
    +
    399  allocate(prev_grid_out, source = grid_out)
    +
    400 
    +
    401  same_gridi = .false.
    +
    402  same_grido = .false.
    +
    403  else
    +
    404  same_gridi = grid_in == prev_grid_in
    +
    405  same_grido = grid_out == prev_grid_out
    +
    406 
    +
    407  if (.not. same_gridi .or. .not. same_grido) then
    +
    408  deallocate(prev_grid_in)
    +
    409  deallocate(prev_grid_out)
    +
    410 
    +
    411  allocate(prev_grid_in, source = grid_in)
    +
    412  allocate(prev_grid_out, source = grid_out)
    +
    413  end if
    +
    414  end if
    +
    415 
    +
    416  select type(grid_out)
    +
    417  type is(ip_station_points_grid)
    +
    418  to_station_points = .true.
    +
    419  class default
    +
    420  to_station_points = .false.
    +
    421  end select
    +
    422 
    +
    423  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    424  ! SAVE OR SKIP WEIGHT COMPUTATION
    +
    425  IF(iret.EQ.0.AND.(to_station_points.OR..NOT.same_gridi.OR..NOT.same_grido))THEN
    +
    426  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    427  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    428  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
    +
    429  IF(no.EQ.0) iret=3
    +
    430  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    431  ! LOCATE INPUT POINTS
    +
    432  CALL gdswzd(grid_in,-1,no,fill,xpts,ypts,rlon,rlat,nv)
    +
    433  IF(iret.EQ.0.AND.nv.EQ.0) iret=2
    +
    434  CALL gdswzd(grid_in, 0,mi,fill,xpti,ypti,rloi,rlai,nv,croi,sroi)
    +
    435  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    436  ! ALLOCATE AND SAVE GRID DATA
    +
    437  IF(nox.NE.no) THEN
    +
    438  IF(nox.GE.0) DEALLOCATE(rlatx,rlonx,xptsx,yptsx,crotx,srotx,nxy,cxy,sxy)
    +
    439  ALLOCATE(rlatx(no),rlonx(no),xptsx(no),yptsx(no), &
    +
    440  crotx(no),srotx(no),nxy(no),cxy(no),sxy(no))
    +
    441  nox=no
    +
    442  ENDIF
    +
    443  iretx=iret
    +
    444  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    445  ! COMPUTE WEIGHTS
    +
    446  IF(iret.EQ.0) THEN
    +
    447  !$OMP PARALLEL DO PRIVATE(N,CM,SM) SCHEDULE(STATIC)
    +
    448  DO n=1,no
    +
    449  rlonx(n)=rlon(n)
    +
    450  rlatx(n)=rlat(n)
    +
    451  xptsx(n)=xpts(n)
    +
    452  yptsx(n)=ypts(n)
    +
    453  crotx(n)=crot(n)
    +
    454  srotx(n)=srot(n)
    +
    455  IF(abs(xpts(n)-fill).GT.tinyreal.AND.abs(ypts(n)-fill).GT.tinyreal) THEN
    +
    456  nxy(n) = grid_in%field_pos(nint(xpts(n)),nint(ypts(n)))
    +
    457  IF(nxy(n).GT.0) THEN
    +
    458  CALL movect(rlai(nxy(n)),rloi(nxy(n)),rlat(n),rlon(n),cm,sm)
    +
    459  cxy(n)=cm*croi(nxy(n))+sm*sroi(nxy(n))
    +
    460  sxy(n)=sm*croi(nxy(n))-cm*sroi(nxy(n))
    +
    461  ENDIF
    +
    462  ELSE
    +
    463  nxy(n)=0
    +
    464  ENDIF
    +
    465  ENDDO
    +
    466  ENDIF
    +
    467  ENDIF
    +
    468  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    469  ! INTERPOLATE OVER ALL FIELDS
    +
    470  IF(iret.EQ.0.AND.iretx.EQ.0) THEN
    +
    471  IF(.not. to_station_points) THEN
    +
    472  no=nox
    +
    473  DO n=1,no
    +
    474  rlon(n)=rlonx(n)
    +
    475  rlat(n)=rlatx(n)
    +
    476  crot(n)=crotx(n)
    +
    477  srot(n)=srotx(n)
    +
    478  ENDDO
    +
    479  ENDIF
    +
    480  DO n=1,no
    +
    481  xpts(n)=xptsx(n)
    +
    482  ypts(n)=yptsx(n)
    +
    483  ENDDO
    +
    484  !$OMP PARALLEL DO &
    +
    485  !$OMP PRIVATE(NK,K,N,I1,J1,IXS,JXS,MX,KXS,KXT,IX,JX,NX) &
    +
    486  !$OMP PRIVATE(CM,SM,CX,SX,UROT,VROT) SCHEDULE(STATIC)
    +
    487  DO nk=1,no*km
    +
    488  k=(nk-1)/no+1
    +
    489  n=nk-no*(k-1)
    +
    490  uo(n,k)=0
    +
    491  vo(n,k)=0
    +
    492  lo(n,k)=.false.
    +
    493  IF(nxy(n).GT.0) THEN
    +
    494  IF(ibi(k).EQ.0.OR.li(nxy(n),k)) THEN
    +
    495  urot=cxy(n)*ui(nxy(n),k)-sxy(n)*vi(nxy(n),k)
    +
    496  vrot=sxy(n)*ui(nxy(n),k)+cxy(n)*vi(nxy(n),k)
    +
    497  uo(n,k)=crot(n)*urot-srot(n)*vrot
    +
    498  vo(n,k)=srot(n)*urot+crot(n)*vrot
    +
    499  lo(n,k)=.true.
    +
    500  ! SPIRAL AROUND UNTIL VALID DATA IS FOUND.
    +
    501  ELSEIF(mspiral.GT.1) THEN
    +
    502  i1=nint(xpts(n))
    +
    503  j1=nint(ypts(n))
    +
    504  ixs=int(sign(1.,xpts(n)-i1))
    +
    505  jxs=int(sign(1.,ypts(n)-j1))
    +
    506  DO mx=2,mspiral**2
    +
    507  kxs=int(sqrt(4*mx-2.5))
    +
    508  kxt=mx-(kxs**2/4+1)
    +
    509  SELECT CASE(mod(kxs,4))
    +
    510  CASE(1)
    +
    511  ix=i1-ixs*(kxs/4-kxt)
    +
    512  jx=j1-jxs*kxs/4
    +
    513  CASE(2)
    +
    514  ix=i1+ixs*(1+kxs/4)
    +
    515  jx=j1-jxs*(kxs/4-kxt)
    +
    516  CASE(3)
    +
    517  ix=i1+ixs*(1+kxs/4-kxt)
    +
    518  jx=j1+jxs*(1+kxs/4)
    +
    519  CASE DEFAULT
    +
    520  ix=i1-ixs*kxs/4
    +
    521  jx=j1+jxs*(kxs/4-kxt)
    +
    522  END SELECT
    +
    523  nx = grid_in%field_pos(ix, jx)
    +
    524  IF(nx.GT.0) THEN
    +
    525  IF(li(nx,k)) THEN
    +
    526  CALL movect(rlai(nx),rloi(nx),rlat(n),rlon(n),cm,sm)
    +
    527  cx=cm*croi(nx)+sm*sroi(nx)
    +
    528  sx=sm*croi(nx)-cm*sroi(nx)
    +
    529  urot=cx*ui(nx,k)-sx*vi(nx,k)
    +
    530  vrot=sx*ui(nx,k)+cx*vi(nx,k)
    +
    531  uo(n,k)=crot(n)*urot-srot(n)*vrot
    +
    532  vo(n,k)=srot(n)*urot+crot(n)*vrot
    +
    533  lo(n,k)=.true.
    +
    534  EXIT
    +
    535  ENDIF
    +
    536  ENDIF
    +
    537  ENDDO
    +
    538  ENDIF
    +
    539  ENDIF
    +
    540  ENDDO
    +
    541  DO k=1,km
    +
    542  ibo(k)=ibi(k)
    +
    543  IF(.NOT.all(lo(1:no,k))) ibo(k)=1
    +
    544  ENDDO
    +
    545 
    +
    546  select type(grid_out)
    +
    547  type is(ip_equid_cylind_grid)
    +
    548  CALL polfixv(no,mo,km,rlat,rlon,ibo,lo,uo,vo)
    +
    549  end select
    +
    550 
    +
    551  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    552  ELSE
    +
    553  IF(iret.EQ.0) iret=iretx
    +
    554  IF(.not. to_station_points) no=0
    +
    555  ENDIF
    +
    556  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    557  END SUBROUTINE interpolate_neighbor_vector
    +
    558 
    +
    559 end module neighbor_interp_mod
    + + +
    subroutine movect(FLAT, FLON, TLAT, TLON, CROT, SROT)
    This subprogram provides the rotation parameters to move a vector along a great circle from one posit...
    Definition: movect.F90:26
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    Re-export the individual grids.
    Definition: ip_grids_mod.F90:7
    +
    Interpolate scalar fields (neighbor).
    +
    subroutine interpolate_neighbor_vector(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    Interpolate vector fields (neighbor).
    +
    subroutine interpolate_neighbor_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    Interpolate scalar fields (neighbor).
    +
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:7
    +
    subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:30
    +
    subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
    Make multiple pole vector values consistent,.
    Definition: polfix_mod.F90:125
    +
    +
    + + + + diff --git a/ver-5.1.0/open.png b/ver-5.1.0/open.png new file mode 100644 index 00000000..30f75c7e Binary files /dev/null and b/ver-5.1.0/open.png differ diff --git a/ver-5.1.0/polfix__mod_8F90.html b/ver-5.1.0/polfix__mod_8F90.html new file mode 100644 index 00000000..f7ee3f3d --- /dev/null +++ b/ver-5.1.0/polfix__mod_8F90.html @@ -0,0 +1,129 @@ + + + + + + + +NCEPLIBS-ip: polfix_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    polfix_mod.F90 File Reference
    +
    +
    + +

    Make multiple pole scalar values consistent. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Modules

    module  polfix_mod
     Make multiple pole scalar values consistent.
     
    + + + + + + + +

    +Functions/Subroutines

    subroutine, public polfix_mod::polfixs (NM, NX, KM, RLAT, IB, LO, GO)
     Make multiple pole scalar values consistent. More...
     
    subroutine, public polfix_mod::polfixv (NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
     Make multiple pole vector values consistent,. More...
     
    +

    Detailed Description

    +

    Make multiple pole scalar values consistent.

    +
    Author
    Kyle Gerheiser
    +
    Date
    2021-07-21
    + +

    Definition in file polfix_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/polfix__mod_8F90.js b/ver-5.1.0/polfix__mod_8F90.js new file mode 100644 index 00000000..b8ccde41 --- /dev/null +++ b/ver-5.1.0/polfix__mod_8F90.js @@ -0,0 +1,5 @@ +var polfix__mod_8F90 = +[ + [ "polfixs", "polfix__mod_8F90.html#a15df1ba2e1fcad1e9465c4aa3a2ba0d6", null ], + [ "polfixv", "polfix__mod_8F90.html#aeefc8f045777f6d962d9ec539ef6007d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/polfix__mod_8F90_source.html b/ver-5.1.0/polfix__mod_8F90_source.html new file mode 100644 index 00000000..4b71f8b6 --- /dev/null +++ b/ver-5.1.0/polfix__mod_8F90_source.html @@ -0,0 +1,288 @@ + + + + + + + +NCEPLIBS-ip: polfix_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    polfix_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    +
    7 module polfix_mod
    +
    8  implicit none
    +
    9 
    +
    10  private
    +
    11  public :: polfixs, polfixv
    +
    12 
    +
    13 contains
    +
    14 
    +
    29  SUBROUTINE polfixs(NM,NX,KM,RLAT,IB,LO,GO)
    +
    30  IMPLICIT NONE
    +
    31  !
    +
    32  INTEGER, INTENT(IN ) :: nm, nx, km
    +
    33  INTEGER, INTENT(IN ) :: ib(km)
    +
    34  !
    +
    35  LOGICAL*1, INTENT(INOUT) :: lo(nx,km)
    +
    36  !
    +
    37  REAL, INTENT(IN ) :: rlat(nm)
    +
    38  REAL, INTENT(INOUT) :: go(nx,km)
    +
    39  !
    +
    40  REAL, PARAMETER :: rlatnp=89.9995
    +
    41  REAL, PARAMETER :: rlatsp=-rlatnp
    +
    42  !
    +
    43  INTEGER :: k, n
    +
    44  !
    +
    45  REAL :: wnp, gnp, tnp, wsp, gsp, tsp
    +
    46  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    47  DO k=1,km
    +
    48  wnp=0.
    +
    49  gnp=0.
    +
    50  tnp=0.
    +
    51  wsp=0.
    +
    52  gsp=0.
    +
    53  tsp=0.
    +
    54  ! AVERAGE MULTIPLE POLE VALUES
    +
    55  !$OMP PARALLEL DO PRIVATE(N) REDUCTION(+:WNP,GNP,TNP,WSP,GSP,TSP) SCHEDULE(STATIC)
    +
    56  DO n=1,nm
    +
    57  IF(rlat(n).GE.rlatnp) THEN
    +
    58  wnp=wnp+1
    +
    59  IF(ib(k).EQ.0.OR.lo(n,k)) THEN
    +
    60  gnp=gnp+go(n,k)
    +
    61  tnp=tnp+1
    +
    62  ENDIF
    +
    63  ELSEIF(rlat(n).LE.rlatsp) THEN
    +
    64  wsp=wsp+1
    +
    65  IF(ib(k).EQ.0.OR.lo(n,k)) THEN
    +
    66  gsp=gsp+go(n,k)
    +
    67  tsp=tsp+1
    +
    68  ENDIF
    +
    69  ENDIF
    +
    70  ENDDO
    +
    71  !$OMP END PARALLEL DO
    +
    72  ! DISTRIBUTE AVERAGE VALUES BACK TO MULTIPLE POLES
    +
    73  IF(wnp.GT.1) THEN
    +
    74  IF(tnp.GE.wnp/2) THEN
    +
    75  gnp=gnp/tnp
    +
    76  ELSE
    +
    77  gnp=0.
    +
    78  ENDIF
    +
    79  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    80  DO n=1,nm
    +
    81  IF(rlat(n).GE.rlatnp) THEN
    +
    82  IF(ib(k).NE.0) lo(n,k)=tnp.GE.wnp/2
    +
    83  go(n,k)=gnp
    +
    84  ENDIF
    +
    85  ENDDO
    +
    86  !$OMP END PARALLEL DO
    +
    87  ENDIF
    +
    88  IF(wsp.GT.1) THEN
    +
    89  IF(tsp.GE.wsp/2) THEN
    +
    90  gsp=gsp/tsp
    +
    91  ELSE
    +
    92  gsp=0.
    +
    93  ENDIF
    +
    94  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    95  DO n=1,nm
    +
    96  IF(rlat(n).LE.rlatsp) THEN
    +
    97  IF(ib(k).NE.0) lo(n,k)=tsp.GE.wsp/2
    +
    98  go(n,k)=gsp
    +
    99  ENDIF
    +
    100  ENDDO
    +
    101  !$OMP END PARALLEL DO
    +
    102  ENDIF
    +
    103  ENDDO
    +
    104  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    105  END SUBROUTINE polfixs
    +
    106 
    +
    124  SUBROUTINE polfixv(NM,NX,KM,RLAT,RLON,IB,LO,UO,VO)
    +
    125  IMPLICIT NONE
    +
    126  !
    +
    127  INTEGER, INTENT(IN ) :: ib(km), nm, nx, km
    +
    128  !
    +
    129  LOGICAL*1, INTENT(INOUT) :: lo(nx,km)
    +
    130  !
    +
    131  REAL, INTENT(IN ) :: rlat(nm), rlon(nm)
    +
    132  REAL, INTENT(INOUT) :: uo(nx,km), vo(nx,km)
    +
    133  !
    +
    134  REAL, PARAMETER :: rlatnp=89.9995
    +
    135  REAL, PARAMETER :: rlatsp=-rlatnp
    +
    136  REAL, PARAMETER :: pi=3.14159265358979
    +
    137  REAL, PARAMETER :: dpr=180./pi
    +
    138  !
    +
    139  INTEGER :: k, n
    +
    140  !
    +
    141  REAL :: clon(nm),slon(nm)
    +
    142  REAL :: tnp, unp, vnp, wnp
    +
    143  REAL :: tsp, usp, vsp, wsp
    +
    144  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    145  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    146  DO n=1,nm
    +
    147  clon(n)=cos(rlon(n)/dpr)
    +
    148  slon(n)=sin(rlon(n)/dpr)
    +
    149  ENDDO
    +
    150  !$OMP END PARALLEL DO
    +
    151  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    152  DO k=1,km
    +
    153  wnp=0.
    +
    154  unp=0.
    +
    155  vnp=0.
    +
    156  tnp=0.
    +
    157  wsp=0.
    +
    158  usp=0.
    +
    159  vsp=0.
    +
    160  tsp=0.
    +
    161  ! AVERAGE MULTIPLE POLE VALUES
    +
    162  !$OMP PARALLEL DO PRIVATE(N) REDUCTION(+:WNP,UNP,VNP,TNP,WSP,USP,VSP,TSP) SCHEDULE(STATIC)
    +
    163  DO n=1,nm
    +
    164  IF(rlat(n).GE.rlatnp) THEN
    +
    165  wnp=wnp+1
    +
    166  IF(ib(k).EQ.0.OR.lo(n,k)) THEN
    +
    167  unp=unp+(clon(n)*uo(n,k)-slon(n)*vo(n,k))
    +
    168  vnp=vnp+(slon(n)*uo(n,k)+clon(n)*vo(n,k))
    +
    169  tnp=tnp+1
    +
    170  ENDIF
    +
    171  ELSEIF(rlat(n).LE.rlatsp) THEN
    +
    172  wsp=wsp+1
    +
    173  IF(ib(k).EQ.0.OR.lo(n,k)) THEN
    +
    174  usp=usp+(clon(n)*uo(n,k)+slon(n)*vo(n,k))
    +
    175  vsp=vsp+(-slon(n)*uo(n,k)+clon(n)*vo(n,k))
    +
    176  tsp=tsp+1
    +
    177  ENDIF
    +
    178  ENDIF
    +
    179  ENDDO
    +
    180  !$OMP END PARALLEL DO
    +
    181  ! DISTRIBUTE AVERAGE VALUES BACK TO MULTIPLE POLES
    +
    182  IF(wnp.GT.1) THEN
    +
    183  IF(tnp.GE.wnp/2) THEN
    +
    184  unp=unp/tnp
    +
    185  vnp=vnp/tnp
    +
    186  ELSE
    +
    187  unp=0.
    +
    188  vnp=0.
    +
    189  ENDIF
    +
    190  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    191  DO n=1,nm
    +
    192  IF(rlat(n).GE.rlatnp) THEN
    +
    193  IF(ib(k).NE.0) lo(n,k)=tnp.GE.wnp/2
    +
    194  uo(n,k)=clon(n)*unp+slon(n)*vnp
    +
    195  vo(n,k)=-slon(n)*unp+clon(n)*vnp
    +
    196  ENDIF
    +
    197  ENDDO
    +
    198  !$OMP END PARALLEL DO
    +
    199  ENDIF
    +
    200  IF(wsp.GT.1) THEN
    +
    201  IF(tsp.GE.wsp/2) THEN
    +
    202  usp=usp/wsp
    +
    203  vsp=vsp/wsp
    +
    204  ELSE
    +
    205  usp=0.
    +
    206  vsp=0.
    +
    207  ENDIF
    +
    208  !$OMP PARALLEL DO PRIVATE(N) SCHEDULE(STATIC)
    +
    209  DO n=1,nm
    +
    210  IF(rlat(n).LE.rlatsp) THEN
    +
    211  IF(ib(k).NE.0) lo(n,k)=tsp.GE.wsp/2
    +
    212  uo(n,k)=clon(n)*usp-slon(n)*vsp
    +
    213  vo(n,k)=slon(n)*usp+clon(n)*vsp
    +
    214  ENDIF
    +
    215  ENDDO
    +
    216  !$OMP END PARALLEL DO
    +
    217  ENDIF
    +
    218  ENDDO
    +
    219  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    220  END SUBROUTINE polfixv
    +
    221 end module polfix_mod
    +
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:7
    +
    subroutine, public polfixs(NM, NX, KM, RLAT, IB, LO, GO)
    Make multiple pole scalar values consistent.
    Definition: polfix_mod.F90:30
    +
    subroutine, public polfixv(NM, NX, KM, RLAT, RLON, IB, LO, UO, VO)
    Make multiple pole vector values consistent,.
    Definition: polfix_mod.F90:125
    +
    +
    + + + + diff --git a/ver-5.1.0/resize.js b/ver-5.1.0/resize.js new file mode 100644 index 00000000..e1ad0fe3 --- /dev/null +++ b/ver-5.1.0/resize.js @@ -0,0 +1,140 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; + + function readCookie(cookie) + { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; + } + + function writeCookie(cookie, val, expiration) + { + if (val==undefined) return; + if (expiration == null) { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth-barWidth, null); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/search/all_0.html b/ver-5.1.0/search/all_0.html similarity index 100% rename from search/all_0.html rename to ver-5.1.0/search/all_0.html diff --git a/ver-5.1.0/search/all_0.js b/ver-5.1.0/search/all_0.js new file mode 100644 index 00000000..bba3ab42 --- /dev/null +++ b/ver-5.1.0/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['an_0',['an',['../namespaceip__lambert__conf__grid__mod.html#a82b75fe2d8495aab75b225c6309e61c8',1,'ip_lambert_conf_grid_mod']]] +]; diff --git a/search/all_1.html b/ver-5.1.0/search/all_1.html similarity index 100% rename from search/all_1.html rename to ver-5.1.0/search/all_1.html diff --git a/ver-5.1.0/search/all_1.js b/ver-5.1.0/search/all_1.js new file mode 100644 index 00000000..ce0809b3 --- /dev/null +++ b/ver-5.1.0/search/all_1.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['bicubic_5finterp_5fid_1',['bicubic_interp_id',['../namespaceip__interpolators__mod.html#adfdc7760718083d85618df85320c495e',1,'ip_interpolators_mod']]], + ['bicubic_5finterp_5fmod_2',['bicubic_interp_mod',['../namespacebicubic__interp__mod.html',1,'']]], + ['bicubic_5finterp_5fmod_2ef90_3',['bicubic_interp_mod.F90',['../bicubic__interp__mod_8F90.html',1,'']]], + ['bilinear_5finterp_5fid_4',['bilinear_interp_id',['../namespaceip__interpolators__mod.html#a753e4b6c113a9a8b226c3c834786f3e1',1,'ip_interpolators_mod']]], + ['bilinear_5finterp_5fmod_5',['bilinear_interp_mod',['../namespacebilinear__interp__mod.html',1,'']]], + ['bilinear_5finterp_5fmod_2ef90_6',['bilinear_interp_mod.F90',['../bilinear__interp__mod_8F90.html',1,'']]], + ['blat_7',['blat',['../namespaceip__gaussian__grid__mod.html#ae2697b9c4dbe4945276633d1951e79fc',1,'ip_gaussian_grid_mod']]], + ['budget_5finterp_5fid_8',['budget_interp_id',['../namespaceip__interpolators__mod.html#a7df843ca4a64e3178f448aebf7dad359',1,'ip_interpolators_mod']]], + ['budget_5finterp_5fmod_9',['budget_interp_mod',['../namespacebudget__interp__mod.html',1,'']]], + ['budget_5finterp_5fmod_2ef90_10',['budget_interp_mod.F90',['../budget__interp__mod_8F90.html',1,'']]] +]; diff --git a/search/all_10.html b/ver-5.1.0/search/all_10.html similarity index 100% rename from search/all_10.html rename to ver-5.1.0/search/all_10.html diff --git a/ver-5.1.0/search/all_10.js b/ver-5.1.0/search/all_10.js new file mode 100644 index 00000000..3c46c133 --- /dev/null +++ b/ver-5.1.0/search/all_10.js @@ -0,0 +1,42 @@ +var searchData= +[ + ['radb2_237',['radb2',['../fftpack_8F.html#ae63abe3a02989ed4fbd60b50bc0c6dda',1,'fftpack.F']]], + ['radb3_238',['radb3',['../fftpack_8F.html#a6129001ac4cdf5d5a345edc2822d8014',1,'fftpack.F']]], + ['radb4_239',['radb4',['../fftpack_8F.html#a3b5aab129020968eaf92f2e6ca0785ef',1,'fftpack.F']]], + ['radb5_240',['radb5',['../fftpack_8F.html#a2b6492f922cbee03af5b89d52356abf1',1,'fftpack.F']]], + ['radbg_241',['radbg',['../fftpack_8F.html#af5a2521b66fece6cc768206c1df0d20b',1,'fftpack.F']]], + ['radf2_242',['radf2',['../fftpack_8F.html#a70e2420dd5bee9e41eb6c15bbad5eef6',1,'fftpack.F']]], + ['radf3_243',['radf3',['../fftpack_8F.html#a51374398f8edd5701987ce483c739592',1,'fftpack.F']]], + ['radf4_244',['radf4',['../fftpack_8F.html#ae9910ca606fd0cdb03b5b3b98533f486',1,'fftpack.F']]], + ['radf5_245',['radf5',['../fftpack_8F.html#a6d852c36924b038f77a24b8e22205add',1,'fftpack.F']]], + ['radfg_246',['radfg',['../fftpack_8F.html#ad5dbca6bb6ee7c0a86a1e140627de1b2',1,'fftpack.F']]], + ['rerth_247',['rerth',['../namespaceip__lambert__conf__grid__mod.html#a9f0538d092cd7d2829a5b98247eb560d',1,'ip_lambert_conf_grid_mod::rerth()'],['../namespaceip__equid__cylind__grid__mod.html#ab5b84516fab9cee3316c07450f49746c',1,'ip_equid_cylind_grid_mod::rerth()'],['../namespaceip__gaussian__grid__mod.html#a8213e02ccf4325ad5db14f2e48990da2',1,'ip_gaussian_grid_mod::rerth()'],['../namespaceip__mercator__grid__mod.html#adaa27c5d41ee24185b6d020420ce9419',1,'ip_mercator_grid_mod::rerth()'],['../namespaceip__polar__stereo__grid__mod.html#a3315b2efb5cb9aebc0b2cb2773aa20b5',1,'ip_polar_stereo_grid_mod::rerth()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#aed7a425f4d300fe14ac1b48d76378edb',1,'ip_rot_equid_cylind_egrid_mod::rerth()'],['../namespaceip__rot__equid__cylind__grid__mod.html#ae08318392106d174ab36cf7dc05c570b',1,'ip_rot_equid_cylind_grid_mod::rerth()'],['../structip__grid__mod_1_1ip__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8',1,'ip_grid_mod::ip_grid::rerth()']]], + ['rerth_5fwgs84_248',['rerth_wgs84',['../namespaceip__constants__mod.html#ac6a501512f426673f064edbecd7a62fb',1,'ip_constants_mod']]], + ['rfftb_249',['rfftb',['../fftpack_8F.html#a79ba25d1f342858b0faa3c3e3585ec88',1,'fftpack.F']]], + ['rfftb1_250',['rfftb1',['../fftpack_8F.html#afa735c298a72dd1c13ab1c45e737c066',1,'fftpack.F']]], + ['rfftf_251',['rfftf',['../fftpack_8F.html#afbb5dc9c70ebe24759d5ffec1d3e42e2',1,'fftpack.F']]], + ['rfftf1_252',['rfftf1',['../fftpack_8F.html#acdf9efa42dc73f90af444ee0da649a09',1,'fftpack.F']]], + ['rffti_253',['rffti',['../fftpack_8F.html#a50f1237ff5990436609962c0eae406db',1,'fftpack.F']]], + ['rffti1_254',['rffti1',['../fftpack_8F.html#ae3569ef7a371390f6bf38417865ef71b',1,'fftpack.F']]], + ['rlat1_255',['rlat1',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a493e017343795e89f794bae5229eb6a7',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlat1()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#acdf76c4b3444d0d85dbf9ee09b5f35fc',1,'ip_gaussian_grid_mod::ip_gaussian_grid::rlat1()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a618bb61b83c39dd344264933e51fa932',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlat1()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a1f98e5046c7c1eda30735e5919b79cc7',1,'ip_mercator_grid_mod::ip_mercator_grid::rlat1()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a00565fd51d334324e9d68d1fc8c52640',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::rlat1()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a884837892bf520ea7950f95d8c562a08',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlat1()']]], + ['rlat2_256',['rlat2',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#acfd62fa8199f9b57b555364bca920e42',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid']]], + ['rlati_257',['rlati',['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a3826e3e6b4f3264932c890a3c9804cef',1,'ip_mercator_grid_mod::ip_mercator_grid']]], + ['rlati1_258',['rlati1',['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a7dcfaef2adc076604ad32d1ecd1f1cb4',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid']]], + ['rlati2_259',['rlati2',['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ae8b2c54b8d00685e179fec7786422f3b',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid']]], + ['rlon0_260',['rlon0',['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a65579b8557bffeedb99f384048dea14e',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlon0()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a7b111301b2fc41270869ee182512f13c',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::rlon0()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#a134acf8ab7f40ff49ce8e03daad900e6',1,'ip_rot_equid_cylind_egrid_mod::rlon0()'],['../namespaceip__rot__equid__cylind__grid__mod.html#a620a55069afd33b301240533915387df',1,'ip_rot_equid_cylind_grid_mod::rlon0()']]], + ['rlon1_261',['rlon1',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#aa927f5ecca3f2880ad88e60c8d4b8871',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlon1()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a583517b74d3c1c1b354fefe0d6871c4d',1,'ip_gaussian_grid_mod::ip_gaussian_grid::rlon1()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ab7e9e396d5eeb63c8079a901c2c8743f',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlon1()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#adb673d1f9dbc7d7ee6f87513a2eed723',1,'ip_mercator_grid_mod::ip_mercator_grid::rlon1()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a61650c9ce1a2ce44243bf491e5d93728',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::rlon1()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a3684458139a165cd719b054637a7d121',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlon1()']]], + ['rlon2_262',['rlon2',['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a3794a22c4866631c6b5bc6a8871e3e44',1,'ip_gaussian_grid_mod::ip_gaussian_grid::rlon2()'],['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a1e5b9f8ab3de743b5e392478694154ea',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlon2()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a0b9bfef606985f5e682f4ddb84c99d2c',1,'ip_mercator_grid_mod::ip_mercator_grid::rlon2()']]], + ['rot_5fequid_5fcylind_5fb_5fgrid_5fid_5fgrib1_263',['rot_equid_cylind_b_grid_id_grib1',['../namespaceip__grid__mod.html#adb7d7d18410aaae52d7eee2e97f04b14',1,'ip_grid_mod']]], + ['rot_5fequid_5fcylind_5fb_5fgrid_5fid_5fgrib2_264',['rot_equid_cylind_b_grid_id_grib2',['../namespaceip__grid__mod.html#adbda63b51409aaed34a707b222da8c43',1,'ip_grid_mod']]], + ['rot_5fequid_5fcylind_5fe_5fgrid_5fid_5fgrib1_265',['rot_equid_cylind_e_grid_id_grib1',['../namespaceip__grid__mod.html#a4e11ce780c3d165c282684188890af1c',1,'ip_grid_mod']]], + ['rot_5fequid_5fcylind_5fe_5fgrid_5fid_5fgrib2_266',['rot_equid_cylind_e_grid_id_grib2',['../namespaceip__grid__mod.html#a248f834201bea9295bbe6a99abd038f8',1,'ip_grid_mod']]], + ['rot_5fequid_5fcylind_5fegrid_5ferror_267',['rot_equid_cylind_egrid_error',['../namespaceip__rot__equid__cylind__egrid__mod.html#a69d4e473a1a276b855d37518dc6f1d48',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5fegrid_5fgrid_5farea_268',['rot_equid_cylind_egrid_grid_area',['../namespaceip__rot__equid__cylind__egrid__mod.html#a4e6c3a758f9a6474d3e499fabeac0640',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5fegrid_5fmap_5fjacob_269',['rot_equid_cylind_egrid_map_jacob',['../namespaceip__rot__equid__cylind__egrid__mod.html#a45b87f77888d428ca0f551edae8da94e',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5fegrid_5fvect_5frot_270',['rot_equid_cylind_egrid_vect_rot',['../namespaceip__rot__equid__cylind__egrid__mod.html#a9ac1f76f515981c464e8391d8c941888',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5ferror_271',['rot_equid_cylind_error',['../namespaceip__rot__equid__cylind__grid__mod.html#a1cc09c83f9a3815d8c5f8ed2f239f53f',1,'ip_rot_equid_cylind_grid_mod']]], + ['rot_5fequid_5fcylind_5fgrid_5farea_272',['rot_equid_cylind_grid_area',['../namespaceip__rot__equid__cylind__grid__mod.html#ad8f1133eb6809705c15337134eafe9fd',1,'ip_rot_equid_cylind_grid_mod']]], + ['rot_5fequid_5fcylind_5fgrid_5fid_5fgrib2_273',['rot_equid_cylind_grid_id_grib2',['../namespaceip__grid__mod.html#adc7c650c524eb6425e77b2e0eac0979a',1,'ip_grid_mod']]], + ['rot_5fequid_5fcylind_5fmap_5fjacob_274',['rot_equid_cylind_map_jacob',['../namespaceip__rot__equid__cylind__grid__mod.html#a985f1dc1a20444cef706d4bb20e0841b',1,'ip_rot_equid_cylind_grid_mod']]], + ['rot_5fequid_5fcylind_5fvect_5frot_275',['rot_equid_cylind_vect_rot',['../namespaceip__rot__equid__cylind__grid__mod.html#a3de472bfc18740a7d985f560f3541c10',1,'ip_rot_equid_cylind_grid_mod']]] +]; diff --git a/search/all_11.html b/ver-5.1.0/search/all_11.html similarity index 100% rename from search/all_11.html rename to ver-5.1.0/search/all_11.html diff --git a/ver-5.1.0/search/all_11.js b/ver-5.1.0/search/all_11.js new file mode 100644 index 00000000..c2b858ec --- /dev/null +++ b/ver-5.1.0/search/all_11.js @@ -0,0 +1,117 @@ +var searchData= +[ + ['sbd_276',['sbd',['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a246ec0afc422f6cfcc3758ff62c6017f',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid']]], + ['scfft_277',['scfft',['../fftpack_8F.html#a369071ea2d380c9d91ba36d1bf375e33',1,'fftpack.F']]], + ['scrft_278',['scrft',['../fftpack_8F.html#ac69cbd64be972c20a4424f5327fb4b36',1,'fftpack.F']]], + ['slat_279',['slat',['../namespaceip__rot__equid__cylind__egrid__mod.html#ae1f8503816477fb685fbadc7a9e50f0b',1,'ip_rot_equid_cylind_egrid_mod']]], + ['slat0_280',['slat0',['../namespaceip__rot__equid__cylind__grid__mod.html#a64831f92d5306513987a98e97a32aea1',1,'ip_rot_equid_cylind_grid_mod::slat0()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#a72199c827ab3218b7f2aba35ad30b94d',1,'ip_rot_equid_cylind_egrid_mod::slat0()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a8a02c6fc1ad38174e15679e69b5cbfdc',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::slat0()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#aca4b0ae69f756ef4854369bf88423d66',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::slat0()']]], + ['slatr_281',['slatr',['../namespaceip__rot__equid__cylind__egrid__mod.html#a4ccccb64d3e7236d8cac19c279aab900',1,'ip_rot_equid_cylind_egrid_mod::slatr()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#aae4f801c95b7b61e2e6b1dd824d3688b',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::slatr()']]], + ['spanaly_282',['spanaly',['../spanaly_8f.html#a5cc846d796d393d7499cde0f3d1d6e6a',1,'spanaly.f']]], + ['spanaly_2ef_283',['spanaly.f',['../spanaly_8f.html',1,'']]], + ['spdz2uv_284',['spdz2uv',['../spdz2uv_8f.html#ae3a4a74c49f78a25425b610743dc0692',1,'spdz2uv.f']]], + ['spdz2uv_2ef_285',['spdz2uv.f',['../spdz2uv_8f.html',1,'']]], + ['spectral_5finterp_5fid_286',['spectral_interp_id',['../namespaceip__interpolators__mod.html#a83ba2963a0b686c6ae67b53f9c385851',1,'ip_interpolators_mod']]], + ['spectral_5finterp_5fmod_287',['spectral_interp_mod',['../namespacespectral__interp__mod.html',1,'']]], + ['spectral_5finterp_5fmod_2ef90_288',['spectral_interp_mod.F90',['../spectral__interp__mod_8F90.html',1,'']]], + ['speps_289',['speps',['../speps_8f.html#a0ab523ec5e1393ffca970897e63a9131',1,'speps.f']]], + ['speps_2ef_290',['speps.f',['../speps_8f.html',1,'']]], + ['spfft_291',['spfft',['../spfft_8f.html#a1041af8ac4f6a2407b5b7a799a13fb5d',1,'spfft.f']]], + ['spfft_2ef_292',['spfft.f',['../spfft_8f.html',1,'']]], + ['spfft1_293',['spfft1',['../spfft1_8f.html#ac63643472eda83948c0b249b611346d6',1,'spfft1.f']]], + ['spfft1_2ef_294',['spfft1.f',['../spfft1_8f.html',1,'']]], + ['spffte_295',['spffte',['../spffte_8f.html#af06489254bd3e99030b39744fce32233',1,'spffte.f']]], + ['spffte_2ef_296',['spffte.f',['../spffte_8f.html',1,'']]], + ['spfftpt_297',['spfftpt',['../spfftpt_8f.html#ad16e674ce87bd762a714853967f81356',1,'spfftpt.f']]], + ['spfftpt_2ef_298',['spfftpt.f',['../spfftpt_8f.html',1,'']]], + ['spgradq_299',['spgradq',['../spgradq_8f.html#a0bb358cf2a405ce9f17c6e5dfde65849',1,'spgradq.f']]], + ['spgradq_2ef_300',['spgradq.f',['../spgradq_8f.html',1,'']]], + ['spgradx_301',['spgradx',['../spgradx_8f.html#a749bc07e763e9cd44490fff2284d00b4',1,'spgradx.f']]], + ['spgradx_2ef_302',['spgradx.f',['../spgradx_8f.html',1,'']]], + ['spgrady_303',['spgrady',['../spgrady_8f.html#a1b3e38e56560de7d7dcf19ea3e931cf1',1,'spgrady.f']]], + ['spgrady_2ef_304',['spgrady.f',['../spgrady_8f.html',1,'']]], + ['splaplac_305',['splaplac',['../splaplac_8f.html#a64338955857a3cf58283146940e7ae42',1,'splaplac.f']]], + ['splaplac_2ef_306',['splaplac.f',['../splaplac_8f.html',1,'']]], + ['splat_307',['splat',['../splat_8F.html#aa6db21451bb67635e7e4426546140e11',1,'splat.F']]], + ['splat_2ef_308',['splat.F',['../splat_8F.html',1,'']]], + ['splegend_309',['splegend',['../splegend_8f.html#a9c68adc80e97c43ac983b955dd6cabac',1,'splegend.f']]], + ['splegend_2ef_310',['splegend.f',['../splegend_8f.html',1,'']]], + ['sppad_311',['sppad',['../sppad_8f.html#a4338b3ccd7844251bbdabf3da1d6476e',1,'sppad.f']]], + ['sppad_2ef_312',['sppad.f',['../sppad_8f.html',1,'']]], + ['spsynth_313',['spsynth',['../spsynth_8f.html#aa6a8113a459918728c876673520126bf',1,'spsynth.f']]], + ['spsynth_2ef_314',['spsynth.f',['../spsynth_8f.html',1,'']]], + ['sptez_315',['sptez',['../sptez_8f.html#a418a7d182834b2e2dafae2fe881ba9fc',1,'sptez.f']]], + ['sptez_2ef_316',['sptez.f',['../sptez_8f.html',1,'']]], + ['sptezd_317',['sptezd',['../sptezd_8f.html#a6c30b52dcb4da9e403eeeb307b9516d7',1,'sptezd.f']]], + ['sptezd_2ef_318',['sptezd.f',['../sptezd_8f.html',1,'']]], + ['sptezm_319',['sptezm',['../sptezm_8f.html#a1430a0df2cba7eefaf67c939684be2d1',1,'sptezm.f']]], + ['sptezm_2ef_320',['sptezm.f',['../sptezm_8f.html',1,'']]], + ['sptezmd_321',['sptezmd',['../sptezmd_8f.html#a2b9ead06893e51604bfb18928ddee996',1,'sptezmd.f']]], + ['sptezmd_2ef_322',['sptezmd.f',['../sptezmd_8f.html',1,'']]], + ['sptezmv_323',['sptezmv',['../sptezmv_8f.html#a22dc4fc10c5225ec8d3c12ed3cb4786e',1,'sptezmv.f']]], + ['sptezmv_2ef_324',['sptezmv.f',['../sptezmv_8f.html',1,'']]], + ['sptezv_325',['sptezv',['../sptezv_8f.html#a83e49d961c40a2621c3f2afe70846226',1,'sptezv.f']]], + ['sptezv_2ef_326',['sptezv.f',['../sptezv_8f.html',1,'']]], + ['sptgpm_327',['sptgpm',['../sptgpm_8f.html#a6cffaeaa602eaae5c03166f48065158d',1,'sptgpm.f']]], + ['sptgpm_2ef_328',['sptgpm.f',['../sptgpm_8f.html',1,'']]], + ['sptgpmd_329',['sptgpmd',['../sptgpmd_8f.html#af71718c75a2b24b74fa7e1e4318d0539',1,'sptgpmd.f']]], + ['sptgpmd_2ef_330',['sptgpmd.f',['../sptgpmd_8f.html',1,'']]], + ['sptgpmv_331',['sptgpmv',['../sptgpmv_8f.html#a15de3accfd448d116324872c8fb1bb17',1,'sptgpmv.f']]], + ['sptgpmv_2ef_332',['sptgpmv.f',['../sptgpmv_8f.html',1,'']]], + ['sptgps_333',['sptgps',['../sptgps_8f.html#af06a2dccfa311014fc9f671b14f247b2',1,'sptgps.f']]], + ['sptgps_2ef_334',['sptgps.f',['../sptgps_8f.html',1,'']]], + ['sptgpsd_335',['sptgpsd',['../sptgpsd_8f.html#ad6d10c3360c47558a8116b2f5666ed30',1,'sptgpsd.f']]], + ['sptgpsd_2ef_336',['sptgpsd.f',['../sptgpsd_8f.html',1,'']]], + ['sptgpsv_337',['sptgpsv',['../sptgpsv_8f.html#af2bf2335047ec277730564dbfa859079',1,'sptgpsv.f']]], + ['sptgpsv_2ef_338',['sptgpsv.f',['../sptgpsv_8f.html',1,'']]], + ['sptgpt_339',['sptgpt',['../sptgpt_8f.html#a1b8d333bcc601e5b7e8d3dd1369f54b1',1,'sptgpt.f']]], + ['sptgpt_2ef_340',['sptgpt.f',['../sptgpt_8f.html',1,'']]], + ['sptgptd_341',['sptgptd',['../sptgptd_8f.html#a64d1fe761662182ca3495531152d1cd3',1,'sptgptd.f']]], + ['sptgptd_2ef_342',['sptgptd.f',['../sptgptd_8f.html',1,'']]], + ['sptgptsd_343',['sptgptsd',['../sptgptsd_8f.html#ad3ab15089a57b493cc74443ea3b3d88f',1,'sptgptsd.f']]], + ['sptgptsd_2ef_344',['sptgptsd.f',['../sptgptsd_8f.html',1,'']]], + ['sptgptv_345',['sptgptv',['../sptgptv_8f.html#a9af8a22564d132a887a5237f30710f13',1,'sptgptv.f']]], + ['sptgptv_2ef_346',['sptgptv.f',['../sptgptv_8f.html',1,'']]], + ['sptgptvd_347',['sptgptvd',['../sptgptvd_8f.html#ae03c6c76cad685ae1ed32d74bcba6753',1,'sptgptvd.f']]], + ['sptgptvd_2ef_348',['sptgptvd.f',['../sptgptvd_8f.html',1,'']]], + ['sptran_349',['sptran',['../sptran_8f.html#af7610e42f0dcd199b8cf80f851dcfed0',1,'sptran.f']]], + ['sptran_2ef_350',['sptran.f',['../sptran_8f.html',1,'']]], + ['sptrand_351',['sptrand',['../sptrand_8f.html#ae810abad32bcbdfb8345a30e50bcc1ef',1,'sptrand.f']]], + ['sptrand_2ef_352',['sptrand.f',['../sptrand_8f.html',1,'']]], + ['sptranf_353',['sptranf',['../sptranf_8f.html#acf086b5141203e48bdb7250441a16c8c',1,'sptranf.f']]], + ['sptranf_2ef_354',['sptranf.f',['../sptranf_8f.html',1,'']]], + ['sptranf0_355',['sptranf0',['../sptranf0_8f.html#aaf9f9002ccd7074dc04dbc40a5aad9f0',1,'sptranf0.f']]], + ['sptranf0_2ef_356',['sptranf0.f',['../sptranf0_8f.html',1,'']]], + ['sptranf1_357',['sptranf1',['../sptranf1_8f.html#ad7cec2fd6729ca84b1fac3436f9730e6',1,'sptranf1.f']]], + ['sptranf1_2ef_358',['sptranf1.f',['../sptranf1_8f.html',1,'']]], + ['sptranfv_359',['sptranfv',['../sptranfv_8f.html#a1a7aabbd358d4fe984dac6813c98b106',1,'sptranfv.f']]], + ['sptranfv_2ef_360',['sptranfv.f',['../sptranfv_8f.html',1,'']]], + ['sptranv_361',['sptranv',['../sptranv_8f.html#a7d6aaa3ed70df1dfaf8dd4443b7190c1',1,'sptranv.f']]], + ['sptranv_2ef_362',['sptranv.f',['../sptranv_8f.html',1,'']]], + ['sptrun_363',['sptrun',['../sptrun_8f.html#a1f04574fbd5018f73b68bd2cd0ffc473',1,'sptrun.f']]], + ['sptrun_2ef_364',['sptrun.f',['../sptrun_8f.html',1,'']]], + ['sptrund_365',['sptrund',['../sptrund_8f.html#a2636d99e658dfabd4b85f15a76fca480',1,'sptrund.f']]], + ['sptrund_2ef_366',['sptrund.f',['../sptrund_8f.html',1,'']]], + ['sptrung_367',['sptrung',['../sptrung_8f.html#af41b64dad4789617a315515ef885912c',1,'sptrung.f']]], + ['sptrung_2ef_368',['sptrung.f',['../sptrung_8f.html',1,'']]], + ['sptrungv_369',['sptrungv',['../sptrungv_8f.html#ab7bbe6ecde57394b15e5d4925cb07164',1,'sptrungv.f']]], + ['sptrungv_2ef_370',['sptrungv.f',['../sptrungv_8f.html',1,'']]], + ['sptrunl_371',['sptrunl',['../sptrunl_8f.html#a52c4250d24e52304e49aa1d82a93bdb8',1,'sptrunl.f']]], + ['sptrunl_2ef_372',['sptrunl.f',['../sptrunl_8f.html',1,'']]], + ['sptrunm_373',['sptrunm',['../sptrunm_8f.html#a2a4e579890d3cf7f6a26091f544b6cb6',1,'sptrunm.f']]], + ['sptrunm_2ef_374',['sptrunm.f',['../sptrunm_8f.html',1,'']]], + ['sptrunmv_375',['sptrunmv',['../sptrunmv_8f.html#a8b405d0621112d6852a3bb99602ac2fd',1,'sptrunmv.f']]], + ['sptrunmv_2ef_376',['sptrunmv.f',['../sptrunmv_8f.html',1,'']]], + ['sptruns_377',['sptruns',['../sptruns_8f.html#a34f156e2049105d012e445f8aa215444',1,'sptruns.f']]], + ['sptruns_2ef_378',['sptruns.f',['../sptruns_8f.html',1,'']]], + ['sptrunsv_379',['sptrunsv',['../sptrunsv_8f.html#a1373b651b9dea586e33d3033aae68656',1,'sptrunsv.f']]], + ['sptrunsv_2ef_380',['sptrunsv.f',['../sptrunsv_8f.html',1,'']]], + ['sptrunv_381',['sptrunv',['../sptrunv_8f.html#a9aa39c13dd38585b3afb30cb2486817f',1,'sptrunv.f']]], + ['sptrunv_2ef_382',['sptrunv.f',['../sptrunv_8f.html',1,'']]], + ['spuv2dz_383',['spuv2dz',['../spuv2dz_8f.html#a27edc2d10e0a76a45e4aaae58bf018b9',1,'spuv2dz.f']]], + ['spuv2dz_2ef_384',['spuv2dz.f',['../spuv2dz_8f.html',1,'']]], + ['spvar_385',['spvar',['../spvar_8f.html#a840f95e09b8d930b38638a391933bee4',1,'spvar.f']]], + ['spvar_2ef_386',['spvar.f',['../spvar_8f.html',1,'']]], + ['spwget_387',['spwget',['../spwget_8f.html#a9b6ce78350f7adf2fed874a18312c7a6',1,'spwget.f']]], + ['spwget_2ef_388',['spwget.f',['../spwget_8f.html',1,'']]], + ['srcft_389',['srcft',['../fftpack_8F.html#acf248c4f27a9fa81cffdfded50eee742',1,'fftpack.F']]] +]; diff --git a/search/all_12.html b/ver-5.1.0/search/all_12.html similarity index 100% rename from search/all_12.html rename to ver-5.1.0/search/all_12.html diff --git a/ver-5.1.0/search/all_12.js b/ver-5.1.0/search/all_12.js new file mode 100644 index 00000000..9f80c09a --- /dev/null +++ b/ver-5.1.0/search/all_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unuse_5fncep_5fpost_5farakawa_390',['unuse_ncep_post_arakawa',['../namespaceip__grid__mod.html#ac8e716adbe5c1156bfd20f936a4205de',1,'ip_grid_mod']]], + ['use_5fncep_5fpost_5farakawa_391',['use_ncep_post_arakawa',['../namespaceip__grid__mod.html#a1d570947cf124c28ba67305494bff450',1,'ip_grid_mod']]] +]; diff --git a/search/all_13.html b/ver-5.1.0/search/all_13.html similarity index 100% rename from search/all_13.html rename to ver-5.1.0/search/all_13.html diff --git a/ver-5.1.0/search/all_13.js b/ver-5.1.0/search/all_13.js new file mode 100644 index 00000000..5e1cafb9 --- /dev/null +++ b/ver-5.1.0/search/all_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['wbd_392',['wbd',['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a33ae1763c4f1267091bee36a9c92e46a',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid']]] +]; diff --git a/search/all_14.html b/ver-5.1.0/search/all_14.html similarity index 100% rename from search/all_14.html rename to ver-5.1.0/search/all_14.html diff --git a/ver-5.1.0/search/all_14.js b/ver-5.1.0/search/all_14.js new file mode 100644 index 00000000..352c9ffe --- /dev/null +++ b/ver-5.1.0/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ylat_5frow_393',['ylat_row',['../namespaceip__gaussian__grid__mod.html#a3591b5701f3d03931c6a9d5278e161dc',1,'ip_gaussian_grid_mod']]] +]; diff --git a/search/all_2.html b/ver-5.1.0/search/all_2.html similarity index 100% rename from search/all_2.html rename to ver-5.1.0/search/all_2.html diff --git a/ver-5.1.0/search/all_2.js b/ver-5.1.0/search/all_2.js new file mode 100644 index 00000000..d92ac7fb --- /dev/null +++ b/ver-5.1.0/search/all_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['clat_11',['clat',['../namespaceip__rot__equid__cylind__egrid__mod.html#aac1018f3ca1b7ad4b5d33f245678d416',1,'ip_rot_equid_cylind_egrid_mod']]], + ['clat0_12',['clat0',['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a7a1b97e05b77bb7563165bf3f3e97dda',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::clat0()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a49835868e8c8b96e243a5992daee6ea5',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::clat0()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#a83649d02b55d6252d59514aec4eb3142',1,'ip_rot_equid_cylind_egrid_mod::clat0()'],['../namespaceip__rot__equid__cylind__grid__mod.html#afeb699d0eaa8d157277e93fe8e8c5852',1,'ip_rot_equid_cylind_grid_mod::clat0()']]], + ['clatr_13',['clatr',['../namespaceip__rot__equid__cylind__egrid__mod.html#aad4e673a94976b2b5a9bfad9de9e6e30',1,'ip_rot_equid_cylind_egrid_mod']]], + ['clon_14',['clon',['../namespaceip__rot__equid__cylind__egrid__mod.html#a557d49c609fc8c5c564a3a5f10174eec',1,'ip_rot_equid_cylind_egrid_mod']]], + ['csfft_15',['csfft',['../fftpack_8F.html#ad261879c88a7f040e43f1549e65f36e5',1,'fftpack.F']]] +]; diff --git a/search/all_3.html b/ver-5.1.0/search/all_3.html similarity index 100% rename from search/all_3.html rename to ver-5.1.0/search/all_3.html diff --git a/ver-5.1.0/search/all_3.js b/ver-5.1.0/search/all_3.js new file mode 100644 index 00000000..a345b7ae --- /dev/null +++ b/ver-5.1.0/search/all_3.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['dcrft_16',['dcrft',['../fftpack_8F.html#a713ef445886ad8dc8b16692c6075d225',1,'fftpack.F']]], + ['de2_17',['de2',['../namespaceip__polar__stereo__grid__mod.html#a605d287e34e60f553521a5de2da22962',1,'ip_polar_stereo_grid_mod']]], + ['descriptor_18',['descriptor',['../structip__grid__mod_1_1ip__grid.html#a4a2a0dab09f05931d12615b0ac74bc51',1,'ip_grid_mod::ip_grid']]], + ['dlat_19',['dlat',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a6bd00527219fc596b2c2a7ba47fec719',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::dlat()'],['../namespaceip__equid__cylind__grid__mod.html#a30cb127d26d74d2de6ab3cbfd63183fb',1,'ip_equid_cylind_grid_mod::dlat()']]], + ['dlats_20',['dlats',['../namespaceip__rot__equid__cylind__grid__mod.html#ab43075e39d4e2dde4110e608931a392d',1,'ip_rot_equid_cylind_grid_mod::dlats()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#a0b2faca2325b413e1f3207778d4c4c68',1,'ip_rot_equid_cylind_egrid_mod::dlats()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a00d41c3d43370d3f02bb92d59f66866c',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::dlats()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#affd9cfc7a0e1d8e74735eac35b2e03c6',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::dlats()']]], + ['dlon_21',['dlon',['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a455057778c7f2ad677956bdef2d754ee',1,'ip_mercator_grid_mod::ip_mercator_grid::dlon()'],['../namespaceip__mercator__grid__mod.html#a14e1cb3f8c05d2de49d2aa8dc69d104f',1,'ip_mercator_grid_mod::dlon()'],['../namespaceip__gaussian__grid__mod.html#a8852b7cfb7b99318140c66b0c551dc6d',1,'ip_gaussian_grid_mod::dlon()'],['../namespaceip__equid__cylind__grid__mod.html#a46335f95ac343f7751bd519aec0a160f',1,'ip_equid_cylind_grid_mod::dlon()'],['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ae675dc8c49e64700d941eadc31e8f4e7',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::dlon()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a35c454d320c59a6c71c4aebb881abcb8',1,'ip_gaussian_grid_mod::ip_gaussian_grid::dlon()']]], + ['dlons_22',['dlons',['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a76222910f6c9fa0c5374bed672904c85',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::dlons()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a23a172ccd2e026746925e2029c0a9206',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::dlons()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#af04f8a1044f4d9a7e0d13d38887adcbc',1,'ip_rot_equid_cylind_egrid_mod::dlons()'],['../namespaceip__rot__equid__cylind__grid__mod.html#aa0cf7bb2dd8be1239ae38c7220d29702',1,'ip_rot_equid_cylind_grid_mod::dlons()']]], + ['dphi_23',['dphi',['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a39168528a2c207b2e2c5373487d705c5',1,'ip_mercator_grid_mod::ip_mercator_grid::dphi()'],['../namespaceip__mercator__grid__mod.html#a156e638e2d1b93e388d674462ac3f732',1,'ip_mercator_grid_mod::dphi()']]], + ['dpr_24',['dpr',['../namespaceip__constants__mod.html#ae6b74489db06341b78c3088b3f207011',1,'ip_constants_mod']]], + ['drcft_25',['drcft',['../fftpack_8F.html#a55b05419c0d3bb0595b34c8cacf93be8',1,'fftpack.F']]], + ['dxs_26',['dxs',['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ac009bce0c0c14b3e0970da6c032a11b1',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::dxs()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#aa3288a7fbf2db34946116c771e5bc7dc',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::dxs()'],['../namespaceip__lambert__conf__grid__mod.html#a196e94b5a2add34133c87f845394fa81',1,'ip_lambert_conf_grid_mod::dxs()'],['../namespaceip__polar__stereo__grid__mod.html#acf60181f89954e2ff31b08bb1b345354',1,'ip_polar_stereo_grid_mod::dxs()']]], + ['dys_27',['dys',['../namespaceip__polar__stereo__grid__mod.html#aea7950530d06d9c59ff61bf706df0a0f',1,'ip_polar_stereo_grid_mod::dys()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a95e155383895ad3f56a3876877b5896b',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::dys()'],['../namespaceip__lambert__conf__grid__mod.html#aad8b04b77b0920dbf9ed3827e2e8cfd7',1,'ip_lambert_conf_grid_mod::dys()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a46fa89562e4dd23c765029d2d6c087bc',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::dys()']]] +]; diff --git a/search/all_4.html b/ver-5.1.0/search/all_4.html similarity index 100% rename from search/all_4.html rename to ver-5.1.0/search/all_4.html diff --git a/ver-5.1.0/search/all_4.js b/ver-5.1.0/search/all_4.js new file mode 100644 index 00000000..254b4c31 --- /dev/null +++ b/ver-5.1.0/search/all_4.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['e2_28',['e2',['../namespaceip__polar__stereo__grid__mod.html#abf3a34d9bb00c39dac5225798aea4d5b',1,'ip_polar_stereo_grid_mod']]], + ['e2_5fwgs84_29',['e2_wgs84',['../namespaceip__constants__mod.html#af7783a977fa10c54d85282dc6ac5f545',1,'ip_constants_mod']]], + ['earth_5fradius_30',['earth_radius',['../namespaceearth__radius__mod.html#a810f60db1a1faff0d6f59937a8207a54',1,'earth_radius_mod']]], + ['earth_5fradius_5fmod_31',['earth_radius_mod',['../namespaceearth__radius__mod.html',1,'']]], + ['earth_5fradius_5fmod_2ef90_32',['earth_radius_mod.F90',['../earth__radius__mod_8F90.html',1,'']]], + ['eccen_5fsquared_33',['eccen_squared',['../structip__grid__mod_1_1ip__grid.html#a180a5da6c470fac34b8439d4c0a32d2a',1,'ip_grid_mod::ip_grid']]], + ['elliptical_34',['elliptical',['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a1bac1023f8d8cd631760403b222a8c3f',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid']]], + ['equid_5fcylind_5fgrid_5farea_35',['equid_cylind_grid_area',['../namespaceip__equid__cylind__grid__mod.html#a5a70b82abdce76bef22cdeaa96a986c2',1,'ip_equid_cylind_grid_mod']]], + ['equid_5fcylind_5fgrid_5fid_5fgrib1_36',['equid_cylind_grid_id_grib1',['../namespaceip__grid__mod.html#ad96da95d40beceb1a1c405971e8130bb',1,'ip_grid_mod']]], + ['equid_5fcylind_5fgrid_5fid_5fgrib2_37',['equid_cylind_grid_id_grib2',['../namespaceip__grid__mod.html#a3b5ae57fe3d6d365cfd1ccdb4feb8ac6',1,'ip_grid_mod']]], + ['equid_5fcylind_5fmap_5fjacob_38',['equid_cylind_map_jacob',['../namespaceip__equid__cylind__grid__mod.html#a039501b44cd3ad4409983e193d509afd',1,'ip_equid_cylind_grid_mod']]], + ['equid_5fcylind_5fvect_5frot_39',['equid_cylind_vect_rot',['../namespaceip__equid__cylind__grid__mod.html#ade88ecea1c0bb4b4d5b0d08f8482268d',1,'ip_equid_cylind_grid_mod']]] +]; diff --git a/search/all_5.html b/ver-5.1.0/search/all_5.html similarity index 100% rename from search/all_5.html rename to ver-5.1.0/search/all_5.html diff --git a/ver-5.1.0/search/all_5.js b/ver-5.1.0/search/all_5.js new file mode 100644 index 00000000..cd3eac50 --- /dev/null +++ b/ver-5.1.0/search/all_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fftpack_2ef_40',['fftpack.F',['../fftpack_8F.html',1,'']]], + ['field_5fpos_41',['field_pos',['../structip__grid__mod_1_1ip__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179',1,'ip_grid_mod::ip_grid::field_pos()'],['../namespaceip__grid__mod.html#a63572318d74ec94c20c5ccd6ded2d442',1,'ip_grid_mod::field_pos()']]] +]; diff --git a/search/all_6.html b/ver-5.1.0/search/all_6.html similarity index 100% rename from search/all_6.html rename to ver-5.1.0/search/all_6.html diff --git a/ver-5.1.0/search/all_6.js b/ver-5.1.0/search/all_6.js new file mode 100644 index 00000000..c46a7671 --- /dev/null +++ b/ver-5.1.0/search/all_6.js @@ -0,0 +1,37 @@ +var searchData= +[ + ['gaussian_5fgrid_5farea_42',['gaussian_grid_area',['../namespaceip__gaussian__grid__mod.html#ab602a870a477c7ab77438700af4e7780',1,'ip_gaussian_grid_mod']]], + ['gaussian_5fgrid_5fid_5fgrib1_43',['gaussian_grid_id_grib1',['../namespaceip__grid__mod.html#a45e8afad72b1b8856b3e44f2dd3123b3',1,'ip_grid_mod']]], + ['gaussian_5fgrid_5fid_5fgrib2_44',['gaussian_grid_id_grib2',['../namespaceip__grid__mod.html#a36a9a73ecd50353f892341ae8a5c8316',1,'ip_grid_mod']]], + ['gaussian_5fmap_5fjacob_45',['gaussian_map_jacob',['../namespaceip__gaussian__grid__mod.html#adca7b03877c6a7048ff1716a95e0bd9d',1,'ip_gaussian_grid_mod']]], + ['gaussian_5fvect_5frot_46',['gaussian_vect_rot',['../namespaceip__gaussian__grid__mod.html#ac72eec96d0012fbe0f0ec7c520f40dad',1,'ip_gaussian_grid_mod']]], + ['gds_47',['gds',['../structip__grid__descriptor__mod_1_1grib1__descriptor.html#a08920c194e39d562fbf527939f0ac6c9',1,'ip_grid_descriptor_mod::grib1_descriptor']]], + ['gdswzd_48',['gdswzd',['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a940420aa99e0fbe51a976f9d0c343f1a',1,'ip_mercator_grid_mod::ip_mercator_grid::gdswzd()'],['../structip__station__points__grid__mod_1_1ip__station__points__grid.html#a9fff8b24553d11177b8c1ee38bfbd91f',1,'ip_station_points_grid_mod::ip_station_points_grid::gdswzd()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a0f14a253b51bcb0633cd00d32d5130a4',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::gdswzd()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a62c8147f8845d75e8f52c7524a74c780',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::gdswzd()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9e97b7352e67dd629f622f292cf0ca21',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::gdswzd()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#aa69861340bc268b91a1076048ed489fc',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::gdswzd()'],['../structip__grid__mod_1_1ip__grid.html#a5fb366fb577a90cc09f21269b90ac080',1,'ip_grid_mod::ip_grid::gdswzd()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a7ce52d987d2bd2442053042c03f96885',1,'ip_gaussian_grid_mod::ip_gaussian_grid::gdswzd()'],['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#aa1023c3efed20a990b75f937bbcac6a3',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::gdswzd()'],['../iplib__4_8h.html#a44daefd49c37e9bc59933d98e56efa53',1,'gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area): iplib_4.h'],['../iplib__8_8h.html#af41ad9a4b34f78d182a68b3d72b9bdf4',1,'gdswzd(long igdtnum, long *igdtmpl, long igdtlen, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_8.h'],['../iplib__d_8h.html#ac919f31612096fd6a7547a425ab3d38e',1,'gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_d.h'],['../interfacegdswzd__mod_1_1gdswzd.html',1,'gdswzd_mod::gdswzd']]], + ['gdswzd_5f1d_5farray_49',['gdswzd_1d_array',['../interfacegdswzd__mod_1_1gdswzd.html#afaf35e3ce949dd2ce3d72dd3f06d4e3b',1,'gdswzd_mod::gdswzd::gdswzd_1d_array()'],['../namespacegdswzd__mod.html#ac304e2b046eccc701e24827c81107e76',1,'gdswzd_mod::gdswzd_1d_array()']]], + ['gdswzd_5f2d_5farray_50',['gdswzd_2d_array',['../interfacegdswzd__mod_1_1gdswzd.html#a8b60240eefdc297eacf90c348b529d31',1,'gdswzd_mod::gdswzd::gdswzd_2d_array()'],['../namespacegdswzd__mod.html#acdf970e498e9317522fbdfb690b86e25',1,'gdswzd_mod::gdswzd_2d_array()']]], + ['gdswzd_5f2d_5farray_5fgrib1_51',['gdswzd_2d_array_grib1',['../interfacegdswzd__mod_1_1gdswzd.html#a7c66a7ede2b644f7e366df9f70b9f0a5',1,'gdswzd_mod::gdswzd::gdswzd_2d_array_grib1()'],['../namespacegdswzd__mod.html#aa032a55281b18e208630a730679958f4',1,'gdswzd_mod::gdswzd_2d_array_grib1()']]], + ['gdswzd_5fc_52',['gdswzd_c',['../namespacegdswzd__c__mod.html#ae3026381f7f41561507c97c9125d24e4',1,'gdswzd_c_mod']]], + ['gdswzd_5fc_2ef90_53',['gdswzd_c.F90',['../gdswzd__c_8F90.html',1,'']]], + ['gdswzd_5fc_5fgrib1_54',['gdswzd_c_grib1',['../namespacegdswzd__c__mod.html#a06861f1403edf106bb3b399c39981504',1,'gdswzd_c_mod']]], + ['gdswzd_5fc_5fmod_55',['gdswzd_c_mod',['../namespacegdswzd__c__mod.html',1,'']]], + ['gdswzd_5fequid_5fcylind_56',['gdswzd_equid_cylind',['../namespaceip__equid__cylind__grid__mod.html#af20f6f308b5a33211c677b894e41b727',1,'ip_equid_cylind_grid_mod']]], + ['gdswzd_5fgaussian_57',['gdswzd_gaussian',['../namespaceip__gaussian__grid__mod.html#a6eefd9270b3f9bb2c59a77bea4ecf1b9',1,'ip_gaussian_grid_mod']]], + ['gdswzd_5fgrib1_58',['gdswzd_grib1',['../namespacegdswzd__mod.html#a133e040fac8dd56e607b8e3fb6a58c37',1,'gdswzd_mod::gdswzd_grib1()'],['../iplib__4_8h.html#a7f2f96041c0d42926e14cb0f40f336e1',1,'gdswzd_grib1(): iplib_4.h'],['../interfacegdswzd__mod_1_1gdswzd.html#a65b95791813ffd5afbfba9d4cb67676a',1,'gdswzd_mod::gdswzd::gdswzd_grib1()'],['../iplib__8_8h.html#ab8e46b623c66911913f66d314c15cc93',1,'gdswzd_grib1(long *kgds, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_8.h'],['../iplib__d_8h.html#ac33340cba2ac7b42dd9b9116fc28d691',1,'gdswzd_grib1(int *kgds, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_d.h']]], + ['gdswzd_5fgrid_59',['gdswzd_grid',['../interfacegdswzd__mod_1_1gdswzd.html#abfe059339c6c9f05fd4eadb5d70aec16',1,'gdswzd_mod::gdswzd::gdswzd_grid()'],['../namespacegdswzd__mod.html#a584d2bddbc6d857b80cfac5e3b288d45',1,'gdswzd_mod::gdswzd_grid()']]], + ['gdswzd_5finterface_60',['gdswzd_interface',['../interfaceip__grid__mod_1_1gdswzd__interface.html#af34c5d9da54a36322bb1a141217c6369',1,'ip_grid_mod::gdswzd_interface::gdswzd_interface()'],['../interfaceip__grid__mod_1_1gdswzd__interface.html',1,'ip_grid_mod::gdswzd_interface']]], + ['gdswzd_5flambert_5fconf_61',['gdswzd_lambert_conf',['../namespaceip__lambert__conf__grid__mod.html#a5ebb9e4f1bd58caa254771b305c94f71',1,'ip_lambert_conf_grid_mod']]], + ['gdswzd_5fmercator_62',['gdswzd_mercator',['../namespaceip__mercator__grid__mod.html#acc39017fa51125972ab8e755e16d339e',1,'ip_mercator_grid_mod']]], + ['gdswzd_5fmod_63',['gdswzd_mod',['../namespacegdswzd__mod.html',1,'']]], + ['gdswzd_5fmod_2ef90_64',['gdswzd_mod.F90',['../gdswzd__mod_8F90.html',1,'']]], + ['gdswzd_5fpolar_5fstereo_65',['gdswzd_polar_stereo',['../namespaceip__polar__stereo__grid__mod.html#ae2694d90ab514a131e083dfba3b173c5',1,'ip_polar_stereo_grid_mod']]], + ['gdswzd_5frot_5fequid_5fcylind_66',['gdswzd_rot_equid_cylind',['../namespaceip__rot__equid__cylind__grid__mod.html#a55c153201e15205d3f75e4ffb717cc0b',1,'ip_rot_equid_cylind_grid_mod']]], + ['gdswzd_5frot_5fequid_5fcylind_5fegrid_67',['gdswzd_rot_equid_cylind_egrid',['../namespaceip__rot__equid__cylind__egrid__mod.html#a9ad11a599fc0bdc4a9ece86a3b1cc399',1,'ip_rot_equid_cylind_egrid_mod']]], + ['gdswzd_5fscalar_68',['gdswzd_scalar',['../interfacegdswzd__mod_1_1gdswzd.html#a1fc841ec08d39463b3f5f36eac0068cd',1,'gdswzd_mod::gdswzd::gdswzd_scalar()'],['../namespacegdswzd__mod.html#aba3235c5bc5797e72b9a6a8a587b8861',1,'gdswzd_mod::gdswzd_scalar()']]], + ['gdswzd_5fstation_5fpoints_69',['gdswzd_station_points',['../namespaceip__station__points__grid__mod.html#a8da297b45242279a497dbd7062a33197',1,'ip_station_points_grid_mod']]], + ['gdt_5flen_70',['gdt_len',['../structip__grid__descriptor__mod_1_1grib2__descriptor.html#abf8e6d212308608a039e8e97c05c4a06',1,'ip_grid_descriptor_mod::grib2_descriptor']]], + ['gdt_5fnum_71',['gdt_num',['../structip__grid__descriptor__mod_1_1grib2__descriptor.html#aa5dd78817926e0246f93819ab7037e19',1,'ip_grid_descriptor_mod::grib2_descriptor']]], + ['gdt_5ftmpl_72',['gdt_tmpl',['../structip__grid__descriptor__mod_1_1grib2__descriptor.html#a3a90e1ef19332a1d8ec1f6a3193c6ebe',1,'ip_grid_descriptor_mod::grib2_descriptor']]], + ['grib1_5fdescriptor_73',['grib1_descriptor',['../structip__grid__descriptor__mod_1_1grib1__descriptor.html',1,'ip_grid_descriptor_mod']]], + ['grib2_5fdescriptor_74',['grib2_descriptor',['../structip__grid__descriptor__mod_1_1grib2__descriptor.html',1,'ip_grid_descriptor_mod']]], + ['grid_5fnum_75',['grid_num',['../structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a6d4598dc4bbf46e059f636715cc390f1',1,'ip_grid_descriptor_mod::ip_grid_descriptor']]] +]; diff --git a/search/all_7.html b/ver-5.1.0/search/all_7.html similarity index 100% rename from search/all_7.html rename to ver-5.1.0/search/all_7.html diff --git a/ver-5.1.0/search/all_7.js b/ver-5.1.0/search/all_7.js new file mode 100644 index 00000000..028e2c11 --- /dev/null +++ b/ver-5.1.0/search/all_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['h_76',['h',['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a733c8a9b6ed498aeec73fa8f11283c03',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::h()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a6df619b3050279d9d560e72a3e87168f',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::h()'],['../namespaceip__lambert__conf__grid__mod.html#aa91572e8b5ba3559c041f1750b6696c6',1,'ip_lambert_conf_grid_mod::h()'],['../namespaceip__polar__stereo__grid__mod.html#a5a63da5168a1432a1af42c0b668f0645',1,'ip_polar_stereo_grid_mod::h()']]], + ['hi_77',['hi',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#afb1ebcfab0d637688bcac84cbc8582fc',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::hi()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ae71229713fc9322e23140541993459fc',1,'ip_gaussian_grid_mod::ip_gaussian_grid::hi()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a91b223ca51a556fa11b76b0c05e0d3f2',1,'ip_mercator_grid_mod::ip_mercator_grid::hi()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a970c2655cb03ad0927e03c1d550e3fe5',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::hi()']]] +]; diff --git a/search/all_8.html b/ver-5.1.0/search/all_8.html similarity index 100% rename from search/all_8.html rename to ver-5.1.0/search/all_8.html diff --git a/ver-5.1.0/search/all_8.js b/ver-5.1.0/search/all_8.js new file mode 100644 index 00000000..d0920be4 --- /dev/null +++ b/ver-5.1.0/search/all_8.js @@ -0,0 +1,109 @@ +var searchData= +[ + ['im_78',['im',['../structip__grid__mod_1_1ip__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc',1,'ip_grid_mod::ip_grid']]], + ['init_79',['init',['../structip__grid__mod_1_1ip__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c',1,'ip_grid_mod::ip_grid']]], + ['init_5fdescriptor_80',['init_descriptor',['../interfaceip__grid__descriptor__mod_1_1init__descriptor.html',1,'ip_grid_descriptor_mod']]], + ['init_5fgrib1_81',['init_grib1',['../namespaceip__station__points__grid__mod.html#a4b28ebf2b4fe826c96af69db28e0a1ff',1,'ip_station_points_grid_mod::init_grib1()'],['../namespaceip__gaussian__grid__mod.html#a8fe2ee732a3a2db4891a6431787a0b01',1,'ip_gaussian_grid_mod::init_grib1()'],['../namespaceip__rot__equid__cylind__grid__mod.html#acb27dfdc6f03dea897d509910365afee',1,'ip_rot_equid_cylind_grid_mod::init_grib1()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#aa65616b97df9c89893161ff802e16eab',1,'ip_rot_equid_cylind_egrid_mod::init_grib1()'],['../namespaceip__polar__stereo__grid__mod.html#a6ed76f58f30993cd7be84b7e03cf4d6f',1,'ip_polar_stereo_grid_mod::init_grib1()'],['../namespaceip__mercator__grid__mod.html#a4125dba8b09e9b69933e224b00f4758d',1,'ip_mercator_grid_mod::init_grib1()'],['../namespaceip__lambert__conf__grid__mod.html#a5544708e893ffcfbe7d958fdec700eea',1,'ip_lambert_conf_grid_mod::init_grib1()'],['../namespaceip__equid__cylind__grid__mod.html#a3d0132823d27b60835ebb59ead173477',1,'ip_equid_cylind_grid_mod::init_grib1()'],['../structip__station__points__grid__mod_1_1ip__station__points__grid.html#aa5ec2cbc9bf0dadf20a226e0afeb3d32',1,'ip_station_points_grid_mod::ip_station_points_grid::init_grib1()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a9942c787bda2e118f1355476670edfca',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib1()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ab9a85830bfd06183a8df73726f62217a',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib1()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ae2a5a7c08e4578f3d0ff6b85e5a14cce',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib1()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a3ae3bbb47f4c03c36404a2b35014d65c',1,'ip_mercator_grid_mod::ip_mercator_grid::init_grib1()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a35dd86b4a9017f5b03a0a6a01eb4d370',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib1()'],['../structip__grid__mod_1_1ip__grid.html#a5a2c16279eb73a0c54ae0a1586d5b806',1,'ip_grid_mod::ip_grid::init_grib1()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#afd3658924783d5dbbd3fe5f07d5b60a7',1,'ip_gaussian_grid_mod::ip_gaussian_grid::init_grib1()'],['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a68fb7543888cc76885560709184e7d70',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib1()']]], + ['init_5fgrib1_5fdescriptor_82',['init_grib1_descriptor',['../interfaceip__grid__descriptor__mod_1_1init__descriptor.html#a3b5b267aa7a17a4615dcc0cb4e590f6e',1,'ip_grid_descriptor_mod::init_descriptor::init_grib1_descriptor()'],['../namespaceip__grid__descriptor__mod.html#aa00884a7fca018535eaf0c2ebe26bc98',1,'ip_grid_descriptor_mod::init_grib1_descriptor()']]], + ['init_5fgrib1_5finterface_83',['init_grib1_interface',['../interfaceip__grid__mod_1_1init__grib1__interface.html#a47e255b76f02fe58a1aebdadcc5894eb',1,'ip_grid_mod::init_grib1_interface::init_grib1_interface()'],['../interfaceip__grid__mod_1_1init__grib1__interface.html',1,'ip_grid_mod::init_grib1_interface']]], + ['init_5fgrib2_84',['init_grib2',['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a505b0114c7ff5fbb58c4e7ce5ccde3f0',1,'ip_mercator_grid_mod::ip_mercator_grid::init_grib2()'],['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a8dd212953e754964770fa1c3d4bcd3db',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib2()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a378b72a1b6090acb90a36385ab9eda5a',1,'ip_gaussian_grid_mod::ip_gaussian_grid::init_grib2()'],['../structip__grid__mod_1_1ip__grid.html#ad13e0ad8d616e1839ced388826fefee9',1,'ip_grid_mod::ip_grid::init_grib2()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a64129413df8ea478ab1360fd1a274e9a',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib2()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9622ce9892084b52303f27722572b87c',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib2()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#adda32463a76ad97ac35b01f1ac693fa4',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib2()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a30ae580d169972e8d68c3d97ab3b2634',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib2()'],['../structip__station__points__grid__mod_1_1ip__station__points__grid.html#a69fac68e7a40d5c3106a47bf1851891e',1,'ip_station_points_grid_mod::ip_station_points_grid::init_grib2()'],['../namespaceip__equid__cylind__grid__mod.html#a39d24c9468ecb7effd16972fd72e088a',1,'ip_equid_cylind_grid_mod::init_grib2()'],['../namespaceip__gaussian__grid__mod.html#ae048ac033628515113b11b8c7364e0c2',1,'ip_gaussian_grid_mod::init_grib2()'],['../namespaceip__station__points__grid__mod.html#ad17e6d245295803b62b146be984f874d',1,'ip_station_points_grid_mod::init_grib2()'],['../namespaceip__rot__equid__cylind__grid__mod.html#add3c6c1dad5748b452d291df6619867d',1,'ip_rot_equid_cylind_grid_mod::init_grib2()'],['../namespaceip__lambert__conf__grid__mod.html#acb0339a9fff4fff6c2017d37f8bed0cf',1,'ip_lambert_conf_grid_mod::init_grib2()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#af3cbc17f27800bc67135feacb2c1c3e0',1,'ip_rot_equid_cylind_egrid_mod::init_grib2()'],['../namespaceip__polar__stereo__grid__mod.html#a5210b986366b503683ae966519d501e7',1,'ip_polar_stereo_grid_mod::init_grib2()'],['../namespaceip__mercator__grid__mod.html#aad3b6fef6ee74b8df984c0159ff29c82',1,'ip_mercator_grid_mod::init_grib2()']]], + ['init_5fgrib2_5fdefault_85',['init_grib2_default',['../namespaceip__rot__equid__cylind__grid__mod.html#a9ade5de892a935c3b62c1860b719ce74',1,'ip_rot_equid_cylind_grid_mod']]], + ['init_5fgrib2_5fdescriptor_86',['init_grib2_descriptor',['../interfaceip__grid__descriptor__mod_1_1init__descriptor.html#a6702c4bf3a3d914e5cd2fce8fba4f95c',1,'ip_grid_descriptor_mod::init_descriptor::init_grib2_descriptor()'],['../namespaceip__grid__descriptor__mod.html#a143ac06a2a20697d01606a259213b451',1,'ip_grid_descriptor_mod::init_grib2_descriptor()']]], + ['init_5fgrib2_5finterface_87',['init_grib2_interface',['../interfaceip__grid__mod_1_1init__grib2__interface.html#a25dcec4470effb9b20dfc7981c21ec6c',1,'ip_grid_mod::init_grib2_interface::init_grib2_interface()'],['../interfaceip__grid__mod_1_1init__grib2__interface.html',1,'ip_grid_mod::init_grib2_interface']]], + ['init_5fgrib2_5fncep_5fpost_88',['init_grib2_ncep_post',['../namespaceip__rot__equid__cylind__grid__mod.html#a74abf723e815f9ff196e6d0174fd449b',1,'ip_rot_equid_cylind_grid_mod']]], + ['init_5fgrid_89',['init_grid',['../interfaceip__grid__factory__mod_1_1init__grid.html',1,'ip_grid_factory_mod']]], + ['init_5fgrid_5fgeneric_90',['init_grid_generic',['../interfaceip__grid__factory__mod_1_1init__grid.html#a3fbbec3ddc7dfd918c2abc02e7a4cd72',1,'ip_grid_factory_mod::init_grid::init_grid_generic()'],['../namespaceip__grid__factory__mod.html#a2d2ea07d353bae8b057471aa99b58e46',1,'ip_grid_factory_mod::init_grid_generic(grid, grid_desc)']]], + ['init_5fgrid_5fgrib1_91',['init_grid_grib1',['../namespaceip__grid__factory__mod.html#ad8906ed6fe52c2426c0ff09ce50b6fc5',1,'ip_grid_factory_mod']]], + ['init_5fgrid_5fgrib2_92',['init_grid_grib2',['../namespaceip__grid__factory__mod.html#aa187dc8dbd1d004a51cc0e9826ffa225',1,'ip_grid_factory_mod']]], + ['interpolate_5fbicubic_93',['interpolate_bicubic',['../interfacebicubic__interp__mod_1_1interpolate__bicubic.html',1,'bicubic_interp_mod']]], + ['interpolate_5fbicubic_5fscalar_94',['interpolate_bicubic_scalar',['../interfacebicubic__interp__mod_1_1interpolate__bicubic.html#acbfecc99184cf9ae71b2c9f79c7d4077',1,'bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_scalar()'],['../namespacebicubic__interp__mod.html#a54a442e47f1be9511c1684a337d7e2d1',1,'bicubic_interp_mod::interpolate_bicubic_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)']]], + ['interpolate_5fbicubic_5fvector_95',['interpolate_bicubic_vector',['../namespacebicubic__interp__mod.html#a9d27db7d350fc2699aaf5057c3b53d16',1,'bicubic_interp_mod::interpolate_bicubic_vector()'],['../interfacebicubic__interp__mod_1_1interpolate__bicubic.html#aac45c15e1c9d76158d72e62ccaca915b',1,'bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_vector()']]], + ['interpolate_5fbilinear_96',['interpolate_bilinear',['../interfacebilinear__interp__mod_1_1interpolate__bilinear.html',1,'bilinear_interp_mod']]], + ['interpolate_5fbilinear_5fscalar_97',['interpolate_bilinear_scalar',['../namespacebilinear__interp__mod.html#a34d2eea4682104097dccf3e7ab6a9398',1,'bilinear_interp_mod::interpolate_bilinear_scalar()'],['../interfacebilinear__interp__mod_1_1interpolate__bilinear.html#a3493cf5bc04aa4551ffd4c314ef09a65',1,'bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_scalar()']]], + ['interpolate_5fbilinear_5fvector_98',['interpolate_bilinear_vector',['../namespacebilinear__interp__mod.html#abc218f8774d2af09299eb299d6f38e04',1,'bilinear_interp_mod::interpolate_bilinear_vector()'],['../interfacebilinear__interp__mod_1_1interpolate__bilinear.html#ab4692c5250b37325f764b38c570892dd',1,'bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_vector()']]], + ['interpolate_5fbudget_99',['interpolate_budget',['../interfacebudget__interp__mod_1_1interpolate__budget.html',1,'budget_interp_mod']]], + ['interpolate_5fbudget_5fscalar_100',['interpolate_budget_scalar',['../namespacebudget__interp__mod.html#a09bd6535b0c2e1022cfde39c39d14466',1,'budget_interp_mod::interpolate_budget_scalar()'],['../interfacebudget__interp__mod_1_1interpolate__budget.html#a4b96cbeedb86ef43b687f7ea55914ef0',1,'budget_interp_mod::interpolate_budget::interpolate_budget_scalar()']]], + ['interpolate_5fbudget_5fvector_101',['interpolate_budget_vector',['../namespacebudget__interp__mod.html#abc99486ee9c0091c1514af6114d4e803',1,'budget_interp_mod::interpolate_budget_vector()'],['../interfacebudget__interp__mod_1_1interpolate__budget.html#a573e89e56381d0f69e4022d791a087e6',1,'budget_interp_mod::interpolate_budget::interpolate_budget_vector()']]], + ['interpolate_5fneighbor_102',['interpolate_neighbor',['../interfaceneighbor__interp__mod_1_1interpolate__neighbor.html',1,'neighbor_interp_mod']]], + ['interpolate_5fneighbor_5fbudget_103',['interpolate_neighbor_budget',['../interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html',1,'neighbor_budget_interp_mod']]], + ['interpolate_5fneighbor_5fbudget_5fscalar_104',['interpolate_neighbor_budget_scalar',['../interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html#a96e4b145a4df6f4948b1d5ae2da6a71a',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_scalar()'],['../namespaceneighbor__budget__interp__mod.html#a6d5110a9e9facf8c3132ec27d6857817',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget_scalar()']]], + ['interpolate_5fneighbor_5fbudget_5fvector_105',['interpolate_neighbor_budget_vector',['../interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html#a573bd5ac43484aa6d051e58f37ff7c06',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_vector()'],['../namespaceneighbor__budget__interp__mod.html#a4309c1e6b7fc60ded40657fe6c72297e',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget_vector()']]], + ['interpolate_5fneighbor_5fscalar_106',['interpolate_neighbor_scalar',['../namespaceneighbor__interp__mod.html#a78452d1527c6974ad54091f0318e4b1f',1,'neighbor_interp_mod::interpolate_neighbor_scalar()'],['../interfaceneighbor__interp__mod_1_1interpolate__neighbor.html#a04ebb54535e67ff95c1d3d64b9cf6246',1,'neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)']]], + ['interpolate_5fneighbor_5fvector_107',['interpolate_neighbor_vector',['../interfaceneighbor__interp__mod_1_1interpolate__neighbor.html#a4662245e2744fd14628b48f23bf4f0a7',1,'neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_vector()'],['../namespaceneighbor__interp__mod.html#a744ccffd8cd6c13d360e634db4851756',1,'neighbor_interp_mod::interpolate_neighbor_vector()']]], + ['interpolate_5fspectral_108',['interpolate_spectral',['../interfacespectral__interp__mod_1_1interpolate__spectral.html',1,'spectral_interp_mod']]], + ['interpolate_5fspectral_5fscalar_109',['interpolate_spectral_scalar',['../interfacespectral__interp__mod_1_1interpolate__spectral.html#a79f600a26ecf256a8a13cf4bdbaf2ab1',1,'spectral_interp_mod::interpolate_spectral::interpolate_spectral_scalar()'],['../namespacespectral__interp__mod.html#a438646d69e941def0ada00d5ca19f618',1,'spectral_interp_mod::interpolate_spectral_scalar()']]], + ['interpolate_5fspectral_5fvector_110',['interpolate_spectral_vector',['../interfacespectral__interp__mod_1_1interpolate__spectral.html#a9e939bbb3f7b214fee26c1e77764e487',1,'spectral_interp_mod::interpolate_spectral::interpolate_spectral_vector()'],['../namespacespectral__interp__mod.html#acb61ad529b7decc2a6ff58dd12fbadd0',1,'spectral_interp_mod::interpolate_spectral_vector()']]], + ['introduction_111',['Introduction',['../index.html',1,'']]], + ['ip_5fconstants_5fmod_112',['ip_constants_mod',['../namespaceip__constants__mod.html',1,'']]], + ['ip_5fconstants_5fmod_2ef90_113',['ip_constants_mod.F90',['../ip__constants__mod_8F90.html',1,'']]], + ['ip_5fequid_5fcylind_5fgrid_114',['ip_equid_cylind_grid',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html',1,'ip_equid_cylind_grid_mod']]], + ['ip_5fequid_5fcylind_5fgrid_5fmod_115',['ip_equid_cylind_grid_mod',['../namespaceip__equid__cylind__grid__mod.html',1,'']]], + ['ip_5fequid_5fcylind_5fgrid_5fmod_2ef90_116',['ip_equid_cylind_grid_mod.F90',['../ip__equid__cylind__grid__mod_8F90.html',1,'']]], + ['ip_5fgaussian_5fgrid_117',['ip_gaussian_grid',['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html',1,'ip_gaussian_grid_mod']]], + ['ip_5fgaussian_5fgrid_5fmod_118',['ip_gaussian_grid_mod',['../namespaceip__gaussian__grid__mod.html',1,'']]], + ['ip_5fgaussian_5fgrid_5fmod_2ef90_119',['ip_gaussian_grid_mod.F90',['../ip__gaussian__grid__mod_8F90.html',1,'']]], + ['ip_5fgrid_120',['ip_grid',['../structip__grid__mod_1_1ip__grid.html',1,'ip_grid_mod']]], + ['ip_5fgrid_5fdescriptor_121',['ip_grid_descriptor',['../structip__grid__descriptor__mod_1_1ip__grid__descriptor.html',1,'ip_grid_descriptor_mod']]], + ['ip_5fgrid_5fdescriptor_5fmod_122',['ip_grid_descriptor_mod',['../namespaceip__grid__descriptor__mod.html',1,'']]], + ['ip_5fgrid_5fdescriptor_5fmod_2ef90_123',['ip_grid_descriptor_mod.F90',['../ip__grid__descriptor__mod_8F90.html',1,'']]], + ['ip_5fgrid_5ffactory_5fmod_124',['ip_grid_factory_mod',['../namespaceip__grid__factory__mod.html',1,'']]], + ['ip_5fgrid_5ffactory_5fmod_2ef90_125',['ip_grid_factory_mod.F90',['../ip__grid__factory__mod_8F90.html',1,'']]], + ['ip_5fgrid_5fmod_126',['ip_grid_mod',['../namespaceip__grid__mod.html',1,'']]], + ['ip_5fgrid_5fmod_2ef90_127',['ip_grid_mod.F90',['../ip__grid__mod_8F90.html',1,'']]], + ['ip_5fgrids_5fmod_128',['ip_grids_mod',['../namespaceip__grids__mod.html',1,'']]], + ['ip_5fgrids_5fmod_2ef90_129',['ip_grids_mod.F90',['../ip__grids__mod_8F90.html',1,'']]], + ['ip_5finterpolators_5fmod_130',['ip_interpolators_mod',['../namespaceip__interpolators__mod.html',1,'']]], + ['ip_5finterpolators_5fmod_2ef90_131',['ip_interpolators_mod.F90',['../ip__interpolators__mod_8F90.html',1,'']]], + ['ip_5flambert_5fconf_5fgrid_132',['ip_lambert_conf_grid',['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html',1,'ip_lambert_conf_grid_mod']]], + ['ip_5flambert_5fconf_5fgrid_5fmod_133',['ip_lambert_conf_grid_mod',['../namespaceip__lambert__conf__grid__mod.html',1,'']]], + ['ip_5flambert_5fconf_5fgrid_5fmod_2ef90_134',['ip_lambert_conf_grid_mod.F90',['../ip__lambert__conf__grid__mod_8F90.html',1,'']]], + ['ip_5fmercator_5fgrid_135',['ip_mercator_grid',['../structip__mercator__grid__mod_1_1ip__mercator__grid.html',1,'ip_mercator_grid_mod']]], + ['ip_5fmercator_5fgrid_5fmod_136',['ip_mercator_grid_mod',['../namespaceip__mercator__grid__mod.html',1,'']]], + ['ip_5fmercator_5fgrid_5fmod_2ef90_137',['ip_mercator_grid_mod.F90',['../ip__mercator__grid__mod_8F90.html',1,'']]], + ['ip_5fmod_138',['ip_mod',['../namespaceip__mod.html',1,'']]], + ['ip_5fmod_2ef90_139',['ip_mod.F90',['../ip__mod_8F90.html',1,'']]], + ['ip_5fpolar_5fstereo_5fgrid_140',['ip_polar_stereo_grid',['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html',1,'ip_polar_stereo_grid_mod']]], + ['ip_5fpolar_5fstereo_5fgrid_5fmod_141',['ip_polar_stereo_grid_mod',['../namespaceip__polar__stereo__grid__mod.html',1,'']]], + ['ip_5fpolar_5fstereo_5fgrid_5fmod_2ef90_142',['ip_polar_stereo_grid_mod.F90',['../ip__polar__stereo__grid__mod_8F90.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fegrid_143',['ip_rot_equid_cylind_egrid',['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html',1,'ip_rot_equid_cylind_egrid_mod']]], + ['ip_5frot_5fequid_5fcylind_5fegrid_5fmod_144',['ip_rot_equid_cylind_egrid_mod',['../namespaceip__rot__equid__cylind__egrid__mod.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fegrid_5fmod_2ef90_145',['ip_rot_equid_cylind_egrid_mod.F90',['../ip__rot__equid__cylind__egrid__mod_8F90.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fgrid_146',['ip_rot_equid_cylind_grid',['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html',1,'ip_rot_equid_cylind_grid_mod']]], + ['ip_5frot_5fequid_5fcylind_5fgrid_5fmod_147',['ip_rot_equid_cylind_grid_mod',['../namespaceip__rot__equid__cylind__grid__mod.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fgrid_5fmod_2ef90_148',['ip_rot_equid_cylind_grid_mod.F90',['../ip__rot__equid__cylind__grid__mod_8F90.html',1,'']]], + ['ip_5fstation_5fpoints_5fgrid_149',['ip_station_points_grid',['../structip__station__points__grid__mod_1_1ip__station__points__grid.html',1,'ip_station_points_grid_mod']]], + ['ip_5fstation_5fpoints_5fgrid_5fmod_150',['ip_station_points_grid_mod',['../namespaceip__station__points__grid__mod.html',1,'']]], + ['ip_5fstation_5fpoints_5fgrid_5fmod_2ef90_151',['ip_station_points_grid_mod.F90',['../ip__station__points__grid__mod_8F90.html',1,'']]], + ['iplib_5f4_2eh_152',['iplib_4.h',['../iplib__4_8h.html',1,'']]], + ['iplib_5f8_2eh_153',['iplib_8.h',['../iplib__8_8h.html',1,'']]], + ['iplib_5fd_2eh_154',['iplib_d.h',['../iplib__d_8h.html',1,'']]], + ['ipolates_155',['ipolates',['../interfaceipolates__mod_1_1ipolates.html',1,'ipolates_mod']]], + ['ipolates_2ef90_156',['ipolates.F90',['../ipolates_8F90.html',1,'']]], + ['ipolates_5fgrib1_157',['ipolates_grib1',['../namespaceipolates__mod.html#acb5408cf5c3a0f50326edc183f9bd269',1,'ipolates_mod::ipolates_grib1()'],['../interfaceipolates__mod_1_1ipolates.html#a8ff62af694c759f29c332836ff66437b',1,'ipolates_mod::ipolates::ipolates_grib1()']]], + ['ipolates_5fgrib1_5fsingle_5ffield_158',['ipolates_grib1_single_field',['../namespaceipolates__mod.html#ae70a9ca9871bb33e038782b036b7b53d',1,'ipolates_mod::ipolates_grib1_single_field()'],['../interfaceipolates__mod_1_1ipolates.html#afbc36431f96adfbbf552bc6137d0519d',1,'ipolates_mod::ipolates::ipolates_grib1_single_field()']]], + ['ipolates_5fgrib2_159',['ipolates_grib2',['../namespaceipolates__mod.html#a6b2ea6d5b04d2a68baad261e7a409fac',1,'ipolates_mod::ipolates_grib2()'],['../interfaceipolates__mod_1_1ipolates.html#a791ae0a257adcc3a789494489e28302b',1,'ipolates_mod::ipolates::ipolates_grib2()']]], + ['ipolates_5fgrib2_5fsingle_5ffield_160',['ipolates_grib2_single_field',['../namespaceipolates__mod.html#a49541b2af75b7c037a863a4785726856',1,'ipolates_mod::ipolates_grib2_single_field()'],['../interfaceipolates__mod_1_1ipolates.html#a3a77b7de2dce406829a3b01689372240',1,'ipolates_mod::ipolates::ipolates_grib2_single_field()']]], + ['ipolates_5fgrid_161',['ipolates_grid',['../namespaceipolates__mod.html#a2761e20fab898e7fd9963f3e0eb5d104',1,'ipolates_mod']]], + ['ipolates_5fmod_162',['ipolates_mod',['../namespaceipolates__mod.html',1,'']]], + ['ipolatev_163',['ipolatev',['../interfaceipolatev__mod_1_1ipolatev.html',1,'ipolatev_mod']]], + ['ipolatev_2ef90_164',['ipolatev.F90',['../ipolatev_8F90.html',1,'']]], + ['ipolatev_5fgrib1_165',['ipolatev_grib1',['../interfaceipolatev__mod_1_1ipolatev.html#ac721867d3d8e8adc11d56baba4702d53',1,'ipolatev_mod::ipolatev::ipolatev_grib1()'],['../namespaceipolatev__mod.html#abddc4a9b00133b358443b118f1352d1f',1,'ipolatev_mod::ipolatev_grib1()']]], + ['ipolatev_5fgrib1_5fsingle_5ffield_166',['ipolatev_grib1_single_field',['../interfaceipolatev__mod_1_1ipolatev.html#ad211b25631afd3fd7c04bbfba589a7c5',1,'ipolatev_mod::ipolatev::ipolatev_grib1_single_field()'],['../namespaceipolatev__mod.html#ad535ffd159c46e770effd774aabede58',1,'ipolatev_mod::ipolatev_grib1_single_field()']]], + ['ipolatev_5fgrib2_167',['ipolatev_grib2',['../interfaceipolatev__mod_1_1ipolatev.html#ac1ec04e3119f285f0f3955f016926efe',1,'ipolatev_mod::ipolatev::ipolatev_grib2()'],['../namespaceipolatev__mod.html#a00fed53dd867a802b3adbc1141e8d272',1,'ipolatev_mod::ipolatev_grib2(ip, ipopt, igdtnumi, igdtmpli, igdtleni, igdtnumo, igdtmplo, igdtleno, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)']]], + ['ipolatev_5fgrib2_5fsingle_5ffield_168',['ipolatev_grib2_single_field',['../namespaceipolatev__mod.html#a71d7507e8f89e1229caaaacb37e0c9c7',1,'ipolatev_mod::ipolatev_grib2_single_field()'],['../interfaceipolatev__mod_1_1ipolatev.html#aa0af88a9ccef79a921680fe40ec30ccd',1,'ipolatev_mod::ipolatev::ipolatev_grib2_single_field()']]], + ['ipolatev_5fgrid_169',['ipolatev_grid',['../namespaceipolatev__mod.html#a8f3bfec7495e13b75b2035e8e1f081a1',1,'ipolatev_mod']]], + ['ipolatev_5fmod_170',['ipolatev_mod',['../namespaceipolatev__mod.html',1,'']]], + ['ipxetas_171',['ipxetas',['../ipxetas_8F90.html#a89ff34ee39b0da1895e9d8552bb462e1',1,'ipxetas.F90']]], + ['ipxetas_2ef90_172',['ipxetas.F90',['../ipxetas_8F90.html',1,'']]], + ['ipxwafs_173',['ipxwafs',['../ipxwafs_8F90.html#a1465ea191950f7464bb3374abed94c12',1,'ipxwafs.F90']]], + ['ipxwafs_2ef90_174',['ipxwafs.F90',['../ipxwafs_8F90.html',1,'']]], + ['ipxwafs2_175',['ipxwafs2',['../ipxwafs2_8F90.html#ab602c9c04957836c0b8860560d442894',1,'ipxwafs2.F90']]], + ['ipxwafs2_2ef90_176',['ipxwafs2.F90',['../ipxwafs2_8F90.html',1,'']]], + ['ipxwafs3_177',['ipxwafs3',['../ipxwafs3_8F90.html#aae7be3c77cbe16d0219c86e443e6ec1d',1,'ipxwafs3.F90']]], + ['ipxwafs3_2ef90_178',['ipxwafs3.F90',['../ipxwafs3_8F90.html',1,'']]], + ['irot_179',['irot',['../namespaceip__lambert__conf__grid__mod.html#a7dea876ed4206c5ecc0444aadb7d6acd',1,'ip_lambert_conf_grid_mod::irot()'],['../namespaceip__polar__stereo__grid__mod.html#a1269037aaecd12e75e17d8aac8e20c8c',1,'ip_polar_stereo_grid_mod::irot()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#a93ed996cf2dc9569e356256ec946b571',1,'ip_rot_equid_cylind_egrid_mod::irot()'],['../namespaceip__rot__equid__cylind__grid__mod.html#abb0c2acdbd71f0c07ffaf9db54ce06c1',1,'ip_rot_equid_cylind_grid_mod::irot()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#ae4c44c4cf8d1376b24861534edbf514f',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::irot()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a558e99f37191cb2ea7398ac2a05ef29e',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::irot()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a13f3f267f5a26602eb93b6525f494a10',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::irot()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a0d90490fa5eb04604fc0e01bea2cf3cf',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::irot()']]], + ['is_5fsame_5fgrid_180',['is_same_grid',['../namespaceip__grid__descriptor__mod.html#a202219f9c5c84fa04d3eb1c2208358ec',1,'ip_grid_descriptor_mod::is_same_grid()'],['../namespaceip__grid__mod.html#a663bda9af9dd991a09ba0f0de66dc045',1,'ip_grid_mod::is_same_grid()'],['../interfaceip__grid__mod_1_1operator_07_0a_0a_08.html#a0303cd13db74e096af7f77200ef09c6b',1,'ip_grid_mod::operator(==)::is_same_grid()'],['../interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html#a34e94f8aada186a3d22112a1ab31b53c',1,'ip_grid_descriptor_mod::operator(==)::is_same_grid()'],['../structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a9da102dac348a63ffce6556ed5da81b6',1,'ip_grid_descriptor_mod::ip_grid_descriptor::is_same_grid()']]], + ['is_5fsame_5fgrid_5fgrib1_181',['is_same_grid_grib1',['../namespaceip__grid__descriptor__mod.html#a5bb3c5230b88012bddc3922bfa1cb019',1,'ip_grid_descriptor_mod::is_same_grid_grib1()'],['../structip__grid__descriptor__mod_1_1grib1__descriptor.html#a33b4fc04d218c73e3c4d061163dcbc95',1,'ip_grid_descriptor_mod::grib1_descriptor::is_same_grid_grib1()']]], + ['is_5fsame_5fgrid_5fgrib2_182',['is_same_grid_grib2',['../structip__grid__descriptor__mod_1_1grib2__descriptor.html#ae27b09a835144baf782e2cde0c1ea013',1,'ip_grid_descriptor_mod::grib2_descriptor::is_same_grid_grib2()'],['../namespaceip__grid__descriptor__mod.html#a75ac34ea9372afaa29b0df2ce8919988',1,'ip_grid_descriptor_mod::is_same_grid_grib2()']]], + ['iwrap_183',['iwrap',['../structip__grid__mod_1_1ip__grid.html#ae179622b9a4c764a5ca90385330941ed',1,'ip_grid_mod::ip_grid']]] +]; diff --git a/search/all_9.html b/ver-5.1.0/search/all_9.html similarity index 100% rename from search/all_9.html rename to ver-5.1.0/search/all_9.html diff --git a/ver-5.1.0/search/all_9.js b/ver-5.1.0/search/all_9.js new file mode 100644 index 00000000..3ae699f4 --- /dev/null +++ b/ver-5.1.0/search/all_9.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['j1_184',['j1',['../namespaceip__gaussian__grid__mod.html#af5c4024263aa3eaef5801849ae32c15a',1,'ip_gaussian_grid_mod']]], + ['jg_185',['jg',['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a110f99e158a977a1679133235fa06c34',1,'ip_gaussian_grid_mod::ip_gaussian_grid']]], + ['jh_186',['jh',['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a549ccd3ce1f5c75d99e8e04d4d4341b4',1,'ip_gaussian_grid_mod::ip_gaussian_grid::jh()'],['../namespaceip__gaussian__grid__mod.html#a67d6cd6d188a8bded8bdf64927617028',1,'ip_gaussian_grid_mod::jh()']]], + ['jm_187',['jm',['../structip__grid__mod_1_1ip__grid.html#a41a2a38288864520d8c50854d1843f87',1,'ip_grid_mod::ip_grid']]], + ['jscan_188',['jscan',['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a3e199827f764b162a14515e837c28903',1,'ip_gaussian_grid_mod::ip_gaussian_grid']]], + ['jwrap1_189',['jwrap1',['../structip__grid__mod_1_1ip__grid.html#a92976f110dd7e823799991137ac970a1',1,'ip_grid_mod::ip_grid']]], + ['jwrap2_190',['jwrap2',['../structip__grid__mod_1_1ip__grid.html#ae70be8cebcd217a49be4da1cebfc19d2',1,'ip_grid_mod::ip_grid']]] +]; diff --git a/search/all_a.html b/ver-5.1.0/search/all_a.html similarity index 100% rename from search/all_a.html rename to ver-5.1.0/search/all_a.html diff --git a/ver-5.1.0/search/all_a.js b/ver-5.1.0/search/all_a.js new file mode 100644 index 00000000..05c2155a --- /dev/null +++ b/ver-5.1.0/search/all_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['kd_191',['kd',['../namespaceip__rot__equid__cylind__egrid__mod.html#a50497d277c347a2991b0e34e85f1787e',1,'ip_rot_equid_cylind_egrid_mod::kd()'],['../namespaceip__rot__equid__cylind__grid__mod.html#af5dea0592cccce2de1c5c6a92d42cfd6',1,'ip_rot_equid_cylind_grid_mod::kd()']]], + ['kscan_192',['kscan',['../structip__grid__mod_1_1ip__grid.html#a084603b1c052e76c3335fea2e887cfce',1,'ip_grid_mod::ip_grid']]] +]; diff --git a/search/all_b.html b/ver-5.1.0/search/all_b.html similarity index 100% rename from search/all_b.html rename to ver-5.1.0/search/all_b.html diff --git a/ver-5.1.0/search/all_b.js b/ver-5.1.0/search/all_b.js new file mode 100644 index 00000000..ed3ec51e --- /dev/null +++ b/ver-5.1.0/search/all_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['lambert_5fconf_5fgrid_5farea_193',['lambert_conf_grid_area',['../namespaceip__lambert__conf__grid__mod.html#a15c44b47172b926aea840caee9723b1c',1,'ip_lambert_conf_grid_mod']]], + ['lambert_5fconf_5fgrid_5fid_5fgrib1_194',['lambert_conf_grid_id_grib1',['../namespaceip__grid__mod.html#ab82b90d20f38ff39741f6890fa422d16',1,'ip_grid_mod']]], + ['lambert_5fconf_5fgrid_5fid_5fgrib2_195',['lambert_conf_grid_id_grib2',['../namespaceip__grid__mod.html#a2e49846c9122b1fe1fcdbb2913fc32fe',1,'ip_grid_mod']]], + ['lambert_5fconf_5fmap_5fjacob_196',['lambert_conf_map_jacob',['../namespaceip__lambert__conf__grid__mod.html#a5e1d42f0027236f47467e25c525e66ae',1,'ip_lambert_conf_grid_mod']]], + ['lambert_5fconf_5fvect_5frot_197',['lambert_conf_vect_rot',['../namespaceip__lambert__conf__grid__mod.html#a58187073914efa18eca897c6ec203b71',1,'ip_lambert_conf_grid_mod']]] +]; diff --git a/search/all_c.html b/ver-5.1.0/search/all_c.html similarity index 100% rename from search/all_c.html rename to ver-5.1.0/search/all_c.html diff --git a/ver-5.1.0/search/all_c.js b/ver-5.1.0/search/all_c.js new file mode 100644 index 00000000..121259b3 --- /dev/null +++ b/ver-5.1.0/search/all_c.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['mercator_5fgrid_5farea_198',['mercator_grid_area',['../namespaceip__mercator__grid__mod.html#a952ab9add18587c4dbe54699feb8eafd',1,'ip_mercator_grid_mod']]], + ['mercator_5fgrid_5fid_5fgrib1_199',['mercator_grid_id_grib1',['../namespaceip__grid__mod.html#ab9ff525eca4f053b04ec96a83cb06682',1,'ip_grid_mod']]], + ['mercator_5fgrid_5fid_5fgrib2_200',['mercator_grid_id_grib2',['../namespaceip__grid__mod.html#af9c58af5162d96cb7d1ac5001139b856',1,'ip_grid_mod']]], + ['mercator_5fmap_5fjacob_201',['mercator_map_jacob',['../namespaceip__mercator__grid__mod.html#ab93a0a6ae8c5f5056abece1dcffdc57a',1,'ip_mercator_grid_mod']]], + ['mercator_5fvect_5frot_202',['mercator_vect_rot',['../namespaceip__mercator__grid__mod.html#aea5e18faf7a18bf8d06c87ccb11f3e17',1,'ip_mercator_grid_mod']]], + ['movect_203',['movect',['../movect_8F90.html#a5974e32c0cf90a65b39c68460d761882',1,'movect.F90']]], + ['movect_2ef90_204',['movect.F90',['../movect_8F90.html',1,'']]] +]; diff --git a/search/all_d.html b/ver-5.1.0/search/all_d.html similarity index 100% rename from search/all_d.html rename to ver-5.1.0/search/all_d.html diff --git a/ver-5.1.0/search/all_d.js b/ver-5.1.0/search/all_d.js new file mode 100644 index 00000000..045d2308 --- /dev/null +++ b/ver-5.1.0/search/all_d.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['ncep_5fpost_5farakawa_205',['ncep_post_arakawa',['../namespaceip__grid__mod.html#a88751d2ee535d807b6d420fcfb99ee71',1,'ip_grid_mod']]], + ['ncpus_206',['ncpus',['../ncpus_8F.html#a821a75ee067ea31758a038c0327bd3bd',1,'ncpus.F']]], + ['ncpus_2ef_207',['ncpus.F',['../ncpus_8F.html',1,'']]], + ['neighbor_5fbudget_5finterp_5fid_208',['neighbor_budget_interp_id',['../namespaceip__interpolators__mod.html#ae77a1da241f5de94f1874004ee8e715c',1,'ip_interpolators_mod']]], + ['neighbor_5fbudget_5finterp_5fmod_209',['neighbor_budget_interp_mod',['../namespaceneighbor__budget__interp__mod.html',1,'']]], + ['neighbor_5fbudget_5finterp_5fmod_2ef90_210',['neighbor_budget_interp_mod.F90',['../neighbor__budget__interp__mod_8F90.html',1,'']]], + ['neighbor_5finterp_5fid_211',['neighbor_interp_id',['../namespaceip__interpolators__mod.html#a35e5fe3a2dd79d205c0503f550388258',1,'ip_interpolators_mod']]], + ['neighbor_5finterp_5fmod_212',['neighbor_interp_mod',['../namespaceneighbor__interp__mod.html',1,'']]], + ['neighbor_5finterp_5fmod_2ef90_213',['neighbor_interp_mod.F90',['../neighbor__interp__mod_8F90.html',1,'']]], + ['nm_214',['nm',['../structip__grid__mod_1_1ip__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30',1,'ip_grid_mod::ip_grid']]], + ['nscan_215',['nscan',['../structip__grid__mod_1_1ip__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18',1,'ip_grid_mod::ip_grid']]], + ['nscan_5ffield_5fpos_216',['nscan_field_pos',['../structip__grid__mod_1_1ip__grid.html#a0640093c52461763f904cc2f12c96b6c',1,'ip_grid_mod::ip_grid']]] +]; diff --git a/search/all_e.html b/ver-5.1.0/search/all_e.html similarity index 100% rename from search/all_e.html rename to ver-5.1.0/search/all_e.html diff --git a/ver-5.1.0/search/all_e.js b/ver-5.1.0/search/all_e.js new file mode 100644 index 00000000..30900898 --- /dev/null +++ b/ver-5.1.0/search/all_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_28_3d_3d_29_217',['operator(==)',['../interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html',1,'ip_grid_descriptor_mod::operator(==)'],['../interfaceip__grid__mod_1_1operator_07_0a_0a_08.html',1,'ip_grid_mod::operator(==)']]], + ['orient_218',['orient',['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a0614cfdb69e59e3c3e2937f3319fe34a',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::orient()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#aeaeb6d72861b9b62de5bcd435bc96ea4',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::orient()'],['../namespaceip__polar__stereo__grid__mod.html#aa4a88f48d7b78cfdfc54754882195d18',1,'ip_polar_stereo_grid_mod::orient()']]] +]; diff --git a/search/all_f.html b/ver-5.1.0/search/all_f.html similarity index 100% rename from search/all_f.html rename to ver-5.1.0/search/all_f.html diff --git a/ver-5.1.0/search/all_f.js b/ver-5.1.0/search/all_f.js new file mode 100644 index 00000000..f39c5e13 --- /dev/null +++ b/ver-5.1.0/search/all_f.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['pi_219',['pi',['../namespaceip__constants__mod.html#a47f83a2267da693170054c958c401cd4',1,'ip_constants_mod']]], + ['pi2_220',['pi2',['../namespaceip__constants__mod.html#a309f7e3b1f83b6b272b12ce4fff501c5',1,'ip_constants_mod']]], + ['pi4_221',['pi4',['../namespaceip__constants__mod.html#a5fe7cdd86b44487666dc37f655d9ff15',1,'ip_constants_mod']]], + ['polar_5fstereo_5fgrid_5farea_222',['polar_stereo_grid_area',['../namespaceip__polar__stereo__grid__mod.html#a2a2e0854e5c129e320924a811cbd08e2',1,'ip_polar_stereo_grid_mod']]], + ['polar_5fstereo_5fgrid_5fid_5fgrib1_223',['polar_stereo_grid_id_grib1',['../namespaceip__grid__mod.html#afee73c2f09ea9de43c156dc594ae1df1',1,'ip_grid_mod']]], + ['polar_5fstereo_5fgrid_5fid_5fgrib2_224',['polar_stereo_grid_id_grib2',['../namespaceip__grid__mod.html#a5b3ad320b41791e65966e1bb498e9ae3',1,'ip_grid_mod']]], + ['polar_5fstereo_5fmap_5fjacob_225',['polar_stereo_map_jacob',['../namespaceip__polar__stereo__grid__mod.html#a386933f7e52c348b9d742df423e0e223',1,'ip_polar_stereo_grid_mod']]], + ['polar_5fstereo_5fvect_5frot_226',['polar_stereo_vect_rot',['../namespaceip__polar__stereo__grid__mod.html#abe4d416201e986421a8e325a9b00e462',1,'ip_polar_stereo_grid_mod']]], + ['polates4_227',['polates4',['../interfacespectral__interp__mod_1_1polates4.html',1,'spectral_interp_mod']]], + ['polates4_5fgrib1_228',['polates4_grib1',['../namespacespectral__interp__mod.html#ab9fb87d87f2f9d578a5ade6b512ff366',1,'spectral_interp_mod::polates4_grib1()'],['../interfacespectral__interp__mod_1_1polates4.html#a0be1315db4dce899083176b47b6ea6a4',1,'spectral_interp_mod::polates4::polates4_grib1()']]], + ['polates4_5fgrib2_229',['polates4_grib2',['../namespacespectral__interp__mod.html#a54dfd0ea8368242a1053d64770bd295a',1,'spectral_interp_mod::polates4_grib2()'],['../interfacespectral__interp__mod_1_1polates4.html#a3fdc75851f1f741e715a1c3e1e4d89c9',1,'spectral_interp_mod::polates4::polates4_grib2()']]], + ['polatev4_230',['polatev4',['../interfacespectral__interp__mod_1_1polatev4.html',1,'spectral_interp_mod']]], + ['polatev4_5fgrib1_231',['polatev4_grib1',['../interfacespectral__interp__mod_1_1polatev4.html#a5fa619eb983da3326380e9bafcf49ca8',1,'spectral_interp_mod::polatev4::polatev4_grib1()'],['../namespacespectral__interp__mod.html#af4ce7638750e787dd69c7fe3ff2335cc',1,'spectral_interp_mod::polatev4_grib1()']]], + ['polatev4_5fgrib2_232',['polatev4_grib2',['../interfacespectral__interp__mod_1_1polatev4.html#a9dcbaeb719e3872ad5ad461adde5c98b',1,'spectral_interp_mod::polatev4::polatev4_grib2()'],['../namespacespectral__interp__mod.html#a2f76e9900554d90753ca788c2ddf9ac3',1,'spectral_interp_mod::polatev4_grib2()']]], + ['polfix_5fmod_233',['polfix_mod',['../namespacepolfix__mod.html',1,'']]], + ['polfix_5fmod_2ef90_234',['polfix_mod.F90',['../polfix__mod_8F90.html',1,'']]], + ['polfixs_235',['polfixs',['../namespacepolfix__mod.html#a15df1ba2e1fcad1e9465c4aa3a2ba0d6',1,'polfix_mod']]], + ['polfixv_236',['polfixv',['../namespacepolfix__mod.html#aeefc8f045777f6d962d9ec539ef6007d',1,'polfix_mod']]] +]; diff --git a/search/classes_0.html b/ver-5.1.0/search/classes_0.html similarity index 100% rename from search/classes_0.html rename to ver-5.1.0/search/classes_0.html diff --git a/ver-5.1.0/search/classes_0.js b/ver-5.1.0/search/classes_0.js new file mode 100644 index 00000000..683b64bc --- /dev/null +++ b/ver-5.1.0/search/classes_0.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['gdswzd_394',['gdswzd',['../interfacegdswzd__mod_1_1gdswzd.html',1,'gdswzd_mod']]], + ['gdswzd_5finterface_395',['gdswzd_interface',['../interfaceip__grid__mod_1_1gdswzd__interface.html',1,'ip_grid_mod']]], + ['grib1_5fdescriptor_396',['grib1_descriptor',['../structip__grid__descriptor__mod_1_1grib1__descriptor.html',1,'ip_grid_descriptor_mod']]], + ['grib2_5fdescriptor_397',['grib2_descriptor',['../structip__grid__descriptor__mod_1_1grib2__descriptor.html',1,'ip_grid_descriptor_mod']]] +]; diff --git a/search/classes_1.html b/ver-5.1.0/search/classes_1.html similarity index 100% rename from search/classes_1.html rename to ver-5.1.0/search/classes_1.html diff --git a/ver-5.1.0/search/classes_1.js b/ver-5.1.0/search/classes_1.js new file mode 100644 index 00000000..e97c691d --- /dev/null +++ b/ver-5.1.0/search/classes_1.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['init_5fdescriptor_398',['init_descriptor',['../interfaceip__grid__descriptor__mod_1_1init__descriptor.html',1,'ip_grid_descriptor_mod']]], + ['init_5fgrib1_5finterface_399',['init_grib1_interface',['../interfaceip__grid__mod_1_1init__grib1__interface.html',1,'ip_grid_mod']]], + ['init_5fgrib2_5finterface_400',['init_grib2_interface',['../interfaceip__grid__mod_1_1init__grib2__interface.html',1,'ip_grid_mod']]], + ['init_5fgrid_401',['init_grid',['../interfaceip__grid__factory__mod_1_1init__grid.html',1,'ip_grid_factory_mod']]], + ['interpolate_5fbicubic_402',['interpolate_bicubic',['../interfacebicubic__interp__mod_1_1interpolate__bicubic.html',1,'bicubic_interp_mod']]], + ['interpolate_5fbilinear_403',['interpolate_bilinear',['../interfacebilinear__interp__mod_1_1interpolate__bilinear.html',1,'bilinear_interp_mod']]], + ['interpolate_5fbudget_404',['interpolate_budget',['../interfacebudget__interp__mod_1_1interpolate__budget.html',1,'budget_interp_mod']]], + ['interpolate_5fneighbor_405',['interpolate_neighbor',['../interfaceneighbor__interp__mod_1_1interpolate__neighbor.html',1,'neighbor_interp_mod']]], + ['interpolate_5fneighbor_5fbudget_406',['interpolate_neighbor_budget',['../interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html',1,'neighbor_budget_interp_mod']]], + ['interpolate_5fspectral_407',['interpolate_spectral',['../interfacespectral__interp__mod_1_1interpolate__spectral.html',1,'spectral_interp_mod']]], + ['ip_5fequid_5fcylind_5fgrid_408',['ip_equid_cylind_grid',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html',1,'ip_equid_cylind_grid_mod']]], + ['ip_5fgaussian_5fgrid_409',['ip_gaussian_grid',['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html',1,'ip_gaussian_grid_mod']]], + ['ip_5fgrid_410',['ip_grid',['../structip__grid__mod_1_1ip__grid.html',1,'ip_grid_mod']]], + ['ip_5fgrid_5fdescriptor_411',['ip_grid_descriptor',['../structip__grid__descriptor__mod_1_1ip__grid__descriptor.html',1,'ip_grid_descriptor_mod']]], + ['ip_5flambert_5fconf_5fgrid_412',['ip_lambert_conf_grid',['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html',1,'ip_lambert_conf_grid_mod']]], + ['ip_5fmercator_5fgrid_413',['ip_mercator_grid',['../structip__mercator__grid__mod_1_1ip__mercator__grid.html',1,'ip_mercator_grid_mod']]], + ['ip_5fpolar_5fstereo_5fgrid_414',['ip_polar_stereo_grid',['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html',1,'ip_polar_stereo_grid_mod']]], + ['ip_5frot_5fequid_5fcylind_5fegrid_415',['ip_rot_equid_cylind_egrid',['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html',1,'ip_rot_equid_cylind_egrid_mod']]], + ['ip_5frot_5fequid_5fcylind_5fgrid_416',['ip_rot_equid_cylind_grid',['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html',1,'ip_rot_equid_cylind_grid_mod']]], + ['ip_5fstation_5fpoints_5fgrid_417',['ip_station_points_grid',['../structip__station__points__grid__mod_1_1ip__station__points__grid.html',1,'ip_station_points_grid_mod']]], + ['ipolates_418',['ipolates',['../interfaceipolates__mod_1_1ipolates.html',1,'ipolates_mod']]], + ['ipolatev_419',['ipolatev',['../interfaceipolatev__mod_1_1ipolatev.html',1,'ipolatev_mod']]] +]; diff --git a/search/classes_2.html b/ver-5.1.0/search/classes_2.html similarity index 100% rename from search/classes_2.html rename to ver-5.1.0/search/classes_2.html diff --git a/ver-5.1.0/search/classes_2.js b/ver-5.1.0/search/classes_2.js new file mode 100644 index 00000000..4710f4f0 --- /dev/null +++ b/ver-5.1.0/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['operator_28_3d_3d_29_420',['operator(==)',['../interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html',1,'ip_grid_descriptor_mod::operator(==)'],['../interfaceip__grid__mod_1_1operator_07_0a_0a_08.html',1,'ip_grid_mod::operator(==)']]] +]; diff --git a/search/classes_3.html b/ver-5.1.0/search/classes_3.html similarity index 100% rename from search/classes_3.html rename to ver-5.1.0/search/classes_3.html diff --git a/ver-5.1.0/search/classes_3.js b/ver-5.1.0/search/classes_3.js new file mode 100644 index 00000000..37aac054 --- /dev/null +++ b/ver-5.1.0/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['polates4_421',['polates4',['../interfacespectral__interp__mod_1_1polates4.html',1,'spectral_interp_mod']]], + ['polatev4_422',['polatev4',['../interfacespectral__interp__mod_1_1polatev4.html',1,'spectral_interp_mod']]] +]; diff --git a/ver-5.1.0/search/close.svg b/ver-5.1.0/search/close.svg new file mode 100644 index 00000000..a933eea1 --- /dev/null +++ b/ver-5.1.0/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/search/files_0.html b/ver-5.1.0/search/files_0.html similarity index 100% rename from search/files_0.html rename to ver-5.1.0/search/files_0.html diff --git a/ver-5.1.0/search/files_0.js b/ver-5.1.0/search/files_0.js new file mode 100644 index 00000000..3928635b --- /dev/null +++ b/ver-5.1.0/search/files_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['bicubic_5finterp_5fmod_2ef90_450',['bicubic_interp_mod.F90',['../bicubic__interp__mod_8F90.html',1,'']]], + ['bilinear_5finterp_5fmod_2ef90_451',['bilinear_interp_mod.F90',['../bilinear__interp__mod_8F90.html',1,'']]], + ['budget_5finterp_5fmod_2ef90_452',['budget_interp_mod.F90',['../budget__interp__mod_8F90.html',1,'']]] +]; diff --git a/search/files_1.html b/ver-5.1.0/search/files_1.html similarity index 100% rename from search/files_1.html rename to ver-5.1.0/search/files_1.html diff --git a/ver-5.1.0/search/files_1.js b/ver-5.1.0/search/files_1.js new file mode 100644 index 00000000..c8419619 --- /dev/null +++ b/ver-5.1.0/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['earth_5fradius_5fmod_2ef90_453',['earth_radius_mod.F90',['../earth__radius__mod_8F90.html',1,'']]] +]; diff --git a/search/files_2.html b/ver-5.1.0/search/files_2.html similarity index 100% rename from search/files_2.html rename to ver-5.1.0/search/files_2.html diff --git a/ver-5.1.0/search/files_2.js b/ver-5.1.0/search/files_2.js new file mode 100644 index 00000000..859cb8a3 --- /dev/null +++ b/ver-5.1.0/search/files_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fftpack_2ef_454',['fftpack.F',['../fftpack_8F.html',1,'']]] +]; diff --git a/search/files_3.html b/ver-5.1.0/search/files_3.html similarity index 100% rename from search/files_3.html rename to ver-5.1.0/search/files_3.html diff --git a/ver-5.1.0/search/files_3.js b/ver-5.1.0/search/files_3.js new file mode 100644 index 00000000..93599ee8 --- /dev/null +++ b/ver-5.1.0/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gdswzd_5fc_2ef90_455',['gdswzd_c.F90',['../gdswzd__c_8F90.html',1,'']]], + ['gdswzd_5fmod_2ef90_456',['gdswzd_mod.F90',['../gdswzd__mod_8F90.html',1,'']]] +]; diff --git a/search/files_4.html b/ver-5.1.0/search/files_4.html similarity index 100% rename from search/files_4.html rename to ver-5.1.0/search/files_4.html diff --git a/ver-5.1.0/search/files_4.js b/ver-5.1.0/search/files_4.js new file mode 100644 index 00000000..5e9b50ff --- /dev/null +++ b/ver-5.1.0/search/files_4.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['ip_5fconstants_5fmod_2ef90_457',['ip_constants_mod.F90',['../ip__constants__mod_8F90.html',1,'']]], + ['ip_5fequid_5fcylind_5fgrid_5fmod_2ef90_458',['ip_equid_cylind_grid_mod.F90',['../ip__equid__cylind__grid__mod_8F90.html',1,'']]], + ['ip_5fgaussian_5fgrid_5fmod_2ef90_459',['ip_gaussian_grid_mod.F90',['../ip__gaussian__grid__mod_8F90.html',1,'']]], + ['ip_5fgrid_5fdescriptor_5fmod_2ef90_460',['ip_grid_descriptor_mod.F90',['../ip__grid__descriptor__mod_8F90.html',1,'']]], + ['ip_5fgrid_5ffactory_5fmod_2ef90_461',['ip_grid_factory_mod.F90',['../ip__grid__factory__mod_8F90.html',1,'']]], + ['ip_5fgrid_5fmod_2ef90_462',['ip_grid_mod.F90',['../ip__grid__mod_8F90.html',1,'']]], + ['ip_5fgrids_5fmod_2ef90_463',['ip_grids_mod.F90',['../ip__grids__mod_8F90.html',1,'']]], + ['ip_5finterpolators_5fmod_2ef90_464',['ip_interpolators_mod.F90',['../ip__interpolators__mod_8F90.html',1,'']]], + ['ip_5flambert_5fconf_5fgrid_5fmod_2ef90_465',['ip_lambert_conf_grid_mod.F90',['../ip__lambert__conf__grid__mod_8F90.html',1,'']]], + ['ip_5fmercator_5fgrid_5fmod_2ef90_466',['ip_mercator_grid_mod.F90',['../ip__mercator__grid__mod_8F90.html',1,'']]], + ['ip_5fmod_2ef90_467',['ip_mod.F90',['../ip__mod_8F90.html',1,'']]], + ['ip_5fpolar_5fstereo_5fgrid_5fmod_2ef90_468',['ip_polar_stereo_grid_mod.F90',['../ip__polar__stereo__grid__mod_8F90.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fegrid_5fmod_2ef90_469',['ip_rot_equid_cylind_egrid_mod.F90',['../ip__rot__equid__cylind__egrid__mod_8F90.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fgrid_5fmod_2ef90_470',['ip_rot_equid_cylind_grid_mod.F90',['../ip__rot__equid__cylind__grid__mod_8F90.html',1,'']]], + ['ip_5fstation_5fpoints_5fgrid_5fmod_2ef90_471',['ip_station_points_grid_mod.F90',['../ip__station__points__grid__mod_8F90.html',1,'']]], + ['iplib_5f4_2eh_472',['iplib_4.h',['../iplib__4_8h.html',1,'']]], + ['iplib_5f8_2eh_473',['iplib_8.h',['../iplib__8_8h.html',1,'']]], + ['iplib_5fd_2eh_474',['iplib_d.h',['../iplib__d_8h.html',1,'']]], + ['ipolates_2ef90_475',['ipolates.F90',['../ipolates_8F90.html',1,'']]], + ['ipolatev_2ef90_476',['ipolatev.F90',['../ipolatev_8F90.html',1,'']]], + ['ipxetas_2ef90_477',['ipxetas.F90',['../ipxetas_8F90.html',1,'']]], + ['ipxwafs_2ef90_478',['ipxwafs.F90',['../ipxwafs_8F90.html',1,'']]], + ['ipxwafs2_2ef90_479',['ipxwafs2.F90',['../ipxwafs2_8F90.html',1,'']]], + ['ipxwafs3_2ef90_480',['ipxwafs3.F90',['../ipxwafs3_8F90.html',1,'']]] +]; diff --git a/search/files_5.html b/ver-5.1.0/search/files_5.html similarity index 100% rename from search/files_5.html rename to ver-5.1.0/search/files_5.html diff --git a/ver-5.1.0/search/files_5.js b/ver-5.1.0/search/files_5.js new file mode 100644 index 00000000..42ab7f1d --- /dev/null +++ b/ver-5.1.0/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['movect_2ef90_481',['movect.F90',['../movect_8F90.html',1,'']]] +]; diff --git a/search/files_6.html b/ver-5.1.0/search/files_6.html similarity index 100% rename from search/files_6.html rename to ver-5.1.0/search/files_6.html diff --git a/ver-5.1.0/search/files_6.js b/ver-5.1.0/search/files_6.js new file mode 100644 index 00000000..85fe4d56 --- /dev/null +++ b/ver-5.1.0/search/files_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['ncpus_2ef_482',['ncpus.F',['../ncpus_8F.html',1,'']]], + ['neighbor_5fbudget_5finterp_5fmod_2ef90_483',['neighbor_budget_interp_mod.F90',['../neighbor__budget__interp__mod_8F90.html',1,'']]], + ['neighbor_5finterp_5fmod_2ef90_484',['neighbor_interp_mod.F90',['../neighbor__interp__mod_8F90.html',1,'']]] +]; diff --git a/search/files_7.html b/ver-5.1.0/search/files_7.html similarity index 100% rename from search/files_7.html rename to ver-5.1.0/search/files_7.html diff --git a/ver-5.1.0/search/files_7.js b/ver-5.1.0/search/files_7.js new file mode 100644 index 00000000..13b605ea --- /dev/null +++ b/ver-5.1.0/search/files_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['polfix_5fmod_2ef90_485',['polfix_mod.F90',['../polfix__mod_8F90.html',1,'']]] +]; diff --git a/search/files_8.html b/ver-5.1.0/search/files_8.html similarity index 100% rename from search/files_8.html rename to ver-5.1.0/search/files_8.html diff --git a/ver-5.1.0/search/files_8.js b/ver-5.1.0/search/files_8.js new file mode 100644 index 00000000..0b230cdb --- /dev/null +++ b/ver-5.1.0/search/files_8.js @@ -0,0 +1,56 @@ +var searchData= +[ + ['spanaly_2ef_486',['spanaly.f',['../spanaly_8f.html',1,'']]], + ['spdz2uv_2ef_487',['spdz2uv.f',['../spdz2uv_8f.html',1,'']]], + ['spectral_5finterp_5fmod_2ef90_488',['spectral_interp_mod.F90',['../spectral__interp__mod_8F90.html',1,'']]], + ['speps_2ef_489',['speps.f',['../speps_8f.html',1,'']]], + ['spfft_2ef_490',['spfft.f',['../spfft_8f.html',1,'']]], + ['spfft1_2ef_491',['spfft1.f',['../spfft1_8f.html',1,'']]], + ['spffte_2ef_492',['spffte.f',['../spffte_8f.html',1,'']]], + ['spfftpt_2ef_493',['spfftpt.f',['../spfftpt_8f.html',1,'']]], + ['spgradq_2ef_494',['spgradq.f',['../spgradq_8f.html',1,'']]], + ['spgradx_2ef_495',['spgradx.f',['../spgradx_8f.html',1,'']]], + ['spgrady_2ef_496',['spgrady.f',['../spgrady_8f.html',1,'']]], + ['splaplac_2ef_497',['splaplac.f',['../splaplac_8f.html',1,'']]], + ['splat_2ef_498',['splat.F',['../splat_8F.html',1,'']]], + ['splegend_2ef_499',['splegend.f',['../splegend_8f.html',1,'']]], + ['sppad_2ef_500',['sppad.f',['../sppad_8f.html',1,'']]], + ['spsynth_2ef_501',['spsynth.f',['../spsynth_8f.html',1,'']]], + ['sptez_2ef_502',['sptez.f',['../sptez_8f.html',1,'']]], + ['sptezd_2ef_503',['sptezd.f',['../sptezd_8f.html',1,'']]], + ['sptezm_2ef_504',['sptezm.f',['../sptezm_8f.html',1,'']]], + ['sptezmd_2ef_505',['sptezmd.f',['../sptezmd_8f.html',1,'']]], + ['sptezmv_2ef_506',['sptezmv.f',['../sptezmv_8f.html',1,'']]], + ['sptezv_2ef_507',['sptezv.f',['../sptezv_8f.html',1,'']]], + ['sptgpm_2ef_508',['sptgpm.f',['../sptgpm_8f.html',1,'']]], + ['sptgpmd_2ef_509',['sptgpmd.f',['../sptgpmd_8f.html',1,'']]], + ['sptgpmv_2ef_510',['sptgpmv.f',['../sptgpmv_8f.html',1,'']]], + ['sptgps_2ef_511',['sptgps.f',['../sptgps_8f.html',1,'']]], + ['sptgpsd_2ef_512',['sptgpsd.f',['../sptgpsd_8f.html',1,'']]], + ['sptgpsv_2ef_513',['sptgpsv.f',['../sptgpsv_8f.html',1,'']]], + ['sptgpt_2ef_514',['sptgpt.f',['../sptgpt_8f.html',1,'']]], + ['sptgptd_2ef_515',['sptgptd.f',['../sptgptd_8f.html',1,'']]], + ['sptgptsd_2ef_516',['sptgptsd.f',['../sptgptsd_8f.html',1,'']]], + ['sptgptv_2ef_517',['sptgptv.f',['../sptgptv_8f.html',1,'']]], + ['sptgptvd_2ef_518',['sptgptvd.f',['../sptgptvd_8f.html',1,'']]], + ['sptran_2ef_519',['sptran.f',['../sptran_8f.html',1,'']]], + ['sptrand_2ef_520',['sptrand.f',['../sptrand_8f.html',1,'']]], + ['sptranf_2ef_521',['sptranf.f',['../sptranf_8f.html',1,'']]], + ['sptranf0_2ef_522',['sptranf0.f',['../sptranf0_8f.html',1,'']]], + ['sptranf1_2ef_523',['sptranf1.f',['../sptranf1_8f.html',1,'']]], + ['sptranfv_2ef_524',['sptranfv.f',['../sptranfv_8f.html',1,'']]], + ['sptranv_2ef_525',['sptranv.f',['../sptranv_8f.html',1,'']]], + ['sptrun_2ef_526',['sptrun.f',['../sptrun_8f.html',1,'']]], + ['sptrund_2ef_527',['sptrund.f',['../sptrund_8f.html',1,'']]], + ['sptrung_2ef_528',['sptrung.f',['../sptrung_8f.html',1,'']]], + ['sptrungv_2ef_529',['sptrungv.f',['../sptrungv_8f.html',1,'']]], + ['sptrunl_2ef_530',['sptrunl.f',['../sptrunl_8f.html',1,'']]], + ['sptrunm_2ef_531',['sptrunm.f',['../sptrunm_8f.html',1,'']]], + ['sptrunmv_2ef_532',['sptrunmv.f',['../sptrunmv_8f.html',1,'']]], + ['sptruns_2ef_533',['sptruns.f',['../sptruns_8f.html',1,'']]], + ['sptrunsv_2ef_534',['sptrunsv.f',['../sptrunsv_8f.html',1,'']]], + ['sptrunv_2ef_535',['sptrunv.f',['../sptrunv_8f.html',1,'']]], + ['spuv2dz_2ef_536',['spuv2dz.f',['../spuv2dz_8f.html',1,'']]], + ['spvar_2ef_537',['spvar.f',['../spvar_8f.html',1,'']]], + ['spwget_2ef_538',['spwget.f',['../spwget_8f.html',1,'']]] +]; diff --git a/search/functions_0.html b/ver-5.1.0/search/functions_0.html similarity index 100% rename from search/functions_0.html rename to ver-5.1.0/search/functions_0.html diff --git a/ver-5.1.0/search/functions_0.js b/ver-5.1.0/search/functions_0.js new file mode 100644 index 00000000..cf1d6e85 --- /dev/null +++ b/ver-5.1.0/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['csfft_539',['csfft',['../fftpack_8F.html#ad261879c88a7f040e43f1549e65f36e5',1,'fftpack.F']]] +]; diff --git a/search/functions_1.html b/ver-5.1.0/search/functions_1.html similarity index 100% rename from search/functions_1.html rename to ver-5.1.0/search/functions_1.html diff --git a/ver-5.1.0/search/functions_1.js b/ver-5.1.0/search/functions_1.js new file mode 100644 index 00000000..839706fd --- /dev/null +++ b/ver-5.1.0/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dcrft_540',['dcrft',['../fftpack_8F.html#a713ef445886ad8dc8b16692c6075d225',1,'fftpack.F']]], + ['drcft_541',['drcft',['../fftpack_8F.html#a55b05419c0d3bb0595b34c8cacf93be8',1,'fftpack.F']]] +]; diff --git a/search/functions_2.html b/ver-5.1.0/search/functions_2.html similarity index 100% rename from search/functions_2.html rename to ver-5.1.0/search/functions_2.html diff --git a/ver-5.1.0/search/functions_2.js b/ver-5.1.0/search/functions_2.js new file mode 100644 index 00000000..d1cf929b --- /dev/null +++ b/ver-5.1.0/search/functions_2.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['earth_5fradius_542',['earth_radius',['../namespaceearth__radius__mod.html#a810f60db1a1faff0d6f59937a8207a54',1,'earth_radius_mod']]], + ['equid_5fcylind_5fgrid_5farea_543',['equid_cylind_grid_area',['../namespaceip__equid__cylind__grid__mod.html#a5a70b82abdce76bef22cdeaa96a986c2',1,'ip_equid_cylind_grid_mod']]], + ['equid_5fcylind_5fmap_5fjacob_544',['equid_cylind_map_jacob',['../namespaceip__equid__cylind__grid__mod.html#a039501b44cd3ad4409983e193d509afd',1,'ip_equid_cylind_grid_mod']]], + ['equid_5fcylind_5fvect_5frot_545',['equid_cylind_vect_rot',['../namespaceip__equid__cylind__grid__mod.html#ade88ecea1c0bb4b4d5b0d08f8482268d',1,'ip_equid_cylind_grid_mod']]] +]; diff --git a/search/functions_3.html b/ver-5.1.0/search/functions_3.html similarity index 100% rename from search/functions_3.html rename to ver-5.1.0/search/functions_3.html diff --git a/ver-5.1.0/search/functions_3.js b/ver-5.1.0/search/functions_3.js new file mode 100644 index 00000000..5b55ebf3 --- /dev/null +++ b/ver-5.1.0/search/functions_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['field_5fpos_546',['field_pos',['../structip__grid__mod_1_1ip__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179',1,'ip_grid_mod::ip_grid::field_pos()'],['../namespaceip__grid__mod.html#a63572318d74ec94c20c5ccd6ded2d442',1,'ip_grid_mod::field_pos()']]] +]; diff --git a/search/functions_4.html b/ver-5.1.0/search/functions_4.html similarity index 100% rename from search/functions_4.html rename to ver-5.1.0/search/functions_4.html diff --git a/ver-5.1.0/search/functions_4.js b/ver-5.1.0/search/functions_4.js new file mode 100644 index 00000000..9a05b688 --- /dev/null +++ b/ver-5.1.0/search/functions_4.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['gaussian_5fgrid_5farea_547',['gaussian_grid_area',['../namespaceip__gaussian__grid__mod.html#ab602a870a477c7ab77438700af4e7780',1,'ip_gaussian_grid_mod']]], + ['gaussian_5fmap_5fjacob_548',['gaussian_map_jacob',['../namespaceip__gaussian__grid__mod.html#adca7b03877c6a7048ff1716a95e0bd9d',1,'ip_gaussian_grid_mod']]], + ['gaussian_5fvect_5frot_549',['gaussian_vect_rot',['../namespaceip__gaussian__grid__mod.html#ac72eec96d0012fbe0f0ec7c520f40dad',1,'ip_gaussian_grid_mod']]], + ['gdswzd_550',['gdswzd',['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a7ce52d987d2bd2442053042c03f96885',1,'ip_gaussian_grid_mod::ip_gaussian_grid::gdswzd()'],['../iplib__d_8h.html#ac919f31612096fd6a7547a425ab3d38e',1,'gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_d.h'],['../iplib__8_8h.html#af41ad9a4b34f78d182a68b3d72b9bdf4',1,'gdswzd(long igdtnum, long *igdtmpl, long igdtlen, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_8.h'],['../iplib__4_8h.html#a44daefd49c37e9bc59933d98e56efa53',1,'gdswzd(int igdtnum, int *igdtmpl, int igdtlen, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area): iplib_4.h'],['../structip__station__points__grid__mod_1_1ip__station__points__grid.html#a9fff8b24553d11177b8c1ee38bfbd91f',1,'ip_station_points_grid_mod::ip_station_points_grid::gdswzd()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a0f14a253b51bcb0633cd00d32d5130a4',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::gdswzd()'],['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#aa1023c3efed20a990b75f937bbcac6a3',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::gdswzd()'],['../structip__grid__mod_1_1ip__grid.html#a5fb366fb577a90cc09f21269b90ac080',1,'ip_grid_mod::ip_grid::gdswzd()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a62c8147f8845d75e8f52c7524a74c780',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::gdswzd()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9e97b7352e67dd629f622f292cf0ca21',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::gdswzd()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a940420aa99e0fbe51a976f9d0c343f1a',1,'ip_mercator_grid_mod::ip_mercator_grid::gdswzd()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#aa69861340bc268b91a1076048ed489fc',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::gdswzd()']]], + ['gdswzd_5f1d_5farray_551',['gdswzd_1d_array',['../interfacegdswzd__mod_1_1gdswzd.html#afaf35e3ce949dd2ce3d72dd3f06d4e3b',1,'gdswzd_mod::gdswzd::gdswzd_1d_array()'],['../namespacegdswzd__mod.html#ac304e2b046eccc701e24827c81107e76',1,'gdswzd_mod::gdswzd_1d_array()']]], + ['gdswzd_5f2d_5farray_552',['gdswzd_2d_array',['../interfacegdswzd__mod_1_1gdswzd.html#a8b60240eefdc297eacf90c348b529d31',1,'gdswzd_mod::gdswzd::gdswzd_2d_array()'],['../namespacegdswzd__mod.html#acdf970e498e9317522fbdfb690b86e25',1,'gdswzd_mod::gdswzd_2d_array(IGDTNUM, IGDTMPL, IGDTLEN, IOPT, NPTS, FILL, XPTS, YPTS, RLON, RLAT, NRET, CROT, SROT, XLON, XLAT, YLON, YLAT, AREA)']]], + ['gdswzd_5f2d_5farray_5fgrib1_553',['gdswzd_2d_array_grib1',['../namespacegdswzd__mod.html#aa032a55281b18e208630a730679958f4',1,'gdswzd_mod::gdswzd_2d_array_grib1()'],['../interfacegdswzd__mod_1_1gdswzd.html#a7c66a7ede2b644f7e366df9f70b9f0a5',1,'gdswzd_mod::gdswzd::gdswzd_2d_array_grib1()']]], + ['gdswzd_5fc_554',['gdswzd_c',['../namespacegdswzd__c__mod.html#ae3026381f7f41561507c97c9125d24e4',1,'gdswzd_c_mod']]], + ['gdswzd_5fc_5fgrib1_555',['gdswzd_c_grib1',['../namespacegdswzd__c__mod.html#a06861f1403edf106bb3b399c39981504',1,'gdswzd_c_mod']]], + ['gdswzd_5fequid_5fcylind_556',['gdswzd_equid_cylind',['../namespaceip__equid__cylind__grid__mod.html#af20f6f308b5a33211c677b894e41b727',1,'ip_equid_cylind_grid_mod']]], + ['gdswzd_5fgaussian_557',['gdswzd_gaussian',['../namespaceip__gaussian__grid__mod.html#a6eefd9270b3f9bb2c59a77bea4ecf1b9',1,'ip_gaussian_grid_mod']]], + ['gdswzd_5fgrib1_558',['gdswzd_grib1',['../interfacegdswzd__mod_1_1gdswzd.html#a65b95791813ffd5afbfba9d4cb67676a',1,'gdswzd_mod::gdswzd::gdswzd_grib1()'],['../namespacegdswzd__mod.html#a133e040fac8dd56e607b8e3fb6a58c37',1,'gdswzd_mod::gdswzd_grib1()'],['../iplib__4_8h.html#a7f2f96041c0d42926e14cb0f40f336e1',1,'gdswzd_grib1(int *kgds, int iopt, int npts, float fill, float *xpts, float *ypts, float *rlon, float *rlat, int *nret, float *crot, float *srot, float *xlon, float *xlat, float *ylon, float *ylat, float *area): iplib_4.h'],['../iplib__8_8h.html#ab8e46b623c66911913f66d314c15cc93',1,'gdswzd_grib1(long *kgds, long iopt, long npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, long *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_8.h'],['../iplib__d_8h.html#ac33340cba2ac7b42dd9b9116fc28d691',1,'gdswzd_grib1(int *kgds, int iopt, int npts, double fill, double *xpts, double *ypts, double *rlon, double *rlat, int *nret, double *crot, double *srot, double *xlon, double *xlat, double *ylon, double *ylat, double *area): iplib_d.h']]], + ['gdswzd_5fgrid_559',['gdswzd_grid',['../namespacegdswzd__mod.html#a584d2bddbc6d857b80cfac5e3b288d45',1,'gdswzd_mod::gdswzd_grid()'],['../interfacegdswzd__mod_1_1gdswzd.html#abfe059339c6c9f05fd4eadb5d70aec16',1,'gdswzd_mod::gdswzd::gdswzd_grid()']]], + ['gdswzd_5finterface_560',['gdswzd_interface',['../interfaceip__grid__mod_1_1gdswzd__interface.html#af34c5d9da54a36322bb1a141217c6369',1,'ip_grid_mod::gdswzd_interface']]], + ['gdswzd_5flambert_5fconf_561',['gdswzd_lambert_conf',['../namespaceip__lambert__conf__grid__mod.html#a5ebb9e4f1bd58caa254771b305c94f71',1,'ip_lambert_conf_grid_mod']]], + ['gdswzd_5fmercator_562',['gdswzd_mercator',['../namespaceip__mercator__grid__mod.html#acc39017fa51125972ab8e755e16d339e',1,'ip_mercator_grid_mod']]], + ['gdswzd_5fpolar_5fstereo_563',['gdswzd_polar_stereo',['../namespaceip__polar__stereo__grid__mod.html#ae2694d90ab514a131e083dfba3b173c5',1,'ip_polar_stereo_grid_mod']]], + ['gdswzd_5frot_5fequid_5fcylind_564',['gdswzd_rot_equid_cylind',['../namespaceip__rot__equid__cylind__grid__mod.html#a55c153201e15205d3f75e4ffb717cc0b',1,'ip_rot_equid_cylind_grid_mod']]], + ['gdswzd_5frot_5fequid_5fcylind_5fegrid_565',['gdswzd_rot_equid_cylind_egrid',['../namespaceip__rot__equid__cylind__egrid__mod.html#a9ad11a599fc0bdc4a9ece86a3b1cc399',1,'ip_rot_equid_cylind_egrid_mod']]], + ['gdswzd_5fscalar_566',['gdswzd_scalar',['../interfacegdswzd__mod_1_1gdswzd.html#a1fc841ec08d39463b3f5f36eac0068cd',1,'gdswzd_mod::gdswzd::gdswzd_scalar()'],['../namespacegdswzd__mod.html#aba3235c5bc5797e72b9a6a8a587b8861',1,'gdswzd_mod::gdswzd_scalar()']]], + ['gdswzd_5fstation_5fpoints_567',['gdswzd_station_points',['../namespaceip__station__points__grid__mod.html#a8da297b45242279a497dbd7062a33197',1,'ip_station_points_grid_mod']]] +]; diff --git a/search/functions_5.html b/ver-5.1.0/search/functions_5.html similarity index 100% rename from search/functions_5.html rename to ver-5.1.0/search/functions_5.html diff --git a/ver-5.1.0/search/functions_5.js b/ver-5.1.0/search/functions_5.js new file mode 100644 index 00000000..1a96bb09 --- /dev/null +++ b/ver-5.1.0/search/functions_5.js @@ -0,0 +1,44 @@ +var searchData= +[ + ['init_568',['init',['../structip__grid__mod_1_1ip__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c',1,'ip_grid_mod::ip_grid']]], + ['init_5fgrib1_569',['init_grib1',['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a68fb7543888cc76885560709184e7d70',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib1()'],['../namespaceip__station__points__grid__mod.html#a4b28ebf2b4fe826c96af69db28e0a1ff',1,'ip_station_points_grid_mod::init_grib1()'],['../namespaceip__rot__equid__cylind__grid__mod.html#acb27dfdc6f03dea897d509910365afee',1,'ip_rot_equid_cylind_grid_mod::init_grib1()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#aa65616b97df9c89893161ff802e16eab',1,'ip_rot_equid_cylind_egrid_mod::init_grib1()'],['../namespaceip__polar__stereo__grid__mod.html#a6ed76f58f30993cd7be84b7e03cf4d6f',1,'ip_polar_stereo_grid_mod::init_grib1()'],['../namespaceip__mercator__grid__mod.html#a4125dba8b09e9b69933e224b00f4758d',1,'ip_mercator_grid_mod::init_grib1()'],['../namespaceip__lambert__conf__grid__mod.html#a5544708e893ffcfbe7d958fdec700eea',1,'ip_lambert_conf_grid_mod::init_grib1()'],['../namespaceip__gaussian__grid__mod.html#a8fe2ee732a3a2db4891a6431787a0b01',1,'ip_gaussian_grid_mod::init_grib1()'],['../namespaceip__equid__cylind__grid__mod.html#a3d0132823d27b60835ebb59ead173477',1,'ip_equid_cylind_grid_mod::init_grib1()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#afd3658924783d5dbbd3fe5f07d5b60a7',1,'ip_gaussian_grid_mod::ip_gaussian_grid::init_grib1()'],['../structip__grid__mod_1_1ip__grid.html#a5a2c16279eb73a0c54ae0a1586d5b806',1,'ip_grid_mod::ip_grid::init_grib1()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a35dd86b4a9017f5b03a0a6a01eb4d370',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib1()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a3ae3bbb47f4c03c36404a2b35014d65c',1,'ip_mercator_grid_mod::ip_mercator_grid::init_grib1()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ae2a5a7c08e4578f3d0ff6b85e5a14cce',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib1()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ab9a85830bfd06183a8df73726f62217a',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib1()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a9942c787bda2e118f1355476670edfca',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib1()'],['../structip__station__points__grid__mod_1_1ip__station__points__grid.html#aa5ec2cbc9bf0dadf20a226e0afeb3d32',1,'ip_station_points_grid_mod::ip_station_points_grid::init_grib1()']]], + ['init_5fgrib1_5fdescriptor_570',['init_grib1_descriptor',['../interfaceip__grid__descriptor__mod_1_1init__descriptor.html#a3b5b267aa7a17a4615dcc0cb4e590f6e',1,'ip_grid_descriptor_mod::init_descriptor::init_grib1_descriptor()'],['../namespaceip__grid__descriptor__mod.html#aa00884a7fca018535eaf0c2ebe26bc98',1,'ip_grid_descriptor_mod::init_grib1_descriptor()']]], + ['init_5fgrib1_5finterface_571',['init_grib1_interface',['../interfaceip__grid__mod_1_1init__grib1__interface.html#a47e255b76f02fe58a1aebdadcc5894eb',1,'ip_grid_mod::init_grib1_interface']]], + ['init_5fgrib2_572',['init_grib2',['../namespaceip__gaussian__grid__mod.html#ae048ac033628515113b11b8c7364e0c2',1,'ip_gaussian_grid_mod::init_grib2()'],['../structip__station__points__grid__mod_1_1ip__station__points__grid.html#a69fac68e7a40d5c3106a47bf1851891e',1,'ip_station_points_grid_mod::ip_station_points_grid::init_grib2()'],['../structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a30ae580d169972e8d68c3d97ab3b2634',1,'ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib2()'],['../structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#adda32463a76ad97ac35b01f1ac693fa4',1,'ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib2()'],['../structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9622ce9892084b52303f27722572b87c',1,'ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib2()'],['../structip__mercator__grid__mod_1_1ip__mercator__grid.html#a505b0114c7ff5fbb58c4e7ce5ccde3f0',1,'ip_mercator_grid_mod::ip_mercator_grid::init_grib2()'],['../structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a64129413df8ea478ab1360fd1a274e9a',1,'ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib2()'],['../structip__grid__mod_1_1ip__grid.html#ad13e0ad8d616e1839ced388826fefee9',1,'ip_grid_mod::ip_grid::init_grib2()'],['../structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a378b72a1b6090acb90a36385ab9eda5a',1,'ip_gaussian_grid_mod::ip_gaussian_grid::init_grib2()'],['../structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a8dd212953e754964770fa1c3d4bcd3db',1,'ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib2()'],['../namespaceip__equid__cylind__grid__mod.html#a39d24c9468ecb7effd16972fd72e088a',1,'ip_equid_cylind_grid_mod::init_grib2()'],['../namespaceip__lambert__conf__grid__mod.html#acb0339a9fff4fff6c2017d37f8bed0cf',1,'ip_lambert_conf_grid_mod::init_grib2()'],['../namespaceip__mercator__grid__mod.html#aad3b6fef6ee74b8df984c0159ff29c82',1,'ip_mercator_grid_mod::init_grib2()'],['../namespaceip__polar__stereo__grid__mod.html#a5210b986366b503683ae966519d501e7',1,'ip_polar_stereo_grid_mod::init_grib2()'],['../namespaceip__rot__equid__cylind__egrid__mod.html#af3cbc17f27800bc67135feacb2c1c3e0',1,'ip_rot_equid_cylind_egrid_mod::init_grib2()'],['../namespaceip__rot__equid__cylind__grid__mod.html#add3c6c1dad5748b452d291df6619867d',1,'ip_rot_equid_cylind_grid_mod::init_grib2()'],['../namespaceip__station__points__grid__mod.html#ad17e6d245295803b62b146be984f874d',1,'ip_station_points_grid_mod::init_grib2()']]], + ['init_5fgrib2_5fdefault_573',['init_grib2_default',['../namespaceip__rot__equid__cylind__grid__mod.html#a9ade5de892a935c3b62c1860b719ce74',1,'ip_rot_equid_cylind_grid_mod']]], + ['init_5fgrib2_5fdescriptor_574',['init_grib2_descriptor',['../namespaceip__grid__descriptor__mod.html#a143ac06a2a20697d01606a259213b451',1,'ip_grid_descriptor_mod::init_grib2_descriptor()'],['../interfaceip__grid__descriptor__mod_1_1init__descriptor.html#a6702c4bf3a3d914e5cd2fce8fba4f95c',1,'ip_grid_descriptor_mod::init_descriptor::init_grib2_descriptor()']]], + ['init_5fgrib2_5finterface_575',['init_grib2_interface',['../interfaceip__grid__mod_1_1init__grib2__interface.html#a25dcec4470effb9b20dfc7981c21ec6c',1,'ip_grid_mod::init_grib2_interface']]], + ['init_5fgrib2_5fncep_5fpost_576',['init_grib2_ncep_post',['../namespaceip__rot__equid__cylind__grid__mod.html#a74abf723e815f9ff196e6d0174fd449b',1,'ip_rot_equid_cylind_grid_mod']]], + ['init_5fgrid_5fgeneric_577',['init_grid_generic',['../namespaceip__grid__factory__mod.html#a2d2ea07d353bae8b057471aa99b58e46',1,'ip_grid_factory_mod::init_grid_generic()'],['../interfaceip__grid__factory__mod_1_1init__grid.html#a3fbbec3ddc7dfd918c2abc02e7a4cd72',1,'ip_grid_factory_mod::init_grid::init_grid_generic()']]], + ['init_5fgrid_5fgrib1_578',['init_grid_grib1',['../namespaceip__grid__factory__mod.html#ad8906ed6fe52c2426c0ff09ce50b6fc5',1,'ip_grid_factory_mod']]], + ['init_5fgrid_5fgrib2_579',['init_grid_grib2',['../namespaceip__grid__factory__mod.html#aa187dc8dbd1d004a51cc0e9826ffa225',1,'ip_grid_factory_mod']]], + ['interpolate_5fbicubic_5fscalar_580',['interpolate_bicubic_scalar',['../namespacebicubic__interp__mod.html#a54a442e47f1be9511c1684a337d7e2d1',1,'bicubic_interp_mod::interpolate_bicubic_scalar()'],['../interfacebicubic__interp__mod_1_1interpolate__bicubic.html#acbfecc99184cf9ae71b2c9f79c7d4077',1,'bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_scalar()']]], + ['interpolate_5fbicubic_5fvector_581',['interpolate_bicubic_vector',['../namespacebicubic__interp__mod.html#a9d27db7d350fc2699aaf5057c3b53d16',1,'bicubic_interp_mod::interpolate_bicubic_vector()'],['../interfacebicubic__interp__mod_1_1interpolate__bicubic.html#aac45c15e1c9d76158d72e62ccaca915b',1,'bicubic_interp_mod::interpolate_bicubic::interpolate_bicubic_vector()']]], + ['interpolate_5fbilinear_5fscalar_582',['interpolate_bilinear_scalar',['../namespacebilinear__interp__mod.html#a34d2eea4682104097dccf3e7ab6a9398',1,'bilinear_interp_mod::interpolate_bilinear_scalar()'],['../interfacebilinear__interp__mod_1_1interpolate__bilinear.html#a3493cf5bc04aa4551ffd4c314ef09a65',1,'bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_scalar()']]], + ['interpolate_5fbilinear_5fvector_583',['interpolate_bilinear_vector',['../namespacebilinear__interp__mod.html#abc218f8774d2af09299eb299d6f38e04',1,'bilinear_interp_mod::interpolate_bilinear_vector()'],['../interfacebilinear__interp__mod_1_1interpolate__bilinear.html#ab4692c5250b37325f764b38c570892dd',1,'bilinear_interp_mod::interpolate_bilinear::interpolate_bilinear_vector()']]], + ['interpolate_5fbudget_5fscalar_584',['interpolate_budget_scalar',['../interfacebudget__interp__mod_1_1interpolate__budget.html#a4b96cbeedb86ef43b687f7ea55914ef0',1,'budget_interp_mod::interpolate_budget::interpolate_budget_scalar()'],['../namespacebudget__interp__mod.html#a09bd6535b0c2e1022cfde39c39d14466',1,'budget_interp_mod::interpolate_budget_scalar()']]], + ['interpolate_5fbudget_5fvector_585',['interpolate_budget_vector',['../interfacebudget__interp__mod_1_1interpolate__budget.html#a573e89e56381d0f69e4022d791a087e6',1,'budget_interp_mod::interpolate_budget::interpolate_budget_vector()'],['../namespacebudget__interp__mod.html#abc99486ee9c0091c1514af6114d4e803',1,'budget_interp_mod::interpolate_budget_vector()']]], + ['interpolate_5fneighbor_5fbudget_5fscalar_586',['interpolate_neighbor_budget_scalar',['../interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html#a96e4b145a4df6f4948b1d5ae2da6a71a',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_scalar()'],['../namespaceneighbor__budget__interp__mod.html#a6d5110a9e9facf8c3132ec27d6857817',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget_scalar()']]], + ['interpolate_5fneighbor_5fbudget_5fvector_587',['interpolate_neighbor_budget_vector',['../interfaceneighbor__budget__interp__mod_1_1interpolate__neighbor__budget.html#a573bd5ac43484aa6d051e58f37ff7c06',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget::interpolate_neighbor_budget_vector()'],['../namespaceneighbor__budget__interp__mod.html#a4309c1e6b7fc60ded40657fe6c72297e',1,'neighbor_budget_interp_mod::interpolate_neighbor_budget_vector()']]], + ['interpolate_5fneighbor_5fscalar_588',['interpolate_neighbor_scalar',['../interfaceneighbor__interp__mod_1_1interpolate__neighbor.html#a04ebb54535e67ff95c1d3d64b9cf6246',1,'neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_scalar()'],['../namespaceneighbor__interp__mod.html#a78452d1527c6974ad54091f0318e4b1f',1,'neighbor_interp_mod::interpolate_neighbor_scalar()']]], + ['interpolate_5fneighbor_5fvector_589',['interpolate_neighbor_vector',['../interfaceneighbor__interp__mod_1_1interpolate__neighbor.html#a4662245e2744fd14628b48f23bf4f0a7',1,'neighbor_interp_mod::interpolate_neighbor::interpolate_neighbor_vector()'],['../namespaceneighbor__interp__mod.html#a744ccffd8cd6c13d360e634db4851756',1,'neighbor_interp_mod::interpolate_neighbor_vector()']]], + ['interpolate_5fspectral_5fscalar_590',['interpolate_spectral_scalar',['../interfacespectral__interp__mod_1_1interpolate__spectral.html#a79f600a26ecf256a8a13cf4bdbaf2ab1',1,'spectral_interp_mod::interpolate_spectral::interpolate_spectral_scalar()'],['../namespacespectral__interp__mod.html#a438646d69e941def0ada00d5ca19f618',1,'spectral_interp_mod::interpolate_spectral_scalar()']]], + ['interpolate_5fspectral_5fvector_591',['interpolate_spectral_vector',['../interfacespectral__interp__mod_1_1interpolate__spectral.html#a9e939bbb3f7b214fee26c1e77764e487',1,'spectral_interp_mod::interpolate_spectral::interpolate_spectral_vector()'],['../namespacespectral__interp__mod.html#acb61ad529b7decc2a6ff58dd12fbadd0',1,'spectral_interp_mod::interpolate_spectral_vector()']]], + ['ipolates_5fgrib1_592',['ipolates_grib1',['../interfaceipolates__mod_1_1ipolates.html#a8ff62af694c759f29c332836ff66437b',1,'ipolates_mod::ipolates::ipolates_grib1()'],['../namespaceipolates__mod.html#acb5408cf5c3a0f50326edc183f9bd269',1,'ipolates_mod::ipolates_grib1()']]], + ['ipolates_5fgrib1_5fsingle_5ffield_593',['ipolates_grib1_single_field',['../interfaceipolates__mod_1_1ipolates.html#afbc36431f96adfbbf552bc6137d0519d',1,'ipolates_mod::ipolates::ipolates_grib1_single_field()'],['../namespaceipolates__mod.html#ae70a9ca9871bb33e038782b036b7b53d',1,'ipolates_mod::ipolates_grib1_single_field()']]], + ['ipolates_5fgrib2_594',['ipolates_grib2',['../interfaceipolates__mod_1_1ipolates.html#a791ae0a257adcc3a789494489e28302b',1,'ipolates_mod::ipolates::ipolates_grib2()'],['../namespaceipolates__mod.html#a6b2ea6d5b04d2a68baad261e7a409fac',1,'ipolates_mod::ipolates_grib2(IP, IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, LI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)']]], + ['ipolates_5fgrib2_5fsingle_5ffield_595',['ipolates_grib2_single_field',['../namespaceipolates__mod.html#a49541b2af75b7c037a863a4785726856',1,'ipolates_mod::ipolates_grib2_single_field()'],['../interfaceipolates__mod_1_1ipolates.html#a3a77b7de2dce406829a3b01689372240',1,'ipolates_mod::ipolates::ipolates_grib2_single_field()']]], + ['ipolates_5fgrid_596',['ipolates_grid',['../namespaceipolates__mod.html#a2761e20fab898e7fd9963f3e0eb5d104',1,'ipolates_mod']]], + ['ipolatev_5fgrib1_597',['ipolatev_grib1',['../interfaceipolatev__mod_1_1ipolatev.html#ac721867d3d8e8adc11d56baba4702d53',1,'ipolatev_mod::ipolatev::ipolatev_grib1()'],['../namespaceipolatev__mod.html#abddc4a9b00133b358443b118f1352d1f',1,'ipolatev_mod::ipolatev_grib1()']]], + ['ipolatev_5fgrib1_5fsingle_5ffield_598',['ipolatev_grib1_single_field',['../interfaceipolatev__mod_1_1ipolatev.html#ad211b25631afd3fd7c04bbfba589a7c5',1,'ipolatev_mod::ipolatev::ipolatev_grib1_single_field()'],['../namespaceipolatev__mod.html#ad535ffd159c46e770effd774aabede58',1,'ipolatev_mod::ipolatev_grib1_single_field(ip, ipopt, kgdsi, kgdso, mi, mo, km, ibi, li, ui, vi, no, rlat, rlon, crot, srot, ibo, lo, uo, vo, iret)']]], + ['ipolatev_5fgrib2_599',['ipolatev_grib2',['../namespaceipolatev__mod.html#a00fed53dd867a802b3adbc1141e8d272',1,'ipolatev_mod::ipolatev_grib2()'],['../interfaceipolatev__mod_1_1ipolatev.html#ac1ec04e3119f285f0f3955f016926efe',1,'ipolatev_mod::ipolatev::ipolatev_grib2()']]], + ['ipolatev_5fgrib2_5fsingle_5ffield_600',['ipolatev_grib2_single_field',['../namespaceipolatev__mod.html#a71d7507e8f89e1229caaaacb37e0c9c7',1,'ipolatev_mod::ipolatev_grib2_single_field()'],['../interfaceipolatev__mod_1_1ipolatev.html#aa0af88a9ccef79a921680fe40ec30ccd',1,'ipolatev_mod::ipolatev::ipolatev_grib2_single_field()']]], + ['ipolatev_5fgrid_601',['ipolatev_grid',['../namespaceipolatev__mod.html#a8f3bfec7495e13b75b2035e8e1f081a1',1,'ipolatev_mod']]], + ['ipxetas_602',['ipxetas',['../ipxetas_8F90.html#a89ff34ee39b0da1895e9d8552bb462e1',1,'ipxetas.F90']]], + ['ipxwafs_603',['ipxwafs',['../ipxwafs_8F90.html#a1465ea191950f7464bb3374abed94c12',1,'ipxwafs.F90']]], + ['ipxwafs2_604',['ipxwafs2',['../ipxwafs2_8F90.html#ab602c9c04957836c0b8860560d442894',1,'ipxwafs2.F90']]], + ['ipxwafs3_605',['ipxwafs3',['../ipxwafs3_8F90.html#aae7be3c77cbe16d0219c86e443e6ec1d',1,'ipxwafs3.F90']]], + ['is_5fsame_5fgrid_606',['is_same_grid',['../interfaceip__grid__mod_1_1operator_07_0a_0a_08.html#a0303cd13db74e096af7f77200ef09c6b',1,'ip_grid_mod::operator(==)::is_same_grid()'],['../interfaceip__grid__descriptor__mod_1_1operator_07_0a_0a_08.html#a34e94f8aada186a3d22112a1ab31b53c',1,'ip_grid_descriptor_mod::operator(==)::is_same_grid()'],['../structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a9da102dac348a63ffce6556ed5da81b6',1,'ip_grid_descriptor_mod::ip_grid_descriptor::is_same_grid()'],['../namespaceip__grid__descriptor__mod.html#a202219f9c5c84fa04d3eb1c2208358ec',1,'ip_grid_descriptor_mod::is_same_grid()'],['../namespaceip__grid__mod.html#a663bda9af9dd991a09ba0f0de66dc045',1,'ip_grid_mod::is_same_grid()']]], + ['is_5fsame_5fgrid_5fgrib1_607',['is_same_grid_grib1',['../structip__grid__descriptor__mod_1_1grib1__descriptor.html#a33b4fc04d218c73e3c4d061163dcbc95',1,'ip_grid_descriptor_mod::grib1_descriptor::is_same_grid_grib1()'],['../namespaceip__grid__descriptor__mod.html#a5bb3c5230b88012bddc3922bfa1cb019',1,'ip_grid_descriptor_mod::is_same_grid_grib1()']]], + ['is_5fsame_5fgrid_5fgrib2_608',['is_same_grid_grib2',['../structip__grid__descriptor__mod_1_1grib2__descriptor.html#ae27b09a835144baf782e2cde0c1ea013',1,'ip_grid_descriptor_mod::grib2_descriptor::is_same_grid_grib2()'],['../namespaceip__grid__descriptor__mod.html#a75ac34ea9372afaa29b0df2ce8919988',1,'ip_grid_descriptor_mod::is_same_grid_grib2()']]] +]; diff --git a/search/functions_6.html b/ver-5.1.0/search/functions_6.html similarity index 100% rename from search/functions_6.html rename to ver-5.1.0/search/functions_6.html diff --git a/ver-5.1.0/search/functions_6.js b/ver-5.1.0/search/functions_6.js new file mode 100644 index 00000000..4a5c2917 --- /dev/null +++ b/ver-5.1.0/search/functions_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['lambert_5fconf_5fgrid_5farea_609',['lambert_conf_grid_area',['../namespaceip__lambert__conf__grid__mod.html#a15c44b47172b926aea840caee9723b1c',1,'ip_lambert_conf_grid_mod']]], + ['lambert_5fconf_5fmap_5fjacob_610',['lambert_conf_map_jacob',['../namespaceip__lambert__conf__grid__mod.html#a5e1d42f0027236f47467e25c525e66ae',1,'ip_lambert_conf_grid_mod']]], + ['lambert_5fconf_5fvect_5frot_611',['lambert_conf_vect_rot',['../namespaceip__lambert__conf__grid__mod.html#a58187073914efa18eca897c6ec203b71',1,'ip_lambert_conf_grid_mod']]] +]; diff --git a/search/functions_7.html b/ver-5.1.0/search/functions_7.html similarity index 100% rename from search/functions_7.html rename to ver-5.1.0/search/functions_7.html diff --git a/ver-5.1.0/search/functions_7.js b/ver-5.1.0/search/functions_7.js new file mode 100644 index 00000000..7a582e96 --- /dev/null +++ b/ver-5.1.0/search/functions_7.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['mercator_5fgrid_5farea_612',['mercator_grid_area',['../namespaceip__mercator__grid__mod.html#a952ab9add18587c4dbe54699feb8eafd',1,'ip_mercator_grid_mod']]], + ['mercator_5fmap_5fjacob_613',['mercator_map_jacob',['../namespaceip__mercator__grid__mod.html#ab93a0a6ae8c5f5056abece1dcffdc57a',1,'ip_mercator_grid_mod']]], + ['mercator_5fvect_5frot_614',['mercator_vect_rot',['../namespaceip__mercator__grid__mod.html#aea5e18faf7a18bf8d06c87ccb11f3e17',1,'ip_mercator_grid_mod']]], + ['movect_615',['movect',['../movect_8F90.html#a5974e32c0cf90a65b39c68460d761882',1,'movect.F90']]] +]; diff --git a/search/functions_8.html b/ver-5.1.0/search/functions_8.html similarity index 100% rename from search/functions_8.html rename to ver-5.1.0/search/functions_8.html diff --git a/ver-5.1.0/search/functions_8.js b/ver-5.1.0/search/functions_8.js new file mode 100644 index 00000000..3d1aaf28 --- /dev/null +++ b/ver-5.1.0/search/functions_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['ncpus_616',['ncpus',['../ncpus_8F.html#a821a75ee067ea31758a038c0327bd3bd',1,'ncpus.F']]] +]; diff --git a/search/functions_9.html b/ver-5.1.0/search/functions_9.html similarity index 100% rename from search/functions_9.html rename to ver-5.1.0/search/functions_9.html diff --git a/ver-5.1.0/search/functions_9.js b/ver-5.1.0/search/functions_9.js new file mode 100644 index 00000000..e17292a3 --- /dev/null +++ b/ver-5.1.0/search/functions_9.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['polar_5fstereo_5fgrid_5farea_617',['polar_stereo_grid_area',['../namespaceip__polar__stereo__grid__mod.html#a2a2e0854e5c129e320924a811cbd08e2',1,'ip_polar_stereo_grid_mod']]], + ['polar_5fstereo_5fmap_5fjacob_618',['polar_stereo_map_jacob',['../namespaceip__polar__stereo__grid__mod.html#a386933f7e52c348b9d742df423e0e223',1,'ip_polar_stereo_grid_mod']]], + ['polar_5fstereo_5fvect_5frot_619',['polar_stereo_vect_rot',['../namespaceip__polar__stereo__grid__mod.html#abe4d416201e986421a8e325a9b00e462',1,'ip_polar_stereo_grid_mod']]], + ['polates4_5fgrib1_620',['polates4_grib1',['../interfacespectral__interp__mod_1_1polates4.html#a0be1315db4dce899083176b47b6ea6a4',1,'spectral_interp_mod::polates4::polates4_grib1()'],['../namespacespectral__interp__mod.html#ab9fb87d87f2f9d578a5ade6b512ff366',1,'spectral_interp_mod::polates4_grib1()']]], + ['polates4_5fgrib2_621',['polates4_grib2',['../interfacespectral__interp__mod_1_1polates4.html#a3fdc75851f1f741e715a1c3e1e4d89c9',1,'spectral_interp_mod::polates4::polates4_grib2()'],['../namespacespectral__interp__mod.html#a54dfd0ea8368242a1053d64770bd295a',1,'spectral_interp_mod::polates4_grib2()']]], + ['polatev4_5fgrib1_622',['polatev4_grib1',['../interfacespectral__interp__mod_1_1polatev4.html#a5fa619eb983da3326380e9bafcf49ca8',1,'spectral_interp_mod::polatev4::polatev4_grib1()'],['../namespacespectral__interp__mod.html#af4ce7638750e787dd69c7fe3ff2335cc',1,'spectral_interp_mod::polatev4_grib1()']]], + ['polatev4_5fgrib2_623',['polatev4_grib2',['../interfacespectral__interp__mod_1_1polatev4.html#a9dcbaeb719e3872ad5ad461adde5c98b',1,'spectral_interp_mod::polatev4::polatev4_grib2()'],['../namespacespectral__interp__mod.html#a2f76e9900554d90753ca788c2ddf9ac3',1,'spectral_interp_mod::polatev4_grib2()']]], + ['polfixs_624',['polfixs',['../namespacepolfix__mod.html#a15df1ba2e1fcad1e9465c4aa3a2ba0d6',1,'polfix_mod']]], + ['polfixv_625',['polfixv',['../namespacepolfix__mod.html#aeefc8f045777f6d962d9ec539ef6007d',1,'polfix_mod']]] +]; diff --git a/search/functions_a.html b/ver-5.1.0/search/functions_a.html similarity index 100% rename from search/functions_a.html rename to ver-5.1.0/search/functions_a.html diff --git a/ver-5.1.0/search/functions_a.js b/ver-5.1.0/search/functions_a.js new file mode 100644 index 00000000..4d5292c3 --- /dev/null +++ b/ver-5.1.0/search/functions_a.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['radb2_626',['radb2',['../fftpack_8F.html#ae63abe3a02989ed4fbd60b50bc0c6dda',1,'fftpack.F']]], + ['radb3_627',['radb3',['../fftpack_8F.html#a6129001ac4cdf5d5a345edc2822d8014',1,'fftpack.F']]], + ['radb4_628',['radb4',['../fftpack_8F.html#a3b5aab129020968eaf92f2e6ca0785ef',1,'fftpack.F']]], + ['radb5_629',['radb5',['../fftpack_8F.html#a2b6492f922cbee03af5b89d52356abf1',1,'fftpack.F']]], + ['radbg_630',['radbg',['../fftpack_8F.html#af5a2521b66fece6cc768206c1df0d20b',1,'fftpack.F']]], + ['radf2_631',['radf2',['../fftpack_8F.html#a70e2420dd5bee9e41eb6c15bbad5eef6',1,'fftpack.F']]], + ['radf3_632',['radf3',['../fftpack_8F.html#a51374398f8edd5701987ce483c739592',1,'fftpack.F']]], + ['radf4_633',['radf4',['../fftpack_8F.html#ae9910ca606fd0cdb03b5b3b98533f486',1,'fftpack.F']]], + ['radf5_634',['radf5',['../fftpack_8F.html#a6d852c36924b038f77a24b8e22205add',1,'fftpack.F']]], + ['radfg_635',['radfg',['../fftpack_8F.html#ad5dbca6bb6ee7c0a86a1e140627de1b2',1,'fftpack.F']]], + ['rfftb_636',['rfftb',['../fftpack_8F.html#a79ba25d1f342858b0faa3c3e3585ec88',1,'fftpack.F']]], + ['rfftb1_637',['rfftb1',['../fftpack_8F.html#afa735c298a72dd1c13ab1c45e737c066',1,'fftpack.F']]], + ['rfftf_638',['rfftf',['../fftpack_8F.html#afbb5dc9c70ebe24759d5ffec1d3e42e2',1,'fftpack.F']]], + ['rfftf1_639',['rfftf1',['../fftpack_8F.html#acdf9efa42dc73f90af444ee0da649a09',1,'fftpack.F']]], + ['rffti_640',['rffti',['../fftpack_8F.html#a50f1237ff5990436609962c0eae406db',1,'fftpack.F']]], + ['rffti1_641',['rffti1',['../fftpack_8F.html#ae3569ef7a371390f6bf38417865ef71b',1,'fftpack.F']]], + ['rot_5fequid_5fcylind_5fegrid_5ferror_642',['rot_equid_cylind_egrid_error',['../namespaceip__rot__equid__cylind__egrid__mod.html#a69d4e473a1a276b855d37518dc6f1d48',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5fegrid_5fgrid_5farea_643',['rot_equid_cylind_egrid_grid_area',['../namespaceip__rot__equid__cylind__egrid__mod.html#a4e6c3a758f9a6474d3e499fabeac0640',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5fegrid_5fmap_5fjacob_644',['rot_equid_cylind_egrid_map_jacob',['../namespaceip__rot__equid__cylind__egrid__mod.html#a45b87f77888d428ca0f551edae8da94e',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5fegrid_5fvect_5frot_645',['rot_equid_cylind_egrid_vect_rot',['../namespaceip__rot__equid__cylind__egrid__mod.html#a9ac1f76f515981c464e8391d8c941888',1,'ip_rot_equid_cylind_egrid_mod']]], + ['rot_5fequid_5fcylind_5ferror_646',['rot_equid_cylind_error',['../namespaceip__rot__equid__cylind__grid__mod.html#a1cc09c83f9a3815d8c5f8ed2f239f53f',1,'ip_rot_equid_cylind_grid_mod']]], + ['rot_5fequid_5fcylind_5fgrid_5farea_647',['rot_equid_cylind_grid_area',['../namespaceip__rot__equid__cylind__grid__mod.html#ad8f1133eb6809705c15337134eafe9fd',1,'ip_rot_equid_cylind_grid_mod']]], + ['rot_5fequid_5fcylind_5fmap_5fjacob_648',['rot_equid_cylind_map_jacob',['../namespaceip__rot__equid__cylind__grid__mod.html#a985f1dc1a20444cef706d4bb20e0841b',1,'ip_rot_equid_cylind_grid_mod']]], + ['rot_5fequid_5fcylind_5fvect_5frot_649',['rot_equid_cylind_vect_rot',['../namespaceip__rot__equid__cylind__grid__mod.html#a3de472bfc18740a7d985f560f3541c10',1,'ip_rot_equid_cylind_grid_mod']]] +]; diff --git a/search/functions_b.html b/ver-5.1.0/search/functions_b.html similarity index 100% rename from search/functions_b.html rename to ver-5.1.0/search/functions_b.html diff --git a/ver-5.1.0/search/functions_b.js b/ver-5.1.0/search/functions_b.js new file mode 100644 index 00000000..9ddba113 --- /dev/null +++ b/ver-5.1.0/search/functions_b.js @@ -0,0 +1,58 @@ +var searchData= +[ + ['scfft_650',['scfft',['../fftpack_8F.html#a369071ea2d380c9d91ba36d1bf375e33',1,'fftpack.F']]], + ['scrft_651',['scrft',['../fftpack_8F.html#ac69cbd64be972c20a4424f5327fb4b36',1,'fftpack.F']]], + ['spanaly_652',['spanaly',['../spanaly_8f.html#a5cc846d796d393d7499cde0f3d1d6e6a',1,'spanaly.f']]], + ['spdz2uv_653',['spdz2uv',['../spdz2uv_8f.html#ae3a4a74c49f78a25425b610743dc0692',1,'spdz2uv.f']]], + ['speps_654',['speps',['../speps_8f.html#a0ab523ec5e1393ffca970897e63a9131',1,'speps.f']]], + ['spfft_655',['spfft',['../spfft_8f.html#a1041af8ac4f6a2407b5b7a799a13fb5d',1,'spfft.f']]], + ['spfft1_656',['spfft1',['../spfft1_8f.html#ac63643472eda83948c0b249b611346d6',1,'spfft1.f']]], + ['spffte_657',['spffte',['../spffte_8f.html#af06489254bd3e99030b39744fce32233',1,'spffte.f']]], + ['spfftpt_658',['spfftpt',['../spfftpt_8f.html#ad16e674ce87bd762a714853967f81356',1,'spfftpt.f']]], + ['spgradq_659',['spgradq',['../spgradq_8f.html#a0bb358cf2a405ce9f17c6e5dfde65849',1,'spgradq.f']]], + ['spgradx_660',['spgradx',['../spgradx_8f.html#a749bc07e763e9cd44490fff2284d00b4',1,'spgradx.f']]], + ['spgrady_661',['spgrady',['../spgrady_8f.html#a1b3e38e56560de7d7dcf19ea3e931cf1',1,'spgrady.f']]], + ['splaplac_662',['splaplac',['../splaplac_8f.html#a64338955857a3cf58283146940e7ae42',1,'splaplac.f']]], + ['splat_663',['splat',['../splat_8F.html#aa6db21451bb67635e7e4426546140e11',1,'splat.F']]], + ['splegend_664',['splegend',['../splegend_8f.html#a9c68adc80e97c43ac983b955dd6cabac',1,'splegend.f']]], + ['sppad_665',['sppad',['../sppad_8f.html#a4338b3ccd7844251bbdabf3da1d6476e',1,'sppad.f']]], + ['spsynth_666',['spsynth',['../spsynth_8f.html#aa6a8113a459918728c876673520126bf',1,'spsynth.f']]], + ['sptez_667',['sptez',['../sptez_8f.html#a418a7d182834b2e2dafae2fe881ba9fc',1,'sptez.f']]], + ['sptezd_668',['sptezd',['../sptezd_8f.html#a6c30b52dcb4da9e403eeeb307b9516d7',1,'sptezd.f']]], + ['sptezm_669',['sptezm',['../sptezm_8f.html#a1430a0df2cba7eefaf67c939684be2d1',1,'sptezm.f']]], + ['sptezmd_670',['sptezmd',['../sptezmd_8f.html#a2b9ead06893e51604bfb18928ddee996',1,'sptezmd.f']]], + ['sptezmv_671',['sptezmv',['../sptezmv_8f.html#a22dc4fc10c5225ec8d3c12ed3cb4786e',1,'sptezmv.f']]], + ['sptezv_672',['sptezv',['../sptezv_8f.html#a83e49d961c40a2621c3f2afe70846226',1,'sptezv.f']]], + ['sptgpm_673',['sptgpm',['../sptgpm_8f.html#a6cffaeaa602eaae5c03166f48065158d',1,'sptgpm.f']]], + ['sptgpmd_674',['sptgpmd',['../sptgpmd_8f.html#af71718c75a2b24b74fa7e1e4318d0539',1,'sptgpmd.f']]], + ['sptgpmv_675',['sptgpmv',['../sptgpmv_8f.html#a15de3accfd448d116324872c8fb1bb17',1,'sptgpmv.f']]], + ['sptgps_676',['sptgps',['../sptgps_8f.html#af06a2dccfa311014fc9f671b14f247b2',1,'sptgps.f']]], + ['sptgpsd_677',['sptgpsd',['../sptgpsd_8f.html#ad6d10c3360c47558a8116b2f5666ed30',1,'sptgpsd.f']]], + ['sptgpsv_678',['sptgpsv',['../sptgpsv_8f.html#af2bf2335047ec277730564dbfa859079',1,'sptgpsv.f']]], + ['sptgpt_679',['sptgpt',['../sptgpt_8f.html#a1b8d333bcc601e5b7e8d3dd1369f54b1',1,'sptgpt.f']]], + ['sptgptd_680',['sptgptd',['../sptgptd_8f.html#a64d1fe761662182ca3495531152d1cd3',1,'sptgptd.f']]], + ['sptgptsd_681',['sptgptsd',['../sptgptsd_8f.html#ad3ab15089a57b493cc74443ea3b3d88f',1,'sptgptsd.f']]], + ['sptgptv_682',['sptgptv',['../sptgptv_8f.html#a9af8a22564d132a887a5237f30710f13',1,'sptgptv.f']]], + ['sptgptvd_683',['sptgptvd',['../sptgptvd_8f.html#ae03c6c76cad685ae1ed32d74bcba6753',1,'sptgptvd.f']]], + ['sptran_684',['sptran',['../sptran_8f.html#af7610e42f0dcd199b8cf80f851dcfed0',1,'sptran.f']]], + ['sptrand_685',['sptrand',['../sptrand_8f.html#ae810abad32bcbdfb8345a30e50bcc1ef',1,'sptrand.f']]], + ['sptranf_686',['sptranf',['../sptranf_8f.html#acf086b5141203e48bdb7250441a16c8c',1,'sptranf.f']]], + ['sptranf0_687',['sptranf0',['../sptranf0_8f.html#aaf9f9002ccd7074dc04dbc40a5aad9f0',1,'sptranf0.f']]], + ['sptranf1_688',['sptranf1',['../sptranf1_8f.html#ad7cec2fd6729ca84b1fac3436f9730e6',1,'sptranf1.f']]], + ['sptranfv_689',['sptranfv',['../sptranfv_8f.html#a1a7aabbd358d4fe984dac6813c98b106',1,'sptranfv.f']]], + ['sptranv_690',['sptranv',['../sptranv_8f.html#a7d6aaa3ed70df1dfaf8dd4443b7190c1',1,'sptranv.f']]], + ['sptrun_691',['sptrun',['../sptrun_8f.html#a1f04574fbd5018f73b68bd2cd0ffc473',1,'sptrun.f']]], + ['sptrund_692',['sptrund',['../sptrund_8f.html#a2636d99e658dfabd4b85f15a76fca480',1,'sptrund.f']]], + ['sptrung_693',['sptrung',['../sptrung_8f.html#af41b64dad4789617a315515ef885912c',1,'sptrung.f']]], + ['sptrungv_694',['sptrungv',['../sptrungv_8f.html#ab7bbe6ecde57394b15e5d4925cb07164',1,'sptrungv.f']]], + ['sptrunl_695',['sptrunl',['../sptrunl_8f.html#a52c4250d24e52304e49aa1d82a93bdb8',1,'sptrunl.f']]], + ['sptrunm_696',['sptrunm',['../sptrunm_8f.html#a2a4e579890d3cf7f6a26091f544b6cb6',1,'sptrunm.f']]], + ['sptrunmv_697',['sptrunmv',['../sptrunmv_8f.html#a8b405d0621112d6852a3bb99602ac2fd',1,'sptrunmv.f']]], + ['sptruns_698',['sptruns',['../sptruns_8f.html#a34f156e2049105d012e445f8aa215444',1,'sptruns.f']]], + ['sptrunsv_699',['sptrunsv',['../sptrunsv_8f.html#a1373b651b9dea586e33d3033aae68656',1,'sptrunsv.f']]], + ['sptrunv_700',['sptrunv',['../sptrunv_8f.html#a9aa39c13dd38585b3afb30cb2486817f',1,'sptrunv.f']]], + ['spuv2dz_701',['spuv2dz',['../spuv2dz_8f.html#a27edc2d10e0a76a45e4aaae58bf018b9',1,'spuv2dz.f']]], + ['spvar_702',['spvar',['../spvar_8f.html#a840f95e09b8d930b38638a391933bee4',1,'spvar.f']]], + ['spwget_703',['spwget',['../spwget_8f.html#a9b6ce78350f7adf2fed874a18312c7a6',1,'spwget.f']]], + ['srcft_704',['srcft',['../fftpack_8F.html#acf248c4f27a9fa81cffdfded50eee742',1,'fftpack.F']]] +]; diff --git a/search/functions_c.html b/ver-5.1.0/search/functions_c.html similarity index 100% rename from search/functions_c.html rename to ver-5.1.0/search/functions_c.html diff --git a/ver-5.1.0/search/functions_c.js b/ver-5.1.0/search/functions_c.js new file mode 100644 index 00000000..8074160f --- /dev/null +++ b/ver-5.1.0/search/functions_c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unuse_5fncep_5fpost_5farakawa_705',['unuse_ncep_post_arakawa',['../namespaceip__grid__mod.html#ac8e716adbe5c1156bfd20f936a4205de',1,'ip_grid_mod']]], + ['use_5fncep_5fpost_5farakawa_706',['use_ncep_post_arakawa',['../namespaceip__grid__mod.html#a1d570947cf124c28ba67305494bff450',1,'ip_grid_mod']]] +]; diff --git a/ver-5.1.0/search/mag_sel.svg b/ver-5.1.0/search/mag_sel.svg new file mode 100644 index 00000000..03626f64 --- /dev/null +++ b/ver-5.1.0/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/search/namespaces_0.html b/ver-5.1.0/search/namespaces_0.html similarity index 100% rename from search/namespaces_0.html rename to ver-5.1.0/search/namespaces_0.html diff --git a/ver-5.1.0/search/namespaces_0.js b/ver-5.1.0/search/namespaces_0.js new file mode 100644 index 00000000..9d67d19b --- /dev/null +++ b/ver-5.1.0/search/namespaces_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['bicubic_5finterp_5fmod_423',['bicubic_interp_mod',['../namespacebicubic__interp__mod.html',1,'']]], + ['bilinear_5finterp_5fmod_424',['bilinear_interp_mod',['../namespacebilinear__interp__mod.html',1,'']]], + ['budget_5finterp_5fmod_425',['budget_interp_mod',['../namespacebudget__interp__mod.html',1,'']]] +]; diff --git a/search/namespaces_1.html b/ver-5.1.0/search/namespaces_1.html similarity index 100% rename from search/namespaces_1.html rename to ver-5.1.0/search/namespaces_1.html diff --git a/ver-5.1.0/search/namespaces_1.js b/ver-5.1.0/search/namespaces_1.js new file mode 100644 index 00000000..e93bf1b4 --- /dev/null +++ b/ver-5.1.0/search/namespaces_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['earth_5fradius_5fmod_426',['earth_radius_mod',['../namespaceearth__radius__mod.html',1,'']]] +]; diff --git a/search/namespaces_2.html b/ver-5.1.0/search/namespaces_2.html similarity index 100% rename from search/namespaces_2.html rename to ver-5.1.0/search/namespaces_2.html diff --git a/ver-5.1.0/search/namespaces_2.js b/ver-5.1.0/search/namespaces_2.js new file mode 100644 index 00000000..223057b8 --- /dev/null +++ b/ver-5.1.0/search/namespaces_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['gdswzd_5fc_5fmod_427',['gdswzd_c_mod',['../namespacegdswzd__c__mod.html',1,'']]], + ['gdswzd_5fmod_428',['gdswzd_mod',['../namespacegdswzd__mod.html',1,'']]] +]; diff --git a/search/namespaces_3.html b/ver-5.1.0/search/namespaces_3.html similarity index 100% rename from search/namespaces_3.html rename to ver-5.1.0/search/namespaces_3.html diff --git a/ver-5.1.0/search/namespaces_3.js b/ver-5.1.0/search/namespaces_3.js new file mode 100644 index 00000000..5c573362 --- /dev/null +++ b/ver-5.1.0/search/namespaces_3.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['ip_5fconstants_5fmod_429',['ip_constants_mod',['../namespaceip__constants__mod.html',1,'']]], + ['ip_5fequid_5fcylind_5fgrid_5fmod_430',['ip_equid_cylind_grid_mod',['../namespaceip__equid__cylind__grid__mod.html',1,'']]], + ['ip_5fgaussian_5fgrid_5fmod_431',['ip_gaussian_grid_mod',['../namespaceip__gaussian__grid__mod.html',1,'']]], + ['ip_5fgrid_5fdescriptor_5fmod_432',['ip_grid_descriptor_mod',['../namespaceip__grid__descriptor__mod.html',1,'']]], + ['ip_5fgrid_5ffactory_5fmod_433',['ip_grid_factory_mod',['../namespaceip__grid__factory__mod.html',1,'']]], + ['ip_5fgrid_5fmod_434',['ip_grid_mod',['../namespaceip__grid__mod.html',1,'']]], + ['ip_5fgrids_5fmod_435',['ip_grids_mod',['../namespaceip__grids__mod.html',1,'']]], + ['ip_5finterpolators_5fmod_436',['ip_interpolators_mod',['../namespaceip__interpolators__mod.html',1,'']]], + ['ip_5flambert_5fconf_5fgrid_5fmod_437',['ip_lambert_conf_grid_mod',['../namespaceip__lambert__conf__grid__mod.html',1,'']]], + ['ip_5fmercator_5fgrid_5fmod_438',['ip_mercator_grid_mod',['../namespaceip__mercator__grid__mod.html',1,'']]], + ['ip_5fmod_439',['ip_mod',['../namespaceip__mod.html',1,'']]], + ['ip_5fpolar_5fstereo_5fgrid_5fmod_440',['ip_polar_stereo_grid_mod',['../namespaceip__polar__stereo__grid__mod.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fegrid_5fmod_441',['ip_rot_equid_cylind_egrid_mod',['../namespaceip__rot__equid__cylind__egrid__mod.html',1,'']]], + ['ip_5frot_5fequid_5fcylind_5fgrid_5fmod_442',['ip_rot_equid_cylind_grid_mod',['../namespaceip__rot__equid__cylind__grid__mod.html',1,'']]], + ['ip_5fstation_5fpoints_5fgrid_5fmod_443',['ip_station_points_grid_mod',['../namespaceip__station__points__grid__mod.html',1,'']]], + ['ipolates_5fmod_444',['ipolates_mod',['../namespaceipolates__mod.html',1,'']]], + ['ipolatev_5fmod_445',['ipolatev_mod',['../namespaceipolatev__mod.html',1,'']]] +]; diff --git a/search/namespaces_4.html b/ver-5.1.0/search/namespaces_4.html similarity index 100% rename from search/namespaces_4.html rename to ver-5.1.0/search/namespaces_4.html diff --git a/ver-5.1.0/search/namespaces_4.js b/ver-5.1.0/search/namespaces_4.js new file mode 100644 index 00000000..32397ba0 --- /dev/null +++ b/ver-5.1.0/search/namespaces_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['neighbor_5fbudget_5finterp_5fmod_446',['neighbor_budget_interp_mod',['../namespaceneighbor__budget__interp__mod.html',1,'']]], + ['neighbor_5finterp_5fmod_447',['neighbor_interp_mod',['../namespaceneighbor__interp__mod.html',1,'']]] +]; diff --git a/search/namespaces_5.html b/ver-5.1.0/search/namespaces_5.html similarity index 100% rename from search/namespaces_5.html rename to ver-5.1.0/search/namespaces_5.html diff --git a/ver-5.1.0/search/namespaces_5.js b/ver-5.1.0/search/namespaces_5.js new file mode 100644 index 00000000..aac145d1 --- /dev/null +++ b/ver-5.1.0/search/namespaces_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['polfix_5fmod_448',['polfix_mod',['../namespacepolfix__mod.html',1,'']]] +]; diff --git a/search/namespaces_6.html b/ver-5.1.0/search/namespaces_6.html similarity index 100% rename from search/namespaces_6.html rename to ver-5.1.0/search/namespaces_6.html diff --git a/ver-5.1.0/search/namespaces_6.js b/ver-5.1.0/search/namespaces_6.js new file mode 100644 index 00000000..c1c66095 --- /dev/null +++ b/ver-5.1.0/search/namespaces_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['spectral_5finterp_5fmod_449',['spectral_interp_mod',['../namespacespectral__interp__mod.html',1,'']]] +]; diff --git a/search/nomatches.html b/ver-5.1.0/search/nomatches.html similarity index 100% rename from search/nomatches.html rename to ver-5.1.0/search/nomatches.html diff --git a/search/pages_0.html b/ver-5.1.0/search/pages_0.html similarity index 100% rename from search/pages_0.html rename to ver-5.1.0/search/pages_0.html diff --git a/ver-5.1.0/search/pages_0.js b/ver-5.1.0/search/pages_0.js new file mode 100644 index 00000000..cbef086c --- /dev/null +++ b/ver-5.1.0/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['introduction_791',['Introduction',['../index.html',1,'']]] +]; diff --git a/ver-5.1.0/search/search.css b/ver-5.1.0/search/search.css new file mode 100644 index 00000000..9074198f --- /dev/null +++ b/ver-5.1.0/search/search.css @@ -0,0 +1,257 @@ +/*---------------- Search Box */ + +#MSearchBox { + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + height: 1.4em; + padding: 0 0 0 0.3em; + margin: 0; +} + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 1.1em; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + height: 1.4em; + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial, Verdana, sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial, Verdana, sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/ver-5.1.0/search/search.js b/ver-5.1.0/search/search.js new file mode 100644 index 00000000..fb226f73 --- /dev/null +++ b/ver-5.1.0/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches' + this.extension; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline-block'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + +NCEPLIBS-ip: sp_mod.F Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sp_mod.F
    +
    +
    +
    1  module sp_mod
    +
    2 
    +
    3  contains
    +
    4 
    +
    5 #include "fftpack.F"
    +
    6 #include "ncpus.F"
    +
    7 #include "spanaly.f"
    +
    8 #include "spdz2uv.f"
    +
    9 #include "speps.f"
    +
    10 #include "spfft1.f"
    +
    11 #include "spffte.f"
    +
    12 #include "spfftpt.f"
    +
    13 #include "splaplac.f"
    +
    14 #include "splat.F"
    +
    15 #include "splegend.f"
    +
    16 #include "sppad.f"
    +
    17 #include "spsynth.f"
    +
    18 #include "sptezd.f"
    +
    19 #include "sptez.f"
    +
    20 #include "sptezmd.f"
    +
    21 #include "sptezm.f"
    +
    22 #include "sptezmv.f"
    +
    23 #include "sptezv.f"
    +
    24 #include "sptgpm.f"
    +
    25 #include "sptgpmv.f"
    +
    26 #include "sptgps.f"
    +
    27 #include "sptgpsv.f"
    +
    28 #include "sptgpt.f"
    +
    29 #include "sptgptv.f"
    +
    30 #include "sptrand.f"
    +
    31 #include "sptran.f"
    +
    32 #include "sptranf0.f"
    +
    33 #include "sptranf1.f"
    +
    34 #include "sptranf.f"
    +
    35 #include "sptranfv.f"
    +
    36 #include "sptranv.f"
    +
    37 #include "sptrun.f"
    +
    38 #include "sptrung.f"
    +
    39 #include "sptrungv.f"
    +
    40 #include "sptrunm.f"
    +
    41 #include "sptrunmv.f"
    +
    42 #include "sptruns.f"
    +
    43 #include "sptrunsv.f"
    +
    44 #include "sptrunv.f"
    +
    45 #include "spuv2dz.f"
    +
    46 #include "spwget.f"
    +
    47 
    +
    48 #ifdef BUILD_DEPRECATED
    +
    49 #include "spfft.f"
    +
    50 #include "spgradq.f"
    +
    51 #include "spgradx.f"
    +
    52 #include "spgrady.f"
    +
    53 #include "sptgpmd.f"
    +
    54 #include "sptgpsd.f"
    +
    55 #include "sptgptd.f"
    +
    56 #include "sptgptsd.f"
    +
    57 #include "sptgptvd.f"
    +
    58 #include "sptrund.f"
    +
    59 #include "sptrunl.f"
    +
    60 #include "spvar.f"
    +
    61 #endif
    +
    62 
    +
    63  end module
    +
    +
    + + + + diff --git a/ver-5.1.0/spanaly_8f.html b/ver-5.1.0/spanaly_8f.html new file mode 100644 index 00000000..f3db851f --- /dev/null +++ b/ver-5.1.0/spanaly_8f.html @@ -0,0 +1,267 @@ + + + + + + + +NCEPLIBS-ip: spanaly.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spanaly.f File Reference
    +
    +
    + +

    Analyze spectral from Fourier. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spanaly (I, M, IM, IX, NC, NCTOP, KM, WGT, CLAT, PLN, PLNTOP, MP, F, SPC, SPCTOP)
     Analyzes spectral coefficients from Fourier coefficients for a latitude pair (Northern and Southern hemispheres). More...
     
    +

    Detailed Description

    +

    Analyze spectral from Fourier.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    91-10-31 Mark Iredell Initial.
    94-08-01 Mark Iredell Moved zonal wavenumber loop inside.
    1998-12-15 Iredell Openmp directives inserted.
    +
    Author
    Iredell
    +
    Date
    91-10-31
    + +

    Definition in file spanaly.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spanaly()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spanaly ( I,
     M,
     IM,
     IX,
     NC,
     NCTOP,
     KM,
     WGT,
     CLAT,
    real, dimension((m+1)*((i+1)*m+2)/2) PLN,
    real, dimension(m+1) PLNTOP,
    integer, dimension(km) MP,
    real, dimension(ix,2,km) F,
    real, dimension(nc,km) SPC,
    real, dimension(nctop,km) SPCTOP 
    )
    +
    + +

    Analyzes spectral coefficients from Fourier coefficients for a latitude pair (Northern and Southern hemispheres).

    +

    Vector components are multiplied by cosine of latitude.

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    IMeven number of Fourier coefficients
    IXdimension of Fourier coefficients (IX>=IM+2)
    NCdimension of spectral coefficients (NC>=(M+1)*((I+1)*M+2))
    NCTOPdimension of spectral coefficients over top (NCTOP>=2*(M+1))
    KMnumber of fields
    WGTGaussian weight
    CLATcosine of latitude
    PLNLegendre polynomials
    PLNTOPLegendre polynomial over top
    MPidentifiers (0 for scalar, 1 for vector)
    FFourier coefficients combined
    SPCspectral coefficients
    SPCTOPspectral coefficients over top
    +
    +
    +
    Author
    Iredell
    +
    Date
    91-10-31
    + +

    Definition at line 35 of file spanaly.f.

    + +

    Referenced by sptranf1().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spanaly_8f.js b/ver-5.1.0/spanaly_8f.js new file mode 100644 index 00000000..c397fb92 --- /dev/null +++ b/ver-5.1.0/spanaly_8f.js @@ -0,0 +1,4 @@ +var spanaly_8f = +[ + [ "spanaly", "spanaly_8f.html#a5cc846d796d393d7499cde0f3d1d6e6a", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spanaly_8f_source.html b/ver-5.1.0/spanaly_8f_source.html new file mode 100644 index 00000000..f651984d --- /dev/null +++ b/ver-5.1.0/spanaly_8f_source.html @@ -0,0 +1,176 @@ + + + + + + + +NCEPLIBS-ip: spanaly.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spanaly.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Analyze spectral from Fourier.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 91-10-31 | Mark Iredell | Initial.
    +
    8 C> 94-08-01 | Mark Iredell | Moved zonal wavenumber loop inside.
    +
    9 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    10 C>
    +
    11 C> @author Iredell @date 91-10-31
    +
    12 
    +
    13 C> Analyzes spectral coefficients from Fourier coefficients
    +
    14 C> for a latitude pair (Northern and Southern hemispheres).
    +
    15 C>
    +
    16 C> Vector components are multiplied by cosine of latitude.
    +
    17 C>
    +
    18 C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
    +
    19 C> @param M spectral truncation
    +
    20 C> @param IM even number of Fourier coefficients
    +
    21 C> @param IX dimension of Fourier coefficients (IX>=IM+2)
    +
    22 C> @param NC dimension of spectral coefficients (NC>=(M+1)*((I+1)*M+2))
    +
    23 C> @param NCTOP dimension of spectral coefficients over top (NCTOP>=2*(M+1))
    +
    24 C> @param KM number of fields
    +
    25 C> @param WGT Gaussian weight
    +
    26 C> @param CLAT cosine of latitude
    +
    27 C> @param PLN Legendre polynomials
    +
    28 C> @param PLNTOP Legendre polynomial over top
    +
    29 C> @param MP identifiers (0 for scalar, 1 for vector)
    +
    30 C> @param F Fourier coefficients combined
    +
    31 C> @param SPC spectral coefficients
    +
    32 C> @param SPCTOP spectral coefficients over top
    +
    33 C>
    +
    34 C> @author Iredell @date 91-10-31
    +
    35  SUBROUTINE spanaly(I,M,IM,IX,NC,NCTOP,KM,WGT,CLAT,PLN,PLNTOP,MP,
    +
    36  & F,SPC,SPCTOP)
    +
    37  INTEGER MP(KM)
    +
    38  REAL PLN((M+1)*((I+1)*M+2)/2),PLNTOP(M+1)
    +
    39  REAL F(IX,2,KM)
    +
    40  REAL SPC(NC,KM),SPCTOP(NCTOP,KM)
    +
    41  REAL FW(2,2)
    +
    42 
    +
    43 C FOR EACH ZONAL WAVENUMBER, ANALYZE TERMS OVER TOTAL WAVENUMBER.
    +
    44 C ANALYZE EVEN AND ODD POLYNOMIALS SEPARATELY.
    +
    45  lx=min(m,im/2)
    +
    46 !C$OMP PARALLEL DO PRIVATE(L,NT,KS,KP,FW)
    +
    47  DO k=1,km
    +
    48  DO l=0,lx
    +
    49  nt=mod(m+1+(i-1)*l,2)+1
    +
    50  ks=l*(2*m+(i-1)*(l-1))
    +
    51  kp=ks/2+1
    +
    52  IF(mp(k).EQ.0) THEN
    +
    53  fw(1,1)=wgt*(f(2*l+1,1,k)+f(2*l+1,2,k))
    +
    54  fw(2,1)=wgt*(f(2*l+2,1,k)+f(2*l+2,2,k))
    +
    55  fw(1,2)=wgt*(f(2*l+1,1,k)-f(2*l+1,2,k))
    +
    56  fw(2,2)=wgt*(f(2*l+2,1,k)-f(2*l+2,2,k))
    +
    57  ELSE
    +
    58  fw(1,1)=wgt*clat*(f(2*l+1,1,k)+f(2*l+1,2,k))
    +
    59  fw(2,1)=wgt*clat*(f(2*l+2,1,k)+f(2*l+2,2,k))
    +
    60  fw(1,2)=wgt*clat*(f(2*l+1,1,k)-f(2*l+1,2,k))
    +
    61  fw(2,2)=wgt*clat*(f(2*l+2,1,k)-f(2*l+2,2,k))
    +
    62  spctop(2*l+1,k)=spctop(2*l+1,k)+plntop(l+1)*fw(1,nt)
    +
    63  spctop(2*l+2,k)=spctop(2*l+2,k)+plntop(l+1)*fw(2,nt)
    +
    64  ENDIF
    +
    65  DO n=l,i*l+m,2
    +
    66  spc(ks+2*n+1,k)=spc(ks+2*n+1,k)+pln(kp+n)*fw(1,1)
    +
    67  spc(ks+2*n+2,k)=spc(ks+2*n+2,k)+pln(kp+n)*fw(2,1)
    +
    68  ENDDO
    +
    69  DO n=l+1,i*l+m,2
    +
    70  spc(ks+2*n+1,k)=spc(ks+2*n+1,k)+pln(kp+n)*fw(1,2)
    +
    71  spc(ks+2*n+2,k)=spc(ks+2*n+2,k)+pln(kp+n)*fw(2,2)
    +
    72  ENDDO
    +
    73  ENDDO
    +
    74  ENDDO
    +
    75  RETURN
    +
    76  END
    +
    subroutine spanaly(I, M, IM, IX, NC, NCTOP, KM, WGT, CLAT, PLN, PLNTOP, MP, F, SPC, SPCTOP)
    Analyzes spectral coefficients from Fourier coefficients for a latitude pair (Northern and Southern h...
    Definition: spanaly.f:37
    +
    +
    + + + + diff --git a/ver-5.1.0/spdz2uv_8f.html b/ver-5.1.0/spdz2uv_8f.html new file mode 100644 index 00000000..45148686 --- /dev/null +++ b/ver-5.1.0/spdz2uv_8f.html @@ -0,0 +1,247 @@ + + + + + + + +NCEPLIBS-ip: spdz2uv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spdz2uv.f File Reference
    +
    +
    + +

    Compute winds from divergence and vorticity. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spdz2uv (I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
     Computes the wind components from divergence and vorticity in spectral space. More...
     
    +

    Detailed Description

    +

    Compute winds from divergence and vorticity.

    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file spdz2uv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spdz2uv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spdz2uv ( I,
     M,
    real, dimension((m+1)*((i+1)*m+2)/2) ENN1,
    real, dimension((m+1)*((i+1)*m+2)/2) ELONN1,
    real, dimension((m+1)*((i+1)*m+2)/2) EON,
    real, dimension(m+1) EONTOP,
    real, dimension((m+1)*((i+1)*m+2)) D,
    real, dimension((m+1)*((i+1)*m+2)) Z,
    real, dimension((m+1)*((i+1)*m+2)) U,
    real, dimension((m+1)*((i+1)*m+2)) V,
    real, dimension(2*(m+1)) UTOP,
    real, dimension(2*(m+1)) VTOP 
    )
    +
    + +

    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))
    + 

    a
    +nd 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.

    +

    Cxtra 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.

    +
    Parameters
    + + + + + + + + + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    ENN1((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    ELONN1((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    EON((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    EONTOP(M+1) EPSILON/N*A OVER TOP
    D((M+1)*((I+1)*M+2)) divergence
    Z((M+1)*((I+1)*M+2)) vorticity
    U((M+1)*((I+1)*M+2)) zonal wind (times coslat)
    V((M+1)*((I+1)*M+2)) merid wind (times coslat)
    UTOP(2*(M+1)) zonal wind (times coslat) over top
    VTOP(2*(M+1)) merid wind (times coslat) over top
    +
    +
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition at line 48 of file spdz2uv.f.

    + +

    Referenced by sptgpmv(), sptgpsv(), sptgptv(), sptgptvd(), and sptranfv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spdz2uv_8f.js b/ver-5.1.0/spdz2uv_8f.js new file mode 100644 index 00000000..e0e6edd1 --- /dev/null +++ b/ver-5.1.0/spdz2uv_8f.js @@ -0,0 +1,4 @@ +var spdz2uv_8f = +[ + [ "spdz2uv", "spdz2uv_8f.html#ae3a4a74c49f78a25425b610743dc0692", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spdz2uv_8f_source.html b/ver-5.1.0/spdz2uv_8f_source.html new file mode 100644 index 00000000..2150369b --- /dev/null +++ b/ver-5.1.0/spdz2uv_8f_source.html @@ -0,0 +1,182 @@ + + + + + + + +NCEPLIBS-ip: spdz2uv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spdz2uv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute winds from divergence and vorticity.
    +
    3 C> @author Iredell @date 92-10-31
    +
    4 
    +
    5 C> Computes the wind components from divergence and vorticity
    +
    6 C> in spectral space.
    +
    7 C>
    +
    8 C> Subprogram speps() should be called already.
    +
    9 C>
    +
    10 C> If L is the zonal wavenumber, N is the total wavenumber,
    +
    11 C> <pre>
    +
    12 C> EPS(L,N) = SQRT((N**2-L**2)/(4*N**2-1))
    +
    13 C> </pre>
    +
    14 C> and A is earth radius,
    +
    15 C> then the zonal wind component U is computed as
    +
    16 C> <pre>
    +
    17 C> U(L,N)=-I*L/(N*(N+1))*A*D(L,N)
    +
    18 C> +EPS(L,N+1)/(N+1)*A*Z(L,N+1)-EPS(L,N)/N*A*Z(L,N-1)
    +
    19 C> </pre>
    +
    20 C> and the meridional wind component V is computed as
    +
    21 C> <pre>
    +
    22 C> V(L,N)=-I*L/(N*(N+1))*A*Z(L,N)
    +
    23 C> -EPS(L,N+1)/(N+1)*A*D(L,N+1)+EPS(L,N)/N*A*D(L,N-1)
    +
    24 C> </pre>
    +
    25 C> where D is divergence and Z is vorticity.
    +
    26 C>
    +
    27 C> U and V are weighted by the cosine of latitude.
    +
    28 C>
    +
    29 C> Cxtra terms are computed over top of the spectral domain.
    +
    30 C>
    +
    31 C> Advantage is taken of the fact that EPS(L,L)=0
    +
    32 C> in order to vectorize over the entire spectral domain.
    +
    33 C>
    +
    34 C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
    +
    35 C> @param M spectral truncation
    +
    36 C> @param ENN1 ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    +
    37 C> @param ELONN1 ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    +
    38 C> @param EON ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    +
    39 C> @param EONTOP (M+1) EPSILON/N*A OVER TOP
    +
    40 C> @param D ((M+1)*((I+1)*M+2)) divergence
    +
    41 C> @param Z ((M+1)*((I+1)*M+2)) vorticity
    +
    42 C> @param U ((M+1)*((I+1)*M+2)) zonal wind (times coslat)
    +
    43 C> @param V ((M+1)*((I+1)*M+2)) merid wind (times coslat)
    +
    44 C> @param UTOP (2*(M+1)) zonal wind (times coslat) over top
    +
    45 C> @param VTOP (2*(M+1)) merid wind (times coslat) over top
    +
    46 C>
    +
    47 C> @author Iredell @date 92-10-31
    +
    48  SUBROUTINE spdz2uv(I,M,ENN1,ELONN1,EON,EONTOP,D,Z,U,V,UTOP,VTOP)
    +
    49  REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
    +
    50  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
    +
    51  REAL D((M+1)*((I+1)*M+2)),Z((M+1)*((I+1)*M+2))
    +
    52  REAL U((M+1)*((I+1)*M+2)),V((M+1)*((I+1)*M+2))
    +
    53  REAL UTOP(2*(M+1)),VTOP(2*(M+1))
    +
    54 
    +
    55 C COMPUTE WINDS IN THE SPECTRAL DOMAIN
    +
    56  k=1
    +
    57  u(2*k-1)=eon(k+1)*z(2*k+1)
    +
    58  u(2*k)=eon(k+1)*z(2*k+2)
    +
    59  v(2*k-1)=-eon(k+1)*d(2*k+1)
    +
    60  v(2*k)=-eon(k+1)*d(2*k+2)
    +
    61  DO k=2,(m+1)*((i+1)*m+2)/2-1
    +
    62  u(2*k-1)=elonn1(k)*d(2*k)+eon(k+1)*z(2*k+1)-eon(k)*z(2*k-3)
    +
    63  u(2*k)=-elonn1(k)*d(2*k-1)+eon(k+1)*z(2*k+2)-eon(k)*z(2*k-2)
    +
    64  v(2*k-1)=elonn1(k)*z(2*k)-eon(k+1)*d(2*k+1)+eon(k)*d(2*k-3)
    +
    65  v(2*k)=-elonn1(k)*z(2*k-1)-eon(k+1)*d(2*k+2)+eon(k)*d(2*k-2)
    +
    66  ENDDO
    +
    67  k=(m+1)*((i+1)*m+2)/2
    +
    68  u(2*k-1)=elonn1(k)*d(2*k)-eon(k)*z(2*k-3)
    +
    69  u(2*k)=-elonn1(k)*d(2*k-1)-eon(k)*z(2*k-2)
    +
    70  v(2*k-1)=elonn1(k)*z(2*k)+eon(k)*d(2*k-3)
    +
    71  v(2*k)=-elonn1(k)*z(2*k-1)+eon(k)*d(2*k-2)
    +
    72 
    +
    73 C COMPUTE WINDS OVER TOP OF THE SPECTRAL DOMAIN
    +
    74  DO l=0,m
    +
    75  k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
    +
    76  utop(2*l+1)=-eontop(l+1)*z(2*k-1)
    +
    77  utop(2*l+2)=-eontop(l+1)*z(2*k)
    +
    78  vtop(2*l+1)=eontop(l+1)*d(2*k-1)
    +
    79  vtop(2*l+2)=eontop(l+1)*d(2*k)
    +
    80  ENDDO
    +
    81  RETURN
    +
    82  END
    +
    subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
    Computes the wind components from divergence and vorticity in spectral space.
    Definition: spdz2uv.f:49
    +
    +
    + + + + diff --git a/ver-5.1.0/spectral__interp__mod_8F90.html b/ver-5.1.0/spectral__interp__mod_8F90.html new file mode 100644 index 00000000..7936949e --- /dev/null +++ b/ver-5.1.0/spectral__interp__mod_8F90.html @@ -0,0 +1,151 @@ + + + + + + + +NCEPLIBS-ip: spectral_interp_mod.F90 File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spectral_interp_mod.F90 File Reference
    +
    +
    + +

    Interpolate spectral. +More...

    + +

    Go to the source code of this file.

    + + + + + + + + +

    +Data Types

    interface  spectral_interp_mod::interpolate_spectral
     
    interface  spectral_interp_mod::polates4
     
    interface  spectral_interp_mod::polatev4
     
    + + + + +

    +Modules

    module  spectral_interp_mod
     Interpolate spectral.
     
    + + + + + + + + + + + + + + + + + + + +

    +Functions/Subroutines

    subroutine spectral_interp_mod::interpolate_spectral_scalar (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate spectral scalar. More...
     
    subroutine spectral_interp_mod::interpolate_spectral_vector (IPOPT, grid_in, grid_out, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate spectral vector. More...
     
    subroutine spectral_interp_mod::polates4_grib1 (IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (spectral). More...
     
    subroutine spectral_interp_mod::polates4_grib2 (IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
     Interpolate scalar fields (spectral). More...
     
    subroutine spectral_interp_mod::polatev4_grib1 (IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (spectral). More...
     
    subroutine spectral_interp_mod::polatev4_grib2 (IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
     Interpolate vector fields (spectral). More...
     
    +

    Detailed Description

    +

    Interpolate spectral.

    +
    Author
    Mark Iredell
    +
    Date
    96-04-10
    + +

    Definition in file spectral_interp_mod.F90.

    +
    +
    + + + + diff --git a/ver-5.1.0/spectral__interp__mod_8F90.js b/ver-5.1.0/spectral__interp__mod_8F90.js new file mode 100644 index 00000000..c8774d15 --- /dev/null +++ b/ver-5.1.0/spectral__interp__mod_8F90.js @@ -0,0 +1,12 @@ +var spectral__interp__mod_8F90 = +[ + [ "interpolate_spectral", "interfacespectral__interp__mod_1_1interpolate__spectral.html", "interfacespectral__interp__mod_1_1interpolate__spectral" ], + [ "polates4", "interfacespectral__interp__mod_1_1polates4.html", "interfacespectral__interp__mod_1_1polates4" ], + [ "polatev4", "interfacespectral__interp__mod_1_1polatev4.html", "interfacespectral__interp__mod_1_1polatev4" ], + [ "interpolate_spectral_scalar", "spectral__interp__mod_8F90.html#a438646d69e941def0ada00d5ca19f618", null ], + [ "interpolate_spectral_vector", "spectral__interp__mod_8F90.html#acb61ad529b7decc2a6ff58dd12fbadd0", null ], + [ "polates4_grib1", "spectral__interp__mod_8F90.html#ab9fb87d87f2f9d578a5ade6b512ff366", null ], + [ "polates4_grib2", "spectral__interp__mod_8F90.html#a54dfd0ea8368242a1053d64770bd295a", null ], + [ "polatev4_grib1", "spectral__interp__mod_8F90.html#af4ce7638750e787dd69c7fe3ff2335cc", null ], + [ "polatev4_grib2", "spectral__interp__mod_8F90.html#a2f76e9900554d90753ca788c2ddf9ac3", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spectral__interp__mod_8F90_source.html b/ver-5.1.0/spectral__interp__mod_8F90_source.html new file mode 100644 index 00000000..0f451c14 --- /dev/null +++ b/ver-5.1.0/spectral__interp__mod_8F90_source.html @@ -0,0 +1,1164 @@ + + + + + + + +NCEPLIBS-ip: spectral_interp_mod.F90 Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spectral_interp_mod.F90
    +
    +
    +Go to the documentation of this file.
    1 
    +
    4 
    + +
    9  use gdswzd_mod
    +
    10  use ip_grid_mod
    + + + +
    14  use sp_mod
    +
    15  implicit none
    +
    16 
    +
    17  private
    +
    18  public :: interpolate_spectral
    +
    19 
    + +
    21  module procedure interpolate_spectral_scalar
    +
    22  module procedure interpolate_spectral_vector
    +
    23  end interface interpolate_spectral
    +
    24 
    +
    25  interface polates4
    +
    26  module procedure polates4_grib1
    +
    27  module procedure polates4_grib2
    +
    28  end interface polates4
    +
    29 
    +
    30  interface polatev4
    +
    31  module procedure polatev4_grib1
    +
    32  module procedure polatev4_grib2
    +
    33  end interface polatev4
    +
    34 
    +
    35 contains
    +
    36 
    +
    61  subroutine interpolate_spectral_scalar(IPOPT,grid_in,grid_out, &
    +
    62  MI,MO,KM,IBI,GI, &
    +
    63  NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    64  INTEGER, INTENT(IN ) :: IPOPT(20)
    +
    65  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    66  INTEGER, INTENT(IN ) :: MI, MO
    +
    67  INTEGER, INTENT(IN ) :: IBI(KM), KM
    +
    68  INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
    +
    69  !
    +
    70  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    71  !
    +
    72  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    73  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    74  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    75 
    +
    76 
    +
    77  select type(desc_in => grid_in%descriptor)
    +
    78  type is(grib1_descriptor)
    +
    79  select type(desc_out => grid_out%descriptor)
    +
    80  type is(grib1_descriptor)
    +
    81  CALL polates4(ipopt,desc_in%gds,desc_out%gds,mi,mo,km,ibi,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    82  end select
    +
    83 
    +
    84  type is(grib2_descriptor)
    +
    85  select type(desc_out => grid_out%descriptor)
    +
    86  type is(grib2_descriptor)
    +
    87  CALL polates4(ipopt,desc_in%gdt_num,desc_in%gdt_tmpl,desc_in%gdt_len, &
    +
    88  desc_out%gdt_num,desc_out%gdt_tmpl,desc_out%gdt_len, &
    +
    89  mi,mo,km,ibi,gi,no,rlat,rlon,ibo,lo,go,iret)
    +
    90  end select
    +
    91  end select
    +
    92  end subroutine interpolate_spectral_scalar
    +
    93 
    +
    122  subroutine interpolate_spectral_vector(IPOPT,grid_in,grid_out, &
    +
    123  MI,MO,KM,IBI,UI,VI, &
    +
    124  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    125  class(ip_grid), intent(in) :: grid_in, grid_out
    +
    126  INTEGER, INTENT(IN ) :: IPOPT(20), IBI(KM)
    +
    127  INTEGER, INTENT(IN ) :: KM, MI, MO
    +
    128  INTEGER, INTENT( OUT) :: IRET, IBO(KM), NO
    +
    129  !
    +
    130  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    131  !
    +
    132  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    133  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    134  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    135  REAL, INTENT( OUT) :: CROT(MO),SROT(MO)
    +
    136 
    +
    137 
    +
    138  select type(desc_in => grid_in%descriptor)
    +
    139  type is(grib1_descriptor)
    +
    140  select type(desc_out => grid_out%descriptor)
    +
    141  type is(grib1_descriptor)
    +
    142  CALL polatev4_grib1(ipopt,desc_in%gds,desc_out%gds,mi,mo,km,ibi,ui,vi,&
    +
    143  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    144  end select
    +
    145 
    +
    146  type is(grib2_descriptor)
    +
    147  select type(desc_out => grid_out%descriptor)
    +
    148  type is(grib2_descriptor)
    +
    149  CALL polatev4(ipopt,desc_in%gdt_num,desc_in%gdt_tmpl,desc_in%gdt_len, &
    +
    150  desc_out%gdt_num,desc_out%gdt_tmpl,desc_out%gdt_len, &
    +
    151  mi,mo,km,ibi,ui,vi,&
    +
    152  no,rlat,rlon,crot,srot,ibo,lo,uo,vo,iret)
    +
    153  end select
    +
    154  end select
    +
    155 
    +
    156 
    +
    157  end subroutine interpolate_spectral_vector
    +
    158 ! @author Mark Iredell @date 96-04-10
    +
    255  SUBROUTINE polates4_grib2(IPOPT,IGDTNUMI,IGDTMPLI,IGDTLENI, &
    +
    256  IGDTNUMO,IGDTMPLO,IGDTLENO, &
    +
    257  MI,MO,KM,IBI,GI, &
    +
    258  NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    259  INTEGER, INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    260  INTEGER, INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    261  INTEGER, INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    262  INTEGER, INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    263  INTEGER, INTENT(IN ) :: IPOPT(20)
    +
    264  INTEGER, INTENT(IN ) :: MI, MO
    +
    265  INTEGER, INTENT(IN ) :: IBI(KM), KM
    +
    266  INTEGER, INTENT( OUT) :: IBO(KM), IRET, NO
    +
    267  !
    +
    268  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    269  !
    +
    270  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    271  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    272  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    273  !
    +
    274  REAL, PARAMETER :: FILL=-9999.
    +
    275  REAL, PARAMETER :: PI=3.14159265358979
    +
    276  REAL, PARAMETER :: DPR=180./pi
    +
    277  !
    +
    278  INTEGER :: IDRTI, IDRTO, IG, JG, IM, JM
    +
    279  INTEGER :: IGO, JGO, IMO, JMO
    +
    280  INTEGER :: ISCAN, JSCAN, NSCAN
    +
    281  INTEGER :: ISCANO, JSCANO, NSCANO
    +
    282  INTEGER :: ISKIPI, JSKIPI, ISCALE
    +
    283  INTEGER :: IMAXI, JMAXI, ISPEC
    +
    284  INTEGER :: IP, IPRIME, IPROJ, IROMB, K
    +
    285  INTEGER :: MAXWV, N, NI, NJ, NPS
    +
    286  !
    +
    287  REAL :: DE, DR, DY
    +
    288  REAL :: DLAT, DLON, DLATO, DLONO
    +
    289  REAL :: GO2(MO,KM), H, HI, HJ
    +
    290  REAL :: ORIENT, SLAT, RERTH, E2
    +
    291  REAL :: RLAT1, RLON1, RLAT2, RLON2, RLATI
    +
    292  REAL :: XMESH, XP, YP
    +
    293  REAL :: XPTS(MO), YPTS(MO)
    +
    294 
    +
    295  type(grib2_descriptor) :: desc_in, desc_out
    +
    296  class(ip_grid), allocatable :: grid_in, grid_out
    +
    297 
    +
    298  desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
    +
    299  desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
    +
    300 
    +
    301  call init_grid(grid_in, desc_in)
    +
    302  call init_grid(grid_out, desc_out)
    +
    303  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    304  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    305  iret=0
    +
    306  IF(igdtnumo.GE.0) THEN
    +
    307  !CALL GDSWZD(IGDTNUMO,IGDTMPLO,IGDTLENO, 0,MO,FILL,XPTS,YPTS,RLON,RLAT,NO)
    +
    308  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    309  IF(no.EQ.0) iret=3
    +
    310  ENDIF
    +
    311  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    312  ! AFFIRM APPROPRIATE INPUT GRID
    +
    313  ! LAT/LON OR GAUSSIAN
    +
    314  ! NO BITMAPS
    +
    315  ! FULL ZONAL COVERAGE
    +
    316  ! FULL MERIDIONAL COVERAGE
    +
    317  idrti=igdtnumi
    +
    318  IF(idrti==40) idrti=4
    +
    319  IF(idrti==0.OR.idrti==4)THEN
    +
    320  im=igdtmpli(8)
    +
    321  jm=igdtmpli(9)
    +
    322  iscale=igdtmpli(10)*igdtmpli(11)
    +
    323  IF(iscale==0) iscale=10**6
    +
    324  rlon1=float(igdtmpli(13))/float(iscale)
    +
    325  rlon2=float(igdtmpli(16))/float(iscale)
    +
    326  iscan=mod(igdtmpli(19)/128,2)
    +
    327  jscan=mod(igdtmpli(19)/64,2)
    +
    328  nscan=mod(igdtmpli(19)/32,2)
    +
    329  ELSE
    +
    330  iret=41
    +
    331  ENDIF
    +
    332  DO k=1,km
    +
    333  IF(ibi(k).NE.0) iret=41
    +
    334  ENDDO
    +
    335  IF(iret.EQ.0) THEN
    +
    336  IF(iscan.EQ.0) THEN
    +
    337  dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    338  ELSE
    +
    339  dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    340  ENDIF
    +
    341  ig=nint(360/abs(dlon))
    +
    342  iprime=1+mod(-nint(rlon1/dlon)+ig,ig)
    +
    343  imaxi=ig
    +
    344  jmaxi=jm
    +
    345  IF(mod(ig,2).NE.0.OR.im.LT.ig) iret=41
    +
    346  ENDIF
    +
    347  IF(iret.EQ.0.AND.idrti.EQ.0) THEN
    +
    348  iscale=igdtmpli(10)*igdtmpli(11)
    +
    349  IF(iscale==0) iscale=10**6
    +
    350  rlat1=float(igdtmpli(12))/float(iscale)
    +
    351  rlat2=float(igdtmpli(15))/float(iscale)
    +
    352  dlat=(rlat2-rlat1)/(jm-1)
    +
    353  jg=nint(180/abs(dlat))
    +
    354  IF(jm.EQ.jg) idrti=256
    +
    355  IF(jm.NE.jg.AND.jm.NE.jg+1) iret=41
    +
    356  ELSEIF(iret.EQ.0.AND.idrti.EQ.4) THEN
    +
    357  jg=igdtmpli(18)*2
    +
    358  IF(jm.NE.jg) iret=41
    +
    359  ENDIF
    +
    360  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    361  ! SET PARAMETERS
    +
    362  IF(iret.EQ.0) THEN
    +
    363  iromb=ipopt(1)
    +
    364  maxwv=ipopt(2)
    +
    365  IF(maxwv.EQ.-1) THEN
    +
    366  IF(iromb.EQ.0.AND.idrti.EQ.4) maxwv=(jmaxi-1)
    +
    367  IF(iromb.EQ.1.AND.idrti.EQ.4) maxwv=(jmaxi-1)/2
    +
    368  IF(iromb.EQ.0.AND.idrti.EQ.0) maxwv=(jmaxi-3)/2
    +
    369  IF(iromb.EQ.1.AND.idrti.EQ.0) maxwv=(jmaxi-3)/4
    +
    370  IF(iromb.EQ.0.AND.idrti.EQ.256) maxwv=(jmaxi-1)/2
    +
    371  IF(iromb.EQ.1.AND.idrti.EQ.256) maxwv=(jmaxi-1)/4
    +
    372  ENDIF
    +
    373  IF((iromb.NE.0.AND.iromb.NE.1).OR.maxwv.LT.0) iret=42
    +
    374  ENDIF
    +
    375  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    376  ! INTERPOLATE
    +
    377  IF(iret.EQ.0) THEN
    +
    378  IF(nscan.EQ.0) THEN
    +
    379  iskipi=1
    +
    380  jskipi=im
    +
    381  ELSE
    +
    382  iskipi=jm
    +
    383  jskipi=1
    +
    384  ENDIF
    +
    385  IF(iscan.EQ.1) iskipi=-iskipi
    +
    386  IF(jscan.EQ.0) jskipi=-jskipi
    +
    387  ispec=0
    +
    388  ! SPECIAL CASE OF GLOBAL CYLINDRICAL GRID
    +
    389  IF((igdtnumo.EQ.0.OR.igdtnumo.EQ.40).AND. &
    +
    390  mod(igdtmplo(8),2).EQ.0.AND.igdtmplo(13).EQ.0.AND.igdtmplo(19).EQ.0) THEN
    +
    391  idrto=igdtnumo
    +
    392  IF(idrto==40)idrto=4
    +
    393  imo=igdtmplo(8)
    +
    394  jmo=igdtmplo(9)
    +
    395  iscale=igdtmplo(10)*igdtmplo(11)
    +
    396  IF(iscale==0) iscale=10**6
    +
    397  rlon2=float(igdtmplo(16))/float(iscale)
    +
    398  dlono=(mod(rlon2-1+3600,360.)+1)/(imo-1)
    +
    399  igo=nint(360/abs(dlono))
    +
    400  IF(imo.EQ.igo.AND.idrto.EQ.0) THEN
    +
    401  rlat1=float(igdtmplo(12))/float(iscale)
    +
    402  rlat2=float(igdtmplo(15))/float(iscale)
    +
    403  dlat=(rlat2-rlat1)/(jmo-1)
    +
    404  jgo=nint(180/abs(dlat))
    +
    405  IF(jmo.EQ.jgo) idrto=256
    +
    406  IF(jmo.EQ.jgo.OR.jmo.EQ.jgo+1) ispec=1
    +
    407  ELSEIF(imo.EQ.igo.AND.idrto.EQ.4) THEN
    +
    408  jgo=igdtmplo(18)*2
    +
    409  IF(jmo.EQ.jgo) ispec=1
    +
    410  ENDIF
    +
    411  IF(ispec.EQ.1) THEN
    +
    412  CALL sptrun(iromb,maxwv,idrti,imaxi,jmaxi,idrto,imo,jmo, &
    +
    413  km,iprime,iskipi,jskipi,mi,0,0,mo,0,gi,go)
    +
    414  ENDIF
    +
    415  ! SPECIAL CASE OF POLAR STEREOGRAPHIC GRID
    +
    416  ELSEIF(igdtnumo.EQ.20.AND. &
    +
    417  igdtmplo(8).EQ.igdtmplo(9).AND.mod(igdtmplo(8),2).EQ.1.AND. &
    +
    418  igdtmplo(15).EQ.igdtmplo(16).AND.igdtmplo(18).EQ.64) THEN
    +
    419  nps=igdtmplo(8)
    +
    420  rlat1=float(igdtmplo(10))*1.e-6
    +
    421  rlon1=float(igdtmplo(11))*1.e-6
    +
    422  orient=float(igdtmplo(14))*1.e-6
    +
    423  xmesh=float(igdtmplo(15))*1.e-3
    +
    424  iproj=mod(igdtmplo(17)/128,2)
    +
    425  ip=(nps+1)/2
    +
    426  h=(-1.)**iproj
    +
    427  slat=float(abs(igdtmplo(13)))*1.e-6
    +
    428  CALL earth_radius(igdtmplo,igdtleno,rerth,e2)
    +
    429  de=(1.+sin(slat/dpr))*rerth
    +
    430  dr=de*cos(rlat1/dpr)/(1+h*sin(rlat1/dpr))
    +
    431  xp=1-h*sin((rlon1-orient)/dpr)*dr/xmesh
    +
    432  yp=1+cos((rlon1-orient)/dpr)*dr/xmesh
    +
    433  IF(nint(xp).EQ.ip.AND.nint(yp).EQ.ip) THEN
    +
    434  IF(iproj.EQ.0) THEN
    +
    435  CALL sptruns(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    436  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    437  slat,xmesh,orient,gi,go,go2)
    +
    438  ELSE
    +
    439  CALL sptruns(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    440  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    441  slat,xmesh,orient,gi,go2,go)
    +
    442  ENDIF
    +
    443  ispec=1
    +
    444  ENDIF
    +
    445  ! SPECIAL CASE OF MERCATOR GRID
    +
    446  ELSEIF(igdtnumo.EQ.10) THEN
    +
    447  ni=igdtmplo(8)
    +
    448  nj=igdtmplo(9)
    +
    449  rlat1=float(igdtmplo(10))*1.0e-6
    +
    450  rlon1=float(igdtmplo(11))*1.0e-6
    +
    451  rlon2=float(igdtmplo(15))*1.0e-6
    +
    452  rlati=float(igdtmplo(13))*1.0e-6
    +
    453  iscano=mod(igdtmplo(16)/128,2)
    +
    454  jscano=mod(igdtmplo(16)/64,2)
    +
    455  nscano=mod(igdtmplo(16)/32,2)
    +
    456  dy=float(igdtmplo(19))*1.0e-3
    +
    457  hi=(-1.)**iscano
    +
    458  hj=(-1.)**(1-jscano)
    +
    459  CALL earth_radius(igdtmplo,igdtleno,rerth,e2)
    +
    460  dlono=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(ni-1)
    +
    461  dlato=hj*dy/(rerth*cos(rlati/dpr))*dpr
    +
    462  IF(nscano.EQ.0) THEN
    +
    463  CALL sptrunm(iromb,maxwv,idrti,imaxi,jmaxi,km,ni,nj, &
    +
    464  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    465  rlat1,rlon1,dlato,dlono,gi,go)
    +
    466  ispec=1
    +
    467  ENDIF
    +
    468  ENDIF
    +
    469  ! GENERAL SLOW CASE
    +
    470  IF(ispec.EQ.0) THEN
    +
    471  CALL sptrung(iromb,maxwv,idrti,imaxi,jmaxi,km,no, &
    +
    472  iprime,iskipi,jskipi,mi,mo,0,0,0,rlat,rlon,gi,go)
    +
    473  ENDIF
    +
    474  DO k=1,km
    +
    475  ibo(k)=0
    +
    476  DO n=1,no
    +
    477  lo(n,k)=.true.
    +
    478  ENDDO
    +
    479  ENDDO
    +
    480  ELSE
    +
    481  DO k=1,km
    +
    482  ibo(k)=1
    +
    483  DO n=1,no
    +
    484  lo(n,k)=.false.
    +
    485  go(n,k)=0.
    +
    486  ENDDO
    +
    487  ENDDO
    +
    488  ENDIF
    +
    489  END SUBROUTINE polates4_grib2
    +
    490 
    +
    560  suBROUTINE polates4_grib1(IPOPT,KGDSI,KGDSO,MI,MO,KM,IBI,GI, &
    +
    561  NO,RLAT,RLON,IBO,LO,GO,IRET)
    +
    562  INTEGER, INTENT(IN ) :: IPOPT(20), KGDSI(200)
    +
    563  INTEGER, INTENT(IN ) :: KGDSO(200), MI, MO
    +
    564  INTEGER, INTENT(IN ) :: IBI(KM), KM
    +
    565  INTEGER, INTENT( OUT) :: IBO(KM), IRET
    +
    566  !
    +
    567  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    568  !
    +
    569  REAL, INTENT(IN ) :: GI(MI,KM)
    +
    570  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    571  REAL, INTENT( OUT) :: GO(MO,KM)
    +
    572  !
    +
    573  REAL, PARAMETER :: FILL=-9999.
    +
    574  REAL, PARAMETER :: RERTH=6.3712e6
    +
    575  REAL, PARAMETER :: PI=3.14159265358979
    +
    576  REAL, PARAMETER :: DPR=180./pi
    +
    577  !
    +
    578  INTEGER :: IDRTI, IDRTO, IG, JG, IM, JM
    +
    579  INTEGER :: IGO, JGO, IMO, JMO
    +
    580  INTEGER :: ISCAN, JSCAN, NSCAN
    +
    581  INTEGER :: ISCANO, JSCANO, NSCANO
    +
    582  INTEGER :: ISKIPI, JSKIPI
    +
    583  INTEGER :: IMAXI, JMAXI, ISPEC
    +
    584  INTEGER :: IP, IPRIME, IPROJ, IROMB, K
    +
    585  INTEGER :: MAXWV, N, NI, NJ, NPS, NO
    +
    586  !
    +
    587  REAL :: DE, DR, DY
    +
    588  REAL :: DLAT, DLON, DLATO, DLONO
    +
    589  REAL :: GO2(MO,KM), H, HI, HJ
    +
    590  REAL :: ORIENT
    +
    591  REAL :: RLAT1, RLON1, RLAT2, RLON2, RLATI
    +
    592  REAL :: XMESH, XP, YP
    +
    593  REAL :: XPTS(MO), YPTS(MO)
    +
    594 
    +
    595  type(grib1_descriptor) :: desc_in, desc_out
    +
    596  class(ip_grid), allocatable :: grid_in, grid_out
    +
    597 
    +
    598  desc_in = init_descriptor(kgdsi)
    +
    599  desc_out = init_descriptor(kgdso)
    +
    600 
    +
    601  call init_grid(grid_in, desc_in)
    +
    602  call init_grid(grid_out, desc_out)
    +
    603 
    +
    604  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    605  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    606  iret=0
    +
    607  IF(kgdso(1).GE.0) THEN
    +
    608  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no)
    +
    609  IF(no.EQ.0) iret=3
    +
    610  ENDIF
    +
    611  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    612  ! AFFIRM APPROPRIATE INPUT GRID
    +
    613  ! LAT/LON OR GAUSSIAN
    +
    614  ! NO BITMAPS
    +
    615  ! FULL ZONAL COVERAGE
    +
    616  ! FULL MERIDIONAL COVERAGE
    +
    617  idrti=kgdsi(1)
    +
    618  im=kgdsi(2)
    +
    619  jm=kgdsi(3)
    +
    620  rlon1=kgdsi(5)*1.e-3
    +
    621  rlon2=kgdsi(8)*1.e-3
    +
    622  iscan=mod(kgdsi(11)/128,2)
    +
    623  jscan=mod(kgdsi(11)/64,2)
    +
    624  nscan=mod(kgdsi(11)/32,2)
    +
    625  IF(idrti.NE.0.AND.idrti.NE.4) iret=41
    +
    626  DO k=1,km
    +
    627  IF(ibi(k).NE.0) iret=41
    +
    628  ENDDO
    +
    629  IF(iret.EQ.0) THEN
    +
    630  IF(iscan.EQ.0) THEN
    +
    631  dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    632  ELSE
    +
    633  dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    634  ENDIF
    +
    635  ig=nint(360/abs(dlon))
    +
    636  iprime=1+mod(-nint(rlon1/dlon)+ig,ig)
    +
    637  imaxi=ig
    +
    638  jmaxi=jm
    +
    639  IF(mod(ig,2).NE.0.OR.im.LT.ig) iret=41
    +
    640  ENDIF
    +
    641  IF(iret.EQ.0.AND.idrti.EQ.0) THEN
    +
    642  rlat1=kgdsi(4)*1.e-3
    +
    643  rlat2=kgdsi(7)*1.e-3
    +
    644  dlat=(rlat2-rlat1)/(jm-1)
    +
    645  jg=nint(180/abs(dlat))
    +
    646  IF(jm.EQ.jg) idrti=256
    +
    647  IF(jm.NE.jg.AND.jm.NE.jg+1) iret=41
    +
    648  ELSEIF(iret.EQ.0.AND.idrti.EQ.4) THEN
    +
    649  jg=kgdsi(10)*2
    +
    650  IF(jm.NE.jg) iret=41
    +
    651  ENDIF
    +
    652  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    653  ! SET PARAMETERS
    +
    654  IF(iret.EQ.0) THEN
    +
    655  iromb=ipopt(1)
    +
    656  maxwv=ipopt(2)
    +
    657  IF(maxwv.EQ.-1) THEN
    +
    658  IF(iromb.EQ.0.AND.idrti.EQ.4) maxwv=(jmaxi-1)
    +
    659  IF(iromb.EQ.1.AND.idrti.EQ.4) maxwv=(jmaxi-1)/2
    +
    660  IF(iromb.EQ.0.AND.idrti.EQ.0) maxwv=(jmaxi-3)/2
    +
    661  IF(iromb.EQ.1.AND.idrti.EQ.0) maxwv=(jmaxi-3)/4
    +
    662  IF(iromb.EQ.0.AND.idrti.EQ.256) maxwv=(jmaxi-1)/2
    +
    663  IF(iromb.EQ.1.AND.idrti.EQ.256) maxwv=(jmaxi-1)/4
    +
    664  ENDIF
    +
    665  IF((iromb.NE.0.AND.iromb.NE.1).OR.maxwv.LT.0) iret=42
    +
    666  ENDIF
    +
    667  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    668  ! INTERPOLATE
    +
    669  IF(iret.EQ.0) THEN
    +
    670  IF(nscan.EQ.0) THEN
    +
    671  iskipi=1
    +
    672  jskipi=im
    +
    673  ELSE
    +
    674  iskipi=jm
    +
    675  jskipi=1
    +
    676  ENDIF
    +
    677  IF(iscan.EQ.1) iskipi=-iskipi
    +
    678  IF(jscan.EQ.0) jskipi=-jskipi
    +
    679  ispec=0
    +
    680  ! SPECIAL CASE OF GLOBAL CYLINDRICAL GRID
    +
    681  IF((kgdso(1).EQ.0.OR.kgdso(1).EQ.4).AND. &
    +
    682  mod(kgdso(2),2).EQ.0.AND.kgdso(5).EQ.0.AND.kgdso(11).EQ.0) THEN
    +
    683  idrto=kgdso(1)
    +
    684  imo=kgdso(2)
    +
    685  jmo=kgdso(3)
    +
    686  rlon2=kgdso(8)*1.e-3
    +
    687  dlono=(mod(rlon2-1+3600,360.)+1)/(imo-1)
    +
    688  igo=nint(360/abs(dlono))
    +
    689  IF(imo.EQ.igo.AND.idrto.EQ.0) THEN
    +
    690  rlat1=kgdso(4)*1.e-3
    +
    691  rlat2=kgdso(7)*1.e-3
    +
    692  dlat=(rlat2-rlat1)/(jmo-1)
    +
    693  jgo=nint(180/abs(dlat))
    +
    694  IF(jmo.EQ.jgo) idrto=256
    +
    695  IF(jmo.EQ.jgo.OR.jmo.EQ.jgo+1) ispec=1
    +
    696  ELSEIF(imo.EQ.igo.AND.idrto.EQ.4) THEN
    +
    697  jgo=kgdso(10)*2
    +
    698  IF(jmo.EQ.jgo) ispec=1
    +
    699  ENDIF
    +
    700  IF(ispec.EQ.1) THEN
    +
    701  CALL sptrun(iromb,maxwv,idrti,imaxi,jmaxi,idrto,imo,jmo, &
    +
    702  km,iprime,iskipi,jskipi,mi,0,0,mo,0,gi,go)
    +
    703  ENDIF
    +
    704  ! SPECIAL CASE OF POLAR STEREOGRAPHIC GRID
    +
    705  ELSEIF(kgdso(1).EQ.5.AND. &
    +
    706  kgdso(2).EQ.kgdso(3).AND.mod(kgdso(2),2).EQ.1.AND. &
    +
    707  kgdso(8).EQ.kgdso(9).AND.kgdso(11).EQ.64) THEN
    +
    708  nps=kgdso(2)
    +
    709  rlat1=kgdso(4)*1.e-3
    +
    710  rlon1=kgdso(5)*1.e-3
    +
    711  orient=kgdso(7)*1.e-3
    +
    712  xmesh=kgdso(8)
    +
    713  iproj=mod(kgdso(10)/128,2)
    +
    714  ip=(nps+1)/2
    +
    715  h=(-1.)**iproj
    +
    716  de=(1.+sin(60./dpr))*rerth
    +
    717  dr=de*cos(rlat1/dpr)/(1+h*sin(rlat1/dpr))
    +
    718  xp=1-h*sin((rlon1-orient)/dpr)*dr/xmesh
    +
    719  yp=1+cos((rlon1-orient)/dpr)*dr/xmesh
    +
    720  IF(nint(xp).EQ.ip.AND.nint(yp).EQ.ip) THEN
    +
    721  IF(iproj.EQ.0) THEN
    +
    722  CALL sptruns(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    723  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    724  60.,xmesh,orient,gi,go,go2)
    +
    725  ELSE
    +
    726  CALL sptruns(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    727  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    728  60.,xmesh,orient,gi,go2,go)
    +
    729  ENDIF
    +
    730  ispec=1
    +
    731  ENDIF
    +
    732  ! SPECIAL CASE OF MERCATOR GRID
    +
    733  ELSEIF(kgdso(1).EQ.1) THEN
    +
    734  ni=kgdso(2)
    +
    735  nj=kgdso(3)
    +
    736  rlat1=kgdso(4)*1.e-3
    +
    737  rlon1=kgdso(5)*1.e-3
    +
    738  rlon2=kgdso(8)*1.e-3
    +
    739  rlati=kgdso(9)*1.e-3
    +
    740  iscano=mod(kgdso(11)/128,2)
    +
    741  jscano=mod(kgdso(11)/64,2)
    +
    742  nscano=mod(kgdso(11)/32,2)
    +
    743  dy=kgdso(13)
    +
    744  hi=(-1.)**iscano
    +
    745  hj=(-1.)**(1-jscano)
    +
    746  dlono=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(ni-1)
    +
    747  dlato=hj*dy/(rerth*cos(rlati/dpr))*dpr
    +
    748  IF(nscano.EQ.0) THEN
    +
    749  CALL sptrunm(iromb,maxwv,idrti,imaxi,jmaxi,km,ni,nj, &
    +
    750  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    751  rlat1,rlon1,dlato,dlono,gi,go)
    +
    752  ispec=1
    +
    753  ENDIF
    +
    754  ENDIF
    +
    755  ! GENERAL SLOW CASE
    +
    756  IF(ispec.EQ.0) THEN
    +
    757  CALL sptrung(iromb,maxwv,idrti,imaxi,jmaxi,km,no, &
    +
    758  iprime,iskipi,jskipi,mi,mo,0,0,0,rlat,rlon,gi,go)
    +
    759  ENDIF
    +
    760  DO k=1,km
    +
    761  ibo(k)=0
    +
    762  DO n=1,no
    +
    763  lo(n,k)=.true.
    +
    764  ENDDO
    +
    765  ENDDO
    +
    766  ELSE
    +
    767  DO k=1,km
    +
    768  ibo(k)=1
    +
    769  DO n=1,no
    +
    770  lo(n,k)=.false.
    +
    771  go(n,k)=0.
    +
    772  ENDDO
    +
    773  ENDDO
    +
    774  ENDIF
    +
    775  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    776  END SUBROUTINE polates4_grib1
    +
    777 
    +
    778 
    +
    888  SUBROUTINE polatev4_grib2(IPOPT,IGDTNUMI,IGDTMPLI,IGDTLENI, &
    +
    889  IGDTNUMO,IGDTMPLO,IGDTLENO, &
    +
    890  MI,MO,KM,IBI,UI,VI, &
    +
    891  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    892  INTEGER, INTENT(IN ) :: IPOPT(20), IBI(KM)
    +
    893  INTEGER, INTENT(IN ) :: KM, MI, MO
    +
    894  INTEGER, INTENT( OUT) :: IRET, IBO(KM), NO
    +
    895  INTEGER, INTENT(IN ) :: IGDTNUMI, IGDTLENI
    +
    896  INTEGER, INTENT(IN ) :: IGDTMPLI(IGDTLENI)
    +
    897  INTEGER, INTENT(IN ) :: IGDTNUMO, IGDTLENO
    +
    898  INTEGER, INTENT(IN ) :: IGDTMPLO(IGDTLENO)
    +
    899  !
    +
    900  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    901  !
    +
    902  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    903  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    904  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    905  REAL, INTENT( OUT) :: CROT(MO),SROT(MO)
    +
    906  !
    +
    907  REAL, PARAMETER :: FILL=-9999.
    +
    908  REAL, PARAMETER :: PI=3.14159265358979
    +
    909  REAL, PARAMETER :: DPR=180./pi
    +
    910  !
    +
    911  INTEGER :: IDRTO, IROMB, ISKIPI, ISPEC
    +
    912  INTEGER :: IDRTI, IMAXI, JMAXI, IM, JM
    +
    913  INTEGER :: IPRIME, IG, IMO, JMO, IGO, JGO
    +
    914  INTEGER :: ISCAN, JSCAN, NSCAN
    +
    915  INTEGER :: ISCANO, JSCANO, NSCANO
    +
    916  INTEGER :: ISCALE, IP, IPROJ, JSKIPI, JG
    +
    917  INTEGER :: K, MAXWV, N, NI, NJ, NPS
    +
    918  !
    +
    919  REAL :: DLAT, DLON, DLATO, DLONO, DE, DR, DY
    +
    920  REAL :: E2, H, HI, HJ, DUMM(1)
    +
    921  REAL :: ORIENT, RERTH, SLAT
    +
    922  REAL :: RLAT1, RLON1, RLAT2, RLON2, RLATI
    +
    923  REAL :: UROT, VROT, UO2(MO,KM),VO2(MO,KM)
    +
    924  REAL :: XMESH, XP, YP, XPTS(MO),YPTS(MO)
    +
    925 
    +
    926  type(grib2_descriptor) :: desc_in, desc_out
    +
    927  class(ip_grid), allocatable :: grid_in, grid_out
    +
    928 
    +
    929  desc_in = init_descriptor(igdtnumi, igdtleni, igdtmpli)
    +
    930  desc_out = init_descriptor(igdtnumo, igdtleno, igdtmplo)
    +
    931 
    +
    932  call init_grid(grid_in, desc_in)
    +
    933  call init_grid(grid_out, desc_out)
    +
    934 
    +
    935  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    936  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    937  iret=0
    +
    938  IF(igdtnumo.GE.0) THEN
    +
    939  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts, &
    +
    940  rlon,rlat,no,crot,srot)
    +
    941  IF(no.EQ.0) iret=3
    +
    942  ENDIF
    +
    943  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    944  ! AFFIRM APPROPRIATE INPUT GRID
    +
    945  ! LAT/LON OR GAUSSIAN
    +
    946  ! NO BITMAPS
    +
    947  ! FULL ZONAL COVERAGE
    +
    948  ! FULL MERIDIONAL COVERAGE
    +
    949  idrti=igdtnumi
    +
    950  IF(idrti==40) idrti=4
    +
    951  IF(idrti==0.OR.idrti==4)THEN
    +
    952  im=igdtmpli(8)
    +
    953  jm=igdtmpli(9)
    +
    954  iscale=igdtmpli(10)*igdtmpli(11)
    +
    955  IF(iscale==0) iscale=10**6
    +
    956  rlon1=float(igdtmpli(13))/float(iscale)
    +
    957  rlon2=float(igdtmpli(16))/float(iscale)
    +
    958  iscan=mod(igdtmpli(19)/128,2)
    +
    959  jscan=mod(igdtmpli(19)/64,2)
    +
    960  nscan=mod(igdtmpli(19)/32,2)
    +
    961  ELSE
    +
    962  iret=41
    +
    963  ENDIF
    +
    964  DO k=1,km
    +
    965  IF(ibi(k).NE.0) iret=41
    +
    966  ENDDO
    +
    967  IF(iret.EQ.0) THEN
    +
    968  IF(iscan.EQ.0) THEN
    +
    969  dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    970  ELSE
    +
    971  dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    972  ENDIF
    +
    973  ig=nint(360/abs(dlon))
    +
    974  iprime=1+mod(-nint(rlon1/dlon)+ig,ig)
    +
    975  imaxi=ig
    +
    976  jmaxi=jm
    +
    977  IF(mod(ig,2).NE.0.OR.im.LT.ig) iret=41
    +
    978  ENDIF
    +
    979  IF(iret.EQ.0.AND.idrti.EQ.0) THEN
    +
    980  iscale=igdtmpli(10)*igdtmpli(11)
    +
    981  IF(iscale==0) iscale=10**6
    +
    982  rlat1=float(igdtmpli(12))/float(iscale)
    +
    983  rlat2=float(igdtmpli(15))/float(iscale)
    +
    984  dlat=(rlat2-rlat1)/(jm-1)
    +
    985  jg=nint(180/abs(dlat))
    +
    986  IF(jm.EQ.jg) idrti=256
    +
    987  IF(jm.NE.jg.AND.jm.NE.jg+1) iret=41
    +
    988  ELSEIF(iret.EQ.0.AND.idrti.EQ.4) THEN
    +
    989  jg=igdtmpli(18)*2
    +
    990  IF(jm.NE.jg) iret=41
    +
    991  ENDIF
    +
    992  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    993  ! SET PARAMETERS
    +
    994  IF(iret.EQ.0) THEN
    +
    995  iromb=ipopt(1)
    +
    996  maxwv=ipopt(2)
    +
    997  IF(maxwv.EQ.-1) THEN
    +
    998  IF(iromb.EQ.0.AND.idrti.EQ.4) maxwv=(jmaxi-1)
    +
    999  IF(iromb.EQ.1.AND.idrti.EQ.4) maxwv=(jmaxi-1)/2
    +
    1000  IF(iromb.EQ.0.AND.idrti.EQ.0) maxwv=(jmaxi-3)/2
    +
    1001  IF(iromb.EQ.1.AND.idrti.EQ.0) maxwv=(jmaxi-3)/4
    +
    1002  IF(iromb.EQ.0.AND.idrti.EQ.256) maxwv=(jmaxi-1)/2
    +
    1003  IF(iromb.EQ.1.AND.idrti.EQ.256) maxwv=(jmaxi-1)/4
    +
    1004  ENDIF
    +
    1005  IF((iromb.NE.0.AND.iromb.NE.1).OR.maxwv.LT.0) iret=42
    +
    1006  ENDIF
    +
    1007  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    1008  ! INTERPOLATE
    +
    1009  IF(iret.EQ.0) THEN
    +
    1010  IF(nscan.EQ.0) THEN
    +
    1011  iskipi=1
    +
    1012  jskipi=im
    +
    1013  ELSE
    +
    1014  iskipi=jm
    +
    1015  jskipi=1
    +
    1016  ENDIF
    +
    1017  IF(iscan.EQ.1) iskipi=-iskipi
    +
    1018  IF(jscan.EQ.0) jskipi=-jskipi
    +
    1019  ispec=0
    +
    1020  ! SPECIAL CASE OF GLOBAL CYLINDRICAL GRID
    +
    1021  IF((igdtnumo.EQ.0.OR.igdtnumo.EQ.40).AND. &
    +
    1022  mod(igdtmplo(8),2).EQ.0.AND.igdtmplo(13).EQ.0.AND. &
    +
    1023  igdtmplo(19).EQ.0) THEN
    +
    1024  idrto=igdtnumo
    +
    1025  IF(idrto==40)idrto=4
    +
    1026  imo=igdtmplo(8)
    +
    1027  jmo=igdtmplo(9)
    +
    1028  iscale=igdtmplo(10)*igdtmplo(11)
    +
    1029  IF(iscale==0) iscale=10**6
    +
    1030  rlon2=float(igdtmplo(16))/float(iscale)
    +
    1031  dlono=(mod(rlon2-1+3600,360.)+1)/(imo-1)
    +
    1032  igo=nint(360/abs(dlono))
    +
    1033  IF(imo.EQ.igo.AND.idrto.EQ.0) THEN
    +
    1034  rlat1=float(igdtmplo(12))/float(iscale)
    +
    1035  rlat2=float(igdtmplo(15))/float(iscale)
    +
    1036  dlat=(rlat2-rlat1)/(jmo-1)
    +
    1037  jgo=nint(180/abs(dlat))
    +
    1038  IF(jmo.EQ.jgo) idrto=256
    +
    1039  IF(jmo.EQ.jgo.OR.jmo.EQ.jgo+1) ispec=1
    +
    1040  ELSEIF(imo.EQ.igo.AND.idrto.EQ.4) THEN
    +
    1041  jgo=igdtmplo(18)*2
    +
    1042  IF(jmo.EQ.jgo) ispec=1
    +
    1043  ENDIF
    +
    1044  IF(ispec.EQ.1) THEN
    +
    1045  CALL sptrunv(iromb,maxwv,idrti,imaxi,jmaxi,idrto,imo,jmo, &
    +
    1046  km,iprime,iskipi,jskipi,mi,0,0,mo,0,ui,vi, &
    +
    1047  .true.,uo,vo,.false.,dumm,dumm,.false.,dumm,dumm)
    +
    1048  ENDIF
    +
    1049  ! SPECIAL CASE OF POLAR STEREOGRAPHIC GRID
    +
    1050  ELSEIF(igdtnumo.EQ.20.AND. &
    +
    1051  igdtmplo(8).EQ.igdtmplo(9).AND.mod(igdtmplo(8),2).EQ.1.AND. &
    +
    1052  igdtmplo(15).EQ.igdtmplo(16).AND.igdtmplo(18).EQ.64.AND. &
    +
    1053  mod(igdtmplo(12)/8,2).EQ.1) THEN
    +
    1054  nps=igdtmplo(8)
    +
    1055  rlat1=float(igdtmplo(10))*1.e-6
    +
    1056  rlon1=float(igdtmplo(11))*1.e-6
    +
    1057  orient=float(igdtmplo(14))*1.e-6
    +
    1058  xmesh=float(igdtmplo(15))*1.e-3
    +
    1059  iproj=mod(igdtmplo(17)/128,2)
    +
    1060  ip=(nps+1)/2
    +
    1061  h=(-1.)**iproj
    +
    1062  slat=float(abs(igdtmplo(13)))*1.e-6
    +
    1063  CALL earth_radius(igdtmplo,igdtleno,rerth,e2)
    +
    1064  de=(1.+sin(slat/dpr))*rerth
    +
    1065  dr=de*cos(rlat1/dpr)/(1+h*sin(rlat1/dpr))
    +
    1066  xp=1-h*sin((rlon1-orient)/dpr)*dr/xmesh
    +
    1067  yp=1+cos((rlon1-orient)/dpr)*dr/xmesh
    +
    1068  IF(nint(xp).EQ.ip.AND.nint(yp).EQ.ip) THEN
    +
    1069  IF(iproj.EQ.0) THEN
    +
    1070  CALL sptrunsv(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    1071  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    1072  slat,xmesh,orient,ui,vi,.true.,uo,vo,uo2,vo2, &
    +
    1073  .false.,dumm,dumm,dumm,dumm, &
    +
    1074  .false.,dumm,dumm,dumm,dumm)
    +
    1075  ELSE
    +
    1076  CALL sptrunsv(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    1077  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    1078  slat,xmesh,orient,ui,vi,.true.,uo2,vo2,uo,vo, &
    +
    1079  .false.,dumm,dumm,dumm,dumm, &
    +
    1080  .false.,dumm,dumm,dumm,dumm)
    +
    1081  ENDIF
    +
    1082  ispec=1
    +
    1083  ENDIF
    +
    1084  ! SPECIAL CASE OF MERCATOR GRID
    +
    1085  ELSEIF(igdtnumo.EQ.10) THEN
    +
    1086  ni=igdtmplo(8)
    +
    1087  nj=igdtmplo(9)
    +
    1088  rlat1=float(igdtmplo(10))*1.0e-6
    +
    1089  rlon1=float(igdtmplo(11))*1.0e-6
    +
    1090  rlon2=float(igdtmplo(15))*1.0e-6
    +
    1091  rlati=float(igdtmplo(13))*1.0e-6
    +
    1092  iscano=mod(igdtmplo(16)/128,2)
    +
    1093  jscano=mod(igdtmplo(16)/64,2)
    +
    1094  nscano=mod(igdtmplo(16)/32,2)
    +
    1095  dy=float(igdtmplo(19))*1.0e-3
    +
    1096  hi=(-1.)**iscano
    +
    1097  hj=(-1.)**(1-jscano)
    +
    1098  CALL earth_radius(igdtmplo,igdtleno,rerth,e2)
    +
    1099  dlono=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(ni-1)
    +
    1100  dlato=hj*dy/(rerth*cos(rlati/dpr))*dpr
    +
    1101  IF(nscano.EQ.0) THEN
    +
    1102  CALL sptrunmv(iromb,maxwv,idrti,imaxi,jmaxi,km,ni,nj, &
    +
    1103  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    1104  rlat1,rlon1,dlato,dlono,ui,vi, &
    +
    1105  .true.,uo,vo,.false.,dumm,dumm,.false.,dumm,dumm)
    +
    1106  ispec=1
    +
    1107  ENDIF
    +
    1108  ENDIF
    +
    1109  ! GENERAL SLOW CASE
    +
    1110  IF(ispec.EQ.0) THEN
    +
    1111  CALL sptrungv(iromb,maxwv,idrti,imaxi,jmaxi,km,no, &
    +
    1112  iprime,iskipi,jskipi,mi,mo,0,0,0,rlat,rlon, &
    +
    1113  ui,vi,.true.,uo,vo,.false.,dumm,dumm,.false.,dumm,dumm)
    +
    1114  DO k=1,km
    +
    1115  ibo(k)=0
    +
    1116  DO n=1,no
    +
    1117  lo(n,k)=.true.
    +
    1118  urot=crot(n)*uo(n,k)-srot(n)*vo(n,k)
    +
    1119  vrot=srot(n)*uo(n,k)+crot(n)*vo(n,k)
    +
    1120  uo(n,k)=urot
    +
    1121  vo(n,k)=vrot
    +
    1122  ENDDO
    +
    1123  ENDDO
    +
    1124  ENDIF
    +
    1125  ELSE
    +
    1126  DO k=1,km
    +
    1127  ibo(k)=1
    +
    1128  DO n=1,no
    +
    1129  lo(n,k)=.false.
    +
    1130  uo(n,k)=0.
    +
    1131  vo(n,k)=0.
    +
    1132  ENDDO
    +
    1133  ENDDO
    +
    1134  ENDIF
    +
    1135  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    1136  END SUBROUTINE polatev4_grib2
    +
    1137 
    +
    1222  SUBROUTINE polatev4_grib1(IPOPT,KGDSI,KGDSO,MI,MO,KM,IBI,UI,VI, &
    +
    1223  NO,RLAT,RLON,CROT,SROT,IBO,LO,UO,VO,IRET)
    +
    1224  INTEGER, INTENT(IN ) :: IPOPT(20), IBI(KM)
    +
    1225  INTEGER, INTENT(IN ) :: KM, MI, MO
    +
    1226  INTEGER, INTENT( OUT) :: IRET, IBO(KM)
    +
    1227  INTEGER, INTENT(IN) :: KGDSI(200),KGDSO(200)
    +
    1228  !
    +
    1229  LOGICAL*1, INTENT( OUT) :: LO(MO,KM)
    +
    1230  !
    +
    1231  REAL, INTENT(IN ) :: UI(MI,KM),VI(MI,KM)
    +
    1232  REAL, INTENT( OUT) :: UO(MO,KM),VO(MO,KM)
    +
    1233  REAL, INTENT(INOUT) :: RLAT(MO),RLON(MO)
    +
    1234  REAL, INTENT( OUT) :: CROT(MO),SROT(MO)
    +
    1235  !
    +
    1236  REAL, PARAMETER :: FILL=-9999.
    +
    1237  REAL, PARAMETER :: RERTH=6.3712e6
    +
    1238  REAL, PARAMETER :: PI=3.14159265358979
    +
    1239  REAL, PARAMETER :: DPR=180./pi
    +
    1240  !
    +
    1241  INTEGER :: IDRTO, IROMB, ISKIPI, ISPEC
    +
    1242  INTEGER :: IDRTI, IMAXI, JMAXI, IM, JM
    +
    1243  INTEGER :: IPRIME, IG, IMO, JMO, IGO, JGO
    +
    1244  INTEGER :: ISCAN, JSCAN, NSCAN
    +
    1245  INTEGER :: ISCANO, JSCANO, NSCANO
    +
    1246  INTEGER :: IP, IPROJ, JSKIPI, JG
    +
    1247  INTEGER :: K, MAXWV, N, NI, NJ, NO, NPS
    +
    1248  !
    +
    1249  REAL :: DLAT, DLON, DLATO, DLONO, DE, DR, DY
    +
    1250  REAL :: H, HI, HJ, DUMM(1)
    +
    1251  REAL :: ORIENT
    +
    1252  REAL :: RLAT1, RLON1, RLAT2, RLON2, RLATI
    +
    1253  REAL :: UROT, VROT, UO2(MO,KM),VO2(MO,KM)
    +
    1254  REAL :: XMESH, XP, YP, XPTS(MO),YPTS(MO)
    +
    1255 
    +
    1256  type(grib1_descriptor) :: desc_in, desc_out
    +
    1257  class(ip_grid), allocatable :: grid_in, grid_out
    +
    1258 
    +
    1259  desc_in = init_descriptor(kgdsi)
    +
    1260  desc_out = init_descriptor(kgdso)
    +
    1261 
    +
    1262  call init_grid(grid_in, desc_in)
    +
    1263  call init_grid(grid_out, desc_out)
    +
    1264  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    1265  ! COMPUTE NUMBER OF OUTPUT POINTS AND THEIR LATITUDES AND LONGITUDES.
    +
    1266  iret=0
    +
    1267  IF(kgdso(1).GE.0) THEN
    +
    1268  CALL gdswzd(grid_out, 0,mo,fill,xpts,ypts,rlon,rlat,no,crot,srot)
    +
    1269  IF(no.EQ.0) iret=3
    +
    1270  ENDIF
    +
    1271  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    1272  ! AFFIRM APPROPRIATE INPUT GRID
    +
    1273  ! LAT/LON OR GAUSSIAN
    +
    1274  ! NO BITMAPS
    +
    1275  ! FULL ZONAL COVERAGE
    +
    1276  ! FULL MERIDIONAL COVERAGE
    +
    1277  idrti=kgdsi(1)
    +
    1278  im=kgdsi(2)
    +
    1279  jm=kgdsi(3)
    +
    1280  rlon1=kgdsi(5)*1.e-3
    +
    1281  rlon2=kgdsi(8)*1.e-3
    +
    1282  iscan=mod(kgdsi(11)/128,2)
    +
    1283  jscan=mod(kgdsi(11)/64,2)
    +
    1284  nscan=mod(kgdsi(11)/32,2)
    +
    1285  IF(idrti.NE.0.AND.idrti.NE.4) iret=41
    +
    1286  DO k=1,km
    +
    1287  IF(ibi(k).NE.0) iret=41
    +
    1288  ENDDO
    +
    1289  IF(iret.EQ.0) THEN
    +
    1290  IF(iscan.EQ.0) THEN
    +
    1291  dlon=(mod(rlon2-rlon1-1+3600,360.)+1)/(im-1)
    +
    1292  ELSE
    +
    1293  dlon=-(mod(rlon1-rlon2-1+3600,360.)+1)/(im-1)
    +
    1294  ENDIF
    +
    1295  ig=nint(360/abs(dlon))
    +
    1296  iprime=1+mod(-nint(rlon1/dlon)+ig,ig)
    +
    1297  imaxi=ig
    +
    1298  jmaxi=jm
    +
    1299  IF(mod(ig,2).NE.0.OR.im.LT.ig) iret=41
    +
    1300  ENDIF
    +
    1301  IF(iret.EQ.0.AND.idrti.EQ.0) THEN
    +
    1302  rlat1=kgdsi(4)*1.e-3
    +
    1303  rlat2=kgdsi(7)*1.e-3
    +
    1304  dlat=(rlat2-rlat1)/(jm-1)
    +
    1305  jg=nint(180/abs(dlat))
    +
    1306  IF(jm.EQ.jg) idrti=256
    +
    1307  IF(jm.NE.jg.AND.jm.NE.jg+1) iret=41
    +
    1308  ELSEIF(iret.EQ.0.AND.idrti.EQ.4) THEN
    +
    1309  jg=kgdsi(10)*2
    +
    1310  IF(jm.NE.jg) iret=41
    +
    1311  ENDIF
    +
    1312  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    1313  ! SET PARAMETERS
    +
    1314  IF(iret.EQ.0) THEN
    +
    1315  iromb=ipopt(1)
    +
    1316  maxwv=ipopt(2)
    +
    1317  IF(maxwv.EQ.-1) THEN
    +
    1318  IF(iromb.EQ.0.AND.idrti.EQ.4) maxwv=(jmaxi-1)
    +
    1319  IF(iromb.EQ.1.AND.idrti.EQ.4) maxwv=(jmaxi-1)/2
    +
    1320  IF(iromb.EQ.0.AND.idrti.EQ.0) maxwv=(jmaxi-3)/2
    +
    1321  IF(iromb.EQ.1.AND.idrti.EQ.0) maxwv=(jmaxi-3)/4
    +
    1322  IF(iromb.EQ.0.AND.idrti.EQ.256) maxwv=(jmaxi-1)/2
    +
    1323  IF(iromb.EQ.1.AND.idrti.EQ.256) maxwv=(jmaxi-1)/4
    +
    1324  ENDIF
    +
    1325  IF((iromb.NE.0.AND.iromb.NE.1).OR.maxwv.LT.0) iret=42
    +
    1326  ENDIF
    +
    1327  ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    1328  ! INTERPOLATE
    +
    1329  IF(iret.EQ.0) THEN
    +
    1330  IF(nscan.EQ.0) THEN
    +
    1331  iskipi=1
    +
    1332  jskipi=im
    +
    1333  ELSE
    +
    1334  iskipi=jm
    +
    1335  jskipi=1
    +
    1336  ENDIF
    +
    1337  IF(iscan.EQ.1) iskipi=-iskipi
    +
    1338  IF(jscan.EQ.0) jskipi=-jskipi
    +
    1339  ispec=0
    +
    1340  ! SPECIAL CASE OF GLOBAL CYLINDRICAL GRID
    +
    1341  IF((kgdso(1).EQ.0.OR.kgdso(1).EQ.4).AND. &
    +
    1342  mod(kgdso(2),2).EQ.0.AND.kgdso(5).EQ.0.AND. &
    +
    1343  kgdso(11).EQ.0) THEN
    +
    1344  idrto=kgdso(1)
    +
    1345  imo=kgdso(2)
    +
    1346  jmo=kgdso(3)
    +
    1347  rlon2=kgdso(8)*1.e-3
    +
    1348  dlono=(mod(rlon2-1+3600,360.)+1)/(imo-1)
    +
    1349  igo=nint(360/abs(dlono))
    +
    1350  IF(imo.EQ.igo.AND.idrto.EQ.0) THEN
    +
    1351  rlat1=kgdso(4)*1.e-3
    +
    1352  rlat2=kgdso(7)*1.e-3
    +
    1353  dlat=(rlat2-rlat1)/(jmo-1)
    +
    1354  jgo=nint(180/abs(dlat))
    +
    1355  IF(jmo.EQ.jgo) idrto=256
    +
    1356  IF(jmo.EQ.jgo.OR.jmo.EQ.jgo+1) ispec=1
    +
    1357  ELSEIF(imo.EQ.igo.AND.idrto.EQ.4) THEN
    +
    1358  jgo=kgdso(10)*2
    +
    1359  IF(jmo.EQ.jgo) ispec=1
    +
    1360  ENDIF
    +
    1361  IF(ispec.EQ.1) THEN
    +
    1362  CALL sptrunv(iromb,maxwv,idrti,imaxi,jmaxi,idrto,imo,jmo, &
    +
    1363  km,iprime,iskipi,jskipi,mi,0,0,mo,0,ui,vi, &
    +
    1364  .true.,uo,vo,.false.,dumm,dumm,.false.,dumm,dumm)
    +
    1365  ENDIF
    +
    1366  ! SPECIAL CASE OF POLAR STEREOGRAPHIC GRID
    +
    1367  ELSEIF(kgdso(1).EQ.5.AND. &
    +
    1368  kgdso(2).EQ.kgdso(3).AND.mod(kgdso(2),2).EQ.1.AND. &
    +
    1369  kgdso(8).EQ.kgdso(9).AND.kgdso(11).EQ.64.AND. &
    +
    1370  mod(kgdso(6)/8,2).EQ.1) THEN
    +
    1371  nps=kgdso(2)
    +
    1372  rlat1=kgdso(4)*1.e-3
    +
    1373  rlon1=kgdso(5)*1.e-3
    +
    1374  orient=kgdso(7)*1.e-3
    +
    1375  xmesh=kgdso(8)
    +
    1376  iproj=mod(kgdso(10)/128,2)
    +
    1377  ip=(nps+1)/2
    +
    1378  h=(-1.)**iproj
    +
    1379  de=(1.+sin(60./dpr))*rerth
    +
    1380  dr=de*cos(rlat1/dpr)/(1+h*sin(rlat1/dpr))
    +
    1381  xp=1-h*sin((rlon1-orient)/dpr)*dr/xmesh
    +
    1382  yp=1+cos((rlon1-orient)/dpr)*dr/xmesh
    +
    1383  IF(nint(xp).EQ.ip.AND.nint(yp).EQ.ip) THEN
    +
    1384  IF(iproj.EQ.0) THEN
    +
    1385  CALL sptrunsv(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    1386  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    1387  60.,xmesh,orient,ui,vi,.true.,uo,vo,uo2,vo2, &
    +
    1388  .false.,dumm,dumm,dumm,dumm, &
    +
    1389  .false.,dumm,dumm,dumm,dumm)
    +
    1390  ELSE
    +
    1391  CALL sptrunsv(iromb,maxwv,idrti,imaxi,jmaxi,km,nps, &
    +
    1392  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    1393  60.,xmesh,orient,ui,vi,.true.,uo2,vo2,uo,vo, &
    +
    1394  .false.,dumm,dumm,dumm,dumm, &
    +
    1395  .false.,dumm,dumm,dumm,dumm)
    +
    1396  ENDIF
    +
    1397  ispec=1
    +
    1398  ENDIF
    +
    1399  ! SPECIAL CASE OF MERCATOR GRID
    +
    1400  ELSEIF(kgdso(1).EQ.1) THEN
    +
    1401  ni=kgdso(2)
    +
    1402  nj=kgdso(3)
    +
    1403  rlat1=kgdso(4)*1.e-3
    +
    1404  rlon1=kgdso(5)*1.e-3
    +
    1405  rlon2=kgdso(8)*1.e-3
    +
    1406  rlati=kgdso(9)*1.e-3
    +
    1407  iscano=mod(kgdso(11)/128,2)
    +
    1408  jscano=mod(kgdso(11)/64,2)
    +
    1409  nscano=mod(kgdso(11)/32,2)
    +
    1410  dy=kgdso(13)
    +
    1411  hi=(-1.)**iscano
    +
    1412  hj=(-1.)**(1-jscano)
    +
    1413  dlono=hi*(mod(hi*(rlon2-rlon1)-1+3600,360.)+1)/(ni-1)
    +
    1414  dlato=hj*dy/(rerth*cos(rlati/dpr))*dpr
    +
    1415  IF(nscano.EQ.0) THEN
    +
    1416  CALL sptrunmv(iromb,maxwv,idrti,imaxi,jmaxi,km,ni,nj, &
    +
    1417  iprime,iskipi,jskipi,mi,mo,0,0,0, &
    +
    1418  rlat1,rlon1,dlato,dlono,ui,vi, &
    +
    1419  .true.,uo,vo,.false.,dumm,dumm,.false.,dumm,dumm)
    +
    1420  ispec=1
    +
    1421  ENDIF
    +
    1422  ENDIF
    +
    1423  ! GENERAL SLOW CASE
    +
    1424  IF(ispec.EQ.0) THEN
    +
    1425  CALL sptrungv(iromb,maxwv,idrti,imaxi,jmaxi,km,no, &
    +
    1426  iprime,iskipi,jskipi,mi,mo,0,0,0,rlat,rlon, &
    +
    1427  ui,vi,.true.,uo,vo,.false.,dumm,dumm,.false.,dumm,dumm)
    +
    1428  DO k=1,km
    +
    1429  ibo(k)=0
    +
    1430  DO n=1,no
    +
    1431  lo(n,k)=.true.
    +
    1432  urot=crot(n)*uo(n,k)-srot(n)*vo(n,k)
    +
    1433  vrot=srot(n)*uo(n,k)+crot(n)*vo(n,k)
    +
    1434  uo(n,k)=urot
    +
    1435  vo(n,k)=vrot
    +
    1436  ENDDO
    +
    1437  ENDDO
    +
    1438  ENDIF
    +
    1439  ELSE
    +
    1440  DO k=1,km
    +
    1441  ibo(k)=1
    +
    1442  DO n=1,no
    +
    1443  lo(n,k)=.false.
    +
    1444  uo(n,k)=0.
    +
    1445  vo(n,k)=0.
    +
    1446  ENDDO
    +
    1447  ENDDO
    +
    1448  ENDIF
    +
    1449  END SUBROUTINE polatev4_grib1
    +
    1450 end module spectral_interp_mod
    + + + + + + +
    Determine earth radius and shape.
    +
    subroutine, public earth_radius(IGDTMPL, IGDTLEN, RADIUS, ECCEN_SQUARED)
    Determine earth radius and shape.
    +
    Driver module for gdswzd routines.
    Definition: gdswzd_mod.F90:25
    +
    Users derived type grid descriptor objects to abstract away the raw GRIB1 and GRIB2 grid definitions.
    +
    Routines for creating an ip_grid given a Grib descriptor.
    +
    Abstract ip_grid type.
    Definition: ip_grid_mod.F90:10
    +
    Interpolate spectral.
    +
    subroutine polatev4_grib2(IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    Interpolate vector fields (spectral).
    +
    subroutine interpolate_spectral_scalar(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    Interpolate spectral scalar.
    +
    subroutine polates4_grib2(IPOPT, IGDTNUMI, IGDTMPLI, IGDTLENI, IGDTNUMO, IGDTMPLO, IGDTLENO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    Interpolate scalar fields (spectral).
    +
    subroutine polates4_grib1(IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, GI, NO, RLAT, RLON, IBO, LO, GO, IRET)
    Interpolate scalar fields (spectral).
    +
    subroutine interpolate_spectral_vector(IPOPT, grid_in, grid_out, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    Interpolate spectral vector.
    +
    subroutine polatev4_grib1(IPOPT, KGDSI, KGDSO, MI, MO, KM, IBI, UI, VI, NO, RLAT, RLON, CROT, SROT, IBO, LO, UO, VO, IRET)
    Interpolate vector fields (spectral).
    +
    subroutine sptrun(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRIDI, GRIDO)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrun.f:58
    +
    subroutine sptrung(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NRSKIP, NGSKIP, JCPU, RLAT, RLON, GRIDI, GP)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrung.f:68
    +
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELD...
    Definition: sptrungv.f:85
    +
    subroutine sptrunm(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, MI, MJ, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, RLAT1, RLON1, DLAT, DLON, GRIDI, GM)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrunm.f:80
    +
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS...
    Definition: sptrunmv.f:96
    +
    subroutine sptruns(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NPS, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, TRUE, XMESH, ORIENT, GRIDI, GN, GS)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptruns.f:75
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunsv.f:94
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunv.f:96
    +
    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.
    +
    Grib-2 descriptor containing a grib2 GDT represented by an integer array.
    +
    Abstract grid that holds fields and methods common to all grids.
    Definition: ip_grid_mod.F90:58
    +
    +
    + + + + diff --git a/ver-5.1.0/speps_8f.html b/ver-5.1.0/speps_8f.html new file mode 100644 index 00000000..c56a4928 --- /dev/null +++ b/ver-5.1.0/speps_8f.html @@ -0,0 +1,211 @@ + + + + + + + +NCEPLIBS-ip: speps.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    speps.f File Reference
    +
    +
    + +

    Compute utility spectral fields. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine speps (I, M, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
     Computes constant fields indexed in the spectral domain in "IBM ORDER" (Zonal wavenumber is the slower index). More...
     
    +

    Detailed Description

    +

    Compute utility spectral fields.

    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file speps.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ speps()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine speps ( I,
     M,
    real, dimension((m+1)*((i+1)*m+2)/2) EPS,
    real, dimension(m+1) EPSTOP,
    real, dimension((m+1)*((i+1)*m+2)/2) ENN1,
    real, dimension((m+1)*((i+1)*m+2)/2) ELONN1,
    real, dimension((m+1)*((i+1)*m+2)/2) EON,
    real, dimension(m+1) EONTOP 
    )
    +
    + +

    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
    • +
    +
    Parameters
    + + + + + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    EPS((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
    EPSTOP(M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
    ENN1((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    ELONN1((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    EON((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    EONTOP(M+1) EPSILON/N*A OVER TOP
    +
    +
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition at line 25 of file speps.f.

    + +

    Referenced by spwget().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/speps_8f.js b/ver-5.1.0/speps_8f.js new file mode 100644 index 00000000..48596d4c --- /dev/null +++ b/ver-5.1.0/speps_8f.js @@ -0,0 +1,4 @@ +var speps_8f = +[ + [ "speps", "speps_8f.html#a0ab523ec5e1393ffca970897e63a9131", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/speps_8f_source.html b/ver-5.1.0/speps_8f_source.html new file mode 100644 index 00000000..27153cbd --- /dev/null +++ b/ver-5.1.0/speps_8f_source.html @@ -0,0 +1,153 @@ + + + + + + + +NCEPLIBS-ip: speps.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    speps.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute utility spectral fields.
    +
    3 C> @author Iredell @date 92-10-31
    +
    4 
    +
    5 C> Computes constant fields indexed in the spectral domain
    +
    6 C> in "IBM ORDER" (Zonal wavenumber is the slower index).
    +
    7 C>
    +
    8 C> If L is the zonal wavenumber and N is the total wavenumber
    +
    9 C> and A is the earth radius, then the fields returned are:
    +
    10 C> - (1) normalizing factor EPSILON=SQRT((N**2-L**2)/(4*N**2-1))
    +
    11 C> - (2) Laplacian factor N*(N+1)/A**2
    +
    12 C> - (3) zonal derivative/Laplacian factor L/(N*(N+1))*A
    +
    13 C> - (4) Meridional derivative/Laplacian factor EPSILON/N*A
    +
    14 C>
    +
    15 C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
    +
    16 C> @param M spectral truncation
    +
    17 C> @param EPS ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
    +
    18 C> @param EPSTOP (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
    +
    19 C> @param ENN1 ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    +
    20 C> @param ELONN1 ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    +
    21 C> @param EON ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    +
    22 C> @param EONTOP (M+1) EPSILON/N*A OVER TOP
    +
    23 C>
    +
    24 C> @author Iredell @date 92-10-31
    +
    25  SUBROUTINE speps(I,M,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
    +
    26  REAL EPS((M+1)*((I+1)*M+2)/2),EPSTOP(M+1)
    +
    27  REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
    +
    28  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
    +
    29  parameter(rerth=6.3712e6,ra2=1./rerth**2)
    +
    30 
    +
    31  DO l=0,m
    +
    32  k=l*(2*m+(i-1)*(l-1))/2+l+1
    +
    33  eps(k)=0.
    +
    34  enn1(k)=ra2*l*(l+1)
    +
    35  elonn1(k)=rerth/(l+1)
    +
    36  eon(k)=0.
    +
    37  ENDDO
    +
    38  DO l=0,m
    +
    39  DO n=l+1,i*l+m
    +
    40  k=l*(2*m+(i-1)*(l-1))/2+n+1
    +
    41  eps(k)=sqrt(float(n**2-l**2)/float(4*n**2-1))
    +
    42  enn1(k)=ra2*n*(n+1)
    +
    43  elonn1(k)=rerth*l/(n*(n+1))
    +
    44  eon(k)=rerth/n*eps(k)
    +
    45  ENDDO
    +
    46  ENDDO
    +
    47  DO l=0,m
    +
    48  n=i*l+m+1
    +
    49  epstop(l+1)=sqrt(float(n**2-l**2)/float(4*n**2-1))
    +
    50  eontop(l+1)=rerth/n*epstop(l+1)
    +
    51  ENDDO
    +
    52  RETURN
    +
    53  END
    +
    subroutine speps(I, M, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    Computes constant fields indexed in the spectral domain in "IBM ORDER" (Zonal wavenumber is the slowe...
    Definition: speps.f:26
    +
    +
    + + + + diff --git a/ver-5.1.0/spfft1_8f.html b/ver-5.1.0/spfft1_8f.html new file mode 100644 index 00000000..1aae07f9 --- /dev/null +++ b/ver-5.1.0/spfft1_8f.html @@ -0,0 +1,206 @@ + + + + + + + +NCEPLIBS-ip: spfft1.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spfft1.f File Reference
    +
    +
    + +

    Perform multiple fast Fourier transforms. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spfft1 (IMAX, INCW, INCG, KMAX, W, G, IDIR)
     This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space. More...
     
    +

    Detailed Description

    +

    Perform multiple fast Fourier transforms.

    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition in file spfft1.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spfft1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spfft1 (integer, intent(in) IMAX,
    integer, intent(in) INCW,
    integer, intent(in) INCG,
    integer, intent(in) KMAX,
    complex, dimension(incw,kmax), intent(inout) W,
    real, dimension(incg,kmax), intent(inout) G,
    integer, intent(in) IDIR 
    )
    +
    + +

    This subprogram 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.

    +
    Note
    The restrictions on IMAX are that it must be a multiple of 1 to 25 factors of two, up to 2 factors of three, and up to 1 factor of five, seven and eleven.
    +
    +This subprogram is thread-safe.
    +
    Parameters
    + + + + + + + + +
    IMAXnumber of values in the cyclic physical space (see limitations on imax in remarks below.)
    INCWfirst dimension of the complex amplitude array (INCW >= IMAX/2+1)
    INCGfirst dimension of the real value array (INCG >= IMAX)
    KMAXnumber of transforms to perform
    [out]Wcomplex amplitudes if IDIR>0
    [out]Gvalues if IDIR<0
    IDIRdirection flag
      +
    • IDIR>0 to transform from Fourier to physical space
    • +
    • IDIR<0 to transform from physical to Fourier space
    • +
    +
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition at line 32 of file spfft1.f.

    + +

    References scrft(), and srcft().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spfft1_8f.js b/ver-5.1.0/spfft1_8f.js new file mode 100644 index 00000000..d459d959 --- /dev/null +++ b/ver-5.1.0/spfft1_8f.js @@ -0,0 +1,4 @@ +var spfft1_8f = +[ + [ "spfft1", "spfft1_8f.html#ac63643472eda83948c0b249b611346d6", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spfft1_8f_source.html b/ver-5.1.0/spfft1_8f_source.html new file mode 100644 index 00000000..7e233e21 --- /dev/null +++ b/ver-5.1.0/spfft1_8f_source.html @@ -0,0 +1,164 @@ + + + + + + + +NCEPLIBS-ip: spfft1.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spfft1.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform multiple fast Fourier transforms.
    +
    3 C> @author Iredell @date 96-02-20
    +
    4 
    +
    5 C> This subprogram performs multiple fast Fourier transforms
    +
    6 C> between complex amplitudes in Fourier space and real values
    +
    7 C> in cyclic physical space.
    +
    8 C>
    +
    9 C> Subprogram spfft1() initializes trigonometric data each call.
    +
    10 C> Use subprogram spfft() to save time and initialize once.
    +
    11 C> This version invokes the IBM ESSL FFT.
    +
    12 C>
    +
    13 C> @note The restrictions on IMAX are that it must be a multiple of 1
    +
    14 C> to 25 factors of two, up to 2 factors of three, and up to 1 factor of
    +
    15 C> five, seven and eleven.
    +
    16 C>
    +
    17 C> @note This subprogram is thread-safe.
    +
    18 C>
    +
    19 C> @param IMAX number of values in the cyclic physical space
    +
    20 C> (see limitations on imax in remarks below.)
    +
    21 C> @param INCW first dimension of the complex amplitude array
    +
    22 C> (INCW >= IMAX/2+1)
    +
    23 C> @param INCG first dimension of the real value array (INCG >= IMAX)
    +
    24 C> @param KMAX number of transforms to perform
    +
    25 C> @param[out] W complex amplitudes if IDIR>0
    +
    26 C> @param[out] G values if IDIR<0
    +
    27 C> @param IDIR direction flag
    +
    28 C> - IDIR>0 to transform from Fourier to physical space
    +
    29 C> - IDIR<0 to transform from physical to Fourier space
    +
    30 C>
    +
    31 C> @author Iredell @date 96-02-20
    +
    32  SUBROUTINE spfft1(IMAX,INCW,INCG,KMAX,W,G,IDIR)
    +
    33  IMPLICIT NONE
    +
    34  INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
    +
    35  COMPLEX,INTENT(INOUT):: W(INCW,KMAX)
    +
    36  REAL:: WREAL(INCW,KMAX)
    +
    37  REAL,INTENT(INOUT):: G(INCG,KMAX)
    +
    38  REAL:: AUX1(25000+INT(0.82*IMAX))
    +
    39  REAL:: AUX2(20000+INT(0.57*IMAX))
    +
    40  INTEGER:: NAUX1,NAUX2
    +
    41 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    42  naux1=25000+int(0.82*imax)
    +
    43  naux2=20000+int(0.57*imax)
    +
    44  wreal=real(w)
    +
    45 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    46 C FOURIER TO PHYSICAL TRANSFORM.
    +
    47  SELECT CASE(idir)
    +
    48  CASE(1:)
    +
    49  CALL scrft(1,real(w),incw,g,incg,imax,kmax,-1,1.,
    +
    50  & aux1,naux1,aux2,naux2,0.,0)
    +
    51  CALL scrft(0,real(w),incw,g,incg,imax,kmax,-1,1.,
    +
    52  & aux1,naux1,aux2,naux2,0.,0)
    +
    53 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    54 C PHYSICAL TO FOURIER TRANSFORM.
    +
    55  CASE(:-1)
    +
    56  CALL srcft(1,g,incg,wreal,incw,imax,kmax,+1,1./imax,
    +
    57  & aux1,naux1,aux2,naux2,0.,0)
    +
    58  CALL srcft(0,g,incg,wreal,incw,imax,kmax,+1,1./imax,
    +
    59  & aux1,naux1,aux2,naux2,0.,0)
    +
    60  END SELECT
    +
    61  w=cmplx(wreal,0.0)
    +
    62  END SUBROUTINE
    +
    subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    scrft
    Definition: fftpack.F:82
    +
    subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    srcft
    Definition: fftpack.F:215
    +
    subroutine spfft1(IMAX, INCW, INCG, KMAX, W, G, IDIR)
    This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
    Definition: spfft1.f:33
    +
    +
    + + + + diff --git a/ver-5.1.0/spfft_8f.html b/ver-5.1.0/spfft_8f.html new file mode 100644 index 00000000..6bc0daab --- /dev/null +++ b/ver-5.1.0/spfft_8f.html @@ -0,0 +1,207 @@ + + + + + + + +NCEPLIBS-ip: spfft.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spfft.f File Reference
    +
    +
    + +

    Perform multiple fast fourier transforms. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spfft (IMAX, INCW, INCG, KMAX, W, G, IDIR)
     This subprogram performs multiple fast fourier transforms between complex amplitudes in fourier space and real values in cyclic physical space. More...
     
    +

    Detailed Description

    +

    Perform multiple fast fourier transforms.

    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition in file spfft.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spfft()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spfft (integer, intent(in) IMAX,
    integer, intent(in) INCW,
    integer, intent(in) INCG,
    integer, intent(in) KMAX,
    complex, dimension(incw,kmax), intent(inout) W,
    real, dimension(incg,kmax), intent(inout) G,
    integer, intent(in) IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    The restrictions on imax are that it must be a multiple of 1 to 25 factors of two, up to 2 factors of three, and up to 1 factor of five, seven and eleven.

    +

    If IDIR=0, then W and G need not contain any valid data. the other parameters must be supplied and cannot change in succeeding calls until the next time it is called with IDIR=0.

    +

    This subprogram is not thread-safe when IDIR=0. On the other hand, when IDIR is not zero, it can be called from a threaded region.

    +
    Parameters
    + + + + + + + + +
    IMAXnumber of values in the cyclic physical space (see limitations on imax in remarks below.)
    INCWfirst dimension of the complex amplitude array (INCW >= IMAX/2+1)
    INCGfirst dimension of the real value array (INCG >= IMAX)
    KMAXnumber of transforms to perform
    [out]Wcomplex amplitudes if IDIR>0
    [out]Greal values if IDIR<0
    IDIRdirection 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
    • +
    +
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition at line 40 of file spfft.f.

    + +

    References scrft(), and srcft().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spfft_8f.js b/ver-5.1.0/spfft_8f.js new file mode 100644 index 00000000..f458e16b --- /dev/null +++ b/ver-5.1.0/spfft_8f.js @@ -0,0 +1,4 @@ +var spfft_8f = +[ + [ "spfft", "spfft_8f.html#a1041af8ac4f6a2407b5b7a799a13fb5d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spfft_8f_source.html b/ver-5.1.0/spfft_8f_source.html new file mode 100644 index 00000000..8fbb20e0 --- /dev/null +++ b/ver-5.1.0/spfft_8f_source.html @@ -0,0 +1,180 @@ + + + + + + + +NCEPLIBS-ip: spfft.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spfft.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform multiple fast fourier transforms.
    +
    3 C> @author Iredell @date 96-02-20
    +
    4 
    +
    5 C> This subprogram performs multiple fast fourier transforms
    +
    6 C> between complex amplitudes in fourier space and real values
    +
    7 C> in cyclic physical space.
    +
    8 C>
    +
    9 C> Subprogram spfft must be invoked first with idir=0
    +
    10 C> to initialize trigonemetric data. Use subprogram spfft1
    +
    11 C> to perform an fft without previous initialization.
    +
    12 C> This version invokes the ibm essl fft.
    +
    13 C>
    +
    14 C> The restrictions on imax are that it must be a multiple
    +
    15 C> of 1 to 25 factors of two, up to 2 factors of three,
    +
    16 C> and up to 1 factor of five, seven and eleven.
    +
    17 C>
    +
    18 C> If IDIR=0, then W and G need not contain any valid data.
    +
    19 C> the other parameters must be supplied and cannot change
    +
    20 C> in succeeding calls until the next time it is called with IDIR=0.
    +
    21 C>
    +
    22 C> This subprogram is not thread-safe when IDIR=0. On the other hand,
    +
    23 C> when IDIR is not zero, it can be called from a threaded region.
    +
    24 C>
    +
    25 C> @param IMAX number of values in the cyclic physical space
    +
    26 C> (see limitations on imax in remarks below.)
    +
    27 C> @param INCW first dimension of the complex amplitude array
    +
    28 C> (INCW >= IMAX/2+1)
    +
    29 C> @param INCG first dimension of the real value array
    +
    30 C> (INCG >= IMAX)
    +
    31 C> @param KMAX number of transforms to perform
    +
    32 C> @param[out] W complex amplitudes if IDIR>0
    +
    33 C> @param[out] G real values if IDIR<0
    +
    34 C> @param IDIR direction flag
    +
    35 C> - IDIR=0 to initialize internal trigonometric data
    +
    36 C> - IDIR>0 TO transform from Fourier to physical space
    +
    37 C> - IDIR<0 TO transform from physical to fourier space
    +
    38 C>
    +
    39 C> @author Iredell @date 96-02-20
    +
    40  SUBROUTINE spfft(IMAX,INCW,INCG,KMAX,W,G,IDIR)
    +
    41 
    +
    42  IMPLICIT NONE
    +
    43  INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
    +
    44  COMPLEX,INTENT(INOUT):: W(INCW,KMAX)
    +
    45  REAL:: WREAL(INCW,KMAX)
    +
    46  REAL,INTENT(INOUT):: G(INCG,KMAX)
    +
    47  INTEGER,SAVE:: NAUX1=0
    +
    48  REAL,SAVE,ALLOCATABLE:: AUX1CR(:),AUX1RC(:)
    +
    49  INTEGER:: NAUX2
    +
    50  REAL:: AUX2(20000+INT(0.57*IMAX))
    +
    51 
    +
    52  naux2=20000+int(0.57*imax)
    +
    53 
    +
    54  wreal=real(w)
    +
    55 C INITIALIZATION.
    +
    56 C ALLOCATE AND FILL AUXILIARY ARRAYS WITH TRIGONOMETRIC DATA
    +
    57  SELECT CASE(idir)
    +
    58  CASE(0)
    +
    59  IF(naux1.GT.0) DEALLOCATE(aux1cr,aux1rc)
    +
    60  naux1=25000+int(0.82*imax)
    +
    61  ALLOCATE(aux1cr(naux1),aux1rc(naux1))
    +
    62  CALL scrft(1,wreal,incw,g,incg,imax,kmax,-1,1.,
    +
    63  & aux1cr,naux1,aux2,naux2,0.,0)
    +
    64  CALL srcft(1,g,incg,wreal,incw,imax,kmax,+1,1./imax,
    +
    65  & aux1rc,naux1,aux2,naux2,0.,0)
    +
    66 
    +
    67 C FOURIER TO PHYSICAL TRANSFORM.
    +
    68  CASE(1:)
    +
    69  CALL scrft(0,wreal,incw,g,incg,imax,kmax,-1,1.,
    +
    70  & aux1cr,naux1,aux2,naux2,0.,0)
    +
    71 
    +
    72 C PHYSICAL TO FOURIER TRANSFORM.
    +
    73  CASE(:-1)
    +
    74  CALL srcft(0,g,incg,wreal,incw,imax,kmax,+1,1./imax,
    +
    75  & aux1rc,naux1,aux2,naux2,0.,0)
    +
    76  END SELECT
    +
    77  w=cmplx(wreal)
    +
    78  END SUBROUTINE
    +
    subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    scrft
    Definition: fftpack.F:82
    +
    subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    srcft
    Definition: fftpack.F:215
    +
    subroutine spfft(IMAX, INCW, INCG, KMAX, W, G, IDIR)
    This subprogram performs multiple fast fourier transforms between complex amplitudes in fourier space...
    Definition: spfft.f:41
    +
    +
    + + + + diff --git a/ver-5.1.0/spffte_8f.html b/ver-5.1.0/spffte_8f.html new file mode 100644 index 00000000..4710a7b0 --- /dev/null +++ b/ver-5.1.0/spffte_8f.html @@ -0,0 +1,227 @@ + + + + + + + +NCEPLIBS-ip: spffte.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spffte.f File Reference
    +
    +
    + +

    Perform multiple fast Fourier transforms. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spffte (IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
     This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space. More...
     
    +

    Detailed Description

    +

    Perform multiple fast Fourier transforms.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    1998-12-18 Iredell Initial.
    2012-11-12 Mirvis fixing hard-wired types problem on Intel/Linux.
    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition in file spffte.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spffte()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spffte (integer, intent(in) IMAX,
    integer, intent(in) INCW,
    integer, intent(in) INCG,
    integer, intent(in) KMAX,
    real, dimension(2*incw,kmax), intent(inout) W,
    real, dimension(incg,kmax), intent(inout) G,
    integer, intent(in) IDIR,
    real(8), dimension(50000+4*imax), intent(inout) AFFT 
    )
    +
    + +

    This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space and real values in cyclic physical space.

    +

    This subprogram 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.

    +
    Note
    The restrictions on IMAX are that it must be a multiple of 1 to 25 factors of two, up to 2 factors of three, and up to 1 factor of five, seven and eleven.
    +

    If IDIR=0, then W and G need not contain any valid data. The other parameters must be supplied and cannot change in succeeding calls until the next time it is called with IDIR=0.

    +

    This subprogram is thread-safe.

    +
    Parameters
    + + + + + + + + + +
    IMAXnumber of values in the cyclic physical space (see limitations on imax in remarks below.)
    INCWfirst dimension of the complex amplitude array (INCW >= IMAX/2+1)
    INCGfirst dimension of the real value array (INCG >= IMAX)
    KMAXnumber of transforms to perform
    [out]Wcomplex amplitudes if IDIR>0
    [out]Greal values if IDIR<0
    IDIRdirection 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
    • +
    +
    [out]AFFTauxiliary array if IDIR<>0
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition at line 48 of file spffte.f.

    + +

    References dcrft(), drcft(), scrft(), and srcft().

    + +

    Referenced by sptranf0(), and sptranf1().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spffte_8f.js b/ver-5.1.0/spffte_8f.js new file mode 100644 index 00000000..34e90bee --- /dev/null +++ b/ver-5.1.0/spffte_8f.js @@ -0,0 +1,4 @@ +var spffte_8f = +[ + [ "spffte", "spffte_8f.html#af06489254bd3e99030b39744fce32233", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spffte_8f_source.html b/ver-5.1.0/spffte_8f_source.html new file mode 100644 index 00000000..69d39699 --- /dev/null +++ b/ver-5.1.0/spffte_8f_source.html @@ -0,0 +1,240 @@ + + + + + + + +NCEPLIBS-ip: spffte.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spffte.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform multiple fast Fourier transforms.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 1998-12-18 | Iredell | Initial.
    +
    8 C> 2012-11-12 | Mirvis | fixing hard-wired types problem on Intel/Linux.
    +
    9 C>
    +
    10 C> @author Iredell @date 96-02-20
    +
    11 
    +
    12 C> This subprogram performs multiple fast Fourier transforms
    +
    13 C> between complex amplitudes in Fourier space and real values
    +
    14 C> in cyclic physical space.
    +
    15 C>
    +
    16 C> This subprogram must be invoked first with IDIR=0
    +
    17 C> to initialize trigonemetric data. Use subprogram spfft1()
    +
    18 C> to perform an FFT without previous initialization.
    +
    19 C>
    +
    20 C> This version invokes the IBM ESSL FFT.
    +
    21 C>
    +
    22 C> @note The restrictions on IMAX are that it must be a multiple
    +
    23 C> of 1 to 25 factors of two, up to 2 factors of three,
    +
    24 C> and up to 1 factor of five, seven and eleven.
    +
    25 C>
    +
    26 C> If IDIR=0, then W and G need not contain any valid data.
    +
    27 C> The other parameters must be supplied and cannot change
    +
    28 C> in succeeding calls until the next time it is called with IDIR=0.
    +
    29 C>
    +
    30 C> This subprogram is thread-safe.
    +
    31 C>
    +
    32 C> @param IMAX number of values in the cyclic physical space
    +
    33 C> (see limitations on imax in remarks below.)
    +
    34 C> @param INCW first dimension of the complex amplitude array
    +
    35 C> (INCW >= IMAX/2+1)
    +
    36 C> @param INCG first dimension of the real value array
    +
    37 C> (INCG >= IMAX)
    +
    38 C> @param KMAX number of transforms to perform
    +
    39 C> @param[out] W complex amplitudes if IDIR>0
    +
    40 C> @param[out] G real values if IDIR<0
    +
    41 C> @param IDIR direction flag
    +
    42 C> - IDIR=0 to initialize trigonometric data
    +
    43 C> - IDIR>0 to transform from Fourier to physical space
    +
    44 C> - IDIR<0 to transform from physical to Fourier space
    +
    45 C> @param[out] AFFT auxiliary array if IDIR<>0
    +
    46 C>
    +
    47 C> @author Iredell @date 96-02-20
    +
    48  SUBROUTINE spffte(IMAX,INCW,INCG,KMAX,W,G,IDIR,AFFT)
    +
    49  IMPLICIT NONE
    +
    50  INTEGER,INTENT(IN):: IMAX,INCW,INCG,KMAX,IDIR
    +
    51  REAL,INTENT(INOUT):: W(2*INCW,KMAX)
    +
    52  REAL,INTENT(INOUT):: G(INCG,KMAX)
    +
    53  REAL(8),INTENT(INOUT):: AFFT(50000+4*IMAX)
    +
    54  REAL:: AFFTR(50000+4*IMAX)
    +
    55  INTEGER:: INIT,INC2X,INC2Y,N,M,ISIGN,NAUX1,NAUX2,NAUX3
    +
    56 C ==EM== ^(4)
    +
    57  REAL:: SCALE
    +
    58  REAL :: AUX2(20000+2*IMAX),AUX3
    +
    59  INTEGER:: IACR,IARC
    +
    60 
    +
    61  naux1=25000+2*imax
    +
    62  naux2=20000+2*imax
    +
    63  naux3=1
    +
    64  iacr=1
    +
    65  iarc=1+naux1
    +
    66  afftr=real(afft)
    +
    67 
    +
    68 C INITIALIZATION.
    +
    69 C FILL AUXILIARY ARRAYS WITH TRIGONOMETRIC DATA
    +
    70  SELECT CASE(idir)
    +
    71  CASE(0)
    +
    72  init=1
    +
    73  inc2x=incw
    +
    74  inc2y=incg
    +
    75  n=imax
    +
    76  m=kmax
    +
    77  isign=-1
    +
    78  scale=1.
    +
    79  IF(digits(1.).LT.digits(1._8)) THEN
    +
    80  CALL scrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
    +
    81  & afftr(iacr),naux1,aux2,naux2,aux3,naux3)
    +
    82  ELSE
    +
    83  CALL dcrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
    +
    84  & afftr(iacr),naux1,aux2,naux2)
    +
    85  ENDIF
    +
    86  init=1
    +
    87  inc2x=incg
    +
    88  inc2y=incw
    +
    89  n=imax
    +
    90  m=kmax
    +
    91  isign=+1
    +
    92  scale=1./imax
    +
    93  IF(digits(1.).LT.digits(1._8)) THEN
    +
    94  CALL srcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
    +
    95  & afftr(iarc),naux1,aux2,naux2,aux3,naux3)
    +
    96  ELSE
    +
    97  CALL drcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
    +
    98  & afftr(iarc),naux1,aux2,naux2)
    +
    99  ENDIF
    +
    100 
    +
    101 C FOURIER TO PHYSICAL TRANSFORM.
    +
    102  CASE(1:)
    +
    103  init=0
    +
    104  inc2x=incw
    +
    105  inc2y=incg
    +
    106  n=imax
    +
    107  m=kmax
    +
    108  isign=-1
    +
    109  scale=1.
    +
    110  IF(digits(1.).LT.digits(1._8)) THEN
    +
    111  CALL scrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
    +
    112  & afftr(iacr),naux1,aux2,naux2,aux3,naux3)
    +
    113  ELSE
    +
    114  CALL dcrft(init,w,inc2x,g,inc2y,n,m,isign,scale,
    +
    115  & afftr(iacr),naux1,aux2,naux2)
    +
    116  ENDIF
    +
    117 
    +
    118 C PHYSICAL TO FOURIER TRANSFORM.
    +
    119  CASE(:-1)
    +
    120  init=0
    +
    121  inc2x=incg
    +
    122  inc2y=incw
    +
    123  n=imax
    +
    124  m=kmax
    +
    125  isign=+1
    +
    126  scale=1./imax
    +
    127  IF(digits(1.).LT.digits(1._8)) THEN
    +
    128  CALL srcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
    +
    129  & afftr(iarc),naux1,aux2,naux2,aux3,naux3)
    +
    130  ELSE
    +
    131  CALL drcft(init,g,inc2x,w,inc2y,n,m,isign,scale,
    +
    132  & afftr(iarc),naux1,aux2,naux2)
    +
    133  ENDIF
    +
    134  END SELECT
    +
    135  afft=real(afftr,kind=8)
    +
    136  END SUBROUTINE
    +
    subroutine drcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    drcft
    Definition: fftpack.F:164
    +
    subroutine dcrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    dcrft
    Definition: fftpack.F:34
    +
    subroutine scrft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    scrft
    Definition: fftpack.F:82
    +
    subroutine srcft(init, x, ldx, y, ldy, n, m, isign, scale, table, n1, wrk, n2, z, nz)
    srcft
    Definition: fftpack.F:215
    +
    subroutine spffte(IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
    This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
    Definition: spffte.f:49
    +
    +
    + + + + diff --git a/ver-5.1.0/spfftpt_8f.html b/ver-5.1.0/spfftpt_8f.html new file mode 100644 index 00000000..795ad261 --- /dev/null +++ b/ver-5.1.0/spfftpt_8f.html @@ -0,0 +1,206 @@ + + + + + + + +NCEPLIBS-ip: spfftpt.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spfftpt.f File Reference
    +
    +
    + +

    Compute fourier transform to gridpoints. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spfftpt (M, N, INCW, INCG, KMAX, RLON, W, G)
     This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints. More...
     
    +

    Detailed Description

    +

    Compute fourier transform to gridpoints.

    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition in file spfftpt.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spfftpt()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spfftpt (integer, intent(in) M,
    integer, intent(in) N,
    integer, intent(in) INCW,
    integer, intent(in) INCG,
    integer, intent(in) KMAX,
    real, dimension(n), intent(in) RLON,
    real, dimension(2*incw,kmax), intent(in) W,
    real, dimension(incg,kmax), intent(out) G 
    )
    +
    + +

    This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.

    +
    Note
    This subprogram is thread-safe.
    +
    Parameters
    + + + + + + + + + +
    MFourier wavenumber truncation
    Nnumber of gridpoints
    INCWfirst dimension of the complex amplitude array (INCW >= M+1)
    INCGfirst dimension of the gridpoint array (INCG >= N)
    KMAXnumber of Fourier fields
    RLONgrid longitudes in degrees
    WFourier amplitudes
    Ggridpoint values
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition at line 22 of file spfftpt.f.

    + +

    Referenced by sptgpt(), sptgptsd(), sptgptv(), and sptgptvd().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spfftpt_8f.js b/ver-5.1.0/spfftpt_8f.js new file mode 100644 index 00000000..a4e4b804 --- /dev/null +++ b/ver-5.1.0/spfftpt_8f.js @@ -0,0 +1,4 @@ +var spfftpt_8f = +[ + [ "spfftpt", "spfftpt_8f.html#ad16e674ce87bd762a714853967f81356", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spfftpt_8f_source.html b/ver-5.1.0/spfftpt_8f_source.html new file mode 100644 index 00000000..d5574160 --- /dev/null +++ b/ver-5.1.0/spfftpt_8f_source.html @@ -0,0 +1,148 @@ + + + + + + + +NCEPLIBS-ip: spfftpt.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spfftpt.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute fourier transform to gridpoints.
    +
    3 C> @author Iredell @date 96-02-20
    +
    4 
    +
    5 C> This subprogram computes a slow Fourier transform
    +
    6 C> from Fourier space to a set of gridpoints.
    +
    7 C>
    +
    8 C> @note This subprogram is thread-safe.
    +
    9 C>
    +
    10 C> @param M Fourier wavenumber truncation
    +
    11 C> @param N number of gridpoints
    +
    12 C> @param INCW first dimension of the complex amplitude array
    +
    13 C> (INCW >= M+1)
    +
    14 C> @param INCG first dimension of the gridpoint array
    +
    15 C> (INCG >= N)
    +
    16 C> @param KMAX number of Fourier fields
    +
    17 C> @param RLON grid longitudes in degrees
    +
    18 C> @param W Fourier amplitudes
    +
    19 C> @param G gridpoint values
    +
    20 C>
    +
    21 C> @author Iredell @date 96-02-20
    +
    22  SUBROUTINE spfftpt(M,N,INCW,INCG,KMAX,RLON,W,G)
    +
    23 
    +
    24  IMPLICIT NONE
    +
    25  INTEGER,INTENT(IN):: M,N,INCW,INCG,KMAX
    +
    26  REAL,INTENT(IN):: RLON(N)
    +
    27  REAL,INTENT(IN):: W(2*INCW,KMAX)
    +
    28  REAL,INTENT(OUT):: G(INCG,KMAX)
    +
    29  INTEGER I,K,L
    +
    30  REAL RADLON,SLON(M),CLON(M)
    +
    31  REAL,PARAMETER:: PI=3.14159265358979
    +
    32 
    +
    33  DO i=1,n
    +
    34  radlon=pi/180*rlon(i)
    +
    35  DO l=1,m
    +
    36  slon(l)=sin(l*radlon)
    +
    37  clon(l)=cos(l*radlon)
    +
    38  ENDDO
    +
    39  DO k=1,kmax
    +
    40  g(i,k)=w(1,k)
    +
    41  ENDDO
    +
    42  DO l=1,m
    +
    43  DO k=1,kmax
    +
    44  g(i,k)=g(i,k)+2.*(w(2*l+1,k)*clon(l)-w(2*l+2,k)*slon(l))
    +
    45  ENDDO
    +
    46  ENDDO
    +
    47  ENDDO
    +
    48  END SUBROUTINE
    +
    subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
    This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
    Definition: spfftpt.f:23
    +
    +
    + + + + diff --git a/ver-5.1.0/spgradq_8f.html b/ver-5.1.0/spgradq_8f.html new file mode 100644 index 00000000..b1495d40 --- /dev/null +++ b/ver-5.1.0/spgradq_8f.html @@ -0,0 +1,221 @@ + + + + + + + +NCEPLIBS-ip: spgradq.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spgradq.f File Reference
    +
    +
    + +

    Compute gradient in spectral space. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spgradq (I, M, ENN1, ELONN1, EON, EONTOP, Q, QDX, QDY, QDYTOP)
     Computes the horizontal vector gradient of a scalar field in spectral space. More...
     
    +

    Detailed Description

    +

    Compute gradient in spectral space.

    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file spgradq.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spgradq()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spgradq ( I,
     M,
    real, dimension((m+1)*((i+1)*m+2)/2) ENN1,
    real, dimension((m+1)*((i+1)*m+2)/2) ELONN1,
    real, dimension((m+1)*((i+1)*m+2)/2) EON,
    real, dimension(m+1) EONTOP,
    real, dimension((m+1)*((i+1)*m+2)) Q,
    real, dimension((m+1)*((i+1)*m+2)) QDX,
    real, dimension((m+1)*((i+1)*m+2)) QDY,
    real, dimension(2*(m+1)) QDYTOP 
    )
    +
    + +

    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.

    +
    Parameters
    + + + + + + + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    ENN1
    ELONN1
    EONEPSILON/N*A
    EONTOPEPSILON/N*A over top
    Qscalar field
    QDXzonal gradient (times coslat)
    QDYmerid gradient (times coslat)
    QDYTOPmerid gradient (times coslat) over top
    +
    +
    +
    Author
    IREDELL
    +
    Date
    92-10-31
    + +

    Definition at line 33 of file spgradq.f.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spgradq_8f.js b/ver-5.1.0/spgradq_8f.js new file mode 100644 index 00000000..f2dc8b8f --- /dev/null +++ b/ver-5.1.0/spgradq_8f.js @@ -0,0 +1,4 @@ +var spgradq_8f = +[ + [ "spgradq", "spgradq_8f.html#a0bb358cf2a405ce9f17c6e5dfde65849", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spgradq_8f_source.html b/ver-5.1.0/spgradq_8f_source.html new file mode 100644 index 00000000..b1b29ede --- /dev/null +++ b/ver-5.1.0/spgradq_8f_source.html @@ -0,0 +1,166 @@ + + + + + + + +NCEPLIBS-ip: spgradq.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spgradq.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute gradient in spectral space.
    +
    3 C> @author Iredell @date 92-10-31
    +
    4 
    +
    5 C> Computes the horizontal vector gradient of a scalar field
    +
    6 C> in spectral space.
    +
    7 C>
    +
    8 C> Subprogram speps() should be called already.
    +
    9 C>
    +
    10 C> If l is the zonal wavenumber, n is the total wavenumber,
    +
    11 C> eps(l,n)=sqrt((n**2-l**2)/(4*n**2-1)) and a is earth radius,
    +
    12 C> then the zonal gradient of q(l,n) is simply i*l/a*q(l,n)
    +
    13 C> while the meridional gradient of q(l,n) is computed as
    +
    14 C> eps(l,n+1)*(n+2)/a*q(l,n+1)-eps(l,n+1)*(n-1)/a*q(l,n-1).
    +
    15 C>
    +
    16 C> Extra terms are computed over top of the spectral domain.
    +
    17 C>
    +
    18 C> Advantage is taken of the fact that eps(l,l)=0
    +
    19 C> in order to vectorize over the entire spectral domain.
    +
    20 C>
    +
    21 C> @param I spectral domain shape (0 for triangular, 1 for rhomboidal)
    +
    22 C> @param M spectral truncation
    +
    23 C> @param ENN1
    +
    24 C> @param ELONN1
    +
    25 C> @param EON EPSILON/N*A
    +
    26 C> @param EONTOP EPSILON/N*A over top
    +
    27 C> @param Q scalar field
    +
    28 C> @param QDX zonal gradient (times coslat)
    +
    29 C> @param QDY merid gradient (times coslat)
    +
    30 C> @param QDYTOP merid gradient (times coslat) over top
    +
    31 C>
    +
    32 C> @author IREDELL @date 92-10-31
    +
    33  SUBROUTINE spgradq(I,M,ENN1,ELONN1,EON,EONTOP,Q,QDX,QDY,QDYTOP)
    +
    34 
    +
    35  REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
    +
    36  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
    +
    37  REAL Q((M+1)*((I+1)*M+2))
    +
    38  REAL QDX((M+1)*((I+1)*M+2)),QDY((M+1)*((I+1)*M+2))
    +
    39  REAL QDYTOP(2*(M+1))
    +
    40 
    +
    41 C TAKE ZONAL AND MERIDIONAL GRADIENTS
    +
    42  k=1
    +
    43  qdx(2*k-1)=0.
    +
    44  qdx(2*k)=0.
    +
    45  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)
    +
    46  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)
    +
    47  DO k=2,(m+1)*((i+1)*m+2)/2-1
    +
    48  qdx(2*k-1)=-elonn1(k)*enn1(k)*q(2*k)
    +
    49  qdx(2*k)=elonn1(k)*enn1(k)*q(2*k-1)
    +
    50  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)-eon(k)*enn1(k-1)*q(2*k-3)
    +
    51  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)-eon(k)*enn1(k-1)*q(2*k-2)
    +
    52  ENDDO
    +
    53  k=(m+1)*((i+1)*m+2)/2
    +
    54  qdx(2*k-1)=-elonn1(k)*enn1(k)*q(2*k)
    +
    55  qdx(2*k)=elonn1(k)*enn1(k)*q(2*k-1)
    +
    56  qdy(2*k-1)=-eon(k)*enn1(k-1)*q(2*k-3)
    +
    57  qdy(2*k)=-eon(k)*enn1(k-1)*q(2*k-2)
    +
    58 
    +
    59 C TAKE MERIDIONAL GRADIENT OVER TOP
    +
    60  DO l=0,m
    +
    61  k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
    +
    62  qdytop(2*l+1)=-eontop(l+1)*enn1(k)*q(2*k-1)
    +
    63  qdytop(2*l+2)=-eontop(l+1)*enn1(k)*q(2*k)
    +
    64  ENDDO
    +
    65  RETURN
    +
    66  END
    +
    subroutine spgradq(I, M, ENN1, ELONN1, EON, EONTOP, Q, QDX, QDY, QDYTOP)
    Computes the horizontal vector gradient of a scalar field in spectral space.
    Definition: spgradq.f:34
    +
    +
    + + + + diff --git a/ver-5.1.0/spgradx_8f.html b/ver-5.1.0/spgradx_8f.html new file mode 100644 index 00000000..f18a6604 --- /dev/null +++ b/ver-5.1.0/spgradx_8f.html @@ -0,0 +1,202 @@ + + + + + + + +NCEPLIBS-ip: spgradx.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spgradx.f File Reference
    +
    +
    + +

    Compute x-gradient in Fourier space. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spgradx (M, INCW, KMAX, MP, CLAT, W, WX)
     This subprogram computes the x-gradient of fields in complex Fourier space. More...
     
    +

    Detailed Description

    +

    Compute x-gradient in Fourier space.

    +
    Author
    IREDELL
    +
    Date
    96-02-20
    + +

    Definition in file spgradx.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spgradx()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spgradx (integer, intent(in) M,
    integer, intent(in) INCW,
    integer, intent(in) KMAX,
    integer, dimension(kmax), intent(in) MP,
    real, intent(in) CLAT,
    real, dimension(2*incw,kmax), intent(inout) W,
    real, dimension(2*incw,kmax), intent(out) WX 
    )
    +
    + +

    This subprogram computes the x-gradient of fields in complex Fourier space.

    +

    The x-gradient of a vector field W is 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.

    +
    Note
    This subprogram is thread-safe.
    +
    Parameters
    + + + + + + + + +
    MFourier wavenumber truncation
    INCWfirst dimension of the complex amplitude array (INCW >= M+1)
    KMAXnumber of Fourier fields
    MPidentifiers (0 or 10 for scalar, 1 for vector)
    CLATcosine of latitude
    [out]WFourier amplitudes corrected when MP=10 and CLAT=0
    [out]WXcomplex amplitudes of x-gradients
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-20
    + +

    Definition at line 37 of file spgradx.f.

    + +

    Referenced by sptgptsd(), and sptgptvd().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spgradx_8f.js b/ver-5.1.0/spgradx_8f.js new file mode 100644 index 00000000..b419f805 --- /dev/null +++ b/ver-5.1.0/spgradx_8f.js @@ -0,0 +1,4 @@ +var spgradx_8f = +[ + [ "spgradx", "spgradx_8f.html#a749bc07e763e9cd44490fff2284d00b4", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spgradx_8f_source.html b/ver-5.1.0/spgradx_8f_source.html new file mode 100644 index 00000000..32de9c2d --- /dev/null +++ b/ver-5.1.0/spgradx_8f_source.html @@ -0,0 +1,172 @@ + + + + + + + +NCEPLIBS-ip: spgradx.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spgradx.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute x-gradient in Fourier space
    +
    3 C> @author IREDELL @date 96-02-20
    +
    4 
    +
    5 C> This subprogram computes the x-gradient of fields
    +
    6 C> in complex Fourier space.
    +
    7 C>
    +
    8 C> The x-gradient of a vector field W is
    +
    9 C> WX=CONJG(W)*L/RERTH
    +
    10 C> where L is the wavenumber and RERTH is the Earth radius,
    +
    11 C> so that the result is the x-gradient of the pseudo-vector.
    +
    12 C>
    +
    13 C> The x-gradient of a scalar field W is
    +
    14 C> WX=CONJG(W)*L/(RERTH*CLAT)
    +
    15 C> where CLAT is the cosine of latitude.
    +
    16 C>
    +
    17 C> At the pole this is undefined, so the way to get
    +
    18 C> the x-gradient at the pole is by passing both
    +
    19 C> the weighted wavenumber 0 and the unweighted wavenumber 1
    +
    20 C> amplitudes at the pole and setting MP=10.
    +
    21 C> In this case, the wavenumber 1 amplitudes are used
    +
    22 C> to compute the x-gradient and then zeroed out.
    +
    23 C>
    +
    24 C> @note This subprogram is thread-safe.
    +
    25 C>
    +
    26 C> @param M Fourier wavenumber truncation
    +
    27 C> @param INCW first dimension of the complex amplitude array
    +
    28 C> (INCW >= M+1)
    +
    29 C> @param KMAX number of Fourier fields
    +
    30 C> @param MP identifiers
    +
    31 C> (0 or 10 for scalar, 1 for vector)
    +
    32 C> @param CLAT cosine of latitude
    +
    33 C> @param[out] W Fourier amplitudes corrected when MP=10 and CLAT=0
    +
    34 C> @param[out] WX complex amplitudes of x-gradients
    +
    35 C>
    +
    36 C> @author IREDELL @date 96-02-20
    +
    37  SUBROUTINE spgradx(M,INCW,KMAX,MP,CLAT,W,WX)
    +
    38 
    +
    39  IMPLICIT NONE
    +
    40  INTEGER,INTENT(IN):: M,INCW,KMAX,MP(KMAX)
    +
    41  REAL,INTENT(IN):: CLAT
    +
    42  REAL,INTENT(INOUT):: W(2*INCW,KMAX)
    +
    43  REAL,INTENT(OUT):: WX(2*INCW,KMAX)
    +
    44  INTEGER K,L
    +
    45  REAL,PARAMETER:: RERTH=6.3712e6
    +
    46 
    +
    47  DO k=1,kmax
    +
    48  IF(mp(k).EQ.1) THEN
    +
    49  DO l=0,m
    +
    50  wx(2*l+1,k)=-w(2*l+2,k)*(l/rerth)
    +
    51  wx(2*l+2,k)=+w(2*l+1,k)*(l/rerth)
    +
    52  ENDDO
    +
    53  ELSEIF(clat.EQ.0.) THEN
    +
    54  DO l=0,m
    +
    55  wx(2*l+1,k)=0
    +
    56  wx(2*l+2,k)=0
    +
    57  ENDDO
    +
    58  IF(mp(k).EQ.10.AND.m.GE.2) THEN
    +
    59  wx(3,k)=-w(4,k)/rerth
    +
    60  wx(4,k)=+w(3,k)/rerth
    +
    61  w(3,k)=0
    +
    62  w(4,k)=0
    +
    63  ENDIF
    +
    64  ELSE
    +
    65  DO l=0,m
    +
    66  wx(2*l+1,k)=-w(2*l+2,k)*(l/(rerth*clat))
    +
    67  wx(2*l+2,k)=+w(2*l+1,k)*(l/(rerth*clat))
    +
    68  ENDDO
    +
    69  ENDIF
    +
    70  ENDDO
    +
    71 
    +
    72  END SUBROUTINE
    +
    subroutine spgradx(M, INCW, KMAX, MP, CLAT, W, WX)
    This subprogram computes the x-gradient of fields in complex Fourier space.
    Definition: spgradx.f:38
    +
    +
    + + + + diff --git a/ver-5.1.0/spgrady_8f.html b/ver-5.1.0/spgrady_8f.html new file mode 100644 index 00000000..fa75c33c --- /dev/null +++ b/ver-5.1.0/spgrady_8f.html @@ -0,0 +1,209 @@ + + + + + + + +NCEPLIBS-ip: spgrady.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spgrady.f File Reference
    +
    +
    + +

    Compute y-gradient in spectral space. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spgrady (I, M, ENN1, EON, EONTOP, Q, QDY, QDYTOP)
     Computes the horizontal vector y-gradient of a scalar field in spectral space. More...
     
    +

    Detailed Description

    +

    Compute y-gradient in spectral space.

    +
    Author
    IREDELL
    +
    Date
    92-10-31
    + +

    Definition in file spgrady.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spgrady()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spgrady ( I,
     M,
    real, dimension((m+1)*((i+1)*m+2)/2) ENN1,
    real, dimension((m+1)*((i+1)*m+2)/2) EON,
    real, dimension(m+1) EONTOP,
    real, dimension((m+1)*((i+1)*m+2)) Q,
    real, dimension((m+1)*((i+1)*m+2)) QDY,
    real, dimension(2*(m+1)) QDYTOP 
    )
    +
    + +

    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.

    +
    Parameters
    + + + + + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    ENN1N*(N+1)/A**2
    EONEPSILON/N*A
    EONTOPEPSILON/N*A over top
    Qscalar field
    QDYmerid gradient (times coslat)
    QDYTOPmerid gradient (times coslat) over top
    +
    +
    +
    Author
    IREDELL
    +
    Date
    92-10-31
    + +

    Definition at line 31 of file spgrady.f.

    + +

    Referenced by sptgptsd().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spgrady_8f.js b/ver-5.1.0/spgrady_8f.js new file mode 100644 index 00000000..f8529204 --- /dev/null +++ b/ver-5.1.0/spgrady_8f.js @@ -0,0 +1,4 @@ +var spgrady_8f = +[ + [ "spgrady", "spgrady_8f.html#a1b3e38e56560de7d7dcf19ea3e931cf1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spgrady_8f_source.html b/ver-5.1.0/spgrady_8f_source.html new file mode 100644 index 00000000..1d44b973 --- /dev/null +++ b/ver-5.1.0/spgrady_8f_source.html @@ -0,0 +1,159 @@ + + + + + + + +NCEPLIBS-ip: spgrady.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spgrady.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute y-gradient in spectral space.
    +
    3 C> @author IREDELL @date 92-10-31
    +
    4 
    +
    5 C> Computes the horizontal vector y-gradient of a scalar field
    +
    6 c> in spectral space.
    +
    7 C>
    +
    8 C> Subprogram speps should be called already.
    +
    9 C>
    +
    10 C> If L is the zonal wavenumber, N is the total wavenumber,
    +
    11 C> EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) and A is Earth radius,
    +
    12 C> then the meridional gradient of Q(L,N) is computed as
    +
    13 C> EPS(L,N+1)*(N+2)/A*Q(L,N+1)-EPS(L,N+1)*(N-1)/A*Q(L,N-1).
    +
    14 C>
    +
    15 C> Extra terms are computed over top of the spectral domain.
    +
    16 C>
    +
    17 C> Advantage is taken of the fact that EPS(L,L)=0
    +
    18 C> in order to vectorize over the entire spectral domain.
    +
    19 C>
    +
    20 C> @param I spectral domain shape
    +
    21 c> (0 for triangular, 1 for rhomboidal)
    +
    22 C> @param M spectral truncation
    +
    23 C> @param ENN1 N*(N+1)/A**2
    +
    24 C> @param EON EPSILON/N*A
    +
    25 C> @param EONTOP EPSILON/N*A over top
    +
    26 C> @param Q scalar field
    +
    27 C> @param QDY merid gradient (times coslat)
    +
    28 C> @param QDYTOP merid gradient (times coslat) over top
    +
    29 C>
    +
    30 C> @author IREDELL @date 92-10-31
    +
    31  SUBROUTINE spgrady(I,M,ENN1,EON,EONTOP,Q,QDY,QDYTOP)
    +
    32 
    +
    33  REAL ENN1((M+1)*((I+1)*M+2)/2)
    +
    34  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
    +
    35  REAL Q((M+1)*((I+1)*M+2))
    +
    36  REAL QDY((M+1)*((I+1)*M+2))
    +
    37  REAL QDYTOP(2*(M+1))
    +
    38 
    +
    39 C TAKE MERIDIONAL GRADIENT
    +
    40  k=1
    +
    41  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)
    +
    42  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)
    +
    43  DO k=2,(m+1)*((i+1)*m+2)/2-1
    +
    44  qdy(2*k-1)=eon(k+1)*enn1(k+1)*q(2*k+1)-eon(k)*enn1(k-1)*q(2*k-3)
    +
    45  qdy(2*k)=eon(k+1)*enn1(k+1)*q(2*k+2)-eon(k)*enn1(k-1)*q(2*k-2)
    +
    46  ENDDO
    +
    47  k=(m+1)*((i+1)*m+2)/2
    +
    48  qdy(2*k-1)=-eon(k)*enn1(k-1)*q(2*k-3)
    +
    49  qdy(2*k)=-eon(k)*enn1(k-1)*q(2*k-2)
    +
    50 
    +
    51 C TAKE MERIDIONAL GRADIENT OVER TOP
    +
    52  DO l=0,m
    +
    53  k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
    +
    54  qdytop(2*l+1)=-eontop(l+1)*enn1(k)*q(2*k-1)
    +
    55  qdytop(2*l+2)=-eontop(l+1)*enn1(k)*q(2*k)
    +
    56  ENDDO
    +
    57 
    +
    58  RETURN
    +
    59  END
    +
    subroutine spgrady(I, M, ENN1, EON, EONTOP, Q, QDY, QDYTOP)
    Computes the horizontal vector y-gradient of a scalar field in spectral space.
    Definition: spgrady.f:32
    +
    +
    + + + + diff --git a/ver-5.1.0/splaplac_8f.html b/ver-5.1.0/splaplac_8f.html new file mode 100644 index 00000000..3589a880 --- /dev/null +++ b/ver-5.1.0/splaplac_8f.html @@ -0,0 +1,197 @@ + + + + + + + +NCEPLIBS-ip: splaplac.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    splaplac.f File Reference
    +
    +
    + +

    Compute laplacian in spectral space. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine splaplac (I, M, ENN1, Q, QD2, IDIR)
     Computes the laplacian or the inverse laplacian of a scalar field in spectral space. More...
     
    +

    Detailed Description

    +

    Compute laplacian in spectral space.

    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file splaplac.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ splaplac()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine splaplac ( I,
     M,
    real, dimension((m+1)*((i+1)*m+2)/2) ENN1,
    real, dimension((m+1)*((i+1)*m+2)) Q,
    real, dimension((m+1)*((i+1)*m+2)) QD2,
     IDIR 
    )
    +
    + +

    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)

    +
    Parameters
    + + + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    ENN1N*(N+1)/A**2
    [out]Qif IDIR > 0, scalar field (Q(0,0) is not computed)
    [out]QD2if IDIR < 0, Laplacian
    IDIRflag
      +
    • IDIR > 0 to take Laplacian
    • +
    • IDIR < 0 to take inverse Laplacian
    • +
    +
    +
    +
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition at line 24 of file splaplac.f.

    + +

    Referenced by sptgpmd(), sptgpsd(), sptgptd(), sptrand(), sptrungv(), sptrunl(), sptrunmv(), sptrunsv(), and sptrunv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/splaplac_8f.js b/ver-5.1.0/splaplac_8f.js new file mode 100644 index 00000000..45b0c9dc --- /dev/null +++ b/ver-5.1.0/splaplac_8f.js @@ -0,0 +1,4 @@ +var splaplac_8f = +[ + [ "splaplac", "splaplac_8f.html#a64338955857a3cf58283146940e7ae42", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/splaplac_8f_source.html b/ver-5.1.0/splaplac_8f_source.html new file mode 100644 index 00000000..d73b3247 --- /dev/null +++ b/ver-5.1.0/splaplac_8f_source.html @@ -0,0 +1,149 @@ + + + + + + + +NCEPLIBS-ip: splaplac.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    splaplac.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute laplacian in spectral space.
    +
    3 C> @author Iredell @date 92-10-31
    +
    4 
    +
    5 C> Computes the laplacian or the inverse laplacian
    +
    6 C> of a scalar field in spectral space.
    +
    7 C>
    +
    8 C> Subprogram speps() should be called already.
    +
    9 C>
    +
    10 C> The Laplacian of Q(L,N) is simply -N*(N+1)/A**2*Q(L,N)
    +
    11 C>
    +
    12 C> @param I spectral domain shape
    +
    13 C> (0 for triangular, 1 for rhomboidal)
    +
    14 C> @param M spectral truncation
    +
    15 C> @param ENN1 N*(N+1)/A**2
    +
    16 C> @param[out] Q if IDIR > 0, scalar field
    +
    17 C> (Q(0,0) is not computed)
    +
    18 C> @param[out] QD2 if IDIR < 0, Laplacian
    +
    19 C> @param IDIR flag
    +
    20 C> - IDIR > 0 to take Laplacian
    +
    21 C> - IDIR < 0 to take inverse Laplacian
    +
    22 C>
    +
    23 C> @author Iredell @date 92-10-31
    +
    24  SUBROUTINE splaplac(I,M,ENN1,Q,QD2,IDIR)
    +
    25 
    +
    26  REAL ENN1((M+1)*((I+1)*M+2)/2)
    +
    27  REAL Q((M+1)*((I+1)*M+2))
    +
    28  REAL QD2((M+1)*((I+1)*M+2))
    +
    29 
    +
    30 C TAKE LAPLACIAN
    +
    31  IF(idir.GT.0) THEN
    +
    32  k=1
    +
    33  qd2(2*k-1)=0.
    +
    34  qd2(2*k)=0.
    +
    35  DO k=2,(m+1)*((i+1)*m+2)/2
    +
    36  qd2(2*k-1)=q(2*k-1)*(-enn1(k))
    +
    37  qd2(2*k)=q(2*k)*(-enn1(k))
    +
    38  ENDDO
    +
    39 
    +
    40 C TAKE INVERSE LAPLACIAN
    +
    41  ELSE
    +
    42  DO k=2,(m+1)*((i+1)*m+2)/2
    +
    43  q(2*k-1)=qd2(2*k-1)/(-enn1(k))
    +
    44  q(2*k)=qd2(2*k)/(-enn1(k))
    +
    45  ENDDO
    +
    46  ENDIF
    +
    47 
    +
    48  RETURN
    +
    49  END
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    +
    + + + + diff --git a/ver-5.1.0/splat_8F.html b/ver-5.1.0/splat_8F.html new file mode 100644 index 00000000..dc01b1de --- /dev/null +++ b/ver-5.1.0/splat_8F.html @@ -0,0 +1,212 @@ + + + + + + + +NCEPLIBS-ip: splat.F File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    splat.F File Reference
    +
    +
    + +

    Computes cosines of colatitude and Gaussian weights for sets of latitudes. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine splat (IDRT, JMAX, SLAT, WLAT)
     Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of latitudes. More...
     
    +

    Detailed Description

    +

    Computes cosines of colatitude and Gaussian weights for sets of latitudes.

    +

    +Program History Log

    + + + + + + + + + + + + + + + + + + + + + +
    Date Programmer Comments
    96-02-20 Iredell Initial.
    97-10-20 Iredell Adjust precision.
    98-06-11 Iredell Generalize precision using FORTRAN 90 intrinsic.
    1998-12-03 Iredell Generalize precision further.
    1998-12-03 Iredell Uses AIX ESSL BLAS calls.
    2009-12-27 D. Stark Updated to switch between ESSL calls on an AIX platform, and Numerical Recipies calls elsewise.
    2010-12-30 Slovacek Update alignment so preprocessor does not cause compilation failure.
    2012-09-01 E. Mirvis & M.Iredell Merging & debugging linux errors of _d and _8 using generic LU factorization.
    2012-11-05 E. Mirvis Generic FFTPACK and LU lapack were removed.
    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition in file splat.F.

    +

    Function/Subroutine Documentation

    + +

    ◆ splat()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine splat ( IDRT,
     JMAX,
    real, dimension(jmax) SLAT,
    real, dimension(jmax) WLAT 
    )
    +
    + +

    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 (JAM,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.

    +
    Parameters
    + + + + + +
    [in]IDRTgrid identifier
      +
    • 4 for Gaussian grid
    • +
    • 0 for equally-spaced grid including poles
    • +
    • 256 for equally-spaced grid excluding poles
    • +
    +
    [in]JMAXnumber of latitudes
    [out]SLATsines of latitude
    [out]WLATGaussian weights
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-20
    + +

    Definition at line 45 of file splat.F.

    + +

    Referenced by ip_gaussian_grid_mod::gdswzd_gaussian(), and sptranf0().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/splat_8F.js b/ver-5.1.0/splat_8F.js new file mode 100644 index 00000000..1bbff9ef --- /dev/null +++ b/ver-5.1.0/splat_8F.js @@ -0,0 +1,4 @@ +var splat_8F = +[ + [ "splat", "splat_8F.html#aa6db21451bb67635e7e4426546140e11", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/splat_8F_source.html b/ver-5.1.0/splat_8F_source.html new file mode 100644 index 00000000..f1408b6e --- /dev/null +++ b/ver-5.1.0/splat_8F_source.html @@ -0,0 +1,304 @@ + + + + + + + +NCEPLIBS-ip: splat.F Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    splat.F
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Computes cosines of colatitude and Gaussian weights
    +
    3 C> for sets of latitudes.
    +
    4 C>
    +
    5 C> ### Program History Log
    +
    6 C> Date | Programmer | Comments
    +
    7 C> -----|------------|---------
    +
    8 C> 96-02-20 | Iredell | Initial.
    +
    9 C> 97-10-20 | Iredell | Adjust precision.
    +
    10 C> 98-06-11 | Iredell | Generalize precision using FORTRAN 90 intrinsic.
    +
    11 C> 1998-12-03 | Iredell | Generalize precision further.
    +
    12 C> 1998-12-03 | Iredell | Uses AIX ESSL BLAS calls.
    +
    13 C> 2009-12-27 | D. Stark | Updated to switch between ESSL calls on an AIX platform, and Numerical Recipies calls elsewise.
    +
    14 C> 2010-12-30 | Slovacek | Update alignment so preprocessor does not cause compilation failure.
    +
    15 C> 2012-09-01 | E. Mirvis & M.Iredell | Merging & debugging linux errors of _d and _8 using generic LU factorization.
    +
    16 C> 2012-11-05 | E. Mirvis | Generic FFTPACK and LU lapack were removed.
    +
    17 C>
    +
    18 C> @author Iredell @date 96-02-20
    +
    19 
    +
    20 C> Computes cosines of colatitude and Gaussian weights
    +
    21 C> for one of the following specific global sets of latitudes.
    +
    22 C> - Gaussian latitudes (IDRT=4)
    +
    23 C> - Equally-spaced latitudes including poles (IDRT=0)
    +
    24 C> - Equally-spaced latitudes excluding poles (IDRT=256)
    +
    25 C>
    +
    26 C> The Gaussian latitudes are located at the zeroes of the
    +
    27 C> Legendre polynomial of the given order. These latitudes
    +
    28 C> are efficient for reversible transforms from spectral space.
    +
    29 C> (About twice as many equally-spaced latitudes are needed.)
    +
    30 C> The weights for the equally-spaced latitudes are based on
    +
    31 C> Ellsaesser (JAM,1966). (No weight is given the pole point.)
    +
    32 C> Note that when analyzing grid to spectral in latitude pairs,
    +
    33 C> if an equator point exists, its weight should be halved.
    +
    34 C> This version invokes the ibm essl matrix solver.
    +
    35 C>
    +
    36 C> @param[in] IDRT grid identifier
    +
    37 C> - 4 for Gaussian grid
    +
    38 C> - 0 for equally-spaced grid including poles
    +
    39 C> - 256 for equally-spaced grid excluding poles
    +
    40 C> @param[in] JMAX number of latitudes
    +
    41 C> @param[out] SLAT sines of latitude
    +
    42 C> @param[out] WLAT Gaussian weights
    +
    43 C>
    +
    44 C> @author Iredell @date 96-02-20
    +
    45  SUBROUTINE splat(IDRT,JMAX,SLAT,WLAT)
    +
    46  REAL SLAT(JMAX),WLAT(JMAX)
    +
    47  INTEGER,PARAMETER:: KD=selected_real_kind(15,45)
    +
    48  REAL(KIND=kd):: pk(jmax/2),pkm1(jmax/2),pkm2(jmax/2)
    +
    49  REAL(KIND=kd):: slatd(jmax/2),sp,spmax,eps=10.*epsilon(sp)
    +
    50  parameter(jz=50)
    +
    51  REAL BZ(JZ)
    +
    52  DATA bz / 2.4048255577, 5.5200781103,
    +
    53  $ 8.6537279129, 11.7915344391, 14.9309177086, 18.0710639679,
    +
    54  $ 21.2116366299, 24.3524715308, 27.4934791320, 30.6346064684,
    +
    55  $ 33.7758202136, 36.9170983537, 40.0584257646, 43.1997917132,
    +
    56  $ 46.3411883717, 49.4826098974, 52.6240518411, 55.7655107550,
    +
    57  $ 58.9069839261, 62.0484691902, 65.1899648002, 68.3314693299,
    +
    58  $ 71.4729816036, 74.6145006437, 77.7560256304, 80.8975558711,
    +
    59  $ 84.0390907769, 87.1806298436, 90.3221726372, 93.4637187819,
    +
    60  $ 96.6052679510, 99.7468198587, 102.888374254, 106.029930916,
    +
    61  $ 109.171489649, 112.313050280, 115.454612653, 118.596176630,
    +
    62  $ 121.737742088, 124.879308913, 128.020877005, 131.162446275,
    +
    63  $ 134.304016638, 137.445588020, 140.587160352, 143.728733573,
    +
    64  $ 146.870307625, 150.011882457, 153.153458019, 156.295034268 /
    +
    65  REAL:: DLT,D1=1.
    +
    66  REAL AWORK((JMAX+1)/2,((JMAX+1)/2)),BWORK(((JMAX+1)/2))
    +
    67  INTEGER:: JHE,JHO,INFO
    +
    68  INTEGER IPVT((JMAX+1)/2)
    +
    69  parameter(pi=3.14159265358979,c=(1.-(2./pi)**2)*0.25)
    +
    70 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    71 C GAUSSIAN LATITUDES
    +
    72  IF(idrt.EQ.4) THEN
    +
    73  jh=jmax/2
    +
    74  jhe=(jmax+1)/2
    +
    75  r=1./sqrt((jmax+0.5)**2+c)
    +
    76  DO j=1,min(jh,jz)
    +
    77  slatd(j)=cos(bz(j)*r)
    +
    78  ENDDO
    +
    79  DO j=jz+1,jh
    +
    80  slatd(j)=cos((bz(jz)+(j-jz)*pi)*r)
    +
    81  ENDDO
    +
    82  spmax=1.
    +
    83  DO WHILE(spmax.GT.eps)
    +
    84  spmax=0.
    +
    85  DO j=1,jh
    +
    86  pkm1(j)=1.
    +
    87  pk(j)=slatd(j)
    +
    88  ENDDO
    +
    89  DO n=2,jmax
    +
    90  DO j=1,jh
    +
    91  pkm2(j)=pkm1(j)
    +
    92  pkm1(j)=pk(j)
    +
    93  pk(j)=((2*n-1)*slatd(j)*pkm1(j)-(n-1)*pkm2(j))/n
    +
    94  ENDDO
    +
    95  ENDDO
    +
    96  DO j=1,jh
    +
    97  sp=pk(j)*(1.-slatd(j)**2)/(jmax*(pkm1(j)-slatd(j)*pk(j)))
    +
    98  slatd(j)=slatd(j)-sp
    +
    99  spmax=max(spmax,abs(sp))
    +
    100  ENDDO
    +
    101  ENDDO
    +
    102 CDIR$ IVDEP
    +
    103  DO j=1,jh
    +
    104  slat(j)=real(slatd(j))
    +
    105  wlat(j)=real((2.*(1.-slatd(j)**2))/(jmax*pkm1(j))**2)
    +
    106  slat(jmax+1-j)=-slat(j)
    +
    107  wlat(jmax+1-j)=wlat(j)
    +
    108  ENDDO
    +
    109  IF(jhe.GT.jh) THEN
    +
    110  slat(jhe)=0.
    +
    111  wlat(jhe)=2./jmax**2
    +
    112  DO n=2,jmax,2
    +
    113  wlat(jhe)=wlat(jhe)*n**2/(n-1)**2
    +
    114  ENDDO
    +
    115  ENDIF
    +
    116 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    117 C EQUALLY-SPACED LATITUDES INCLUDING POLES
    +
    118  ELSEIF(idrt.EQ.0) THEN
    +
    119  jh=jmax/2
    +
    120  jhe=(jmax+1)/2
    +
    121  jho=jhe-1
    +
    122  dlt=pi/(jmax-1)
    +
    123  slat(1)=1.
    +
    124  DO j=2,jh
    +
    125  slat(j)=cos((j-1)*dlt)
    +
    126  ENDDO
    +
    127  DO js=1,jho
    +
    128  DO j=1,jho
    +
    129  awork(js,j)=cos(2*(js-1)*j*dlt)
    +
    130  ENDDO
    +
    131  ENDDO
    +
    132  DO js=1,jho
    +
    133  bwork(js)=-d1/(4*(js-1)**2-1)
    +
    134  ENDDO
    +
    135 
    +
    136  ! Call LAPACK routines
    +
    137 #if (LSIZE==4)
    +
    138  CALL sgetrf(jho, jho, awork, jhe, ipvt, info)
    +
    139  CALL sgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
    +
    140 #else
    +
    141  CALL dgetrf(jho, jho, awork, jhe, ipvt, info)
    +
    142  CALL dgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
    +
    143 #endif
    +
    144 
    +
    145  wlat(1)=0.
    +
    146  DO j=1,jho
    +
    147  wlat(j+1)=bwork(j)
    +
    148  ENDDO
    +
    149 CDIR$ IVDEP
    +
    150  DO j=1,jh
    +
    151  print *, j, jmax, jmax+1-j
    +
    152  slat(jmax+1-j)=-slat(j)
    +
    153  wlat(jmax+1-j)=wlat(j)
    +
    154  ENDDO
    +
    155  IF(jhe.GT.jh) THEN
    +
    156  slat(jhe)=0.
    +
    157  wlat(jhe)=2.*wlat(jhe)
    +
    158  ENDIF
    +
    159 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    160 C EQUALLY-SPACED LATITUDES EXCLUDING POLES
    +
    161  ELSEIF(idrt.EQ.256) THEN
    +
    162  jh=jmax/2
    +
    163  jhe=(jmax+1)/2
    +
    164  jho=jhe
    +
    165  dlt=pi/jmax
    +
    166  slat(1)=1.
    +
    167  DO j=1,jh
    +
    168  slat(j)=cos((j-0.5)*dlt)
    +
    169  ENDDO
    +
    170  DO js=1,jho
    +
    171  DO j=1,jho
    +
    172  awork(js,j)=cos(2*(js-1)*(j-0.5)*dlt)
    +
    173  ENDDO
    +
    174  ENDDO
    +
    175  DO js=1,jho
    +
    176  bwork(js)=-d1/(4*(js-1)**2-1)
    +
    177  ENDDO
    +
    178 
    +
    179  ! Call LAPACK routines
    +
    180 #if (LSIZE==4)
    +
    181  CALL sgetrf(jho, jho, awork, jhe, ipvt, info)
    +
    182  CALL sgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
    +
    183 #else
    +
    184  CALL dgetrf(jho, jho, awork, jhe, ipvt, info)
    +
    185  CALL dgetrs('N', jho, 1, awork, jhe, ipvt, bwork, jho, info)
    +
    186 #endif
    +
    187 
    +
    188  wlat(1)=0.
    +
    189  DO j=1,jho
    +
    190  wlat(j)=bwork(j)
    +
    191  ENDDO
    +
    192 CDIR$ IVDEP
    +
    193  DO j=1,jh
    +
    194  slat(jmax+1-j)=-slat(j)
    +
    195  wlat(jmax+1-j)=wlat(j)
    +
    196  ENDDO
    +
    197  IF(jhe.GT.jh) THEN
    +
    198  slat(jhe)=0.
    +
    199  wlat(jhe)=2.*wlat(jhe)
    +
    200  ENDIF
    +
    201  ENDIF
    +
    202 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    203  RETURN
    +
    204  END
    +
    subroutine splat(IDRT, JMAX, SLAT, WLAT)
    Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of ...
    Definition: splat.F:46
    +
    +
    + + + + diff --git a/ver-5.1.0/splegend_8f.html b/ver-5.1.0/splegend_8f.html new file mode 100644 index 00000000..60627878 --- /dev/null +++ b/ver-5.1.0/splegend_8f.html @@ -0,0 +1,217 @@ + + + + + + + +NCEPLIBS-ip: splegend.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    splegend.f File Reference
    +
    +
    + +

    Compute Legendre polynomials. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine splegend (I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
     Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude. More...
     
    +

    Detailed Description

    +

    Compute Legendre polynomials.

    +
    Author
    IREDELL
    +
    Date
    92-10-31
    + +

    Definition in file splegend.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ splegend()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine splegend ( I,
     M,
     SLAT,
     CLAT,
    real, dimension((m+1)*((i+1)*m+2)/2) EPS,
    real, dimension(m+1) EPSTOP,
    real, dimension((m+1)*((i+1)*m+2)/2) PLN,
    real, dimension(m+1) PLNTOP 
    )
    +
    + +

    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)
    + 

    PROGRAM HISTORY LOG:

      +
    • 91-10-31 MARK IREDELL
    • +
    • 98-06-10 MARK IREDELL GENERALIZE PRECISION
    • +
    +
    Parameters
    + + + + + + + + + +
    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
    [out]PLN- REAL ((M+1)*((I+1)*M+2)/2) LEGENDRE POLYNOMIAL
    [out]PLNTOP- REAL (M+1) LEGENDRE POLYNOMIAL OVER TOP
    +
    +
    + +

    Definition at line 44 of file splegend.f.

    + +

    Referenced by sptgpm(), sptgpmv(), sptgps(), sptgpsv(), sptgpt(), sptgptsd(), sptgptv(), sptgptvd(), and sptranf0().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/splegend_8f.js b/ver-5.1.0/splegend_8f.js new file mode 100644 index 00000000..8ab7c002 --- /dev/null +++ b/ver-5.1.0/splegend_8f.js @@ -0,0 +1,4 @@ +var splegend_8f = +[ + [ "splegend", "splegend_8f.html#a9c68adc80e97c43ac983b955dd6cabac", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/splegend_8f_source.html b/ver-5.1.0/splegend_8f_source.html new file mode 100644 index 00000000..0259094a --- /dev/null +++ b/ver-5.1.0/splegend_8f_source.html @@ -0,0 +1,238 @@ + + + + + + + +NCEPLIBS-ip: splegend.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    splegend.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Compute Legendre polynomials
    +
    4 C> @author IREDELL @date 92-10-31
    +
    5 
    +
    6 C> Evaluates the orthonormal associated Legendre polynomials in the
    +
    7 C> spectral domain at a given latitude. Subprogram splegend should
    +
    8 C> be called already. If l is the zonal wavenumber, N is the total
    +
    9 C> wavenumber, and EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) then the
    +
    10 C> following bootstrapping formulas are used:
    +
    11 C>
    +
    12 C> <pre>
    +
    13 C> PLN(0,0)=SQRT(0.5)
    +
    14 C> PLN(L,L)=PLN(L-1,L-1)*CLAT*SQRT(FLOAT(2*L+1)/FLOAT(2*L))
    +
    15 C> PLN(L,N)=(SLAT*PLN(L,N-1)-EPS(L,N-1)*PLN(L,N-2))/EPS(L,N)
    +
    16 C> </pre>
    +
    17 C>
    +
    18 C> Synthesis at the pole needs only two zonal wavenumbers. Scalar
    +
    19 C> fields are synthesized with zonal wavenumber 0 while vector
    +
    20 C> fields are synthesized with zonal wavenumber 1. (Thus polar
    +
    21 C> vector fields are implicitly divided by clat.) The following
    +
    22 C> bootstrapping formulas are used at the pole:
    +
    23 C>
    +
    24 C> <pre>
    +
    25 C> PLN(0,0)=SQRT(0.5)
    +
    26 C> PLN(1,1)=SQRT(0.75)
    +
    27 C> PLN(L,N)=(PLN(L,N-1)-EPS(L,N-1)*PLN(L,N-2))/EPS(L,N)
    +
    28 C> </pre>
    +
    29 C>
    +
    30 C> PROGRAM HISTORY LOG:
    +
    31 C> - 91-10-31 MARK IREDELL
    +
    32 C> - 98-06-10 MARK IREDELL GENERALIZE PRECISION
    +
    33 C>
    +
    34 C> @param I - INTEGER SPECTRAL DOMAIN SHAPE
    +
    35 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    36 C> @param M - INTEGER SPECTRAL TRUNCATION
    +
    37 C> @param SLAT - REAL SINE OF LATITUDE
    +
    38 C> @param CLAT - REAL COSINE OF LATITUDE
    +
    39 C> @param EPS - REAL ((M+1)*((I+1)*M+2)/2) SQRT((N**2-L**2)/(4*N**2-1))
    +
    40 C> @param EPSTOP - REAL (M+1) SQRT((N**2-L**2)/(4*N**2-1)) OVER TOP
    +
    41 C> @param[out] PLN - REAL ((M+1)*((I+1)*M+2)/2) LEGENDRE POLYNOMIAL
    +
    42 C> @param[out] PLNTOP - REAL (M+1) LEGENDRE POLYNOMIAL OVER TOP
    +
    43 C>
    +
    44  SUBROUTINE splegend(I,M,SLAT,CLAT,EPS,EPSTOP,PLN,PLNTOP)
    +
    45 
    +
    46 CFPP$ NOCONCUR R
    +
    47  REAL EPS((M+1)*((I+1)*M+2)/2),EPSTOP(M+1)
    +
    48  REAL PLN((M+1)*((I+1)*M+2)/2),PLNTOP(M+1)
    +
    49  REAL(KIND=selected_real_kind(15,45)):: dln((m+1)*((i+1)*m+2)/2)
    +
    50  REAL :: TINYREAL=tiny(1.0), rdln1, rdln2
    +
    51 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    52 C ITERATIVELY COMPUTE PLN WITHIN SPECTRAL DOMAIN AT POLE
    +
    53  m1=m+1
    +
    54  m2=2*m+i+1
    +
    55  mx=(m+1)*((i+1)*m+2)/2
    +
    56  IF(abs(clat).LT.tinyreal) THEN
    +
    57  dln(1)=sqrt(0.5)
    +
    58  IF(m.GT.0) THEN
    +
    59  dln(m1+1)=sqrt(0.75)
    +
    60  dln(2)=slat*dln(1)/eps(2)
    +
    61  ENDIF
    +
    62  IF(m.GT.1) THEN
    +
    63  dln(m1+2)=slat*dln(m1+1)/eps(m1+2)
    +
    64  dln(3)=(slat*dln(2)-eps(2)*dln(1))/eps(3)
    +
    65  DO n=3,m
    +
    66  k=1+n
    +
    67  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
    +
    68  k=m1+n
    +
    69  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
    +
    70  ENDDO
    +
    71  IF(i.EQ.1) THEN
    +
    72  k=m2
    +
    73  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
    +
    74  ENDIF
    +
    75  DO k=m2+1,mx
    +
    76  dln(k)=0.
    +
    77  ENDDO
    +
    78  ENDIF
    +
    79 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    80 C COMPUTE POLYNOMIALS OVER TOP OF SPECTRAL DOMAIN
    +
    81  k=m1+1
    +
    82  rdln1=real(dln(k-1))
    +
    83  rdln2=real(dln(k-2))
    +
    84  plntop(1)=(slat*rdln1-eps(k-1)*rdln2)/epstop(1)
    +
    85  IF(m.GT.0) THEN
    +
    86  k=m2+1
    +
    87  rdln1=real(dln(k-1))
    +
    88  rdln2=real(dln(k-2))
    +
    89  plntop(2)=(slat*rdln1-eps(k-1)*rdln2)/epstop(2)
    +
    90  DO l=2,m
    +
    91  plntop(l+1)=0.
    +
    92  ENDDO
    +
    93  ENDIF
    +
    94 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    95 C ITERATIVELY COMPUTE PLN(L,L) (BOTTOM HYPOTENUSE OF DOMAIN)
    +
    96  ELSE
    +
    97  nml=0
    +
    98  k=1
    +
    99  dln(k)=sqrt(0.5)
    +
    100  DO l=1,m+(i-1)*nml
    +
    101  kp=k
    +
    102  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
    +
    103  dln(k)=dln(kp)*clat*sqrt(float(2*l+1)/float(2*l))
    +
    104  ENDDO
    +
    105 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    106 C COMPUTE PLN(L,L+1) (DIAGONAL NEXT TO BOTTOM HYPOTENUSE OF DOMAIN)
    +
    107  nml=1
    +
    108 CDIR$ IVDEP
    +
    109  DO l=0,m+(i-1)*nml
    +
    110  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
    +
    111  dln(k)=slat*dln(k-1)/eps(k)
    +
    112  ENDDO
    +
    113 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    114 C COMPUTE REMAINING PLN IN SPECTRAL DOMAIN
    +
    115  DO nml=2,m
    +
    116 CDIR$ IVDEP
    +
    117  DO l=0,m+(i-1)*nml
    +
    118  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
    +
    119  dln(k)=(slat*dln(k-1)-eps(k-1)*dln(k-2))/eps(k)
    +
    120  ENDDO
    +
    121  ENDDO
    +
    122 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    123 C COMPUTE POLYNOMIALS OVER TOP OF SPECTRAL DOMAIN
    +
    124  DO l=0,m
    +
    125  nml=m+1+(i-1)*l
    +
    126  k=l*(2*m+(i-1)*(l-1))/2+l+nml+1
    +
    127  rdln1=real(dln(k-1))
    +
    128  rdln2=real(dln(k-2))
    +
    129  plntop(l+1)=(slat*rdln1-eps(k-1)*rdln2)/epstop(l+1)
    +
    130  ENDDO
    +
    131  ENDIF
    +
    132 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    133 C RETURN VALUES
    +
    134  DO k=1,mx
    +
    135  pln(k)=real(dln(k))
    +
    136  ENDDO
    +
    137  RETURN
    +
    138  END
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    +
    + + + + diff --git a/ver-5.1.0/splitbar.png b/ver-5.1.0/splitbar.png new file mode 100644 index 00000000..fe895f2c Binary files /dev/null and b/ver-5.1.0/splitbar.png differ diff --git a/ver-5.1.0/sppad_8f.html b/ver-5.1.0/sppad_8f.html new file mode 100644 index 00000000..89bd770b --- /dev/null +++ b/ver-5.1.0/sppad_8f.html @@ -0,0 +1,189 @@ + + + + + + + +NCEPLIBS-ip: sppad.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sppad.f File Reference
    +
    +
    + +

    Pad or truncate a spectral field. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sppad (I1, M1, Q1, I2, M2, Q2)
     Pad or truncate a spectral field. More...
     
    +

    Detailed Description

    +

    Pad or truncate a spectral field.

    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file sppad.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sppad()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sppad ( I1,
     M1,
    real, dimension((m1+1)*((i1+1)*m1+2)) Q1,
     I2,
     M2,
    real, dimension((m2+1)*((i2+1)*m2+2)) Q2 
    )
    +
    + +

    Pad or truncate a spectral field.

    +
    Parameters
    + + + + + + + +
    I1input spectral domain shape (0 for triangular, 1 for rhomboidal)
    M1input spectral truncation
    Q1((M+1)*((I+1)*M+2)) input field
    I2output spectral domain shape (0 for triangular, 1 for rhomboidal)
    M2output spectral truncation
    Q2((M+1)*((I+1)*M+2)) output field
    +
    +
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition at line 17 of file sppad.f.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sppad_8f.js b/ver-5.1.0/sppad_8f.js new file mode 100644 index 00000000..a47faa1f --- /dev/null +++ b/ver-5.1.0/sppad_8f.js @@ -0,0 +1,4 @@ +var sppad_8f = +[ + [ "sppad", "sppad_8f.html#a4338b3ccd7844251bbdabf3da1d6476e", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sppad_8f_source.html b/ver-5.1.0/sppad_8f_source.html new file mode 100644 index 00000000..fae04c86 --- /dev/null +++ b/ver-5.1.0/sppad_8f_source.html @@ -0,0 +1,136 @@ + + + + + + + +NCEPLIBS-ip: sppad.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sppad.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Pad or truncate a spectral field.
    +
    3 C> @author Iredell @date 92-10-31
    +
    4 
    +
    5 C> Pad or truncate a spectral field.
    +
    6 C>
    +
    7 C> @param I1 input spectral domain shape
    +
    8 C> (0 for triangular, 1 for rhomboidal)
    +
    9 C> @param M1 input spectral truncation
    +
    10 C> @param Q1 ((M+1)*((I+1)*M+2)) input field
    +
    11 C> @param I2 output spectral domain shape
    +
    12 C> (0 for triangular, 1 for rhomboidal)
    +
    13 C> @param M2 output spectral truncation
    +
    14 C> @param Q2 ((M+1)*((I+1)*M+2)) output field
    +
    15 C>
    +
    16 C> @author Iredell @date 92-10-31
    +
    17  SUBROUTINE sppad(I1,M1,Q1,I2,M2,Q2)
    +
    18 
    +
    19  REAL Q1((M1+1)*((I1+1)*M1+2))
    +
    20  REAL Q2((M2+1)*((I2+1)*M2+2))
    +
    21 
    +
    22  DO l=0,m2
    +
    23  DO n=l,i2*l+m2
    +
    24  ks2=l*(2*m2+(i2-1)*(l-1))+2*n
    +
    25  IF(l.LE.m1.AND.n.LE.i1*l+m1) THEN
    +
    26  ks1=l*(2*m1+(i1-1)*(l-1))+2*n
    +
    27  q2(ks2+1)=q1(ks1+1)
    +
    28  q2(ks2+2)=q1(ks1+2)
    +
    29  ELSE
    +
    30  q2(ks2+1)=0
    +
    31  q2(ks2+2)=0
    +
    32  ENDIF
    +
    33  ENDDO
    +
    34  ENDDO
    +
    35  RETURN
    +
    36  END
    +
    subroutine sppad(I1, M1, Q1, I2, M2, Q2)
    Pad or truncate a spectral field.
    Definition: sppad.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/spsynth_8f.html b/ver-5.1.0/spsynth_8f.html new file mode 100644 index 00000000..f9ff4462 --- /dev/null +++ b/ver-5.1.0/spsynth_8f.html @@ -0,0 +1,258 @@ + + + + + + + +NCEPLIBS-ip: spsynth.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spsynth.f File Reference
    +
    +
    + +

    Synthesize Fourier coefficients from spectral coefficients. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spsynth (I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
     Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Southern hemispheres). More...
     
    +

    Detailed Description

    +

    Synthesize Fourier coefficients from spectral coefficients.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    91-10-31 Mark Iredell Initial.
    1998-12-18 Mark Iredell Include scalar and gradient option.
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file spsynth.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spsynth()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spsynth ( I,
     M,
     IM,
     IX,
     NC,
     NCTOP,
     KM,
     CLAT,
    real, dimension((m+1)*((i+1)*m+2)/2) PLN,
    real, dimension(m+1) PLNTOP,
    integer, dimension(km) MP,
    real, dimension(nc,km) SPC,
    real, dimension(nctop,km) SPCTOP,
    real, dimension(ix,2,km) F 
    )
    +
    + +

    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Southern hemispheres).

    +

    Vector components are divided by cosine of latitude.

    +
    Parameters
    + + + + + + + + + + + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    IMeven number of Fourier coefficients
    IXdimension of Fourier coefficients (IX>=IM+2)
    NCdimension of spectral coefficients (NC>=(M+1)*((I+1)*M+2))
    NCTOPdimension of spectral coefficients over top (NCTOP>=2*(M+1))
    KMnumber of fields
    CLATcosine of latitude
    PLN((M+1)*((I+1)*M+2)/2) Legendre polynomial
    PLNTOPLegendre polynomial over top
    SPCspectral coefficients
    SPCTOPspectral coefficients over top
    MPidentifiers (0 for scalar, 1 for vector, or 10 for scalar and gradient)
    FFourier coefficients for latitude pair
    +
    +
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition at line 37 of file spsynth.f.

    + +

    Referenced by sptgpm(), sptgpmv(), sptgps(), sptgpsv(), sptgpt(), sptgptsd(), sptgptv(), sptgptvd(), and sptranf1().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spsynth_8f.js b/ver-5.1.0/spsynth_8f.js new file mode 100644 index 00000000..6cb85dd1 --- /dev/null +++ b/ver-5.1.0/spsynth_8f.js @@ -0,0 +1,4 @@ +var spsynth_8f = +[ + [ "spsynth", "spsynth_8f.html#aa6a8113a459918728c876673520126bf", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spsynth_8f_source.html b/ver-5.1.0/spsynth_8f_source.html new file mode 100644 index 00000000..7235ebde --- /dev/null +++ b/ver-5.1.0/spsynth_8f_source.html @@ -0,0 +1,259 @@ + + + + + + + +NCEPLIBS-ip: spsynth.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spsynth.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Synthesize Fourier coefficients from spectral coefficients.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 91-10-31 | Mark Iredell | Initial.
    +
    8 C> 1998-12-18 | Mark Iredell | Include scalar and gradient option.
    +
    9 C>
    +
    10 C> @author Iredell @date 92-10-31
    +
    11 
    +
    12 C> Synthesizes Fourier coefficients from spectral coefficients
    +
    13 C> for a latitude pair (Northern and Southern hemispheres).
    +
    14 C>
    +
    15 C> Vector components are divided by cosine of latitude.
    +
    16 C>
    +
    17 C> @param I spectral domain shape
    +
    18 C> (0 for triangular, 1 for rhomboidal)
    +
    19 C> @param M spectral truncation
    +
    20 C> @param IM even number of Fourier coefficients
    +
    21 C> @param IX dimension of Fourier coefficients (IX>=IM+2)
    +
    22 C> @param NC dimension of spectral coefficients
    +
    23 C> (NC>=(M+1)*((I+1)*M+2))
    +
    24 C> @param NCTOP dimension of spectral coefficients over top
    +
    25 C> (NCTOP>=2*(M+1))
    +
    26 C> @param KM number of fields
    +
    27 C> @param CLAT cosine of latitude
    +
    28 C> @param PLN ((M+1)*((I+1)*M+2)/2) Legendre polynomial
    +
    29 C> @param PLNTOP Legendre polynomial over top
    +
    30 C> @param SPC spectral coefficients
    +
    31 C> @param SPCTOP spectral coefficients over top
    +
    32 C> @param MP identifiers (0 for scalar, 1 for vector,
    +
    33 C> or 10 for scalar and gradient)
    +
    34 C> @param F Fourier coefficients for latitude pair
    +
    35 C>
    +
    36 C> @author Iredell @date 92-10-31
    +
    37  SUBROUTINE spsynth(I,M,IM,IX,NC,NCTOP,KM,CLAT,PLN,PLNTOP,MP,
    +
    38  & SPC,SPCTOP,F)
    +
    39 
    +
    40  REAL PLN((M+1)*((I+1)*M+2)/2),PLNTOP(M+1)
    +
    41  INTEGER MP(KM)
    +
    42  REAL SPC(NC,KM),SPCTOP(NCTOP,KM)
    +
    43  REAL F(IX,2,KM)
    +
    44  REAL :: TINYREAL=tiny(1.0)
    +
    45 
    +
    46 C ZERO OUT FOURIER COEFFICIENTS.
    +
    47  DO k=1,km
    +
    48  DO l=0,im/2
    +
    49  f(2*l+1,1,k)=0.
    +
    50  f(2*l+2,1,k)=0.
    +
    51  f(2*l+1,2,k)=0.
    +
    52  f(2*l+2,2,k)=0.
    +
    53  ENDDO
    +
    54  ENDDO
    +
    55 
    +
    56 C SYNTHESIS OVER POLE.
    +
    57 C INITIALIZE FOURIER COEFFICIENTS WITH TERMS OVER TOP OF THE SPECTRUM.
    +
    58 C INITIALIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
    +
    59  IF(abs(clat).LT.tinyreal) THEN
    +
    60  ltope=mod(m+1+i,2)
    +
    61 !C$OMP PARALLEL DO PRIVATE(LB,LE,L,KS,KP,N,F1R,F1I)
    +
    62  DO k=1,km
    +
    63  lb=mp(k)
    +
    64  le=mp(k)
    +
    65  IF(mp(k).EQ.10) THEN
    +
    66  lb=0
    +
    67  le=1
    +
    68  ENDIF
    +
    69  l=lb
    +
    70  IF(l.EQ.1) THEN
    +
    71  IF(l.EQ.ltope) THEN
    +
    72  f(2*l+1,1,k)=plntop(l+1)*spctop(2*l+1,k)
    +
    73  f(2*l+2,1,k)=plntop(l+1)*spctop(2*l+2,k)
    +
    74  ELSE
    +
    75  f(2*l+1,2,k)=plntop(l+1)*spctop(2*l+1,k)
    +
    76  f(2*l+2,2,k)=plntop(l+1)*spctop(2*l+2,k)
    +
    77  ENDIF
    +
    78  ENDIF
    +
    79 C FOR EACH ZONAL WAVENUMBER, SYNTHESIZE TERMS OVER TOTAL WAVENUMBER.
    +
    80 C SYNTHESIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
    +
    81  DO l=lb,le
    +
    82  ks=l*(2*m+(i-1)*(l-1))
    +
    83  kp=ks/2+1
    +
    84  DO n=l,i*l+m,2
    +
    85  f(2*l+1,1,k)=f(2*l+1,1,k)+pln(kp+n)*spc(ks+2*n+1,k)
    +
    86  f(2*l+2,1,k)=f(2*l+2,1,k)+pln(kp+n)*spc(ks+2*n+2,k)
    +
    87  ENDDO
    +
    88  DO n=l+1,i*l+m,2
    +
    89  f(2*l+1,2,k)=f(2*l+1,2,k)+pln(kp+n)*spc(ks+2*n+1,k)
    +
    90  f(2*l+2,2,k)=f(2*l+2,2,k)+pln(kp+n)*spc(ks+2*n+2,k)
    +
    91  ENDDO
    +
    92 C SEPARATE FOURIER COEFFICIENTS FROM EACH HEMISPHERE.
    +
    93 C ODD POLYNOMIALS CONTRIBUTE NEGATIVELY TO THE SOUTHERN HEMISPHERE.
    +
    94  f1r=f(2*l+1,1,k)
    +
    95  f1i=f(2*l+2,1,k)
    +
    96  f(2*l+1,1,k)=f1r+f(2*l+1,2,k)
    +
    97  f(2*l+2,1,k)=f1i+f(2*l+2,2,k)
    +
    98  f(2*l+1,2,k)=f1r-f(2*l+1,2,k)
    +
    99  f(2*l+2,2,k)=f1i-f(2*l+2,2,k)
    +
    100  ENDDO
    +
    101  ENDDO
    +
    102 
    +
    103 C SYNTHESIS OVER FINITE LATITUDE.
    +
    104 C INITIALIZE FOURIER COEFFICIENTS WITH TERMS OVER TOP OF THE SPECTRUM.
    +
    105 C INITIALIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
    +
    106  ELSE
    +
    107  lx=min(m,im/2)
    +
    108  ltope=mod(m+1,2)
    +
    109  ltopo=1-ltope
    +
    110  le=1+i*ltope
    +
    111  lo=2-i*ltopo
    +
    112 !C$OMP PARALLEL DO PRIVATE(L,KS,KP,N,F1R,F1I)
    +
    113  DO k=1,km
    +
    114  IF(mp(k).EQ.1) THEN
    +
    115  DO l=ltope,lx,2
    +
    116  f(2*l+1,le,k)=plntop(l+1)*spctop(2*l+1,k)
    +
    117  f(2*l+2,le,k)=plntop(l+1)*spctop(2*l+2,k)
    +
    118  ENDDO
    +
    119  DO l=ltopo,lx,2
    +
    120  f(2*l+1,lo,k)=plntop(l+1)*spctop(2*l+1,k)
    +
    121  f(2*l+2,lo,k)=plntop(l+1)*spctop(2*l+2,k)
    +
    122  ENDDO
    +
    123  ENDIF
    +
    124 C FOR EACH ZONAL WAVENUMBER, SYNTHESIZE TERMS OVER TOTAL WAVENUMBER.
    +
    125 C SYNTHESIZE EVEN AND ODD POLYNOMIALS SEPARATELY.
    +
    126  DO l=0,lx
    +
    127  ks=l*(2*m+(i-1)*(l-1))
    +
    128  kp=ks/2+1
    +
    129  DO n=l,i*l+m,2
    +
    130  f(2*l+1,1,k)=f(2*l+1,1,k)+pln(kp+n)*spc(ks+2*n+1,k)
    +
    131  f(2*l+2,1,k)=f(2*l+2,1,k)+pln(kp+n)*spc(ks+2*n+2,k)
    +
    132  ENDDO
    +
    133  DO n=l+1,i*l+m,2
    +
    134  f(2*l+1,2,k)=f(2*l+1,2,k)+pln(kp+n)*spc(ks+2*n+1,k)
    +
    135  f(2*l+2,2,k)=f(2*l+2,2,k)+pln(kp+n)*spc(ks+2*n+2,k)
    +
    136  ENDDO
    +
    137  ENDDO
    +
    138 C SEPARATE FOURIER COEFFICIENTS FROM EACH HEMISPHERE.
    +
    139 C ODD POLYNOMIALS CONTRIBUTE NEGATIVELY TO THE SOUTHERN HEMISPHERE.
    +
    140 C DIVIDE VECTOR COMPONENTS BY COSINE LATITUDE.
    +
    141  DO l=0,lx
    +
    142  f1r=f(2*l+1,1,k)
    +
    143  f1i=f(2*l+2,1,k)
    +
    144  f(2*l+1,1,k)=f1r+f(2*l+1,2,k)
    +
    145  f(2*l+2,1,k)=f1i+f(2*l+2,2,k)
    +
    146  f(2*l+1,2,k)=f1r-f(2*l+1,2,k)
    +
    147  f(2*l+2,2,k)=f1i-f(2*l+2,2,k)
    +
    148  ENDDO
    +
    149  IF(mp(k).EQ.1) THEN
    +
    150  DO l=0,lx
    +
    151  f(2*l+1,1,k)=f(2*l+1,1,k)/clat
    +
    152  f(2*l+2,1,k)=f(2*l+2,1,k)/clat
    +
    153  f(2*l+1,2,k)=f(2*l+1,2,k)/clat
    +
    154  f(2*l+2,2,k)=f(2*l+2,2,k)/clat
    +
    155  ENDDO
    +
    156  ENDIF
    +
    157  ENDDO
    +
    158  ENDIF
    +
    159  END
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    +
    + + + + diff --git a/ver-5.1.0/sptez_8f.html b/ver-5.1.0/sptez_8f.html new file mode 100644 index 00000000..dabb0310 --- /dev/null +++ b/ver-5.1.0/sptez_8f.html @@ -0,0 +1,234 @@ + + + + + + + +NCEPLIBS-ip: sptez.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptez.f File Reference
    +
    +
    + +

    Perform a simple scalar spherical transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptez (IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRID, IDIR)
     This subprogram performs a spherical transform between spectral coefficients of a scalar quantity and a field on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform a simple scalar spherical transform.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptez.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptez()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptez ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)) WAVE,
    real, dimension(imax,jmax) GRID,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid,
    • +
    • IDRT=0 for equally-spaced grid including poles,
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes.
    JMAXnumber of latitudes.
    [out]WAVEwave field if IDIR>0 where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    [out]GRIDgrid field (E->W,N->S) if IDIR<0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 49 of file sptez.f.

    + +

    References ncpus(), and sptranf().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptez_8f.js b/ver-5.1.0/sptez_8f.js new file mode 100644 index 00000000..03fe31e3 --- /dev/null +++ b/ver-5.1.0/sptez_8f.js @@ -0,0 +1,4 @@ +var sptez_8f = +[ + [ "sptez", "sptez_8f.html#a418a7d182834b2e2dafae2fe881ba9fc", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptez_8f_source.html b/ver-5.1.0/sptez_8f_source.html new file mode 100644 index 00000000..e907436c --- /dev/null +++ b/ver-5.1.0/sptez_8f_source.html @@ -0,0 +1,173 @@ + + + + + + + +NCEPLIBS-ip: sptez.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptez.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a simple scalar spherical transform.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs a spherical transform
    +
    6 C> between spectral coefficients of a scalar quantity
    +
    7 C> and a field on a global cylindrical grid.
    +
    8 C>
    +
    9 C> The wave-space can be either triangular or rhomboidal.
    +
    10 C>
    +
    11 C> The grid-space can be either an equally-spaced grid
    +
    12 C> (with or without pole points) or a Gaussian grid.
    +
    13 C>
    +
    14 C> The wave field is in sequential 'IBM ORDER'.
    +
    15 C>
    +
    16 C> The grid field is indexed East to West, then North to South.
    +
    17 C>
    +
    18 C> For more flexibility and efficiency, call sptran().
    +
    19 C>
    +
    20 C> Subprogram can be called from a multiprocessing environment.
    +
    21 C>
    +
    22 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    23 C> DIMENSION |LINEAR |QUADRATIC
    +
    24 C> ----------------------- |--------- |-------------
    +
    25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    32 C>
    +
    33 C> @param IROMB spectral domain shape
    +
    34 C> (0 for triangular, 1 for rhomboidal)
    +
    35 C> @param MAXWV spectral truncation
    +
    36 C> @param IDRT grid identifier
    +
    37 C> - IDRT=4 for Gaussian grid,
    +
    38 C> - IDRT=0 for equally-spaced grid including poles,
    +
    39 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    40 C> @param IMAX even number of longitudes.
    +
    41 C> @param JMAX number of latitudes.
    +
    42 C> @param[out] WAVE wave field if IDIR>0
    +
    43 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    +
    44 C> @param[out] GRID grid field (E->W,N->S) if IDIR<0
    +
    45 C> @param IDIR transform flag
    +
    46 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    47 C>
    +
    48 C> @author Iredell @date 96-02-29
    +
    49  SUBROUTINE sptez(IROMB,MAXWV,IDRT,IMAX,JMAX,WAVE,GRID,IDIR)
    +
    50 
    +
    51  REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2))
    +
    52  REAL GRID(IMAX,JMAX)
    +
    53 
    +
    54  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    55  ip=1
    +
    56  is=1
    +
    57  jn=imax
    +
    58  js=-jn
    +
    59  kw=2*mx
    +
    60  kg=imax*jmax
    +
    61  jb=1
    +
    62  je=(jmax+1)/2
    +
    63  jc=ncpus()
    +
    64 ! print *, " EM: SPTEZ:::JJJJJJJJJJJJJJJJJJJCCCCCCCCCCC=" ,JC
    +
    65  IF(idir.LT.0) wave=0
    +
    66 
    +
    67  CALL sptranf(iromb,maxwv,idrt,imax,jmax,1,
    +
    68  & ip,is,jn,js,kw,kg,jb,je,jc,
    +
    69  & wave,grid,grid(1,jmax),idir)
    +
    70 
    +
    71  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptez(IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRID, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of a scalar quantity and...
    Definition: sptez.f:50
    +
    subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptranf.f:77
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezd_8f.html b/ver-5.1.0/sptezd_8f.html new file mode 100644 index 00000000..0d2359c9 --- /dev/null +++ b/ver-5.1.0/sptezd_8f.html @@ -0,0 +1,248 @@ + + + + + + + +NCEPLIBS-ip: sptezd.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptezd.f File Reference
    +
    +
    + +

    Perform a simple gradient spherical transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptezd (IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
     This subprogram performs a spherical transform between spectral coefficients of a scalar field and its mean and gradient on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform a simple gradient spherical transform.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptezd.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptezd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptezd ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
    real, dimension(*) WAVE,
    real, dimension(*) GRIDMN,
    real, dimension(imax,jmax) GRIDX,
    real, dimension(imax,jmax) GRIDY,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes.
    JMAXnumber of latitudes.
    [out]WAVEwave field if IDIR>0
    [out]GRIDMNglobal mean if IDIR<0
    [out]GRIDXgrid x-gradients (E->W,N->S) if IDIR<0
    [out]GRIDYgrid y-gradients (E->W,N->S) if IDIR<0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 50 of file sptezd.f.

    + +

    References ncpus(), and sptrand().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezd_8f.js b/ver-5.1.0/sptezd_8f.js new file mode 100644 index 00000000..d5a75e40 --- /dev/null +++ b/ver-5.1.0/sptezd_8f.js @@ -0,0 +1,4 @@ +var sptezd_8f = +[ + [ "sptezd", "sptezd_8f.html#a6c30b52dcb4da9e403eeeb307b9516d7", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptezd_8f_source.html b/ver-5.1.0/sptezd_8f_source.html new file mode 100644 index 00000000..d86821c3 --- /dev/null +++ b/ver-5.1.0/sptezd_8f_source.html @@ -0,0 +1,162 @@ + + + + + + + +NCEPLIBS-ip: sptezd.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptezd.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a simple gradient spherical transform.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs a spherical transform
    +
    6 C> between spectral coefficients of a scalar field
    +
    7 C> and its mean and gradient on a global cylindrical grid.
    +
    8 C>
    +
    9 C> The wave-space can be either triangular or rhomboidal.
    +
    10 C>
    +
    11 C> The grid-space can be either an equally-spaced grid
    +
    12 C> (with or without pole points) or a Gaussian grid.
    +
    13 C>
    +
    14 C> The wave field is in sequential 'IBM ORDER'.
    +
    15 C>
    +
    16 C> The grid fiels is indexed East to West, then North to South.
    +
    17 C>
    +
    18 C> For more flexibility and efficiency, call sptran().
    +
    19 C>
    +
    20 C> Subprogram can be called from a multiprocessing environment.
    +
    21 C>
    +
    22 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    23 C> DIMENSION |LINEAR |QUADRATIC
    +
    24 C> ----------------------- |--------- |-------------
    +
    25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    32 C>
    +
    33 C> @param IROMB spectral domain shape
    +
    34 C> (0 for triangular, 1 for rhomboidal)
    +
    35 C> @param MAXWV spectral truncation
    +
    36 C> @param IDRT grid identifier
    +
    37 C> - IDRT=4 for Gaussian grid
    +
    38 C> - IDRT=0 for equally-spaced grid including poles
    +
    39 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    40 C> @param IMAX even number of longitudes.
    +
    41 C> @param JMAX number of latitudes.
    +
    42 C> @param[out] WAVE wave field if IDIR>0
    +
    43 C> @param[out] GRIDMN global mean if IDIR<0
    +
    44 C> @param[out] GRIDX grid x-gradients (E->W,N->S) if IDIR<0
    +
    45 C> @param[out] GRIDY grid y-gradients (E->W,N->S) if IDIR<0
    +
    46 C> @param IDIR transform flag
    +
    47 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    48 C>
    +
    49 C> @author Iredell @date 96-02-29
    +
    50  SUBROUTINE sptezd(IROMB,MAXWV,IDRT,IMAX,JMAX,
    +
    51  & WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
    +
    52 
    +
    53  REAL WAVE(*),GRIDX(IMAX,JMAX),GRIDY(IMAX,JMAX),GRIDMN(*)
    +
    54 
    +
    55  jc=ncpus()
    +
    56  CALL sptrand(iromb,maxwv,idrt,imax,jmax,1,
    +
    57  & 0,0,0,0,0,0,0,0,jc,
    +
    58  & wave,gridmn,
    +
    59  & gridx,gridx(1,jmax),gridy,gridy(1,jmax),1)
    +
    60  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptezd(IROMB, MAXWV, IDRT, IMAX, JMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of a scalar field and it...
    Definition: sptezd.f:52
    +
    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 the...
    Definition: sptrand.f:92
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezm_8f.html b/ver-5.1.0/sptezm_8f.html new file mode 100644 index 00000000..d3955611 --- /dev/null +++ b/ver-5.1.0/sptezm_8f.html @@ -0,0 +1,241 @@ + + + + + + + +NCEPLIBS-ip: sptezm.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptezm.f File Reference
    +
    +
    + +

    Perform simple scalar spherical transforms. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptezm (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRID, IDIR)
     This subprogram performs spherical transforms between spectral coefficients of scalar quantities and fields on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform simple scalar spherical transforms.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptezm.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptezm()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptezm ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     KMAX,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax) WAVE,
    real, dimension(imax,jmax,kmax) GRID,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes
    JMAXnumber of latitudes
    KMAXnumber of fields to transform
    [out]WAVEwave field if IDIR>0 where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    [out]GRIDgrid field (E->W,N->S) if IDIR<0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 50 of file sptezm.f.

    + +

    References ncpus(), and sptranf().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezm_8f.js b/ver-5.1.0/sptezm_8f.js new file mode 100644 index 00000000..d8cb8be0 --- /dev/null +++ b/ver-5.1.0/sptezm_8f.js @@ -0,0 +1,4 @@ +var sptezm_8f = +[ + [ "sptezm", "sptezm_8f.html#a1430a0df2cba7eefaf67c939684be2d1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptezm_8f_source.html b/ver-5.1.0/sptezm_8f_source.html new file mode 100644 index 00000000..a68c0f93 --- /dev/null +++ b/ver-5.1.0/sptezm_8f_source.html @@ -0,0 +1,172 @@ + + + + + + + +NCEPLIBS-ip: sptezm.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptezm.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform simple scalar spherical transforms.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs spherical transforms
    +
    6 C> between spectral coefficients of scalar quantities
    +
    7 C> and fields on a global cylindrical grid.
    +
    8 C>
    +
    9 C> The wave-space can be either triangular or rhomboidal.
    +
    10 C>
    +
    11 C> The grid-space can be either an equally-spaced grid
    +
    12 C> (with or without pole points) or a Gaussian grid.
    +
    13 C>
    +
    14 C> Wave fields are in sequential 'IBM ORDER'.
    +
    15 C>
    +
    16 C> Grid fields are indexed East to West, then North to South.
    +
    17 C>
    +
    18 C> For more flexibility and efficiency, call sptran().
    +
    19 C>
    +
    20 C> Subprogram can be called from a multiprocessing environment.
    +
    21 C>
    +
    22 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    23 C> DIMENSION |LINEAR |QUADRATIC
    +
    24 C> ----------------------- |--------- |-------------
    +
    25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    32 C>
    +
    33 C> @param IROMB spectral domain shape
    +
    34 C> (0 for triangular, 1 for rhomboidal)
    +
    35 C> @param MAXWV spectral truncation
    +
    36 C> @param IDRT grid identifier
    +
    37 C> - IDRT=4 for Gaussian grid
    +
    38 C> - IDRT=0 for equally-spaced grid including poles
    +
    39 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    40 C> @param IMAX even number of longitudes
    +
    41 C> @param JMAX number of latitudes
    +
    42 C> @param KMAX number of fields to transform
    +
    43 C> @param[out] WAVE wave field if IDIR>0
    +
    44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    +
    45 C> @param[out] GRID grid field (E->W,N->S) if IDIR<0
    +
    46 C> @param IDIR transform flag
    +
    47 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    48 C>
    +
    49 C> @author Iredell @date 96-02-29
    +
    50  SUBROUTINE sptezm(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,WAVE,GRID,IDIR)
    +
    51 
    +
    52  REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
    +
    53  REAL GRID(IMAX,JMAX,KMAX)
    +
    54 
    +
    55  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    56  ip=1
    +
    57  is=1
    +
    58  jn=imax
    +
    59  js=-jn
    +
    60  kw=2*mx
    +
    61  kg=imax*jmax
    +
    62  jb=1
    +
    63  je=(jmax+1)/2
    +
    64  jc=ncpus()
    +
    65  IF(idir.LT.0) wave=0
    +
    66 
    +
    67  CALL sptranf(iromb,maxwv,idrt,imax,jmax,kmax,
    +
    68  & ip,is,jn,js,kw,kg,jb,je,jc,
    +
    69  & wave,grid,grid(1,jmax,1),idir)
    +
    70  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptezm(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRID, IDIR)
    This subprogram performs spherical transforms between spectral coefficients of scalar quantities and ...
    Definition: sptezm.f:51
    +
    subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptranf.f:77
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezmd_8f.html b/ver-5.1.0/sptezmd_8f.html new file mode 100644 index 00000000..80753eaf --- /dev/null +++ b/ver-5.1.0/sptezmd_8f.html @@ -0,0 +1,255 @@ + + + + + + + +NCEPLIBS-ip: sptezmd.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptezmd.f File Reference
    +
    +
    + +

    Perform simple gradient spherical transforms. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptezmd (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
     This subprogram performs spherical transforms between spectral coefficients of scalar fields and their means and gradients on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform simple gradient spherical transforms.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptezmd.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptezmd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptezmd ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     KMAX,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax) WAVE,
    real, dimension(kmax) GRIDMN,
    real, dimension(imax,jmax,kmax) GRIDX,
    real, dimension(imax,jmax,kmax) GRIDY,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes.
    JMAXnumber of latitudes.
    KMAXnumber
    [out]WAVEwave field if IDIR>0 where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)
    [out]GRIDMNglobal mean if IDIR<0
    [out]GRIDXgrid x-gradients (E->W,N->S) if IDIR<0
    [out]GRIDYgrid y-gradients (E->W,N->S) if IDIR<0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 52 of file sptezmd.f.

    + +

    References ncpus(), and sptrand().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezmd_8f.js b/ver-5.1.0/sptezmd_8f.js new file mode 100644 index 00000000..31e96979 --- /dev/null +++ b/ver-5.1.0/sptezmd_8f.js @@ -0,0 +1,4 @@ +var sptezmd_8f = +[ + [ "sptezmd", "sptezmd_8f.html#a2b9ead06893e51604bfb18928ddee996", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptezmd_8f_source.html b/ver-5.1.0/sptezmd_8f_source.html new file mode 100644 index 00000000..2e7916a5 --- /dev/null +++ b/ver-5.1.0/sptezmd_8f_source.html @@ -0,0 +1,165 @@ + + + + + + + +NCEPLIBS-ip: sptezmd.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptezmd.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform simple gradient spherical transforms.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs spherical transforms
    +
    6 C> between spectral coefficients of scalar fields
    +
    7 C> and their means and gradients on a global cylindrical grid.
    +
    8 C>
    +
    9 C> The wave-space can be either triangular or rhomboidal.
    +
    10 C>
    +
    11 C> The grid-space can be either an equally-spaced grid
    +
    12 C> (with or without pole points) or a gaussian grid.
    +
    13 C>
    +
    14 C> The wave fields are in sequential 'IBM ORDER'.
    +
    15 C>
    +
    16 C> The grid fields are indexed East to West, then North to South.
    +
    17 C>
    +
    18 C> For more flexibility and efficiency, call sptran().
    +
    19 C>
    +
    20 C> Subprogram can be called from a multiprocessing environment.
    +
    21 C>
    +
    22 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    23 C> DIMENSION |LINEAR |QUADRATIC
    +
    24 C> ----------------------- |--------- |-------------
    +
    25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    32 C>
    +
    33 C> @param IROMB spectral domain shape
    +
    34 C> (0 for triangular, 1 for rhomboidal)
    +
    35 C> @param MAXWV spectral truncation
    +
    36 C> @param IDRT grid identifier
    +
    37 C> - IDRT=4 for Gaussian grid
    +
    38 C> - IDRT=0 for equally-spaced grid including poles
    +
    39 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    40 C> @param IMAX even number of longitudes.
    +
    41 C> @param JMAX number of latitudes.
    +
    42 C> @param KMAX number
    +
    43 C> @param[out] WAVE wave field if IDIR>0
    +
    44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)
    +
    45 C> @param[out] GRIDMN global mean if IDIR<0
    +
    46 C> @param[out] GRIDX grid x-gradients (E->W,N->S) if IDIR<0
    +
    47 C> @param[out] GRIDY grid y-gradients (E->W,N->S) if IDIR<0
    +
    48 C> @param IDIR transform flag
    +
    49 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    50 C>
    +
    51 C> @author Iredell @date 96-02-29
    +
    52  SUBROUTINE sptezmd(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
    +
    53  & WAVE,GRIDMN,GRIDX,GRIDY,IDIR)
    +
    54 
    +
    55  REAL WAVE((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
    +
    56  REAL GRIDMN(KMAX),GRIDX(IMAX,JMAX,KMAX),GRIDY(IMAX,JMAX,KMAX)
    +
    57 
    +
    58  jc=ncpus()
    +
    59  CALL sptrand(iromb,maxwv,idrt,imax,jmax,kmax,
    +
    60  & 0,0,0,0,0,0,0,0,jc,
    +
    61  & wave,gridmn,
    +
    62  & gridx,gridx(1,jmax,1),gridy,gridy(1,jmax,1),idir)
    +
    63  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptezmd(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVE, GRIDMN, GRIDX, GRIDY, IDIR)
    This subprogram performs spherical transforms between spectral coefficients of scalar fields and thei...
    Definition: sptezmd.f:54
    +
    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 the...
    Definition: sptrand.f:92
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezmv_8f.html b/ver-5.1.0/sptezmv_8f.html new file mode 100644 index 00000000..8556ba90 --- /dev/null +++ b/ver-5.1.0/sptezmv_8f.html @@ -0,0 +1,255 @@ + + + + + + + +NCEPLIBS-ip: sptezmv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptezmv.f File Reference
    +
    +
    + +

    Perform simple vector spherical transforms. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptezmv (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
     This subprogram performs spherical transforms between spectral coefficients of divergence and curl and vector fields on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform simple vector spherical transforms.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptezmv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptezmv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptezmv ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     KMAX,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax) WAVED,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2),kmax) WAVEZ,
    real, dimension(imax,jmax,kmax) GRIDU,
    real, dimension(imax,jmax,kmax) GRIDV,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes
    JMAXnumber of latitudes
    KMAXnumber of fields to transform
    [out]WAVEDwave divergence field if IDIR<0 where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    [out]WAVEZwave vorticity field if IDIR>0 where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    [out]GRIDUgrid u-wind (E->W,N->S) if IDIR>0
    [out]GRIDVgrid v-wind (E->W,N->S) if IDIR>0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 53 of file sptezmv.f.

    + +

    References ncpus(), and sptranfv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezmv_8f.js b/ver-5.1.0/sptezmv_8f.js new file mode 100644 index 00000000..2b2725eb --- /dev/null +++ b/ver-5.1.0/sptezmv_8f.js @@ -0,0 +1,4 @@ +var sptezmv_8f = +[ + [ "sptezmv", "sptezmv_8f.html#a22dc4fc10c5225ec8d3c12ed3cb4786e", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptezmv_8f_source.html b/ver-5.1.0/sptezmv_8f_source.html new file mode 100644 index 00000000..20f789af --- /dev/null +++ b/ver-5.1.0/sptezmv_8f_source.html @@ -0,0 +1,180 @@ + + + + + + + +NCEPLIBS-ip: sptezmv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptezmv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform simple vector spherical transforms.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs spherical transforms
    +
    6 C> between spectral coefficients of divergence and curl
    +
    7 C> and vector fields on a global cylindrical grid.
    +
    8 C>
    +
    9 C> The wave-space can be either triangular or rhomboidal.
    +
    10 C>
    +
    11 C> The grid-space can be either an equally-spaced grid
    +
    12 C> (with or without pole points) or a Gaussian grid.
    +
    13 C>
    +
    14 C> Wave fields are in sequential 'IBM ORDER'.
    +
    15 C>
    +
    16 C> Grid fields are indexed east to west, then north to south.
    +
    17 C>
    +
    18 C> For more flexibility and efficiency, call sptran().
    +
    19 C>
    +
    20 C> Subprogram can be called from a multiprocessing environment.
    +
    21 C>
    +
    22 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    23 C> DIMENSION |LINEAR |QUADRATIC
    +
    24 C> ----------------------- |--------- |-------------
    +
    25 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    26 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    27 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    28 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    29 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    30 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    31 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    32 C>
    +
    33 C> @param IROMB spectral domain shape
    +
    34 C> (0 for triangular, 1 for rhomboidal)
    +
    35 C> @param MAXWV spectral truncation
    +
    36 C> @param IDRT grid identifier
    +
    37 C> - IDRT=4 for Gaussian grid
    +
    38 C> - IDRT=0 for equally-spaced grid including poles
    +
    39 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    40 C> @param IMAX even number of longitudes
    +
    41 C> @param JMAX number of latitudes
    +
    42 C> @param KMAX number of fields to transform
    +
    43 C> @param[out] WAVED wave divergence field if IDIR<0
    +
    44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    +
    45 C> @param[out] WAVEZ wave vorticity field if IDIR>0
    +
    46 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    +
    47 C> @param[out] GRIDU grid u-wind (E->W,N->S) if IDIR>0
    +
    48 C> @param[out] GRIDV grid v-wind (E->W,N->S) if IDIR>0
    +
    49 C> @param IDIR transform flag
    +
    50 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    51 C>
    +
    52 C> @author Iredell @date 96-02-29
    +
    53  SUBROUTINE sptezmv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
    +
    54  & WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
    +
    55 
    +
    56  REAL WAVED((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
    +
    57  REAL WAVEZ((MAXWV+1)*((IROMB+1)*MAXWV+2),KMAX)
    +
    58  REAL GRIDU(IMAX,JMAX,KMAX)
    +
    59  REAL GRIDV(IMAX,JMAX,KMAX)
    +
    60 
    +
    61  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    62  ip=1
    +
    63  is=1
    +
    64  jn=imax
    +
    65  js=-jn
    +
    66  kw=2*mx
    +
    67  kg=imax*jmax
    +
    68  jb=1
    +
    69  je=(jmax+1)/2
    +
    70  jc=ncpus()
    +
    71  IF(idir.LT.0) waved=0
    +
    72  IF(idir.LT.0) wavez=0
    +
    73 
    +
    74  CALL sptranfv(iromb,maxwv,idrt,imax,jmax,kmax,
    +
    75  & ip,is,jn,js,kw,kg,jb,je,jc,
    +
    76  & waved,wavez,
    +
    77  & gridu,gridu(1,jmax,1),gridv,gridv(1,jmax,1),idir)
    +
    78  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptezmv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
    This subprogram performs spherical transforms between spectral coefficients of divergence and curl an...
    Definition: sptezmv.f:55
    +
    subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranfv.f:83
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezv_8f.html b/ver-5.1.0/sptezv_8f.html new file mode 100644 index 00000000..be8521ff --- /dev/null +++ b/ver-5.1.0/sptezv_8f.html @@ -0,0 +1,248 @@ + + + + + + + +NCEPLIBS-ip: sptezv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptezv.f File Reference
    +
    +
    + +

    Perform a simple vector spherical transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptezv (IROMB, MAXWV, IDRT, IMAX, JMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
     This subprogram performs a spherical transform between spectral coefficients of divergence and curl and a vector field on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform a simple vector spherical transform.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptezv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptezv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptezv ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)) WAVED,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)) WAVEZ,
    real, dimension(imax,jmax) GRIDU,
    real, dimension(imax,jmax) GRIDV,
     IDIR 
    )
    +
    + +

    This subprogram 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 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + +
    IROMBSpectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVSpectral truncation
    IDRTGrid identifier
      +
    • IDRT=4 for Gaussian grid
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXEven number of longitudes
    JMAXNumber of latitudes
    [out]WAVEDWave divergence field if IDIR>0 where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    [out]WAVEZWave vorticity field if IDIR>0 where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    [out]GRIDUGrid u-wind (E->W,N->S) if IDIR<0
    [out]GRIDVGrid v-wind (E->W,N->S) if IDIR<0
    IDIRTransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 51 of file sptezv.f.

    + +

    References ncpus(), and sptranfv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptezv_8f.js b/ver-5.1.0/sptezv_8f.js new file mode 100644 index 00000000..d9e51fb2 --- /dev/null +++ b/ver-5.1.0/sptezv_8f.js @@ -0,0 +1,4 @@ +var sptezv_8f = +[ + [ "sptezv", "sptezv_8f.html#a83e49d961c40a2621c3f2afe70846226", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptezv_8f_source.html b/ver-5.1.0/sptezv_8f_source.html new file mode 100644 index 00000000..d467cea5 --- /dev/null +++ b/ver-5.1.0/sptezv_8f_source.html @@ -0,0 +1,178 @@ + + + + + + + +NCEPLIBS-ip: sptezv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptezv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a simple vector spherical transform
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs a spherical transform
    +
    6 C> between spectral coefficients of divergence and curl
    +
    7 C> and a vector field on a global cylindrical grid.
    +
    8 C> The wave-space can be either triangular or rhomboidal.
    +
    9 C>
    +
    10 C> The grid-space can be either an equally-spaced grid
    +
    11 C> (with or without pole points) or a Gaussian grid.
    +
    12 C>
    +
    13 C> The wave field is in sequential 'IBM order'.
    +
    14 C>
    +
    15 C> The grid field is indexed east to west, then north to south.
    +
    16 C>
    +
    17 C> For more flexibility and efficiency, call SPTRAN().
    +
    18 C>
    +
    19 C> Subprogram can be called from a multiprocessing environment.
    +
    20 C>
    +
    21 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    22 C> Dimension |Linear |Quadratic
    +
    23 C> ----------------------- |--------- |-------------
    +
    24 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    25 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    26 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    27 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    28 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    29 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    30 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    31 C>
    +
    32 C> @param IROMB Spectral domain shape
    +
    33 C> (0 for triangular, 1 for rhomboidal)
    +
    34 C> @param MAXWV Spectral truncation
    +
    35 C> @param IDRT Grid identifier
    +
    36 C> - IDRT=4 for Gaussian grid
    +
    37 C> - IDRT=0 for equally-spaced grid including poles
    +
    38 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    39 C> @param IMAX Even number of longitudes
    +
    40 C> @param JMAX Number of latitudes
    +
    41 C> @param[out] WAVED Wave divergence field if IDIR>0
    +
    42 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    +
    43 C> @param[out] WAVEZ Wave vorticity field if IDIR>0
    +
    44 C> where MX=(MAXWV+1)*((IROMB+1)*MAXWV+2)/2
    +
    45 C> @param[out] GRIDU Grid u-wind (E->W,N->S) if IDIR<0
    +
    46 C> @param[out] GRIDV Grid v-wind (E->W,N->S) if IDIR<0
    +
    47 C> @param IDIR Transform flag
    +
    48 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    49 C>
    +
    50 C> @author Iredell @date 96-02-29
    +
    51  SUBROUTINE sptezv(IROMB,MAXWV,IDRT,IMAX,JMAX,
    +
    52  & WAVED,WAVEZ,GRIDU,GRIDV,IDIR)
    +
    53 
    +
    54  REAL WAVED((MAXWV+1)*((IROMB+1)*MAXWV+2))
    +
    55  REAL WAVEZ((MAXWV+1)*((IROMB+1)*MAXWV+2))
    +
    56  REAL GRIDU(IMAX,JMAX)
    +
    57  REAL GRIDV(IMAX,JMAX)
    +
    58 
    +
    59  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    60  ip=1
    +
    61  is=1
    +
    62  jn=imax
    +
    63  js=-jn
    +
    64  kw=2*mx
    +
    65  kg=imax*jmax
    +
    66  jb=1
    +
    67  je=(jmax+1)/2
    +
    68  jc=ncpus()
    +
    69  IF(idir.LT.0) waved=0
    +
    70  IF(idir.LT.0) wavez=0
    +
    71 
    +
    72  CALL sptranfv(iromb,maxwv,idrt,imax,jmax,1,
    +
    73  & ip,is,jn,js,kw,kg,jb,je,jc,
    +
    74  & waved,wavez,
    +
    75  & gridu,gridu(1,jmax),gridv,gridv(1,jmax),idir)
    +
    76  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptezv(IROMB, MAXWV, IDRT, IMAX, JMAX, WAVED, WAVEZ, GRIDU, GRIDV, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergence and curl a...
    Definition: sptezv.f:53
    +
    subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranfv.f:83
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpm_8f.html b/ver-5.1.0/sptgpm_8f.html new file mode 100644 index 00000000..aa4450a7 --- /dev/null +++ b/ver-5.1.0/sptgpm_8f.html @@ -0,0 +1,267 @@ + + + + + + + +NCEPLIBS-ip: sptgpm.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgpm.f File Reference
    +
    +
    + +

    Transform spectral scalar to Mercator. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgpm (IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
     This subprogram performs a spherical transform from spectral coefficients of scalar quantities to scalar fields on a Mercator grid. More...
     
    +

    Detailed Description

    +

    Transform spectral scalar to Mercator.

    +

    +Program history log:

    + + + + + + + +
    Date Programmer Comments
    96-02-29 IREDELL Initial.
    1998-12-15 IREDELL OpenMP directives inserted.
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptgpm.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgpm()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgpm ( IROMB,
     MAXWV,
     KMAX,
     MI,
     MJ,
     KWSKIP,
     KGSKIP,
     NISKIP,
     NJSKIP,
     RLAT1,
     RLON1,
     DLAT,
     DLON,
    real, dimension(*) WAVE,
    real, dimension(*) GM 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + +
    IROMBSpectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVSpectral truncation
    KMAXNumber of fields to transform
    MINumber of points in the faster zonal direction
    MJNumber of points in the slower merid direction
    KWSKIPSkip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPSkip number between grid fields (defaults to MI*MJ if KGSKIP=0)
    NISKIPSkip number between grid i-points (defaults to 1 if NISKIP=0)
    NJSKIPSkip number between grid j-points (defaults to MI if NJSKIP=0)
    RLAT1Latitude of the first grid point in degrees
    RLON1Longitude of the first grid point in degrees
    DLATLatitude 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)
    DLONLongitude increment in degrees such that D(LAMBDA)/D(I)=DLON where I is zonal index. DLON is negative for grids indexed westward.
    WAVEWave fields
    GMMercator fields
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition at line 53 of file sptgpm.f.

    + +

    References splegend(), spsynth(), and spwget().

    + +

    Referenced by sptrunm(), and sptrunmv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpm_8f.js b/ver-5.1.0/sptgpm_8f.js new file mode 100644 index 00000000..d1806195 --- /dev/null +++ b/ver-5.1.0/sptgpm_8f.js @@ -0,0 +1,4 @@ +var sptgpm_8f = +[ + [ "sptgpm", "sptgpm_8f.html#a6cffaeaa602eaae5c03166f48065158d", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgpm_8f_source.html b/ver-5.1.0/sptgpm_8f_source.html new file mode 100644 index 00000000..65c529ce --- /dev/null +++ b/ver-5.1.0/sptgpm_8f_source.html @@ -0,0 +1,226 @@ + + + + + + + +NCEPLIBS-ip: sptgpm.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgpm.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral scalar to Mercator
    +
    3 C> ### Program history log:
    +
    4 C> Date | Programmer | Comments
    +
    5 C> -----------|------------|---------
    +
    6 C> 96-02-29 | IREDELL | Initial.
    +
    7 C> 1998-12-15 | IREDELL | OpenMP directives inserted.
    +
    8 C> @author IREDELL @date 96-02-29
    +
    9 
    +
    10 C> This subprogram performs a spherical transform
    +
    11 C> from spectral coefficients of scalar quantities
    +
    12 C> to scalar fields on a Mercator grid.
    +
    13 C> The wave-space can be either triangular or rhomboidal.
    +
    14 C> The wave and grid fields may have general indexing,
    +
    15 C> but each wave field is in sequential 'ibm order',
    +
    16 C> i.e. with zonal wavenumber as the slower index.
    +
    17 C> The Mercator grid is identified by the location
    +
    18 C> of its first point and by its respective increments.
    +
    19 C> The transforms are all multiprocessed over sector points.
    +
    20 C> Transform several fields at a time to improve vectorization.
    +
    21 C> Subprogram can be called from a multiprocessing environment.
    +
    22 C>
    +
    23 C> @param IROMB Spectral domain shape
    +
    24 C> (0 for triangular, 1 for rhomboidal)
    +
    25 C> @param MAXWV Spectral truncation
    +
    26 C> @param KMAX Number of fields to transform
    +
    27 C> @param MI Number of points in the faster zonal direction
    +
    28 C> @param MJ Number of points in the slower merid direction
    +
    29 C> @param KWSKIP Skip number between wave fields
    +
    30 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    31 C> @param KGSKIP Skip number between grid fields
    +
    32 C> (defaults to MI*MJ if KGSKIP=0)
    +
    33 C> @param NISKIP Skip number between grid i-points
    +
    34 C> (defaults to 1 if NISKIP=0)
    +
    35 C> @param NJSKIP Skip number between grid j-points
    +
    36 C> (defaults to MI if NJSKIP=0)
    +
    37 C> @param RLAT1 Latitude of the first grid point in degrees
    +
    38 C> @param RLON1 Longitude of the first grid point in degrees
    +
    39 C> @param DLAT Latitude increment in degrees such that
    +
    40 C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
    +
    41 C> DLAT is negative for grids indexed southward.
    +
    42 C> (in terms of grid increment DY valid at latitude RLATI,
    +
    43 C> the latitude increment DLAT is determined as
    +
    44 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    +
    45 C> where DPR=180/PI and RERTH is earth's radius)
    +
    46 C> @param DLON Longitude increment in degrees such that
    +
    47 C> D(LAMBDA)/D(I)=DLON where I is zonal index.
    +
    48 C> DLON is negative for grids indexed westward.
    +
    49 C> @param WAVE Wave fields
    +
    50 C> @param GM Mercator fields
    +
    51 C>
    +
    52 C> @author IREDELL @date 96-02-29
    +
    53  SUBROUTINE sptgpm(IROMB,MAXWV,KMAX,MI,MJ,
    +
    54  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
    +
    55  & RLAT1,RLON1,DLAT,DLON,WAVE,GM)
    +
    56 
    +
    57  REAL WAVE(*),GM(*)
    +
    58  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    59  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    60  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    61  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    62  INTEGER MP(KMAX)
    +
    63  REAL WTOP(2*(MAXWV+1),KMAX)
    +
    64  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    65  REAL F(2*MAXWV+3,2,KMAX)
    +
    66  REAL CLAT(MJ),SLAT(MJ),CLON(MAXWV,MI),SLON(MAXWV,MI)
    +
    67  parameter(pi=3.14159265358979,dpr=180./pi)
    +
    68 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    69 C CALCULATE PRELIMINARY CONSTANTS
    +
    70  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    71  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    72  mxtop=maxwv+1
    +
    73  idim=2*maxwv+3
    +
    74  kw=kwskip
    +
    75  kg=kgskip
    +
    76  ni=niskip
    +
    77  nj=njskip
    +
    78  IF(kw.EQ.0) kw=2*mx
    +
    79  IF(kg.EQ.0) kg=mi*mj
    +
    80  IF(ni.EQ.0) ni=1
    +
    81  IF(nj.EQ.0) nj=mi
    +
    82  DO i=1,mi
    +
    83  rlon=mod(rlon1+dlon*(i-1)+3600,360.)
    +
    84  DO l=1,maxwv
    +
    85  clon(l,i)=cos(l*rlon/dpr)
    +
    86  slon(l,i)=sin(l*rlon/dpr)
    +
    87  ENDDO
    +
    88  ENDDO
    +
    89  ye=1-log(tan((rlat1+90)/2/dpr))*dpr/dlat
    +
    90  DO j=1,mj
    +
    91  rlat=atan(exp(dlat/dpr*(j-ye)))*2*dpr-90
    +
    92  clat(j)=cos(rlat/dpr)
    +
    93  slat(j)=sin(rlat/dpr)
    +
    94  ENDDO
    +
    95  mp=0
    +
    96 C$OMP PARALLEL DO
    +
    97  DO k=1,kmax
    +
    98  wtop(1:2*mxtop,k)=0
    +
    99  ENDDO
    +
    100 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    101 C TRANSFORM TO GRID
    +
    102 C$OMP PARALLEL DO PRIVATE(PLN,PLNTOP,F,IJK)
    +
    103  DO j=1,mj
    +
    104  CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
    +
    105  & pln,plntop)
    +
    106  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
    +
    107  & clat(j),pln,plntop,mp,wave,wtop,f)
    +
    108  DO k=1,kmax
    +
    109  DO i=1,mi
    +
    110  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
    +
    111  gm(ijk)=f(1,1,k)
    +
    112  ENDDO
    +
    113  DO l=1,maxwv
    +
    114  DO i=1,mi
    +
    115  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
    +
    116  gm(ijk)=gm(ijk)+2.*(f(2*l+1,1,k)*clon(l,i)
    +
    117  & -f(2*l+2,1,k)*slon(l,i))
    +
    118  ENDDO
    +
    119  ENDDO
    +
    120  ENDDO
    +
    121  ENDDO
    +
    122 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    123  END
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgpm(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgpm.f:56
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpmd_8f.html b/ver-5.1.0/sptgpmd_8f.html new file mode 100644 index 00000000..b5ce380c --- /dev/null +++ b/ver-5.1.0/sptgpmd_8f.html @@ -0,0 +1,265 @@ + + + + + + + +NCEPLIBS-ip: sptgpmd.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgpmd.f File Reference
    +
    +
    + +

    Transform spectral to Mercator gradients. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgpmd (IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, XM, YM)
     This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradient fields on a Mercator grid. More...
     
    +

    Detailed Description

    +

    Transform spectral to Mercator gradients.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptgpmd.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgpmd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgpmd ( IROMB,
     MAXWV,
     KMAX,
     MI,
     MJ,
     KWSKIP,
     KGSKIP,
     NISKIP,
     NJSKIP,
     RLAT1,
     RLON1,
     DLAT,
     DLON,
    real, dimension(*) WAVE,
    real, dimension(*) XM,
    real, dimension(*) YM 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    IROMBSpectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVSpectral truncation
    KMAXNumber of fields to transform
    MINumber of points in the faster zonal direction
    MJNumber of points in the slower merid direction
    KWSKIPSkip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPSkip number between grid fields (defaults to MI*MJ if KGSKIP=0)
    NISKIPSkip number between grid i-points (defaults to 1 if NISKIP=0)
    NJSKIPSkip number between grid j-points (defaults to MI if NJSKIP=0)
    RLAT1Latitude of the first grid point in degrees
    RLON1Longitude of the first grid point in degrees
    DLATLatitude 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)
    DLONLongitude increment in degrees such that D(LAMBDA)/D(I)=DLON where I is zonal index. DLON is negative for grids indexed westward.
    WAVEWave fields
    XMMercator x-gradients
    YMMercator y-gradients
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 53 of file sptgpmd.f.

    + +

    References splaplac(), sptgpmv(), and spwget().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpmd_8f.js b/ver-5.1.0/sptgpmd_8f.js new file mode 100644 index 00000000..37a6a937 --- /dev/null +++ b/ver-5.1.0/sptgpmd_8f.js @@ -0,0 +1,4 @@ +var sptgpmd_8f = +[ + [ "sptgpmd", "sptgpmd_8f.html#af71718c75a2b24b74fa7e1e4318d0539", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgpmd_8f_source.html b/ver-5.1.0/sptgpmd_8f_source.html new file mode 100644 index 00000000..2f78312e --- /dev/null +++ b/ver-5.1.0/sptgpmd_8f_source.html @@ -0,0 +1,184 @@ + + + + + + + +NCEPLIBS-ip: sptgpmd.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgpmd.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral to Mercator gradients.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs a spherical transform
    +
    6 C> from spectral coefficients of scalar fields
    +
    7 C> to gradient fields on a Mercator grid.
    +
    8 C>
    +
    9 C> The wave-space can be either triangular or rhomboidal.
    +
    10 C> The wave and grid fields may have general indexing,
    +
    11 C> but each wave field is in sequential 'IBM order',
    +
    12 C> i.e. with zonal wavenumber as the slower index.
    +
    13 C>
    +
    14 C> The Mercator grid is identified by the location
    +
    15 C> of its first point and by its respective increments.
    +
    16 C>
    +
    17 C> The transforms are all multiprocessed over sector points.
    +
    18 C>
    +
    19 C> Transform several fields at a time to improve vectorization.
    +
    20 C> Subprogram can be called from a multiprocessing environment.
    +
    21 C>
    +
    22 C> @param IROMB Spectral domain shape
    +
    23 C> (0 for triangular, 1 for rhomboidal)
    +
    24 C> @param MAXWV Spectral truncation
    +
    25 C> @param KMAX Number of fields to transform
    +
    26 C> @param MI Number of points in the faster zonal direction
    +
    27 C> @param MJ Number of points in the slower merid direction
    +
    28 C> @param KWSKIP Skip number between wave fields
    +
    29 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    30 C> @param KGSKIP Skip number between grid fields
    +
    31 C> (defaults to MI*MJ if KGSKIP=0)
    +
    32 C> @param NISKIP Skip number between grid i-points
    +
    33 C> (defaults to 1 if NISKIP=0)
    +
    34 C> @param NJSKIP Skip number between grid j-points
    +
    35 C> (defaults to MI if NJSKIP=0)
    +
    36 C> @param RLAT1 Latitude of the first grid point in degrees
    +
    37 C> @param RLON1 Longitude of the first grid point in degrees
    +
    38 C> @param DLAT Latitude increment in degrees such that
    +
    39 C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
    +
    40 C> DLAT is negative for grids indexed southward.
    +
    41 C> (in terms of grid increment dy valid at latitude RLATI,
    +
    42 C> the latitude increment DLAT is determined as
    +
    43 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    +
    44 C> where DPR=180/PI and RERTH is Earth's radius)
    +
    45 C> @param DLON Longitude increment in degrees such that
    +
    46 C> D(LAMBDA)/D(I)=DLON where I is zonal index.
    +
    47 C> DLON is negative for grids indexed westward.
    +
    48 C> @param WAVE Wave fields
    +
    49 C> @param XM Mercator x-gradients
    +
    50 C> @param YM Mercator y-gradients
    +
    51 C>
    +
    52 C> @author Iredell @date 96-02-29
    +
    53  SUBROUTINE sptgpmd(IROMB,MAXWV,KMAX,MI,MJ,
    +
    54  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
    +
    55  & RLAT1,RLON1,DLAT,DLON,WAVE,XM,YM)
    +
    56 
    +
    57  REAL WAVE(*),XM(*),YM(*)
    +
    58  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    59  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    60  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    61  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    62  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    63  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    64 
    +
    65 C CALCULATE PRELIMINARY CONSTANTS
    +
    66  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    67  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    68  mdim=2*mx+1
    +
    69  kw=kwskip
    +
    70  IF(kw.EQ.0) kw=2*mx
    +
    71 
    +
    72 C CALCULATE GRADIENTS
    +
    73 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    74  DO k=1,kmax
    +
    75  kws=(k-1)*kw
    +
    76  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
    +
    77  wz(1:2*mx,k)=0.
    +
    78  ENDDO
    +
    79  CALL sptgpmv(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    80  & rlat1,rlon1,dlat,dlon,wd,wz,xm,ym)
    +
    81  END
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptgpmd(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, XM, YM)
    This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradien...
    Definition: sptgpmd.f:56
    +
    subroutine sptgpmv(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpmv.f:63
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpmv_8f.html b/ver-5.1.0/sptgpmv_8f.html new file mode 100644 index 00000000..fdaeed43 --- /dev/null +++ b/ver-5.1.0/sptgpmv_8f.html @@ -0,0 +1,285 @@ + + + + + + + +NCEPLIBS-ip: sptgpmv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgpmv.f File Reference
    +
    +
    + +

    Transform spectral vector to Mercator. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgpmv (IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
     This subprogram performs a spherical transform from spectral coefficients of divergences and curls to vector fields on a Mercator grid. More...
     
    +

    Detailed Description

    +

    Transform spectral vector to Mercator.

    +

    +Program history log:

    + + + + + + + +
    Date Programmer Comments
    96-02-29 IREDELL Initial.
    1998-12-15 IREDELL OpenMP directives inserted.
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptgpmv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgpmv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgpmv ( IROMB,
     MAXWV,
     KMAX,
     MI,
     MJ,
     KWSKIP,
     KGSKIP,
     NISKIP,
     NJSKIP,
     RLAT1,
     RLON1,
     DLAT,
     DLON,
    real, dimension(*) WAVED,
    real, dimension(*) WAVEZ,
    real, dimension(*) UM,
    real, dimension(*) VM 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    IROMBSpectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVSpectral truncation
    KMAXNumber of fields to transform
    MINumber of points in the faster zonal direction
    MJNumber of points in the slower merid direction
    KWSKIPSkip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPSkip number between grid fields (defaults to MI*MJ if KGSKIP=0)
    NISKIPSkip number between grid i-points (defaults to 1 if NISKIP=0)
    NJSKIPSkip number between grid j-points (defaults to MI if NJSKIP=0)
    RLAT1Latitude of the first grid point in degrees
    RLON1Longitude of the first grid point in degrees
    DLATLatitude 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)
    DLONlongitude increment in degrees such that D(LAMBDA)/D(I)=DLON where I is zonal index. DLON is negative for grids indexed westward.
    WAVEDWave divergence fields
    WAVEZWave vorticity fields
    UMMercator u-winds
    VMMercator v-winds
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition at line 60 of file sptgpmv.f.

    + +

    References spdz2uv(), splegend(), spsynth(), and spwget().

    + +

    Referenced by sptgpmd(), and sptrunmv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpmv_8f.js b/ver-5.1.0/sptgpmv_8f.js new file mode 100644 index 00000000..a46a2628 --- /dev/null +++ b/ver-5.1.0/sptgpmv_8f.js @@ -0,0 +1,4 @@ +var sptgpmv_8f = +[ + [ "sptgpmv", "sptgpmv_8f.html#a15de3accfd448d116324872c8fb1bb17", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgpmv_8f_source.html b/ver-5.1.0/sptgpmv_8f_source.html new file mode 100644 index 00000000..71c666ac --- /dev/null +++ b/ver-5.1.0/sptgpmv_8f_source.html @@ -0,0 +1,246 @@ + + + + + + + +NCEPLIBS-ip: sptgpmv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgpmv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral vector to Mercator
    +
    3 C> ### Program history log:
    +
    4 C> Date | Programmer | Comments
    +
    5 C> -----|------------|----------
    +
    6 C> 96-02-29 | IREDELL | Initial.
    +
    7 C> 1998-12-15 | IREDELL | OpenMP directives inserted.
    +
    8 C> @author IREDELL @date 96-02-29
    +
    9 
    +
    10 C> This subprogram performs a spherical transform
    +
    11 C> from spectral coefficients of divergences and curls
    +
    12 C> to vector fields on a Mercator grid.
    +
    13 C>
    +
    14 C> The wave-space can be either triangular or rhomboidal.
    +
    15 C>
    +
    16 C> The wave and grid fields may have general indexing,
    +
    17 C> but each wave field is in sequential 'ibm order',
    +
    18 C> i.e., with zonal wavenumber as the slower index.
    +
    19 C>
    +
    20 C> The Mercator grid is identified by the location
    +
    21 C> of its first point and by its respective increments.
    +
    22 C>
    +
    23 C> The transforms are all multiprocessed over sector points.
    +
    24 C> Transform several fields at a time to improve vectorization.
    +
    25 C>
    +
    26 C> Subprogram can be called from a multiprocessing environment.
    +
    27 C>
    +
    28 C> @param IROMB Spectral domain shape
    +
    29 C> (0 for triangular, 1 for rhomboidal)
    +
    30 C> @param MAXWV Spectral truncation
    +
    31 C> @param KMAX Number of fields to transform
    +
    32 C> @param MI Number of points in the faster zonal direction
    +
    33 C> @param MJ Number of points in the slower merid direction
    +
    34 C> @param KWSKIP Skip number between wave fields
    +
    35 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    36 C> @param KGSKIP Skip number between grid fields
    +
    37 C> (defaults to MI*MJ if KGSKIP=0)
    +
    38 C> @param NISKIP Skip number between grid i-points
    +
    39 C> (defaults to 1 if NISKIP=0)
    +
    40 C> @param NJSKIP Skip number between grid j-points
    +
    41 C> (defaults to MI if NJSKIP=0)
    +
    42 C> @param RLAT1 Latitude of the first grid point in degrees
    +
    43 C> @param RLON1 Longitude of the first grid point in degrees
    +
    44 C> @param DLAT Latitude increment in degrees such that
    +
    45 C> D(PHI)/D(J)=DLAT*COS(PHI) where J is meridional index.
    +
    46 C> DLAT is negative for grids indexed southward.
    +
    47 C> (in terms of grid increment dy valid at latitude RLATI,
    +
    48 C> The latitude increment DLAT is determined as
    +
    49 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    +
    50 C> where DPR=180/PI and RERTH is Earth's radius)
    +
    51 C> @param DLON longitude increment in degrees such that
    +
    52 C> D(LAMBDA)/D(I)=DLON where I is zonal index.
    +
    53 C> DLON is negative for grids indexed westward.
    +
    54 C> @param WAVED Wave divergence fields
    +
    55 C> @param WAVEZ Wave vorticity fields
    +
    56 C> @param UM Mercator u-winds
    +
    57 C> @param VM Mercator v-winds
    +
    58 C>
    +
    59 C> @author IREDELL @date 96-02-29
    +
    60  SUBROUTINE sptgpmv(IROMB,MAXWV,KMAX,MI,MJ,
    +
    61  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
    +
    62  & RLAT1,RLON1,DLAT,DLON,WAVED,WAVEZ,UM,VM)
    +
    63 
    +
    64  REAL WAVED(*),WAVEZ(*),UM(*),VM(*)
    +
    65  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    66  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    67  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    68  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    69  INTEGER MP(2*KMAX)
    +
    70  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
    +
    71  REAL WTOP(2*(MAXWV+1),2*KMAX)
    +
    72  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    73  REAL F(2*MAXWV+3,2,2*KMAX)
    +
    74  REAL CLAT(MJ),SLAT(MJ),CLON(MAXWV,MI),SLON(MAXWV,MI)
    +
    75  parameter(pi=3.14159265358979,dpr=180./pi)
    +
    76 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    77 C CALCULATE PRELIMINARY CONSTANTS
    +
    78  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    79  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    80  mxtop=maxwv+1
    +
    81  mdim=2*mx+1
    +
    82  idim=2*maxwv+3
    +
    83  kw=kwskip
    +
    84  kg=kgskip
    +
    85  ni=niskip
    +
    86  nj=njskip
    +
    87  IF(kw.EQ.0) kw=2*mx
    +
    88  IF(kg.EQ.0) kg=mi*mj
    +
    89  IF(ni.EQ.0) ni=1
    +
    90  IF(nj.EQ.0) nj=mi
    +
    91  DO i=1,mi
    +
    92  rlon=mod(rlon1+dlon*(i-1)+3600,360.)
    +
    93  DO l=1,maxwv
    +
    94  clon(l,i)=cos(l*rlon/dpr)
    +
    95  slon(l,i)=sin(l*rlon/dpr)
    +
    96  ENDDO
    +
    97  ENDDO
    +
    98  ye=1-log(tan((rlat1+90)/2/dpr))*dpr/dlat
    +
    99  DO j=1,mj
    +
    100  rlat=atan(exp(dlat/dpr*(j-ye)))*2*dpr-90
    +
    101  clat(j)=cos(rlat/dpr)
    +
    102  slat(j)=sin(rlat/dpr)
    +
    103  ENDDO
    +
    104  mp=1
    +
    105 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    106 C CALCULATE SPECTRAL WINDS
    +
    107 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    108  DO k=1,kmax
    +
    109  kws=(k-1)*kw
    +
    110  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
    +
    111  & waved(kws+1),wavez(kws+1),
    +
    112  & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
    +
    113  ENDDO
    +
    114 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    115 C TRANSFORM TO GRID
    +
    116 C$OMP PARALLEL DO PRIVATE(PLN,PLNTOP,F,KU,KV,IJK)
    +
    117  DO j=1,mj
    +
    118  CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
    +
    119  & pln,plntop)
    +
    120  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
    +
    121  & clat(j),pln,plntop,mp,w,wtop,f)
    +
    122  DO k=1,kmax
    +
    123  ku=k
    +
    124  kv=k+kmax
    +
    125  DO i=1,mi
    +
    126  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
    +
    127  um(ijk)=f(1,1,ku)
    +
    128  vm(ijk)=f(1,1,kv)
    +
    129  ENDDO
    +
    130  DO l=1,maxwv
    +
    131  DO i=1,mi
    +
    132  ijk=(i-1)*ni+(j-1)*nj+(k-1)*kg+1
    +
    133  um(ijk)=um(ijk)+2.*(f(2*l+1,1,ku)*clon(l,i)
    +
    134  & -f(2*l+2,1,ku)*slon(l,i))
    +
    135  vm(ijk)=vm(ijk)+2.*(f(2*l+1,1,kv)*clon(l,i)
    +
    136  & -f(2*l+2,1,kv)*slon(l,i))
    +
    137  ENDDO
    +
    138  ENDDO
    +
    139  ENDDO
    +
    140  ENDDO
    +
    141 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    142  END
    +
    subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
    Computes the wind components from divergence and vorticity in spectral space.
    Definition: spdz2uv.f:49
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgpmv(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpmv.f:63
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgps_8f.html b/ver-5.1.0/sptgps_8f.html new file mode 100644 index 00000000..8b17dee0 --- /dev/null +++ b/ver-5.1.0/sptgps_8f.html @@ -0,0 +1,281 @@ + + + + + + + +NCEPLIBS-ip: sptgps.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgps.f File Reference
    +
    +
    + +

    Transform spectral scalar to polar stereo. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgps (IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
     This subprogram performs a spherical transform from spectral coefficients of scalar quantities to scalar fields on a pair of polar stereographic grids. More...
     
    +

    Detailed Description

    +

    Transform spectral scalar to polar stereo.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Openmp directives inserted.
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptgps.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgps()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgps ( IROMB,
     MAXWV,
     KMAX,
     NPS,
     KWSKIP,
     KGSKIP,
     NISKIP,
     NJSKIP,
     TRUE,
     XMESH,
     ORIENT,
    real, dimension(*) WAVE,
    real, dimension(*) GN,
    real, dimension(*) GS 
    )
    +
    + +

    This subprogram 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 by combining points in eight sectors of each polar stereographic grid,
    + numbered as in the diagram below.

    +

    The pole and the sector boundaries
    + are treated specially in the code.
    +

    +

    Unfortunately, this approach induces some hairy indexing and code loquacity.

    +
    +              \ 4 | 5 /
    +               \  |  /
    +              3 \ | / 6
    +                 |/
    +              ----+----
    +                 /|\
    +              2 / | \ 7
    +               /  |  \
    +              / 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.

    +
    Parameters
    + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    KMAXnumber of fields to transform.
    NPSodd order of the polar stereographic grids.
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPskip number between grid fields (defaults to NPS*NPS if KGSKIP=0)
    NISKIPskip number between grid i-points (defaults to 1 if NISKIP=0)
    NJSKIPskip number between grid j-points (defaults to NPS if NJSKIP=0)
    TRUElatitude at which ps grid is true (usually 60.)
    XMESHgrid length at true latitude (m)
    ORIENTlongitude at bottom of northern ps grid (southern ps grid will have opposite orientation.)
    WAVEwave fields
    GNnorthern polar stereographic fields
    GSsouthern polar stereographic fields
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 78 of file sptgps.f.

    + +

    References splegend(), spsynth(), and spwget().

    + +

    Referenced by sptruns(), and sptrunsv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgps_8f.js b/ver-5.1.0/sptgps_8f.js new file mode 100644 index 00000000..8cdfa429 --- /dev/null +++ b/ver-5.1.0/sptgps_8f.js @@ -0,0 +1,4 @@ +var sptgps_8f = +[ + [ "sptgps", "sptgps_8f.html#af06a2dccfa311014fc9f671b14f247b2", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgps_8f_source.html b/ver-5.1.0/sptgps_8f_source.html new file mode 100644 index 00000000..3aac1362 --- /dev/null +++ b/ver-5.1.0/sptgps_8f_source.html @@ -0,0 +1,650 @@ + + + + + + + +NCEPLIBS-ip: sptgps.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgps.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral scalar to polar stereo.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | Iredell | Initial.
    +
    8 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    9 C>
    +
    10 C> @author Iredell @date 96-02-29
    +
    11 
    +
    12 C> This subprogram performs a spherical transform
    +
    13 C> from spectral coefficients of scalar quantities
    +
    14 C> to scalar fields on a pair of polar stereographic grids.
    +
    15 C>
    +
    16 C> The wave-space can be either triangular or rhomboidal.
    +
    17 C>
    +
    18 C> The wave and grid fields may have general indexing,
    +
    19 C> but each wave field is in sequential 'IBM order',
    +
    20 C> i.e. with zonal wavenumber as the slower index.
    +
    21 C>
    +
    22 C> The two square polar stereographic grids are centered
    +
    23 C> on the respective poles, with the orientation longitude
    +
    24 C> of the southern hemisphere grid 180 degrees opposite
    +
    25 C> that of the northern hemisphere grid.
    +
    26 C>
    +
    27 C> The transform is made efficient
    +
    28 C> by combining points in eight sectors
    +
    29 C> of each polar stereographic grid,
    +
    30 C> numbered as in the diagram below.
    +
    31 C>
    +
    32 C> The pole and the sector boundaries
    +
    33 C> are treated specially in the code.
    +
    34 C>
    +
    35 C> Unfortunately, this approach induces
    +
    36 C> some hairy indexing and code loquacity.
    +
    37 C>
    +
    38 C> <pre>
    +
    39 C> \ 4 | 5 /
    +
    40 C> \ | /
    +
    41 C> 3 \ | / 6
    +
    42 C> \|/
    +
    43 C> ----+----
    +
    44 C> /|\
    +
    45 C> 2 / | \ 7
    +
    46 C> / | \
    +
    47 C> / 1 | 8 \
    +
    48 C> </pre>
    +
    49 C>
    +
    50 C> The transforms are all multiprocessed over sector points.
    +
    51 C>
    +
    52 C> Transform several fields at a time to improve vectorization.
    +
    53 C>
    +
    54 C> Subprogram can be called from a multiprocessing environment.
    +
    55 C>
    +
    56 C> @param IROMB spectral domain shape
    +
    57 C> (0 for triangular, 1 for rhomboidal)
    +
    58 C> @param MAXWV spectral truncation
    +
    59 C> @param KMAX number of fields to transform.
    +
    60 C> @param NPS odd order of the polar stereographic grids.
    +
    61 C> @param KWSKIP skip number between wave fields
    +
    62 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    63 C> @param KGSKIP skip number between grid fields
    +
    64 C> (defaults to NPS*NPS if KGSKIP=0)
    +
    65 C> @param NISKIP skip number between grid i-points
    +
    66 C> (defaults to 1 if NISKIP=0)
    +
    67 C> @param NJSKIP skip number between grid j-points
    +
    68 C> (defaults to NPS if NJSKIP=0)
    +
    69 C> @param TRUE latitude at which ps grid is true (usually 60.)
    +
    70 C> @param XMESH grid length at true latitude (m)
    +
    71 C> @param ORIENT longitude at bottom of northern ps grid
    +
    72 C> (southern ps grid will have opposite orientation.)
    +
    73 C> @param WAVE wave fields
    +
    74 C> @param GN northern polar stereographic fields
    +
    75 C> @param GS southern polar stereographic fields
    +
    76 C>
    +
    77 C> @author Iredell @date 96-02-29
    +
    78  SUBROUTINE sptgps(IROMB,MAXWV,KMAX,NPS,
    +
    79  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
    +
    80  & TRUE,XMESH,ORIENT,WAVE,GN,GS)
    +
    81 
    +
    82  REAL WAVE(*),GN(*),GS(*)
    +
    83  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    84  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    85  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    86  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    87  INTEGER MP(KMAX)
    +
    88  REAL SLON(MAXWV,8),CLON(MAXWV,8),SROT(0:3),CROT(0:3)
    +
    89  REAL WTOP(2*(MAXWV+1),KMAX)
    +
    90  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    91  REAL F(2*MAXWV+3,2,KMAX)
    +
    92  DATA srot/0.,1.,0.,-1./,crot/1.,0.,-1.,0./
    +
    93  parameter(rerth=6.3712e6)
    +
    94  parameter(pi=3.14159265358979,dpr=180./pi)
    +
    95 
    +
    96 C CALCULATE PRELIMINARY CONSTANTS
    +
    97  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    98  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    99  mxtop=maxwv+1
    +
    100  idim=2*maxwv+3
    +
    101  kw=kwskip
    +
    102  kg=kgskip
    +
    103  ni=niskip
    +
    104  nj=njskip
    +
    105  IF(kw.EQ.0) kw=2*mx
    +
    106  IF(kg.EQ.0) kg=nps*nps
    +
    107  IF(ni.EQ.0) ni=1
    +
    108  IF(nj.EQ.0) nj=nps
    +
    109  mp=0
    +
    110  nph=(nps-1)/2
    +
    111  gq=((1.+sin(true/dpr))*rerth/xmesh)**2
    +
    112 C$OMP PARALLEL DO
    +
    113  DO k=1,kmax
    +
    114  wtop(1:2*mxtop,k)=0
    +
    115  ENDDO
    +
    116 
    +
    117 C CALCULATE POLE POINT
    +
    118  i1=nph+1
    +
    119  j1=nph+1
    +
    120  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    121  slat1=1.
    +
    122  clat1=0.
    +
    123  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    124  & pln,plntop)
    +
    125  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
    +
    126  & clat1,pln,plntop,mp,wave,wtop,f)
    +
    127 CDIR$ IVDEP
    +
    128  DO k=1,kmax
    +
    129  ijk1=ij1+(k-1)*kg
    +
    130  gn(ijk1)=f(1,1,k)
    +
    131  gs(ijk1)=f(1,2,k)
    +
    132  ENDDO
    +
    133 
    +
    134 C CALCULATE POINTS ALONG THE ROW AND COLUMN OF THE POLE,
    +
    135 C STARTING AT THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
    +
    136 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
    +
    137 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
    +
    138 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
    +
    139 C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
    +
    140 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
    +
    141  DO j1=1,nph
    +
    142  i1=nph+1
    +
    143  radlon=orient/dpr
    +
    144  j3=nps+1-i1
    +
    145  i3=j1
    +
    146  j5=nps+1-j1
    +
    147  i5=nps+1-i1
    +
    148  j7=i1
    +
    149  i7=nps+1-j1
    +
    150  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    151  ij3=(i3-1)*ni+(j3-1)*nj+1
    +
    152  ij5=(i5-1)*ni+(j5-1)*nj+1
    +
    153  ij7=(i7-1)*ni+(j7-1)*nj+1
    +
    154  di1=i1-nph-1
    +
    155  dj1=j1-nph-1
    +
    156  rq=di1**2+dj1**2
    +
    157  slat1=(gq-rq)/(gq+rq)
    +
    158  clat1=sqrt(1.-slat1**2)
    +
    159  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    160  & pln,plntop)
    +
    161  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
    +
    162  & clat1,pln,plntop,mp,wave,wtop,f)
    +
    163  DO l=1,maxwv
    +
    164  slon(l,1)=sin(l*radlon)
    +
    165  clon(l,1)=cos(l*radlon)
    +
    166  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
    +
    167  & -clon(l,1)*srot(mod(1*l,4))
    +
    168  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
    +
    169  & +slon(l,1)*srot(mod(1*l,4))
    +
    170  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
    +
    171  & -clon(l,1)*srot(mod(2*l,4))
    +
    172  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
    +
    173  & +slon(l,1)*srot(mod(2*l,4))
    +
    174  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
    +
    175  & -clon(l,1)*srot(mod(3*l,4))
    +
    176  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
    +
    177  & +slon(l,1)*srot(mod(3*l,4))
    +
    178  ENDDO
    +
    179 CDIR$ IVDEP
    +
    180  DO k=1,kmax
    +
    181  ijk1=ij1+(k-1)*kg
    +
    182  ijk3=ij3+(k-1)*kg
    +
    183  ijk5=ij5+(k-1)*kg
    +
    184  ijk7=ij7+(k-1)*kg
    +
    185  gn(ijk1)=f(1,1,k)
    +
    186  gn(ijk3)=f(1,1,k)
    +
    187  gn(ijk5)=f(1,1,k)
    +
    188  gn(ijk7)=f(1,1,k)
    +
    189  gs(ijk1)=f(1,2,k)
    +
    190  gs(ijk3)=f(1,2,k)
    +
    191  gs(ijk5)=f(1,2,k)
    +
    192  gs(ijk7)=f(1,2,k)
    +
    193  ENDDO
    +
    194  IF(kmax.EQ.1) THEN
    +
    195  DO l=1,maxwv
    +
    196  lr=2*l+1
    +
    197  li=2*l+2
    +
    198  gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
    +
    199  & -f(li,1,1)*slon(l,1))
    +
    200  gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
    +
    201  & -f(li,1,1)*slon(l,3))
    +
    202  gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
    +
    203  & -f(li,1,1)*slon(l,5))
    +
    204  gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
    +
    205  & -f(li,1,1)*slon(l,7))
    +
    206  gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,5)
    +
    207  & -f(li,2,1)*slon(l,5))
    +
    208  gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,3)
    +
    209  & -f(li,2,1)*slon(l,3))
    +
    210  gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,1)
    +
    211  & -f(li,2,1)*slon(l,1))
    +
    212  gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,7)
    +
    213  & -f(li,2,1)*slon(l,7))
    +
    214  ENDDO
    +
    215  ELSE
    +
    216  DO l=1,maxwv
    +
    217  lr=2*l+1
    +
    218  li=2*l+2
    +
    219 CDIR$ IVDEP
    +
    220  DO k=1,kmax
    +
    221  ijk1=ij1+(k-1)*kg
    +
    222  ijk3=ij3+(k-1)*kg
    +
    223  ijk5=ij5+(k-1)*kg
    +
    224  ijk7=ij7+(k-1)*kg
    +
    225  gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
    +
    226  & -f(li,1,k)*slon(l,1))
    +
    227  gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
    +
    228  & -f(li,1,k)*slon(l,3))
    +
    229  gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
    +
    230  & -f(li,1,k)*slon(l,5))
    +
    231  gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
    +
    232  & -f(li,1,k)*slon(l,7))
    +
    233  gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,5)
    +
    234  & -f(li,2,k)*slon(l,5))
    +
    235  gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,3)
    +
    236  & -f(li,2,k)*slon(l,3))
    +
    237  gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,1)
    +
    238  & -f(li,2,k)*slon(l,1))
    +
    239  gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,7)
    +
    240  & -f(li,2,k)*slon(l,7))
    +
    241  ENDDO
    +
    242  ENDDO
    +
    243  ENDIF
    +
    244  ENDDO
    +
    245 
    +
    246 C CALCULATE POINTS ON THE MAIN DIAGONALS THROUGH THE POLE,
    +
    247 C STARTING CLOCKWISE OF THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
    +
    248 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
    +
    249 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
    +
    250 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
    +
    251 C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
    +
    252 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
    +
    253  DO j1=1,nph
    +
    254  i1=j1
    +
    255  radlon=(orient-45)/dpr
    +
    256  j3=nps+1-i1
    +
    257  i3=j1
    +
    258  j5=nps+1-j1
    +
    259  i5=nps+1-i1
    +
    260  j7=i1
    +
    261  i7=nps+1-j1
    +
    262  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    263  ij3=(i3-1)*ni+(j3-1)*nj+1
    +
    264  ij5=(i5-1)*ni+(j5-1)*nj+1
    +
    265  ij7=(i7-1)*ni+(j7-1)*nj+1
    +
    266  di1=i1-nph-1
    +
    267  dj1=j1-nph-1
    +
    268  rq=di1**2+dj1**2
    +
    269  slat1=(gq-rq)/(gq+rq)
    +
    270  clat1=sqrt(1.-slat1**2)
    +
    271  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    272  & pln,plntop)
    +
    273  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
    +
    274  & clat1,pln,plntop,mp,wave,wtop,f)
    +
    275  DO l=1,maxwv
    +
    276  slon(l,1)=sin(l*radlon)
    +
    277  clon(l,1)=cos(l*radlon)
    +
    278  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
    +
    279  & -clon(l,1)*srot(mod(1*l,4))
    +
    280  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
    +
    281  & +slon(l,1)*srot(mod(1*l,4))
    +
    282  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
    +
    283  & -clon(l,1)*srot(mod(2*l,4))
    +
    284  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
    +
    285  & +slon(l,1)*srot(mod(2*l,4))
    +
    286  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
    +
    287  & -clon(l,1)*srot(mod(3*l,4))
    +
    288  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
    +
    289  & +slon(l,1)*srot(mod(3*l,4))
    +
    290  ENDDO
    +
    291 CDIR$ IVDEP
    +
    292  DO k=1,kmax
    +
    293  ijk1=ij1+(k-1)*kg
    +
    294  ijk3=ij3+(k-1)*kg
    +
    295  ijk5=ij5+(k-1)*kg
    +
    296  ijk7=ij7+(k-1)*kg
    +
    297  gn(ijk1)=f(1,1,k)
    +
    298  gn(ijk3)=f(1,1,k)
    +
    299  gn(ijk5)=f(1,1,k)
    +
    300  gn(ijk7)=f(1,1,k)
    +
    301  gs(ijk1)=f(1,2,k)
    +
    302  gs(ijk3)=f(1,2,k)
    +
    303  gs(ijk5)=f(1,2,k)
    +
    304  gs(ijk7)=f(1,2,k)
    +
    305  ENDDO
    +
    306  IF(kmax.EQ.1) THEN
    +
    307  DO l=1,maxwv
    +
    308  lr=2*l+1
    +
    309  li=2*l+2
    +
    310  gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
    +
    311  & -f(li,1,1)*slon(l,1))
    +
    312  gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
    +
    313  & -f(li,1,1)*slon(l,3))
    +
    314  gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
    +
    315  & -f(li,1,1)*slon(l,5))
    +
    316  gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
    +
    317  & -f(li,1,1)*slon(l,7))
    +
    318  gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,3)
    +
    319  & -f(li,2,1)*slon(l,3))
    +
    320  gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,1)
    +
    321  & -f(li,2,1)*slon(l,1))
    +
    322  gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,7)
    +
    323  & -f(li,2,1)*slon(l,7))
    +
    324  gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,5)
    +
    325  & -f(li,2,1)*slon(l,5))
    +
    326  ENDDO
    +
    327  ELSE
    +
    328  DO l=1,maxwv
    +
    329  lr=2*l+1
    +
    330  li=2*l+2
    +
    331 CDIR$ IVDEP
    +
    332  DO k=1,kmax
    +
    333  ijk1=ij1+(k-1)*kg
    +
    334  ijk3=ij3+(k-1)*kg
    +
    335  ijk5=ij5+(k-1)*kg
    +
    336  ijk7=ij7+(k-1)*kg
    +
    337  gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
    +
    338  & -f(li,1,k)*slon(l,1))
    +
    339  gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
    +
    340  & -f(li,1,k)*slon(l,3))
    +
    341  gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
    +
    342  & -f(li,1,k)*slon(l,5))
    +
    343  gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
    +
    344  & -f(li,1,k)*slon(l,7))
    +
    345  gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,3)
    +
    346  & -f(li,2,k)*slon(l,3))
    +
    347  gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,1)
    +
    348  & -f(li,2,k)*slon(l,1))
    +
    349  gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,7)
    +
    350  & -f(li,2,k)*slon(l,7))
    +
    351  gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,5)
    +
    352  & -f(li,2,k)*slon(l,5))
    +
    353  ENDDO
    +
    354  ENDDO
    +
    355  ENDIF
    +
    356  ENDDO
    +
    357 
    +
    358 C CALCULATE THE REMAINDER OF THE POLAR STEREOGRAPHIC DOMAIN,
    +
    359 C STARTING AT THE SECTOR JUST CLOCKWISE OF THE ORIENTATION LONGITUDE
    +
    360 C AND GOING CLOCKWISE UNTIL ALL EIGHT SECTORS ARE DONE.
    +
    361 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
    +
    362 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
    +
    363 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
    +
    364 C$OMP& PRIVATE(DJ1,DI1,RQ,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
    +
    365 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,LR,LI)
    +
    366  DO j1=1,nph-1
    +
    367  DO i1=j1+1,nph
    +
    368  j2=i1
    +
    369  i2=j1
    +
    370  j3=nps+1-i1
    +
    371  i3=j1
    +
    372  j4=nps+1-j1
    +
    373  i4=i1
    +
    374  j5=nps+1-j1
    +
    375  i5=nps+1-i1
    +
    376  j6=nps+1-i1
    +
    377  i6=nps+1-j1
    +
    378  j7=i1
    +
    379  i7=nps+1-j1
    +
    380  j8=j1
    +
    381  i8=nps+1-i1
    +
    382  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    383  ij2=(i2-1)*ni+(j2-1)*nj+1
    +
    384  ij3=(i3-1)*ni+(j3-1)*nj+1
    +
    385  ij4=(i4-1)*ni+(j4-1)*nj+1
    +
    386  ij5=(i5-1)*ni+(j5-1)*nj+1
    +
    387  ij6=(i6-1)*ni+(j6-1)*nj+1
    +
    388  ij7=(i7-1)*ni+(j7-1)*nj+1
    +
    389  ij8=(i8-1)*ni+(j8-1)*nj+1
    +
    390  di1=i1-nph-1
    +
    391  dj1=j1-nph-1
    +
    392  rq=di1**2+dj1**2
    +
    393  slat1=(gq-rq)/(gq+rq)
    +
    394  clat1=sqrt(1.-slat1**2)
    +
    395  radlon1=orient/dpr+atan(-di1/dj1)
    +
    396  radlon2=(orient-45)/dpr*2-radlon1
    +
    397  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    398  & pln,plntop)
    +
    399  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
    +
    400  & clat1,pln,plntop,mp,wave,wtop,f)
    +
    401  DO l=1,maxwv
    +
    402  slon(l,1)=sin(l*radlon1)
    +
    403  clon(l,1)=cos(l*radlon1)
    +
    404  slon(l,2)=sin(l*radlon2)
    +
    405  clon(l,2)=cos(l*radlon2)
    +
    406  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
    +
    407  & -clon(l,1)*srot(mod(1*l,4))
    +
    408  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
    +
    409  & +slon(l,1)*srot(mod(1*l,4))
    +
    410  slon(l,4)=slon(l,2)*crot(mod(1*l,4))
    +
    411  & -clon(l,2)*srot(mod(1*l,4))
    +
    412  clon(l,4)=clon(l,2)*crot(mod(1*l,4))
    +
    413  & +slon(l,2)*srot(mod(1*l,4))
    +
    414  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
    +
    415  & -clon(l,1)*srot(mod(2*l,4))
    +
    416  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
    +
    417  & +slon(l,1)*srot(mod(2*l,4))
    +
    418  slon(l,6)=slon(l,2)*crot(mod(2*l,4))
    +
    419  & -clon(l,2)*srot(mod(2*l,4))
    +
    420  clon(l,6)=clon(l,2)*crot(mod(2*l,4))
    +
    421  & +slon(l,2)*srot(mod(2*l,4))
    +
    422  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
    +
    423  & -clon(l,1)*srot(mod(3*l,4))
    +
    424  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
    +
    425  & +slon(l,1)*srot(mod(3*l,4))
    +
    426  slon(l,8)=slon(l,2)*crot(mod(3*l,4))
    +
    427  & -clon(l,2)*srot(mod(3*l,4))
    +
    428  clon(l,8)=clon(l,2)*crot(mod(3*l,4))
    +
    429  & +slon(l,2)*srot(mod(3*l,4))
    +
    430  ENDDO
    +
    431 CDIR$ IVDEP
    +
    432  DO k=1,kmax
    +
    433  ijk1=ij1+(k-1)*kg
    +
    434  ijk2=ij2+(k-1)*kg
    +
    435  ijk3=ij3+(k-1)*kg
    +
    436  ijk4=ij4+(k-1)*kg
    +
    437  ijk5=ij5+(k-1)*kg
    +
    438  ijk6=ij6+(k-1)*kg
    +
    439  ijk7=ij7+(k-1)*kg
    +
    440  ijk8=ij8+(k-1)*kg
    +
    441  gn(ijk1)=f(1,1,k)
    +
    442  gn(ijk2)=f(1,1,k)
    +
    443  gn(ijk3)=f(1,1,k)
    +
    444  gn(ijk4)=f(1,1,k)
    +
    445  gn(ijk5)=f(1,1,k)
    +
    446  gn(ijk6)=f(1,1,k)
    +
    447  gn(ijk7)=f(1,1,k)
    +
    448  gn(ijk8)=f(1,1,k)
    +
    449  gs(ijk1)=f(1,2,k)
    +
    450  gs(ijk2)=f(1,2,k)
    +
    451  gs(ijk3)=f(1,2,k)
    +
    452  gs(ijk4)=f(1,2,k)
    +
    453  gs(ijk5)=f(1,2,k)
    +
    454  gs(ijk6)=f(1,2,k)
    +
    455  gs(ijk7)=f(1,2,k)
    +
    456  gs(ijk8)=f(1,2,k)
    +
    457  ENDDO
    +
    458  IF(kmax.EQ.1) THEN
    +
    459  DO l=1,maxwv
    +
    460  lr=2*l+1
    +
    461  li=2*l+2
    +
    462  gn(ij1)=gn(ij1)+2*(f(lr,1,1)*clon(l,1)
    +
    463  & -f(li,1,1)*slon(l,1))
    +
    464  gn(ij2)=gn(ij2)+2*(f(lr,1,1)*clon(l,2)
    +
    465  & -f(li,1,1)*slon(l,2))
    +
    466  gn(ij3)=gn(ij3)+2*(f(lr,1,1)*clon(l,3)
    +
    467  & -f(li,1,1)*slon(l,3))
    +
    468  gn(ij4)=gn(ij4)+2*(f(lr,1,1)*clon(l,4)
    +
    469  & -f(li,1,1)*slon(l,4))
    +
    470  gn(ij5)=gn(ij5)+2*(f(lr,1,1)*clon(l,5)
    +
    471  & -f(li,1,1)*slon(l,5))
    +
    472  gn(ij6)=gn(ij6)+2*(f(lr,1,1)*clon(l,6)
    +
    473  & -f(li,1,1)*slon(l,6))
    +
    474  gn(ij7)=gn(ij7)+2*(f(lr,1,1)*clon(l,7)
    +
    475  & -f(li,1,1)*slon(l,7))
    +
    476  gn(ij8)=gn(ij8)+2*(f(lr,1,1)*clon(l,8)
    +
    477  & -f(li,1,1)*slon(l,8))
    +
    478  gs(ij1)=gs(ij1)+2*(f(lr,2,1)*clon(l,4)
    +
    479  & -f(li,2,1)*slon(l,4))
    +
    480  gs(ij2)=gs(ij2)+2*(f(lr,2,1)*clon(l,3)
    +
    481  & -f(li,2,1)*slon(l,3))
    +
    482  gs(ij3)=gs(ij3)+2*(f(lr,2,1)*clon(l,2)
    +
    483  & -f(li,2,1)*slon(l,2))
    +
    484  gs(ij4)=gs(ij4)+2*(f(lr,2,1)*clon(l,1)
    +
    485  & -f(li,2,1)*slon(l,1))
    +
    486  gs(ij5)=gs(ij5)+2*(f(lr,2,1)*clon(l,8)
    +
    487  & -f(li,2,1)*slon(l,8))
    +
    488  gs(ij6)=gs(ij6)+2*(f(lr,2,1)*clon(l,7)
    +
    489  & -f(li,2,1)*slon(l,7))
    +
    490  gs(ij7)=gs(ij7)+2*(f(lr,2,1)*clon(l,6)
    +
    491  & -f(li,2,1)*slon(l,6))
    +
    492  gs(ij8)=gs(ij8)+2*(f(lr,2,1)*clon(l,5)
    +
    493  & -f(li,2,1)*slon(l,5))
    +
    494  ENDDO
    +
    495  ELSE
    +
    496  DO l=1,maxwv
    +
    497  lr=2*l+1
    +
    498  li=2*l+2
    +
    499 CDIR$ IVDEP
    +
    500  DO k=1,kmax
    +
    501  ijk1=ij1+(k-1)*kg
    +
    502  ijk2=ij2+(k-1)*kg
    +
    503  ijk3=ij3+(k-1)*kg
    +
    504  ijk4=ij4+(k-1)*kg
    +
    505  ijk5=ij5+(k-1)*kg
    +
    506  ijk6=ij6+(k-1)*kg
    +
    507  ijk7=ij7+(k-1)*kg
    +
    508  ijk8=ij8+(k-1)*kg
    +
    509  gn(ijk1)=gn(ijk1)+2*(f(lr,1,k)*clon(l,1)
    +
    510  & -f(li,1,k)*slon(l,1))
    +
    511  gn(ijk2)=gn(ijk2)+2*(f(lr,1,k)*clon(l,2)
    +
    512  & -f(li,1,k)*slon(l,2))
    +
    513  gn(ijk3)=gn(ijk3)+2*(f(lr,1,k)*clon(l,3)
    +
    514  & -f(li,1,k)*slon(l,3))
    +
    515  gn(ijk4)=gn(ijk4)+2*(f(lr,1,k)*clon(l,4)
    +
    516  & -f(li,1,k)*slon(l,4))
    +
    517  gn(ijk5)=gn(ijk5)+2*(f(lr,1,k)*clon(l,5)
    +
    518  & -f(li,1,k)*slon(l,5))
    +
    519  gn(ijk6)=gn(ijk6)+2*(f(lr,1,k)*clon(l,6)
    +
    520  & -f(li,1,k)*slon(l,6))
    +
    521  gn(ijk7)=gn(ijk7)+2*(f(lr,1,k)*clon(l,7)
    +
    522  & -f(li,1,k)*slon(l,7))
    +
    523  gn(ijk8)=gn(ijk8)+2*(f(lr,1,k)*clon(l,8)
    +
    524  & -f(li,1,k)*slon(l,8))
    +
    525  gs(ijk1)=gs(ijk1)+2*(f(lr,2,k)*clon(l,4)
    +
    526  & -f(li,2,k)*slon(l,4))
    +
    527  gs(ijk2)=gs(ijk2)+2*(f(lr,2,k)*clon(l,3)
    +
    528  & -f(li,2,k)*slon(l,3))
    +
    529  gs(ijk3)=gs(ijk3)+2*(f(lr,2,k)*clon(l,2)
    +
    530  & -f(li,2,k)*slon(l,2))
    +
    531  gs(ijk4)=gs(ijk4)+2*(f(lr,2,k)*clon(l,1)
    +
    532  & -f(li,2,k)*slon(l,1))
    +
    533  gs(ijk5)=gs(ijk5)+2*(f(lr,2,k)*clon(l,8)
    +
    534  & -f(li,2,k)*slon(l,8))
    +
    535  gs(ijk6)=gs(ijk6)+2*(f(lr,2,k)*clon(l,7)
    +
    536  & -f(li,2,k)*slon(l,7))
    +
    537  gs(ijk7)=gs(ijk7)+2*(f(lr,2,k)*clon(l,6)
    +
    538  & -f(li,2,k)*slon(l,6))
    +
    539  gs(ijk8)=gs(ijk8)+2*(f(lr,2,k)*clon(l,5)
    +
    540  & -f(li,2,k)*slon(l,5))
    +
    541  ENDDO
    +
    542  ENDDO
    +
    543  ENDIF
    +
    544  ENDDO
    +
    545  ENDDO
    +
    546 
    +
    547  END
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgps(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgps.f:81
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpsd_8f.html b/ver-5.1.0/sptgpsd_8f.html new file mode 100644 index 00000000..951e05dd --- /dev/null +++ b/ver-5.1.0/sptgpsd_8f.html @@ -0,0 +1,282 @@ + + + + + + + +NCEPLIBS-ip: sptgpsd.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgpsd.f File Reference
    +
    +
    + +

    Transform spectral to polar stereographic gradients. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgpsd (IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, XN, YN, XS, YS)
     This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradient fields on a pair of polar stereographic grids. More...
     
    +

    Detailed Description

    +

    Transform spectral to polar stereographic gradients.

    +

    +Program history log:

    + + + + + + + +
    Date Programmer Comments
    96-02-29 IREDELL Initial.
    1998-12-15 IREDELL OpenMP directives inserted.
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptgpsd.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgpsd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgpsd ( IROMB,
     MAXWV,
     KMAX,
     NPS,
     KWSKIP,
     KGSKIP,
     NISKIP,
     NJSKIP,
     TRUE,
     XMESH,
     ORIENT,
    real, dimension(*) WAVE,
    real, dimension(*) XN,
    real, dimension(*) YN,
    real, dimension(*) XS,
    real, dimension(*) YS 
    )
    +
    + +

    This subprogram 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 by combining points in eight sectors of each polar stereographic grid, numbered as in the following diagram. The pole and the sector boundaries are treated specially in the code. Unfortunately, this approach induces some hairy indexing and code loquacity, for which the developer apologizes.

    +
       \ 4 | 5 /
    +    \  |  /
    +   3 \ | / 6
    +      \|/
    +   ----+----
    +      /|\
    +   2 / | \ 7
    +    /  |  \
    +   / 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + + +
    IROMBSpectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVSpectral truncation
    KMAXNumber of fields to transform
    NPSOdd order of the polar stereographic grids
    KWSKIPSkip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPSkip number between grid fields (defaults to NPS*NPS if KGSKIP=0)
    NISKIPSkip number between grid i-points (defaults to 1 if NISKIP=0)
    NJSKIPSkip number between grid j-points (defaults to NPS if NJSKIP=0)
    TRUELatitude at which PS grid is true (usually 60.)
    XMESHGrid length at true latitude (M)
    ORIENTLongitude at bottom of northern PS grid (southern PS grid will have opposite orientation.)
    WAVEWave fields
    XNNorthern polar stereographic x-gradients
    YNNorthern polar stereographic y-gradients
    XSSouthern polar stereographic x-gradients
    YSSouthern polar stereographic y-gradients
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition at line 71 of file sptgpsd.f.

    + +

    References splaplac(), sptgpsv(), and spwget().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpsd_8f.js b/ver-5.1.0/sptgpsd_8f.js new file mode 100644 index 00000000..1b5e1ff3 --- /dev/null +++ b/ver-5.1.0/sptgpsd_8f.js @@ -0,0 +1,4 @@ +var sptgpsd_8f = +[ + [ "sptgpsd", "sptgpsd_8f.html#ad6d10c3360c47558a8116b2f5666ed30", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgpsd_8f_source.html b/ver-5.1.0/sptgpsd_8f_source.html new file mode 100644 index 00000000..75c49195 --- /dev/null +++ b/ver-5.1.0/sptgpsd_8f_source.html @@ -0,0 +1,203 @@ + + + + + + + +NCEPLIBS-ip: sptgpsd.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgpsd.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral to polar stereographic gradients
    +
    3 C> ### Program history log:
    +
    4 C> Date | Programmer | Comments
    +
    5 C> -----|------------|----------
    +
    6 C> 96-02-29 | IREDELL | Initial.
    +
    7 C> 1998-12-15 | IREDELL | OpenMP directives inserted.
    +
    8 C> @author IREDELL @date 96-02-29
    +
    9 
    +
    10 C> This subprogram performs a spherical transform
    +
    11 C> from spectral coefficients of scalar fields
    +
    12 C> to gradient fields on a pair of polar stereographic grids.
    +
    13 C> The wave-space can be either triangular or rhomboidal.
    +
    14 C> The wave and grid fields may have general indexing,
    +
    15 C> but each wave field is in sequential 'ibm order',
    +
    16 C> i.e., with zonal wavenumber as the slower index.
    +
    17 C> The two square polar stereographic grids are centered
    +
    18 C> on the respective poles, with the orientation longitude
    +
    19 C> of the southern hemisphere grid 180 degrees opposite
    +
    20 C> that of the northern hemisphere grid.
    +
    21 C> The vectors are automatically rotated to be resolved
    +
    22 C> relative to the respective polar stereographic grids.
    +
    23 C>
    +
    24 C> The transform is made efficient by combining points in eight
    +
    25 C> sectors of each polar stereographic grid, numbered as in the
    +
    26 C> following diagram. The pole and the sector boundaries are
    +
    27 C> treated specially in the code. Unfortunately, this approach
    +
    28 C> induces some hairy indexing and code loquacity, for which
    +
    29 C> the developer apologizes.
    +
    30 C>
    +
    31 C> \verbatim
    +
    32 C> \ 4 | 5 /
    +
    33 C> \ | /
    +
    34 C> 3 \ | / 6
    +
    35 C> \|/
    +
    36 C> ----+----
    +
    37 C> /|\
    +
    38 C> 2 / | \ 7
    +
    39 C> / | \
    +
    40 C> / 1 | 8 \
    +
    41 C> \endverbatim
    +
    42 C>
    +
    43 C> The transforms are all multiprocessed over sector points.
    +
    44 C> transform several fields at a time to improve vectorization.
    +
    45 C> Subprogram can be called from a multiprocessing environment.
    +
    46 C>
    +
    47 C> @param IROMB Spectral domain shape
    +
    48 C> (0 for triangular, 1 for rhomboidal)
    +
    49 C> @param MAXWV Spectral truncation
    +
    50 C> @param KMAX Number of fields to transform
    +
    51 C> @param NPS Odd order of the polar stereographic grids
    +
    52 C> @param KWSKIP Skip number between wave fields
    +
    53 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    54 C> @param KGSKIP Skip number between grid fields
    +
    55 C> (defaults to NPS*NPS if KGSKIP=0)
    +
    56 C> @param NISKIP Skip number between grid i-points
    +
    57 C> (defaults to 1 if NISKIP=0)
    +
    58 C> @param NJSKIP Skip number between grid j-points
    +
    59 C> (defaults to NPS if NJSKIP=0)
    +
    60 C> @param TRUE Latitude at which PS grid is true (usually 60.)
    +
    61 C> @param XMESH Grid length at true latitude (M)
    +
    62 C> @param ORIENT Longitude at bottom of northern PS grid
    +
    63 C> (southern PS grid will have opposite orientation.)
    +
    64 C> @param WAVE Wave fields
    +
    65 C> @param XN Northern polar stereographic x-gradients
    +
    66 C> @param YN Northern polar stereographic y-gradients
    +
    67 C> @param XS Southern polar stereographic x-gradients
    +
    68 C> @param YS Southern polar stereographic y-gradients
    +
    69 C>
    +
    70 C> @author IREDELL @date 96-02-29
    +
    71  SUBROUTINE sptgpsd(IROMB,MAXWV,KMAX,NPS,
    +
    72  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
    +
    73  & TRUE,XMESH,ORIENT,WAVE,XN,YN,XS,YS)
    +
    74 
    +
    75  REAL WAVE(*),XN(*),YN(*),XS(*),YS(*)
    +
    76  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    77  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    78  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    79  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    80  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    81  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    82 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    83 C CALCULATE PRELIMINARY CONSTANTS
    +
    84  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    85  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    86  mdim=2*mx+1
    +
    87  kw=kwskip
    +
    88  IF(kw.EQ.0) kw=2*mx
    +
    89 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    90 C CALCULATE GRADIENTS
    +
    91 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    92  DO k=1,kmax
    +
    93  kws=(k-1)*kw
    +
    94  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
    +
    95  wz(1:2*mx,k)=0.
    +
    96  ENDDO
    +
    97  CALL sptgpsv(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    98  & true,xmesh,orient,wd,wz,xn,yn,xs,ys)
    +
    99 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    100  END
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptgpsd(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, XN, YN, XS, YS)
    This subprogram performs a spherical transform from spectral coefficients of scalar fields to gradien...
    Definition: sptgpsd.f:74
    +
    subroutine sptgpsv(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpsv.f:83
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpsv_8f.html b/ver-5.1.0/sptgpsv_8f.html new file mode 100644 index 00000000..fdcaf59b --- /dev/null +++ b/ver-5.1.0/sptgpsv_8f.html @@ -0,0 +1,299 @@ + + + + + + + +NCEPLIBS-ip: sptgpsv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgpsv.f File Reference
    +
    +
    + +

    Transform spectral vector to polar stereo. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgpsv (IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
     This subprogram performs a spherical transform from spectral coefficients of divergences and curls to vector fields on a pair of polar stereographic grids. More...
     
    +

    Detailed Description

    +

    Transform spectral vector to polar stereo.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Openmp directives inserted.
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptgpsv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgpsv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgpsv ( IROMB,
     MAXWV,
     KMAX,
     NPS,
     KWSKIP,
     KGSKIP,
     NISKIP,
     NJSKIP,
     TRUE,
     XMESH,
     ORIENT,
    real, dimension(*) WAVED,
    real, dimension(*) WAVEZ,
    real, dimension(*) UN,
    real, dimension(*) VN,
    real, dimension(*) US,
    real, dimension(*) VS 
    )
    +
    + +

    This subprogram 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 by combining points in eight sectors of each polar stereographic grid,
    + numbered as in the diagram below. The pole and the sector boundaries
    + are treated specially in the code.
    + Unfortunately, this approach induces some hairy indexing and code loquacity, for which the developer apologizes.

    +
    +              \ 4 | 5 /
    +               \  |  /
    +              3 \ | / 6
    +                 |/
    +              ----+----
    +                 /|\
    +              2 / | \ 7
    +               /  |  \
    +              / 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    KMAXnumber of fields to transform.
    NPSodd order of the polar stereographic grids
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPskip number between grid fields (defaults to NPS*NPS if KGSKIP=0)
    NISKIPskip number between grid i-points (defaults to 1 if NISKIP=0)
    NJSKIPskip number between grid j-points (defaults to NPS if NJSKIP=0)
    TRUElatitude at which ps grid is true (usually 60.)
    XMESHgrid length at true latitude (m)
    ORIENTlongitude at bottom of northern ps grid (southern ps grid will have opposite orientation.)
    WAVEDwave divergence fields
    WAVEZwave vorticity fields
    UNnorthern polar stereographic u-winds
    VNnorthern polar stereographic v-winds
    USsouthern polar stereographic u-winds
    VSsouthern polar stereographic v-winds
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 80 of file sptgpsv.f.

    + +

    References spdz2uv(), splegend(), spsynth(), and spwget().

    + +

    Referenced by sptgpsd(), and sptrunsv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpsv_8f.js b/ver-5.1.0/sptgpsv_8f.js new file mode 100644 index 00000000..ec835636 --- /dev/null +++ b/ver-5.1.0/sptgpsv_8f.js @@ -0,0 +1,4 @@ +var sptgpsv_8f = +[ + [ "sptgpsv", "sptgpsv_8f.html#af2bf2335047ec277730564dbfa859079", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgpsv_8f_source.html b/ver-5.1.0/sptgpsv_8f_source.html new file mode 100644 index 00000000..3422cb0b --- /dev/null +++ b/ver-5.1.0/sptgpsv_8f_source.html @@ -0,0 +1,1038 @@ + + + + + + + +NCEPLIBS-ip: sptgpsv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgpsv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral vector to polar stereo.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | Iredell | Initial.
    +
    8 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    9 C>
    +
    10 C> @author Iredell @date 96-02-29
    +
    11 
    +
    12 C> This subprogram performs a spherical transform
    +
    13 C> from spectral coefficients of divergences and curls
    +
    14 C> to vector fields on a pair of polar stereographic grids.
    +
    15 C> The wave-space can be either triangular or rhomboidal.
    +
    16 C>
    +
    17 C> The wave and grid fields may have general indexing,
    +
    18 C> but each wave field is in sequential 'IBM order',
    +
    19 C> i.e. with zonal wavenumber as the slower index.
    +
    20 C>
    +
    21 C> The two square polar stereographic grids are centered
    +
    22 C> on the respective poles, with the orientation longitude
    +
    23 C> of the southern hemisphere grid 180 degrees opposite
    +
    24 C> that of the northern hemisphere grid.
    +
    25 C>
    +
    26 C> The vectors are automatically rotated to be resolved
    +
    27 C> relative to the respective polar stereographic grids.
    +
    28 C>
    +
    29 C> The transform is made efficient
    +
    30 C> by combining points in eight sectors
    +
    31 C> of each polar stereographic grid,
    +
    32 C> numbered as in the diagram below.
    +
    33 C> The pole and the sector boundaries
    +
    34 C> are treated specially in the code.
    +
    35 C> Unfortunately, this approach induces
    +
    36 C> some hairy indexing and code loquacity,
    +
    37 C> for which the developer apologizes.
    +
    38 C>
    +
    39 C> <pre>
    +
    40 C> \ 4 | 5 /
    +
    41 C> \ | /
    +
    42 C> 3 \ | / 6
    +
    43 C> \|/
    +
    44 C> ----+----
    +
    45 C> /|\
    +
    46 C> 2 / | \ 7
    +
    47 C> / | \
    +
    48 C> / 1 | 8 \
    +
    49 C> </pre>
    +
    50 C>
    +
    51 C> The transforms are all multiprocessed over sector points.
    +
    52 C> transform several fields at a time to improve vectorization.
    +
    53 C> subprogram can be called from a multiprocessing environment.
    +
    54 C>
    +
    55 C> @param IROMB spectral domain shape
    +
    56 C> (0 for triangular, 1 for rhomboidal)
    +
    57 C> @param MAXWV spectral truncation
    +
    58 C> @param KMAX number of fields to transform.
    +
    59 C> @param NPS odd order of the polar stereographic grids
    +
    60 C> @param KWSKIP skip number between wave fields
    +
    61 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    62 C> @param KGSKIP skip number between grid fields
    +
    63 C> (defaults to NPS*NPS if KGSKIP=0)
    +
    64 C> @param NISKIP skip number between grid i-points
    +
    65 C> (defaults to 1 if NISKIP=0)
    +
    66 C> @param NJSKIP skip number between grid j-points
    +
    67 C> (defaults to NPS if NJSKIP=0)
    +
    68 C> @param TRUE latitude at which ps grid is true (usually 60.)
    +
    69 C> @param XMESH grid length at true latitude (m)
    +
    70 C> @param ORIENT longitude at bottom of northern ps grid
    +
    71 C> (southern ps grid will have opposite orientation.)
    +
    72 C> @param WAVED wave divergence fields
    +
    73 C> @param WAVEZ wave vorticity fields
    +
    74 C> @param UN northern polar stereographic u-winds
    +
    75 C> @param VN northern polar stereographic v-winds
    +
    76 C> @param US southern polar stereographic u-winds
    +
    77 C> @param VS southern polar stereographic v-winds
    +
    78 C>
    +
    79 C> @author Iredell @date 96-02-29
    +
    80  SUBROUTINE sptgpsv(IROMB,MAXWV,KMAX,NPS,
    +
    81  & KWSKIP,KGSKIP,NISKIP,NJSKIP,
    +
    82  & TRUE,XMESH,ORIENT,WAVED,WAVEZ,UN,VN,US,VS)
    +
    83 
    +
    84  REAL WAVED(*),WAVEZ(*),UN(*),VN(*),US(*),VS(*)
    +
    85  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    86  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    87  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    88  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    89  INTEGER MP(2*KMAX)
    +
    90  REAL SLON(MAXWV,8),CLON(MAXWV,8),SROT(0:3),CROT(0:3)
    +
    91  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
    +
    92  REAL WTOP(2*(MAXWV+1),2*KMAX)
    +
    93  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    94  REAL F(2*MAXWV+3,2,2*KMAX)
    +
    95  DATA srot/0.,1.,0.,-1./,crot/1.,0.,-1.,0./
    +
    96  parameter(rerth=6.3712e6)
    +
    97  parameter(pi=3.14159265358979,dpr=180./pi)
    +
    98 
    +
    99 C CALCULATE PRELIMINARY CONSTANTS
    +
    100  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    101  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    102  mxtop=maxwv+1
    +
    103  mdim=2*mx+1
    +
    104  idim=2*maxwv+3
    +
    105  kw=kwskip
    +
    106  kg=kgskip
    +
    107  ni=niskip
    +
    108  nj=njskip
    +
    109  IF(kw.EQ.0) kw=2*mx
    +
    110  IF(kg.EQ.0) kg=nps*nps
    +
    111  IF(ni.EQ.0) ni=1
    +
    112  IF(nj.EQ.0) nj=nps
    +
    113  mp=1
    +
    114  nph=(nps-1)/2
    +
    115  gq=((1.+sin(true/dpr))*rerth/xmesh)**2
    +
    116  srh=sqrt(0.5)
    +
    117 
    +
    118 C CALCULATE SPECTRAL WINDS
    +
    119 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    120  DO k=1,kmax
    +
    121  kws=(k-1)*kw
    +
    122  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
    +
    123  & waved(kws+1),wavez(kws+1),
    +
    124  & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
    +
    125  ENDDO
    +
    126 
    +
    127 C CALCULATE POLE POINT
    +
    128  i1=nph+1
    +
    129  j1=nph+1
    +
    130  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    131  slat1=1.
    +
    132  clat1=0.
    +
    133  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    134  & pln,plntop)
    +
    135  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
    +
    136  & clat1,pln,plntop,mp,w,wtop,f)
    +
    137  coso=cos(orient/dpr)
    +
    138  sino=sin(orient/dpr)
    +
    139 CDIR$ IVDEP
    +
    140  DO k=1,kmax
    +
    141  ku=k
    +
    142  kv=k+kmax
    +
    143  ijk1=ij1+(k-1)*kg
    +
    144  un(ijk1)=2*( coso*f(3,1,ku)+sino*f(3,1,kv))
    +
    145  vn(ijk1)=2*(-sino*f(3,1,ku)+coso*f(3,1,kv))
    +
    146  us(ijk1)=2*( coso*f(3,2,ku)-sino*f(3,2,kv))
    +
    147  vs(ijk1)=2*( sino*f(3,2,ku)+coso*f(3,2,kv))
    +
    148  ENDDO
    +
    149 
    +
    150 C CALCULATE POINTS ALONG THE ROW AND COLUMN OF THE POLE,
    +
    151 C STARTING AT THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
    +
    152 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
    +
    153 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
    +
    154 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
    +
    155 C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
    +
    156 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
    +
    157  DO j1=1,nph
    +
    158  i1=nph+1
    +
    159  radlon=orient/dpr
    +
    160  j3=nps+1-i1
    +
    161  i3=j1
    +
    162  j5=nps+1-j1
    +
    163  i5=nps+1-i1
    +
    164  j7=i1
    +
    165  i7=nps+1-j1
    +
    166  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    167  ij3=(i3-1)*ni+(j3-1)*nj+1
    +
    168  ij5=(i5-1)*ni+(j5-1)*nj+1
    +
    169  ij7=(i7-1)*ni+(j7-1)*nj+1
    +
    170  di1=i1-nph-1
    +
    171  dj1=j1-nph-1
    +
    172  rq=di1**2+dj1**2
    +
    173  slat1=(gq-rq)/(gq+rq)
    +
    174  clat1=sqrt(1.-slat1**2)
    +
    175  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    176  & pln,plntop)
    +
    177  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
    +
    178  & clat1,pln,plntop,mp,w,wtop,f)
    +
    179  DO l=1,maxwv
    +
    180  slon(l,1)=sin(l*radlon)
    +
    181  clon(l,1)=cos(l*radlon)
    +
    182  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
    +
    183  & -clon(l,1)*srot(mod(1*l,4))
    +
    184  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
    +
    185  & +slon(l,1)*srot(mod(1*l,4))
    +
    186  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
    +
    187  & -clon(l,1)*srot(mod(2*l,4))
    +
    188  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
    +
    189  & +slon(l,1)*srot(mod(2*l,4))
    +
    190  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
    +
    191  & -clon(l,1)*srot(mod(3*l,4))
    +
    192  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
    +
    193  & +slon(l,1)*srot(mod(3*l,4))
    +
    194  ENDDO
    +
    195 CDIR$ IVDEP
    +
    196  DO k=1,kmax
    +
    197  ku=k
    +
    198  kv=k+kmax
    +
    199  ijk1=ij1+(k-1)*kg
    +
    200  ijk3=ij3+(k-1)*kg
    +
    201  ijk5=ij5+(k-1)*kg
    +
    202  ijk7=ij7+(k-1)*kg
    +
    203  un(ijk1)= f(1,1,ku)
    +
    204  vn(ijk1)= f(1,1,kv)
    +
    205  un(ijk3)= f(1,1,kv)
    +
    206  vn(ijk3)=-f(1,1,ku)
    +
    207  un(ijk5)=-f(1,1,ku)
    +
    208  vn(ijk5)=-f(1,1,kv)
    +
    209  un(ijk7)=-f(1,1,kv)
    +
    210  vn(ijk7)= f(1,1,ku)
    +
    211  us(ijk1)=-f(1,2,ku)
    +
    212  vs(ijk1)=-f(1,2,kv)
    +
    213  us(ijk3)=-f(1,2,kv)
    +
    214  vs(ijk3)= f(1,2,ku)
    +
    215  us(ijk5)= f(1,2,ku)
    +
    216  vs(ijk5)= f(1,2,kv)
    +
    217  us(ijk7)= f(1,2,kv)
    +
    218  vs(ijk7)=-f(1,2,ku)
    +
    219  ENDDO
    +
    220  IF(kmax.EQ.1) THEN
    +
    221  ku=1
    +
    222  kv=2
    +
    223  DO l=1,maxwv
    +
    224  lr=2*l+1
    +
    225  li=2*l+2
    +
    226  un(ij1)=un(ij1)+2*(f(lr,1,ku)*clon(l,1)
    +
    227  & -f(li,1,ku)*slon(l,1))
    +
    228  vn(ij1)=vn(ij1)+2*(f(lr,1,kv)*clon(l,1)
    +
    229  & -f(li,1,kv)*slon(l,1))
    +
    230  un(ij3)=un(ij3)+2*(f(lr,1,kv)*clon(l,3)
    +
    231  & -f(li,1,kv)*slon(l,3))
    +
    232  vn(ij3)=vn(ij3)-2*(f(lr,1,ku)*clon(l,3)
    +
    233  & -f(li,1,ku)*slon(l,3))
    +
    234  un(ij5)=un(ij5)-2*(f(lr,1,ku)*clon(l,5)
    +
    235  & -f(li,1,ku)*slon(l,5))
    +
    236  vn(ij5)=vn(ij5)-2*(f(lr,1,kv)*clon(l,5)
    +
    237  & -f(li,1,kv)*slon(l,5))
    +
    238  un(ij7)=un(ij7)-2*(f(lr,1,kv)*clon(l,7)
    +
    239  & -f(li,1,kv)*slon(l,7))
    +
    240  vn(ij7)=vn(ij7)+2*(f(lr,1,ku)*clon(l,7)
    +
    241  & -f(li,1,ku)*slon(l,7))
    +
    242  us(ij1)=us(ij1)-2*(f(lr,2,ku)*clon(l,5)
    +
    243  & -f(li,2,ku)*slon(l,5))
    +
    244  vs(ij1)=vs(ij1)-2*(f(lr,2,kv)*clon(l,5)
    +
    245  & -f(li,2,kv)*slon(l,5))
    +
    246  us(ij3)=us(ij3)-2*(f(lr,2,kv)*clon(l,3)
    +
    247  & -f(li,2,kv)*slon(l,3))
    +
    248  vs(ij3)=vs(ij3)+2*(f(lr,2,ku)*clon(l,3)
    +
    249  & -f(li,2,ku)*slon(l,3))
    +
    250  us(ij5)=us(ij5)+2*(f(lr,2,ku)*clon(l,1)
    +
    251  & -f(li,2,ku)*slon(l,1))
    +
    252  vs(ij5)=vs(ij5)+2*(f(lr,2,kv)*clon(l,1)
    +
    253  & -f(li,2,kv)*slon(l,1))
    +
    254  us(ij7)=us(ij7)+2*(f(lr,2,kv)*clon(l,7)
    +
    255  & -f(li,2,kv)*slon(l,7))
    +
    256  vs(ij7)=vs(ij7)-2*(f(lr,2,ku)*clon(l,7)
    +
    257  & -f(li,2,ku)*slon(l,7))
    +
    258  ENDDO
    +
    259  ELSE
    +
    260  DO l=1,maxwv
    +
    261  lr=2*l+1
    +
    262  li=2*l+2
    +
    263 CDIR$ IVDEP
    +
    264  DO k=1,kmax
    +
    265  ku=k
    +
    266  kv=k+kmax
    +
    267  ijk1=ij1+(k-1)*kg
    +
    268  ijk3=ij3+(k-1)*kg
    +
    269  ijk5=ij5+(k-1)*kg
    +
    270  ijk7=ij7+(k-1)*kg
    +
    271  un(ijk1)=un(ijk1)+2*(f(lr,1,ku)*clon(l,1)
    +
    272  & -f(li,1,ku)*slon(l,1))
    +
    273  vn(ijk1)=vn(ijk1)+2*(f(lr,1,kv)*clon(l,1)
    +
    274  & -f(li,1,kv)*slon(l,1))
    +
    275  un(ijk3)=un(ijk3)+2*(f(lr,1,kv)*clon(l,3)
    +
    276  & -f(li,1,kv)*slon(l,3))
    +
    277  vn(ijk3)=vn(ijk3)-2*(f(lr,1,ku)*clon(l,3)
    +
    278  & -f(li,1,ku)*slon(l,3))
    +
    279  un(ijk5)=un(ijk5)-2*(f(lr,1,ku)*clon(l,5)
    +
    280  & -f(li,1,ku)*slon(l,5))
    +
    281  vn(ijk5)=vn(ijk5)-2*(f(lr,1,kv)*clon(l,5)
    +
    282  & -f(li,1,kv)*slon(l,5))
    +
    283  un(ijk7)=un(ijk7)-2*(f(lr,1,kv)*clon(l,7)
    +
    284  & -f(li,1,kv)*slon(l,7))
    +
    285  vn(ijk7)=vn(ijk7)+2*(f(lr,1,ku)*clon(l,7)
    +
    286  & -f(li,1,ku)*slon(l,7))
    +
    287  us(ijk1)=us(ijk1)-2*(f(lr,2,ku)*clon(l,5)
    +
    288  & -f(li,2,ku)*slon(l,5))
    +
    289  vs(ijk1)=vs(ijk1)-2*(f(lr,2,kv)*clon(l,5)
    +
    290  & -f(li,2,kv)*slon(l,5))
    +
    291  us(ijk3)=us(ijk3)-2*(f(lr,2,kv)*clon(l,3)
    +
    292  & -f(li,2,kv)*slon(l,3))
    +
    293  vs(ijk3)=vs(ijk3)+2*(f(lr,2,ku)*clon(l,3)
    +
    294  & -f(li,2,ku)*slon(l,3))
    +
    295  us(ijk5)=us(ijk5)+2*(f(lr,2,ku)*clon(l,1)
    +
    296  & -f(li,2,ku)*slon(l,1))
    +
    297  vs(ijk5)=vs(ijk5)+2*(f(lr,2,kv)*clon(l,1)
    +
    298  & -f(li,2,kv)*slon(l,1))
    +
    299  us(ijk7)=us(ijk7)+2*(f(lr,2,kv)*clon(l,7)
    +
    300  & -f(li,2,kv)*slon(l,7))
    +
    301  vs(ijk7)=vs(ijk7)-2*(f(lr,2,ku)*clon(l,7)
    +
    302  & -f(li,2,ku)*slon(l,7))
    +
    303  ENDDO
    +
    304  ENDDO
    +
    305  ENDIF
    +
    306  ENDDO
    +
    307 
    +
    308 C CALCULATE POINTS ON THE MAIN DIAGONALS THROUGH THE POLE,
    +
    309 C STARTING CLOCKWISE OF THE ORIENTATION LONGITUDE AND GOING CLOCKWISE.
    +
    310 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
    +
    311 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
    +
    312 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
    +
    313 C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
    +
    314 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
    +
    315  DO j1=1,nph
    +
    316  i1=j1
    +
    317  radlon=(orient-45)/dpr
    +
    318  j3=nps+1-i1
    +
    319  i3=j1
    +
    320  j5=nps+1-j1
    +
    321  i5=nps+1-i1
    +
    322  j7=i1
    +
    323  i7=nps+1-j1
    +
    324  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    325  ij3=(i3-1)*ni+(j3-1)*nj+1
    +
    326  ij5=(i5-1)*ni+(j5-1)*nj+1
    +
    327  ij7=(i7-1)*ni+(j7-1)*nj+1
    +
    328  di1=i1-nph-1
    +
    329  dj1=j1-nph-1
    +
    330  rq=di1**2+dj1**2
    +
    331  slat1=(gq-rq)/(gq+rq)
    +
    332  clat1=sqrt(1.-slat1**2)
    +
    333  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    334  & pln,plntop)
    +
    335  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
    +
    336  & clat1,pln,plntop,mp,w,wtop,f)
    +
    337  DO l=1,maxwv
    +
    338  slon(l,1)=sin(l*radlon)
    +
    339  clon(l,1)=cos(l*radlon)
    +
    340  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
    +
    341  & -clon(l,1)*srot(mod(1*l,4))
    +
    342  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
    +
    343  & +slon(l,1)*srot(mod(1*l,4))
    +
    344  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
    +
    345  & -clon(l,1)*srot(mod(2*l,4))
    +
    346  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
    +
    347  & +slon(l,1)*srot(mod(2*l,4))
    +
    348  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
    +
    349  & -clon(l,1)*srot(mod(3*l,4))
    +
    350  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
    +
    351  & +slon(l,1)*srot(mod(3*l,4))
    +
    352  ENDDO
    +
    353 CDIR$ IVDEP
    +
    354  DO k=1,kmax
    +
    355  ku=k
    +
    356  kv=k+kmax
    +
    357  ijk1=ij1+(k-1)*kg
    +
    358  ijk3=ij3+(k-1)*kg
    +
    359  ijk5=ij5+(k-1)*kg
    +
    360  ijk7=ij7+(k-1)*kg
    +
    361  un(ijk1)=srh*( f(1,1,ku)+f(1,1,kv))
    +
    362  vn(ijk1)=srh*(-f(1,1,ku)+f(1,1,kv))
    +
    363  un(ijk3)=srh*(-f(1,1,ku)+f(1,1,kv))
    +
    364  vn(ijk3)=srh*(-f(1,1,ku)-f(1,1,kv))
    +
    365  un(ijk5)=srh*(-f(1,1,ku)-f(1,1,kv))
    +
    366  vn(ijk5)=srh*( f(1,1,ku)-f(1,1,kv))
    +
    367  un(ijk7)=srh*( f(1,1,ku)-f(1,1,kv))
    +
    368  vn(ijk7)=srh*( f(1,1,ku)+f(1,1,kv))
    +
    369  us(ijk1)=srh*(-f(1,2,ku)-f(1,2,kv))
    +
    370  vs(ijk1)=srh*( f(1,2,ku)-f(1,2,kv))
    +
    371  us(ijk3)=srh*( f(1,2,ku)-f(1,2,kv))
    +
    372  vs(ijk3)=srh*( f(1,2,ku)+f(1,2,kv))
    +
    373  us(ijk5)=srh*( f(1,2,ku)+f(1,2,kv))
    +
    374  vs(ijk5)=srh*(-f(1,2,ku)+f(1,2,kv))
    +
    375  us(ijk7)=srh*(-f(1,2,ku)+f(1,2,kv))
    +
    376  vs(ijk7)=srh*(-f(1,2,ku)-f(1,2,kv))
    +
    377  ENDDO
    +
    378  IF(kmax.EQ.1) THEN
    +
    379  ku=1
    +
    380  kv=2
    +
    381  DO l=1,maxwv
    +
    382  lr=2*l+1
    +
    383  li=2*l+2
    +
    384  un(ij1)=un(ij1)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
    +
    385  & *clon(l,1)
    +
    386  & -( f(li,1,ku)+f(li,1,kv))
    +
    387  & *slon(l,1))
    +
    388  vn(ij1)=vn(ij1)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
    +
    389  & *clon(l,1)
    +
    390  & -(-f(li,1,ku)+f(li,1,kv))
    +
    391  & *slon(l,1))
    +
    392  un(ij3)=un(ij3)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
    +
    393  & *clon(l,3)
    +
    394  & -(-f(li,1,ku)+f(li,1,kv))
    +
    395  & *slon(l,3))
    +
    396  vn(ij3)=vn(ij3)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
    +
    397  & *clon(l,3)
    +
    398  & -(-f(li,1,ku)-f(li,1,kv))
    +
    399  & *slon(l,3))
    +
    400  un(ij5)=un(ij5)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
    +
    401  & *clon(l,5)
    +
    402  & -(-f(li,1,ku)-f(li,1,kv))
    +
    403  & *slon(l,5))
    +
    404  vn(ij5)=vn(ij5)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
    +
    405  & *clon(l,5)
    +
    406  & -( f(li,1,ku)-f(li,1,kv))
    +
    407  & *slon(l,5))
    +
    408  un(ij7)=un(ij7)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
    +
    409  & *clon(l,7)
    +
    410  & -( f(li,1,ku)-f(li,1,kv))
    +
    411  & *slon(l,7))
    +
    412  vn(ij7)=vn(ij7)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
    +
    413  & *clon(l,7)
    +
    414  & -( f(li,1,ku)+f(li,1,kv))
    +
    415  & *slon(l,7))
    +
    416  us(ij1)=us(ij1)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
    +
    417  & *clon(l,3)
    +
    418  & -(-f(li,2,ku)-f(li,2,kv))
    +
    419  & *slon(l,3))
    +
    420  vs(ij1)=vs(ij1)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
    +
    421  & *clon(l,3)
    +
    422  & -( f(li,2,ku)-f(li,2,kv))
    +
    423  & *slon(l,3))
    +
    424  us(ij3)=us(ij3)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
    +
    425  & *clon(l,1)
    +
    426  & -( f(li,2,ku)-f(li,2,kv))
    +
    427  & *slon(l,1))
    +
    428  vs(ij3)=vs(ij3)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
    +
    429  & *clon(l,1)
    +
    430  & -( f(li,2,ku)+f(li,2,kv))
    +
    431  & *slon(l,1))
    +
    432  us(ij5)=us(ij5)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
    +
    433  & *clon(l,7)
    +
    434  & -( f(li,2,ku)+f(li,2,kv))
    +
    435  & *slon(l,7))
    +
    436  vs(ij5)=vs(ij5)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
    +
    437  & *clon(l,7)
    +
    438  & -(-f(li,2,ku)+f(li,2,kv))
    +
    439  & *slon(l,7))
    +
    440  us(ij7)=us(ij7)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
    +
    441  & *clon(l,5)
    +
    442  & -(-f(li,2,ku)+f(li,2,kv))
    +
    443  & *slon(l,5))
    +
    444  vs(ij7)=vs(ij7)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
    +
    445  & *clon(l,5)
    +
    446  & -(-f(li,2,ku)-f(li,2,kv))
    +
    447  & *slon(l,5))
    +
    448  ENDDO
    +
    449  ELSE
    +
    450  DO l=1,maxwv
    +
    451  lr=2*l+1
    +
    452  li=2*l+2
    +
    453 CDIR$ IVDEP
    +
    454  DO k=1,kmax
    +
    455  ku=k
    +
    456  kv=k+kmax
    +
    457  ijk1=ij1+(k-1)*kg
    +
    458  ijk3=ij3+(k-1)*kg
    +
    459  ijk5=ij5+(k-1)*kg
    +
    460  ijk7=ij7+(k-1)*kg
    +
    461  un(ijk1)=un(ijk1)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
    +
    462  & *clon(l,1)
    +
    463  & -( f(li,1,ku)+f(li,1,kv))
    +
    464  & *slon(l,1))
    +
    465  vn(ijk1)=vn(ijk1)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
    +
    466  & *clon(l,1)
    +
    467  & -(-f(li,1,ku)+f(li,1,kv))
    +
    468  & *slon(l,1))
    +
    469  un(ijk3)=un(ijk3)+2*srh*((-f(lr,1,ku)+f(lr,1,kv))
    +
    470  & *clon(l,3)
    +
    471  & -(-f(li,1,ku)+f(li,1,kv))
    +
    472  & *slon(l,3))
    +
    473  vn(ijk3)=vn(ijk3)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
    +
    474  & *clon(l,3)
    +
    475  & -(-f(li,1,ku)-f(li,1,kv))
    +
    476  & *slon(l,3))
    +
    477  un(ijk5)=un(ijk5)+2*srh*((-f(lr,1,ku)-f(lr,1,kv))
    +
    478  & *clon(l,5)
    +
    479  & -(-f(li,1,ku)-f(li,1,kv))
    +
    480  & *slon(l,5))
    +
    481  vn(ijk5)=vn(ijk5)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
    +
    482  & *clon(l,5)
    +
    483  & -( f(li,1,ku)-f(li,1,kv))
    +
    484  & *slon(l,5))
    +
    485  un(ijk7)=un(ijk7)+2*srh*(( f(lr,1,ku)-f(lr,1,kv))
    +
    486  & *clon(l,7)
    +
    487  & -( f(li,1,ku)-f(li,1,kv))
    +
    488  & *slon(l,7))
    +
    489  vn(ijk7)=vn(ijk7)+2*srh*(( f(lr,1,ku)+f(lr,1,kv))
    +
    490  & *clon(l,7)
    +
    491  & -( f(li,1,ku)+f(li,1,kv))
    +
    492  & *slon(l,7))
    +
    493  us(ijk1)=us(ijk1)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
    +
    494  & *clon(l,3)
    +
    495  & -(-f(li,2,ku)-f(li,2,kv))
    +
    496  & *slon(l,3))
    +
    497  vs(ijk1)=vs(ijk1)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
    +
    498  & *clon(l,3)
    +
    499  & -( f(li,2,ku)-f(li,2,kv))
    +
    500  & *slon(l,3))
    +
    501  us(ijk3)=us(ijk3)+2*srh*(( f(lr,2,ku)-f(lr,2,kv))
    +
    502  & *clon(l,1)
    +
    503  & -( f(li,2,ku)-f(li,2,kv))
    +
    504  & *slon(l,1))
    +
    505  vs(ijk3)=vs(ijk3)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
    +
    506  & *clon(l,1)
    +
    507  & -( f(li,2,ku)+f(li,2,kv))
    +
    508  & *slon(l,1))
    +
    509  us(ijk5)=us(ijk5)+2*srh*(( f(lr,2,ku)+f(lr,2,kv))
    +
    510  & *clon(l,7)
    +
    511  & -( f(li,2,ku)+f(li,2,kv))
    +
    512  & *slon(l,7))
    +
    513  vs(ijk5)=vs(ijk5)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
    +
    514  & *clon(l,7)
    +
    515  & -(-f(li,2,ku)+f(li,2,kv))
    +
    516  & *slon(l,7))
    +
    517  us(ijk7)=us(ijk7)+2*srh*((-f(lr,2,ku)+f(lr,2,kv))
    +
    518  & *clon(l,5)
    +
    519  & -(-f(li,2,ku)+f(li,2,kv))
    +
    520  & *slon(l,5))
    +
    521  vs(ijk7)=vs(ijk7)+2*srh*((-f(lr,2,ku)-f(lr,2,kv))
    +
    522  & *clon(l,5)
    +
    523  & -(-f(li,2,ku)-f(li,2,kv))
    +
    524  & *slon(l,5))
    +
    525  ENDDO
    +
    526  ENDDO
    +
    527  ENDIF
    +
    528  ENDDO
    +
    529 
    +
    530 C CALCULATE THE REMAINDER OF THE POLAR STEREOGRAPHIC DOMAIN,
    +
    531 C STARTING AT THE SECTOR JUST CLOCKWISE OF THE ORIENTATION LONGITUDE
    +
    532 C AND GOING CLOCKWISE UNTIL ALL EIGHT SECTORS ARE DONE.
    +
    533 C$OMP PARALLEL DO PRIVATE(I1,J2,I2,J3,I3,J4,I4,J5,I5,J6,I6,J7,I7,J8,I8)
    +
    534 C$OMP& PRIVATE(IJ1,IJ2,IJ3,IJ4,IJ5,IJ6,IJ7,IJ8)
    +
    535 C$OMP& PRIVATE(IJK1,IJK2,IJK3,IJK4,IJK5,IJK6,IJK7,IJK8)
    +
    536 C$OMP& PRIVATE(DJ1,DI1,RQ,RR,RADLON,RADLON1,RADLON2,SLAT1,CLAT1)
    +
    537 C$OMP& PRIVATE(PLN,PLNTOP,F,SLON,CLON,KU,KV,LR,LI)
    +
    538  DO j1=1,nph-1
    +
    539  DO i1=j1+1,nph
    +
    540  j2=i1
    +
    541  i2=j1
    +
    542  j3=nps+1-i1
    +
    543  i3=j1
    +
    544  j4=nps+1-j1
    +
    545  i4=i1
    +
    546  j5=nps+1-j1
    +
    547  i5=nps+1-i1
    +
    548  j6=nps+1-i1
    +
    549  i6=nps+1-j1
    +
    550  j7=i1
    +
    551  i7=nps+1-j1
    +
    552  j8=j1
    +
    553  i8=nps+1-i1
    +
    554  ij1=(i1-1)*ni+(j1-1)*nj+1
    +
    555  ij2=(i2-1)*ni+(j2-1)*nj+1
    +
    556  ij3=(i3-1)*ni+(j3-1)*nj+1
    +
    557  ij4=(i4-1)*ni+(j4-1)*nj+1
    +
    558  ij5=(i5-1)*ni+(j5-1)*nj+1
    +
    559  ij6=(i6-1)*ni+(j6-1)*nj+1
    +
    560  ij7=(i7-1)*ni+(j7-1)*nj+1
    +
    561  ij8=(i8-1)*ni+(j8-1)*nj+1
    +
    562  di1=i1-nph-1
    +
    563  dj1=j1-nph-1
    +
    564  rq=di1**2+dj1**2
    +
    565  rr=sqrt(1/rq)
    +
    566  slat1=(gq-rq)/(gq+rq)
    +
    567  clat1=sqrt(1.-slat1**2)
    +
    568  radlon1=orient/dpr+atan(-di1/dj1)
    +
    569  radlon2=(orient-45)/dpr*2-radlon1
    +
    570  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    571  & pln,plntop)
    +
    572  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
    +
    573  & clat1,pln,plntop,mp,w,wtop,f)
    +
    574  DO l=1,maxwv
    +
    575  slon(l,1)=sin(l*radlon1)
    +
    576  clon(l,1)=cos(l*radlon1)
    +
    577  slon(l,2)=sin(l*radlon2)
    +
    578  clon(l,2)=cos(l*radlon2)
    +
    579  slon(l,3)=slon(l,1)*crot(mod(1*l,4))
    +
    580  & -clon(l,1)*srot(mod(1*l,4))
    +
    581  clon(l,3)=clon(l,1)*crot(mod(1*l,4))
    +
    582  & +slon(l,1)*srot(mod(1*l,4))
    +
    583  slon(l,4)=slon(l,2)*crot(mod(1*l,4))
    +
    584  & -clon(l,2)*srot(mod(1*l,4))
    +
    585  clon(l,4)=clon(l,2)*crot(mod(1*l,4))
    +
    586  & +slon(l,2)*srot(mod(1*l,4))
    +
    587  slon(l,5)=slon(l,1)*crot(mod(2*l,4))
    +
    588  & -clon(l,1)*srot(mod(2*l,4))
    +
    589  clon(l,5)=clon(l,1)*crot(mod(2*l,4))
    +
    590  & +slon(l,1)*srot(mod(2*l,4))
    +
    591  slon(l,6)=slon(l,2)*crot(mod(2*l,4))
    +
    592  & -clon(l,2)*srot(mod(2*l,4))
    +
    593  clon(l,6)=clon(l,2)*crot(mod(2*l,4))
    +
    594  & +slon(l,2)*srot(mod(2*l,4))
    +
    595  slon(l,7)=slon(l,1)*crot(mod(3*l,4))
    +
    596  & -clon(l,1)*srot(mod(3*l,4))
    +
    597  clon(l,7)=clon(l,1)*crot(mod(3*l,4))
    +
    598  & +slon(l,1)*srot(mod(3*l,4))
    +
    599  slon(l,8)=slon(l,2)*crot(mod(3*l,4))
    +
    600  & -clon(l,2)*srot(mod(3*l,4))
    +
    601  clon(l,8)=clon(l,2)*crot(mod(3*l,4))
    +
    602  & +slon(l,2)*srot(mod(3*l,4))
    +
    603  ENDDO
    +
    604 CDIR$ IVDEP
    +
    605  DO k=1,kmax
    +
    606  ku=k
    +
    607  kv=k+kmax
    +
    608  ijk1=ij1+(k-1)*kg
    +
    609  ijk2=ij2+(k-1)*kg
    +
    610  ijk3=ij3+(k-1)*kg
    +
    611  ijk4=ij4+(k-1)*kg
    +
    612  ijk5=ij5+(k-1)*kg
    +
    613  ijk6=ij6+(k-1)*kg
    +
    614  ijk7=ij7+(k-1)*kg
    +
    615  ijk8=ij8+(k-1)*kg
    +
    616  un(ijk1)=rr*(-dj1*f(1,1,ku)-di1*f(1,1,kv))
    +
    617  vn(ijk1)=rr*( di1*f(1,1,ku)-dj1*f(1,1,kv))
    +
    618  un(ijk2)=rr*(-di1*f(1,1,ku)-dj1*f(1,1,kv))
    +
    619  vn(ijk2)=rr*( dj1*f(1,1,ku)-di1*f(1,1,kv))
    +
    620  un(ijk3)=rr*( di1*f(1,1,ku)-dj1*f(1,1,kv))
    +
    621  vn(ijk3)=rr*( dj1*f(1,1,ku)+di1*f(1,1,kv))
    +
    622  un(ijk4)=rr*( dj1*f(1,1,ku)-di1*f(1,1,kv))
    +
    623  vn(ijk4)=rr*( di1*f(1,1,ku)+dj1*f(1,1,kv))
    +
    624  un(ijk5)=rr*( dj1*f(1,1,ku)+di1*f(1,1,kv))
    +
    625  vn(ijk5)=rr*(-di1*f(1,1,ku)+dj1*f(1,1,kv))
    +
    626  un(ijk6)=rr*( di1*f(1,1,ku)+dj1*f(1,1,kv))
    +
    627  vn(ijk6)=rr*(-dj1*f(1,1,ku)+di1*f(1,1,kv))
    +
    628  un(ijk7)=rr*(-di1*f(1,1,ku)+dj1*f(1,1,kv))
    +
    629  vn(ijk7)=rr*(-dj1*f(1,1,ku)-di1*f(1,1,kv))
    +
    630  un(ijk8)=rr*(-dj1*f(1,1,ku)+di1*f(1,1,kv))
    +
    631  vn(ijk8)=rr*(-di1*f(1,1,ku)-dj1*f(1,1,kv))
    +
    632  us(ijk1)=rr*( dj1*f(1,2,ku)+di1*f(1,2,kv))
    +
    633  vs(ijk1)=rr*(-di1*f(1,2,ku)+dj1*f(1,2,kv))
    +
    634  us(ijk2)=rr*( di1*f(1,2,ku)+dj1*f(1,2,kv))
    +
    635  vs(ijk2)=rr*(-dj1*f(1,2,ku)+di1*f(1,2,kv))
    +
    636  us(ijk3)=rr*(-di1*f(1,2,ku)+dj1*f(1,2,kv))
    +
    637  vs(ijk3)=rr*(-dj1*f(1,2,ku)-di1*f(1,2,kv))
    +
    638  us(ijk4)=rr*(-dj1*f(1,2,ku)+di1*f(1,2,kv))
    +
    639  vs(ijk4)=rr*(-di1*f(1,2,ku)-dj1*f(1,2,kv))
    +
    640  us(ijk5)=rr*(-dj1*f(1,2,ku)-di1*f(1,2,kv))
    +
    641  vs(ijk5)=rr*( di1*f(1,2,ku)-dj1*f(1,2,kv))
    +
    642  us(ijk6)=rr*(-di1*f(1,2,ku)-dj1*f(1,2,kv))
    +
    643  vs(ijk6)=rr*( dj1*f(1,2,ku)-di1*f(1,2,kv))
    +
    644  us(ijk7)=rr*( di1*f(1,2,ku)-dj1*f(1,2,kv))
    +
    645  vs(ijk7)=rr*( dj1*f(1,2,ku)+di1*f(1,2,kv))
    +
    646  us(ijk8)=rr*( dj1*f(1,2,ku)-di1*f(1,2,kv))
    +
    647  vs(ijk8)=rr*( di1*f(1,2,ku)+dj1*f(1,2,kv))
    +
    648  ENDDO
    +
    649  IF(kmax.EQ.1) THEN
    +
    650  ku=1
    +
    651  kv=2
    +
    652  DO l=1,maxwv
    +
    653  lr=2*l+1
    +
    654  li=2*l+2
    +
    655  un(ij1)=un(ij1)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    656  & *clon(l,1)
    +
    657  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    658  & *slon(l,1))
    +
    659  vn(ij1)=vn(ij1)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    660  & *clon(l,1)
    +
    661  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    662  & *slon(l,1))
    +
    663  un(ij2)=un(ij2)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    664  & *clon(l,2)
    +
    665  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    666  & *slon(l,2))
    +
    667  vn(ij2)=vn(ij2)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    668  & *clon(l,2)
    +
    669  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    670  & *slon(l,2))
    +
    671  un(ij3)=un(ij3)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    672  & *clon(l,3)
    +
    673  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    674  & *slon(l,3))
    +
    675  vn(ij3)=vn(ij3)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    676  & *clon(l,3)
    +
    677  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    678  & *slon(l,3))
    +
    679  un(ij4)=un(ij4)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    680  & *clon(l,4)
    +
    681  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    682  & *slon(l,4))
    +
    683  vn(ij4)=vn(ij4)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    684  & *clon(l,4)
    +
    685  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    686  & *slon(l,4))
    +
    687  un(ij5)=un(ij5)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    688  & *clon(l,5)
    +
    689  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    690  & *slon(l,5))
    +
    691  vn(ij5)=vn(ij5)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    692  & *clon(l,5)
    +
    693  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    694  & *slon(l,5))
    +
    695  un(ij6)=un(ij6)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    696  & *clon(l,6)
    +
    697  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    698  & *slon(l,6))
    +
    699  vn(ij6)=vn(ij6)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    700  & *clon(l,6)
    +
    701  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    702  & *slon(l,6))
    +
    703  un(ij7)=un(ij7)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    704  & *clon(l,7)
    +
    705  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    706  & *slon(l,7))
    +
    707  vn(ij7)=vn(ij7)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    708  & *clon(l,7)
    +
    709  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    710  & *slon(l,7))
    +
    711  un(ij8)=un(ij8)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    712  & *clon(l,8)
    +
    713  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    714  & *slon(l,8))
    +
    715  vn(ij8)=vn(ij8)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    716  & *clon(l,8)
    +
    717  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    718  & *slon(l,8))
    +
    719  us(ij1)=us(ij1)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    720  & *clon(l,4)
    +
    721  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    722  & *slon(l,4))
    +
    723  vs(ij1)=vs(ij1)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    724  & *clon(l,4)
    +
    725  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    726  & *slon(l,4))
    +
    727  us(ij2)=us(ij2)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    728  & *clon(l,3)
    +
    729  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    730  & *slon(l,3))
    +
    731  vs(ij2)=vs(ij2)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    732  & *clon(l,3)
    +
    733  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    734  & *slon(l,3))
    +
    735  us(ij3)=us(ij3)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    736  & *clon(l,2)
    +
    737  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    738  & *slon(l,2))
    +
    739  vs(ij3)=vs(ij3)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    740  & *clon(l,2)
    +
    741  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    742  & *slon(l,2))
    +
    743  us(ij4)=us(ij4)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    744  & *clon(l,1)
    +
    745  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    746  & *slon(l,1))
    +
    747  vs(ij4)=vs(ij4)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    748  & *clon(l,1)
    +
    749  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    750  & *slon(l,1))
    +
    751  us(ij5)=us(ij5)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    752  & *clon(l,8)
    +
    753  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    754  & *slon(l,8))
    +
    755  vs(ij5)=vs(ij5)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    756  & *clon(l,8)
    +
    757  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    758  & *slon(l,8))
    +
    759  us(ij6)=us(ij6)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    760  & *clon(l,7)
    +
    761  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    762  & *slon(l,7))
    +
    763  vs(ij6)=vs(ij6)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    764  & *clon(l,7)
    +
    765  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    766  & *slon(l,7))
    +
    767  us(ij7)=us(ij7)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    768  & *clon(l,6)
    +
    769  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    770  & *slon(l,6))
    +
    771  vs(ij7)=vs(ij7)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    772  & *clon(l,6)
    +
    773  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    774  & *slon(l,6))
    +
    775  us(ij8)=us(ij8)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    776  & *clon(l,5)
    +
    777  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    778  & *slon(l,5))
    +
    779  vs(ij8)=vs(ij8)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    780  & *clon(l,5)
    +
    781  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    782  & *slon(l,5))
    +
    783  ENDDO
    +
    784  ELSE
    +
    785  DO l=1,maxwv
    +
    786  lr=2*l+1
    +
    787  li=2*l+2
    +
    788 CDIR$ IVDEP
    +
    789  DO k=1,kmax
    +
    790  ku=k
    +
    791  kv=k+kmax
    +
    792  ijk1=ij1+(k-1)*kg
    +
    793  ijk2=ij2+(k-1)*kg
    +
    794  ijk3=ij3+(k-1)*kg
    +
    795  ijk4=ij4+(k-1)*kg
    +
    796  ijk5=ij5+(k-1)*kg
    +
    797  ijk6=ij6+(k-1)*kg
    +
    798  ijk7=ij7+(k-1)*kg
    +
    799  ijk8=ij8+(k-1)*kg
    +
    800  un(ijk1)=un(ijk1)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    801  & *clon(l,1)
    +
    802  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    803  & *slon(l,1))
    +
    804  vn(ijk1)=vn(ijk1)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    805  & *clon(l,1)
    +
    806  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    807  & *slon(l,1))
    +
    808  un(ijk2)=un(ijk2)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    809  & *clon(l,2)
    +
    810  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    811  & *slon(l,2))
    +
    812  vn(ijk2)=vn(ijk2)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    813  & *clon(l,2)
    +
    814  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    815  & *slon(l,2))
    +
    816  un(ijk3)=un(ijk3)+2*rr*(( di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    817  & *clon(l,3)
    +
    818  & -( di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    819  & *slon(l,3))
    +
    820  vn(ijk3)=vn(ijk3)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    821  & *clon(l,3)
    +
    822  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    823  & *slon(l,3))
    +
    824  un(ijk4)=un(ijk4)+2*rr*(( dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    825  & *clon(l,4)
    +
    826  & -( dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    827  & *slon(l,4))
    +
    828  vn(ijk4)=vn(ijk4)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    829  & *clon(l,4)
    +
    830  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    831  & *slon(l,4))
    +
    832  un(ijk5)=un(ijk5)+2*rr*(( dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    833  & *clon(l,5)
    +
    834  & -( dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    835  & *slon(l,5))
    +
    836  vn(ijk5)=vn(ijk5)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    837  & *clon(l,5)
    +
    838  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    839  & *slon(l,5))
    +
    840  un(ijk6)=un(ijk6)+2*rr*(( di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    841  & *clon(l,6)
    +
    842  & -( di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    843  & *slon(l,6))
    +
    844  vn(ijk6)=vn(ijk6)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    845  & *clon(l,6)
    +
    846  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    847  & *slon(l,6))
    +
    848  un(ijk7)=un(ijk7)+2*rr*((-di1*f(lr,1,ku)+dj1*f(lr,1,kv))
    +
    849  & *clon(l,7)
    +
    850  & -(-di1*f(li,1,ku)+dj1*f(li,1,kv))
    +
    851  & *slon(l,7))
    +
    852  vn(ijk7)=vn(ijk7)+2*rr*((-dj1*f(lr,1,ku)-di1*f(lr,1,kv))
    +
    853  & *clon(l,7)
    +
    854  & -(-dj1*f(li,1,ku)-di1*f(li,1,kv))
    +
    855  & *slon(l,7))
    +
    856  un(ijk8)=un(ijk8)+2*rr*((-dj1*f(lr,1,ku)+di1*f(lr,1,kv))
    +
    857  & *clon(l,8)
    +
    858  & -(-dj1*f(li,1,ku)+di1*f(li,1,kv))
    +
    859  & *slon(l,8))
    +
    860  vn(ijk8)=vn(ijk8)+2*rr*((-di1*f(lr,1,ku)-dj1*f(lr,1,kv))
    +
    861  & *clon(l,8)
    +
    862  & -(-di1*f(li,1,ku)-dj1*f(li,1,kv))
    +
    863  & *slon(l,8))
    +
    864  us(ijk1)=us(ijk1)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    865  & *clon(l,4)
    +
    866  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    867  & *slon(l,4))
    +
    868  vs(ijk1)=vs(ijk1)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    869  & *clon(l,4)
    +
    870  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    871  & *slon(l,4))
    +
    872  us(ijk2)=us(ijk2)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    873  & *clon(l,3)
    +
    874  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    875  & *slon(l,3))
    +
    876  vs(ijk2)=vs(ijk2)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    877  & *clon(l,3)
    +
    878  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    879  & *slon(l,3))
    +
    880  us(ijk3)=us(ijk3)+2*rr*((-di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    881  & *clon(l,2)
    +
    882  & -(-di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    883  & *slon(l,2))
    +
    884  vs(ijk3)=vs(ijk3)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    885  & *clon(l,2)
    +
    886  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    887  & *slon(l,2))
    +
    888  us(ijk4)=us(ijk4)+2*rr*((-dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    889  & *clon(l,1)
    +
    890  & -(-dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    891  & *slon(l,1))
    +
    892  vs(ijk4)=vs(ijk4)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    893  & *clon(l,1)
    +
    894  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    895  & *slon(l,1))
    +
    896  us(ijk5)=us(ijk5)+2*rr*((-dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    897  & *clon(l,8)
    +
    898  & -(-dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    899  & *slon(l,8))
    +
    900  vs(ijk5)=vs(ijk5)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    901  & *clon(l,8)
    +
    902  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    903  & *slon(l,8))
    +
    904  us(ijk6)=us(ijk6)+2*rr*((-di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    905  & *clon(l,7)
    +
    906  & -(-di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    907  & *slon(l,7))
    +
    908  vs(ijk6)=vs(ijk6)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    909  & *clon(l,7)
    +
    910  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    911  & *slon(l,7))
    +
    912  us(ijk7)=us(ijk7)+2*rr*(( di1*f(lr,2,ku)-dj1*f(lr,2,kv))
    +
    913  & *clon(l,6)
    +
    914  & -( di1*f(li,2,ku)-dj1*f(li,2,kv))
    +
    915  & *slon(l,6))
    +
    916  vs(ijk7)=vs(ijk7)+2*rr*(( dj1*f(lr,2,ku)+di1*f(lr,2,kv))
    +
    917  & *clon(l,6)
    +
    918  & -( dj1*f(li,2,ku)+di1*f(li,2,kv))
    +
    919  & *slon(l,6))
    +
    920  us(ijk8)=us(ijk8)+2*rr*(( dj1*f(lr,2,ku)-di1*f(lr,2,kv))
    +
    921  & *clon(l,5)
    +
    922  & -( dj1*f(li,2,ku)-di1*f(li,2,kv))
    +
    923  & *slon(l,5))
    +
    924  vs(ijk8)=vs(ijk8)+2*rr*(( di1*f(lr,2,ku)+dj1*f(lr,2,kv))
    +
    925  & *clon(l,5)
    +
    926  & -( di1*f(li,2,ku)+dj1*f(li,2,kv))
    +
    927  & *slon(l,5))
    +
    928  ENDDO
    +
    929  ENDDO
    +
    930  ENDIF
    +
    931  ENDDO
    +
    932  ENDDO
    +
    933 
    +
    934  END
    +
    subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
    Computes the wind components from divergence and vorticity in spectral space.
    Definition: spdz2uv.f:49
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgpsv(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpsv.f:83
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpt_8f.html b/ver-5.1.0/sptgpt_8f.html new file mode 100644 index 00000000..2d0b850b --- /dev/null +++ b/ver-5.1.0/sptgpt_8f.html @@ -0,0 +1,252 @@ + + + + + + + +NCEPLIBS-ip: sptgpt.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgpt.f File Reference
    +
    +
    + +

    Transform spectral scalar to station points. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgpt (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
     This subprogram performs a spherical transform from spectral coefficients of scalar quantities to specified sets of station points on the globe. More...
     
    +

    Detailed Description

    +

    Transform spectral scalar to station points.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Openmp directives inserted.
    2003-06-30 Iredell Use spfftpt().
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptgpt.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgpt()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgpt ( IROMB,
     MAXWV,
     KMAX,
     NMAX,
     KWSKIP,
     KGSKIP,
     NRSKIP,
     NGSKIP,
    real, dimension(*) RLAT,
    real, dimension(*) RLON,
    real, dimension(*) WAVE,
    real, dimension(*) GP 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    KMAXnumber of fields to transform.
    NMAXnumber of station points to return
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPskip number between station point sets (defaults to NMAX if KGSKIP=0)
    NRSKIPskip number between station lats and lons (defaults to 1 if NRSKIP=0)
    NGSKIPskip number between station points (defaults to 1 if NGSKIP=0)
    RLATstation latitudes in degrees
    RLONstation longitudes in degrees
    WAVEwave fields
    GPstation point sets
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 48 of file sptgpt.f.

    + +

    References spfftpt(), splegend(), spsynth(), and spwget().

    + +

    Referenced by sptrung(), and sptrungv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgpt_8f.js b/ver-5.1.0/sptgpt_8f.js new file mode 100644 index 00000000..708e1051 --- /dev/null +++ b/ver-5.1.0/sptgpt_8f.js @@ -0,0 +1,4 @@ +var sptgpt_8f = +[ + [ "sptgpt", "sptgpt_8f.html#a1b8d333bcc601e5b7e8d3dd1369f54b1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgpt_8f_source.html b/ver-5.1.0/sptgpt_8f_source.html new file mode 100644 index 00000000..70741732 --- /dev/null +++ b/ver-5.1.0/sptgpt_8f_source.html @@ -0,0 +1,208 @@ + + + + + + + +NCEPLIBS-ip: sptgpt.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgpt.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral scalar to station points.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | Iredell | Initial.
    +
    8 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    9 C> 2003-06-30 | Iredell | Use spfftpt().
    +
    10 C>
    +
    11 C> @author Iredell @date 96-02-29
    +
    12 
    +
    13 C> This subprogram performs a spherical transform
    +
    14 c> from spectral coefficients of scalar quantities
    +
    15 c> to specified sets of station points on the globe.
    +
    16 C>
    +
    17 C> The wave-space can be either triangular or rhomboidal.
    +
    18 C>
    +
    19 C> The wave and point fields may have general indexing,
    +
    20 c> but each wave field is in sequential 'IBM order',
    +
    21 c> i.e. with zonal wavenumber as the slower index.
    +
    22 C>
    +
    23 C> The transforms are all multiprocessed over stations.
    +
    24 C>
    +
    25 C> Transform several fields at a time to improve vectorization.
    +
    26 C>
    +
    27 C> Subprogram can be called from a multiprocessing environment.
    +
    28 C>
    +
    29 C> @param IROMB spectral domain shape
    +
    30 C> (0 for triangular, 1 for rhomboidal)
    +
    31 C> @param MAXWV spectral truncation
    +
    32 C> @param KMAX number of fields to transform.
    +
    33 C> @param NMAX number of station points to return
    +
    34 C> @param KWSKIP skip number between wave fields
    +
    35 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    36 C> @param KGSKIP skip number between station point sets
    +
    37 C> (defaults to NMAX if KGSKIP=0)
    +
    38 C> @param NRSKIP skip number between station lats and lons
    +
    39 C> (defaults to 1 if NRSKIP=0)
    +
    40 C> @param NGSKIP skip number between station points
    +
    41 C> (defaults to 1 if NGSKIP=0)
    +
    42 C> @param RLAT station latitudes in degrees
    +
    43 C> @param RLON station longitudes in degrees
    +
    44 C> @param WAVE wave fields
    +
    45 C> @param GP station point sets
    +
    46 C>
    +
    47 C> @author Iredell @date 96-02-29
    +
    48  SUBROUTINE sptgpt(IROMB,MAXWV,KMAX,NMAX,
    +
    49  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
    +
    50  & RLAT,RLON,WAVE,GP)
    +
    51 
    +
    52  REAL RLAT(*),RLON(*),WAVE(*),GP(*)
    +
    53  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    54  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    55  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    56  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    57  INTEGER MP(KMAX)
    +
    58  REAL WTOP(2*(MAXWV+1),KMAX)
    +
    59  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    60  REAL F(2*MAXWV+3,2,KMAX)
    +
    61  parameter(pi=3.14159265358979)
    +
    62 
    +
    63 C CALCULATE PRELIMINARY CONSTANTS
    +
    64  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    65  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    66  mxtop=maxwv+1
    +
    67  idim=2*maxwv+3
    +
    68  kw=kwskip
    +
    69  kg=kgskip
    +
    70  nr=nrskip
    +
    71  ng=ngskip
    +
    72  IF(kw.EQ.0) kw=2*mx
    +
    73  IF(kg.EQ.0) kg=nmax
    +
    74  IF(nr.EQ.0) nr=1
    +
    75  IF(ng.EQ.0) ng=1
    +
    76  mp=0
    +
    77 C$OMP PARALLEL DO
    +
    78  DO k=1,kmax
    +
    79  wtop(1:2*mxtop,k)=0
    +
    80  ENDDO
    +
    81 
    +
    82 C CALCULATE STATION FIELDS
    +
    83 C$OMP PARALLEL DO PRIVATE(RADLAT,SLAT1,CLAT1)
    +
    84 C$OMP& PRIVATE(PLN,PLNTOP,F,NK)
    +
    85  DO n=1,nmax
    +
    86  radlat=pi/180*rlat((n-1)*nr+1)
    +
    87  IF(rlat((n-1)*nr+1).GE.89.9995) THEN
    +
    88  slat1=1.
    +
    89  clat1=0.
    +
    90  ELSEIF(rlat((n-1)*nr+1).LE.-89.9995) THEN
    +
    91  slat1=-1.
    +
    92  clat1=0.
    +
    93  ELSE
    +
    94  slat1=sin(radlat)
    +
    95  clat1=cos(radlat)
    +
    96  ENDIF
    +
    97  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    98  & pln,plntop)
    +
    99  CALL spsynth(iromb,maxwv,2*maxwv,idim,kw,2*mxtop,kmax,
    +
    100  & clat1,pln,plntop,mp,wave,wtop,f)
    +
    101  CALL spfftpt(maxwv,1,2*maxwv+3,kg,kmax,rlon((n-1)*nr+1),
    +
    102  & f,gp((n-1)*ng+1))
    +
    103  ENDDO
    +
    104  END
    +
    subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
    This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
    Definition: spfftpt.f:23
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgpt(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition: sptgpt.f:51
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptd_8f.html b/ver-5.1.0/sptgptd_8f.html new file mode 100644 index 00000000..0888fc77 --- /dev/null +++ b/ver-5.1.0/sptgptd_8f.html @@ -0,0 +1,255 @@ + + + + + + + +NCEPLIBS-ip: sptgptd.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgptd.f File Reference
    +
    +
    + +

    Transform spectral to station point gradients. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgptd (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, XP, YP)
     This subprogram performs a spherical transform from spectral coefficients of scalar fields to specified sets of station point gradients on the globe. More...
     
    +

    Detailed Description

    +

    Transform spectral to station point gradients.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Openmp directives inserted.
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptgptd.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgptd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgptd ( IROMB,
     MAXWV,
     KMAX,
     NMAX,
     KWSKIP,
     KGSKIP,
     NRSKIP,
     NGSKIP,
    real, dimension(*) RLAT,
    real, dimension(*) RLON,
    real, dimension(*) WAVE,
    real, dimension(*) XP,
    real, dimension(*) YP 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    KMAXnumber of fields to transform.
    NMAXnumber of station points to return
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPskip number between station point sets (defaults to NMAX if KGSKIP=0)
    NRSKIPskip number between station lats and lons (defaults to 1 if NRSKIP=0)
    NGSKIPskip number between station points (defaults to 1 if NGSKIP=0)
    RLATstation latitudes in degrees
    RLONstation longitudes in degrees
    WAVEwave fields
    XPstation point x-gradient sets
    YPstation point y-gradient sets
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 48 of file sptgptd.f.

    + +

    References splaplac(), sptgptv(), and spwget().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptd_8f.js b/ver-5.1.0/sptgptd_8f.js new file mode 100644 index 00000000..437951b8 --- /dev/null +++ b/ver-5.1.0/sptgptd_8f.js @@ -0,0 +1,4 @@ +var sptgptd_8f = +[ + [ "sptgptd", "sptgptd_8f.html#a64d1fe761662182ca3495531152d1cd3", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgptd_8f_source.html b/ver-5.1.0/sptgptd_8f_source.html new file mode 100644 index 00000000..5d45d7ca --- /dev/null +++ b/ver-5.1.0/sptgptd_8f_source.html @@ -0,0 +1,180 @@ + + + + + + + +NCEPLIBS-ip: sptgptd.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgptd.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral to station point gradients.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | Iredell | Initial.
    +
    8 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    9 C>
    +
    10 C> @author Iredell @date 96-02-29
    +
    11 
    +
    12 C> This subprogram performs a spherical transform
    +
    13 c> from spectral coefficients of scalar fields
    +
    14 c> to specified sets of station point gradients on the globe.
    +
    15 C>
    +
    16 C> The wave-space can be either triangular or rhomboidal.
    +
    17 C>
    +
    18 C> The wave and point fields may have general indexing,
    +
    19 c> but each wave field is in sequential 'IBM order',
    +
    20 c> i.e. with zonal wavenumber as the slower index.
    +
    21 C>
    +
    22 C> The transforms are all multiprocessed over stations.
    +
    23 C>
    +
    24 C> Transform several fields at a time to improve vectorization.
    +
    25 C>
    +
    26 C> Subprogram can be called from a multiprocessing environment.
    +
    27 C>
    +
    28 C> @param IROMB spectral domain shape
    +
    29 c> (0 for triangular, 1 for rhomboidal)
    +
    30 C> @param MAXWV spectral truncation
    +
    31 C> @param KMAX number of fields to transform.
    +
    32 C> @param NMAX number of station points to return
    +
    33 C> @param KWSKIP skip number between wave fields
    +
    34 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    35 C> @param KGSKIP skip number between station point sets
    +
    36 C> (defaults to NMAX if KGSKIP=0)
    +
    37 C> @param NRSKIP skip number between station lats and lons
    +
    38 C> (defaults to 1 if NRSKIP=0)
    +
    39 C> @param NGSKIP skip number between station points
    +
    40 c> (defaults to 1 if NGSKIP=0)
    +
    41 C> @param RLAT station latitudes in degrees
    +
    42 C> @param RLON station longitudes in degrees
    +
    43 C> @param WAVE wave fields
    +
    44 C> @param XP station point x-gradient sets
    +
    45 C> @param YP station point y-gradient sets
    +
    46 C>
    +
    47 C> @author Iredell @date 96-02-29
    +
    48  SUBROUTINE sptgptd(IROMB,MAXWV,KMAX,NMAX,
    +
    49  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
    +
    50  & RLAT,RLON,WAVE,XP,YP)
    +
    51 
    +
    52  REAL RLAT(*),RLON(*),WAVE(*),XP(*),YP(*)
    +
    53  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    54  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    55  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    56  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    57  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    58  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    59 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    60 C CALCULATE PRELIMINARY CONSTANTS
    +
    61  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    62  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    63  mdim=2*mx+1
    +
    64  kw=kwskip
    +
    65  IF(kw.EQ.0) kw=2*mx
    +
    66 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    67 C CALCULATE STATION FIELDS
    +
    68 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    69  DO k=1,kmax
    +
    70  kws=(k-1)*kw
    +
    71  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
    +
    72  wz(1:2*mx,k)=0.
    +
    73  ENDDO
    +
    74  CALL sptgptv(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    75  & rlat,rlon,wd,wz,xp,yp)
    +
    76 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    77  END
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptgptd(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, XP, YP)
    This subprogram performs a spherical transform from spectral coefficients of scalar fields to specifi...
    Definition: sptgptd.f:51
    +
    subroutine sptgptv(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgptv.f:54
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptsd_8f.html b/ver-5.1.0/sptgptsd_8f.html new file mode 100644 index 00000000..f1b24209 --- /dev/null +++ b/ver-5.1.0/sptgptsd_8f.html @@ -0,0 +1,266 @@ + + + + + + + +NCEPLIBS-ip: sptgptsd.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgptsd.f File Reference
    +
    +
    + +

    Transform spectral scalar to station points. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgptsd (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP, XP, YP)
     This subprogram performs a spherical transform from spectral coefficients of scalar quantities to specified sets of station point values and their gradients on the globe. More...
     
    +

    Detailed Description

    +

    Transform spectral scalar to station points.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Openmp directives inserted.
    1999-08-18 Iredell Openmp directive typo fixed.
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptgptsd.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgptsd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgptsd ( IROMB,
     MAXWV,
     KMAX,
     NMAX,
     KWSKIP,
     KGSKIP,
     NRSKIP,
     NGSKIP,
    real, dimension(*) RLAT,
    real, dimension(*) RLON,
    real, dimension(*) WAVE,
    real, dimension(*) GP,
    real, dimension(*) XP,
    real, dimension(*) YP 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    KMAXnumber of fields to transform.
    NMAXnumber of station points to return
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPskip number between station point sets (defaults to NMAX if KGSKIP=0)
    NRSKIPskip number between station lats and lons (defaults to 1 if NRSKIP=0)
    NGSKIPskip number between station points (defaults to 1 if NGSKIP=0)
    RLATstation latitudes in degrees
    RLONstation longitudes in degrees
    WAVEwave fields
    GPstation point sets
    XPstation point x-gradient sets
    YPstation point y-gradient sets
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 52 of file sptgptsd.f.

    + +

    References spfftpt(), spgradx(), spgrady(), splegend(), spsynth(), and spwget().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptsd_8f.js b/ver-5.1.0/sptgptsd_8f.js new file mode 100644 index 00000000..ccdb5de0 --- /dev/null +++ b/ver-5.1.0/sptgptsd_8f.js @@ -0,0 +1,4 @@ +var sptgptsd_8f = +[ + [ "sptgptsd", "sptgptsd_8f.html#ad3ab15089a57b493cc74443ea3b3d88f", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgptsd_8f_source.html b/ver-5.1.0/sptgptsd_8f_source.html new file mode 100644 index 00000000..dc78dd3d --- /dev/null +++ b/ver-5.1.0/sptgptsd_8f_source.html @@ -0,0 +1,236 @@ + + + + + + + +NCEPLIBS-ip: sptgptsd.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgptsd.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral scalar to station points.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 C>
    +
    5 C> ### Program History Log
    +
    6 C> Date | Programmer | Comments
    +
    7 C> -----|------------|---------
    +
    8 C> 96-02-29 | Iredell | Initial.
    +
    9 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    10 C> 1999-08-18 | Iredell | Openmp directive typo fixed.
    +
    11 C>
    +
    12 C> @author Iredell @date 96-02-29
    +
    13 
    +
    14 C> This subprogram performs a spherical transform
    +
    15 C> from spectral coefficients of scalar quantities
    +
    16 C> to specified sets of station point values
    +
    17 C> and their gradients on the globe.
    +
    18 C>
    +
    19 C> The wave-space can be either triangular or rhomboidal.
    +
    20 C>
    +
    21 C> The wave and point fields may have general indexing,
    +
    22 C> but each wave field is in sequential 'IBM order',
    +
    23 C> i.e. with zonal wavenumber as the slower index.
    +
    24 C>
    +
    25 C> The transforms are all multiprocessed over stations.
    +
    26 C>
    +
    27 C> Transform several fields at a time to improve vectorization.
    +
    28 C>
    +
    29 C> Subprogram can be called from a multiprocessing environment.
    +
    30 C>
    +
    31 C> @param IROMB spectral domain shape
    +
    32 C> (0 for triangular, 1 for rhomboidal)
    +
    33 C> @param MAXWV spectral truncation
    +
    34 C> @param KMAX number of fields to transform.
    +
    35 C> @param NMAX number of station points to return
    +
    36 C> @param KWSKIP skip number between wave fields
    +
    37 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    38 C> @param KGSKIP skip number between station point sets
    +
    39 C> (defaults to NMAX if KGSKIP=0)
    +
    40 C> @param NRSKIP skip number between station lats and lons
    +
    41 C> (defaults to 1 if NRSKIP=0)
    +
    42 C> @param NGSKIP skip number between station points
    +
    43 C> (defaults to 1 if NGSKIP=0)
    +
    44 C> @param RLAT station latitudes in degrees
    +
    45 C> @param RLON station longitudes in degrees
    +
    46 C> @param WAVE wave fields
    +
    47 C> @param GP station point sets
    +
    48 C> @param XP station point x-gradient sets
    +
    49 C> @param YP station point y-gradient sets
    +
    50 C>
    +
    51 C> @author Iredell @date 96-02-29
    +
    52  SUBROUTINE sptgptsd(IROMB,MAXWV,KMAX,NMAX,
    +
    53  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
    +
    54  & RLAT,RLON,WAVE,GP,XP,YP)
    +
    55 
    +
    56  REAL RLAT(*),RLON(*),WAVE(*)
    +
    57  REAL GP(*),XP(*),YP(*)
    +
    58  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    59  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    60  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    61  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    62  INTEGER MP(2*KMAX)
    +
    63  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2*KMAX)
    +
    64  REAL WTOP(2*(MAXWV+1),2*KMAX)
    +
    65  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    66  REAL F(2*MAXWV+2,2,3*KMAX),G(3*KMAX)
    +
    67  parameter(pi=3.14159265358979)
    +
    68 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    69 C CALCULATE PRELIMINARY CONSTANTS
    +
    70  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    71  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    72  mxtop=maxwv+1
    +
    73  mdim=2*mx
    +
    74  idim=2*maxwv+2
    +
    75  kw=kwskip
    +
    76  kg=kgskip
    +
    77  nr=nrskip
    +
    78  ng=ngskip
    +
    79  IF(kw.EQ.0) kw=2*mx
    +
    80  IF(kg.EQ.0) kg=nmax
    +
    81  IF(nr.EQ.0) nr=1
    +
    82  IF(ng.EQ.0) ng=1
    +
    83  mp(1:kmax)=10
    +
    84  mp(kmax+1:2*kmax)=1
    +
    85 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    86 C CALCULATE SPECTRAL WINDS
    +
    87 C$OMP PARALLEL DO PRIVATE(KWS,KS,KY)
    +
    88  DO k=1,kmax
    +
    89  kws=(k-1)*kw
    +
    90  ks=0*kmax+k
    +
    91  ky=1*kmax+k
    +
    92  DO i=1,2*mx
    +
    93  w(i,ks)=wave(kws+i)
    +
    94  ENDDO
    +
    95  DO i=1,2*mxtop
    +
    96  wtop(i,ks)=0
    +
    97  ENDDO
    +
    98  CALL spgrady(iromb,maxwv,enn1,eon,eontop,
    +
    99  & wave(kws+1),w(1,ky),wtop(1,ky))
    +
    100  ENDDO
    +
    101 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    102 C CALCULATE STATION FIELDS
    +
    103 C$OMP PARALLEL DO PRIVATE(KS,KY,KX,SLAT1,CLAT1)
    +
    104 C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
    +
    105  DO n=1,nmax
    +
    106  IF(abs(rlat((n-1)*nr+1)).GE.89.9995) THEN
    +
    107  slat1=sign(1.,rlat((n-1)*nr+1))
    +
    108  clat1=0.
    +
    109  ELSE
    +
    110  slat1=sin(pi/180*rlat((n-1)*nr+1))
    +
    111  clat1=cos(pi/180*rlat((n-1)*nr+1))
    +
    112  ENDIF
    +
    113  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    114  & pln,plntop)
    +
    115  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
    +
    116  & clat1,pln,plntop,mp,w,wtop,f)
    +
    117  CALL spgradx(maxwv,idim,kmax,mp,clat1,f(1,1,1),f(1,1,2*kmax+1))
    +
    118  CALL spfftpt(maxwv,1,idim,1,3*kmax,rlon((n-1)*nr+1),f,g)
    +
    119  DO k=1,kmax
    +
    120  ks=0*kmax+k
    +
    121  ky=1*kmax+k
    +
    122  kx=2*kmax+k
    +
    123  nk=(n-1)*ng+(k-1)*kg+1
    +
    124  gp(nk)=g(ks)
    +
    125  xp(nk)=g(kx)
    +
    126  yp(nk)=g(ky)
    +
    127  ENDDO
    +
    128  ENDDO
    +
    129 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    130  END
    +
    subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
    This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
    Definition: spfftpt.f:23
    +
    subroutine spgradx(M, INCW, KMAX, MP, CLAT, W, WX)
    This subprogram computes the x-gradient of fields in complex Fourier space.
    Definition: spgradx.f:38
    +
    subroutine spgrady(I, M, ENN1, EON, EONTOP, Q, QDY, QDYTOP)
    Computes the horizontal vector y-gradient of a scalar field in spectral space.
    Definition: spgrady.f:32
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgptsd(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP, XP, YP)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition: sptgptsd.f:55
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptv_8f.html b/ver-5.1.0/sptgptv_8f.html new file mode 100644 index 00000000..ff0ef75b --- /dev/null +++ b/ver-5.1.0/sptgptv_8f.html @@ -0,0 +1,268 @@ + + + + + + + +NCEPLIBS-ip: sptgptv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgptv.f File Reference
    +
    +
    + +

    Transform spectral vector to station points. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgptv (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
     This subprogram performs a spherical transform from spectral coefficients of divergences and curls to specified sets of station point vectors on the globe. More...
     
    +

    Detailed Description

    +

    Transform spectral vector to station points.

    +

    +Program History Log

    + + + + + + + + + + + +
    Date Programmer Comments
    96-02-29 IREDELL Initial
    1998-12-15 IREDELL Openmp directives inserted
    1999-08-18 IREDELL Openmp directive typo fixed
    2003-06-30 IREDELL use spfftpt()
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptgptv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgptv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgptv ( IROMB,
     MAXWV,
     KMAX,
     NMAX,
     KWSKIP,
     KGSKIP,
     NRSKIP,
     NGSKIP,
    real, dimension(*) RLAT,
    real, dimension(*) RLON,
    real, dimension(*) WAVED,
    real, dimension(*) WAVEZ,
    real, dimension(*) UP,
    real, dimension(*) VP 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    KMAXnumber of fields to transform.
    NMAXnumber of station points to return
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    KGSKIPskip number between station point sets (defaults to NMAX IF KGSKIP=0)
    NRSKIPskip number between station lats and lons (defaults to 1 if NRSKIP=0)
    NGSKIPskip number between station points (defaults to 1 if NGSKIP=0)
    RLATstation latitudes in degrees
    RLONstation longitudes in degrees
    WAVEDwave divergence fields
    WAVEZwave vorticity fields
    UPstation point u-wind sets
    VPstation point v-wind sets
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition at line 51 of file sptgptv.f.

    + +

    References spdz2uv(), spfftpt(), splegend(), spsynth(), and spwget().

    + +

    Referenced by sptgptd(), and sptrungv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptv_8f.js b/ver-5.1.0/sptgptv_8f.js new file mode 100644 index 00000000..59a8e5b1 --- /dev/null +++ b/ver-5.1.0/sptgptv_8f.js @@ -0,0 +1,4 @@ +var sptgptv_8f = +[ + [ "sptgptv", "sptgptv_8f.html#a9af8a22564d132a887a5237f30710f13", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgptv_8f_source.html b/ver-5.1.0/sptgptv_8f_source.html new file mode 100644 index 00000000..fb9575ed --- /dev/null +++ b/ver-5.1.0/sptgptv_8f_source.html @@ -0,0 +1,227 @@ + + + + + + + +NCEPLIBS-ip: sptgptv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgptv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral vector to station points.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | IREDELL | Initial
    +
    8 C> 1998-12-15 | IREDELL | Openmp directives inserted
    +
    9 C> 1999-08-18 | IREDELL | Openmp directive typo fixed
    +
    10 C> 2003-06-30 | IREDELL | use spfftpt()
    +
    11 C>
    +
    12 C> @author IREDELL @date 96-02-29
    +
    13 
    +
    14 C> This subprogram performs a spherical transform
    +
    15 C> from spectral coefficients of divergences and curls
    +
    16 C> to specified sets of station point vectors on the globe.
    +
    17 C>
    +
    18 C> The wave-space can be either triangular or rhomboidal.
    +
    19 C>
    +
    20 C> The wave and point fields may have general indexing,
    +
    21 C> but each wave field is in sequential 'IBM order',
    +
    22 C> i.e. with zonal wavenumber as the slower index.
    +
    23 C>
    +
    24 C> The transforms are all multiprocessed over stations.
    +
    25 C>
    +
    26 C> Transform several fields at a time to improve vectorization.
    +
    27 C>
    +
    28 C> Subprogram can be called from a multiprocessing environment.
    +
    29 C>
    +
    30 C> @param IROMB spectral domain shape
    +
    31 c> (0 for triangular, 1 for rhomboidal)
    +
    32 C> @param MAXWV spectral truncation
    +
    33 C> @param KMAX number of fields to transform.
    +
    34 C> @param NMAX number of station points to return
    +
    35 C> @param KWSKIP skip number between wave fields
    +
    36 c> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    +
    37 C> @param KGSKIP skip number between station point sets
    +
    38 c> (defaults to NMAX IF KGSKIP=0)
    +
    39 C> @param NRSKIP skip number between station lats and lons
    +
    40 c> (defaults to 1 if NRSKIP=0)
    +
    41 C> @param NGSKIP skip number between station points
    +
    42 c> (defaults to 1 if NGSKIP=0)
    +
    43 C> @param RLAT station latitudes in degrees
    +
    44 C> @param RLON station longitudes in degrees
    +
    45 C> @param WAVED wave divergence fields
    +
    46 C> @param WAVEZ wave vorticity fields
    +
    47 C> @param UP station point u-wind sets
    +
    48 C> @param VP station point v-wind sets
    +
    49 C>
    +
    50 C> @author IREDELL @date 96-02-29
    +
    51  SUBROUTINE sptgptv(IROMB,MAXWV,KMAX,NMAX,
    +
    52  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
    +
    53  & RLAT,RLON,WAVED,WAVEZ,UP,VP)
    +
    54 
    +
    55  REAL RLAT(*),RLON(*),WAVED(*),WAVEZ(*),UP(*),VP(*)
    +
    56  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    57  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    58  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    59  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    60  INTEGER MP(2*KMAX)
    +
    61  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,2*KMAX)
    +
    62  REAL WTOP(2*(MAXWV+1),2*KMAX)
    +
    63  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    64  REAL F(2*MAXWV+3,2,2*KMAX)
    +
    65  REAL G(2*KMAX)
    +
    66  parameter(pi=3.14159265358979)
    +
    67 
    +
    68 C CALCULATE PRELIMINARY CONSTANTS
    +
    69  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    70  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    71  mxtop=maxwv+1
    +
    72  mdim=2*mx+1
    +
    73  idim=2*maxwv+3
    +
    74  kw=kwskip
    +
    75  kg=kgskip
    +
    76  nr=nrskip
    +
    77  ng=ngskip
    +
    78  IF(kw.EQ.0) kw=2*mx
    +
    79  IF(kg.EQ.0) kg=nmax
    +
    80  IF(nr.EQ.0) nr=1
    +
    81  IF(ng.EQ.0) ng=1
    +
    82  mp=1
    +
    83 
    +
    84 C CALCULATE SPECTRAL WINDS
    +
    85 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    86  DO k=1,kmax
    +
    87  kws=(k-1)*kw
    +
    88  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
    +
    89  & waved(kws+1),wavez(kws+1),
    +
    90  & w(1,k),w(1,kmax+k),wtop(1,k),wtop(1,kmax+k))
    +
    91  ENDDO
    +
    92 
    +
    93 C CALCULATE STATION FIELDS
    +
    94 C$OMP PARALLEL DO PRIVATE(KU,KV,RADLAT,SLAT1,CLAT1)
    +
    95 C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
    +
    96  DO n=1,nmax
    +
    97  radlat=pi/180*rlat((n-1)*nr+1)
    +
    98  IF(rlat((n-1)*nr+1).GE.89.9995) THEN
    +
    99  slat1=1.
    +
    100  clat1=0.
    +
    101  ELSEIF(rlat((n-1)*nr+1).LE.-89.9995) THEN
    +
    102  slat1=-1.
    +
    103  clat1=0.
    +
    104  ELSE
    +
    105  slat1=sin(radlat)
    +
    106  clat1=cos(radlat)
    +
    107  ENDIF
    +
    108  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    109  & pln,plntop)
    +
    110  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,2*kmax,
    +
    111  & clat1,pln,plntop,mp,w,wtop,f)
    +
    112  CALL spfftpt(maxwv,1,2*maxwv+3,1,2*kmax,rlon((n-1)*nr+1),f,g)
    +
    113  DO k=1,kmax
    +
    114  ku=k
    +
    115  kv=k+kmax
    +
    116  nk=(n-1)*ng+(k-1)*kg+1
    +
    117  up(nk)=g(ku)
    +
    118  vp(nk)=g(kv)
    +
    119  ENDDO
    +
    120  ENDDO
    +
    121 
    +
    122  END
    +
    subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
    Computes the wind components from divergence and vorticity in spectral space.
    Definition: spdz2uv.f:49
    +
    subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
    This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
    Definition: spfftpt.f:23
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgptv(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgptv.f:54
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptvd_8f.html b/ver-5.1.0/sptgptvd_8f.html new file mode 100644 index 00000000..6fb47a35 --- /dev/null +++ b/ver-5.1.0/sptgptvd_8f.html @@ -0,0 +1,313 @@ + + + + + + + +NCEPLIBS-ip: sptgptvd.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptgptvd.f File Reference
    +
    +
    + +

    Transform spectral vector to station points. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptgptvd (IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, DP, ZP, UP, VP, UXP, VXP, UYP, VYP)
     This subprogram performs a spherical transform from spectral coefficients of divergences and curls to specified sets of station point vectors and their gradients on the globe. More...
     
    +

    Detailed Description

    +

    Transform spectral vector to station points.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Openmp directives inserted.
    1999-08-18 Iredell Openmp directive typo fixed.
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptgptvd.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptgptvd()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptgptvd ( IROMB,
     MAXWV,
     KMAX,
     NMAX,
     KWSKIP,
     KGSKIP,
     NRSKIP,
     NGSKIP,
    real, dimension(*) RLAT,
    real, dimension(*) RLON,
    real, dimension(*) WAVED,
    real, dimension(*) WAVEZ,
    real, dimension(*) DP,
    real, dimension(*) ZP,
    real, dimension(*) UP,
    real, dimension(*) VP,
    real, dimension(*) UXP,
    real, dimension(*) VXP,
    real, dimension(*) UYP,
    real, dimension(*) VYP 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    KMAXnumber of fields to transform.
    NMAXnumber of station points to return
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    KGSKIPskip number between station point sets (defaults to NMAX if KGSKIP=0)
    NRSKIPskip number between station lats and lons (defaults to 1 if NRSKIP=0)
    NGSKIPskip number between station points (defaults to 1 if NGSKIP=0)
    RLATstation latitudes in degrees
    RLONstation longitudes in degrees
    WAVEDwave divergence fields
    WAVEZwave vorticity fields
    DPstation point divergence sets
    ZPstation point vorticity sets
    UPstation point u-wind sets
    VPstation point v-wind sets
    UXPstation point u-wind x-gradient sets
    VXPstation point v-wind x-gradient sets
    UYPstation point u-wind y-gradient sets
    VYPstation point v-wind y-gradient sets
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 66 of file sptgptvd.f.

    + +

    References spdz2uv(), spfftpt(), spgradx(), splegend(), spsynth(), and spwget().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptgptvd_8f.js b/ver-5.1.0/sptgptvd_8f.js new file mode 100644 index 00000000..9a2bc046 --- /dev/null +++ b/ver-5.1.0/sptgptvd_8f.js @@ -0,0 +1,4 @@ +var sptgptvd_8f = +[ + [ "sptgptvd", "sptgptvd_8f.html#ae03c6c76cad685ae1ed32d74bcba6753", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptgptvd_8f_source.html b/ver-5.1.0/sptgptvd_8f_source.html new file mode 100644 index 00000000..53aeaf77 --- /dev/null +++ b/ver-5.1.0/sptgptvd_8f_source.html @@ -0,0 +1,266 @@ + + + + + + + +NCEPLIBS-ip: sptgptvd.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptgptvd.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Transform spectral vector to station points.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | Iredell | Initial.
    +
    8 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    9 C> 1999-08-18 | Iredell | Openmp directive typo fixed.
    +
    10 C>
    +
    11 C> @author Iredell @date 96-02-29
    +
    12 
    +
    13 C> This subprogram performs a spherical transform
    +
    14 C> from spectral coefficients of divergences and curls
    +
    15 C> to specified sets of station point vectors and their
    +
    16 C> gradients on the globe.
    +
    17 C>
    +
    18 C> <pre>
    +
    19 C> DP=(D(UP)/DLON+D(VP*CLAT)/DLAT)/(R*CLAT)
    +
    20 C> ZP=(D(VP)/DLON-D(UP*CLAT)/DLAT)/(R*CLAT)
    +
    21 C> UXP=D(UP*CLAT)/DLON/(R*CLAT)
    +
    22 C> VXP=D(VP*CLAT)/DLON/(R*CLAT)
    +
    23 C> UYP=D(UP*CLAT)/DLAT/R
    +
    24 C> VYP=D(VP*CLAT)/DLAT/R
    +
    25 C> </pre>
    +
    26 C>
    +
    27 C> The wave-space can be either triangular or rhomboidal.
    +
    28 C>
    +
    29 C> The wave and point fields may have general indexing,
    +
    30 C> but each wave field is in sequential 'IBM order',
    +
    31 C> i.e. with zonal wavenumber as the slower index.
    +
    32 C>
    +
    33 C> The transforms are all multiprocessed over stations.
    +
    34 C>
    +
    35 C> Transform several fields at a time to improve vectorization.
    +
    36 C>
    +
    37 C> Subprogram can be called from a multiprocessing environment.
    +
    38 C>
    +
    39 C> @param IROMB spectral domain shape
    +
    40 C> (0 for triangular, 1 for rhomboidal)
    +
    41 C> @param MAXWV spectral truncation
    +
    42 C> @param KMAX number of fields to transform.
    +
    43 C> @param NMAX number of station points to return
    +
    44 C> @param KWSKIP skip number between wave fields
    +
    45 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    +
    46 C> @param KGSKIP skip number between station point sets
    +
    47 C> (defaults to NMAX if KGSKIP=0)
    +
    48 C> @param NRSKIP skip number between station lats and lons
    +
    49 C> (defaults to 1 if NRSKIP=0)
    +
    50 C> @param NGSKIP skip number between station points
    +
    51 C> (defaults to 1 if NGSKIP=0)
    +
    52 C> @param RLAT station latitudes in degrees
    +
    53 C> @param RLON station longitudes in degrees
    +
    54 C> @param WAVED wave divergence fields
    +
    55 C> @param WAVEZ wave vorticity fields
    +
    56 C> @param DP station point divergence sets
    +
    57 C> @param ZP station point vorticity sets
    +
    58 C> @param UP station point u-wind sets
    +
    59 C> @param VP station point v-wind sets
    +
    60 C> @param UXP station point u-wind x-gradient sets
    +
    61 C> @param VXP station point v-wind x-gradient sets
    +
    62 C> @param UYP station point u-wind y-gradient sets
    +
    63 C> @param VYP station point v-wind y-gradient sets
    +
    64 C>
    +
    65 C> @author Iredell @date 96-02-29
    +
    66  SUBROUTINE sptgptvd(IROMB,MAXWV,KMAX,NMAX,
    +
    67  & KWSKIP,KGSKIP,NRSKIP,NGSKIP,
    +
    68  & RLAT,RLON,WAVED,WAVEZ,
    +
    69  & DP,ZP,UP,VP,UXP,VXP,UYP,VYP)
    +
    70 
    +
    71  REAL RLAT(*),RLON(*),WAVED(*),WAVEZ(*)
    +
    72  REAL DP(*),ZP(*),UP(*),VP(*),UXP(*),VXP(*),UYP(*),VYP(*)
    +
    73  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    74  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    75  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    76  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    77  INTEGER MP(4*KMAX)
    +
    78  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,4*KMAX)
    +
    79  REAL WTOP(2*(MAXWV+1),4*KMAX)
    +
    80  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),PLNTOP(MAXWV+1)
    +
    81  REAL F(2*MAXWV+2,2,6*KMAX),G(6*KMAX)
    +
    82  parameter(pi=3.14159265358979)
    +
    83 
    +
    84 C CALCULATE PRELIMINARY CONSTANTS
    +
    85  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    86  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    87  mxtop=maxwv+1
    +
    88  mdim=2*mx
    +
    89  idim=2*maxwv+2
    +
    90  kw=kwskip
    +
    91  kg=kgskip
    +
    92  nr=nrskip
    +
    93  ng=ngskip
    +
    94  IF(kw.EQ.0) kw=2*mx
    +
    95  IF(kg.EQ.0) kg=nmax
    +
    96  IF(nr.EQ.0) nr=1
    +
    97  IF(ng.EQ.0) ng=1
    +
    98  mp(1:2*kmax)=0
    +
    99  mp(2*kmax+1:4*kmax)=1
    +
    100 
    +
    101 C CALCULATE SPECTRAL WINDS
    +
    102 C$OMP PARALLEL DO PRIVATE(KWS,KD,KZ,KU,KV)
    +
    103  DO k=1,kmax
    +
    104  kws=(k-1)*kw
    +
    105  kd=0*kmax+k
    +
    106  kz=1*kmax+k
    +
    107  ku=2*kmax+k
    +
    108  kv=3*kmax+k
    +
    109  DO i=1,2*mx
    +
    110  w(i,kd)=waved(kws+i)
    +
    111  w(i,kz)=wavez(kws+i)
    +
    112  ENDDO
    +
    113  DO i=1,2*mxtop
    +
    114  wtop(i,kd)=0
    +
    115  wtop(i,kz)=0
    +
    116  ENDDO
    +
    117  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
    +
    118  & waved(kws+1),wavez(kws+1),
    +
    119  & w(1,ku),w(1,kv),wtop(1,ku),wtop(1,kv))
    +
    120  ENDDO
    +
    121 
    +
    122 C CALCULATE STATION FIELDS
    +
    123 C$OMP PARALLEL DO PRIVATE(KD,KZ,KU,KV,KUX,KVX,SLAT1,CLAT1)
    +
    124 C$OMP& PRIVATE(PLN,PLNTOP,F,G,NK)
    +
    125  DO n=1,nmax
    +
    126  ku=2*kmax+1
    +
    127  kux=4*kmax+1
    +
    128  IF(abs(rlat((n-1)*nr+1)).GE.89.9995) THEN
    +
    129  slat1=sign(1.,rlat((n-1)*nr+1))
    +
    130  clat1=0.
    +
    131  ELSE
    +
    132  slat1=sin(pi/180*rlat((n-1)*nr+1))
    +
    133  clat1=cos(pi/180*rlat((n-1)*nr+1))
    +
    134  ENDIF
    +
    135  CALL splegend(iromb,maxwv,slat1,clat1,eps,epstop,
    +
    136  & pln,plntop)
    +
    137  CALL spsynth(iromb,maxwv,2*maxwv,idim,mdim,2*mxtop,4*kmax,
    +
    138  & clat1,pln,plntop,mp,w,wtop,f)
    +
    139  CALL spgradx(maxwv,idim,2*kmax,mp(2*kmax+1),clat1,
    +
    140  & f(1,1,2*kmax+1),f(1,1,4*kmax+1))
    +
    141  CALL spfftpt(maxwv,1,idim,1,6*kmax,rlon((n-1)*nr+1),f,g)
    +
    142  DO k=1,kmax
    +
    143  kd=0*kmax+k
    +
    144  kz=1*kmax+k
    +
    145  ku=2*kmax+k
    +
    146  kv=3*kmax+k
    +
    147  kux=4*kmax+k
    +
    148  kvx=5*kmax+k
    +
    149  nk=(n-1)*ng+(k-1)*kg+1
    +
    150  dp(nk)=g(kd)
    +
    151  zp(nk)=g(kz)
    +
    152  up(nk)=g(ku)
    +
    153  vp(nk)=g(kv)
    +
    154  uxp(nk)=g(kux)
    +
    155  vxp(nk)=g(kvx)
    +
    156  uyp(nk)=g(kvx)-clat1*g(kz)
    +
    157  vyp(nk)=clat1*g(kd)-g(kux)
    +
    158  ENDDO
    +
    159  ENDDO
    +
    160  END
    +
    subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
    Computes the wind components from divergence and vorticity in spectral space.
    Definition: spdz2uv.f:49
    +
    subroutine spfftpt(M, N, INCW, INCG, KMAX, RLON, W, G)
    This subprogram computes a slow Fourier transform from Fourier space to a set of gridpoints.
    Definition: spfftpt.f:23
    +
    subroutine spgradx(M, INCW, KMAX, MP, CLAT, W, WX)
    This subprogram computes the x-gradient of fields in complex Fourier space.
    Definition: spgradx.f:38
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine sptgptvd(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, DP, ZP, UP, VP, UXP, VXP, UYP, VYP)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgptvd.f:70
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptran_8f.html b/ver-5.1.0/sptran_8f.html new file mode 100644 index 00000000..9fb66fbb --- /dev/null +++ b/ver-5.1.0/sptran_8f.html @@ -0,0 +1,323 @@ + + + + + + + +NCEPLIBS-ip: sptran.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptran.f File Reference
    +
    +
    + +

    Perform a scalar spherical transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptran (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
     This subprogram performs a spherical transform between spectral coefficients of scalar quantities and fields on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform a scalar spherical transform.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-02-29 IREDELL Initial
    1998-12-15 IREDELL Generic fft used, openmp directives inserted
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptran.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptran()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptran ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     KMAX,
     IPRIME,
     ISKIP,
     JNSKIP,
     JSSKIP,
     KWSKIP,
     KGSKIP,
     JBEG,
     JEND,
     JCPU,
    real, dimension(*) WAVE,
    real, dimension(*) GRIDN,
    real, dimension(*) GRIDS,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid,
    • +
    • IDRT=0 for equally-spaced grid including poles,
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes.
    JMAXnumber of latitudes.
    KMAXnumber of fields to transform.
    IPRIMElongitude index for the prime meridian. (defaults to 1 if IPRIME=0)
    ISKIPskip number between longitudes (defaults to 1 if ISKIP=0)
    JNSKIPskip number between n.h. latitudes from north (defaults to imax if JNSKIP=0)
    JSSKIPskip number between s.h. latitudes from south (defaults to -imax if JSSKIP=0)
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    KGSKIPskip number between grid fields (defaults to IMAX*JMAX IF KGSKIP=0)
    JBEGlatitude index (from pole) to begin transform (defaults to 1 if JBEG=0) (if JBEG=0 and IDIR<0, wave is zeroed before transform)
    JENDlatitude index (from pole) to end transform (defaults to (JMAX+1)/2 IF JEND=0)
    JCPUnumber of cpus over which to multiprocess
    [out]WAVEwave fields if IDIR>0
    [out]gridnn.h. grid fields (starting at jbeg) if IDIR<0
    [out]gridss.h. grid fields (starting at jbeg) if IDIR<0
    IDIRtransform flag (idir>0 for wave to grid, idir<0 for grid to wave)
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition at line 84 of file sptran.f.

    + +

    References ncpus(), and sptranf().

    + +

    Referenced by sptrun(), sptrund(), sptrung(), sptrunl(), sptrunm(), sptruns(), and sptrunv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptran_8f.js b/ver-5.1.0/sptran_8f.js new file mode 100644 index 00000000..ec95a0ac --- /dev/null +++ b/ver-5.1.0/sptran_8f.js @@ -0,0 +1,4 @@ +var sptran_8f = +[ + [ "sptran", "sptran_8f.html#af7610e42f0dcd199b8cf80f851dcfed0", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptran_8f_source.html b/ver-5.1.0/sptran_8f_source.html new file mode 100644 index 00000000..88dedaa8 --- /dev/null +++ b/ver-5.1.0/sptran_8f_source.html @@ -0,0 +1,224 @@ + + + + + + + +NCEPLIBS-ip: sptran.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptran.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a scalar spherical transform.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | IREDELL | Initial
    +
    8 C> 1998-12-15 | IREDELL | Generic fft used, openmp directives inserted
    +
    9 C>
    +
    10 C> @author IREDELL @date 96-02-29
    +
    11 
    +
    12 C> This subprogram performs a spherical transform between spectral
    +
    13 C> coefficients of scalar quantities and fields on a global
    +
    14 C> cylindrical grid.
    +
    15 C>
    +
    16 C> The wave-space can be either triangular or
    +
    17 C> rhomboidal.
    +
    18 C>
    +
    19 C> The grid-space can be either an equally-spaced grid
    +
    20 C> (with or without pole points) or a Gaussian grid.
    +
    21 C>
    +
    22 C> The wave and grid fields may have general indexing,
    +
    23 C> but each wave field is in sequential 'IBM order',
    +
    24 C> i.e. with zonal wavenumber as the slower index.
    +
    25 C>
    +
    26 C> Transforms are done in latitude pairs for efficiency;
    +
    27 C> thus grid arrays for each hemisphere must be passed.
    +
    28 C> If so requested, just a subset of the latitude pairs
    +
    29 C> may be transformed in each invocation of the subprogram.
    +
    30 C>
    +
    31 C> The transforms are all multiprocessed over latitude except
    +
    32 C> the transform from Fourier to spectral is multiprocessed
    +
    33 C> over zonal wavenumber to ensure reproducibility.
    +
    34 C>
    +
    35 C> Transform several fields at a time to improve vectorization.
    +
    36 C> Subprogram can be called from a multiprocessing environment.
    +
    37 C>
    +
    38 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    39 C> DIMENSION |LINEAR |QUADRATIC
    +
    40 C> ----------------------- |--------- |-------------
    +
    41 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    42 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    43 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    44 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    45 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    46 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    47 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    48 C>
    +
    49 C> @param IROMB spectral domain shape
    +
    50 c> (0 for triangular, 1 for rhomboidal)
    +
    51 C> @param MAXWV spectral truncation
    +
    52 C> @param IDRT grid identifier
    +
    53 C> - IDRT=4 for Gaussian grid,
    +
    54 C> - IDRT=0 for equally-spaced grid including poles,
    +
    55 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    56 C> @param IMAX even number of longitudes.
    +
    57 C> @param JMAX number of latitudes.
    +
    58 C> @param KMAX number of fields to transform.
    +
    59 C> @param IPRIME longitude index for the prime meridian.
    +
    60 C> (defaults to 1 if IPRIME=0)
    +
    61 C> @param ISKIP skip number between longitudes
    +
    62 C> (defaults to 1 if ISKIP=0)
    +
    63 C> @param JNSKIP skip number between n.h. latitudes from north
    +
    64 C> (defaults to imax if JNSKIP=0)
    +
    65 C> @param JSSKIP skip number between s.h. latitudes from south
    +
    66 c> (defaults to -imax if JSSKIP=0)
    +
    67 C> @param KWSKIP skip number between wave fields
    +
    68 c> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    +
    69 C> @param KGSKIP skip number between grid fields
    +
    70 c> (defaults to IMAX*JMAX IF KGSKIP=0)
    +
    71 C> @param JBEG latitude index (from pole) to begin transform
    +
    72 c> (defaults to 1 if JBEG=0)
    +
    73 C> (if JBEG=0 and IDIR<0, wave is zeroed before transform)
    +
    74 C> @param JEND latitude index (from pole) to end transform
    +
    75 c> (defaults to (JMAX+1)/2 IF JEND=0)
    +
    76 C> @param JCPU number of cpus over which to multiprocess
    +
    77 C> @param[out] WAVE wave fields if IDIR>0
    +
    78 C> @param[out] gridn n.h. grid fields (starting at jbeg) if IDIR<0
    +
    79 C> @param[out] grids s.h. grid fields (starting at jbeg) if IDIR<0
    +
    80 C> @param IDIR transform flag
    +
    81 C> (idir>0 for wave to grid, idir<0 for grid to wave)
    +
    82 C>
    +
    83 C> @author IREDELL @date 96-02-29
    +
    84  SUBROUTINE sptran(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
    +
    85  & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
    +
    86  & JBEG,JEND,JCPU,
    +
    87  & WAVE,GRIDN,GRIDS,IDIR)
    +
    88 
    +
    89  REAL WAVE(*),GRIDN(*),GRIDS(*)
    +
    90 
    +
    91  MX=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    92  ip=iprime
    +
    93  is=iskip
    +
    94  jn=jnskip
    +
    95  js=jsskip
    +
    96  kw=kwskip
    +
    97  kg=kgskip
    +
    98  jb=jbeg
    +
    99  je=jend
    +
    100  jc=jcpu
    +
    101  IF(ip.EQ.0) ip=1
    +
    102  IF(is.EQ.0) is=1
    +
    103  IF(jn.EQ.0) jn=imax
    +
    104  IF(js.EQ.0) js=-jn
    +
    105  IF(kw.EQ.0) kw=2*mx
    +
    106  IF(kg.EQ.0) kg=imax*jmax
    +
    107  IF(jb.EQ.0) jb=1
    +
    108  IF(je.EQ.0) je=(jmax+1)/2
    +
    109  IF(jc.EQ.0) jc=ncpus()
    +
    110 
    +
    111  IF(idir.LT.0.AND.jbeg.EQ.0) THEN
    +
    112  DO k=1,kmax
    +
    113  kws=(k-1)*kw
    +
    114  wave(kws+1:kws+2*mx)=0
    +
    115  ENDDO
    +
    116  ENDIF
    +
    117 
    +
    118  CALL sptranf(iromb,maxwv,idrt,imax,jmax,kmax,
    +
    119  & ip,is,jn,js,kw,kg,jb,je,jc,
    +
    120  & wave,gridn,grids,idir)
    +
    121 
    +
    122  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptranf.f:77
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrand_8f.html b/ver-5.1.0/sptrand_8f.html new file mode 100644 index 00000000..d4338b9d --- /dev/null +++ b/ver-5.1.0/sptrand_8f.html @@ -0,0 +1,346 @@ + + + + + + + +NCEPLIBS-ip: sptrand.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrand.f File Reference
    +
    +
    + +

    Perform a gradient spherical transform. +More...

    + +

    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.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-02-29 IREDELL Initial
    1998-12-15 IREDELL openmp directives inserted
    +
    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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes.
    JMAXnumber of latitudes.
    KMAXnumber of fields to transform.
    IPRIMElongitude index for the prime meridian. (defaults to 1 if IPRIME=0)
    ISKIPskip number between longitudes (defaults to 1 if ISKIP=0)
    JNSKIPskip number between n.h. latitudes from north (defaults to IMAX if JNSKIP=0)
    JSSKIPskip number between s.h. latitudes from south (defaults to -IMAX if JSSKIP=0)
    KWSKIPskip number between wave fields (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    KGSKIPskip number between grid fields (defaults to IMAX*JMAX if KGSKIP=0)
    JBEGlatitude index (from pole) to begin transform (defaults to 1 if JBEG=0). If JBEG=0 and IDIR<0, wave is zeroed before transform.
    JENDlatitude index (from pole) to end transform (defaults to (JMAX+1)/2 if JEND=0)
    JCPUnumber of cpus over which to multiprocess
    [out]WAVEwave fields if IDIR>0
    [out]GRIDMNglobal means if IDIR<0
    [out]GRIDXNn.h. x-gradients (starting at JBEG) if IDIR<0
    [out]GRIDXSs.h. x-gradients (starting at JBEG) if IDIR<0 [GRIDX=(D(WAVE)/DLAM)/(CLAT*RERTH)]
    +
    [out]GRIDYNn.h. y-gradients (starting at JBEG) if IDIR<0
    [out]GRIDYSs.h. y-gradients (starting at JBEG) if IDIR<0 [GRIDY=(D(WAVE)/DPHI)/RERTH]
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 88 of file sptrand.f.

    + +

    References splaplac(), sptranv(), and spwget().

    + +

    Referenced by sptezd(), sptezmd(), and sptrund().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrand_8f.js b/ver-5.1.0/sptrand_8f.js new file mode 100644 index 00000000..c01144d7 --- /dev/null +++ b/ver-5.1.0/sptrand_8f.js @@ -0,0 +1,4 @@ +var sptrand_8f = +[ + [ "sptrand", "sptrand_8f.html#ae810abad32bcbdfb8345a30e50bcc1ef", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrand_8f_source.html b/ver-5.1.0/sptrand_8f_source.html new file mode 100644 index 00000000..5f90bd36 --- /dev/null +++ b/ver-5.1.0/sptrand_8f_source.html @@ -0,0 +1,253 @@ + + + + + + + +NCEPLIBS-ip: sptrand.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrand.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a gradient spherical transform.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | IREDELL | Initial
    +
    8 C> 1998-12-15 | IREDELL | openmp directives inserted
    +
    9 C>
    +
    10 C> @author Iredell @date 96-02-29
    +
    11 
    +
    12 C> This subprogram performs a spherical transform
    +
    13 C> between spectral coefficients of scalar fields
    +
    14 C> and their means and gradients on a global cylindrical grid.
    +
    15 C>
    +
    16 C> The wave-space can be either triangular or rhomboidal.
    +
    17 C>
    +
    18 C> The grid-space can be either an equally-spaced grid
    +
    19 C> (with or without pole points) or a Gaussian grid.
    +
    20 C>
    +
    21 C> The wave and grid fields may have general indexing,
    +
    22 C> but each wave field is in sequential 'IBM order',
    +
    23 C> i.e. with zonal wavenumber as the slower index.
    +
    24 C>
    +
    25 C> Transforms are done in latitude pairs for efficiency;
    +
    26 C> thus grid arrays for each hemisphere must be passed.
    +
    27 C> if so requested, just a subset of the latitude pairs
    +
    28 C> may be transformed in each invocation of the subprogram.
    +
    29 C>
    +
    30 C> The transforms are all multiprocessed over latitude except
    +
    31 C> the transform from Fourier to spectral is multiprocessed
    +
    32 C> over zonal wavenumber to ensure reproducibility.
    +
    33 C>
    +
    34 C> Transform several fields at a time to improve vectorization.
    +
    35 C>
    +
    36 C> Subprogram can be called from a multiprocessing environment.
    +
    37 C>
    +
    38 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    39 C> DIMENSION |LINEAR |QUADRATIC
    +
    40 C> ----------------------- |--------- |-------------
    +
    41 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    42 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    43 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    44 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    45 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    46 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    47 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    48 C>
    +
    49 C> @param IROMB spectral domain shape
    +
    50 C> (0 for triangular, 1 for rhomboidal)
    +
    51 C> @param MAXWV spectral truncation
    +
    52 C> @param IDRT grid identifier
    +
    53 C> - IDRT=4 for Gaussian grid
    +
    54 C> - IDRT=0 for equally-spaced grid including poles
    +
    55 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    56 C> @param IMAX even number of longitudes.
    +
    57 C> @param JMAX number of latitudes.
    +
    58 C> @param KMAX number of fields to transform.
    +
    59 C> @param IPRIME longitude index for the prime meridian.
    +
    60 C> (defaults to 1 if IPRIME=0)
    +
    61 C> @param ISKIP skip number between longitudes
    +
    62 C> (defaults to 1 if ISKIP=0)
    +
    63 C> @param JNSKIP skip number between n.h. latitudes from north
    +
    64 C> (defaults to IMAX if JNSKIP=0)
    +
    65 C> @param JSSKIP skip number between s.h. latitudes from south
    +
    66 C> (defaults to -IMAX if JSSKIP=0)
    +
    67 C> @param KWSKIP skip number between wave fields
    +
    68 C> (defaults to (MAXWV+1)*((IROMB+1)*MAXWV+2) if KWSKIP=0)
    +
    69 C> @param KGSKIP skip number between grid fields
    +
    70 C> (defaults to IMAX*JMAX if KGSKIP=0)
    +
    71 C> @param JBEG latitude index (from pole) to begin transform
    +
    72 C> (defaults to 1 if JBEG=0). If JBEG=0 and IDIR<0, wave is zeroed before transform.
    +
    73 C> @param JEND latitude index (from pole) to end transform
    +
    74 C> (defaults to (JMAX+1)/2 if JEND=0)
    +
    75 C> @param JCPU number of cpus over which to multiprocess
    +
    76 C> @param[out] WAVE wave fields if IDIR>0
    +
    77 C> @param[out] GRIDMN global means if IDIR<0
    +
    78 C> @param[out] GRIDXN n.h. x-gradients (starting at JBEG) if IDIR<0
    +
    79 C> @param[out] GRIDXS s.h. x-gradients (starting at JBEG) if IDIR<0
    +
    80 C> [GRIDX=(D(WAVE)/DLAM)/(CLAT*RERTH)]
    +
    81 C> @param[out] GRIDYN n.h. y-gradients (starting at JBEG) if IDIR<0
    +
    82 C> @param[out] GRIDYS s.h. y-gradients (starting at JBEG) if IDIR<0
    +
    83 C> [GRIDY=(D(WAVE)/DPHI)/RERTH]
    +
    84 C> @param IDIR transform flag
    +
    85 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    86 C>
    +
    87 C> @author Iredell @date 96-02-29
    +
    88  SUBROUTINE sptrand(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
    +
    89  & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
    +
    90  & JBEG,JEND,JCPU,
    +
    91  & WAVE,GRIDMN,GRIDXN,GRIDXS,GRIDYN,GRIDYS,IDIR)
    +
    92 
    +
    93  REAL WAVE(*),GRIDMN(KMAX),GRIDXN(*),GRIDXS(*),GRIDYN(*),GRIDYS(*)
    +
    94  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    95  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    96  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    97  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    98  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    99  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    100 
    +
    101 C SET PARAMETERS
    +
    102  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    103  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    104  mdim=2*mx+1
    +
    105  kw=kwskip
    +
    106  IF(kw.EQ.0) kw=2*mx
    +
    107 
    +
    108 C TRANSFORM WAVE TO GRID
    +
    109  IF(idir.GT.0) THEN
    +
    110 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    111  DO k=1,kmax
    +
    112  kws=(k-1)*kw
    +
    113  gridmn(k)=wave(kws+1)/sqrt(2.)
    +
    114  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),1)
    +
    115  wz(1:2*mx,k)=0.
    +
    116  ENDDO
    +
    117  CALL sptranv(iromb,maxwv,idrt,imax,jmax,kmax,
    +
    118  & iprime,iskip,jnskip,jsskip,mdim,kgskip,
    +
    119  & jbeg,jend,jcpu,
    +
    120  & wd,wz,gridxn,gridxs,gridyn,gridys,idir)
    +
    121 
    +
    122 C TRANSFORM GRID TO WAVE
    +
    123  ELSE
    +
    124 C$OMP PARALLEL DO
    +
    125  DO k=1,kmax
    +
    126  wd(1:2*mx,k)=0.
    +
    127  wz(1:2*mx,k)=0.
    +
    128  ENDDO
    +
    129  CALL sptranv(iromb,maxwv,idrt,imax,jmax,kmax,
    +
    130  & iprime,iskip,jnskip,jsskip,mdim,kgskip,
    +
    131  & jbeg,jend,jcpu,
    +
    132  & wd,wz,gridxn,gridxs,gridyn,gridys,idir)
    +
    133  IF(jbeg.EQ.0) THEN
    +
    134 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    135  DO k=1,kmax
    +
    136  kws=(k-1)*kw
    +
    137  CALL splaplac(iromb,maxwv,enn1,wave(kws+1),wd(1,k),-1)
    +
    138  wave(kws+1)=gridmn(k)*sqrt(2.)
    +
    139  ENDDO
    +
    140  ELSE
    +
    141 C$OMP PARALLEL DO PRIVATE(KWS)
    +
    142  DO k=1,kmax
    +
    143  kws=(k-1)*kw
    +
    144  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wd(1,k),-1)
    +
    145  wave(kws+1:kws+2*mx)=wave(kws+1:kws+2*mx)+wz(1:2*mx,k)
    +
    146  wave(kws+1)=gridmn(k)*sqrt(2.)
    +
    147  ENDDO
    +
    148  ENDIF
    +
    149  ENDIF
    +
    150  END
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    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 the...
    Definition: sptrand.f:92
    +
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranf0_8f.html b/ver-5.1.0/sptranf0_8f.html new file mode 100644 index 00000000..cf5dd981 --- /dev/null +++ b/ver-5.1.0/sptranf0_8f.html @@ -0,0 +1,290 @@ + + + + + + + +NCEPLIBS-ip: sptranf0.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptranf0.f File Reference
    +
    +
    + +

    Sptranf spectral initialization. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptranf0 (IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
     This subprogram performs an initialization for subprogram sptranf(). More...
     
    +

    Detailed Description

    +

    Sptranf spectral initialization.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptranf0.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptranf0()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptranf0 ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     JB,
     JE,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) EPS,
    real, dimension(maxwv+1) EPSTOP,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) ENN1,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) ELONN1,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) EON,
    real, dimension(maxwv+1) EONTOP,
    real(8), dimension(50000+4*imax) AFFT,
    real, dimension(jb:je) CLAT,
    real, dimension(jb:je) SLAT,
    real, dimension(jb:je) WLAT,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2,jb:je) PLN,
    real, dimension(maxwv+1,jb:je) PLNTOP 
    )
    +
    + +

    This subprogram performs an initialization for subprogram sptranf().

    +

    Use this subprogram outside the sptranf() family context at your own risk.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid,
    • +
    • IDRT=0 for equally-spaced grid including poles,
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes
    JMAXnumber of latitudes
    JBlatitude index (from pole) to begin transform
    JElatitude index (from pole) to end transform
    EPS
    EPSTOP
    ENN1
    ELONN1
    EON
    EONTOP
    AFFTauxiliary array if IDIR=0
    CLATcosines of latitude
    SLATsines of latitude
    WLATGaussian weights
    PLNLegendre polynomials
    PLNTOPLegendre polynomial over top
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition at line 34 of file sptranf0.f.

    + +

    References spffte(), splat(), splegend(), and spwget().

    + +

    Referenced by sptranf(), and sptranfv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranf0_8f.js b/ver-5.1.0/sptranf0_8f.js new file mode 100644 index 00000000..68775895 --- /dev/null +++ b/ver-5.1.0/sptranf0_8f.js @@ -0,0 +1,4 @@ +var sptranf0_8f = +[ + [ "sptranf0", "sptranf0_8f.html#aaf9f9002ccd7074dc04dbc40a5aad9f0", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptranf0_8f_source.html b/ver-5.1.0/sptranf0_8f_source.html new file mode 100644 index 00000000..c145b7d3 --- /dev/null +++ b/ver-5.1.0/sptranf0_8f_source.html @@ -0,0 +1,170 @@ + + + + + + + +NCEPLIBS-ip: sptranf0.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptranf0.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Sptranf spectral initialization.
    +
    3 C> @author IREDELL @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs an initialization for
    +
    6 C> subprogram sptranf(). Use this subprogram outside
    +
    7 C> the sptranf() family context at your own risk.
    +
    8 C>
    +
    9 C> @param IROMB spectral domain shape
    +
    10 c> (0 for triangular, 1 for rhomboidal)
    +
    11 C> @param MAXWV spectral truncation
    +
    12 C> @param IDRT grid identifier
    +
    13 C> - IDRT=4 for Gaussian grid,
    +
    14 C> - IDRT=0 for equally-spaced grid including poles,
    +
    15 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    16 C> @param IMAX even number of longitudes
    +
    17 C> @param JMAX number of latitudes
    +
    18 C> @param JB latitude index (from pole) to begin transform
    +
    19 C> @param JE latitude index (from pole) to end transform
    +
    20 C> @param EPS
    +
    21 C> @param EPSTOP
    +
    22 C> @param ENN1
    +
    23 C> @param ELONN1
    +
    24 C> @param EON
    +
    25 C> @param EONTOP
    +
    26 C> @param AFFT auxiliary array if IDIR=0
    +
    27 C> @param CLAT cosines of latitude
    +
    28 C> @param SLAT sines of latitude
    +
    29 C> @param WLAT Gaussian weights
    +
    30 C> @param PLN Legendre polynomials
    +
    31 C> @param PLNTOP Legendre polynomial over top
    +
    32 C>
    +
    33 C> @author IREDELL @date 96-02-29
    +
    34  SUBROUTINE sptranf0(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
    +
    35  & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
    +
    36  & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP)
    +
    37 
    +
    38  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    39  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    40  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    41  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    42  REAL(8) AFFT(50000+4*IMAX)
    +
    43  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
    +
    44  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
    +
    45  REAL PLNTOP(MAXWV+1,JB:JE)
    +
    46  REAL SLATX(JMAX),WLATX(JMAX)
    +
    47  REAL W(IMAX+2,2),G(IMAX,2)
    +
    48 
    +
    49  w = 0.0
    +
    50  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    51  CALL spffte(imax,(imax+2)/2,imax,2,w,g,0,afft)
    +
    52  CALL splat(idrt,jmax,slatx,wlatx)
    +
    53  jhe=(jmax+1)/2
    +
    54  IF(jhe.GT.jmax/2) wlatx(jhe)=wlatx(jhe)/2
    +
    55  DO j=jb,je
    +
    56  clat(j)=sqrt(1.-slatx(j)**2)
    +
    57  slat(j)=slatx(j)
    +
    58  wlat(j)=wlatx(j)
    +
    59  ENDDO
    +
    60 C$OMP PARALLEL DO
    +
    61  DO j=jb,je
    +
    62  CALL splegend(iromb,maxwv,slat(j),clat(j),eps,epstop,
    +
    63  & pln(1,j),plntop(1,j))
    +
    64  ENDDO
    +
    65 
    +
    66  END
    +
    subroutine spffte(IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
    This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
    Definition: spffte.f:49
    +
    subroutine splat(IDRT, JMAX, SLAT, WLAT)
    Computes cosines of colatitude and Gaussian weights for one of the following specific global sets of ...
    Definition: splat.F:46
    +
    subroutine splegend(I, M, SLAT, CLAT, EPS, EPSTOP, PLN, PLNTOP)
    Evaluates the orthonormal associated Legendre polynomials in the spectral domain at a given latitude.
    Definition: splegend.f:45
    +
    subroutine sptranf0(IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
    This subprogram performs an initialization for subprogram sptranf().
    Definition: sptranf0.f:37
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranf1_8f.html b/ver-5.1.0/sptranf1_8f.html new file mode 100644 index 00000000..ee94d7e0 --- /dev/null +++ b/ver-5.1.0/sptranf1_8f.html @@ -0,0 +1,325 @@ + + + + + + + +NCEPLIBS-ip: sptranf1.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptranf1.f File Reference
    +
    +
    + +

    Sptranf spectral transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine 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)
     This subprogram performs an single latitude transform for subprogram sptranf(). More...
     
    +

    Detailed Description

    +

    Sptranf spectral transform.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptranf1.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptranf1()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptranf1 ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     JB,
     JE,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) EPS,
    real, dimension(maxwv+1) EPSTOP,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) ENN1,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) ELONN1,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) EON,
    real, dimension(maxwv+1) EONTOP,
    real(8), dimension(50000+4*imax) AFFT,
    real, dimension(jb:je) CLAT,
    real, dimension(jb:je) SLAT,
    real, dimension(jb:je) WLAT,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2,jb:je) PLN,
    real, dimension(maxwv+1,jb:je) PLNTOP,
     MP,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)) W,
    real, dimension(2*(maxwv+1)) WTOP,
    real, dimension(imax,2,jb:je) G,
     IDIR 
    )
    +
    + +

    This subprogram performs an single latitude transform for subprogram sptranf().

    +

    Use this subprogram outside the sptranf() family context at your own risk.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid,
    • +
    • IDRT=0 for equally-spaced grid including poles,
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes
    JMAXnumber of latitudes
    JBlatitude index (from pole) to begin transform
    JElatitude index (from pole) to end transform
    EPS
    EPSTOP
    ENN1
    ELONN1
    EON
    EONTOP
    CLATcosines of latitude
    SLATsines of latitude
    WLATGaussian weights
    AFFTauxiliary array if IDIR=0
    PLNLegendre polynomials
    PLNTOPLegendre polynomial over top
    MPidentifier (0 for scalar, 1 for vector)
    [out]Wwave field if IDIR>0
    [out]WTOPwave field over top if IDIR>0
    [out]Ggrid field if IDIR<0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 40 of file sptranf1.f.

    + +

    References spanaly(), spffte(), and spsynth().

    + +

    Referenced by sptranf(), and sptranfv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranf1_8f.js b/ver-5.1.0/sptranf1_8f.js new file mode 100644 index 00000000..2123eae8 --- /dev/null +++ b/ver-5.1.0/sptranf1_8f.js @@ -0,0 +1,4 @@ +var sptranf1_8f = +[ + [ "sptranf1", "sptranf1_8f.html#ad7cec2fd6729ca84b1fac3436f9730e6", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptranf1_8f_source.html b/ver-5.1.0/sptranf1_8f_source.html new file mode 100644 index 00000000..d836688b --- /dev/null +++ b/ver-5.1.0/sptranf1_8f_source.html @@ -0,0 +1,179 @@ + + + + + + + +NCEPLIBS-ip: sptranf1.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptranf1.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Sptranf spectral transform.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram performs an single latitude transform for
    +
    6 C> subprogram sptranf(). Use this subprogram outside
    +
    7 C> the sptranf() family context at your own risk.
    +
    8 C>
    +
    9 C> @param IROMB spectral domain shape
    +
    10 C> (0 for triangular, 1 for rhomboidal)
    +
    11 C> @param MAXWV spectral truncation
    +
    12 C> @param IDRT grid identifier
    +
    13 C> - IDRT=4 for Gaussian grid,
    +
    14 C> - IDRT=0 for equally-spaced grid including poles,
    +
    15 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    16 C> @param IMAX even number of longitudes
    +
    17 C> @param JMAX number of latitudes
    +
    18 C> @param JB latitude index (from pole) to begin transform
    +
    19 C> @param JE latitude index (from pole) to end transform
    +
    20 C> @param EPS
    +
    21 C> @param EPSTOP
    +
    22 C> @param ENN1
    +
    23 C> @param ELONN1
    +
    24 C> @param EON
    +
    25 C> @param EONTOP
    +
    26 C> @param CLAT cosines of latitude
    +
    27 C> @param SLAT sines of latitude
    +
    28 C> @param WLAT Gaussian weights
    +
    29 C> @param AFFT auxiliary array if IDIR=0
    +
    30 C> @param PLN Legendre polynomials
    +
    31 C> @param PLNTOP Legendre polynomial over top
    +
    32 C> @param MP identifier (0 for scalar, 1 for vector)
    +
    33 C> @param[out] W wave field if IDIR>0
    +
    34 C> @param[out] WTOP wave field over top if IDIR>0
    +
    35 C> @param[out] G grid field if IDIR<0
    +
    36 C> @param IDIR transform flag
    +
    37 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    38 C>
    +
    39 C> @author Iredell @date 96-02-29
    +
    40  SUBROUTINE sptranf1(IROMB,MAXWV,IDRT,IMAX,JMAX,JB,JE,
    +
    41  & EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP,
    +
    42  & AFFT,CLAT,SLAT,WLAT,PLN,PLNTOP,MP,
    +
    43  & W,WTOP,G,IDIR)
    +
    44 
    +
    45  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    46  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    47  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    48  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    49  REAL(8) AFFT(50000+4*IMAX)
    +
    50  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
    +
    51  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
    +
    52  REAL PLNTOP(MAXWV+1,JB:JE)
    +
    53  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2))
    +
    54  REAL WTOP(2*(MAXWV+1))
    +
    55  REAL G(IMAX,2,JB:JE)
    +
    56  REAL F(IMAX+2,2)
    +
    57 
    +
    58  kw=(maxwv+1)*((iromb+1)*maxwv+2)
    +
    59  kwtop=2*(maxwv+1)
    +
    60  IF(idir.GT.0) THEN
    +
    61  DO j=jb,je
    +
    62  CALL spsynth(iromb,maxwv,imax,imax+2,kw,kwtop,1,
    +
    63  & clat(j),pln(1,j),plntop(1,j),(/mp/),
    +
    64  & w,wtop,f)
    +
    65  CALL spffte(imax,(imax+2)/2,imax,2,f,g(1,1,j),+1,afft)
    +
    66  ENDDO
    +
    67  ELSE
    +
    68  DO j=jb,je
    +
    69  CALL spffte(imax,(imax+2)/2,imax,2,f,g(1,1,j),-1,afft)
    +
    70  CALL spanaly(iromb,maxwv,imax,imax+2,kw,kwtop,1,
    +
    71  & wlat(j),clat(j),pln(1,j),plntop(1,j),(/mp/),
    +
    72  & f,w,wtop)
    +
    73  ENDDO
    +
    74  ENDIF
    +
    75 
    +
    76  END
    +
    subroutine spanaly(I, M, IM, IX, NC, NCTOP, KM, WGT, CLAT, PLN, PLNTOP, MP, F, SPC, SPCTOP)
    Analyzes spectral coefficients from Fourier coefficients for a latitude pair (Northern and Southern h...
    Definition: spanaly.f:37
    +
    subroutine spffte(IMAX, INCW, INCG, KMAX, W, G, IDIR, AFFT)
    This subprogram performs multiple fast Fourier transforms between complex amplitudes in Fourier space...
    Definition: spffte.f:49
    +
    subroutine spsynth(I, M, IM, IX, NC, NCTOP, KM, CLAT, PLN, PLNTOP, MP, SPC, SPCTOP, F)
    Synthesizes Fourier coefficients from spectral coefficients for a latitude pair (Northern and Souther...
    Definition: spsynth.f:39
    +
    subroutine 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)
    This subprogram performs an single latitude transform for subprogram sptranf().
    Definition: sptranf1.f:44
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranf_8f.html b/ver-5.1.0/sptranf_8f.html new file mode 100644 index 00000000..a33379e1 --- /dev/null +++ b/ver-5.1.0/sptranf_8f.html @@ -0,0 +1,324 @@ + + + + + + + +NCEPLIBS-ip: sptranf.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptranf.f File Reference
    +
    +
    + +

    Perform a scalar spherical transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptranf (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
     This subprogram performs a spherical transform between spectral coefficients of scalar quantities and fields on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform a scalar spherical transform.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Generic fft used, openmp directives inserted
    2013-01-16 Iredell, Mirvis Fixing afft negative sharing effect
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptranf.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptranf()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptranf ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     KMAX,
     IP,
     IS,
     JN,
     JS,
     KW,
     KG,
     JB,
     JE,
     JC,
    real, dimension(*) WAVE,
    real, dimension(*) GRIDN,
    real, dimension(*) GRIDS,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid,
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes.
    JMAXnumber of latitudes.
    KMAXnumber of fields to transform.
    IPlongitude index for the prime meridian
    ISskip number between longitudes
    JNskip number between n.h. latitudes from north
    JSskip number between s.h. latitudes from south
    KWskip number between wave fields
    KGskip number between grid fields
    JBlatitude index (from pole) to begin transform
    JElatitude index (from pole) to end transform
    JCnumber of cpus over which to multiprocess
    [out]WAVEwave fields if IDIR>0
    [out]GRIDNn.h. grid fields (starting at JB) if IDIR<0
    [out]GRIDSs.h. grid fields (starting at JB) if IDIR<0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 74 of file sptranf.f.

    + +

    References sptranf0(), and sptranf1().

    + +

    Referenced by sptez(), sptezm(), and sptran().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranf_8f.js b/ver-5.1.0/sptranf_8f.js new file mode 100644 index 00000000..5f0a52f8 --- /dev/null +++ b/ver-5.1.0/sptranf_8f.js @@ -0,0 +1,4 @@ +var sptranf_8f = +[ + [ "sptranf", "sptranf_8f.html#acf086b5141203e48bdb7250441a16c8c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptranf_8f_source.html b/ver-5.1.0/sptranf_8f_source.html new file mode 100644 index 00000000..579c9765 --- /dev/null +++ b/ver-5.1.0/sptranf_8f_source.html @@ -0,0 +1,263 @@ + + + + + + + +NCEPLIBS-ip: sptranf.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptranf.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a scalar spherical transform
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | Iredell | Initial.
    +
    8 C> 1998-12-15 | Iredell | Generic fft used, openmp directives inserted
    +
    9 C> 2013-01-16 | Iredell, Mirvis | Fixing afft negative sharing effect
    +
    10 C>
    +
    11 C> @author Iredell @date 96-02-29
    +
    12 
    +
    13 C> This subprogram performs a spherical transform between spectral
    +
    14 C> coefficients of scalar quantities and fields on a global
    +
    15 C> cylindrical grid.
    +
    16 C>
    +
    17 C> The wave-space can be either triangular or
    +
    18 C> rhomboidal. The grid-space can be either an equally-spaced grid
    +
    19 C> (with or without pole points) or a Gaussian grid.
    +
    20 C>
    +
    21 C> The wave and grid fields may have general indexing,
    +
    22 C> but each wave field is in sequential 'ibm order',
    +
    23 C> i.e. with zonal wavenumber as the slower index.
    +
    24 C>
    +
    25 C> Transforms are done in latitude pairs for efficiency;
    +
    26 C> thus grid arrays for each hemisphere must be passed.
    +
    27 C>
    +
    28 C> If so requested, just a subset of the latitude pairs
    +
    29 C> may be transformed in each invocation of the subprogram.
    +
    30 C> The transforms are all multiprocessed over latitude except
    +
    31 C> the transform from fourier to spectral is multiprocessed
    +
    32 C> over zonal wavenumber to ensure reproducibility.
    +
    33 C>
    +
    34 C> Transform several fields at a time to improve vectorization.
    +
    35 C> Subprogram can be called from a multiprocessing environment.
    +
    36 C>
    +
    37 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    38 C> DIMENSION |LINEAR |QUADRATIC
    +
    39 C> ----------------------- |--------- |-------------
    +
    40 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    41 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    42 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    43 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    44 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    45 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    46 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    47 C>
    +
    48 C> @param IROMB spectral domain shape
    +
    49 c> (0 for triangular, 1 for rhomboidal)
    +
    50 C> @param MAXWV spectral truncation
    +
    51 C> @param IDRT grid identifier
    +
    52 C> - IDRT=4 for Gaussian grid,
    +
    53 C> - IDRT=0 for equally-spaced grid including poles
    +
    54 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    55 C> @param IMAX even number of longitudes.
    +
    56 C> @param JMAX number of latitudes.
    +
    57 C> @param KMAX number of fields to transform.
    +
    58 C> @param IP longitude index for the prime meridian
    +
    59 C> @param IS skip number between longitudes
    +
    60 C> @param JN skip number between n.h. latitudes from north
    +
    61 C> @param JS skip number between s.h. latitudes from south
    +
    62 C> @param KW skip number between wave fields
    +
    63 C> @param KG skip number between grid fields
    +
    64 C> @param JB latitude index (from pole) to begin transform
    +
    65 C> @param JE latitude index (from pole) to end transform
    +
    66 C> @param JC number of cpus over which to multiprocess
    +
    67 C> @param[out] WAVE wave fields if IDIR>0
    +
    68 C> @param[out] GRIDN n.h. grid fields (starting at JB) if IDIR<0
    +
    69 C> @param[out] GRIDS s.h. grid fields (starting at JB) if IDIR<0
    +
    70 C> @param IDIR transform flag
    +
    71 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave)
    +
    72 C>
    +
    73 C> @author Iredell @date 96-02-29
    +
    74  SUBROUTINE sptranf(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
    +
    75  & IP,IS,JN,JS,KW,KG,JB,JE,JC,
    +
    76  & WAVE,GRIDN,GRIDS,IDIR)
    +
    77 
    +
    78  REAL WAVE(*),GRIDN(*),GRIDS(*)
    +
    79  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    80  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    81  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    82  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    83  REAL(8) AFFT(50000+4*IMAX), AFFT_TMP(50000+4*IMAX)
    +
    84  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
    +
    85  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
    +
    86  REAL PLNTOP(MAXWV+1,JB:JE)
    +
    87  REAL WTOP(2*(MAXWV+1))
    +
    88  REAL G(IMAX,2)
    +
    89 ! write(0,*) 'sptranf top'
    +
    90 
    +
    91 C SET PARAMETERS
    +
    92  mp=0
    +
    93  CALL sptranf0(iromb,maxwv,idrt,imax,jmax,jb,je,
    +
    94  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    95  & afft,clat,slat,wlat,pln,plntop)
    +
    96 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    97 C TRANSFORM WAVE TO GRID
    +
    98  IF(idir.GT.0) THEN
    +
    99 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,WTOP,G,IJKN,IJKS)
    +
    100  DO k=1,kmax
    +
    101  afft_tmp=afft
    +
    102  kws=(k-1)*kw
    +
    103  wtop=0
    +
    104  DO j=jb,je
    +
    105  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
    +
    106  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    107  & afft_tmp,clat(j),slat(j),wlat(j),
    +
    108  & pln(1,j),plntop(1,j),mp,
    +
    109  & wave(kws+1),wtop,g,idir)
    +
    110  IF(ip.EQ.1.AND.is.EQ.1) THEN
    +
    111  DO i=1,imax
    +
    112  ijkn=i+(j-jb)*jn+(k-1)*kg
    +
    113  ijks=i+(j-jb)*js+(k-1)*kg
    +
    114  gridn(ijkn)=g(i,1)
    +
    115  grids(ijks)=g(i,2)
    +
    116  ENDDO
    +
    117  ELSE
    +
    118  DO i=1,imax
    +
    119  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
    +
    120  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
    +
    121  gridn(ijkn)=g(i,1)
    +
    122  grids(ijks)=g(i,2)
    +
    123  ENDDO
    +
    124  ENDIF
    +
    125  ENDDO
    +
    126  ENDDO
    +
    127 
    +
    128 C TRANSFORM GRID TO WAVE
    +
    129  ELSE
    +
    130 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,WTOP,G,IJKN,IJKS)
    +
    131  DO k=1,kmax
    +
    132  afft_tmp=afft
    +
    133  kws=(k-1)*kw
    +
    134  wtop=0
    +
    135  DO j=jb,je
    +
    136  IF(wlat(j).GT.0.) THEN
    +
    137  IF(ip.EQ.1.AND.is.EQ.1) THEN
    +
    138  DO i=1,imax
    +
    139  ijkn=i+(j-jb)*jn+(k-1)*kg
    +
    140  ijks=i+(j-jb)*js+(k-1)*kg
    +
    141  g(i,1)=gridn(ijkn)
    +
    142  g(i,2)=grids(ijks)
    +
    143  ENDDO
    +
    144  ELSE
    +
    145  DO i=1,imax
    +
    146  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
    +
    147  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
    +
    148  g(i,1)=gridn(ijkn)
    +
    149  g(i,2)=grids(ijks)
    +
    150  ENDDO
    +
    151  ENDIF
    +
    152  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
    +
    153  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    154  & afft_tmp,clat(j),slat(j),wlat(j),
    +
    155  & pln(1,j),plntop(1,j),mp,
    +
    156  & wave(kws+1),wtop,g,idir)
    +
    157  ENDIF
    +
    158  ENDDO
    +
    159  ENDDO
    +
    160  ENDIF
    +
    161  END
    +
    subroutine sptranf0(IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
    This subprogram performs an initialization for subprogram sptranf().
    Definition: sptranf0.f:37
    +
    subroutine 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)
    This subprogram performs an single latitude transform for subprogram sptranf().
    Definition: sptranf1.f:44
    +
    subroutine sptranf(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptranf.f:77
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranfv_8f.html b/ver-5.1.0/sptranfv_8f.html new file mode 100644 index 00000000..46469efd --- /dev/null +++ b/ver-5.1.0/sptranfv_8f.html @@ -0,0 +1,347 @@ + + + + + + + +NCEPLIBS-ip: sptranfv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptranfv.f File Reference
    +
    +
    + +

    Perform a vector spherical transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptranfv (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
     This subprogram performs a spherical transform between spectral coefficients of divergences and curls and vector fields on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform a vector spherical transform.

    +

    +Program History Log

    + + + + + + + + + +
    Date Programmer Comments
    96-02-29 Iredell Initial.
    1998-12-15 Iredell Generic fft used, openmp directives inserted
    2013-01-16 Iredell & MIRVIS Fixing afft negative sharing effect during omp loops
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptranfv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptranfv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptranfv ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     KMAX,
     IP,
     IS,
     JN,
     JS,
     KW,
     KG,
     JB,
     JE,
     JC,
    real, dimension(*) WAVED,
    real, dimension(*) WAVEZ,
    real, dimension(*) GRIDUN,
    real, dimension(*) GRIDUS,
    real, dimension(*) GRIDVN,
    real, dimension(*) GRIDVS,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    IDRTgrid identifier
      +
    • IDRT=4 for Gaussian grid
    • +
    • IDRT=0 for equally-spaced grid including poles
    • +
    • IDRT=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXeven number of longitudes.
    JMAXnumber of latitudes.
    KMAXnumber of fields to transform.
    IPlongitude index for the prime meridian
    ISskip number between longitudes
    JNskip number between n.h. latitudes from north
    JSskip number between s.h. latitudes from south
    KWskip number between wave fields
    KGskip number between grid fields
    JBlatitude index (from pole) to begin transform
    JElatitude index (from pole) to end transform
    JCnumber of cpus over which to multiprocess
    [out]WAVEDwave divergence fields if IDIR>0 [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
    [out]WAVEZwave vorticity fields if IDIR>0 [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
    +
    [out]GRIDUNN.H. grid u-winds (starting at jb) if IDIR<0
    [out]GRIDUSS.H. grid u-winds (starting at jb) if IDIR<0
    [out]GRIDVNN.H. grid v-winds (starting at jb) if IDIR<0
    [out]GRIDVSS.H. grid v-winds (starting at jb) if IDIR<0
    IDIRtransform flag (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 80 of file sptranfv.f.

    + +

    References spdz2uv(), sptranf0(), sptranf1(), and spuv2dz().

    + +

    Referenced by sptezmv(), sptezv(), and sptranv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranfv_8f.js b/ver-5.1.0/sptranfv_8f.js new file mode 100644 index 00000000..7311d700 --- /dev/null +++ b/ver-5.1.0/sptranfv_8f.js @@ -0,0 +1,4 @@ +var sptranfv_8f = +[ + [ "sptranfv", "sptranfv_8f.html#a1a7aabbd358d4fe984dac6813c98b106", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptranfv_8f_source.html b/ver-5.1.0/sptranfv_8f_source.html new file mode 100644 index 00000000..91e20040 --- /dev/null +++ b/ver-5.1.0/sptranfv_8f_source.html @@ -0,0 +1,300 @@ + + + + + + + +NCEPLIBS-ip: sptranfv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptranfv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a vector spherical transform
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | Iredell | Initial.
    +
    8 C> 1998-12-15 | Iredell | Generic fft used, openmp directives inserted
    +
    9 C> 2013-01-16 | Iredell & MIRVIS | Fixing afft negative sharing effect during omp loops
    +
    10 C>
    +
    11 C> @author Iredell @date 96-02-29
    +
    12 
    +
    13 C> This subprogram performs a spherical transform
    +
    14 C> between spectral coefficients of divergences and curls
    +
    15 C> and vector fields on a global cylindrical grid.
    +
    16 C>
    +
    17 C> The wave-space can be either triangular or rhomboidal.
    +
    18 C>
    +
    19 C> The grid-space can be either an equally-spaced grid
    +
    20 C> (with or without pole points) or a Gaussian grid.
    +
    21 C>
    +
    22 C> The wave and grid fields may have general indexing,
    +
    23 C> but each wave field is in sequential 'ibm order',
    +
    24 C> i.e. with zonal wavenumber as the slower index.
    +
    25 C>
    +
    26 C> Transforms are done in latitude pairs for efficiency;
    +
    27 C> thus grid arrays for each hemisphere must be passed.
    +
    28 C> if so requested, just a subset of the latitude pairs
    +
    29 C> may be transformed in each invocation of the subprogram.
    +
    30 C>
    +
    31 C> The transforms are all multiprocessed over latitude except
    +
    32 C> the transform from fourier to spectral is multiprocessed
    +
    33 C> over zonal wavenumber to ensure reproducibility.
    +
    34 C>
    +
    35 C> Transform several fields at a time to improve vectorization.
    +
    36 C> subprogram can be called from a multiprocessing environment.
    +
    37 C>
    +
    38 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    39 C> DIMENSION |LINEAR |QUADRATIC
    +
    40 C> ----------------------- |--------- |-------------
    +
    41 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    42 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    43 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    44 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    45 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    46 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    47 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    48 C>
    +
    49 C> @param IROMB spectral domain shape
    +
    50 C> (0 for triangular, 1 for rhomboidal)
    +
    51 C> @param MAXWV spectral truncation
    +
    52 C> @param IDRT grid identifier
    +
    53 C> - IDRT=4 for Gaussian grid
    +
    54 C> - IDRT=0 for equally-spaced grid including poles
    +
    55 C> - IDRT=256 for equally-spaced grid excluding poles
    +
    56 C> @param IMAX even number of longitudes.
    +
    57 C> @param JMAX number of latitudes.
    +
    58 C> @param KMAX number of fields to transform.
    +
    59 C> @param IP longitude index for the prime meridian
    +
    60 C> @param IS skip number between longitudes
    +
    61 C> @param JN skip number between n.h. latitudes from north
    +
    62 C> @param JS skip number between s.h. latitudes from south
    +
    63 C> @param KW skip number between wave fields
    +
    64 C> @param KG skip number between grid fields
    +
    65 C> @param JB latitude index (from pole) to begin transform
    +
    66 C> @param JE latitude index (from pole) to end transform
    +
    67 C> @param JC number of cpus over which to multiprocess
    +
    68 C> @param[out] WAVED wave divergence fields if IDIR>0
    +
    69 C> [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
    +
    70 C> @param[out] WAVEZ wave vorticity fields if IDIR>0
    +
    71 C> [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
    +
    72 C> @param[out] GRIDUN N.H. grid u-winds (starting at jb) if IDIR<0
    +
    73 C> @param[out] GRIDUS S.H. grid u-winds (starting at jb) if IDIR<0
    +
    74 C> @param[out] GRIDVN N.H. grid v-winds (starting at jb) if IDIR<0
    +
    75 C> @param[out] GRIDVS S.H. grid v-winds (starting at jb) if IDIR<0
    +
    76 C> @param IDIR transform flag
    +
    77 C> (IDIR>0 for wave to grid, IDIR<0 for grid to wave).
    +
    78 C>
    +
    79 C> @author Iredell @date 96-02-29
    +
    80  SUBROUTINE sptranfv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
    +
    81  & IP,IS,JN,JS,KW,KG,JB,JE,JC,
    +
    82  & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
    +
    83 
    +
    84  REAL WAVED(*),WAVEZ(*),GRIDUN(*),GRIDUS(*),GRIDVN(*),GRIDVS(*)
    +
    85  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    86  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    87  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    88  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    89  REAL(8) AFFT(50000+4*IMAX), AFFT_TMP(50000+4*IMAX)
    +
    90  REAL CLAT(JB:JE),SLAT(JB:JE),WLAT(JB:JE)
    +
    91  REAL PLN((MAXWV+1)*((IROMB+1)*MAXWV+2)/2,JB:JE)
    +
    92  REAL PLNTOP(MAXWV+1,JB:JE)
    +
    93  INTEGER MP
    +
    94  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2)
    +
    95  REAL WTOP(2*(MAXWV+1),2)
    +
    96  REAL G(IMAX,2,2)
    +
    97  REAL WINC((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2,2)
    +
    98 
    +
    99 C SET PARAMETERS
    +
    100  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    101  mp=1
    +
    102  CALL sptranf0(iromb,maxwv,idrt,imax,jmax,jb,je,
    +
    103  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    104  & afft,clat,slat,wlat,pln,plntop)
    +
    105 
    +
    106 C TRANSFORM WAVE TO GRID
    +
    107  IF(idir.GT.0) THEN
    +
    108 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,W,WTOP,G,IJKN,IJKS)
    +
    109  DO k=1,kmax
    +
    110  afft_tmp=afft
    +
    111  kws=(k-1)*kw
    +
    112  CALL spdz2uv(iromb,maxwv,enn1,elonn1,eon,eontop,
    +
    113  & waved(kws+1),wavez(kws+1),
    +
    114  & w(1,1),w(1,2),wtop(1,1),wtop(1,2))
    +
    115  DO j=jb,je
    +
    116  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
    +
    117  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    118  & afft_tmp,clat(j),slat(j),wlat(j),
    +
    119  & pln(1,j),plntop(1,j),mp,
    +
    120  & w(1,1),wtop(1,1),g(1,1,1),idir)
    +
    121  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
    +
    122  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    123  & afft_tmp,clat(j),slat(j),wlat(j),
    +
    124  & pln(1,j),plntop(1,j),mp,
    +
    125  & w(1,2),wtop(1,2),g(1,1,2),idir)
    +
    126  IF(ip.EQ.1.AND.is.EQ.1) THEN
    +
    127  DO i=1,imax
    +
    128  ijkn=i+(j-jb)*jn+(k-1)*kg
    +
    129  ijks=i+(j-jb)*js+(k-1)*kg
    +
    130  gridun(ijkn)=g(i,1,1)
    +
    131  gridus(ijks)=g(i,2,1)
    +
    132  gridvn(ijkn)=g(i,1,2)
    +
    133  gridvs(ijks)=g(i,2,2)
    +
    134  ENDDO
    +
    135  ELSE
    +
    136  DO i=1,imax
    +
    137  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
    +
    138  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
    +
    139  gridun(ijkn)=g(i,1,1)
    +
    140  gridus(ijks)=g(i,2,1)
    +
    141  gridvn(ijkn)=g(i,1,2)
    +
    142  gridvs(ijks)=g(i,2,2)
    +
    143  ENDDO
    +
    144  ENDIF
    +
    145  ENDDO
    +
    146  ENDDO
    +
    147 
    +
    148 C TRANSFORM GRID TO WAVE
    +
    149  ELSE
    +
    150 C$OMP PARALLEL DO PRIVATE(AFFT_TMP,KWS,W,WTOP,G,IJKN,IJKS,WINC)
    +
    151  DO k=1,kmax
    +
    152  afft_tmp=afft
    +
    153  kws=(k-1)*kw
    +
    154  w=0
    +
    155  wtop=0
    +
    156  DO j=jb,je
    +
    157  IF(wlat(j).GT.0.) THEN
    +
    158  IF(ip.EQ.1.AND.is.EQ.1) THEN
    +
    159  DO i=1,imax
    +
    160  ijkn=i+(j-jb)*jn+(k-1)*kg
    +
    161  ijks=i+(j-jb)*js+(k-1)*kg
    +
    162  g(i,1,1)=gridun(ijkn)/clat(j)**2
    +
    163  g(i,2,1)=gridus(ijks)/clat(j)**2
    +
    164  g(i,1,2)=gridvn(ijkn)/clat(j)**2
    +
    165  g(i,2,2)=gridvs(ijks)/clat(j)**2
    +
    166  ENDDO
    +
    167  ELSE
    +
    168  DO i=1,imax
    +
    169  ijkn=mod(i+ip-2,imax)*is+(j-jb)*jn+(k-1)*kg+1
    +
    170  ijks=mod(i+ip-2,imax)*is+(j-jb)*js+(k-1)*kg+1
    +
    171  g(i,1,1)=gridun(ijkn)/clat(j)**2
    +
    172  g(i,2,1)=gridus(ijks)/clat(j)**2
    +
    173  g(i,1,2)=gridvn(ijkn)/clat(j)**2
    +
    174  g(i,2,2)=gridvs(ijks)/clat(j)**2
    +
    175  ENDDO
    +
    176  ENDIF
    +
    177  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
    +
    178  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    179  & afft_tmp,clat(j),slat(j),wlat(j),
    +
    180  & pln(1,j),plntop(1,j),mp,
    +
    181  & w(1,1),wtop(1,1),g(1,1,1),idir)
    +
    182  CALL sptranf1(iromb,maxwv,idrt,imax,jmax,j,j,
    +
    183  & eps,epstop,enn1,elonn1,eon,eontop,
    +
    184  & afft_tmp,clat(j),slat(j),wlat(j),
    +
    185  & pln(1,j),plntop(1,j),mp,
    +
    186  & w(1,2),wtop(1,2),g(1,1,2),idir)
    +
    187  ENDIF
    +
    188  ENDDO
    +
    189  CALL spuv2dz(iromb,maxwv,enn1,elonn1,eon,eontop,
    +
    190  & w(1,1),w(1,2),wtop(1,1),wtop(1,2),
    +
    191  & winc(1,1),winc(1,2))
    +
    192  waved(kws+1:kws+2*mx)=waved(kws+1:kws+2*mx)+winc(1:2*mx,1)
    +
    193  wavez(kws+1:kws+2*mx)=wavez(kws+1:kws+2*mx)+winc(1:2*mx,2)
    +
    194  ENDDO
    +
    195  ENDIF
    +
    196  END
    +
    subroutine spdz2uv(I, M, ENN1, ELONN1, EON, EONTOP, D, Z, U, V, UTOP, VTOP)
    Computes the wind components from divergence and vorticity in spectral space.
    Definition: spdz2uv.f:49
    +
    subroutine sptranf0(IROMB, MAXWV, IDRT, IMAX, JMAX, JB, JE, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP, AFFT, CLAT, SLAT, WLAT, PLN, PLNTOP)
    This subprogram performs an initialization for subprogram sptranf().
    Definition: sptranf0.f:37
    +
    subroutine 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)
    This subprogram performs an single latitude transform for subprogram sptranf().
    Definition: sptranf1.f:44
    +
    subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranfv.f:83
    +
    subroutine spuv2dz(I, M, ENN1, ELONN1, EON, EONTOP, U, V, UTOP, VTOP, D, Z)
    Computes the divergence and vorticity from wind components in spectral space.
    Definition: spuv2dz.f:49
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranv_8f.html b/ver-5.1.0/sptranv_8f.html new file mode 100644 index 00000000..c95dd51c --- /dev/null +++ b/ver-5.1.0/sptranv_8f.html @@ -0,0 +1,349 @@ + + + + + + + +NCEPLIBS-ip: sptranv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptranv.f File Reference
    +
    +
    + +

    Perform a vector spherical transform. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptranv (IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
     This subprogram performs a spherical transform between spectral coefficients of divergences and curls and vector fields on a global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Perform a vector spherical transform.

    +

    +Program History Log

    + + + + + + + +
    Date Programmer Comments
    96-02-29 IREDELL Initial.
    1998-12-15 IREDELL Generic fft used, openmp directives inserted
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptranv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptranv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptranv ( IROMB,
     MAXWV,
     IDRT,
     IMAX,
     JMAX,
     KMAX,
     IPRIME,
     ISKIP,
     JNSKIP,
     JSSKIP,
     KWSKIP,
     KGSKIP,
     JBEG,
     JEND,
     JCPU,
    real, dimension(*) WAVED,
    real, dimension(*) WAVEZ,
    real, dimension(*) GRIDUN,
    real, dimension(*) GRIDUS,
    real, dimension(*) GRIDVN,
    real, dimension(*) GRIDVS,
     IDIR 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + +
    IROMBSPECTRAL DOMAIN SHAPE (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    MAXWVSPECTRAL TRUNCATION
    IDRTGRID IDENTIFIER
      +
    • IDRT=4 FOR GAUSSIAN GRID,
    • +
    • IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    • +
    • IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES
    • +
    +
    IMAXEVEN NUMBER OF LONGITUDES.
    JMAXNUMBER OF LATITUDES.
    KMAXNUMBER OF FIELDS TO TRANSFORM.
    IPRIMELONGITUDE INDEX FOR THE PRIME MERIDIAN. (DEFAULTS TO 1 IF IPRIME=0)
    ISKIPSKIP NUMBER BETWEEN LONGITUDES (DEFAULTS TO 1 IF ISKIP=0)
    JNSKIPSKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH (DEFAULTS TO IMAX IF JNSKIP=0)
    JSSKIPSKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH (DEFAULTS TO -IMAX IF JSSKIP=0)
    KWSKIPSKIP NUMBER BETWEEN WAVE FIELDS (DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    KGSKIPSKIP NUMBER BETWEEN GRID FIELDS (DEFAULTS TO IMAX*JMAX IF KGSKIP=0)
    JBEGLATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
      +
    • DEFAULTS TO 1 IF JBEG=0
    • +
    • IF JBEG=0 AND IDIR<0, WAVE IS ZEROED BEFORE TRANSFORM
    • +
    +
    JENDLATITUDE INDEX (FROM POLE) TO END TRANSFORM (DEFAULTS TO (JMAX+1)/2 IF JEND=0)
    JCPUNUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    [out]WAVED(*) WAVE DIVERGENCE FIELDS IF IDIR>0 [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
    [out]WAVEZ(*) WAVE VORTICITY FIELDS IF IDIR>0 [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
    [out]GRIDUNN.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
    [out]GRIDUSS.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
    [out]GRIDVNN.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
    [out]GRIDVSS.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
    IDIRTRANSFORM FLAG
      +
    • IDIR>0 FOR WAVE TO GRID,
    • +
    • IDIR<0 FOR GRID TO WAVE
    • +
    +
    +
    +
    + +

    Definition at line 87 of file sptranv.f.

    + +

    References ncpus(), and sptranfv().

    + +

    Referenced by sptrand(), sptrungv(), sptrunmv(), sptrunsv(), and sptrunv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptranv_8f.js b/ver-5.1.0/sptranv_8f.js new file mode 100644 index 00000000..ef79c537 --- /dev/null +++ b/ver-5.1.0/sptranv_8f.js @@ -0,0 +1,4 @@ +var sptranv_8f = +[ + [ "sptranv", "sptranv_8f.html#a7d6aaa3ed70df1dfaf8dd4443b7190c1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptranv_8f_source.html b/ver-5.1.0/sptranv_8f_source.html new file mode 100644 index 00000000..1493c46d --- /dev/null +++ b/ver-5.1.0/sptranv_8f_source.html @@ -0,0 +1,228 @@ + + + + + + + +NCEPLIBS-ip: sptranv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptranv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Perform a vector spherical transform.
    +
    3 C>
    +
    4 C> ### Program History Log
    +
    5 C> Date | Programmer | Comments
    +
    6 C> -----|------------|---------
    +
    7 C> 96-02-29 | IREDELL | Initial.
    +
    8 C> 1998-12-15 | IREDELL | Generic fft used, openmp directives inserted
    +
    9 C>
    +
    10 C> @author IREDELL @date 96-02-29
    +
    11 
    +
    12 C> This subprogram performs a spherical transform
    +
    13 C> between spectral coefficients of divergences and curls
    +
    14 C> and vector fields on a global cylindrical grid.
    +
    15 C>
    +
    16 C> The wave-space can be either triangular or rhomboidal.
    +
    17 C>
    +
    18 C> The grid-space can be either an equally-spaced grid
    +
    19 C> (with or without pole points) or a Gaussian grid.
    +
    20 C> the wave and grid fields may have general indexing,
    +
    21 C> but each wave field is in sequential 'ibm order',
    +
    22 C> i.e. with zonal wavenumber as the slower index.
    +
    23 C>
    +
    24 C> Transforms are done in latitude pairs for efficiency;
    +
    25 C> thus grid arrays for each hemisphere must be passed.
    +
    26 C> If so requested, just a subset of the latitude pairs
    +
    27 C> may be transformed in each invocation of the subprogram.
    +
    28 C>
    +
    29 C> The transforms are all multiprocessed over latitude except
    +
    30 C> the transform from fourier to spectral is multiprocessed
    +
    31 C> over zonal wavenumber to ensure reproducibility.
    +
    32 C>
    +
    33 C> Transform several fields at a time to improve vectorization.
    +
    34 C> Subprogram can be called from a multiprocessing environment.
    +
    35 C>
    +
    36 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    37 C> DIMENSION |LINEAR |QUADRATIC
    +
    38 C> ----------------------- |--------- |-------------
    +
    39 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    40 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    41 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    42 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    43 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    44 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    45 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    46 C>
    +
    47 C> @param IROMB SPECTRAL DOMAIN SHAPE
    +
    48 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    49 C> @param MAXWV SPECTRAL TRUNCATION
    +
    50 C> @param IDRT GRID IDENTIFIER
    +
    51 C> - IDRT=4 FOR GAUSSIAN GRID,
    +
    52 C> - IDRT=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    53 C> - IDRT=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES
    +
    54 C> @param IMAX EVEN NUMBER OF LONGITUDES.
    +
    55 C> @param JMAX NUMBER OF LATITUDES.
    +
    56 C> @param KMAX NUMBER OF FIELDS TO TRANSFORM.
    +
    57 C> @param IPRIME LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    58 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    59 C> @param ISKIP SKIP NUMBER BETWEEN LONGITUDES
    +
    60 C> (DEFAULTS TO 1 IF ISKIP=0)
    +
    61 C> @param JNSKIP SKIP NUMBER BETWEEN N.H. LATITUDES FROM NORTH
    +
    62 C> (DEFAULTS TO IMAX IF JNSKIP=0)
    +
    63 C> @param JSSKIP SKIP NUMBER BETWEEN S.H. LATITUDES FROM SOUTH
    +
    64 C> (DEFAULTS TO -IMAX IF JSSKIP=0)
    +
    65 C> @param KWSKIP SKIP NUMBER BETWEEN WAVE FIELDS
    +
    66 C> (DEFAULTS TO (MAXWV+1)*((IROMB+1)*MAXWV+2) IF KWSKIP=0)
    +
    67 C> @param KGSKIP SKIP NUMBER BETWEEN GRID FIELDS
    +
    68 C> (DEFAULTS TO IMAX*JMAX IF KGSKIP=0)
    +
    69 C> @param JBEG LATITUDE INDEX (FROM POLE) TO BEGIN TRANSFORM
    +
    70 C> - DEFAULTS TO 1 IF JBEG=0
    +
    71 C> - IF JBEG=0 AND IDIR<0, WAVE IS ZEROED BEFORE TRANSFORM
    +
    72 C> @param JEND LATITUDE INDEX (FROM POLE) TO END TRANSFORM
    +
    73 C> (DEFAULTS TO (JMAX+1)/2 IF JEND=0)
    +
    74 C> @param JCPU NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    75 C> @param[out] WAVED (*) WAVE DIVERGENCE FIELDS IF IDIR>0
    +
    76 C> [WAVED=(D(GRIDU)/DLAM+D(CLAT*GRIDV)/DPHI)/(CLAT*RERTH)]
    +
    77 C> @param[out] WAVEZ (*) WAVE VORTICITY FIELDS IF IDIR>0
    +
    78 C> [WAVEZ=(D(GRIDV)/DLAM-D(CLAT*GRIDU)/DPHI)/(CLAT*RERTH)]
    +
    79 C> @param[out] GRIDUN N.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
    +
    80 C> @param[out] GRIDUS S.H. GRID U-WINDS (STARTING AT JBEG) IF IDIR<0
    +
    81 C> @param[out] GRIDVN N.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
    +
    82 C> @param[out] GRIDVS S.H. GRID V-WINDS (STARTING AT JBEG) IF IDIR<0
    +
    83 C> @param IDIR TRANSFORM FLAG
    +
    84 C> - IDIR>0 FOR WAVE TO GRID,
    +
    85 C> - IDIR<0 FOR GRID TO WAVE
    +
    86 C>
    +
    87  SUBROUTINE sptranv(IROMB,MAXWV,IDRT,IMAX,JMAX,KMAX,
    +
    88  & IPRIME,ISKIP,JNSKIP,JSSKIP,KWSKIP,KGSKIP,
    +
    89  & JBEG,JEND,JCPU,
    +
    90  & WAVED,WAVEZ,GRIDUN,GRIDUS,GRIDVN,GRIDVS,IDIR)
    +
    91 
    +
    92  REAL WAVED(*),WAVEZ(*),GRIDUN(*),GRIDUS(*),GRIDVN(*),GRIDVS(*)
    +
    93 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    94  MX=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    95  ip=iprime
    +
    96  is=iskip
    +
    97  jn=jnskip
    +
    98  js=jsskip
    +
    99  kw=kwskip
    +
    100  kg=kgskip
    +
    101  jb=jbeg
    +
    102  je=jend
    +
    103  jc=jcpu
    +
    104  IF(ip.EQ.0) ip=1
    +
    105  IF(is.EQ.0) is=1
    +
    106  IF(jn.EQ.0) jn=imax
    +
    107  IF(js.EQ.0) js=-jn
    +
    108  IF(kw.EQ.0) kw=2*mx
    +
    109  IF(kg.EQ.0) kg=imax*jmax
    +
    110  IF(jb.EQ.0) jb=1
    +
    111  IF(je.EQ.0) je=(jmax+1)/2
    +
    112  IF(jc.EQ.0) jc=ncpus()
    +
    113 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    114  IF(idir.LT.0.AND.jbeg.EQ.0) THEN
    +
    115  DO k=1,kmax
    +
    116  kws=(k-1)*kw
    +
    117  waved(kws+1:kws+2*mx)=0
    +
    118  wavez(kws+1:kws+2*mx)=0
    +
    119  ENDDO
    +
    120  ENDIF
    +
    121 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    122  CALL sptranfv(iromb,maxwv,idrt,imax,jmax,kmax,
    +
    123  & ip,is,jn,js,kw,kg,jb,je,jc,
    +
    124  & waved,wavez,gridun,gridus,gridvn,gridvs,idir)
    +
    125 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    126  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptranfv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IP, IS, JN, JS, KW, KG, JB, JE, JC, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranfv.f:83
    +
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrun_8f.html b/ver-5.1.0/sptrun_8f.html new file mode 100644 index 00000000..fcaf1b2b --- /dev/null +++ b/ver-5.1.0/sptrun_8f.html @@ -0,0 +1,317 @@ + + + + + + + +NCEPLIBS-ip: sptrun.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrun.f File Reference
    +
    +
    + +

    Truncate gridded scalar fields. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptrun (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRIDI, GRIDO)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to a possibly different global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Truncate gridded scalar fields.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrun.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrun()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrun ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     IDRTO,
     IMAXO,
     JMAXO,
     KMAX,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     ISKIPO,
     JSKIPO,
     KSKIPO,
     JCPU,
    real, dimension(*) GRIDI,
    real, dimension(*) GRIDO 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    IROMBSpectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVSpectral truncation
    IDRTIInput grid identifier
      +
    • IDRTI=4 for Gaussian grid
    • +
    • IDRTI=0 for equally-spaced grid including poles
    • +
    • IDRTI=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXIEven number of input longitudes
    JMAXINumber of input latitudes
    IDRTOOutput grid identifier
      +
    • IDRTO=4 for Gaussian grid
    • +
    • IDRTO=0 for equally-spaced grid including poles
    • +
    • IDRTO=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXOEven number of output longitudes
    JMAXONumber of output latitudes
    KMAXNumber of fields to transform
    IPRIMEInput longitude index for the prime meridian.
      +
    • Defaults to 1 if IPRIME=0
    • +
    • Output longitude index for prime meridian assumed 1
    • +
    +
    ISKIPISkip number between input longitudes (defaults to 1 if ISKIPI=0)
    JSKIPISkip number between input latitudes from south (defaults to -IMAXI if JSKIPI=0)
    KSKIPISkip number between input grid fields (defaults to IMAXI*JMAXI if KSKIPI=0)
    ISKIPOSkip number between output longitudes (defaults to 1 if ISKIPO=0)
    JSKIPOSkip number between output latitudes from south (defaults to -IMAXO if JSKIPO=0)
    KSKIPOSkip number between output grid fields (defaults to IMAXO*JMAXO if KSKIPO=0)
    JCPUNumber of CPUs over which to multiprocess (defaults to environment NCPUS if JCPU=0)
    GRIDIInput grid fields
    GRIDOOutput grid fields (may overlay input fields if grid shape is appropriate)
    +
    +
    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition at line 55 of file sptrun.f.

    + +

    References ncpus(), and sptran().

    + +

    Referenced by spectral_interp_mod::polates4::polates4_grib1(), and spectral_interp_mod::polates4::polates4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrun_8f.js b/ver-5.1.0/sptrun_8f.js new file mode 100644 index 00000000..0409c09b --- /dev/null +++ b/ver-5.1.0/sptrun_8f.js @@ -0,0 +1,4 @@ +var sptrun_8f = +[ + [ "sptrun", "sptrun_8f.html#a1f04574fbd5018f73b68bd2cd0ffc473", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrun_8f_source.html b/ver-5.1.0/sptrun_8f_source.html new file mode 100644 index 00000000..3d77bdac --- /dev/null +++ b/ver-5.1.0/sptrun_8f_source.html @@ -0,0 +1,187 @@ + + + + + + + +NCEPLIBS-ip: sptrun.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrun.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Truncate gridded scalar fields
    +
    3 C> @author IREDELL @date 96-02-29
    +
    4 
    +
    5 C> This subprogram spectrally truncates scalar fields on a global
    +
    6 C> cylindrical grid, returning the fields to a possibly different
    +
    7 C> global cylindrical grid. The wave-space can be either triangular
    +
    8 C> or rhomboidal. either grid-space can be either an equally-spaced
    +
    9 C> grid (with or without pole points) or a Gaussian grid. the grid
    +
    10 C> fields may have general indexing. the transforms are all
    +
    11 C> multiprocessed. Transform several fields at a time to improve
    +
    12 C> vectorization. Subprogram can be called from a multiprocessing
    +
    13 C> environment.
    +
    14 C>
    +
    15 C> Remarks: Minimum grid dimensions for unaliased transforms to spectral:
    +
    16 C> Dimension | Linear | Quadratic
    +
    17 C> ----------------------- | --------- | -------------
    +
    18 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    19 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    20 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    21 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    22 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    23 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    24 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    25 C>
    +
    26 C> @param IROMB Spectral domain shape (0 for triangular, 1 for rhomboidal)
    +
    27 C> @param MAXWV Spectral truncation
    +
    28 C> @param IDRTI Input grid identifier
    +
    29 C> - IDRTI=4 for Gaussian grid
    +
    30 C> - IDRTI=0 for equally-spaced grid including poles
    +
    31 C> - IDRTI=256 for equally-spaced grid excluding poles
    +
    32 C> @param IMAXI Even number of input longitudes
    +
    33 C> @param JMAXI Number of input latitudes
    +
    34 C> @param IDRTO Output grid identifier
    +
    35 C> - IDRTO=4 for Gaussian grid
    +
    36 C> - IDRTO=0 for equally-spaced grid including poles
    +
    37 C> - IDRTO=256 for equally-spaced grid excluding poles
    +
    38 C> @param IMAXO Even number of output longitudes
    +
    39 C> @param JMAXO Number of output latitudes
    +
    40 C> @param KMAX Number of fields to transform
    +
    41 C> @param IPRIME Input longitude index for the prime meridian.
    +
    42 C> - Defaults to 1 if IPRIME=0
    +
    43 C> - Output longitude index for prime meridian assumed 1
    +
    44 C> @param ISKIPI Skip number between input longitudes (defaults to 1 if ISKIPI=0)
    +
    45 C> @param JSKIPI Skip number between input latitudes from south (defaults to -IMAXI if JSKIPI=0)
    +
    46 C> @param KSKIPI Skip number between input grid fields (defaults to IMAXI*JMAXI if KSKIPI=0)
    +
    47 C> @param ISKIPO Skip number between output longitudes (defaults to 1 if ISKIPO=0)
    +
    48 C> @param JSKIPO Skip number between output latitudes from south (defaults to -IMAXO if JSKIPO=0)
    +
    49 C> @param KSKIPO Skip number between output grid fields (defaults to IMAXO*JMAXO if KSKIPO=0)
    +
    50 C> @param JCPU Number of CPUs over which to multiprocess (defaults to environment NCPUS if JCPU=0)
    +
    51 C> @param GRIDI Input grid fields
    +
    52 C> @param GRIDO Output grid fields (may overlay input fields if grid shape is appropriate)
    +
    53 C>
    +
    54 C> @author IREDELL @date 96-02-29
    +
    55  SUBROUTINE sptrun(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,IDRTO,IMAXO,JMAXO,
    +
    56  & KMAX,IPRIME,ISKIPI,JSKIPI,KSKIPI,
    +
    57  & ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDI,GRIDO)
    +
    58  REAL GRIDI(*),GRIDO(*)
    +
    59  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    60 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    61 C TRANSFORM INPUT GRID TO WAVE
    +
    62  jc=jcpu
    +
    63  IF(jc.EQ.0) jc=ncpus()
    +
    64  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    65  mdim=2*mx+1
    +
    66  jn=-jskipi
    +
    67  IF(jn.EQ.0) jn=imaxi
    +
    68  js=-jn
    +
    69  inp=(jmaxi-1)*max(0,-jn)+1
    +
    70  isp=(jmaxi-1)*max(0,-js)+1
    +
    71  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    72  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    73  & w,gridi(inp),gridi(isp),-1)
    +
    74 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    75 C TRANSFORM WAVE TO OUTPUT
    +
    76  jn=-jskipo
    +
    77  IF(jn.EQ.0) jn=imaxo
    +
    78  js=-jn
    +
    79  inp=(jmaxo-1)*max(0,-jn)+1
    +
    80  isp=(jmaxo-1)*max(0,-js)+1
    +
    81  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    82  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    83  & w,grido(inp),grido(isp),1)
    +
    84 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    85  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptrun(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRIDI, GRIDO)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrun.f:58
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrund_8f.html b/ver-5.1.0/sptrund_8f.html new file mode 100644 index 00000000..6fe8896c --- /dev/null +++ b/ver-5.1.0/sptrund_8f.html @@ -0,0 +1,318 @@ + + + + + + + +NCEPLIBS-ip: sptrund.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrund.f File Reference
    +
    +
    + +

    Spectrally truncate to gradients. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptrund (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRID, GRIDMN, GRIDX, GRIDY)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEANS AND GRADIENTS TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID. More...
     
    +

    Detailed Description

    +

    Spectrally truncate to gradients.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrund.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrund()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrund ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     IDRTO,
     IMAXO,
     JMAXO,
     KMAX,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     ISKIPO,
     JSKIPO,
     KSKIPO,
     JCPU,
    real, dimension(*) GRID,
    real, dimension(*) GRIDMN,
    real, dimension(*) GRIDX,
    real, dimension(*) GRIDY 
    )
    +
    + +

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

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    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
    GRIDMN- REAL (KMAX) OUTPUT GLOBAL MEANS
    GRIDX- REAL (*) OUTPUT X-GRADIENTS
    GRIDY- REAL (*) OUTPUT Y-GRADIENTS
    +
    +
    +

    SUBPROGRAMS CALLED:

      +
    • SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
    • +
    • SPTRAND PERFORM A GRADIENT SPHERICAL TRANSFORM
    • +
    • NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    • +
    +

    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 71 of file sptrund.f.

    + +

    References ncpus(), sptran(), and sptrand().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrund_8f.js b/ver-5.1.0/sptrund_8f.js new file mode 100644 index 00000000..20c45793 --- /dev/null +++ b/ver-5.1.0/sptrund_8f.js @@ -0,0 +1,4 @@ +var sptrund_8f = +[ + [ "sptrund", "sptrund_8f.html#a2636d99e658dfabd4b85f15a76fca480", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrund_8f_source.html b/ver-5.1.0/sptrund_8f_source.html new file mode 100644 index 00000000..a6b7d3d2 --- /dev/null +++ b/ver-5.1.0/sptrund_8f_source.html @@ -0,0 +1,208 @@ + + + + + + + +NCEPLIBS-ip: sptrund.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrund.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally truncate to gradients
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS
    +
    7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEANS AND
    +
    8 C> GRADIENTS TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
    +
    9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    +
    10 C> EITHER GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    +
    11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    +
    12 C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
    +
    13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    +
    14 C> OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY.
    +
    15 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    +
    16 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    +
    17 C>
    +
    18 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    19 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    20 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    21 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    22 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    23 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    24 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    25 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    26 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    27 C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
    +
    28 C> (IDRTO=4 FOR GAUSSIAN GRID,
    +
    29 C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    30 C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    31 C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
    +
    32 C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
    +
    33 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    34 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    35 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    36 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    37 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    38 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    39 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    40 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    41 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    42 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    43 C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
    +
    44 C> (DEFAULTS TO 1 IF ISKIPO=0)
    +
    45 C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
    +
    46 C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
    +
    47 C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
    +
    48 C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
    +
    49 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    50 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    51 C> @param GRID - REAL (*) INPUT GRID FIELDS
    +
    52 C> @param GRIDMN - REAL (KMAX) OUTPUT GLOBAL MEANS
    +
    53 C> @param GRIDX - REAL (*) OUTPUT X-GRADIENTS
    +
    54 C> @param GRIDY - REAL (*) OUTPUT Y-GRADIENTS
    +
    55 C>
    +
    56 C> SUBPROGRAMS CALLED:
    +
    57 C> - SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
    +
    58 C> - SPTRAND PERFORM A GRADIENT SPHERICAL TRANSFORM
    +
    59 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    +
    60 C>
    +
    61 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    62 C> DIMENSION |LINEAR |QUADRATIC
    +
    63 C> ----------------------- |--------- |-------------
    +
    64 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    65 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    66 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    67 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    68 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    69 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    70 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    71  SUBROUTINE sptrund(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
    +
    72  & IDRTO,IMAXO,JMAXO,KMAX,
    +
    73  & IPRIME,ISKIPI,JSKIPI,KSKIPI,
    +
    74  & ISKIPO,JSKIPO,KSKIPO,JCPU,GRID,
    +
    75  & GRIDMN,GRIDX,GRIDY)
    +
    76 
    +
    77  REAL GRID(*),GRIDX(*),GRIDY(*),GRIDMN(*)
    +
    78  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    79 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    80 C TRANSFORM INPUT GRID TO WAVE
    +
    81  jc=jcpu
    +
    82  IF(jc.EQ.0) jc=ncpus()
    +
    83  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    84  mdim=2*mx+1
    +
    85  jn=-jskipi
    +
    86  IF(jn.EQ.0) jn=imaxi
    +
    87  js=-jn
    +
    88  inp=(jmaxi-1)*max(0,-jn)+1
    +
    89  isp=(jmaxi-1)*max(0,-js)+1
    +
    90  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    91  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    92  & w,grid(inp),grid(isp),-1)
    +
    93 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    94 C TRANSFORM WAVE TO OUTPUT GRADIENTS
    +
    95  jn=-jskipo
    +
    96  IF(jn.EQ.0) jn=imaxo
    +
    97  js=-jn
    +
    98  inp=(jmaxo-1)*max(0,-jn)+1
    +
    99  isp=(jmaxo-1)*max(0,-js)+1
    +
    100  CALL sptrand(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    101  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    102  & w,gridmn,
    +
    103  & gridx(inp),gridx(isp),gridy(inp),gridy(isp),1)
    +
    104 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    105  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    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 the...
    Definition: sptrand.f:92
    +
    subroutine sptrund(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, GRID, GRIDMN, GRIDX, GRIDY)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR MEAN...
    Definition: sptrund.f:76
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrung_8f.html b/ver-5.1.0/sptrung_8f.html new file mode 100644 index 00000000..2332b302 --- /dev/null +++ b/ver-5.1.0/sptrung_8f.html @@ -0,0 +1,306 @@ + + + + + + + +NCEPLIBS-ip: sptrung.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrung.f File Reference
    +
    +
    + +

    Spectrally interpolate scalars to stations. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptrung (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NRSKIP, NGSKIP, JCPU, RLAT, RLON, GRIDI, GP)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to specified sets of station points on the globe. More...
     
    +

    Detailed Description

    +

    Spectrally interpolate scalars to stations.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrung.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrung()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrung ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     KMAX,
     NMAX,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     KGSKIP,
     NRSKIP,
     NGSKIP,
     JCPU,
    real, dimension(*) RLAT,
    real, dimension(*) RLON,
    real, dimension(*) GRIDI,
    real, dimension(*) GP 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + +
    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
    [out]GP- REAL (*) STATION POINT SETS
    +
    +
    +

    SUBPROGRAMS CALLED:

      +
    • sptran() Perform a scalar spherical transform
    • +
    • sptgpt() Transform spectral scalar to station points
    • +
    • ncpus() Gets environment number of cpus
    • +
    +

    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 65 of file sptrung.f.

    + +

    References ncpus(), sptgpt(), and sptran().

    + +

    Referenced by spectral_interp_mod::polates4::polates4_grib1(), and spectral_interp_mod::polates4::polates4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrung_8f.js b/ver-5.1.0/sptrung_8f.js new file mode 100644 index 00000000..2105f854 --- /dev/null +++ b/ver-5.1.0/sptrung_8f.js @@ -0,0 +1,4 @@ +var sptrung_8f = +[ + [ "sptrung", "sptrung_8f.html#af41b64dad4789617a315515ef885912c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrung_8f_source.html b/ver-5.1.0/sptrung_8f_source.html new file mode 100644 index 00000000..a23390f1 --- /dev/null +++ b/ver-5.1.0/sptrung_8f_source.html @@ -0,0 +1,193 @@ + + + + + + + +NCEPLIBS-ip: sptrung.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrung.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally interpolate scalars to stations
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> This subprogram spectrally truncates scalar fields on a global
    +
    7 C> cylindrical grid, returning the fields to specified sets of
    +
    8 C> station points on the globe. The wave-space can be either
    +
    9 C> triangular or rhomboidal. The grid-space can be either an
    +
    10 C> equally-spaced grid (with or without pole points) or a Gaussian
    +
    11 C> grid. The grid and point fields may have general indexing. The
    +
    12 C> transforms are all multiprocessed. Transform several fields at a
    +
    13 C> time to improve vectorization. Subprogram can be called from a
    +
    14 C> multiprocessing environment.
    +
    15 C>
    +
    16 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    17 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    18 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    19 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    20 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    21 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    22 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    23 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    24 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    25 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    26 C> @param NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
    +
    27 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    28 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    29 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    30 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    31 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    32 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    33 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    34 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    35 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    36 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
    +
    37 C> (DEFAULTS TO NMAX IF KGSKIP=0)
    +
    38 C> @param NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
    +
    39 C> (DEFAULTS TO 1 IF NRSKIP=0)
    +
    40 C> @param NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
    +
    41 C> (DEFAULTS TO 1 IF NGSKIP=0)
    +
    42 C> @param RLAT - REAL (*) STATION LATITUDES IN DEGREES
    +
    43 C> @param RLON - REAL (*) STATION LONGITUDES IN DEGREES
    +
    44 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    45 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    46 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    47 C> @param[out] GP - REAL (*) STATION POINT SETS
    +
    48 C>
    +
    49 C> SUBPROGRAMS CALLED:
    +
    50 C> - sptran() Perform a scalar spherical transform
    +
    51 C> - sptgpt() Transform spectral scalar to station points
    +
    52 C> - ncpus() Gets environment number of cpus
    +
    53 C>
    +
    54 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    55 C> DIMENSION |LINEAR |QUADRATIC
    +
    56 C> ----------------------- |--------- |-------------
    +
    57 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    58 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    59 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    60 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    61 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    62 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    63 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    64 C>
    +
    65  SUBROUTINE sptrung(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
    +
    66  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    67  & NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDI,GP)
    +
    68 
    +
    69  REAL RLAT(*),RLON(*),GRIDI(*),GP(*)
    +
    70  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    71 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    72 C TRANSFORM INPUT GRID TO WAVE
    +
    73  jc=jcpu
    +
    74  IF(jc.EQ.0) jc=ncpus()
    +
    75  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    76  mdim=2*mx+1
    +
    77  jn=-jskipi
    +
    78  IF(jn.EQ.0) jn=imaxi
    +
    79  js=-jn
    +
    80  inp=(jmaxi-1)*max(0,-jn)+1
    +
    81  isp=(jmaxi-1)*max(0,-js)+1
    +
    82  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    83  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    84  & w,gridi(inp),gridi(isp),-1)
    +
    85 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    86 C TRANSFORM WAVE TO OUTPUT
    +
    87  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    88  & rlat,rlon,w,gp)
    +
    89 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    90  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptgpt(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition: sptgpt.f:51
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptrung(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NRSKIP, NGSKIP, JCPU, RLAT, RLON, GRIDI, GP)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrung.f:68
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrungv_8f.html b/ver-5.1.0/sptrungv_8f.html new file mode 100644 index 00000000..43b9cbac --- /dev/null +++ b/ver-5.1.0/sptrungv_8f.html @@ -0,0 +1,376 @@ + + + + + + + +NCEPLIBS-ip: sptrungv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrungv.f File Reference
    +
    +
    + +

    Spectrally interpolate vectors to stations. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine 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)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS TO SPECIFIED SETS OF STATION POINTS ON THE GLOBE. More...
     
    +

    Detailed Description

    +

    Spectrally interpolate vectors to stations.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrungv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrungv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrungv ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     KMAX,
     NMAX,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     KGSKIP,
     NRSKIP,
     NGSKIP,
     JCPU,
    real, dimension(*) RLAT,
    real, dimension(*) RLON,
    real, dimension(*) GRIDUI,
    real, dimension(*) GRIDVI,
    logical LUV,
    real, dimension(*) UP,
    real, dimension(*) VP,
    logical LDZ,
    real, dimension(*) DP,
    real, dimension(*) ZP,
    logical LPS,
    real, dimension(*) PP,
    real, dimension(*) SP 
    )
    +
    + +

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

    +

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

    SUBPROGRAMS CALLED:

      +
    • SPWGET GET WAVE-SPACE CONSTANTS
    • +
    • SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    • +
    • SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    • +
    • SPTGPT TRANSFORM SPECTRAL SCALAR TO STATION POINTS
    • +
    • SPTGPTV TRANSFORM SPECTRAL VECTOR TO STATION POINTS
    • +
    • NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    • +
    +

    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 81 of file sptrungv.f.

    + +

    References ncpus(), splaplac(), sptgpt(), sptgptv(), sptranv(), and spwget().

    + +

    Referenced by spectral_interp_mod::polatev4::polatev4_grib1(), and spectral_interp_mod::polatev4::polatev4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrungv_8f.js b/ver-5.1.0/sptrungv_8f.js new file mode 100644 index 00000000..c69c1059 --- /dev/null +++ b/ver-5.1.0/sptrungv_8f.js @@ -0,0 +1,4 @@ +var sptrungv_8f = +[ + [ "sptrungv", "sptrungv_8f.html#ab7bbe6ecde57394b15e5d4925cb07164", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrungv_8f_source.html b/ver-5.1.0/sptrungv_8f_source.html new file mode 100644 index 00000000..7dab915f --- /dev/null +++ b/ver-5.1.0/sptrungv_8f_source.html @@ -0,0 +1,247 @@ + + + + + + + +NCEPLIBS-ip: sptrungv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrungv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally interpolate vectors to stations
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS
    +
    7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS
    +
    8 C> TO SPECIFIED SETS OF STATION POINTS ON THE GLOBE.
    +
    9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    +
    10 C> THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    +
    11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    +
    12 C> THE GRID AND POINT FIELDS MAY HAVE GENERAL INDEXING.
    +
    13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    +
    14 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    +
    15 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    +
    16 C>
    +
    17 C> PROGRAM HISTORY LOG:
    +
    18 C> - 96-02-29 IREDELL
    +
    19 C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    20 C>
    +
    21 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    22 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    23 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    24 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    25 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    26 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    27 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    28 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    29 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    30 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    31 C> @param NMAX - INTEGER NUMBER OF STATION POINTS TO RETURN
    +
    32 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    33 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    34 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    35 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    36 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    37 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    38 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    39 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    40 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    41 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINT SETS
    +
    42 C> (DEFAULTS TO NMAX IF KGSKIP=0)
    +
    43 C> @param NRSKIP - INTEGER SKIP NUMBER BETWEEN STATION LATS AND LONS
    +
    44 C> (DEFAULTS TO 1 IF NRSKIP=0)
    +
    45 C> @param NGSKIP - INTEGER SKIP NUMBER BETWEEN STATION POINTS
    +
    46 C> (DEFAULTS TO 1 IF NGSKIP=0)
    +
    47 C> @param RLAT - REAL (*) STATION LATITUDES IN DEGREES
    +
    48 C> @param RLON - REAL (*) STATION LONGITUDES IN DEGREES
    +
    49 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    50 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    51 C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    +
    52 C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    +
    53 C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    +
    54 C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    +
    55 C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    +
    56 C> @param UP - REAL (*) STATION U-WINDS IF LUV
    +
    57 C> @param VP - REAL (*) STATION V-WINDS IF LUV
    +
    58 C> @param DP - REAL (*) STATION DIVERGENCES IF LDZ
    +
    59 C> @param ZP - REAL (*) STATION VORTICITIES IF LDZ
    +
    60 C> @param PP - REAL (*) STATION POTENTIALS IF LPS
    +
    61 C> @param SP - REAL (*) STATION STREAMFCNS IF LPS
    +
    62 C>
    +
    63 C> SUBPROGRAMS CALLED:
    +
    64 C> - SPWGET GET WAVE-SPACE CONSTANTS
    +
    65 C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    66 C> - SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    +
    67 C> - SPTGPT TRANSFORM SPECTRAL SCALAR TO STATION POINTS
    +
    68 C> - SPTGPTV TRANSFORM SPECTRAL VECTOR TO STATION POINTS
    +
    69 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    +
    70 C>
    +
    71 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    72 C> DIMENSION |LINEAR |QUADRATIC
    +
    73 C> ----------------------- |--------- |-------------
    +
    74 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    75 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    76 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    77 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    78 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    79 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    80 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    81  SUBROUTINE sptrungv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NMAX,
    +
    82  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    83  & NRSKIP,NGSKIP,JCPU,RLAT,RLON,GRIDUI,GRIDVI,
    +
    84  & LUV,UP,VP,LDZ,DP,ZP,LPS,PP,SP)
    +
    85 
    +
    86  LOGICAL LUV,LDZ,LPS
    +
    87  REAL RLAT(*),RLON(*),GRIDUI(*),GRIDVI(*)
    +
    88  REAL UP(*),VP(*),DP(*),ZP(*),PP(*),SP(*)
    +
    89  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    90  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    91  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    92  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    93  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    94  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    95 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    96 C TRANSFORM INPUT GRID TO WAVE
    +
    97  jc=jcpu
    +
    98  IF(jc.EQ.0) jc=ncpus()
    +
    99  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    100  mdim=2*mx+1
    +
    101  jn=-jskipi
    +
    102  IF(jn.EQ.0) jn=imaxi
    +
    103  js=-jn
    +
    104  inp=(jmaxi-1)*max(0,-jn)+1
    +
    105  isp=(jmaxi-1)*max(0,-js)+1
    +
    106  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    107  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    108  & wd,wz,
    +
    109  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    110 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    111 C TRANSFORM WAVE TO OUTPUT WINDS
    +
    112  IF(luv) THEN
    +
    113  CALL sptgptv(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    114  & rlat,rlon,wd,wz,up,vp)
    +
    115  ENDIF
    +
    116 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    117 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    118  IF(ldz) THEN
    +
    119  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    120  & rlat,rlon,wd,dp)
    +
    121  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    122  & rlat,rlon,wz,zp)
    +
    123  ENDIF
    +
    124 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    125 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    126  IF(lps) THEN
    +
    127  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    128 C$OMP PARALLEL DO
    +
    129  DO k=1,kmax
    +
    130  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    131  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    132  wd(1:2,k)=0.
    +
    133  wz(1:2,k)=0.
    +
    134  ENDDO
    +
    135  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    136  & rlat,rlon,wd,pp)
    +
    137  CALL sptgpt(iromb,maxwv,kmax,nmax,mdim,kgskip,nrskip,ngskip,
    +
    138  & rlat,rlon,wz,sp)
    +
    139  ENDIF
    +
    140 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    141  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptgpt(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVE, GP)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to spe...
    Definition: sptgpt.f:51
    +
    subroutine sptgptv(IROMB, MAXWV, KMAX, NMAX, KWSKIP, KGSKIP, NRSKIP, NGSKIP, RLAT, RLON, WAVED, WAVEZ, UP, VP)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgptv.f:54
    +
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    +
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTORS FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELD...
    Definition: sptrungv.f:85
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunl_8f.html b/ver-5.1.0/sptrunl_8f.html new file mode 100644 index 00000000..26b7b2c6 --- /dev/null +++ b/ver-5.1.0/sptrunl_8f.html @@ -0,0 +1,316 @@ + + + + + + + +NCEPLIBS-ip: sptrunl.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrunl.f File Reference
    +
    +
    + +

    Spectrally truncate to laplacian. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptrunl (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, IDIR, GRIDI, GRIDO)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPLACIAN OR INVERSE TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID. More...
     
    +

    Detailed Description

    +

    Spectrally truncate to laplacian.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrunl.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrunl()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrunl ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     IDRTO,
     IMAXO,
     JMAXO,
     KMAX,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     ISKIPO,
     JSKIPO,
     KSKIPO,
     JCPU,
     IDIR,
    real, dimension(*) GRIDI,
    real, dimension(*) GRIDO 
    )
    +
    + +

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

    +

    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
    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
    GRIDO- REAL (*) OUTPUT GRID FIELDS (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    +
    +

    SUBPROGRAMS CALLED:

      +
    • SPWGET GET WAVE-SPACE CONSTANTS
    • +
    • SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    • +
    • SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
    • +
    • NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    • +
    +

    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 78 of file sptrunl.f.

    + +

    References ncpus(), splaplac(), sptran(), and spwget().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunl_8f.js b/ver-5.1.0/sptrunl_8f.js new file mode 100644 index 00000000..892c4e7f --- /dev/null +++ b/ver-5.1.0/sptrunl_8f.js @@ -0,0 +1,4 @@ +var sptrunl_8f = +[ + [ "sptrunl", "sptrunl_8f.html#a52c4250d24e52304e49aa1d82a93bdb8", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrunl_8f_source.html b/ver-5.1.0/sptrunl_8f_source.html new file mode 100644 index 00000000..fafc43c1 --- /dev/null +++ b/ver-5.1.0/sptrunl_8f_source.html @@ -0,0 +1,219 @@ + + + + + + + +NCEPLIBS-ip: sptrunl.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrunl.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally truncate to laplacian
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS
    +
    7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPLACIAN
    +
    8 C> OR INVERSE TO A POSSIBLY DIFFERENT GLOBAL CYLINDRICAL GRID.
    +
    9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    +
    10 C> EITHER GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    +
    11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    +
    12 C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
    +
    13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    +
    14 C> OVER ZONAL WAVENUMBER TO ENSURE REPRODUCIBILITY.
    +
    15 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    +
    16 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    +
    17 C>
    +
    18 C> PROGRAM HISTORY LOG:
    +
    19 C> - 96-02-29 IREDELL
    +
    20 C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    21 C>
    +
    22 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    23 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    24 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    25 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    26 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    27 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    28 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    29 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    30 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    31 C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
    +
    32 C> (IDRTO=4 FOR GAUSSIAN GRID,
    +
    33 C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    34 C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    35 C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
    +
    36 C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
    +
    37 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    38 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    39 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    40 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    41 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    42 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    43 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    44 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    45 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    46 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    47 C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
    +
    48 C> (DEFAULTS TO 1 IF ISKIPO=0)
    +
    49 C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
    +
    50 C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
    +
    51 C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
    +
    52 C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
    +
    53 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    54 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    55 C> @param IDIR - INTEGER FLAG
    +
    56 C> IDIR > 0 TO TAKE LAPLACIAN
    +
    57 C> IDIR < 0 TO TAKE INVERSE LAPLACIAN
    +
    58 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    59 C> @param GRIDO - REAL (*) OUTPUT GRID FIELDS
    +
    60 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    61 C>
    +
    62 C> SUBPROGRAMS CALLED:
    +
    63 C> - SPWGET GET WAVE-SPACE CONSTANTS
    +
    64 C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    65 C> - SPTRAN PERFORM A SCALAR SPHERICAL TRANSFORM
    +
    66 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    +
    67 C>
    +
    68 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    69 C> DIMENSION |LINEAR |QUADRATIC
    +
    70 C> ----------------------- |--------- |-------------
    +
    71 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    72 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    73 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    74 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    75 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    76 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    77 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    78  SUBROUTINE sptrunl(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
    +
    79  & IDRTO,IMAXO,JMAXO,KMAX,
    +
    80  & IPRIME,ISKIPI,JSKIPI,KSKIPI,
    +
    81  & ISKIPO,JSKIPO,KSKIPO,JCPU,IDIR,GRIDI,GRIDO)
    +
    82 
    +
    83  REAL GRIDI(*),GRIDO(*)
    +
    84  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    85  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    86  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    87  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    88  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    89 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    90 C TRANSFORM INPUT GRID TO WAVE
    +
    91  jc=jcpu
    +
    92  IF(jc.EQ.0) jc=ncpus()
    +
    93  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    94  mdim=2*mx+1
    +
    95  jn=-jskipi
    +
    96  IF(jn.EQ.0) jn=imaxi
    +
    97  js=-jn
    +
    98  inp=(jmaxi-1)*max(0,-jn)+1
    +
    99  isp=(jmaxi-1)*max(0,-js)+1
    +
    100  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    101  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    102  & w,gridi(inp),gridi(isp),-1)
    +
    103 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    104 C TAKE LAPLACIAN AND TRANSFORM WAVE TO OUTPUT GRID
    +
    105  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    106 C$OMP PARALLEL DO
    +
    107  DO k=1,kmax
    +
    108  CALL splaplac(iromb,maxwv,enn1,w(1,k),w(1,k),idir)
    +
    109  w(1:2,k)=0.
    +
    110  ENDDO
    +
    111  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    112  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    113  & w,grido(inp),grido(isp),1)
    +
    114 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    115  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptrunl(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, IDRTO, IMAXO, JMAXO, KMAX, IPRIME, ISKIPI, JSKIPI, KSKIPI, ISKIPO, JSKIPO, KSKIPO, JCPU, IDIR, GRIDI, GRIDO)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES SCALAR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THEIR LAPL...
    Definition: sptrunl.f:82
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunm_8f.html b/ver-5.1.0/sptrunm_8f.html new file mode 100644 index 00000000..1e62005e --- /dev/null +++ b/ver-5.1.0/sptrunm_8f.html @@ -0,0 +1,327 @@ + + + + + + + +NCEPLIBS-ip: sptrunm.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrunm.f File Reference
    +
    +
    + +

    Spectrally interpolate scalars to Mercator. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptrunm (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, MI, MJ, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, RLAT1, RLON1, DLAT, DLON, GRIDI, GM)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to a Mercator grid. More...
     
    +

    Detailed Description

    +

    Spectrally interpolate scalars to Mercator.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrunm.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrunm()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrunm ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     KMAX,
     MI,
     MJ,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     KGSKIP,
     NISKIP,
     NJSKIP,
     JCPU,
     RLAT1,
     RLON1,
     DLAT,
     DLON,
    real, dimension(*) GRIDI,
    real, dimension(*) GM 
    )
    +
    + +

    This subprogram 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.

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + +
    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
    GM- REAL (*) MERCATOR FIELDS
    +
    +
    +

    SUBPROGRAMS CALLED:

      +
    • sptran() Perform a scalar spherical transform
    • +
    • sptgpm() Transform spectral scalar to Mercator
    • +
    • ncpus() Gets environment number of cpus
    • +
    +

    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 76 of file sptrunm.f.

    + +

    References ncpus(), sptgpm(), and sptran().

    + +

    Referenced by spectral_interp_mod::polates4::polates4_grib1(), and spectral_interp_mod::polates4::polates4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunm_8f.js b/ver-5.1.0/sptrunm_8f.js new file mode 100644 index 00000000..285bd268 --- /dev/null +++ b/ver-5.1.0/sptrunm_8f.js @@ -0,0 +1,4 @@ +var sptrunm_8f = +[ + [ "sptrunm", "sptrunm_8f.html#a2a4e579890d3cf7f6a26091f544b6cb6", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrunm_8f_source.html b/ver-5.1.0/sptrunm_8f_source.html new file mode 100644 index 00000000..860840d6 --- /dev/null +++ b/ver-5.1.0/sptrunm_8f_source.html @@ -0,0 +1,204 @@ + + + + + + + +NCEPLIBS-ip: sptrunm.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrunm.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally interpolate scalars to Mercator
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> This subprogram spectrally truncates scalar fields on a global
    +
    7 C> cylindrical grid, returning the fields to a Mercator grid. The
    +
    8 C> wave-space can be either triangular or rhomboidal. The grid-space
    +
    9 C> can be either an equally-spaced grid (with or without pole
    +
    10 C> points) or a Gaussian grid. The grid fields may have general
    +
    11 C> indexing. The transforms are all multiprocessed. Transform
    +
    12 C> several fields at a time to improve vectorization. Subprogram can
    +
    13 C> be called from a multiprocessing environment.
    +
    14 C>
    +
    15 C>
    +
    16 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    17 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    18 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    19 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    20 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    21 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    22 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    23 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    24 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    25 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    26 C> @param MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
    +
    27 C> @param MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
    +
    28 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    29 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    30 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    31 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    32 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    33 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    34 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    35 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    36 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    37 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    +
    38 C> (DEFAULTS TO NPS*NPS IF KGSKIP=0)
    +
    39 C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    +
    40 C> (DEFAULTS TO 1 IF NISKIP=0)
    +
    41 C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    +
    42 C> (DEFAULTS TO NPS IF NJSKIP=0)
    +
    43 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    44 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    45 C> @param RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    46 C> @param RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    47 C> @param DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
    +
    48 C> D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
    +
    49 C> DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
    +
    50 C> (IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
    +
    51 C> THE LATITUDE INCREMENT DLAT IS DETERMINED AS
    +
    52 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    +
    53 C> WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
    +
    54 C> @param DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
    +
    55 C> D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
    +
    56 C> DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
    +
    57 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    58 C> @param GM - REAL (*) MERCATOR FIELDS
    +
    59 C>
    +
    60 C> SUBPROGRAMS CALLED:
    +
    61 C> - sptran() Perform a scalar spherical transform
    +
    62 C> - sptgpm() Transform spectral scalar to Mercator
    +
    63 C> - ncpus() Gets environment number of cpus
    +
    64 C>
    +
    65 C> MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    66 C> DIMENSION |LINEAR |QUADRATIC
    +
    67 C> ----------------------- |--------- |-------------
    +
    68 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    69 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    70 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    71 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    72 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    73 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    74 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    75 C>
    +
    76  SUBROUTINE sptrunm(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
    +
    77  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    78  & NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
    +
    79  & GRIDI,GM)
    +
    80  REAL GRIDI(*),GM(*)
    +
    81  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    82 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    83 C TRANSFORM INPUT GRID TO WAVE
    +
    84  jc=jcpu
    +
    85  IF(jc.EQ.0) jc=ncpus()
    +
    86  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    87  mdim=2*mx+1
    +
    88  jn=-jskipi
    +
    89  IF(jn.EQ.0) jn=imaxi
    +
    90  js=-jn
    +
    91  inp=(jmaxi-1)*max(0,-jn)+1
    +
    92  isp=(jmaxi-1)*max(0,-js)+1
    +
    93  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    94  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    95  & w,gridi(inp),gridi(isp),-1)
    +
    96 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    97 C TRANSFORM WAVE TO OUTPUT
    +
    98  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    99  & rlat1,rlon1,dlat,dlon,w,gm)
    +
    100 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    101  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptgpm(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgpm.f:56
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptrunm(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, MI, MJ, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, RLAT1, RLON1, DLAT, DLON, GRIDI, GM)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptrunm.f:80
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunmv_8f.html b/ver-5.1.0/sptrunmv_8f.html new file mode 100644 index 00000000..33407bf7 --- /dev/null +++ b/ver-5.1.0/sptrunmv_8f.html @@ -0,0 +1,394 @@ + + + + + + + +NCEPLIBS-ip: sptrunmv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrunmv.f File Reference
    +
    +
    + +

    Spectrally interpolate vectors to Mercator. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine 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)
     THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS TO A MERCATOR GRID. More...
     
    +

    Detailed Description

    +

    Spectrally interpolate vectors to Mercator.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrunmv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrunmv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrunmv ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     KMAX,
     MI,
     MJ,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     KGSKIP,
     NISKIP,
     NJSKIP,
     JCPU,
     RLAT1,
     RLON1,
     DLAT,
     DLON,
    real, dimension(*) GRIDUI,
    real, dimension(*) GRIDVI,
    logical LUV,
    real, dimension(*) UM,
    real, dimension(*) VM,
    logical LDZ,
    real, dimension(*) DM,
    real, dimension(*) ZM,
    logical LPS,
    real, dimension(*) PM,
    real, dimension(*) SM 
    )
    +
    + +

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

    +

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

    SUBPROGRAMS CALLED:

      +
    • SPWGET GET WAVE-SPACE CONSTANTS
    • +
    • SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    • +
    • SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    • +
    • SPTGPM TRANSFORM SPECTRAL SCALAR TO MERCATOR
    • +
    • SPTGPMV TRANSFORM SPECTRAL VECTOR TO MERCATOR
    • +
    • NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    • +
    +

    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 92 of file sptrunmv.f.

    + +

    References ncpus(), splaplac(), sptgpm(), sptgpmv(), sptranv(), and spwget().

    + +

    Referenced by spectral_interp_mod::polatev4::polatev4_grib1(), and spectral_interp_mod::polatev4::polatev4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunmv_8f.js b/ver-5.1.0/sptrunmv_8f.js new file mode 100644 index 00000000..68c3d828 --- /dev/null +++ b/ver-5.1.0/sptrunmv_8f.js @@ -0,0 +1,4 @@ +var sptrunmv_8f = +[ + [ "sptrunmv", "sptrunmv_8f.html#a8b405d0621112d6852a3bb99602ac2fd", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrunmv_8f_source.html b/ver-5.1.0/sptrunmv_8f_source.html new file mode 100644 index 00000000..ecd958df --- /dev/null +++ b/ver-5.1.0/sptrunmv_8f_source.html @@ -0,0 +1,258 @@ + + + + + + + +NCEPLIBS-ip: sptrunmv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrunmv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally interpolate vectors to Mercator
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS
    +
    7 C> ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS
    +
    8 C> TO A MERCATOR GRID.
    +
    9 C> THE WAVE-SPACE CAN BE EITHER TRIANGULAR OR RHOMBOIDAL.
    +
    10 C> THE GRID-SPACE CAN BE EITHER AN EQUALLY-SPACED GRID
    +
    11 C> (WITH OR WITHOUT POLE POINTS) OR A GAUSSIAN GRID.
    +
    12 C> THE GRID FIELDS MAY HAVE GENERAL INDEXING.
    +
    13 C> THE TRANSFORMS ARE ALL MULTIPROCESSED.
    +
    14 C> TRANSFORM SEVERAL FIELDS AT A TIME TO IMPROVE VECTORIZATION.
    +
    15 C> SUBPROGRAM CAN BE CALLED FROM A MULTIPROCESSING ENVIRONMENT.
    +
    16 C>
    +
    17 C> PROGRAM HISTORY LOG:
    +
    18 C> 96-02-29 IREDELL
    +
    19 C> 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    20 C>
    +
    21 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    22 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    23 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    24 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    25 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    26 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    27 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    28 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    29 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    30 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    31 C> @param MI - INTEGER NUMBER OF POINTS IN THE FASTER ZONAL DIRECTION
    +
    32 C> @param MJ - INTEGER NUMBER OF POINTS IN THE SLOWER MERID DIRECTION
    +
    33 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    34 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    35 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    36 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    37 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    38 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    39 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    40 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    41 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    42 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    +
    43 C> (DEFAULTS TO MI*MJ IF KGSKIP=0)
    +
    44 C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    +
    45 C> (DEFAULTS TO 1 IF NISKIP=0)
    +
    46 C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    +
    47 C> (DEFAULTS TO MI IF NJSKIP=0)
    +
    48 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    49 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    50 C> @param RLAT1 - REAL LATITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    51 C> @param RLON1 - REAL LONGITUDE OF THE FIRST GRID POINT IN DEGREES
    +
    52 C> @param DLAT - REAL LATITUDE INCREMENT IN DEGREES SUCH THAT
    +
    53 C> D(PHI)/D(J)=DLAT*COS(PHI) WHERE J IS MERIDIONAL INDEX.
    +
    54 C> DLAT IS NEGATIVE FOR GRIDS INDEXED SOUTHWARD.
    +
    55 C> (IN TERMS OF GRID INCREMENT DY VALID AT LATITUDE RLATI,
    +
    56 C> THE LATITUDE INCREMENT DLAT IS DETERMINED AS
    +
    57 C> DLAT=DPR*DY/(RERTH*COS(RLATI/DPR))
    +
    58 C> WHERE DPR=180/PI AND RERTH IS EARTH'S RADIUS)
    +
    59 C> @param DLON - REAL LONGITUDE INCREMENT IN DEGREES SUCH THAT
    +
    60 C> D(LAMBDA)/D(I)=DLON WHERE I IS ZONAL INDEX.
    +
    61 C> DLON IS NEGATIVE FOR GRIDS INDEXED WESTWARD.
    +
    62 C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    +
    63 C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    +
    64 C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    +
    65 C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    +
    66 C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    +
    67 C> @param UM - REAL (*) MERCATOR U-WINDS IF LUV
    +
    68 C> @param VM - REAL (*) MERCATOR V-WINDS IF LUV
    +
    69 C> @param DM - REAL (*) MERCATOR DIVERGENCES IF LDZ
    +
    70 C> @param ZM - REAL (*) MERCATOR VORTICITIES IF LDZ
    +
    71 C> @param PM - REAL (*) MERCATOR POTENTIALS IF LPS
    +
    72 C> @param SM - REAL (*) MERCATOR STREAMFCNS IF LPS
    +
    73 C>
    +
    74 C> SUBPROGRAMS CALLED:
    +
    75 C> - SPWGET GET WAVE-SPACE CONSTANTS
    +
    76 C> - SPLAPLAC COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    77 C> - SPTRANV PERFORM A VECTOR SPHERICAL TRANSFORM
    +
    78 C> - SPTGPM TRANSFORM SPECTRAL SCALAR TO MERCATOR
    +
    79 C> - SPTGPMV TRANSFORM SPECTRAL VECTOR TO MERCATOR
    +
    80 C> - NCPUS GETS ENVIRONMENT NUMBER OF CPUS
    +
    81 C>
    +
    82 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    83 C> DIMENSION |LINEAR |QUADRATIC
    +
    84 C> ----------------------- |--------- |-------------
    +
    85 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    86 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    87 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    88 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    89 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    90 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    91 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    92  SUBROUTINE sptrunmv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,MI,MJ,
    +
    93  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    94  & NISKIP,NJSKIP,JCPU,RLAT1,RLON1,DLAT,DLON,
    +
    95  & GRIDUI,GRIDVI,LUV,UM,VM,LDZ,DM,ZM,LPS,PM,SM)
    +
    96 
    +
    97  LOGICAL LUV,LDZ,LPS
    +
    98  REAL GRIDUI(*),GRIDVI(*)
    +
    99  REAL UM(*),VM(*),DM(*),ZM(*),PM(*),SM(*)
    +
    100  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    101  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    102  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    103  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    104  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    105  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    106 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    107 C TRANSFORM INPUT GRID TO WAVE
    +
    108  jc=jcpu
    +
    109  IF(jc.EQ.0) jc=ncpus()
    +
    110  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    111  mdim=2*mx+1
    +
    112  jn=-jskipi
    +
    113  IF(jn.EQ.0) jn=imaxi
    +
    114  js=-jn
    +
    115  inp=(jmaxi-1)*max(0,-jn)+1
    +
    116  isp=(jmaxi-1)*max(0,-js)+1
    +
    117  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    118  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    119  & wd,wz,
    +
    120  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    121 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    122 C TRANSFORM WAVE TO OUTPUT WINDS
    +
    123  IF(luv) THEN
    +
    124  CALL sptgpmv(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    125  & rlat1,rlon1,dlat,dlon,wd,wz,um,vm)
    +
    126  ENDIF
    +
    127 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    128 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    129  IF(ldz) THEN
    +
    130  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    131  & rlat1,rlon1,dlat,dlon,wd,dm)
    +
    132  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    133  & rlat1,rlon1,dlat,dlon,wz,zm)
    +
    134  ENDIF
    +
    135 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    136 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    137  IF(lps) THEN
    +
    138  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    139 C$OMP PARALLEL DO
    +
    140  DO k=1,kmax
    +
    141  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    142  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    143  wd(1:2,k)=0.
    +
    144  wz(1:2,k)=0.
    +
    145  ENDDO
    +
    146  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    147  & rlat1,rlon1,dlat,dlon,wd,pm)
    +
    148  CALL sptgpm(iromb,maxwv,kmax,mi,mj,mdim,kgskip,niskip,njskip,
    +
    149  & rlat1,rlon1,dlat,dlon,wz,sm)
    +
    150  ENDIF
    +
    151 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    152  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptgpm(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVE, GM)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgpm.f:56
    +
    subroutine sptgpmv(IROMB, MAXWV, KMAX, MI, MJ, KWSKIP, KGSKIP, NISKIP, NJSKIP, RLAT1, RLON1, DLAT, DLON, WAVED, WAVEZ, UM, VM)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpmv.f:63
    +
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    +
    subroutine 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)
    THIS SUBPROGRAM SPECTRALLY TRUNCATES VECTOR FIELDS ON A GLOBAL CYLINDRICAL GRID, RETURNING THE FIELDS...
    Definition: sptrunmv.f:96
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptruns_8f.html b/ver-5.1.0/sptruns_8f.html new file mode 100644 index 00000000..8491dd6d --- /dev/null +++ b/ver-5.1.0/sptruns_8f.html @@ -0,0 +1,321 @@ + + + + + + + +NCEPLIBS-ip: sptruns.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptruns.f File Reference
    +
    +
    + +

    Spectrally interpolate scalars to polar stereo. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine sptruns (IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NPS, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, TRUE, XMESH, ORIENT, GRIDI, GN, GS)
     This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields to specific pairs of polar stereographic scalar fields. More...
     
    +

    Detailed Description

    +

    Spectrally interpolate scalars to polar stereo.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptruns.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptruns()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptruns ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     KMAX,
     NPS,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     KGSKIP,
     NISKIP,
     NJSKIP,
     JCPU,
     TRUE,
     XMESH,
     ORIENT,
    real, dimension(*) GRIDI,
    real, dimension(*) GN,
    real, dimension(*) GS 
    )
    +
    + +

    This subprogram 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.

    +

    PROGRAM HISTORY LOG: 96-02-29 IREDELL

    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + +
    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
    GN- REAL (*) NORTHERN POLAR STEREOGRAPHIC FIELDS
    GS- REAL (*) SOUTHERN POLAR STEREOGRAPHIC FIELDS
    +
    +
    +

    SUBPROGRAMS CALLED:

      +
    • sptran() Perform a scalar spherical transform
    • +
    • sptgps() Transform spectral scalar to polar stereo.
    • +
    • ncpus() Gets environment number of cpus
    • +
    +

    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 71 of file sptruns.f.

    + +

    References ncpus(), sptgps(), and sptran().

    + +

    Referenced by spectral_interp_mod::polates4::polates4_grib1(), and spectral_interp_mod::polates4::polates4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptruns_8f.js b/ver-5.1.0/sptruns_8f.js new file mode 100644 index 00000000..cc546092 --- /dev/null +++ b/ver-5.1.0/sptruns_8f.js @@ -0,0 +1,4 @@ +var sptruns_8f = +[ + [ "sptruns", "sptruns_8f.html#a34f156e2049105d012e445f8aa215444", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptruns_8f_source.html b/ver-5.1.0/sptruns_8f_source.html new file mode 100644 index 00000000..58997ed2 --- /dev/null +++ b/ver-5.1.0/sptruns_8f_source.html @@ -0,0 +1,199 @@ + + + + + + + +NCEPLIBS-ip: sptruns.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptruns.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally interpolate scalars to polar stereo
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> This subprogram spectrally truncates scalar fields on a global
    +
    7 C> cylindrical grid, returning the fields to specific pairs of polar
    +
    8 C> stereographic scalar fields. The wave-space can be either
    +
    9 C> triangular or rhomboidal. The grid-space can be either an
    +
    10 C> equally-spaced grid (with or without pole points) or a Gaussian
    +
    11 C> grid. The grid fields may have general indexing. The transforms
    +
    12 C> are all multiprocessed. Transform several fields at a time to
    +
    13 C> improve vectorization. Subprogram can be called from a
    +
    14 C> multiprocessing environment.
    +
    15 C>
    +
    16 C> PROGRAM HISTORY LOG:
    +
    17 C> 96-02-29 IREDELL
    +
    18 C>
    +
    19 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    20 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    21 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    22 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    23 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    24 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    25 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    26 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    27 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    28 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    29 C> @param NPS - INTEGER ODD ORDER OF THE POLAR STEREOGRAPHIC GRIDS
    +
    30 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    31 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    32 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    33 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    34 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    35 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    36 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    37 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    38 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    39 C> @param KGSKIP - INTEGER SKIP NUMBER BETWEEN GRID FIELDS
    +
    40 C> (DEFAULTS TO NPS*NPS IF KGSKIP=0)
    +
    41 C> @param NISKIP - INTEGER SKIP NUMBER BETWEEN GRID I-POINTS
    +
    42 C> (DEFAULTS TO 1 IF NISKIP=0)
    +
    43 C> @param NJSKIP - INTEGER SKIP NUMBER BETWEEN GRID J-POINTS
    +
    44 C> (DEFAULTS TO NPS IF NJSKIP=0)
    +
    45 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    46 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    47 C> @param TRUE - REAL LATITUDE AT WHICH PS GRID IS TRUE (USUALLY 60.)
    +
    48 C> @param XMESH - REAL GRID LENGTH AT TRUE LATITUDE (M)
    +
    49 C> @param ORIENT - REAL LONGITUDE AT BOTTOM OF NORTHERN PS GRID
    +
    50 C> (SOUTHERN PS GRID WILL HAVE OPPOSITE ORIENTATION.)
    +
    51 C> @param GRIDI - REAL (*) INPUT GRID FIELDS
    +
    52 C> @param GN - REAL (*) NORTHERN POLAR STEREOGRAPHIC FIELDS
    +
    53 C> @param GS - REAL (*) SOUTHERN POLAR STEREOGRAPHIC FIELDS
    +
    54 C>
    +
    55 C> SUBPROGRAMS CALLED:
    +
    56 C> - sptran() Perform a scalar spherical transform
    +
    57 C> - sptgps() Transform spectral scalar to polar stereo.
    +
    58 C> - ncpus() Gets environment number of cpus
    +
    59 C>
    +
    60 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    61 C> DIMENSION | LINEAR | QUADRATIC
    +
    62 C> ----------------------- | --------- | -------------
    +
    63 C> IMAX | 2*MAXWV+2 | 3*MAXWV/2*2+2
    +
    64 C> JMAX (IDRT=4,IROMB=0) | 1*MAXWV+1 | 3*MAXWV/2+1
    +
    65 C> JMAX (IDRT=4,IROMB=1) | 2*MAXWV+1 | 5*MAXWV/2+1
    +
    66 C> JMAX (IDRT=0,IROMB=0) | 2*MAXWV+3 | 3*MAXWV/2*2+3
    +
    67 C> JMAX (IDRT=0,IROMB=1) | 4*MAXWV+3 | 5*MAXWV/2*2+3
    +
    68 C> JMAX (IDRT=256,IROMB=0) | 2*MAXWV+1 | 3*MAXWV/2*2+1
    +
    69 C> JMAX (IDRT=256,IROMB=1) | 4*MAXWV+1 | 5*MAXWV/2*2+1
    +
    70 C>
    +
    71  SUBROUTINE sptruns(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
    +
    72  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    73  & NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
    +
    74  & GRIDI,GN,GS)
    +
    75  REAL GRIDI(*),GN(*),GS(*)
    +
    76  REAL W((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    77 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    78 C TRANSFORM INPUT GRID TO WAVE
    +
    79  jc=jcpu
    +
    80  IF(jc.EQ.0) jc=ncpus()
    +
    81  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    82  mdim=2*mx+1
    +
    83  jn=-jskipi
    +
    84  IF(jn.EQ.0) jn=imaxi
    +
    85  js=-jn
    +
    86  inp=(jmaxi-1)*max(0,-jn)+1
    +
    87  isp=(jmaxi-1)*max(0,-js)+1
    +
    88  CALL sptran(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    89  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    90  & w,gridi(inp),gridi(isp),-1)
    +
    91 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    92 C TRANSFORM WAVE TO OUTPUT
    +
    93  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    94  & true,xmesh,orient,w,gn,gs)
    +
    95 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    96  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine sptgps(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgps.f:81
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptruns(IROMB, MAXWV, IDRTI, IMAXI, JMAXI, KMAX, NPS, IPRIME, ISKIPI, JSKIPI, KSKIPI, KGSKIP, NISKIP, NJSKIP, JCPU, TRUE, XMESH, ORIENT, GRIDI, GN, GS)
    This subprogram spectrally truncates scalar fields on a global cylindrical grid, returning the fields...
    Definition: sptruns.f:75
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunsv_8f.html b/ver-5.1.0/sptrunsv_8f.html new file mode 100644 index 00000000..eada62f8 --- /dev/null +++ b/ver-5.1.0/sptrunsv_8f.html @@ -0,0 +1,426 @@ + + + + + + + +NCEPLIBS-ip: sptrunsv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrunsv.f File Reference
    +
    +
    + +

    Spectrally interpolate vectors to polar stereo. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine 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)
     This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields to specific pairs of polar stereographic scalar fields. More...
     
    +

    Detailed Description

    +

    Spectrally interpolate vectors to polar stereo.

    +

    96-02-29 | Iredell | Initial. 1998-12-15 | Iredell | Openmp directives inserted.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file sptrunsv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrunsv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrunsv ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     KMAX,
     NPS,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     KGSKIP,
     NISKIP,
     NJSKIP,
     JCPU,
     TRUE,
     XMESH,
     ORIENT,
    real, dimension(*) GRIDUI,
    real, dimension(*) GRIDVI,
    logical LUV,
    real, dimension(*) UN,
    real, dimension(*) VN,
    real, dimension(*) US,
    real, dimension(*) VS,
    logical LDZ,
    real, dimension(*) DN,
    real, dimension(*) ZN,
    real, dimension(*) DS,
    real, dimension(*) ZS,
    logical LPS,
    real, dimension(*) PN,
    real, dimension(*) SN,
    real, dimension(*) PS,
    real, dimension(*) SS 
    )
    +
    + +

    This subprogram 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.

    +

    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
    +
    Parameters
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    IROMBinteger spectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVinteger spectral truncation
    IDRTIinteger input grid identifier
      +
    • IDRTI=4 for Gaussian grid
    • +
    • IDRTI=0 for equally-spaced grid including poles
    • +
    • IDRTI=256 for equally-spaced grid excluding poles
    • +
    +
    IMAXIinteger even number of input longitudes.
    JMAXIinteger number of input latitudes.
    KMAXinteger number of fields to transform.
    NPSinteger odd order of the polar stereographic grids
    IPRIMEinteger input longitude index for the prime meridian. (defaults to 1 if IPRIME=0) (output longitude index for prime meridian assumed 1.)
    ISKIPIinteger skip number between input longitudes (defaults to 1 if ISKIPI=0)
    JSKIPIinteger skip number between input latitudes from south (defaults to -IMAXI if JSKIPI=0)
    KSKIPIinteger skip number between input grid fields (defaults to IMAXI*JMAXI if KSKIPI=0)
    KGSKIPinteger skip number between grid fields (defaults to NPS*NPS if KGSKIP=0)
    NISKIPinteger skip number between grid i-points (defaults to 1 if NISKIP=0)
    NJSKIPinteger skip number between grid j-points (defaults to NPS if NJSKIP=0)
    JCPUinteger number of cpus over which to multiprocess (defaults to environment NCPUS if JCPU=0)
    TRUEreal latitude at which ps grid is true (usually 60.)
    XMESHreal grid length at true latitude (m)
    ORIENTreal longitude at bottom of Northern PS grid (Southern PS grid will have opposite orientation.)
    GRIDUIreal input grid u-winds
    GRIDVIreal input grid v-winds
    LUVlogical flag whether to return winds
    LDZlogical flag whether to return divergence and vorticity
    LPSlogical flag whether to return potential and streamfcn
    UNreal northern ps u-winds if luv
    VNreal northern ps v-winds if luv
    USreal southern ps u-winds if luv
    VSreal southern ps v-winds if luv
    DNreal northern divergences if ldz
    ZNreal northern vorticities if ldz
    DSreal southern divergences if ldz
    ZSreal southern vorticities if ldz
    PNreal northern potentials if lps
    SNreal northern streamfcns if lps
    PSreal southern potentials if lps
    SSreal southern streamfcns if lps
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition at line 88 of file sptrunsv.f.

    + +

    References ncpus(), splaplac(), sptgps(), sptgpsv(), sptranv(), and spwget().

    + +

    Referenced by spectral_interp_mod::polatev4::polatev4_grib1(), and spectral_interp_mod::polatev4::polatev4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunsv_8f.js b/ver-5.1.0/sptrunsv_8f.js new file mode 100644 index 00000000..af10490c --- /dev/null +++ b/ver-5.1.0/sptrunsv_8f.js @@ -0,0 +1,4 @@ +var sptrunsv_8f = +[ + [ "sptrunsv", "sptrunsv_8f.html#a1373b651b9dea586e33d3033aae68656", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrunsv_8f_source.html b/ver-5.1.0/sptrunsv_8f_source.html new file mode 100644 index 00000000..c3298aa7 --- /dev/null +++ b/ver-5.1.0/sptrunsv_8f_source.html @@ -0,0 +1,255 @@ + + + + + + + +NCEPLIBS-ip: sptrunsv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrunsv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Spectrally interpolate vectors to polar stereo.
    +
    3 C>
    +
    4 C> 96-02-29 | Iredell | Initial.
    +
    5 C> 1998-12-15 | Iredell | Openmp directives inserted.
    +
    6 C>
    +
    7 C> @author Iredell @date 96-02-29
    +
    8 
    +
    9 C> This subprogram spectrally truncates vector fields
    +
    10 C> on a global cylindrical grid, returning the fields
    +
    11 C> to specific pairs of polar stereographic scalar fields.
    +
    12 C>
    +
    13 C> The wave-space can be either triangular or rhomboidal.
    +
    14 C>
    +
    15 C> The grid-space can be either an equally-spaced grid
    +
    16 C> (with or without pole points) or a gaussian grid.
    +
    17 C>
    +
    18 C> The grid fields may have general indexing.
    +
    19 C>
    +
    20 C> The transforms are all multiprocessed.
    +
    21 C>
    +
    22 C> Transform several fields at a time to improve vectorization.
    +
    23 C>
    +
    24 C> Subprogram can be called from a multiprocessing environment.
    +
    25 C>
    +
    26 C> Minimum grid dimensions for unaliased transforms to spectral:
    +
    27 C> Dimension |Linear |Quadratic
    +
    28 C> ----------------------- |--------- |-------------
    +
    29 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    30 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    31 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    32 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    33 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    34 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    35 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    36 C>
    +
    37 C> @param IROMB integer spectral domain shape
    +
    38 C> (0 for triangular, 1 for rhomboidal)
    +
    39 C> @param MAXWV integer spectral truncation
    +
    40 C> @param IDRTI integer input grid identifier
    +
    41 C> - IDRTI=4 for Gaussian grid
    +
    42 C> - IDRTI=0 for equally-spaced grid including poles
    +
    43 C> - IDRTI=256 for equally-spaced grid excluding poles
    +
    44 C> @param IMAXI integer even number of input longitudes.
    +
    45 C> @param JMAXI integer number of input latitudes.
    +
    46 C> @param KMAX integer number of fields to transform.
    +
    47 C> @param NPS integer odd order of the polar stereographic grids
    +
    48 C> @param IPRIME integer input longitude index for the prime meridian.
    +
    49 C> (defaults to 1 if IPRIME=0)
    +
    50 C> (output longitude index for prime meridian assumed 1.)
    +
    51 C> @param ISKIPI integer skip number between input longitudes
    +
    52 C> (defaults to 1 if ISKIPI=0)
    +
    53 C> @param JSKIPI integer skip number between input latitudes from south
    +
    54 C> (defaults to -IMAXI if JSKIPI=0)
    +
    55 C> @param KSKIPI integer skip number between input grid fields
    +
    56 C> (defaults to IMAXI*JMAXI if KSKIPI=0)
    +
    57 C> @param KGSKIP integer skip number between grid fields
    +
    58 C> (defaults to NPS*NPS if KGSKIP=0)
    +
    59 C> @param NISKIP integer skip number between grid i-points
    +
    60 C> (defaults to 1 if NISKIP=0)
    +
    61 C> @param NJSKIP integer skip number between grid j-points
    +
    62 C> (defaults to NPS if NJSKIP=0)
    +
    63 C> @param JCPU integer number of cpus over which to multiprocess
    +
    64 C> (defaults to environment NCPUS if JCPU=0)
    +
    65 C> @param TRUE real latitude at which ps grid is true (usually 60.)
    +
    66 C> @param XMESH real grid length at true latitude (m)
    +
    67 C> @param ORIENT real longitude at bottom of Northern PS grid
    +
    68 C> (Southern PS grid will have opposite orientation.)
    +
    69 C> @param GRIDUI real input grid u-winds
    +
    70 C> @param GRIDVI real input grid v-winds
    +
    71 C> @param LUV logical flag whether to return winds
    +
    72 C> @param LDZ logical flag whether to return divergence and vorticity
    +
    73 C> @param LPS logical flag whether to return potential and streamfcn
    +
    74 C> @param UN real northern ps u-winds if luv
    +
    75 C> @param VN real northern ps v-winds if luv
    +
    76 C> @param US real southern ps u-winds if luv
    +
    77 C> @param VS real southern ps v-winds if luv
    +
    78 C> @param DN real northern divergences if ldz
    +
    79 C> @param ZN real northern vorticities if ldz
    +
    80 C> @param DS real southern divergences if ldz
    +
    81 C> @param ZS real southern vorticities if ldz
    +
    82 C> @param PN real northern potentials if lps
    +
    83 C> @param SN real northern streamfcns if lps
    +
    84 C> @param PS real southern potentials if lps
    +
    85 C> @param SS real southern streamfcns if lps
    +
    86 C>
    +
    87 C> @author Iredell @date 96-02-29
    +
    88  SUBROUTINE sptrunsv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,KMAX,NPS,
    +
    89  & IPRIME,ISKIPI,JSKIPI,KSKIPI,KGSKIP,
    +
    90  & NISKIP,NJSKIP,JCPU,TRUE,XMESH,ORIENT,
    +
    91  & GRIDUI,GRIDVI,
    +
    92  & LUV,UN,VN,US,VS,LDZ,DN,ZN,DS,ZS,
    +
    93  & LPS,PN,SN,PS,SS)
    +
    94  LOGICAL LUV,LDZ,LPS
    +
    95  REAL GRIDUI(*),GRIDVI(*)
    +
    96  REAL UN(*),VN(*),US(*),VS(*),DN(*),ZN(*),DS(*),ZS(*)
    +
    97  REAL PN(*),SN(*),PS(*),SS(*)
    +
    98  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    99  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    100  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    101  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    102  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    103  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    104 
    +
    105 C TRANSFORM INPUT GRID TO WAVE
    +
    106  jc=jcpu
    +
    107  IF(jc.EQ.0) jc=ncpus()
    +
    108  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    109  mdim=2*mx+1
    +
    110  jn=-jskipi
    +
    111  IF(jn.EQ.0) jn=imaxi
    +
    112  js=-jn
    +
    113  inp=(jmaxi-1)*max(0,-jn)+1
    +
    114  isp=(jmaxi-1)*max(0,-js)+1
    +
    115  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    116  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    117  & wd,wz,
    +
    118  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    119 
    +
    120 C TRANSFORM WAVE TO OUTPUT WINDS
    +
    121  IF(luv) THEN
    +
    122  CALL sptgpsv(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    123  & true,xmesh,orient,wd,wz,un,vn,us,vs)
    +
    124  ENDIF
    +
    125 
    +
    126 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    127  IF(ldz) THEN
    +
    128  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    129  & true,xmesh,orient,wd,dn,ds)
    +
    130  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    131  & true,xmesh,orient,wz,zn,zs)
    +
    132  ENDIF
    +
    133 
    +
    134 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    135  IF(lps) THEN
    +
    136  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    137 C$OMP PARALLEL DO
    +
    138  DO k=1,kmax
    +
    139  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    140  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    141  wd(1:2,k)=0.
    +
    142  wz(1:2,k)=0.
    +
    143  ENDDO
    +
    144  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    145  & true,xmesh,orient,wd,pn,ps)
    +
    146  CALL sptgps(iromb,maxwv,kmax,nps,mdim,kgskip,niskip,njskip,
    +
    147  & true,xmesh,orient,wz,sn,ss)
    +
    148  ENDIF
    +
    149  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptgps(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVE, GN, GS)
    This subprogram performs a spherical transform from spectral coefficients of scalar quantities to sca...
    Definition: sptgps.f:81
    +
    subroutine sptgpsv(IROMB, MAXWV, KMAX, NPS, KWSKIP, KGSKIP, NISKIP, NJSKIP, TRUE, XMESH, ORIENT, WAVED, WAVEZ, UN, VN, US, VS)
    This subprogram performs a spherical transform from spectral coefficients of divergences and curls to...
    Definition: sptgpsv.f:83
    +
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunsv.f:94
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunv_8f.html b/ver-5.1.0/sptrunv_8f.html new file mode 100644 index 00000000..19b8f50e --- /dev/null +++ b/ver-5.1.0/sptrunv_8f.html @@ -0,0 +1,375 @@ + + + + + + + +NCEPLIBS-ip: sptrunv.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    sptrunv.f File Reference
    +
    +
    + +

    Spectrally truncate gridded vector fields. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine 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)
     This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields to a possibly different global cylindrical grid. More...
     
    +

    Detailed Description

    +

    Spectrally truncate gridded vector fields.

    +
    Author
    IREDELL
    +
    Date
    96-02-29
    + +

    Definition in file sptrunv.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ sptrunv()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine sptrunv ( IROMB,
     MAXWV,
     IDRTI,
     IMAXI,
     JMAXI,
     IDRTO,
     IMAXO,
     JMAXO,
     KMAX,
     IPRIME,
     ISKIPI,
     JSKIPI,
     KSKIPI,
     ISKIPO,
     JSKIPO,
     KSKIPO,
     JCPU,
    real, dimension(*) GRIDUI,
    real, dimension(*) GRIDVI,
    logical LUV,
    real, dimension(*) GRIDUO,
    real, dimension(*) GRIDVO,
    logical LDZ,
    real, dimension(*) GRIDDO,
    real, dimension(*) GRIDZO,
    logical LPS,
    real, dimension(*) GRIDPO,
    real, dimension(*) GRIDSO 
    )
    +
    + +

    This subprogram 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.

    +

    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
    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
    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)
    +
    +
    +

    SUBPROGRAMS CALLED:

      +
    • SPWGET() GET WAVE-SPACE CONSTANTS
    • +
    • SPLAPLAC() COMPUTE LAPLACIAN IN SPECTRAL SPACE
    • +
    • SPTRAN() PERFORM A SCALAR SPHERICAL TRANSFORM
    • +
    • SPTRANV() PERFORM A VECTOR SPHERICAL TRANSFORM
    • +
    • NCPUS() GETS ENVIRONMENT NUMBER OF CPUS
    • +
    +

    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 90 of file sptrunv.f.

    + +

    References ncpus(), splaplac(), sptran(), sptranv(), and spwget().

    + +

    Referenced by spectral_interp_mod::polatev4::polatev4_grib1(), and spectral_interp_mod::polatev4::polatev4_grib2().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/sptrunv_8f.js b/ver-5.1.0/sptrunv_8f.js new file mode 100644 index 00000000..ce8c98f1 --- /dev/null +++ b/ver-5.1.0/sptrunv_8f.js @@ -0,0 +1,4 @@ +var sptrunv_8f = +[ + [ "sptrunv", "sptrunv_8f.html#a9aa39c13dd38585b3afb30cb2486817f", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/sptrunv_8f_source.html b/ver-5.1.0/sptrunv_8f_source.html new file mode 100644 index 00000000..9d41d87d --- /dev/null +++ b/ver-5.1.0/sptrunv_8f_source.html @@ -0,0 +1,267 @@ + + + + + + + +NCEPLIBS-ip: sptrunv.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    sptrunv.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C>
    +
    3 C> Spectrally truncate gridded vector fields
    +
    4 C> @author IREDELL @date 96-02-29
    +
    5 
    +
    6 C> This subprogram spectrally truncates vector fields
    +
    7 C> on a global cylindrical grid, returning the fields
    +
    8 C> to a possibly different global cylindrical grid.
    +
    9 C> The wave-space can be either triangular or rhomboidal.
    +
    10 C> Either grid-space can be either an equally-spaced grid
    +
    11 C> (with or without pole points) or a Gaussian grid.
    +
    12 C> The grid fields may have general indexing.
    +
    13 C> The transforms are all multiprocessed.
    +
    14 C> Over zonal wavenumber to ensure reproducibility.
    +
    15 C> Transform several fields at a time to improve vectorization.
    +
    16 C> Subprogram can be called from a multiprocessing environment.
    +
    17 C>
    +
    18 C> PROGRAM HISTORY LOG:
    +
    19 C> - 96-02-29 IREDELL
    +
    20 C> - 1998-12-15 IREDELL OPENMP DIRECTIVES INSERTED
    +
    21 C>
    +
    22 C> @param IROMB - INTEGER SPECTRAL DOMAIN SHAPE
    +
    23 C> (0 FOR TRIANGULAR, 1 FOR RHOMBOIDAL)
    +
    24 C> @param MAXWV - INTEGER SPECTRAL TRUNCATION
    +
    25 C> @param IDRTI - INTEGER INPUT GRID IDENTIFIER
    +
    26 C> (IDRTI=4 FOR GAUSSIAN GRID,
    +
    27 C> IDRTI=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    28 C> IDRTI=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    29 C> @param IMAXI - INTEGER EVEN NUMBER OF INPUT LONGITUDES.
    +
    30 C> @param JMAXI - INTEGER NUMBER OF INPUT LATITUDES.
    +
    31 C> @param IDRTO - INTEGER OUTPUT GRID IDENTIFIER
    +
    32 C> (IDRTO=4 FOR GAUSSIAN GRID,
    +
    33 C> IDRTO=0 FOR EQUALLY-SPACED GRID INCLUDING POLES,
    +
    34 C> IDRTO=256 FOR EQUALLY-SPACED GRID EXCLUDING POLES)
    +
    35 C> @param IMAXO - INTEGER EVEN NUMBER OF OUTPUT LONGITUDES.
    +
    36 C> @param JMAXO - INTEGER NUMBER OF OUTPUT LATITUDES.
    +
    37 C> @param KMAX - INTEGER NUMBER OF FIELDS TO TRANSFORM.
    +
    38 C> @param IPRIME - INTEGER INPUT LONGITUDE INDEX FOR THE PRIME MERIDIAN.
    +
    39 C> (DEFAULTS TO 1 IF IPRIME=0)
    +
    40 C> (OUTPUT LONGITUDE INDEX FOR PRIME MERIDIAN ASSUMED 1.)
    +
    41 C> @param ISKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LONGITUDES
    +
    42 C> (DEFAULTS TO 1 IF ISKIPI=0)
    +
    43 C> @param JSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT LATITUDES FROM SOUTH
    +
    44 C> (DEFAULTS TO -IMAXI IF JSKIPI=0)
    +
    45 C> @param KSKIPI - INTEGER SKIP NUMBER BETWEEN INPUT GRID FIELDS
    +
    46 C> (DEFAULTS TO IMAXI*JMAXI IF KSKIPI=0)
    +
    47 C> @param ISKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LONGITUDES
    +
    48 C> (DEFAULTS TO 1 IF ISKIPO=0)
    +
    49 C> @param JSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT LATITUDES FROM SOUTH
    +
    50 C> (DEFAULTS TO -IMAXO IF JSKIPO=0)
    +
    51 C> @param KSKIPO - INTEGER SKIP NUMBER BETWEEN OUTPUT GRID FIELDS
    +
    52 C> (DEFAULTS TO IMAXO*JMAXO IF KSKIPO=0)
    +
    53 C> @param JCPU - INTEGER NUMBER OF CPUS OVER WHICH TO MULTIPROCESS
    +
    54 C> (DEFAULTS TO ENVIRONMENT NCPUS IF JCPU=0)
    +
    55 C> @param GRIDUI - REAL (*) INPUT GRID U-WINDS
    +
    56 C> @param GRIDVI - REAL (*) INPUT GRID V-WINDS
    +
    57 C> @param LUV - LOGICAL FLAG WHETHER TO RETURN WINDS
    +
    58 C> @param LDZ - LOGICAL FLAG WHETHER TO RETURN DIVERGENCE AND VORTICITY
    +
    59 C> @param LPS - LOGICAL FLAG WHETHER TO RETURN POTENTIAL AND STREAMFCN
    +
    60 C> @param GRIDUO - REAL (*) OUTPUT U-WINDS IF LUV
    +
    61 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    62 C> @param GRIDVO - REAL (*) OUTPUT V-WINDS IF LUV
    +
    63 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    64 C> @param GRIDDO - REAL (*) OUTPUT DIVERGENCES IF LDZ
    +
    65 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    66 C> @param GRIDZO - REAL (*) OUTPUT VORTICITIES IF LDZ
    +
    67 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    68 C> @param GRIDPO - REAL (*) OUTPUT POTENTIALS IF LPS
    +
    69 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    70 C> @param GRIDSO - REAL (*) OUTPUT STREAMFCNS IF LPS
    +
    71 C> (MAY OVERLAY INPUT FIELDS IF GRID SHAPE IS APPROPRIATE)
    +
    72 C>
    +
    73 C> SUBPROGRAMS CALLED:
    +
    74 C> - SPWGET() GET WAVE-SPACE CONSTANTS
    +
    75 C> - SPLAPLAC() COMPUTE LAPLACIAN IN SPECTRAL SPACE
    +
    76 C> - SPTRAN() PERFORM A SCALAR SPHERICAL TRANSFORM
    +
    77 C> - SPTRANV() PERFORM A VECTOR SPHERICAL TRANSFORM
    +
    78 C> - NCPUS() GETS ENVIRONMENT NUMBER OF CPUS
    +
    79 C>
    +
    80 C> REMARKS: MINIMUM GRID DIMENSIONS FOR UNALIASED TRANSFORMS TO SPECTRAL:
    +
    81 C> DIMENSION |LINEAR |QUADRATIC
    +
    82 C> ----------------------- |--------- |-------------
    +
    83 C> IMAX |2*MAXWV+2 |3*MAXWV/2*2+2
    +
    84 C> JMAX (IDRT=4,IROMB=0) |1*MAXWV+1 |3*MAXWV/2+1
    +
    85 C> JMAX (IDRT=4,IROMB=1) |2*MAXWV+1 |5*MAXWV/2+1
    +
    86 C> JMAX (IDRT=0,IROMB=0) |2*MAXWV+3 |3*MAXWV/2*2+3
    +
    87 C> JMAX (IDRT=0,IROMB=1) |4*MAXWV+3 |5*MAXWV/2*2+3
    +
    88 C> JMAX (IDRT=256,IROMB=0) |2*MAXWV+1 |3*MAXWV/2*2+1
    +
    89 C> JMAX (IDRT=256,IROMB=1) |4*MAXWV+1 |5*MAXWV/2*2+1
    +
    90  SUBROUTINE sptrunv(IROMB,MAXWV,IDRTI,IMAXI,JMAXI,
    +
    91  & IDRTO,IMAXO,JMAXO,KMAX,
    +
    92  & IPRIME,ISKIPI,JSKIPI,KSKIPI,
    +
    93  & ISKIPO,JSKIPO,KSKIPO,JCPU,GRIDUI,GRIDVI,
    +
    94  & LUV,GRIDUO,GRIDVO,LDZ,GRIDDO,GRIDZO,
    +
    95  & LPS,GRIDPO,GRIDSO)
    +
    96  LOGICAL LUV,LDZ,LPS
    +
    97  REAL GRIDUI(*),GRIDVI(*)
    +
    98  REAL GRIDUO(*),GRIDVO(*),GRIDDO(*),GRIDZO(*),GRIDPO(*),GRIDSO(*)
    +
    99  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    100  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    101  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    102  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    103  REAL WD((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    104  REAL WZ((MAXWV+1)*((IROMB+1)*MAXWV+2)/2*2+1,KMAX)
    +
    105 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    106 C TRANSFORM INPUT GRID TO WAVE
    +
    107  jc=jcpu
    +
    108  IF(jc.EQ.0) jc=ncpus()
    +
    109  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    110  mdim=2*mx+1
    +
    111  jn=-jskipi
    +
    112  IF(jn.EQ.0) jn=imaxi
    +
    113  js=-jn
    +
    114  inp=(jmaxi-1)*max(0,-jn)+1
    +
    115  isp=(jmaxi-1)*max(0,-js)+1
    +
    116  CALL sptranv(iromb,maxwv,idrti,imaxi,jmaxi,kmax,
    +
    117  & iprime,iskipi,jn,js,mdim,kskipi,0,0,jc,
    +
    118  & wd,wz,
    +
    119  & gridui(inp),gridui(isp),gridvi(inp),gridvi(isp),-1)
    +
    120 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    121 C TRANSFORM WAVE TO OUTPUT WINDS
    +
    122  jn=-jskipo
    +
    123  IF(jn.EQ.0) jn=imaxo
    +
    124  js=-jn
    +
    125  inp=(jmaxo-1)*max(0,-jn)+1
    +
    126  isp=(jmaxo-1)*max(0,-js)+1
    +
    127  IF(luv) THEN
    +
    128  CALL sptranv(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    129  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    130  & wd,wz,
    +
    131  & griduo(inp),griduo(isp),gridvo(inp),gridvo(isp),1)
    +
    132  ENDIF
    +
    133 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    134 C TRANSFORM WAVE TO OUTPUT DIVERGENCE AND VORTICITY
    +
    135  IF(ldz) THEN
    +
    136  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    137  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    138  & wd,griddo(inp),griddo(isp),1)
    +
    139  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    140  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    141  & wz,gridzo(inp),gridzo(isp),1)
    +
    142  ENDIF
    +
    143 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    144 C TRANSFORM WAVE TO OUTPUT POTENTIAL AND STREAMFUNCTION
    +
    145  IF(lps) THEN
    +
    146  CALL spwget(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    147 C$OMP PARALLEL DO
    +
    148  DO k=1,kmax
    +
    149  CALL splaplac(iromb,maxwv,enn1,wd(1,k),wd(1,k),-1)
    +
    150  CALL splaplac(iromb,maxwv,enn1,wz(1,k),wz(1,k),-1)
    +
    151  wd(1:2,k)=0.
    +
    152  wz(1:2,k)=0.
    +
    153  ENDDO
    +
    154  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    155  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    156  & wd,gridpo(inp),gridpo(isp),1)
    +
    157  CALL sptran(iromb,maxwv,idrto,imaxo,jmaxo,kmax,
    +
    158  & 0,iskipo,jn,js,mdim,kskipo,0,0,jc,
    +
    159  & wz,gridso(inp),gridso(isp),1)
    +
    160  ENDIF
    +
    161 C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    +
    162  END
    +
    function ncpus()
    Set number of CPUs - the number of processors over which to parallelize.
    Definition: ncpus.F:24
    +
    subroutine splaplac(I, M, ENN1, Q, QD2, IDIR)
    Computes the laplacian or the inverse laplacian of a scalar field in spectral space.
    Definition: splaplac.f:25
    +
    subroutine sptran(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVE, GRIDN, GRIDS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of scalar quantities and...
    Definition: sptran.f:88
    +
    subroutine sptranv(IROMB, MAXWV, IDRT, IMAX, JMAX, KMAX, IPRIME, ISKIP, JNSKIP, JSSKIP, KWSKIP, KGSKIP, JBEG, JEND, JCPU, WAVED, WAVEZ, GRIDUN, GRIDUS, GRIDVN, GRIDVS, IDIR)
    This subprogram performs a spherical transform between spectral coefficients of divergences and curls...
    Definition: sptranv.f:91
    +
    subroutine 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)
    This subprogram spectrally truncates vector fields on a global cylindrical grid, returning the fields...
    Definition: sptrunv.f:96
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/spuv2dz_8f.html b/ver-5.1.0/spuv2dz_8f.html new file mode 100644 index 00000000..2d5eff30 --- /dev/null +++ b/ver-5.1.0/spuv2dz_8f.html @@ -0,0 +1,244 @@ + + + + + + + +NCEPLIBS-ip: spuv2dz.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spuv2dz.f File Reference
    +
    +
    + +

    Compute divergence and vorticity from winds. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spuv2dz (I, M, ENN1, ELONN1, EON, EONTOP, U, V, UTOP, VTOP, D, Z)
     Computes the divergence and vorticity from wind components in spectral space. More...
     
    +

    Detailed Description

    +

    Compute divergence and vorticity from winds.

    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file spuv2dz.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spuv2dz()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spuv2dz ( I,
     M,
    real, dimension((m+1)*((i+1)*m+2)/2) ENN1,
    real, dimension((m+1)*((i+1)*m+2)/2) ELONN1,
    real, dimension((m+1)*((i+1)*m+2)/2) EON,
    real, dimension(m+1) EONTOP,
    real, dimension((m+1)*((i+1)*m+2)) U,
    real, dimension((m+1)*((i+1)*m+2)) V,
    real, dimension(2*(m+1)) UTOP,
    real, dimension(2*(m+1)) VTOP,
    real, dimension((m+1)*((i+1)*m+2)) D,
    real, dimension((m+1)*((i+1)*m+2)) Z 
    )
    +
    + +

    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.

    +
    Parameters
    + + + + + + + + + + + + + +
    Iinteger spectral domain shape (0 for triangular, 1 for rhomboidal)
    MINTEGER spectral truncation
    ENN1((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    ELONN1((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    EON((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    EONTOP(M+1) EPSILON/N*A over top
    U((M+1)*((I+1)*M+2)) zonal wind (over coslat)
    V((M+1)*((I+1)*M+2)) merid wind (over coslat)
    UTOP(2*(M+1)) zonal wind (over coslat) over top
    VTOP(2*(M+1)) merid wind (over coslat) over top
    D((M+1)*((I+1)*M+2)) divergence
    Z((M+1)*((I+1)*M+2)) vorticity
    +
    +
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition at line 48 of file spuv2dz.f.

    + +

    Referenced by sptranfv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spuv2dz_8f.js b/ver-5.1.0/spuv2dz_8f.js new file mode 100644 index 00000000..fb93c82c --- /dev/null +++ b/ver-5.1.0/spuv2dz_8f.js @@ -0,0 +1,4 @@ +var spuv2dz_8f = +[ + [ "spuv2dz", "spuv2dz_8f.html#a27edc2d10e0a76a45e4aaae58bf018b9", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spuv2dz_8f_source.html b/ver-5.1.0/spuv2dz_8f_source.html new file mode 100644 index 00000000..f382afec --- /dev/null +++ b/ver-5.1.0/spuv2dz_8f_source.html @@ -0,0 +1,191 @@ + + + + + + + +NCEPLIBS-ip: spuv2dz.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spuv2dz.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute divergence and vorticity from winds.
    +
    3 C> @author Iredell @date 92-10-31
    +
    4 
    +
    5 C> Computes the divergence and vorticity from wind components
    +
    6 C> in spectral space.
    +
    7 C>
    +
    8 C> Subprogram speps() should be called already.
    +
    9 C>
    +
    10 C> If L is the zonal wavenumber, N is the total wavenumber,
    +
    11 C> EPS(L,N)=SQRT((N**2-L**2)/(4*N**2-1)) and A is earth radius,
    +
    12 C> then the divergence D is computed as:
    +
    13 C> <pre>
    +
    14 C> D(L,N)=I*L*A*U(L,N)
    +
    15 C> +EPS(L,N+1)*N*A*V(L,N+1)-EPS(L,N)*(N+1)*A*V(L,N-1)
    +
    16 C> </pre>
    +
    17 C>
    +
    18 C> and the vorticity Z is computed as:
    +
    19 C> <pre>
    +
    20 C> Z(L,N)=I*L*A*V(L,N)
    +
    21 C> -EPS(L,N+1)*N*A*U(L,N+1)+EPS(L,N)*(N+1)*A*U(L,N-1)
    +
    22 C> </pre>
    +
    23 C>
    +
    24 C> where U is the zonal wind and V is the meridional wind.
    +
    25 C>
    +
    26 C> U and V are weighted by the secant of latitude.
    +
    27 C>
    +
    28 C> Extra terms are used over top of the spectral domain.
    +
    29 C>
    +
    30 C> Advantage is taken of the fact that EPS(L,L)=0
    +
    31 C> in order to vectorize over the entire spectral domain.
    +
    32 C>
    +
    33 C> @param I integer spectral domain shape
    +
    34 C> (0 for triangular, 1 for rhomboidal)
    +
    35 C> @param M INTEGER spectral truncation
    +
    36 C> @param ENN1 ((M+1)*((I+1)*M+2)/2) N*(N+1)/A**2
    +
    37 C> @param ELONN1 ((M+1)*((I+1)*M+2)/2) L/(N*(N+1))*A
    +
    38 C> @param EON ((M+1)*((I+1)*M+2)/2) EPSILON/N*A
    +
    39 C> @param EONTOP (M+1) EPSILON/N*A over top
    +
    40 C> @param U ((M+1)*((I+1)*M+2)) zonal wind (over coslat)
    +
    41 C> @param V ((M+1)*((I+1)*M+2)) merid wind (over coslat)
    +
    42 C> @param UTOP (2*(M+1)) zonal wind (over coslat) over top
    +
    43 C> @param VTOP (2*(M+1)) merid wind (over coslat) over top
    +
    44 C> @param D ((M+1)*((I+1)*M+2)) divergence
    +
    45 C> @param Z ((M+1)*((I+1)*M+2)) vorticity
    +
    46 C>
    +
    47 C> @author Iredell @date 92-10-31
    +
    48  SUBROUTINE spuv2dz(I,M,ENN1,ELONN1,EON,EONTOP,U,V,UTOP,VTOP,D,Z)
    +
    49  REAL ENN1((M+1)*((I+1)*M+2)/2),ELONN1((M+1)*((I+1)*M+2)/2)
    +
    50  REAL EON((M+1)*((I+1)*M+2)/2),EONTOP(M+1)
    +
    51  REAL U((M+1)*((I+1)*M+2)),V((M+1)*((I+1)*M+2))
    +
    52  REAL UTOP(2*(M+1)),VTOP(2*(M+1))
    +
    53  REAL D((M+1)*((I+1)*M+2)),Z((M+1)*((I+1)*M+2))
    +
    54 
    +
    55 C COMPUTE TERMS FROM THE SPECTRAL DOMAIN
    +
    56  k=1
    +
    57  d(2*k-1)=0.
    +
    58  d(2*k)=0.
    +
    59  z(2*k-1)=0.
    +
    60  z(2*k)=0.
    +
    61  DO k=2,(m+1)*((i+1)*m+2)/2-1
    +
    62  d(2*k-1)=-elonn1(k)*u(2*k)+eon(k+1)*v(2*k+1)-eon(k)*v(2*k-3)
    +
    63  d(2*k)=elonn1(k)*u(2*k-1)+eon(k+1)*v(2*k+2)-eon(k)*v(2*k-2)
    +
    64  z(2*k-1)=-elonn1(k)*v(2*k)-eon(k+1)*u(2*k+1)+eon(k)*u(2*k-3)
    +
    65  z(2*k)=elonn1(k)*v(2*k-1)-eon(k+1)*u(2*k+2)+eon(k)*u(2*k-2)
    +
    66  ENDDO
    +
    67  k=(m+1)*((i+1)*m+2)/2
    +
    68  d(2*k-1)=-elonn1(k)*u(2*k)-eon(k)*v(2*k-3)
    +
    69  d(2*k)=elonn1(k)*u(2*k-1)-eon(k)*v(2*k-2)
    +
    70  z(2*k-1)=-elonn1(k)*v(2*k)+eon(k)*u(2*k-3)
    +
    71  z(2*k)=elonn1(k)*v(2*k-1)+eon(k)*u(2*k-2)
    +
    72 
    +
    73 C COMPUTE TERMS FROM OVER TOP OF THE SPECTRAL DOMAIN
    +
    74 CDIR$ IVDEP
    +
    75  DO l=0,m
    +
    76  k=l*(2*m+(i-1)*(l-1))/2+i*l+m+1
    +
    77  d(2*k-1)=d(2*k-1)+eontop(l+1)*vtop(2*l+1)
    +
    78  d(2*k)=d(2*k)+eontop(l+1)*vtop(2*l+2)
    +
    79  z(2*k-1)=z(2*k-1)-eontop(l+1)*utop(2*l+1)
    +
    80  z(2*k)=z(2*k)-eontop(l+1)*utop(2*l+2)
    +
    81  ENDDO
    +
    82 
    +
    83 C MULTIPLY BY LAPLACIAN TERM
    +
    84  DO k=2,(m+1)*((i+1)*m+2)/2
    +
    85  d(2*k-1)=d(2*k-1)*enn1(k)
    +
    86  d(2*k)=d(2*k)*enn1(k)
    +
    87  z(2*k-1)=z(2*k-1)*enn1(k)
    +
    88  z(2*k)=z(2*k)*enn1(k)
    +
    89  ENDDO
    +
    90  RETURN
    +
    91  END
    +
    subroutine spuv2dz(I, M, ENN1, ELONN1, EON, EONTOP, U, V, UTOP, VTOP, D, Z)
    Computes the divergence and vorticity from wind components in spectral space.
    Definition: spuv2dz.f:49
    +
    +
    + + + + diff --git a/ver-5.1.0/spvar_8f.html b/ver-5.1.0/spvar_8f.html new file mode 100644 index 00000000..73948c37 --- /dev/null +++ b/ver-5.1.0/spvar_8f.html @@ -0,0 +1,175 @@ + + + + + + + +NCEPLIBS-ip: spvar.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spvar.f File Reference
    +
    +
    + +

    Compute variance by total wavenumber. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spvar (I, M, Q, QVAR)
     Computes the variances by total wavenumber of a scalar field in spectral space. More...
     
    +

    Detailed Description

    +

    Compute variance by total wavenumber.

    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition in file spvar.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spvar()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spvar ( I,
     M,
    real, dimension((m+1)*((i+1)*m+2)) Q,
    real, dimension(0:(i+1)*m) QVAR 
    )
    +
    + +

    Computes the variances by total wavenumber of a scalar field in spectral space.

    +
    Parameters
    + + + + + +
    Ispectral domain shape (0 for triangular, 1 for rhomboidal)
    Mspectral truncation
    Q((M+1)*((I+1)*M+2)) scalar field
    QVAR(0:(I+1)*M) variances
    +
    +
    +
    Author
    Iredell
    +
    Date
    92-10-31
    + +

    Definition at line 15 of file spvar.f.

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spvar_8f.js b/ver-5.1.0/spvar_8f.js new file mode 100644 index 00000000..4cfca763 --- /dev/null +++ b/ver-5.1.0/spvar_8f.js @@ -0,0 +1,4 @@ +var spvar_8f = +[ + [ "spvar", "spvar_8f.html#a840f95e09b8d930b38638a391933bee4", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spvar_8f_source.html b/ver-5.1.0/spvar_8f_source.html new file mode 100644 index 00000000..9f559d95 --- /dev/null +++ b/ver-5.1.0/spvar_8f_source.html @@ -0,0 +1,135 @@ + + + + + + + +NCEPLIBS-ip: spvar.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spvar.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Compute variance by total wavenumber.
    +
    3 C> @author Iredell @date 92-10-31
    +
    4 
    +
    5 C> Computes the variances by total wavenumber
    +
    6 C> of a scalar field in spectral space.
    +
    7 C>
    +
    8 C> @param I spectral domain shape
    +
    9 C> (0 for triangular, 1 for rhomboidal)
    +
    10 C> @param M spectral truncation
    +
    11 C> @param Q ((M+1)*((I+1)*M+2)) scalar field
    +
    12 C> @param QVAR (0:(I+1)*M) variances
    +
    13 C>
    +
    14 C> @author Iredell @date 92-10-31
    +
    15  SUBROUTINE spvar(I,M,Q,QVAR)
    +
    16  REAL Q((M+1)*((I+1)*M+2))
    +
    17  REAL QVAR(0:(I+1)*M)
    +
    18 
    +
    19  l=0
    +
    20  DO n=0,m
    +
    21  ks=l*(2*m+(i-1)*(l-1))+2*n
    +
    22  qvar(n)=0.5*q(ks+1)**2
    +
    23  ENDDO
    +
    24  DO n=m+1,(i+1)*m
    +
    25  qvar(n)=0.
    +
    26  ENDDO
    +
    27  DO n=0,(i+1)*m
    +
    28  DO l=max(1,n-m),min(n,m)
    +
    29  ks=l*(2*m+(i-1)*(l-1))+2*n
    +
    30  qvar(n)=qvar(n)+q(ks+1)**2+q(ks+2)**2
    +
    31  ENDDO
    +
    32  ENDDO
    +
    33 
    +
    34  RETURN
    +
    35  END
    +
    subroutine spvar(I, M, Q, QVAR)
    Computes the variances by total wavenumber of a scalar field in spectral space.
    Definition: spvar.f:16
    +
    +
    + + + + diff --git a/ver-5.1.0/spwget_8f.html b/ver-5.1.0/spwget_8f.html new file mode 100644 index 00000000..8d9f2dd3 --- /dev/null +++ b/ver-5.1.0/spwget_8f.html @@ -0,0 +1,208 @@ + + + + + + + +NCEPLIBS-ip: spwget.f File Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    spwget.f File Reference
    +
    +
    + +

    Get wave-space constants. +More...

    + +

    Go to the source code of this file.

    + + + + + +

    +Functions/Subroutines

    subroutine spwget (IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
     This subprogram gets wave-space constants. More...
     
    +

    Detailed Description

    +

    Get wave-space constants.

    +
    Author
    Iredell
    +
    Date
    96-02-29
    + +

    Definition in file spwget.f.

    +

    Function/Subroutine Documentation

    + +

    ◆ spwget()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    subroutine spwget ( IROMB,
     MAXWV,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) EPS,
    real, dimension(maxwv+1) EPSTOP,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) ENN1,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) ELONN1,
    real, dimension((maxwv+1)*((iromb+1)*maxwv+2)/2) EON,
    real, dimension(maxwv+1) EONTOP 
    )
    +
    + +

    This subprogram gets wave-space constants.

    +
    Parameters
    + + + + + + + + + +
    IROMBspectral domain shape (0 for triangular, 1 for rhomboidal)
    MAXWVspectral truncation
    EPS
    EPSTOP
    ENN1
    ELONN1
    EON
    EONTOP
    +
    +
    +
    Author
    Iredell
    +
    Date
    96-02-29
    +
    + +

    Definition at line 17 of file spwget.f.

    + +

    References speps().

    + +

    Referenced by sptgpm(), sptgpmd(), sptgpmv(), sptgps(), sptgpsd(), sptgpsv(), sptgpt(), sptgptd(), sptgptsd(), sptgptv(), sptgptvd(), sptrand(), sptranf0(), sptrungv(), sptrunl(), sptrunmv(), sptrunsv(), and sptrunv().

    + +
    +
    +
    +
    + + + + diff --git a/ver-5.1.0/spwget_8f.js b/ver-5.1.0/spwget_8f.js new file mode 100644 index 00000000..3fba636e --- /dev/null +++ b/ver-5.1.0/spwget_8f.js @@ -0,0 +1,4 @@ +var spwget_8f = +[ + [ "spwget", "spwget_8f.html#a9b6ce78350f7adf2fed874a18312c7a6", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/spwget_8f_source.html b/ver-5.1.0/spwget_8f_source.html new file mode 100644 index 00000000..2ed57cce --- /dev/null +++ b/ver-5.1.0/spwget_8f_source.html @@ -0,0 +1,127 @@ + + + + + + + +NCEPLIBS-ip: spwget.f Source File + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    +
    +
    spwget.f
    +
    +
    +Go to the documentation of this file.
    1 C> @file
    +
    2 C> @brief Get wave-space constants.
    +
    3 C> @author Iredell @date 96-02-29
    +
    4 
    +
    5 C> This subprogram gets wave-space constants.
    +
    6 C>
    +
    7 C> @param IROMB spectral domain shape (0 for triangular, 1 for rhomboidal)
    +
    8 C> @param MAXWV spectral truncation
    +
    9 C> @param EPS
    +
    10 C> @param EPSTOP
    +
    11 C> @param ENN1
    +
    12 C> @param ELONN1
    +
    13 C> @param EON
    +
    14 C> @param EONTOP
    +
    15 C>
    +
    16 C> @author Iredell @date 96-02-29
    +
    17  SUBROUTINE spwget(IROMB,MAXWV,EPS,EPSTOP,ENN1,ELONN1,EON,EONTOP)
    +
    18  REAL EPS((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EPSTOP(MAXWV+1)
    +
    19  REAL ENN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    20  REAL ELONN1((MAXWV+1)*((IROMB+1)*MAXWV+2)/2)
    +
    21  REAL EON((MAXWV+1)*((IROMB+1)*MAXWV+2)/2),EONTOP(MAXWV+1)
    +
    22 
    +
    23  mx=(maxwv+1)*((iromb+1)*maxwv+2)/2
    +
    24  mxtop=maxwv+1
    +
    25  CALL speps(iromb,maxwv,eps,epstop,enn1,elonn1,eon,eontop)
    +
    26  END
    +
    subroutine speps(I, M, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    Computes constant fields indexed in the spectral domain in "IBM ORDER" (Zonal wavenumber is the slowe...
    Definition: speps.f:26
    +
    subroutine spwget(IROMB, MAXWV, EPS, EPSTOP, ENN1, ELONN1, EON, EONTOP)
    This subprogram gets wave-space constants.
    Definition: spwget.f:18
    +
    +
    + + + + diff --git a/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html b/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html new file mode 100644 index 00000000..62d9b4da --- /dev/null +++ b/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html @@ -0,0 +1,843 @@ + + + + + + + +NCEPLIBS-ip: ip_equid_cylind_grid_mod::ip_equid_cylind_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_equid_cylind_grid_mod::ip_equid_cylind_grid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_equid_cylind_grid_mod::ip_equid_cylind_grid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_equid_cylind
     See gdswzd_equid_cylind(). More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Init GRIB1. More...
     
    procedure init_grib2
     Init GRIB2. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real dlat
     Di — i direction increment. More...
     
    real dlon
     Dj — j direction increment. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    real hi
     Scan mode in the 'i' direction. More...
     
    integer im
     Number of x points. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real rerth
     Radius of the Earth. More...
     
    real rlat1
     Latitude of first grid point. More...
     
    real rlat2
     Latitude of last grid point. More...
     
    real rlon1
     Longitude of first grid point. More...
     
    real rlon2
     Longitude of last grid point. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 26 of file ip_equid_cylind_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::gdswzd
    +
    +private
    +
    + +

    See gdswzd_equid_cylind().

    +
    Returns
    N/A
    + +

    Definition at line 37 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib1
    +
    +private
    +
    + +

    Init GRIB1.

    +
    Returns
    N/A
    + +

    Definition at line 35 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_equid_cylind_grid_mod::ip_equid_cylind_grid::init_grib2
    +
    +private
    +
    + +

    Init GRIB2.

    +
    Returns
    N/A
    + +

    Definition at line 36 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ dlat

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::dlat
    +
    +private
    +
    + +

    Di — i direction increment.

    +

    GRIB2, Section 3, octets 64-67.

    + +

    Definition at line 32 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ dlon

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::dlon
    +
    +private
    +
    + +

    Dj — j direction increment.

    +

    GRIB2, Section 3, octets 68-71.

    + +

    Definition at line 33 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ hi

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::hi
    +
    +private
    +
    + +

    Scan mode in the 'i' direction.

    +

    GRIB2, Section 3, octet 72.

    + +

    Definition at line 27 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rlat1

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlat1
    +
    +private
    +
    + +

    Latitude of first grid point.

    +

    GRIB2, Section 3, octets 47-50.

    + +

    Definition at line 28 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ rlat2

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlat2
    +
    +private
    +
    + +

    Latitude of last grid point.

    +

    GRIB2, Section 3, octets 56-59.

    + +

    Definition at line 30 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon1

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlon1
    +
    +private
    +
    + +

    Longitude of first grid point.

    +

    GRIB2, Section 3, octets 51-54.

    + +

    Definition at line 29 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon2

    + +
    +
    + + + + + +
    + + + + +
    real ip_equid_cylind_grid_mod::ip_equid_cylind_grid::rlon2
    +
    +private
    +
    + +

    Longitude of last grid point.

    +

    GRIB2, Section 3, octets 60-63.

    + +

    Definition at line 31 of file ip_equid_cylind_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.js b/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.js new file mode 100644 index 00000000..39a1c72a --- /dev/null +++ b/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.js @@ -0,0 +1,27 @@ +var structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid = +[ + [ "field_pos", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#aa1023c3efed20a990b75f937bbcac6a3", null ], + [ "init", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a68fb7543888cc76885560709184e7d70", null ], + [ "init_grib2", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a8dd212953e754964770fa1c3d4bcd3db", null ], + [ "descriptor", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "dlat", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a6bd00527219fc596b2c2a7ba47fec719", null ], + [ "dlon", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ae675dc8c49e64700d941eadc31e8f4e7", null ], + [ "eccen_squared", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "hi", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#afb1ebcfab0d637688bcac84cbc8582fc", null ], + [ "im", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "iwrap", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "rerth", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ], + [ "rlat1", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a493e017343795e89f794bae5229eb6a7", null ], + [ "rlat2", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#acfd62fa8199f9b57b555364bca920e42", null ], + [ "rlon1", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#aa927f5ecca3f2880ad88e60c8d4b8871", null ], + [ "rlon2", "structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.html#a1e5b9f8ab3de743b5e392478694154ea", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.png b/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.png new file mode 100644 index 00000000..54429415 Binary files /dev/null and b/ver-5.1.0/structip__equid__cylind__grid__mod_1_1ip__equid__cylind__grid.png differ diff --git a/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.html b/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.html new file mode 100644 index 00000000..aef84e3c --- /dev/null +++ b/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.html @@ -0,0 +1,873 @@ + + + + + + + +NCEPLIBS-ip: ip_gaussian_grid_mod::ip_gaussian_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_gaussian_grid_mod::ip_gaussian_grid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_gaussian_grid_mod::ip_gaussian_grid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_gaussian
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real dlon
     "i"-direction increment. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    real hi
     Scan mode flag in 'i' direction. More...
     
    integer im
     Number of x points. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jg
     Number of parallels between the equator and pole times 2. More...
     
    integer jh
     Scan mode flag in 'j' direction. More...
     
    integer jm
     Number of y points. More...
     
    integer jscan
     Scanning mode in the 'j' direction. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real rerth
     Radius of the Earth. More...
     
    real rlat1
     Latitude of first grid point. More...
     
    real rlon1
     Longitude of first grid point. More...
     
    real rlon2
     Longitude of last grid point. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 25 of file ip_gaussian_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_gaussian_grid_mod::ip_gaussian_grid::gdswzd
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    +
    Returns
    N/A
    + +

    Definition at line 41 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_gaussian_grid_mod::ip_gaussian_grid::init_grib1
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 36 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_gaussian_grid_mod::ip_gaussian_grid::init_grib2
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib2_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 38 of file ip_gaussian_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ dlon

    + +
    +
    + + + + + +
    + + + + +
    real ip_gaussian_grid_mod::ip_gaussian_grid::dlon
    +
    +private
    +
    + +

    "i"-direction increment.

    +

    GRIB2 Section 3, octets 64-67.

    + +

    Definition at line 27 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ hi

    + +
    +
    + + + + + +
    + + + + +
    real ip_gaussian_grid_mod::ip_gaussian_grid::hi
    +
    +private
    +
    + +

    Scan mode flag in 'i' direction.

    +

    When '1' points scan from W to E. When "-1" points scan from E to W.

    + +

    Definition at line 31 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jg

    + +
    +
    + + + + + +
    + + + + +
    integer ip_gaussian_grid_mod::ip_gaussian_grid::jg
    +
    +private
    +
    + +

    Number of parallels between the equator and pole times 2.

    +

    GRIB2 Section 3, octets 68-71.

    + +

    Definition at line 32 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ jh

    + +
    +
    + + + + + +
    + + + + +
    integer ip_gaussian_grid_mod::ip_gaussian_grid::jh
    +
    +private
    +
    + +

    Scan mode flag in 'j' direction.

    +

    When '1' points scan from N to S. When "-1" points scan from S to N.

    + +

    Definition at line 26 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_gaussian_grid_mod::ip_gaussian_grid::jscan
    +
    +private
    +
    + +

    Scanning mode in the 'j' direction.

    +

    GRIB2 Section 3, octet 72.

    + +

    Definition at line 33 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rlat1

    + +
    +
    + + + + + +
    + + + + +
    real ip_gaussian_grid_mod::ip_gaussian_grid::rlat1
    +
    +private
    +
    + +

    Latitude of first grid point.

    +

    GRIB2 Section 3, octets 47-50.

    + +

    Definition at line 28 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon1

    + +
    +
    + + + + + +
    + + + + +
    real ip_gaussian_grid_mod::ip_gaussian_grid::rlon1
    +
    +private
    +
    + +

    Longitude of first grid point.

    +

    GRIB2 Section 3, octets 51-54.

    + +

    Definition at line 29 of file ip_gaussian_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon2

    + +
    +
    + + + + + +
    + + + + +
    real ip_gaussian_grid_mod::ip_gaussian_grid::rlon2
    +
    +private
    +
    + +

    Longitude of last grid point.

    +

    GRIB2 Section 3, octets 60-63.

    + +

    Definition at line 30 of file ip_gaussian_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.js b/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.js new file mode 100644 index 00000000..ea089373 --- /dev/null +++ b/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.js @@ -0,0 +1,28 @@ +var structip__gaussian__grid__mod_1_1ip__gaussian__grid = +[ + [ "field_pos", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a7ce52d987d2bd2442053042c03f96885", null ], + [ "init", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#afd3658924783d5dbbd3fe5f07d5b60a7", null ], + [ "init_grib2", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a378b72a1b6090acb90a36385ab9eda5a", null ], + [ "descriptor", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "dlon", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a35c454d320c59a6c71c4aebb881abcb8", null ], + [ "eccen_squared", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "hi", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ae71229713fc9322e23140541993459fc", null ], + [ "im", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "iwrap", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jg", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a110f99e158a977a1679133235fa06c34", null ], + [ "jh", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a549ccd3ce1f5c75d99e8e04d4d4341b4", null ], + [ "jm", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jscan", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a3e199827f764b162a14515e837c28903", null ], + [ "jwrap1", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "rerth", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ], + [ "rlat1", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#acdf76c4b3444d0d85dbf9ee09b5f35fc", null ], + [ "rlon1", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a583517b74d3c1c1b354fefe0d6871c4d", null ], + [ "rlon2", "structip__gaussian__grid__mod_1_1ip__gaussian__grid.html#a3794a22c4866631c6b5bc6a8871e3e44", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.png b/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.png new file mode 100644 index 00000000..8937e993 Binary files /dev/null and b/ver-5.1.0/structip__gaussian__grid__mod_1_1ip__gaussian__grid.png differ diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.html b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.html new file mode 100644 index 00000000..e440e729 --- /dev/null +++ b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.html @@ -0,0 +1,249 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod::grib1_descriptor Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_descriptor_mod::grib1_descriptor Type Reference
    +
    +
    + +

    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array. + More...

    +
    +Inheritance diagram for ip_grid_descriptor_mod::grib1_descriptor:
    +
    +
    + + +ip_grid_descriptor_mod::ip_grid_descriptor + +
    + + + + + + + + +

    +Private Member Functions

    procedure is_same_grid
     Test whether two grid descriptors are the same. More...
     
    procedure is_same_grid_grib1
     Test whether two grid descriptors are the same. More...
     
    + + + + + + + +

    +Private Attributes

    integer, dimension(200) gds
     Grib-1 grib descriptor section (GDS) More...
     
    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod). More...
     
    +

    Detailed Description

    +

    Descriptor representing a grib1 grib descriptor section (GDS) with an integer array.

    +
    Date
    July 2021
    + +

    Definition at line 38 of file ip_grid_descriptor_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ is_same_grid()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_descriptor_mod::ip_grid_descriptor::is_same_grid
    +
    +privateinherited
    +
    + +

    Test whether two grid descriptors are the same.

    +
    Returns
    N/A
    + +

    Definition at line 32 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ is_same_grid_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_descriptor_mod::grib1_descriptor::is_same_grid_grib1
    +
    +private
    +
    + +

    Test whether two grid descriptors are the same.

    +
    Returns
    N/A
    + +

    Definition at line 42 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ gds

    + +
    +
    + + + + + +
    + + + + +
    integer, dimension(200) ip_grid_descriptor_mod::grib1_descriptor::gds
    +
    +private
    +
    + +

    Grib-1 grib descriptor section (GDS)

    + +

    Definition at line 39 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ grid_num

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_descriptor_mod::ip_grid_descriptor::grid_num
    +
    +privateinherited
    +
    + +

    Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod).

    + +

    Definition at line 29 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.js b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.js new file mode 100644 index 00000000..af5c5429 --- /dev/null +++ b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.js @@ -0,0 +1,7 @@ +var structip__grid__descriptor__mod_1_1grib1__descriptor = +[ + [ "is_same_grid", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a9da102dac348a63ffce6556ed5da81b6", null ], + [ "is_same_grid_grib1", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a33b4fc04d218c73e3c4d061163dcbc95", null ], + [ "gds", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a08920c194e39d562fbf527939f0ac6c9", null ], + [ "grid_num", "structip__grid__descriptor__mod_1_1grib1__descriptor.html#a6d4598dc4bbf46e059f636715cc390f1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.png b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.png new file mode 100644 index 00000000..1ca1b0c0 Binary files /dev/null and b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib1__descriptor.png differ diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.html b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.html new file mode 100644 index 00000000..97d86f73 --- /dev/null +++ b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.html @@ -0,0 +1,307 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod::grib2_descriptor Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_descriptor_mod::grib2_descriptor Type Reference
    +
    +
    + +

    Grib-2 descriptor containing a grib2 GDT represented by an integer array. + More...

    +
    +Inheritance diagram for ip_grid_descriptor_mod::grib2_descriptor:
    +
    +
    + + +ip_grid_descriptor_mod::ip_grid_descriptor + +
    + + + + + + + + +

    +Private Member Functions

    procedure is_same_grid
     Test whether two grid descriptors are the same. More...
     
    procedure is_same_grid_grib2
     Test whether two grid descriptors are the same. More...
     
    + + + + + + + + + + + + + +

    +Private Attributes

    integer gdt_len
     Length of the template. More...
     
    integer gdt_num
     Grid number which represents grid type. More...
     
    integer, dimension(:), allocatable gdt_tmpl
     Grib-2 grid definition template. More...
     
    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod). More...
     
    +

    Detailed Description

    +

    Grib-2 descriptor containing a grib2 GDT represented by an integer array.

    +
    Date
    July 2021
    + +

    Definition at line 47 of file ip_grid_descriptor_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ is_same_grid()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_descriptor_mod::ip_grid_descriptor::is_same_grid
    +
    +privateinherited
    +
    + +

    Test whether two grid descriptors are the same.

    +
    Returns
    N/A
    + +

    Definition at line 32 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ is_same_grid_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_descriptor_mod::grib2_descriptor::is_same_grid_grib2
    +
    +private
    +
    + +

    Test whether two grid descriptors are the same.

    +
    Returns
    N/A
    + +

    Definition at line 53 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ gdt_len

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_descriptor_mod::grib2_descriptor::gdt_len
    +
    +private
    +
    + +

    Length of the template.

    + +

    Definition at line 49 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ gdt_num

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_descriptor_mod::grib2_descriptor::gdt_num
    +
    +private
    +
    + +

    Grid number which represents grid type.

    + +

    Definition at line 48 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ gdt_tmpl

    + +
    +
    + + + + + +
    + + + + +
    integer, dimension(:), allocatable ip_grid_descriptor_mod::grib2_descriptor::gdt_tmpl
    +
    +private
    +
    + +

    Grib-2 grid definition template.

    + +

    Definition at line 50 of file ip_grid_descriptor_mod.F90.

    + +
    +
    + +

    ◆ grid_num

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_descriptor_mod::ip_grid_descriptor::grid_num
    +
    +privateinherited
    +
    + +

    Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod).

    + +

    Definition at line 29 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.js b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.js new file mode 100644 index 00000000..23620eb7 --- /dev/null +++ b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.js @@ -0,0 +1,9 @@ +var structip__grid__descriptor__mod_1_1grib2__descriptor = +[ + [ "is_same_grid", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#a9da102dac348a63ffce6556ed5da81b6", null ], + [ "is_same_grid_grib2", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#ae27b09a835144baf782e2cde0c1ea013", null ], + [ "gdt_len", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#abf8e6d212308608a039e8e97c05c4a06", null ], + [ "gdt_num", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#aa5dd78817926e0246f93819ab7037e19", null ], + [ "gdt_tmpl", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#a3a90e1ef19332a1d8ec1f6a3193c6ebe", null ], + [ "grid_num", "structip__grid__descriptor__mod_1_1grib2__descriptor.html#a6d4598dc4bbf46e059f636715cc390f1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.png b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.png new file mode 100644 index 00000000..8ad07329 Binary files /dev/null and b/ver-5.1.0/structip__grid__descriptor__mod_1_1grib2__descriptor.png differ diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.html b/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.html new file mode 100644 index 00000000..d7f674e8 --- /dev/null +++ b/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.html @@ -0,0 +1,191 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_descriptor_mod::ip_grid_descriptor Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_descriptor_mod::ip_grid_descriptor Type Reference
    +
    +
    + +

    Abstract descriptor object which represents a grib1 or grib2 descriptor. + More...

    +
    +Inheritance diagram for ip_grid_descriptor_mod::ip_grid_descriptor:
    +
    +
    + + +ip_grid_descriptor_mod::grib1_descriptor +ip_grid_descriptor_mod::grib2_descriptor + +
    + + + + + +

    +Private Member Functions

    procedure is_same_grid
     Test whether two grid descriptors are the same. More...
     
    + + + + +

    +Private Attributes

    integer grid_num
     Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod). More...
     
    +

    Detailed Description

    +

    Abstract descriptor object which represents a grib1 or grib2 descriptor.

    +
    Date
    July 2021
    + +

    Definition at line 28 of file ip_grid_descriptor_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ is_same_grid()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_descriptor_mod::ip_grid_descriptor::is_same_grid
    +
    +private
    +
    + +

    Test whether two grid descriptors are the same.

    +
    Returns
    N/A
    + +

    Definition at line 32 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ grid_num

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_descriptor_mod::ip_grid_descriptor::grid_num
    +
    +private
    +
    + +

    Integer representing the grid type (see *_GRID_ID_GRIB1/2 in ip_grid_mod).

    + +

    Definition at line 29 of file ip_grid_descriptor_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.js b/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.js new file mode 100644 index 00000000..20582279 --- /dev/null +++ b/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.js @@ -0,0 +1,5 @@ +var structip__grid__descriptor__mod_1_1ip__grid__descriptor = +[ + [ "is_same_grid", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a9da102dac348a63ffce6556ed5da81b6", null ], + [ "grid_num", "structip__grid__descriptor__mod_1_1ip__grid__descriptor.html#a6d4598dc4bbf46e059f636715cc390f1", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.png b/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.png new file mode 100644 index 00000000..9e35e497 Binary files /dev/null and b/ver-5.1.0/structip__grid__descriptor__mod_1_1ip__grid__descriptor.png differ diff --git a/ver-5.1.0/structip__grid__mod_1_1ip__grid.html b/ver-5.1.0/structip__grid__mod_1_1ip__grid.html new file mode 100644 index 00000000..65436865 --- /dev/null +++ b/ver-5.1.0/structip__grid__mod_1_1ip__grid.html @@ -0,0 +1,655 @@ + + + + + + + +NCEPLIBS-ip: ip_grid_mod::ip_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_grid_mod::ip_grid Type Reference
    +
    +
    + +

    Abstract grid that holds fields and methods common to all grids. + More...

    +
    +Inheritance diagram for ip_grid_mod::ip_grid:
    +
    +
    + + +ip_equid_cylind_grid_mod::ip_equid_cylind_grid +ip_gaussian_grid_mod::ip_gaussian_grid +ip_lambert_conf_grid_mod::ip_lambert_conf_grid +ip_mercator_grid_mod::ip_mercator_grid +ip_polar_stereo_grid_mod::ip_polar_stereo_grid +ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid +ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid +ip_station_points_grid_mod::ip_station_points_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure(gdswzd_interface), deferred gdswzd
     Coordinate transformations for the grid. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure(init_grib1_interface), deferred init_grib1
     Initializer for grib1 input descriptor. More...
     
    procedure(init_grib2_interface), deferred init_grib2
     Initializer for grib2 input descriptor. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    integer im
     Number of x points. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +

    Abstract grid that holds fields and methods common to all grids.

    +

    ip_grid is meant to be subclassed when implementing a new grid.

    +

    There are three methods that must be implemented:

    +

    The init methods are responsible for setting up the grid using GRIB1/GRIB2 descriptors.

    +

    gdswzd() performs transformations to and from Earth coordinates and grid coordinates.

    +

    A good reference for all the map projection equations used by NCEPLIBS-ip can be found here: https://doi.org/10.3133/pp1395.

    +
    Author
    Kyle Gerheiser
    +
    Date
    July 2021
    + +

    Definition at line 58 of file ip_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +private
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure(gdswzd_interface), deferred ip_grid_mod::ip_grid::gdswzd
    +
    +private
    +
    + +

    Coordinate transformations for the grid.

    +
    Returns
    N/A
    + +

    Definition at line 85 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +private
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure(init_grib1_interface), deferred ip_grid_mod::ip_grid::init_grib1
    +
    +private
    +
    + +

    Initializer for grib1 input descriptor.

    +
    Returns
    N/A
    + +

    Definition at line 81 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure(init_grib2_interface), deferred ip_grid_mod::ip_grid::init_grib2
    +
    +private
    +
    + +

    Initializer for grib2 input descriptor.

    +
    Returns
    N/A
    + +

    Definition at line 83 of file ip_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +private
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +private
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +private
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +private
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +private
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +private
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +private
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +private
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +private
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +private
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +private
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +private
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__grid__mod_1_1ip__grid.js b/ver-5.1.0/structip__grid__mod_1_1ip__grid.js new file mode 100644 index 00000000..d4a1fd30 --- /dev/null +++ b/ver-5.1.0/structip__grid__mod_1_1ip__grid.js @@ -0,0 +1,20 @@ +var structip__grid__mod_1_1ip__grid = +[ + [ "field_pos", "structip__grid__mod_1_1ip__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__grid__mod_1_1ip__grid.html#a5fb366fb577a90cc09f21269b90ac080", null ], + [ "init", "structip__grid__mod_1_1ip__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__grid__mod_1_1ip__grid.html#a5a2c16279eb73a0c54ae0a1586d5b806", null ], + [ "init_grib2", "structip__grid__mod_1_1ip__grid.html#ad13e0ad8d616e1839ced388826fefee9", null ], + [ "descriptor", "structip__grid__mod_1_1ip__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "eccen_squared", "structip__grid__mod_1_1ip__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "im", "structip__grid__mod_1_1ip__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "iwrap", "structip__grid__mod_1_1ip__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__grid__mod_1_1ip__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__grid__mod_1_1ip__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__grid__mod_1_1ip__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__grid__mod_1_1ip__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__grid__mod_1_1ip__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__grid__mod_1_1ip__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__grid__mod_1_1ip__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "rerth", "structip__grid__mod_1_1ip__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__grid__mod_1_1ip__grid.png b/ver-5.1.0/structip__grid__mod_1_1ip__grid.png new file mode 100644 index 00000000..81595cd4 Binary files /dev/null and b/ver-5.1.0/structip__grid__mod_1_1ip__grid.png differ diff --git a/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html b/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html new file mode 100644 index 00000000..d99f1331 --- /dev/null +++ b/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html @@ -0,0 +1,903 @@ + + + + + + + +NCEPLIBS-ip: ip_lambert_conf_grid_mod::ip_lambert_conf_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_lambert_conf_grid_mod::ip_lambert_conf_grid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_lambert_conf_grid_mod::ip_lambert_conf_grid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_lambert_conf
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real dxs
     x-direction grid length adjusted for scan mode. More...
     
    real dys
     y-direction grid length adjusted for scan model. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    real h
     Hemisphere flag. More...
     
    integer im
     Number of x points. More...
     
    integer irot
     vector rotation flag. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real orient
     Longitude of meridian parallel to y-axis along which latitude increases at the latitude increases. More...
     
    real rerth
     Radius of the Earth. More...
     
    real rlat1
     La1― latitude of first grid point. More...
     
    real rlati1
     First latitude from the pole at which the secant cone cuts the sphere. More...
     
    real rlati2
     Second latitude from the pole at which the scant cone cuts the sphere. More...
     
    real rlon1
     Lo1― longitude of first grid point. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 24 of file ip_lambert_conf_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::gdswzd
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    +
    Returns
    N/A
    + +

    Definition at line 41 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib1
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 36 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_lambert_conf_grid_mod::ip_lambert_conf_grid::init_grib2
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib2_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 38 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ dxs

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::dxs
    +
    +private
    +
    + +

    x-direction grid length adjusted for scan mode.

    +

    GRIB2, Section 3, octets 56-59.

    + +

    Definition at line 30 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ dys

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::dys
    +
    +private
    +
    + +

    y-direction grid length adjusted for scan model.

    +

    GRIB2, Section 3, octets 60-63.

    + +

    Definition at line 31 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ h

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::h
    +
    +private
    +
    + +

    Hemisphere flag.

    +

    1-NH, minus 1-SH.

    + +

    Definition at line 32 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_lambert_conf_grid_mod::ip_lambert_conf_grid::irot
    +
    +private
    +
    + +

    vector rotation flag.

    +

    When "1", vectors are grid relative. When "0", vectors are earth relative. GRIB2, Section 3, octet 55.

    + +

    Definition at line 33 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ orient

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::orient
    +
    +private
    +
    + +

    Longitude of meridian parallel to y-axis along which latitude increases at the latitude increases.

    +

    GRIB2, Section 3, octets 52-55.

    + +

    Definition at line 29 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rlat1

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlat1
    +
    +private
    +
    + +

    La1― latitude of first grid point.

    +

    GRIB2, Section 3.30, octet 39-42.

    + +

    Definition at line 25 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ rlati1

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlati1
    +
    +private
    +
    + +

    First latitude from the pole at which the secant cone cuts the sphere.

    +

    GRIB2, Section 3, octets 66-69.

    + +

    Definition at line 27 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ rlati2

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlati2
    +
    +private
    +
    + +

    Second latitude from the pole at which the scant cone cuts the sphere.

    +

    GRIB2, Section 3, octets 70-73.

    + +

    Definition at line 28 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon1

    + +
    +
    + + + + + +
    + + + + +
    real ip_lambert_conf_grid_mod::ip_lambert_conf_grid::rlon1
    +
    +private
    +
    + +

    Lo1― longitude of first grid point.

    +

    GRIB2, Section 3.30, octet 43-46.

    + +

    Definition at line 26 of file ip_lambert_conf_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.js b/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.js new file mode 100644 index 00000000..68099979 --- /dev/null +++ b/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.js @@ -0,0 +1,29 @@ +var structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid = +[ + [ "field_pos", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#aa69861340bc268b91a1076048ed489fc", null ], + [ "init", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a35dd86b4a9017f5b03a0a6a01eb4d370", null ], + [ "init_grib2", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a64129413df8ea478ab1360fd1a274e9a", null ], + [ "descriptor", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "dxs", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#aa3288a7fbf2db34946116c771e5bc7dc", null ], + [ "dys", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a46fa89562e4dd23c765029d2d6c087bc", null ], + [ "eccen_squared", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "h", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a733c8a9b6ed498aeec73fa8f11283c03", null ], + [ "im", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "irot", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a0d90490fa5eb04604fc0e01bea2cf3cf", null ], + [ "iwrap", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "orient", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a0614cfdb69e59e3c3e2937f3319fe34a", null ], + [ "rerth", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ], + [ "rlat1", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a618bb61b83c39dd344264933e51fa932", null ], + [ "rlati1", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#a7dcfaef2adc076604ad32d1ecd1f1cb4", null ], + [ "rlati2", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ae8b2c54b8d00685e179fec7786422f3b", null ], + [ "rlon1", "structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.html#ab7e9e396d5eeb63c8079a901c2c8743f", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.png b/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.png new file mode 100644 index 00000000..a7f309bc Binary files /dev/null and b/ver-5.1.0/structip__lambert__conf__grid__mod_1_1ip__lambert__conf__grid.png differ diff --git a/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.html b/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.html new file mode 100644 index 00000000..f210f13e --- /dev/null +++ b/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.html @@ -0,0 +1,845 @@ + + + + + + + +NCEPLIBS-ip: ip_mercator_grid_mod::ip_mercator_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_mercator_grid_mod::ip_mercator_grid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_mercator_grid_mod::ip_mercator_grid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_mercator
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real dlon
     Longitudinal direction grid length. More...
     
    real dphi
     Latitudinal direction grid length. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    real hi
     Scan mode in the 'i' direction. More...
     
    integer im
     Number of x points. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real rerth
     Radius of the Earth. More...
     
    real rlat1
     Latitude of first grid point. More...
     
    real rlati
     Latitude at which the Mercator projection intersects the Earth. More...
     
    real rlon1
     Longitude of first grid point. More...
     
    real rlon2
     Longitude of last grid point. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 22 of file ip_mercator_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_mercator_grid_mod::ip_mercator_grid::gdswzd
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    +
    Returns
    N/A gdswzd()
    +
    +N/A
    + +

    Definition at line 37 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_mercator_grid_mod::ip_mercator_grid::init_grib1
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 32 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_mercator_grid_mod::ip_mercator_grid::init_grib2
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib2_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 34 of file ip_mercator_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ dlon

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::ip_mercator_grid::dlon
    +
    +private
    +
    + +

    Longitudinal direction grid length.

    +

    Section 3, octets 65-68.

    + +

    Definition at line 28 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ dphi

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::ip_mercator_grid::dphi
    +
    +private
    +
    + +

    Latitudinal direction grid length.

    +

    Section 3, octets 69-72.

    + +

    Definition at line 29 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ hi

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::ip_mercator_grid::hi
    +
    +private
    +
    + +

    Scan mode in the 'i' direction.

    +

    Section 3, octet 60.

    + +

    Definition at line 27 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rlat1

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::ip_mercator_grid::rlat1
    +
    +private
    +
    + +

    Latitude of first grid point.

    +

    Section 3, octets 39-42.

    + +

    Definition at line 23 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ rlati

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::ip_mercator_grid::rlati
    +
    +private
    +
    + +

    Latitude at which the Mercator projection intersects the Earth.

    +

    Section 3, octets 48-51.

    + +

    Definition at line 26 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon1

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::ip_mercator_grid::rlon1
    +
    +private
    +
    + +

    Longitude of first grid point.

    +

    Section 3, octets 43-46.

    + +

    Definition at line 24 of file ip_mercator_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon2

    + +
    +
    + + + + + +
    + + + + +
    real ip_mercator_grid_mod::ip_mercator_grid::rlon2
    +
    +private
    +
    + +

    Longitude of last grid point.

    +

    Section 3, octets 56-59.

    + +

    Definition at line 25 of file ip_mercator_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.js b/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.js new file mode 100644 index 00000000..8852aa25 --- /dev/null +++ b/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.js @@ -0,0 +1,27 @@ +var structip__mercator__grid__mod_1_1ip__mercator__grid = +[ + [ "field_pos", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a940420aa99e0fbe51a976f9d0c343f1a", null ], + [ "init", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a3ae3bbb47f4c03c36404a2b35014d65c", null ], + [ "init_grib2", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a505b0114c7ff5fbb58c4e7ce5ccde3f0", null ], + [ "descriptor", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "dlon", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a455057778c7f2ad677956bdef2d754ee", null ], + [ "dphi", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a39168528a2c207b2e2c5373487d705c5", null ], + [ "eccen_squared", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "hi", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a91b223ca51a556fa11b76b0c05e0d3f2", null ], + [ "im", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "iwrap", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "rerth", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ], + [ "rlat1", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a1f98e5046c7c1eda30735e5919b79cc7", null ], + [ "rlati", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a3826e3e6b4f3264932c890a3c9804cef", null ], + [ "rlon1", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#adb673d1f9dbc7d7ee6f87513a2eed723", null ], + [ "rlon2", "structip__mercator__grid__mod_1_1ip__mercator__grid.html#a0b9bfef606985f5e682f4ddb84c99d2c", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.png b/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.png new file mode 100644 index 00000000..942758ef Binary files /dev/null and b/ver-5.1.0/structip__mercator__grid__mod_1_1ip__mercator__grid.png differ diff --git a/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html b/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html new file mode 100644 index 00000000..e96e0fc3 --- /dev/null +++ b/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html @@ -0,0 +1,896 @@ + + + + + + + +NCEPLIBS-ip: ip_polar_stereo_grid_mod::ip_polar_stereo_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_polar_stereo_grid_mod::ip_polar_stereo_grid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_polar_stereo_grid_mod::ip_polar_stereo_grid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_polar_stereo
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1). More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real dxs
     'x'-direction grid length, adjusted by the scanning mode. More...
     
    real dys
     'y'-direction grid length, adjusted by the scanning mode. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    logical elliptical
     When true/false, computations are based on an elliptical/spherical earth. More...
     
    real h
     Hemisphere flag. More...
     
    integer im
     Number of x points. More...
     
    integer irot
     Rotation flag. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real orient
     Orientation longitude. More...
     
    real rerth
     Radius of the Earth. More...
     
    real rlat1
     Latitude of the first grid point. More...
     
    real rlon1
     Longitude of the first grid point. More...
     
    real slatr
     Standard latitude of grid in radians. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 23 of file ip_polar_stereo_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::gdswzd
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1).

    +
    Returns
    N/A
    + +

    Definition at line 41 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib1
    +
    +private
    +
    + +

    Initializes a grid given a grib1_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 37 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_polar_stereo_grid_mod::ip_polar_stereo_grid::init_grib2
    +
    +private
    +
    + +

    Initializes a grid given a grib2_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 38 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ dxs

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::dxs
    +
    +private
    +
    + +

    'x'-direction grid length, adjusted by the scanning mode.

    + +

    Definition at line 29 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ dys

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::dys
    +
    +private
    +
    + +

    'y'-direction grid length, adjusted by the scanning mode.

    + +

    Definition at line 30 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ elliptical

    + +
    +
    + + + + + +
    + + + + +
    logical ip_polar_stereo_grid_mod::ip_polar_stereo_grid::elliptical
    +
    +private
    +
    + +

    When true/false, computations are based on an elliptical/spherical earth.

    + +

    Definition at line 24 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ h

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::h
    +
    +private
    +
    + +

    Hemisphere flag.

    +

    0 - NH; 1 - SH.

    + +

    Definition at line 28 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_polar_stereo_grid_mod::ip_polar_stereo_grid::irot
    +
    +private
    +
    + +

    Rotation flag.

    +

    When '0' the u/v vector components are relative to north/east. When '1' the u/v vector components are grid relative.

    + +

    Definition at line 35 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ orient

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::orient
    +
    +private
    +
    + +

    Orientation longitude.

    + +

    Definition at line 27 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rlat1

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::rlat1
    +
    +private
    +
    + +

    Latitude of the first grid point.

    + +

    Definition at line 25 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon1

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::rlon1
    +
    +private
    +
    + +

    Longitude of the first grid point.

    + +

    Definition at line 26 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    + +

    ◆ slatr

    + +
    +
    + + + + + +
    + + + + +
    real ip_polar_stereo_grid_mod::ip_polar_stereo_grid::slatr
    +
    +private
    +
    + +

    Standard latitude of grid in radians.

    + +

    Definition at line 31 of file ip_polar_stereo_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.js b/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.js new file mode 100644 index 00000000..32b6b141 --- /dev/null +++ b/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.js @@ -0,0 +1,29 @@ +var structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid = +[ + [ "field_pos", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9e97b7352e67dd629f622f292cf0ca21", null ], + [ "init", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ae2a5a7c08e4578f3d0ff6b85e5a14cce", null ], + [ "init_grib2", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a9622ce9892084b52303f27722572b87c", null ], + [ "descriptor", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "dxs", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ac009bce0c0c14b3e0970da6c032a11b1", null ], + [ "dys", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a95e155383895ad3f56a3876877b5896b", null ], + [ "eccen_squared", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "elliptical", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a1bac1023f8d8cd631760403b222a8c3f", null ], + [ "h", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a6df619b3050279d9d560e72a3e87168f", null ], + [ "im", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "irot", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a13f3f267f5a26602eb93b6525f494a10", null ], + [ "iwrap", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "orient", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#aeaeb6d72861b9b62de5bcd435bc96ea4", null ], + [ "rerth", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ], + [ "rlat1", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a00565fd51d334324e9d68d1fc8c52640", null ], + [ "rlon1", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#a61650c9ce1a2ce44243bf491e5d93728", null ], + [ "slatr", "structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.html#aae4f801c95b7b61e2e6b1dd824d3688b", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.png b/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.png new file mode 100644 index 00000000..b5c2a91e Binary files /dev/null and b/ver-5.1.0/structip__polar__stereo__grid__mod_1_1ip__polar__stereo__grid.png differ diff --git a/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html b/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html new file mode 100644 index 00000000..89d8efc4 --- /dev/null +++ b/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html @@ -0,0 +1,895 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_rot_equid_cylind_egrid
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1). More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    real(kdclat0
     Cosine of the latitude of the southern pole of projection. More...
     
    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real(kddlats
     'J'-direction grid increment. More...
     
    real(kddlons
     'I'-direction grid increment. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    real(kdhi
     Scan mode in the 'i' direction. More...
     
    integer im
     Number of x points. More...
     
    integer irot
     Rotation flag. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real rerth
     Radius of the Earth. More...
     
    real(kdrlat1
     Latitude of first grid point. More...
     
    real(kdrlon0
     Longitude of southern pole of projection. More...
     
    real(kdrlon1
     Longitude of first grid point. More...
     
    real(kdslat0
     Sine of the latitude of the southern pole of projection. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 37 of file ip_rot_equid_cylind_egrid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::gdswzd
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1).

    +
    Returns
    N/A
    + +

    Definition at line 59 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib1
    +
    +private
    +
    + +

    Initializes a rotated equidistant cylindrical grid given a grib1_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 53 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::init_grib2
    +
    +private
    +
    + +

    Initializes a rotated equidistant cylindrical grid given a grib2_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 56 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ clat0

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::clat0
    +
    +private
    +
    + +

    Cosine of the latitude of the southern pole of projection.

    + +

    Definition at line 41 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ dlats

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::dlats
    +
    +private
    +
    + +

    'J'-direction grid increment.

    + +

    Definition at line 43 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ dlons

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::dlons
    +
    +private
    +
    + +

    'I'-direction grid increment.

    + +

    Definition at line 44 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ hi

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::hi
    +
    +private
    +
    + +

    Scan mode in the 'i' direction.

    + +

    Definition at line 45 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::irot
    +
    +private
    +
    + +

    Rotation flag.

    +

    When '0' the u/v vector components are relative to north/east. When '1' the u/v vector components are grid relative.

    + +

    Definition at line 49 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rlat1

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlat1
    +
    +private
    +
    + +

    Latitude of first grid point.

    + +

    Definition at line 40 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ rlon0

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlon0
    +
    +private
    +
    + +

    Longitude of southern pole of projection.

    + +

    Definition at line 38 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ rlon1

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::rlon1
    +
    +private
    +
    + +

    Longitude of first grid point.

    + +

    Definition at line 39 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    + +

    ◆ slat0

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_egrid_mod::ip_rot_equid_cylind_egrid::slat0
    +
    +private
    +
    + +

    Sine of the latitude of the southern pole of projection.

    + +

    Definition at line 42 of file ip_rot_equid_cylind_egrid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.js b/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.js new file mode 100644 index 00000000..fa593342 --- /dev/null +++ b/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.js @@ -0,0 +1,29 @@ +var structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid = +[ + [ "field_pos", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a62c8147f8845d75e8f52c7524a74c780", null ], + [ "init", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ab9a85830bfd06183a8df73726f62217a", null ], + [ "init_grib2", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#adda32463a76ad97ac35b01f1ac693fa4", null ], + [ "clat0", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a7a1b97e05b77bb7563165bf3f3e97dda", null ], + [ "descriptor", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "dlats", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a00d41c3d43370d3f02bb92d59f66866c", null ], + [ "dlons", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a23a172ccd2e026746925e2029c0a9206", null ], + [ "eccen_squared", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "hi", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a970c2655cb03ad0927e03c1d550e3fe5", null ], + [ "im", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "irot", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a558e99f37191cb2ea7398ac2a05ef29e", null ], + [ "iwrap", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "rerth", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ], + [ "rlat1", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a884837892bf520ea7950f95d8c562a08", null ], + [ "rlon0", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a65579b8557bffeedb99f384048dea14e", null ], + [ "rlon1", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#a3684458139a165cd719b054637a7d121", null ], + [ "slat0", "structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.html#aca4b0ae69f756ef4854369bf88423d66", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.png b/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.png new file mode 100644 index 00000000..4a47e89a Binary files /dev/null and b/ver-5.1.0/structip__rot__equid__cylind__egrid__mod_1_1ip__rot__equid__cylind__egrid.png differ diff --git a/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html b/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html new file mode 100644 index 00000000..6a372b93 --- /dev/null +++ b/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html @@ -0,0 +1,866 @@ + + + + + + + +NCEPLIBS-ip: ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_rot_equid_cylind
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a Rotated equidistant cylindrical given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    real(kdclat0
     Cosine of the latitude of the southern pole of projection. More...
     
    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real(kddlats
     'J'-direction grid increment. More...
     
    real(kddlons
     'I'-direction grid increment. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    integer im
     Number of x points. More...
     
    integer irot
     Rotation flag. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real rerth
     Radius of the Earth. More...
     
    real(kdrlon0
     Longitude of southern pole of projection. More...
     
    real(kdsbd
     Latitude of the southern boundary of the grid before rotation. More...
     
    real(kdslat0
     Sine of the latitude of the southern pole of projection. More...
     
    real(kdwbd
     Longitude of the western boundary of the grid before rotation. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 32 of file ip_rot_equid_cylind_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::gdswzd
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for Gaussian grids.

    +
    Returns
    N/A
    + +

    Definition at line 53 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib1
    +
    +private
    +
    + +

    Initializes a Rotated equidistant cylindrical grid given a grib1_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 47 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::init_grib2
    +
    +private
    +
    + +

    Initializes a Rotated equidistant cylindrical given a grib2_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 50 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ clat0

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::clat0
    +
    +private
    +
    + +

    Cosine of the latitude of the southern pole of projection.

    + +

    Definition at line 33 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ dlats

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::dlats
    +
    +private
    +
    + +

    'J'-direction grid increment.

    + +

    Definition at line 34 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ dlons

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::dlons
    +
    +private
    +
    + +

    'I'-direction grid increment.

    + +

    Definition at line 35 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ irot

    + +
    +
    + + + + + +
    + + + + +
    integer ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::irot
    +
    +private
    +
    + +

    Rotation flag.

    +

    When '0' the u/v vector components are relative to north/east. When '1' the u/v vector components are grid relative.

    + +

    Definition at line 43 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rlon0

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::rlon0
    +
    +private
    +
    + +

    Longitude of southern pole of projection.

    + +

    Definition at line 36 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ sbd

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::sbd
    +
    +private
    +
    + +

    Latitude of the southern boundary of the grid before rotation.

    + +

    Definition at line 39 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ slat0

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::slat0
    +
    +private
    +
    + +

    Sine of the latitude of the southern pole of projection.

    + +

    Definition at line 37 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    + +

    ◆ wbd

    + +
    +
    + + + + + +
    + + + + +
    real(kd) ip_rot_equid_cylind_grid_mod::ip_rot_equid_cylind_grid::wbd
    +
    +private
    +
    + +

    Longitude of the western boundary of the grid before rotation.

    + +

    Definition at line 38 of file ip_rot_equid_cylind_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.js b/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.js new file mode 100644 index 00000000..696035bb --- /dev/null +++ b/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.js @@ -0,0 +1,28 @@ +var structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid = +[ + [ "field_pos", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a0f14a253b51bcb0633cd00d32d5130a4", null ], + [ "init", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a9942c787bda2e118f1355476670edfca", null ], + [ "init_grib2", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a30ae580d169972e8d68c3d97ab3b2634", null ], + [ "clat0", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a49835868e8c8b96e243a5992daee6ea5", null ], + [ "descriptor", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "dlats", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#affd9cfc7a0e1d8e74735eac35b2e03c6", null ], + [ "dlons", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a76222910f6c9fa0c5374bed672904c85", null ], + [ "eccen_squared", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "im", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "irot", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#ae4c44c4cf8d1376b24861534edbf514f", null ], + [ "iwrap", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "rerth", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ], + [ "rlon0", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a7b111301b2fc41270869ee182512f13c", null ], + [ "sbd", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a246ec0afc422f6cfcc3758ff62c6017f", null ], + [ "slat0", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a8a02c6fc1ad38174e15679e69b5cbfdc", null ], + [ "wbd", "structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.html#a33ae1763c4f1267091bee36a9c92e46a", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.png b/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.png new file mode 100644 index 00000000..9dd76b75 Binary files /dev/null and b/ver-5.1.0/structip__rot__equid__cylind__grid__mod_1_1ip__rot__equid__cylind__grid.png differ diff --git a/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.html b/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.html new file mode 100644 index 00000000..3082ed30 --- /dev/null +++ b/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.html @@ -0,0 +1,633 @@ + + + + + + + +NCEPLIBS-ip: ip_station_points_grid_mod::ip_station_points_grid Type Reference + + + + + + + + + + + + + +
    +
    + + + + + + +
    +
    NCEPLIBS-ip +  5.1.0 +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    + +
    + +
    + +
    +
    ip_station_points_grid_mod::ip_station_points_grid Type Reference
    +
    +
    +
    +Inheritance diagram for ip_station_points_grid_mod::ip_station_points_grid:
    +
    +
    + + +ip_grid_mod::ip_grid + +
    + + + + + + + + + + + + + + + + + +

    +Private Member Functions

    procedure field_pos
     Field position for a given grid point. More...
     
    procedure gdswzd => gdswzd_station_points
     Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for IP Station Point grids. More...
     
    generic init => init_grib1, init_grib2
     Init subprogram. More...
     
    procedure init_grib1
     Initializes a gaussian grid given a grib1_descriptor object. More...
     
    procedure init_grib2
     Initializes a gaussian grid given a grib2_descriptor object. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Private Attributes

    class(ip_grid_descriptor), allocatable descriptor
     Descriptor. More...
     
    real eccen_squared
     Eccentricity of the Earth squared (e^2). More...
     
    integer im
     Number of x points. More...
     
    integer iwrap
     x wraparound increment (0 if no wraparound). More...
     
    integer jm
     Number of y points. More...
     
    integer jwrap1
     y wraparound lower pivot point (0 if no wraparound). More...
     
    integer jwrap2
     y wraparound upper pivot point (0 if no wraparound). More...
     
    integer kscan
     Mass/wind flag for staggered diagonal (0 if mass; 1 if wind). More...
     
    integer nm
     Total number of points. More...
     
    integer nscan
     
    integer nscan_field_pos
     nscan for field_pos routine. More...
     
    real rerth
     Radius of the Earth. More...
     
    +

    Detailed Description

    +
    +

    Definition at line 18 of file ip_station_points_grid_mod.F90.

    +

    Member Function/Subroutine Documentation

    + +

    ◆ field_pos()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_grid_mod::ip_grid::field_pos
    +
    +privateinherited
    +
    + +

    Field position for a given grid point.

    +
    Returns
    Integer position in grib field to locate grid point.
    + +

    Definition at line 88 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ gdswzd()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_station_points_grid_mod::ip_station_points_grid::gdswzd
    +
    +private
    +
    + +

    Calculates Earth coordinates (iopt = 1) or grid coorindates (iopt = -1) for IP Station Point grids.

    +
    Returns
    N/A
    + +

    Definition at line 26 of file ip_station_points_grid_mod.F90.

    + +
    +
    + +

    ◆ init()

    + +
    +
    + + + + + +
    + + + + +
    generic ip_grid_mod::ip_grid::init
    +
    +privateinherited
    +
    + +

    Init subprogram.

    +
    Returns
    N/A
    + +

    Definition at line 90 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib1()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_station_points_grid_mod::ip_station_points_grid::init_grib1
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib1_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 21 of file ip_station_points_grid_mod.F90.

    + +
    +
    + +

    ◆ init_grib2()

    + +
    +
    + + + + + +
    + + + + +
    procedure ip_station_points_grid_mod::ip_station_points_grid::init_grib2
    +
    +private
    +
    + +

    Initializes a gaussian grid given a grib2_descriptor object.

    +
    Returns
    N/A
    + +

    Definition at line 23 of file ip_station_points_grid_mod.F90.

    + +
    +
    +

    Field Documentation

    + +

    ◆ descriptor

    + +
    +
    + + + + + +
    + + + + +
    class(ip_grid_descriptor), allocatable ip_grid_mod::ip_grid::descriptor
    +
    +privateinherited
    +
    + +

    Descriptor.

    + +

    Definition at line 59 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ eccen_squared

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::eccen_squared
    +
    +privateinherited
    +
    + +

    Eccentricity of the Earth squared (e^2).

    + +

    Definition at line 78 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ im

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::im
    +
    +privateinherited
    +
    + +

    Number of x points.

    + +

    Definition at line 61 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ iwrap

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::iwrap
    +
    +privateinherited
    +
    + +

    x wraparound increment (0 if no wraparound).

    + +

    Definition at line 74 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jm
    +
    +privateinherited
    +
    + +

    Number of y points.

    + +

    Definition at line 62 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap1

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap1
    +
    +privateinherited
    +
    + +

    y wraparound lower pivot point (0 if no wraparound).

    + +

    Definition at line 75 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ jwrap2

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::jwrap2
    +
    +privateinherited
    +
    + +

    y wraparound upper pivot point (0 if no wraparound).

    + +

    Definition at line 76 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ kscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::kscan
    +
    +privateinherited
    +
    + +

    Mass/wind flag for staggered diagonal (0 if mass; 1 if wind).

    + +

    Definition at line 70 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nm

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nm
    +
    +privateinherited
    +
    + +

    Total number of points.

    + +

    Definition at line 63 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan
    +
    +privateinherited
    +
    +
    Parameters
    + + +
    Scanningmode.
      +
    • 0 if x first then y;
    • +
    • 1 if y first then x;
    • +
    • 3 if staggered diagonal like projection 203.
    • +
    +
    +
    +
    + +

    Definition at line 69 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ nscan_field_pos

    + +
    +
    + + + + + +
    + + + + +
    integer ip_grid_mod::ip_grid::nscan_field_pos
    +
    +privateinherited
    +
    + +

    nscan for field_pos routine.

    +

    Can be different than nscan due to differences in grib/grib2.

    + +

    Definition at line 72 of file ip_grid_mod.F90.

    + +
    +
    + +

    ◆ rerth

    + +
    +
    + + + + + +
    + + + + +
    real ip_grid_mod::ip_grid::rerth
    +
    +privateinherited
    +
    + +

    Radius of the Earth.

    + +

    Definition at line 77 of file ip_grid_mod.F90.

    + +
    +
    +
    The documentation for this type was generated from the following file: +
    +
    + + + + diff --git a/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.js b/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.js new file mode 100644 index 00000000..f8d6a0a4 --- /dev/null +++ b/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.js @@ -0,0 +1,20 @@ +var structip__station__points__grid__mod_1_1ip__station__points__grid = +[ + [ "field_pos", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#ac071b3d3eca9a5fa88ff5dc211d19179", null ], + [ "gdswzd", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a9fff8b24553d11177b8c1ee38bfbd91f", null ], + [ "init", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a1f3fa40acb8c2ae4a65c00db21872d7c", null ], + [ "init_grib1", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#aa5ec2cbc9bf0dadf20a226e0afeb3d32", null ], + [ "init_grib2", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a69fac68e7a40d5c3106a47bf1851891e", null ], + [ "descriptor", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a4a2a0dab09f05931d12615b0ac74bc51", null ], + [ "eccen_squared", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a180a5da6c470fac34b8439d4c0a32d2a", null ], + [ "im", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a546a9c3bb8e93ec8e8f7eaf2a14537dc", null ], + [ "iwrap", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#ae179622b9a4c764a5ca90385330941ed", null ], + [ "jm", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a41a2a38288864520d8c50854d1843f87", null ], + [ "jwrap1", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a92976f110dd7e823799991137ac970a1", null ], + [ "jwrap2", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#ae70be8cebcd217a49be4da1cebfc19d2", null ], + [ "kscan", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a084603b1c052e76c3335fea2e887cfce", null ], + [ "nm", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a2ae87fb4e6bdcb75fc6fdc80ad73ee30", null ], + [ "nscan", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a1a15aa48354dbbd0b8debafbfc6e7b18", null ], + [ "nscan_field_pos", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a0640093c52461763f904cc2f12c96b6c", null ], + [ "rerth", "structip__station__points__grid__mod_1_1ip__station__points__grid.html#a2bb4d4ec2455c3148313bf7cc54e1cc8", null ] +]; \ No newline at end of file diff --git a/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.png b/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.png new file mode 100644 index 00000000..2419f863 Binary files /dev/null and b/ver-5.1.0/structip__station__points__grid__mod_1_1ip__station__points__grid.png differ diff --git a/ver-5.1.0/sync_off.png b/ver-5.1.0/sync_off.png new file mode 100644 index 00000000..3b443fc6 Binary files /dev/null and b/ver-5.1.0/sync_off.png differ diff --git a/ver-5.1.0/sync_on.png b/ver-5.1.0/sync_on.png new file mode 100644 index 00000000..e08320fb Binary files /dev/null and b/ver-5.1.0/sync_on.png differ diff --git a/ver-5.1.0/tab_a.png b/ver-5.1.0/tab_a.png new file mode 100644 index 00000000..3b725c41 Binary files /dev/null and b/ver-5.1.0/tab_a.png differ diff --git a/ver-5.1.0/tab_b.png b/ver-5.1.0/tab_b.png new file mode 100644 index 00000000..e2b4a863 Binary files /dev/null and b/ver-5.1.0/tab_b.png differ diff --git a/ver-5.1.0/tab_h.png b/ver-5.1.0/tab_h.png new file mode 100644 index 00000000..fd5cb705 Binary files /dev/null and b/ver-5.1.0/tab_h.png differ diff --git a/ver-5.1.0/tab_s.png b/ver-5.1.0/tab_s.png new file mode 100644 index 00000000..ab478c95 Binary files /dev/null and b/ver-5.1.0/tab_s.png differ diff --git a/ver-5.1.0/tabs.css b/ver-5.1.0/tabs.css new file mode 100644 index 00000000..7d45d36c --- /dev/null +++ b/ver-5.1.0/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0px/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0px 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255,255,255,0.9);color:#283A5D;outline:none}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a.current{color:#D23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media (min-width: 768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0px 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox a:hover span.sub-arrow{border-color:#fff transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;border-radius:5px !important;box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:#fff;text-shadow:0px 1px 1px #000}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent #fff}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #D23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#D23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}