rem ? NAM4PAN time frame area virt grid base rem ? time - model run time; 0 or 12 rem ? frame - starting frame number for display - need 9 total rem ? area - starting area number to store data - need 12 total rem ? virt - starting virtual graphic number - need 6 total rem ? grid - grid file number rem ? base - area number for basemap image rem rem -- This McBASI job generates a 4 panel chart from the NAM model for six rem -- hourly forecasts from 0 to 60 hours. The results are intended to be rem -- written to gif files and sent to a web server. rem rem -- General Requirements: rem -- rem -- The user must have a basemap for the region of rem -- interest where the land has values of 1 and the oceans a value 0. rem -- rem -- The user must have 11 960x1280 frames. input h input n input a input v input g input b let s = n keyin "LWU COPY nam4pan.base AREA0400" keyin "PANEL 2 2 "; n , n+10 keyin "LOGON NSOF 6998 X WS" keyin "DSSERVE ADD MY/GRIDS GRID 1 9999" keyin "DSSERVE ADD MY/AREAS AREA 1 9999" let z = 1000 rem rem -- Main loop rem 1 rem rem rem -- initialize frames rem gosub 10 rem rem -- Grid preparation and retrieval rem gosub 20 rem rem -- Image preparation, generation and display rem gosub 30 rem rem -- Graphics generation and display rem gosub 40 rem rem -- Save GIF files and send to Web Page rem gosub 50 rem rem -- Increment the counters rem gosub 60 if f<61 goto 1 stop 10 rem rem rem -- Setup enhancement tables, erases graphics and erase images rem rem rem -- Variables used rem rem n - frame number rem keyin "SF ";n keyin "SG ";n keyin "EG I ";n;" PAN=1 4;EG ";n;" PAN=1 4" keyin "EU REST FOURPAN " keyin "GU MAKE 1 BLACK " keyin "GU MAKE 4 WHITE " keyin "GU MAKE 10 100 50 120 " keyin "GU MAKE 11 200 200 200 " keyin "GU MAKE 12 0 0 130 " keyin "GU MAKE 13 80 80 80 " keyin "GU OFF 3 " keyin "DATELIST #Y FORM='(DD)-(SMON)-(YY)' DEV=T NAMDATE R" open "NAMDATE",20 input @20,z$ close 20 return 20 rem rem rem -- Prepare the grid file and copy the grids rem rem rem -- variables used rem rem h - model time rem f - forecast hour rem keyin "IGU DEL "; g rem rem -- get 1000-500mb thickness grid (derived) rem keyin "GRDCOPY RTGRIDS/NAM-USLC MY/GRIDS."; g ; " G1='LEV 1000;TIME "; h ;";FHOUR "; f ;";PARAM Z;DAY #Y' G2='LEV 500' MATH='G2-G1' DGRID=1" rem rem -- get 500mb Vorticity grid (derived) rem keyin "GRDCOPY RTGRIDS/NAM-USLC MY/GRIDS."; g ;" DGRID=2 TIME="; h ;" FHOUR="; f ;" DERIVE=VOR DAY=#Y LEV=500" rem rem -- Need a special batch file because command line is longer than 256 rem -- characters. This batch job generates a mean RH from 1000-100mb. rem keyin "BATCH ",h,f,g" CALCRH2.BAT" rem rem -- get precip grid rem keyin "GRDCOPY RTGRIDS/NAM-USLC MY/GRIDS."; g ;" DGRID=4 TIME="; h ;" FHOUR="; f ;" PARAM=PCP DAY=#Y LEV=SFC" rem rem -- Fix vorticity grid rem keyin "GRDCOPY MY/GRIDS."; g ;" MY/GRIDS."; g ;" G1='GRID 2' DGRID=5 MATH='G1 * 100000' return 30 rem rem rem -- This section creates and displays the images for the 4 panel chart rem rem rem -- Copy basemap for source area for remap command rem keyin "IMGCOPY MY/AREAS."; b ;" MY/AREAS.";a+4 keyin "IMGCOPY MY/AREAS."; b ;" MY/AREAS.";a+5 keyin "IMGCOPY MY/AREAS."; b ;" MY/AREAS.";a+6 keyin "IMGCOPY MY/AREAS."; b ;" MY/AREAS.";a+7 rem rem -- Generate images of each grid rem keyin "GRDIMG MY/GRIDS."; g ;" MY/AREAS."; a+8 ;" MAG=20 20 SCALE=4680 6200 0 255 GRID=1" keyin "GRDIMG MY/GRIDS."; g ;" MY/AREAS."; a+9 ;" MAG=20 20 SCALE=0 100 0 255 GRID=3" keyin "GRDIMG MY/GRIDS."; g ;" MY/AREAS."; a+10 ;" MAG=20 20 SCALE=-20 20 0 255 GRID=5" keyin "GRDIMG MY/GRIDS."; g ;" MY/AREAS."; a+11 ;" MAG=20 20 SCALE= 0 50 194 255 GRID= 4" rem rem -- Remap the images into a common projection rem keyin "IMGREMAP MY/AREAS."; a+8 ;" MY/AREAS."; a+4 ;" SSIZE=ALL" keyin "IMGREMAP MY/AREAS."; a+9 ;" MY/AREAS."; a+5 ;" SSIZE=ALL" keyin "IMGREMAP MY/AREAS."; a+10 ;" MY/AREAS."; a+6 ;" SSIZE=ALL" keyin "IMGREMAP MY/AREAS."; a+11 ;" MY/AREAS."; a+7 ;" SSIZE=ALL" rem rem -- Scale the images so we can apply one enhancement for all 4 images rem keyin "IMGOPER MY/AREAS."; a+4 ;" MY/AREAS."; b ;" MY/AREAS.";a+(f/6)*4+12;" FORM=MULT SCALE=0 255 2 64" keyin "IMGOPER MY/AREAS."; a+5 ;" MY/AREAS."; b ;" MY/AREAS.";a+(f/6)*4+13;" FORM=MULT SCALE=0 255 66 128" keyin "IMGOPER MY/AREAS."; a+6 ;" MY/AREAS."; b ;" MY/AREAS.";a+(f/6)*4+14;" FORM=MULT SCALE=0 255 130 192" keyin "IMGOPER MY/AREAS."; a+7 ;" MY/AREAS."; b ;" MY/AREAS.";a+(f/6)*4+15;" FORM=MULT ZERO=DATA" rem rem -- Display each of the 4 images including a color bar rem keyin "IMGDISP MY/AREAS.";a+(f/6)*4+12;" ";n;" PAN=2 TEXT=' ' 0 0 REFRESH='BAR (IMA) PAN=2 RANGE=2 64 LSIZE=1 POS=340 58 20 94'" keyin "IMGDISP MY/AREAS.";a+(f/6)*4+13;" ";n;" PAN=3 TEXT=' ' 0 0 REFRESH='BAR (IMA) PAN=3 RANGE=66 128 LSIZE=1 POS=340 58 20 94'" keyin "IMGDISP MY/AREAS.";a+(f/6)*4+14;" ";n;" PAN=1 TEXT=' ' 0 0 REFRESH='BAR (IMA) PAN=1 RANGE=130 190 LSIZE=1 POS=340 58 20 94'" keyin "IMGDISP MY/AREAS.";a+(f/6)*4+15;" ";n;" PAN=4 TEXT=' ' 0 0 REFRESH='BAR (IMA) PAN=4 RANGE=195 255 LSIZE=1 POS=340 58 20 94'" rem rem -- Add calibration information rem keyin "PRDUTIL ADD MY/AREAS.";a+(f/6)*4+12;" 2 THK 4680 6200 2 64 (m)" keyin "PRDUTIL ADD MY/AREAS.";a+(f/6)*4+13;" 2 RH 0 100 66 128 (%)" keyin "PRDUTIL ADD MY/AREAS.";a+(f/6)*4+14;" 2 VORT -20 20 130 192 Se-6" keyin "PRDUTIL ADD MY/AREAS.";a+(f/6)*4+15;" 2 PCP 0 200 194 255 in 100" rem rem -- There is no precipitation for the 0 hour forecast, so blank out the rem -- precip with gray rem if f=0 keyin "EU MAKE 194 253 GRAY GRAY ";n return 40 rem rem rem -- Draw a map on each image rem keyin "MAP H PAN=1 VIRT=";v+1;" R" keyin "MAP H PAN=2 VIRT=";v+2;" R" keyin "MAP H PAN=3 VIRT=";v+3;" R" keyin "MAP H PAN=4 VIRT=";v+4;" R" rem rem -- Display the contour analyses rem rem rem -- Draw single contour for 5400 thickness rem keyin "GD 2" keyin "TE THK {5400}" keyin "GRDDISP MY/GRIDS."; g ;" GRID=1 TITLE=' ' NAV=C CINT=THK VIRT=";v+2;" A PAN=2 LSIZE=6 FONT=NEWBR COLO=10" keyin "GD 1" rem rem -- Pressure at the surface rem keyin "GRDDISP RTGRIDS/NAM-USLC LEV=MSL DAY=#Y TIME=";h;" FHOUR=";f;" TITLE=' ' NAV=C PARAM=P CINT=4 COLO=11 VIRT=";v+2;" A PAN=2 LSIZE=6 FONT=NEWBR" rem rem -- 700mb heights rem keyin "GRDDISP RTGRIDS/NAM-USLC LEV=700 DAY=#Y TIME=";h;" FHOUR=";f;" TITLE=' ' NAV=C PARAM=Z CINT=30 COLO=12 VIRT=";v+3;" A PAN=3 LSIZE=6 FONT=NEWBR" rem rem -- 500mb heights rem keyin "GRDDISP RTGRIDS/NAM-USLC LEV=500 DAY=#Y TIME=";h;" FHOUR=";f;" TITLE=' ' NAV=C PARAM=Z CINT=60 VIRT=";v+1;" A COLO=13 PAN=1 LSIZE=6 FONT=NEWBR" rem rem -- Label each panel rem keyin "ZA 4 8 POS=462 1 PAN=1 FONT=HELBR VIRT=";v+1;" A {500mb Vorticity (10e-6/s) and Heights}" keyin "ZA 4 8 POS=462 1 PAN=2 FONT=HELBR VIRT=";v+2;" A {1000-500mb Thickness (meters) and Surface Pressure}" keyin "ZA 4 8 POS=462 1 PAN=3 FONT=HELBR VIRT=";v+3;" A {1000-100mb Relative Humidity (%) and 700mb Heights}" keyin "ZA 4 8 POS=462 1 PAN=4 FONT=HELBR VIRT=";v+4;" A {Precipitation (inches)}" rem rem -- Time stamp the chart rem keyin "ZA 5 12 L POS=424 360 PAN=4 FONT=NEWBR VIRT=";v+4;" A {NAM Model}" keyin "ZA 5 12 L POS=439 360 PAN=4 FONT=NEWBR VIRT=";v+4;" A {";z$;" ";h;"Z Run}" keyin "ZA 5 12 L POS=454 360 PAN=4 FONT=NEWBR VIRT=";v+4;" A {";f;" hr Forecast}" rem rem -- Blank out the graphic for the color bar labels rem keyin "PC T 390 42" keyin "CUR 122 86" keyin "CW 0 ";n;" 122 82 VIRT=";v+5;" keyin "SHOWVG ";v+5;" VIRT=";v+1;" A PAN=1" keyin "SHOWVG ";v+5;" VIRT=";v+2;" A PAN=2" keyin "SHOWVG ";v+5;" VIRT=";v+3;" A PAN=3" keyin "SHOWVG ";v+5;" VIRT=";v+4;" A PAN=4" rem rem -- Label the color bars rem keyin "ZA 4 6 R POS=336 50 VIRT=";v+1;" A PAN=1 FONT=COUBR {20}" keyin "ZA 4 6 R POS=360 50 VIRT=";v+1;" A PAN=1 FONT=COUBR {10}" keyin "ZA 4 6 R POS=384 50 VIRT=";v+1;" A PAN=1 FONT=COUBR {0}" keyin "ZA 4 6 R POS=408 50 VIRT=";v+1;" A PAN=1 FONT=COUBR {-10}" keyin "ZA 4 6 R POS=430 50 VIRT=";v+1;" A PAN=1 FONT=COUBR {-20}" keyin "ZA 4 6 R POS=336 50 VIRT=";v+2;" A PAN=2 FONT=COUBR {6200}" keyin "ZA 4 6 R POS=360 50 VIRT=";v+2;" A PAN=2 FONT=COUBR {5850}" keyin "ZA 4 6 R POS=384 50 VIRT=";v+2;" A PAN=2 FONT=COUBR {5500}" keyin "ZA 4 6 R POS=408 50 VIRT=";v+2;" A PAN=2 FONT=COUBR {5150}" keyin "ZA 4 6 R POS=430 50 VIRT=";v+2;" A PAN=2 FONT=COUBR {4800}" keyin "ZA 4 6 R POS=336 50 VIRT=";v+3;" A PAN=3 FONT=COUBR {100}" keyin "ZA 4 6 R POS=360 50 VIRT=";v+3;" A PAN=3 FONT=COUBR {75}" keyin "ZA 4 6 R POS=384 50 VIRT=";v+3;" A PAN=3 FONT=COUBR {50}" keyin "ZA 4 6 R POS=408 50 VIRT=";v+3;" A PAN=3 FONT=COUBR {25}" keyin "ZA 4 6 R POS=430 50 VIRT=";v+3;" A PAN=3 FONT=COUBR {0}" keyin "ZA 4 6 R POS=336 50 VIRT=";v+4;" A PAN=4 FONT=COUBR {2}" keyin "ZA 4 6 R POS=360 50 VIRT=";v+4;" A PAN=4 FONT=COUBR {1.5}" keyin "ZA 4 6 R POS=384 50 VIRT=";v+4;" A PAN=4 FONT=COUBR {1}" keyin "ZA 4 6 R POS=408 50 VIRT=";v+4;" A PAN=4 FONT=COUBR {0.5}" keyin "ZA 4 6 R POS=430 50 VIRT=";v+4;" A PAN=4 FONT=COUBR {0}" return 50 rem rem rem -- Save the whole image as a graphic and rename it without the .gif rem -- and attach a number at the end so our java applet can display the rem -- gif images rem keyin "FRMSAVE "; n ;" FOURPAN"; z ;".GIF" return 60 rem rem rem -- Index the forecast hour, frame number and gif counter rem let f=f+6 let n=n+1 let z=z+1 return