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

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

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


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

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