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

Diff of /MITgcm/pkg/ctrl/ctrl_pack.F

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

revision 1.2 by heimbach, Fri Jul 13 13:40:17 2001 UTC revision 1.27 by heimbach, Fri May 12 13:35:37 2006 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    C $Name$
3    
4    #include "PACKAGES_CONFIG.h"
5  #include "CTRL_CPPOPTIONS.h"  #include "CTRL_CPPOPTIONS.h"
6    
7          subroutine ctrl_pack( first, mythid )
       subroutine ctrl_pack(  
      I                      myiter,  
      I                      mytime,  
      I                      mythid  
      &                    )  
8    
9  c     ==================================================================  c     ==================================================================
10  c     SUBROUTINE ctrl_pack  c     SUBROUTINE ctrl_pack
# Line 26  c              Patrick Heimbach heimbach Line 23  c              Patrick Heimbach heimbach
23  c              - single file name convention with or without  c              - single file name convention with or without
24  c                ALLOW_ECCO_OPTIMIZATION  c                ALLOW_ECCO_OPTIMIZATION
25  c  c
26    c              G. Gebbie, added open boundary control packing,
27    c                  gebbie@mit.edu  18 -Mar- 2003
28    c
29    c              heimbach@mit.edu totally restructured 28-Oct-2003
30  c  c
31  c     ==================================================================  c     ==================================================================
32  c     SUBROUTINE ctrl_pack  c     SUBROUTINE ctrl_pack
# Line 41  c     == global variables == Line 42  c     == global variables ==
42  #include "GRID.h"  #include "GRID.h"
43    
44  #include "ctrl.h"  #include "ctrl.h"
 #include "cost.h"  
45  #include "optim.h"  #include "optim.h"
46    
47    #ifdef ALLOW_COST
48    # include "cost.h"
49    #endif
50    #ifdef ALLOW_ECCO
51    # include "ecco_cost.h"
52    #else
53    # include "ctrl_weights.h"
54    #endif
55    
56  c     == routine arguments ==  c     == routine arguments ==
57    
58        integer myiter        logical first
       _RL     mytime  
59        integer mythid        integer mythid
60    
61    #ifndef EXCLUDE_CTRL_PACK
62  c     == local variables ==  c     == local variables ==
63    
64        integer bi,bj        _RL    fcloc
65        integer ip,jp  
66        integer i,j,k        integer i, j, k
67        integer ii        integer ii
68        integer il        integer il
69        integer irec        integer irec
70        integer itlo,ithi        integer ig,jg
71        integer jtlo,jthi        integer ivartype
72        integer jmin,jmax        integer iobcs
       integer imin,imax  
73    
74        logical doglobalread        logical doglobalread
75        logical ladinit        logical ladinit
76        integer cbuffindex        integer cbuffindex
77          logical lxxadxx
78          
79        integer cunit        integer cunit
80        _RL     cbuff( snx*nsx*npx*sny*nsy*npy )        integer ictrlgrad
       _RL     globfld3d( snx,nsx,npx,sny,nsy,npy,nr )  
       _RL     globfld2d( snx,nsx,npx,sny,nsy,npy )  
       _RL     globmsk( snx,nsx,npx,sny,nsy,npy,nr )  
       _RL     tmpvar  
81    
82        character*(128) cfile        character*(128) cfile
83        character*( 80) fname        character*( 80) weighttype
   
       integer prec  
84    
85  c     == external ==  c     == external ==
86    
# Line 86  c     == external == Line 89  c     == external ==
89    
90  c     == end of interface ==  c     == end of interface ==
91    
92        prec           = precFloat64  #ifndef ALLOW_ECCO_OPTIMIZATION
93        tmpvar         = -9999. _d 0        fmin       = 0. _d 0
94    #endif
       jtlo = 1  
       jthi = nsy  
       itlo = 1  
       ithi = nsx  
       jmin = 1  
       jmax = sny  
       imin = 1  
       imax = snx  
95    
96  c--   Tiled files are used.  c--   Tiled files are used.
97        doglobalread = .false.        doglobalread = .false.
# Line 104  c--   Tiled files are used. Line 99  c--   Tiled files are used.
99  c--   Initialise adjoint variables on active files.  c--   Initialise adjoint variables on active files.
100        ladinit = .false.        ladinit = .false.
101    
102  c  c--   Initialise global buffer index
103          nbuffglobal = 0
104    
105    c--   Assign file names.
106    
107          call ctrl_set_fname(xx_theta_file, fname_theta, mythid)
108          call ctrl_set_fname(xx_salt_file, fname_salt, mythid)
109          call ctrl_set_fname(xx_hflux_file, fname_hflux, mythid)
110          call ctrl_set_fname(xx_sflux_file, fname_sflux, mythid)
111          call ctrl_set_fname(xx_tauu_file, fname_tauu, mythid)
112          call ctrl_set_fname(xx_tauv_file, fname_tauv, mythid)
113          call ctrl_set_fname(xx_atemp_file, fname_atemp, mythid)
114          call ctrl_set_fname(xx_aqh_file, fname_aqh, mythid)
115          call ctrl_set_fname(xx_precip_file, fname_precip, mythid)
116          call ctrl_set_fname(xx_swflux_file, fname_swflux, mythid)
117          call ctrl_set_fname(xx_swdown_file, fname_swdown, mythid)
118          call ctrl_set_fname(xx_uwind_file, fname_uwind, mythid)
119          call ctrl_set_fname(xx_vwind_file, fname_vwind, mythid)
120          call ctrl_set_fname(xx_obcsn_file, fname_obcsn, mythid)
121          call ctrl_set_fname(xx_obcss_file, fname_obcss, mythid)
122          call ctrl_set_fname(xx_obcsw_file, fname_obcsw, mythid)
123          call ctrl_set_fname(xx_obcse_file, fname_obcse, mythid)
124          call ctrl_set_fname(xx_diffkr_file, fname_diffkr, mythid)
125          call ctrl_set_fname(xx_kapgm_file, fname_kapgm, mythid)
126          call ctrl_set_fname(xx_tr1_file, fname_tr1, mythid)
127          call ctrl_set_fname(xx_sst_file, fname_sst, mythid)
128          call ctrl_set_fname(xx_sss_file, fname_sss, mythid)
129          call ctrl_set_fname(xx_hfacc_file, fname_hfacc, mythid)
130          call ctrl_set_fname(xx_efluxy_file, fname_efluxy, mythid)
131          call ctrl_set_fname(xx_efluxp_file, fname_efluxp, mythid)
132          call ctrl_set_fname(xx_bottomdrag_file, fname_bottomdrag, mythid)
133          call ctrl_set_fname(xx_edtaux_file, fname_edtaux, mythid)
134          call ctrl_set_fname(xx_edtauy_file, fname_edtauy, mythid)
135          call ctrl_set_fname(xx_uvel_file, fname_uvel, mythid)
136          call ctrl_set_fname(xx_vvel_file, fname_vvel, mythid)
137          call ctrl_set_fname(xx_etan_file, fname_etan, mythid)
138          call ctrl_set_fname(xx_relaxsst_file, fname_relaxsst, mythid)
139          call ctrl_set_fname(xx_relaxsss_file, fname_relaxsss, mythid)
140    
141  c--   Only the master thread will do I/O.  c--   Only the master thread will do I/O.
142        _BEGIN_MASTER( mythid )        _BEGIN_MASTER( mythid )
143    
144  c--   read global mask file        if ( first ) then
145            call MDSREADFIELD_3D_GL( "hFacC",  c     >>> Initialise control vector for optimcycle=0 <<<
146       &                           prec, 'RL', Nr, globmsk,            lxxadxx   = .TRUE.
147       &                           1,  mythid)            ictrlgrad = 1
148              fcloc     = fmin
149              write(cfile(1:128),'(4a,i4.4)')
150  c     >>> Write control vector <<<       &         ctrlname(1:9),'_',yctrlid(1:10),
151         &         yctrlpospack, optimcycle
152            call mdsfindunit( cunit, mythid )            print *, 'ph-pack: packing ', ctrlname(1:9)
153            write(cfile(1:128),'(2a,i4.4)')        else
154       &      ctrlname(1:9),'.opt',  c     >>> Write gradient vector <<<
155       &      optimcycle            lxxadxx   = .FALSE.
156              ictrlgrad = 2
157            open( cunit, file   = cfile,            fcloc     = fc
158       &                 status = 'unknown',            write(cfile(1:128),'(4a,i4.4)')
159       &                 form   = 'unformatted',       &         costname(1:9),'_',yctrlid(1:10),
160       &                 access = 'sequential'   )       &         yctrlpospack, optimcycle
161              print *, 'ph-pack: packing ', costname(1:9)
162           endif
163    
164           call mdsfindunit( cunit, mythid )
165           open( cunit, file   = cfile,
166         &      status = 'unknown',
167         &      form   = 'unformatted',
168         &      access  = 'sequential'   )
169    
170  c--       Header information.  c--       Header information.
             
171            write(cunit) nvartype            write(cunit) nvartype
172            write(cunit) nvarlength            write(cunit) nvarlength
173            write(cunit) expId            write(cunit) yctrlid
174            write(cunit) optimCycle            write(cunit) optimCycle
175            write(cunit) tmpvar            write(cunit) fc
176            write(cunit) 1  C     place holder of obsolete variable iG
           write(cunit) 1  
           write(cunit) 1  
           write(cunit) 1  
           write(cunit) (nWetcTile(1,1,k), k=1,nr)  
           write(cunit) (nWetsTile(1,1,k), k=1,nr)  
           write(cunit) (nWetwTile(1,1,k), k=1,nr)  
           write(cunit) (ncvarindex(i), i=1,maxcvars)  
           write(cunit) (ncvarrecs(i),  i=1,maxcvars)  
           write(cunit) (nx,  i=1,maxcvars)  
           write(cunit) (ny,  i=1,maxcvars)  
           write(cunit) (ncvarnrmax(i), i=1,maxcvars)  
           write(cunit) (ncvargrd(i),   i=1,maxcvars)  
           write(cunit)  
   
 #ifdef ALLOW_THETA0_CONTROL  
   
           il=ilnblnk( xx_theta_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_theta_file(1:il),'.',optimcycle  
           call MDSREADFIELD_3D_GL( fname,  
      &                          prec, 'RL', Nr, globfld3d,  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(1)  
           write(cunit) 1  
           write(cunit) 1  
           do k = 1,nr  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(wtheta(k,bi,bj))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
          enddo  
   
 #endif  
   
 #ifdef ALLOW_SALT0_CONTROL  
   
           il=ilnblnk( xx_salt_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_salt_file(1:il),'.',optimcycle  
           call MDSREADFIELD_3D_GL( fname,  
      &                          prec, 'RL', Nr, globfld3d,  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(2)  
           write(cunit) 1  
           write(cunit) 1  
           do k = 1,nr  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(wsalt(k,bi,bj))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
          enddo  
               
 #endif  
   
 #ifdef ALLOW_TR10_CONTROL  
   
           il=ilnblnk( xx_tr1_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_tr1_file(1:il),'.',optimcycle  
           call MDSREADFIELD_3D_GL( fname,  
      &                          prec, 'RL', Nr, globfld3d,  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(9)  
           write(cunit) 1  
           write(cunit) 1  
           do k = 1,nr  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 cph     &                      * sqrt(wtr1(k,bi,bj))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
          enddo  
               
 #endif  
   
 #ifdef ALLOW_HFLUX0_CONTROL  
   
           il=ilnblnk( xx_hflux_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_hflux_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "whflux",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(3)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_SFLUX0_CONTROL  
   
           il=ilnblnk( xx_sflux_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_sflux_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wsflux",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(4)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_TAUU0_CONTROL  
   
           il=ilnblnk( xx_tauu_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_tauu_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wtauu",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(5)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_TAUV0_CONTROL  
   
           il=ilnblnk( xx_tauv_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_tauv_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wtauv",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(6)  
177            write(cunit) 1            write(cunit) 1
178    C     place holder of obsolete variable jG
179            write(cunit) 1            write(cunit) 1
180            k = 1            write(cunit) nsx
181             cbuffindex = 0            write(cunit) nsy
182              do jp = 1,nPy            write(cunit) (nWetcGlobal(k), k=1,nr)
183               do bj = jtlo,jthi            write(cunit) (nWetsGlobal(k), k=1,nr)
184                do j = jmin,jmax            write(cunit) (nWetwGlobal(k), k=1,nr)
185                 do ip = 1,nPx  #ifdef ALLOW_CTRL_WETV
186                  do bi = itlo,ithi            write(cunit) (nWetvGlobal(k), k=1,nr)
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
187  #endif  #endif
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
188    
189    #ifdef ALLOW_OBCSN_CONTROL
190              write(cunit) ((nWetobcsnGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
191  #endif  #endif
192    #ifdef ALLOW_OBCSS_CONTROL
193  #ifdef ALLOW_SST0_CONTROL            write(cunit) ((nWetobcssGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
   
           il=ilnblnk( xx_sst_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_sst_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wsst",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(7)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
194  #endif  #endif
195                      endif  #ifdef ALLOW_OBCSW_CONTROL
196                   enddo            write(cunit) ((nWetobcswGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
197  #endif  #endif
198    #ifdef ALLOW_OBCSE_CONTROL
199  #ifdef ALLOW_SSS0_CONTROL            write(cunit) ((nWetobcseGlo(k,iobcs), k=1,nr),iobcs= 1,nobcs)
   
           il=ilnblnk( xx_sss_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(2a,i10.10)')  
      &         xx_sss_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wsss",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(8)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
200  #endif  #endif
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
   
           close ( cunit )  
   
         _END_MASTER( mythid )  
   
 c======================================================================  
   
 c--   read global mask file  
           call MDSREADFIELD_3D_GL( "hFacC",  
      &                           prec, 'RL', Nr, globmsk,  
      &                           1,  mythid)  
   
 c     >>> Write gradient vector <<<  
   
           call mdsfindunit( cunit, mythid )  
           write(cfile(1:128),'(2a,i4.4)')  
      &    costname(1:9),'.opt',  
      &    optimcycle  
   
           open( cunit, file   = cfile,  
      &               status = 'unknown',  
      &               form   = 'unformatted',  
      &               access  = 'sequential'   )  
   
 c--       Header information.  
           write(cunit) nvartype  
           write(cunit) nvarlength  
           write(cunit) expId  
           write(cunit) optimCycle  
           write(cunit) fc  
           write(cunit) 1  
           write(cunit) 1  
           write(cunit) 1  
           write(cunit) 1  
           write(cunit) (nWetcTile(1,1,k), k=1,nr)  
           write(cunit) (nWetsTile(1,1,k), k=1,nr)  
           write(cunit) (nWetwTile(1,1,k), k=1,nr)  
201            write(cunit) (ncvarindex(i), i=1,maxcvars)            write(cunit) (ncvarindex(i), i=1,maxcvars)
202            write(cunit) (ncvarrecs(i),  i=1,maxcvars)            write(cunit) (ncvarrecs(i),  i=1,maxcvars)
203            write(cunit) (nx,  i=1,maxcvars)            write(cunit) (ncvarxmax(i),  i=1,maxcvars)
204            write(cunit) (ny,  i=1,maxcvars)            write(cunit) (ncvarymax(i),  i=1,maxcvars)
205            write(cunit) (ncvarnrmax(i), i=1,maxcvars)            write(cunit) (ncvarnrmax(i), i=1,maxcvars)
206            write(cunit) (ncvargrd(i),   i=1,maxcvars)            write(cunit) (ncvargrd(i),   i=1,maxcvars)
207            write(cunit)            write(cunit)
208    
209  #ifdef ALLOW_THETA0_CONTROL  #ifdef ALLOW_THETA0_CONTROL
210              ivartype = 1
211            il=ilnblnk( xx_theta_file)            write(weighttype(1:80),'(80a)') ' '
212            write(fname(1:80),'(80a)') ' '            write(weighttype(1:80),'(a)') "wthetaLev"
213            write(fname(1:80),'(3a,i10.10)')            call ctrl_set_pack_xyz(
214       &         yadmark,xx_theta_file(1:il),'.',optimcycle       &         cunit, ivartype, fname_theta(ictrlgrad), "maskCtrlC",
215         &         weighttype, wtheta, lxxadxx, mythid)
           call MDSREADFIELD_3D_GL( fname,  
      &                          prec, 'RL', Nr,  
      &                          globfld3d,  
      &                          1,  mythid)  
             
           write(cunit) ncvarindex(1)  
           write(cunit) 1  
           write(cunit) 1  
           do k = 1,nr  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(wtheta(k,bi,bj))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
          enddo  
   
216  #endif  #endif
217    
218  #ifdef ALLOW_SALT0_CONTROL  #ifdef ALLOW_SALT0_CONTROL
219              ivartype = 2
220            il=ilnblnk( xx_salt_file)            write(weighttype(1:80),'(80a)') ' '
221            write(fname(1:80),'(80a)') ' '            write(weighttype(1:80),'(a)') "wsaltLev"
222            write(fname(1:80),'(3a,i10.10)')            call ctrl_set_pack_xyz(
223       &         yadmark,xx_salt_file(1:il),'.',optimcycle       &         cunit, ivartype, fname_salt(ictrlgrad), "maskCtrlC",
224         &         weighttype, wsalt, lxxadxx, mythid)
225            call MDSREADFIELD_3D_GL( fname,  #endif
226       &                          prec, 'RL', Nr,  
227       &                          globfld3d,  #if (defined (ALLOW_HFLUX_CONTROL) || defined (ALLOW_HFLUX0_CONTROL))
228       &                          1,  mythid)            ivartype = 3
229                        write(weighttype(1:80),'(80a)') ' '
230            write(cunit) ncvarindex(2)            write(weighttype(1:80),'(a)') "whflux"
231            write(cunit) 1            call ctrl_set_pack_xy(
232            write(cunit) 1       &         cunit, ivartype, fname_hflux(ictrlgrad), "maskCtrlC",
233            do k = 1,nr       &         weighttype, lxxadxx, mythid)
234             cbuffindex = 0  #endif
235              do jp = 1,nPy  
236               do bj = jtlo,jthi  #if (defined (ALLOW_SFLUX_CONTROL) || defined (ALLOW_SFLUX0_CONTROL))
237                do j = jmin,jmax            ivartype = 4
238                 do ip = 1,nPx            write(weighttype(1:80),'(80a)') ' '
239                  do bi = itlo,ithi            write(weighttype(1:80),'(a)') "wsflux"
240                   do i = imin,imax            call ctrl_set_pack_xy(
241                      if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then       &         cunit, ivartype, fname_sflux(ictrlgrad), "maskCtrlC",
242                         cbuffindex = cbuffindex + 1       &         weighttype, lxxadxx, mythid)
243  #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  #endif
244                         cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
245       &                      * sqrt(wsalt(k,bi,bj))  #if (defined (ALLOW_USTRESS_CONTROL) || defined (ALLOW_TAUU0_CONTROL))
246  #else            ivartype = 5
247                         cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)            write(weighttype(1:80),'(80a)') ' '
248  #endif            write(weighttype(1:80),'(a)') "wtauu"
249                      endif            call ctrl_set_pack_xy(
250                   enddo       &         cunit, ivartype, fname_tauu(ictrlgrad), "maskCtrlW",
251                  enddo       &         weighttype, lxxadxx, mythid)
252                 enddo  #endif
253                enddo  
254               enddo  #if (defined (ALLOW_VSTRESS_CONTROL) || defined (ALLOW_TAUV0_CONTROL))
255              enddo            ivartype = 6
256  c     --> check cbuffindex.            write(weighttype(1:80),'(80a)') ' '
257              if ( cbuffindex .gt. 0) then            write(weighttype(1:80),'(a)') "wtauv"
258                 write(cunit) cbuffindex            call ctrl_set_pack_xy(
259                 write(cunit) k       &         cunit, ivartype, fname_tauv(ictrlgrad), "maskCtrlS",
260                 write(cunit) (cbuff(ii), ii=1,cbuffindex)       &         weighttype, lxxadxx, mythid)
261              endif  #endif
262           enddo  
263    #ifdef ALLOW_ATEMP_CONTROL
264              ivartype = 7
265              write(weighttype(1:80),'(80a)') ' '
266              write(weighttype(1:80),'(a)') "watemp"
267              call ctrl_set_pack_xy(
268         &         cunit, ivartype, fname_atemp(ictrlgrad), "maskCtrlC",
269         &         weighttype, lxxadxx, mythid)
270    #endif
271    
272    #ifdef ALLOW_AQH_CONTROL
273              ivartype = 8
274              write(weighttype(1:80),'(80a)') ' '
275              write(weighttype(1:80),'(a)') "waqh"
276              call ctrl_set_pack_xy(
277         &         cunit, ivartype, fname_aqh(ictrlgrad), "maskCtrlC",
278         &         weighttype, lxxadxx, mythid)
279    #endif
280    
281    #ifdef ALLOW_UWIND_CONTROL
282              ivartype = 9
283              write(weighttype(1:80),'(80a)') ' '
284              write(weighttype(1:80),'(a)') "wuwind"
285              call ctrl_set_pack_xy(
286         &         cunit, ivartype, fname_uwind(ictrlgrad), "maskCtrlC",
287         &         weighttype, lxxadxx, mythid)
288    #endif
289    
290    #ifdef ALLOW_VWIND_CONTROL
291              ivartype = 10
292              write(weighttype(1:80),'(80a)') ' '
293              write(weighttype(1:80),'(a)') "wvwind"
294              call ctrl_set_pack_xy(
295         &         cunit, ivartype, fname_vwind(ictrlgrad), "maskCtrlC",
296         &         weighttype, lxxadxx, mythid)
297    #endif
298    
299    #ifdef ALLOW_OBCSN_CONTROL
300              ivartype = 11
301              write(weighttype(1:80),'(80a)') ' '
302              write(weighttype(1:80),'(a)') "wobcsn"
303              call ctrl_set_pack_xz(
304         &         cunit, ivartype, fname_obcsn(ictrlgrad), "maskobcsn",
305         &         weighttype, wobcsn, lxxadxx, mythid)
306    #endif
307    
308    #ifdef ALLOW_OBCSS_CONTROL
309              ivartype = 12
310              write(weighttype(1:80),'(80a)') ' '
311              write(weighttype(1:80),'(a)') "wobcss"
312              call ctrl_set_pack_xz(
313         &         cunit, ivartype, fname_obcss(ictrlgrad), "maskobcss",
314         &         weighttype, wobcss, lxxadxx, mythid)
315    #endif
316    
317    #ifdef ALLOW_OBCSW_CONTROL
318              ivartype = 13
319              write(weighttype(1:80),'(80a)') ' '
320              write(weighttype(1:80),'(a)') "wobcsw"
321              call ctrl_set_pack_yz(
322         &         cunit, ivartype, fname_obcsw(ictrlgrad), "maskobcsw",
323         &         weighttype, wobcsw, lxxadxx, mythid)
324    #endif
325    
326    #ifdef ALLOW_OBCSE_CONTROL
327              ivartype = 14
328              write(weighttype(1:80),'(80a)') ' '
329              write(weighttype(1:80),'(a)') "wobcse"
330              call ctrl_set_pack_yz(
331         &         cunit, ivartype, fname_obcse(ictrlgrad), "maskobcse",
332         &         weighttype, wobcse, lxxadxx, mythid)
333    #endif
334    
335    #ifdef ALLOW_DIFFKR_CONTROL
336              ivartype = 15
337              write(weighttype(1:80),'(80a)') ' '
338              write(weighttype(1:80),'(a)') "wdiffkr"
339              call ctrl_set_pack_xyz(
340         &         cunit, ivartype, fname_diffkr(ictrlgrad), "maskCtrlC",
341         &         weighttype, wdiffkr, lxxadxx, mythid)
342    #endif
343    
344    #ifdef ALLOW_KAPGM_CONTROL
345              ivartype = 16
346              write(weighttype(1:80),'(80a)') ' '
347              write(weighttype(1:80),'(a)') "wkapgm"
348              call ctrl_set_pack_xyz(
349         &         cunit, ivartype, fname_kapgm(ictrlgrad), "maskCtrlC",
350         &         weighttype, wkapgm, lxxadxx, mythid)
351  #endif  #endif
352    
353  #ifdef ALLOW_TR10_CONTROL  #ifdef ALLOW_TR10_CONTROL
354              ivartype = 17
355            il=ilnblnk( xx_tr1_file)            write(weighttype(1:80),'(80a)') ' '
356            write(fname(1:80),'(80a)') ' '            write(weighttype(1:80),'(a)') "wtr1"
357            write(fname(1:80),'(3a,i10.10)')            call ctrl_set_pack_xyz(
358       &         yadmark,xx_tr1_file(1:il),'.',optimcycle       &         cunit, ivartype, fname_tr1(ictrlgrad), "maskCtrlC",
359         &         weighttype, wunit, lxxadxx, mythid)
360            call MDSREADFIELD_3D_GL( fname,  #endif
361       &                          prec, 'RL', Nr,  
362       &                          globfld3d,  #if (defined (ALLOW_SST_CONTROL) || defined (ALLOW_SST0_CONTROL))
363       &                          1,  mythid)            ivartype = 18
364                        write(weighttype(1:80),'(80a)') ' '
365            write(cunit) ncvarindex(9)            write(weighttype(1:80),'(a)') "wsst"
366            write(cunit) 1            call ctrl_set_pack_xy(
367            write(cunit) 1       &         cunit, ivartype, fname_sst(ictrlgrad), "maskCtrlC",
368            do k = 1,nr       &         weighttype, lxxadxx, mythid)
369             cbuffindex = 0  #endif
370              do jp = 1,nPy  
371               do bj = jtlo,jthi  #if (defined (ALLOW_SSS_CONTROL) || defined (ALLOW_SSS0_CONTROL))
372                do j = jmin,jmax            ivartype = 19
373                 do ip = 1,nPx            write(weighttype(1:80),'(80a)') ' '
374                  do bi = itlo,ithi            write(weighttype(1:80),'(a)') "wsss"
375                   do i = imin,imax            call ctrl_set_pack_xy(
376                      if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then       &         cunit, ivartype, fname_sss(ictrlgrad), "maskCtrlC",
377                         cbuffindex = cbuffindex + 1       &         weighttype, lxxadxx, mythid)
378  #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  #endif
379                         cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
380  cph     &                      * sqrt(wtr1(k,bi,bj))  #ifdef ALLOW_HFACC_CONTROL
381  #else            ivartype = 20
382                         cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)            write(weighttype(1:80),'(80a)') ' '
383  #endif            write(weighttype(1:80),'(a)') "whfacc"
384                      endif  # ifdef ALLOW_HFACC3D_CONTROL
385                   enddo            call ctrl_set_pack_xyz(
386                  enddo       &         cunit, ivartype, fname_hfacc(ictrlgrad), "maskCtrlC",
387                 enddo       &         weighttype, wunit, lxxadxx, mythid)
388                enddo  # else
389               enddo            call ctrl_set_pack_xy(
390              enddo       &         cunit, ivartype, fname_hfacc(ictrlgrad), "maskCtrlC",
391  c     --> check cbuffindex.       &         weighttype, lxxadxx, mythid)
392              if ( cbuffindex .gt. 0) then  # endif
393                 write(cunit) cbuffindex  #endif
394                 write(cunit) k  
395                 write(cunit) (cbuff(ii), ii=1,cbuffindex)  #ifdef ALLOW_EFLUXY0_CONTROL
396              endif            ivartype = 21
397           enddo            write(weighttype(1:80),'(80a)') ' '
398              write(weighttype(1:80),'(a)') "wefluxy0"
399              call ctrl_set_pack_xyz(
400         &         cunit, ivartype, fname_efluxy(ictrlgrad), "maskCtrlS",
401         &         weighttype, wunit, lxxadxx, mythid)
402    #endif
403    
404    #ifdef ALLOW_EFLUXP0_CONTROL
405              ivartype = 22
406              write(weighttype(1:80),'(80a)') ' '
407              write(weighttype(1:80),'(a)') "wefluxp0"
408              call ctrl_set_pack_xyz(
409         &         cunit, ivartype, fname_efluxp(ictrlgrad), "maskhFacV",
410         &         weighttype, wunit, lxxadxx, mythid)
411    #endif
412    
413    #ifdef ALLOW_BOTTOMDRAG_CONTROL
414              ivartype = 23
415              write(weighttype(1:80),'(80a)') ' '
416              write(weighttype(1:80),'(a)') "wbottomdrag"
417              call ctrl_set_pack_xy(
418         &      cunit, ivartype, fname_bottomdrag(ictrlgrad), "maskCtrlC",
419         &      weighttype, lxxadxx, mythid)
420    #endif
421    
422    #ifdef ALLOW_EDTAUX_CONTROL
423              ivartype = 25
424              write(weighttype(1:80),'(80a)') ' '
425              write(weighttype(1:80),'(a)') "wedtaux"
426              call ctrl_set_pack_xyz(
427         &         cunit, ivartype, fname_edtaux(ictrlgrad), "maskCtrlW",
428         &         weighttype, wedtaux, lxxadxx, mythid)
429    #endif
430    
431    #ifdef ALLOW_EDTAUY_CONTROL
432              ivartype = 26
433              write(weighttype(1:80),'(80a)') ' '
434              write(weighttype(1:80),'(a)') "wedtauy"
435              call ctrl_set_pack_xyz(
436         &         cunit, ivartype, fname_edtauy(ictrlgrad), "maskCtrlS",
437         &         weighttype, wedtauy, lxxadxx, mythid)
438    #endif
439    
440    #ifdef ALLOW_UVEL0_CONTROL
441              ivartype = 27
442              write(weighttype(1:80),'(80a)') ' '
443              write(weighttype(1:80),'(a)') "wuvel"
444              call ctrl_set_pack_xyz(
445         &         cunit, ivartype, fname_uvel(ictrlgrad), "maskCtrlW",
446         &         weighttype, wunit, lxxadxx, mythid)
447    #endif
448    
449    #ifdef ALLOW_VVEL0_CONTROL
450              ivartype = 28
451              write(weighttype(1:80),'(80a)') ' '
452              write(weighttype(1:80),'(a)') "wvvel"
453              call ctrl_set_pack_xyz(
454         &         cunit, ivartype, fname_vvel(ictrlgrad), "maskCtrlS",
455         &         weighttype, wunit, lxxadxx, mythid)
456    #endif
457    
458    #ifdef ALLOW_ETAN0_CONTROL
459              ivartype = 29
460              write(weighttype(1:80),'(80a)') ' '
461              write(weighttype(1:80),'(a)') "wetan"
462              call ctrl_set_pack_xy(
463         &         cunit, ivartype, fname_etan(ictrlgrad), "maskCtrlC",
464         &         weighttype, lxxadxx, mythid)
465    #endif
466    
467    #ifdef ALLOW_RELAXSST_CONTROL
468              ivartype = 30
469              write(weighttype(1:80),'(80a)') ' '
470              write(weighttype(1:80),'(a)') "wrelaxsst"
471              call ctrl_set_pack_xy(
472         &         cunit, ivartype, fname_relaxsst(ictrlgrad), "maskCtrlC",
473         &         weighttype, lxxadxx, mythid)
474    #endif
475    
476    #ifdef ALLOW_RELAXSSS_CONTROL
477              ivartype = 31
478              write(weighttype(1:80),'(80a)') ' '
479              write(weighttype(1:80),'(a)') "wrelaxsss"
480              call ctrl_set_pack_xy(
481         &         cunit, ivartype, fname_relaxsss(ictrlgrad), "maskCtrlC",
482         &         weighttype, lxxadxx, mythid)
483    #endif
484    
485    #ifdef ALLOW_PRECIP_CONTROL
486              ivartype = 32
487              write(weighttype(1:80),'(80a)') ' '
488              write(weighttype(1:80),'(a)') "wprecip"
489              call ctrl_set_pack_xy(
490         &         cunit, ivartype, fname_precip(ictrlgrad), "maskCtrlC",
491         &         weighttype, lxxadxx, mythid)
492    #endif
493    
494    #ifdef ALLOW_SWFLUX_CONTROL
495              ivartype = 33
496              write(weighttype(1:80),'(80a)') ' '
497              write(weighttype(1:80),'(a)') "wswflux"
498              call ctrl_set_pack_xy(
499         &         cunit, ivartype, fname_swflux(ictrlgrad), "maskCtrlC",
500         &         weighttype, lxxadxx, mythid)
501    #endif
502    
503    #ifdef ALLOW_SWDOWN_CONTROL
504              ivartype = 34
505              write(weighttype(1:80),'(80a)') ' '
506              write(weighttype(1:80),'(a)') "wswdown"
507              call ctrl_set_pack_xy(
508         &         cunit, ivartype, fname_swdown(ictrlgrad), "maskCtrlC",
509         &         weighttype, lxxadxx, mythid)
510  #endif  #endif
511    
512  #ifdef ALLOW_HFLUX0_CONTROL            close ( cunit )
   
           il=ilnblnk( xx_hflux_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(3a,i10.10)')  
      &         yadmark,xx_hflux_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "whflux",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(3)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_SFLUX0_CONTROL  
   
           il=ilnblnk( xx_sflux_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(3a,i10.10)')  
      &         yadmark,xx_sflux_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wsflux",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(4)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_TAUU0_CONTROL  
   
           il=ilnblnk( xx_tauu_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(3a,i10.10)')  
      &         yadmark,xx_tauu_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wtauu",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(5)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_TAUV0_CONTROL  
   
           il=ilnblnk( xx_tauv_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(3a,i10.10)')  
      &         yadmark,xx_tauv_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wtauv",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(6)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_SST0_CONTROL  
   
           il=ilnblnk( xx_sst_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(3a,i10.10)')  
      &         yadmark,xx_sst_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wsst",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(7)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
   
 #endif  
   
 #ifdef ALLOW_SSS0_CONTROL  
   
           il=ilnblnk( xx_sss_file)  
           write(fname(1:80),'(80a)') ' '  
           write(fname(1:80),'(3a,i10.10)')  
      &         yadmark,xx_sss_file(1:il),'.',optimcycle  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
           call MDSREADFIELD_2D_GL( "wsss",  
      &                          prec, 'RL', 1,  
      &                          globfld2d,  
      &                          1,  mythid)  
 #endif  
           call MDSREADFIELD_2D_GL( fname,  
      &                          prec, 'RL', 1,  
      &                          globfld3d(1,1,1,1,1,1,1),  
      &                          1,  mythid)  
   
           write(cunit) ncvarindex(8)  
           write(cunit) 1  
           write(cunit) 1  
           k = 1  
            cbuffindex = 0  
             do jp = 1,nPy  
              do bj = jtlo,jthi  
               do j = jmin,jmax  
                do ip = 1,nPx  
                 do bi = itlo,ithi  
                  do i = imin,imax  
                     if (globmsk(i,bi,ip,j,bj,jp,k)  .ne. 0. ) then  
                        cbuffindex = cbuffindex + 1  
 #ifdef ALLOW_NONDIMENSIONAL_CONTROL_IO  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
      &                      * sqrt(globfld2d(i,bi,ip,j,bj,jp))  
 #else  
                        cbuff(cbuffindex) = globfld3d(i,bi,ip,j,bj,jp,k)  
 #endif  
                     endif  
                  enddo  
                 enddo  
                enddo  
               enddo  
              enddo  
             enddo  
 c     --> check cbuffindex.  
             if ( cbuffindex .gt. 0) then  
                write(cunit) cbuffindex  
                write(cunit) k  
                write(cunit) (cbuff(ii), ii=1,cbuffindex)  
             endif  
513    
514  #endif          _END_MASTER( mythid )
515    
516            close ( cunit )  #endif /* EXCLUDE_CTRL_PACK */
517    
518        return        return
519        end        end

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.27

  ViewVC Help
Powered by ViewVC 1.1.22