/[MITgcm]/MITgcm/pkg/ctrl/ctrl_map_ini.F
ViewVC logotype

Annotation of /MITgcm/pkg/ctrl/ctrl_map_ini.F

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


Revision 1.6 - (hide annotations) (download)
Sat Jul 13 02:47:32 2002 UTC (21 years, 10 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint46n_post, checkpoint46l_post, checkpoint46g_pre, checkpoint46f_post, checkpoint46b_post, checkpoint46l_pre, checkpoint47a_post, checkpoint46d_pre, checkpoint46j_pre, checkpoint46a_post, checkpoint46j_post, checkpoint46k_post, checkpoint46e_pre, checkpoint46b_pre, checkpoint46c_pre, checkpoint46, checkpoint46h_pre, checkpoint46m_post, checkpoint46a_pre, checkpoint46g_post, checkpoint46i_post, checkpoint46c_post, checkpoint46e_post, checkpoint47, checkpoint46h_post, checkpoint46d_post
Changes since 1.5: +71 -5 lines
Merging new ctrl package from release1_p5:
o new ctrl package
  - adopted from ECCO environment to enable optimization
  - added Eliassen Palm fluxes to controls

1 heimbach 1.6 C $Header: /u/gcmpack/MITgcm/pkg/ctrl/ctrl_map_ini.F,v 1.5.4.1 2002/07/12 15:43:54 heimbach Exp $
2 heimbach 1.1
3     #include "CTRL_CPPOPTIONS.h"
4    
5 heimbach 1.5 CBOP
6     C !ROUTINE: ctrl_map_ini
7     C !INTERFACE:
8     subroutine ctrl_map_ini( mythid )
9    
10     C !DESCRIPTION: \bv
11     c *=================================================================
12     c | SUBROUTINE ctrl_map_ini
13     c | Add the temperature, salinity, and diffusivity parts of the
14     c | control vector to the model state and update the tile halos.
15     c | The control vector is defined in the header file "ctrl.h".
16     c *=================================================================
17     C \ev
18 heimbach 1.1
19 heimbach 1.5 C !USES:
20 heimbach 1.1 implicit none
21    
22     c == global variables ==
23 heimbach 1.6 #include "SIZE.h"
24 heimbach 1.1 #include "EEPARAMS.h"
25 heimbach 1.6 #include "PARAMS.h"
26 heimbach 1.1 #include "DYNVARS.h"
27 heimbach 1.6 #include "GRID.h"
28 heimbach 1.2 #include "TR1.h"
29 heimbach 1.1 #include "ctrl.h"
30     #include "ctrl_dummy.h"
31 heimbach 1.2 #include "optim.h"
32 heimbach 1.1
33 heimbach 1.5 C !INPUT/OUTPUT PARAMETERS:
34 heimbach 1.1 c == routine arguments ==
35     integer mythid
36    
37 heimbach 1.5 C !LOCAL VARIABLES:
38 heimbach 1.1 c == local variables ==
39    
40     integer bi,bj
41     integer i,j,k
42     integer itlo,ithi
43     integer jtlo,jthi
44     integer jmin,jmax
45     integer imin,imax
46     integer il
47    
48     logical equal
49     logical doglobalread
50     logical ladinit
51    
52     character*( 80) fnametheta
53     character*( 80) fnamesalt
54 heimbach 1.2 character*( 80) fnametr1
55 heimbach 1.3 character*( 80) fnamediffkr
56     character*( 80) fnamekapgm
57 heimbach 1.6 character*( 80) fnameefluxy
58     character*( 80) fnameefluxp
59 heimbach 1.1
60 heimbach 1.5 _RL fac
61    
62 heimbach 1.1 c == external ==
63     integer ilnblnk
64     external ilnblnk
65    
66     c == end of interface ==
67 heimbach 1.5 CEOP
68 heimbach 1.1
69     jtlo = mybylo(mythid)
70     jthi = mybyhi(mythid)
71     itlo = mybxlo(mythid)
72     ithi = mybxhi(mythid)
73     jmin = 1-oly
74     jmax = sny+oly
75     imin = 1-olx
76     imax = snx+olx
77    
78     doglobalread = .false.
79     ladinit = .false.
80    
81     equal = .true.
82    
83     if ( equal ) then
84     fac = 1. _d 0
85     else
86     fac = 0. _d 0
87     endif
88    
89     #ifdef ALLOW_THETA0_CONTROL
90     c-- Temperature field.
91     il=ilnblnk( xx_theta_file )
92     write(fnametheta(1:80),'(2a,i10.10)')
93     & xx_theta_file(1:il),'.',optimcycle
94     call active_read_xyz( fnametheta, tmpfld3d, 1,
95     & doglobalread, ladinit, optimcycle,
96     & mythid, xx_theta_dummy )
97    
98     do bj = jtlo,jthi
99     do bi = itlo,ithi
100     do k = 1,nr
101     do j = jmin,jmax
102     do i = imin,imax
103     theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
104     & fac*tmpfld3d(i,j,k,bi,bj)
105 heimbach 1.4 cph gtNm1(i,j,k,bi,bj) = gtNm1(i,j,k,bi,bj) +
106     cph & fac*tmpfld3d(i,j,k,bi,bj)
107 heimbach 1.1 enddo
108     enddo
109     enddo
110     enddo
111     enddo
112     #endif
113    
114     #ifdef ALLOW_SALT0_CONTROL
115     c-- Temperature field.
116     il=ilnblnk( xx_salt_file )
117     write(fnamesalt(1:80),'(2a,i10.10)')
118     & xx_salt_file(1:il),'.',optimcycle
119     call active_read_xyz( fnamesalt, tmpfld3d, 1,
120     & doglobalread, ladinit, optimcycle,
121     & mythid, xx_salt_dummy )
122    
123     do bj = jtlo,jthi
124     do bi = itlo,ithi
125     do k = 1,nr
126     do j = jmin,jmax
127     do i = imin,imax
128     salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +
129     & fac*tmpfld3d(i,j,k,bi,bj)
130 heimbach 1.4 cph gsNm1(i,j,k,bi,bj) = gsNm1(i,j,k,bi,bj) +
131     cph & fac*tmpfld3d(i,j,k,bi,bj)
132 heimbach 1.1 enddo
133     enddo
134     enddo
135     enddo
136     enddo
137     #endif
138    
139 heimbach 1.2 #ifdef ALLOW_TR10_CONTROL
140     c-- Temperature field.
141     il=ilnblnk( xx_tr1_file )
142     write(fnametr1(1:80),'(2a,i10.10)')
143     & xx_tr1_file(1:il),'.',optimcycle
144     call active_read_xyz( fnametr1, tmpfld3d, 1,
145     & doglobalread, ladinit, optimcycle,
146     & mythid, xx_tr1_dummy )
147    
148     do bj = jtlo,jthi
149     do bi = itlo,ithi
150     do k = 1,nr
151     do j = jmin,jmax
152     do i = imin,imax
153     tr1(i,j,k,bi,bj) = tr1(i,j,k,bi,bj) +
154     & fac*tmpfld3d(i,j,k,bi,bj)
155 heimbach 1.4 cph gtr1Nm1(i,j,k,bi,bj) = gtr1Nm1(i,j,k,bi,bj) +
156     cph & fac*tmpfld3d(i,j,k,bi,bj)
157 heimbach 1.2 enddo
158     enddo
159     enddo
160     enddo
161     enddo
162     #endif
163    
164 heimbach 1.3 #ifdef ALLOW_DIFFKR_CONTROL
165     c-- diffkr.
166     il=ilnblnk( xx_diffkr_file )
167     write(fnamediffkr(1:80),'(2a,i10.10)')
168     & xx_diffkr_file(1:il),'.',optimcycle
169     call active_read_xyz( fnamediffkr, tmpfld3d, 1,
170     & doglobalread, ladinit, optimcycle,
171     & mythid, xx_diffkr_dummy )
172     do bj = jtlo,jthi
173     do bi = itlo,ithi
174     do k = 1,nr
175     do j = jmin,jmax
176     do i = imin,imax
177     diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +
178     & tmpfld3d(i,j,k,bi,bj)
179     enddo
180     enddo
181     enddo
182     enddo
183     enddo
184     #endif
185    
186     #ifdef ALLOW_KAPGM_CONTROL
187     c-- kapgm.
188     il=ilnblnk( xx_kapgm_file )
189     write(fnamekapgm(1:80),'(2a,i10.10)')
190     & xx_kapgm_file(1:il),'.',optimcycle
191     call active_read_xyz( fnamekapgm, tmpfld3d, 1,
192     & doglobalread, ladinit, optimcycle,
193     & mythid, xx_kapgm_dummy )
194     do bj = jtlo,jthi
195     do bi = itlo,ithi
196     do k = 1,nr
197     do j = jmin,jmax
198     do i = imin,imax
199     kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +
200     & tmpfld3d(i,j,k,bi,bj)
201     enddo
202     enddo
203     enddo
204     enddo
205     enddo
206     #endif
207    
208 heimbach 1.6 #ifdef ALLOW_EFLUXY0_CONTROL
209     c-- y-component EP-flux field.
210     il=ilnblnk( xx_efluxy_file )
211     write(fnameefluxy(1:80),'(2a,i10.10)')
212     & xx_efluxy_file(1:il),'.',optimcycle
213     call active_read_xyz( fnameefluxy, tmpfld3d, 1,
214     & doglobalread, ladinit, optimcycle,
215     & mythid, xx_efluxy_dummy )
216    
217     do bj = jtlo,jthi
218     do bi = itlo,ithi
219     do k = 1,nr
220     do j = jmin,jmax
221     do i = imin,imax
222     EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
223     & - fac*tmpfld3d(i,j,k,bi,bj)
224     & *maskS(i,j,k,bi,bj)
225     cph EfluxY(i,j,k,bi,bj) = EfluxY(i,j,k,bi,bj)
226     cph & - rSphere*cosFacU(J,bi,bj)
227     cph & *fac*tmpfld3d(i,j,k,bi,bj)
228     enddo
229     enddo
230     enddo
231     enddo
232     enddo
233     #endif
234    
235     #ifdef ALLOW_EFLUXP0_CONTROL
236     c-- p-component EP-flux field.
237     il=ilnblnk( xx_efluxp_file )
238     write(fnameefluxp(1:80),'(2a,i10.10)')
239     & xx_efluxp_file(1:il),'.',optimcycle
240     call active_read_xyz( fnameefluxp, tmpfld3d, 1,
241     & doglobalread, ladinit, optimcycle,
242     & mythid, xx_efluxp_dummy )
243    
244     do bj = jtlo,jthi
245     do bi = itlo,ithi
246     do k = 1,nr
247     do j = jmin,jmax
248     do i = imin,imax
249     EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
250     & + fCori(i,j,bi,bj)
251     & *fac*tmpfld3d(i,j,k,bi,bj)
252     & *hFacV(i,j,k,bi,bj)
253     cph EfluxP(i,j,k,bi,bj) = EfluxP(i,j,k,bi,bj)
254     cph & + fCori(i,j,bi,bj)
255     cph & *rSphere*cosFacU(J,bi,bj)
256     cph & *fac*tmpfld3d(i,j,k,bi,bj)
257     enddo
258     enddo
259     enddo
260     enddo
261     enddo
262     #endif
263    
264 heimbach 1.1
265     c-- Update the tile edges.
266    
267     #ifdef ALLOW_THETA0_CONTROL
268     _EXCH_XYZ_R8( theta, mythid )
269 heimbach 1.6 cph _EXCH_XYZ_R8( gtNm1, mythid )
270 heimbach 1.1 #endif
271     #ifdef ALLOW_SALT0_CONTROL
272     _EXCH_XYZ_R8( salt, mythid )
273 heimbach 1.6 cph _EXCH_XYZ_R8( gsNm1, mythid )
274 heimbach 1.2 #endif
275     #ifdef ALLOW_TR10_CONTROL
276 heimbach 1.3 _EXCH_XYZ_R8( tr1, mythid )
277 heimbach 1.6 cph _EXCH_XYZ_R8( gTr1Nm1, mythid )
278 heimbach 1.1 #endif
279 heimbach 1.3 #ifdef ALLOW_DIFFKR_CONTROL
280     _EXCH_XYZ_R8( diffkr, mythid)
281     #endif
282     #ifdef ALLOW_KAPGM_CONTROL
283     _EXCH_XYZ_R8( kapgm, mythid)
284 heimbach 1.6 #endif
285     #ifdef ALLOW_EFLUXY0_CONTROL
286     _EXCH_XYZ_R8( EfluxY, mythid )
287     #endif
288     #ifdef ALLOW_EFLUXP0_CONTROL
289     _EXCH_XYZ_R8( EfluxP, mythid )
290 heimbach 1.3 #endif
291    
292 heimbach 1.1
293     return
294     end
295    

  ViewVC Help
Powered by ViewVC 1.1.22