[cig-commits] r5752 - geodyn/3D/MAG/trunk/idl
wei at geodynamics.org
wei at geodynamics.org
Wed Jan 10 09:55:56 PST 2007
Author: wei
Date: 2007-01-10 09:55:55 -0800 (Wed, 10 Jan 2007)
New Revision: 5752
Added:
geodyn/3D/MAG/trunk/idl/magmovieCIG.pro
Log:
Add a new IDL program for MAG movie
Added: geodyn/3D/MAG/trunk/idl/magmovieCIG.pro
===================================================================
--- geodyn/3D/MAG/trunk/idl/magmovieCIG.pro 2007-01-10 03:19:31 UTC (rev 5751)
+++ geodyn/3D/MAG/trunk/idl/magmovieCIG.pro 2007-01-10 17:55:55 UTC (rev 5752)
@@ -0,0 +1,327 @@
+;A PROCEDURE TO CREATE A BYTE ARRAY FOR MAKING A MOVIE OF
+;MAGNETOCONVECTION OR DYNAMOS USING RESULTS FROM PROGRAM mag
+
+;THIS PROCEDURE IS MEANT TO DISPLAY RESULTS AT MID-DEPTH OR THE OUTER SURFACE
+;IN MAP VIEW, ASSUMING SOME LONGITUDINAL SYMMETRY.
+
+;THIS PROCEDURE ALSO CREATES JPG FILES OF THE IMAGES, FOR WEB MOVIES.
+;NOTE: The TVRD() and WRITE_JPEG commands may have to be modified, depending on the type of display the image is created on. Consult IDL manual for details.
+;
+
+; ************* TO DISPLAY MOVIE, ENTER "MOVIE,FRAMES,ORDER=0" AFTER
+; ************* THIS PROGRAM HAS TERMINATED
+
+;DEFINE THE VALUE OF PI:
+ PI= 3.1415926
+;ACCESS RGB-VALUES OF COLOR TABLE
+ COMMON COLORS,R_ORIG,G_ORIG,B_ORIG,R_CURR,G_CURR,B_CURR
+
+;READS IN DATA FILENAME.
+ FILENAME=''
+ GIFNAME=''
+ GIFFULLNAME=''
+ PRINT,'ENTER MOVIE DATA FILENAME:'
+ READ,FILENAME
+
+;OPEN DATA FILE AND READ PRELIMINARIES
+ OPENR, 1, FILENAME ;OPEN FILE FOR READ
+ RUNID=' '
+ READF,1,RUNID ;IDENTIFYING HEADER: RUNID
+ READF,1,TSCALE,VSCALE ;TIME SCALE, VELOCITY SCALE
+
+
+ READF,1,NR,NI,NPFULL,NSYM,NFRAME ;RECORD NUMBERS & FRAMES
+
+ PRINT,RUNID
+ PRINT,'NR,NI,NPFULL,NSYM,NFRAME= ',NR,NI,NPFULL,NSYM,NFRAME
+
+ PRINT,'Stop at frame NFSTOP ?'
+ READ,NFSTOP
+ PRINT,'Interpolate frames? No=0 Yes=1'
+ READ,IINTER
+
+;NUMBER OF FRAMES
+ NFR=(NFSTOP+2)*(IINTER+1)
+
+;NOTE: NSYM=N-FOLD SYMMETRY IN PHI:
+ NP=NPFULL/NSYM
+ NPFULL=NPFULL+1 ;WRAP-AROUND POINT ADDED
+
+;CHOOSE A VARIABLE
+ CHOICE=1
+; IF IOP GT 1 THEN BEGIN
+ PRINT,'SELECT DISPLAY (Br surface=1, Br middepth=2):'
+ READ,CHOICE
+ PRINT,'Select Polarity (Reverse=1; Normal=-1):'
+ READ,POLAR
+; ENDIF
+
+;GIF-FILE OPTION
+ PRINT,'CREATE JPEG-FILES FOR WEB DISPLAY ? NO=0 YES=1'
+ READ,IGIF
+ IF IGIF EQ 1 THEN BEGIN
+ PRINT,'ENTER JPG-FILENAME (WITHOUT SUFFIXES):'
+ READ,GIFNAME
+ ENDIF
+
+;DECLARE COORDINATE ARRAYS
+ THET = FLTARR(NI)
+ PHI = FLTARR(NPFULL)
+ LON = FLTARR(NPFULL)
+ LAT = FLTARR(NI)
+;DEFINE DATA ARRAY SIZES
+ V1 = FLTARR(NP)
+ B1 = FLTARR(NP)
+ B0 = FLTARR(NP)
+ V = FLTARR(NPFULL,NI)
+ VI = FLTARR(NPFULL,NI)
+
+;DEFINE WINDOW SIZE
+ PRINT,'WINDOW SIZE IN PIXEL? DEFAULT=300 / 200'
+ READ,WXSIZE
+ WYSIZE=WXSIZE
+
+;DIMENSION THE BYTE ARRAY
+ FRAMES=BYTARR(WXSIZE,WYSIZE,NFR)
+
+;CREATE A WINDOW
+ WINDOW,2,XSIZE=WXSIZE,YSIZE=WYSIZE
+
+;READ IN COLATITUDES
+ READF,1,THET
+
+
+
+;create array PHI of longitudes of data points (in radians)
+ PI2NP = 2*PI/(NPFULL-1)
+ PHI=PI2NP*(FINDGEN(NPFULL))
+;converts PHI to array LON from -180 to 180 degrees
+ LON=180*PHI/PI - 180.0
+;converts THET into array LAT from 90 to -90 degrees
+ LAT=90-180*THET/PI
+
+
+;SET UP CONTOUR LEVELS AND COLOR SCHEME
+
+;NUMBER OF CONTOURS
+ NLV=17
+;SCALE FACTOR
+ VSCALE=1.0
+;PROJECTION ANGLES
+ INCL=30.
+ LONSHIFT=0.0
+
+;COLORS
+ CTABLE=39 ; 39: rainbow, 0: black/white
+ LOADCT,CTABLE ;LOADS COLOR TABLE NUMBER
+; SELF-DEFINED COLOR TABLE
+; BLACK COLOR AT START OF SPECTRUM
+ R_CURR(000)= 00 & G_CURR(000)= 00 & B_CURR(000)= 00
+; WHITE COLOR AT END OF SPECTRUM
+; R_CURR(255)=255 & G_CURR(255)=255 & B_CURR(255)=255
+; DARK GREY
+ R_CURR( 01)= 90 & G_CURR( 01)= 90 & B_CURR( 01)= 90
+; LIGHT GREY
+ R_CURR( 02)=190 & G_CURR( 02)=190 & B_CURR( 02)=190
+
+ R_CURR( 60)= 35 & G_CURR( 70)= 0 & B_CURR( 70)=230
+ R_CURR( 70)= 20 & G_CURR( 70)= 0 & B_CURR( 70)=245
+ R_CURR( 80)= 0 & G_CURR( 80)= 60 & B_CURR( 80)=255
+ R_CURR( 90)= 0 & G_CURR( 90)=110 & B_CURR( 90)=255
+ R_CURR(100)= 0 & G_CURR(100)=150 & B_CURR(100)=255
+ R_CURR(110)= 20 & G_CURR(110)=200 & B_CURR(110)=255
+ R_CURR(120)= 70 & G_CURR(120)=240 & B_CURR(120)=255
+ R_CURR(130)=150 & G_CURR(130)=255 & B_CURR(130)=240
+ R_CURR(140)=225 & G_CURR(140)=255 & B_CURR(140)=225
+
+ R_CURR(150)=255 & G_CURR(150)=255 & B_CURR(150)=185
+ R_CURR(160)=255 & G_CURR(160)=255 & B_CURR(160)= 75
+ R_CURR(170)=255 & G_CURR(170)=225 & B_CURR(170)= 0
+ R_CURR(180)=255 & G_CURR(180)=175 & B_CURR(180)= 0
+ R_CURR(190)=255 & G_CURR(190)=125 & B_CURR(190)= 0
+ R_CURR(192)=255 & G_CURR(192)= 75 & B_CURR(192)= 0
+ R_CURR(194)=255 & G_CURR(194)= 0 & B_CURR(194)= 0
+ R_CURR(196)=230 & G_CURR(196)= 0 & B_CURR(196)= 35
+
+ TVLCT,R_CURR,G_CURR,B_CURR
+
+ VCOLORS=[70,80,90,100,110,120,130,140,150,160,170,180,190,192,194,196,$
+ 196,70]
+
+; VCOLORS=[35,45,55,65,75,85,95,115,156,166,172,180,187,194,200,206,211]
+
+ !P.THICK=2 ;DRAWS THICK LINES
+ !P.POSITION=[.025,.025,.975,.975] ;ENSURE SQUARE FIGURE
+ ICTC=0 ;NO TANGENT CYLINDER -- DEFAULT
+
+;************************************************************************
+;READ IN DATA ARRAYS FROM FORTRAN DATAFILE INTO IDL ARRAYS.
+;**************************************************
+;**************************************************
+;BEGIN TO MAKE MOVIE
+;**************************************************
+
+;MAIN FRAME LOOP
+ IFR=-1
+ IGIFFR=0
+FOR IFRAME=0,NFSTOP-1 DO BEGIN
+ IFR=IFR+1
+
+ READF,1,IDAT,TIME
+ PRINT,'FRAME= ',IDAT-1,' TIME= ',TIME
+
+;BUILD 2D ARRAYS
+ FOR IT=0,NI-1 DO BEGIN
+ READF,1,B0
+
+
+;CONSTRUCT FULL 2D ARRAYS
+ IF CHOICE EQ 1 THEN BEGIN
+ IF IINTER EQ 1 THEN BEGIN
+ FOR NS=0,NSYM-1 DO BEGIN
+ J0=NS*NP
+ J1=J0+NP-1
+ VI(J0:J1,IT)=0.5*(B0+V(J0:J1,IT))
+ ENDFOR
+ VI(NPFULL-1,IT)=0.5*(B0(0)+V(NPFULL-1,IT))
+ ENDIF
+
+ FOR NS=0,NSYM-1 DO BEGIN
+ J0=NS*NP
+ J1=J0+NP-1
+ V(J0:J1,IT)=B0
+ END
+ V(NPFULL-1,IT)=B0(0)
+ ENDIF
+ ENDFOR ;END OF IMAGE READ
+
+
+ FOR IT=0,NI-1 DO BEGIN
+ READF,1,B1
+
+;CONSTRUCT FULL 2D ARRAYS
+ IF CHOICE EQ 2 THEN BEGIN
+ IF IINTER EQ 1 THEN BEGIN
+ FOR NS=0,NSYM-1 DO BEGIN
+ J0=NS*NP
+ J1=J0+NP-1
+ VI(J0:J1,IT)=0.5*(B1+V(J0:J1,IT))
+ ENDFOR
+ VI(NPFULL-1,IT)=0.5*(B1(0)+V(NPFULL-1,IT))
+ ENDIF
+
+ FOR NS=0,NSYM-1 DO BEGIN
+ J0=NS*NP
+ J1=J0+NP-1
+ V(J0:J1,IT)=B1
+ END
+ V(NPFULL-1,IT)=B1(0)
+ END
+ ENDFOR ;END OF IMAGE READ
+
+
+
+;AT FIRST FRAME, SET CONTOURING LEVELS
+
+LABEL0: IF IFRAME EQ 0 THEN BEGIN
+ VMAX=MAX(ABS(V)) / VSCALE
+ VSTEP=2*VMAX/(NLV-1)
+ VV = FINDGEN(NLV)*VSTEP-VMAX
+ ENDIF
+
+; DEFINE MAPPING PROJECTIONS
+ CASE CHOICE OF
+ 1: MAP_SET,INCL,LONSHIFT,0,/ORTHOGRAPHIC,TITLE='CMB RADIAL FIELD'
+ 2: MAP_SET,INCL,LONSHIFT,0,/ORTHOGRAPHIC,TITLE='MIDDEPTH RADIAL FIELD'
+ 3: MAP_SET,INCL,LONSHIFT,0,/ORTHOGRAPHIC,TITLE='MIDDEPTH RAD. VELOCITY'
+ ENDCASE
+
+;PLOT CONTOURS
+
+;INTERPOLATED IMAGE
+
+ IF IINTER EQ 1 AND IFRAME GT 0 THEN BEGIN
+ ERASE
+
+
+CONTOUR,POLAR*VI,LON,LAT,LEVELS=VV,/OVERPLOT,C_COLORS=VCOLORS,/CELL_FILL
+ MAP_GRID,COLOR=0,GLINESTYLE=1,GLINETHICK=1
+; PLOT TANGENT CYLINDER INTERSECTION
+ IF ICTC EQ 1 THEN BEGIN
+ TCLAT=69.6
+ PLOTS,2*FINDGEN(180),REPLICATE(TCLAT,180),PSYM=3,SYMSIZE=.5,COLOR=255
+
+PLOTS,2*FINDGEN(180),REPLICATE(-TCLAT,180),PSYM=3,SYMSIZE=.5,COLOR=255
+ ENDIF
+
+;CREATE FRAME
+ FRAMES(0,0,IFR)=TVRD(TRUE=3)
+ IFR=IFR+1
+
+;INCREMENT JPG FILE COUNTER
+ IF IGIF EQ 1 THEN IGIFFR=IGIFFR+1
+;CREATE JPG FILE
+ IF IGIFFR GT 0 THEN BEGIN
+ IF IGIFFR LT 10 THEN $
+ GIFFULLNAME=GIFNAME+'00'+STRTRIM(FIX(IGIFFR),2)+'.JPG' $
+ ELSE IF IGIFFR LT 100 THEN $
+ GIFFULLNAME=GIFNAME+'0'+STRTRIM(FIX(IGIFFR),2)+'.JPG'$
+ ELSE GIFFULLNAME=GIFNAME+STRTRIM(FIX(IGIFFR),2)+'.JPG'
+
+ WRITE_JPEG,GIFFULLNAME,TVRD(TRUE=3),TRUE=3
+ IGIFFR=IGIFFR+1
+ ENDIF
+ ENDIF
+
+;NEW IMAGE
+
+ ERASE
+ CONTOUR,POLAR*V,LON,LAT,LEVELS=VV,/OVERPLOT,C_COLORS=VCOLORS,/CELL_FILL
+ MAP_GRID,COLOR=0,GLINESTYLE=1,GLINETHICK=1
+
+; PLOT TANGENT CYLINDER INTERSECTION
+ IF ICTC EQ 1 THEN BEGIN
+ TCLAT=69.6
+ PLOTS,2*FINDGEN(180),REPLICATE(TCLAT,180),PSYM=3,SYMSIZE=.5,COLOR=255
+
+PLOTS,2*FINDGEN(180),REPLICATE(-TCLAT,180),PSYM=3,SYMSIZE=.5,COLOR=255
+ ENDIF
+
+
+;AT FIRST FRAME OPTION TO CHANGE SCALING OR PROJECTIONS
+
+ IF IFRAME EQ 0 THEN BEGIN
+ PRINT,'CHANGE SCALING OR PROJECTION ? YES=1'
+ READ,IOPT
+ IF IOPT EQ 1 THEN BEGIN
+ PRINT,'SCALE FACTOR, INCLINATION, LONGITUDE ?'
+ READ,VSCALE,INCL,LONSHIFT
+ PRINT, 'PLOT TANGENT CYLINDER INTERSECTION ? YES=1'
+ READ,ICTC
+ GOTO, LABEL0
+ END
+ END
+
+;LOAD IMAGE INTO BYTE ARRAY
+ FRAMES(0,0,IFR)=TVRD(TRUE=3)
+
+;INCREMENT JPG FILE COUNTER
+ IF IGIF EQ 1 THEN IGIFFR=IGIFFR+1
+;CREATE JPG FILE
+ IF IGIFFR GT 0 THEN BEGIN
+ IF IGIFFR LT 10 THEN $
+ GIFFULLNAME=GIFNAME+'00'+STRTRIM(FIX(IGIFFR),2)+'.JPG' $
+ ELSE IF IGIFFR LT 100 THEN $
+ GIFFULLNAME=GIFNAME+'0'+STRTRIM(FIX(IGIFFR),2)+'.JPG'$
+ ELSE GIFFULLNAME=GIFNAME+STRTRIM(FIX(IGIFFR),2)+'.JPG'
+ WRITE_JPEG,GIFFULLNAME,TVRD(TRUE=3),TRUE=3
+ ENDIF
+
+
+ENDFOR ;END OF MOVIE LOOP
+
+CLOSE,1 ;CLOSE DATA FILE
+PRINT,'FOR DISPLAY OF MOVIE TYPE: MOVIE,FRAMES,ORDER=0'
+
+;END OF PROCEDURE
+END
\ No newline at end of file
More information about the cig-commits
mailing list