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

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

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

revision 1.22 by heimbach, Mon May 14 22:02:34 2007 UTC revision 1.31 by utke, Tue Nov 18 16:47:15 2008 UTC
# Line 1  Line 1 
1  C $Header$  C $Header$
2    C $Name$
3    
4  #include "CTRL_CPPOPTIONS.h"  #include "CTRL_CPPOPTIONS.h"
5    
# Line 10  C     !INTERFACE: Line 11  C     !INTERFACE:
11  C     !DESCRIPTION: \bv  C     !DESCRIPTION: \bv
12  c     *=================================================================  c     *=================================================================
13  c     | SUBROUTINE ctrl_map_ini  c     | SUBROUTINE ctrl_map_ini
14  c     | Add the temperature, salinity, and diffusivity parts of the  c     | Add the temperature, salinity, and diffusivity parts of the
15  c     | control vector to the model state and update the tile halos.  c     | control vector to the model state and update the tile halos.
16  c     | The control vector is defined in the header file "ctrl.h".  c     | The control vector is defined in the header file "ctrl.h".
17  c     *=================================================================  c     *=================================================================
18  C     \ev  C     \ev
# Line 31  c     == global variables == Line 32  c     == global variables ==
32  #include "optim.h"  #include "optim.h"
33  #ifdef ALLOW_PTRACERS  #ifdef ALLOW_PTRACERS
34  # include "PTRACERS_SIZE.h"  # include "PTRACERS_SIZE.h"
35  # include "PTRACERS.h"  c#include "PTRACERS_PARAMS.h"
36    # include "PTRACERS_FIELDS.h"
37  #endif  #endif
38  #ifdef ALLOW_ECCO  #ifdef ALLOW_ECCO
39  # include "ecco_cost.h"  # include "ecco_cost.h"
# Line 108  c--   Temperature field. Line 110  c--   Temperature field.
110       $          tmpfld3d(i,j,k,bi,bj)=       $          tmpfld3d(i,j,k,bi,bj)=
111       $          sign(2.0/sqrt(wtheta(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))       $          sign(2.0/sqrt(wtheta(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
112  #endif  #endif
113  #ifdef ALLOW_OPENAD  #ifdef ALLOW_AUTODIFF_OPENAD
114                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
115       &                               fac*xx_theta(i,j,k,bi,bj) +       &                               fac*xx_theta(i,j,k,bi,bj) +
116       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
# Line 116  c--   Temperature field. Line 118  c--   Temperature field.
118                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +                  theta(i,j,k,bi,bj) = theta(i,j,k,bi,bj) +
119       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
120  #endif  #endif
121                  if(theta(i,j,k,bi,bj).lt.-2.0)  #ifndef DISABLE_CTRL_THETA_LIMIT
122       &               theta(i,j,k,bi,bj)= -2.0                  if(theta(i,j,k,bi,bj).lt.-2.0)
123         &               theta(i,j,k,bi,bj)= -2.0
124    #endif
125                enddo                enddo
126              enddo              enddo
127            enddo            enddo
# Line 146  c--   Temperature field. Line 150  c--   Temperature field.
150       $          tmpfld3d(i,j,k,bi,bj)=       $          tmpfld3d(i,j,k,bi,bj)=
151       $          sign(2.0/sqrt(wsalt(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))       $          sign(2.0/sqrt(wsalt(k,bi,bj)),tmpfld3d(i,j,k,bi,bj))
152  #endif  #endif
153  #ifdef ALLOW_OPENAD  #ifdef ALLOW_AUTODIFF_OPENAD
154                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +                  salt(i,j,k,bi,bj) = salt(i,j,k,bi,bj) +
155       &                               fac*xx_salt(i,j,k,bi,bj) +       &                               fac*xx_salt(i,j,k,bi,bj) +
156       &                               fac*tmpfld3d(i,j,k,bi,bj)       &                               fac*tmpfld3d(i,j,k,bi,bj)
# Line 200  c--   sst0. Line 204  c--   sst0.
204            do j = jmin,jmax            do j = jmin,jmax
205              do i = imin,imax              do i = imin,imax
206  cph              sst(i,j,bi,bj) = sst(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)  cph              sst(i,j,bi,bj) = sst(i,j,bi,bj) + tmpfld2d(i,j,bi,bj)
207                theta(i,j,1,bi,bj) = theta(i,j,1,bi,bj)                theta(i,j,1,bi,bj) = theta(i,j,1,bi,bj)
208       &                             + tmpfld2d(i,j,bi,bj)       &                             + tmpfld2d(i,j,bi,bj)
209              enddo              enddo
210            enddo            enddo
# Line 229  cph              sss(i,j,bi,bj) = sss(i, Line 233  cph              sss(i,j,bi,bj) = sss(i,
233        enddo        enddo
234  #endif  #endif
235    
236    #ifdef ALLOW_AUTODIFF
237  #ifdef ALLOW_DIFFKR_CONTROL  #ifdef ALLOW_DIFFKR_CONTROL
238  c--   diffkr.  c--   diffkr.
239        il=ilnblnk( xx_diffkr_file )        il=ilnblnk( xx_diffkr_file )
# Line 242  c--   diffkr. Line 247  c--   diffkr.
247            do k = 1,nr            do k = 1,nr
248              do j = jmin,jmax              do j = jmin,jmax
249                do i = imin,imax                do i = imin,imax
250    #ifdef ALLOW_AUTODIFF_OPENAD
251                  diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +                  diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +
252         &                                xx_diffkr(i,j,k,bi,bj) +
253       &                                tmpfld3d(i,j,k,bi,bj)       &                                tmpfld3d(i,j,k,bi,bj)
254    #else
255                    diffkr(i,j,k,bi,bj) = diffkr(i,j,k,bi,bj) +
256         &                                tmpfld3d(i,j,k,bi,bj)
257    #endif
258                enddo                enddo
259              enddo              enddo
260            enddo            enddo
261         enddo         enddo
262        enddo        enddo
263  #endif  #endif
264    #endif
265    
266    #ifdef ALLOW_AUTODIFF
267  #ifdef ALLOW_KAPGM_CONTROL  #ifdef ALLOW_KAPGM_CONTROL
268  c--   kapgm.  c--   kapgm.
269        il=ilnblnk( xx_kapgm_file )        il=ilnblnk( xx_kapgm_file )
# Line 264  c--   kapgm. Line 277  c--   kapgm.
277            do k = 1,nr            do k = 1,nr
278              do j = jmin,jmax              do j = jmin,jmax
279                do i = imin,imax                do i = imin,imax
280    #ifdef ALLOW_AUTODIFF_OPENAD
281                  kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +                  kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +
282         &                               xx_kapgm(i,j,k,bi,bj) +
283         &                               tmpfld3d(i,j,k,bi,bj)
284    #else
285                    kapgm(i,j,k,bi,bj) = kapgm(i,j,k,bi,bj) +
286         &                               tmpfld3d(i,j,k,bi,bj)
287    #endif
288                  enddo
289                enddo
290              enddo
291           enddo
292          enddo
293    #endif
294    #endif
295    
296    #ifdef ALLOW_AUTODIFF
297    #ifdef ALLOW_KAPREDI_CONTROL
298    c--   kapredi.
299          il=ilnblnk( xx_kapredi_file )
300          write(fnamegeneric(1:80),'(2a,i10.10)')
301         &     xx_kapredi_file(1:il),'.',optimcycle
302          call active_read_xyz( fnamegeneric, tmpfld3d, 1,
303         &                      doglobalread, ladinit, optimcycle,
304         &                      mythid, xx_kapredi_dummy )
305          do bj = jtlo,jthi
306            do bi = itlo,ithi
307              do k = 1,nr
308                do j = jmin,jmax
309                  do i = imin,imax
310                    kapredi(i,j,k,bi,bj) = kapredi(i,j,k,bi,bj) +
311       &                               tmpfld3d(i,j,k,bi,bj)       &                               tmpfld3d(i,j,k,bi,bj)
312                enddo                enddo
313              enddo              enddo
# Line 272  c--   kapgm. Line 315  c--   kapgm.
315         enddo         enddo
316        enddo        enddo
317  #endif  #endif
318    #endif
319    
320  #ifdef ALLOW_EFLUXY0_CONTROL  #ifdef ALLOW_EFLUXY0_CONTROL
321  c--   y-component EP-flux field.  c--   y-component EP-flux field.
# Line 341  c--   bottom drag Line 385  c--   bottom drag
385          do bi = itlo,ithi          do bi = itlo,ithi
386            do j = jmin,jmax            do j = jmin,jmax
387              do i = imin,imax              do i = imin,imax
388                bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)                bottomdragfld(i,j,bi,bj) = bottomdragfld(i,j,bi,bj)
389       &                                   + tmpfld2d(i,j,bi,bj)       &                                   + tmpfld2d(i,j,bi,bj)
390              enddo              enddo
391            enddo            enddo
# Line 349  c--   bottom drag Line 393  c--   bottom drag
393        enddo        enddo
394  #endif  #endif
395    
396  #ifdef ALLOW_EDTAUX_CONTROL  #ifdef ALLOW_EDDYPSI_CONTROL
397  c-- zonal eddy stress : edtaux  c-- zonal eddy streamfunction : eddyPsiX
398        il=ilnblnk( xx_edtaux_file )        il=ilnblnk( xx_edtaux_file )
399        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
400       &     xx_edtaux_file(1:il),'.',optimcycle       &     xx_edtaux_file(1:il),'.',optimcycle
# Line 362  c-- zonal eddy stress : edtaux Line 406  c-- zonal eddy stress : edtaux
406            do k = 1,nr            do k = 1,nr
407              do j = jmin,jmax              do j = jmin,jmax
408                do i = imin,imax                do i = imin,imax
409                  eddyTauX(i,j,k,bi,bj) = eddyTauX(i,j,k,bi,bj) +                  eddyPsiX(i,j,k,bi,bj) = eddyPsiX(i,j,k,bi,bj) +
410       &            fCori(i,j,bi,bj)*tmpfld3d(i,j,k,bi,bj)       &            tmpfld3d(i,j,k,bi,bj)
411                enddo                enddo
412              enddo              enddo
413            enddo            enddo
414         enddo         enddo
415        enddo        enddo
416  #endif  c-- meridional eddy streamfunction : eddyPsiY
   
 #ifdef ALLOW_EDTAUY_CONTROL  
 c-- meridional eddy stress : edtauy  
417        il=ilnblnk( xx_edtauy_file )        il=ilnblnk( xx_edtauy_file )
418        write(fnamegeneric(1:80),'(2a,i10.10)')        write(fnamegeneric(1:80),'(2a,i10.10)')
419       &     xx_edtauy_file(1:il),'.',optimcycle       &     xx_edtauy_file(1:il),'.',optimcycle
# Line 384  c-- meridional eddy stress : edtauy Line 425  c-- meridional eddy stress : edtauy
425            do k = 1,nr            do k = 1,nr
426              do j = jmin,jmax              do j = jmin,jmax
427                do i = imin,imax                do i = imin,imax
428                  eddyTauY(i,j,k,bi,bj) = eddyTauY(i,j,k,bi,bj) +                  eddyPsiY(i,j,k,bi,bj) = eddyPsiY(i,j,k,bi,bj) +
429       &            fCoriG(i,j,bi,bj)*tmpfld3d(i,j,k,bi,bj)       &            tmpfld3d(i,j,k,bi,bj)
430                enddo                enddo
431              enddo              enddo
432            enddo            enddo
# Line 406  c-- initial zonal velocity Line 447  c-- initial zonal velocity
447            do k = 1,nr            do k = 1,nr
448              do j = jmin,jmax              do j = jmin,jmax
449                do i = imin,imax                do i = imin,imax
450  #ifdef ALLOW_OPENAD  #ifdef ALLOW_AUTODIFF_OPENAD
451                  uVel(i,j,k,bi,bj) = uVel(i,j,k,bi,bj) +                  uVel(i,j,k,bi,bj) = uVel(i,j,k,bi,bj) +
452       &                                  fac*xx_uvel(i,j,k,bi,bj)       &                                  fac*xx_uvel(i,j,k,bi,bj)
453  #else  #else
# Line 433  c-- initial merid. velocity Line 474  c-- initial merid. velocity
474            do k = 1,nr            do k = 1,nr
475              do j = jmin,jmax              do j = jmin,jmax
476                do i = imin,imax                do i = imin,imax
477  #ifdef ALLOW_OPENAD  #ifdef ALLOW_AUTODIFF_OPENAD
478                  vVel(i,j,k,bi,bj) = vVel(i,j,k,bi,bj) +                  vVel(i,j,k,bi,bj) = vVel(i,j,k,bi,bj) +
479       &                                  fac*xx_vvel(i,j,k,bi,bj)       &                                  fac*xx_vvel(i,j,k,bi,bj)
480  #else  #else
# Line 459  c--   initial Eta. Line 500  c--   initial Eta.
500          do bi = itlo,ithi          do bi = itlo,ithi
501            do j = jmin,jmax            do j = jmin,jmax
502              do i = imin,imax              do i = imin,imax
503  #ifdef ALLOW_OPENAD  #ifdef ALLOW_AUTODIFF_OPENAD
504                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +
505       &                              fac*xx_etan(i,j,bi,bj)       &                              fac*xx_etan(i,j,bi,bj)
506  #else  #else
507                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +                etaN(i,j,bi,bj) = etaN(i,j,bi,bj) +
508       &                              fac*tmpfld2d(i,j,bi,bj)       &                              fac*tmpfld2d(i,j,bi,bj)
509  #endif  #endif
510              enddo              enddo
# Line 484  c--   SST relaxation coefficient. Line 525  c--   SST relaxation coefficient.
525          do bi = itlo,ithi          do bi = itlo,ithi
526            do j = jmin,jmax            do j = jmin,jmax
527              do i = imin,imax              do i = imin,imax
528                lambdaThetaClimRelax(i,j,bi,bj) =                lambdaThetaClimRelax(i,j,bi,bj) =
529       &              lambdaThetaClimRelax(i,j,bi,bj)       &              lambdaThetaClimRelax(i,j,bi,bj)
530       &              + tmpfld2d(i,j,bi,bj)       &              + tmpfld2d(i,j,bi,bj)
531              enddo              enddo
532            enddo            enddo
# Line 505  c--   SSS relaxation coefficient. Line 546  c--   SSS relaxation coefficient.
546          do bi = itlo,ithi          do bi = itlo,ithi
547            do j = jmin,jmax            do j = jmin,jmax
548              do i = imin,imax              do i = imin,imax
549                lambdaSaltClimRelax(i,j,bi,bj) =                lambdaSaltClimRelax(i,j,bi,bj) =
550       &              lambdaSaltClimRelax(i,j,bi,bj)       &              lambdaSaltClimRelax(i,j,bi,bj)
551       &              + tmpfld2d(i,j,bi,bj)       &              + tmpfld2d(i,j,bi,bj)
552              enddo              enddo
553            enddo            enddo
# Line 514  c--   SSS relaxation coefficient. Line 555  c--   SSS relaxation coefficient.
555        enddo        enddo
556  #endif  #endif
557    
558    #ifdef ALLOW_SEAICE
559          call seaice_ctrl_map_ini( mythid )
560    #endif
561    
562  c--   Update the tile edges.  c--   Update the tile edges.
563    
564  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))  #if (defined (ALLOW_THETA0_CONTROL) || defined (ALLOW_SST0_CONTROL))
# Line 527  c--   Update the tile edges. Line 572  c--   Update the tile edges.
572        _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,1),myThid)        _EXCH_XYZ_R8(pTracer(1-Olx,1-Oly,1,1,1,1),myThid)
573  #endif  #endif
574  #endif  #endif
575  #ifdef ALLOW_DIFFKR_CONTROL  
576    #ifdef ALLOW_AUTODIFF
577    # ifdef ALLOW_DIFFKR_CONTROL
578        _EXCH_XYZ_R8( diffkr, mythid)        _EXCH_XYZ_R8( diffkr, mythid)
579  #endif  # endif
580  #ifdef ALLOW_KAPGM_CONTROL  # ifdef ALLOW_KAPGM_CONTROL
581        _EXCH_XYZ_R8( kapgm, mythid)        _EXCH_XYZ_R8( kapgm, mythid)
582    # endif
583    # ifdef ALLOW_KAPREDI_CONTROL
584          _EXCH_XYZ_R8( kapredi, mythid)
585    # endif
586  #endif  #endif
587    
588  #ifdef ALLOW_EFLUXY0_CONTROL  #ifdef ALLOW_EFLUXY0_CONTROL
589        _EXCH_XYZ_R8( EfluxY, mythid )        _EXCH_XYZ_R8( EfluxY, mythid )
590  #endif  #endif
# Line 543  c--   Update the tile edges. Line 595  c--   Update the tile edges.
595        _EXCH_XY_R8( bottomdragfld, mythid )        _EXCH_XY_R8( bottomdragfld, mythid )
596  #endif  #endif
597    
598  #if (defined (ALLOW_EDTAUX_CONTROL) && defined (ALLOW_EDTAUY_CONTROL))  #ifdef ALLOW_EDDYPSI_CONTROL
599         CALL EXCH_UV_XYZ_RS(eddyTauX,eddyTauY,.TRUE.,myThid)         CALL EXCH_UV_XYZ_RS(eddyPsiX,eddyPsiY,.TRUE.,myThid)
 #elif (defined (ALLOW_EDTAUX_CONTROL) || defined (ALLOW_EDTAUY_CONTROL))  
        STOP 'ctrl_map_forcing: need BOTH ALLOW_EDTAU[X,Y]_CONTROL'  
600  #endif  #endif
601    
602  #ifdef ALLOW_UVEL0_CONTROL  #ifdef ALLOW_UVEL0_CONTROL

Legend:
Removed from v.1.22  
changed lines
  Added in v.1.31

  ViewVC Help
Powered by ViewVC 1.1.22