/[MITgcm]/MITgcm/pkg/exf/exf_mapfields.F
ViewVC logotype

Diff of /MITgcm/pkg/exf/exf_mapfields.F

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

revision 1.4 by dimitri, Sat Dec 28 10:11:11 2002 UTC revision 1.14 by heimbach, Mon Jan 2 21:17:02 2006 UTC
# Line 1  Line 1 
1  c $Header$  c $Header$
2    
3  #include "EXF_CPPOPTIONS.h"  #include "EXF_OPTIONS.h"
   
4    
5        subroutine exf_mapfields( mythid )        subroutine exf_mapfields( mythid )
6    
# Line 9  c     ================================== Line 8  c     ==================================
8  c     SUBROUTINE exf_mapfields  c     SUBROUTINE exf_mapfields
9  c     ==================================================================  c     ==================================================================
10  c  c
11  c     o Map the external forcing fields on the ocean model arrays. This  c     o Map external forcing fields (ustress, vstress, hflux, sflux,
12  c       routine is included to separate the ocean state estimation tool  c       swflux, apressure, climsss, climsst, etc.) onto ocean model
13  c       as much as possible from the ocean model. Unit conversion factors  c       arrays (fu, fv, Qnet, EmPmR, Qsw, pload, sss, sst, etc.).
14  c       are to be set by the user.  c       This routine is included to separate the ocean state estimation
15  c  c       tool as much as possible from the ocean model.  Unit and sign
16  c       The units have to be such that the individual forcing record has  c       conventions can be customized using variables exf_outscal_*,
17  c       units equal to [quantity/s]. See the header file *FFIELDS.h* of  c       which are set in exf_readparms.F.  See the header files
18  c       the MITgcmuv.  c       exf_fields.h and FFIELDS.h for definitions of the various input
19  c  c       and output fields and for default unit and sign convetions.
 c       Required units such that no scaling has to be applied:  
 c  
 c       heat flux:          input file W/m^2  
 c       salt flux:          input file m/s  
 c       zonal wind stress:  input file N/m^2  
 c       merid. wind stress: input file N/m^2  
 c  
 c       To allow for such unit conversions this routine contains scaling  
 c       factors scal_quantity.  
20  c  c
21  c     started: Christian Eckert eckert@mit.edu  09-Aug-1999  c     started: Christian Eckert eckert@mit.edu  09-Aug-1999
22  c  c
23  c     changed: Christian Eckert eckert@mit.edu  11-Jan-2000  c     changed: Christian Eckert eckert@mit.edu  11-Jan-2000
 c  
24  c              - Restructured the code in order to create a package  c              - Restructured the code in order to create a package
25  c                for the MITgcmUV.  c                for the MITgcmUV.
26  c  c
27  c              Christian Eckert eckert@mit.edu  12-Feb-2000  c              Christian Eckert eckert@mit.edu  12-Feb-2000
 c  
28  c              - Changed Routine names (package prefix: exf_)  c              - Changed Routine names (package prefix: exf_)
29  c  c
30  c              Patrick Heimbach, heimbach@mit.edu  06-May-2000  c              Patrick Heimbach, heimbach@mit.edu  06-May-2000
 c  
31  c              - added and changed CPP flag structure for  c              - added and changed CPP flag structure for
32  c                ALLOW_BULKFORMULAE, ALLOW_ATM_TEMP  c                ALLOW_BULKFORMULAE, ALLOW_ATM_TEMP
33  c  c
34  c              Patrick Heimbach, heimbach@mit.edu  23-May-2000  c              Patrick Heimbach, heimbach@mit.edu  23-May-2000
 c  
35  c              - sign change of ustress/vstress incorporated into  c              - sign change of ustress/vstress incorporated into
36  c                scaling factors scal_ust, scal_vst  c                scaling factors exf_outscal_ust, exf_outscal_vst
37  c  c
38  c              Dimitris Menemenlis, menemenlis@jpl.nasa.gov 20-Dec-2002  c     mods for pkg/seaice: menemenlis@jpl.nasa.gov 20-Dec-2002
 c  
 c              - removed: empmr(i,j,bi,bj) = scal_prc*precip(i,j,bi,bj)  
39  c  c
40  c     ==================================================================  c     ==================================================================
41  c     SUBROUTINE exf_mapfields  c     SUBROUTINE exf_mapfields
# Line 64  c     == global variables == Line 48  c     == global variables ==
48  #include "EEPARAMS.h"  #include "EEPARAMS.h"
49  #include "SIZE.h"  #include "SIZE.h"
50  #include "FFIELDS.h"  #include "FFIELDS.h"
51    #include "GRID.h"
52    
53  #include "exf_param.h"  #include "exf_param.h"
54  #include "exf_constants.h"  #include "exf_constants.h"
55  #include "exf_fields.h"  #include "exf_fields.h"
56    #include "exf_clim_param.h"
57  #include "exf_clim_fields.h"  #include "exf_clim_fields.h"
58  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
59  # include "tamc.h"  # include "tamc.h"
# Line 81  c     mythid - thread number for this in Line 68  c     mythid - thread number for this in
68  c     == local variables ==  c     == local variables ==
69    
70        integer bi,bj        integer bi,bj
71        integer i,j        integer i,j,k
72        integer jtlo        integer jtlo
73        integer jthi        integer jthi
74        integer itlo        integer itlo
# Line 120  c     == end of interface == Line 107  c     == end of interface ==
107    
108            do j = jmin,jmax            do j = jmin,jmax
109              do i = imin,imax              do i = imin,imax
110  c             Heat flux.  c            Heat flux.
111                qnet(i,j,bi,bj)  = scal_hfl*hflux(i,j,bi,bj)               qnet(i,j,bi,bj) = exf_outscal_hflux*hflux(i,j,bi,bj)
112              enddo              enddo
113            enddo            enddo
114    
115    
116            do j = jmin,jmax            do j = jmin,jmax
117              do i = imin,imax              do i = imin,imax
118  c             Salt flux.  c            Salt flux.
119                empmr(i,j,bi,bj) = scal_sfl*sflux(i,j,bi,bj)               empmr(i,j,bi,bj)= exf_outscal_sflux*sflux(i,j,bi,bj)
120              enddo              enddo
121            enddo            enddo
122    
# Line 139  CADJ STORE ustress(:,:,bi,bj) = comlev1_ Line 126  CADJ STORE ustress(:,:,bi,bj) = comlev1_
126            do j = jmin,jmax            do j = jmin,jmax
127              do i = imin,imax              do i = imin,imax
128  c             Zonal wind stress.  c             Zonal wind stress.
129                if (ustress(i,j,bi,bj).gt.2.0D0) then                if (ustress(i,j,bi,bj).gt.windstressmax) then
130                  ustress(i,j,bi,bj)=2.0D0                  ustress(i,j,bi,bj)=windstressmax
131                endif                endif
132              enddo              enddo
133            enddo            enddo
# Line 149  CADJ STORE ustress(:,:,bi,bj) = comlev1_ Line 136  CADJ STORE ustress(:,:,bi,bj) = comlev1_
136  #endif  #endif
137            do j = jmin,jmax            do j = jmin,jmax
138              do i = imin,imax              do i = imin,imax
139                if (ustress(i,j,bi,bj).lt.-2.0D0) then                if (ustress(i,j,bi,bj).lt.-windstressmax) then
140                  ustress(i,j,bi,bj)=-2.0D0                  ustress(i,j,bi,bj)=-windstressmax
141                endif                endif
142              enddo              enddo
143            enddo            enddo
144            do j = jmin,jmax            do j = jmin,jmax
145              do i = imin,imax              do i = imin+1,imax
146                fu(i,j,bi,bj)    = scal_ust*ustress(i,j,bi,bj)  #if (defined (ALLOW_BULKFORMULAE) || defined (USE_EXF_INTERPOLATION))
147    c     Shift wind stresses calculated at C-points to W/S points
148                  fu(i,j,bi,bj) = exf_outscal_ustress*
149         &              (ustress(i,j,bi,bj)+ustress(i-1,j,bi,bj))/2.*
150         &              maskW(i,j,1,bi,bj)
151    #else
152                  fu(i,j,bi,bj) = exf_outscal_ustress*ustress(i,j,bi,bj)
153    #endif
154              enddo              enddo
155            enddo            enddo
156    
# Line 166  CADJ STORE vstress(:,:,bi,bj) = comlev1_ Line 160  CADJ STORE vstress(:,:,bi,bj) = comlev1_
160            do j = jmin,jmax            do j = jmin,jmax
161              do i = imin,imax              do i = imin,imax
162  c             Meridional wind stress.  c             Meridional wind stress.
163                if (vstress(i,j,bi,bj).gt.2.0D0) then                if (vstress(i,j,bi,bj).gt.windstressmax) then
164                  vstress(i,j,bi,bj)=2.0D0                  vstress(i,j,bi,bj)=windstressmax
165                endif                endif
166              enddo              enddo
167            enddo            enddo
# Line 176  CADJ STORE vstress(:,:,bi,bj) = comlev1_ Line 170  CADJ STORE vstress(:,:,bi,bj) = comlev1_
170  #endif  #endif
171            do j = jmin,jmax            do j = jmin,jmax
172              do i = imin,imax              do i = imin,imax
173                if (vstress(i,j,bi,bj).lt.-2.0D0) then                if (vstress(i,j,bi,bj).lt.-windstressmax) then
174                  vstress(i,j,bi,bj)=-2.0D0                  vstress(i,j,bi,bj)=-windstressmax
175                endif                endif
176              enddo              enddo
177            enddo            enddo
178            do j = jmin,jmax            do j = jmin+1,jmax
179              do i = imin,imax              do i = imin,imax
180                fv(i,j,bi,bj)    = scal_vst*vstress(i,j,bi,bj)  #if (defined (ALLOW_BULKFORMULAE) || defined (USE_EXF_INTERPOLATION))
181    c     Shift wind stresses calculated at C-points to W/S points
182                  fv(i,j,bi,bj) = exf_outscal_vstress*
183         &              (vstress(i,j,bi,bj)+vstress(i,j-1,bi,bj))/2.*
184         &              maskS(i,j,1,bi,bj)
185    #else
186                  fv(i,j,bi,bj) = exf_outscal_vstress*vstress(i,j,bi,bj)
187    #endif
188              enddo              enddo
189            enddo            enddo
190    
191  #ifdef ALLOW_KPP || \  #ifdef SHORTWAVE_HEATING
  (defined (ALLOW_BULKFORMULAE) && defined (ALLOW_ATM_TEMP)))  
192  c             Short wave radiative flux.  c             Short wave radiative flux.
193            do j = jmin,jmax            do j = jmin,jmax
194              do i = imin,imax              do i = imin,imax
195                qsw(i,j,bi,bj)   = scal_swf*swflux(i,j,bi,bj)               qsw(i,j,bi,bj)  = exf_outscal_swflux*swflux(i,j,bi,bj)
196              enddo              enddo
197            enddo            enddo
198  #endif  #endif
# Line 200  c             Short wave radiative flux. Line 200  c             Short wave radiative flux.
200  #ifdef ALLOW_CLIMSST_RELAXATION  #ifdef ALLOW_CLIMSST_RELAXATION
201            do j = jmin,jmax            do j = jmin,jmax
202              do i = imin,imax              do i = imin,imax
203                sst(i,j,bi,bj)   = scal_sst*climsst(i,j,bi,bj)               sst(i,j,bi,bj)  = exf_outscal_sst*climsst(i,j,bi,bj)
204              enddo              enddo
205            enddo            enddo
206  #endif  #endif
# Line 208  c             Short wave radiative flux. Line 208  c             Short wave radiative flux.
208  #ifdef ALLOW_CLIMSSS_RELAXATION  #ifdef ALLOW_CLIMSSS_RELAXATION
209            do j = jmin,jmax            do j = jmin,jmax
210              do i = imin,imax              do i = imin,imax
211                sss(i,j,bi,bj)   = scal_sss*climsss(i,j,bi,bj)               sss(i,j,bi,bj)  = exf_outscal_sss*climsss(i,j,bi,bj)
212              enddo              enddo
213            enddo            enddo
214  #endif  #endif
# Line 216  c             Short wave radiative flux. Line 216  c             Short wave radiative flux.
216  #ifdef ATMOSPHERIC_LOADING  #ifdef ATMOSPHERIC_LOADING
217            do j = jmin,jmax            do j = jmin,jmax
218              do i = imin,imax              do i = imin,imax
219                pload(i,j,bi,bj) = scal_apressure*apressure(i,j,bi,bj)               pload(i,j,bi,bj)=exf_outscal_apressure*apressure(i,j,bi,bj)
220              enddo              enddo
221            enddo            enddo
222  #endif  #endif
223    
   
224          enddo          enddo
225        enddo        enddo
226    
# Line 232  c     Update the tile edges. Line 231  c     Update the tile edges.
231  c      _EXCH_XY_R4(    fu, mythid )  c      _EXCH_XY_R4(    fu, mythid )
232  c      _EXCH_XY_R4(    fv, mythid )  c      _EXCH_XY_R4(    fv, mythid )
233         CALL EXCH_UV_XY_RS(fu, fv, .TRUE., myThid)         CALL EXCH_UV_XY_RS(fu, fv, .TRUE., myThid)
234  #ifdef ALLOW_KPP  #ifdef SHORTWAVE_HEATING
235        _EXCH_XY_R4(   qsw, mythid )        _EXCH_XY_R4(   qsw, mythid )
236  #endif  #endif
237  #ifdef ALLOW_CLIMSST_RELAXATION  #ifdef ALLOW_CLIMSST_RELAXATION
# Line 241  c      _EXCH_XY_R4(    fv, mythid ) Line 240  c      _EXCH_XY_R4(    fv, mythid )
240  #ifdef ALLOW_CLIMSSS_RELAXATION  #ifdef ALLOW_CLIMSSS_RELAXATION
241        _EXCH_XY_R4(   sss, mythid )        _EXCH_XY_R4(   sss, mythid )
242  #endif  #endif
243    #ifdef ALLOW_CLIMTEMP_RELAXATION
244          _EXCH_XYZ_R4( thetaStar, mythid )
245    #endif
246    #ifdef ALLOW_CLIMSALT_RELAXATION
247          _EXCH_XYZ_R4( saltStar, mythid )
248    #endif
249  #ifdef ATMOSPHERIC_LOADING  #ifdef ATMOSPHERIC_LOADING
250        _EXCH_XY_R4( pload, mythid )        _EXCH_XY_R4( pload, mythid )
251  #endif  #endif

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.22