WAVEWATCH III  beta 0.0.1
w3pro1md.F90
Go to the documentation of this file.
1 
8 
9 #include "w3macros.h"
10 !/ ------------------------------------------------------------------- /
23 MODULE w3pro1md
24  !/
25  !/ +-----------------------------------+
26  !/ | WAVEWATCH III NOAA/NCEP |
27  !/ | H. L. Tolman |
28  !/ | FORTRAN 90 |
29  !/ | Last update : 05-Jun-2018 |
30  !/ +-----------------------------------+
31  !/
32  !/ 04-Feb-2000 : Origination ( version 2.00 )
33  !/ 28-Mar-2001 : Partial time step bug fix (proper ( version 2.10 )
34  !/ ingest of boundaries).
35  !/ 02-Apr-2001 : Sub-grid obstructions. ( version 2.10 )
36  !/ 26-Dec-2002 : Moving grid version. ( version 3.02 )
37  !/ 20-Dec-2004 : Multiple grid version. ( version 3.06 )
38  !/ 07-Sep-2005 : Improved XY boundary conditions. ( version 3.08 )
39  !/ 10-Jan-2007 : Clean-up FACVX/Y compute. ( version 3.10 )
40  !/ 05-Mar-2008 : Added NEC sxf90 compiler directives
41  !/ (Chris Bunney, UK Met Office) ( version 3.13 )
42  !/ 29-May-2009 : Preparing distribution version. ( version 3.14 )
43  !/ 30-Oct-2009 : Implement curvilinear grid type. ( version 3.14 )
44  !/ (W. E. Rogers & T. J. Campbell, NRL)
45  !/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to
46  !/ specify index closure for a grid. ( version 3.14 )
47  !/ (T. J. Campbell, NRL)
48  !/ 29-May-2014 : Adding OMPH switch. ( version 5.02 )
49  !/ 08-May-2014 : Implement tripolar grid for first order propagation
50  !/ scheme ( version 5.03 )
51  !/ (W. E. Rogers, NRL)
52  !/ 05-Jun-2018 : Add DEBUG ( version 6.04 )
53  !/
54  !/ Copyright 2009-2014 National Weather Service (NWS),
55  !/ National Oceanic and Atmospheric Administration. All rights
56  !/ reserved. WAVEWATCH III is a trademark of the NWS.
57  !/ No unauthorized use without permission.
58  !/
59  ! 1. Purpose :
60  !
61  ! Bundles routines for first order propagation scheme in single
62  ! module.
63  !
64  ! 2. Variables and types :
65  !
66  ! Name Type Scope Description
67  ! ----------------------------------------------------------------
68  ! ----------------------------------------------------------------
69  !
70  ! 3. Subroutines and functions :
71  !
72  ! Name Type Scope Description
73  ! ----------------------------------------------------------------
74  ! W3MAP1 Subr. Public Set up auxiliary maps.
75  ! W3XYP1 Subr. Public First order spatial propagation.
76  ! W3KTP1 Subr. Public First order spectral propagation.
77  ! ----------------------------------------------------------------
78  !
79  ! 4. Subroutines and functions used :
80  !
81  ! Name Type Module Description
82  ! ----------------------------------------------------------------
83  ! DSEC21 Func. W3TIMEMD Time difference.
84  ! STRACE Subr. W3SERVMD Subroutine tracing.
85  ! ----------------------------------------------------------------
86  !
87  ! 5. Remarks :
88  !
89  ! 6. Switches :
90  !
91  ! !/S Enable subroutine tracing.
92  ! !/Tn Enable test output.
93  !
94  ! 7. Source code :
95  !
96  !/ ------------------------------------------------------------------- /
97 CONTAINS
98  !/ ------------------------------------------------------------------- /
107  SUBROUTINE w3map1 ( MAPSTA )
108  !/
109  !/ +-----------------------------------+
110  !/ | WAVEWATCH III NOAA/NCEP |
111  !/ | H. L. Tolman |
112  !/ | FORTRAN 90 |
113  !/ | Last update : 06-Dec-2010 |
114  !/ +-----------------------------------+
115  !/
116  !/ 19-Dec-1996 : Final FORTRAN 77 ( version 1.18 )
117  !/ 14-Dec-1999 : Upgrade to FORTRAN 90 ( version 2.00 )
118  !/ 20-Dec-2004 : Multiple grid version. ( version 3.06 )
119  !/ 10-Jan-2007 : Clean-up FACVX/Y compute. ( version 3.10 )
120  !/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to
121  !/ specify index closure for a grid. ( version 3.14 )
122  !/ (T. J. Campbell, NRL)
123  !/
124  ! 1. Purpose :
125  !
126  ! Generate 'map' arrays for the first order upstream scheme.
127  !
128  ! 2. Method :
129  !
130  ! See section 3.
131  !
132  ! 3. Parameters :
133  !
134  ! Parameter list
135  ! ----------------------------------------------------------------
136  ! MAPSTA I.A. I Status map.
137  ! ----------------------------------------------------------------
138  !
139  ! 4. Subroutines used :
140  !
141  ! See module documentation.
142  !
143  ! 5. Called by :
144  !
145  ! Name Type Module Description
146  ! ----------------------------------------------------------------
147  ! W3WAVE Subr. W3WAVEMD Wave model routine.
148  ! ----------------------------------------------------------------
149  !
150  ! 6. Error messages :
151  !
152  ! 7. Remarks :
153  !
154  ! 8. Structure :
155  !
156  ! ------------------------------------------------------
157  ! 1. Initialize arrays.
158  ! 2. Fill arrays.
159  ! 3. Invert arrays.
160  ! ------------------------------------------------------
161  !
162  ! 9. Switches :
163  !
164  ! !/S Enable subroutine tracing.
165  !
166  ! 10. Source code :
167  !
168  !/ ------------------------------------------------------------------- /
169  USE w3gdatmd, ONLY: nth, nspec, nx, ny, iclose, &
171  USE w3adatmd, ONLY: is0, is2, facvx, facvy
172  USE w3odatmd, ONLY: ndse, iaproc, naperr
173  USE w3servmd, ONLY: extcde
174 #ifdef W3_S
175  USE w3servmd, ONLY: strace
176 #endif
177  !/
178  IMPLICIT NONE
179  !/
180  !/ ------------------------------------------------------------------- /
181  !/ Parameter list
182  !/
183  INTEGER, INTENT(IN) :: MAPSTA(NY*NX)
184  !/
185  !/ ------------------------------------------------------------------- /
186  !/ Local parameters
187  !/
188  INTEGER :: IX, IY, IXY, ISP, IXNEXT
189 #ifdef W3_S
190  INTEGER, SAVE :: IENT = 0
191 #endif
192  !/
193  !/ ------------------------------------------------------------------- /
194  !/
195 #ifdef W3_S
196  CALL strace (ient, 'W3MAP1')
197 #endif
198  !
199 
200  ! 1. Initialize x-y arrays ------------------------------------------ *
201  !
202  facvx = 0.
203  facvy = 0.
204  !
205  ! 2. Fill x-y arrays ------------------------------------------------ *
206  !
207  !.....FACVY
208  DO ix=1, nx
209  DO iy=1, ny-1
210  ixy = iy +(ix-1)*ny
211  IF ( mapsta( ixy ) .NE. 0 ) facvy(ixy) = facvy(ixy) + 1.
212  !.........next point : j+1 : increment IXY by 1
213  IF ( mapsta(ixy+1) .NE. 0 ) facvy(ixy) = facvy(ixy) + 1.
214  END DO
215  END DO
216  !
217  !.....FACVY for IY=NY
218  IF ( iclose.EQ.iclose_trpl ) THEN
219  iy=ny
220  DO ix=1, nx
221  ixy = iy +(ix-1)*ny
222  IF ( mapsta( ixy ) .NE. 0 ) facvy(ixy) = facvy(ixy) + 1.
223  !...........next point: j+1: tripole: j==>j+1==>j and i==>ni-i+1
224  ixnext=nx-ix+1
225  ixy = iy +(ixnext-1)*ny
226  IF ( mapsta( ixy ) .NE. 0 ) facvy(ixy) = facvy(ixy) + 1.
227  END DO
228  !BGR: Adding the following lines to compute FACVX over all
229  ! IX for IY=NY (this allows along-seam propagation).
230  ! Located here since already inside "TRPL" if-block.
231  !{
232  DO ix=1, nx-1
233  ixy = iy +(ix-1)*ny
234  IF ( mapsta( ixy ) .NE. 0 ) facvx(ixy) = facvx(ixy) + 1.
235  IF ( mapsta(ixy+ny) .NE. 0 ) facvx(ixy) = facvx(ixy) + 1.
236  END DO
237  !}
238  END IF
239  !
240  !.....FACVX
241  DO ix=1, nx-1
242  DO iy=2, ny-1
243  ixy = iy +(ix-1)*ny
244  IF ( mapsta( ixy ) .NE. 0 ) facvx(ixy) = facvx(ixy) + 1.
245  !.........next point : i+1 : increment IXY by NY
246  IF ( mapsta(ixy+ny) .NE. 0 ) facvx(ixy) = facvx(ixy) + 1.
247  END DO
248  END DO
249  !
250  !.....FACVX for IX=NX
251  IF ( iclose.NE.iclose_none ) THEN
252  DO iy=2, ny-1
253  ixy = iy +(nx-1)*ny
254  IF ( mapsta(ixy) .NE. 0 ) facvx(ixy) = facvx(ixy) + 1.
255  !...........next point : i+1 : increment IXY by NY
256  !...........IXY+NY=IY+(IX-1)*NY+NY = IY+IX*NY = IY+NX*NY ==> wrap to IY
257  IF ( mapsta(iy ) .NE. 0 ) facvx(ixy) = facvx(ixy) + 1.
258  END DO
259  END IF
260  !
261  ! 3. Invert x-y arrays ---------------------------------------------- *
262  !
263  DO ixy=1, nx*ny
264  IF ( facvx(ixy) .NE. 0. ) facvx(ixy) = 1. / facvx(ixy)
265  IF ( facvy(ixy) .NE. 0. ) facvy(ixy) = 1. / facvy(ixy)
266  END DO
267  !
268  ! 4. Fill theta arrays ---------------------------------------------- *
269  !
270  DO isp=1, nspec
271  is2(isp) = isp + 1
272  is0(isp) = isp - 1
273  END DO
274  !
275  DO isp=nth, nspec, nth
276  is2(isp) = is2(isp) - nth
277  END DO
278  !
279  DO isp=1, nspec, nth
280  is0(isp) = is0(isp) + nth
281  END DO
282  !
283  RETURN
284  !/
285  !/ End of W3MAP1 ----------------------------------------------------- /
286  !/
287  END SUBROUTINE w3map1
288  !/ ------------------------------------------------------------------- /
302  SUBROUTINE w3xyp1 ( ISP, DTG, MAPSTA, FIELD, VGX, VGY )
303  !/
304  !/ +-----------------------------------+
305  !/ | WAVEWATCH III NOAA/NCEP |
306  !/ | H. L. Tolman |
307  !/ | FORTRAN 90 |
308  !/ | Last update : 29-May-2014 |
309  !/ +-----------------------------------+
310  !/
311  !/ 07-Jul-1998 : Final FORTRAN 77 ( version 1.18 )
312  !/ 14-Dec-1999 : Upgrade to FORTRAN 90 ( version 2.00 )
313  !/ 28-Mar-2001 : Partial time step bug fix. ( version 2.10 )
314  !/ 02-Apr-2001 : Sub-grid obstructions. ( version 2.10 )
315  !/ 26-Dec-2002 : Moving grid version. ( version 3.02 )
316  !/ 20-Dec-2004 : Multiple grid version. ( version 3.06 )
317  !/ 07-Sep-2005 : Improved XY boundary conditions. ( version 3.08 )
318  !/ 05-Mar-2008 : Added NEC sxf90 compiler directives
319  !/ (Chris Bunney, UK Met Office) ( version 3.13 )
320  !/ 30-Oct-2009 : Implement curvilinear grid type. ( version 3.14 )
321  !/ (W. E. Rogers & T. J. Campbell, NRL)
322  !/ 06-Dec-2010 : Change from GLOBAL (logical) to ICLOSE (integer) to
323  !/ specify index closure for a grid. ( version 3.14 )
324  !/ (T. J. Campbell, NRL)
325  !/ 29-May-2014 : Adding OMPH switch. ( version 5.02 )
326  !/
327  ! 1. Purpose :
328  !
329  ! Propagation in physical space for a given spectral component.
330  !
331  ! 2. Method :
332  !
333  ! First order scheme with flux formulation.
334  ! Curvilinear grid implementation: Fluxes are computed in index space
335  ! and then transformed back into physical space.
336  !
337  ! 3. Parameters :
338  !
339  ! Parameter list
340  ! ----------------------------------------------------------------
341  ! ISP Int. I Number of spectral bin (IK-1)*NTH+ITH
342  ! DTG Real I Total time step.
343  ! MAPSTA I.A. I Grid point status map.
344  ! FIELD R.A. I/O Wave action spectral densities on full
345  ! grid.
346  ! VGX/Y Real I Speed of grid.
347  ! ----------------------------------------------------------------
348  !
349  ! Local variables.
350  ! ----------------------------------------------------------------
351  ! NTLOC Int. Number of local steps.
352  ! DTLOC Real Local propagation time step.
353  ! VCX R.A. Propagation velocities in index space.
354  ! VCY R.A.
355  ! CXTOT R.A. Propagation velocities in physical space.
356  ! CYTOT R.A.
357  ! VFLX R.A. Discrete fluxes between grid points in index space.
358  ! VFLY R.A.
359  ! ----------------------------------------------------------------
360  !
361  ! 4. Subroutines used :
362  !
363  ! See module documentation.
364  !
365  ! 5. Called by :
366  !
367  ! Name Type Module Description
368  ! ----------------------------------------------------------------
369  ! W3WAVE Subr. W3WAVEMD Wave model routine.
370  ! ----------------------------------------------------------------
371  !
372  ! 6. Error messages :
373  !
374  ! None.
375  !
376  ! 7. Remarks :
377  !
378  ! - The local work arrays are initialized on the first entry to
379  ! the routine.
380  ! - Curvilinear grid implementation. Variables FACX, FACY, CCOS, CSIN,
381  ! CCURX, CCURY are not needed and have been removed. FACX is accounted
382  ! for as approriate in this subroutine. FACX is also accounted for in
383  ! the case of .NOT.FLCX. Since FACX is removed, there is now a check for
384  ! .NOT.FLCX in this subroutine. In CFL calcs dx and dy are omitted,
385  ! since dx=dy=1 in index space. Curvilinear grid derivatives
386  ! (DPDY, DQDX, etc.) and metric (GSQRT) are brought in via W3GDATMD.
387  ! - Standard VCB calculation for Y is:
388  ! VCB = FACVY(IXY) * ( VCY2D(IY,IX) + VCY2D(IY+1,IX) )
389  ! This is to calculate the flux VCY(IY+0.5). For the tripole grid,
390  ! we cannot do it this way, since the sign of VCY flips as we jump
391  ! over the seam. If we were to do it this way, VCY(IY) and VCY(IY+1)
392  ! are two numbers of similar magnitude and opposite sign, so the
393  ! average of the two gives something close to zero, so energy does
394  ! not leave via VCY(IY+0.5). One alternative is:
395  ! VCB = VCY2D(IY,IX)
396  ! Another alternative is :
397  ! VCB = FACVY(IXY) * ( VCY2D(IY,IX) - VCY2D(IY+1,IX) )
398  ! Both appear to give correct results for ww3_tp2.13. We use the
399  ! second alternative.
400  !
401  ! 8. Structure :
402  !
403  ! ---------------------------------------
404  ! 1. Preparations
405  ! a Set constants
406  ! b Initialize arrays
407  ! 2. Calculate local discrete fluxes
408  ! 3. Calculate propagation fluxes
409  ! 4. Propagate
410  ! 5. Update boundary conditions
411  ! ---------------------------------------
412  !
413  ! 9. Switches :
414  !
415  ! !/S Enable subroutine tracing.
416  !
417  ! !/OMPH Hybrid OpenMP directives.
418  !
419  ! !/T Enable general test output.
420  ! !/T1 Test output local fluxes (V)FX-YL.
421  ! !/T2 Test output propagation fluxes (V)FLX-Y.
422  ! !/T3 Test output propagation.
423  !
424  ! 10. Source code :
425  !
426  !/ ------------------------------------------------------------------- /
427  USE constants
428  !
429  USE w3timemd, ONLY: dsec21
430  !
431  USE w3gdatmd, ONLY: nk, nth, sig, ecos, esin, nx, ny, nsea, &
432  mapsf, dtcfl, iclose, clats, flcx, flcy, &
435  USE w3wdatmd, ONLY: time
436  USE w3adatmd, ONLY: cg, cx, cy, atrnx, atrny, facvx, facvy
437  USE w3idatmd, ONLY: flcur
438  USE w3odatmd, ONLY: ndst, flbpi, nbi, tbpi0, tbpin, isbpi, &
440  USE w3servmd, ONLY: extcde
441 #ifdef W3_S
442  USE w3servmd, ONLY: strace
443 #endif
444  !/
445  IMPLICIT NONE
446  !/
447  !/ ------------------------------------------------------------------- /
448  !/ Parameter list
449  !/
450  INTEGER, INTENT(IN) :: ISP, MAPSTA(NY*NX)
451  REAL, INTENT(IN) :: DTG, VGX, VGY
452  REAL, INTENT(INOUT) :: FIELD(1-NY:NY*(NX+2))
453  !/
454  !/ ------------------------------------------------------------------ /
455  !/ Local parameters
456  !/
457  INTEGER :: IK, ITH, NTLOC, ITLOC, ISEA, IXY, &
458  IY0, IX, IY, JXN, JXP, JYN, JYP, &
459  IBI, NYMAX
460 #ifdef W3_T3
461  INTEGER :: IXF, IYF
462 #endif
463 #ifdef W3_S
464  INTEGER, SAVE :: IENT = 0
465 #endif
466  REAL :: CG0, CGL, CGA, CC, CGN
467  REAL :: DTLOC,DTRAD, VCB
468  REAL :: RD1, RD2
469  REAL :: CP, CQ
470 #ifdef W3_T3
471  REAL :: AOLD
472 #endif
473  !/
474  !/ Automatic work arrays
475  !/
476  REAL :: CXTOT2D(NY,NX)
477  REAL :: CYTOT2D(NY,NX)
478  REAL :: FLD2D(NY+1,NX+1)
479  REAL :: VCX2D(NY,NX+1)
480  REAL :: VCY2D(NY+1,NX)
481  REAL :: VFLX2D(1:NY,0:NX)
482  REAL :: VFLY2D(NY,NX)
483 
484  !/
485  !/ ------------------------------------------------------------------- /
486  !/
487 #ifdef W3_S
488  CALL strace (ient, 'W3XYP1')
489 #endif
490  !
491  ! 1. Preparations --------------------------------------------------- *
492 
493  ! 1.a Set constants
494  !
495  ith = 1 + mod(isp-1,nth)
496  ik = 1 + (isp-1)/nth
497  !
498  cg0 = 0.575 * grav / sig(1)
499  cgl = 0.575 * grav / sig(ik)
500  !
501  IF ( flcur ) THEN
502  cga = sqrt(maxval((cgl*ecos(ith)+cx(1:nsea))**2 &
503  +(cgl*esin(ith)+cy(1:nsea))**2))
504  cc = sqrt(maxval(cx(1:nsea)**2+cy(1:nsea)**2))
505 #ifdef W3_MGP
506  cga = sqrt(maxval((cgl*ecos(ith)+cx(1:nsea)-vgx)**2 &
507  +(cgl*esin(ith)+cy(1:nsea)-vgy)**2))
508  cc = sqrt(maxval((cx(1:nsea)-vgx)**2+(cy(1:nsea)-vgy)**2))
509 #endif
510  ELSE
511  cga = cgl
512 #ifdef W3_MGP
513  cga = sqrt((cgl*ecos(ith)-vgx)**2+(cgl*esin(ith)-vgy)**2)
514 #endif
515  cc = 0.
516  END IF
517  !
518  cgn = 0.9999 * max( cga, cc, 0.001*cg0 )
519  !
520  ntloc = 1 + int(dtg/(dtcfl*cg0/cgn))
521  dtloc = dtg / real(ntloc)
522  dtrad = dtloc
523  IF ( flagll ) dtrad=dtrad/(dera*radius)
524 
525  !
526 #ifdef W3_T
527  WRITE (ndst,9000) ntloc
528  WRITE (ndst,9001) isp, ith, ik
529 #endif
530  !
531  ! ====================== Loop partial ================================ *
532  !
533  DO itloc=1, ntloc
534  !
535  ! 1.b Initialize arrays
536  !
537 #ifdef W3_T1
538  WRITE (ndst,9010) itloc
539 #endif
540  !
541  vcx2d = 0.
542  vcy2d = 0.
543  cxtot2d = 0.
544  cytot2d = 0.
545  fld2d = 0.
546  vflx2d = 0.
547  vfly2d = 0.
548  !
549  ! 2. Calculate field and velocities --------------------------------- *
550  !
551  ! FIELD = A / CG * CLATS
552  ! VCX = COS*CG / CLATS
553  ! VCY = SIN*CG
554  !
555 #ifdef W3_T1
556  WRITE (ndst,9020)
557 #endif
558  !
559 #ifdef W3_OMPH
560  !$OMP PARALLEL DO PRIVATE (ISEA, IXY, IX, IY)
561 #endif
562  !
563  DO isea=1, nsea
564  ix = mapsf(isea,1)
565  iy = mapsf(isea,2)
566  ixy = mapsf(isea,3)
567 
568  fld2d(iy,ix) = field(ixy) / cg(ik,isea) * clats(isea)
569 
570  cxtot2d(iy,ix) = ecos(ith) * cg(ik,isea) / clats(isea)
571  cytot2d(iy,ix) = esin(ith) * cg(ik,isea)
572 #ifdef W3_MGP
573  cxtot2d(iy,ix) = cxtot2d(iy,ix) - vgx/clats(isea)
574  cytot2d(iy,ix) = cytot2d(iy,ix) - vgy
575 #endif
576 
577 #ifdef W3_T1
578  WRITE (ndst,9021) isea, ixy, fld2d(iy,ix), &
579  cxtot2d(iy,ix), cytot2d(iy,ix)
580 #endif
581  END DO
582  !
583 #ifdef W3_OMPH
584  !$OMP END PARALLEL DO
585 #endif
586  !
587  IF ( flcur ) THEN
588  DO isea=1, nsea
589  ix = mapsf(isea,1)
590  iy = mapsf(isea,2)
591 
592  cxtot2d(iy,ix) = cxtot2d(iy,ix) + cx(isea)/clats(isea)
593  cytot2d(iy,ix) = cytot2d(iy,ix) + cy(isea)
594 
595  END DO
596  END IF
597 
598  IF ( flcx ) THEN
599  DO isea=1, nsea
600  ix = mapsf(isea,1)
601  iy = mapsf(isea,2)
602  cp=cxtot2d(iy,ix)*dpdx(iy,ix)+cytot2d(iy,ix)*dpdy(iy,ix)
603  vcx2d(iy,ix) = cp*dtrad
604  END DO
605  ELSE
606  vcx2d=0.0
607  ENDIF
608 
609  IF ( flcy ) THEN
610  DO isea=1, nsea
611  ix = mapsf(isea,1)
612  iy = mapsf(isea,2)
613  cq=cxtot2d(iy,ix)*dqdx(iy,ix)+cytot2d(iy,ix)*dqdy(iy,ix)
614  vcy2d(iy,ix) = cq*dtrad
615  END DO
616  ELSE
617  vcy2d=0.0
618  ENDIF
619 
620  ! Transform FIELD to index space, i.e. straightened space
621  ! Bugfix: This is now done *before* adding the ghost row, so that ghost
622  ! row will be in index space (bug applied only to global, irregular
623  ! grids, so it did not apply to any test case that existed w/v4.18)
624  fld2d(1:ny,1:nx)=fld2d(1:ny,1:nx)*gsqrt(1:ny,1:nx)
625 
626  !
627  ! Deal with longitude closure by duplicating one row *to the right*
628  ! in FIELD/FLD2D, VCX
629  IF ( iclose.NE.iclose_none ) THEN
630 #ifdef W3_T1
631  WRITE (ndst,9024)
632 #endif
633  DO iy=1, ny
634  fld2d(iy,nx+1)=fld2d(iy,1)
635  vcx2d(iy,nx+1)=vcx2d(iy,1)
636 #ifdef W3_T1
637  WRITE (ndst,9025) iy, fld2d(iy,nx+1), vcx2d(iy,nx+1)
638 #endif
639  END DO
640  END IF
641 
642  ! Deal with tripole closure by duplicating one row *at the top*
643  ! in FIELD/FLD2D, VCY
644  IF ( iclose.EQ.iclose_trpl ) THEN
645  DO ix=1,nx
646  !...........next point: j+1: tripole: j==>j+1==>j and i==>ni-i+1
647  fld2d(ny+1,ix)=fld2d(ny,nx-ix+1)
648  vcy2d(ny+1,ix)=vcy2d(ny,nx-ix+1)
649  END DO
650  END IF
651 
652  !
653  ! 3. Calculate propagation fluxes ----------------------------------- *
654  !
655  nymax=ny-1
656  IF ( iclose.EQ.iclose_trpl ) nymax=ny
657  !
658 #ifdef W3_OMPH
659  !$OMP PARALLEL DO PRIVATE (IX, IY, IXY, VCB)
660 #endif
661  !
662  DO ix=1, nx
663  DO iy=1, nymax
664  ixy = iy +(ix-1)*ny
665  vcb = facvx(ixy) * ( vcx2d(iy,ix) + vcx2d(iy,ix+1) )
666  vflx2d(iy,ix) = max( vcb , 0. ) * fld2d(iy,ix) &
667  + min( vcb , 0. ) * fld2d(iy,ix+1)
668  END DO
669  END DO
670  !
671 #ifdef W3_OMPH
672  !$OMP END PARALLEL DO
673 #endif
674  !
675  ! Deal with longitude closure by duplicating one row *to the left*
676  ! in VFLX. Note that a similar action is not take for tripole grid,
677  ! since tripole seam is only: IY=NY communicating with other points
678  ! at IY=NY, not a case of IY=NY communicating with IY=1
679  IF ( iclose.NE.iclose_none ) THEN
680 #ifdef W3_T2
681  WRITE (ndst,9032)
682 #endif
683  DO iy=1, ny
684  vflx2d(iy,0) = vflx2d(iy,nx)
685 #ifdef W3_T2
686  WRITE (ndst,9033) iy, vflx2d(iy,0)
687 #endif
688  END DO
689  END IF
690  !
691 #ifdef W3_OMPH
692  !$OMP PARALLEL DO PRIVATE (IX, IY, IXY, VCB)
693 #endif
694  !
695  DO ix=1, nx
696  DO iy=1, ny-1
697  ixy = iy +(ix-1)*ny
698  vcb = facvy(ixy) * ( vcy2d(iy,ix) + vcy2d(iy+1,ix) )
699  vfly2d(iy,ix) = max( vcb , 0. ) * fld2d(iy,ix) &
700  + min( vcb , 0. ) * fld2d(iy+1,ix)
701  END DO
702  END DO
703  !
704 #ifdef W3_OMPH
705  !$OMP END PARALLEL DO
706 #endif
707  !
708 
709  ! For tripole grid, include IY=NY in calculation. VCB is handled
710  ! differently. See notes in Section "7. Remarks" above.
711  IF ( iclose.EQ.iclose_trpl ) THEN
712  iy=ny
713  !
714 #ifdef W3_OMPH
715  !$OMP PARALLEL DO PRIVATE (IXY, VCB, IX)
716 #endif
717  !
718  DO ix=1, nx
719  ixy = iy +(ix-1)*ny
720  vcb = facvy(ixy) * ( vcy2d(iy,ix) - vcy2d(iy+1,ix) )
721  vfly2d(iy,ix) = max( vcb , 0. ) * fld2d(iy,ix) &
722  + min( vcb , 0. ) * fld2d(iy+1,ix)
723  END DO
724  !
725 #ifdef W3_OMPH
726  !$OMP END PARALLEL DO
727 #endif
728  !
729  END IF
730 
731  ! 4. Propagate ------------------------------------------------------ *
732  !
733 #ifdef W3_T3
734  WRITE (ndst,9040)
735 #endif
736  !
737 #ifdef W3_OMPH
738  !$OMP PARALLEL DO PRIVATE (ISEA, IXY, JXN, JXP, JYN, JYP, IX, IY)
739 #endif
740  !
741  DO isea=1, nsea
742  !
743  ix = mapsf(isea,1)
744  iy = mapsf(isea,2)
745  ixy = mapsf(isea,3)
746 
747 #ifdef W3_T3
748  aold = fld2d(iy,ix) * cg(ik,isea) / clats(isea)
749 #endif
750  !
751  IF (mapsta(ixy).EQ.1) THEN
752  !
753  IF ( vflx2d(iy,ix-1) .GT. 0. ) THEN
754  jxn = -1
755  ELSE
756  jxn = 0
757  END IF
758  IF ( vflx2d(iy,ix) .LT. 0. ) THEN
759  jxp = 1
760  ELSE
761  jxp = 0
762  END IF
763  IF ( vfly2d(iy-1,ix) .GT. 0. ) THEN
764  jyn = -1
765  ELSE
766  jyn = 0
767  END IF
768  IF ( vfly2d(iy,ix) .LT. 0. ) THEN
769  jyp = 1
770  ELSE
771  jyp = 0
772  END IF
773  !
774  fld2d(iy,ix) = fld2d(iy,ix) &
775  + atrnx(ixy,jxn) * vflx2d(iy,ix-1) &
776  - atrnx(ixy,jxp) * vflx2d(iy,ix) &
777  + atrny(ixy,jyn) * vfly2d(iy-1,ix) &
778  - atrny(ixy,jyp) * vfly2d(iy,ix)
779 
780 #ifdef W3_T3
781  WRITE (ndst,9041) isea, ixy, ixy-ny, ixy-1, &
782  vflx2d(iy,ix-1), vflx2d(iy,ix), vfly2d(iy-1,ix), &
783  vfly2d(iy,ix) , cg(ik,isea)/clats(isea),aold, &
784  fld2d(iy,ix)
785 #endif
786  !
787  !
788 #ifdef W3_T3
789  WRITE (ndst,9042) isea, mapsta(ixy), aold,fld2d(iy,ix)
790 #endif
791  !
792  END IF ! IF (MAPSTA(IXY).EQ.1) THEN
793 
794  fld2d(iy,ix) = cg(ik,isea) / clats(isea) * fld2d(iy,ix)
795 
796  END DO ! DO ISEA=1, NSEA
797  !
798 #ifdef W3_OMPH
799  !$OMP END PARALLEL DO
800 #endif
801  !
802 
803  ! Transform FIELD back to physical space, i.e. may be curvilinear
804  fld2d(1:ny,1:nx)=fld2d(1:ny,1:nx)/gsqrt(1:ny,1:nx)
805  !
806  ! 5. Update boundary conditions ------------------------------------- *
807  !
808  IF ( flbpi ) THEN
809  rd1 = dsec21( tbpi0, time ) - dtg * &
810  REAL(NTLOC-ITLOC)/REAL(NTLOC)
811  rd2 = dsec21( tbpi0, tbpin )
812  IF ( rd2 .GT. 0.001 ) THEN
813  rd2 = min(1.,max(0.,rd1/rd2))
814  rd1 = 1. - rd2
815  ELSE
816  rd1 = 0.
817  rd2 = 1.
818  END IF
819  DO ibi=1, nbi
820  ix = mapsf(isbpi(ibi),1)
821  iy = mapsf(isbpi(ibi),2)
822  fld2d(iy,ix) = rd1*bbpi0(isp,ibi) + rd2*bbpin(isp,ibi)
823  END DO
824  END IF
825  !
826  ! 6. Put back in 1d shape ------------------------------------------- *
827  !
828  DO isea=1, nsea
829  ix = mapsf(isea,1)
830  iy = mapsf(isea,2)
831  ixy = mapsf(isea,3)
832  field(ixy) = fld2d(iy,ix)
833  END DO
834  !
835  ! ... End of partial time step loop
836  !
837  END DO ! DO ITLOC=1, NTLOC
838  !
839  RETURN
840  !
841  ! Formats
842  !
843 #ifdef W3_T
844 9000 FORMAT (' TEST W3XYP1 : NTLOC :',i4)
845 9001 FORMAT (' TEST W3XYP1 : ISP, ITH, IK :',i8,2i4)
846 #endif
847  !
848 #ifdef W3_T1
849 9010 FORMAT (' TEST W3XYP1 : INIT. VFX-YL, ITLOC =',i3)
850 9020 FORMAT (' TEST W3XYP1 : ISEA, IXY, FIELD, VCX, VCY')
851 9021 FORMAT (' ',2i8,3e12.4)
852 9024 FORMAT (' TEST W3XYP1 : GLOBAL CLOSURE: IY, FIELD, VCX ')
853 9025 FORMAT (' ',i4,2e12.4)
854 #endif
855  !
856 #ifdef W3_T2
857 9032 FORMAT (' TEST W3XYP1 : CLOSE. : IY, VFLX')
858 9033 FORMAT (' ',i4,e12.4)
859 #endif
860  !
861 #ifdef W3_T3
862 9040 FORMAT (' TEST W3XYP1 : PROPAGATION '/ &
863  ' ISEA, IXY(3), , FLX(2), FLY(2), FAC, A(2)')
864 9041 FORMAT (2x,4i5,1x,4e10.3,1x,e10.3,1x,2e10.3)
865 9042 FORMAT (2x,i5,'( MAP = ',i2,' )',56x,2e10.3)
866 #endif
867  !/
868  !/ End of W3XYP1 ----------------------------------------------------- /
869  !/
870  END SUBROUTINE w3xyp1
871  !/ ------------------------------------------------------------------- /
897  SUBROUTINE w3ktp1 ( ISEA, FACTH, FACK, CTHG0, CG, WN, DEPTH, &
898  DDDX, DDDY, CX, CY, DCXDX, DCXDY, DCYDX, &
899  DCYDY, DCDX, DCDY, VA )
900  !/
901  !/ +-----------------------------------+
902  !/ | WAVEWATCH III NOAA/NCEP |
903  !/ | H. L. Tolman |
904  !/ | FORTRAN 90 |
905  !/ | Last update : 20-Dec-2004 |
906  !/ +-----------------------------------+
907  !/
908  !/ 29-Aug-1997 : Final FORTRAN 77 ( version 1.18 )
909  !/ 04-Feb-2000 : Upgrade to FORTRAN 90 ( version 2.00 )
910  !/ 20-Dec-2004 : Multiple grid version. ( version 3.06 )
911  !/
912  ! 1. Purpose :
913  !
914  ! Propagation in spectral space.
915  !
916  ! 2. Method :
917  !
918  ! First order scheme.
919  !
920  ! 3. Parameters :
921  !
922  ! Parameter list
923  ! ----------------------------------------------------------------
924  ! ISEA Int. I Number of sea point.
925  ! FACTH/K Real I Factor in propagation velocity.
926  ! CTHG0 Real I Factor in great circle refracftion term.
927  ! CG R.A. I Local group velocities.
928  ! WN R.A. I Local wavenumbers.
929  ! DEPTH Real I Depth.
930  ! DDDx Real I Depth gradients.
931  ! CX/Y Real I Current components.
932  ! DCxDx Real I Current gradients.
933  ! DCDX-Y Real I Phase speed gradients.
934  ! VA R.A. I/O Spectrum.
935  ! ----------------------------------------------------------------
936  !
937  ! Local variables.
938  ! ----------------------------------------------------------------
939  ! DSDD R.A. Partial derivative of sigma for depth.
940  ! FRK, FRG, FKC
941  ! R.A. Partial velocity terms.
942  ! DWNI R.A. Inverse band width.
943  ! CTH-WN R.A. Propagation velocities of local fluxes.
944  ! FLTH-WN R.A. Propagation fluxes.
945  ! AA R.A. Extracted spectrum
946  ! ----------------------------------------------------------------
947  !
948  ! 4. Subroutines used :
949  !
950  ! See module documentation.
951  !
952  ! 5. Called by :
953  !
954  ! Name Type Module Description
955  ! ----------------------------------------------------------------
956  ! W3WAVE Subr. W3WAVEMD Wave model routine.
957  ! ----------------------------------------------------------------
958  !
959  ! 6. Error messages :
960  !
961  ! None.
962  !
963  ! 8. Structure :
964  !
965  ! -----------------------------------------------------------------
966  ! 1. Preparations
967  ! a Calculate DSDD
968  ! b Extract spectrum
969  ! 2. Refraction velocities
970  ! a Filter level depth reffraction.
971  ! b Depth refratcion velocity.
972  ! c Current refraction velocity.
973  ! 3. Wavenumber shift velocities
974  ! a Prepare directional arrays
975  ! b Calcuate velocity.
976  ! 4. Refraction
977  ! a Discrete fluxes.
978  ! b Propagation fluxes.
979  ! c Refraction.
980  ! 5. Wavenumber shifts.
981  ! a Discrete fluxes.
982  ! b Propagation fluxes.
983  ! c Refraction.
984  ! -----------------------------------------------------------------
985  !
986  ! 9. Switches :
987  !
988  ! C/S Enable subroutine tracing.
989  ! C/T Enable general test output.
990  !
991  ! 10. Source code :
992  !
993  !/ ------------------------------------------------------------------- /
994  USE constants
995  USE w3gdatmd, ONLY: nk, nth, nspec, sig, dsip, ecos, esin, es2, &
997  USE w3adatmd, ONLY: is0, is2
998  USE w3idatmd, ONLY: flcur
999  USE w3odatmd, ONLY: ndst
1000 #ifdef W3_DEBUG
1001  USE w3odatmd, only : iaproc
1002 #endif
1003 #ifdef W3_S
1004  USE w3servmd, ONLY: strace
1005 #endif
1006  !/
1007  IMPLICIT NONE
1008  !/
1009  !/ ------------------------------------------------------------------- /
1010  !/ Parameter list
1011  !/
1012  INTEGER, INTENT(IN) :: ISEA
1013  REAL, INTENT(IN) :: FACTH, FACK, CTHG0, CG(0:NK+1), &
1014  WN(0:NK+1), DEPTH, DDDX, DDDY, &
1015  CX, CY, DCXDX, DCXDY, DCYDX, DCYDY
1016  REAL, INTENT(IN) :: DCDX(0:NK+1), DCDY(0:NK+1)
1017  REAL, INTENT(INOUT) :: VA(NSPEC)
1018  !/
1019  !/ ------------------------------------------------------------------- /
1020  !/ Local parameters
1021  !/
1022  INTEGER :: ITH, IK, ISP, ITH0
1023  REAL :: FDDMAX, FDG, DCYX, DCXXYY, DCXY, &
1024  DCXX, DCXYYX, DCYY, FKD, FKD0, CTHB, &
1025  CWNB
1026  REAL :: VCTH(NSPEC), VCWN(1-NTH:NSPEC+NTH), &
1027  VAA(1-NTH:NSPEC+NTH), VFLTH(NSPEC), &
1028  VFLWN(1-NTH:NSPEC), DSDD(0:NK+1), &
1029  FRK(NK), FRG(NK), FKC(NTH), DWNI(NK)
1030 #ifdef W3_S
1031  INTEGER, SAVE :: IENT = 0
1032  CALL strace (ient, 'W3KTP1')
1033 #endif
1034  !/
1035  !/ ------------------------------------------------------------------- /
1036  !/
1037 #ifdef W3_T
1038  WRITE (ndst,9000) flcth, flck, facth, fack, ctmax
1039  WRITE (ndst,9001) isea, depth, cx, cy, &
1040  dddx, dddy, dcxdx, dcxdy, dcydx, dcydy
1041 #endif
1042  !
1043  ! 1. Preparations --------------------------------------------------- *
1044  ! 1.a Array with partial derivative of sigma versus depth
1045  !
1046  DO ik=0, nk+1
1047  IF ( depth*wn(ik) .LT. 5. ) THEN
1048  dsdd(ik) = max( 0. , &
1049  cg(ik)*wn(ik)-0.5*sig(ik) ) / depth
1050  ELSE
1051  dsdd(ik) = 0.
1052  END IF
1053  END DO
1054  !
1055 #ifdef W3_T
1056  WRITE (ndst,9010)
1057  DO ik=1, nk+1
1058  WRITE (ndst,9011) ik, tpi/sig(ik), tpi/wn(ik), &
1059  cg(ik), dsdd(ik)
1060  END DO
1061 #endif
1062  !
1063  ! 1.b Extract spectrum
1064  !
1065  DO isp=1, nspec
1066  vaa(isp) = va(isp)
1067  END DO
1068  !
1069  ! 2. Refraction velocities ------------------------------------------ *
1070  !
1071  IF ( flcth ) THEN
1072  !
1073  ! 2.a Set slope filter for depth refraction
1074  !
1075  fddmax = 0.
1076  fdg = facth * cthg0
1077  !
1078  DO ith=1, nth
1079  fddmax = max( fddmax , abs( &
1080  esin(ith)*dddx - ecos(ith)*dddy ) )
1081  END DO
1082  !
1083  DO ik=1, nk
1084  frk(ik) = facth * dsdd(ik) / wn(ik)
1085  frk(ik) = frk(ik) / max( 1. , frk(ik)*fddmax/ctmax )
1086  frg(ik) = fdg * cg(ik)
1087  END DO
1088  !
1089  ! 2.b Depth refraction and great-circle propagation
1090  !
1091  DO isp=1, nspec
1092  vcth(isp) = frg(mapwn(isp)) * ecos(isp) &
1093  + frk(mapwn(isp)) * ( esin(isp)*dddx - ecos(isp)*dddy )
1094  END DO
1095  !
1096 #ifdef W3_REFRX
1097  ! 2.c @C/@x refraction and great-circle propagation
1098  vcth = 0.
1099  frk = 0.
1100  fddmax = 0.
1101  !
1102  DO isp=1, nspec
1103  fddmax = max( fddmax , abs( &
1104  esin(isp)*dcdx(mapwn(isp)) - ecos(isp)*dcdy(mapwn(isp)) ) )
1105  END DO
1106  !
1107  DO ik=1, nk
1108  frk(ik) = facth * cg(ik) * wn(ik) / sig(ik)
1109  frk(ik) = frk(ik) / max( 1. , frk(ik)*fddmax/ctmax )
1110  frg(ik) = fdg * cg(ik)
1111  END DO
1112  DO isp=1, nspec
1113  vcth(isp) = frg(mapwn(isp)) * ecos(isp) &
1114  + frk(mapwn(isp)) * ( esin(isp)*dcdx(mapwn(isp)) &
1115  - ecos(isp)*dcdy(mapwn(isp)) )
1116  END DO
1117 #endif
1118  !
1119  ! 2.d Current refraction
1120  !
1121  IF ( flcur ) THEN
1122  !
1123  dcyx = facth * dcydx
1124  dcxxyy = facth * ( dcxdx - dcydy )
1125  dcxy = facth * dcxdy
1126  !
1127  DO isp=1, nspec
1128  vcth(isp) = vcth(isp) + es2(isp)*dcyx &
1129  + esc(isp)*dcxxyy - ec2(isp)*dcxy
1130  END DO
1131  !
1132  END IF
1133  !
1134  END IF
1135  !
1136  ! 3. Wavenumber shift velocities ------------------------------------ *
1137  !
1138  IF ( flck ) THEN
1139  !
1140  dcxx = - fack * dcxdx
1141  dcxyyx = - fack * ( dcxdy + dcydx )
1142  dcyy = - fack * dcydy
1143  fkd = fack * ( cx*dddx + cy*dddy )
1144  !
1145  DO ith=1, nth
1146  fkc(ith) = ec2(ith)*dcxx + &
1147  esc(ith)*dcxyyx + es2(ith)*dcyy
1148  END DO
1149  !
1150  isp = -nth
1151  DO ik=0, nk+1
1152  fkd0 = fkd / cg(ik) * dsdd(ik)
1153  DO ith=1, nth
1154  isp = isp + 1
1155  vcwn(isp) = fkd0 + wn(ik)*fkc(ith)
1156  END DO
1157  END DO
1158  !
1159  ith0 = nspec - nth
1160  DO ith=1, nth
1161  vaa(ith+nspec) = fachfa * vaa(ith+ith0)
1162  vaa(ith- nth ) = 0.
1163  END DO
1164  !
1165  DO ik=1, nk
1166  dwni(ik) = cg(ik) / dsip(ik)
1167  END DO
1168  !
1169  END IF
1170  !
1171  ! 4. Refraction ----------------------------------------------------- *
1172  !
1173  IF ( flcth ) THEN
1174  !
1175  ! 4.a Boundary velocity and fluxes
1176  !
1177  DO isp=1, nspec
1178  cthb = 0.5 * ( vcth(isp) + vcth(is2(isp)) )
1179  vflth(isp) = max( cthb , 0. ) * vaa(isp) &
1180  + min( cthb , 0. ) * vaa(is2(isp))
1181  END DO
1182  !
1183  ! 4.b Propagation
1184  !
1185  DO isp=1, nspec
1186  va(isp) = va(isp) + vflth(is0(isp)) - vflth(isp )
1187  END DO
1188  !
1189  END IF
1190  !
1191  ! 5. Wavenumber shifts ---------------------------------------------- *
1192  !
1193  IF ( flck ) THEN
1194  !
1195  ! 5.a Boundary velocity and fluxes
1196  !
1197  DO isp=1-nth, nspec
1198  cwnb = 0.5 * ( vcwn(isp) + vcwn(isp+nth) )
1199  vflwn(isp) = max( cwnb , 0. ) * vaa( isp ) &
1200  + min( cwnb , 0. ) * vaa(isp+nth)
1201  END DO
1202  !
1203  ! 5.c Propagation
1204  !
1205  DO isp=1, nspec
1206  va(isp) = va(isp) + dwni(mapwn(isp)) * &
1207  ( vflwn(isp-nth) - vflwn(isp) )
1208  END DO
1209  !
1210  END IF
1211  !
1212  RETURN
1213  !
1214  ! Formats
1215  !
1216 #ifdef W3_T
1217 9000 FORMAT (' TEST W3KTP1 : FLCTH-K, FACTH-K, CTMAX :', &
1218  2l2,2e10.3,f7.3)
1219 9001 FORMAT (' TEST W3KTP1 : LOCAL DATA :',i7,f7.1,2f6.2,1x, &
1220  6e10.3)
1221 9010 FORMAT (' TEST W3KTP1 : IK, T, L, CG, DSDD : ')
1222 9011 FORMAT (' ',i3,f7.2,f7.1,f7.2,e11.3)
1223 #endif
1224  !/
1225  !/ End of W3KTP1 ----------------------------------------------------- /
1226  !/
1227  END SUBROUTINE w3ktp1
1228  !/
1229  !/ End of module W3PRO1MD -------------------------------------------- /
1230  !/
1231 END MODULE w3pro1md
w3adatmd::is0
integer, dimension(:), pointer is0
Definition: w3adatmd.F90:635
w3gdatmd::nk
integer, pointer nk
Definition: w3gdatmd.F90:1230
w3gdatmd::esc
real, dimension(:), pointer esc
Definition: w3gdatmd.F90:1234
w3odatmd::tbpi0
integer, dimension(:), pointer tbpi0
Definition: w3odatmd.F90:464
w3timemd::dsec21
real function dsec21(TIME1, TIME2)
Definition: w3timemd.F90:333
w3adatmd
Define data structures to set up wave model auxiliary data for several models simultaneously.
Definition: w3adatmd.F90:26
w3gdatmd::nspec
integer, pointer nspec
Definition: w3gdatmd.F90:1230
constants::dera
real, parameter dera
DERA Conversion factor from degrees to radians.
Definition: constants.F90:77
w3wdatmd
Define data structures to set up wave model dynamic data for several models simultaneously.
Definition: w3wdatmd.F90:18
w3adatmd::atrnx
real, dimension(:,:), pointer atrnx
Definition: w3adatmd.F90:578
w3adatmd::cg
real, dimension(:,:), pointer cg
Definition: w3adatmd.F90:575
w3adatmd::atrny
real, dimension(:,:), pointer atrny
Definition: w3adatmd.F90:578
w3gdatmd::sig
real, dimension(:), pointer sig
Definition: w3gdatmd.F90:1234
w3gdatmd::flck
logical, pointer flck
Definition: w3gdatmd.F90:1217
w3odatmd::iaproc
integer, pointer iaproc
Definition: w3odatmd.F90:457
w3wdatmd::time
integer, dimension(:), pointer time
Definition: w3wdatmd.F90:172
w3gdatmd::ecos
real, dimension(:), pointer ecos
Definition: w3gdatmd.F90:1234
w3odatmd::bbpi0
real, dimension(:,:), pointer bbpi0
Definition: w3odatmd.F90:541
w3gdatmd::ny
integer, pointer ny
Definition: w3gdatmd.F90:1097
w3odatmd::tbpin
integer, dimension(:), pointer tbpin
Definition: w3odatmd.F90:464
w3gdatmd::dsip
real, dimension(:), pointer dsip
Definition: w3gdatmd.F90:1234
w3odatmd::nbi
integer, pointer nbi
Definition: w3odatmd.F90:530
w3odatmd::flbpi
logical, pointer flbpi
Definition: w3odatmd.F90:546
w3adatmd::facvy
real, dimension(:), pointer facvy
Definition: w3adatmd.F90:636
w3idatmd::flcur
logical, pointer flcur
Definition: w3idatmd.F90:261
w3gdatmd::iclose_none
integer, parameter iclose_none
Definition: w3gdatmd.F90:629
w3pro1md
Bundles routines for first order propagation scheme in single module.
Definition: w3pro1md.F90:23
w3odatmd::ndse
integer, pointer ndse
Definition: w3odatmd.F90:456
w3gdatmd::fachfa
real, pointer fachfa
Definition: w3gdatmd.F90:1232
w3gdatmd::es2
real, dimension(:), pointer es2
Definition: w3gdatmd.F90:1234
w3gdatmd::dqdy
real, dimension(:,:), pointer dqdy
Definition: w3gdatmd.F90:1209
w3gdatmd::esin
real, dimension(:), pointer esin
Definition: w3gdatmd.F90:1234
w3odatmd::naperr
integer, pointer naperr
Definition: w3odatmd.F90:457
w3gdatmd::nsea
integer, pointer nsea
Definition: w3gdatmd.F90:1097
w3servmd
Definition: w3servmd.F90:3
w3gdatmd::flcth
logical, pointer flcth
Definition: w3gdatmd.F90:1217
w3gdatmd::nth
integer, pointer nth
Definition: w3gdatmd.F90:1230
w3odatmd
Definition: w3odatmd.F90:3
w3gdatmd::clats
real, dimension(:), pointer clats
Definition: w3gdatmd.F90:1196
w3adatmd::cy
real, dimension(:), pointer cy
Definition: w3adatmd.F90:584
w3pro1md::w3map1
subroutine w3map1(MAPSTA)
Generate 'map' arrays for the first order upstream scheme.
Definition: w3pro1md.F90:108
w3gdatmd::mapsf
integer, dimension(:,:), pointer mapsf
Definition: w3gdatmd.F90:1163
w3gdatmd::dpdx
real, dimension(:,:), pointer dpdx
Definition: w3gdatmd.F90:1208
w3gdatmd::gsqrt
real, dimension(:,:), pointer gsqrt
Definition: w3gdatmd.F90:1210
constants::radius
real, parameter radius
RADIUS Radius of the earth (m).
Definition: constants.F90:79
w3gdatmd::iclose
integer, pointer iclose
Definition: w3gdatmd.F90:1096
constants::tpi
real, parameter tpi
TPI 2*Pi.
Definition: constants.F90:72
w3gdatmd::dpdy
real, dimension(:,:), pointer dpdy
Definition: w3gdatmd.F90:1208
w3servmd::strace
subroutine strace(IENT, SNAME)
Definition: w3servmd.F90:148
w3idatmd
Define data structures to set up wave model input data for several models simultaneously.
Definition: w3idatmd.F90:16
w3gdatmd::mapwn
integer, dimension(:), pointer mapwn
Definition: w3gdatmd.F90:1231
w3gdatmd::flcy
logical, pointer flcy
Definition: w3gdatmd.F90:1217
w3adatmd::facvx
real, dimension(:), pointer facvx
Definition: w3adatmd.F90:636
w3pro1md::w3xyp1
subroutine w3xyp1(ISP, DTG, MAPSTA, FIELD, VGX, VGY)
Propagation in physical space for a given spectral component.
Definition: w3pro1md.F90:303
w3odatmd::ndst
integer, pointer ndst
Definition: w3odatmd.F90:456
w3gdatmd::flcx
logical, pointer flcx
Definition: w3gdatmd.F90:1217
constants
Define some much-used constants for global use (all defined as PARAMETER).
Definition: constants.F90:20
w3gdatmd
Definition: w3gdatmd.F90:16
w3gdatmd::iclose_trpl
integer, parameter iclose_trpl
Definition: w3gdatmd.F90:631
w3servmd::extcde
subroutine extcde(IEXIT, UNIT, MSG, FILE, LINE, COMM)
Definition: w3servmd.F90:736
w3adatmd::is2
integer, dimension(:), pointer is2
Definition: w3adatmd.F90:635
w3odatmd::isbpi
integer, dimension(:), pointer isbpi
Definition: w3odatmd.F90:535
w3adatmd::cx
real, dimension(:), pointer cx
Definition: w3adatmd.F90:584
w3gdatmd::nx
integer, pointer nx
Definition: w3gdatmd.F90:1097
w3gdatmd::ctmax
real, pointer ctmax
Definition: w3gdatmd.F90:1183
w3timemd
Definition: w3timemd.F90:3
w3gdatmd::ec2
real, dimension(:), pointer ec2
Definition: w3gdatmd.F90:1234
w3gdatmd::dtcfl
real, pointer dtcfl
Definition: w3gdatmd.F90:1183
w3gdatmd::iclose_smpl
integer, parameter iclose_smpl
Definition: w3gdatmd.F90:630
w3gdatmd::dqdx
real, dimension(:,:), pointer dqdx
Definition: w3gdatmd.F90:1209
constants::grav
real, parameter grav
GRAV Acc.
Definition: constants.F90:61
w3odatmd::bbpin
real, dimension(:,:), pointer bbpin
Definition: w3odatmd.F90:541
w3gdatmd::flagll
logical, pointer flagll
Definition: w3gdatmd.F90:1219
w3pro1md::w3ktp1
subroutine w3ktp1(ISEA, FACTH, FACK, CTHG0, CG, WN, DEPTH, DDDX, DDDY, CX, CY, DCXDX, DCXDY, DCYDX, DCYDY, DCDX, DCDY, VA)
Propagation in spectral space.
Definition: w3pro1md.F90:900