WAVEWATCH III  beta 0.0.1
gx_outf.F90 File Reference

Generate GrADS input files from raw WAVEWATCH data file. More...

Go to the source code of this file.

Functions/Subroutines

program gxoutf
 Generate GrADS input files from raw WAVEWATCH data file. More...
 
subroutine gxexgo (NX, NY, NSEA)
 Perform actual output for GrADS postprocessing. More...
 

Detailed Description

Generate GrADS input files from raw WAVEWATCH data file.

Author
H. L. Tolman
A. Chawla
J.H.G.M. Alves
Date
22-Mar-2021

Definition in file gx_outf.F90.

Function/Subroutine Documentation

◆ gxexgo()

subroutine gxoutf::gxexgo ( integer, intent(in)  NX,
integer, intent(in)  NY,
integer, intent(in)  NSEA 
)

Perform actual output for GrADS postprocessing.

Parameters
[in]NXGrid dimensions.
[in]NYGrid dimensions.
[in]NSEANumber of sea points.
Author
H. L. Tolman
Date
22-Mar-2021

Definition at line 786 of file gx_outf.F90.

786  !/
787  !/ +-----------------------------------+
788  !/ | WAVEWATCH III NOAA/NCEP |
789  !/ | H. L. Tolman |
790  !/ | FORTRAN 90 |
791  !/ | Last update : 22-Mar-2021 |
792  !/ +-----------------------------------+
793  !/
794  !/ 30-Jun-1999 : Final FORTRAN 77 ( version 1.18 )
795  !/ 24-Jan-2000 : Upgrade to FORTRAN 90 ( version 2.00 )
796  !/ Massive changes to logistics.
797  !/ 29-Jan-2001 : Add output fields 17-18 ( version 2.20 )
798  !/ 24-Dec-2004 : Multiple grid version. ( version 3.06 )
799  !/ 27-Jun-2005 : Adding MAPST2. ( version 3.07 )
800  !/ 21-Jul-2005 : Add output fields 19-21. ( version 3.07 )
801  !/ 05-Jul-2006 : Consolidate stress arrays. ( version 3.09 )
802  !/ 18-Jan-2007 : Update MSOUT/MBOUT treatment. ( version 3.10 )
803  !/ 28-Mar-2007 : Adding partitioned output. ( version 3.11 )
804  !/ Adding user slots for outputs.
805  !/ 22-Mar-2021 : Add output fields RHOA and TAUA ( version 7.13 )
806  !/
807  ! 1. Purpose :
808  !
809  ! Perform actual output for GrADS postprocessing.
810  !
811  ! 3. Parameters :
812  !
813  ! Parameter list
814  ! ----------------------------------------------------------------
815  ! NX/Y Int. I Grid dimensions.
816  ! NSEA Int. I Number of sea points.
817  ! ----------------------------------------------------------------
818  !
819  ! Internal parameters
820  ! ----------------------------------------------------------------
821  ! X1, X2, XX
822  ! R.A. Output fields
823  ! ----------------------------------------------------------------
824  !
825  ! 4. Subroutines used :
826  !
827  ! Name Type Module Description
828  ! ----------------------------------------------------------------
829  ! STRACE Subr. W3SERVMD Subroutine tracing.
830  ! EXTCDE Subr. Id. Abort program as graceful as possible.
831  ! W3S2XY Subr. Id. Convert from storage to spatial grid.
832  ! ---------------------------------------------------------------
833  !
834  ! 5. Called by :
835  !
836  ! Main program in which it is contained.
837  !
838  ! 6. Error messages :
839  !
840  ! None.
841  !
842  ! 7. Remarks :
843  !
844  ! - Note that arrays CX and CY of the main program now contain
845  ! the absolute current speed and direction respectively.
846  ! - VALLND added to assure that map with only land plots in
847  ! GrADS.
848  !
849  ! 8. Structure :
850  !
851  ! See source code.
852  !
853  ! 9. Switches :
854  !
855  ! !/S Enable subroutine tracing.
856  ! !/T Enable test output.
857  !
858  ! 10. Source code :
859  !
860  !/ ------------------------------------------------------------------- /
861  USE w3servmd, ONLY: w3s2xy
862  !/
863  !/ ------------------------------------------------------------------- /
864  !/ Parameter list
865  !/
866  INTEGER, INTENT(IN) :: NX, NY, NSEA
867  !/
868  !/ ------------------------------------------------------------------- /
869  !/ Local parameters
870  !/
871  INTEGER :: IX, IY, J, ISEA, IXL, IXR
872  INTEGER :: MAPXCL(NY,NX), MAPDRY(NY,NX), &
873  MAPICE(NY,NX), MAPLND(NY,NX), &
874  MAPMSK(NY,NX)
875 #ifdef W3_S
876  INTEGER, SAVE :: IENT = 0
877 #endif
878  REAL :: X1(NX,NY), XX(NX,NY), XY(NX,NY), &
879  XA(NX,NY,0:NOSWLL)
880  REAL :: VALLND = 0.001
881  !/
882  !/ ------------------------------------------------------------------- /
883  !/
884 #ifdef W3_S
885  CALL strace (ient, 'GXEXGO')
886 #endif
887  !
888 #ifdef W3_T
889  WRITE (ndst,9000) ((flreq(j,k),j=1,nogrp), k=1,ngrpp)
890 #endif
891  !
892  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
893  ! 1. Preparations
894  ! 1.a Write map to file
895  !
896  mapxcl = mod(mapst2,2)
897  mapice = mod(mapst2,2)
898  mapdry = mod(mapst2/2,2)
899  maplnd = mod(mapst2/4,2)
900  mapmsk = mod(mapst2/8,2)
901  !
902  DO iy=1, ny
903  DO ix=1, nx
904  IF ( mapsta(iy,ix).EQ.0 ) THEN
905  IF ( mapxcl(iy,ix).EQ.1 ) THEN
906  x1(ix,iy) = undef
907  ELSE
908  x1(ix,iy) = vallnd
909  END IF
910  ELSE IF ( mapsta(iy,ix).LT.0 ) THEN
911  IF ( mapmsk(iy,ix).EQ.1 ) THEN
912  x1(ix,iy) = -4.
913  ELSE IF ( maplnd(iy,ix).EQ.1 ) THEN
914  x1(ix,iy) = vallnd
915  ELSE IF ( mapice(iy,ix).EQ.1 .AND. &
916  mapdry(iy,ix).EQ.1 ) THEN
917  x1(ix,iy) = -3.
918  ELSE IF ( mapdry(iy,ix).EQ.1 ) THEN
919  x1(ix,iy) = -2.
920  ELSE IF ( mapice(iy,ix).EQ.1 ) THEN
921  x1(ix,iy) = -1.
922  ELSE
923  x1(ix,iy) = -5.
924  END IF
925  ELSE
926  x1(ix,iy) = real(mapsta(iy,ix))
927  IF ( msout ) THEN
928  IF ( mapsta(iy,ix) .GT. 0 ) x1(ix,iy) = undef
929  ELSE IF ( mbout ) THEN
930  IF ( mapsta(iy,ix).EQ.2 .OR. &
931  iy.EQ.1 .OR. iy.EQ.ny .OR. &
932  ( iclose.NE.iclo_none .AND. &
933  (ix.EQ.1 .OR. ix.EQ.nx) ) ) THEN
934  x1(ix,iy) = undef
935  ELSE
936  ixl = 1 + mod(ix+nx-2,nx)
937  ixr = 1 + mod(ix,nx)
938  IF ( mapsta(iy+1,ixl).EQ.0 .AND. &
939  mapxcl(iy+1,ixl).EQ.1 ) x1(ix,iy) = undef
940  IF ( mapsta(iy+1,ix ).EQ.0 .AND. &
941  mapxcl(iy+1,ix ).EQ.1 ) x1(ix,iy) = undef
942  IF ( mapsta(iy+1,ixr).EQ.0 .AND. &
943  mapxcl(iy+1,ixr).EQ.1 ) x1(ix,iy) = undef
944  IF ( mapsta( iy ,ixr).EQ.0 .AND. &
945  mapxcl( iy ,ixr).EQ.1 ) x1(ix,iy) = undef
946  IF ( mapsta(iy-1,ixr).EQ.0 .AND. &
947  mapxcl(iy-1,ixr).EQ.1 ) x1(ix,iy) = undef
948  IF ( mapsta(iy-1,ix ).EQ.0 .AND. &
949  mapxcl(iy-1,ix ).EQ.1 ) x1(ix,iy) = undef
950  IF ( mapsta(iy-1,ixl).EQ.0 .AND. &
951  mapxcl(iy-1,ixl).EQ.1 ) x1(ix,iy) = undef
952  IF ( mapsta( iy ,ixl).EQ.0 .AND. &
953  mapxcl( iy ,ixl).EQ.1 ) x1(ix,iy) = undef
954  END IF
955  END IF
956  IF ( msout .AND. mapsta(iy,ix).EQ.1 ) x1(ix,iy) = undef
957  IF ( mbout .AND. mapsta(iy,ix).EQ.2 ) x1(ix,iy) = undef
958  END IF
959  vallnd = - vallnd
960  END DO
961  END DO
962  !
963  WRITE (ndsdat) ((x1(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
964  !
965  ! 1.b Initialize arrays
966  !
967  x1 = undef
968  xx = undef
969  xy = undef
970  xa = undef
971  !
972  !--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
973  ! 2. Loop over output fields.
974  !
975  DO j=1, nogrp
976  DO k=1, ngrpp
977  ! WRITE(*,*)J,K,FLREQ(J,K)
978  IF ( flreq(j,k) ) THEN
979  !
980  ! Set array dimension flags
981  flone = .false.
982  fltwo = .false.
983  fldir = .false.
984  fltri = .false.
985  flprt = .false.
986  !
987 #ifdef W3_T
988  WRITE (ndst,9020) idout(j,k)
989 #endif
990  !
991  ! 2.a Set output arrays and parameters
992  !
993  ! Water depth
994  !
995  IF ( j.EQ.1 .AND. k.EQ.1 ) THEN
996  flone = .true.
997  CALL w3s2xy ( nsea, nsea, nx, ny, dw(1:nsea) &
998  , mapsf, x1 )
999  !
1000  ! Current
1001  !
1002  ELSE IF ( j.EQ.1 .AND. k.EQ.2 ) THEN
1003  fltwo = .true.
1004  CALL w3s2xy ( nsea, nsea, nx, ny, cx(1:nsea) &
1005  , mapsf, xx )
1006  CALL w3s2xy ( nsea, nsea, nx, ny, cy(1:nsea) &
1007  , mapsf, xy )
1008  !
1009  ! Wind speed
1010  !
1011  ELSE IF ( j.EQ.1 .AND. k.EQ.3 ) THEN
1012  fltwo = .true.
1013  CALL w3s2xy ( nsea, nsea, nx, ny, ua(1:nsea) &
1014  , mapsf, xx )
1015  CALL w3s2xy ( nsea, nsea, nx, ny, ud(1:nsea) &
1016  , mapsf, xy )
1017  !
1018  ! Air-sea temp. dif.
1019  !
1020  ELSE IF ( j.EQ.1 .AND. k.EQ.4 ) THEN
1021  flone = .true.
1022  CALL w3s2xy ( nsea, nsea, nx, ny, as(1:nsea) &
1023  , mapsf, x1 )
1024  !
1025  ! Water level
1026  !
1027  ELSE IF ( j.EQ.1 .AND. k.EQ.5 ) THEN
1028  flone = .true.
1029  CALL w3s2xy ( nsea, nsea, nx, ny, wlv , mapsf, x1 )
1030  !
1031  ! Ice concentration
1032  !
1033  ELSE IF ( j.EQ.1 .AND. k.EQ.6 ) THEN
1034  flone = .true.
1035  CALL w3s2xy ( nsea, nsea, nx, ny, ice , mapsf, x1 )
1036  !
1037  ! Atmospheric momentum
1038  !
1039  ELSE IF ( j.EQ.1 .AND. k.EQ.8 ) THEN
1040  fltwo = .true.
1041  CALL w3s2xy ( nsea, nsea, nx, ny, taua(1:nsea) &
1042  , mapsf, xx )
1043  CALL w3s2xy ( nsea, nsea, nx, ny, tauadir(1:nsea) &
1044  , mapsf, xy )
1045  !
1046  ! Air density
1047  !
1048  ELSE IF ( j.EQ.1 .AND. k.EQ.9 ) THEN
1049  flone = .true.
1050  CALL w3s2xy ( nsea, nsea, nx, ny, rhoair, mapsf, x1 )
1051  !
1052  ! Ice thickness
1053  !
1054 #ifdef W3_IS2
1055  ELSE IF ( j.EQ.1 .AND. k.EQ.11 ) THEN
1056  flone = .true.
1057  CALL w3s2xy (nsea, nsea, nx, ny, iceh , mapsf, x1 )
1058 #endif
1059  !
1060  ! Average sea ice floe diameter
1061  !
1062 #ifdef W3_IS2
1063  ELSE IF ( j.EQ.1 .AND. k.EQ.12) THEN
1064  flone = .true.
1065  CALL w3s2xy (nsea, nsea, nx, ny, icef , mapsf, x1 )
1066 #endif
1067  !
1068  !
1069  ! Significant wave height
1070  !
1071  ELSE IF ( j.EQ.2 .AND. k.EQ.1 ) THEN
1072  flone = .true.
1073  CALL w3s2xy ( nsea, nsea, nx, ny, hs , mapsf, x1 )
1074  !
1075  ! Mean wave length
1076  !
1077  ELSE IF ( j.EQ.2 .AND. k.EQ.2 ) THEN
1078  flone = .true.
1079  CALL w3s2xy ( nsea, nsea, nx, ny, wlm , mapsf, x1 )
1080  !
1081  ! Mean zero-crossing wave period T02
1082  !
1083  ELSE IF ( j.EQ.2 .AND. k.EQ.3 ) THEN
1084  flone = .true.
1085  CALL w3s2xy ( nsea, nsea, nx, ny, t02 , mapsf, x1 )
1086  !
1087  ! Mean wave period Tm
1088  !
1089  ELSE IF ( j.EQ.2 .AND. k.EQ.4 ) THEN
1090  flone = .true.
1091  CALL w3s2xy ( nsea, nsea, nx, ny, t0m1 , mapsf, x1 )
1092  !
1093  ! Mean energy wave period Te
1094  !
1095  ELSE IF ( j.EQ.2 .AND. k.EQ.5 ) THEN
1096  flone = .true.
1097  CALL w3s2xy ( nsea, nsea, nx, ny, t01 , mapsf, x1 )
1098  !
1099  ! Peak period
1100  !
1101  ELSE IF ( j.EQ.2 .AND. k.EQ.6 ) THEN
1102  flone = .true.
1103  CALL w3s2xy ( nsea, nsea, nx, ny, fp0 , mapsf, x1 )
1104  !
1105  ! Mean wave direction
1106  !
1107  ELSE IF ( j.EQ.2 .AND. k.EQ.7 ) THEN
1108  flone = .true.
1109  CALL w3s2xy ( nsea, nsea, nx, ny, thm , mapsf, x1 )
1110  !
1111  ! Directional spread
1112  !
1113  ELSE IF ( j.EQ.2 .AND. k.EQ.8 ) THEN
1114  flone = .true.
1115  CALL w3s2xy ( nsea, nsea, nx, ny, ths , mapsf, x1 )
1116  !
1117  ! Peak direction
1118  !
1119  ELSE IF ( j.EQ.2 .AND. k.EQ.9 ) THEN
1120  flone = .true.
1121  CALL w3s2xy ( nsea, nsea, nx, ny, thp0 , mapsf, x1 )
1122  !
1123  ! Dominant wave breaking probability
1124  !
1125  ELSE IF ( j.EQ.2 .AND. k.EQ.17 ) THEN
1126  flone = .true.
1127  CALL w3s2xy ( nsea, nsea, nx, ny, wbt , mapsf, x1 )
1128  !
1129  ! Partitioned wave heights
1130  !
1131  ELSE IF ( j.EQ.4 .AND. k.EQ.1 ) THEN
1132  flprt = .true.
1133  DO i=0, noswll
1134  CALL w3s2xy ( nsea, nsea, nx, ny, phs(:,i), &
1135  mapsf, xa(:,:,i) )
1136  END DO
1137  !
1138  ! Partitioned peak period
1139  !
1140  ELSE IF ( j.EQ.4 .AND. k.EQ.2 ) THEN
1141  flprt = .true.
1142  DO i=0, noswll
1143  CALL w3s2xy ( nsea, nsea, nx, ny, ptp(:,i), &
1144  mapsf, xa(:,:,i) )
1145  END DO
1146  !
1147  ! Partitioned wave leangths (peak)
1148  !
1149  ELSE IF ( j.EQ.4 .AND. k.EQ.3 ) THEN
1150  flprt = .true.
1151  DO i=0, noswll
1152  CALL w3s2xy ( nsea, nsea, nx, ny, plp(:,i), &
1153  mapsf, xa(:,:,i) )
1154  END DO
1155  !
1156  ! Partitioned directions
1157  !
1158  ELSE IF ( j.EQ.4 .AND. k.EQ.4 ) THEN
1159  flprt = .true.
1160  DO i=0, noswll
1161  CALL w3s2xy ( nsea, nsea, nx, ny, pdir(:,i), &
1162  mapsf, xa(:,:,i) )
1163  END DO
1164  !
1165  ! Partitioned direstional spread
1166  !
1167  ELSE IF ( j.EQ.4 .AND. k.EQ.5 ) THEN
1168  flprt = .true.
1169  DO i=0, noswll
1170  CALL w3s2xy ( nsea, nsea, nx, ny, psi(:,i), &
1171  mapsf, xa(:,:,i) )
1172  END DO
1173  !
1174  ! Partitioned wind sea fraction
1175  !
1176  ELSE IF ( j.EQ.4 .AND. k.EQ.6 ) THEN
1177  flprt = .true.
1178  DO i=0, noswll
1179  CALL w3s2xy ( nsea, nsea, nx, ny, pws(:,i), &
1180  mapsf, xa(:,:,i) )
1181  END DO
1182  !
1183  ! Partitioned peak direction
1184  !
1185  ELSE IF ( j.EQ.4 .AND. k.EQ.7 ) THEN
1186  flprt = .true.
1187  DO i=0, noswll
1188  CALL w3s2xy ( nsea, nsea, nx, ny, pthp0(:,i), &
1189  mapsf, xa(:,:,i) )
1190  END DO
1191  !
1192  ! Partitioned peakedness
1193  !
1194  ELSE IF ( j.EQ.4 .AND. k.EQ.8 ) THEN
1195  flprt = .true.
1196  DO i=0, noswll
1197  CALL w3s2xy ( nsea, nsea, nx, ny, pqp(:,i), &
1198  mapsf, xa(:,:,i) )
1199  END DO
1200  !
1201  !
1202  ! Partitioned peak enhancement factor
1203  !
1204  ELSE IF ( j.EQ.4 .AND. k.EQ.9 ) THEN
1205  flprt = .true.
1206  DO i=0, noswll
1207  CALL w3s2xy ( nsea, nsea, nx, ny, ppe(:,i), &
1208  mapsf, xa(:,:,i) )
1209  END DO
1210  !
1211  !
1212  ! Partitioned gaussian frequency spread
1213  !
1214  ELSE IF ( j.EQ.4 .AND. k.EQ.10 ) THEN
1215  flprt = .true.
1216  DO i=0, noswll
1217  CALL w3s2xy ( nsea, nsea, nx, ny, pgw(:,i), &
1218  mapsf, xa(:,:,i) )
1219  END DO
1220  !
1221  !
1222  ! Partitioned spectral width
1223  !
1224  ELSE IF ( j.EQ.4 .AND. k.EQ.11 ) THEN
1225  flprt = .true.
1226  DO i=0, noswll
1227  CALL w3s2xy ( nsea, nsea, nx, ny, psw(:,i), &
1228  mapsf, xa(:,:,i) )
1229  END DO
1230  !
1231  !
1232  ! Partitioned mean energy period (-1)
1233  !
1234  ELSE IF ( j.EQ.4 .AND. k.EQ.12 ) THEN
1235  flprt = .true.
1236  DO i=0, noswll
1237  CALL w3s2xy ( nsea, nsea, nx, ny, ptm1(:,i), &
1238  mapsf, xa(:,:,i) )
1239  END DO
1240  !
1241  !
1242  ! Partitioned mean wave period (+1)
1243  !
1244  ELSE IF ( j.EQ.4 .AND. k.EQ.13 ) THEN
1245  flprt = .true.
1246  DO i=0, noswll
1247  CALL w3s2xy ( nsea, nsea, nx, ny, pt1(:,i), &
1248  mapsf, xa(:,:,i) )
1249  END DO
1250  !
1251  !
1252  ! Partitioned mean wave period (+2)
1253  !
1254  ELSE IF ( j.EQ.4 .AND. k.EQ.14 ) THEN
1255  flprt = .true.
1256  DO i=0, noswll
1257  CALL w3s2xy ( nsea, nsea, nx, ny, pt2(:,i), &
1258  mapsf, xa(:,:,i) )
1259  END DO
1260  !
1261  !
1262  ! Partitioned peak density
1263  !
1264  ELSE IF ( j.EQ.4 .AND. k.EQ.15 ) THEN
1265  flprt = .true.
1266  DO i=0, noswll
1267  CALL w3s2xy ( nsea, nsea, nx, ny, pep(:,i), &
1268  mapsf, xa(:,:,i) )
1269  END DO
1270  !
1271  ! Total wind sea fraction
1272  !
1273  ELSE IF ( j.EQ.4 .AND. k.EQ.16 ) THEN
1274  flone = .true.
1275  CALL w3s2xy ( nsea, nsea, nx, ny, pwst ,mapsf, x1 )
1276  !
1277  ! Number of partitions
1278  !
1279  ELSE IF ( j.EQ.4 .AND. k.EQ.17 ) THEN
1280  flone = .true.
1281  CALL w3s2xy ( nsea, nsea, nx, ny, pnr , mapsf, x1 )
1282  !
1283  ! Friction velocity
1284  !
1285  ELSE IF ( j.EQ.5 .AND. k.EQ.1 ) THEN
1286  fltwo = .true.
1287  CALL w3s2xy ( nsea, nsea, nx, ny, ust(1:nsea) &
1288  , mapsf, xx )
1289  CALL w3s2xy ( nsea, nsea, nx, ny, ustdir(1:nsea) &
1290  , mapsf, xy )
1291  !
1292  ! Charnock parameter
1293  !
1294  ELSE IF ( j.EQ.5 .AND. k.EQ.2 ) THEN
1295  flone = .true.
1296  CALL w3s2xy ( nsea, nsea, nx, ny, charn , mapsf, x1 )
1297  !
1298  ! Mean energy flux
1299  !
1300  ELSE IF ( j.EQ.5 .AND. k.EQ.3 ) THEN
1301  flone = .true.
1302  CALL w3s2xy ( nsea, nsea, nx, ny, cge , mapsf, x1 )
1303  !
1304  ! Air-sea energy flux
1305  !
1306  ELSE IF ( j.EQ.5 .AND. k.EQ.4 ) THEN
1307  flone = .true.
1308  CALL w3s2xy ( nsea, nsea, nx, ny, phiaw , mapsf, x1 )
1309  !
1310  ! Net supported wave stress
1311  !
1312  ELSE IF ( j.EQ.5 .AND. k.EQ.5 ) THEN
1313  fltwo = .true.
1314  CALL w3s2xy ( nsea, nsea, nx, ny, tauwix, mapsf, xx )
1315  CALL w3s2xy ( nsea, nsea, nx, ny, tauwiy, mapsf, xy )
1316  !
1317  ! Net supported wave stress
1318  !
1319  ELSE IF ( j.EQ.5 .AND. k.EQ.6 ) THEN
1320  fltwo = .true.
1321  CALL w3s2xy ( nsea, nsea, nx, ny, tauwnx, mapsf, xx )
1322  CALL w3s2xy ( nsea, nsea, nx, ny, tauwny, mapsf, xy )
1323  !
1324  ! Peakedness
1325  !
1326  ELSE IF ( j.EQ.8 .AND. k.EQ.5 ) THEN
1327  flone = .true.
1328  CALL w3s2xy ( nsea, nsea, nx, ny, qp , mapsf, x1 )
1329  !
1330  ! Average source term time step
1331  !
1332  ELSE IF ( j.EQ.9 .AND. k.EQ.1 ) THEN
1333  flone = .true.
1334  DO isea=1, nsea
1335  IF ( dtdyn(isea) .NE. undef ) &
1336  dtdyn(isea) = dtdyn(isea) / 60.
1337  END DO
1338  CALL w3s2xy ( nsea, nsea, nx, ny, dtdyn , mapsf, x1 )
1339  !
1340  ! Cut-off frequency
1341  !
1342  ELSE IF ( j.EQ.9 .AND. k.EQ.2 ) THEN
1343  flone = .true.
1344  CALL w3s2xy ( nsea, nsea, nx, ny, fcut , mapsf, x1 )
1345  !
1346  ! Max CFL step for XY propagation
1347  !
1348  ELSE IF ( j.EQ.9 .AND. k.EQ.3 ) THEN
1349  flone = .true.
1350  CALL w3s2xy ( nsea, nsea, nx, ny, cflxymax , mapsf, x1 )
1351  !
1352  ! Max CFL step for directional propagation
1353  !
1354  ELSE IF ( j.EQ.9 .AND. k.EQ.4 ) THEN
1355  flone = .true.
1356  CALL w3s2xy ( nsea, nsea, nx, ny, cflthmax , mapsf, x1 )
1357  !!
1358  !! Not yet coded onto control file list (section 6 above)
1359  !
1360  ! Near-bottom amplitude
1361  !
1362  ELSE IF ( j.EQ.7 .AND. k.EQ.1 ) THEN
1363  fltwo = .true.
1364  CALL w3s2xy ( nsea, nsea, nx, ny, aba , mapsf, xx )
1365  CALL w3s2xy ( nsea, nsea, nx, ny, abd , mapsf, xy )
1366  !
1367  ! Near-bottom velocity
1368  !
1369  ELSE IF ( j.EQ.7 .AND. k.EQ.2 ) THEN
1370  fltwo = .true.
1371  CALL w3s2xy ( nsea, nsea, nx, ny, uba , mapsf, xx )
1372  CALL w3s2xy ( nsea, nsea, nx, ny, ubd , mapsf, xy )
1373  !
1374  ! Radiation stresses
1375  !
1376  ELSE IF ( j.EQ.6 .AND. k.EQ.1 ) THEN
1377  fltwo = .true.
1378  CALL w3s2xy ( nsea, nsea, nx, ny, sxx , mapsf, x1 )
1379  CALL w3s2xy ( nsea, nsea, nx, ny, syy , mapsf, xx )
1380  CALL w3s2xy ( nsea, nsea, nx, ny, sxy , mapsf, xy )
1381  !
1382  ! User defined #1
1383  !
1384  ELSE IF ( j.EQ.10 .AND. k.EQ.1 ) THEN
1385  flone = .true.
1386  CALL w3s2xy ( nsea, nsea, nx, ny, usero(:,1) &
1387  , mapsf, x1 )
1388  !
1389  ! User defined #2
1390  !
1391  ELSE IF ( j.EQ.10 .AND. k.EQ.2 ) THEN
1392  flone = .true.
1393  CALL w3s2xy ( nsea, nsea, nx, ny, usero(:,2) &
1394  , mapsf, x1 )
1395  !
1396  ELSE
1397  WRITE (ndse,990) j, k
1398  WRITE (ndse,999)
1399  CALL extcde ( 1 )
1400  !
1401  END IF
1402  !
1403  ! 3 Perform output
1404  !
1405  ! 3D array fields
1406  !
1407  IF ( fltri ) THEN
1408  WRITE (ndsdat) &
1409  ((x1(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1410  WRITE (ndsdat) &
1411  ((xx(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1412  WRITE (ndsdat) &
1413  ((xy(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1414  !
1415  ! Partitions parameters
1416  !
1417  ELSE IF ( flprt ) THEN
1418  DO i=0, noswll
1419  WRITE (ndsdat) &
1420  ((xa(ix,iy,i),ix=ix0,ixn),iy=iy0,iyn)
1421  END DO
1422  !
1423  ! 2D array fields
1424  !
1425  ELSE IF ( fltwo ) THEN
1426  WRITE (ndsdat) &
1427  ((xx(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1428  WRITE (ndsdat) &
1429  ((xy(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1430  !
1431  ! Scalars
1432  !
1433  ELSE IF ( flone ) THEN
1434  WRITE (ndsdat) &
1435  ((x1(ix,iy),ix=ix0,ixn),iy=iy0,iyn)
1436  END IF
1437  !
1438  ! ... End of fields loop
1439  !
1440  END IF
1441  END DO
1442  END DO
1443  !
1444  RETURN
1445  !
1446  ! Error escape locations
1447  !
1448  ! Formats
1449  !
1450 940 FORMAT (1x,i8,3i3.2,2x,4e12.4)
1451 950 FORMAT (1x,a13,i9.8,i7.6,2(2f8.2,i4), &
1452  1x,a4,f8.4,1x,a10,2i2,1x,a11,i4)
1453 951 FORMAT (1x,2f10.5,2i8)
1454  !
1455 990 FORMAT (/' *** WAVEWATCH III ERROR IN W3EXGO :'/ &
1456  ' GROUP',i2,' PARAMETER',i3,' NOT LISTED ' )
1457 999 FORMAT (/' *** WAVEWATCH III ERROR IN GXEXGO :'/ &
1458  ' PLEASE UPDATE FIELDS !!! '/)
1459  !
1460 #ifdef W3_T
1461 9000 FORMAT (' TEST GXEXGO : FLAGS :',40l2)
1462 9020 FORMAT (' TEST GXEXGO : OUTPUT FIELD : ',a)
1463 #endif
1464  !/
1465  !/ End of GXEXGO ----------------------------------------------------- /
1466  !/

References w3servmd::w3s2xy().

Referenced by gxoutf().

◆ gxoutf()

program gxoutf

Generate GrADS input files from raw WAVEWATCH data file.

Data is read from the grid output file out_grd.ww3 (raw data) and from the file gx_outf.inp ( NDSI, output requests ). Model definition and raw data files are read using WAVEWATCH III subroutines.

Output files are ww3.ctl and ww3.grads. The output files contains a land-sea map, followed by requested fields. See the control file for the names of the fields.

Author
H. L. Tolman
A. Chawla
J.H.G.M. Alves
Date
22-Mar-2021

Definition at line 35 of file gx_outf.F90.

References w3adatmd::aba, w3adatmd::abd, w3adatmd::as, w3adatmd::bedforms, w3wdatmd::berg, w3adatmd::bhd, w3adatmd::cflkmax, w3adatmd::cflthmax, w3adatmd::cflxymax, w3adatmd::cge, w3adatmd::charn, w3adatmd::cx, w3adatmd::cy, w3timemd::dsec21(), w3adatmd::dtdyn, w3adatmd::dw, w3servmd::extcde(), w3adatmd::fcut, file(), w3odatmd::flogrd, w3odatmd::fnmpre, w3adatmd::fp0, gxexgo(), w3adatmd::hcmaxd, w3adatmd::hcmaxe, w3adatmd::hmaxd, w3adatmd::hmaxe, w3adatmd::hs, w3wdatmd::ice, w3wdatmd::icef, w3wdatmd::iceh, w3odatmd::idout, w3servmd::itrace(), w3adatmd::mscx, w3adatmd::mscy, w3adatmd::mssx, w3adatmd::mssy, w3odatmd::ndse, w3odatmd::ndso, w3odatmd::ndst, w3servmd::nextln(), w3odatmd::ngrpp, w3odatmd::noge, w3odatmd::nogrp, w3odatmd::noswll, w3adatmd::p2sms, w3adatmd::pdir, w3adatmd::pep, w3adatmd::pgw, w3adatmd::phiaw, w3adatmd::phibbl, w3adatmd::phioc, w3adatmd::phs, w3adatmd::plp, w3adatmd::pnr, w3adatmd::ppe, w3adatmd::pqp, w3adatmd::prms, w3adatmd::psi, w3adatmd::psw, w3adatmd::pt1, w3adatmd::pt2, w3adatmd::pthp0, w3adatmd::ptm1, w3adatmd::ptp, w3adatmd::pws, w3adatmd::pwst, w3adatmd::qp, w3wdatmd::rhoair, w3adatmd::stmaxd, w3adatmd::stmaxe, w3timemd::stme21(), w3servmd::strace(), w3adatmd::sxx, w3adatmd::sxy, w3adatmd::syy, w3adatmd::t01, w3adatmd::t02, w3adatmd::t0m1, w3adatmd::taua, w3adatmd::tauadir, w3adatmd::taubbl, w3adatmd::tauox, w3adatmd::tauoy, w3adatmd::tauwix, w3adatmd::tauwiy, w3adatmd::tauwnx, w3adatmd::tauwny, w3adatmd::thm, w3adatmd::thp0, w3adatmd::ths, w3timemd::tick21(), w3wdatmd::time, w3adatmd::tpms, w3adatmd::tusx, w3adatmd::tusy, w3adatmd::ua, w3adatmd::uba, w3adatmd::ubd, w3adatmd::ud, constants::undef, w3adatmd::us3d, w3adatmd::usero, w3adatmd::ussx, w3adatmd::ussy, w3wdatmd::ust, w3wdatmd::ustdir, w3iogomd::w3iogo(), w3iogrmd::w3iogr(), w3adatmd::w3naux(), w3wdatmd::w3ndat(), w3gdatmd::w3nmod(), w3odatmd::w3nout(), w3iogomd::w3readflgrd(), w3adatmd::w3seta(), w3gdatmd::w3setg(), w3odatmd::w3seto(), w3wdatmd::w3setw(), w3adatmd::wbt, w3adatmd::whitecap, w3adatmd::wlm, w3wdatmd::wlv, and w3adatmd::wn.

w3servmd
Definition: w3servmd.F90:3
constants::undef
real undef
UNDEF Value for undefined variable in output.
Definition: constants.F90:84
w3servmd::w3s2xy
subroutine w3s2xy(NSEA, MSEA, MX, MY, S, MAPSF, XY)
Definition: w3servmd.F90:337