[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