WAVEWATCH III  beta 0.0.1
w3pro1md Module Reference

Bundles routines for first order propagation scheme in single module. More...

Functions/Subroutines

subroutine w3map1 (MAPSTA)
 Generate 'map' arrays for the first order upstream scheme. More...
 
subroutine w3xyp1 (ISP, DTG, MAPSTA, FIELD, VGX, VGY)
 Propagation in physical space for a given spectral component. More...
 
subroutine w3ktp1 (ISEA, FACTH, FACK, CTHG0, CG, WN, DEPTH, DDDX, DDDY, CX, CY, DCXDX, DCXDY, DCYDX, DCYDY, DCDX, DCDY, VA)
 Propagation in spectral space. More...
 

Detailed Description

Bundles routines for first order propagation scheme in single module.

Author
H. L. Tolman
Date
05-Jun-2018

Function/Subroutine Documentation

◆ w3ktp1()

subroutine w3pro1md::w3ktp1 ( integer, intent(in)  ISEA,
real, intent(in)  FACTH,
real, intent(in)  FACK,
real, intent(in)  CTHG0,
real, dimension(0:nk+1), intent(in)  CG,
real, dimension(0:nk+1), intent(in)  WN,
real, intent(in)  DEPTH,
real, intent(in)  DDDX,
real, intent(in)  DDDY,
real, intent(in)  CX,
real, intent(in)  CY,
real, intent(in)  DCXDX,
real, intent(in)  DCXDY,
real, intent(in)  DCYDX,
real, intent(in)  DCYDY,
real, dimension(0:nk+1), intent(in)  DCDX,
real, dimension(0:nk+1), intent(in)  DCDY,
real, dimension(nspec), intent(inout)  VA 
)

Propagation in spectral space.

Parameters
[in,out]ISEANumber of sea points.
[in,out]FACTHFactor in propagation velocity.
[in,out]FACKFactor in propagation velocity.
[in,out]CTHG0Factor in great circle refracftion term.
[in,out]CGLocal group velocities.
[in,out]WNLocal wavenumbers.
[in,out]DEPTHDepth.
[in,out]DDDXDepth gradients.
[in,out]DDDYDepth gradients.
[in,out]CXLocal group velocities.
[in,out]CYLocal group velocities.
[in,out]DCXDXCurrent gradients.
[in,out]DCXDYCurrent gradients.
[in,out]DCYDXCurrent gradients.
[in,out]DCYDYCurrent gradients.
[in,out]DCDXPhase speed gradients.
[in,out]DCDYPhase speed gradients.
[in,out]VASpectrum.
Author
H. L. Tolman
Date
20-Dec-2004

Definition at line 900 of file w3pro1md.F90.

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  !/

References w3gdatmd::ctmax, w3gdatmd::dsip, w3gdatmd::ec2, w3gdatmd::ecos, w3gdatmd::es2, w3gdatmd::esc, w3gdatmd::esin, w3gdatmd::fachfa, w3gdatmd::flck, w3gdatmd::flcth, w3idatmd::flcur, w3odatmd::iaproc, w3adatmd::is0, w3adatmd::is2, w3gdatmd::mapwn, w3odatmd::ndst, w3gdatmd::nk, w3gdatmd::nspec, w3gdatmd::nth, w3gdatmd::sig, w3servmd::strace(), and constants::tpi.

Referenced by w3wavemd::w3wave().

◆ w3map1()

subroutine w3pro1md::w3map1 ( integer, dimension(ny*nx), intent(in)  MAPSTA)

Generate 'map' arrays for the first order upstream scheme.

Parameters
MAPSTAStatus map
Author
H. L. Tolman
Date
06-Dec-2010

Definition at line 108 of file w3pro1md.F90.

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  !/

References w3servmd::extcde(), w3adatmd::facvx, w3adatmd::facvy, w3odatmd::iaproc, w3gdatmd::iclose, w3gdatmd::iclose_none, w3gdatmd::iclose_smpl, w3gdatmd::iclose_trpl, w3adatmd::is0, w3adatmd::is2, w3odatmd::naperr, w3odatmd::ndse, w3gdatmd::nspec, w3gdatmd::nth, w3gdatmd::nx, w3gdatmd::ny, and w3servmd::strace().

Referenced by w3wavemd::w3wave().

◆ w3xyp1()

subroutine w3pro1md::w3xyp1 ( integer, intent(in)  ISP,
real, intent(in)  DTG,
integer, dimension(ny*nx), intent(in)  MAPSTA,
real, dimension(1-ny:ny*(nx+2)), intent(inout)  FIELD,
real, intent(in)  VGX,
real, intent(in)  VGY 
)

Propagation in physical space for a given spectral component.

Parameters
[in]ISPNumber of spectral bin (IK-1)*NTH+ITH
[in]DTGTotal time step.
[in]MAPSTAGrid point status map.
[in,out]FIELDWave action spectral densities on full grid.
[in]VGXSpeed of grid.
[in]VGYSpeed of grid.
Author
H. L. Tolman
Date
29-May-2014

Definition at line 303 of file w3pro1md.F90.

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  !/

References w3adatmd::atrnx, w3adatmd::atrny, w3odatmd::bbpi0, w3odatmd::bbpin, w3adatmd::cg, w3gdatmd::clats, w3adatmd::cx, w3adatmd::cy, constants::dera, w3gdatmd::dpdx, w3gdatmd::dpdy, w3gdatmd::dqdx, w3gdatmd::dqdy, w3timemd::dsec21(), w3gdatmd::dtcfl, w3gdatmd::ecos, w3gdatmd::esin, w3servmd::extcde(), w3adatmd::facvx, w3adatmd::facvy, w3gdatmd::flagll, w3odatmd::flbpi, w3idatmd::flcur, w3gdatmd::flcx, w3gdatmd::flcy, constants::grav, w3gdatmd::gsqrt, w3odatmd::iaproc, w3gdatmd::iclose, w3gdatmd::iclose_none, w3gdatmd::iclose_smpl, w3gdatmd::iclose_trpl, w3odatmd::isbpi, w3gdatmd::mapsf, w3odatmd::naperr, w3odatmd::nbi, w3odatmd::ndse, w3odatmd::ndst, w3gdatmd::nk, w3gdatmd::nsea, w3gdatmd::nth, w3gdatmd::nx, w3gdatmd::ny, constants::radius, w3gdatmd::sig, w3servmd::strace(), w3odatmd::tbpi0, w3odatmd::tbpin, and w3wdatmd::time.

Referenced by w3wavemd::w3wave().

w3adatmd::is0
integer, dimension(:), pointer is0
Definition: w3adatmd.F90:635
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
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::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
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
w3odatmd
Definition: w3odatmd.F90:3
w3gdatmd::clats
real, dimension(:), pointer clats
Definition: w3gdatmd.F90:1196
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
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
w3adatmd::is2
integer, dimension(:), pointer is2
Definition: w3adatmd.F90:635
w3odatmd::isbpi
integer, dimension(:), pointer isbpi
Definition: w3odatmd.F90:535
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