File: umpk05.f

package info (click to toggle)
dcl 7.5.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 20,872 kB
  • sloc: fortran: 48,433; f90: 12,803; ansic: 6,513; makefile: 4,612; ruby: 184; sh: 153
file content (78 lines) | stat: -rw-r--r-- 1,957 bytes parent folder | download | duplicates (14)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
*-----------------------------------------------------------------------
      PROGRAM UMPK05

      PARAMETER ( NX=37, NY=37 )
      PARAMETER ( XMIN=  0, XMAX=360, YMIN=-90, YMAX=+90 )
      PARAMETER ( PI=3.141592, DRAD=PI/180, DZ=0.05 )
      PARAMETER ( FACT=10 )

      REAL      P(NX,NY), U(NX,NY), V(NX,NY), ALON(NX), ALAT(NY)

      EXTERNAL  IMOD


      CALL GLRGET( 'RMISS', RMISS )
      CALL GLLSET( 'LMISS', .TRUE. )
     
      DO 10 I = 1, NX
        ALON(I) = XMIN + (XMAX-XMIN) * (I-1) / (NX-1)
   10 CONTINUE

      DO 20 J = 1, NY
        ALAT(J) = YMIN + (YMAX-YMIN) * (J-1) / (NY-1)
   20 CONTINUE

      DO 40 J = 1, NY
        DO 30 I = 1, NX
          SLAT = SIN(ALAT(J)*DRAD)
          P(I,J) = COS(ALON(I)*DRAD) * (1-SLAT**2) * SIN(2*PI*SLAT) 
     +             + DZ
   30   CONTINUE
   40 CONTINUE

      DO 60 J = 1, NY
        DO 50 I = 1, NX
          IF (J.EQ.1 .OR. J.EQ.NY) THEN
            U(I,J) = RMISS
            V(I,J) = RMISS
          ELSE
            U(I,J) = ( P(I,J-1) - P(I,J+1) ) * FACT
            V(I,J) = ( P(IMOD(I,NX-1)+1,J) - P(IMOD(I-2,NX-1)+1,J) )
     +             * FACT
          END IF
   50   CONTINUE
   60 CONTINUE

      WRITE(*,*) ' WORKSTATION ID (I)  ? ;'
      CALL SGPWSN
      READ (*,*) IWS

      CALL GROPN( IWS )
      CALL GRFRM

      CALL GRSWND( XMIN, XMAX, YMIN, YMAX )
      CALL GRSVPT( 0.1, 0.9, 0.1, 0.9 )
      CALL GRSSIM( 0.4, 0.0, 0.0 )
      CALL GRSMPL( 165.0, 60.0, 0.0 )
      CALL GRSTXY( -180.0, 180.0, 0.0, 90.0 )
      CALL GRSTRN( 30 )
      CALL GRSTRF
      CALL SGLSET( 'LCLIP', .TRUE. )

      CALL UMPMAP( 'coast_world' )
      CALL UMPGLB

      CALL UDCNTR( P, NX, NX, NY )

      DO 80 J=1,NY
        DO 70 I=1,NX
          IF (.NOT.(U(I,J).EQ.RMISS .OR. V(I,J).EQ.RMISS)) THEN
            CALL SGLAZU(ALON(I),ALAT(J),ALON(I)+U(I,J),ALAT(J)+V(I,J),
     +           1, 3 )
          END IF
   70   CONTINUE
   80 CONTINUE

      CALL GRCLS

      END