File: vsfc.f

package info (click to toggle)
x13as 1.1-b59-1
  • links: PTS, VCS
  • area: non-free
  • in suites: bookworm
  • size: 9,088 kB
  • sloc: fortran: 114,121; makefile: 14
file content (54 lines) | stat: -rw-r--r-- 2,159 bytes parent folder | download | duplicates (3)
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
      SUBROUTINE vsfc(Sts,Lfda,Llda,Nyr,Lter)
      IMPLICIT NONE
C-----------------------------------------------------------------------
C     Center seasonal factors by applying a 2 x Nyr moving average to
c     them - made a subroutine to enable it to be applied to combined
c     seasonal factor from X-11 seasonal and user seasonal effects
c     BCM June 2003
C-----------------------------------------------------------------------
      INCLUDE 'srslen.prm'
C-----------------------------------------------------------------------
      DOUBLE PRECISION Sts,Temp
      INTEGER i,k,k1,kfda,klda,Lfda,Llda,Nyr,Lter
      DIMENSION Lter(PSP),Sts(PLEN),Temp(PLEN)
C-----------------------------------------------------------------------
      COMMON /work  / Temp
C-----------------------------------------------------------------------
C --- APPLY A 2 X NYR MOVING AVERAGE TO THE SEASONALS.
C-----------------------------------------------------------------------
      CALL averag(Sts,Temp,Lfda,Llda,2,Nyr)
      k=Nyr/2
      kfda=Lfda+k
      klda=Llda-k
C-----------------------------------------------------------------------
C --- FILL IN THE MISSING END TERMS BY REPEATING FIRST AND LAST
C --- AVAILABLE MOVING AVERAGE VALUE.
C-----------------------------------------------------------------------
*      IF(allstb)THEN
      k1=mod(kfda,Nyr)
      DO i=1,k
       k1=k1-1
       IF(k1.le.0)k1=Nyr+k1
       IF(Lter(k1).eq.5)THEN
        Temp(kfda-i)=Temp(kfda-i+Nyr)
       ELSE
        Temp(kfda-i)=Temp(kfda)
       END IF
      END DO
      k1=mod(klda,Nyr)
      DO i=1,k
       k1=k1+1
       IF(k1.gt.Nyr)k1=1
       IF(Lter(k1).eq.5)THEN
        Temp(klda+i)=Temp(klda+i-Nyr)
       ELSE
        Temp(klda+i)=Temp(klda)
       END IF
      END DO
C-----------------------------------------------------------------------
C --- DIVIDE SEASONALS BY THE 2 X NYR MOVING AVERAGE
C-----------------------------------------------------------------------
      CALL divsub(Sts,Sts,Temp,Lfda,Llda)
C-----------------------------------------------------------------------
      RETURN
      END