/[MITgcm]/MITgcm_contrib/osse/EnKF/hadley3.F
ViewVC logotype

Annotation of /MITgcm_contrib/osse/EnKF/hadley3.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Tue May 4 18:19:34 2004 UTC (21 years, 2 months ago) by afe
Branch: MAIN
o EnKF stuff

1 afe 1.1 program hadley3
2    
3     c*** This subroutine calculates analysis errors using greg's
4     c*** ensemble square root filter, or the traditional ensemble
5     c*** kalman filter.
6     c***
7     c*** Written by: Sai Ravela
8     c*** Last modified: Feb 2, 2003
9    
10     implicit none
11    
12     integer i, j, k, n, ijim, ijuli, isteps, nens, ics
13     integer nx, ny, nz, nf, nnx, nny, nnz, mobs, isai
14     integer ii, jj, zob, xob, yob
15     #include "hadley3.h"
16     integer iobsloc(mobs), indxa
17     real*8 ytrue(n), yobs(mobs), ytmp(n)
18     real*8 pert(n), R(mobs), yobsfull(n), ave(n), var(n)
19     real*8 xens(n,nens)
20     real*8 var_obs, eps, dt, x
21     real*8 obserr, analerr, distsub, distobs
22     integer iret, system
23     real*4 mask(ny,nx)
24    
25     c*** open some output files
26     open(unit=2,file='test.dat',status='unknown')
27     c open(unit=3,file='fields.dat',status='unknown')
28    
29     c*** initialisations
30     eps=0.005 ! obs error - 1/2 mm/s
31     isteps=1 ! number of steps per obs cycle
32    
33     c*** Here is where you read iobsloc and corresponding
34     c variances. You should know
35     c mobs in advance...in hadley
36    
37     call ReadObs(3,mobs,iobsloc)
38     write (*,*) 'iobsloc set',mobs, iobsloc(mobs), nens
39     var_obs=eps**2
40     do i=1,mobs
41     if (iobsloc(i) < nx*ny*nz*3) then
42     R(i)=var_obs
43     else
44     R(i) = 0.1 ! 0.9 deg other
45     end if
46     enddo
47    
48    
49     c*** loop over initial conditions
50     do ijim=1,ics
51    
52     call ReadPickup(0,n,nx,ny,nz,ytrue)
53     write (*,*) 'Picked Truth'
54     do k = 1,mobs
55     indxa = iobsloc(k)
56     yobs(k) = ytrue(indxa)
57     end do
58     do isai=1,nens
59     call ReadPickUp(isai,n,nx,ny,nz,ytmp)
60     do k=1,n
61     xens(k,isai)=ytmp(k)
62     enddo
63     enddo
64     write (*,*) 'Picked Ensemble'
65     call EnSRF3d(xens,yobs,iobsloc,n,mobs,R,nens,nx,ny,nz,mask)
66     c*** get ensemble mean and variance
67     call ranmean2(xens,ave,n,nens)
68     c*** calculate obs and anal err
69     analerr=distobs(yobs,ave,iobsloc,mobs,n)
70     write(6,*) ijim, analerr
71     write(2,*) ijim, analerr
72     analerr=distsub(ytrue,ave,n)
73     write(6,*) '>',ijim, analerr
74     write(2,*) '>',ijim, analerr
75     c write(3,'(250f18.10)') (ave(i), i=1,n)
76    
77    
78     c*** step truth forward
79     call Model(0)
80     call ReadPickup(0,n,nx,ny,nz,ytmp)
81     call WritePickUp(0,n,nx,ny,nz,ytmp)
82     write (*,*) 'Stepped Truth'
83     c*** step ensemble forward
84     do isai=1,nens
85     do k=1,n
86     ytmp(k)=xens(k,isai)
87     enddo
88     call WritePickUp(isai,n,nx,ny,nz,ytmp)
89     call Model(isai)
90     enddo
91     write (*,*) 'Stepped Ensemble'
92     call flush()
93    
94     enddo
95    
96     return
97     end
98    

  ViewVC Help
Powered by ViewVC 1.1.22