/[MITgcm]/MITgcm_contrib/mlosch/optim_m1qn3/testbed/offline_driver.F
ViewVC logotype

Annotation of /MITgcm_contrib/mlosch/optim_m1qn3/testbed/offline_driver.F

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


Revision 1.1 - (hide annotations) (download)
Wed May 2 12:27:42 2012 UTC (13 years, 2 months ago) by mlosch
Branch: MAIN
simple testing environment for optim_m1qn3

1 mlosch 1.1 C $Header: $
2     C $Name: $
3     program offline_driver
4     implicit none
5     integer k
6     integer optimcycle
7     integer maxiter
8     parameter (maxiter = 10)
9    
10     c parameters to be used in m1qn3
11     integer reverse
12     integer n, nnn
13     parameter (n = 7)
14     integer impres,io,imode(3),omode,niter,nsim,iz(5),indic
15     double precision x(n),f,g(n),dxmin,df1,epsg
16     character*3 normtype
17     c work arrays
18     integer ndz, mupdate
19     parameter (mupdate = 7)
20     parameter (ndz=3*n + mupdate*(2*n + 1))
21     double precision dz(ndz), dz2(ndz)
22     c extra dummy variables
23     integer nn,i
24     parameter (nn = 1)
25     integer izs(nn)
26     real rzs(nn)
27     double precision dzs(nn)
28    
29     c m1qn3 start
30     #include "m1qn3_common.h"
31     #include "m1qn3a_common.h"
32     #include "mlis3_common.h"
33     c m1qn3 end
34    
35     character*(*) fname
36     parameter ( fname = 'output_m1qn3.txt' )
37    
38     external simul_rc,euclid,ctonbe,ctcabe
39    
40     c if (ndz.gt.1000) stop 'ndz >1000, increase dz'
41     c initialization
42     epsg = 1.d-8
43     impres = 6
44     io=98
45     optimcycle=0
46     normtype = 'two'
47     f = 0.
48     dxmin = 1.d-6
49     df1 = 10.
50     c diagonal scaling mode
51     imode(1) = 0
52     c cold start
53     imode(2) = 0
54     c call simul with indic=1 every imode(3)th iteration
55     imode(3) = 0
56     c set this output variable to check if anything is done to it in m1qn3
57     c value does not alter results
58     omode=-1
59     reverse=1
60     niter = 1000
61     nsim = 5000
62     do k=1,5
63     iz(k)=0
64     enddo
65     indic=4
66     do k=1,n
67     x(k) = 0.
68     g(k) = 0.
69     enddo
70     do k=1,nn
71     izs(k)=0
72     rzs(k)=0.
73     dzs(k)=0.
74     enddo
75     dzs(1) = 100.
76     c restart stuff
77     do k=1,ndz
78     dz(k) = 0.
79     enddo
80     dz(:)=0.
81     c end restart stuff
82     do i=1,n
83     x(i) = 0.
84     enddo
85     f=0.
86    
87     open(11,file='count.txt',status='old')
88     read(11,*) optimcycle
89     close(11)
90    
91     c first guess of x,f,g
92     if ( optimcycle.eq.0 ) then
93     c cold start
94     print *, 'cold start'
95     imode(2)=0
96     c first guess (izs=-1)
97     call mysimul(indic,n,f,x,g,-1,rzs,dzs)
98     df1 = f*0.1
99     reentry=0
100     open(io,file=fname,status='unknown')
101     else
102     c warm restart
103     imode(2)=1
104     c read restart information
105     call optim_store_m1qn3(ndz,iz,dz,niter,nsim,epsg,df1,
106     I optimcycle,
107     I .false.)
108     open(99,file='model_out',status='old',form='unformatted')
109     read(99) indic,nnn
110     read(99) f
111     if ( nnn.ne.n ) stop 'nnn .ne. n'
112     read(99) (g(i),i=1,n)
113     read(99) izs,rzs,dzs
114     close(99)
115     open(99,file='model_in',status='old',form='unformatted')
116     read(99) indic,nnn
117     read(99) (x(i),i=1,nnn)
118     read(99) izs,rzs,dzs
119     close(99)
120     df1 = -2.e23
121     open(io,file=fname,status='old',position='append')
122     endif
123    
124     reverse=1
125     call m1qn3_offline
126     & (simul_rc,euclid,ctonbe,ctcabe,n,x,f,g,dxmin,df1,
127     & epsg,normtype,impres,io,imode,omode,niter,nsim,
128     & iz,dz,ndz,reverse,indic,izs,rzs,dzs)
129     close(io)
130     c write restart information
131     call optim_store_m1qn3(ndz,iz,dz,niter,nsim,epsg,df1,
132     I optimcycle,
133     I .true.)
134    
135     open(99,file='model_in',status='unknown',form='unformatted')
136     write(99) indic,n
137     write(99) (x(i),i=1,n)
138     write(99) izs,rzs,dzs
139     close(99)
140    
141    
142     if ( reverse .le. 0 ) then
143     print *, 'stoptheloop'
144     print *, 'ml-offline_driver: niter = ',niter
145     print *, 'ml-offline_driver: nsim = ',nsim
146     print *, 'ml-offline_driver: omode = ',omode
147     endif
148     stop 'NORMAL END'
149    
150     end
151    

  ViewVC Help
Powered by ViewVC 1.1.22